Help
RSS
API
Feed
Maltego
Contact
Domain > mosmu.se
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-06-04
18.64.247.28
(
ClassC
)
2026-01-26
3.163.24.83
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Mon, 26 Jan 2026 08:49:15 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://mosmu.se/X-Cache: Redirect from cloudfrontVia: 1.1 eb6e5a827e45274130b33c12b0d48aaa.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: Zz4hZuVXNKFArKWSWoS-oA-XSdk0jyzCDJ4vc5ddDao3umdubKFdhQ html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 11147356Connection: keep-aliveDate: Mon, 26 Jan 2026 08:49:17 GMTLast-Modified: Mon, 26 Jan 2026 03:55:42 GMTETag: ce0c21c0f14661bff1d5841ce85c31f0-2x-amz-server-side-encryption: AES256Accept-Ranges: bytesServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 d220e3f3d93439a8c69225156c6ae800.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P2X-Amz-Cf-Id: uwNNaFkrzSNO-gKkrNbwXnwECsORaSbi7vixsuP41eRabC3U9pHOPA !doctype html>!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->!-- saved from url(0021)https://tiddlywiki.com -->html langen-GB>head>meta http-equivContent-Type contenttext/html;charsetutf-8 />!--~~ Raw markup for the top of the head section ~~-->meta http-equivX-UA-Compatible contentIEEdge/>meta nameapplication-name contentTiddlyWiki />meta namegenerator contentTiddlyWiki />meta nametiddlywiki-version content5.3.8 />meta nameviewport contentwidthdevice-width, initial-scale1.0 />meta nameapple-mobile-web-app-capable contentyes />meta nameapple-mobile-web-app-status-bar-style contentblack-translucent />meta namemobile-web-app-capable contentyes/>meta nameformat-detection contenttelephoneno />meta namecopyright contentTiddlyWiki created by Jeremy Ruston, (jeremy at jermolene dot com)Copyright (c) 2004-2007, Jeremy RustonCopyright (c) 2007-2025, UnaMesa AssociationAll rights reserved.Redistribution and use in source and binary forms, with or withoutmodification, 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 the copyright holder 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 ISAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLEFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIALDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ORSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USEOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. />link idfaviconLink relshortcut icon hreffavicon.ico>title>Mosaic Muse — Soren Bjornstads public notes/title>!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->!--~~ Raw markup ~~-->!--This snippet sends pageviews to Simple Analytics, a privacy-friendly analytics service.It records only aggregate statistics and cannot identify you.-->script>window.sa_eventwindow.sa_event||function(){a.slice.call(arguments);sa_event.q?sa_event.q.push(a):sa_event.qa};/script>script async defer srchttps://scripts.simpleanalyticscdn.com/latest.js>/script>noscript>img srchttps://queue.simpleanalyticscdn.com/noscript.gif alt/>/noscript>meta namedescription contentSoren Bjornstads public notes>meta propertyog:title contentMosaic Muse>meta propertyog:description contentSoren Bjornstads public notes>meta nametwitter:title contentMosaic Muse>meta nametwitter:description contentSoren Bjornstads public notes>/head>body classtc-body>!--~~ Raw markup for the top of the body section ~~-->!-- Spinner mechanism shamelessly stolen from https://tiddlywiki.org. -->div classtc-remove-when-wiki-loaded>style scoped>.tc-splash-text { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; font-size: 16px; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; margin: 20px auto 0; width: 200px; text-align: center; color: #333353; fill: #333353;}.tc-splash-text img { width: 150px; -webkit-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5); -moz-box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5); box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);}html body.tc-body { background: #ddddff;}/*Spinner from https://github.com/tobiasahlin/SpinKit/ by Tobias AhlinThe MIT License (MIT)Copyright (c) 2015 Tobias AhlinPermission is hereby granted, free of charge, to any person obtaining a copy ofthis software and associated documentation files (the Software), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,subject to the following conditions:The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS ORCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/.tc-splash-spinner { margin: 20px auto 0; width: 70px; text-align: center;}.tc-splash-spinner > div { width: 18px; height: 18px; border-radius: 100%; display: inline-block; -webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both; animation: sk-bouncedelay 1.4s infinite ease-in-out both; background-color: #f88;}.tc-splash-spinner .tc-splash-bounce-1 { -webkit-animation-delay: -0.32s; animation-delay: -0.32s; background-color: #8f8;}.tc-splash-spinner .tc-splash-bounce-2 { -webkit-animation-delay: -0.16s; animation-delay: -0.16s; background-color: #88f;}@-webkit-keyframes sk-bouncedelay { 0%, 80%, 100% { -webkit-transform: scale(0) } 40% { -webkit-transform: scale(1.0) }}@keyframes sk-bouncedelay { 0%, 80%, 100% { -webkit-transform: scale(0); transform: scale(0); } 40% { -webkit-transform: scale(1.0); transform: scale(1.0); }}/style>div classtc-splash-spinner> div classtc-splash-bounce-1>/div> div classtc-splash-bounce-2>/div> div classtc-splash-bounce-3>/div>/div>div classtc-splash-text> Just a moment while I dig the dungeon.../div>/div>!--~~ Static styles ~~-->div idstyleArea>style data-tiddler-title$:/boot/boot.css data-tiddler-typetext/css typetext/css>/*Basic styles used before we boot up the parsing engine*//*Error message and password prompt*/.tc-error-form { font-family: sans-serif; color: #fff; z-index: 20000; position: fixed; background-color: rgb(255, 75, 75); border: 8px solid rgb(255, 0, 0); border-radius: 8px; width: 50%; margin-left: 25%; margin-top: 4em; padding: 0 2em 1em 2em;}.tc-error-form h1 { text-align: center;}.tc-error-prompt { text-align: center; color: #000;}.tc-error-message { overflow: auto; max-height: 40em; padding-right: 1em; margin: 1em 0; white-space: pre-line;}.tc-password-wrapper { font-family: sans-serif; z-index: 20000; position: fixed; text-align: center; width: 200px; top: 4em; left: 50%; margin-left: -144px; /* - width/2 - paddingHorz/2 - border */ padding: 16px 16px 16px 16px; border-radius: 8px;}.tc-password-wrapper { color: #000; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); background-color: rgb(197, 235, 183); border: 8px solid rgb(164, 197, 152);}.tc-password-wrapper form { text-align: left;}.tc-password-wrapper h1 { font-size: 16px; line-height: 20px; padding-bottom: 16px;}.tc-password-wrapper input { width: 100%;}/style>/div>!--~~ Static content for Google and browsers without JavaScript ~~-->noscript>div idsplashArea>p>This a classtc-tiddlylink-external hrefhttps://tiddlywiki.com relnoopener noreferrer target_blank>TiddlyWiki/a> contains the following tiddlers:/p>p>ul>li>$:/config/AnimationDuration/li>li>$:/config/bimlas/locator/fields/parent/li>li>$:/config/bj/Calendar.json/li>li>$:/config/codemirror/keyMap/li>li>$:/config/codemirror/theme/li>li>$:/config/DefaultSidebarTab/li>li>$:/config/DownloadSaver/AutoSave/li>li>$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/do-thing/li>li>$:/config/EditTabIndex/li>li>$:/config/FileSystemPaths/li>li>$:/config/flibbles/relink/fields/author/li>li>$:/config/flibbles/relink/fields/bibliography/li>li>$:/config/flibbles/relink/fields/condition/li>li>$:/config/flibbles/relink/fields/description/li>li>$:/config/flibbles/relink/fields/dropdown/li>li>$:/config/flibbles/relink/fields/entrypoint/li>li>$:/config/flibbles/relink/fields/memberof/li>li>$:/config/flibbles/relink/fields/participants/li>li>$:/config/flibbles/relink/fields/people/li>li>$:/config/flibbles/relink/fields/places/li>li>$:/config/flibbles/relink/fields/ri-date-goal/li>li>$:/config/flibbles/relink/fields/ri-date-resolved/li>li>$:/config/flibbles/relink/fields/ri-date-summary/li>li>$:/config/flibbles/relink/fields/ri-date-with/li>li>$:/config/flibbles/relink/fields/ri-source/li>li>$:/config/flibbles/relink/fields/spouse/li>li>$:/config/flibbles/relink/fields/universe/li>li>$:/config/flibbles/relink/macros/expando/tiddler/li>li>$:/config/flibbles/relink/macros/fnote/note/li>li>$:/config/flibbles/relink/macros/jsub/subpart/li>li>$:/config/flibbles/relink/macros/stretch-links/filter/li>li>$:/config/flibbles/relink/macros/stretch-template-links/filter/li>li>$:/config/flibbles/relink/macros/stretch-template-links/largeTemplate/li>li>$:/config/flibbles/relink/macros/stretch-template-links/smallTemplate/li>li>$:/config/flibbles/relink/macros/stretch-template/largeTemplate/li>li>$:/config/flibbles/relink/macros/stretch-template/smallTemplate/li>li>$:/config/flibbles/relink/macros/stretch-template/tiddler/li>li>$:/config/flibbles/relink/macros/stretch/tiddler/li>li>$:/config/flibbles/relink/macros/summarize/tiddler/li>li>$:/config/Manager/Filter/li>li>$:/config/Manager/Show/li>li>$:/config/Manager/Sort/li>li>$:/config/Manager/System/li>li>$:/config/Manager/Tag/li>li>$:/config/Navigation/UpdateAddressBar/li>li>$:/config/NewJournal/Title/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/control-panel/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-tiddler/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/save-wiki/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager/li>li>$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp/li>li>$:/config/PageControlButtons/Visibility/$:/plugins/aaldrich/tables/button/li>li>$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewDate/li>li>$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewSource/li>li>$:/config/PageControlButtons/Visibility/$:/sib/Buttons/ReadingInbox/li>li>$:/config/PageControlButtons/Visibility/$:/sib/NewSourceButton/li>li>$:/config/Performance/Instrumentation/li>li>$:/config/Plugins/Disabled/$:/plugins/adithyab/cmplus/li>li>$:/config/Plugins/Disabled/$:/plugins/bimlas/locator/li>li>$:/config/Plugins/Disabled/$:/plugins/flibbles/relink/li>li>$:/config/Plugins/Disabled/$:/plugins/frd/simplecalendar/li>li>$:/config/Plugins/Disabled/$:/plugins/kantorsite/mathjax/li>li>$:/config/Plugins/Disabled/$:/plugins/kixam/datepicker/li>li>$:/config/Plugins/Disabled/$:/plugins/kixam/moment/li>li>$:/config/Plugins/Disabled/$:/plugins/kookma/refnotes/li>li>$:/config/Plugins/Disabled/$:/plugins/MaxGyver83/tw5-keyboard-navigation/li>li>$:/config/Plugins/Disabled/$:/plugins/sk/FancyQuotes/li>li>$:/config/Plugins/Disabled/$:/plugins/sobjornstad/3click2edit/li>li>$:/config/Plugins/Disabled/$:/plugins/sycom/leaflet/li>li>$:/config/Plugins/Disabled/$:/plugins/telmiger/details/li>li>$:/config/Plugins/Disabled/$:/plugins/TheDiveO/FontAwesome/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-autocomplete/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-closebrackets/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-keymap-vim/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-search-replace/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight/li>li>$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/katex/li>li>$:/config/PublicContactInfo/li>li>$:/config/RelinkOnRename/li>li>$:/config/ShortcutInfo/excise-private-chunk/li>li>$:/config/shortcuts-mac/save-tiddler/li>li>$:/config/shortcuts-not-mac/save-tiddler/li>li>$:/config/shortcuts/cancel-edit-tiddler/li>li>$:/config/shortcuts/excise-private-chunk/li>li>$:/config/shortcuts/save-tiddler/li>li>$:/config/shortcuts/sidebar-search/li>li>$:/config/sib/CurrentEditionPublicity/li>li>$:/config/sib/IsPublicEdition/li>li>$:/config/sib/TopBarHeight/li>li>$:/config/sobjornstad/AccessCode/li>li>$:/config/sobjornstad/PublicZettelkastenUrl/li>li>$:/config/sobjornstad/UserEmail/li>li>$:/config/TiddlerInfo/Mode/li>li>$:/config/Tiddlers/TitleLinks/li>li>$:/config/TiddlyRemember/TagMapping/li>li>$:/config/TimestampDisable/li>li>$:/config/Toolbar/ButtonClass/li>li>$:/config/Toolbar/Text/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here/li>li>$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink/li>li>$:/config/ViewToolbarButtons/Visibility/$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar/li>li>$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyTitleReference/li>li>$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyTitleReference/li>li>$:/config/ViewToolbarButtons/Visibility/$:/tzk/Buttons/CopyPublicZettelkastenLink/li>li>$:/config/ViewToolbarButtons/Visibility/$:/tzk/Buttons/CopyTitleReference/li>li>$:/config/ViewToolbarButtons/Visibility/DoCopyTitleReference/li>li>$:/config/WikiParserRules/Inline/dash/li>li>$:/config/WikiParserRules/Inline/wikilink/li>li>$:/config/zettelkasten/copyright/Content/li>li>$:/config/zettelkasten/copyright/InitialNotice/li>li>$:/config/zettelkasten/copyright/MIT/li>li>$:/config/zettelkasten/copyright/System/li>li>$:/config/zettelkasten/copyright/UserNotice/li>li>$:/config/zettelkasten/FeatureFlags/Clock/li>li>$:/config/zettelkasten/FeatureFlags/ContactButtons/li>li>$:/config/zettelkasten/FeatureFlags/CopyrightFooter/li>li>$:/config/zettelkasten/FeatureFlags/EditorPublicLine/li>li>$:/config/zettelkasten/FeatureFlags/EpistemicStatus/li>li>$:/config/zettelkasten/FeatureFlags/GisTools/li>li>$:/config/zettelkasten/FeatureFlags/MarkStaleUpdated/li>li>$:/config/zettelkasten/FeatureFlags/MediaRating/li>li>$:/config/zettelkasten/FeatureFlags/MicrolinkMetadataLine/li>li>$:/config/zettelkasten/FeatureFlags/OpenTopBar/li>li>$:/config/zettelkasten/FeatureFlags/SidebarInfoLinks/li>li>$:/config/zettelkasten/FeatureFlags/SpoilerBanner/li>li>$:/config/zettelkasten/FeatureFlags/ViewerPublicLine/li>li>$:/config/zettelkasten/GettingStartedWizardCurr/li>li>$:/config/zettelkasten/gis/GMapsApiKey/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/More/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Open/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Recent/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Tools/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/plugins/bj/calendar/sidbar/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/plugins/kookma/refnotes/ui/bibtexlibrary/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Explore/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Write/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/tzk/SideBar/Explore/li>li>$:/config/zettelkasten/SideBar/Visibility/$:/tzk/SideBar/Write/li>li>$:/config/zettelkasten/SplashScreenMessage/li>li>$:/core/li>li>$:/core/Filters/AllTags/li>li>$:/core/macros/tag-picker/li>li>$:/core/modules/editor-operations/text/fancyquotes.js/li>li>$:/core/templates/canonical-uri-external-image/li>li>$:/core/ui/DefaultSearchResultList/li>li>$:/core/ui/EditorToolbar/linkify/li>li>$:/core/ui/EditorToolbar/transcludify/li>li>$:/core/ui/MoreSideBar/Recent/li>li>$:/core/ui/SideBar/Open/li>li>$:/core/ui/SideBar/Recent/li>li>$:/core/ui/SideBarSegments/tabs/li>li>$:/core/ui/TiddlerIcon/li>li>$:/core/ui/ViewTemplate/subtitle/li>li>$:/core/ui/ViewTemplate/title/default/li>li>$:/DefaultTiddlers/li>li>$:/favicon.ico/li>li>$:/Import/li>li>$:/inmysocks/macros/day-diff.js/li>li>$:/isEncrypted/li>li>$:/language/Snippets/FunctionDefinition/li>li>$:/language/Snippets/ListByTag/li>li>$:/language/Snippets/MacroDefinition/li>li>$:/language/Snippets/ProcedureDefinition/li>li>$:/language/Snippets/Table4x3/li>li>$:/language/Snippets/TableOfContents/li>li>$:/layout/li>li>$:/palette/li>li>$:/palettes/BlueZettel/li>li>$:/plugins/aaldrich/tables/li>li>$:/plugins/adithyab/cmplus/li>li>$:/plugins/bimlas/locator/li>li>$:/plugins/bj/Calendar/li>li>$:/plugins/flibbles/relink/li>li>$:/plugins/frd/simplecalendar/CalendarConfigDefault/li>li>$:/plugins/hoelzro/full-text-search/li>li>$:/plugins/hoelzro/progress-bar/li>li>$:/plugins/ihm/tidgraph/li>li>$:/plugins/kixam/datepicker/li>li>$:/plugins/kixam/moment/li>li>$:/plugins/kookma/refnotes/styles/footnote-counter/li>li>$:/plugins/mklauber/shuffle/li>li>$:/plugins/sobjornstad/TiddlyRemember/li>li>$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz/li>li>$:/plugins/sobjornstad/TiddlyStretch/li>li>$:/plugins/sobjornstad/TiddlyStretch/macros/stretch/li>li>$:/plugins/sycom/leaflet/li>li>$:/plugins/telmiger/details/li>li>$:/plugins/telmiger/details/colours.css/li>li>$:/plugins/TheDiveO/FontAwesome/li>li>$:/plugins/TheDiveO/FontAwesome/styles/extlinks/li>li>$:/plugins/TheDiveO/FontAwesome/styles/extlinks/mailto/li>li>$:/plugins/TheDiveO/FontAwesome/styles/extlinks/randomthoughts/li>li>$:/plugins/TheDiveO/FontAwesome/styles/extlinks/soren/li>li>$:/plugins/tiddlywiki/codemirror/li>li>$:/plugins/tiddlywiki/codemirror-autocomplete/li>li>$:/plugins/tiddlywiki/codemirror-closebrackets/li>li>$:/plugins/tiddlywiki/codemirror-keymap-vim/li>li>$:/plugins/tiddlywiki/codemirror-search-replace/li>li>$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js2/li>li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css/li>li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css2/li>li>$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js2/li>li>$:/plugins/tiddlywiki/highlight/li>li>$:/plugins/tiddlywiki/katex/li>li>$:/plugins/tobibeer/appear/li>li>$:/plugins/tobibeer/preview/li>li>$:/plugins/tobibeer/preview/defaults/delay/li>li>$:/plugins/tobibeer/preview/defaults/exclude/li>li>$:/plugins/tobibeer/preview/defaults/keys/li>li>$:/plugins/tobibeer/preview/template/li>li>$:/plugins/tzk/li>li>$:/sib/Buttons/NewDate/li>li>$:/sib/Buttons/Tools/li>li>$:/sib/indite/ChildListItemTemplate/li>li>$:/sib/indite/InditeChildren/li>li>$:/sib/indite/macros/li>li>$:/sib/indite/Sidebar/li>li>$:/sib/indite/Stylesheet/li>li>$:/sib/indite/ViewTemplate/li>li>$:/sib/Macros/unote/li>li>$:/sib/Procedures/_delta-interest/li>li>$:/sib/Procedures/ap/li>li>$:/sib/Procedures/cb/li>li>$:/sib/Procedures/colorsplotch/li>li>$:/sib/Procedures/rt/li>li>$:/sib/RawMarkup/SimpleAnalytics/li>li>$:/sib/refexplorer/RT/li>li>$:/sib/Savers/microlinks/li>li>$:/sib/SideBar/Dates/li>li>$:/sib/SideBar/InfoLinks/li>li>$:/sib/SideBar/WeeklyReflections/li>li>$:/sib/Templates/Automatic/Date/li>li>$:/sib/Templates/Automatic/Event/li>li>$:/sib/Templates/Automatic/ReaderActions/li>li>$:/sib/Templates/Automatic/RomanticInterest/li>li>$:/sib/Templates/Export/SabbaticalUpdateCabCrosspost/li>li>$:/sib/Templates/TableColumns/ThanksgivingDate/li>li>$:/sib/Templates/Topical/AnkiPattern/li>li>$:/sib/Templates/Topical/AnkiPattern/Common/li>li>$:/sib/Templates/Topical/AnkiPattern/Edit/li>li>$:/sib/Templates/Topical/AnkiPattern/View/li>li>$:/sib/Templates/Topical/Build2020SessionDetails/li>li>$:/sib/Templates/Topical/DateSummaryStretch/li>li>$:/sib/Templates/Topical/DatesWithRomanticInterestSidebarTab/li>li>$:/sib/Templates/Topical/MaudWikiImport/li>li>$:/sib/Templates/Topical/MinnesotaStateParkInfo/li>li>$:/sib/Templates/Topical/RiStatusLine/li>li>$:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation/li>li>$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten/li>li>$:/sib/Templates/Topical/WhoIAmTab/li>li>$:/sib/Timeline/EventIcon/li>li>$:/sib/Timeline/EventTypeDb/li>li>$:/sib/Tools/EventEditor/li>li>$:/sib/Tools/PaletteBrowser/li>li>$:/SiteSubtitle/li>li>$:/SiteTitle/li>li>$:/status/RequireReloadDueToPluginChange/li>li>$:/StoryList/li>li>$:/tags/EditorToolbar/li>li>$:/tags/EditTemplate/li>li>$:/tags/PageTemplate/li>li>$:/tags/ReferenceExplorerTab/li>li>$:/tags/SideBar/li>li>$:/tags/Stylesheet/li>li>$:/tags/TiddlerIconFilter/li>li>$:/tags/ViewTemplate/li>li>$:/TagSaver/li>li>$:/Templates/Automatic/TiddlerTypeIconFa/li>li>$:/theme/li>li>$:/themes/tiddlywiki/snowwhite/li>li>$:/themes/tiddlywiki/vanilla/li>li>$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize/li>li>$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint/li>li>$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth/li>li>$:/themes/tiddlywiki/vanilla/metrics/storyright/li>li>$:/themes/tiddlywiki/vanilla/metrics/storywidth/li>li>$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth/li>li>$:/themes/tiddlywiki/vanilla/options/sidebarlayout/li>li>$:/themes/tiddlywiki/vanilla/options/stickytitles/li>li>$:/themes/tiddlywiki/vanilla/settings/backgroundimage/li>li>$:/themes/tiddlywiki/vanilla/settings/codefontfamily/li>li>$:/themes/tiddlywiki/vanilla/settings/editorfontfamily/li>li>$:/themes/tiddlywiki/vanilla/settings/fontfamily/li>li>$:/themes/tiddlywiki/vanilla/sticky/li>li>$:/tzk/AutoRefresh/li>li>$:/tzk/boot-id/li>li>$:/tzk/SideBar/Journal/li>li>$:/tzk/Templates/Topical/ReadingList/Rating/li>li>2021-sabbatical-spending-totals.png/li>li>2024AreasOfExploration/li>li>AbbreviationDefinitionPattern/li>li>AbbreviationDefinitionPattern/Advantages/li>li>AbbreviationDefinitionPattern/Cautions/li>li>AbbreviationDefinitionPattern/Contributors/li>li>AbbreviationDefinitionPattern/Disadvantages/li>li>AbbreviationDefinitionPattern/Examples/li>li>AbbreviationDefinitionPattern/Formula/li>li>AbbreviationDefinitionPattern/UsageNotes/li>li>AberdeenWashington/li>li>AbileneParadox/li>li>Abilify/li>li>AbstractAndConcreteThinking/li>li>AbstractionsLeak/li>li>ABTest/li>li>ACapellaPitchDrifting/li>li>Accelerate2018/li>li>AccidentsMakeTheWorldGoRound/li>li>AcmQueue/li>li>ACompleteDefinitionOfBadness/li>li>ActiveLearning/li>li>ActivityPlasticity/li>li>ActualRequirements/li>li>AdagioOolongSampler/li>li>AddAnotherRule/li>li>AddictiveDesign/li>li>ADefenseOfNonsense/li>li>ADHD/li>li>AdjacentPossible/li>li>AdministrativeDebris/li>li>AdministrativeDebris2008/li>li>AdmiralCloudberg/li>li>AdobeInDesign/li>li>AdventureDefined/li>li>AdventuresOfHuckleberryFinn1884/li>li>AdventuresOfIdeas1967/li>li>AdversarialNeuralNetworks/li>li>Aeon/li>li>AgainstInterpretation1966/li>li>AgileDeclineEffect/li>li>AgileFallbacks/li>li>AgileHumility/li>li>AgileInTheRealWorld/li>li>AgilePhilosophy/li>li>AGroupIsItsOwnWorstEnemy200304/li>li>AiContinuation/li>li>AiFlashcardsGenerationShortcut/li>li>AiPinball20200519/li>li>AirBnb/li>li>AirTag/li>li>Albany/li>li>AlbertLea/li>li>AlburghDunesStatePark/li>li>AlburghVermont/li>li>AlcoholicsDontHaveAlcohol/li>li>AlexanderTechnique/li>li>AliceInWonderland/li>li>AllMapsLie/li>li>AllWhoAreWeary/li>li>AlmModel/li>li>AlternateAndAlternative/li>li>AlternativeFacts/li>li>AlwaysSometimesNeverPattern/li>li>AlwaysSometimesNeverPattern/Advantages/li>li>AlwaysSometimesNeverPattern/Cautions/li>li>AlwaysSometimesNeverPattern/Contributors/li>li>AlwaysSometimesNeverPattern/Disadvantages/li>li>AlwaysSometimesNeverPattern/Examples/li>li>AlwaysSometimesNeverPattern/Formula/li>li>AlwaysSometimesNeverPattern/UsageNotes/li>li>AlwaysUnderpromiseAndOverdeliver/li>li>AmateurAdvantage/li>li>AmazinglyAwesomeFriend/li>li>AmazonWebServices/li>li>Ambassadors1903/li>li>AmberSpyglass/li>li>American1877/li>li>AmericanRevolution/li>li>ampersand-hierarchy.jpg/li>li>Amsterdam/li>li>AmsterdamBarAndHall/li>li>AmtrakTips/li>li>AmusingOurselvesToDeath1985/li>li>AnalogLove2023/li>li>AnalysisParalysis/li>li>AnatomyOfMelancholy/li>li>AndTheBandPlayedOn1987/li>li>AndyMatuschakNotes/li>li>Anecdote/li>li>AngelasAshes1996/li>li>Anki/li>li>AnkiBibliography/li>li>AnkiCardAdditionProcess/li>li>AnkiCardPatterns/li>li>AnkiCardPatternsBackstage/li>li>AnkiCardQuality/li>li>AnkiCatchingUp/li>li>AnkiDebtPlan/li>li>AnkiLeeches/li>li>AnkiLesson/li>li>AnkiLifetimeCardCost/li>li>AnkiMaintenanceSteps/li>li>AnkiMobile/li>li>AnkiOverfitting/li>li>AnkiSrGlossary/li>li>AnkiStartingGuidelines/li>li>AnkiTagPlan/li>li>AnkiWeb/li>li>AnkiWowFactor/li>li>AnkiZettelkastenIsomorphism/li>li>AnkiZettelkastenRelationship/li>li>AnnaKarenina/li>li>AnnArborMichigan/li>li>annie-on-the-shore.jpg/li>li>annie.png/li>li>Anosmia/li>li>AntelopeIslandStatePark/li>li>Antidebt/li>li>AntiFragile2012/li>li>AntiFragility/li>li>AntifragilityByCuration/li>li>Antimoney/li>li>AntiquesBelAir/li>li>AntonyAndCleopatra/li>li>AnyBenefitMindset/li>li>AnyHarmMindset/li>li>AppalachianTrail/li>li>AppearancesOverReality/li>li>AppleNotes/li>li>AppropriateTechnology/li>li>AreaOfAcquaintance/li>li>AreaOfFocus/li>li>AreaOfIgnorance/li>li>ArendtGreatLeveler/li>li>ArendtPandemic/li>li>AreYouAwake/li>li>ArmTemplates20200520/li>li>arrival-diagram.png/li>li>Arrival2016/li>li>ArtificialGeneralIntelligence/li>li>ArtificialIntelligence/li>li>ArtificialZero/li>li>ArtOfMemory1966/li>li>ArtOfNamingFiles/li>li>ArtOfPersonalIndexing/li>li>ArtOfWar/li>li>AScannerDarkly/li>li>AsciiDoc/li>li>ASeriousMan/li>li>Asexuality/li>li>AsILayDying1930/li>li>AskScottGuthrie20200520/li>li>AsLongAsLoveShallLast/li>li>ASMAD/li>li>AsMuchAsNeededAndAsLittleAsPossible/li>li>AssistiveTechForColorblindness/li>li>AstonishingExistence/li>li>AstoriaMeglerBridge/li>li>AstralCodexTen/li>li>AsWeMayThink1945/li>li>AsYouLikeIt/li>li>AtlasShrugged1957/li>li>Attachment/li>li>AttentionEspeciallyToIncidentalDetails/li>li>attopublish/li>li>AttractivenessAsymmetry/li>li>AuditedTyping/li>li>AugmentationVsAutomation/li>li>AugmentingLongTermMemory201807/li>li>AugspurgerMountainTrail/li>li>AureliusMeditations/li>li>AusterGhosts/li>li>AustinMinnesota/li>li>Australia/li>li>AutobiographyOfMalcolmX1965/li>li>AutobiographyOfRed/li>li>Autofocus/li>li>AutomationIsExecutableDocumentation/li>li>AvoidOverreading/li>li>AvoidScale/li>li>AwkwardAnnie/li>li>AxesOfReality/li>li>Azure/li>li>AzureFunctions/li>li>AzureSecurityForDevs20200521/li>li>AzureStaticWebApps/li>li>BaconEssays/li>li>BadAzureAdministratorCourse/li>li>BadCable/li>li>BagOrdinance/li>li>BainbridgeIsland/li>li>Bali/li>li>BaliPackingListRetrospective/li>li>BangkokThailand/li>li>BanTargetedAdvertising/li>li>Bash/li>li>BASIC/li>li>BasicLearningFoundation/li>li>BasilicaOfStMary/li>li>BatchSize/li>li>BathroomRule/li>li>BattleForWesnoth/li>li>Baudolino/li>li>BayCityOregon/li>li>BdeMakaSka/li>li>BDFL/li>li>BearingFalseWitness/li>li>BeautifulMess/li>li>BeaverCreekValley/li>li>BeaverCreekValley/Amenities/li>li>BeaverCreekValley/Travel/li>li>BebeZito/li>li>BeBold/li>li>BedOfProcrustes2010/li>li>BehaviorDesign/li>li>BehindTheName/li>li>BeingAndNothingness1943/li>li>BeingAsexual2019/li>li>BeingJohnMalkovich1999/li>li>BeliefAsInstrument/li>li>BellJar1963/li>li>Beloved1987/li>li>BemSexRoleInventory/li>li>BeneficialDiscomfort/li>li>BenKuhnBlog/li>li>Beowulf/li>li>BerkeleyCalifornia/li>li>BespokeSoftware/li>li>BetteridgesLaw/li>li>BetterIdiot/li>li>BetterLateThanNever/li>li>BeverlyClearySculptureGarden/li>li>BiasedWorldDesign/li>li>Bible/li>li>Bibliography/li>li>BicycleHelmets/li>li>BidirectionalLinks/li>li>BigBallOfMud/li>li>BigLebowski/li>li>BigPictureProductivity/li>li>BigRiverGrill/li>li>Bikeshedding/li>li>Bingen/li>li>Bittersweet2022/li>li>BlackDeath/li>li>BlackElephant/li>li>BlackElkPeak/li>li>BlackSwan/li>li>BlamelessCulture/li>li>BlamelessPostmortem/li>li>BlanketTheory/li>li>Blazor/li>li>BlazorWebAssembly20200520/li>li>BleakHouse1953/li>li>BlessedAssurance/li>li>BlockedAndReported/li>li>Blogroll/li>li>BloodSpeed/li>li>BloomsTwoSigmaProblem/li>li>BmoTower/li>li>BoccisPeaceAndPasta/li>li>BoeChapel/li>li>BoilingFrogDevelopment/li>li>BoilingFrogFaucet/li>li>Bolvangar/li>li>BookList/li>li>BookOfDust/li>li>Borealis/li>li>Boston/li>li>BoswellLondonJournal/li>li>BradyStreet/li>li>BrainerdMinnesota/li>li>BraveNewWorld/li>li>BreakableSoftware/li>li>BreakfastOfChampions1973/li>li>BridalVeilFalls/li>li>BriefHistoryOfTime1988/li>li>BringThePainForward/li>li>BrokenAcademicWritingProcess/li>li>BrokenWindowsTheory/li>li>BrooklynPark/li>li>BrooksLaw/li>li>BrothersKaramazov1880/li>li>BrownFairyBook/li>li>BrownieLake/li>li>BryantLakeBowl/li>li>BudgetingPhilosophyContradiction/li>li>BuffaloNationalRiver/li>li>BugFireLane/li>li>BugPrioritization/li>li>BuildImagineCup2020/li>li>BuildingToolsToWork20200519/li>li>Bullshit/li>li>Bulverism/li>li>BureaucraticPsychosis/li>li>BurndownChart/li>li>Business/li>li>BusinessIntelligence/li>li>BusyIsBad/li>li>ButtholeLocation/li>li>ButtInSeatMetric/li>li>C/li>li>C2AMFT/li>li>CafeMeow/li>li>Caffetto/li>li>Calendar/li>li>CalendarFriction/li>li>CaliforniaZephyr/li>li>CallOfTheVoid/li>li>CamelCase/li>li>Camping/li>li>CampingAndBoredom/li>li>CampingAndStoicism/li>li>CanaryCoffeeBar/li>li>CanDisagreeWithYourMother/li>li>Cannabis/li>li>CannonBeachWashington/li>li>CannonFalls/li>li>CannonRiverWinery/li>li>CanonicalNumber/li>li>CantBlamePlatformDesignersForNatureOfInformationStreams/li>li>CanterburyTales/li>li>CantNotCommunicate/li>li>CantStepInTheSameRiverTwice/li>li>Capital1883/li>li>CaptiveAndFree/li>li>CarbonImpactOfTravel/li>li>CareerCapital/li>li>CareerMission/li>li>CarletonCollege/li>li>CarleyStatePark/li>li>CarpeDiem/li>li>CarPlay/li>li>CarsHaveKeys/li>li>CastleRock/li>li>CatcherInTheRye/li>li>CathedralOfOurLadyOfTheAngels/li>li>Catholicism/li>li>CatsCradle1963/li>li>CedarLake/li>li>CeliloPark/li>li>CenterOfExcellence/li>li>ChakraUi/li>li>Challenges/li>li>ChangeByLaughing/li>li>ChangeOverNothing/li>li>ChangeYourMind/li>li>Character/li>li>CharlesAllisArtMuseum/li>li>CharlotteNorthCarolina/li>li>ChatGpt/li>li>Checklist/li>li>ChekhovStories/li>li>ChestertonsFence/li>li>Chicago/li>li>ChicagoIllinois/li>li>ChoirsOfStOlaf/li>li>ChoralDay/li>li>ChristianDoctrine/li>li>Christianity/li>li>christianity-and-javascript.png/li>li>ChristmasMusic/li>li>ChroniclesOfNarnia/li>li>ChronoBook/li>li>Chunking/li>li>ChurchLeft/li>li>CircleOfLife/li>li>CityIsNotATree/li>li>CivilDisobedience1849/li>li>Class/li>li>Clickbait/li>li>Clickhole/li>li>ClickUp/li>li>ClimateChange/li>li>ClockworkOrange1962/li>li>Clojure/li>li>ClozeDeletion/li>li>COBOL/li>li>Code/li>li>CodeByItselfIsWorthless/li>li>CodeDataEquivalence/li>li>CodeMirror/li>li>Codenames/li>li>CodeSpaces/li>li>CogIsNotTheCause/li>li>CognitiveBias/li>li>CognitiveSearch/li>li>CognitiveSearch20200520/li>li>CoherentPhilosophyOfLife/li>li>CoinFlipClarity/li>li>ColdWar/li>li>ColdwaterSprings/li>li>Colitas/li>li>Collectors/li>li>ColorblindPerson/li>li>Colorization/li>li>ColumbiaRiverGorge/li>li>ColumbusOhio/li>li>CommittingToMinneapolis/li>li>CommonKnowledge/li>li>CommonPlace/li>li>CommonPurpose/li>li>CommonSense/li>li>CommunicatingWithSlipBoxes/li>li>CommunitiesDestroyedByScale/li>li>CommunityOfPractice/li>li>CompanyIsAProduct/li>li>ComplainFirst/li>li>Complection/li>li>CompleteIntegration/li>li>CompleteRewrite/li>li>CompleteTagging/li>li>CompleteThoughtMapping2003/li>li>ComplexNotesSystemsOk/li>li>ComputerStupidities/li>li>ComputingCitizen/li>li>ConcentrationCamp/li>li>ConceptHandle/li>li>ConceptShadowing/li>li>ConceptWeb/li>li>ConfederacyOfDunces1980/li>li>ConfigurationAsCode/li>li>ConfirmationBias/li>li>ConflictingPrioritiesThief/li>li>ConnectingWithOurParts/li>li>ConsensusPhysicalReality/li>li>ConservationOfProblems/li>li>ConservativeMind1953/li>li>ConstellationsOfInstances/li>li>ConstructivismAndOnlineEducation/li>li>ContextFreeInformation/li>li>ContextScrambling/li>li>ContextStrength/li>li>ContingencyPlanning/li>li>ContinualAndContinuous/li>li>ContinuityError/li>li>ContinuousDelivery/li>li>ContinuousDeployment/li>li>ContinuousImprovement/li>li>ContinuousIntegration/li>li>ConvenientGuru/li>li>ConvenientlyAvoidedArendelleFlood/li>li>ConventionalWisdom/li>li>Conversation/li>li>ConversationalAffordance/li>li>ConversationalDifference/li>li>ConversationalEase/li>li>ConversationalOfficeHours/li>li>ConvinceMeToStay/li>li>CookingMetaAdvice/li>li>CoolGitCliOptions2014/li>li>CoonRapidsDamRegionalPark/li>li>CooperativeGeneration/li>li>CopenhagenInterpretationOfEthics/li>li>CopenhagenInterpretationOfEthics2015/li>li>CopyrightNotice/li>li>CoreGroup/li>li>CoronavirusClasses/li>li>CorvidNineteen/li>li>CosmicDance/li>li>CosmosDb/li>li>CouldWakeUpTomorrowDead/li>li>CouncilCrestPark/li>li>CounterintuitiveCorrelation/li>li>CounterintuitiveEfficiency/li>li>CountOfMonteCristo1846/li>li>CountOnYourPartnerForOne/li>li>CountYourselfUp/li>li>CovidChallengeTrials/li>li>CPlusPlus/li>li>CraftsmanMindset/li>li>CrapTolerance/li>li>CrazyAtWork2018/li>li>CreatingAntimoney/li>li>CreatingDomesticTemples/li>li>CreativePattern/li>li>CreativePattern/Advantages/li>li>CreativePattern/Cautions/li>li>CreativePattern/Contributors/li>li>CreativePattern/Disadvantages/li>li>CreativePattern/Examples/li>li>CreativePattern/Formula/li>li>CreativePattern/UsageNotes/li>li>Creativity/li>li>Cribbage/li>li>CritiqueOfPracticalReason1788/li>li>CritiqueOfPureReason1787/li>li>CrossClassConnections/li>li>cs-lewis-chatgpt-nuclear.png/li>li>CSharp/li>li>CSharpTodayAndTomorrow20200519/li>li>CultClassic/li>li>CultOfDone/li>li>CultOfTheFantasyPedestrian20190814/li>li>CuriosityAboutTheWorld/li>li>CustomerCollaboration/li>li>CustomerFocus/li>li>Daemon/li>li>DaemonsAndVideoGames/li>li>DaemonVoices/li>li>DAG/li>li>DahlGlue/li>li>DailyRoseGlasses/li>li>DailyScrum/li>li>DakotaSkye/li>li>DangersOfExtrinsicMotivation/li>li>DanielDeronda1876/li>li>DarkPattern/li>li>DataAsKnowledgeGraph/li>li>DataCenterSustainability/li>li>DataIsDangerous/li>li>DateNarrowing/li>li>DaVinciNotebooks/li>li>Daylog/li>li>Dazne/li>li>DeadAnnaEffect/li>li>DeadDoNoWrong/li>li>DeadlinesInScrum/li>li>DeadPoetsSociety/li>li>DeadSouls1842/li>li>DeathAndLifeOfGreatAmericanCities1961/li>li>DeathByAThousandPaperCuts/li>li>DeathInVenice1912/li>li>DeathIsNecessaryForMeaning/li>li>DeathOfMaudeChardin/li>li>DeathWithDignity/li>li>DebogYourself2024/li>li>DebtIsNotNegativeMoney/li>li>Decameron/li>li>DeceptiveSimplicity/li>li>DecideIsNotAnAction/li>li>DeclarativeProgramming/li>li>DeclineAndFall1789/li>li>DeclineEffect/li>li>DeepFake/li>li>DeepWork/li>li>DefaultToOpen/li>li>DefinedInterfaces/li>li>Definition/li>li>DefinitionOfDone/li>li>DeflectResistance/li>li>DegreesOfUgliness/li>li>Deism/li>li>DelayedAttraction/li>li>DeliberateAccident/li>li>DeliberatePractice/li>li>DemiDimensions/li>li>DemiHinge/li>li>DemiPerson/li>li>DemocracyAndEducation1916/li>li>DeNaturaRerum/li>li>Dependabot/li>li>DeploymentSmokeTest/li>li>DesacralizationOfEverydayLife/li>li>DescentOfMan1871/li>li>DeschutesRiverRecreationArea/li>li>DeservingForgiveness/li>li>Design/li>li>DesignApproach/li>li>DesigningForSustainability/li>li>DesignTryingTooHard/li>li>DesirableDifficulty/li>li>Details/li>li>DeteriorationOfReality/li>li>DeterministicToolsRandomExperiences/li>li>DeusExMachina/li>li>DevelopingIntrinsicSrMotivation/li>li>DevOps/li>li>DevOpsInTheRealWorld/li>li>DevOpsNeedForManagement/li>li>DevOpsStateOfNation20200521/li>li>DevSecOps/li>li>DevTeamThinksOfEverything/li>li>DiaryOfAYoungGirl1947/li>li>DifferentWorlds2017/li>li>DigitalMinimalism2019/li>li>DigitalTransformation/li>li>Dilbert/li>li>Dinkytown/li>li>DiplomaVsToothbrushingProblems/li>li>DisabilityAccommodationTradeoff/li>li>DisciplineCrosspollination/li>li>DislikableCharacter/li>li>DisuseOfActiveLearning/li>li>DivineTrinity/li>li>DivorceRecommended/li>li>DoableFrequencies/li>li>Docker/li>li>DocsFirstMethodology/li>li>DocumentationStates/li>li>DocumentPreparationSystem/li>li>DodoJobs/li>li>Dogfooding/li>li>DogMountain/li>li>DoItRightTheFirstTime/li>li>DomainSpecificLanguage/li>li>DominationVsPartnership/li>li>DoMoreOfWhatWorks/li>li>DonQuixote1615/li>li>DontCry/li>li>DontFearRed/li>li>DontPartitionKnowledge/li>li>DontRushCommunication/li>li>DontStuffBeansUpYourNose/li>li>DontSurroundWithSmarter2014/li>li>DontTryToChangeTheWorld/li>li>DontWaitToAutomate/li>li>DontWorryAboutTheVase/li>li>DoomsdayRule/li>li>DoTheNextRightThing/li>li>DotNet/li>li>DoubleCaptureSlip/li>li>DoubleHelix1968/li>li>DouglasHollowSchoolhouse/li>li>DoWhatIMean/li>li>DPS/li>li>DreamDir/li>li>DreamEngine/li>li>Dreaming/li>li>DreaminglyAndWakingly/li>li>DreamsAsLiterature/li>li>Dreamwidth/li>li>Dresden/li>li>DreyersEnglish2019/li>li>Drive2009/li>li>Driving/li>li>DryPhilosophy/li>li>Dubai/li>li>Dubuque/li>li>DubuqueIowa/li>li>Duluth/li>li>DumbassesInternational/li>li>DumbLuck/li>li>DungeonCrawlStoneSoup/li>li>DunningKrugerEffect/li>li>duplo.png/li>li>DuploInterface/li>li>DustAndConsciousness/li>li>DuttonSpeedwords/li>li>Dynalist/li>li>DynamicallyOrderedAnkiCard/li>li>Dynomight/li>li>DynomightSchoolOfRunning/li>li>DystopianVision/li>li>EasterEggs/li>li>EastOfEden/li>li>EatStreet/li>li>Ebola/li>li>EclecticMind/li>li>EconomicRealities/li>li>Ecosophia/li>li>EdgeComputing/li>li>EfficientLife/li>li>EichmannInJerusalem1964/li>li>EightSeasons/li>li>EightyTwentyPrinciple/li>li>ElaborativeEncoding/li>li>ElectiveAffinities/li>li>ElectricKoolAidAcidTest1968/li>li>ElectronFramework/li>li>ElementOfPersuasion/li>li>ElementsOfTypographicStyle/li>li>ElizaEffect/li>li>Elmers/li>li>Email/li>li>EmailDebtForgivenessDay/li>li>EmailIsUniversal/li>li>EmailTheAuthor/li>li>EmergencyRules/li>li>EmergentStructure/li>li>EmersonEssays/li>li>EmersonJournal/li>li>emily-and-andrew.jpg/li>li>EmotionalAnalysis/li>li>EmpireBuilder/li>li>EmpoweringEveryDeveloper20200519/li>li>EmptyObservanceAndMagicalThinking/li>li>EnablerAndDemander/li>li>EnglishGrammarTrick/li>li>Enneads/li>li>Enyality/li>li>EpistemicStatuses/li>li>EpistulaeMoralesAdLucilium/li>li>EqualAndNotEqualToNull/li>li>ErosionOfTrivialSocialInteraction/li>li>EscapingFlatland/li>li>EscapingTheTragedyOfWip/li>li>Essay/li>li>EssaysInRadicalEmpiricism1912/li>li>EternalSeptember/li>li>EternalSeptemberAsBeginningOfWisdom/li>li>Ethics/li>li>EuclidElements/li>li>EuropeanChristmasMarket/li>li>Event/li>li>EventDrivenApps20200521/li>li>EventDrivenPattern/li>li>EventualConsistency/li>li>EventualUrgency/li>li>EvergreenNotes/li>li>Evernote/li>li>EverOnwardIbm/li>li>EveryCompanyIsASoftwareCompany/li>li>EveryDeveloperIsWelcome20200519/li>li>EveryStateShouldBeAMicrostate201903/li>li>EverythingForeverOrNothingEverAgain/li>li>EverythingIsEffectiveAndPermanentAndThatsOk/li>li>EverythingsBroken/li>li>EverythingsBrokenAndNobodysUpset201209/li>li>EverythingShouldHaveAUrl/li>li>Evolution/li>li>EWLD/li>li>ExecutableEvergreenNotes/li>li>ExecutableLineNoise/li>li>ExecutionersSong1979/li>li>ExistenceTrophy/li>li>ExperienceOfColorblindness/li>li>ExperienceOfColorblindness/ColorCoding/li>li>ExperienceOfColorblindness/ConfusingColors/li>li>ExperienceOfColorblindness/Driving/li>li>ExperienceOfColorblindness/Factors/li>li>ExperienceOfColorblindness/IndeterminateColors/li>li>ExperienceOfColorblindness/LaserPointers/li>li>ExperienceOfColorblindness/Miscellaneous/li>li>ExperienceOfColorblindness/WhatColorIsThis/li>li>ExperienceOfColorblindness/WhiteboardPalette/li>li>ExperienceTiddlyWikiFluency/li>li>ExperimentalHistory/li>li>ExperimentalResearchesInElectricity1833/li>li>ExpertsDontMakePlans/li>li>ExploringTheFuture/li>li>Expression/li>li>EyesOnTheStreet/li>li>FaceTime/li>li>FaceUpOrDown/li>li>FactorsInfluencingSexualAttitudes/li>li>FailHelpful/li>li>FailureLoad/li>li>FairholmeCampground/li>li>Fairlearn/li>li>FairyTale/li>li>FairyTalesFromTheBrothersGrimm/li>li>FallibilityOfStatistics/li>li>FallOfMan/li>li>FamiliarizingMetaphor/li>li>FarewellToArms1929/li>li>FarFromTheMaddingCrowd/li>li>FargoNorthDakota/li>li>FastMail/li>li>FathersAndSons1862/li>li>Faust1829/li>li>FavoriteLyrics/li>li>Favorites/li>li>FavoritesCompareIncomparables/li>li>FearAndTrembling1843/li>li>FearCulture/li>li>FeaturesWhileTheWorldBurns/li>li>FederalistPapers1788/li>li>FeelingBadAsAgentOfChange/li>li>FelixCulpa/li>li>FewNewSolutionsUnderTheSun/li>li>FeynmanLecturesOnPhysics1964/li>li>FictionalFalsehoods/li>li>FictionNoteKeeping/li>li>FictionTheory/li>li>FiddleheadsCoffee/li>li>FifteenCompetingStandards/li>li>FightingInformationOverload2020/li>li>FilesystemCabinet/li>li>FileSystemHierarchiesSuck/li>li>Film/li>li>FilmSensitivity/li>li>FindRelationshipsOrMakeThem/li>li>FirehouseEffect/li>li>FirstAvenue/li>li>FirstBreakAllTheRules1999/li>li>FirstPrinciples2020/li>li>FishPeddler/li>li>FiveIdeals/li>li>FiveThievesOfTime/li>li>FiveThirtyEight/li>li>FiveValuesOfScrum/li>li>FixingScience/li>li>FixItForever/li>li>FlaneurMethod/li>li>FlashForward/li>li>Flask/li>li>FleaCannotHearAnymore/li>li>FloodNarrative/li>li>FloorGlitching/li>li>FlowState/li>li>FlyingPigThrift/li>li>FocusFlowAndJoy/li>li>FocusOnClassics/li>li>FollowWebsitesWithRss201902/li>li>FooledByRandomness2004/li>li>Footnote/li>li>ForemostBrewing/li>li>ForestvilleMysteryCaveStatePark/li>li>ForestvilleMysteryCaveStatePark/Travel/li>li>ForgiveAndBeFree2020/li>li>Forgiveness/li>li>ForgivenessVsExcusing/li>li>ForgivenessVsReconciliation/li>li>Forklessness/li>li>FormalRitualDemocracy2020/li>li>FortBragg/li>li>ForteLabs/li>li>FortyMinuteLimit/li>li>ForWhomTheBellTolls1940/li>li>FoucaultsPendulum1988/li>li>FoundObjects/li>li>FoundTime/li>li>FourEventsOfScrum/li>li>FramePositively/li>li>FrameworkForOrderingAndSimplifyingLife/li>li>FreeBSD/li>li>FreemanDevopsPrinciples/li>li>FreeNas/li>li>FreeSpeech/li>li>freezer-example.jpg/li>li>FreezerPackingStrategy/li>li>FreudAndEmpathy/li>li>FriendshipDefined/li>li>FriendshipParadox/li>li>FriendshipUnserious/li>li>FriendsIWant/li>li>FriendsVsTripAdvisor/li>li>FrobnicatesWhizbangs/li>li>FrogAndToad/li>li>FrontOfMind/li>li>Frozen/li>li>FrozenTwo/li>li>FsrsThreeDayJourney2024/li>li>fuck-biden.png/li>li>FullStackFreelancing/li>li>FullTextSearch/li>li>FunctionallyAlone/li>li>FunctionalProgramming/li>li>FunctionalVersusTopicalTags/li>li>FunctionOfPlanning/li>li>FunnyBecauseItsTrue/li>li>FutureOfInteractionDesignRant2011/li>li>FutureOfProgramming2013/li>li>FutureOfTech20200520/li>li>Game/li>li>GarbageInGarbageOut/li>li>GasLighting/li>li>Gearsness/li>li>GeneralPoopingFault/li>li>GeneralTheoryOfKeynes1936/li>li>GenerativeRestriction/li>li>GenZ/li>li>GeoGuesr/li>li>German/li>li>Germany/li>li>GetOffMyLawn/li>li>GettingSolidAtRebaseVsMerge/li>li>GettingStartedWithAnki202007/li>li>GettingThingsDone/li>li>GettingYourFilesystemHierarchyLessWrong201810/li>li>GhirardelliChicago/li>li>GiantsRidge/li>li>GiffordPinchotNationalForest/li>li>GinkgoCoffeehouse/li>li>Git/li>li>GitBestPractices/li>li>GitBibliography/li>li>GitFetchOverPull2009/li>li>GitFixUm/li>li>GitHubActions/li>li>GitHubPages/li>li>GitLens/li>li>GitParable2009/li>li>GitResetDemystified/li>li>GitVee2018/li>li>GlassBeadGame1943/li>li>Glassdoor/li>li>GnosticGospels/li>li>GoalImagination/li>li>GoalsOfStoicism/li>li>GobblableFood/li>li>GodBlessYouMrRosewater/li>li>GodelEscherBach1979/li>li>GodwinsLaw/li>li>GoldenCompass/li>li>GoldendaleMountainIdentifier/li>li>GoldendaleScenicOutlook/li>li>GoneWithTheWind1936/li>li>GoodDocumentation/li>li>GoodNewsWithBadNews/li>li>GoodPoemsForHardTimes/li>li>GoodSharedFlashcards/li>li>GoogleCloudPlatform/li>li>GoogleHangouts/li>li>GoogleMaps/li>li>GoogleMyMaps/li>li>GoogleReader/li>li>GovernorDodgeStatePark/li>li>GracefulDegradation/li>li>GraceUniversityLutheranChurch/li>li>GranbyQuebec/li>li>GrandCentralMarket/li>li>GrandsonRule/li>li>GrapesOfWrath1939/li>li>GraphTheory/li>li>Great2020ToiletPaperShortage/li>li>GreatDepression/li>li>GreatGatsby/li>li>GreatRiverBluffs/li>li>GreatRiverBluffs/Travel/li>li>GreatRiverBluffs/Visits/li>li>GreekAndRomanMyth/li>li>Greekification/li>li>GreenspunsTenthRule/li>li>Greenwashing/li>li>GrohmannMuseum/li>li>Grokking/li>li>GrokTiddlyWiki/li>li>Grotto/li>li>GroupIdentityIsFoundedOnExclusion/li>li>GroupIntraEnemy/li>li>GSRM/li>li>GuideToTheGoodLife2009/li>li>GullibilityMicrotargeting/li>li>GunsAndTotalitarianism/li>li>GunsGermsAndSteel1997/li>li>Gwern/li>li>HackingPedantryAndScience/li>li>HammerAndNail/li>li>HammeringHarder/li>li>Handlessness/li>li>HandmaidsTale1985/li>li>HanlonsRazor/li>li>HanlonsTanto/li>li>HapaxLegomenon/li>li>HappyAbsolutelyFine2016/li>li>HappyGoLucky2022/li>li>HarbingerConsumers/li>li>hard-boiled-eggs.jpg/li>li>HardProblemOfConsciousness/li>li>HarkTheHerald/li>li>HarmonizeFreely/li>li>HaroldAndMaude1971/li>li>Haskell/li>li>HatchingMagic/li>li>HauntedSongs/li>li>HaveToExperienceItToUnderstand/li>li>HawaiiMissileAlert/li>li>hdm-power-01.jpg/li>li>hdm-power-02.jpg/li>li>HdmBbcSeries/li>li>HdmBbcSeries/Season1/li>li>HdmBbcSeries/Season2/li>li>HdmBbcSeries/Season3/li>li>HdmGraphicNovel/li>li>HdmReverseAllegory/li>li>HelicopterParent/li>li>HellYeah/li>li>HennepinAvenue/li>li>HennepinCounty/li>li>HennepinCountyMuseum/li>li>Heroku/li>li>HeroMachine/li>li>HiddenFallsRegionalPark/li>li>HierarchicalAmpersands/li>li>HierarchicalSpacedRepetition202310/li>li>HierarchiesVersusNetworks/li>li>HigherOrderContributor/li>li>HighSchoolWritingHorror/li>li>HippoHardware/li>li>Hiroshima1946/li>li>HisDarkMaterials/li>li>HisDarkMaterialsPowerDiagrams/li>li>HistoryOfHypertext1995/li>li>HoarePrinciple/li>li>Hobbit/li>li>HofstadtersLaw/li>li>HoganBrothers/li>li>HohRainforest/li>li>HolaArepa/li>li>HoldYourPositionBack/li>li>HoleWhereSuccessLeaksOut/li>li>HollywoodFranchiseExploitation/li>li>HollywoodWalkOfFame/li>li>Holocaust/li>li>HoloLens/li>li>HomomorphicEncryption/li>li>HoodRiver/li>li>hopefulness-and-power.pdf/li>li>HouseOfCards/li>li>HouseOfTheSpirits/li>li>HousingNeeds/li>li>HowBasecampCommunicates/li>li>HowGoogleWorks/li>li>HowMuchToLearnWithAnki/li>li>HowToBecomeAFederalCriminal/li>li>HowToChangeYourMind2018/li>li>HowToLieWithStatistics/li>li>HowToLive2021/li>li>HowToNotDieAlone2021/li>li>HowToReadABook1972/li>li>HowToRememberAnythingForeverish/li>li>HowToSlowDown2019/li>li>HowToTakeSmartNotes/li>li>HowToThinkForYourself2020/li>li>HowToWinFriendsAndInfluencePeople1936/li>li>HowToWriteGoodPrompts202012/li>li>HowToWriteHistory/li>li>HowWeThink1933/li>li>HspWtcS/li>li>HumanKnowledgeItsScopeAndLimits1948/li>li>HumanStain2000/li>li>HumanStainAndCancelCulture/li>li>Humor/li>li>HurricaneRidge/li>li>HyperCard/li>li>Hyperstition/li>li>HypertextStyleGuide/li>li>HypoCognition/li>li>HypocognitiveCensorship/li>li>HypotheticalCommitmentTypes/li>li>HypotheticalCommitmentTypes/SelfishMarriage/li>li>HypotheticalCommitmentTypes/SocialLegalQpr/li>li>HypotheticalCommitmentTypes/TermMarriage/li>li>I35BridgeCollapse/li>li>IbEnglishitis/li>li>IbmDemiseLessons/li>li>Icehouse/li>li>IchiddoRamen/li>li>IDE/li>li>Idea/li>li>IdeaApi/li>li>IdealTeamPlayer2016/li>li>IdeationStrength/li>li>identify-as-a-woman.png/li>li>IdentityIntegrationDivide/li>li>IdeologyMicrotargeting/li>li>IdiotDostoevsky1869/li>li>IDontKnow/li>li>IfItAintBrokeDontFixIt/li>li>IfItWorksItsNotStupid/li>li>IfYoureReadyYoureLate/li>li>IgNobelPrize/li>li>IknowWhyTheCagedBirdSings1969/li>li>Iliad/li>li>Image/li>li>Imagination/li>li>ImaginationChamber/li>li>ImaginativeResistance/li>li>ImmediateFeedback/li>li>ImmediatelyAwkward/li>li>ImmediateQuestioning/li>li>ImmortalLifeOfHenriettaLacks2010/li>li>ImplausibleCharacter/li>li>ImplementingAnyAllInPowerShell/li>li>ImplicitFictionalContext/li>li>ImplicitlyDefinedNode/li>li>ImportanceTrance/li>li>ImportantNeglectedTractable/li>li>ImpracticalityOfAntimoney/li>li>ImpressiveSums/li>li>ImprovementOfDailyWork/li>li>ImprovingCorporateAdvancement/li>li>InboxZero/li>li>Inception2010/li>li>IncrementalAndIterative/li>li>IndependentMindedness/li>li>IndependentMindednessCorrelations/li>li>Index/li>li>IndexCard/li>li>Indexing/li>li>Indiana/li>li>IndianaDunes/li>li>IndiaPalace/li>li>IndigoGirls/li>li>IndirectionMindset/li>li>IndividualDistinctionIsIndividualValue/li>li>IndividualsAndInteractions/li>li>InducedDemand/li>li>InevitablyCorrect/li>li>InfiniteJest1996/li>li>InformationalJig/li>li>InformationHazard/li>li>InformationHazards2011/li>li>InformationIsFundamentallyConnections/li>li>InformationOverload/li>li>InfrastructureAsCode/li>li>InherentlyFunny/li>li>InPraiseOfTheGods2020/li>li>InputStrength/li>li>InquiryConcerningHumanUnderstanding1748/li>li>Instacart/li>li>InstitutesOfTheChristianReligion1536/li>li>InstrumentPairBonding/li>li>InsufficientlyReflectiveWriting/li>li>IntellectionStrength/li>li>IntellectualHumility/li>li>IntellectualLife1946/li>li>IntellectualLifeOfTheBwc/li>li>IntelligenceAndAugmentation/li>li>IntelligenceEffortSynergy/li>li>IntelligentUseOfSpace1993/li>li>IntentionalSpoiling/li>li>InteractionsThatMatter/li>li>Intercom/li>li>InterestingSpacedRepetitionMaterial/li>li>InternationalRoseTestGarden/li>li>InterpersonalRelations/li>li>InterpretationOfDreams1899/li>li>InterpretMl/li>li>InterstateStatePark/li>li>IntimacyFocus/li>li>IntimateRelationshipAsPlay/li>li>IntjDemisexuality/li>li>IntroductionToArithmetic/li>li>IntrovertHangover/li>li>InventWithPurpose20200519/li>li>InversionOfControl/li>li>InvestmentDiversification/li>li>InvisibleGuests1986/li>li>InvisibleMan/li>li>InvisibleOrientation2014/li>li>iOS/li>li>IoT/li>li>Iowa/li>li>IpsativeAssessment/li>li>IronLawsOfSoftwareDevelopment/li>li>IronTriangle/li>li>IrreducibleWoo/li>li>IsAsexualityLGBTQ/li>li>IslesBunAndCoffee/li>li>ItCasteSystem/li>li>IterativeProcess/li>li>IterativeReading/li>li>ItsJust/li>li>JaneEyre1847/li>li>JankiMethod/li>li>Java/li>li>JavaScript/li>li>Jaynes1971/li>li>Jekyll/li>li>Jenkins/li>li>JesusDoesntStayWithUs/li>li>JetLag/li>li>JobAComedyOfJustice/li>li>JobDisqualifiers/li>li>JobFilter/li>li>JoelOnSoftware/li>li>johnny-decimal-rn-sample.png/li>li>JohnnyDecimalRemNote/li>li>JohnsonDictionary/li>li>JohnstonRidgeObservatory/li>li>JordanCollege/li>li>JosephAndHisBrothers/li>li>Journal/li>li>JournalOfThePlagueYear/li>li>Judaism/li>li>JuliusCaesar/li>li>JumpToConclusions/li>li>JustAsk/li>li>JustGetStarted/li>li>Kalaloch/li>li>Kanna/li>li>KansasCity/li>li>KaplansWoods/li>li>KatzUndMaus1961/li>li>kc-central-highways.png/li>li>Keeper/li>li>KenwoodPark/li>li>KingHenryTheFourth/li>li>KingLear/li>li>KitchenWasher/li>li>KlaraAndTheSun2021/li>li>KlaraAsNarrator/li>li>KnewItIntellectually/li>li>KnockingOutTheLowerRungs/li>li>KnowItWhenWeSeeIt/li>li>KnowledgeReuse/li>li>KnowledgeWork/li>li>KramarczuksSausageCo/li>li>LaBelleLucie/li>li>LaBelleLucie/Definitions/Blocked/li>li>LaBelleLucie/Definitions/Blocking/li>li>LaBelleLucie/Definitions/ChokePoint/li>li>LaBelleLucie/Definitions/CompleteBlock/li>li>LaBelleLucie/Definitions/Deal/li>li>LaBelleLucie/Definitions/Fan/li>li>LaBelleLucie/Definitions/Foundation/li>li>LaBelleLucie/Definitions/FoundationBlock/li>li>LaBelleLucie/Definitions/Free/li>li>LaBelleLucie/Definitions/HardBlock/li>li>LaBelleLucie/Definitions/Independent/li>li>LaBelleLucie/Definitions/Merci/li>li>LaBelleLucie/Definitions/MutuallyBlocking/li>li>LaBelleLucie/Definitions/Natural/li>li>LaBelleLucie/Definitions/Neighbor/li>li>LaBelleLucie/Definitions/Run/li>li>LaBelleLucie/Definitions/SoftBlock/li>li>LaBelleLucie/Definitions/Tableau/li>li>LaBelleLucie/SafeMove/li>li>LaBelleSauvage2017/li>li>LaCrosse/li>li>LaddsAddition/li>li>LagoTacos/li>li>LakeChipotle/li>li>LakeCrescent/li>li>LakeHarriet/li>li>LakeKohlmeier/li>li>LakeKohlmier/li>li>LakeMichigan/li>li>LakeNokomis/li>li>LakeOfTheIsles/li>li>LambdaMoo/li>li>LambdaMooTakesANewDirection/li>li>LamppostPrinciple/li>li>Language/li>li>LargeGovernmentVsVoluminousLaws/li>li>LateRebellion/li>li>LaTeX/li>li>LaWisWisCampground/li>li>LawOfCynicism/li>li>LawOfFinancialViability/li>li>LawOfRemarkability/li>li>LAX/li>li>LazyConsensus/li>li>LazyStructuring/li>li>LeadingIndicator/li>li>LeanCoffee/li>li>LeaningTowerOfPizza/li>li>LeanMethodology/li>li>Learning/li>li>LeBlancsLaw/li>li>Lectionary/li>li>LectureOnRwanda/li>li>LecturesOnThePhilosophyOfHistory1837/li>li>LeidenDesJungenWerthers1787/li>li>LesMiserables1862/li>li>LessExpressiveThanASandwich/li>li>LessIsMore2020/li>li>LessonsWeShouldTakeFromCovid/li>li>LessWrongZettelkastenMethod/li>li>LetBadThingsHappenSometimes/li>li>LettsLaw/li>li>LibraryRules/li>li>Liechtenstein/li>li>LifeDebugging/li>li>LifeHack/li>li>Lifehacker/li>li>LifeOfSamuelJohnson/li>li>Lifestyles/li>li>LifetimeReading/li>li>LikableSoftware/li>li>Liminality/li>li>LinearVsTiddly/li>li>LinkToOutlookItems/li>li>LinusCleanGitHistory/li>li>Linux/li>li>Lisp/li>li>LittleRock/li>li>LittleTokyo/li>li>LiveJournal/li>li>LiveMusicViaWatchhouse/li>li>LiveScribe/li>li>LivesOfThePoets1781/li>li>LlmsAsTalkingDog/li>li>LoadComplete/li>li>LoadNinja/li>li>LoadstoneAndMagneticBodies/li>li>LocalityAndSimplicity/li>li>LocalMaximum/li>li>LocalOptimization/li>li>Logic/li>li>LogicalInversionError/li>li>LogicalTomorrow/li>li>Lojban/li>li>LolasCafe/li>li>Lolita1955/li>li>LolitaAndAlternateUniverses/li>li>LolitaAsInformationHazard/li>li>LondonFog/li>li>LongFormWriting/li>li>LongGoodbye1953/li>li>LongHairLessons/li>li>Longpaste/li>li>LoonDeli/li>li>LordIsTheEverlastingGod/li>li>LordJim1900/li>li>LordOfTheFlies1954/li>li>LordOfTheRings/li>li>LoringPark/li>li>LosAngeles/li>li>LossOfBuffer/li>li>loti-bridge.png/li>li>LoveInTheTimeOfCholera1985/li>li>LowCode/li>li>LowCodeGuiDistraction/li>li>LoweringTheBar/li>li>LowryHill/li>li>LowryHillEast/li>li>LPCG/li>li>LSD/li>li>LucidDreaming/li>li>LuckyTenThousandLearners/li>li>LuhmannZettelkastenVideo/li>li>LusSandwiches/li>li>Lutheranism/li>li>LutherSeminary/li>li>LyraAsJesus/li>li>LyrasOxford/li>li>M2/li>li>M2Announcement/li>li>MachineLearning/li>li>MacPorts/li>li>MadameBovary1856/li>li>MadisonWisconsin/li>li>MagicalRealism/li>li>MagicMountain1924/li>li>MagixStreaming/li>li>MagnifyingIndependenceOfMind/li>li>Maier2020/li>li>MakeEveryoneWorseOff/li>li>MakeItNeverComeBack/li>li>MakeProtestingTrivial/li>li>MakesMemoryAChoice/li>li>MakeWorkVisible/li>li>MakeYourPartMoreBeautiful/li>li>MakingWorkVisible2017/li>li>Malapropism/li>li>MalcolmYards/li>li>MaliciousCompliance/li>li>MalteseFalcon1930/li>li>Manage Subscriptions/li>li>MankatoMinnesota/li>li>ManualWorkIsABug2018/li>li>MapsAndMetarationality/li>li>March2023AgiOpinions/li>li>MarchettisConstant/li>li>MarinaDelRey/li>li>MarionetteTheater/li>li>Markdown/li>li>MarkdownPhilosophy/li>li>Marriage/li>li>MarriedToTheSea/li>li>MartianChronicles1950/li>li>MaryhillMuseumOfArt/li>li>maslow-gpt1.png/li>li>maslow-gpt2.png/li>li>maslow-gpt3.png/li>li>maslow-gpt4.png/li>li>maslow-gpt5.png/li>li>maslow-gpt6.png/li>li>maslow.png/li>li>MaslowsHourglass/li>li>mason-jar-illusion.jpg/li>li>MasonJarIllusion/li>li>MasterAndMargarita1967/li>li>MasteringGitSubtrees2015/li>li>Math/li>li>MathematicalPrinciplesOfNaturalPhilosophy1726/li>li>Matilda/li>li>MatildaMovie/li>li>MattLakemanBlog/li>li>Maudacity/li>li>MaudWiki/li>li>MaximizingWorkNotDone/li>li>McDonalds/li>li>MeaningOfRelativity1922/li>li>MeanTimeBetweenFailures/li>li>MeanTimeToRecovery/li>li>MediaRating/li>li>MediaWiki/li>li>MediumAdaptation/li>li>MeetTheAiTherapist/li>li>Memex/li>li>MemorialDay/li>li>MemoriesDreamsReflections1962/li>li>MemorizingProgrammingSivers201301/li>li>MemorizingTextPassages202305/li>li>MemorySystemsNeedGenuineInterest/li>li>Memrise/li>li>MendocinoBotanicalGardens/li>li>MenosParadox/li>li>MentalDeletion/li>li>MentalModel/li>li>MereChristianity1952/li>li>MereExposureEffect/li>li>MergeDay/li>li>MermaidDiagrams/li>li>Meta/li>li>MetadataLink/li>li>Metadesire/li>li>Metafaith/li>li>Metaphor/li>li>MetaTags/li>li>MetricBlackHole/li>li>Microfilm/li>li>MicrosoftAccess/li>li>MicrosoftBuild/li>li>MicrosoftBuild2020/li>li>MicrosoftBuild2020Overview/li>li>MicrosoftGraph/li>li>MicrosoftLearn/li>li>MicrosoftTeams/li>li>MicrosoftWindows/li>li>MicrosoftWord/li>li>MicroState/li>li>MicrotransactionalDystopia/li>li>Middlemarch1872/li>li>Mildreds/li>li>MillCityMuseum/li>li>MillEndsPark/li>li>Millennial/li>li>MillRuinsPark/li>li>MilwaukeeIntermodal/li>li>MilwaukeeWisconsin/li>li>MindHacker/li>li>MindLikeWater/li>li>MinimalismVsEfficientLife/li>li>MinimalTagging/li>li>MinimumViableProduct/li>li>Minneapolis/li>li>MinneapolisInstituteOfArt/li>li>MinnehahaFalls/li>li>MinnesotaGoodbye/li>li>MinnesotaNice/li>li>MinnesotaStatePark/li>li>MinorConvenience/li>li>MiscellaneousLifeTips/li>li>MissedRent/li>li>MissingBeautyBeforeTheNose/li>li>MissingFictionalContext/li>li>MissingGitkDocumentation/li>li>MissingPastParticiple/li>li>MissingTiddlerPhilosophy/li>li>MissingUniversalHumanExperiences2014/li>li>MistakenIdentity/li>li>MitchellParkDomes/li>li>MitchellPointTunnels/li>li>MixedPractice/li>li>MnemonicLoci/li>li>MnemonicMajorSystem/li>li>MnemonicMedium/li>li>MnemonicMediumAsTdd/li>li>MnemonicTechnique/li>li>ModelFairness/li>li>ModelInterpretability/li>li>ModelsChoicepointsAndRelationships/li>li>ModerationAndBalance/li>li>ModerationBias/li>li>ModernRomance2015/li>li>ModestProposal1729/li>li>MontaigneEssays/li>li>MontpelierVermont/li>li>MontrealQuebec/li>li>MooresLaw/li>li>MoreCorrespondence/li>li>MoreDakka/li>li>MoreSolutionsFewerAnswers/li>li>MosaicMuse/li>li>MosaicMuseIsNotABlog/li>li>MostImportantThing/li>li>MostRespectfulInterpretation/li>li>MotherNight1961/li>li>MountHood/li>li>MountRainierNationalPark/li>li>MountSaintHelens/li>li>MrAaronSwartz/li>li>MrAbrahamLincoln/li>li>MrAbramDemski/li>li>MrAdamMastroianni/li>li>MrAdolfHitler/li>li>MrAgSertillanges/li>li>MrAlanTuring/li>li>MrAlbertCamus/li>li>MrAldousHuxley/li>li>MrAlexanderPope/li>li>MrAlexanderTheGreat/li>li>MrAlexGoldman/li>li>MrAlfredNorthWhitehead/li>li>MrAlKhan/li>li>MrAndrewHuberman/li>li>MrAndrewMarlin/li>li>MrAndrewTanenbaum/li>li>MrAndyMatuschak/li>li>MrAngelPerez/li>li>MrAnthonyChu/li>li>MrAnthonyTrollope/li>li>MrAntonArmstrong/li>li>MrAntonChekhov/li>li>MrAshutoshPriyadarshy/li>li>MrAsimHussain/li>li>MrAsriel/li>li>MrAugustine/li>li>MrAugustusCaesar/li>li>MrAveryDavisLamb/li>li>MrBean/li>li>MrBenFranklin/li>li>MrBenjaminBloom/li>li>MrBenjaminDreyer/li>li>MrBenjaminFranklin/li>li>MrBenKuhn/li>li>MrBillClinton/li>li>MrBillGates/li>li>MrBillPalmer/li>li>MrBillyCosta/li>li>MrBjFogg/li>li>MrBjJohnson/li>li>MrBlaisePascal/li>li>MrBobDylan/li>li>MrBrandonRhodes/li>li>MrBrentGeller/li>li>MrBretVictor/li>li>MrBrianJanous/li>li>MrBrianKernighan/li>li>MrBruceSterling/li>li>MrBryson/li>li>MrCalNewport/li>li>MrCarlSagan/li>li>MrCatStevens/li>li>MrCedricChin/li>li>MrCharlesDarwin/li>li>MrCharlesLamanna/li>li>MrCharlesVanDoren/li>li>MrCharlieMunger/li>li>MrChrisAdams/li>li>MrChrisDias/li>li>MrChrisEnstad/li>li>MrChrisKnight/li>li>MrChrisMartenson/li>li>MrChrisThile/li>li>MrChristianNwamba/li>li>MrChristophePorteneuve/li>li>MrChristopherAlexander/li>li>MrChristopherNolan/li>li>MrChristopherSholes/li>li>MrChristopherTolkien/li>li>MrClayShirky/li>li>MrColemanSilk/li>li>MrCoreySanders/li>li>MrCraigLoewen/li>li>MrCrankyDaveBrinkley/li>li>MrCSLewis/li>li>MrDanCostenaro/li>li>MrDanielDefoe/li>li>MrDanielHerriges/li>li>MrDanielPink/li>li>MrDanielRoth/li>li>MrDarrellHuff/li>li>MrDarrelMiller/li>li>MrDavidAllen/li>li>MrDavidCain/li>li>MrDavidChalmers/li>li>MrDavidDeutsch/li>li>MrDavidFarley/li>li>MrDavidGushee/li>li>MrDavidHeinemeierHansson/li>li>MrDavidSedaris/li>li>MrDeanBryen/li>li>MrDennisRitchie/li>li>MrDerekSivers/li>li>MrDerrenBrown/li>li>MrDonaldKnuth/li>li>MrDonaldRumsfeld/li>li>MrDonaldTrump/li>li>MrDonovanBrown/li>li>MrDougDyment/li>li>MrDouglasAdams/li>li>MrDouglasHofstadter/li>li>MrDougMcIlroy/li>li>MrDougPagitt/li>li>MrDustinCampbell/li>li>MrEarlMontgomery/li>li>MrEdwardGibbon/li>li>MrEdwardLear/li>li>MrEdwardSnowden/li>li>MrEdwardTufte/li>li>MrEgilHovland/li>li>MrElieWiesel/li>li>MrEmarMaier/li>li>MrEpictetus/li>li>MrEricAmodio/li>li>MrEricBoyd/li>li>MrErichFromm/li>li>MrEricSchmidt/li>li>MrErikReid/li>li>MrErnestHemingway/li>li>MrEuclid/li>li>MrFMeliusChristiansen/li>li>MrFrankMcCourt/li>li>MrFredBrooks/li>li>MrFScottFitzgerald/li>li>MrGabrielGarciaMarquez/li>li>MrGandalf/li>li>MrGarrisonKeillor/li>li>MrGeneKim/li>li>MrGeoffreyChaucer/li>li>MrGeoffreyMoore/li>li>MrGeorgeBox/li>li>MrGeorgeOrwell/li>li>MrGeorgeSpafford/li>li>MrGeorgeWashington/li>li>MrGeraldWeinberg/li>li>MrGiladElyashar/li>li>MrGkChesterton/li>li>MrGordonMoore/li>li>MrGregBowman/li>li>MrGregJarrell/li>li>MrGuyClark/li>li>MrHalAshby/li>li>MrHaroldChasen/li>li>MrHawLittleperson/li>li>MrHeinrichVonKleist/li>li>MrHemLittleperson/li>li>MrHenrikKarlsson/li>li>MrHenryCorbin/li>li>MrHenryGrabar/li>li>MrHerodotus/li>li>MrHoldenCaulfield/li>li>MrHomer/li>li>MrHumbertHumbert/li>li>MrHumphreyBogart/li>li>MrIofurRaknison/li>li>MrIorekByrnison/li>li>MrIsaacAsimov/li>li>MrIvanVendrov/li>li>MrJackKinsella/li>li>MrJackSkinner/li>li>MrJacobFalkovich/li>li>MrJacobGabrielson/li>li>MrJakobNielsen/li>li>MrJamesBobb/li>li>MrJamesClear/li>li>MrJamesJoyce/li>li>MrJamesMadison/li>li>MrJamesPhillips/li>li>MrJasonFried/li>li>MrJdSalinger/li>li>MrJeffHollan/li>li>MrJeffreySnover/li>li>MrJeremyJarell/li>li>MrJeremyRuston/li>li>MrJesseCrossen/li>li>MrJesseJames/li>li>MrJesseSingal/li>li>MrJesusChrist/li>li>MrJezHumble/li>li>MrJimHolt/li>li>MrJoeBiden/li>li>MrJoelSpolsky/li>li>MrJohnAdams/li>li>MrJohnFerguson/li>li>MrJohnHarris/li>li>MrJohnMcWhorter/li>li>MrJohnMichaelGreer/li>li>MrJohnMilton/li>li>MrJohnSteinbeck/li>li>MrJohnSundman/li>li>MrJonathanRose/li>li>MrJonathanRosenberg/li>li>MrJosephCampbell/li>li>MrJosephConrad/li>li>MrJosephWeizenbaum/li>li>MrJrrTolkien/li>li>MrJulianJaynes/li>li>MrKarlPopper/li>li>MrKazuoIshiguro/li>li>MrKennethJennings/li>li>MrKevinBehr/li>li>MrKevinGallo/li>li>MrKevinUnderhill/li>li>MrKimAndreArnesen/li>li>MrKurtReznik/li>li>MrKurtVonnegut/li>li>MrLeeScoresby/li>li>MrLenChandler/li>li>MrLeonardBernstein/li>li>MrLeoTolstoy/li>li>MrLesFarley/li>li>MrLewisCarroll/li>li>MrLinusTorvalds/li>li>MrLionKimbro/li>li>MrLuisCabrera/li>li>MrLuisVargas/li>li>MrMadsTorgersen/li>li>MrMalcolmPolstead/li>li>MrMarcAndreessen/li>li>MrMarcusAurelius/li>li>MrMarkBurstein/li>li>MrMarkDominus/li>li>MrMarkForster/li>li>MrMarkStover/li>li>MrMarkTwain/li>li>MrMarkusEgger/li>li>MrMartinBuber/li>li>MrMartinGardner/li>li>MrMartinLuther/li>li>MrMarvinMinsky/li>li>MrMattLakeman/li>li>MrMaxAlexander/li>li>MrMichaelCulloton/li>li>MrMichaelKasten/li>li>MrMichaelNielsen/li>li>MrMichaelPollan/li>li>MrMiguelDeCervantes/li>li>MrMitchDaniels/li>li>MrMoneyMustache/li>li>MrMortimerAdler/li>li>MrNassimNicholasTaleb/li>li>MrNateSilver/li>li>MrNatFreeman/li>li>MrNathanielWade/li>li>MrNathanRobinson/li>li>MrNathanZuckerman/li>li>MrNeilPostman/li>li>MrNickBostrom/li>li>MrNickSlater/li>li>MrNicolasGarfinkel/li>li>MrNiklasLuhmann/li>li>MrNoahSmith/li>li>MrNoamChomsky/li>li>MrNortonJuster/li>li>MrOlafChristiansen/li>li>MrOliverGoldsmith/li>li>MrPatrickCollison/li>li>MrPatrickLencioni/li>li>MrPatrickMcKenzie/li>li>MrPaulGraham/li>li>MrPaulONeill/li>li>MrPeterDrucker/li>li>MrPeterJackson/li>li>MrPeterLee/li>li>MrPeterSalus/li>li>MrPhilHoutz/li>li>MrPhilipPullman/li>li>MrPhilipRoth/li>li>MrPhilipTetlock/li>li>MrPiotrWozniak/li>li>MrPjVogt/li>li>MrPotterStewart/li>li>MrPrashanthChandrasekar/li>li>MrPrinceRoc/li>li>MrRajeshJha/li>li>MrRandallMunroe/li>li>MrRandyCassingham/li>li>MrRandyShilts/li>li>MrRaymondChandler/li>li>MrRichardDawkins/li>li>MrRichardFeynman/li>li>MrRichardGabriel/li>li>MrRichardLinklater/li>li>MrRichardSeroter/li>li>MrRichardStallman/li>li>MrRichHickey/li>li>MrRoaldDahl/li>li>MrRobertBringhurst/li>li>MrRobertCoover/li>li>MrRobertFulghum/li>li>MrRobertGreene/li>li>MrRobertHeinlein/li>li>MrRobertMauceri/li>li>MrRobertPirsig/li>li>MrRogerParslow/li>li>MrRohanKumar/li>li>MrRomanMazurenko/li>li>MrRonaldReagan/li>li>MrRonHaleEvans/li>li>MrRoyUnicorn/li>li>MrRyanHoliday/li>li>MrRyanLevick/li>li>MrRyanTomayko/li>li>MrSamBroner/li>li>MrSamedAlHajajla/li>li>MrSashaChapin/li>li>MrSatyaNadella/li>li>MrScottAaronson/li>li>MrScottAlexander/li>li>MrScottGuthrie/li>li>MrScottHanselman/li>li>MrSebastianChopin/li>li>MrSebastianMarshall/li>li>MrSegunAdebayo/li>li>MrSeneca/li>li>MrSethGodin/li>li>MrSethJuarez/li>li>MrShawnCamp/li>li>MrShelSilverstein/li>li>MrSigmundFreud/li>li>MrSimonSarris/li>li>MrSimonWardley/li>li>MrSimonWiesenthal/li>li>MrSönkeAhrens/li>li>MrSorenKierkegaard/li>li>MrSpencerJohnson/li>li>MrStanislausGrumman/li>li>MrStefanSagmeister/li>li>MrStephenLaBerge/li>li>MrStephenSiciliano/li>li>MrStephenThair/li>li>MrSteveJones/li>li>MrSteveMasters/li>li>MrSteveSanderson/li>li>MrSteveWozniak/li>li>MrTaylorBrown/li>li>MrTedChiang/li>li>MrTeddyRoosevelt/li>li>MrTedNelson/li>li>MrTerryPratchett/li>li>MrTesfaWondemagegnehu/li>li>MrThomasDavenport/li>li>MrThomasErickson/li>li>MrThomasFriedman/li>li>MrThomasJefferson/li>li>MrThomasLimoncelli/li>li>MrThomasRicks/li>li>MrTiagoForte/li>li>MrTimothyGowers/li>li>MrTimUrban/li>li>MrTimWalz/li>li>MrTodorFay/li>li>MrTomDuxbury/li>li>MrTomPrestonWerner/li>li>MrTomUnicorn/li>li>MrTonyMakarios/li>li>MrTroyHunt/li>li>MrTsEliot/li>li>MrUlricNeisser/li>li>MrUmbertoEco/li>li>MrVenkateshRao/li>li>MrVenonThompson/li>li>MrVergil/li>li>MrVladimirNabokov/li>li>MrWardCunningham/li>li>MrWarrenBuffett/li>li>MrWestonNoble/li>li>MrWilliamIrvine/li>li>MrWilliamShakespeare/li>li>MrWillParry/li>li>MrWyntonMarsalis/li>li>MrYoda/li>li>MrYogiBerra/li>li>MrZviMowshowitz/li>li>MsAella/li>li>MsAjLevine/li>li>MsAlisonKrauss/li>li>MsAllisonBuchholtzAu/li>li>MsAmandaAskell/li>li>MsAmandaSilver/li>li>MsAngieJones/li>li>MsAnneCarson/li>li>MsAnneFrank/li>li>MsAprilEdwards/li>li>MsArchanaSassetharan/li>li>MsAvaGardner/li>li>MsBethPatterson/li>li>MsCaitlinDoughty/li>li>MsCateHall/li>li>MsCathrynTheGrateful/li>li>MsChasen/li>li>MsChristinaGorton/li>li>MsConnieConverse/li>li>MsDelphineRoux/li>li>MsDonaSarkar/li>li>MsDonnaHusbands/li>li>MsElaineParry/li>li>MsElizabethSchechter/li>li>MsEmilyDickinson/li>li>MsEmilyFrantz/li>li>MsEmilyFreeman/li>li>MsEmmylouHarris/li>li>MsEnidBlyton/li>li>MsEnya/li>li>MsEugeniaKuyda/li>li>MsFauniaFarley/li>li>MsFlamyGrant/li>li>MsGerriMartinFlickinger/li>li>MsGiftEgwuenu/li>li>MsGillianWelch/li>li>MsGretaThunberg/li>li>MsGwynethPaltrow/li>li>MsHannahArendt/li>li>MsHeatherGrace/li>li>MsHoney/li>li>MsIrisDeMent/li>li>MsIsabelAllende/li>li>MsJacquiLewis/li>li>MsJaneJacobs/li>li>MsJoyLisiRankin/li>li>MsJudithShulevitz/li>li>MsJuliaKirby/li>li>MsJuliaWhite/li>li>MsJulieSondraDecker/li>li>MsJulieStrauss/li>li>MsKateRusby/li>li>MsKateYeager/li>li>MsKatieHerzog/li>li>MsKaylaCinnamon/li>li>MsKellyanneConway/li>li>MsKimManis/li>li>MsKirstenFingle/li>li>MsKyraDempsey/li>li>MsLavenderMatilda/li>li>MsLedallaMadhavi/li>li>MsLeslieJamison/li>li>MsLilaTretikov/li>li>MsLoganUry/li>li>MsLolita/li>li>MsLyraSilvertongue/li>li>MsLytaGold/li>li>MsMaddyLeger/li>li>MsMaggieLee/li>li>MsMarisaCoulter/li>li>MsMartyHaleEvans/li>li>MsMaryMalone/li>li>MsMaryWatkins/li>li>MsMatildaWormwood/li>li>MsMaudeChardin/li>li>MsMaxineChambers/li>li>MsMayaRodrig/li>li>MsMildredTaylor/li>li>MsMiraLane/li>li>MsMonicaLewinsky/li>li>MsNadiaAsparouhova/li>li>MsNicoleForsgren/li>li>MSP/li>li>MsRuthMcNeill/li>li>MsRuthMoody/li>li>MsSanaAjani/li>li>MsSarahBird/li>li>MsSarahMoulton/li>li>MsSaraTeasdale/li>li>MsShannonCorman/li>li>MsSheilaLiming/li>li>MsSheriPallas/li>li>MsSigridJohnson/li>li>MsSusanCain/li>li>MsTaylorSwift/li>li>MsTrunchbull/li>li>MsVirginiaWoolf/li>li>MsYinaArena/li>li>MultigenerationalNovel/li>li>MultnomahFalls/li>li>MuQuestion/li>li>MurkyMiddle/li>li>Music/li>li>MusicalAcoustics/li>li>Mutt/li>li>MxGwern/li>li>MxOzyBrennan/li>li>MxSpencerLaJoye/li>li>MyAntonia1918/li>li>MyCompletionism/li>li>MyersBriggs/li>li>MyersBriggsEffectivenessSkew/li>li>MyFaceRecognition/li>li>MyGreatIdea/li>li>MyNonsenseMythAndDreams/li>li>MyPartialAbsolutePitch/li>li>MyPlacidity/li>li>MyPossibleAphantasia/li>li>MyPossibleAphantasia/Differences/li>li>MyPsychedelicAdjacentExperiences/li>li>MyPy/li>li>MyRomanticRejectionInsensitivity/li>li>MySql/li>li>MyTechnicalGeekery/li>li>MythicalManMonth/li>li>Mythology/li>li>MyUnusualMentalExperience/li>li>NakednessInSleepingBags/li>li>NamasteCafe/li>li>NamingConvention/li>li>NamingThings/li>li>NashvilleTennessee/li>li>NationalNeonSignMuseum/li>li>NatureOfGifts/li>li>NecessityOfBacklinks/li>li>NeedForCognition/li>li>NeedsAttention/li>li>NeedsExcision/li>li>NegativeInterestRates/li>li>NegativeNumberDistress/li>li>NegativeNumberDistress/Me/li>li>NegativeNumberDistress/RuthMcNeill/li>li>NegativeNumberOntology/li>li>NegativeVisualization/li>li>NeglectedWorkThief/li>li>NelsonAtkins/li>li>NerdinessNormalization/li>li>NerstrandStatePark/li>li>NetHack/li>li>NetiPot/li>li>NetPromoterScore/li>li>NeverGoToSeaWithTwoWatches/li>li>new-haven-cards.png/li>li>NewOrleans/li>li>NewRulesForLoveSexAndDating/li>li>NewSpeak/li>li>NewYorkMode/li>li>NextAction/li>li>NextJs/li>li>Nibelungenlied/li>li>NikeStrategy/li>li>NineteenEightyFour/li>li>Noahpinion/li>li>NoBinderPolice/li>li>NobodyUnderstandsRelationships/li>li>NoChanceToBreakOut/li>li>NoCodeAtAll/li>li>NodeJs/li>li>NoEvidence/li>li>NoEvidenceRedFlag2021/li>li>NoExercises/li>li>NoExit1944/li>li>NoLabelsPhilosophy/li>li>NoMeaningWithoutFailure/li>li>NominalPower/li>li>NonEuclideanGeometry/li>li>NonexistenceOfPants/li>li>NonexistenceOfPurelyFactualKnowledge/li>li>NonexistentWeekends/li>li>NonlinearRatcheting/li>li>NonsenseLiterature/li>li>NoOpinion/li>li>NoPrizeForDocumentation/li>li>NoRehearsalFallacy/li>li>NorthfieldMinnesota/li>li>NorthLoop/li>li>NoRulesNoFreedom/li>li>NoSpeedLimit/li>li>NoSql/li>li>NoSuchThingAsCommonSense/li>li>NotActingIsADecision/li>li>NotecardSystem2013/li>li>Notes/li>li>NotesAgainstNoteTakingSystems2022/li>li>NotesMustLink/li>li>NotFromYourCheckingAccount/li>li>NothingHuman/li>li>NothingToHide/li>li>NotMeIsm/li>li>NovumOrganum/li>li>NowhereToHideTheMistakes/li>li>npm/li>li>NuclearFamilyWasAMistake202003/li>li>NuGet/li>li>NuShell/li>li>Oakland/li>li>OaklandMuseumOfCalifornia/li>li>ObjectOrientedProgramming/li>li>ObscurityOfEnglishNames/li>li>ObservationBias/li>li>OconnorCompleteStories/li>li>Odyssey/li>li>OfficeItems/li>li>OfficeUnnecessary/li>li>OhShitButton/li>li>OkAsAnOption/li>li>OkCupid/li>li>OklahomaCity/li>li>OldManAndTheSea1952/li>li>OleChoirBenediction/li>li>OlympicNationalPark/li>li>OnCallEngineer/li>li>OnceUponATimeInTheNorth/li>li>OneCarefulThingAtATime/li>li>OneDrive/li>li>OneHundredYearsOfSolitude1967/li>li>OneNote/li>li>OnenoteDocumentRecovery/li>li>OneTouchToInboxZero201512/li>li>OnlineCommunityLessons/li>li>OnlyChildAttitude/li>li>OnlyHumansNeedApply2016/li>li>OnShortcutsAndLongcuts2024/li>li>OnTheFarSideOfSilence202004/li>li>OnTheOriginOfInequality1755/li>li>OnTheRoad1957/li>li>OnThinkingForOneself/li>li>Ontology/li>li>OopsISaidThatOutLoud/li>li>OpenApi/li>li>OpenShift/li>li>OpenSociety1945/li>li>OpenSourceSoftware/li>li>OperatingSystems/li>li>OperatorsPleasure/li>li>OpinionsRequireCounterarguments/li>li>OpportunityCost/li>li>OpsDev/li>li>OpticalIllusion/li>li>Optics1704/li>li>OracleMachine/li>li>OralTradition/li>li>Orbit/li>li>OrderPattern/li>li>OrderPattern/Advantages/li>li>OrderPattern/Cautions/li>li>OrderPattern/Contributors/li>li>OrderPattern/Disadvantages/li>li>OrderPattern/Examples/li>li>OrderPattern/Formula/li>li>OrderPattern/UsageNotes/li>li>OregonHolocaustMemorial/li>li>OrganicVsEngineeredAttraction/li>li>OrganizationalAnkiAdoption/li>li>OrganizationalPassTheBuck/li>li>OriginalWiki/li>li>OriginAndDevelopmentOfQuantumTheory/li>li>OriginsOfTotalitarianism1951/li>li>OrphanQuestion/li>li>OrwellEssays/li>li>osri2023.png/li>li>OtherSignificantOthers2024/li>li>OtherStrangerToo/li>li>OtterCreekLiteratureIntroduction/li>li>OttO/li>li>OurNamingConventions/li>li>OurWikiAbbreviations/li>li>OutCard/li>li>OutcomesOverActivities/li>li>OutingMinnesota/li>li>OverEngineering/li>li>OverfullFunnel/li>li>OverlappingClozePattern/li>li>OverlappingClozePattern/Advantages/li>li>OverlappingClozePattern/Cautions/li>li>OverlappingClozePattern/Contributors/li>li>OverlappingClozePattern/Disadvantages/li>li>OverlappingClozePattern/Examples/li>li>OverlappingClozePattern/Formula/li>li>OverlappingClozePattern/UsageNotes/li>li>OverlargeDependencyWeb/li>li>OwatonnaMinnesota/li>li>PabstMansion/li>li>PalaceTheater/li>li>PaleFire1962/li>li>PandemicInternet/li>li>PandemicMood/li>li>PandemicSurvivorshipBias/li>li>Pandemonium/li>li>PanoramaPoint/li>li>PanPsychism/li>li>PAO/li>li>ParadiseLost/li>li>ParadoxOfDocumentation/li>li>ParadoxOfDocumentationCab/li>li>Parallels/li>li>ParentalCausation/li>li>ParkingMinimum/li>li>ParkinsonsLaw/li>li>ParticipateInAllTheThings/li>li>PartneringWithAnki2021/li>li>PascalCase/li>li>PassingDangerPhilosophy/li>li>PathOfLeastResistance/li>li>PatternsOfCommunication/li>li>PatternsOfSoftware/li>li>PavedParadise2023/li>li>PayEverything/li>li>PeanutButterJellyLogistics/li>li>Penetrex/li>li>PennValleyPark/li>li>PeopleAndTheirPhones/li>li>PeopleAndTheirPhones.jpg/li>li>PeopleDontKnowWhatTheyWant/li>li>PeopleDontThinkTheyCanDoThings/li>li>PeoplePlaceMission/li>li>PeoplesHistoryOfComputing/li>li>PerfectChristmasFestival/li>li>Perfection/li>li>PerfectionIsSubtractive/li>li>PerfectIsTheEnemyOfGood/li>li>PerformanceQualityRelativity/li>li>PerformanceReview/li>li>PerHundredFlushingToilets/li>li>Perl/li>li>PermanenceUnnecessary/li>li>PersonalAbbreviationSystem/li>li>PersonalAttributesQuestionnaire/li>li>PersonalBubble/li>li>PersonalDocumentation/li>li>PersonalElectronicNotebook1996/li>li>PersonalityAssessment/li>li>PersonalizedViabilityOfPlatonicFriendships/li>li>PersonalKnowledgeManagement/li>li>PersonalMythology/li>li>PersonalThinkingMode/li>li>Persuasion1817/li>li>PeterPrinciple/li>li>PhantomOuch/li>li>PhantomTollbooth/li>li>PhilosophyFromAnywhere/li>li>PhilosophyOfLife/li>li>PhilosophyOfRight1820/li>li>PhilosophyRift/li>li>PhoenixProject/li>li>PhoneAnxiety/li>li>PHP/li>li>PhysicallyIntensifier/li>li>PickwickPapers1836/li>li>PictureOfDorianGray1890/li>li>PilgrimsProgress1678/li>li>Pinball/li>li>PineStreetBiscuits/li>li>PinkPonyCafe/li>li>PioneerCourthouseSquare/li>li>PissHereSaveTheWorld/li>li>PizzaShark/li>li>Place/li>li>PlanB/li>li>PlanningAlwaysGood/li>li>PlanningCycle/li>li>PlateOnTheAltKey/li>li>PlatonicFriendship/li>li>Play/li>li>PlayboyOfTheWesternWorld/li>li>PlayfulKnowledgeManagement/li>li>PleaseEveryone/li>li>PLessGame/li>li>PlotBasedDramaticIrony/li>li>PlotHole/li>li>Pnin1957/li>li>PoeCompleteStoriesAndPoems/li>li>PoetryAndTruth1833/li>li>PointlessApprovalProcess/li>li>PointlessVideoUsage/li>li>pola.png/li>li>Polish/li>li>Politics/li>li>Polyspecialization/li>li>PoopSandwich/li>li>PortageWisconsin/li>li>PortAngeles/li>li>PorterCountyMuseum/li>li>PortlandMaine/li>li>PortlandOregon/li>li>PortlandWomensForum/li>li>PortnoysComplaint1969/li>li>PortraitOfALady1881/li>li>PositiveAndNegativeQuestioning/li>li>PossibleMemoriaTalks/li>li>Postgres/li>li>PotentiallyDislikablePerson/li>li>PowellsCityOfBooks/li>li>PowerAutomate/li>li>PowerAutomate20200519/li>li>PowerBi/li>li>PowerOfKonsistency/li>li>PowerOfNames/li>li>PowerOfNamesPost/li>li>PowerPlatform/li>li>PowerPlatform20200520/li>li>PowerPoint/li>li>PowerShell/li>li>PowerShellFail/li>li>PowerShellForGraph20200521/li>li>PowerShellTestConnectionString/li>li>PowerVirtualAgents/li>li>PPC/li>li>PrayerBasedParsing/li>li>PrearrangedPhrase/li>li>PreciousLord/li>li>PresentingProblemsWithoutAnswers/li>li>PricksongsAndDescants1969/li>li>Pride/li>li>PrimaryPurpose/li>li>PrincipleOfLeastAstonishment/li>li>PrinciplesForLessWrongHierarchies/li>li>PrinciplesOfEffectiveResearch2004/li>li>PrinciplesOfPsychology1890/li>li>PrinciplesOfSustainableSoftwareEngineering/li>li>Prioritization/li>li>PriorLake/li>li>PrivateChunk/li>li>PrivatePerson/li>li>PrivateProperty/li>li>ProblemIdentificationPattern/li>li>ProblemIdentificationPattern/Advantages/li>li>ProblemIdentificationPattern/Cautions/li>li>ProblemIdentificationPattern/Contributors/li>li>ProblemIdentificationPattern/Disadvantages/li>li>ProblemIdentificationPattern/Examples/li>li>ProblemIdentificationPattern/Formula/li>li>ProblemIdentificationPattern/UsageNotes/li>li>ProblemResponsePattern/li>li>ProblemResponsePattern/Advantages/li>li>ProblemResponsePattern/Cautions/li>li>ProblemResponsePattern/Contributors/li>li>ProblemResponsePattern/Disadvantages/li>li>ProblemResponsePattern/Examples/li>li>ProblemResponsePattern/Formula/li>li>ProblemResponsePattern/UsageNotes/li>li>ProblemsAndPredicaments/li>li>ProblemsICantBelieveExist/li>li>ProblemWithVoting2018/li>li>ProceduralProgramming/li>li>ProcessOfYou/li>li>Product/li>li>ProductBacklog/li>li>ProductOwner/li>li>ProductOwnerDelegation/li>li>ProgrammingLanguage/li>li>ProgrammingParadigm/li>li>ProgressiveWebApplication/li>li>ProjectReunion/li>li>Prolog/li>li>PrologFalsifiability/li>li>PromptPrompt/li>li>ProofByContradiction/li>li>ProtoAttraction/li>li>ProvincialLetters/li>li>ProxyProductOwner/li>li>PseudoProfoundBullshit/li>li>PsiAsFailingsOfScience/li>li>PsychedelicDrug/li>li>PsychologicalSafety/li>li>Public/li>li>Publication/li>li>PublicHomepage/li>li>PublicHomepage/Contact/li>li>PublicHomepage/Copyright/li>li>PublicHomepage/Navigating/li>li>PublicHomepage/No Warranty/li>li>PublicHomepage/Organization/li>li>PublicHomepage/Points of Interest/li>li>PublicHomepage/Video Tour/li>li>PullRequest/li>li>PupuseriaLaPaz/li>li>PurcellCuttsHouse/li>li>PurpleCow/li>li>PurposeOfBags/li>li>PurposeOfTimeZones/li>li>PuttingTheElseBeforeTheIf/li>li>Python/li>li>PythonAzureApps20200520/li>li>QTwelveAssessment/li>li>QualitiesOfIndependentMinds/li>li>QuantumCountry/li>li>QuarantineRecital/li>li>QueerModernHymns/li>li>QuestionMarkName/li>li>Questions/li>li>QuinaultRainforest/li>li>QwertyKeyboard/li>li>QwertyResidue/li>li>RabbitMark/li>li>RaceHorseOutOfAPig/li>li>RaglanMythPattern/li>li>RampantNotifications/li>li>RandomThoughts/li>li>RankingMethods/li>li>RapidNormalcy/li>li>Raptitude/li>li>RarelyMisspellWords/li>li>RaspberryPi/li>li>RasSyndrome/li>li>RatchetingProcess/li>li>RationalApplicationDeveloper/li>li>React/li>li>Reading/li>li>ReadingAndTripping/li>li>ReadingStyle/li>li>RealityInaccurate/li>li>RealProgrammingIsAnElitistMyth/li>li>Reasoning/li>li>RebootSalvation/li>li>RecentChangeInSexualMorality/li>li>RecentIdeas/li>li>RecentlyRead/li>li>ReceptionOfPpBullshit2015/li>li>RecklessOptimism/li>li>RecommendationsVsGuidelines2018/li>li>RecordsProject/li>li>RecoveringEngineer2021/li>li>RecursiveDejaVu/li>li>red-square.png/li>li>RedCow/li>li>ReenterByTheBackGate/li>li>ReFactoring/li>li>ReferenceExplorer/li>li>ReflexiveSystemDevelopment/li>li>ReFuctoring/li>li>RefuteTheNegatives/li>li>RegressionToTheMean/li>li>RejectMostSuggestions/li>li>RelationshipAnarchy/li>li>RelationshipEscalator/li>li>RelationshipSuccessDivide/li>li>RelativeAdvice/li>li>RelativeAdviceSpectrum/li>li>RelativeClauseVerbAgreement/li>li>RelentlessOptimism/li>li>Religion/li>li>RemainsOfTheDay1989/li>li>RememberEverythingYoullEverLearn/li>li>RemembranceOfThingsPast1927/li>li>RemNote/li>li>remnote-greeks.png/li>li>remnote-people-layout.png/li>li>RemoteDevopsCulture20200520/li>li>RemoteWorkVersusOutsourcing/li>li>ReplaceabilityOfHumanTeachers/li>li>ReplacementsForExtrinsicMotivation/li>li>ReplicationCrisis/li>li>Replika/li>li>ReplyAll/li>li>ReprogrammingMyIdentity/li>li>ResharingCulture/li>li>ResistanceIsNotFutile/li>li>Resource/li>li>ResourceMooching/li>li>RespondingToChange/li>li>ResponsibleAiPanel20200519/li>li>ResponsibleMachineLearning20200519/li>li>ReStructuredText/li>li>RetrievalContext/li>li>Reuben/li>li>ReviewYourApp/li>li>RewildingTheSacraments/li>li>RiceLakeChainOfLakes/li>li>RiceLakeStatePark/li>li>RiceLakeStatePark/Amenities/li>li>RiceLakeStatePark/Travel/li>li>RiceLakeStatePark/Visits/li>li>RilkeLiveIntoTheAnswer/li>li>RimskyKorsakoffeeHouse/li>li>Rinata/li>li>RiseOfFullStackFreelancer201706/li>li>RiseUpSinging/li>li>Risk/li>li>RiskOfNotChanging/li>li>RoadAccessTax/li>li>RoadToEmmaus/li>li>RoamResearch/li>li>RoaringTwenties/li>li>RobinsonCrusoe/li>li>RobinsonCrusoe1719/li>li>RogueLike/li>li>RoguelikeBook/li>li>RoguelikeRegret/li>li>RoleOfQuoting/li>li>RoleOfTools/li>li>RollOfThunder1976/li>li>Romance/li>li>RomeoAndJuliet/li>li>Rondo/li>li>RoomOfOnesOwn/li>li>RosevilleCenter/li>li>RoteLearningAsFoundationOfThought/li>li>rs.io/li>li>RSS/li>li>RubyBeach/li>li>RuleOfTwo/li>li>RuleSetMindset/li>li>RustChallenge20200520/li>li>RustLanguage/li>li>ruth-moody.png/li>li>SaaS/li>li>SabbaticalEndState/li>li>SabbaticalUpdate/li>li>SabbaticalUpdate/20210809/li>li>SabbaticalUpdate/20210813/li>li>SabbaticalUpdate/20210821/li>li>SabbaticalUpdate/20210830/li>li>SabbaticalUpdate/20210906/li>li>SabbaticalUpdate/20210911/li>li>SabbaticalUpdate/20210918/li>li>SabbaticalUpdate/20210925/li>li>SabbaticalUpdate/20211110/li>li>SabbaticalUpdate/20211208/li>li>SabbaticalUpdate/20220117/li>li>sabertooth.png/li>li>SaintAndSinner/li>li>SallyLockhart/li>li>SaltAndStrawIceCream/li>li>SaltLakeCity/li>li>SanAntonio/li>li>SanFrancisco/li>li>SanityCheck/li>li>SaramagoBlindness1995/li>li>SaramagoCave2001/li>li>ScalesSkillsAndLeakyAbstractions/li>li>ScarceAttention/li>li>ScarcestResource/li>li>ScareQuotes/li>li>ScarletLetter1850/li>li>SchellingPoint/li>li>SchemaBound/li>li>SchemaInfection/li>li>School/li>li>SchoolFlawsAsCaringLevelCollapse/li>li>SchoolOfHardKnocks/li>li>SchrödingersCat/li>li>Science/li>li>ScienceVsScientism/li>li>ScientificControlGroup2014/li>li>ScientificMethod/li>li>ScientificPragmatismWithPsychedelics/li>li>ScopeCreep/li>li>ScrumBacklogDivision/li>li>ScrumBugsAndDebt/li>li>ScrumGuide/li>li>ScrumMaster/li>li>ScrumMasterPoUnification/li>li>ScrumMethodology/li>li>ScrumProductOwnerAbsent/li>li>ScrumSprintLength/li>li>SeasonOfThaw/li>li>SeattleWashington/li>li>SecondAmendment/li>li>SecondSex1949/li>li>SecondShiftIntellectual/li>li>SecondWorldWarChurchill1953/li>li>SecretCommonwealth2019/li>li>SecretHitler/li>li>SecretSauceOfZettelkasten2020/li>li>SeekingTheSacred/li>li>SelectiveApplication/li>li>SelfBelief/li>li>SelfExpressiveMarriage/li>li>SelfPerpetuatingEnergy/li>li>SemanticLineFeeds/li>li>SenchaTeaBar/li>li>SenseAndSensibility1811/li>li>SentimentalEducation1869/li>li>SeparationAsIndividualFall/li>li>SeparationInitiationReturn/li>li>SeparationOfPresentationAndContent/li>li>Serpentine/li>li>ServiceNow/li>li>SevenfoldWhy/li>li>SevenSevens/li>li>Sexuality/li>li>ShadowWork/li>li>ShamrocksIrishNook/li>li>ShapeFear/li>li>SharedConsciousnessFictionBibliography/li>li>SharePoint/li>li>ShawarmaPalace/li>li>ShawPygmalion/li>li>ShepherdsDell/li>li>ShippingContainer/li>li>ShippingIsAFeature/li>li>SholesRevisedKeyboard/li>li>ShortcutApps/li>li>Shortcuts/li>li>ShortHistoryOfNearlyEverything2003/li>li>ShutUpAndPlay/li>li>siderea/li>li>SignalToNoiseRatio/li>li>SignalVersusNoise/li>li>SilentSpring1962/li>li>SiliconValley/li>li>Silmarillion1977/li>li>SimpleNote/li>li>SimpleThingsDoneWell/li>li>Simpsons/li>li>SingingLessonDuringThePandemic/li>li>SingingLessWrong/li>li>Singularity/li>li>Sink/li>li>SirensOfTitan1959/li>li>SiversSrProgramming201301/li>li>SkepticismAndAnimalFaith1923/li>li>SketchOnCommonplacing/li>li>SkillLeapfrogging/li>li>SkillsKnowledgeAndTalents/li>li>SkinInTheGame2018/li>li>Skype/li>li>Slack/li>li>SlackGobbling/li>li>Slapstick1976/li>li>Slashdot/li>li>SlateStarCodex/li>li>SlaughterhouseFive/li>li>SmallBets/li>li>SmartNotes10Principles20200204/li>li>SmellingTheCheese/li>li>SocialDistancing/li>li>SocialMedia/li>li>SocialMediaImportanceDelusion/li>li>SocialMediaIsAntisocial/li>li>SocietyCafe/li>li>SociologicalQuotationMarks/li>li>Software/li>li>SoftwareAnalysis/li>li>SoftwareDevelopmentLifeCycle/li>li>SoftwareEfficiencyMonitor/li>li>SoftwareIsEatingTheWorld/li>li>SoftwarePattern/li>li>SoftwareProliferationLimitsExpertise/li>li>SoftwareTest/li>li>SoGoodTheyCantIgnoreYou/li>li>SohoCafe/li>li>SolarFlare/li>li>SolitaireAsLife/li>li>Solo2024/li>li>SomeThingsAreBetterThanOthers/li>li>Song/li>li>SonsAndLovers1913/li>li>soren-2013.jpg/li>li>soren-and-annie-outing.jpg/li>li>soren-hair.jpg/li>li>soren-whiteboard-palette.png/li>li>soren.jpg/li>li>SorenConcept/li>li>SorenSourceInfo/li>li>SoritesParadox/li>li>SoundAndTheFury1929/li>li>Source/li>li>SourceControl/li>li>SourceList/li>li>SoWhat/li>li>SpaceAndTime/li>li>SpacedRepetition/li>li>SpacedRepetitionAsAttentionManagement/li>li>SpacedRepetitionAsThoughtManagement/li>li>SpacedRepetitionEncouragesFloatingIdeas/li>li>SpacedRepetitionForEfficientLearning200903/li>li>SpacedRepetitionForFiction/li>li>SpacedRepetitionForFictionResearchQuestion/li>li>SpacedRepetitionFromTheGroundUp2019/li>li>SpacedRepetitionInterchangeFormat/li>li>SpacedRepetitionLimerick/li>li>SpacedRepetitionPersonality/li>li>SpacedRepetitionPrimitive/li>li>SpaceShuttlePlanning/li>li>SpaceTrilogy/li>li>SpeakMemory1966/li>li>SpeakMemory2016/li>li>SpeedrunAuthentic/li>li>SpencerLaJoyeConcert/li>li>Sphinx/li>li>SpinozaEthics1677/li>li>SpiritOfLaws1748/li>li>Spokane/li>li>Spotify/li>li>SpreadSheet/li>li>Sprint/li>li>SprintBacklog/li>li>SprintGoal/li>li>SprintPlanningMeeting/li>li>SprintRetrospective/li>li>SprintReview/li>li>SprintSynchronization/li>li>SscOriginOfConsciousness2020/li>li>StackOverflow/li>li>StackOverflowCommunityDebacles/li>li>StackOverflowForTeams/li>li>StackOverflowMaintenance/li>li>StackOverflowTagBurninationCriteria/li>li>StackOverflowTagCleanup/li>li>StackOverflowThreeWays/li>li>StandardizedGuidelines/li>li>StandupDumbbell/li>li>StartAConversation/li>li>StarTrek/li>li>StartUpProblem/li>li>StarvationCreekFalls/li>li>StarWars/li>li>StateAndRevolution1917/li>li>StaticallyTyped/li>li>StaticSiteGenerator/li>li>StatisticalMurder/li>li>StCroixStateForest/li>li>StCroixStateForest/Amenities/li>li>StCroixStateForest/Campsites/li>li>StCroixStateForest/Travel/li>li>StCroixStateForest/Visits/li>li>StCroixStatePark/li>li>Steam/li>li>SteeleCounty/li>li>StenoBoard/li>li>Steppenwolf1927/li>li>StevensonWashington/li>li>StLouis/li>li>StockSanfordCorollary/li>li>StoicFork/li>li>Stoicism/li>li>StoicismAndGender/li>li>StoicismAndMe/li>li>StOlaf/li>li>StOlafBackdropEssay/li>li>StOlafChristmasFestival/li>li>Stonehenge/li>li>StopFoxtrotsNow/li>li>StorageVersusRetrievalStrength/li>li>StoriesOfYourLifeAndOthers/li>li>StoryPoint/li>li>StorySlicing/li>li>StPaul/li>li>StrangeCareerOfJimCrow1955/li>li>StrangeLoop/li>li>Stranger1942/li>li>StrategicStrength/li>li>StreisandEffect/li>li>StrengthsFinder/li>li>StrengthsFinderFrequency/li>li>StrengthsFinderReport/li>li>StretchText/li>li>StrongerRelationshipWithoutNeed/li>li>StrongTowns/li>li>StructuralTiddler/li>li>StructureAnxiety/li>li>StructureOfScientificRevolutions1962/li>li>Stub/li>li>StudiesDontProveThings/li>li>StudiesInPessimism/li>li>StudyOfHistory1961/li>li>StupidFilter/li>li>SturgeonsLaw/li>li>SubgroupInteractionPattern/li>li>SubliminalFear/li>li>Subtiddler/li>li>SubtleCrappification/li>li>SubtleKnife/li>li>SubversiveBeautifulSavior/li>li>SuccessMomentum/li>li>SuitcaseParadox/li>li>SummaTheologica/li>li>Sunflower1969/li>li>SunkCost/li>li>Sunsama/li>li>SunsetBoulevard/li>li>SuperMemo/li>li>SupernaturalSmellVillain/li>li>SurelyYoureJoking1985/li>li>SurfaceProblem/li>li>SurpriseMe/li>li>SurviveVsThrive/li>li>SuspensionOfDisbelief/li>li>SustainableDataCenters20200520/li>li>SustainableSoftwareEngineering20200520/li>li>SustainableWebManifesto/li>li>SwanAndBowerEmporium/li>li>SwarmingMethodology/li>li>SwearingFlags/li>li>Sweden/li>li>SylvieAndBruno/li>li>SymbolicRepresentationOfTheThing/li>li>Synapse25Review/li>li>SystemicDisaster/li>li>TableOfContents/li>li>TabooTradeoff/li>li>Tabularium/li>li>TagColors/li>li>Tagging/li>li>TaggingForPersonalKnowledge20190109/li>li>TagsAsHierarchies/li>li>TakingNote/li>li>TakingNoteLuhmannsZettelkasten2007/li>li>TakingNoteZkCritique/li>li>TaleOfTwoCities1859/li>li>TalkingToTheDuck/li>li>Tanzania/li>li>TapSociety/li>li>TargetProblem/li>li>TaxonomySmashing/li>li>TaylorsFalls/li>li>Tea/li>li>TeachThinking/li>li>TeamSizeAndDeadlines/li>li>TeamUltraworking/li>li>TechDebtBudgeting/li>li>TechnicalDebt/li>li>TemaniPeshWaPetroglyphs/li>li>TenCommandmentsOfScm/li>li>TenPercentTime/li>li>TenThousandFlashcards2014/li>li>TessOfTheDurbervilles1892/li>li>TextEditor/li>li>TFVC/li>li>ThaiNamite/li>li>The2020DisinformationWar202003/li>li>TheAcda/li>li>TheAcm/li>li>TheAdagioTeas/li>li>TheAgileAlliance/li>li>TheAlcoa/li>li>TheAmazon/li>li>TheAmtrak/li>li>TheAnnalsOfImprobableResearch/li>li>TheApple/li>li>TheAtlantic/li>li>TheBallroomThieves/li>li>TheBangles/li>li>TheBasecamp/li>li>TheBeatles/li>li>TheBerkshireHathaway/li>li>TheBlackSheep/li>li>TheCantus/li>li>TheCatholicChurch/li>li>TheCenturyLink/li>li>TheConcordiaChoir/li>li>TheConcordiaCollege/li>li>TheControlAltBackspace/li>li>TheCurrentAffairs/li>li>TheDailyWtf/li>li>TheDalles/li>li>TheDecemberists/li>li>TheDevTeam/li>li>TheDisney/li>li>TheDoctorOnDemand/li>li>TheDollies/li>li>TheDoorDash/li>li>TheDuckDuckGo/li>li>TheeWeAdore/li>li>TheExtelligence/li>li>TheFareway/li>li>TheFarnamStreet/li>li>TheFederatedInsurance/li>li>TheFineLine/li>li>TheFoldingAtHome/li>li>TheFreeSoftwareFoundation/li>li>TheGawker/li>li>TheGeico/li>li>TheGimletMedia/li>li>TheGitHub/li>li>TheGitLab/li>li>TheGoogle/li>li>TheGreatCon/li>li>TheGreyhound/li>li>TheIbm/li>li>TheKareEleven/li>li>TheLewisAndClark/li>li>TheLibraryOfCongress/li>li>TheLinkedIn/li>li>TheLlBean/li>li>TheLutheranSummerMusic/li>li>TheMandolinOrange/li>li>TheManitouSingers/li>li>TheMayoClinic/li>li>TheMetroTransit/li>li>TheMicrosoftEthicsAndSociety/li>li>TheNetflix/li>li>TheNewBlue/li>li>TheNewYorker/li>li>TheNewYorkTimes/li>li>TheNordicChoir/li>li>TheOnion/li>li>TheOpenAi/li>li>TheOracle/li>li>TheOrderOfTheGoodDeath/li>li>TheoryAndPractice/li>li>TheoryOfMinnesota/li>li>TheOtterCreekHomeschool/li>li>TheOurSaviorsLutheranChurch/li>li>ThePartsUnlimited/li>li>ThePayPal/li>li>ThePeta/li>li>ThePevearAndVolokhonsky/li>li>ThePocket/li>li>TheProblemsOfPhilosophy1912/li>li>ThePurdueUniversity/li>li>TheQuickFix2021/li>li>TheRandomHouse/li>li>ThereAreEightBillionPeople/li>li>TheReason/li>li>TheReddit/li>li>TheRedHat/li>li>ThereIsNoObviousAnswer/li>li>TheSabbathWorld2010/li>li>TheScienceOlympiad/li>li>TheSeekers/li>li>TheSimpleAnalytics/li>li>TheSlack/li>li>TheSmartBear/li>li>TheSonatype/li>li>TheSovietUnion/li>li>TheSpectacleShoppe/li>li>TheSpiritGarage/li>li>TheStOlafBand/li>li>TheStOlafCantorei/li>li>TheStOlafChapelChoir/li>li>TheStOlafChoir/li>li>TheSubstack/li>li>TheSunCountry/li>li>TheTempest/li>li>TheTexasChristianUniversity/li>li>TheThingAboutGit2008/li>li>TheThreeM/li>li>TheTomBihn/li>li>TheTwitter/li>li>TheUniversityOfMinnesota/li>li>TheVikingChorus/li>li>TheVolkswagen/li>li>TheWailinJennies/li>li>TheWailinJennys/li>li>TheWatchhouse/li>li>TheWedgeCoop/li>li>TheWhyOfReality2019/li>li>TheWired/li>li>TheyWriteTheRightStuff/li>li>TheZoom/li>li>ThingAndSymbolicRepresentation2015/li>li>ThingsArentGoodForEveryone/li>li>ThingsFallApart1958/li>li>ThingsYouCantFindOnTheWeb/li>li>ThingsYouShouldNeverDo20000406/li>li>ThinkingFastAndSlow2011/li>li>ThinkLocallyActGlobally/li>li>ThirdMan/li>li>ThisTooShallPass/li>li>ThoughtExperiment/li>li>ThoughtWalking/li>li>ThousandAndOneNights/li>li>ThreeClerks1857/li>li>ThreeComponentMemoryModel/li>li>ThreeFootStack/li>li>ThreeFunctionsOfNotes/li>li>ThreeHorizons/li>li>ThreeLessonsOfEnglishClass/li>li>ThreeLinks/li>li>ThreePartPartnerSelectionCriteria/li>li>ThreePersonTeam/li>li>ThreePillarsOfScrum/li>li>ThreeStagesOfCategorization/li>li>ThreeSwitches/li>li>ThreeWayMergingUnderTheHood2013/li>li>ThreeWays/li>li>ThreeYearOldSyndrome/li>li>ThroughTheLookingGlass/li>li>ThusSpokeZarathustra1885/li>li>TiddlyDesktop/li>li>TiddlyMap/li>li>TiddlyRemember/li>li>TiddlyTables/li>li>TiddlyThinking/li>li>TiddlyWiki/li>li>TiddlyWikiBibliography/li>li>TiddlyWikiHangouts/li>li>TiddlyWikiSnippets/li>li>TiddlyWikiVideoSeries/li>li>TikTok/li>li>TillamookOregon/li>li>time-has-stopped.png/li>li>TimeDebt/li>li>TimeFilter/li>li>TimeForTheStars1956/li>li>Tinder/li>li>TinDrum1959/li>li>TipsOnMovingToANewCity/li>li>ToBeDialogue/li>li>TodoBankruptcy/li>li>Tool/li>li>ToolAssistedDevelopment/li>li>ToolGoesTooFar/li>li>ToolsForThinkingDontWow/li>li>TooMuchWipThief/li>li>TooSmartForYourOwnGood/li>li>ToTheLighthouse1927/li>li>TrackingTime/li>li>TrafficTest/li>li>TragedyOfTheCommons/li>li>TransformativeToolsForThought/li>li>TravelBlanket/li>li>TravelingLightAsSpiritualDiscipline/li>li>Travelogue/li>li>TravelOverrated/li>li>TravelsWithCharley1962/li>li>TreasuryDirect/li>li>TreatiseOnHumanNature1740/li>li>TreatiseOnLight1690/li>li>TrevorShortStories/li>li>TricameralLegislature/li>li>TricameralLegislatures202102/li>li>TrickQuestionPattern/li>li>TrickQuestionPattern/Advantages/li>li>TrickQuestionPattern/Contributors/li>li>TrickQuestionPattern/Disadvantages/li>li>TrickQuestionPattern/Examples/li>li>TrickQuestionPattern/Formula/li>li>TrickQuestionPattern/UsageNotes/li>li>TripAdvisor/li>li>Tristan1903/li>li>TrivialInconvenience/li>li>TrolleyProblem/li>li>TropicOfCancer1934/li>li>TrustAsymmetry/li>li>TruthInFiction/li>li>TruthWearsOff2010/li>li>TryForAlmostGoodEnough/li>li>TryItAndSee/li>li>TuckmanPhases/li>li>TuningDoesntWork/li>li>TurfClub/li>li>TuringTest/li>li>TwDynamicNoteGeneration/li>li>TweetingGod/li>li>TwentyFourHourRule/li>li>TwentyRules/li>li>TwinCities/li>li>TwinlySerendipity/li>li>Twits/li>li>TwoControlTraps/li>li>TwoMinuteRule/li>li>TwoMinutesHate/li>li>TwoPizzaTeam/li>li>TwoThousandEightFinancialCrisis/li>li>TypeScript/li>li>TypesOfWalking/li>li>TyrannyOfAverages/li>li>tzk/li>li>Ulysses1922/li>li>UnaccustomedEarth2008/li>li>UncleTomsCabin1852/li>li>Underexploration/li>li>UnderstandingFromScratch/li>li>UngeneralizableOcclusion/li>li>UnhyphenatedCompounds/li>li>UnicornProjectPartOneSynopsis/li>li>UnicornProjectPartThreeSynopsis/li>li>UnicornProjectPartTwoSynopsis/li>li>UnionDepot/li>li>UnionStation/li>li>UnitedStates/li>li>UnitTesting/li>li>UniversalSuggestionResponse/li>li>UniverseDoesntOweUsAnything/li>li>UniverseOfDiscourse/li>li>UnixMakesThingsPossible/li>li>UnixPhilosophy/li>li>UnknownDependenciesThief/li>li>UnknownUnknowns/li>li>UnneededTodo/li>li>UnplannedWorkThief/li>li>UnrealisticStrictnessOfSchool/li>li>UnreliableNarrator/li>li>UnresolvableProblems/li>li>UnstickingWork/li>li>UntanglingHabits/li>li>UnthankableSystem/li>li>UntilTheEndOfTheInternet/li>li>UntilYouCantGetItWrong/li>li>UnusualCategoryTax/li>li>UnwelcomeOnStackOverflow/li>li>UpdateStatuses/li>li>UptownPizza/li>li>UptownTheater/li>li>UrCognitiveBias/li>li>UsabilityTriangle/li>li>UsefulFictions/li>li>UsefulFriction/li>li>UseMentionDistinction/li>li>UserStory/li>li>UsesForFictionSpacedRepetition/li>li>UsingAntimoney/li>li>UWP/li>li>ValparaisoIndiana/li>li>ValuesAndAction/li>li>ValueStreamMapping/li>li>ValueToEffortRatio/li>li>VarietiesOfReligiousExperience1902/li>li>VaterlandInDeinenGauen/li>li>Venezuela/li>li>VeniceBeach/li>li>Venmo/li>li>VermontBakeHouse/li>li>VeryBadNews2021/li>li>VicarOfWakefield1766/li>li>ViciousCircle/li>li>VietnamMemorial/li>li>Vim/li>li>VirtualBox/li>li>VirtuousCircle/li>li>VistaHouse/li>li>VisualBasic/li>li>VisualGitReference/li>li>VisualStudio/li>li>VisualStudioCode/li>li>Vivarium/li>li>VocalProblemAttacking/li>li>VoluntaryDiscomfort/li>li>VoodooDoughnut/li>li>VsCode20200519/li>li>VSCodeVim/li>li>WaitingForAdobe/li>li>WaitingForAdobe.pdf/li>li>Walden1854/li>li>WalkBackwards/li>li>WallOfConfusion/li>li>WalMart/li>li>WarAndPeace1869/li>li>WardleyMapping/li>li>WashingtonDc/li>li>WashingtonPark/li>li>WaspConspiracy/li>li>WasteLand1922/li>li>WatchingExpertsUseSoftware/li>li>WaterfallEncouragesConfirmationBias/li>li>WaterfallMethodology/li>li>WaterHasMemory/li>li>WaterPowerPark/li>li>WatershipDown1972/li>li>WausauWisconsin/li>li>WaysOfStepping/li>li>WeaknessesAsStrengths/li>li>WealthOfNations1776/li>li>WebAssembly/li>li>WebForEveryone20200520/li>li>WeDontHaveTheSkills/li>li>WeekdayVibes/li>li>WeightedAnalysis/li>li>WelcomeToBuild20200519/li>li>WetSink/li>li>WhackAMole/li>li>WhatCouldPossiblyGoWrong/li>li>WhatGreatManagersExpect/li>li>WhatIf/li>li>WhatIf2/li>li>WhatMaisieKnew1897/li>li>WhatMakesALie/li>li>WhatsApp/li>li>WhatsInAName2018/li>li>WhatToLearnWithAnki/li>li>WhatWouldJesusDo/li>li>WhenEinsteinWalkedWithGodel/li>li>WhenToLearnWithAnki/li>li>WhereIsScienceGoing1932/li>li>WhereSuccessLeaks2018/li>li>WhichTestsToAutomate/li>li>WhiteheadIntroductionToMathematics/li>li>WhiteNoiseStatistics/li>li>WhiteSalmon/li>li>WhitespaceDeployment/li>li>WhiteSquirrelBar/li>li>Whittier/li>li>WhoIAmWhatIThink/li>li>WhoIAmWhatIThink/LearningAndFiltering/li>li>WhoIAmWhatIThink/Personality/li>li>WhoIAmWhatIThink/PhilosophyAndReligion/li>li>WhoIAmWhatIThink/Politics/li>li>WhoIAmWhatIThink/Work/li>li>WhoMovedMyCheese/li>li>WhosInWhosOut/li>li>WhyAiFlashcardsAreHard/li>li>WhyAntimoneyIsNotDebt/li>li>WhyBooksDontWork2019/li>li>WhyDoesTheWorldExist2012/li>li>WhyFishDontExist/li>li>WhyFundSoftwareWithDebt/li>li>WhyIsYnabNoShortcut/li>li>WhyNotBanTargeted20200322/li>li>WhyNotes/li>li>WhySoftwareSucks/li>li>WhyTheBestGiveAway2016/li>li>WhyTheJournal/li>li>WhyUrls2015/li>li>WhyWeAreReal/li>li>Wide/li>li>WikiCamelCase/li>li>Wikipedia/li>li>WikipediaDegreesOfSeparation/li>li>WikipediaPhilosophy/li>li>WildlyGenerative/li>li>WillmarMinnesota/li>li>WillowRiverStatePark/li>li>WillPower/li>li>WilsonRiverHighway/li>li>WindowsPowerToys/li>li>WindowsSubsystemForLinux/li>li>WindowsTerminal/li>li>WindowsTerminal20200520/li>li>WinForms/li>li>WinGet/li>li>WinServerContainers20200519/li>li>WisdomInCrowds/li>li>WithoutAPaddle/li>li>WokInThePark/li>li>WoolfDiaries/li>li>WordProcessor/li>li>WorkflowSupremacy/li>li>WorkFromNinetyDegrees/li>li>WorkingSoftware/li>li>WorkNotDoneArticle201507/li>li>WorksInProgress/li>li>WorkWaste/li>li>WorldWarOne/li>li>WorldWarTwo/li>li>WorldWideWeb/li>li>WorseIsBetter/li>li>WorstBottleneck/li>li>WorthlessEfficiently/li>li>WorthwhileAnyway/li>li>WouldntGoBack/li>li>Wrecktangle/li>li>WriteOutputNegativeOne/li>li>WriteOutputPSCustomObject/li>li>Writing/li>li>WritingDifficulty/li>li>WritingFreesHeadspace/li>li>WritingIsThinking/li>li>WritingWorkspaceIdeas/li>li>WrittenLucidity/li>li>WutheringHeights1847/li>li>WYSIWYG/li>li>WYSIWYM/li>li>xkcd/li>li>xkcd1053.png/li>li>XyProblem/li>li>Y2K/li>li>YakShaving/li>li>YearInReviewPractice/li>li>YearlyAbyssGazing/li>li>YearOfMagicalThinking2005/li>li>YearOfMinneapolis/li>li>Yelp/li>li>YNAB/li>li>YoOhSoNo/li>li>YouAndYourResearch1986/li>li>YouHadToBeThere/li>li>YouthQuake/li>li>YouTube/li>li>ZenAndTheArtOfMotorcycleMaintenance/li>li>ZettelKasten/li>li>ZettelKastenBibliography/li>li>ZettelkastenCardType/li>li>ZettelkastenDe/li>li>ZettelkastenDemoVideo/li>li>ZettelkastenDetailsTrap/li>li>ZettelkastenPersonality/li>li>ZettelkastenProcess/li>li>ZFS/li>li>ZombieProject/li>/ul>/p>style>.tc-remove-when-wiki-loaded {display: none;}/style>/div>/noscript>!--~~ Ordinary tiddlers ~~-->script classtiddlywiki-tiddler-store typeapplication/json>{title:$:/config/AnimationDuration,created:20200118003418275,creator:soren,modified:20200118003419972,modifier:soren,type:text/vnd.tiddlywiki,text:200},{title:$:/config/bimlas/locator/fields/parent,created:20200410133117956,creator:soren,field-direction:to,modified:20200410133133054,modifier:soren,type:text/vnd.tiddlywiki,text:$:/plugins/bimlas/locator/field-templates/text},{text:\n{\n\t\journals\:{\n\t\t\lastDayOfWeek\:\6\,\n\t\t\formatter\:\$:/macros/bj/Calendar/journalslinked.js\,\n\t\t\titlebold\:\yes\,\n\t\t\highlightThisDay\:\no\,\n\t\t\highlightThisDate\:\yes\,\n\t\t\highlightLinks\: \yes\\n\t},\n\t\default\:{\n\t\t\lastDayOfWeek\:\0\,\n\t\t\formatter\:\$:/macros/bj/Calendar/journalslinked.js\,\n\t\t\titlebold\:\yes\,\n\t\t\highlightThisDay\:\no\,\n\t\t\highlightLinks\:\yes\\n\t},\n\t\diary\:{\n\t\t\lastDayOfWeek\:\0\,\n\t\t\formatter\:\$:/macros/bj/Calendar/diary.js\,\n\t\t\titlebold\:\yes\,\n\t\t\highlightThisDay\:\no\,\n\t\t\highlightLinks\:\yes\\n\t},\n\t\plain\:{\n\t\t\lastDayOfWeek\:\0\,\n\t\t\formatter\:\\,\n\t\t\titlebold\:\yes\,\n\t\t\highlightThisDay\:\yes\,\n\t\t\highlightThisDate\:\no\\n\t},\n\t\event\:{\n\t\t\lastDayOfWeek\: \6\,\n\t\t\formatter\:\$:/macros/bj/Calendar/journalslinked.js\,\n\t\t\titlebold\:\yes\,\n\t\t\highlightThisDay\:\no\,\n\t\t\highlightThisDate\:\no\,\n\t\t\highlightLinks\: \yes\\n\t}\n}\n,type:application/json,created:20230911043804069,modified:20230911044646164,module-type:library,title:$:/config/bj/Calendar.json},{title:$:/config/codemirror/keyMap,text:vim\n,type:string,created:20200118023853777,creator:soren,modified:20210910160825258,modifier:soren},{title:$:/config/codemirror/theme,text:cmplus,type:string,created:20210316232428596,modified:20210329225730283},{title:$:/config/DefaultSidebarTab,created:20200118003657706,creator:soren,modified:20200118003658921,modifier:soren,type:text/vnd.tiddlywiki,text:$:/sib/SideBar/Explore},{title:$:/config/DownloadSaver/AutoSave,created:20200226002847048,modified:20200226002849153,type:text/vnd.tiddlywiki,text:no},{title:$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/do-thing,created:20210928031215487,creator:soren,modified:20210928031216652,modifier:soren,type:text/vnd.tiddlywiki,text:show},{title:$:/config/EditTabIndex,created:20200515033855017,modified:20200515033900734,tags:,type:text/vnd.tiddlywiki,text:1},{title:$:/config/FileSystemPaths,created:20200427015719697,modified:20200427020204931,tags:,type:text/vnd.tiddlywiki,text:issystemremoveprefix$:/addprefix_system/\ntagTemplatetagMetatagTooladdprefix_meta/\ntagImagetagAttachmentaddprefixmedia/\ntagJournaladdprefixjournal/\ntagSourceaddprefixsource/\ntagSinkaddprefixsink/\ntagPAOaddprefixpao/\ntagPlaceaddprefixplace/\ntagPublicationtagClassaddprefixmetasource/},{title:$:/config/flibbles/relink/fields/author,created:20240718025053184,creator:soren,modified:20240718025053184,modifier:soren,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/bibliography,created:20210606192417191,modified:20210606192216249,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/condition,created:20230416230240335,creator:soren,modified:20230416230240335,modifier:soren,type:text/vnd.tiddlywiki,text:filter},{title:$:/config/flibbles/relink/fields/description,created:20230416032019969,creator:soren,modified:20230416032020019,modifier:soren,type:text/vnd.tiddlywiki,text:wikitext},{title:$:/config/flibbles/relink/fields/dropdown,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/entrypoint,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/memberof,created:20200517132228253,modified:20200517132227841,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/participants,created:20230416161312959,creator:soren,modified:20230416161312972,modifier:soren,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/people,created:20240719222025090,modified:20240719222025090,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/places,created:20240719222030189,modified:20240719222030189,type:text/vnd.tiddlywiki,text:list},{title:$:/config/flibbles/relink/fields/ri-date-goal,created:20230416161451487,creator:soren,modified:20230416161451507,modifier:soren,type:text/vnd.tiddlywiki,text:wikitext},{title:$:/config/flibbles/relink/fields/ri-date-resolved,created:20230416163236173,modified:20230416163236173,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/ri-date-summary,created:20230416160903141,creator:soren,modified:20230416160903198,modifier:soren,type:text/vnd.tiddlywiki,text:wikitext},{title:$:/config/flibbles/relink/fields/ri-date-with,created:20230416160850588,modified:20230416160850588,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/ri-source,created:20230416163217732,modified:20230416163217732,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/spouse,created:20200517132233649,modified:20200517132233649,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/fields/universe,created:20210606192156910,modified:20210606192156910,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/expando/tiddler,created:20201207185209448,modified:20201207185209448,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/fnote/note,created:20230416032133685,creator:soren,modified:20230416032133700,modifier:soren,type:text/vnd.tiddlywiki,text:wikitext},{title:$:/config/flibbles/relink/macros/jsub/subpart,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch-links/filter,created:20230416032315718,creator:soren,modified:20230416032315742,modifier:soren,type:text/vnd.tiddlywiki,text:filter},{title:$:/config/flibbles/relink/macros/stretch-template-links/filter,created:20230416032340074,creator:soren,modified:20230416032340140,modifier:soren,type:text/vnd.tiddlywiki,text:filter},{title:$:/config/flibbles/relink/macros/stretch-template-links/largeTemplate,created:20230416032357059,modified:20230416032357059,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch-template-links/smallTemplate,created:20230416032349164,modified:20230416032349164,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch-template/largeTemplate,created:20230416032415204,modified:20230416032415204,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch-template/smallTemplate,created:20230416032411205,modified:20230416032411205,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch-template/tiddler,created:20230416032402844,modified:20230416032402844,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/stretch/tiddler,created:20230416032300108,modified:20230416032300108,type:text/vnd.tiddlywiki,text:title},{title:$:/config/flibbles/relink/macros/summarize/tiddler,created:20230416032212822,modified:20230416032212822,type:text/vnd.tiddlywiki,text:title},{title:$:/config/Manager/Filter,created:20200226225437497,modified:20200301191728127,type:text/vnd.tiddlywiki},{title:$:/config/Manager/Show,created:20200125221910159,modified:20200510003949538,type:text/vnd.tiddlywiki,text:tiddlers},{title:$:/config/Manager/Sort,created:20200225231329450,modified:20210102053655395,type:text/vnd.tiddlywiki,text:text},{title:$:/config/Manager/System,created:20200225231355813,modified:20200225231357995,type:text/vnd.tiddlywiki,text:system},{title:$:/config/Manager/Tag,created:20200225231334446,modified:20210102053649967,type:text/vnd.tiddlywiki,text:Source},{title:$:/config/Navigation/UpdateAddressBar,created:20230416140641682,creator:soren,modified:20230416140641711,modifier:soren,type:text/vnd.tiddlywiki,text:permaview},{title:$:/config/NewJournal/Title,created:20200425021836647,modified:20200425022040020,type:text/vnd.tiddlywiki,text:YYYY-0MM-0DD ddd},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search,created:20210102053710313,modified:20210102053627345,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all,created:20200913160459794,modified:20200913160708406,type:text/vnd.tiddlywiki,text:show},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/control-panel,created:20200913160724199,modified:20200913160920405,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen,created:20200404141720140,creator:soren,modified:20200404141727487,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home,created:20200323004119552,modified:20200913160059735,type:text/vnd.tiddlywiki,text:show},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import,created:20210102053930923,modified:20210202033953029,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions,created:20200329180402644,modified:20200425031432070,type:text/vnd.tiddlywiki,text:show},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal,created:20200125221848147,modified:20230830215242714,type:text/vnd.tiddlywiki,text:show},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-tiddler,created:20200404141647796,creator:soren,modified:20200913160849302,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview,created:20200329180357772,modified:20200329180359920,type:text/vnd.tiddlywiki,text:show},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/save-wiki,created:20200425031326114,modified:20200425031326136,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager,created:20200425031433809,modified:20200425031433831,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp,created:20200404141704643,creator:soren,modified:20210509011208732,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/plugins/aaldrich/tables/button,created:20200322013805236,creator:soren,modified:20200322013806469,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewDate,created:20230405213734859,creator:soren,modified:20230405213734872,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/sib/Buttons/NewSource,created:20210525001028932,creator:soren,modified:20240718012024587,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/sib/Buttons/ReadingInbox,created:20210525001112107,modified:20210525001215732,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/PageControlButtons/Visibility/$:/sib/NewSourceButton,created:20200913160857999,modified:20210307212022651,tags:,type:text/vnd.tiddlywiki,text:show},{title:$:/config/Performance/Instrumentation,created:20210721001042152,creator:soren,modified:20240601212228780,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/adithyab/cmplus,created:20240601185410615,creator:soren,modified:20240601190230172,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/bimlas/locator,created:20210205013358090,creator:soren,modified:20240601202717720,modifier:soren,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/flibbles/relink,created:20210205013547783,modified:20210205014248273,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/frd/simplecalendar,created:20210205013416214,modified:20210205013728062,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/kantorsite/mathjax,created:20200710193223440,modified:20200710193424989,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/kixam/datepicker,created:20210205013308502,creator:soren,modified:20241025021654905,modifier:soren,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/kixam/moment,created:20210205013419352,modified:20210307161611835,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/kookma/refnotes,created:20210920204145810,creator:soren,modified:20240406232433045,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/MaxGyver83/tw5-keyboard-navigation,created:20210205013330536,modified:20210205013924490,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/sk/FancyQuotes,created:20210205013542897,modified:20210205013915843,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/sobjornstad/3click2edit,created:20210205013622647,modified:20210205013715594,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/sycom/leaflet,created:20230912032419864,modified:20230912032419864,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/telmiger/details,created:20210205013521277,modified:20210205014302258,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/TheDiveO/FontAwesome,created:20210205013551526,modified:20210205014243897,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror,created:20240601185358165,creator:soren,modified:20240601190329616,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-autocomplete,created:20210205013531768,creator:soren,modified:20240601190355851,modifier:soren,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-closebrackets,created:20210205013530658,creator:soren,modified:20240601190225436,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-keymap-vim,created:20210205013534170,creator:soren,modified:20240601190226557,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/codemirror-search-replace,created:20210205013607133,creator:soren,modified:20240601190228281,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/highlight,created:20210205013556905,modified:20210205232117777,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Plugins/Disabled/$:/plugins/tiddlywiki/katex,created:20210205013601533,modified:20210205015443190,type:text/vnd.tiddlywiki,text:no},{title:$:/config/PublicContactInfo,text:homepage: https://www.sorenbjornstad.com\nemail: zettelkasten@sorenbjornstad.com\ngithub: https://github.com/sobjornstad/zettelkasten-sib,type:application/x-tiddler-dictionary,created:20200508015911051,modified:20200508020040701},{title:$:/config/RelinkOnRename,created:20200121230518238,creator:soren,modified:20251011191949961,modifier:soren,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/ShortcutInfo/excise-private-chunk,created:20210522035122311,modified:20210522034939194,tags:,type:text/vnd.tiddlywiki,text:Excise the current selection to a new private chunk},{title:$:/config/shortcuts-mac/save-tiddler,created:20220622212041227,creator:soren,modified:20220622212041250,modifier:soren,type:text/vnd.tiddlywiki,text:cmd-Enter},{title:$:/config/shortcuts-not-mac/save-tiddler,created:20220622212047526,creator:soren,modified:20220622212047547,modifier:soren,type:text/vnd.tiddlywiki,text:ctrl-Enter},{title:$:/config/shortcuts/cancel-edit-tiddler,created:20200118025014806,modified:20200118030240382,type:text/vnd.tiddlywiki,text:ctrl-Escape},{title:$:/config/shortcuts/excise-private-chunk,created:20210522035108354,creator:soren,modified:20210920161704326,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:ctrl-shift-E},{title:$:/config/shortcuts/save-tiddler,created:20220622212052270,creator:soren,modified:20220622212052289,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/config/shortcuts/sidebar-search,created:20231018023238118,creator:soren,modified:20231018023238118,modifier:soren,type:text/vnd.tiddlywiki,text:ctrl-shift-F ctrl-P},{title:$:/config/sib/CurrentEditionPublicity,created:20210622002423952,modified:20210622002233531,tags:,type:text/vnd.tiddlywiki,text:public},{title:$:/config/sib/IsPublicEdition,caption:Whether interface elements for personal use only should appear. Very poorly named, but difficult to change now!,created:20200508003748651,creator:soren,modified:20240601144414273,modifier:soren,tags:Meta,type:text/vnd.tiddlywiki,text:false},{title:$:/config/sib/TopBarHeight,created:20210627200040615,creator:soren,modified:20240601150923690,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C% if m2.ffOpenTopBar %>30px\u003C% else %>0px\u003C% endif %>},{title:$:/config/sobjornstad/AccessCode,created:20230324190307259,creator:soren,modified:20230324190310442,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/config/sobjornstad/PublicZettelkastenUrl,created:20240524000818606,creator:soren,modified:20240601214033672,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:https://mosmu.se},{title:$:/config/sobjornstad/UserEmail,created:20230324190306478,creator:soren,modified:20240508040315977,modifier:soren,type:text/vnd.tiddlywiki,text:},{title:$:/config/TiddlerInfo/Mode,created:20200118003704896,creator:soren,modified:20200118003705931,modifier:soren,type:text/vnd.tiddlywiki,text:sticky},{title:$:/config/Tiddlers/TitleLinks,created:20210507013444291,modified:20210507013256599,type:text/vnd.tiddlywiki,text:yes},{title:$:/config/TiddlyRemember/TagMapping,created:20200516190911842,creator:soren,modified:20220302210205566,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:Source::Zettelkasten\nhastr-tagsgettr-tags},{title:$:/config/TimestampDisable,created:20200118025806832,creator:soren,modified:20210721005951761,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/Toolbar/ButtonClass,created:20200118003731285,creator:soren,modified:20220215235820508,modifier:soren,type:text/vnd.tiddlywiki,text:tc-btn-rounded},{title:$:/config/Toolbar/Text,created:20200118003741043,creator:soren,modified:20200118003745155,modifier:soren,type:text/vnd.tiddlywiki,text:no},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone,created:20200321222632217,creator:soren,modified:20201120173219656,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others,created:20200913195739332,modified:20200913195744428,type:text/vnd.tiddlywiki,text:show},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/edit,created:20200508024425999,modified:20200508024854302,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler,created:20200321222634628,creator:soren,modified:20200321222636791,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar,created:20200125183503813,creator:soren,modified:20230416140938773,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info,created:20200118034433307,modified:20201120173206280,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here,created:20200125183450402,creator:soren,modified:20201120173225978,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here,created:20201120173247431,modified:20201120173222291,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink,created:20200913200724872,modified:20201120173215063,type:text/vnd.tiddlywiki,text:show},{title:$:/config/ViewToolbarButtons/Visibility/$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar,created:20200404141629548,creator:soren,modified:20200404141630712,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/sib/Buttons/CopyTitleReference,created:20210525001045047,modified:20210525000850061,type:text/vnd.tiddlywiki,text:show},{title:$:/config/ViewToolbarButtons/Visibility/$:/sib/CopyTitleReference,created:20201201192308952,modified:20201201192236971,type:text/vnd.tiddlywiki,text:show},{title:$:/config/ViewToolbarButtons/Visibility/$:/tzk/Buttons/CopyPublicZettelkastenLink,created:20251011193908303,creator:soren,modified:20251011193908612,modifier:soren,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/ViewToolbarButtons/Visibility/$:/tzk/Buttons/CopyTitleReference,created:20251011193909305,creator:soren,modified:20251011193909556,modifier:soren,type:text/vnd.tiddlywiki,text:show},{title:$:/config/ViewToolbarButtons/Visibility/DoCopyTitleReference,created:20200913200034137,modified:20200913200042061,type:text/vnd.tiddlywiki,text:hide},{title:$:/config/WikiParserRules/Inline/dash,created:20201124030001841,modified:20201124030011884,type:text/vnd.tiddlywiki,text:enable},{title:$:/config/WikiParserRules/Inline/wikilink,created:20231018193132541,creator:soren,modified:20231018193132541,modifier:soren,type:text/vnd.tiddlywiki,text:enable},{title:$:/config/zettelkasten/copyright/Content,created:20210523151041802,creator:soren,modified:20210825142618069,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:The text of my notes, that is, most of the content of the wiki, is all-rights-reserved.\nYou are welcome to read, learn from, and link to all notes (click the hash icon in the upper-right to copy a link to any tiddler; keep in mind that currently public notes could become private in the future, though I try to avoid doing this).\nObvious fair use|https://en.wikipedia.org/wiki/Fair_use such as quoting a small excerpt with attribution in order to discuss it is also fine.\nPlease contact me if this doesnt cover something you were hoping to do.},{title:$:/config/zettelkasten/copyright/InitialNotice,created:20210523151255793,creator:soren,modified:20210825142934141,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:Copyright © 2020--\u003C\u003Cnow YYYY>> Soren Bjornstad.},{title:$:/config/zettelkasten/copyright/MIT,created:20210523151209436,creator:soren,modified:20210825144137850,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:MIT License\nApplies to SYSTEM TIDDLERS ONLY, as defined above!\nDoes NOT apply to the text of notes in this wiki.\n\n{{$:/config/zettelkasten/copyright/InitialNotice}}\u003Cbr>{{$:/config/zettelkasten/copyright/UserNotice}}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \Software\), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \AS IS\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.},{title:$:/config/zettelkasten/copyright/System,created:20210523151106274,creator:soren,modified:20251011192827933,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:All system tiddlers in the wiki specific to Sorens Zettelkasten Edition, that is, the parts that extend TiddlyWiki and handle the display of tiddlers, e.g., the ReferenceExplorer, are available under the MIT license (see below). The names of system tiddlers begin with `$:/`.\n\nBe aware that many system tiddlers are contributed by TiddlyWiki itself or by other plugins, which are usually licensed under the MIT or BSD license or a similar open-source license. If youre using a system tiddler which is found under `$:/tzk/` or `$:/sib/`, you can be sure it is included in this license grant; otherwise, you may need to check whether its a shadow tiddler|https://groktiddlywiki.com/read/#Shadow%20Tiddlers or modified shadow tiddler that might have a different license.\n\nVisit the Explorer section of the Explore sidebar tab to find system tiddlers.\n\n\u003Cpre>{{$:/config/zettelkasten/copyright/MIT}}\u003C/pre>},{title:$:/config/zettelkasten/copyright/UserNotice,created:20210825143221469,creator:soren,modified:20210825144152783,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/Clock,caption:Clock,created:20210627030648862,creator:soren,description:Show the current time and a Pomodoro timer in the upper-right corner of the wiki. Handy if you often work full-screen.,modified:20251011161456085,modifier:soren,private:yes,public:no,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/ContactButtons,caption:Contact buttons,created:20210622002002027,creator:soren,description:Show “start a conversation” and “subscribe” buttons at the bottom of each tiddler.,modified:20250214040645161,modifier:soren,private:no,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/CopyrightFooter,caption:Copyright footer,created:20210902152332169,creator:soren,description:Display a copyright and attribution notice underneath the story river.,modified:20250707210131598,modifier:soren,private:no,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/EditorPublicLine,caption:Editor public line,created:20210622003532452,creator:soren,description:Show a “publish this tiddler” checkbox when editing a tiddler.,modified:20250214041230498,modifier:soren,private:yes,public:no,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/EpistemicStatus,caption:Epistemic status,created:20210920193247824,creator:soren,description:Show the epistemic status|EpistemicStatuses of the current tiddler on types that have one.,modified:20250214041156944,modifier:soren,private:yes,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/GisTools,caption:GIS tools,created:20210910153740764,creator:soren,description:Use the Google Maps embed API to show satellite location and directions on Place tiddlers. Requires setting up an embed API in Google Cloud Platform (when you turn this feature on, an error will appear on your place tiddlers explaining how to do so).,modified:20210910153929369,modifier:soren,private:yes,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/MarkStaleUpdated,caption:Stale update link,created:20230407023028152,creator:soren,description:Show a link on stale tiddlers allowing you to mark them as still up to date as of the current time.,modified:20230407025143508,modifier:soren,private:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/MediaRating,caption:Media rating,created:20210920193222752,creator:soren,description:Show the rating|MediaRating of the current tiddler on sources.,modified:20210920193357318,modifier:soren,private:yes,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/MicrolinkMetadataLine,caption:Microlink,created:20240611040702059,creator:soren,description:Show the microlink of a tiddler, if present, in the subtitle metadata section.,modified:20250214041131017,modifier:soren,private:yes,public:no,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/OpenTopBar,caption:Open top bar,created:20210626233606201,creator:soren,description:Show the list of open tiddlers in a horizontal bar at the top of the screen.,modified:20250214041304019,modifier:soren,private:yes,public:no,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/SidebarInfoLinks,caption:Sidebar info links,created:20210623014408947,creator:soren,description:Show navigation links to the most important parts of the wiki underneath the subtitle.,modified:20211107173557802,modifier:soren,private:yes,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/SpoilerBanner,caption:Spoiler banner,created:20210622003118415,creator:soren,description:Display a warning banner on fiction tiddlers (any tiddler with a non-empty `universe` field) noting that we dont try to hide spoilers.,modified:20240601153121542,modifier:soren,private:no,public:yes,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/FeatureFlags/ViewerPublicLine,caption:Viewer public line,created:20210622003316816,creator:soren,description:Show a “publish this tiddler” checkbox when viewing a tiddler.,modified:20250214041243693,modifier:soren,private:yes,public:no,tags:,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/GettingStartedWizardCurr,created:20210825150640449,creator:soren,modified:20251011201449938,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:$:/tzk/GettingStarted/Warning},{title:$:/config/zettelkasten/gis/GMapsApiKey,text:AIzaSyB0LFBNuVUY4134FpuUb-oIiNqK0msvdVM,type:text/plain,created:20201129173535848,creator:soren,modified:20210910154319208,modifier:soren,tags:},{title:$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/More,created:20210731163927911,modified:20210731163711887,private:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Open,created:20210731163926154,modified:20210731164114943,private:yes,public:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Recent,created:20210731163905536,modified:20210731163711418,private:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/core/ui/SideBar/Tools,created:20210731163927055,modified:20210731164112742,private:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/plugins/bj/calendar/sidbar,created:20240406233726485,creator:soren,modified:20251011162650049,modifier:soren,private:no,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/plugins/kookma/refnotes/ui/bibtexlibrary,created:20240406232515008,creator:soren,modified:20240406232516956,modifier:soren,private:no,public:no,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Explore,created:20210731163930355,creator:soren,modified:20250905205847642,modifier:soren,private:no,public:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/sib/SideBar/Write,created:20210731163929481,modified:20210731163713454,private:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/tzk/SideBar/Explore,created:20251011162515100,creator:soren,modified:20251011162644709,modifier:soren,private:no,public:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SideBar/Visibility/$:/tzk/SideBar/Write,created:20251011162514400,creator:soren,modified:20251011162514400,modifier:soren,private:yes,type:text/vnd.tiddlywiki},{title:$:/config/zettelkasten/SplashScreenMessage,created:20210910163319096,creator:soren,modified:20210910163319296,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:Just a moment while I dig the dungeon...},{title:$:/core,name:Core,description:TiddlyWiki5 core,author:JeremyRuston,core-version:>5.0.0,plugin-priority:0,list:readme,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/Acknowledgements\:{\title\:\$:/Acknowledgements\,\text\:\TiddlyWiki incorporates code from these fine OpenSource projects:\\n\\n* The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/\\n* The Jasmine JavaScript Test Framework|https://jasmine.github.io/\\n* modern-normalize by Sindre Sorhus|https://github.com/sindresorhus/modern-normalize\\n\},\$:/core/copyright.txt\:{\title\:\$:/core/copyright.txt\,\type\:\text/plain\,\text\:\TiddlyWiki created by Jeremy Ruston, (jeremy at jermolene dot com)\\n\\nCopyright (c) 2004-2007, Jeremy Ruston\\nCopyright (c) 2007-2025, UnaMesa Association\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are met:\\n\\n* Redistributions of source code must retain the above copyright notice, this\\n list of conditions and the following disclaimer.\\n\\n* Redistributions in binary form must reproduce the above copyright notice,\\n this list of conditions and the following disclaimer in the documentation\\n and/or other materials provided with the distribution.\\n\\n* Neither the name of the copyright holder nor the names of its\\n contributors may be used to endorse or promote products derived from\\n this software without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS\\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\},\$:/core/icon\:{\title\:\$:/core/icon\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\\\ fill-rule\\\evenodd\\\/>\u003C/svg>\},\$:/core/images/add-comment\:{\title\:\$:/core/images/add-comment\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-add-comment tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\\\/>\u003C/svg>\},\$:/core/images/advanced-search-button\:{\title\:\$:/core/images/advanced-search-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-advanced-search-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\\\/>\u003Ccircle cx\\\48\\\ cy\\\48\\\ r\\\8\\\/>\u003Ccircle cx\\\28\\\ cy\\\48\\\ r\\\8\\\/>\u003Ccircle cx\\\68\\\ cy\\\48\\\ r\\\8\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/auto-height\:{\title\:\$:/core/images/auto-height\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-auto-height tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\\\/>\u003C/svg>\},\$:/core/images/blank\:{\title\:\$:/core/images/blank\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-blank tc-image-button\\\ viewBox\\\0 0 128 128\\\/>\},\$:/core/images/bold\:{\title\:\$:/core/images/bold\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-bold tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\\\/>\u003C/svg>\},\$:/core/images/cancel-button\:{\title\:\$:/core/images/cancel-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-cancel-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\\\/>\u003C/svg>\},\$:/core/images/chevron-down\:{\title\:\$:/core/images/chevron-down\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-chevron-down tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\\\/>\u003Cpath d\\\M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/chevron-left\:{\title\:\$:/core/images/chevron-left\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-chevron-left tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\\\/>\u003Cpath d\\\M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/chevron-right\:{\title\:\$:/core/images/chevron-right\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-chevron-right tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\\\/>\u003Cpath d\\\M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/chevron-up\:{\title\:\$:/core/images/chevron-up\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-chevron-up tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\\\/>\u003Cpath d\\\M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/clone-button\:{\title\:\$:/core/images/clone-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-clone-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\\\/>\u003Cpath d\\\M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/close-all-button\:{\title\:\$:/core/images/close-all-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-close-all-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/close-button\:{\title\:\$:/core/images/close-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-close-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\\\/>\u003C/svg>\},\$:/core/images/close-others-button\:{\title\:\$:/core/images/close-others-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-close-others-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\\\/>\u003C/svg>\},\$:/core/images/copy-clipboard\:{\title\:\$:/core/images/copy-clipboard\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-copy-clipboard tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\33\\\ height\\\8\\\ x\\\40\\\ y\\\40\\\ rx\\\4\\\/>\u003Crect width\\\17\\\ height\\\8\\\ x\\\40\\\ y\\\82\\\ rx\\\4\\\/>\u003Crect width\\\17\\\ height\\\8\\\ x\\\40\\\ y\\\54\\\ rx\\\4\\\/>\u003Crect width\\\33\\\ height\\\8\\\ x\\\40\\\ y\\\96\\\ rx\\\4\\\/>\u003Crect width\\\12\\\ height\\\8\\\ x\\\40\\\ y\\\68\\\ rx\\\4\\\/>\u003Cpath d\\\M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\\\/>\u003Crect width\\\66\\\ height\\\16\\\ x\\\62\\\ y\\\64\\\ rx\\\8\\\/>\u003Cpath d\\\M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/delete-button\:{\title\:\$:/core/images/delete-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-delete-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\ transform\\\translate(12)\\\>\u003Crect width\\\105\\\ height\\\16\\\ y\\\11\\\ rx\\\8\\\/>\u003Crect width\\\48\\\ height\\\16\\\ x\\\28\\\ rx\\\8\\\/>\u003Crect width\\\16\\\ height\\\112\\\ x\\\8\\\ y\\\16\\\ rx\\\8\\\/>\u003Crect width\\\88\\\ height\\\16\\\ x\\\8\\\ y\\\112\\\ rx\\\8\\\/>\u003Crect width\\\16\\\ height\\\112\\\ x\\\80\\\ y\\\16\\\ rx\\\8\\\/>\u003Crect width\\\16\\\ height\\\112\\\ x\\\56\\\ y\\\16\\\ rx\\\8\\\/>\u003Crect width\\\16\\\ height\\\112\\\ x\\\32\\\ y\\\16\\\ rx\\\8\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/discord\:{\title\:\$:/core/images/discord\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-discord tc-image-button\\\ viewBox\\\0 -28.5 256 256\\\>\u003Cpath d\\\M216.856 16.597A208.502 208.502 0 0 0 164.042 0c-2.275 4.113-4.933 9.645-6.766 14.046-19.692-2.961-39.203-2.961-58.533 0-1.832-4.4-4.55-9.933-6.846-14.046a207.809 207.809 0 0 0-52.855 16.638C5.618 67.147-3.443 116.4 1.087 164.956c22.169 16.555 43.653 26.612 64.775 33.193A161.094 161.094 0 0 0 79.735 175.3a136.413 136.413 0 0 1-21.846-10.632 108.636 108.636 0 0 0 5.356-4.237c42.122 19.702 87.89 19.702 129.51 0a131.66 131.66 0 0 0 5.355 4.237 136.07 136.07 0 0 1-21.886 10.653c4.006 8.02 8.638 15.67 13.873 22.848 21.142-6.58 42.646-16.637 64.815-33.213 5.316-56.288-9.08-105.09-38.056-148.36ZM85.474 135.095c-12.645 0-23.015-11.805-23.015-26.18s10.149-26.2 23.015-26.2c12.867 0 23.236 11.804 23.015 26.2.02 14.375-10.148 26.18-23.015 26.18Zm85.051 0c-12.645 0-23.014-11.805-23.014-26.18s10.148-26.2 23.014-26.2c12.867 0 23.236 11.804 23.015 26.2 0 14.375-10.148 26.18-23.015 26.18Z\\\/>\u003C/svg>\},\$:/core/images/done-button\:{\title\:\$:/core/images/done-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-done-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\\\/>\u003C/svg>\},\$:/core/images/down-arrow\:{\title\:\$:/core/images/down-arrow\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-down-arrow tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\\\/>\u003C/svg>\},\$:/core/images/download-button\:{\title\:\$:/core/images/download-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-download-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\\\ class\\\tc-image-download-button-ring\\\/>\u003Cpath d\\\M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/edit-button\:{\title\:\$:/core/images/edit-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-edit-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/erase\:{\title\:\$:/core/images/erase\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-erase tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\\\/>\u003C/svg>\},\$:/core/images/excise\:{\title\:\$:/core/images/excise\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-excise tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\\\/>\u003C/svg>\},\$:/core/images/export-button\:{\title\:\$:/core/images/export-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-export-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\\\/>\u003C/svg>\},\$:/core/images/file\:{\title\:\$:/core/images/file\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-file tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\36\\\ rx\\\4\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\52\\\ rx\\\4\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\68\\\ rx\\\4\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\84\\\ rx\\\4\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\100\\\ rx\\\4\\\/>\u003Crect width\\\40\\\ height\\\8\\\ x\\\32\\\ y\\\20\\\ rx\\\4\\\/>\u003C/svg>\},\$:/core/images/fixed-height\:{\title\:\$:/core/images/fixed-height\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-fixed-height tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\\\/>\u003C/svg>\},\$:/core/images/fold-all-button\:{\title\:\$:/core/images/fold-all-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-fold-all tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\128\\\ height\\\16\\\ rx\\\8\\\/>\u003Crect width\\\128\\\ height\\\16\\\ y\\\64\\\ rx\\\8\\\/>\u003Cpath d\\\M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/fold-button\:{\title\:\$:/core/images/fold-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-fold tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\128\\\ height\\\16\\\ rx\\\8\\\/>\u003Cpath d\\\M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/fold-others-button\:{\title\:\$:/core/images/fold-others-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-fold-others tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\128\\\ height\\\16\\\ y\\\56.031\\\ rx\\\8\\\/>\u003Cpath d\\\M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/folder\:{\title\:\$:/core/images/folder\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-folder tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\\\/>\u003Cpath d\\\M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/full-screen-button\:{\title\:\$:/core/images/full-screen-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-full-screen-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\\\/>\u003C/svg>\},\$:/core/images/github\:{\title\:\$:/core/images/github\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-github tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\\\/>\u003C/svg>\},\$:/core/images/gitter\:{\title\:\$:/core/images/gitter\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-gitter tc-image-button\\\ viewBox\\\0 0 18 25\\\>\u003Cpath d\\\M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\\\/>\u003C/svg>\},\$:/core/images/globe\:{\title\:\$:/core/images/globe\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-globe tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\\\/>\u003Cpath d\\\M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/heading-1\:{\title\:\$:/core/images/heading-1\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-1 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\\\/>\u003C/svg>\},\$:/core/images/heading-2\:{\title\:\$:/core/images/heading-2\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-2 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\\\/>\u003C/svg>\},\$:/core/images/heading-3\:{\title\:\$:/core/images/heading-3\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-3 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\\\/>\u003C/svg>\},\$:/core/images/heading-4\:{\title\:\$:/core/images/heading-4\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-4 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\\\/>\u003C/svg>\},\$:/core/images/heading-5\:{\title\:\$:/core/images/heading-5\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-5 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\\\/>\u003C/svg>\},\$:/core/images/heading-6\:{\title\:\$:/core/images/heading-6\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-heading-6 tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\\\/>\u003C/svg>\},\$:/core/images/help\:{\title\:\$:/core/images/help\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-help tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\\\/>\u003C/svg>\},\$:/core/images/home-button\:{\title\:\$:/core/images/home-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-home-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\\\/>\u003C/svg>\},\$:/core/images/import-button\:{\title\:\$:/core/images/import-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-import-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\\\/>\u003C/svg>\},\$:/core/images/info-button\:{\title\:\$:/core/images/info-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-info-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\ transform\\\translate(.05)\\\>\u003Cpath d\\\M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\\\/>\u003Ccircle cx\\\64\\\ cy\\\32\\\ r\\\8\\\/>\u003Crect width\\\16\\\ height\\\56\\\ x\\\56\\\ y\\\48\\\ rx\\\8\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/input-button\:{\title\:\$:/core/images/input-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-input-button tc-image-button\\\ viewBox\\\0 0 22 22\\\>\u003Cpath d\\\M1.375 22h19.249c.365 0 .716-.145.973-.404v.001c.258-.257.404-.607.403-.972v-11a1.376 1.376 0 0 0-2.75 0v9.625H2.75V9.625a1.376 1.376 0 0 0-2.75 0v11C0 21.384.617 22 1.375 22Z\\\/>\u003Cpath d\\\m9.732 11.904-1.541-1.541a1.375 1.375 0 1 0-1.944 1.944l3.887 3.888c.258.258.608.402.973.402h-.001c.353 0 .705-.134.974-.402l3.888-3.889a1.376 1.376 0 0 0 .001-1.944 1.377 1.377 0 0 0-1.946 0l-1.541 1.542V1.376a1.375 1.375 0 1 0-2.75 0v10.528Z\\\/>\u003C/svg>\},\$:/core/images/italic\:{\title\:\$:/core/images/italic\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-italic tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M66.711 0h22.41L62.408 128H40z\\\/>\u003C/svg>\},\$:/core/images/language\:{\title\:\$:/core/images/language\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-language tc-image-button\\\ viewBox\\\0 0 92 92\\\>\u003Cpath d\\\M0 0h2480.32v3507.87H0z\\\ style\\\fill:none\\\ transform\\\scale(.03696 .02613)\\\/>\u003Cpath d\\\M71.508 62.298c-1.243 15.83-16.758 28.344-35.714 28.344-5.713 0-11.113-1.136-15.905-3.158-2.977 2.498-8.618 4.183-15.088 4.183-.929 0-1.84-.034-2.73-.102 4.499-1.5 7.989-4.886 9.298-9.099C4.373 76.918 0 69.016 0 60.246 0 49.773 6.237 40.537 15.729 35.07c1.235 7.764 5.492 14.713 11.724 19.953l-7.269 18.453c-.393.976-.676 1.737-.847 2.285a5.326 5.326 0 0 0-.256 1.591c0 .89.368 1.686 1.103 2.388.736.702 1.583 1.052 2.542 1.052 1.13 0 1.942-.33 2.438-.988.497-.659 1.096-1.93 1.797-3.812l1.797-4.826h15.3l1.797 4.723c.239.582.526 1.254.86 2.015.333.762.646 1.327.936 1.695.291.368.65.659 1.078.873.428.213.942.32 1.54.32a3.586 3.586 0 0 0 2.632-1.09c.727-.728 1.09-1.528 1.09-2.4 0-.84-.384-2.183-1.154-4.031l-3.545-8.755c2.142.3 4.34.455 6.58.455 5.541 0 10.824-.951 15.636-2.674Zm-30.563.247 1.059 2.898H30.76l2.32-6.467a43.152 43.152 0 0 0 7.865 3.569Z\\\/>\u003Cpath d\\\M71.778 57.635c-4.793 2.023-10.191 3.157-15.907 3.157-19.767 0-35.793-13.61-35.793-30.396S36.104.001 55.87.001c19.772 0 35.797 13.61 35.797 30.395 0 8.77-4.373 16.674-11.371 22.221 1.309 4.211 4.8 7.6 9.299 9.1-.89.067-1.802.1-2.73.1-6.47 0-12.11-1.686-15.088-4.182Zm-15.59-15.887a44.237 44.237 0 0 0 3.3 2.496c4.284 2.942 9.06 5.381 14.33 7.315l2.334-3.517c-5.134-1.871-9.696-4.125-13.69-6.763a42.558 42.558 0 0 1-3.37-2.483c4.247-4.806 7.374-10.43 9.38-16.869h6.698V17.78h-16.7a47.226 47.226 0 0 0-1.528-2.959 52.943 52.943 0 0 0-2.885-4.562l-4.218 1.554a36.467 36.467 0 0 1 2.971 3.983c.427.661.833 1.323 1.217 1.984H36.394v4.148h6.77a36.878 36.878 0 0 0 5.422 11.56 42.918 42.918 0 0 0 4.591 5.497c-4.687 4.017-10.548 6.932-17.582 8.744l2.247 3.709c7.746-2.44 13.861-5.67 18.347-9.689Zm-9.047-19.82h16.991c-1.86 5.668-4.528 10.402-8 14.204a42.526 42.526 0 0 1-4.247-4.922c-2.126-2.883-3.71-5.977-4.744-9.283Z\\\/>\u003C/svg>\},\$:/core/images/layout-button\:{\title\:\$:/core/images/layout-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-layout-button tc-image-button\\\ viewBox\\\0 0 24 24\\\ stroke-width\\\1\\\ stroke\\\none\\\>\u003Cpath d\\\M0 0h24v24H0z\\\ fill\\\none\\\/>\u003Crect x\\\2\\\ y\\\2\\\ width\\\7\\\ height\\\7\\\ rx\\\2\\\/>\u003Crect x\\\2\\\ y\\\13\\\ width\\\7\\\ height\\\9\\\ rx\\\2\\\/>\u003Crect x\\\12\\\ y\\\2\\\ width\\\10\\\ height\\\20\\\ rx\\\2\\\/>\u003C/svg>\},\$:/core/images/left-arrow\:{\title\:\$:/core/images/left-arrow\,\created\:\20150315234410875\,\modified\:\20150315235324760\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-left-arrow tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\\\/>\u003C/svg>\},\$:/core/images/line-width\:{\title\:\$:/core/images/line-width\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-line-width tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\\\/>\u003C/svg>\},\$:/core/images/link\:{\title\:\$:/core/images/link\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-link tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\\\/>\u003Cpath d\\\M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/linkify\:{\title\:\$:/core/images/linkify\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-linkify-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\\\/>\u003C/svg>\},\$:/core/images/list-bullet\:{\title\:\$:/core/images/list-bullet\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-list-bullet tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\\\/>\u003C/svg>\},\$:/core/images/list-number\:{\title\:\$:/core/images/list-number\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-list-number tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\\\/>\u003C/svg>\},\$:/core/images/list\:{\title\:\$:/core/images/list\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-list tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\\\/>\u003C/svg>\},\$:/core/images/locked-padlock\:{\title\:\$:/core/images/locked-padlock\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-locked-padlock tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\\\/>\u003C/svg>\},\$:/core/images/mail\:{\title\:\$:/core/images/mail\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-mail tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\\\/>\u003C/svg>\},\$:/core/images/mastodon\:{\title\:\$:/core/images/mastodon\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-mastodon tc-image-button\\\ viewBox\\\0 0 128 128\\\>\\n \u003Cpath d\\\M112.716,76.735C111.231,85.764 99.411,95.646 85.836,97.561C78.757,98.559 71.787,99.476 64.355,99.073C52.201,98.415 42.61,95.646 42.61,95.646C42.61,97.044 42.683,98.374 42.829,99.619C44.409,113.79 54.723,114.639 64.493,115.035C74.354,115.434 83.134,112.163 83.134,112.163L83.539,122.695C83.539,122.695 76.642,127.071 64.355,127.875C57.58,128.315 49.167,127.674 39.369,124.61C18.118,117.965 14.463,91.202 13.904,64.048C13.733,55.985 13.839,48.383 13.839,42.024C13.839,14.257 29.238,6.118 29.238,6.118C37.002,1.905 50.326,0.134 64.177,-0L64.517,-0C78.369,0.134 91.701,1.905 99.465,6.118C99.465,6.118 114.864,14.257 114.864,42.024C114.864,42.024 115.057,62.511 112.716,76.735ZM96.7,44.179C96.7,37.307 95.219,31.847 92.245,27.807C89.177,23.767 85.16,21.696 80.174,21.696C74.403,21.696 70.034,24.316 67.146,29.556L64.337,35.118L61.529,29.556C58.64,24.316 54.271,21.696 48.501,21.696C43.514,21.696 39.497,23.767 36.43,27.807C33.455,31.847 31.974,37.307 31.974,44.179L31.974,77.8L43.249,77.8L43.249,45.167C43.249,38.288 45.699,34.796 50.599,34.796C56.017,34.796 58.733,38.938 58.733,47.128L58.733,64.99L69.941,64.99L69.941,47.128C69.941,38.938 72.657,34.796 78.075,34.796C82.975,34.796 85.425,38.288 85.425,45.167L85.425,77.8L96.7,77.8L96.7,44.179Z\\\/>\\n\u003C/svg>\\n\},\$:/core/images/menu-button\:{\title\:\$:/core/images/menu-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-menu-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Crect width\\\128\\\ height\\\16\\\ y\\\16\\\ rx\\\8\\\/>\u003Crect width\\\128\\\ height\\\16\\\ y\\\56\\\ rx\\\8\\\/>\u003Crect width\\\128\\\ height\\\16\\\ y\\\96\\\ rx\\\8\\\/>\u003C/svg>\},\$:/core/images/minus-button\:{\title\:\$:/core/images/minus-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-minus-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M64 0c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64C0 28.654 28.654 0 64 0zm.332 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\\\/>\u003Crect width\\\80\\\ height\\\16\\\ x\\\24\\\ y\\\56\\\ rx\\\8\\\/>\u003C/svg>\},\$:/core/images/mono-block\:{\title\:\$:/core/images/mono-block\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-mono-block tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\\\/>\u003C/svg>\},\$:/core/images/mono-line\:{\title\:\$:/core/images/mono-line\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-mono-line tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\\\/>\u003C/svg>\},\$:/core/images/network-activity\:{\title\:\$:/core/images/network-activity\,\tags\:\$:/tags/Image\,\text\:\\u003Csvg width\\\22pt\\\ height\\\22pt\\\ class\\\tc-image-network-activity tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg class{{{ {$:/state/http-requests}match0thenelsetc-network-activity-background }}}>\\n\u003C$list filter\\\{$:/state/http-requests}match0\\\ variable\\\ignore\\\>\\n\u003Cpath d\\\M64.043 45.153a4.002 4.002 0 0 1 4.367 2.21l.084.188 30.403 73.4a4 4 0 0 1-7.307 3.25l-.084-.188-3.103-7.49-8.898 8.899a3.985 3.985 0 0 1-2.624 1.166l-.205.005a3.987 3.987 0 0 1-2.828-1.171l-9.849-9.848-9.847 9.848a3.985 3.985 0 0 1-2.624 1.166l-.204.005a3.987 3.987 0 0 1-2.829-1.171l-8.899-8.9-3.102 7.491a4 4 0 1 1-7.391-3.062l30.403-73.4a4.001 4.001 0 0 1 4.495-2.39l.042-.008Zm13.636 56.74-8.023 8.024 7.02 7.019 8.023-8.022-7.02-7.02Zm-27.353.008-7.019 7.019 8.016 8.016 7.019-7.02-8.016-8.015Zm13.68-13.68-8.023 8.023 8.016 8.016 8.023-8.023-8.016-8.016Zm-8.971-8.971-4.687 11.315 8.001-8.001-3.314-3.314Zm17.933.009-3.305 3.305 7.979 7.979-4.674-11.284ZM64 57.607l-5.666 13.68c.096.072.188.15.278.232l.133.126 5.261 5.262 5.262-5.262c.128-.127.261-.244.4-.35L64 57.607Zm0-34.69a8 8 0 1 1 0 16 8 8 0 0 1 0-16Z\\\/>\\n\u003C/$list>\\n\u003C$list filter\\\{$:/state/http-requests}!match0\\\ variable\\\ignore\\\>\\n\u003Cpath d\\\M109.395.952a4.002 4.002 0 0 1 3.787 2.708C117.529 11.62 120 20.753 120 30.462c0 15.186-6.044 28.96-15.858 39.047a4 4 0 1 1-6.47-4.626l-.12-.094C106.466 56.074 112 43.914 112 30.462c0-8.492-2.205-16.469-6.074-23.39l.054-.036a4 4 0 0 1 3.415-6.084Zm-90.762 0a4 4 0 0 1 3.072 6.562l.093.06A47.786 47.786 0 0 0 16 30.463c0 13.315 5.42 25.363 14.176 34.058l-.01.007a4 4 0 1 1-6.312 4.863l-.063.05C14.017 59.359 8 45.613 8 30.462c0-9.77 2.502-18.956 6.9-26.952A4.002 4.002 0 0 1 18.634.952Z\\\/>\u003Cpath d\\\M64.043 44.698a4.002 4.002 0 0 1 4.367 2.21l.084.188 30.403 73.4a4 4 0 0 1-7.307 3.25l-.084-.188-3.103-7.49-8.898 8.9a3.985 3.985 0 0 1-2.624 1.166l-.205.005a3.987 3.987 0 0 1-2.828-1.172l-9.849-9.848-9.847 9.848a3.985 3.985 0 0 1-2.624 1.167l-.204.005a3.987 3.987 0 0 1-2.829-1.172l-8.899-8.899-3.102 7.49a4 4 0 0 1-7.391-3.061l30.403-73.4a4.001 4.001 0 0 1 4.495-2.39l.042-.009ZM77.68 101.44l-8.023 8.023 7.02 7.019 8.023-8.022-7.02-7.02Zm-27.353.007-7.019 7.019 8.016 8.016 7.019-7.019-8.016-8.016Zm13.68-13.68-8.023 8.023 8.016 8.016 8.023-8.023-8.016-8.016Zm-8.971-8.971L50.348 90.11l8.001-8.001-3.314-3.314Zm17.933.009-3.305 3.305 7.979 7.979-4.674-11.284ZM64 57.152l-5.666 13.68c.096.073.188.15.278.232l.133.127 5.261 5.261 5.262-5.261c.128-.128.261-.244.4-.351L64 57.152ZM38.503 1.058a4 4 0 0 1 2.7 6.952l.17-.175C35.582 13.625 32 21.625 32 30.462c0 8.838 3.582 16.838 9.374 22.629a4 4 0 0 1-5.659 5.658l-.01.01C28.473 51.52 24 41.526 24 30.485 24 19.567 28.374 9.67 35.466 2.453a3.995 3.995 0 0 1 3.037-1.395ZM89.369.952c1.14 0 2.17.478 2.899 1.244l.005-.006C99.518 9.43 104 19.434 104 30.485c0 10.826-4.3 20.648-11.287 27.85a4 4 0 1 1-6.054-5.213l-.032-.032C92.418 47.299 96 39.299 96 30.462c0-8.73-3.496-16.643-9.164-22.416A4 4 0 0 1 89.368.952Zm-39.282 11.14a4 4 0 0 1 2.59 7.048l.01.009A15.95 15.95 0 0 0 48 30.462a15.95 15.95 0 0 0 4.687 11.315l-.01.01a4 4 0 1 1-5.82 5.47l.173.177A23.925 23.925 0 0 1 40 30.462a23.925 23.925 0 0 1 7.03-16.97l.01.01a3.991 3.991 0 0 1 3.047-1.41Zm27.895.07a3.99 3.99 0 0 1 2.984 1.336l.006-.005A23.925 23.925 0 0 1 88 30.463a23.92 23.92 0 0 1-6.707 16.642l-.3.305a4 4 0 1 1-5.679-5.632v-.002A15.95 15.95 0 0 0 80 30.462a15.95 15.95 0 0 0-4.685-11.312 4.012 4.012 0 0 1-1.333-2.987 4 4 0 0 1 4-4ZM64 22.463a8 8 0 1 1 0 16 8 8 0 0 1 0-16Z\\\/>\\n\u003C/$list>\\n\u003C/g>\u003C/svg>\},\$:/core/images/new-button\:{\title\:\$:/core/images/new-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-new-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\\\/>\u003C/svg>\},\$:/core/images/new-here-button\:{\title\:\$:/core/images/new-here-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-new-here-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\\\/>\u003Cpath d\\\M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\\\/>\u003Crect width\\\16\\\ height\\\48\\\ x\\\96\\\ y\\\80\\\ rx\\\8\\\/>\u003Crect width\\\48\\\ height\\\16\\\ x\\\80\\\ y\\\96\\\ rx\\\8\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/new-image-button\:{\title\:\$:/core/images/new-image-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-new-image-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\\\/>\u003C/svg>\},\$:/core/images/new-journal-button\:{\title\:\$:/core/images/new-journal-button\,\tags\:\$:/tags/Image\,\text\:\\u003C$parameters size\\\22pt\\\ day\u003C\u003Cnow \\\DD\\\>>>\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-new-journal-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\\\/>\u003Ctext class\\\tc-fill-background\\\ font-family\\\Helvetica\\\ font-size\\\47.172\\\ font-weight\\\bold\\\ transform\\\rotate(30 25.742 95.82)\\\>\u003Ctspan x\\\42\\\ y\\\77.485\\\ text-anchor\\\middle\\\>\u003C$text text\u003C\u003Cday>>/>\u003C/tspan>\u003C/text>\u003C/g>\u003C/svg>\u003C/$parameters>\},\$:/core/images/opacity\:{\title\:\$:/core/images/opacity\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-opacity tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\\\/>\u003Cpath d\\\M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\\\/>\u003Cpath d\\\M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/open-window\:{\title\:\$:/core/images/open-window\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-open-window tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\\\/>\u003Cpath d\\\M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/options-button\:{\title\:\$:/core/images/options-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-options-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\\\/>\u003C/svg>\},\$:/core/images/paint\:{\title\:\$:/core/images/paint\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-paint tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\\\/>\u003C/svg>\},\$:/core/images/palette\:{\title\:\$:/core/images/palette\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-palette tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\\\/>\u003C/svg>\},\$:/core/images/permalink-button\:{\title\:\$:/core/images/permalink-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-permalink-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\\\/>\u003C/svg>\},\$:/core/images/permaview-button\:{\title\:\$:/core/images/permaview-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-permaview-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\\\/>\u003C/svg>\},\$:/core/images/picture\:{\title\:\$:/core/images/picture\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-picture tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\\\/>\u003C/svg>\},\$:/core/images/plugin-generic-language\:{\title\:\$:/core/images/plugin-generic-language\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> viewBox\\\0 0 128 128\\\ class\\\tc-image-plugin-generic-language tc-image-button\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\\\/>\u003C/svg>\},\$:/core/images/plugin-generic-plugin\:{\title\:\$:/core/images/plugin-generic-plugin\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> viewBox\\\0 0 128 128\\\ class\\\tc-image-plugin-generic-plugin tc-image-button\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\\\/>\u003C/svg>\},\$:/core/images/plugin-generic-theme\:{\title\:\$:/core/images/plugin-generic-theme\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> viewBox\\\0 0 128 128\\\ class\\\tc-image-plugin-generic-theme tc-image-button\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\\\/>\u003C/svg>\},\$:/core/images/plus-button\:{\title\:\$:/core/images/plus-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-plus-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M64-.333c35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64zM64 16c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\\\/>\u003Crect width\\\80\\\ height\\\16\\\ x\\\24\\\ y\\\56\\\ rx\\\8\\\/>\u003Crect width\\\16\\\ height\\\80\\\ x\\\56\\\ y\\\24\\\ rx\\\8\\\/>\u003C/svg>\},\$:/core/images/preview-closed\:{\title\:\$:/core/images/preview-closed\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-preview-closed tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\62\\\ y\\\96\\\ rx\\\4\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\78\\\ y\\\93\\\ rx\\\4\\\ transform\\\rotate(-5 80 101)\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\46\\\ y\\\93\\\ rx\\\4\\\ transform\\\rotate(5 48 101)\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\30\\\ y\\\88\\\ rx\\\4\\\ transform\\\rotate(10 32 96)\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\94\\\ y\\\88\\\ rx\\\4\\\ transform\\\rotate(-10 96 96)\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\110\\\ y\\\80\\\ rx\\\4\\\ transform\\\rotate(-20 112 88)\\\/>\u003Crect width\\\4\\\ height\\\16\\\ x\\\14\\\ y\\\80\\\ rx\\\4\\\ transform\\\rotate(20 16 88)\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/preview-open\:{\title\:\$:/core/images/preview-open\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-preview-open tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\\\/>\u003Cpath d\\\M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/print-button\:{\title\:\$:/core/images/print-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-print-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\36\\\ rx\\\4\\\/>\u003Crect width\\\64\\\ height\\\8\\\ x\\\32\\\ y\\\52\\\ rx\\\4\\\/>\u003Crect width\\\40\\\ height\\\8\\\ x\\\32\\\ y\\\20\\\ rx\\\4\\\/>\u003Cpath d\\\M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/quote\:{\title\:\$:/core/images/quote\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-quote tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\\\/>\u003C/svg>\},\$:/core/images/refresh-button\:{\title\:\$:/core/images/refresh-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-refresh-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\\\/>\u003C/svg>\},\$:/core/images/right-arrow\:{\title\:\$:/core/images/right-arrow\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-right-arrow tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\\\/>\u003C/svg>\},\$:/core/images/rotate-left\:{\title\:\$:/core/images/rotate-left\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-rotate-left tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\32\\\ height\\\80\\\ rx\\\8\\\/>\u003Crect width\\\80\\\ height\\\32\\\ x\\\48\\\ y\\\96\\\ rx\\\8\\\/>\u003Cpath d\\\M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/save-button-dynamic\:{\title\:\$:/core/images/save-button-dynamic\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-save-button-dynamic tc-image-button\\\ viewBox\\\0 0 128 128\\\>\\n\u003Cg class\\\tc-image-save-button-dynamic-clean\\\>\\n\u003Cpath fill-rule\\\evenodd\\\ d\\\M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\\\/>\\n\u003C/g>\\n\u003Cg class\\\tc-image-save-button-dynamic-dirty\\\>\\n\u003Cpath d\\\M64.856912,0 C100.203136,0 128.856912,28.653776 128.856912,64 C128.856912,99.346224 100.203136,128 64.856912,128 C29.510688,128 0.856911958,99.346224 0.856911958,64 C0.856911958,28.653776 29.510688,0 64.856912,0 Z M64.856912,16 C38.347244,16 16.856912,37.490332 16.856912,64 C16.856912,90.509668 38.347244,112 64.856912,112 C91.3665799,112 112.856912,90.509668 112.856912,64 C112.856912,37.490332 91.3665799,16 64.856912,16 Z\\\>\u003C/path>\\n\u003Ccircle cx\\\65\\\ cy\\\64\\\ r\\\32\\\>\u003C/circle>\\n\u003C/g>\\n\u003C/svg>\},\$:/core/images/save-button\:{\title\:\$:/core/images/save-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-save-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\\\/>\u003C/svg>\},\$:/core/images/size\:{\title\:\$:/core/images/size\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-size tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\\\/>\u003C/svg>\},\$:/core/images/spiral\:{\title\:\$:/core/images/spiral\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-spiral tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\\\/>\u003C/svg>\},\$:/core/images/stamp\:{\title\:\$:/core/images/stamp\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-stamp tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\\\/>\u003C/svg>\},\$:/core/images/standard-layout\:{\title\:\$:/core/images/standard-layout\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-standard-layout tc-image-button\\\ viewBox\\\0 0 128 128\\\>\\n \u003Cpath d\\\M71.93 72A8.07 8.07 0 0 1 80 80.07v7.86A8.071 8.071 0 0 1 71.93 96H8.07A8.067 8.067 0 0 1 0 87.93v-7.86A8.072 8.072 0 0 1 8.07 72h63.86Zm0 32a8.07 8.07 0 0 1 8.07 8.07v7.86a8.071 8.071 0 0 1-8.07 8.07H8.07A8.067 8.067 0 0 1 0 119.93v-7.86A8.072 8.072 0 0 1 8.07 104h63.86Zm0-104A8.068 8.068 0 0 1 80 8.07v47.86A8.073 8.073 0 0 1 71.93 64H8.07A8.07 8.07 0 0 1 0 55.93V8.07A8.072 8.072 0 0 1 8.07 0h63.86Zm48 0c2.14 0 4.193.85 5.706 2.364A8.067 8.067 0 0 1 128 8.07v111.86c0 2.14-.85 4.193-2.364 5.706A8.067 8.067 0 0 1 119.93 128H96.07c-2.14 0-4.193-.85-5.706-2.364A8.067 8.067 0 0 1 88 119.93V8.07c0-2.14.85-4.193 2.364-5.706A8.067 8.067 0 0 1 96.07 0h23.86ZM116 24h-16a3.995 3.995 0 0 0-2.828 1.172 3.995 3.995 0 0 0 0 5.656A3.995 3.995 0 0 0 100 32h16a3.995 3.995 0 0 0 2.828-1.172 3.995 3.995 0 0 0 0-5.656A3.995 3.995 0 0 0 116 24Z\\\/>\\n\u003C/svg>\},\$:/core/images/star-filled\:{\title\:\$:/core/images/star-filled\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-star-filled tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\\\/>\u003C/svg>\},\$:/core/images/storyview-classic\:{\title\:\$:/core/images/storyview-classic\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-storyview-classic tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\\\/>\u003C/svg>\},\$:/core/images/storyview-pop\:{\title\:\$:/core/images/storyview-pop\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-storyview-pop tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\\\/>\u003C/svg>\},\$:/core/images/storyview-zoomin\:{\title\:\$:/core/images/storyview-zoomin\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-storyview-zoomin tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\\\/>\u003C/svg>\},\$:/core/images/strikethrough\:{\title\:\$:/core/images/strikethrough\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-strikethrough tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\\\/>\u003Cpath d\\\M5 54h118v16H5z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/subscript\:{\title\:\$:/core/images/subscript\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-subscript tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\\\/>\u003C/svg>\},\$:/core/images/superscript\:{\title\:\$:/core/images/superscript\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-superscript tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\\\/>\u003C/svg>\},\$:/core/images/tag-button\:{\title\:\$:/core/images/tag-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-tag-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\\\/>\u003Cpath d\\\M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/theme-button\:{\title\:\$:/core/images/theme-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-theme-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\\\/>\u003Cpath d\\\M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/timestamp-off\:{\title\:\$:/core/images/timestamp-off\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-timestamp-off tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\\\/>\u003Cpath d\\\M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/timestamp-on\:{\title\:\$:/core/images/timestamp-on\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-timestamp-on tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\\\/>\u003Cpath d\\\M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/tip\:{\title\:\$:/core/images/tip\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-tip tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\\\/>\u003C/svg>\},\$:/core/images/transcludify\:{\title\:\$:/core/images/transcludify\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-transcludify-button tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\\\/>\u003C/svg>\},\$:/core/images/twitter\:{\title\:\$:/core/images/twitter\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-twitter tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\\\/>\u003C/svg>\},\$:/core/images/underline\:{\title\:\$:/core/images/underline\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-underline tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\\\/>\u003C/svg>\},\$:/core/images/unfold-all-button\:{\title\:\$:/core/images/unfold-all-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-unfold-all tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\128\\\ height\\\16\\\ rx\\\8\\\/>\u003Crect width\\\128\\\ height\\\16\\\ y\\\64\\\ rx\\\8\\\/>\u003Cpath d\\\M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/unfold-button\:{\title\:\$:/core/images/unfold-button\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-unfold tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cg fill-rule\\\evenodd\\\>\u003Crect width\\\128\\\ height\\\16\\\ rx\\\8\\\/>\u003Cpath d\\\M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\\\/>\u003C/g>\u003C/svg>\},\$:/core/images/unlocked-padlock\:{\title\:\$:/core/images/unlocked-padlock\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-unlocked-padlock tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\\\/>\u003C/svg>\},\$:/core/images/up-arrow\:{\title\:\$:/core/images/up-arrow\,\created\:\20150316000544368\,\modified\:\20150316000831867\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-up-arrow tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath d\\\M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\\\/>\u003C/svg>\},\$:/core/images/video\:{\title\:\$:/core/images/video\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-video tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\\\/>\u003C/svg>\},\$:/core/images/warning\:{\title\:\$:/core/images/warning\,\tags\:\$:/tags/Image\,\text\:\\\\\parameters (size:\\\22pt\\\)\\n\u003Csvg width\u003C\u003Csize>> height\u003C\u003Csize>> class\\\tc-image-warning tc-image-button\\\ viewBox\\\0 0 128 128\\\>\u003Cpath fill-rule\\\evenodd\\\ d\\\M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\\\/>\u003C/svg>\},\$:/language/Buttons/AdvancedSearch/Caption\:{\title\:\$:/language/Buttons/AdvancedSearch/Caption\,\text\:\advanced search\},\$:/language/Buttons/AdvancedSearch/Hint\:{\title\:\$:/language/Buttons/AdvancedSearch/Hint\,\text\:\Advanced search\},\$:/language/Buttons/Cancel/Caption\:{\title\:\$:/language/Buttons/Cancel/Caption\,\text\:\cancel\},\$:/language/Buttons/Cancel/Hint\:{\title\:\$:/language/Buttons/Cancel/Hint\,\text\:\Discard changes to this tiddler\},\$:/language/Buttons/Clone/Caption\:{\title\:\$:/language/Buttons/Clone/Caption\,\text\:\clone\},\$:/language/Buttons/Clone/Hint\:{\title\:\$:/language/Buttons/Clone/Hint\,\text\:\Clone this tiddler\},\$:/language/Buttons/Close/Caption\:{\title\:\$:/language/Buttons/Close/Caption\,\text\:\close\},\$:/language/Buttons/Close/Hint\:{\title\:\$:/language/Buttons/Close/Hint\,\text\:\Close this tiddler\},\$:/language/Buttons/CloseAll/Caption\:{\title\:\$:/language/Buttons/CloseAll/Caption\,\text\:\close all\},\$:/language/Buttons/CloseAll/Hint\:{\title\:\$:/language/Buttons/CloseAll/Hint\,\text\:\Close all tiddlers\},\$:/language/Buttons/CloseOthers/Caption\:{\title\:\$:/language/Buttons/CloseOthers/Caption\,\text\:\close others\},\$:/language/Buttons/CloseOthers/Hint\:{\title\:\$:/language/Buttons/CloseOthers/Hint\,\text\:\Close other tiddlers\},\$:/language/Buttons/ControlPanel/Caption\:{\title\:\$:/language/Buttons/ControlPanel/Caption\,\text\:\control panel\},\$:/language/Buttons/ControlPanel/Hint\:{\title\:\$:/language/Buttons/ControlPanel/Hint\,\text\:\Open control panel\},\$:/language/Buttons/CopyToClipboard/Caption\:{\title\:\$:/language/Buttons/CopyToClipboard/Caption\,\text\:\copy to clipboard\},\$:/language/Buttons/CopyToClipboard/Hint\:{\title\:\$:/language/Buttons/CopyToClipboard/Hint\,\text\:\Copy this text to the clipboard\},\$:/language/Buttons/Delete/Caption\:{\title\:\$:/language/Buttons/Delete/Caption\,\text\:\delete\},\$:/language/Buttons/Delete/Hint\:{\title\:\$:/language/Buttons/Delete/Hint\,\text\:\Delete this tiddler\},\$:/language/Buttons/DeleteTiddlers/Caption\:{\title\:\$:/language/Buttons/DeleteTiddlers/Caption\,\text\:\delete tiddlers\},\$:/language/Buttons/DeleteTiddlers/Hint\:{\title\:\$:/language/Buttons/DeleteTiddlers/Hint\,\text\:\Delete tiddlers\},\$:/language/Buttons/Edit/Caption\:{\title\:\$:/language/Buttons/Edit/Caption\,\text\:\edit\},\$:/language/Buttons/Edit/Hint\:{\title\:\$:/language/Buttons/Edit/Hint\,\text\:\Edit this tiddler\},\$:/language/Buttons/Encryption/Caption\:{\title\:\$:/language/Buttons/Encryption/Caption\,\text\:\encryption\},\$:/language/Buttons/Encryption/Hint\:{\title\:\$:/language/Buttons/Encryption/Hint\,\text\:\Set or clear a password for saving this wiki\},\$:/language/Buttons/Encryption/ClearPassword/Caption\:{\title\:\$:/language/Buttons/Encryption/ClearPassword/Caption\,\text\:\clear password\},\$:/language/Buttons/Encryption/ClearPassword/Hint\:{\title\:\$:/language/Buttons/Encryption/ClearPassword/Hint\,\text\:\Clear the password and save this wiki without encryption\},\$:/language/Buttons/Encryption/SetPassword/Caption\:{\title\:\$:/language/Buttons/Encryption/SetPassword/Caption\,\text\:\set password\},\$:/language/Buttons/Encryption/SetPassword/Hint\:{\title\:\$:/language/Buttons/Encryption/SetPassword/Hint\,\text\:\Set a password for saving this wiki with encryption\},\$:/language/Buttons/EmergencyDownload/Caption\:{\title\:\$:/language/Buttons/EmergencyDownload/Caption\,\text\:\download tiddlers as json\},\$:/language/Buttons/ExportPage/Caption\:{\title\:\$:/language/Buttons/ExportPage/Caption\,\text\:\export all\},\$:/language/Buttons/ExportPage/Hint\:{\title\:\$:/language/Buttons/ExportPage/Hint\,\text\:\Export all tiddlers\},\$:/language/Buttons/ExportTiddler/Caption\:{\title\:\$:/language/Buttons/ExportTiddler/Caption\,\text\:\export tiddler\},\$:/language/Buttons/ExportTiddler/Hint\:{\title\:\$:/language/Buttons/ExportTiddler/Hint\,\text\:\Export tiddler\},\$:/language/Buttons/ExportTiddlers/Caption\:{\title\:\$:/language/Buttons/ExportTiddlers/Caption\,\text\:\export tiddlers\},\$:/language/Buttons/ExportTiddlers/Hint\:{\title\:\$:/language/Buttons/ExportTiddlers/Hint\,\text\:\Export tiddlers\},\$:/language/Buttons/SidebarSearch/Hint\:{\title\:\$:/language/Buttons/SidebarSearch/Hint\,\text\:\Select the sidebar search field\},\$:/language/Buttons/Fold/Caption\:{\title\:\$:/language/Buttons/Fold/Caption\,\text\:\fold tiddler\},\$:/language/Buttons/Fold/Hint\:{\title\:\$:/language/Buttons/Fold/Hint\,\text\:\Fold the body of this tiddler\},\$:/language/Buttons/Fold/FoldBar/Caption\:{\title\:\$:/language/Buttons/Fold/FoldBar/Caption\,\text\:\fold-bar\},\$:/language/Buttons/Fold/FoldBar/Hint\:{\title\:\$:/language/Buttons/Fold/FoldBar/Hint\,\text\:\Optional bars to fold and unfold tiddlers\},\$:/language/Buttons/Unfold/Caption\:{\title\:\$:/language/Buttons/Unfold/Caption\,\text\:\unfold tiddler\},\$:/language/Buttons/Unfold/Hint\:{\title\:\$:/language/Buttons/Unfold/Hint\,\text\:\Unfold the body of this tiddler\},\$:/language/Buttons/FoldOthers/Caption\:{\title\:\$:/language/Buttons/FoldOthers/Caption\,\text\:\fold other tiddlers\},\$:/language/Buttons/FoldOthers/Hint\:{\title\:\$:/language/Buttons/FoldOthers/Hint\,\text\:\Fold the bodies of other opened tiddlers\},\$:/language/Buttons/FoldAll/Caption\:{\title\:\$:/language/Buttons/FoldAll/Caption\,\text\:\fold all tiddlers\},\$:/language/Buttons/FoldAll/Hint\:{\title\:\$:/language/Buttons/FoldAll/Hint\,\text\:\Fold the bodies of all opened tiddlers\},\$:/language/Buttons/UnfoldAll/Caption\:{\title\:\$:/language/Buttons/UnfoldAll/Caption\,\text\:\unfold all tiddlers\},\$:/language/Buttons/UnfoldAll/Hint\:{\title\:\$:/language/Buttons/UnfoldAll/Hint\,\text\:\Unfold the bodies of all opened tiddlers\},\$:/language/Buttons/FullScreen/Caption\:{\title\:\$:/language/Buttons/FullScreen/Caption\,\text\:\full-screen\},\$:/language/Buttons/FullScreen/Hint\:{\title\:\$:/language/Buttons/FullScreen/Hint\,\text\:\Enter or leave full-screen mode\},\$:/language/Buttons/Help/Caption\:{\title\:\$:/language/Buttons/Help/Caption\,\text\:\help\},\$:/language/Buttons/Help/Hint\:{\title\:\$:/language/Buttons/Help/Hint\,\text\:\Show help panel\},\$:/language/Buttons/Import/Caption\:{\title\:\$:/language/Buttons/Import/Caption\,\text\:\import\},\$:/language/Buttons/Import/Hint\:{\title\:\$:/language/Buttons/Import/Hint\,\text\:\Import many types of file including text, image, TiddlyWiki or JSON\},\$:/language/Buttons/Info/Caption\:{\title\:\$:/language/Buttons/Info/Caption\,\text\:\info\},\$:/language/Buttons/Info/Hint\:{\title\:\$:/language/Buttons/Info/Hint\,\text\:\Show information for this tiddler\},\$:/language/Buttons/Home/Caption\:{\title\:\$:/language/Buttons/Home/Caption\,\text\:\home\},\$:/language/Buttons/Home/Hint\:{\title\:\$:/language/Buttons/Home/Hint\,\text\:\Open the default tiddlers\},\$:/language/Buttons/Language/Caption\:{\title\:\$:/language/Buttons/Language/Caption\,\text\:\language\},\$:/language/Buttons/Language/Hint\:{\title\:\$:/language/Buttons/Language/Hint\,\text\:\Choose the user interface language\},\$:/language/Buttons/LayoutSwitcher/Hint\:{\title\:\$:/language/Buttons/LayoutSwitcher/Hint\,\text\:\Open layout switcher\},\$:/language/Buttons/LayoutSwitcher/Caption\:{\title\:\$:/language/Buttons/LayoutSwitcher/Caption\,\text\:\layout\},\$:/language/Buttons/Manager/Caption\:{\title\:\$:/language/Buttons/Manager/Caption\,\text\:\tiddler manager\},\$:/language/Buttons/Manager/Hint\:{\title\:\$:/language/Buttons/Manager/Hint\,\text\:\Open tiddler manager\},\$:/language/Buttons/More/Caption\:{\title\:\$:/language/Buttons/More/Caption\,\text\:\more\},\$:/language/Buttons/More/Hint\:{\title\:\$:/language/Buttons/More/Hint\,\text\:\More actions\},\$:/language/Buttons/NewHere/Caption\:{\title\:\$:/language/Buttons/NewHere/Caption\,\text\:\new here\},\$:/language/Buttons/NewHere/Hint\:{\title\:\$:/language/Buttons/NewHere/Hint\,\text\:\Create a new tiddler tagged with this one\},\$:/language/Buttons/NetworkActivity/Caption\:{\title\:\$:/language/Buttons/NetworkActivity/Caption\,\text\:\network activity\},\$:/language/Buttons/NetworkActivity/Hint\:{\title\:\$:/language/Buttons/NetworkActivity/Hint\,\text\:\Cancel all network activity\},\$:/language/Buttons/NewJournal/Caption\:{\title\:\$:/language/Buttons/NewJournal/Caption\,\text\:\new journal\},\$:/language/Buttons/NewJournal/Hint\:{\title\:\$:/language/Buttons/NewJournal/Hint\,\text\:\Create a new journal tiddler\},\$:/language/Buttons/NewJournalHere/Caption\:{\title\:\$:/language/Buttons/NewJournalHere/Caption\,\text\:\new journal here\},\$:/language/Buttons/NewJournalHere/Hint\:{\title\:\$:/language/Buttons/NewJournalHere/Hint\,\text\:\Create a new journal tiddler tagged with this one\},\$:/language/Buttons/NewImage/Caption\:{\title\:\$:/language/Buttons/NewImage/Caption\,\text\:\new image\},\$:/language/Buttons/NewImage/Hint\:{\title\:\$:/language/Buttons/NewImage/Hint\,\text\:\Create a new image tiddler\},\$:/language/Buttons/NewMarkdown/Caption\:{\title\:\$:/language/Buttons/NewMarkdown/Caption\,\text\:\new Markdown tiddler\},\$:/language/Buttons/NewMarkdown/Hint\:{\title\:\$:/language/Buttons/NewMarkdown/Hint\,\text\:\Create a new Markdown tiddler\},\$:/language/Buttons/NewTiddler/Caption\:{\title\:\$:/language/Buttons/NewTiddler/Caption\,\text\:\new tiddler\},\$:/language/Buttons/NewTiddler/Hint\:{\title\:\$:/language/Buttons/NewTiddler/Hint\,\text\:\Create a new tiddler\},\$:/language/Buttons/OpenControlPanel/Hint\:{\title\:\$:/language/Buttons/OpenControlPanel/Hint\,\text\:\Open control panel\},\$:/language/Buttons/OpenWindow/Caption\:{\title\:\$:/language/Buttons/OpenWindow/Caption\,\text\:\open in new window\},\$:/language/Buttons/OpenWindow/Hint\:{\title\:\$:/language/Buttons/OpenWindow/Hint\,\text\:\Open tiddler in new window\},\$:/language/Buttons/Palette/Caption\:{\title\:\$:/language/Buttons/Palette/Caption\,\text\:\palette\},\$:/language/Buttons/Palette/Hint\:{\title\:\$:/language/Buttons/Palette/Hint\,\text\:\Choose the colour palette\},\$:/language/Buttons/Permalink/Caption\:{\title\:\$:/language/Buttons/Permalink/Caption\,\text\:\permalink\},\$:/language/Buttons/Permalink/Hint\:{\title\:\$:/language/Buttons/Permalink/Hint\,\text\:\Set browser address bar to a direct link to this tiddler\},\$:/language/Buttons/Permaview/Caption\:{\title\:\$:/language/Buttons/Permaview/Caption\,\text\:\permaview\},\$:/language/Buttons/Permaview/Hint\:{\title\:\$:/language/Buttons/Permaview/Hint\,\text\:\Set browser address bar to a direct link to all the tiddlers in this story\},\$:/language/Buttons/Print/Caption\:{\title\:\$:/language/Buttons/Print/Caption\,\text\:\print page\},\$:/language/Buttons/Print/Hint\:{\title\:\$:/language/Buttons/Print/Hint\,\text\:\Print the current page\},\$:/language/Buttons/Refresh/Caption\:{\title\:\$:/language/Buttons/Refresh/Caption\,\text\:\refresh\},\$:/language/Buttons/Refresh/Hint\:{\title\:\$:/language/Buttons/Refresh/Hint\,\text\:\Perform a full refresh of the wiki\},\$:/language/Buttons/Save/Caption\:{\title\:\$:/language/Buttons/Save/Caption\,\text\:\ok\},\$:/language/Buttons/Save/Hint\:{\title\:\$:/language/Buttons/Save/Hint\,\text\:\Confirm changes to this tiddler\},\$:/language/Buttons/SaveWiki/Caption\:{\title\:\$:/language/Buttons/SaveWiki/Caption\,\text\:\save changes\},\$:/language/Buttons/SaveWiki/Hint\:{\title\:\$:/language/Buttons/SaveWiki/Hint\,\text\:\Save changes\},\$:/language/Buttons/StoryView/Caption\:{\title\:\$:/language/Buttons/StoryView/Caption\,\text\:\storyview\},\$:/language/Buttons/StoryView/Hint\:{\title\:\$:/language/Buttons/StoryView/Hint\,\text\:\Choose the story visualisation\},\$:/language/Buttons/HideSideBar/Caption\:{\title\:\$:/language/Buttons/HideSideBar/Caption\,\text\:\hide sidebar\},\$:/language/Buttons/HideSideBar/Hint\:{\title\:\$:/language/Buttons/HideSideBar/Hint\,\text\:\Hide sidebar\},\$:/language/Buttons/ShowSideBar/Caption\:{\title\:\$:/language/Buttons/ShowSideBar/Caption\,\text\:\show sidebar\},\$:/language/Buttons/ShowSideBar/Hint\:{\title\:\$:/language/Buttons/ShowSideBar/Hint\,\text\:\Show sidebar\},\$:/language/Buttons/TagManager/Caption\:{\title\:\$:/language/Buttons/TagManager/Caption\,\text\:\tag manager\},\$:/language/Buttons/TagManager/Hint\:{\title\:\$:/language/Buttons/TagManager/Hint\,\text\:\Open tag manager\},\$:/language/Buttons/TestCaseImport/Caption\:{\title\:\$:/language/Buttons/TestCaseImport/Caption\,\text\:\import tiddlers\},\$:/language/Buttons/TestCaseImport/Hint\:{\title\:\$:/language/Buttons/TestCaseImport/Hint\,\text\:\Import tiddlers\},\$:/language/Buttons/Timestamp/Caption\:{\title\:\$:/language/Buttons/Timestamp/Caption\,\text\:\timestamps\},\$:/language/Buttons/Timestamp/Hint\:{\title\:\$:/language/Buttons/Timestamp/Hint\,\text\:\Choose whether modifications update timestamps\},\$:/language/Buttons/Timestamp/On/Caption\:{\title\:\$:/language/Buttons/Timestamp/On/Caption\,\text\:\timestamps are on\},\$:/language/Buttons/Timestamp/On/Hint\:{\title\:\$:/language/Buttons/Timestamp/On/Hint\,\text\:\Update timestamps when tiddlers are modified\},\$:/language/Buttons/Timestamp/Off/Caption\:{\title\:\$:/language/Buttons/Timestamp/Off/Caption\,\text\:\timestamps are off\},\$:/language/Buttons/Timestamp/Off/Hint\:{\title\:\$:/language/Buttons/Timestamp/Off/Hint\,\text\:\Dont update timestamps when tiddlers are modified\},\$:/language/Buttons/Theme/Caption\:{\title\:\$:/language/Buttons/Theme/Caption\,\text\:\theme\},\$:/language/Buttons/Theme/Hint\:{\title\:\$:/language/Buttons/Theme/Hint\,\text\:\Choose the display theme\},\$:/language/Buttons/Bold/Caption\:{\title\:\$:/language/Buttons/Bold/Caption\,\text\:\bold\},\$:/language/Buttons/Bold/Hint\:{\title\:\$:/language/Buttons/Bold/Hint\,\text\:\Apply bold formatting to selection\},\$:/language/Buttons/Clear/Caption\:{\title\:\$:/language/Buttons/Clear/Caption\,\text\:\clear\},\$:/language/Buttons/Clear/Hint\:{\title\:\$:/language/Buttons/Clear/Hint\,\text\:\Clear image to solid colour\},\$:/language/Buttons/EditorHeight/Caption\:{\title\:\$:/language/Buttons/EditorHeight/Caption\,\text\:\editor height\},\$:/language/Buttons/EditorHeight/Caption/Auto\:{\title\:\$:/language/Buttons/EditorHeight/Caption/Auto\,\text\:\Automatically adjust height to fit content\},\$:/language/Buttons/EditorHeight/Caption/Fixed\:{\title\:\$:/language/Buttons/EditorHeight/Caption/Fixed\,\text\:\Fixed height:\},\$:/language/Buttons/EditorHeight/Hint\:{\title\:\$:/language/Buttons/EditorHeight/Hint\,\text\:\Choose the height of the text editor\},\$:/language/Buttons/Excise/Caption\:{\title\:\$:/language/Buttons/Excise/Caption\,\text\:\excise\},\$:/language/Buttons/Excise/Caption/Excise\:{\title\:\$:/language/Buttons/Excise/Caption/Excise\,\text\:\Perform excision\},\$:/language/Buttons/Excise/Caption/MacroName\:{\title\:\$:/language/Buttons/Excise/Caption/MacroName\,\text\:\Macro name:\},\$:/language/Buttons/Excise/Caption/NewTitle\:{\title\:\$:/language/Buttons/Excise/Caption/NewTitle\,\text\:\Title of new tiddler:\},\$:/language/Buttons/Excise/Caption/Replace\:{\title\:\$:/language/Buttons/Excise/Caption/Replace\,\text\:\Replace excised text with:\},\$:/language/Buttons/Excise/Caption/Replace/Macro\:{\title\:\$:/language/Buttons/Excise/Caption/Replace/Macro\,\text\:\macro\},\$:/language/Buttons/Excise/Caption/Replace/Link\:{\title\:\$:/language/Buttons/Excise/Caption/Replace/Link\,\text\:\link\},\$:/language/Buttons/Excise/Caption/Replace/Transclusion\:{\title\:\$:/language/Buttons/Excise/Caption/Replace/Transclusion\,\text\:\transclusion\},\$:/language/Buttons/Excise/Caption/Tag\:{\title\:\$:/language/Buttons/Excise/Caption/Tag\,\text\:\Tag new tiddler with the title of this tiddler\},\$:/language/Buttons/Excise/Caption/TiddlerExists\:{\title\:\$:/language/Buttons/Excise/Caption/TiddlerExists\,\text\:\Warning: tiddler already exists\},\$:/language/Buttons/Excise/DefaultTitle\:{\title\:\$:/language/Buttons/Excise/DefaultTitle\,\text\:\New Excision\},\$:/language/Buttons/Excise/Hint\:{\title\:\$:/language/Buttons/Excise/Hint\,\text\:\Excise the selected text into a new tiddler\},\$:/language/Buttons/Heading1/Caption\:{\title\:\$:/language/Buttons/Heading1/Caption\,\text\:\heading 1\},\$:/language/Buttons/Heading1/Hint\:{\title\:\$:/language/Buttons/Heading1/Hint\,\text\:\Apply heading level 1 formatting to lines containing selection\},\$:/language/Buttons/Heading2/Caption\:{\title\:\$:/language/Buttons/Heading2/Caption\,\text\:\heading 2\},\$:/language/Buttons/Heading2/Hint\:{\title\:\$:/language/Buttons/Heading2/Hint\,\text\:\Apply heading level 2 formatting to lines containing selection\},\$:/language/Buttons/Heading3/Caption\:{\title\:\$:/language/Buttons/Heading3/Caption\,\text\:\heading 3\},\$:/language/Buttons/Heading3/Hint\:{\title\:\$:/language/Buttons/Heading3/Hint\,\text\:\Apply heading level 3 formatting to lines containing selection\},\$:/language/Buttons/Heading4/Caption\:{\title\:\$:/language/Buttons/Heading4/Caption\,\text\:\heading 4\},\$:/language/Buttons/Heading4/Hint\:{\title\:\$:/language/Buttons/Heading4/Hint\,\text\:\Apply heading level 4 formatting to lines containing selection\},\$:/language/Buttons/Heading5/Caption\:{\title\:\$:/language/Buttons/Heading5/Caption\,\text\:\heading 5\},\$:/language/Buttons/Heading5/Hint\:{\title\:\$:/language/Buttons/Heading5/Hint\,\text\:\Apply heading level 5 formatting to lines containing selection\},\$:/language/Buttons/Heading6/Caption\:{\title\:\$:/language/Buttons/Heading6/Caption\,\text\:\heading 6\},\$:/language/Buttons/Heading6/Hint\:{\title\:\$:/language/Buttons/Heading6/Hint\,\text\:\Apply heading level 6 formatting to lines containing selection\},\$:/language/Buttons/Italic/Caption\:{\title\:\$:/language/Buttons/Italic/Caption\,\text\:\italic\},\$:/language/Buttons/Italic/Hint\:{\title\:\$:/language/Buttons/Italic/Hint\,\text\:\Apply italic formatting to selection\},\$:/language/Buttons/LineWidth/Caption\:{\title\:\$:/language/Buttons/LineWidth/Caption\,\text\:\line width\},\$:/language/Buttons/LineWidth/Hint\:{\title\:\$:/language/Buttons/LineWidth/Hint\,\text\:\Set line width for painting\},\$:/language/Buttons/Link/Caption\:{\title\:\$:/language/Buttons/Link/Caption\,\text\:\link\},\$:/language/Buttons/Link/Hint\:{\title\:\$:/language/Buttons/Link/Hint\,\text\:\Create wikitext link\},\$:/language/Buttons/Linkify/Caption\:{\title\:\$:/language/Buttons/Linkify/Caption\,\text\:\wikilink\},\$:/language/Buttons/Linkify/Hint\:{\title\:\$:/language/Buttons/Linkify/Hint\,\text\:\Wrap selection in square brackets\},\$:/language/Buttons/ListBullet/Caption\:{\title\:\$:/language/Buttons/ListBullet/Caption\,\text\:\bulleted list\},\$:/language/Buttons/ListBullet/Hint\:{\title\:\$:/language/Buttons/ListBullet/Hint\,\text\:\Apply bulleted list formatting to lines containing selection\},\$:/language/Buttons/ListNumber/Caption\:{\title\:\$:/language/Buttons/ListNumber/Caption\,\text\:\numbered list\},\$:/language/Buttons/ListNumber/Hint\:{\title\:\$:/language/Buttons/ListNumber/Hint\,\text\:\Apply numbered list formatting to lines containing selection\},\$:/language/Buttons/MonoBlock/Caption\:{\title\:\$:/language/Buttons/MonoBlock/Caption\,\text\:\monospaced block\},\$:/language/Buttons/MonoBlock/Hint\:{\title\:\$:/language/Buttons/MonoBlock/Hint\,\text\:\Apply monospaced block formatting to lines containing selection\},\$:/language/Buttons/MonoLine/Caption\:{\title\:\$:/language/Buttons/MonoLine/Caption\,\text\:\monospaced\},\$:/language/Buttons/MonoLine/Hint\:{\title\:\$:/language/Buttons/MonoLine/Hint\,\text\:\Apply monospaced character formatting to selection\},\$:/language/Buttons/Opacity/Caption\:{\title\:\$:/language/Buttons/Opacity/Caption\,\text\:\opacity\},\$:/language/Buttons/Opacity/Hint\:{\title\:\$:/language/Buttons/Opacity/Hint\,\text\:\Set painting opacity\},\$:/language/Buttons/Paint/Caption\:{\title\:\$:/language/Buttons/Paint/Caption\,\text\:\paint colour\},\$:/language/Buttons/Paint/Hint\:{\title\:\$:/language/Buttons/Paint/Hint\,\text\:\Set painting colour\},\$:/language/Buttons/Picture/Caption\:{\title\:\$:/language/Buttons/Picture/Caption\,\text\:\picture\},\$:/language/Buttons/Picture/Hint\:{\title\:\$:/language/Buttons/Picture/Hint\,\text\:\Insert picture\},\$:/language/Buttons/Preview/Caption\:{\title\:\$:/language/Buttons/Preview/Caption\,\text\:\preview\},\$:/language/Buttons/Preview/Hint\:{\title\:\$:/language/Buttons/Preview/Hint\,\text\:\Show preview pane\},\$:/language/Buttons/PreviewType/Caption\:{\title\:\$:/language/Buttons/PreviewType/Caption\,\text\:\preview type\},\$:/language/Buttons/PreviewType/Hint\:{\title\:\$:/language/Buttons/PreviewType/Hint\,\text\:\Choose preview type\},\$:/language/Buttons/Quote/Caption\:{\title\:\$:/language/Buttons/Quote/Caption\,\text\:\quote\},\$:/language/Buttons/Quote/Hint\:{\title\:\$:/language/Buttons/Quote/Hint\,\text\:\Apply quoted text formatting to lines containing selection\},\$:/language/Buttons/RotateLeft/Caption\:{\title\:\$:/language/Buttons/RotateLeft/Caption\,\text\:\rotate left\},\$:/language/Buttons/RotateLeft/Hint\:{\title\:\$:/language/Buttons/RotateLeft/Hint\,\text\:\Rotate image left by 90 degrees\},\$:/language/Buttons/Size/Caption\:{\title\:\$:/language/Buttons/Size/Caption\,\text\:\image size\},\$:/language/Buttons/Size/Caption/Height\:{\title\:\$:/language/Buttons/Size/Caption/Height\,\text\:\Height:\},\$:/language/Buttons/Size/Caption/Resize\:{\title\:\$:/language/Buttons/Size/Caption/Resize\,\text\:\Resize image\},\$:/language/Buttons/Size/Caption/Width\:{\title\:\$:/language/Buttons/Size/Caption/Width\,\text\:\Width:\},\$:/language/Buttons/Size/Hint\:{\title\:\$:/language/Buttons/Size/Hint\,\text\:\Set image size\},\$:/language/Buttons/Stamp/Caption\:{\title\:\$:/language/Buttons/Stamp/Caption\,\text\:\stamp\},\$:/language/Buttons/Stamp/Caption/New\:{\title\:\$:/language/Buttons/Stamp/Caption/New\,\text\:\Add your own\},\$:/language/Buttons/Stamp/Hint\:{\title\:\$:/language/Buttons/Stamp/Hint\,\text\:\Insert a preconfigured snippet of text\},\$:/language/Buttons/Stamp/New/Title\:{\title\:\$:/language/Buttons/Stamp/New/Title\,\text\:\Name as shown in menu\},\$:/language/Buttons/Stamp/New/Text\:{\title\:\$:/language/Buttons/Stamp/New/Text\,\text\:\Text of snippet. (Remember to add a descriptive title in the caption field).\},\$:/language/Buttons/Strikethrough/Caption\:{\title\:\$:/language/Buttons/Strikethrough/Caption\,\text\:\strikethrough\},\$:/language/Buttons/Strikethrough/Hint\:{\title\:\$:/language/Buttons/Strikethrough/Hint\,\text\:\Apply strikethrough formatting to selection\},\$:/language/Buttons/Subscript/Caption\:{\title\:\$:/language/Buttons/Subscript/Caption\,\text\:\subscript\},\$:/language/Buttons/Subscript/Hint\:{\title\:\$:/language/Buttons/Subscript/Hint\,\text\:\Apply subscript formatting to selection\},\$:/language/Buttons/Superscript/Caption\:{\title\:\$:/language/Buttons/Superscript/Caption\,\text\:\superscript\},\$:/language/Buttons/Superscript/Hint\:{\title\:\$:/language/Buttons/Superscript/Hint\,\text\:\Apply superscript formatting to selection\},\$:/language/Buttons/ToggleSidebar/Hint\:{\title\:\$:/language/Buttons/ToggleSidebar/Hint\,\text\:\Toggle the sidebar visibility\},\$:/language/Buttons/Transcludify/Caption\:{\title\:\$:/language/Buttons/Transcludify/Caption\,\text\:\transclusion\},\$:/language/Buttons/Transcludify/Hint\:{\title\:\$:/language/Buttons/Transcludify/Hint\,\text\:\Wrap selection in curly brackets\},\$:/language/Buttons/Underline/Caption\:{\title\:\$:/language/Buttons/Underline/Caption\,\text\:\underline\},\$:/language/Buttons/Underline/Hint\:{\title\:\$:/language/Buttons/Underline/Hint\,\text\:\Apply underline formatting to selection\},\$:/language/ControlPanel/Advanced/Caption\:{\title\:\$:/language/ControlPanel/Advanced/Caption\,\text\:\Advanced\},\$:/language/ControlPanel/Advanced/Hint\:{\title\:\$:/language/ControlPanel/Advanced/Hint\,\text\:\Internal information about this TiddlyWiki\},\$:/language/ControlPanel/Appearance/Caption\:{\title\:\$:/language/ControlPanel/Appearance/Caption\,\text\:\Appearance\},\$:/language/ControlPanel/Appearance/Hint\:{\title\:\$:/language/ControlPanel/Appearance/Hint\,\text\:\Ways to customise the appearance of your TiddlyWiki.\},\$:/language/ControlPanel/Basics/AnimDuration/Prompt\:{\title\:\$:/language/ControlPanel/Basics/AnimDuration/Prompt\,\text\:\Animation duration\},\$:/language/ControlPanel/Basics/AutoFocus/Prompt\:{\title\:\$:/language/ControlPanel/Basics/AutoFocus/Prompt\,\text\:\Default focus field for new tiddlers\},\$:/language/ControlPanel/Basics/Caption\:{\title\:\$:/language/ControlPanel/Basics/Caption\,\text\:\Basics\},\$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint\:{\title\:\$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint\,\text\:\Use [[double square brackets]] for titles with spaces. Or you can choose to {{retain story ordering||$:/snippets/retain-story-ordering-button}}\},\$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt\:{\title\:\$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt\,\text\:\Default tiddlers\},\$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint\:{\title\:\$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint\,\text\:\Choose which tiddlers are displayed at startup\},\$:/language/ControlPanel/Basics/Language/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Language/Prompt\,\text\:\Hello! Current language:\},\$:/language/ControlPanel/Basics/NewJournal/Title/Prompt\:{\title\:\$:/language/ControlPanel/Basics/NewJournal/Title/Prompt\,\text\:\Title of new journal tiddlers\},\$:/language/ControlPanel/Basics/NewJournal/Text/Prompt\:{\title\:\$:/language/ControlPanel/Basics/NewJournal/Text/Prompt\,\text\:\Text for new journal tiddlers\},\$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt\:{\title\:\$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt\,\text\:\Tags for new journal tiddlers\},\$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt\:{\title\:\$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt\,\text\:\Title of new tiddlers\},\$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt\:{\title\:\$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt\,\text\:\Tags for new tiddlers\},\$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt\:{\title\:\$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt\,\text\:\Number of overridden shadow tiddlers\},\$:/language/ControlPanel/Basics/RemoveTags\:{\title\:\$:/language/ControlPanel/Basics/RemoveTags\,\text\:\Update to current format\},\$:/language/ControlPanel/Basics/RemoveTags/Hint\:{\title\:\$:/language/ControlPanel/Basics/RemoveTags/Hint\,\text\:\Update the tags configuration to the latest format\},\$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt\:{\title\:\$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt\,\text\:\Number of shadow tiddlers\},\$:/language/ControlPanel/Basics/Subtitle/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Subtitle/Prompt\,\text\:\Subtitle\},\$:/language/ControlPanel/Basics/SystemTiddlers/Prompt\:{\title\:\$:/language/ControlPanel/Basics/SystemTiddlers/Prompt\,\text\:\Number of system tiddlers\},\$:/language/ControlPanel/Basics/Tags/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Tags/Prompt\,\text\:\Number of tags\},\$:/language/ControlPanel/Basics/Tiddlers/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Tiddlers/Prompt\,\text\:\Number of tiddlers\},\$:/language/ControlPanel/Basics/Title/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Title/Prompt\,\text\:\Title of this ~TiddlyWiki\},\$:/language/ControlPanel/Basics/Username/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Username/Prompt\,\text\:\Username for signing edits\},\$:/language/ControlPanel/Basics/Version/Prompt\:{\title\:\$:/language/ControlPanel/Basics/Version/Prompt\,\text\:\~TiddlyWiki version\},\$:/language/ControlPanel/Cascades/Caption\:{\title\:\$:/language/ControlPanel/Cascades/Caption\,\text\:\Cascades\},\$:/language/ControlPanel/Cascades/Hint\:{\title\:\$:/language/ControlPanel/Cascades/Hint\,\text\:\These global rules are used to dynamically choose certain templates. The result of the cascade is the result of the first filter in the sequence that returns a result\},\$:/language/ControlPanel/Cascades/TagPrompt\:{\title\:\$:/language/ControlPanel/Cascades/TagPrompt\,\text\:\Filters tagged \u003C$macrocall $name\\\tag\\\ tag\u003C\u003CcurrentTiddler>>/>\},\$:/language/ControlPanel/EditorTypes/Caption\:{\title\:\$:/language/ControlPanel/EditorTypes/Caption\,\text\:\Editor Types\},\$:/language/ControlPanel/EditorTypes/Editor/Caption\:{\title\:\$:/language/ControlPanel/EditorTypes/Editor/Caption\,\text\:\Editor\},\$:/language/ControlPanel/EditorTypes/Hint\:{\title\:\$:/language/ControlPanel/EditorTypes/Hint\,\text\:\These tiddlers determine which editor is used to edit specific tiddler types.\},\$:/language/ControlPanel/EditorTypes/Type/Caption\:{\title\:\$:/language/ControlPanel/EditorTypes/Type/Caption\,\text\:\Type\},\$:/language/ControlPanel/EditTemplateBody/Caption\:{\title\:\$:/language/ControlPanel/EditTemplateBody/Caption\,\text\:\Edit Template Body\},\$:/language/ControlPanel/EditTemplateBody/Hint\:{\title\:\$:/language/ControlPanel/EditTemplateBody/Hint\,\text\:\This rule cascade is used by the default edit template to dynamically choose the template for editing the body of a tiddler.\},\$:/language/ControlPanel/FieldEditor/Caption\:{\title\:\$:/language/ControlPanel/FieldEditor/Caption\,\text\:\Field Editor\},\$:/language/ControlPanel/FieldEditor/Hint\:{\title\:\$:/language/ControlPanel/FieldEditor/Hint\,\text\:\This rules cascade is used to dynamically choose the template for rendering a tiddler field based on its name. It is used within the Edit Template.\},\$:/language/ControlPanel/Info/Caption\:{\title\:\$:/language/ControlPanel/Info/Caption\,\text\:\Info\},\$:/language/ControlPanel/Info/Hint\:{\title\:\$:/language/ControlPanel/Info/Hint\,\text\:\Information about this TiddlyWiki\},\$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt\,\text\:\Type shortcut here\},\$:/language/ControlPanel/KeyboardShortcuts/Add/Caption\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Add/Caption\,\text\:\add shortcut\},\$:/language/ControlPanel/KeyboardShortcuts/Caption\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Caption\,\text\:\Keyboard Shortcuts\},\$:/language/ControlPanel/KeyboardShortcuts/Hint\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Hint\,\text\:\Manage keyboard shortcut assignments\},\$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption\,\text\:\No keyboard shortcuts assigned\},\$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint\,\text\:\remove keyboard shortcut\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/All\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/All\,\text\:\All platforms\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac\,\text\:\Macintosh platform only\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac\,\text\:\Non-Macintosh platforms only\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux\,\text\:\Linux platform only\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux\,\text\:\Non-Linux platforms only\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows\,\text\:\Windows platform only\},\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows\:{\title\:\$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows\,\text\:\Non-Windows platforms only\},\$:/language/ControlPanel/LayoutSwitcher/Caption\:{\title\:\$:/language/ControlPanel/LayoutSwitcher/Caption\,\text\:\Layout\},\$:/language/ControlPanel/LoadedModules/Caption\:{\title\:\$:/language/ControlPanel/LoadedModules/Caption\,\text\:\Loaded Modules\},\$:/language/ControlPanel/LoadedModules/Hint\:{\title\:\$:/language/ControlPanel/LoadedModules/Hint\,\text\:\These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process.\},\$:/language/ControlPanel/Palette/Caption\:{\title\:\$:/language/ControlPanel/Palette/Caption\,\text\:\Palette\},\$:/language/ControlPanel/Palette/Editor/Clone/Caption\:{\title\:\$:/language/ControlPanel/Palette/Editor/Clone/Caption\,\text\:\clone\},\$:/language/ControlPanel/Palette/Editor/Clone/Prompt\:{\title\:\$:/language/ControlPanel/Palette/Editor/Clone/Prompt\,\text\:\It is recommended that you clone this shadow palette before editing it\},\$:/language/ControlPanel/Palette/Editor/Delete/Hint\:{\title\:\$:/language/ControlPanel/Palette/Editor/Delete/Hint\,\text\:\delete this entry from the current palette\},\$:/language/ControlPanel/Palette/Editor/Names/External/Show\:{\title\:\$:/language/ControlPanel/Palette/Editor/Names/External/Show\,\text\:\Show color names that are not part of the current palette\},\$:/language/ControlPanel/Palette/Editor/Prompt/Modified\:{\title\:\$:/language/ControlPanel/Palette/Editor/Prompt/Modified\,\text\:\This shadow palette has been modified\},\$:/language/ControlPanel/Palette/Editor/Prompt\:{\title\:\$:/language/ControlPanel/Palette/Editor/Prompt\,\text\:\Editing\},\$:/language/ControlPanel/Palette/Editor/Reset/Caption\:{\title\:\$:/language/ControlPanel/Palette/Editor/Reset/Caption\,\text\:\reset\},\$:/language/ControlPanel/Palette/HideEditor/Caption\:{\title\:\$:/language/ControlPanel/Palette/HideEditor/Caption\,\text\:\hide editor\},\$:/language/ControlPanel/Palette/Prompt\:{\title\:\$:/language/ControlPanel/Palette/Prompt\,\text\:\Current palette:\},\$:/language/ControlPanel/Palette/ShowEditor/Caption\:{\title\:\$:/language/ControlPanel/Palette/ShowEditor/Caption\,\text\:\show editor\},\$:/language/ControlPanel/Parsing/Caption\:{\title\:\$:/language/ControlPanel/Parsing/Caption\,\text\:\Parsing\},\$:/language/ControlPanel/Parsing/Hint\:{\title\:\$:/language/ControlPanel/Parsing/Hint\,\text\:\Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent \u003C$text text\\\TiddlyWiki\\\/> from functioning correctly. Use safe mode|https://tiddlywiki.com/#SafeMode to restore normal operation.\},\$:/language/ControlPanel/Parsing/Block/Caption\:{\title\:\$:/language/ControlPanel/Parsing/Block/Caption\,\text\:\Block Parse Rules\},\$:/language/ControlPanel/Parsing/Inline/Caption\:{\title\:\$:/language/ControlPanel/Parsing/Inline/Caption\,\text\:\Inline Parse Rules\},\$:/language/ControlPanel/Parsing/Pragma/Caption\:{\title\:\$:/language/ControlPanel/Parsing/Pragma/Caption\,\text\:\Pragma Parse Rules\},\$:/language/ControlPanel/Plugins/Add/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Add/Caption\,\text\:\Get more plugins\},\$:/language/ControlPanel/Plugins/Add/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Add/Hint\,\text\:\Install plugins from the official library\},\$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint\:{\title\:\$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint\,\text\:\This plugin is already installed at version \u003C$text text\u003C\u003CinstalledVersion>>/>\},\$:/language/ControlPanel/Plugins/AlsoRequires\:{\title\:\$:/language/ControlPanel/Plugins/AlsoRequires\,\text\:\Also requires:\},\$:/language/ControlPanel/Plugins/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Caption\,\text\:\Plugins\},\$:/language/ControlPanel/Plugins/Disable/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Disable/Caption\,\text\:\disable\},\$:/language/ControlPanel/Plugins/Disable/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Disable/Hint\,\text\:\Disable this plugin when reloading page\},\$:/language/ControlPanel/Plugins/Disabled/Status\:{\title\:\$:/language/ControlPanel/Plugins/Disabled/Status\,\text\:\(disabled)\},\$:/language/ControlPanel/Plugins/Downgrade/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Downgrade/Caption\,\text\:\downgrade\},\$:/language/ControlPanel/Plugins/Empty/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Empty/Hint\,\text\:\None\},\$:/language/ControlPanel/Plugins/Enable/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Enable/Caption\,\text\:\enable\},\$:/language/ControlPanel/Plugins/Enable/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Enable/Hint\,\text\:\Enable this plugin when reloading page\},\$:/language/ControlPanel/Plugins/Install/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Install/Caption\,\text\:\install\},\$:/language/ControlPanel/Plugins/Installed/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Installed/Hint\,\text\:\Currently installed plugins:\},\$:/language/ControlPanel/Plugins/Languages/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Languages/Caption\,\text\:\Languages\},\$:/language/ControlPanel/Plugins/Languages/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Languages/Hint\,\text\:\Language pack plugins\},\$:/language/ControlPanel/Plugins/NoInfoFound/Hint\:{\title\:\$:/language/ControlPanel/Plugins/NoInfoFound/Hint\,\text\:\No \\\\u003C$text text\u003C\u003CcurrentTab>>/>\\\ found\},\$:/language/ControlPanel/Plugins/NotInstalled/Hint\:{\title\:\$:/language/ControlPanel/Plugins/NotInstalled/Hint\,\text\:\This plugin is not currently installed\},\$:/language/ControlPanel/Plugins/OpenPluginLibrary\:{\title\:\$:/language/ControlPanel/Plugins/OpenPluginLibrary\,\text\:\Open plugin library\},\$:/language/ControlPanel/Plugins/ClosePluginLibrary\:{\title\:\$:/language/ControlPanel/Plugins/ClosePluginLibrary\,\text\:\Close plugin library\},\$:/language/ControlPanel/Plugins/PluginWillRequireReload\:{\title\:\$:/language/ControlPanel/Plugins/PluginWillRequireReload\,\text\:\(requires reload)\},\$:/language/ControlPanel/Plugins/Plugins/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Plugins/Caption\,\text\:\Plugins\},\$:/language/ControlPanel/Plugins/Plugins/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Plugins/Hint\,\text\:\Plugins\},\$:/language/ControlPanel/Plugins/Reinstall/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Reinstall/Caption\,\text\:\reinstall\},\$:/language/ControlPanel/Plugins/Stability/Deprecated\:{\title\:\$:/language/ControlPanel/Plugins/Stability/Deprecated\,\text\:\DEPRECATED\},\$:/language/ControlPanel/Plugins/Stability/Experimental\:{\title\:\$:/language/ControlPanel/Plugins/Stability/Experimental\,\text\:\EXPERIMENTAL\},\$:/language/ControlPanel/Plugins/Stability/Legacy\:{\title\:\$:/language/ControlPanel/Plugins/Stability/Legacy\,\text\:\LEGACY\},\$:/language/ControlPanel/Plugins/Stability/Stable\:{\title\:\$:/language/ControlPanel/Plugins/Stability/Stable\,\text\:\STABLE\},\$:/language/ControlPanel/Plugins/Themes/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Themes/Caption\,\text\:\Themes\},\$:/language/ControlPanel/Plugins/Themes/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Themes/Hint\,\text\:\Theme plugins\},\$:/language/ControlPanel/Plugins/Update/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Update/Caption\,\text\:\update\},\$:/language/ControlPanel/Plugins/Updates/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Updates/Caption\,\text\:\Updates\},\$:/language/ControlPanel/Plugins/Updates/Hint\:{\title\:\$:/language/ControlPanel/Plugins/Updates/Hint\,\text\:\Available updates to installed plugins\},\$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption\:{\title\:\$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption\,\text\:\Update \u003C\u003Cupdate-count>> plugins\},\$:/language/ControlPanel/Plugins/SubPluginPrompt\:{\title\:\$:/language/ControlPanel/Plugins/SubPluginPrompt\,\text\:\With \u003C\u003Ccount>> sub-plugins available\},\$:/language/ControlPanel/Saving/Caption\:{\title\:\$:/language/ControlPanel/Saving/Caption\,\text\:\Saving\},\$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description\:{\title\:\$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description\,\text\:\Permit automatic saving for the download saver\},\$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint\:{\title\:\$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint\,\text\:\Enable Autosave for Download Saver\},\$:/language/ControlPanel/Saving/DownloadSaver/Caption\:{\title\:\$:/language/ControlPanel/Saving/DownloadSaver/Caption\,\text\:\Download Saver\},\$:/language/ControlPanel/Saving/DownloadSaver/Hint\:{\title\:\$:/language/ControlPanel/Saving/DownloadSaver/Hint\,\text\:\These settings apply to the HTML5-compatible download saver\},\$:/language/ControlPanel/Saving/General/Caption\:{\title\:\$:/language/ControlPanel/Saving/General/Caption\,\text\:\General\},\$:/language/ControlPanel/Saving/General/Hint\:{\title\:\$:/language/ControlPanel/Saving/General/Hint\,\text\:\These settings apply to all the loaded savers\},\$:/language/ControlPanel/Saving/Hint\:{\title\:\$:/language/ControlPanel/Saving/Hint\,\text\:\Settings used for saving the entire TiddlyWiki as a single file via a saver module\},\$:/language/ControlPanel/Saving/GitService/Branch\:{\title\:\$:/language/ControlPanel/Saving/GitService/Branch\,\text\:\Target branch for saving\},\$:/language/ControlPanel/Saving/GitService/CommitMessage\:{\title\:\$:/language/ControlPanel/Saving/GitService/CommitMessage\,\text\:\Saved by TiddlyWiki\},\$:/language/ControlPanel/Saving/GitService/Description\:{\title\:\$:/language/ControlPanel/Saving/GitService/Description\,\text\:\These settings are only used when saving to \u003C\u003Cservice-name>>\},\$:/language/ControlPanel/Saving/GitService/Filename\:{\title\:\$:/language/ControlPanel/Saving/GitService/Filename\,\text\:\Filename of target file (e.g. `index.html`)\},\$:/language/ControlPanel/Saving/GitService/Path\:{\title\:\$:/language/ControlPanel/Saving/GitService/Path\,\text\:\Path to target file (e.g. `/wiki/`)\},\$:/language/ControlPanel/Saving/GitService/Repo\:{\title\:\$:/language/ControlPanel/Saving/GitService/Repo\,\text\:\Target repository (e.g. `Jermolene/TiddlyWiki5`)\},\$:/language/ControlPanel/Saving/GitService/ServerURL\:{\title\:\$:/language/ControlPanel/Saving/GitService/ServerURL\,\text\:\Server API URL\},\$:/language/ControlPanel/Saving/GitService/UserName\:{\title\:\$:/language/ControlPanel/Saving/GitService/UserName\,\text\:\Username\},\$:/language/ControlPanel/Saving/GitService/GitHub/Caption\:{\title\:\$:/language/ControlPanel/Saving/GitService/GitHub/Caption\,\text\:\~GitHub Saver\},\$:/language/ControlPanel/Saving/GitService/GitHub/Password\:{\title\:\$:/language/ControlPanel/Saving/GitService/GitHub/Password\,\text\:\Password, OAUTH token, or personal access token (see GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line for details)\},\$:/language/ControlPanel/Saving/GitService/GitLab/Caption\:{\title\:\$:/language/ControlPanel/Saving/GitService/GitLab/Caption\,\text\:\~GitLab Saver\},\$:/language/ControlPanel/Saving/GitService/GitLab/Password\:{\title\:\$:/language/ControlPanel/Saving/GitService/GitLab/Password\,\text\:\Personal access token for API (see GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html for details)\},\$:/language/ControlPanel/Saving/GitService/Gitea/Caption\:{\title\:\$:/language/ControlPanel/Saving/GitService/Gitea/Caption\,\text\:\Gitea Saver\},\$:/language/ControlPanel/Saving/GitService/Gitea/Password\:{\title\:\$:/language/ControlPanel/Saving/GitService/Gitea/Password\,\text\:\Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)\},\$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading\,\text\:\Advanced Settings\},\$:/language/ControlPanel/Saving/TiddlySpot/BackupDir\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/BackupDir\,\text\:\Backup Directory\},\$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel\,\text\:\~TiddlyHost Control Panel\},\$:/language/ControlPanel/Saving/TiddlySpot/Backups\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Backups\,\text\:\Backups\},\$:/language/ControlPanel/Saving/TiddlySpot/Caption\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Caption\,\text\:\~TiddlyHost Saver\},\$:/language/ControlPanel/Saving/TiddlySpot/Description\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Description\,\text\:\These settings are only used when saving to TiddlyHost|https://tiddlyhost.com or a compatible remote server. See here|https://github.com/simonbaird/tiddlyhost/wiki/TiddlySpot-Saver-configuration-for-Tiddlyhost-and-Tiddlyspot for information on ~TiddlyHost saving configuration\},\$:/language/ControlPanel/Saving/TiddlySpot/Filename\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Filename\,\text\:\Upload Filename\},\$:/language/ControlPanel/Saving/TiddlySpot/Heading\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Heading\,\text\:\~TiddlyHost\},\$:/language/ControlPanel/Saving/TiddlySpot/Hint\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Hint\,\text\:\//The server URL defaults to `http://\u003Cwikiname>.tiddlyspot.com/` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//\},\$:/language/ControlPanel/Saving/TiddlySpot/Password\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/Password\,\text\:\Password\},\$:/language/ControlPanel/Saving/TiddlySpot/ServerURL\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/ServerURL\,\text\:\Server URL\},\$:/language/ControlPanel/Saving/TiddlySpot/UploadDir\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/UploadDir\,\text\:\Upload Directory\},\$:/language/ControlPanel/Saving/TiddlySpot/UserName\:{\title\:\$:/language/ControlPanel/Saving/TiddlySpot/UserName\,\text\:\Wiki Name\},\$:/language/ControlPanel/Settings/AutoSave/Caption\:{\title\:\$:/language/ControlPanel/Settings/AutoSave/Caption\,\text\:\Autosave\},\$:/language/ControlPanel/Settings/AutoSave/Disabled/Description\:{\title\:\$:/language/ControlPanel/Settings/AutoSave/Disabled/Description\,\text\:\Do not save changes automatically\},\$:/language/ControlPanel/Settings/AutoSave/Enabled/Description\:{\title\:\$:/language/ControlPanel/Settings/AutoSave/Enabled/Description\,\text\:\Save changes automatically\},\$:/language/ControlPanel/Settings/AutoSave/Hint\:{\title\:\$:/language/ControlPanel/Settings/AutoSave/Hint\,\text\:\Attempt to automatically save changes during editing when using a supporting saver\},\$:/language/ControlPanel/Settings/CamelCase/Caption\:{\title\:\$:/language/ControlPanel/Settings/CamelCase/Caption\,\text\:\Camel Case Wiki Links\},\$:/language/ControlPanel/Settings/CamelCase/Hint\:{\title\:\$:/language/ControlPanel/Settings/CamelCase/Hint\,\text\:\You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect\},\$:/language/ControlPanel/Settings/CamelCase/Description\:{\title\:\$:/language/ControlPanel/Settings/CamelCase/Description\,\text\:\Enable automatic ~CamelCase linking\},\$:/language/ControlPanel/Settings/Caption\:{\title\:\$:/language/ControlPanel/Settings/Caption\,\text\:\Settings\},\$:/language/ControlPanel/Settings/EditorToolbar/Caption\:{\title\:\$:/language/ControlPanel/Settings/EditorToolbar/Caption\,\text\:\Editor Toolbar\},\$:/language/ControlPanel/Settings/EditorToolbar/Hint\:{\title\:\$:/language/ControlPanel/Settings/EditorToolbar/Hint\,\text\:\Enable or disable the editor toolbar:\},\$:/language/ControlPanel/Settings/EditorToolbar/Description\:{\title\:\$:/language/ControlPanel/Settings/EditorToolbar/Description\,\text\:\Show editor toolbar\},\$:/language/ControlPanel/Settings/InfoPanelMode/Caption\:{\title\:\$:/language/ControlPanel/Settings/InfoPanelMode/Caption\,\text\:\Tiddler Info Panel Mode\},\$:/language/ControlPanel/Settings/InfoPanelMode/Hint\:{\title\:\$:/language/ControlPanel/Settings/InfoPanelMode/Hint\,\text\:\Control when the tiddler info panel closes:\},\$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description\:{\title\:\$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description\,\text\:\Tiddler info panel closes automatically\},\$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description\:{\title\:\$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description\,\text\:\Tiddler info panel stays open until explicitly closed\},\$:/language/ControlPanel/Settings/Hint\:{\title\:\$:/language/ControlPanel/Settings/Hint\,\text\:\These settings let you customise the behaviour of TiddlyWiki.\},\$:/language/ControlPanel/Settings/NavigationAddressBar/Caption\:{\title\:\$:/language/ControlPanel/Settings/NavigationAddressBar/Caption\,\text\:\Navigation Address Bar\},\$:/language/ControlPanel/Settings/NavigationAddressBar/Hint\:{\title\:\$:/language/ControlPanel/Settings/NavigationAddressBar/Hint\,\text\:\Behaviour of the browser address bar when navigating to a tiddler:\},\$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description\,\text\:\Do not update the address bar\},\$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description\,\text\:\Include the target tiddler\},\$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description\,\text\:\Include the target tiddler and the current story sequence\},\$:/language/ControlPanel/Settings/NavigationHistory/Caption\:{\title\:\$:/language/ControlPanel/Settings/NavigationHistory/Caption\,\text\:\Navigation History\},\$:/language/ControlPanel/Settings/NavigationHistory/Hint\:{\title\:\$:/language/ControlPanel/Settings/NavigationHistory/Hint\,\text\:\Update browser history when navigating to a tiddler:\},\$:/language/ControlPanel/Settings/NavigationHistory/No/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationHistory/No/Description\,\text\:\Do not update history\},\$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description\,\text\:\Update history\},\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption\:{\title\:\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption\,\text\:\Permalink/permaview Mode\},\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint\:{\title\:\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint\,\text\:\Choose how permalink/permaview is handled:\},\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description\,\text\:\Copy permalink/permaview URL to clipboard\},\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description\:{\title\:\$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description\,\text\:\Update address bar with permalink/permaview URL\},\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption\:{\title\:\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption\,\text\:\Performance Instrumentation\},\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint\:{\title\:\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint\,\text\:\Displays performance statistics in the browser developer console. Requires reload to take effect\},\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description\:{\title\:\$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description\,\text\:\Enable performance instrumentation\},\$:/language/ControlPanel/Settings/RecentLimit/Caption\:{\title\:\$:/language/ControlPanel/Settings/RecentLimit/Caption\,\text\:\Recent Tab Limit\},\$:/language/ControlPanel/Settings/RecentLimit/Hint\:{\title\:\$:/language/ControlPanel/Settings/RecentLimit/Hint\,\text\:\Maximum number of tiddlers to be displayed under the sidebar \\\Recent\\\ tab\},\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption\,\text\:\Toolbar Button Style\},\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint\,\text\:\Choose the style for toolbar buttons:\},\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless\,\text\:\Borderless\},\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed\,\text\:\Boxed\},\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded\,\text\:\Rounded\},\$:/language/ControlPanel/Settings/ToolbarButtons/Caption\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtons/Caption\,\text\:\Toolbar Buttons\},\$:/language/ControlPanel/Settings/ToolbarButtons/Hint\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtons/Hint\,\text\:\Default toolbar button appearance:\},\$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description\,\text\:\Include icon\},\$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description\:{\title\:\$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description\,\text\:\Include text\},\$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption\:{\title\:\$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption\,\text\:\Default Sidebar Tab\},\$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint\:{\title\:\$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint\,\text\:\Specify which sidebar tab is displayed by default\},\$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption\:{\title\:\$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption\,\text\:\Default More Sidebar Tab\},\$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint\:{\title\:\$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint\,\text\:\Specify which More sidebar tab is displayed by default\},\$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption\:{\title\:\$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption\,\text\:\Default Tiddler Info Tab\},\$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Hint\:{\title\:\$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Hint\,\text\:\Specify which tab is displayed by default when tiddler info panel is opened\},\$:/language/ControlPanel/Settings/LinkToBehaviour/Caption\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/Caption\,\text\:\Tiddler Opening Behaviour\},\$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint\,\text\:\Navigation from //within// the story river\},\$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint\,\text\:\Navigation from //outside// the story river\},\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove\,\text\:\Open above the current tiddler\},\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow\,\text\:\Open below the current tiddler\},\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop\,\text\:\Open at the top of the story river\},\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom\:{\title\:\$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom\,\text\:\Open at the bottom of the story river\},\$:/language/ControlPanel/Settings/TitleLinks/Caption\:{\title\:\$:/language/ControlPanel/Settings/TitleLinks/Caption\,\text\:\Tiddler Titles\},\$:/language/ControlPanel/Settings/TitleLinks/Hint\:{\title\:\$:/language/ControlPanel/Settings/TitleLinks/Hint\,\text\:\Optionally display tiddler titles as links\},\$:/language/ControlPanel/Settings/TitleLinks/No/Description\:{\title\:\$:/language/ControlPanel/Settings/TitleLinks/No/Description\,\text\:\Do not display tiddler titles as links\},\$:/language/ControlPanel/Settings/TitleLinks/Yes/Description\:{\title\:\$:/language/ControlPanel/Settings/TitleLinks/Yes/Description\,\text\:\Display tiddler titles as links\},\$:/language/ControlPanel/Settings/MissingLinks/Caption\:{\title\:\$:/language/ControlPanel/Settings/MissingLinks/Caption\,\text\:\Wiki Links\},\$:/language/ControlPanel/Settings/MissingLinks/Hint\:{\title\:\$:/language/ControlPanel/Settings/MissingLinks/Hint\,\text\:\Choose whether to link to tiddlers that do not exist yet\},\$:/language/ControlPanel/Settings/MissingLinks/Description\:{\title\:\$:/language/ControlPanel/Settings/MissingLinks/Description\,\text\:\Enable links to missing tiddlers\},\$:/language/ControlPanel/SocialCard/Caption\:{\title\:\$:/language/ControlPanel/SocialCard/Caption\,\text\:\Social Media Card\},\$:/language/ControlPanel/SocialCard/Domain/Prompt\:{\title\:\$:/language/ControlPanel/SocialCard/Domain/Prompt\,\text\:\Domain name to display for the link (for example, tiddlywiki.com)\},\$:/language/ControlPanel/SocialCard/Hint\:{\title\:\$:/language/ControlPanel/SocialCard/Hint\,\text\:\This information is used by social and messaging services to display a preview card for links to this ~TiddlyWiki when hosted online\},\$:/language/ControlPanel/SocialCard/PreviewUrl/Prompt\:{\title\:\$:/language/ControlPanel/SocialCard/PreviewUrl/Prompt\,\text\:\Full URL to preview image for this ~TiddlyWiki\},\$:/language/ControlPanel/SocialCard/PreviewUrl/Preview\:{\title\:\$:/language/ControlPanel/SocialCard/PreviewUrl/Preview\,\text\:\Preview image:\},\$:/language/ControlPanel/SocialCard/Url/Prompt\:{\title\:\$:/language/ControlPanel/SocialCard/Url/Prompt\,\text\:\Full URL of this ~TiddlyWiki\},\$:/language/ControlPanel/StoryTiddler/Caption\:{\title\:\$:/language/ControlPanel/StoryTiddler/Caption\,\text\:\Story Tiddler\},\$:/language/ControlPanel/StoryTiddler/Hint\:{\title\:\$:/language/ControlPanel/StoryTiddler/Hint\,\text\:\This rule cascade is used to dynamically choose the template for displaying a tiddler in the story river.\},\$:/language/ControlPanel/StoryView/Caption\:{\title\:\$:/language/ControlPanel/StoryView/Caption\,\text\:\Story View\},\$:/language/ControlPanel/StoryView/Prompt\:{\title\:\$:/language/ControlPanel/StoryView/Prompt\,\text\:\Current view:\},\$:/language/ControlPanel/Stylesheets/Caption\:{\title\:\$:/language/ControlPanel/Stylesheets/Caption\,\text\:\Stylesheets\},\$:/language/ControlPanel/Stylesheets/Expand/Caption\:{\title\:\$:/language/ControlPanel/Stylesheets/Expand/Caption\,\text\:\Expand All\},\$:/language/ControlPanel/Stylesheets/Hint\:{\title\:\$:/language/ControlPanel/Stylesheets/Hint\,\text\:\This is the rendered CSS of the current stylesheet tiddlers tagged with \u003C\u003Ctag \\\$:/tags/Stylesheet\\\>>\},\$:/language/ControlPanel/Stylesheets/Restore/Caption\:{\title\:\$:/language/ControlPanel/Stylesheets/Restore/Caption\,\text\:\Restore\},\$:/language/ControlPanel/TestCases/Caption\:{\title\:\$:/language/ControlPanel/TestCases/Caption\,\text\:\Test Cases\},\$:/language/ControlPanel/TestCases/Hint\:{\title\:\$:/language/ControlPanel/TestCases/Hint\,\text\:\Test cases are self contained examples for testing and learning\},\$:/language/ControlPanel/TestCases/All/Caption\:{\title\:\$:/language/ControlPanel/TestCases/All/Caption\,\text\:\All Test Cases\},\$:/language/ControlPanel/TestCases/All/Hint\:{\title\:\$:/language/ControlPanel/TestCases/All/Hint\,\text\:\All Test Cases\},\$:/language/ControlPanel/TestCases/Failed/Caption\:{\title\:\$:/language/ControlPanel/TestCases/Failed/Caption\,\text\:\Failed Test Cases\},\$:/language/ControlPanel/TestCases/Failed/Hint\:{\title\:\$:/language/ControlPanel/TestCases/Failed/Hint\,\text\:\Only Failed Test Cases\},\$:/language/ControlPanel/Theme/Caption\:{\title\:\$:/language/ControlPanel/Theme/Caption\,\text\:\Theme\},\$:/language/ControlPanel/Theme/Prompt\:{\title\:\$:/language/ControlPanel/Theme/Prompt\,\text\:\Current theme:\},\$:/language/ControlPanel/TiddlerFields/Caption\:{\title\:\$:/language/ControlPanel/TiddlerFields/Caption\,\text\:\Tiddler Fields\},\$:/language/ControlPanel/TiddlerFields/Hint\:{\title\:\$:/language/ControlPanel/TiddlerFields/Hint\,\text\:\This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers).\},\$:/language/ControlPanel/TiddlerColour/Caption\:{\title\:\$:/language/ControlPanel/TiddlerColour/Caption\,\text\:\Tiddler Colour\},\$:/language/ControlPanel/TiddlerColour/Hint\:{\title\:\$:/language/ControlPanel/TiddlerColour/Hint\,\text\:\This rules cascade is used to dynamically choose the colour for a tiddler (used for the icon and the associated tag pill).\},\$:/language/ControlPanel/TiddlerIcon/Caption\:{\title\:\$:/language/ControlPanel/TiddlerIcon/Caption\,\text\:\Tiddler Icon\},\$:/language/ControlPanel/TiddlerIcon/Hint\:{\title\:\$:/language/ControlPanel/TiddlerIcon/Hint\,\text\:\This rules cascade is used to dynamically choose the icon for a tiddler.\},\$:/language/ControlPanel/Toolbars/Caption\:{\title\:\$:/language/ControlPanel/Toolbars/Caption\,\text\:\Toolbars\},\$:/language/ControlPanel/Toolbars/EditToolbar/Caption\:{\title\:\$:/language/ControlPanel/Toolbars/EditToolbar/Caption\,\text\:\Edit Toolbar\},\$:/language/ControlPanel/Toolbars/EditToolbar/Hint\:{\title\:\$:/language/ControlPanel/Toolbars/EditToolbar/Hint\,\text\:\Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering\},\$:/language/ControlPanel/Toolbars/Hint\:{\title\:\$:/language/ControlPanel/Toolbars/Hint\,\text\:\Select which toolbar buttons are displayed\},\$:/language/ControlPanel/Toolbars/PageControls/Caption\:{\title\:\$:/language/ControlPanel/Toolbars/PageControls/Caption\,\text\:\Page Toolbar\},\$:/language/ControlPanel/Toolbars/PageControls/Hint\:{\title\:\$:/language/ControlPanel/Toolbars/PageControls/Hint\,\text\:\Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering\},\$:/language/ControlPanel/Toolbars/EditorToolbar/Caption\:{\title\:\$:/language/ControlPanel/Toolbars/EditorToolbar/Caption\,\text\:\Editor Toolbar\},\$:/language/ControlPanel/Toolbars/EditorToolbar/Hint\:{\title\:\$:/language/ControlPanel/Toolbars/EditorToolbar/Hint\,\text\:\Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering\},\$:/language/ControlPanel/Toolbars/ViewToolbar/Caption\:{\title\:\$:/language/ControlPanel/Toolbars/ViewToolbar/Caption\,\text\:\View Toolbar\},\$:/language/ControlPanel/Toolbars/ViewToolbar/Hint\:{\title\:\$:/language/ControlPanel/Toolbars/ViewToolbar/Hint\,\text\:\Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering\},\$:/language/ControlPanel/Tools/Download/Full/Caption\:{\title\:\$:/language/ControlPanel/Tools/Download/Full/Caption\,\text\:\Download full wiki\},\$:/language/ControlPanel/ViewTemplateBody/Caption\:{\title\:\$:/language/ControlPanel/ViewTemplateBody/Caption\,\text\:\View Template Body\},\$:/language/ControlPanel/ViewTemplateBody/Hint\:{\title\:\$:/language/ControlPanel/ViewTemplateBody/Hint\,\text\:\This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler.\},\$:/language/ControlPanel/ViewTemplateTitle/Caption\:{\title\:\$:/language/ControlPanel/ViewTemplateTitle/Caption\,\text\:\View Template Title\},\$:/language/ControlPanel/ViewTemplateTitle/Hint\:{\title\:\$:/language/ControlPanel/ViewTemplateTitle/Hint\,\text\:\This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler.\},\$:/language/ControlPanel/ViewTemplateSubtitle/Caption\:{\title\:\$:/language/ControlPanel/ViewTemplateSubtitle/Caption\,\text\:\View Template Subtitle\},\$:/language/ControlPanel/ViewTemplateSubtitle/Hint\:{\title\:\$:/language/ControlPanel/ViewTemplateSubtitle/Hint\,\text\:\This rule cascade is used by the default view template to dynamically choose the template for displaying the subtitle of a tiddler.\},\$:/language/ControlPanel/ViewTemplateTags/Caption\:{\title\:\$:/language/ControlPanel/ViewTemplateTags/Caption\,\text\:\View Template Tags\},\$:/language/ControlPanel/ViewTemplateTags/Hint\:{\title\:\$:/language/ControlPanel/ViewTemplateTags/Hint\,\text\:\This rule cascade is used by the default view template to dynamically choose the template for displaying the tags area of a tiddler.\},\$:/language/ControlPanel/WikiInformation/Caption\:{\title\:\$:/language/ControlPanel/WikiInformation/Caption\,\text\:\Wiki Information\},\$:/language/ControlPanel/WikiInformation/Hint\:{\title\:\$:/language/ControlPanel/WikiInformation/Hint\,\text\:\This page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere\},\$:/language/ControlPanel/WikiInformation/Drag/Caption\:{\title\:\$:/language/ControlPanel/WikiInformation/Drag/Caption\,\text\:\Drag this link to copy this tool to another wiki\},\$:/language/Date/DaySuffix/1\:{\title\:\$:/language/Date/DaySuffix/1\,\text\:\st\},\$:/language/Date/DaySuffix/2\:{\title\:\$:/language/Date/DaySuffix/2\,\text\:\nd\},\$:/language/Date/DaySuffix/3\:{\title\:\$:/language/Date/DaySuffix/3\,\text\:\rd\},\$:/language/Date/DaySuffix/4\:{\title\:\$:/language/Date/DaySuffix/4\,\text\:\th\},\$:/language/Date/DaySuffix/5\:{\title\:\$:/language/Date/DaySuffix/5\,\text\:\th\},\$:/language/Date/DaySuffix/6\:{\title\:\$:/language/Date/DaySuffix/6\,\text\:\th\},\$:/language/Date/DaySuffix/7\:{\title\:\$:/language/Date/DaySuffix/7\,\text\:\th\},\$:/language/Date/DaySuffix/8\:{\title\:\$:/language/Date/DaySuffix/8\,\text\:\th\},\$:/language/Date/DaySuffix/9\:{\title\:\$:/language/Date/DaySuffix/9\,\text\:\th\},\$:/language/Date/DaySuffix/10\:{\title\:\$:/language/Date/DaySuffix/10\,\text\:\th\},\$:/language/Date/DaySuffix/11\:{\title\:\$:/language/Date/DaySuffix/11\,\text\:\th\},\$:/language/Date/DaySuffix/12\:{\title\:\$:/language/Date/DaySuffix/12\,\text\:\th\},\$:/language/Date/DaySuffix/13\:{\title\:\$:/language/Date/DaySuffix/13\,\text\:\th\},\$:/language/Date/DaySuffix/14\:{\title\:\$:/language/Date/DaySuffix/14\,\text\:\th\},\$:/language/Date/DaySuffix/15\:{\title\:\$:/language/Date/DaySuffix/15\,\text\:\th\},\$:/language/Date/DaySuffix/16\:{\title\:\$:/language/Date/DaySuffix/16\,\text\:\th\},\$:/language/Date/DaySuffix/17\:{\title\:\$:/language/Date/DaySuffix/17\,\text\:\th\},\$:/language/Date/DaySuffix/18\:{\title\:\$:/language/Date/DaySuffix/18\,\text\:\th\},\$:/language/Date/DaySuffix/19\:{\title\:\$:/language/Date/DaySuffix/19\,\text\:\th\},\$:/language/Date/DaySuffix/20\:{\title\:\$:/language/Date/DaySuffix/20\,\text\:\th\},\$:/language/Date/DaySuffix/21\:{\title\:\$:/language/Date/DaySuffix/21\,\text\:\st\},\$:/language/Date/DaySuffix/22\:{\title\:\$:/language/Date/DaySuffix/22\,\text\:\nd\},\$:/language/Date/DaySuffix/23\:{\title\:\$:/language/Date/DaySuffix/23\,\text\:\rd\},\$:/language/Date/DaySuffix/24\:{\title\:\$:/language/Date/DaySuffix/24\,\text\:\th\},\$:/language/Date/DaySuffix/25\:{\title\:\$:/language/Date/DaySuffix/25\,\text\:\th\},\$:/language/Date/DaySuffix/26\:{\title\:\$:/language/Date/DaySuffix/26\,\text\:\th\},\$:/language/Date/DaySuffix/27\:{\title\:\$:/language/Date/DaySuffix/27\,\text\:\th\},\$:/language/Date/DaySuffix/28\:{\title\:\$:/language/Date/DaySuffix/28\,\text\:\th\},\$:/language/Date/DaySuffix/29\:{\title\:\$:/language/Date/DaySuffix/29\,\text\:\th\},\$:/language/Date/DaySuffix/30\:{\title\:\$:/language/Date/DaySuffix/30\,\text\:\th\},\$:/language/Date/DaySuffix/31\:{\title\:\$:/language/Date/DaySuffix/31\,\text\:\st\},\$:/language/Date/Long/Day/0\:{\title\:\$:/language/Date/Long/Day/0\,\text\:\Sunday\},\$:/language/Date/Long/Day/1\:{\title\:\$:/language/Date/Long/Day/1\,\text\:\Monday\},\$:/language/Date/Long/Day/2\:{\title\:\$:/language/Date/Long/Day/2\,\text\:\Tuesday\},\$:/language/Date/Long/Day/3\:{\title\:\$:/language/Date/Long/Day/3\,\text\:\Wednesday\},\$:/language/Date/Long/Day/4\:{\title\:\$:/language/Date/Long/Day/4\,\text\:\Thursday\},\$:/language/Date/Long/Day/5\:{\title\:\$:/language/Date/Long/Day/5\,\text\:\Friday\},\$:/language/Date/Long/Day/6\:{\title\:\$:/language/Date/Long/Day/6\,\text\:\Saturday\},\$:/language/Date/Long/Month/1\:{\title\:\$:/language/Date/Long/Month/1\,\text\:\January\},\$:/language/Date/Long/Month/2\:{\title\:\$:/language/Date/Long/Month/2\,\text\:\February\},\$:/language/Date/Long/Month/3\:{\title\:\$:/language/Date/Long/Month/3\,\text\:\March\},\$:/language/Date/Long/Month/4\:{\title\:\$:/language/Date/Long/Month/4\,\text\:\April\},\$:/language/Date/Long/Month/5\:{\title\:\$:/language/Date/Long/Month/5\,\text\:\May\},\$:/language/Date/Long/Month/6\:{\title\:\$:/language/Date/Long/Month/6\,\text\:\June\},\$:/language/Date/Long/Month/7\:{\title\:\$:/language/Date/Long/Month/7\,\text\:\July\},\$:/language/Date/Long/Month/8\:{\title\:\$:/language/Date/Long/Month/8\,\text\:\August\},\$:/language/Date/Long/Month/9\:{\title\:\$:/language/Date/Long/Month/9\,\text\:\September\},\$:/language/Date/Long/Month/10\:{\title\:\$:/language/Date/Long/Month/10\,\text\:\October\},\$:/language/Date/Long/Month/11\:{\title\:\$:/language/Date/Long/Month/11\,\text\:\November\},\$:/language/Date/Long/Month/12\:{\title\:\$:/language/Date/Long/Month/12\,\text\:\December\},\$:/language/Date/Period/am\:{\title\:\$:/language/Date/Period/am\,\text\:\am\},\$:/language/Date/Period/pm\:{\title\:\$:/language/Date/Period/pm\,\text\:\pm\},\$:/language/Date/Short/Day/0\:{\title\:\$:/language/Date/Short/Day/0\,\text\:\Sun\},\$:/language/Date/Short/Day/1\:{\title\:\$:/language/Date/Short/Day/1\,\text\:\Mon\},\$:/language/Date/Short/Day/2\:{\title\:\$:/language/Date/Short/Day/2\,\text\:\Tue\},\$:/language/Date/Short/Day/3\:{\title\:\$:/language/Date/Short/Day/3\,\text\:\Wed\},\$:/language/Date/Short/Day/4\:{\title\:\$:/language/Date/Short/Day/4\,\text\:\Thu\},\$:/language/Date/Short/Day/5\:{\title\:\$:/language/Date/Short/Day/5\,\text\:\Fri\},\$:/language/Date/Short/Day/6\:{\title\:\$:/language/Date/Short/Day/6\,\text\:\Sat\},\$:/language/Date/Short/Month/1\:{\title\:\$:/language/Date/Short/Month/1\,\text\:\Jan\},\$:/language/Date/Short/Month/2\:{\title\:\$:/language/Date/Short/Month/2\,\text\:\Feb\},\$:/language/Date/Short/Month/3\:{\title\:\$:/language/Date/Short/Month/3\,\text\:\Mar\},\$:/language/Date/Short/Month/4\:{\title\:\$:/language/Date/Short/Month/4\,\text\:\Apr\},\$:/language/Date/Short/Month/5\:{\title\:\$:/language/Date/Short/Month/5\,\text\:\May\},\$:/language/Date/Short/Month/6\:{\title\:\$:/language/Date/Short/Month/6\,\text\:\Jun\},\$:/language/Date/Short/Month/7\:{\title\:\$:/language/Date/Short/Month/7\,\text\:\Jul\},\$:/language/Date/Short/Month/8\:{\title\:\$:/language/Date/Short/Month/8\,\text\:\Aug\},\$:/language/Date/Short/Month/9\:{\title\:\$:/language/Date/Short/Month/9\,\text\:\Sep\},\$:/language/Date/Short/Month/10\:{\title\:\$:/language/Date/Short/Month/10\,\text\:\Oct\},\$:/language/Date/Short/Month/11\:{\title\:\$:/language/Date/Short/Month/11\,\text\:\Nov\},\$:/language/Date/Short/Month/12\:{\title\:\$:/language/Date/Short/Month/12\,\text\:\Dec\},\$:/language/RelativeDate/Future/Days\:{\title\:\$:/language/RelativeDate/Future/Days\,\text\:\\u003C\u003Cperiod>> days from now\},\$:/language/RelativeDate/Future/Hours\:{\title\:\$:/language/RelativeDate/Future/Hours\,\text\:\\u003C\u003Cperiod>> hours from now\},\$:/language/RelativeDate/Future/Minutes\:{\title\:\$:/language/RelativeDate/Future/Minutes\,\text\:\\u003C\u003Cperiod>> minutes from now\},\$:/language/RelativeDate/Future/Months\:{\title\:\$:/language/RelativeDate/Future/Months\,\text\:\\u003C\u003Cperiod>> months from now\},\$:/language/RelativeDate/Future/Second\:{\title\:\$:/language/RelativeDate/Future/Second\,\text\:\1 second from now\},\$:/language/RelativeDate/Future/Seconds\:{\title\:\$:/language/RelativeDate/Future/Seconds\,\text\:\\u003C\u003Cperiod>> seconds from now\},\$:/language/RelativeDate/Future/Years\:{\title\:\$:/language/RelativeDate/Future/Years\,\text\:\\u003C\u003Cperiod>> years from now\},\$:/language/RelativeDate/Past/Days\:{\title\:\$:/language/RelativeDate/Past/Days\,\text\:\\u003C\u003Cperiod>> days ago\},\$:/language/RelativeDate/Past/Hours\:{\title\:\$:/language/RelativeDate/Past/Hours\,\text\:\\u003C\u003Cperiod>> hours ago\},\$:/language/RelativeDate/Past/Minutes\:{\title\:\$:/language/RelativeDate/Past/Minutes\,\text\:\\u003C\u003Cperiod>> minutes ago\},\$:/language/RelativeDate/Past/Months\:{\title\:\$:/language/RelativeDate/Past/Months\,\text\:\\u003C\u003Cperiod>> months ago\},\$:/language/RelativeDate/Past/Second\:{\title\:\$:/language/RelativeDate/Past/Second\,\text\:\1 second ago\},\$:/language/RelativeDate/Past/Seconds\:{\title\:\$:/language/RelativeDate/Past/Seconds\,\text\:\\u003C\u003Cperiod>> seconds ago\},\$:/language/RelativeDate/Past/Years\:{\title\:\$:/language/RelativeDate/Past/Years\,\text\:\\u003C\u003Cperiod>> years ago\},\$:/language/Docs/ModuleTypes/allfilteroperator\:{\title\:\$:/language/Docs/ModuleTypes/allfilteroperator\,\text\:\A sub-operator for the all filter operator.\},\$:/language/Docs/ModuleTypes/animation\:{\title\:\$:/language/Docs/ModuleTypes/animation\,\text\:\Animations that may be used with the RevealWidget.\},\$:/language/Docs/ModuleTypes/authenticator\:{\title\:\$:/language/Docs/ModuleTypes/authenticator\,\text\:\Defines how requests are authenticated by the built-in HTTP server.\},\$:/language/Docs/ModuleTypes/bitmapeditoroperation\:{\title\:\$:/language/Docs/ModuleTypes/bitmapeditoroperation\,\text\:\A bitmap editor toolbar operation.\},\$:/language/Docs/ModuleTypes/command\:{\title\:\$:/language/Docs/ModuleTypes/command\,\text\:\Commands that can be executed under Node.js.\},\$:/language/Docs/ModuleTypes/config\:{\title\:\$:/language/Docs/ModuleTypes/config\,\text\:\Data to be inserted into `$tw.config`.\},\$:/language/Docs/ModuleTypes/filteroperator\:{\title\:\$:/language/Docs/ModuleTypes/filteroperator\,\text\:\Individual filter operator methods.\},\$:/language/Docs/ModuleTypes/global\:{\title\:\$:/language/Docs/ModuleTypes/global\,\text\:\Global data to be inserted into `$tw`.\},\$:/language/Docs/ModuleTypes/info\:{\title\:\$:/language/Docs/ModuleTypes/info\,\text\:\Publishes system information via the $:/temp/info-plugin pseudo-plugin.\},\$:/language/Docs/ModuleTypes/isfilteroperator\:{\title\:\$:/language/Docs/ModuleTypes/isfilteroperator\,\text\:\Parameters for the is filter operator.\},\$:/language/Docs/ModuleTypes/library\:{\title\:\$:/language/Docs/ModuleTypes/library\,\text\:\Generic module type for general purpose JavaScript modules.\},\$:/language/Docs/ModuleTypes/macro\:{\title\:\$:/language/Docs/ModuleTypes/macro\,\text\:\JavaScript macro definitions.\},\$:/language/Docs/ModuleTypes/parser\:{\title\:\$:/language/Docs/ModuleTypes/parser\,\text\:\Parsers for different content types.\},\$:/language/Docs/ModuleTypes/route\:{\title\:\$:/language/Docs/ModuleTypes/route\,\text\:\Defines how individual URL patterns are handled by the built-in HTTP server.\},\$:/language/Docs/ModuleTypes/saver\:{\title\:\$:/language/Docs/ModuleTypes/saver\,\text\:\Savers handle different methods for saving files from the browser.\},\$:/language/Docs/ModuleTypes/startup\:{\title\:\$:/language/Docs/ModuleTypes/startup\,\text\:\Startup functions.\},\$:/language/Docs/ModuleTypes/storyview\:{\title\:\$:/language/Docs/ModuleTypes/storyview\,\text\:\Story views customise the animation and behaviour of list widgets.\},\$:/language/Docs/ModuleTypes/texteditoroperation\:{\title\:\$:/language/Docs/ModuleTypes/texteditoroperation\,\text\:\A text editor toolbar operation.\},\$:/language/Docs/ModuleTypes/tiddlerdeserializer\:{\title\:\$:/language/Docs/ModuleTypes/tiddlerdeserializer\,\text\:\Converts different content types into tiddlers.\},\$:/language/Docs/ModuleTypes/tiddlerfield\:{\title\:\$:/language/Docs/ModuleTypes/tiddlerfield\,\text\:\Defines the behaviour of an individual tiddler field.\},\$:/language/Docs/ModuleTypes/tiddlermethod\:{\title\:\$:/language/Docs/ModuleTypes/tiddlermethod\,\text\:\Adds methods to the `$tw.Tiddler` prototype.\},\$:/language/Docs/ModuleTypes/upgrader\:{\title\:\$:/language/Docs/ModuleTypes/upgrader\,\text\:\Applies upgrade processing to tiddlers during an upgrade/import.\},\$:/language/Docs/ModuleTypes/utils\:{\title\:\$:/language/Docs/ModuleTypes/utils\,\text\:\Adds methods to `$tw.utils`.\},\$:/language/Docs/ModuleTypes/utils-browser\:{\title\:\$:/language/Docs/ModuleTypes/utils-browser\,\text\:\Adds browser-specific methods to `$tw.utils`.\},\$:/language/Docs/ModuleTypes/utils-node\:{\title\:\$:/language/Docs/ModuleTypes/utils-node\,\text\:\Adds Node.js-specific methods to `$tw.utils`.\},\$:/language/Docs/ModuleTypes/widget\:{\title\:\$:/language/Docs/ModuleTypes/widget\,\text\:\Widgets encapsulate DOM rendering and refreshing.\},\$:/language/Docs/ModuleTypes/wikimethod\:{\title\:\$:/language/Docs/ModuleTypes/wikimethod\,\text\:\Adds methods to `$tw.Wiki`.\},\$:/language/Docs/ModuleTypes/wikirule\:{\title\:\$:/language/Docs/ModuleTypes/wikirule\,\text\:\Individual parser rules for the main WikiText parser.\},\$:/language/Docs/PaletteColours/alert-background\:{\title\:\$:/language/Docs/PaletteColours/alert-background\,\text\:\Alert background\},\$:/language/Docs/PaletteColours/alert-border\:{\title\:\$:/language/Docs/PaletteColours/alert-border\,\text\:\Alert border\},\$:/language/Docs/PaletteColours/alert-highlight\:{\title\:\$:/language/Docs/PaletteColours/alert-highlight\,\text\:\Alert highlight\},\$:/language/Docs/PaletteColours/alert-muted-foreground\:{\title\:\$:/language/Docs/PaletteColours/alert-muted-foreground\,\text\:\Alert muted foreground\},\$:/language/Docs/PaletteColours/background\:{\title\:\$:/language/Docs/PaletteColours/background\,\text\:\General background\},\$:/language/Docs/PaletteColours/blockquote-bar\:{\title\:\$:/language/Docs/PaletteColours/blockquote-bar\,\text\:\Blockquote bar\},\$:/language/Docs/PaletteColours/button-background\:{\title\:\$:/language/Docs/PaletteColours/button-background\,\text\:\Default button background\},\$:/language/Docs/PaletteColours/button-border\:{\title\:\$:/language/Docs/PaletteColours/button-border\,\text\:\Default button border\},\$:/language/Docs/PaletteColours/button-foreground\:{\title\:\$:/language/Docs/PaletteColours/button-foreground\,\text\:\Default button foreground\},\$:/language/Docs/PaletteColours/dirty-indicator\:{\title\:\$:/language/Docs/PaletteColours/dirty-indicator\,\text\:\Unsaved changes indicator\},\$:/language/Docs/PaletteColours/code-background\:{\title\:\$:/language/Docs/PaletteColours/code-background\,\text\:\Code background\},\$:/language/Docs/PaletteColours/code-border\:{\title\:\$:/language/Docs/PaletteColours/code-border\,\text\:\Code border\},\$:/language/Docs/PaletteColours/code-foreground\:{\title\:\$:/language/Docs/PaletteColours/code-foreground\,\text\:\Code foreground\},\$:/language/Docs/PaletteColours/download-background\:{\title\:\$:/language/Docs/PaletteColours/download-background\,\text\:\Download button background\},\$:/language/Docs/PaletteColours/download-foreground\:{\title\:\$:/language/Docs/PaletteColours/download-foreground\,\text\:\Download button foreground\},\$:/language/Docs/PaletteColours/dragger-background\:{\title\:\$:/language/Docs/PaletteColours/dragger-background\,\text\:\Dragger background\},\$:/language/Docs/PaletteColours/dragger-foreground\:{\title\:\$:/language/Docs/PaletteColours/dragger-foreground\,\text\:\Dragger foreground\},\$:/language/Docs/PaletteColours/dropdown-background\:{\title\:\$:/language/Docs/PaletteColours/dropdown-background\,\text\:\Dropdown background\},\$:/language/Docs/PaletteColours/dropdown-border\:{\title\:\$:/language/Docs/PaletteColours/dropdown-border\,\text\:\Dropdown border\},\$:/language/Docs/PaletteColours/dropdown-tab-background-selected\:{\title\:\$:/language/Docs/PaletteColours/dropdown-tab-background-selected\,\text\:\Dropdown tab background for selected tabs\},\$:/language/Docs/PaletteColours/dropdown-tab-background\:{\title\:\$:/language/Docs/PaletteColours/dropdown-tab-background\,\text\:\Dropdown tab background\},\$:/language/Docs/PaletteColours/dropzone-background\:{\title\:\$:/language/Docs/PaletteColours/dropzone-background\,\text\:\Dropzone background\},\$:/language/Docs/PaletteColours/external-link-background-hover\:{\title\:\$:/language/Docs/PaletteColours/external-link-background-hover\,\text\:\External link background hover\},\$:/language/Docs/PaletteColours/external-link-background-visited\:{\title\:\$:/language/Docs/PaletteColours/external-link-background-visited\,\text\:\External link background visited\},\$:/language/Docs/PaletteColours/external-link-background\:{\title\:\$:/language/Docs/PaletteColours/external-link-background\,\text\:\External link background\},\$:/language/Docs/PaletteColours/external-link-foreground-hover\:{\title\:\$:/language/Docs/PaletteColours/external-link-foreground-hover\,\text\:\External link foreground hover\},\$:/language/Docs/PaletteColours/external-link-foreground-visited\:{\title\:\$:/language/Docs/PaletteColours/external-link-foreground-visited\,\text\:\External link foreground visited\},\$:/language/Docs/PaletteColours/external-link-foreground\:{\title\:\$:/language/Docs/PaletteColours/external-link-foreground\,\text\:\External link foreground\},\$:/language/Docs/PaletteColours/foreground\:{\title\:\$:/language/Docs/PaletteColours/foreground\,\text\:\General foreground\},\$:/language/Docs/PaletteColours/menubar-background\:{\title\:\$:/language/Docs/PaletteColours/menubar-background\,\text\:\Menu bar background\},\$:/language/Docs/PaletteColours/menubar-foreground\:{\title\:\$:/language/Docs/PaletteColours/menubar-foreground\,\text\:\Menu bar foreground\},\$:/language/Docs/PaletteColours/message-background\:{\title\:\$:/language/Docs/PaletteColours/message-background\,\text\:\Message box background\},\$:/language/Docs/PaletteColours/message-border\:{\title\:\$:/language/Docs/PaletteColours/message-border\,\text\:\Message box border\},\$:/language/Docs/PaletteColours/message-foreground\:{\title\:\$:/language/Docs/PaletteColours/message-foreground\,\text\:\Message box foreground\},\$:/language/Docs/PaletteColours/modal-backdrop\:{\title\:\$:/language/Docs/PaletteColours/modal-backdrop\,\text\:\Modal backdrop\},\$:/language/Docs/PaletteColours/modal-background\:{\title\:\$:/language/Docs/PaletteColours/modal-background\,\text\:\Modal background\},\$:/language/Docs/PaletteColours/modal-border\:{\title\:\$:/language/Docs/PaletteColours/modal-border\,\text\:\Modal border\},\$:/language/Docs/PaletteColours/modal-footer-background\:{\title\:\$:/language/Docs/PaletteColours/modal-footer-background\,\text\:\Modal footer background\},\$:/language/Docs/PaletteColours/modal-footer-border\:{\title\:\$:/language/Docs/PaletteColours/modal-footer-border\,\text\:\Modal footer border\},\$:/language/Docs/PaletteColours/modal-header-border\:{\title\:\$:/language/Docs/PaletteColours/modal-header-border\,\text\:\Modal header border\},\$:/language/Docs/PaletteColours/muted-foreground\:{\title\:\$:/language/Docs/PaletteColours/muted-foreground\,\text\:\General muted foreground\},\$:/language/Docs/PaletteColours/notification-background\:{\title\:\$:/language/Docs/PaletteColours/notification-background\,\text\:\Notification background\},\$:/language/Docs/PaletteColours/notification-border\:{\title\:\$:/language/Docs/PaletteColours/notification-border\,\text\:\Notification border\},\$:/language/Docs/PaletteColours/page-background\:{\title\:\$:/language/Docs/PaletteColours/page-background\,\text\:\Page background\},\$:/language/Docs/PaletteColours/pre-background\:{\title\:\$:/language/Docs/PaletteColours/pre-background\,\text\:\Preformatted code background\},\$:/language/Docs/PaletteColours/pre-border\:{\title\:\$:/language/Docs/PaletteColours/pre-border\,\text\:\Preformatted code border\},\$:/language/Docs/PaletteColours/primary\:{\title\:\$:/language/Docs/PaletteColours/primary\,\text\:\General primary\},\$:/language/Docs/PaletteColours/select-tag-background\:{\title\:\$:/language/Docs/PaletteColours/select-tag-background\,\text\:\`\u003Cselect>` element background\},\$:/language/Docs/PaletteColours/select-tag-foreground\:{\title\:\$:/language/Docs/PaletteColours/select-tag-foreground\,\text\:\`\u003Cselect>` element text\},\$:/language/Docs/PaletteColours/sidebar-button-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-button-foreground\,\text\:\Sidebar button foreground\},\$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover\:{\title\:\$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover\,\text\:\Sidebar controls foreground hover\},\$:/language/Docs/PaletteColours/sidebar-controls-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-controls-foreground\,\text\:\Sidebar controls foreground\},\$:/language/Docs/PaletteColours/sidebar-foreground-shadow\:{\title\:\$:/language/Docs/PaletteColours/sidebar-foreground-shadow\,\text\:\Sidebar foreground shadow\},\$:/language/Docs/PaletteColours/sidebar-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-foreground\,\text\:\Sidebar foreground\},\$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover\:{\title\:\$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover\,\text\:\Sidebar muted foreground hover\},\$:/language/Docs/PaletteColours/sidebar-muted-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-muted-foreground\,\text\:\Sidebar muted foreground\},\$:/language/Docs/PaletteColours/sidebar-tab-background-selected\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-background-selected\,\text\:\Sidebar tab background for selected tabs\},\$:/language/Docs/PaletteColours/sidebar-tab-background\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-background\,\text\:\Sidebar tab background\},\$:/language/Docs/PaletteColours/sidebar-tab-border-selected\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-border-selected\,\text\:\Sidebar tab border for selected tabs\},\$:/language/Docs/PaletteColours/sidebar-tab-border\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-border\,\text\:\Sidebar tab border\},\$:/language/Docs/PaletteColours/sidebar-tab-divider\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-divider\,\text\:\Sidebar tab divider\},\$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected\,\text\:\Sidebar tab foreground for selected tabs\},\$:/language/Docs/PaletteColours/sidebar-tab-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tab-foreground\,\text\:\Sidebar tab foreground\},\$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover\,\text\:\Sidebar tiddler link foreground hover\},\$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground\:{\title\:\$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground\,\text\:\Sidebar tiddler link foreground\},\$:/language/Docs/PaletteColours/stability-stable\:{\title\:\$:/language/Docs/PaletteColours/stability-stable\,\text\:\Badge for stability level \\\stable\\\\},\$:/language/Docs/PaletteColours/stability-experimental\:{\title\:\$:/language/Docs/PaletteColours/stability-experimental\,\text\:\Badge for stability level \\\experimental\\\\},\$:/language/Docs/PaletteColours/stability-deprecated\:{\title\:\$:/language/Docs/PaletteColours/stability-deprecated\,\text\:\Badge for stability level \\\deprecated\\\\},\$:/language/Docs/PaletteColours/stability-legacy\:{\title\:\$:/language/Docs/PaletteColours/stability-legacy\,\text\:\Badge for stability level \\\legacy\\\\},\$:/language/Docs/PaletteColours/testcase-accent-level-1\:{\title\:\$:/language/Docs/PaletteColours/testcase-accent-level-1\,\text\:\Test case accent colour with no nesting\},\$:/language/Docs/PaletteColours/testcase-accent-level-2\:{\title\:\$:/language/Docs/PaletteColours/testcase-accent-level-2\,\text\:\Test case accent colour with 2nd level nesting\},\$:/language/Docs/PaletteColours/testcase-accent-level-3\:{\title\:\$:/language/Docs/PaletteColours/testcase-accent-level-3\,\text\:\Test case accent colour with 3rd level nesting or higher\},\$:/language/Docs/PaletteColours/site-title-foreground\:{\title\:\$:/language/Docs/PaletteColours/site-title-foreground\,\text\:\Site title foreground\},\$:/language/Docs/PaletteColours/static-alert-foreground\:{\title\:\$:/language/Docs/PaletteColours/static-alert-foreground\,\text\:\Static alert foreground\},\$:/language/Docs/PaletteColours/tab-background-selected\:{\title\:\$:/language/Docs/PaletteColours/tab-background-selected\,\text\:\Tab background for selected tabs\},\$:/language/Docs/PaletteColours/tab-background\:{\title\:\$:/language/Docs/PaletteColours/tab-background\,\text\:\Tab background\},\$:/language/Docs/PaletteColours/tab-border-selected\:{\title\:\$:/language/Docs/PaletteColours/tab-border-selected\,\text\:\Tab border for selected tabs\},\$:/language/Docs/PaletteColours/tab-border\:{\title\:\$:/language/Docs/PaletteColours/tab-border\,\text\:\Tab border\},\$:/language/Docs/PaletteColours/tab-divider\:{\title\:\$:/language/Docs/PaletteColours/tab-divider\,\text\:\Tab divider\},\$:/language/Docs/PaletteColours/tab-foreground-selected\:{\title\:\$:/language/Docs/PaletteColours/tab-foreground-selected\,\text\:\Tab foreground for selected tabs\},\$:/language/Docs/PaletteColours/tab-foreground\:{\title\:\$:/language/Docs/PaletteColours/tab-foreground\,\text\:\Tab foreground\},\$:/language/Docs/PaletteColours/table-border\:{\title\:\$:/language/Docs/PaletteColours/table-border\,\text\:\Table border\},\$:/language/Docs/PaletteColours/table-footer-background\:{\title\:\$:/language/Docs/PaletteColours/table-footer-background\,\text\:\Table footer background\},\$:/language/Docs/PaletteColours/table-header-background\:{\title\:\$:/language/Docs/PaletteColours/table-header-background\,\text\:\Table header background\},\$:/language/Docs/PaletteColours/tag-background\:{\title\:\$:/language/Docs/PaletteColours/tag-background\,\text\:\Tag background\},\$:/language/Docs/PaletteColours/tag-foreground\:{\title\:\$:/language/Docs/PaletteColours/tag-foreground\,\text\:\Tag foreground\},\$:/language/Docs/PaletteColours/tiddler-background\:{\title\:\$:/language/Docs/PaletteColours/tiddler-background\,\text\:\Tiddler background\},\$:/language/Docs/PaletteColours/tiddler-border\:{\title\:\$:/language/Docs/PaletteColours/tiddler-border\,\text\:\Tiddler border\},\$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover\:{\title\:\$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover\,\text\:\Tiddler controls foreground hover\},\$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected\:{\title\:\$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected\,\text\:\Tiddler controls foreground for selected controls\},\$:/language/Docs/PaletteColours/tiddler-controls-foreground\:{\title\:\$:/language/Docs/PaletteColours/tiddler-controls-foreground\,\text\:\Tiddler controls foreground\},\$:/language/Docs/PaletteColours/tiddler-editor-background\:{\title\:\$:/language/Docs/PaletteColours/tiddler-editor-background\,\text\:\Tiddler editor background\},\$:/language/Docs/PaletteColours/tiddler-editor-border-image\:{\title\:\$:/language/Docs/PaletteColours/tiddler-editor-border-image\,\text\:\Tiddler editor border image\},\$:/language/Docs/PaletteColours/tiddler-editor-border\:{\title\:\$:/language/Docs/PaletteColours/tiddler-editor-border\,\text\:\Tiddler editor border\},\$:/language/Docs/PaletteColours/tiddler-editor-fields-even\:{\title\:\$:/language/Docs/PaletteColours/tiddler-editor-fields-even\,\text\:\Tiddler editor background for even fields\},\$:/language/Docs/PaletteColours/tiddler-editor-fields-odd\:{\title\:\$:/language/Docs/PaletteColours/tiddler-editor-fields-odd\,\text\:\Tiddler editor background for odd fields\},\$:/language/Docs/PaletteColours/tiddler-info-background\:{\title\:\$:/language/Docs/PaletteColours/tiddler-info-background\,\text\:\Tiddler info panel background\},\$:/language/Docs/PaletteColours/tiddler-info-border\:{\title\:\$:/language/Docs/PaletteColours/tiddler-info-border\,\text\:\Tiddler info panel border\},\$:/language/Docs/PaletteColours/tiddler-info-tab-background\:{\title\:\$:/language/Docs/PaletteColours/tiddler-info-tab-background\,\text\:\Tiddler info panel tab background\},\$:/language/Docs/PaletteColours/tiddler-link-background\:{\title\:\$:/language/Docs/PaletteColours/tiddler-link-background\,\text\:\Tiddler link background\},\$:/language/Docs/PaletteColours/tiddler-link-foreground\:{\title\:\$:/language/Docs/PaletteColours/tiddler-link-foreground\,\text\:\Tiddler link foreground\},\$:/language/Docs/PaletteColours/tiddler-subtitle-foreground\:{\title\:\$:/language/Docs/PaletteColours/tiddler-subtitle-foreground\,\text\:\Tiddler subtitle foreground\},\$:/language/Docs/PaletteColours/tiddler-title-foreground\:{\title\:\$:/language/Docs/PaletteColours/tiddler-title-foreground\,\text\:\Tiddler title foreground\},\$:/language/Docs/PaletteColours/toolbar-new-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-new-button\,\text\:\Toolbar new tiddler button foreground\},\$:/language/Docs/PaletteColours/toolbar-options-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-options-button\,\text\:\Toolbar options button foreground\},\$:/language/Docs/PaletteColours/toolbar-save-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-save-button\,\text\:\Toolbar save button foreground\},\$:/language/Docs/PaletteColours/toolbar-info-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-info-button\,\text\:\Toolbar info button foreground\},\$:/language/Docs/PaletteColours/toolbar-edit-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-edit-button\,\text\:\Toolbar edit button foreground\},\$:/language/Docs/PaletteColours/toolbar-close-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-close-button\,\text\:\Toolbar close button foreground\},\$:/language/Docs/PaletteColours/toolbar-delete-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-delete-button\,\text\:\Toolbar delete button foreground\},\$:/language/Docs/PaletteColours/toolbar-cancel-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-cancel-button\,\text\:\Toolbar cancel button foreground\},\$:/language/Docs/PaletteColours/toolbar-done-button\:{\title\:\$:/language/Docs/PaletteColours/toolbar-done-button\,\text\:\Toolbar done button foreground\},\$:/language/Docs/PaletteColours/untagged-background\:{\title\:\$:/language/Docs/PaletteColours/untagged-background\,\text\:\Untagged pill background\},\$:/language/Docs/PaletteColours/very-muted-foreground\:{\title\:\$:/language/Docs/PaletteColours/very-muted-foreground\,\text\:\Very muted foreground\},\$:/language/EditTemplate/Caption\:{\title\:\$:/language/EditTemplate/Caption\,\text\:\Editor\},\$:/language/EditTemplate/Body/External/Hint\:{\title\:\$:/language/EditTemplate/Body/External/Hint\,\text\:\This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself\},\$:/language/EditTemplate/Body/Placeholder\:{\title\:\$:/language/EditTemplate/Body/Placeholder\,\text\:\Type the text for this tiddler\},\$:/language/EditTemplate/Body/Preview/Type/Output\:{\title\:\$:/language/EditTemplate/Body/Preview/Type/Output\,\text\:\output\},\$:/language/EditTemplate/Body/Preview/Type/DiffShadow\:{\title\:\$:/language/EditTemplate/Body/Preview/Type/DiffShadow\,\text\:\differences from shadow (if any)\},\$:/language/EditTemplate/Body/Preview/Type/DiffCurrent\:{\title\:\$:/language/EditTemplate/Body/Preview/Type/DiffCurrent\,\text\:\differences from current\},\$:/language/EditTemplate/Field/Remove/Caption\:{\title\:\$:/language/EditTemplate/Field/Remove/Caption\,\text\:\remove field\},\$:/language/EditTemplate/Field/Remove/Hint\:{\title\:\$:/language/EditTemplate/Field/Remove/Hint\,\text\:\Remove field\},\$:/language/EditTemplate/Field/Dropdown/Caption\:{\title\:\$:/language/EditTemplate/Field/Dropdown/Caption\,\text\:\field list\},\$:/language/EditTemplate/Field/Dropdown/Hint\:{\title\:\$:/language/EditTemplate/Field/Dropdown/Hint\,\text\:\Show field list\},\$:/language/EditTemplate/Fields/Add/Button\:{\title\:\$:/language/EditTemplate/Fields/Add/Button\,\text\:\add\},\$:/language/EditTemplate/Fields/Add/Button/Hint\:{\title\:\$:/language/EditTemplate/Fields/Add/Button/Hint\,\text\:\Add the new field to the tiddler\},\$:/language/EditTemplate/Fields/Add/Name/Placeholder\:{\title\:\$:/language/EditTemplate/Fields/Add/Name/Placeholder\,\text\:\field name\},\$:/language/EditTemplate/Fields/Add/Prompt\:{\title\:\$:/language/EditTemplate/Fields/Add/Prompt\,\text\:\Add a new field:\},\$:/language/EditTemplate/Fields/Add/Value/Placeholder\:{\title\:\$:/language/EditTemplate/Fields/Add/Value/Placeholder\,\text\:\field value\},\$:/language/EditTemplate/Fields/Add/Dropdown/System\:{\title\:\$:/language/EditTemplate/Fields/Add/Dropdown/System\,\text\:\System fields\},\$:/language/EditTemplate/Fields/Add/Dropdown/User\:{\title\:\$:/language/EditTemplate/Fields/Add/Dropdown/User\,\text\:\User fields\},\$:/language/EditTemplate/Shadow/Warning\:{\title\:\$:/language/EditTemplate/Shadow/Warning\,\text\:\This is a shadow tiddler. Any changes you make will override the default version from the plugin \u003C\u003CpluginLink>>\},\$:/language/EditTemplate/Shadow/OverriddenWarning\:{\title\:\$:/language/EditTemplate/Shadow/OverriddenWarning\,\text\:\This is a modified shadow tiddler. You can revert to the default version in the plugin \u003C\u003CpluginLink>> by deleting this tiddler\},\$:/language/EditTemplate/Tags/Add/Button\:{\title\:\$:/language/EditTemplate/Tags/Add/Button\,\text\:\add\},\$:/language/EditTemplate/Tags/Add/Button/Hint\:{\title\:\$:/language/EditTemplate/Tags/Add/Button/Hint\,\text\:\add tag\},\$:/language/EditTemplate/Tags/Add/Placeholder\:{\title\:\$:/language/EditTemplate/Tags/Add/Placeholder\,\text\:\tag name\},\$:/language/EditTemplate/Tags/ClearInput/Caption\:{\title\:\$:/language/EditTemplate/Tags/ClearInput/Caption\,\text\:\clear input\},\$:/language/EditTemplate/Tags/ClearInput/Hint\:{\title\:\$:/language/EditTemplate/Tags/ClearInput/Hint\,\text\:\Clear tag input\},\$:/language/EditTemplate/Tags/Dropdown/Caption\:{\title\:\$:/language/EditTemplate/Tags/Dropdown/Caption\,\text\:\tag list\},\$:/language/EditTemplate/Tags/Dropdown/Hint\:{\title\:\$:/language/EditTemplate/Tags/Dropdown/Hint\,\text\:\Show tag list\},\$:/language/EditTemplate/Tags/EmptyMessage\:{\title\:\$:/language/EditTemplate/Tags/EmptyMessage\,\text\:\No tags found\},\$:/language/EditTemplate/Tags/EmptyMessage/System\:{\title\:\$:/language/EditTemplate/Tags/EmptyMessage/System\,\text\:\No system tags found\},\$:/language/EditTemplate/Title/BadCharacterWarning\:{\title\:\$:/language/EditTemplate/Title/BadCharacterWarning\,\text\:\Warning: avoid using any of the characters \u003C\u003Cbad-chars>> in tiddler titles\},\$:/language/EditTemplate/Title/Exists/Prompt\:{\title\:\$:/language/EditTemplate/Title/Exists/Prompt\,\text\:\Target tiddler already exists\},\$:/language/EditTemplate/Title/Relink/Prompt\:{\title\:\$:/language/EditTemplate/Title/Relink/Prompt\,\text\:\Update \u003C$text text\u003C\u003CfromTitle>>/> to \u003C$text text\u003C\u003CtoTitle>>/> in the //tags// and //list// fields of other tiddlers\},\$:/language/EditTemplate/Title/References/Prompt\:{\title\:\$:/language/EditTemplate/Title/References/Prompt\,\text\:\The following references to this tiddler will not be automatically updated:\},\$:/language/EditTemplate/Type/Dropdown/Caption\:{\title\:\$:/language/EditTemplate/Type/Dropdown/Caption\,\text\:\content type list\},\$:/language/EditTemplate/Type/Dropdown/Hint\:{\title\:\$:/language/EditTemplate/Type/Dropdown/Hint\,\text\:\Show content type list\},\$:/language/EditTemplate/Type/Delete/Caption\:{\title\:\$:/language/EditTemplate/Type/Delete/Caption\,\text\:\delete content type\},\$:/language/EditTemplate/Type/Delete/Hint\:{\title\:\$:/language/EditTemplate/Type/Delete/Hint\,\text\:\Delete content type\},\$:/language/EditTemplate/Type/Placeholder\:{\title\:\$:/language/EditTemplate/Type/Placeholder\,\text\:\content type\},\$:/language/EditTemplate/Type/Prompt\:{\title\:\$:/language/EditTemplate/Type/Prompt\,\text\:\Type:\},\$:/language/Exporters/StaticRiver\:{\title\:\$:/language/Exporters/StaticRiver\,\text\:\Static HTML\},\$:/language/Exporters/JsonFile\:{\title\:\$:/language/Exporters/JsonFile\,\text\:\JSON file\},\$:/language/Exporters/CsvFile\:{\title\:\$:/language/Exporters/CsvFile\,\text\:\CSV file\},\$:/language/Exporters/TidFile\:{\title\:\$:/language/Exporters/TidFile\,\text\:\TID text file\},\$:/language/Docs/Fields/_canonical_uri\:{\title\:\$:/language/Docs/Fields/_canonical_uri\,\text\:\The full URI of an external image tiddler\},\$:/language/Docs/Fields/author\:{\title\:\$:/language/Docs/Fields/author\,\text\:\Name of the author of a plugin\},\$:/language/Docs/Fields/bag\:{\title\:\$:/language/Docs/Fields/bag\,\text\:\The name of the bag from which a tiddler came\},\$:/language/Docs/Fields/caption\:{\title\:\$:/language/Docs/Fields/caption\,\text\:\The text to be displayed on a tab or button\},\$:/language/Docs/Fields/class\:{\title\:\$:/language/Docs/Fields/class\,\text\:\The CSS class applied to a tiddler when rendering it. Also used for Modals\},\$:/language/Docs/Fields/code-body\:{\title\:\$:/language/Docs/Fields/code-body\,\text\:\The view template will display the tiddler as code if set to yes\},\$:/language/Docs/Fields/color\:{\title\:\$:/language/Docs/Fields/color\,\text\:\The CSS color value associated with a tiddler\},\$:/language/Docs/Fields/component\:{\title\:\$:/language/Docs/Fields/component\,\text\:\The name of the component responsible for an alert tiddler\},\$:/language/Docs/Fields/core-version\:{\title\:\$:/language/Docs/Fields/core-version\,\text\:\For a plugin, indicates what version of TiddlyWiki with which it is compatible\},\$:/language/Docs/Fields/current-tiddler\:{\title\:\$:/language/Docs/Fields/current-tiddler\,\text\:\Used to cache the top tiddler in a history list\},\$:/language/Docs/Fields/created\:{\title\:\$:/language/Docs/Fields/created\,\text\:\The date a tiddler was created\},\$:/language/Docs/Fields/creator\:{\title\:\$:/language/Docs/Fields/creator\,\text\:\The name of the person who created a tiddler\},\$:/language/Docs/Fields/dependents\:{\title\:\$:/language/Docs/Fields/dependents\,\text\:\For a plugin, lists the dependent plugin titles\},\$:/language/Docs/Fields/description\:{\title\:\$:/language/Docs/Fields/description\,\text\:\The descriptive text for a plugin, or a modal dialogue\},\$:/language/Docs/Fields/draft.of\:{\title\:\$:/language/Docs/Fields/draft.of\,\text\:\For draft tiddlers, contains the title of the tiddler of which this is a draft\},\$:/language/Docs/Fields/draft.title\:{\title\:\$:/language/Docs/Fields/draft.title\,\text\:\For draft tiddlers, contains the proposed new title of the tiddler\},\$:/language/Docs/Fields/footer\:{\title\:\$:/language/Docs/Fields/footer\,\text\:\The footer text for a modal\},\$:/language/Docs/Fields/hide-body\:{\title\:\$:/language/Docs/Fields/hide-body\,\text\:\The view template will hide bodies of tiddlers if set to yes\},\$:/language/Docs/Fields/icon\:{\title\:\$:/language/Docs/Fields/icon\,\text\:\The title of the tiddler containing the icon associated with a tiddler\},\$:/language/Docs/Fields/library\:{\title\:\$:/language/Docs/Fields/library\,\text\:\Indicates that a tiddler should be saved as a JavaScript library if set to yes\},\$:/language/Docs/Fields/list\:{\title\:\$:/language/Docs/Fields/list\,\text\:\An ordered list of tiddler titles associated with a tiddler\},\$:/language/Docs/Fields/list-before\:{\title\:\$:/language/Docs/Fields/list-before\,\text\:\If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty\},\$:/language/Docs/Fields/list-after\:{\title\:\$:/language/Docs/Fields/list-after\,\text\:\If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty\},\$:/language/Docs/Fields/modified\:{\title\:\$:/language/Docs/Fields/modified\,\text\:\The date and time at which a tiddler was last modified\},\$:/language/Docs/Fields/modifier\:{\title\:\$:/language/Docs/Fields/modifier\,\text\:\The tiddler title associated with the person who last modified a tiddler\},\$:/language/Docs/Fields/module-type\:{\title\:\$:/language/Docs/Fields/module-type\,\text\:\For javascript tiddlers, specifies what kind of module it is\},\$:/language/Docs/Fields/name\:{\title\:\$:/language/Docs/Fields/name\,\text\:\The human readable name associated with a plugin tiddler\},\$:/language/Docs/Fields/parent-plugin\:{\title\:\$:/language/Docs/Fields/parent-plugin\,\text\:\For a plugin, specifies which plugin of which it is a sub-plugin\},\$:/language/Docs/Fields/plugin-priority\:{\title\:\$:/language/Docs/Fields/plugin-priority\,\text\:\A numerical value indicating the priority of a plugin tiddler\},\$:/language/Docs/Fields/plugin-type\:{\title\:\$:/language/Docs/Fields/plugin-type\,\text\:\The type of plugin in a plugin tiddler\},\$:/language/Docs/Fields/stability\:{\title\:\$:/language/Docs/Fields/stability\,\text\:\The development status of a plugin: deprecated, experimental, stable, or legacy\},\$:/language/Docs/Fields/revision\:{\title\:\$:/language/Docs/Fields/revision\,\text\:\The revision of the tiddler held at the server\},\$:/language/Docs/Fields/released\:{\title\:\$:/language/Docs/Fields/released\,\text\:\Date of a TiddlyWiki release\},\$:/language/Docs/Fields/source\:{\title\:\$:/language/Docs/Fields/source\,\text\:\The source URL associated with a tiddler\},\$:/language/Docs/Fields/subtitle\:{\title\:\$:/language/Docs/Fields/subtitle\,\text\:\The subtitle text for a modal\},\$:/language/Docs/Fields/tags\:{\title\:\$:/language/Docs/Fields/tags\,\text\:\A list of tags associated with a tiddler\},\$:/language/Docs/Fields/text\:{\title\:\$:/language/Docs/Fields/text\,\text\:\The body text of a tiddler\},\$:/language/Docs/Fields/throttle.refresh\:{\title\:\$:/language/Docs/Fields/throttle.refresh\,\text\:\If present, throttles refreshes of this tiddler\},\$:/language/Docs/Fields/title\:{\title\:\$:/language/Docs/Fields/title\,\text\:\The unique name of a tiddler\},\$:/language/Docs/Fields/toc-link\:{\title\:\$:/language/Docs/Fields/toc-link\,\text\:\Suppresses the tiddlers link in a Table of Contents tree if set to no\},\$:/language/Docs/Fields/type\:{\title\:\$:/language/Docs/Fields/type\,\text\:\The content type of a tiddler\},\$:/language/Docs/Fields/version\:{\title\:\$:/language/Docs/Fields/version\,\text\:\Version information for a plugin\},\$:/language/Docs/Fields/_is_skinny\:{\title\:\$:/language/Docs/Fields/_is_skinny\,\text\:\If present, indicates that the tiddler text field must be loaded from the server\},\$:/language/Filters/AllTiddlers\:{\title\:\$:/language/Filters/AllTiddlers\,\text\:\All tiddlers except system tiddlers\},\$:/language/Filters/RecentSystemTiddlers\:{\title\:\$:/language/Filters/RecentSystemTiddlers\,\text\:\Recently modified tiddlers, including system tiddlers\},\$:/language/Filters/RecentTiddlers\:{\title\:\$:/language/Filters/RecentTiddlers\,\text\:\Recently modified tiddlers\},\$:/language/Filters/AllTags\:{\title\:\$:/language/Filters/AllTags\,\text\:\All tags except system tags\},\$:/language/Filters/Missing\:{\title\:\$:/language/Filters/Missing\,\text\:\Missing tiddlers\},\$:/language/Filters/Drafts\:{\title\:\$:/language/Filters/Drafts\,\text\:\Draft tiddlers\},\$:/language/Filters/Orphans\:{\title\:\$:/language/Filters/Orphans\,\text\:\Orphan tiddlers\},\$:/language/Filters/SystemTiddlers\:{\title\:\$:/language/Filters/SystemTiddlers\,\text\:\System tiddlers\},\$:/language/Filters/ShadowTiddlers\:{\title\:\$:/language/Filters/ShadowTiddlers\,\text\:\Shadow tiddlers\},\$:/language/Filters/OverriddenShadowTiddlers\:{\title\:\$:/language/Filters/OverriddenShadowTiddlers\,\text\:\Overridden shadow tiddlers\},\$:/language/Filters/SessionTiddlers\:{\title\:\$:/language/Filters/SessionTiddlers\,\text\:\Tiddlers modified since the wiki was loaded\},\$:/language/Filters/SystemTags\:{\title\:\$:/language/Filters/SystemTags\,\text\:\System tags\},\$:/language/Filters/StoryList\:{\title\:\$:/language/Filters/StoryList\,\text\:\Tiddlers in the story river, excluding \u003C$text text\\\$:/AdvancedSearch\\\/>\},\$:/language/Filters/TypedTiddlers\:{\title\:\$:/language/Filters/TypedTiddlers\,\text\:\Non wiki-text tiddlers\},\GettingStarted\:{\title\:\GettingStarted\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Basics/\\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\\n\\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\\n\\n!! Set up this ~TiddlyWiki\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\\n|tc-table-no-border tc-first-col-min-width tc-first-link-nowrap|k\\n| \u003C$link to\\\$:/SiteTitle\\\>\u003C\u003Clingo Title/Prompt>>\u003C/$link>|\u003C$edit-text tiddler\\\$:/SiteTitle\\\ default\\\\\\ tag\\\input\\\/> |\\n| \u003C$link to\\\$:/SiteSubtitle\\\>\u003C\u003Clingo Subtitle/Prompt>>\u003C/$link>|\u003C$edit-text tiddler\\\$:/SiteSubtitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|^ \u003C$link to\\\$:/DefaultTiddlers\\\>\u003C\u003Clingo DefaultTiddlers/Prompt>>\u003C/$link>\u003Cbr>\u003C\u003Clingo DefaultTiddlers/TopHint>>|\u003C$edit tag\\\textarea\\\ tiddler\\\$:/DefaultTiddlers\\\/>\u003Cbr>//\u003C\u003Clingo DefaultTiddlers/BottomHint>>// |\\n\u003C/div>\\n\\nSee the control panel|$:/ControlPanel for more options.\\n\},\$:/language/Help/build\:{\title\:\$:/language/Help/build\,\description\:\Automatically run configured commands\,\text\:\Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\\n\\n```\\n--build \u003Ctarget> \u003Ctarget> ...\\n```\\n\\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\\n\\n\},\$:/language/Help/clearpassword\:{\title\:\$:/language/Help/clearpassword\,\description\:\Clear a password for subsequent crypto operations\,\text\:\Clear the password for subsequent crypto operations\\n\\n```\\n--clearpassword\\n```\\n\},\$:/language/Help/commands\:{\title\:\$:/language/Help/commands\,\description\:\Run commands returned from a filter\,\text\:\Sequentially run the command tokens returned from a filter\\n\\n```\\n--commands \u003Cfilter>\\n```\\n\\nExamples\\n\\n```\\n--commands \\\enlist:raw{$:/build-commands-as-text}\\\\\n```\\n\\n```\\n--commands \\\{$:/build-commands-as-json}jsonindexes :map{$:/build-commands-as-json}jsonget\u003CcurrentTiddler>\\\\\n```\\n\},\$:/language/Help/default\:{\title\:\$:/language/Help/default\,\text\:\\\\\define commandTitle()\\n$:/language/Help/$(command)$\\n\\\\end\\n\\\\whitespace trim\\n```\\nusage: tiddlywiki \u003Cwikifolder> --\u003Ccommand> \u003Cargs>......\\n```\\n\\nAvailable commands:\\n\\n\u003Cul>\\n\u003C$list filter\\\commandssorttitle\\\ variable\\\command\\\>\\n\u003Cli>\u003C$link to\u003C\u003CcommandTitle>>>\u003C$macrocall $name\\\command\\\ $type\\\text/plain\\\ $output\\\text/plain\\\/>\u003C/$link>:\\n \\n\u003C$transclude tiddler\u003C\u003CcommandTitle>> field\\\description\\\/>\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\\nTo get detailed help on a command:\\n\\n```\\ntiddlywiki --help \u003Ccommand>\\n```\\n\},\$:/language/Help/deletetiddlers\:{\title\:\$:/language/Help/deletetiddlers\,\description\:\Deletes a group of tiddlers\,\text\:\\u003C\u003C.from-version \\\5.1.20\\\>> Deletes a group of tiddlers identified by a filter.\\n\\n```\\n--deletetiddlers \u003Cfilter>\\n```\\n\},\$:/language/Help/editions\:{\title\:\$:/language/Help/editions\,\description\:\Lists the available editions of TiddlyWiki\,\text\:\Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\\n\\n```\\n--editions\\n```\\n\},\$:/language/Help/fetch\:{\title\:\$:/language/Help/fetch\,\description\:\Fetch tiddlers from wiki by URL\,\text\:\Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\\n\\n```\\n--fetch file \u003Curl> \u003Cimport-filter> \u003Ctransform-filter>\\n--fetch files \u003Curl-filter> \u003Cimport-filter> \u003Ctransform-filter>\\n--fetch raw-file \u003Curl> \u003Ctransform-filter>\\n--fetch raw-files \u003Curl-filter> \u003Ctransform-filter>\\n```\\n\\nThe \\\file\\\ and \\\files\\\ variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \\\raw-file\\\ and \\\raw-files\\\ variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\\n\\nWith the \\\file\\\ and \\\raw-file\\\ variants only a single file is fetched and the first parameter is the URL of the file to read.\\n\\nWith the \\\files\\\ and \\\raw-files\\\ variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \\\remote-server\\\ that have a field \\\url\\\ the filter `tagremote-servergeturl` will retrieve all the available URLs.\\n\\nFor the \\\file\\\ and \\\files\\\ variants, the `\u003Cimport-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `alltiddlers` if not provided.\\n\\nFor all variants, the `\u003Ctransform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `addprefix$:/myimports/` would add the prefix `$:/myimports/` to each title.\\n\\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\\n\\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\\n\\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\\n\\n```\\ntiddlywiki --verbose --fetch file \\\https://tiddlywiki.com/\\\ \\\!issystem\\\ \\\\\\ --rendertiddler \\\$:/core/templates/exporters/JsonFile\\\ output.json text/plain \\\\\\ exportFilter \\\!issystem\\\\\n```\\n\\nThe following example retrieves the \\\favicon\\\ file from tiddlywiki.com and saves it in a file called \\\output.ico\\\. Note that the intermediate tiddler \\\Icon Tiddler\\\ is quoted in the \\\--fetch\\\ command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \\\--savetiddler\\\ command because it is being used directly as a title.\\n\\n```\\ntiddlywiki --verbose --fetch raw-file \\\https://tiddlywiki.com/favicon.ico\\\ \\\Icon Tiddler\\\ --savetiddler \\\Icon Tiddler\\\ output.ico\\n```\\n\\n\},\$:/language/Help/help\:{\title\:\$:/language/Help/help\,\description\:\Display help for TiddlyWiki commands\,\text\:\Displays help text for a command:\\n\\n```\\n--help \u003Ccommand>\\n```\\n\\nIf the command name is omitted then a list of available commands is displayed.\\n\},\$:/language/Help/import\:{\title\:\$:/language/Help/import\,\description\:\Import tiddlers from a file\,\text\:\Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\\n\\n```\\n--import \u003Cfilepath> \u003Cdeserializer> \u003Ctitle> \u003Cencoding>\\n```\\n\\nThe deserializers in the core include:\\n\\n* application/javascript\\n* application/json\\n* application/x-tiddler\\n* application/x-tiddler-html-div\\n* application/x-tiddlers\\n* text/html\\n* text/plain\\n\\nThe title of the imported tiddler defaults to the filename.\\n\\nThe encoding defaults to \\\utf8\\\, but can be \\\base64\\\ for importing binary files.\\n\\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\\n\},\$:/language/Help/init\:{\title\:\$:/language/Help/init\,\description\:\Initialise a new wiki folder\,\text\:\Initialise an empty WikiFolder|WikiFolders with a copy of the specified edition.\\n\\n```\\n--init \u003Cedition> \u003Cedition> ...\\n```\\n\\nFor example:\\n\\n```\\ntiddlywiki ./MyWikiFolder --init empty\\n```\\n\\nNote:\\n\\n* The wiki folder directory will be created if necessary\\n* The \\\edition\\\ defaults to empty\\n* The init command will fail if the wiki folder is not empty\\n* The init command removes any `includeWikis` definitions in the editions `tiddlywiki.info` file\\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\\n* `--editions` returns a list of available editions\\n\},\$:/language/Help/listen\:{\title\:\$:/language/Help/listen\,\description\:\Provides an HTTP server interface to TiddlyWiki\,\text\:\Serves a wiki over HTTP.\\n\\nThe listen command uses NamedCommandParameters:\\n\\n```\\n--listen \u003Cname>\u003Cvalue>...\\n```\\n\\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\\n\\n* host - optional hostname to serve from (defaults to \\\127.0.0.1\\\ aka \\\localhost\\\)\\n* path-prefix - optional prefix for paths\\n* port - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \\\8080\\\)\\n* credentials - pathname of credentials CSV file (relative to wiki folder)\\n* anon-username - the username for signing edits for anonymous users\\n* username - optional username for basic authentication\\n* password - optional password for basic authentication\\n* authenticated-user-header - optional name of request header to be used for trusted authentication.\\n* readers - comma-separated list of principals allowed to read from this wiki\\n* writers - comma-separated list of principals allowed to write to this wiki\\n* csrf-disable - set to \\\yes\\\ to disable CSRF checks (defaults to \\\no\\\)\\n* root-tiddler - the tiddler to serve at the root (defaults to \\\$:/core/save/all\\\)\\n* root-render-type - the content type to which the root tiddler should be rendered (defaults to \\\text/plain\\\)\\n* root-serve-type - the content type with which the root tiddler should be served (defaults to \\\text/html\\\)\\n* tls-cert - pathname of TLS certificate file (relative to wiki folder)\\n* tls-key - pathname of TLS key file (relative to wiki folder)\\n* debug-level - optional debug level; set to \\\debug\\\ to view request details (defaults to \\\none\\\)\\n* gzip - set to \\\yes\\\ to enable gzip compression for some http endpoints (defaults to \\\no\\\)\\n* use-browser-cache - set to \\\yes\\\ to allow the browser to cache responses to save bandwidth (defaults to \\\no\\\)\\n\\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\\n\\n\},\$:/language/Help/load\:{\title\:\$:/language/Help/load\,\description\:\Load tiddlers from a file\,\text\:\Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\\n\\n```\\n--load \u003Cfilepath> noerror\\n--load \u003Cdirpath> noerror\\n```\\n\\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \\\noerror\\\ parameter.\\n\\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\\n\\n```\\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\\n```\\n\\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\\n\},\$:/language/Help/makelibrary\:{\title\:\$:/language/Help/makelibrary\,\description\:\Construct library plugin required by upgrade process\,\text\:\Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\\n\\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\\n\\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\\n\\n```\\n--makelibrary \u003Ctitle>\\n```\\n\\nThe title argument defaults to `$:/UpgradeLibrary`.\\n\},\$:/language/Help/notfound\:{\title\:\$:/language/Help/notfound\,\text\:\No such help item\},\$:/language/Help/output\:{\title\:\$:/language/Help/output\,\description\:\Set the base output directory for subsequent commands\,\text\:\Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\\n\\n```\\n--output \u003Cpathname>\\n```\\n\\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\\n\\n\},\$:/language/Help/password\:{\title\:\$:/language/Help/password\,\description\:\Set a password for subsequent crypto operations\,\text\:\Set a password for subsequent crypto operations\\n\\n```\\n--password \u003Cpassword>\\n```\\n\\nNote: This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the ServerCommand.\\n\},\$:/language/Help/render\:{\title\:\$:/language/Help/render\,\description\:\Renders individual tiddlers to files\,\text\:\Render individual tiddlers identified by a filter and save the results to the specified files.\\n\\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \\\currentTiddler\\\ variable set to the title of the tiddler that is being rendered.\\n\\nA name and value for an additional variable may optionally also be specified.\\n\\n```\\n--render \u003Ctiddler-filter> \u003Cfilename-filter> \u003Crender-type> \u003Ctemplate> \u003Cname> \u003Cvalue> *\\n```\\n\\n* tiddler-filter: A filter identifying the tiddler(s) to be rendered\\n* filename-filter: Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `istiddleraddsuffix.html`, which uses the unchanged tiddler title as the filename\\n* render-type: Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\\n* template: Optional template through which each tiddler is rendered\\n* name: Name of optional variables\\n* value: Value of optional variables\\n\\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nNotes:\\n\\n* The output directory is not cleared of any existing files\\n* Any missing directories in the path to the filename are automatically created.\\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWikis double square brackets: `--render \\\Motovun Jack.jpg\\\`\\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `encodeuricomponentaddprefixstatic/` applies URI encoding to each title, and then adds the prefix `static/`\\n* Multiple name/value pairs can be used to pass more than one variable\\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\\n\\nExamples:\\n\\n* `--render !issystem encodeuricomponentaddprefixtiddlers/addsuffix.html` -- renders all non-system tiddlers as files in the subdirectory \\\tiddlers\\\ with URL-encoded titles and the extension HTML\\n* `--render . tiddlers.json text/plain $:/core/templates/exporters/JsonFile exportFilter tagHelloThere` -- renders the tiddlers tagged \\\HelloThere\\\ to a JSON file named \\\tiddlers.json\\\\\n\},\$:/language/Help/rendertiddler\:{\title\:\$:/language/Help/rendertiddler\,\description\:\Render an individual tiddler as a specified ContentType\,\text\:\(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\\n\\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\\n\\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \\\currentTiddler\\\ variable set to the tiddler that is being rendered (the first parameter value).\\n\\nA name and value for an additional variable may optionally also be specified.\\n\\n```\\n--rendertiddler \u003Ctitle> \u003Cfilename> \u003Ctype> \u003Ctemplate> \u003Cname> \u003Cvalue>\\n```\\n\\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nAny missing directories in the path to the filename are automatically created.\\n\\nFor example, the following command saves all tiddlers matching the filter `tagdone` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\\n\\n```\\n--rendertiddler \\\$:/core/templates/exporters/JsonFile\\\ output.json text/plain \\\\\\ exportFilter \\\tagdone\\\\\n```\\n\},\$:/language/Help/rendertiddlers\:{\title\:\$:/language/Help/rendertiddlers\,\description\:\Render tiddlers matching a filter to a specified ContentType\,\text\:\(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\\n\\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\\n\\n```\\n--rendertiddlers \u003Cfilter> \u003Ctemplate> \u003Cpathname> \u003Ctype> \u003Cextension> \\\noclean\\\\\n```\\n\\nFor example:\\n\\n```\\n--rendertiddlers !issystem $:/core/templates/static.tiddler.html ./static text/plain\\n```\\n\\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nAny files in the target directory are deleted unless the noclean flag is specified. The target directory is recursively created if it is missing.\\n\},\$:/language/Help/save\:{\title\:\$:/language/Help/save\,\description\:\Saves individual raw tiddlers to files\,\text\:\Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\\n\\n```\\n--save \u003Ctiddler-filter> \u003Cfilename-filter>\\n```\\n\\n* tiddler-filter: A filter identifying the tiddler(s) to be saved\\n* filename-filter: Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `istiddler`, which uses the unchanged tiddler title as the filename\\n\\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nNotes:\\n\\n* The output directory is not cleared of any existing files\\n* Any missing directories in the path to the filename are automatically created.\\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWikis double square brackets: `--save \\\Motovun Jack.jpg\\\`\\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `encodeuricomponentaddprefixstatic/` applies URI encoding to each title, and then adds the prefix `static/`\\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\\n\\nExamples:\\n\\n* `--save \\\!issystemisimage\\\ \\\encodeuricomponentaddprefixtiddlers/\\\` -- saves all non-system image tiddlers as files in the subdirectory \\\tiddlers\\\ with URL-encoded titles\\n\},\$:/language/Help/savetiddler\:{\title\:\$:/language/Help/savetiddler\,\description\:\Saves a raw tiddler to a file\,\text\:\(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\\n\\nSaves an individual tiddler in its raw text or binary format to the specified filename.\\n\\n```\\n--savetiddler \u003Ctitle> \u003Cfilename>\\n```\\n\\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nAny missing directories in the path to the filename are automatically created.\\n\},\$:/language/Help/savetiddlers\:{\title\:\$:/language/Help/savetiddlers\,\description\:\Saves a group of raw tiddlers to a directory\,\text\:\(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\\n\\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\\n\\n```\\n--savetiddlers \u003Cfilter> \u003Cpathname> \\\noclean\\\\\n```\\n\\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\\n\\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the noclean flag.\\n\\nAny missing directories in the pathname are automatically created.\\n\},\$:/language/Help/savewikifolder\:{\title\:\$:/language/Help/savewikifolder\,\description\:\Saves a wiki to a new wiki folder\,\text\:\\u003C\u003C.from-version \\\5.1.20\\\>> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\\n\\n```\\n--savewikifolder \u003Cwikifolderpath> \u003Cfilter> \u003Cname>\u003Cvalue> *\\n```\\n\\n* The target wiki folder must be empty or non-existent\\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `alltiddlers`\\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\\n* Custom plugins are unpacked into their own folder\\n\\nThe following options are supported:\\n\\n* filter: a filter expression that defines the tiddlers to include in the output.\\n* explodePlugins: defaults to \\\yes\\\\\n** yes will \\\explode\\\ plugins into separate tiddler files and save them to the plugin directory within the wiki folder\\n** no will suppress exploding plugins into their constituent tiddler files. It will save the plugin as a single JSON tiddler in the tiddlers folder\\n\\nNote that both explodePlugins options will produce wiki folders that build the exact same original wiki. The difference lies in how plugins are represented in the wiki folder.\\n\\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\\n\\n```\\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\\n```\\n\\nSave the plugin to the tiddlers directory of the target wiki folder:\\n\\n```\\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder explodePluginsno\\n```\\n\},\$:/language/Help/server\:{\title\:\$:/language/Help/server\,\description\:\(deprecated: see listen command) Provides an HTTP server interface to TiddlyWiki\,\text\:\Legacy command to serve a wiki over HTTP.\\n\\n```\\n--server \u003Cport> \u003Croot-tiddler> \u003Croot-render-type> \u003Croot-serve-type> \u003Cusername> \u003Cpassword> \u003Chost> \u003Cpath-prefix> \u003Cdebug-level>\\n```\\n\\nThe parameters are:\\n\\n* port - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \\\8080\\\)\\n* root-tiddler - the tiddler to serve at the root (defaults to \\\$:/core/save/all\\\)\\n* root-render-type - the content type to which the root tiddler should be rendered (defaults to \\\text/plain\\\)\\n* root-serve-type - the content type with which the root tiddler should be served (defaults to \\\text/html\\\)\\n* username - the default username for signing edits\\n* password - optional password for basic authentication\\n* host - optional hostname to serve from (defaults to \\\127.0.0.1\\\ aka \\\localhost\\\)\\n* path-prefix - optional prefix for paths\\n* debug-level - optional debug level; set to \\\debug\\\ to view request details (defaults to \\\none\\\)\\n\\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\\n\\nFor example:\\n\\n```\\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\\n```\\n\\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and dont want to require a password.\\n\\n\\n```\\n--server 8080 $:/core/save/all text/plain text/html \\\\\\ \\\\\\ 192.168.0.245\\n```\\n\\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\\n\\nTo run multiple TiddlyWiki servers at the same time youll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \\\MY_PORT_NUMBER\\\:\\n\\n```\\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\\n```\\n\},\$:/language/Help/setfield\:{\title\:\$:/language/Help/setfield\,\description\:\Prepares external tiddlers for use\,\text\:\//Note that this command is experimental and may change or be replaced before being finalised//\\n\\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\\n\\n```\\n--setfield \u003Cfilter> \u003Cfieldname> \u003Ctemplatetitle> \u003Crendertype>\\n```\\n\\nThe parameters are:\\n\\n* filter - filter identifying the tiddlers to be affected\\n* fieldname - the field to modify (defaults to \\\text\\\)\\n* templatetitle - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\\n* rendertype - the text type to render (defaults to \\\text/plain\\\; \\\text/html\\\ can be used to include HTML tags)\\n\},\$:/language/Help/unpackplugin\:{\title\:\$:/language/Help/unpackplugin\,\description\:\Unpack the payload tiddlers from a plugin\,\text\:\Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\\n\\n```\\n--unpackplugin \u003Ctitle>\\n```\\n\},\$:/language/Help/verbose\:{\title\:\$:/language/Help/verbose\,\description\:\Triggers verbose output mode\,\text\:\Triggers verbose output, useful for debugging\\n\\n```\\n--verbose\\n```\\n\},\$:/language/Help/version\:{\title\:\$:/language/Help/version\,\description\:\Displays the version number of TiddlyWiki\,\text\:\Displays the version number of TiddlyWiki.\\n\\n```\\n--version\\n```\\n\},\$:/language/Import/Editor/Import/Heading\:{\title\:\$:/language/Import/Editor/Import/Heading\,\text\:\Import images and insert them into the editor.\},\$:/language/Import/Imported/Hint\:{\title\:\$:/language/Import/Imported/Hint\,\text\:\The following tiddlers were imported:\},\$:/language/Import/Listing/Cancel/Caption\:{\title\:\$:/language/Import/Listing/Cancel/Caption\,\text\:\Cancel\},\$:/language/Import/Listing/Cancel/Warning\:{\title\:\$:/language/Import/Listing/Cancel/Warning\,\text\:\Do you wish to cancel the import?\},\$:/language/Import/Listing/Hint\:{\title\:\$:/language/Import/Listing/Hint\,\text\:\These tiddlers are ready to import:\},\$:/language/Import/Listing/Import/Caption\:{\title\:\$:/language/Import/Listing/Import/Caption\,\text\:\Import\},\$:/language/Import/Listing/Select/Caption\:{\title\:\$:/language/Import/Listing/Select/Caption\,\text\:\Select\},\$:/language/Import/Listing/Status/Caption\:{\title\:\$:/language/Import/Listing/Status/Caption\,\text\:\Status\},\$:/language/Import/Listing/Title/Caption\:{\title\:\$:/language/Import/Listing/Title/Caption\,\text\:\Title\},\$:/language/Import/Listing/Preview\:{\title\:\$:/language/Import/Listing/Preview\,\text\:\Preview:\},\$:/language/Import/Listing/Preview/Text\:{\title\:\$:/language/Import/Listing/Preview/Text\,\text\:\Text\},\$:/language/Import/Listing/Preview/TextRaw\:{\title\:\$:/language/Import/Listing/Preview/TextRaw\,\text\:\Text (Raw)\},\$:/language/Import/Listing/Preview/Fields\:{\title\:\$:/language/Import/Listing/Preview/Fields\,\text\:\Fields\},\$:/language/Import/Listing/Preview/Diff\:{\title\:\$:/language/Import/Listing/Preview/Diff\,\text\:\Diff\},\$:/language/Import/Listing/Preview/DiffFields\:{\title\:\$:/language/Import/Listing/Preview/DiffFields\,\text\:\Diff (Fields)\},\$:/language/Import/Listing/Rename/Tooltip\:{\title\:\$:/language/Import/Listing/Rename/Tooltip\,\text\:\Rename tiddler before importing\},\$:/language/Import/Listing/Rename/Prompt\:{\title\:\$:/language/Import/Listing/Rename/Prompt\,\text\:\Rename to:\},\$:/language/Import/Listing/Rename/ConfirmRename\:{\title\:\$:/language/Import/Listing/Rename/ConfirmRename\,\text\:\Rename tiddler\},\$:/language/Import/Listing/Rename/CancelRename\:{\title\:\$:/language/Import/Listing/Rename/CancelRename\,\text\:\Cancel\},\$:/language/Import/Listing/Rename/OverwriteWarning\:{\title\:\$:/language/Import/Listing/Rename/OverwriteWarning\,\text\:\A tiddler with this title already exists.\},\$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible\:{\title\:\$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible\,\text\:\Blocked incompatible or obsolete plugin.\},\$:/language/Import/Upgrader/Plugins/Suppressed/Version\:{\title\:\$:/language/Import/Upgrader/Plugins/Suppressed/Version\,\text\:\Blocked plugin (due to incoming \u003C\u003Cincoming>> not being newer than existing \u003C\u003Cexisting>>).\},\$:/language/Import/Upgrader/Plugins/Upgraded\:{\title\:\$:/language/Import/Upgrader/Plugins/Upgraded\,\text\:\Upgraded plugin from \u003C\u003Cincoming>> to \u003C\u003Cupgraded>>.\},\$:/language/Import/Upgrader/State/Suppressed\:{\title\:\$:/language/Import/Upgrader/State/Suppressed\,\text\:\Blocked temporary state tiddler.\},\$:/language/Import/Upgrader/System/Disabled\:{\title\:\$:/language/Import/Upgrader/System/Disabled\,\text\:\Disabled system tiddler.\},\$:/language/Import/Upgrader/System/Suppressed\:{\title\:\$:/language/Import/Upgrader/System/Suppressed\,\text\:\Blocked system tiddler.\},\$:/language/Import/Upgrader/System/Warning\:{\title\:\$:/language/Import/Upgrader/System/Warning\,\text\:\Core module tiddler.\},\$:/language/Import/Upgrader/System/Alert\:{\title\:\$:/language/Import/Upgrader/System/Alert\,\text\:\You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable.\},\$:/language/Import/Upgrader/ThemeTweaks/Created\:{\title\:\$:/language/Import/Upgrader/ThemeTweaks/Created\,\text\:\Migrated theme tweak from \u003C$text text\u003C\u003Cfrom>>/>.\},\$:/language/Import/Upgrader/Tiddler/Disabled\:{\title\:\$:/language/Import/Upgrader/Tiddler/Disabled\,\text\:\Disabled tiddler.\},\$:/language/Import/Upgrader/Tiddler/Selected\:{\title\:\$:/language/Import/Upgrader/Tiddler/Selected\,\text\:\Selected tiddler.\},\$:/language/Import/Upgrader/Tiddler/Unselected\:{\title\:\$:/language/Import/Upgrader/Tiddler/Unselected\,\text\:\Unselected tiddler.\},\$:/language/AboveStory/ClassicPlugin/Warning\:{\title\:\$:/language/AboveStory/ClassicPlugin/Warning\,\text\:\It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic. ~TiddlyWiki Classic plugins detected:\},\$:/language/BinaryWarning/Prompt\:{\title\:\$:/language/BinaryWarning/Prompt\,\text\:\This tiddler contains binary data\},\$:/language/ClassicWarning/Hint\:{\title\:\$:/language/ClassicWarning/Hint\,\text\:\This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details.\},\$:/language/ClassicWarning/Upgrade/Caption\:{\title\:\$:/language/ClassicWarning/Upgrade/Caption\,\text\:\upgrade\},\$:/language/CloseAll/Button\:{\title\:\$:/language/CloseAll/Button\,\text\:\close all\},\$:/language/ColourPicker/Recent\:{\title\:\$:/language/ColourPicker/Recent\,\text\:\Recent:\},\$:/language/ConfirmCancelTiddler\:{\title\:\$:/language/ConfirmCancelTiddler\,\text\:\Do you wish to discard changes to the tiddler \\\\u003C$text text\u003C\u003Ctitle>>/>\\\?\},\$:/language/ConfirmDeleteTiddler\:{\title\:\$:/language/ConfirmDeleteTiddler\,\text\:\Do you wish to delete the tiddler \\\\u003C$text text\u003C\u003Ctitle>>/>\\\?\},\$:/language/ConfirmDeleteTiddlers\:{\title\:\$:/language/ConfirmDeleteTiddlers\,\text\:\Are you sure you wish to delete \u003C\u003CresultCount>> tiddler(s)?\},\$:/language/ConfirmOverwriteTiddler\:{\title\:\$:/language/ConfirmOverwriteTiddler\,\text\:\Do you wish to overwrite the tiddler \\\\u003C$text text\u003C\u003Ctitle>>/>\\\?\},\$:/language/ConfirmEditShadowTiddler\:{\title\:\$:/language/ConfirmEditShadowTiddler\,\text\:\You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \\\\u003C$text text\u003C\u003Ctitle>>/>\\\?\},\$:/language/ConfirmAction\:{\title\:\$:/language/ConfirmAction\,\text\:\Do you wish to proceed?\},\$:/language/Count\:{\title\:\$:/language/Count\,\text\:\count\},\$:/language/DefaultNewTiddlerTitle\:{\title\:\$:/language/DefaultNewTiddlerTitle\,\text\:\New Tiddler\},\$:/language/Diffs/CountMessage\:{\title\:\$:/language/Diffs/CountMessage\,\text\:\\u003C\u003Cdiff-count>> differences\},\$:/language/DropMessage\:{\title\:\$:/language/DropMessage\,\text\:\Drop now (or use the Escape key to cancel)\},\$:/language/Encryption/Cancel\:{\title\:\$:/language/Encryption/Cancel\,\text\:\Cancel\},\$:/language/Encryption/ConfirmClearPassword\:{\title\:\$:/language/Encryption/ConfirmClearPassword\,\text\:\Do you wish to clear the password? This will remove the encryption applied when saving this wiki\},\$:/language/Encryption/PromptSetPassword\:{\title\:\$:/language/Encryption/PromptSetPassword\,\text\:\Set a new password for this TiddlyWiki\},\$:/language/Encryption/Username\:{\title\:\$:/language/Encryption/Username\,\text\:\Username\},\$:/language/Encryption/Password\:{\title\:\$:/language/Encryption/Password\,\text\:\Password\},\$:/language/Encryption/RepeatPassword\:{\title\:\$:/language/Encryption/RepeatPassword\,\text\:\Repeat password\},\$:/language/Encryption/PasswordNoMatch\:{\title\:\$:/language/Encryption/PasswordNoMatch\,\text\:\Passwords do not match\},\$:/language/Encryption/SetPassword\:{\title\:\$:/language/Encryption/SetPassword\,\text\:\Set password\},\$:/language/Error/Caption\:{\title\:\$:/language/Error/Caption\,\text\:\Error\},\$:/language/Error/DeserializeOperator/MissingOperand\:{\title\:\$:/language/Error/DeserializeOperator/MissingOperand\,\text\:\Filter Error: Missing operand for deserialize operator\},\$:/language/Error/DeserializeOperator/UnknownDeserializer\:{\title\:\$:/language/Error/DeserializeOperator/UnknownDeserializer\,\text\:\Filter Error: Unknown deserializer provided as operand for the deserialize operator\},\$:/language/Error/Filter\:{\title\:\$:/language/Error/Filter\,\text\:\Filter error\},\$:/language/Error/FilterSyntax\:{\title\:\$:/language/Error/FilterSyntax\,\text\:\Syntax error in filter expression\},\$:/language/Error/FilterRunPrefix\:{\title\:\$:/language/Error/FilterRunPrefix\,\text\:\Filter Error: Unknown prefix for filter run\},\$:/language/Error/IsFilterOperator\:{\title\:\$:/language/Error/IsFilterOperator\,\text\:\Filter Error: Unknown parameter for the is filter operator\},\$:/language/Error/FormatFilterOperator\:{\title\:\$:/language/Error/FormatFilterOperator\,\text\:\Filter Error: Unknown suffix for the format filter operator\},\$:/language/Error/LoadingPluginLibrary\:{\title\:\$:/language/Error/LoadingPluginLibrary\,\text\:\Error loading plugin library\},\$:/language/Error/NetworkErrorAlert\:{\title\:\$:/language/Error/NetworkErrorAlert\,\text\:\`\u003Ch2>Network Error\u003C/h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.\u003Cbr>\u003Cbr>Any unsaved changes will be automatically synchronised when connectivity is restored.`\},\$:/language/Error/PutEditConflict\:{\title\:\$:/language/Error/PutEditConflict\,\text\:\File changed on server\},\$:/language/Error/PutForbidden\:{\title\:\$:/language/Error/PutForbidden\,\text\:\Permission denied\},\$:/language/Error/PutUnauthorized\:{\title\:\$:/language/Error/PutUnauthorized\,\text\:\Authentication required\},\$:/language/Error/RecursiveTransclusion\:{\title\:\$:/language/Error/RecursiveTransclusion\,\text\:\Recursive transclusion error in transclude widget\},\$:/language/Error/RetrievingSkinny\:{\title\:\$:/language/Error/RetrievingSkinny\,\text\:\Error retrieving skinny tiddler list\},\$:/language/Error/SavingToTWEdit\:{\title\:\$:/language/Error/SavingToTWEdit\,\text\:\Error saving to TWEdit\},\$:/language/Error/WhileSaving\:{\title\:\$:/language/Error/WhileSaving\,\text\:\Error while saving\},\$:/language/Error/XMLHttpRequest\:{\title\:\$:/language/Error/XMLHttpRequest\,\text\:\XMLHttpRequest error code\},\$:/language/Error/ZoominTextNode\:{\title\:\$:/language/Error/ZoominTextNode\,\text\:\Story View Error: It appears you tried to interact with a tiddler that displays in a custom container. This is most likely caused by using `$:/tags/StoryTiddlerTemplateFilter` with a template that contains text or whitespace at the start. Please use the pragma `\\\\whitespace trim` and ensure the whole contents of the tiddler is wrapped in a single HTML element. The text that caused this issue:\},\$:/language/InternalJavaScriptError/Title\:{\title\:\$:/language/InternalJavaScriptError/Title\,\text\:\Internal JavaScript Error\},\$:/language/InternalJavaScriptError/Hint\:{\title\:\$:/language/InternalJavaScriptError/Hint\,\text\:\Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser\},\$:/language/LayoutSwitcher/Description\:{\title\:\$:/language/LayoutSwitcher/Description\,\text\:\Open the layout switcher\},\$:/language/LazyLoadingWarning\:{\title\:\$:/language/LazyLoadingWarning\,\text\:\\u003Cp>Trying to load external content from \u003C$text text{{!!_canonical_uri}}/>\u003C/p>\u003Cp>If this message doesnt disappear, either the tiddler content type doesnt match the type of the external content, or you may be using a browser that doesnt support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText\u003C/p>\},\$:/language/LoginToTiddlySpace\:{\title\:\$:/language/LoginToTiddlySpace\,\text\:\Login to TiddlySpace\},\$:/language/Manager/Controls/FilterByTag/None\:{\title\:\$:/language/Manager/Controls/FilterByTag/None\,\text\:\(none)\},\$:/language/Manager/Controls/FilterByTag/Prompt\:{\title\:\$:/language/Manager/Controls/FilterByTag/Prompt\,\text\:\Filter by tag:\},\$:/language/Manager/Controls/Order/Prompt\:{\title\:\$:/language/Manager/Controls/Order/Prompt\,\text\:\Reverse order\},\$:/language/Manager/Controls/Search/Placeholder\:{\title\:\$:/language/Manager/Controls/Search/Placeholder\,\text\:\Search\},\$:/language/Manager/Controls/Search/Prompt\:{\title\:\$:/language/Manager/Controls/Search/Prompt\,\text\:\Search:\},\$:/language/Manager/Controls/Show/Option/Tags\:{\title\:\$:/language/Manager/Controls/Show/Option/Tags\,\text\:\tags\},\$:/language/Manager/Controls/Show/Option/Tiddlers\:{\title\:\$:/language/Manager/Controls/Show/Option/Tiddlers\,\text\:\tiddlers\},\$:/language/Manager/Controls/Show/Prompt\:{\title\:\$:/language/Manager/Controls/Show/Prompt\,\text\:\Show:\},\$:/language/Manager/Controls/Sort/Prompt\:{\title\:\$:/language/Manager/Controls/Sort/Prompt\,\text\:\Sort by:\},\$:/language/Manager/Item/Colour\:{\title\:\$:/language/Manager/Item/Colour\,\text\:\Colour\},\$:/language/Manager/Item/Fields\:{\title\:\$:/language/Manager/Item/Fields\,\text\:\Fields\},\$:/language/Manager/Item/Icon/None\:{\title\:\$:/language/Manager/Item/Icon/None\,\text\:\(none)\},\$:/language/Manager/Item/Icon\:{\title\:\$:/language/Manager/Item/Icon\,\text\:\Icon\},\$:/language/Manager/Item/RawText\:{\title\:\$:/language/Manager/Item/RawText\,\text\:\Raw text\},\$:/language/Manager/Item/Tags\:{\title\:\$:/language/Manager/Item/Tags\,\text\:\Tags\},\$:/language/Manager/Item/Tools\:{\title\:\$:/language/Manager/Item/Tools\,\text\:\Tools\},\$:/language/Manager/Item/WikifiedText\:{\title\:\$:/language/Manager/Item/WikifiedText\,\text\:\Wikified text\},\$:/language/MissingTiddler/Hint\:{\title\:\$:/language/MissingTiddler/Hint\,\text\:\Missing tiddler \\\\u003C$text text\u003C\u003CcurrentTiddler>>/>\\\ -- click {{||$:/core/ui/Buttons/edit}} to create\},\$:/language/No\:{\title\:\$:/language/No\,\text\:\No\},\$:/language/OfficialPluginLibrary\:{\title\:\$:/language/OfficialPluginLibrary\,\text\:\Official ~TiddlyWiki Plugin Library\},\$:/language/OfficialPluginLibrary/Hint\:{\title\:\$:/language/OfficialPluginLibrary/Hint\,\text\:\The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team.\},\$:/language/PageTemplate/Description\:{\title\:\$:/language/PageTemplate/Description\,\text\:\the default ~TiddlyWiki layout\},\$:/language/PageTemplate/Name\:{\title\:\$:/language/PageTemplate/Name\,\text\:\Standard Layout\},\$:/language/PluginReloadWarning\:{\title\:\$:/language/PluginReloadWarning\,\text\:\Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect\},\$:/language/RecentChanges/DateFormat\:{\title\:\$:/language/RecentChanges/DateFormat\,\text\:\DDth MMM YYYY\},\$:/language/Shortcuts/Input/AdvancedSearch/Hint\:{\title\:\$:/language/Shortcuts/Input/AdvancedSearch/Hint\,\text\:\Open the ~AdvancedSearch panel from within the sidebar search field\},\$:/language/Shortcuts/Input/Accept/Hint\:{\title\:\$:/language/Shortcuts/Input/Accept/Hint\,\text\:\Accept the selected item\},\$:/language/Shortcuts/Input/AcceptVariant/Hint\:{\title\:\$:/language/Shortcuts/Input/AcceptVariant/Hint\,\text\:\Accept the selected item (variant)\},\$:/language/Shortcuts/Input/Cancel/Hint\:{\title\:\$:/language/Shortcuts/Input/Cancel/Hint\,\text\:\Clear the input field\},\$:/language/Shortcuts/Input/Down/Hint\:{\title\:\$:/language/Shortcuts/Input/Down/Hint\,\text\:\Select the next item\},\$:/language/Shortcuts/Input/Tab-Left/Hint\:{\title\:\$:/language/Shortcuts/Input/Tab-Left/Hint\,\text\:\Select the previous Tab\},\$:/language/Shortcuts/Input/Tab-Right/Hint\:{\title\:\$:/language/Shortcuts/Input/Tab-Right/Hint\,\text\:\Select the next Tab\},\$:/language/Shortcuts/Input/Up/Hint\:{\title\:\$:/language/Shortcuts/Input/Up/Hint\,\text\:\Select the previous item\},\$:/language/Shortcuts/SidebarLayout/Hint\:{\title\:\$:/language/Shortcuts/SidebarLayout/Hint\,\text\:\Change the sidebar layout\},\$:/language/Switcher/Subtitle/theme\:{\title\:\$:/language/Switcher/Subtitle/theme\,\text\:\Switch Theme\},\$:/language/Switcher/Subtitle/layout\:{\title\:\$:/language/Switcher/Subtitle/layout\,\text\:\Switch Layout\},\$:/language/Switcher/Subtitle/language\:{\title\:\$:/language/Switcher/Subtitle/language\,\text\:\Switch Language\},\$:/language/Switcher/Subtitle/palette\:{\title\:\$:/language/Switcher/Subtitle/palette\,\text\:\Switch Palette\},\$:/language/SystemTiddler/Tooltip\:{\title\:\$:/language/SystemTiddler/Tooltip\,\text\:\This is a system tiddler\},\$:/language/SystemTiddlers/Include/Prompt\:{\title\:\$:/language/SystemTiddlers/Include/Prompt\,\text\:\Include system tiddlers\},\$:/language/TagManager/Colour/Heading\:{\title\:\$:/language/TagManager/Colour/Heading\,\text\:\Colour\},\$:/language/TagManager/Count/Heading\:{\title\:\$:/language/TagManager/Count/Heading\,\text\:\Count\},\$:/language/TagManager/Icon/Heading\:{\title\:\$:/language/TagManager/Icon/Heading\,\text\:\Icon\},\$:/language/TagManager/Icons/None\:{\title\:\$:/language/TagManager/Icons/None\,\text\:\None\},\$:/language/TagManager/Info/Heading\:{\title\:\$:/language/TagManager/Info/Heading\,\text\:\Info\},\$:/language/TagManager/Tag/Heading\:{\title\:\$:/language/TagManager/Tag/Heading\,\text\:\Tag\},\$:/language/Tiddler/DateFormat\:{\title\:\$:/language/Tiddler/DateFormat\,\text\:\DDth MMM YYYY at hh12:0mmam\},\$:/language/UnsavedChangesWarning\:{\title\:\$:/language/UnsavedChangesWarning\,\text\:\You have unsaved changes in TiddlyWiki\},\$:/language/Yes\:{\title\:\$:/language/Yes\,\text\:\Yes\},\$:/language/Modals/Download\:{\title\:\$:/language/Modals/Download\,\subtitle\:\Download changes\,\footer\:\\u003C$button message\\\tm-close-tiddler\\\>Close\u003C/$button>\,\help\:\https://tiddlywiki.com/static/DownloadingChanges.html\,\text\:\Your browser only supports manual saving.\\n\\nTo save your modified wiki, right click on the download link below and select \\\Download file\\\ or \\\Save file\\\, and then choose the folder and filename.\\n\\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\\n\\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\\n\},\$:/config/NewJournal/Title\:{\title\:\$:/config/NewJournal/Title\,\text\:\DDth MMM YYYY\},\$:/config/NewJournal/Text\:{\title\:\$:/config/NewJournal/Text\,\text\:\\},\$:/config/NewJournal/Tags\:{\title\:\$:/config/NewJournal/Tags\,\text\:\Journal\\n\},\$:/language/Notifications/Save/Done\:{\title\:\$:/language/Notifications/Save/Done\,\text\:\Saved wiki\},\$:/language/Notifications/Save/Starting\:{\title\:\$:/language/Notifications/Save/Starting\,\text\:\Starting to save wiki\},\$:/language/Notifications/CopiedToClipboard/Succeeded\:{\title\:\$:/language/Notifications/CopiedToClipboard/Succeeded\,\text\:\Copied to clipboard!\},\$:/language/Notifications/CopiedToClipboard/Failed\:{\title\:\$:/language/Notifications/CopiedToClipboard/Failed\,\text\:\Failed to copy to clipboard!\},\$:/language/Search/DefaultResults/Caption\:{\title\:\$:/language/Search/DefaultResults/Caption\,\text\:\List\},\$:/language/Search/Filter/Caption\:{\title\:\$:/language/Search/Filter/Caption\,\text\:\Filter\},\$:/language/Search/Filter/Hint\:{\title\:\$:/language/Search/Filter/Hint\,\text\:\Search via a filter expression|https://tiddlywiki.com/static/Filters.html\},\$:/language/Search/Filter/Matches\:{\title\:\$:/language/Search/Filter/Matches\,\text\:\//\u003Csmall>\u003C\u003CresultCount>> matches\u003C/small>//\},\$:/language/Search/Matches\:{\title\:\$:/language/Search/Matches\,\text\:\//\u003Csmall>\u003C\u003CresultCount>> matches\u003C/small>//\},\$:/language/Search/Matches/All\:{\title\:\$:/language/Search/Matches/All\,\text\:\All matches:\},\$:/language/Search/Matches/NoMatch\:{\title\:\$:/language/Search/Matches/NoMatch\,\text\:\//No match//\},\$:/language/Search/Matches/NoResult\:{\title\:\$:/language/Search/Matches/NoResult\,\text\:\//No search result//\},\$:/language/Search/Matches/Title\:{\title\:\$:/language/Search/Matches/Title\,\text\:\Title matches:\},\$:/language/Search/Search\:{\title\:\$:/language/Search/Search\,\text\:\Search\},\$:/language/Search/Search/TooShort\:{\title\:\$:/language/Search/Search/TooShort\,\text\:\Search text too short\},\$:/language/Search/Shadows/Caption\:{\title\:\$:/language/Search/Shadows/Caption\,\text\:\Shadows\},\$:/language/Search/Shadows/Hint\:{\title\:\$:/language/Search/Shadows/Hint\,\text\:\Search for shadow tiddlers\},\$:/language/Search/Shadows/Matches\:{\title\:\$:/language/Search/Shadows/Matches\,\text\:\//\u003Csmall>\u003C\u003CresultCount>> matches\u003C/small>//\},\$:/language/Search/Standard/Caption\:{\title\:\$:/language/Search/Standard/Caption\,\text\:\Standard\},\$:/language/Search/Standard/Hint\:{\title\:\$:/language/Search/Standard/Hint\,\text\:\Search for standard tiddlers\},\$:/language/Search/Standard/Matches\:{\title\:\$:/language/Search/Standard/Matches\,\text\:\//\u003Csmall>\u003C\u003CresultCount>> matches\u003C/small>//\},\$:/language/Search/System/Caption\:{\title\:\$:/language/Search/System/Caption\,\text\:\System\},\$:/language/Search/System/Hint\:{\title\:\$:/language/Search/System/Hint\,\text\:\Search for system tiddlers\},\$:/language/Search/System/Matches\:{\title\:\$:/language/Search/System/Matches\,\text\:\//\u003Csmall>\u003C\u003CresultCount>> matches\u003C/small>//\},\$:/language/SideBar/Caption\:{\title\:\$:/language/SideBar/Caption\,\text\:\Sidebar\},\$:/language/SideBar/All/Caption\:{\title\:\$:/language/SideBar/All/Caption\,\text\:\All\},\$:/language/SideBar/Contents/Caption\:{\title\:\$:/language/SideBar/Contents/Caption\,\text\:\Contents\},\$:/language/SideBar/Drafts/Caption\:{\title\:\$:/language/SideBar/Drafts/Caption\,\text\:\Drafts\},\$:/language/SideBar/Explorer/Caption\:{\title\:\$:/language/SideBar/Explorer/Caption\,\text\:\Explorer\},\$:/language/SideBar/Missing/Caption\:{\title\:\$:/language/SideBar/Missing/Caption\,\text\:\Missing\},\$:/language/SideBar/More/Caption\:{\title\:\$:/language/SideBar/More/Caption\,\text\:\More\},\$:/language/SideBar/Open/Caption\:{\title\:\$:/language/SideBar/Open/Caption\,\text\:\Open\},\$:/language/SideBar/Orphans/Caption\:{\title\:\$:/language/SideBar/Orphans/Caption\,\text\:\Orphans\},\$:/language/SideBar/Recent/Caption\:{\title\:\$:/language/SideBar/Recent/Caption\,\text\:\Recent\},\$:/language/SideBar/Shadows/Caption\:{\title\:\$:/language/SideBar/Shadows/Caption\,\text\:\Shadows\},\$:/language/SideBar/System/Caption\:{\title\:\$:/language/SideBar/System/Caption\,\text\:\System\},\$:/language/SideBar/Tags/Caption\:{\title\:\$:/language/SideBar/Tags/Caption\,\text\:\Tags\},\$:/language/SideBar/Tags/Untagged/Caption\:{\title\:\$:/language/SideBar/Tags/Untagged/Caption\,\text\:\untagged\},\$:/language/SideBar/Tools/Caption\:{\title\:\$:/language/SideBar/Tools/Caption\,\text\:\Tools\},\$:/language/SideBar/Types/Caption\:{\title\:\$:/language/SideBar/Types/Caption\,\text\:\Types\},\$:/SiteSubtitle\:{\title\:\$:/SiteSubtitle\,\text\:\a non-linear personal web notebook\},\$:/SiteTitle\:{\title\:\$:/SiteTitle\,\text\:\My TiddlyWiki\},\$:/language/Snippets/FunctionDefinition\:{\title\:\$:/language/Snippets/FunctionDefinition\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\Function definition\,\text\:\\\\\function f.name(param1,param2:\\\default value\\\) \u003Cparam1>!isblankelse\u003Cparam2>\\n\\n\u003C\u003Cf.name>>\\n\},\$:/language/Snippets/ListByTag\:{\title\:\$:/language/Snippets/ListByTag\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\List of tiddlers by tag\,\text\:\\u003C\u003Clist-links \\\tagtasksorttitle\\\>>\\n\},\$:/language/Snippets/MacroDefinition\:{\title\:\$:/language/Snippets/MacroDefinition\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\Macro definition\,\text\:\\\\\define macroName(param1:\\\default value\\\,param2)\\nText of the macro\\n\\\\end\\n\},\$:/language/Snippets/ProcedureDefinition\:{\title\:\$:/language/Snippets/ProcedureDefinition\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\Procedure definition\,\text\:\\\\\procedure procName(param1:\\\default value\\\,param2)\\nYour text comes here.\\n\\\\end\\n\},\$:/language/Snippets/Table4x3\:{\title\:\$:/language/Snippets/Table4x3\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\Table with 4 columns by 3 rows\,\text\:\|! |!Alpha |!Beta |!Gamma |!Delta |\\n|!One | | | | |\\n|!Two | | | | |\\n|!Three | | | | |\\n\},\$:/language/Snippets/TableOfContents\:{\title\:\$:/language/Snippets/TableOfContents\,\tags\:\$:/tags/TextEditor/Snippet\,\caption\:\Table of Contents\,\text\:\\u003Cdiv class\\\tc-table-of-contents\\\>\\n\\n\u003C\u003Ctoc-selective-expandable TableOfContents>>\\n\\n\u003C/div>\},\$:/language/ThemeTweaks/ThemeTweaks\:{\title\:\$:/language/ThemeTweaks/ThemeTweaks\,\text\:\Theme Tweaks\},\$:/language/ThemeTweaks/ThemeTweaks/Hint\:{\title\:\$:/language/ThemeTweaks/ThemeTweaks/Hint\,\text\:\You can tweak certain aspects of the Vanilla theme.\},\$:/language/ThemeTweaks/Options\:{\title\:\$:/language/ThemeTweaks/Options\,\text\:\Options\},\$:/language/ThemeTweaks/Options/SidebarLayout\:{\title\:\$:/language/ThemeTweaks/Options/SidebarLayout\,\text\:\Sidebar layout\},\$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid\:{\title\:\$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid\,\text\:\Fixed story, fluid sidebar\},\$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed\:{\title\:\$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed\,\text\:\Fluid story, fixed sidebar\},\$:/language/ThemeTweaks/Options/StickyTitles\:{\title\:\$:/language/ThemeTweaks/Options/StickyTitles\,\text\:\Sticky titles\},\$:/language/ThemeTweaks/Options/StickyTitles/Hint\:{\title\:\$:/language/ThemeTweaks/Options/StickyTitles/Hint\,\text\:\Causes tiddler titles to \\\stick\\\ to the top of the browser window\},\$:/language/ThemeTweaks/Options/CodeWrapping\:{\title\:\$:/language/ThemeTweaks/Options/CodeWrapping\,\text\:\Wrap long lines in code blocks\},\$:/language/ThemeTweaks/Settings\:{\title\:\$:/language/ThemeTweaks/Settings\,\text\:\Settings\},\$:/language/ThemeTweaks/Settings/FontFamily\:{\title\:\$:/language/ThemeTweaks/Settings/FontFamily\,\text\:\Font family\},\$:/language/ThemeTweaks/Settings/CodeFontFamily\:{\title\:\$:/language/ThemeTweaks/Settings/CodeFontFamily\,\text\:\Code font family\},\$:/language/ThemeTweaks/Settings/EditorFontFamily\:{\title\:\$:/language/ThemeTweaks/Settings/EditorFontFamily\,\text\:\Editor font family\},\$:/language/ThemeTweaks/Settings/BackgroundImage\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImage\,\text\:\Page background image\},\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment\,\text\:\Page background image attachment\},\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll\,\text\:\Scroll with tiddlers\},\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed\,\text\:\Fixed to window\},\$:/language/ThemeTweaks/Settings/BackgroundImageSize\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageSize\,\text\:\Page background image size\},\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto\,\text\:\Auto\},\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover\,\text\:\Cover\},\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain\:{\title\:\$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain\,\text\:\Contain\},\$:/language/ThemeTweaks/Metrics\:{\title\:\$:/language/ThemeTweaks/Metrics\,\text\:\Sizes\},\$:/language/ThemeTweaks/Metrics/FontSize\:{\title\:\$:/language/ThemeTweaks/Metrics/FontSize\,\text\:\Font size\},\$:/language/ThemeTweaks/Metrics/LineHeight\:{\title\:\$:/language/ThemeTweaks/Metrics/LineHeight\,\text\:\Line height\},\$:/language/ThemeTweaks/Metrics/BodyFontSize\:{\title\:\$:/language/ThemeTweaks/Metrics/BodyFontSize\,\text\:\Font size for tiddler body\},\$:/language/ThemeTweaks/Metrics/BodyLineHeight\:{\title\:\$:/language/ThemeTweaks/Metrics/BodyLineHeight\,\text\:\Line height for tiddler body\},\$:/language/ThemeTweaks/Metrics/StoryLeft\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryLeft\,\text\:\Story left position\},\$:/language/ThemeTweaks/Metrics/StoryLeft/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryLeft/Hint\,\text\:\how far the left margin of the story river\u003Cbr>(tiddler area) is from the left of the page\},\$:/language/ThemeTweaks/Metrics/StoryTop\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryTop\,\text\:\Story top position\},\$:/language/ThemeTweaks/Metrics/StoryTop/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryTop/Hint\,\text\:\how far the top margin of the story river\u003Cbr>is from the top of the page\},\$:/language/ThemeTweaks/Metrics/StoryRight\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryRight\,\text\:\Story right\},\$:/language/ThemeTweaks/Metrics/StoryRight/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryRight/Hint\,\text\:\how far the left margin of the sidebar \u003Cbr>is from the left of the page\},\$:/language/ThemeTweaks/Metrics/StoryWidth\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryWidth\,\text\:\Story width\},\$:/language/ThemeTweaks/Metrics/StoryWidth/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/StoryWidth/Hint\,\text\:\the overall width of the story river\},\$:/language/ThemeTweaks/Metrics/TiddlerWidth\:{\title\:\$:/language/ThemeTweaks/Metrics/TiddlerWidth\,\text\:\Tiddler width\},\$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint\,\text\:\within the story river\},\$:/language/ThemeTweaks/Metrics/SidebarBreakpoint\:{\title\:\$:/language/ThemeTweaks/Metrics/SidebarBreakpoint\,\text\:\Sidebar breakpoint\},\$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint\,\text\:\the minimum page width at which the story\u003Cbr>river and sidebar will appear side by side\},\$:/language/ThemeTweaks/Metrics/SidebarWidth\:{\title\:\$:/language/ThemeTweaks/Metrics/SidebarWidth\,\text\:\Sidebar width\},\$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint\:{\title\:\$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint\,\text\:\the width of the sidebar in fluid-fixed layout\},\$:/language/TiddlerInfo/Advanced/Caption\:{\title\:\$:/language/TiddlerInfo/Advanced/Caption\,\text\:\Advanced\},\$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint\:{\title\:\$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint\,\text\:\none\},\$:/language/TiddlerInfo/Advanced/PluginInfo/Heading\:{\title\:\$:/language/TiddlerInfo/Advanced/PluginInfo/Heading\,\text\:\Plugin Details\},\$:/language/TiddlerInfo/Advanced/PluginInfo/Hint\:{\title\:\$:/language/TiddlerInfo/Advanced/PluginInfo/Hint\,\text\:\This plugin contains the following shadow tiddlers:\},\$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading\:{\title\:\$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading\,\text\:\Shadow Status\},\$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint\:{\title\:\$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint\,\text\:\The tiddler \u003C$link to\u003C\u003CinfoTiddler>>>\u003C$text text\u003C\u003CinfoTiddler>>/>\u003C/$link> is not a shadow tiddler\},\$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint\:{\title\:\$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint\,\text\:\The tiddler \u003C$link to\u003C\u003CinfoTiddler>>>\u003C$text text\u003C\u003CinfoTiddler>>/>\u003C/$link> is a shadow tiddler\},\$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source\:{\title\:\$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source\,\text\:\It is defined in the plugin \u003C$link to\u003C\u003CpluginTiddler>>>\u003C$text text\u003C\u003CpluginTiddler>>/>\u003C/$link>\},\$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint\:{\title\:\$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint\,\text\:\It is overridden by an ordinary tiddler\},\$:/language/TiddlerInfo/Fields/Caption\:{\title\:\$:/language/TiddlerInfo/Fields/Caption\,\text\:\Fields\},\$:/language/TiddlerInfo/List/Caption\:{\title\:\$:/language/TiddlerInfo/List/Caption\,\text\:\List\},\$:/language/TiddlerInfo/List/Empty\:{\title\:\$:/language/TiddlerInfo/List/Empty\,\text\:\This tiddler does not have a list\},\$:/language/TiddlerInfo/Listed/Caption\:{\title\:\$:/language/TiddlerInfo/Listed/Caption\,\text\:\Listed\},\$:/language/TiddlerInfo/Listed/Empty\:{\title\:\$:/language/TiddlerInfo/Listed/Empty\,\text\:\This tiddler is not listed by any others\},\$:/language/TiddlerInfo/References/Caption\:{\title\:\$:/language/TiddlerInfo/References/Caption\,\text\:\Backlinks\},\$:/language/TiddlerInfo/References/Empty\:{\title\:\$:/language/TiddlerInfo/References/Empty\,\text\:\No tiddlers link to this one\},\$:/language/TiddlerInfo/Tagging/Caption\:{\title\:\$:/language/TiddlerInfo/Tagging/Caption\,\text\:\Tagging\},\$:/language/TiddlerInfo/Tagging/Empty\:{\title\:\$:/language/TiddlerInfo/Tagging/Empty\,\text\:\No tiddlers are tagged with this one\},\$:/language/TiddlerInfo/Tools/Caption\:{\title\:\$:/language/TiddlerInfo/Tools/Caption\,\text\:\Tools\},\$:/language/Docs/Types/application/javascript\:{\title\:\$:/language/Docs/Types/application/javascript\,\description\:\JavaScript code\,\name\:\application/javascript\,\group\:\Developer\,\group-sort\:\2\},\$:/language/Docs/Types/application/json\:{\title\:\$:/language/Docs/Types/application/json\,\description\:\JSON data\,\name\:\application/json\,\group\:\Developer\,\group-sort\:\2\},\$:/language/Docs/Types/application/x-tiddler-dictionary\:{\title\:\$:/language/Docs/Types/application/x-tiddler-dictionary\,\description\:\Data dictionary\,\name\:\application/x-tiddler-dictionary\,\group\:\Developer\,\group-sort\:\2\},\$:/language/Docs/Types/image/gif\:{\title\:\$:/language/Docs/Types/image/gif\,\description\:\GIF image\,\name\:\image/gif\,\group\:\Image\,\group-sort\:\1\},\$:/language/Docs/Types/image/jpeg\:{\title\:\$:/language/Docs/Types/image/jpeg\,\description\:\JPEG image\,\name\:\image/jpeg\,\group\:\Image\,\group-sort\:\1\},\$:/language/Docs/Types/image/png\:{\title\:\$:/language/Docs/Types/image/png\,\description\:\PNG image\,\name\:\image/png\,\group\:\Image\,\group-sort\:\1\},\$:/language/Docs/Types/image/svg+xml\:{\title\:\$:/language/Docs/Types/image/svg+xml\,\description\:\SVG image\,\name\:\image/svg+xml\,\group\:\Image\,\group-sort\:\1\},\$:/language/Docs/Types/text/css\:{\title\:\$:/language/Docs/Types/text/css\,\description\:\Static stylesheet\,\name\:\text/css\,\group\:\Developer\,\group-sort\:\2\},\$:/language/Docs/Types/text/html\:{\title\:\$:/language/Docs/Types/text/html\,\description\:\HTML markup\,\name\:\text/html\,\group\:\Text\,\group-sort\:\0\},\$:/language/Docs/Types/text/plain\:{\title\:\$:/language/Docs/Types/text/plain\,\description\:\Plain text\,\name\:\text/plain\,\group\:\Text\,\group-sort\:\0\},\$:/language/Docs/Types/text/vnd.tiddlywiki\:{\title\:\$:/language/Docs/Types/text/vnd.tiddlywiki\,\description\:\TiddlyWiki 5\,\name\:\text/vnd.tiddlywiki\,\group\:\Text\,\group-sort\:\0\},\$:/language/Docs/Types/text/vnd.tiddlywiki-multiple\:{\title\:\$:/language/Docs/Types/text/vnd.tiddlywiki-multiple\,\description\:\Compound tiddler\,\name\:\text/vnd.tiddlywiki-multiple\,\group\:\Developer\,\group-sort\:\2\},\$:/languages/en-GB\:{\title\:\$:/languages/en-GB\,\name\:\en-GB\,\description\:\English (British)\,\author\:\JeremyRuston\,\core-version\:\>5.0.0\\\\,\text\:\Stub pseudo-plugin for the default language\},\$:/core/modules/commander.js\:{\title\:\$:/core/modules/commander.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commander.js\\ntype: application/javascript\\nmodule-type: global\\n\\nThe $tw.Commander class is a command interpreter\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nParse a sequence of commands\\n\\tcommandTokens: an array of command string tokens\\n\\twiki: reference to the wiki store object\\n\\tstreams: {output:, error:}, each of which has a write(string) method\\n\\tcallback: a callback invoked as callback(err) where err is null if there was no error\\n*/\\nvar Commander function(commandTokens,callback,wiki,streams) {\\n\\tvar path require(\\\path\\\);\\n\\tthis.commandTokens commandTokens;\\n\\tthis.nextToken 0;\\n\\tthis.callback callback;\\n\\tthis.wiki wiki;\\n\\tthis.streams streams;\\n\\tthis.outputPath path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\\n};\\n\\n/*\\nLog a string if verbose flag is set\\n*/\\nCommander.prototype.log function(str) {\\n\\tif(this.verbose) {\\n\\t\\tthis.streams.output.write(str + \\\\\\\n\\\);\\n\\t}\\n};\\n\\n/*\\nWrite a string if verbose flag is set\\n*/\\nCommander.prototype.write function(str) {\\n\\tif(this.verbose) {\\n\\t\\tthis.streams.output.write(str);\\n\\t}\\n};\\n\\n/*\\nAdd a string of tokens to the command queue\\n*/\\nCommander.prototype.addCommandTokens function(commandTokens) {\\n\\tvar params commandTokens.slice(0);\\n\\tparams.unshift(0);\\n\\tparams.unshift(this.nextToken);\\n\\tArray.prototype.splice.apply(this.commandTokens,params);\\n};\\n\\n/*\\nExecute the sequence of commands and invoke a callback on completion\\n*/\\nCommander.prototype.execute function() {\\n\\tthis.executeNextCommand();\\n};\\n\\n/*\\nExecute the next command in the sequence\\n*/\\nCommander.prototype.executeNextCommand function() {\\n\\tvar self this;\\n\\t// Invoke the callback if there are no more commands\\n\\tif(this.nextToken > this.commandTokens.length) {\\n\\t\\tthis.callback(null);\\n\\t} else {\\n\\t\\t// Get and check the command token\\n\\t\\tvar commandName this.commandTokensthis.nextToken++;\\n\\t\\tif(commandName.substr(0,2) ! \\\--\\\) {\\n\\t\\t\\tthis.callback(\\\Missing command: \\\ + commandName);\\n\\t\\t} else {\\n\\t\\t\\tcommandName commandName.substr(2); // Trim off the --\\n\\t\\t\\t// Accumulate the parameters to the command\\n\\t\\t\\tvar params ;\\n\\t\\t\\twhile(this.nextToken \u003C this.commandTokens.length && \\n\\t\\t\\t\\tthis.commandTokensthis.nextToken.substr(0,2) ! \\\--\\\) {\\n\\t\\t\\t\\tparams.push(this.commandTokensthis.nextToken++);\\n\\t\\t\\t}\\n\\t\\t\\t// Get the command info\\n\\t\\t\\tvar command $tw.commandscommandName,\\n\\t\\t\\t\\tc,err;\\n\\t\\t\\tif(!command) {\\n\\t\\t\\t\\tthis.callback(\\\Unknown command: \\\ + commandName);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(this.verbose) {\\n\\t\\t\\t\\t\\tthis.streams.output.write(\\\Executing command: \\\ + commandName + \\\ \\\ + params.join(\\\ \\\) + \\\\\\\n\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Parse named parameters if required\\n\\t\\t\\t\\tif(command.info.namedParameterMode) {\\n\\t\\t\\t\\t\\tparams this.extractNamedParameters(params,command.info.mandatoryParameters);\\n\\t\\t\\t\\t\\tif(typeof params \\\string\\\) {\\n\\t\\t\\t\\t\\t\\treturn this.callback(params);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(command.info.synchronous) {\\n\\t\\t\\t\\t\\t// Synchronous command\\n\\t\\t\\t\\t\\tc new command.Command(params,this);\\n\\t\\t\\t\\t\\terr c.execute();\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\tthis.callback(err);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tthis.executeNextCommand();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Asynchronous command\\n\\t\\t\\t\\t\\tc new command.Command(params,this,function(err) {\\n\\t\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\t\\tself.callback(err);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tself.executeNextCommand();\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\terr c.execute();\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\tthis.callback(err);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\\n*/\\nCommander.prototype.extractNamedParameters function(params,mandatoryParameters) {\\n\\tmandatoryParameters mandatoryParameters || ;\\n\\tvar errors ,\\n\\t\\tparamsByName Object.create(null);\\n\\t// Extract the parameters\\n\\t$tw.utils.each(params,function(param) {\\n\\t\\tvar index param.indexOf(\\\\\\);\\n\\t\\tif(index \u003C 1) {\\n\\t\\t\\terrors.push(\\\malformed named parameter: \\\ + param + \\\\\\);\\n\\t\\t}\\n\\t\\tparamsByNameparam.slice(0,index) $tw.utils.trim(param.slice(index+1));\\n\\t});\\n\\t// Check the mandatory parameters are present\\n\\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\\n\\t\\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\\n\\t\\t\\terrors.push(\\\missing mandatory parameter: \\\ + mandatoryParameter + \\\\\\);\\n\\t\\t}\\n\\t});\\n\\t// Return any errors\\n\\tif(errors.length > 0) {\\n\\t\\treturn errors.join(\\\ and\\\\n\\\);\\n\\t} else {\\n\\t\\treturn paramsByName;\\n\\t}\\n};\\n\\nCommander.initCommands function(moduleType) {\\n\\tmoduleType moduleType || \\\command\\\;\\n\\t$tw.commands {};\\n\\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\\n\\t\\tvar c $tw.commandsmodule.info.name {};\\n\\t\\t// Add the methods defined by the module\\n\\t\\tfor(var f in module) {\\n\\t\\t\\tif($tw.utils.hop(module,f)) {\\n\\t\\t\\t\\tcf modulef;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\nexports.Commander Commander;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/commands/build.js\:{\title\:\$:/core/modules/commands/build.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/build.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to build a build target\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\build\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\t// Get the build targets defined in the wiki\\n\\tvar buildTargets $tw.boot.wikiInfo && $tw.boot.wikiInfo.build;\\n\\tif(!buildTargets) {\\n\\t\\treturn \\\No build targets defined\\\;\\n\\t}\\n\\t// Loop through each of the specified targets\\n\\tvar targets;\\n\\tif(this.params.length > 0) {\\n\\t\\ttargets this.params;\\n\\t} else {\\n\\t\\ttargets Object.keys(buildTargets);\\n\\t}\\n\\tfor(var targetIndex0; targetIndex\u003Ctargets.length; targetIndex++) {\\n\\t\\tvar target targetstargetIndex,\\n\\t\\t\\tcommands buildTargetstarget;\\n\\t\\tif(!commands) {\\n\\t\\t\\treturn \\\Build target \\\ + target + \\\ not found\\\;\\n\\t\\t}\\n\\t\\t// Add the commands to the queue\\n\\t\\tthis.commander.addCommandTokens(commands);\\n\\t}\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/clearpassword.js\:{\title\:\$:/core/modules/commands/clearpassword.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/clearpassword.js\\ntype: application/javascript\\nmodule-type: command\\n\\nClear password for crypto operations\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\clearpassword\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\t$tw.crypto.setPassword(null);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/commands.js\:{\title\:\$:/core/modules/commands/commands.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/commands.js\\ntype: application/javascript\\nmodule-type: command\\n\\nRuns the commands returned from a filter\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\commands\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params, commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\t// Parse the filter\\n\\tvar filter this.params0;\\n\\tif(!filter) {\\n\\t\\treturn \\\No filter specified\\\;\\n\\t}\\n\\tvar commands this.commander.wiki.filterTiddlers(filter)\\n\\tif(commands.length 0) {\\n\\t\\treturn \\\No tiddlers found for filter \\\ + filter + \\\\\\;\\n\\t}\\n\\tthis.commander.addCommandTokens(commands);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/deletetiddlers.js\:{\title\:\$:/core/modules/commands/deletetiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/deletetiddlers.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to delete tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\deletetiddlers\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing filter\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\twiki this.commander.wiki,\\n\\t\\tfilter this.params0,\\n\\t\\ttiddlers wiki.filterTiddlers(filter);\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\twiki.deleteTiddler(title);\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/editions.js\:{\title\:\$:/core/modules/commands/editions.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/editions.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to list the available editions\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\editions\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar self this;\\n\\t// Output the list\\n\\tthis.commander.streams.output.write(\\\Available editions:\\\\n\\\\n\\\);\\n\\tvar editionInfo $tw.utils.getEditionInfo();\\n\\t$tw.utils.each(editionInfo,function(info,name) {\\n\\t\\tself.commander.streams.output.write(\\\ \\\ + name + \\\: \\\ + info.description + \\\\\\\n\\\);\\n\\t});\\n\\tthis.commander.streams.output.write(\\\\\\\n\\\);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/fetch.js\:{\title\:\$:/core/modules/commands/fetch.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/fetch.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommands to fetch external tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\fetch\\\,\\n\\tsynchronous: false\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing subcommand and url\\\;\\n\\t}\\n\\tswitch(this.params0) {\\n\\t\\tcase \\\raw-file\\\:\\n\\t\\t\\treturn this.fetchFiles({\\n\\t\\t\\t\\traw: true,\\n\\t\\t\\t\\turl: this.params1,\\n\\t\\t\\t\\ttransformFilter: this.params2 || \\\\\\,\\n\\t\\t\\t\\tcallback: this.callback\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\file\\\:\\n\\t\\t\\treturn this.fetchFiles({\\n\\t\\t\\t\\turl: this.params1,\\n\\t\\t\\t\\timportFilter: this.params2,\\n\\t\\t\\t\\ttransformFilter: this.params3 || \\\\\\,\\n\\t\\t\\t\\tcallback: this.callback\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\raw-files\\\:\\n\\t\\t\\treturn this.fetchFiles({\\n\\t\\t\\t\\traw: true,\\n\\t\\t\\t\\turlFilter: this.params1,\\n\\t\\t\\t\\ttransformFilter: this.params2 || \\\\\\,\\n\\t\\t\\t\\tcallback: this.callback\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\files\\\:\\n\\t\\t\\treturn this.fetchFiles({\\n\\t\\t\\t\\turlFilter: this.params1,\\n\\t\\t\\t\\timportFilter: this.params2,\\n\\t\\t\\t\\ttransformFilter: this.params3 || \\\\\\,\\n\\t\\t\\t\\tcallback: this.callback\\n\\t\\t\\t});\\n\\t\\t\\tbreak;\\n\\t}\\n\\treturn null;\\n};\\n\\nCommand.prototype.fetchFiles function(options) {\\n\\tvar self this;\\n\\t// Get the list of URLs\\n\\tvar urls;\\n\\tif(options.url) {\\n\\t\\turls options.url\\n\\t} else if(options.urlFilter) {\\n\\t\\turls this.commander.wiki.filterTiddlers(options.urlFilter);\\n\\t} else {\\n\\t\\treturn \\\Missing URL\\\;\\n\\t}\\n\\t// Process each URL in turn\\n\\tvar next 0;\\n\\tvar getNextFile function(err) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn options.callback(err);\\n\\t\\t}\\n\\t\\tif(next \u003C urls.length) {\\n\\t\\t\\tself.fetchFile(urlsnext++,options,getNextFile);\\n\\t\\t} else {\\n\\t\\t\\toptions.callback(null);\\n\\t\\t}\\n\\t};\\n\\tgetNextFile(null);\\n\\t// Success\\n\\treturn null;\\n};\\n\\nCommand.prototype.fetchFile function(url,options,callback,redirectCount) {\\n\\tif(redirectCount > 10) {\\n\\t\\treturn callback(\\\Error too many redirects retrieving \\\ + url);\\n\\t}\\n\\tvar self this,\\n\\t\\tlib url.substr(0,8) \\\https://\\\ ? require(\\\https\\\) : require(\\\http\\\);\\n\\tlib.get(url).on(\\\response\\\,function(response) {\\n\\t var type (response.headers\\\content-type\\\ || \\\\\\).split(\\\;\\\)0,\\n\\t \\tdata ;\\n\\t self.commander.write(\\\Reading \\\ + url + \\\: \\\);\\n\\t response.on(\\\data\\\,function(chunk) {\\n\\t data.push(chunk);\\n\\t self.commander.write(\\\.\\\);\\n\\t });\\n\\t response.on(\\\end\\\,function() {\\n\\t self.commander.write(\\\\\\\n\\\);\\n\\t if(response.statusCode 200) {\\n\\t\\t self.processBody(Buffer.concat(data),type,options,url);\\n\\t\\t callback(null);\\n\\t } else {\\n\\t \\tif(response.statusCode 302 || response.statusCode 303 || response.statusCode 307) {\\n\\t \\t\\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\\n\\t \\t} else {\\n\\t\\t \\treturn callback(\\\Error \\\ + response.statusCode + \\\ retrieving \\\ + url)\\n\\t \\t}\\n\\t }\\n\\t \\t});\\n\\t \\tresponse.on(\\\error\\\,function(e) {\\n\\t\\t\\tconsole.log(\\\Error on GET request: \\\ + e);\\n\\t\\t\\tcallback(e);\\n\\t \\t});\\n\\t});\\n\\treturn null;\\n};\\n\\nCommand.prototype.processBody function(body,type,options,url) {\\n\\tvar self this;\\n\\t// Collect the tiddlers in a wiki\\n\\tvar incomingWiki new $tw.Wiki();\\n\\tif(options.raw) {\\n\\t\\tvar typeInfo type ? $tw.config.contentTypeInfotype : null,\\n\\t\\t\\tencoding typeInfo ? typeInfo.encoding : \\\utf8\\\;\\n\\t\\tincomingWiki.addTiddler(new $tw.Tiddler({\\n\\t\\t\\ttitle: url,\\n\\t\\t\\ttype: type,\\n\\t\\t\\ttext: body.toString(encoding)\\n\\t\\t}));\\n\\t} else {\\n\\t\\t// Deserialise the file to extract the tiddlers\\n\\t\\tvar tiddlers this.commander.wiki.deserializeTiddlers(type || \\\text/html\\\,body.toString(\\\utf8\\\),{});\\n\\t\\t$tw.utils.each(tiddlers,function(tiddler) {\\n\\t\\t\\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\\n\\t\\t});\\n\\t}\\n\\t// Filter the tiddlers to select the ones we want\\n\\tvar filteredTitles incomingWiki.filterTiddlers(options.importFilter || \\\alltiddlers\\\);\\n\\t// Import the selected tiddlers\\n\\tvar count 0;\\n\\tincomingWiki.each(function(tiddler,title) {\\n\\t\\tif(filteredTitles.indexOf(title) ! -1) {\\n\\t\\t\\tvar newTiddler;\\n\\t\\t\\tif(options.transformFilter) {\\n\\t\\t\\t\\tvar transformedTitle (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator(title)) || \\\\\\)0;\\n\\t\\t\\t\\tif(transformedTitle) {\\n\\t\\t\\t\\t\\tself.commander.log(\\\Importing \\\ + title + \\\ as \\\ + transformedTitle)\\n\\t\\t\\t\\t\\tnewTiddler new $tw.Tiddler(tiddler,{title: transformedTitle});\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.commander.log(\\\Importing \\\ + title)\\n\\t\\t\\t\\tnewTiddler tiddler;\\n\\t\\t\\t}\\n\\t\\t\\tself.commander.wiki.importTiddler(newTiddler);\\n\\t\\t\\tcount++;\\n\\t\\t}\\n\\t});\\n\\tself.commander.log(\\\Imported \\\ + count + \\\ tiddlers\\\)\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/help.js\:{\title\:\$:/core/modules/commands/help.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/help.js\\ntype: application/javascript\\nmodule-type: command\\n\\nHelp command\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\help\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar subhelp this.params0 || \\\default\\\,\\n\\t\\thelpBase \\\$:/language/Help/\\\,\\n\\t\\ttext;\\n\\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\\n\\t\\tsubhelp \\\notfound\\\;\\n\\t}\\n\\t// Wikify the help as formatted text (ie block elements generate newlines)\\n\\ttext this.commander.wiki.renderTiddler(\\\text/plain-formatted\\\,helpBase + subhelp);\\n\\t// Remove any leading linebreaks\\n\\ttext text.replace(/^(\\\\r?\\\\n)*/g,\\\\\\);\\n\\tthis.commander.streams.output.write(text);\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/import.js\:{\title\:\$:/core/modules/commands/import.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/import.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to import tiddlers from a file\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\import\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\);\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing parameters\\\;\\n\\t}\\n\\tvar filename self.params0,\\n\\t\\tdeserializer self.params1,\\n\\t\\ttitle self.params2 || filename,\\n\\t\\tencoding self.params3 || \\\utf8\\\,\\n\\t\\ttext fs.readFileSync(filename,encoding),\\n\\t\\ttiddlers this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\\n\\t$tw.utils.each(tiddlers,function(tiddler) {\\n\\t\\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\\n\\t});\\n\\tthis.commander.log(tiddlers.length + \\\ tiddler(s) imported\\\);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/init.js\:{\title\:\$:/core/modules/commands/init.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/init.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to initialise an empty wiki folder\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\init\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar fs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\);\\n\\t// Check that we dont already have a valid wiki folder\\n\\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\\n\\t\\treturn \\\Wiki folder is not empty\\\;\\n\\t}\\n\\t// Loop through each of the specified editions\\n\\tvar editions this.params.length > 0 ? this.params : \\\empty\\\;\\n\\tfor(var editionIndex0; editionIndex\u003Ceditions.length; editionIndex++) {\\n\\t\\tvar editionName editionseditionIndex;\\n\\t\\t// Check the edition exists\\n\\t\\tvar editionPath $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\\n\\t\\tif(!$tw.utils.isDirectory(editionPath)) {\\n\\t\\t\\treturn \\\Edition \\\ + editionName + \\\ not found\\\;\\n\\t\\t}\\n\\t\\t// Copy the edition content\\n\\t\\tvar err $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\\n\\t\\tif(!err) {\\n\\t\\t\\tthis.commander.streams.output.write(\\\Copied edition \\\ + editionName + \\\ to \\\ + $tw.boot.wikiPath + \\\\\\\n\\\);\\n\\t\\t} else {\\n\\t\\t\\treturn err;\\n\\t\\t}\\n\\t}\\n\\t// Tweak the tiddlywiki.info to remove any included wikis\\n\\tvar packagePath $tw.boot.wikiPath + \\\/tiddlywiki.info\\\,\\n\\t\\tpackageJson $tw.utils.parseJSONSafe(fs.readFileSync(packagePath));\\n\\tdelete packageJson.includeWikis;\\n\\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/listen.js\:{\title\:\$:/core/modules/commands/listen.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/listen.js\\ntype: application/javascript\\nmodule-type: command\\n\\nListen for HTTP requests and serve tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Server require(\\\$:/core/modules/server/server.js\\\).Server;\\n\\nexports.info {\\n\\tname: \\\listen\\\,\\n\\tsynchronous: true,\\n\\tnamedParameterMode: true,\\n\\tmandatoryParameters: \\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tvar self this;\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar self this;\\n\\tif(!$tw.boot.wikiTiddlersPath) {\\n\\t\\t$tw.utils.warning(\\\Warning: Wiki folder \\\ + $tw.boot.wikiPath + \\\ does not exist or is missing a tiddlywiki.info file\\\);\\n\\t}\\n\\t// Set up server\\n\\tthis.server new Server({\\n\\t\\twiki: this.commander.wiki,\\n\\t\\tvariables: self.params\\n\\t});\\n\\tvar nodeServer this.server.listen();\\n\\t$tw.hooks.invokeHook(\\\th-server-command-post-start\\\,this.server,nodeServer,\\\tiddlywiki\\\);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/load.js\:{\title\:\$:/core/modules/commands/load.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/load.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to load tiddlers from a file or directory\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\load\\\,\\n\\tsynchronous: false\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\);\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar tiddlers $tw.loadTiddlersFromPath(self.params0),\\n\\t\\tcount 0;\\n\\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\\n\\t\\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\\n\\t\\t\\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\\n\\t\\t\\tcount++;\\n\\t\\t});\\n\\t});\\n\\tif(!count && self.params1 ! \\\noerror\\\) {\\n\\t\\tself.callback(\\\No tiddlers found in file \\\\\\\\\\ + self.params0 + \\\\\\\\\\\\\);\\n\\t} else {\\n\\t\\tself.callback(null);\\n\\t}\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/makelibrary.js\:{\title\:\$:/core/modules/commands/makelibrary.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/makelibrary.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to pack all of the plugins in the library into a plugin tiddler of type \\\library\\\\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\makelibrary\\\,\\n\\tsynchronous: true\\n};\\n\\nvar UPGRADE_LIBRARY_TITLE \\\$:/UpgradeLibrary\\\;\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar wiki this.commander.wiki,\\n\\t\\tupgradeLibraryTitle this.params0 || UPGRADE_LIBRARY_TITLE,\\n\\t\\ttiddlers $tw.utils.getAllPlugins();\\n\\t// Save the upgrade library tiddler\\n\\tvar pluginFields {\\n\\t\\ttitle: upgradeLibraryTitle,\\n\\t\\ttype: \\\application/json\\\,\\n\\t\\t\\\plugin-type\\\: \\\library\\\,\\n\\t\\t\\\text\\\: JSON.stringify({tiddlers: tiddlers})\\n\\t};\\n\\twiki.addTiddler(new $tw.Tiddler(pluginFields));\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/output.js\:{\title\:\$:/core/modules/commands/output.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/output.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to set the default output location (defaults to current working directory)\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\output\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tvar fs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\);\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing output path\\\;\\n\\t}\\n\\tthis.commander.outputPath path.resolve(process.cwd(),this.params0);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/password.js\:{\title\:\$:/core/modules/commands/password.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/password.js\\ntype: application/javascript\\nmodule-type: command\\n\\nSave password for crypto operations\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\password\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing password\\\;\\n\\t}\\n\\t$tw.crypto.setPassword(this.params0);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/render.js\:{\title\:\$:/core/modules/commands/render.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/render.js\\ntype: application/javascript\\nmodule-type: command\\n\\nRender individual tiddlers and save the results to the specified files\\n\\n\\\\*/\\n\\n\\t\\\use strict\\\;\\n\\t\\n\\tvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\t\\n\\texports.info {\\n\\t\\tname: \\\render\\\,\\n\\t\\tsynchronous: true\\n\\t};\\n\\t\\n\\tvar Command function(params,commander,callback) {\\n\\t\\tthis.params params;\\n\\t\\tthis.commander commander;\\n\\t\\tthis.callback callback;\\n\\t};\\n\\t\\n\\tCommand.prototype.execute function() {\\n\\t\\tif(this.params.length \u003C 1) {\\n\\t\\t\\treturn \\\Missing tiddler filter\\\;\\n\\t\\t}\\n\\t\\tvar self this,\\n\\t\\t\\tfs require(\\\fs\\\),\\n\\t\\t\\tpath require(\\\path\\\),\\n\\t\\t\\twiki this.commander.wiki,\\n\\t\\t\\ttiddlerFilter this.params0,\\n\\t\\t\\tfilenameFilter this.params1 || \\\istiddleraddsuffix.html\\\,\\n\\t\\t\\ttype this.params2 || \\\text/html\\\,\\n\\t\\t\\ttemplate this.params3,\\n\\t\\t\\tvariableList this.params.slice(4),\\n\\t\\t\\ttiddlers wiki.filterTiddlers(tiddlerFilter),\\n\\t\\t\\tvariables Object.create(null);\\n\\t\\t\\twhile(variableList.length > 2) {\\n\\t\\t\\t\\tvariablesvariableList0 variableList1;\\n\\t\\t\\t\\tvariableList variableList.slice(2);\\n\\t\\t\\t}\\n\\t\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\t\\tvar filenameResults wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator(title));\\n\\t\\t\\tif(filenameResults.length > 0) {\\n\\t\\t\\t\\tvar filepath path.resolve(self.commander.outputPath,filenameResults0);\\n\\t\\t\\t\\tif(self.commander.verbose) {\\n\\t\\t\\t\\t\\tconsole.log(\\\Rendering \\\\\\\\\\ + title + \\\\\\\\\\ to \\\\\\\\\\ + filepath + \\\\\\\\\\\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar parser wiki.parseTiddler(template || title),\\n\\t\\t\\t\\t\\twidgetNode wiki.makeWidget(parser,{variables: $tw.utils.extend({},variables,{currentTiddler: title,storyTiddler: title})}),\\n\\t\\t\\t\\t\\tcontainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\t\\t\\twidgetNode.render(container,null);\\n\\t\\t\\t\\tvar text type \\\text/html\\\ ? container.innerHTML : container.textContent;\\n\\t\\t\\t\\t$tw.utils.createFileDirectories(filepath);\\n\\t\\t\\t\\tfs.writeFileSync(filepath,text,\\\utf8\\\);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tconsole.log(\\\Not rendering \\\\\\\\\\ + title + \\\\\\\\\\ because the filename filter returned an empty result\\\);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn null;\\n\\t};\\n\\t\\n\\texports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/rendertiddler.js\:{\title\:\$:/core/modules/commands/rendertiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/rendertiddler.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to render a tiddler and save it to a file\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\rendertiddler\\\,\\n\\tsynchronous: false\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\ttitle this.params0,\\n\\t\\tfilename path.resolve(this.commander.outputPath,this.params1),\\n\\t\\ttype this.params2 || \\\text/html\\\,\\n\\t\\ttemplate this.params3,\\n\\t\\tname this.params4,\\n\\t\\tvalue this.params5,\\n\\t\\tvariables {};\\n\\t$tw.utils.createFileDirectories(filename);\\n\\tif(template) {\\n\\t\\tvariables.currentTiddler title;\\n\\t\\tvariables.storyTiddler title;\\n\\t\\ttitle template;\\n\\t}\\n\\tif(name && value) {\\n\\t\\tvariablesname value;\\n\\t}\\n\\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\\\utf8\\\,function(err) {\\n\\t\\tself.callback(err);\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/rendertiddlers.js\:{\title\:\$:/core/modules/commands/rendertiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/rendertiddlers.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to render several tiddlers to a folder of files\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nexports.info {\\n\\tname: \\\rendertiddlers\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\twiki this.commander.wiki,\\n\\t\\tfilter this.params0,\\n\\t\\ttemplate this.params1,\\n\\t\\toutputPath this.commander.outputPath,\\n\\t\\tpathname path.resolve(outputPath,this.params2),\\n\\t\\ttype this.params3 || \\\text/html\\\,\\n\\t\\textension this.params4 || \\\.html\\\,\\n\\t\\tdeleteDirectory (this.params5 || \\\\\\).toLowerCase() ! \\\noclean\\\,\\n\\t\\ttiddlers wiki.filterTiddlers(filter);\\n\\tif(deleteDirectory) {\\n\\t\\t$tw.utils.deleteDirectory(pathname);\\n\\t}\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar parser wiki.parseTiddler(template),\\n\\t\\t\\twidgetNode wiki.makeWidget(parser,{variables: {currentTiddler: title, storyTiddler: title}}),\\n\\t\\t\\tcontainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\twidgetNode.render(container,null);\\n\\t\\tvar text type \\\text/html\\\ ? container.innerHTML : container.textContent,\\n\\t\\t\\texportPath null;\\n\\t\\tif($tw.utils.hop($tw.macros,\\\tv-get-export-path\\\)) {\\n\\t\\t\\tvar macroPath $tw.macros\\\tv-get-export-path\\\.run.apply(self,title);\\n\\t\\t\\tif(macroPath) {\\n\\t\\t\\t\\texportPath path.resolve(outputPath,macroPath + extension);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar finalPath exportPath || path.resolve(pathname,$tw.utils.encodeURIComponentExtended(title) + extension);\\n\\t\\t$tw.utils.createFileDirectories(finalPath);\\n\\t\\tfs.writeFileSync(finalPath,text,\\\utf8\\\);\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/save.js\:{\title\:\$:/core/modules/commands/save.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/save.js\\ntype: application/javascript\\nmodule-type: command\\n\\nSaves individual tiddlers in their raw text or binary format to the specified files\\n\\n\\\\*/\\n\\n\\t\\\use strict\\\;\\n\\t\\n\\texports.info {\\n\\t\\tname: \\\save\\\,\\n\\t\\tsynchronous: true\\n\\t};\\n\\t\\n\\tvar Command function(params,commander,callback) {\\n\\t\\tthis.params params;\\n\\t\\tthis.commander commander;\\n\\t\\tthis.callback callback;\\n\\t};\\n\\t\\n\\tCommand.prototype.execute function() {\\n\\t\\tif(this.params.length \u003C 1) {\\n\\t\\t\\treturn \\\Missing filename filter\\\;\\n\\t\\t}\\n\\t\\tvar self this,\\n\\t\\t\\tfs require(\\\fs\\\),\\n\\t\\t\\tpath require(\\\path\\\),\\n\\t\\t\\tresult null,\\n\\t\\t\\twiki this.commander.wiki,\\n\\t\\t\\ttiddlerFilter this.params0,\\n\\t\\t\\tfilenameFilter this.params1 || \\\istiddler\\\,\\n\\t\\t\\ttiddlers wiki.filterTiddlers(tiddlerFilter);\\n\\t\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\t\\tif(!result) {\\n\\t\\t\\t\\tvar tiddler self.commander.wiki.getTiddler(title);\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvar fileInfo $tw.utils.generateTiddlerFileInfo(tiddler,{\\n\\t\\t\\t\\t\\t\\tdirectory: path.resolve(self.commander.outputPath),\\n\\t\\t\\t\\t\\t\\tpathFilters: filenameFilter,\\n\\t\\t\\t\\t\\t\\twiki: wiki,\\n\\t\\t\\t\\t\\t\\tfileInfo: {\\n\\t\\t\\t\\t\\t\\t\\toverwrite: true\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\tif(self.commander.verbose) {\\n\\t\\t\\t\\t\\t\\tconsole.log(\\\Saving \\\\\\\\\\ + title + \\\\\\\\\\ to \\\\\\\\\\ + fileInfo.filepath + \\\\\\\\\\\\\);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t\\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\\n\\t\\t\\t\\t\\t} catch (err) {\\n\\t\\t\\t\\t\\t\\tresult \\\Error saving tiddler \\\\\\\\\\ + title + \\\\\\\\\\, to file: \\\\\\\\\\ + fileInfo.filepath + \\\\\\\\\\\\\;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresult \\\Tiddler \\\ + title + \\\ not found\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn result;\\n\\t};\\n\\t\\n\\texports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/savelibrarytiddlers.js\:{\title\:\$:/core/modules/commands/savelibrarytiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\\n\\n--savelibrarytiddlers \u003Ctiddler> \u003Ctiddler-filter> \u003Cpathname> \u003Cskinnylisting>\\n\\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\\n\\nThe tiddler filter specifies the plugins to be included.\\n\\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\\n\\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\savelibrarytiddlers\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\tcontainerTitle this.params0,\\n\\t\\tfilter this.params1,\\n\\t\\tbasepath this.params2,\\n\\t\\tskinnyListTitle this.params3;\\n\\t// Get the container tiddler as data\\n\\tvar containerData self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\\n\\tif(!containerData) {\\n\\t\\treturn \\\\\\ + containerTitle + \\\ is not a tiddler bundle\\\;\\n\\t}\\n\\t// Filter the list of plugins\\n\\tvar pluginList ;\\n\\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\\n\\t\\tpluginList.push(title);\\n\\t});\\n\\tvar filteredPluginList;\\n\\tif(filter) {\\n\\t\\tfilteredPluginList self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\\n\\t} else {\\n\\t\\tfilteredPluginList pluginList;\\n\\t}\\n\\t// Iterate through the plugins\\n\\tvar skinnyList ;\\n\\t$tw.utils.each(filteredPluginList,function(title) {\\n\\t\\tvar tiddler containerData.tiddlerstitle;\\n\\t\\t// Save each JSON file and collect the skinny data\\n\\t\\tvar pathname path.resolve(self.commander.outputPath,basepath + $tw.utils.encodeURIComponentExtended(title) + \\\.json\\\);\\n\\t\\t$tw.utils.createFileDirectories(pathname);\\n\\t\\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\\\utf8\\\);\\n\\t\\t// Collect the skinny list data\\n\\t\\tvar pluginTiddlers $tw.utils.parseJSONSafe(tiddler.text),\\n\\t\\t\\treadmeContent (pluginTiddlers.tiddlerstitle + \\\/readme\\\ || {}).text,\\n\\t\\t\\tdoesRequireReload !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\\n\\t\\t\\ticonTiddler pluginTiddlers.tiddlerstitle + \\\/icon\\\ || {},\\n\\t\\t\\ticonType iconTiddler.type,\\n\\t\\t\\ticonText iconTiddler.text,\\n\\t\\t\\ticonContent;\\n\\t\\tif(iconType && iconText) {\\n\\t\\t\\ticonContent $tw.utils.makeDataUri(iconText,iconType);\\n\\t\\t}\\n\\t\\tskinnyList.push($tw.utils.extend({},tiddler,{\\n\\t\\t\\ttext: undefined,\\n\\t\\t\\treadme: readmeContent,\\n\\t\\t\\t\\\requires-reload\\\: doesRequireReload ? \\\yes\\\ : \\\no\\\,\\n\\t\\t\\ticon: iconContent\\n\\t\\t}));\\n\\t});\\n\\t// Save the catalogue tiddler\\n\\tif(skinnyListTitle) {\\n\\t\\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\\n\\t}\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/savetiddler.js\:{\title\:\$:/core/modules/commands/savetiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/savetiddler.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to save the content of a tiddler to a file\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\savetiddler\\\,\\n\\tsynchronous: false\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 2) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\ttitle this.params0,\\n\\t\\tfilename path.resolve(this.commander.outputPath,this.params1),\\n\\t\\ttiddler this.commander.wiki.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar type tiddler.fields.type || \\\text/vnd.tiddlywiki\\\,\\n\\t\\t\\tcontentTypeInfo $tw.config.contentTypeInfotype || {encoding: \\\utf8\\\};\\n\\t\\t$tw.utils.createFileDirectories(filename);\\n\\t\\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\\n\\t\\t\\tself.callback(err);\\n\\t\\t});\\n\\t} else {\\n\\t\\treturn \\\Missing tiddler: \\\ + title;\\n\\t}\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/savetiddlers.js\:{\title\:\$:/core/modules/commands/savetiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/savetiddlers.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to save several tiddlers to a folder of files\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nexports.info {\\n\\tname: \\\savetiddlers\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing filename\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\twiki this.commander.wiki,\\n\\t\\tfilter this.params0,\\n\\t\\tpathname path.resolve(this.commander.outputPath,this.params1),\\n\\t\\tdeleteDirectory (this.params2 || \\\\\\).toLowerCase() ! \\\noclean\\\,\\n\\t\\ttiddlers wiki.filterTiddlers(filter);\\n\\tif(deleteDirectory) {\\n\\t\\t$tw.utils.deleteDirectory(pathname);\\n\\t}\\n\\t$tw.utils.createDirectory(pathname);\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar tiddler self.commander.wiki.getTiddler(title),\\n\\t\\t\\ttype tiddler.fields.type || \\\text/vnd.tiddlywiki\\\,\\n\\t\\t\\tcontentTypeInfo $tw.config.contentTypeInfotype || {encoding: \\\utf8\\\},\\n\\t\\t\\tfilename path.resolve(pathname,$tw.utils.encodeURIComponentExtended(title));\\n\\t\\tfs.writeFileSync(filename,tiddler.fields.text || \\\\\\,contentTypeInfo.encoding);\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/savewikifolder.js\:{\title\:\$:/core/modules/commands/savewikifolder.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/savewikifolder.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to save the current wiki as a wiki folder\\n\\n--savewikifolder \u003Cwikifolderpath> \u003Cname>\u003Cvalue> *\\n\\nThe following options are supported:\\n\\n* filter: a filter expression defining the tiddlers to be included in the output\\n* explodePlugins: set to \\\no\\\ to suppress exploding plugins into their constituent shadow tiddlers (defaults to \\\yes\\\)\\n\\nSupports backward compatibility with --savewikifolder \u003Cwikifolderpath> \u003Cfilter> \u003Cname>\u003Cvalue> *\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\savewikifolder\\\,\\n\\tsynchronous: true\\n};\\n\\nvar fs,path;\\nif($tw.node) {\\n\\tfs require(\\\fs\\\);\\n\\tpath require(\\\path\\\);\\n}\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing wiki folder path\\\;\\n\\t}\\n\\tvar regFilter /^a-zA-Z0-9\\\\.\\\\-_+/g, // dynamic parameters\\n\\t\\tnamedParames,\\n\\t\\ttiddlerFilter,\\n\\t\\toptions {};\\n\\tif (regFilter.test(this.params1)) { \\n\\t\\tnamedParames this.commander.extractNamedParameters(this.params.slice(1));\\n\\t\\ttiddlerFilter namedParames.filter || \\\alltiddlers\\\;\\n\\t} else {\\n\\t\\tnamedParames this.commander.extractNamedParameters(this.params.slice(2));\\n\\t\\ttiddlerFilter this.params1;\\n\\t}\\n\\ttiddlerFilter tiddlerFilter || \\\alltiddlers\\\;\\n\\toptions.explodePlugins namedParames.explodePlugins || \\\yes\\\;\\n\\tvar wikifoldermaker new WikiFolderMaker(this.params0,tiddlerFilter,this.commander,options);\\n\\treturn wikifoldermaker.save();\\n};\\n\\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander,options) {\\n\\tthis.wikiFolderPath wikiFolderPath;\\n\\tthis.wikiFilter wikiFilter;\\n\\tthis.commander commander;\\n\\tthis.explodePlugins options.explodePlugins;\\n\\tthis.wiki commander.wiki;\\n\\tthis.savedPaths ; // So that we can detect filename clashes\\n}\\n\\nWikiFolderMaker.prototype.log function(str) {\\n\\tif(this.commander.verbose) {\\n\\t\\tconsole.log(str);\\n\\t}\\n};\\n\\nWikiFolderMaker.prototype.tiddlersToIgnore \\n\\t\\\$:/boot/boot.css\\\,\\n\\t\\\$:/boot/boot.js\\\,\\n\\t\\\$:/boot/bootprefix.js\\\,\\n\\t\\\$:/core\\\,\\n\\t\\\$:/library/sjcl.js\\\,\\n\\t\\\$:/temp/info-plugin\\\\\n;\\n\\n/*\\nReturns null if successful, or an error string if there was an error\\n*/\\nWikiFolderMaker.prototype.save function() {\\n\\tvar self this;\\n\\t// Check that the output directory doesnt exist\\n\\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\\n\\t\\treturn \\\The unpackwiki command requires that the output wiki folder be empty\\\;\\n\\t}\\n\\t// Get the tiddlers from the source wiki\\n\\tvar tiddlerTitles this.wiki.filterTiddlers(this.wikiFilter);\\n\\t// Initialise a new tiddlwiki.info file\\n\\tvar newWikiInfo {};\\n\\t// Process each incoming tiddler in turn\\n\\t$tw.utils.each(tiddlerTitles,function(title) {\\n\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tif(self.tiddlersToIgnore.indexOf(title) ! -1) {\\n\\t\\t\\t\\t// Ignore the core plugin and the ephemeral info plugin\\n\\t\\t\\t\\tself.log(\\\Ignoring tiddler: \\\ + title);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar type tiddler.fields.type,\\n\\t\\t\\t\\t\\tpluginType tiddler.fields\\\plugin-type\\\;\\n\\t\\t\\t\\tif(type \\\application/json\\\ && pluginType) {\\n\\t\\t\\t\\t\\t// Plugin tiddler\\n\\t\\t\\t\\t\\tvar libraryDetails self.findPluginInLibrary(title);\\n\\t\\t\\t\\t\\tif(libraryDetails) {\\n\\t\\t\\t\\t\\t\\t// A plugin from the core library\\n\\t\\t\\t\\t\\t\\tself.log(\\\Adding built-in plugin: \\\ + libraryDetails.name);\\n\\t\\t\\t\\t\\t\\tnewWikiInfolibraryDetails.type newWikiInfolibraryDetails.type || ;\\n\\t\\t\\t\\t\\t\\t$tw.utils.pushTop(newWikiInfolibraryDetails.type,libraryDetails.name);\\n\\t\\t\\t\\t\\t} else if(self.explodePlugins ! \\\no\\\) {\\n\\t\\t\\t\\t\\t\\t// A custom plugin\\n\\t\\t\\t\\t\\t\\tself.log(\\\Processing custom plugin: \\\ + title);\\n\\t\\t\\t\\t\\t\\tself.saveCustomPlugin(tiddler);\\n\\t\\t\\t\\t\\t} else if(self.explodePlugins \\\no\\\) {\\n\\t\\t\\t\\t\\t\\tself.log(\\\Processing custom plugin to tiddlders folder: \\\ + title);\\n\\t\\t\\t\\t\\t\\tself.saveTiddler(\\\tiddlers\\\, tiddler);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Ordinary tiddler\\n\\t\\t\\t\\t\\tself.saveTiddler(\\\tiddlers\\\,tiddler);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\t// Save the tiddlywiki.info file\\n\\tthis.saveJSONFile(\\\tiddlywiki.info\\\,newWikiInfo);\\n\\tself.log(\\\Writing tiddlywiki.info: \\\ + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\\n\\treturn null;\\n};\\n\\n/*\\nTest whether the specified tiddler is a plugin in the plugin library\\n*/\\nWikiFolderMaker.prototype.findPluginInLibrary function(title) {\\n\\tvar parts title.split(\\\/\\\),\\n\\t\\tpluginPath, type, name;\\n\\tif(parts0 \\\$:\\\) {\\n\\t\\tif(parts1 \\\languages\\\ && parts.length 3) {\\n\\t\\t\\tpluginPath \\\languages\\\ + path.sep + parts2;\\n\\t\\t\\ttype parts1;\\n\\t\\t\\tname parts2;\\n\\t\\t} else if(parts1 \\\plugins\\\ || parts1 \\\themes\\\ && parts.length 4) {\\n\\t\\t\\tpluginPath parts1 + path.sep + parts2 + path.sep + parts3;\\n\\t\\t\\ttype parts1;\\n\\t\\t\\tname parts2 + \\\/\\\ + parts3;\\n\\t\\t}\\n\\t}\\n\\tif(pluginPath && type && name) {\\n\\t\\tpluginPath path.resolve($tw.boot.bootPath,\\\..\\\,pluginPath);\\n\\t\\tif(fs.existsSync(pluginPath)) {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tpluginPath: pluginPath,\\n\\t\\t\\t\\ttype: type,\\n\\t\\t\\t\\tname: name\\n\\t\\t\\t};\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\nWikiFolderMaker.prototype.saveCustomPlugin function(pluginTiddler) {\\n\\tvar self this,\\n\\t\\tpluginTitle pluginTiddler.fields.title,\\n\\t\\ttitleParts pluginTitle.split(\\\/\\\),\\n\\t\\tdirectory $tw.utils.generateTiddlerFilepath(titlePartstitleParts.length - 1,{\\n\\t\\t\\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields\\\plugin-type\\\ + \\\s\\\)\\n\\t\\t}),\\n\\t\\tpluginInfo pluginTiddler.getFieldStrings({exclude: \\\text\\\,\\\type\\\});\\n\\tthis.saveJSONFile(directory + path.sep + \\\plugin.info\\\,pluginInfo);\\n\\tself.log(\\\Writing \\\ + directory + path.sep + \\\plugin.info: \\\ + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\\n\\tvar pluginTiddlers $tw.utils.parseJSONSafe(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\\n\\t$tw.utils.each(pluginTiddlers,function(tiddler,title) {\\n\\t\\tif(!tiddler.title) {\\n\\t\\t\\ttiddler.title title;\\n\\t\\t }\\n\\t\\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\\n\\t});\\n};\\n\\nWikiFolderMaker.prototype.saveTiddler function(directory,tiddler) {\\n\\tvar title tiddler.fields.title, fileInfo, pathFilters, extFilters;\\n\\tif(this.wiki.tiddlerExists(\\\$:/config/FileSystemPaths\\\)) {\\n\\t\\tpathFilters this.wiki.getTiddlerText(\\\$:/config/FileSystemPaths\\\,\\\\\\).split(\\\\\\\n\\\);\\n\\t}\\n\\tif(this.wiki.tiddlerExists(\\\$:/config/FileSystemExtensions\\\)) {\\n\\t\\textFilters this.wiki.getTiddlerText(\\\$:/config/FileSystemExtensions\\\,\\\\\\).split(\\\\\\\n\\\);\\n\\t}\\n\\tvar fileInfo $tw.utils.generateTiddlerFileInfo(tiddler,{\\n\\t\\tdirectory: path.resolve(this.wikiFolderPath,directory),\\n\\t\\tpathFilters: pathFilters,\\n\\t\\textFilters: extFilters,\\n\\t\\twiki: this.wiki,\\n\\t\\tfileInfo: {}\\n\\t});\\n\\ttry {\\n\\t\\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\\n\\t} catch (err) {\\n\\t\\tconsole.log(\\\SaveWikiFolder: Error saving file \\\ + fileInfo.filepath + \\\, tiddler: \\\ + tiddler.fields.title);\\n\\t}\\n};\\n\\nWikiFolderMaker.prototype.saveJSONFile function(filename,json) {\\n\\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\\n};\\n\\nWikiFolderMaker.prototype.saveTextFile function(filename,data) {\\n\\tthis.saveFile(filename,\\\utf8\\\,data);\\n};\\n\\nWikiFolderMaker.prototype.saveFile function(filename,encoding,data) {\\n\\tvar filepath path.resolve(this.wikiFolderPath,filename);\\n\\t$tw.utils.createFileDirectories(filepath);\\n\\tfs.writeFileSync(filepath,data,encoding);\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/server.js\:{\title\:\$:/core/modules/commands/server.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/server.js\\ntype: application/javascript\\nmodule-type: command\\n\\nDeprecated legacy command for serving tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Server require(\\\$:/core/modules/server/server.js\\\).Server;\\n\\nexports.info {\\n\\tname: \\\server\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tvar self this;\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(!$tw.boot.wikiTiddlersPath) {\\n\\t\\t$tw.utils.warning(\\\Warning: Wiki folder \\\ + $tw.boot.wikiPath + \\\ does not exist or is missing a tiddlywiki.info file\\\);\\n\\t}\\n\\t// Set up server\\n\\tthis.server new Server({\\n\\t\\twiki: this.commander.wiki,\\n\\t\\tvariables: {\\n\\t\\t\\tport: this.params0,\\n\\t\\t\\thost: this.params6,\\n\\t\\t\\t\\\root-tiddler\\\: this.params1,\\n\\t\\t\\t\\\root-render-type\\\: this.params2,\\n\\t\\t\\t\\\root-serve-type\\\: this.params3,\\n\\t\\t\\tusername: this.params4,\\n\\t\\t\\tpassword: this.params5,\\n\\t\\t\\t\\\path-prefix\\\: this.params7,\\n\\t\\t\\t\\\debug-level\\\: this.params8\\n\\t\\t}\\n\\t});\\n\\tvar nodeServer this.server.listen();\\n\\t$tw.hooks.invokeHook(\\\th-server-command-post-start\\\,this.server,nodeServer,\\\tiddlywiki\\\);\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/setfield.js\:{\title\:\$:/core/modules/commands/setfield.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/setfield.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nexports.info {\\n\\tname: \\\setfield\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 4) {\\n\\t\\treturn \\\Missing parameters\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\twiki this.commander.wiki,\\n\\t\\tfilter this.params0,\\n\\t\\tfieldname this.params1 || \\\text\\\,\\n\\t\\ttemplatetitle this.params2,\\n\\t\\trendertype this.params3 || \\\text/plain\\\,\\n\\t\\ttiddlers wiki.filterTiddlers(filter);\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar parser wiki.parseTiddler(templatetitle),\\n\\t\\t\\tnewFields {},\\n\\t\\t\\ttiddler wiki.getTiddler(title);\\n\\t\\tif(parser) {\\n\\t\\t\\tvar widgetNode wiki.makeWidget(parser,{variables: {currentTiddler: title}});\\n\\t\\t\\tvar container $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\t\\twidgetNode.render(container,null);\\n\\t\\t\\tnewFieldsfieldname rendertype \\\text/html\\\ ? container.innerHTML : container.textContent;\\n\\t\\t} else {\\n\\t\\t\\tnewFieldsfieldname undefined;\\n\\t\\t}\\n\\t\\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/unpackplugin.js\:{\title\:\$:/core/modules/commands/unpackplugin.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/unpackplugin.js\\ntype: application/javascript\\nmodule-type: command\\n\\nCommand to extract the shadow tiddlers from within a plugin\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\unpackplugin\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander,callback) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n\\tthis.callback callback;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tif(this.params.length \u003C 1) {\\n\\t\\treturn \\\Missing plugin name\\\;\\n\\t}\\n\\tvar self this,\\n\\t\\ttitle this.params0,\\n\\t\\tpluginData this.commander.wiki.getTiddlerDataCached(title);\\n\\tif(!pluginData) {\\n\\t\\treturn \\\Plugin \\\ + title + \\\ not found\\\;\\n\\t}\\n\\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\\n\\t\\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\\n\\t});\\n\\treturn null;\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/verbose.js\:{\title\:\$:/core/modules/commands/verbose.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/verbose.js\\ntype: application/javascript\\nmodule-type: command\\n\\nVerbose command\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\verbose\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tthis.commander.verbose true;\\n\\t// Output the boot message log\\n\\tthis.commander.streams.output.write(\\\Boot log:\\\\n \\\ + $tw.boot.logMessages.join(\\\\\\\n \\\) + \\\\\\\n\\\);\\n\\treturn null; // No error\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/commands/version.js\:{\title\:\$:/core/modules/commands/version.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/commands/version.js\\ntype: application/javascript\\nmodule-type: command\\n\\nVersion command\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.info {\\n\\tname: \\\version\\\,\\n\\tsynchronous: true\\n};\\n\\nvar Command function(params,commander) {\\n\\tthis.params params;\\n\\tthis.commander commander;\\n};\\n\\nCommand.prototype.execute function() {\\n\\tthis.commander.streams.output.write($tw.version + \\\\\\\n\\\);\\n\\treturn null; // No error\\n};\\n\\nexports.Command Command;\\n\,\type\:\application/javascript\,\module-type\:\command\},\$:/core/modules/config.js\:{\title\:\$:/core/modules/config.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/config.js\\ntype: application/javascript\\nmodule-type: config\\n\\nCore configuration constants\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.preferences {};\\n\\nexports.preferences.notificationDuration 3 * 1000;\\nexports.preferences.jsonSpaces 4;\\n\\nexports.textPrimitives {\\n\\tupperLetter: \\\A-Z\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00de\\\\u0150\\\\u0170\\\,\\n\\tlowerLetter: \\\a-z\\\\u00df-\\\\u00f6\\\\u00f8-\\\\u00ff\\\\u0151\\\\u0171\\\,\\n\\tanyLetter: \\\A-Za-z0-9\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00de\\\\u00df-\\\\u00f6\\\\u00f8-\\\\u00ff\\\\u0150\\\\u0170\\\\u0151\\\\u0171\\\,\\n\\tblockPrefixLetters:\\t\\\A-Za-z0-9-_\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00de\\\\u00df-\\\\u00f6\\\\u00f8-\\\\u00ff\\\\u0150\\\\u0170\\\\u0151\\\\u0171\\\\\n};\\n\\nexports.textPrimitives.unWikiLink \\\~\\\;\\nexports.textPrimitives.wikiLink exports.textPrimitives.upperLetter + \\\+\\\ +\\n\\texports.textPrimitives.lowerLetter + \\\+\\\ +\\n\\texports.textPrimitives.upperLetter +\\n\\texports.textPrimitives.anyLetter + \\\*\\\;\\n\\nexports.htmlEntities {quot:34, dollar:36, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, nobreak:8288, NoBreak:8288, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\\n\\nexports.htmlVoidElements \\\area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\\\.split(\\\,\\\);\\n\\nexports.htmlBlockElements \\\address,article,aside,audio,blockquote,canvas,dd,details,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,nav,ol,p,pre,section,summary,table,tfoot,ul,video\\\.split(\\\,\\\);\\n\\nexports.htmlUnsafeElements \\\script\\\.split(\\\,\\\);\\n\,\type\:\application/javascript\,\module-type\:\config\},\$:/core/modules/deserializers.js\:{\title\:\$:/core/modules/deserializers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/deserializers.js\\ntype: application/javascript\\nmodule-type: tiddlerdeserializer\\n\\nFunctions to deserialise tiddlers from a block of text\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\application/x-tiddler-html-div\\\ function(text,fields) {\\n\\treturn deserializeTiddlerDiv(text,fields);\\n};\\n\\nexports\\\application/json\\\ function(text,fields) {\\n\\tvar results ,\\n\\t\\tincoming $tw.utils.parseJSONSafe(text,function(err) {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ttitle: \\\JSON error: \\\ + err,\\n\\t\\t\\t\\ttext: \\\\\\\\n\\t\\t\\t};\\n\\t\\t});\\n\\tif(!$tw.utils.isArray(incoming)) {\\n\\t\\tincoming incoming;\\n\\t}\\n\\tfor(var t0; t\u003Cincoming.length; t++) {\\n\\t\\tvar incomingFields incomingt,\\n\\t\\t\\tfields {};\\n\\t\\tfor(var f in incomingFields) {\\n\\t\\t\\tif(typeof incomingFieldsf \\\string\\\) {\\n\\t\\t\\t\\tfieldsf incomingFieldsf;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tresults.push(fields);\\n\\t}\\n\\treturn results;\\n};\\n\\n/*\\nParse an HTML file into tiddlers. There are three possibilities:\\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\\n# An ordinary HTML file\\n*/\\nexports\\\text/html\\\ function(text,fields) {\\n\\tvar results ;\\n\\t// Check if weve got an old-style store area\\n\\tvar storeAreaMarkerRegExp /\u003Cdiv id\\\?storeArea\\\?( style\\\?display:none;\\\?)?>/gi,\\n\\t\\tstoreAreaMatch storeAreaMarkerRegExp.exec(text);\\n\\tif(storeAreaMatch) {\\n\\t\\t// If so, weve got tiddlers in classic TiddlyWiki format or unencrypted old-style TW5 format\\n\\t\\tresults.push.apply(results,deserializeStoreArea(text,storeAreaMarkerRegExp.lastIndex,!!storeAreaMatch1,fields));\\n\\t}\\n\\t// Check for new-style store areas\\n\\tvar newStoreAreaMarkerRegExp /\u003Cscript class\\\tiddlywiki-tiddler-store\\\ type\\\(^\\\*)\\\>/gi,\\n\\t\\tnewStoreAreaMatch newStoreAreaMarkerRegExp.exec(text),\\n\\t\\thaveHadNewStoreArea !!newStoreAreaMatch;\\n\\twhile(newStoreAreaMatch) {\\n\\t\\tresults.push.apply(results,deserializeNewStoreArea(text,newStoreAreaMarkerRegExp.lastIndex,newStoreAreaMatch1,fields));\\n\\t\\tnewStoreAreaMatch newStoreAreaMarkerRegExp.exec(text);\\n\\t}\\n\\t// Return if we had either an old-style or a new-style store area\\n\\tif(storeAreaMatch || haveHadNewStoreArea) {\\n\\t\\treturn results;\\n\\t}\\n\\t// Otherwise, check whether weve got an encrypted file\\n\\tvar encryptedStoreArea $tw.utils.extractEncryptedStoreArea(text);\\n\\tif(encryptedStoreArea) {\\n\\t\\t// If so, attempt to decrypt it using the current password\\n\\t\\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\\n\\t} else {\\n\\t\\t// Its not a TiddlyWiki so well return the entire HTML file as a tiddler\\n\\t\\treturn deserializeHtmlFile(text,fields);\\n\\t}\\n};\\n\\nfunction deserializeHtmlFile(text,fields) {\\n\\tvar result {};\\n\\t$tw.utils.each(fields,function(value,name) {\\n\\t\\tresultname value;\\n\\t});\\n\\tresult.text text;\\n\\tresult.type \\\text/html\\\;\\n\\treturn result;\\n}\\n\\nfunction deserializeNewStoreArea(text,storeAreaEnd,type,fields) {\\n\\tvar endOfScriptRegExp /\u003C\\\\/script>/gi;\\n\\tendOfScriptRegExp.lastIndex storeAreaEnd;\\n\\tvar match endOfScriptRegExp.exec(text);\\n\\tif(match) {\\n\\t\\tvar scriptContent text.substring(storeAreaEnd,match.index);\\n\\t\\treturn $tw.wiki.deserializeTiddlers(type,scriptContent);\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n}\\n\\nfunction deserializeStoreArea(text,storeAreaEnd,isTiddlyWiki5,fields) {\\n\\tvar results ,\\n\\t\\tendOfDivRegExp /(\u003C\\\\/div>\\\\s*)/gi,\\n\\t\\tstartPos storeAreaEnd,\\n\\t\\tdefaultType isTiddlyWiki5 ? undefined : \\\text/x-tiddlywiki\\\;\\n\\tendOfDivRegExp.lastIndex startPos;\\n\\tvar match endOfDivRegExp.exec(text);\\n\\twhile(match) {\\n\\t\\tvar endPos endOfDivRegExp.lastIndex,\\n\\t\\t\\ttiddlerFields deserializeTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\\n\\t\\tif(!tiddlerFields) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t$tw.utils.each(tiddlerFields,function(value,name) {\\n\\t\\t\\tif(typeof value \\\string\\\) {\\n\\t\\t\\t\\ttiddlerFieldsname $tw.utils.htmlDecode(value);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(tiddlerFields.text ! null) {\\n\\t\\t\\tresults.push(tiddlerFields);\\n\\t\\t}\\n\\t\\tstartPos endPos;\\n\\t\\tmatch endOfDivRegExp.exec(text);\\n\\t}\\n\\treturn results;\\n}\\n\\n/*\\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\\n\\n\u003Cdiv title\\\Title\\\ creator\\\JoeBloggs\\\ modifier\\\JoeBloggs\\\ created\\\201102111106\\\ modified\\\201102111310\\\ tags\\\myTag my long tag\\\>\\n\u003Cpre>The text of the tiddler (without the expected HTML encoding).\\n\u003C/pre>\\n\u003C/div>\\n\\nNote that the field attributes are HTML encoded, but that the body of the \u003CPRE> tag is not encoded.\\n\\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\\n*/\\nvar deserializeTiddlerDiv function(text /* ,fields */) {\\n\\t// Slot together the default results\\n\\tvar result {};\\n\\tif(arguments.length > 1) {\\n\\t\\tfor(var f1; f\u003Carguments.length; f++) {\\n\\t\\t\\tvar fields argumentsf;\\n\\t\\t\\tfor(var t in fields) {\\n\\t\\t\\t\\tresultt fieldst;\\t\\t\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Parse the DIV body\\n\\tvar startRegExp /^\\\\s*\u003Cdiv\\\\s+(^>*)>(\\\\s*\u003Cpre>)?/gi,\\n\\t\\tendRegExp,\\n\\t\\tmatch startRegExp.exec(text);\\n\\tif(match) {\\n\\t\\t// Old-style DIVs dont have the \u003Cpre> tag\\n\\t\\tif(match2) {\\n\\t\\t\\tendRegExp /\u003C\\\\/pre>\\\\s*\u003C\\\\/div>\\\\s*$/gi;\\n\\t\\t} else {\\n\\t\\t\\tendRegExp /\u003C\\\\/div>\\\\s*$/gi;\\n\\t\\t}\\n\\t\\tvar endMatch endRegExp.exec(text);\\n\\t\\tif(endMatch) {\\n\\t\\t\\t// Extract the text\\n\\t\\t\\tresult.text text.substring(match.index + match0.length,endMatch.index);\\n\\t\\t\\t// Process the attributes\\n\\t\\t\\tvar attrRegExp /\\\\s*(^\\\\s+)\\\\s*\\\\s*(?:\\\(^\\\*)\\\|(^*))/gi,\\n\\t\\t\\t\\tattrMatch;\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tattrMatch attrRegExp.exec(match1);\\n\\t\\t\\t\\tif(attrMatch) {\\n\\t\\t\\t\\t\\tvar name attrMatch1;\\n\\t\\t\\t\\t\\tvar value attrMatch2 ! undefined ? attrMatch2 : attrMatch3;\\n\\t\\t\\t\\t\\tresultname value;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while(attrMatch);\\n\\t\\t\\treturn result;\\n\\t\\t}\\n\\t}\\n\\treturn undefined;\\n};\\n\,\type\:\application/javascript\,\module-type\:\tiddlerdeserializer\},\$:/core/modules/editor/engines/framed.js\:{\title\:\$:/core/modules/editor/engines/framed.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/engines/framed.js\\ntype: application/javascript\\nmodule-type: library\\n\\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar HEIGHT_VALUE_TITLE \\\$:/config/TextEditor/EditorHeight/Height\\\;\\n\\nfunction FramedEngine(options) {\\n\\t// Save our options\\n\\toptions options || {};\\n\\tthis.widget options.widget;\\n\\tthis.value options.value;\\n\\tthis.parentNode options.parentNode;\\n\\tthis.nextSibling options.nextSibling;\\n\\t// Create our hidden dummy text area for reading styles\\n\\tthis.dummyTextArea this.widget.document.createElement(\\\textarea\\\);\\n\\tif(this.widget.editClass) {\\n\\t\\tthis.dummyTextArea.className this.widget.editClass;\\n\\t}\\n\\tthis.dummyTextArea.setAttribute(\\\hidden\\\,\\\true\\\);\\n\\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\\n\\tthis.widget.domNodes.push(this.dummyTextArea);\\n\\t// Create the iframe\\n\\tthis.iframeNode this.widget.document.createElement(\\\iframe\\\);\\n\\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\\n\\tthis.iframeDoc this.iframeNode.contentWindow.document;\\n\\t// (Firefox requires us to put some empty content in the iframe)\\n\\tvar paletteTitle this.widget.wiki.getTiddlerText(\\\$:/palette\\\);\\n\\tvar colorScheme (this.widget.wiki.getTiddler(paletteTitle) || {fields: {}}).fields\\\color-scheme\\\ || \\\light\\\;\\n\\tthis.iframeDoc.open();\\n\\tthis.iframeDoc.write(\\\\u003Cmeta namecolor-scheme content\\\ + colorScheme + \\\>\\\);\\n\\tthis.iframeDoc.close();\\n\\t// Style the iframe\\n\\tthis.iframeNode.className this.dummyTextArea.className;\\n\\tthis.iframeNode.style.border \\\none\\\;\\n\\tthis.iframeNode.style.padding \\\0\\\;\\n\\tthis.iframeNode.style.resize \\\none\\\;\\n\\tthis.iframeDoc.body.style.margin \\\0\\\;\\n\\tthis.iframeDoc.body.style.padding \\\0\\\;\\n\\tthis.widget.domNodes.push(this.iframeNode);\\n\\t// Construct the textarea or input node\\n\\tvar tag this.widget.editTag;\\n\\tif($tw.config.htmlUnsafeElements.indexOf(tag) ! -1) {\\n\\t\\ttag \\\input\\\;\\n\\t}\\n\\tthis.domNode this.iframeDoc.createElement(tag);\\n\\t// Set the text\\n\\tif(this.widget.editTag \\\textarea\\\) {\\n\\t\\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\\n\\t} else {\\n\\t\\tthis.domNode.value this.value;\\n\\t}\\n\\t// Set the attributes\\n\\tif(this.widget.editType && this.widget.editTag ! \\\textarea\\\) {\\n\\t\\tthis.domNode.setAttribute(\\\type\\\,this.widget.editType);\\n\\t}\\n\\tif(this.widget.editPlaceholder) {\\n\\t\\tthis.domNode.setAttribute(\\\placeholder\\\,this.widget.editPlaceholder);\\n\\t}\\n\\tif(this.widget.editSize) {\\n\\t\\tthis.domNode.setAttribute(\\\size\\\,this.widget.editSize);\\n\\t}\\n\\tif(this.widget.editRows) {\\n\\t\\tthis.domNode.setAttribute(\\\rows\\\,this.widget.editRows);\\n\\t}\\n\\tif(this.widget.editTabIndex) {\\n\\t\\tthis.iframeNode.setAttribute(\\\tabindex\\\,this.widget.editTabIndex);\\n\\t}\\n\\tif(this.widget.editAutoComplete) {\\n\\t\\tthis.domNode.setAttribute(\\\autocomplete\\\,this.widget.editAutoComplete);\\n\\t}\\n\\tif(this.widget.isDisabled \\\yes\\\) {\\n\\t\\tthis.domNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\t// Copy the styles from the dummy textarea\\n\\tthis.copyStyles();\\n\\t// Add event listeners\\n\\t$tw.utils.addEventListeners(this.domNode,\\n\\t\\t{name: \\\click\\\,handlerObject: this,handlerMethod: \\\handleClickEvent\\\},\\n\\t\\t{name: \\\input\\\,handlerObject: this,handlerMethod: \\\handleInputEvent\\\},\\n\\t\\t{name: \\\keydown\\\,handlerObject: this,handlerMethod: \\\handleKeydownEvent\\\},\\n\\t\\t{name: \\\focus\\\,handlerObject: this,handlerMethod: \\\handleFocusEvent\\\}\\n\\t);\\n\\t// Add drag and drop event listeners if fileDrop is enabled\\n\\tif(this.widget.isFileDropEnabled) {\\n\\t\\t$tw.utils.addEventListeners(this.domNode,\\n\\t\\t\\t{name: \\\dragenter\\\,handlerObject: this.widget,handlerMethod: \\\handleDragEnterEvent\\\},\\n\\t\\t\\t{name: \\\dragover\\\,handlerObject: this.widget,handlerMethod: \\\handleDragOverEvent\\\},\\n\\t\\t\\t{name: \\\dragleave\\\,handlerObject: this.widget,handlerMethod: \\\handleDragLeaveEvent\\\},\\n\\t\\t\\t{name: \\\dragend\\\,handlerObject: this.widget,handlerMethod: \\\handleDragEndEvent\\\},\\n\\t\\t\\t{name: \\\drop\\\, handlerObject: this.widget,handlerMethod: \\\handleDropEvent\\\},\\n\\t\\t\\t{name: \\\paste\\\, handlerObject: this.widget,handlerMethod: \\\handlePasteEvent\\\},\\n\\t\\t\\t{name: \\\click\\\,handlerObject: this.widget,handlerMethod: \\\handleClickEvent\\\}\\n\\t\\t);\\n\\t}\\n\\t// Insert the element into the DOM\\n\\tthis.iframeDoc.body.appendChild(this.domNode);\\n}\\n\\n/*\\nCopy styles from the dummy text area to the textarea in the iframe\\n*/\\nFramedEngine.prototype.copyStyles function() {\\n\\t// Copy all styles\\n\\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\\n\\t// Override the ones that should not be set the same as the dummy textarea\\n\\tthis.domNode.style.display \\\block\\\;\\n\\tthis.domNode.style.width \\\100%\\\;\\n\\tthis.domNode.style.margin \\\0\\\;\\n\\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\\n\\tthis.domNode.style\\\-webkit-text-fill-color\\\ \\\currentcolor\\\;\\n\\t// Ensure we dont force text direction to LTR\\n\\tthis.domNode.style.removeProperty(\\\direction\\\);\\n};\\n\\n/*\\nSet the text of the engine if it doesnt currently have focus\\n*/\\nFramedEngine.prototype.setText function(text,type) {\\n\\tif(!this.domNode.isTiddlyWikiFakeDom) {\\n\\t\\tif(this.domNode.ownerDocument.activeElement ! this.domNode) {\\n\\t\\t\\tthis.updateDomNodeText(text);\\n\\t\\t}\\n\\t\\t// Fix the height if needed\\n\\t\\tthis.fixHeight();\\n\\t}\\n};\\n\\n/*\\nUpdate the DomNode with the new text\\n*/\\nFramedEngine.prototype.updateDomNodeText function(text) {\\n\\ttry {\\n\\t\\tthis.domNode.value text;\\n\\t} catch(e) {\\n\\t\\t// Ignore\\n\\t}\\n};\\n\\n/*\\nGet the text of the engine\\n*/\\nFramedEngine.prototype.getText function() {\\n\\treturn this.domNode.value;\\n};\\n\\n/*\\nFix the height of textarea to fit content\\n*/\\nFramedEngine.prototype.fixHeight function() {\\n\\t// Make sure styles are updated\\n\\tthis.copyStyles();\\n\\t// Adjust height\\n\\tif(this.widget.editTag \\\textarea\\\) {\\n\\t\\tif(this.widget.editAutoHeight) {\\n\\t\\t\\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\t\\tvar newHeight $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\\n\\t\\t\\t\\tthis.iframeNode.style.height newHeight + \\\px\\\;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar fixedHeight parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\\\400px\\\),10);\\n\\t\\t\\tfixedHeight Math.max(fixedHeight,20);\\n\\t\\t\\tthis.domNode.style.height fixedHeight + \\\px\\\;\\n\\t\\t\\tthis.iframeNode.style.height fixedHeight + \\\px\\\;\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nFocus the engine node\\n*/\\nFramedEngine.prototype.focus function() {\\n\\tif(this.domNode.focus) {\\n\\t\\tthis.domNode.focus();\\n\\t}\\n\\tif(this.domNode.select) {\\n\\t\\t$tw.utils.setSelectionByPosition(this.domNode,this.widget.editFocusSelectFromStart,this.widget.editFocusSelectFromEnd);\\n\\t}\\n};\\n\\n/*\\nHandle a focus event\\n*/\\nFramedEngine.prototype.handleFocusEvent function(event) {\\n\\tif(this.widget.editCancelPopups) {\\n\\t\\t$tw.popup.cancel(0);\\n\\t}\\n};\\n\\n/*\\nHandle a keydown event\\n */\\nFramedEngine.prototype.handleKeydownEvent function(event) {\\n\\tif ($tw.keyboardManager.handleKeydownEvent(event, {onlyPriority: true})) {\\n\\t\\treturn true;\\n\\t}\\n\\n\\treturn this.widget.handleKeydownEvent(event);\\n};\\n\\n/*\\nHandle a click\\n*/\\nFramedEngine.prototype.handleClickEvent function(event) {\\n\\tthis.fixHeight();\\n\\treturn true;\\n};\\n\\n/*\\nHandle a dom \\\input\\\ event which occurs when the text has changed\\n*/\\nFramedEngine.prototype.handleInputEvent function(event) {\\n\\tthis.widget.saveChanges(this.getText());\\n\\tthis.fixHeight();\\n\\tif(this.widget.editInputActions) {\\n\\t\\tthis.widget.invokeActionString(this.widget.editInputActions,this,event,{actionValue: this.getText()});\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nCreate a blank structure representing a text operation\\n*/\\nFramedEngine.prototype.createTextOperation function() {\\n\\tvar operation {\\n\\t\\ttext: this.domNode.value,\\n\\t\\tselStart: this.domNode.selectionStart,\\n\\t\\tselEnd: this.domNode.selectionEnd,\\n\\t\\tcutStart: null,\\n\\t\\tcutEnd: null,\\n\\t\\treplacement: null,\\n\\t\\tnewSelStart: null,\\n\\t\\tnewSelEnd: null\\n\\t};\\n\\toperation.selection operation.text.substring(operation.selStart,operation.selEnd);\\n\\treturn operation;\\n};\\n\\n/*\\nExecute a text operation\\n*/\\nFramedEngine.prototype.executeTextOperation function(operation) {\\n\\t// Perform the required changes to the text area and the underlying tiddler\\n\\tvar newText operation.text;\\n\\tif(operation.replacement ! null) {\\n\\t\\tnewText operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\\n\\t\\t// Attempt to use a execCommand to modify the value of the control\\n\\t\\tif(this.iframeDoc.queryCommandSupported(\\\insertText\\\) && this.iframeDoc.queryCommandSupported(\\\delete\\\) && !$tw.browser.isFirefox) {\\n\\t\\t\\tthis.domNode.focus();\\n\\t\\t\\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\\n\\t\\t\\tif(operation.replacement \\\\\\) {\\n\\t\\t\\t\\tthis.iframeDoc.execCommand(\\\delete\\\,false,\\\\\\);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.iframeDoc.execCommand(\\\insertText\\\,false,operation.replacement);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tthis.domNode.value newText;\\n\\t\\t}\\n\\t\\tthis.domNode.focus();\\n\\t\\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\\n\\t}\\n\\tthis.domNode.focus();\\n\\treturn newText;\\n};\\n\\nexports.FramedEngine FramedEngine;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/core/modules/editor/engines/simple.js\:{\title\:\$:/core/modules/editor/engines/simple.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/engines/simple.js\\ntype: application/javascript\\nmodule-type: library\\n\\nText editor engine based on a simple input or textarea tag\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar HEIGHT_VALUE_TITLE \\\$:/config/TextEditor/EditorHeight/Height\\\;\\n\\nfunction SimpleEngine(options) {\\n\\t// Save our options\\n\\toptions options || {};\\n\\tthis.widget options.widget;\\n\\tthis.value options.value;\\n\\tthis.parentNode options.parentNode;\\n\\tthis.nextSibling options.nextSibling;\\n\\t// Construct the textarea or input node\\n\\tvar tag this.widget.editTag;\\n\\tif($tw.config.htmlUnsafeElements.indexOf(tag) ! -1) {\\n\\t\\ttag \\\input\\\;\\n\\t}\\n\\tthis.domNode this.widget.document.createElement(tag);\\n\\t// Set the text\\n\\tif(this.widget.editTag \\\textarea\\\) {\\n\\t\\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\\n\\t} else {\\n\\t\\tthis.domNode.value this.value;\\n\\t}\\n\\t// Set the attributes\\n\\tif(this.widget.editType && this.widget.editTag ! \\\textarea\\\) {\\n\\t\\tthis.domNode.setAttribute(\\\type\\\,this.widget.editType);\\n\\t}\\n\\tif(this.widget.editPlaceholder) {\\n\\t\\tthis.domNode.setAttribute(\\\placeholder\\\,this.widget.editPlaceholder);\\n\\t}\\n\\tif(this.widget.editSize) {\\n\\t\\tthis.domNode.setAttribute(\\\size\\\,this.widget.editSize);\\n\\t}\\n\\tif(this.widget.editRows) {\\n\\t\\tthis.domNode.setAttribute(\\\rows\\\,this.widget.editRows);\\n\\t}\\n\\tif(this.widget.editClass) {\\n\\t\\tthis.domNode.className this.widget.editClass;\\n\\t}\\n\\tif(this.widget.editTabIndex) {\\n\\t\\tthis.domNode.setAttribute(\\\tabindex\\\,this.widget.editTabIndex);\\n\\t}\\n\\tif(this.widget.editAutoComplete) {\\n\\t\\tthis.domNode.setAttribute(\\\autocomplete\\\,this.widget.editAutoComplete);\\n\\t}\\n\\tif(this.widget.isDisabled \\\yes\\\) {\\n\\t\\tthis.domNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\t// Add an input event handler\\n\\t$tw.utils.addEventListeners(this.domNode,\\n\\t\\t{name: \\\focus\\\, handlerObject: this, handlerMethod: \\\handleFocusEvent\\\},\\n\\t\\t{name: \\\input\\\, handlerObject: this, handlerMethod: \\\handleInputEvent\\\}\\n\\t);\\n\\t// Insert the element into the DOM\\n\\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\\n\\tthis.widget.domNodes.push(this.domNode);\\n}\\n\\n/*\\nSet the text of the engine if it doesnt currently have focus\\n*/\\nSimpleEngine.prototype.setText function(text,type) {\\n\\tif(!this.domNode.isTiddlyWikiFakeDom) {\\n\\t\\tif(this.domNode.ownerDocument.activeElement ! this.domNode || text \\\\\\) {\\n\\t\\t\\tthis.updateDomNodeText(text);\\n\\t\\t}\\n\\t\\t// Fix the height if needed\\n\\t\\tthis.fixHeight();\\n\\t}\\n};\\n\\n/*\\nUpdate the DomNode with the new text\\n*/\\nSimpleEngine.prototype.updateDomNodeText function(text) {\\n\\ttry {\\n\\t\\tthis.domNode.value text;\\n\\t} catch(e) {\\n\\t\\t// Ignore\\n\\t}\\n};\\n\\n/*\\nGet the text of the engine\\n*/\\nSimpleEngine.prototype.getText function() {\\n\\treturn this.domNode.value;\\n};\\n\\n/*\\nFix the height of textarea to fit content\\n*/\\nSimpleEngine.prototype.fixHeight function() {\\n\\tif(this.widget.editTag \\\textarea\\\) {\\n\\t\\tif(this.widget.editAutoHeight) {\\n\\t\\t\\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\t\\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar fixedHeight parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\\\400px\\\),10);\\n\\t\\t\\tfixedHeight Math.max(fixedHeight,20);\\n\\t\\t\\tthis.domNode.style.height fixedHeight + \\\px\\\;\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nFocus the engine node\\n*/\\nSimpleEngine.prototype.focus function() {\\n\\tif(this.domNode.focus) {\\n\\t\\tthis.domNode.focus();\\n\\t}\\n\\tif(this.domNode.select) {\\n\\t\\t$tw.utils.setSelectionByPosition(this.domNode,this.widget.editFocusSelectFromStart,this.widget.editFocusSelectFromEnd);\\n\\t}\\n};\\n\\n/*\\nHandle a dom \\\input\\\ event which occurs when the text has changed\\n*/\\nSimpleEngine.prototype.handleInputEvent function(event) {\\n\\tthis.widget.saveChanges(this.getText());\\n\\tthis.fixHeight();\\n\\tif(this.widget.editInputActions) {\\n\\t\\tthis.widget.invokeActionString(this.widget.editInputActions,this,event,{actionValue: this.getText()});\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nHandle a dom \\\focus\\\ event\\n*/\\nSimpleEngine.prototype.handleFocusEvent function(event) {\\n\\tif(this.widget.editCancelPopups) {\\n\\t\\t$tw.popup.cancel(0);\\n\\t}\\n\\tif(this.widget.editFocusPopup) {\\n\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\tdomNode: this.domNode,\\n\\t\\t\\ttitle: this.widget.editFocusPopup,\\n\\t\\t\\twiki: this.widget.wiki,\\n\\t\\t\\tforce: true\\n\\t\\t});\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nCreate a blank structure representing a text operation\\n*/\\nSimpleEngine.prototype.createTextOperation function() {\\n\\treturn null;\\n};\\n\\n/*\\nExecute a text operation\\n*/\\nSimpleEngine.prototype.executeTextOperation function(operation) {\\n};\\n\\nexports.SimpleEngine SimpleEngine;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/core/modules/editor/factory.js\:{\title\:\$:/core/modules/editor/factory.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/factory.js\\ntype: application/javascript\\nmodule-type: library\\n\\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT \\\100px\\\; // Minimum height of textareas in pixels\\n\\n// Configuration tiddlers\\nvar HEIGHT_MODE_TITLE \\\$:/config/TextEditor/EditorHeight/Mode\\\;\\nvar ENABLE_TOOLBAR_TITLE \\\$:/config/TextEditor/EnableToolbar\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\\n\\n\\tvar EditTextWidget function(parseTreeNode,options) {\\n\\t\\t// Initialise the editor operations if theyve not been done already\\n\\t\\tif(!this.editorOperations) {\\n\\t\\t\\tEditTextWidget.prototype.editorOperations {};\\n\\t\\t\\t$tw.modules.applyMethods(\\\texteditoroperation\\\,this.editorOperations);\\n\\t\\t}\\n\\t\\tthis.initialise(parseTreeNode,options);\\n\\t};\\n\\n\\t/*\\n\\tInherit from the base widget class\\n\\t*/\\n\\tEditTextWidget.prototype new Widget();\\n\\n\\t/*\\n\\tRender this widget into the DOM\\n\\t*/\\n\\tEditTextWidget.prototype.render function(parent,nextSibling) {\\n\\t\\t// Save the parent dom node\\n\\t\\tthis.parentDomNode parent;\\n\\t\\t// Compute our attributes\\n\\t\\tthis.computeAttributes();\\n\\t\\t// Execute our logic\\n\\t\\tthis.execute();\\n\\t\\t// Create the wrapper for the toolbar and render its content\\n\\t\\tif(this.editShowToolbar) {\\n\\t\\t\\tthis.toolbarNode this.document.createElement(\\\div\\\);\\n\\t\\t\\tthis.toolbarNode.className \\\tc-editor-toolbar\\\;\\n\\t\\t\\tparent.insertBefore(this.toolbarNode,nextSibling);\\n\\t\\t\\tthis.renderChildren(this.toolbarNode,null);\\n\\t\\t\\tthis.domNodes.push(this.toolbarNode);\\n\\t\\t}\\n\\t\\t// Create our element\\n\\t\\tvar editInfo this.getEditInfo(),\\n\\t\\t\\tEngine this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\\n\\t\\tthis.engine new Engine({\\n\\t\\t\\t\\twidget: this,\\n\\t\\t\\t\\tvalue: editInfo.value,\\n\\t\\t\\t\\ttype: editInfo.type,\\n\\t\\t\\t\\tparentNode: parent,\\n\\t\\t\\t\\tnextSibling: nextSibling\\n\\t\\t\\t});\\n\\t\\t// Call the postRender hook\\n\\t\\tif(this.postRender) {\\n\\t\\t\\tthis.postRender();\\n\\t\\t}\\n\\t\\t// Fix height\\n\\t\\tthis.engine.fixHeight();\\n\\t\\t// Focus if required\\n\\t\\tif(this.editFocus \\\true\\\ || this.editFocus \\\yes\\\) {\\n\\t\\t\\tthis.engine.focus();\\n\\t\\t}\\n\\t\\t// Add widget message listeners\\n\\t\\tthis.addEventListeners(\\n\\t\\t\\t{type: \\\tm-edit-text-operation\\\, handler: \\\handleEditTextOperationMessage\\\}\\n\\t\\t);\\n\\t};\\n\\n\\t/*\\n\\tGet the tiddler being edited and current value\\n\\t*/\\n\\tEditTextWidget.prototype.getEditInfo function() {\\n\\t\\t// Get the edit value\\n\\t\\tvar self this,\\n\\t\\t\\tvalue,\\n\\t\\t\\ttype \\\text/plain\\\,\\n\\t\\t\\tupdate;\\n\\t\\tif(this.editIndex) {\\n\\t\\t\\tvalue this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\\n\\t\\t\\tupdate function(value) {\\n\\t\\t\\t\\tvar data self.wiki.getTiddlerData(self.editTitle,{});\\n\\t\\t\\t\\tif(dataself.editIndex ! value) {\\n\\t\\t\\t\\t\\tdataself.editIndex value;\\n\\t\\t\\t\\t\\tself.wiki.setTiddlerData(self.editTitle,data);\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\t} else {\\n\\t\\t\\t// Get the current tiddler and the field name\\n\\t\\t\\tvar tiddler this.wiki.getTiddler(this.editTitle);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t// If weve got a tiddler, the value to display is the field string value\\n\\t\\t\\t\\tif(tiddler.hasField(this.editField)) {\\n\\t\\t\\t\\t\\tvalue tiddler.getFieldString(this.editField);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvalue this.editDefault || \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(this.editField \\\text\\\) {\\n\\t\\t\\t\\t\\ttype tiddler.fields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Otherwise, we need to construct a default value for the editor\\n\\t\\t\\t\\tswitch(this.editField) {\\n\\t\\t\\t\\t\\tcase \\\text\\\:\\n\\t\\t\\t\\t\\t\\tvalue \\\\\\;\\n\\t\\t\\t\\t\\t\\ttype \\\text/vnd.tiddlywiki\\\;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\title\\\:\\n\\t\\t\\t\\t\\t\\tvalue this.editTitle;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t\\tvalue \\\\\\;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(this.editDefault ! undefined) {\\n\\t\\t\\t\\t\\tvalue this.editDefault;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tupdate function(value) {\\n\\t\\t\\t\\tvar tiddler self.wiki.getTiddler(self.editTitle),\\n\\t\\t\\t\\t\\tupdateFields {\\n\\t\\t\\t\\t\\t\\ttitle: self.editTitle\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\tupdateFieldsself.editField value;\\n\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\\n\\t\\t\\t};\\n\\t\\t}\\n\\t\\tif(this.editType) {\\n\\t\\t\\ttype this.editType;\\n\\t\\t}\\n\\t\\treturn {value: value || \\\\\\, type: type, update: update};\\n\\t};\\n\\n\\t/*\\n\\tHandle an edit text operation message from the toolbar\\n\\t*/\\n\\tEditTextWidget.prototype.handleEditTextOperationMessage function(event) {\\n\\t\\t// Prepare information about the operation\\n\\t\\tvar operation this.engine.createTextOperation();\\n\\t\\t// Invoke the handler for the selected operation\\n\\t\\tvar handler this.editorOperationsevent.param;\\n\\t\\tif(handler) {\\n\\t\\t\\thandler.call(this,event,operation);\\n\\t\\t}\\n\\t\\t// Execute the operation via the engine\\n\\t\\tvar newText this.engine.executeTextOperation(operation);\\n\\t\\t// Fix the tiddler height and save changes\\n\\t\\tthis.engine.fixHeight();\\n\\t\\tthis.saveChanges(newText);\\n\\t};\\n\\n\\t/*\\n\\tCompute the internal state of the widget\\n\\t*/\\n\\tEditTextWidget.prototype.execute function() {\\n\\t\\t// Get our parameters\\n\\t\\tthis.editTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t\\tthis.editField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\t\\tthis.editIndex this.getAttribute(\\\index\\\);\\n\\t\\tthis.editDefault this.getAttribute(\\\default\\\);\\n\\t\\tthis.editClass this.getAttribute(\\\class\\\);\\n\\t\\tthis.editPlaceholder this.getAttribute(\\\placeholder\\\);\\n\\t\\tthis.editSize this.getAttribute(\\\size\\\);\\n\\t\\tthis.editRows this.getAttribute(\\\rows\\\);\\n\\t\\tthis.editAutoHeight this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\\\auto\\\);\\n\\t\\tthis.editAutoHeight this.getAttribute(\\\autoHeight\\\,this.editAutoHeight \\\auto\\\ ? \\\yes\\\ : \\\no\\\) \\\yes\\\;\\n\\t\\tthis.editMinHeight this.getAttribute(\\\minHeight\\\,DEFAULT_MIN_TEXT_AREA_HEIGHT);\\n\\t\\tthis.editFocusPopup this.getAttribute(\\\focusPopup\\\);\\n\\t\\tthis.editFocus this.getAttribute(\\\focus\\\);\\n\\t\\tthis.editFocusSelectFromStart $tw.utils.parseNumber(this.getAttribute(\\\focusSelectFromStart\\\,\\\0\\\));\\n\\t\\tthis.editFocusSelectFromEnd $tw.utils.parseNumber(this.getAttribute(\\\focusSelectFromEnd\\\,\\\0\\\));\\n\\t\\tthis.editTabIndex this.getAttribute(\\\tabindex\\\);\\n\\t\\tthis.editCancelPopups this.getAttribute(\\\cancelPopups\\\,\\\\\\) \\\yes\\\;\\n\\t\\tthis.editInputActions this.getAttribute(\\\inputActions\\\);\\n\\t\\tthis.editRefreshTitle this.getAttribute(\\\refreshTitle\\\);\\n\\t\\tthis.editAutoComplete this.getAttribute(\\\autocomplete\\\);\\n\\t\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\t\\tthis.isFileDropEnabled this.getAttribute(\\\fileDrop\\\,\\\no\\\) \\\yes\\\;\\n\\t\\t// Get the default editor element tag and type\\n\\t\\tvar tag,type;\\n\\t\\tif(this.editField \\\text\\\) {\\n\\t\\t\\ttag \\\textarea\\\;\\n\\t\\t} else {\\n\\t\\t\\ttag \\\input\\\;\\n\\t\\t\\tvar fieldModule $tw.Tiddler.fieldModulesthis.editField;\\n\\t\\t\\tif(fieldModule && fieldModule.editTag) {\\n\\t\\t\\t\\ttag fieldModule.editTag;\\n\\t\\t\\t}\\n\\t\\t\\tif(fieldModule && fieldModule.editType) {\\n\\t\\t\\t\\ttype fieldModule.editType;\\n\\t\\t\\t}\\n\\t\\t\\ttype type || \\\text\\\;\\n\\t\\t}\\n\\t\\t// Get the rest of our parameters\\n\\t\\tthis.editTag this.getAttribute(\\\tag\\\,tag) || \\\input\\\;\\n\\t\\tthis.editType this.getAttribute(\\\type\\\,type);\\n\\t\\t// Make the child widgets\\n\\t\\tthis.makeChildWidgets();\\n\\t\\t// Determine whether to show the toolbar\\n\\t\\tthis.editShowToolbar this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\\\yes\\\);\\n\\t\\tthis.editShowToolbar (this.editShowToolbar \\\yes\\\) && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\\n\\t};\\n\\n\\t/*\\n\\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n\\t*/\\n\\tEditTextWidget.prototype.refresh function(changedTiddlers) {\\n\\t\\tvar changedAttributes this.computeAttributes();\\n\\t\\t// Completely rerender if any of our attributes have changed\\n\\t\\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes\\\default\\\ || changedAttributes\\\class\\\ || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || changedTiddlersHEIGHT_MODE_TITLE || changedTiddlersENABLE_TOOLBAR_TITLE || changedTiddlers\\\$:/palette\\\ || changedAttributes.disabled || changedAttributes.fileDrop) {\\n\\t\\t\\tthis.refreshSelf();\\n\\t\\t\\treturn true;\\n\\t\\t} else if (changedTiddlersthis.editRefreshTitle) {\\n\\t\\t\\tthis.engine.updateDomNodeText(this.getEditInfo().value);\\n\\t\\t} else if(changedTiddlersthis.editTitle) {\\n\\t\\t\\tvar editInfo this.getEditInfo();\\n\\t\\t\\tthis.updateEditor(editInfo.value,editInfo.type);\\n\\t\\t}\\n\\t\\tthis.engine.fixHeight();\\n\\t\\tif(this.editShowToolbar) {\\n\\t\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t\\t} else {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t};\\n\\n\\t/*\\n\\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\\n\\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\\n\\t*/\\n\\tEditTextWidget.prototype.updateEditor function(text,type) {\\n\\t\\tthis.updateEditorDomNode(text,type);\\n\\t};\\n\\n\\t/*\\n\\tUpdate the editor dom node with new text\\n\\t*/\\n\\tEditTextWidget.prototype.updateEditorDomNode function(text,type) {\\n\\t\\tthis.engine.setText(text,type);\\n\\t};\\n\\n\\t/*\\n\\tSave changes back to the tiddler store\\n\\t*/\\n\\tEditTextWidget.prototype.saveChanges function(text) {\\n\\t\\tvar editInfo this.getEditInfo();\\n\\t\\tif(text ! editInfo.value) {\\n\\t\\t\\teditInfo.update(text);\\n\\t\\t}\\n\\t};\\n\\n\\t/*\\n\\tHandle a dom \\\keydown\\\ event, which well bubble up to our container for the keyboard widgets benefit\\n\\t*/\\n\\tEditTextWidget.prototype.handleKeydownEvent function(event) {\\n\\t\\t// Check for a keyboard shortcut\\n\\t\\tif(this.toolbarNode) {\\n\\t\\t\\tvar shortcutElements this.toolbarNode.querySelectorAll(\\\data-tw-keyboard-shortcut\\\);\\n\\t\\t\\tfor(var index0; index\u003CshortcutElements.length; index++) {\\n\\t\\t\\t\\tvar el shortcutElementsindex,\\n\\t\\t\\t\\t\\tshortcutData el.getAttribute(\\\data-tw-keyboard-shortcut\\\),\\n\\t\\t\\t\\t\\tkeyInfoArray $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\\n\\t\\t\\t\\t\\t\\twiki: this.wiki\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\\n\\t\\t\\t\\t\\tvar clickEvent this.document.createEvent(\\\Events\\\);\\n\\t\\t\\t\\t clickEvent.initEvent(\\\click\\\,true,false);\\n\\t\\t\\t\\t el.dispatchEvent(clickEvent);\\n\\t\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Propogate the event to the container\\n\\t\\tif(this.propogateKeydownEvent(event)) {\\n\\t\\t\\t// Ignore the keydown if it was already handled\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t\\t// Otherwise, process the keydown normally\\n\\t\\treturn false;\\n\\t};\\n\\n\\t/*\\n\\tPropogate keydown events to our container for the keyboard widgets benefit\\n\\t*/\\n\\tEditTextWidget.prototype.propogateKeydownEvent function(event) {\\n\\t\\tvar newEvent this.cloneEvent(event,\\\keyCode\\\,\\\code\\\,\\\which\\\,\\\key\\\,\\\metaKey\\\,\\\ctrlKey\\\,\\\altKey\\\,\\\shiftKey\\\);\\n\\t\\treturn !this.parentDomNode.dispatchEvent(newEvent);\\n\\t};\\n\\n\\tEditTextWidget.prototype.cloneEvent function(event,propertiesToCopy) {\\n\\t\\tvar propertiesToCopy propertiesToCopy || ,\\n\\t\\t\\tnewEvent this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\\\Events\\\);\\n\\t\\tif(newEvent.initEvent) {\\n\\t\\t\\tnewEvent.initEvent(event.type, true, true);\\n\\t\\t}\\n\\t\\t$tw.utils.each(propertiesToCopy,function(prop){\\n\\t\\t\\tnewEventprop eventprop;\\n\\t\\t});\\n\\t\\treturn newEvent;\\n\\t};\\n\\n\\tEditTextWidget.prototype.dispatchDOMEvent function(newEvent) {\\n\\t\\tvar dispatchNode this.engine.iframeNode || this.engine.parentNode;\\n\\t\\treturn dispatchNode.dispatchEvent(newEvent);\\n\\t};\\n\\n\\t/*\\n\\tPropogate drag and drop events with File data to our container for the dropzone widgets benefit.\\n\\tIf there are no Files, let the browser handle it.\\n\\t*/\\n\\tEditTextWidget.prototype.handleDropEvent function(event) {\\n\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\tthis.dispatchDOMEvent(this.cloneEvent(event,\\\dataTransfer\\\));\\n\\t\\t} \\n\\t};\\n\\n\\tEditTextWidget.prototype.handlePasteEvent function(event) {\\n\\t\\tif(event.clipboardData && event.clipboardData.files && event.clipboardData.files.length) {\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\tthis.dispatchDOMEvent(this.cloneEvent(event,\\\clipboardData\\\));\\n\\t\\t}\\n\\t};\\n\\n\\tEditTextWidget.prototype.handleDragEnterEvent function(event) {\\n\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\t// Ignore excessive events fired by FF when entering and leaving text nodes in a text area.\\n\\t\\t\\tif( event.relatedTarget && (event.relatedTarget.nodeType 3 || event.target event.relatedTarget)) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\treturn this.dispatchDOMEvent(this.cloneEvent(event,\\\dataTransfer\\\));\\n\\t\\t}\\n\\t\\treturn true;\\n\\t};\\n\\n\\tEditTextWidget.prototype.handleDragOverEvent function(event) {\\n\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\t// Call preventDefault() in browsers that default to not allowing drop events on textarea\\n\\t\\t\\tif($tw.browser.isFirefox || $tw.browser.isIE) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t}\\n\\t\\t\\tevent.dataTransfer.dropEffect \\\copy\\\;\\n\\t\\t\\treturn this.dispatchDOMEvent(this.cloneEvent(event,\\\dataTransfer\\\));\\n\\t\\t}\\n\\t\\treturn true;\\n\\t};\\n\\n\\tEditTextWidget.prototype.handleDragLeaveEvent function(event) {\\n\\t\\t// Ignore excessive events fired by FF when entering and leaving text nodes in a text area.\\n\\t\\tif(event.relatedTarget && ((event.relatedTarget.nodeType 3) || (event.target event.relatedTarget))) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t\\tevent.preventDefault();\\n\\t\\tthis.dispatchDOMEvent(this.cloneEvent(event,\\\dataTransfer\\\));\\n\\t};\\n\\n\\tEditTextWidget.prototype.handleDragEndEvent function(event) {\\n\\t\\tthis.dispatchDOMEvent(this.cloneEvent(event));\\n\\t};\\n\\n\\tEditTextWidget.prototype.handleClickEvent function(event) {\\n\\t\\treturn !this.dispatchDOMEvent(this.cloneEvent(event));\\n\\t};\\n\\n\\treturn EditTextWidget;\\n}\\n\\nexports.editTextWidgetFactory editTextWidgetFactory;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/core/modules/editor/operations/bitmap/clear.js\:{\title\:\$:/core/modules/editor/operations/bitmap/clear.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\\ntype: application/javascript\\nmodule-type: bitmapeditoroperation\\n\\nBitmap editor operation to clear the image\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\clear\\\ function(event) {\\n\\tvar ctx this.canvasDomNode.getContext(\\\2d\\\);\\n\\tctx.globalAlpha 1;\\n\\tctx.fillStyle event.paramObject.colour || \\\white\\\;\\n\\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\\n\\t// Save changes\\n\\tthis.strokeEnd();\\n};\\n\,\type\:\application/javascript\,\module-type\:\bitmapeditoroperation\},\$:/core/modules/editor/operations/bitmap/resize.js\:{\title\:\$:/core/modules/editor/operations/bitmap/resize.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\\ntype: application/javascript\\nmodule-type: bitmapeditoroperation\\n\\nBitmap editor operation to resize the image\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\resize\\\ function(event) {\\n\\t// Get the new width\\n\\tvar newWidth parseInt(event.paramObject.width || this.canvasDomNode.width,10),\\n\\t\\tnewHeight parseInt(event.paramObject.height || this.canvasDomNode.height,10);\\n\\t// Update if necessary\\n\\tif(newWidth > 0 && newHeight > 0 && !(newWidth this.currCanvas.width && newHeight this.currCanvas.height)) {\\n\\t\\tthis.changeCanvasSize(newWidth,newHeight);\\n\\t}\\n\\t// Update the input controls\\n\\tthis.refreshToolbar();\\n\\t// Save the image into the tiddler\\n\\tthis.saveChanges();\\n};\\n\,\type\:\application/javascript\,\module-type\:\bitmapeditoroperation\},\$:/core/modules/editor/operations/bitmap/rotate-left.js\:{\title\:\$:/core/modules/editor/operations/bitmap/rotate-left.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\\ntype: application/javascript\\nmodule-type: bitmapeditoroperation\\n\\nBitmap editor operation to rotate the image left by 90 degrees\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\rotate-left\\\ function(event) {\\n\\t// Rotate the canvas left by 90 degrees\\n\\tthis.rotateCanvasLeft();\\n\\t// Update the input controls\\n\\tthis.refreshToolbar();\\n\\t// Save the image into the tiddler\\n\\tthis.saveChanges();\\n};\\n\,\type\:\application/javascript\,\module-type\:\bitmapeditoroperation\},\$:/core/modules/editor/operations/text/excise.js\:{\title\:\$:/core/modules/editor/operations/text/excise.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/excise.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to excise the selection to a new tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction isMarkdown(mediaType) {\\n\\treturn mediaType text/markdown || mediaType text/x-markdown;\\n}\\n\\nexports\\\excise\\\ function(event,operation) {\\n\\tvar editTiddler this.wiki.getTiddler(this.editTitle),\\n\\t\\teditTiddlerTitle this.editTitle,\\n\\t\\twikiLinks !isMarkdown(editTiddler.fields.type),\\n\\t\\texcisionBaseTitle $tw.language.getString(\\\Buttons/Excise/DefaultTitle\\\);\\n\\tif(editTiddler && editTiddler.fields\\\draft.of\\\) {\\n\\t\\teditTiddlerTitle editTiddler.fields\\\draft.of\\\;\\n\\t}\\n\\tvar excisionTitle event.paramObject.title || this.wiki.generateNewTitle(excisionBaseTitle);\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(\\n\\t\\tthis.wiki.getCreationFields(),\\n\\t\\tthis.wiki.getModificationFields(),\\n\\t\\t{\\n\\t\\t\\ttitle: excisionTitle,\\n\\t\\t\\ttext: operation.selection,\\n\\t\\t\\ttags: event.paramObject.tagnew \\\yes\\\ ? editTiddlerTitle : ,\\n\\t\\t\\ttype: editTiddler.fields.type\\n\\t\\t}\\n\\t));\\n\\toperation.replacement excisionTitle;\\n\\tswitch(event.paramObject.type || \\\transclude\\\) {\\n\\t\\tcase \\\transclude\\\:\\n\\t\\t\\toperation.replacement \\\{{\\\ + operation.replacement+ \\\}}\\\;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\link\\\:\\n\\t\\t\\toperation.replacement wikiLinks ? \\\\\\ + operation.replacement+ \\\\\\\\n\\t\\t\\t\\t: (\\\\\\ + operation.replacement + \\\(\u003C#\\\ + operation.replacement + \\\>)\\\);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\macro\\\:\\n\\t\\t\\toperation.replacement \\\\u003C\u003C\\\ + (event.paramObject.macro || \\\translink\\\) + \\\ \\\\\\\\\\\\\\\\\\\\\\\\ + operation.replacement + \\\\\\\\\\\\\\\\\\\\\\\\>>\\\;\\n\\t\\t\\tbreak;\\n\\t}\\n\\toperation.cutStart operation.selStart;\\n\\toperation.cutEnd operation.selEnd;\\n\\toperation.newSelStart operation.selStart;\\n\\toperation.newSelEnd operation.selStart + operation.replacement.length;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/focus-editor.js\:{\title\:\$:/core/modules/editor/operations/text/focus-editor.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/focus-editor.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\nSimply focus the Text editor\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\focus-editor\\\ function(event,operation) {\\n\\toperation null;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/insert-text.js\:{\title\:\$:/core/modules/editor/operations/text/insert-text.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/insert-text.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation insert text at the caret position. If there is a selection it is replaced.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\insert-text\\\ function(event,operation) {\\n\\toperation.replacement event.paramObject.text;\\n\\toperation.cutStart operation.selStart;\\n\\toperation.cutEnd operation.selEnd;\\n\\toperation.newSelStart operation.selStart + operation.replacement.length;\\n\\toperation.newSelEnd operation.newSelStart;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/make-link.js\:{\title\:\$:/core/modules/editor/operations/text/make-link.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to make a link\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\make-link\\\ function(event,operation) {\\n\\tif(operation.selection) {\\n\\t\\toperation.replacement \\\\\\ + operation.selection + \\\|\\\ + event.paramObject.text + \\\\\\;\\n\\t\\toperation.cutStart operation.selStart;\\n\\t\\toperation.cutEnd operation.selEnd;\\n\\t} else {\\n\\t\\toperation.replacement \\\\\\ + event.paramObject.text + \\\\\\;\\n\\t\\toperation.cutStart operation.selStart;\\n\\t\\toperation.cutEnd operation.selEnd;\\n\\t}\\n\\toperation.newSelStart operation.selStart + operation.replacement.length;\\n\\toperation.newSelEnd operation.newSelStart;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/prefix-lines.js\:{\title\:\$:/core/modules/editor/operations/text/prefix-lines.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to add a prefix to the selected lines\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\prefix-lines\\\ function(event,operation) {\\n\\tvar targetCount parseInt(event.paramObject.count + \\\\\\,10);\\n\\t// Cut just past the preceding line break, or the start of the text\\n\\toperation.cutStart $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\\n\\t// Cut to just past the following line break, or to the end of the text\\n\\toperation.cutEnd $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\\n\\t// Compose the required prefix\\n\\tvar prefix $tw.utils.repeat(event.paramObject.character,targetCount);\\n\\t// Process each line\\n\\tvar lines operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\\\r?\\\\n/mg);\\n\\t$tw.utils.each(lines,function(line,index) {\\n\\t\\t// Remove and count any existing prefix characters\\n\\t\\tvar count 0;\\n\\t\\twhile($tw.utils.startsWith(line,event.paramObject.character)) {\\n\\t\\t\\tline line.substring(event.paramObject.character.length);\\n\\t\\t\\tcount++;\\n\\t\\t}\\n\\t\\t// Remove any whitespace\\n\\t\\twhile(line.charAt(0) \\\ \\\) {\\n\\t\\t\\tline line.substring(1);\\n\\t\\t}\\n\\t\\t// Were done if we removed the exact required prefix, otherwise add it\\n\\t\\tif(count ! targetCount) {\\n\\t\\t\\t// Apply the prefix\\n\\t\\t\\tline prefix + \\\ \\\ + line;\\n\\t\\t}\\n\\t\\t// Save the modified line\\n\\t\\tlinesindex line;\\n\\t});\\n\\t// Stitch the replacement text together and set the selection\\n\\toperation.replacement lines.join(\\\\\\\n\\\);\\n\\tif(lines.length 1) {\\n\\t\\toperation.newSelStart operation.cutStart + operation.replacement.length;\\n\\t\\toperation.newSelEnd operation.newSelStart;\\n\\t} else {\\n\\t\\toperation.newSelStart operation.cutStart;\\n\\t\\toperation.newSelEnd operation.newSelStart + operation.replacement.length;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/replace-all.js\:{\title\:\$:/core/modules/editor/operations/text/replace-all.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to replace the entire text\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\replace-all\\\ function(event,operation) {\\n\\toperation.cutStart 0;\\n\\toperation.cutEnd operation.text.length;\\n\\toperation.replacement event.paramObject.text;\\n\\toperation.newSelStart 0;\\n\\toperation.newSelEnd operation.replacement.length;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/replace-selection.js\:{\title\:\$:/core/modules/editor/operations/text/replace-selection.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to replace the selection\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\replace-selection\\\ function(event,operation) {\\n\\toperation.replacement event.paramObject.text;\\n\\toperation.cutStart operation.selStart;\\n\\toperation.cutEnd operation.selEnd;\\n\\toperation.newSelStart operation.selStart;\\n\\toperation.newSelEnd operation.selStart + operation.replacement.length;\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/save-selection.js\:{\title\:\$:/core/modules/editor/operations/text/save-selection.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to save the current selection in a specified tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\save-selection\\\ function(event,operation) {\\n\\tvar tiddler event.paramObject.tiddler,\\n\\t\\tfield event.paramObject.field || \\\text\\\;\\n\\tif(tiddler && field) {\\n\\t\\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/wrap-lines.js\:{\title\:\$:/core/modules/editor/operations/text/wrap-lines.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to wrap the selected lines with a prefix and suffix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\wrap-lines\\\ function(event,operation) {\\n\\tvar prefix event.paramObject.prefix || \\\\\\,\\n\\t\\tsuffix event.paramObject.suffix || \\\\\\;\\n\\tif($tw.utils.endsWith(operation.text.substring(0,operation.selStart), prefix + \\\\\\\n\\\) &&\\n\\t\\t\\t$tw.utils.startsWith(operation.text.substring(operation.selEnd), \\\\\\\n\\\ + suffix)) {\\n\\t\\t// Selected text is already surrounded by prefix and suffix: Remove them\\n\\t\\t// Cut selected text plus prefix and suffix\\n\\t\\toperation.cutStart operation.selStart - (prefix.length + 1);\\n\\t\\toperation.cutEnd operation.selEnd + suffix.length + 1;\\n\\t\\t// Also cut the following newline (if there is any)\\n\\t\\tif (operation.textoperation.cutEnd \\\\\\\n\\\) {\\n\\t\\t\\toperation.cutEnd++;\\n\\t\\t}\\n\\t\\t// Replace with selection\\n\\t\\toperation.replacement operation.text.substring(operation.selStart,operation.selEnd);\\n\\t\\t// Select text that was in between prefix and suffix\\n\\t\\toperation.newSelStart operation.cutStart;\\n\\t\\toperation.newSelEnd operation.selEnd - (prefix.length + 1);\\n\\t} else {\\n\\t\\t// Cut just past the preceding line break, or the start of the text\\n\\t\\toperation.cutStart $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\\n\\t\\t// Cut to just past the following line break, or to the end of the text\\n\\t\\toperation.cutEnd $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\\n\\t\\t// Add the prefix and suffix\\n\\t\\toperation.replacement prefix + \\\\\\\n\\\ +\\n\\t\\t\\t\\t\\toperation.text.substring(operation.cutStart,operation.cutEnd) + \\\\\\\n\\\ +\\n\\t\\t\\t\\t\\tsuffix + \\\\\\\n\\\;\\n\\t\\toperation.newSelStart operation.cutStart + prefix.length + 1;\\n\\t\\toperation.newSelEnd operation.newSelStart + (operation.cutEnd - operation.cutStart);\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/editor/operations/text/wrap-selection.js\:{\title\:\$:/core/modules/editor/operations/text/wrap-selection.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to wrap the selection with the specified prefix and suffix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\wrap-selection\\\ function(event,operation) {\\n\\tvar o operation,\\n\\t\\tprefix event.paramObject.prefix,\\n\\t\\tsuffix event.paramObject.suffix,\\n\\t\\ttrimSelection event.paramObject.trimSelection || \\\no\\\,\\n\\t\\tselLength o.selEnd - o.selStart;\\n\\n\\t// This function detects, if trailing spaces are part of the selection __and__ if the user wants to handle them\\n\\t// Returns \\\yes\\\, \\\start\\\, \\\end\\\, \\\no\\\ (default)\\n\\t//\\tyes .. there are trailing spaces at both ends\\n\\t//\\tstart .. there are trailing spaces at the start\\n\\t//\\tend .. there are trailing spaces at the end\\n\\t//\\tno .. no trailing spaces are taken into account\\n\\tvar trailingSpaceAt function(sel) {\\n\\t\\tvar _start,\\n\\t\\t\\t_end,\\n\\t\\t\\tresult;\\n\\t\\t// trimSelection is a user parameter, which this evaluations takes into account\\n\\t\\tswitch(trimSelection) {\\n\\t\\t\\tcase \\\end\\\:\\n\\t\\t\\t\\tresult (sel.trimEnd().length ! selLength) ? \\\end\\\ : \\\no\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\yes\\\:\\n\\t\\t\\t\\t_start sel.trimStart().length ! selLength;\\n\\t\\t\\t\\t_end sel.trimEnd().length ! selLength;\\n\\t\\t\\t\\tresult (_start && _end) ? \\\yes\\\ : (_start) ? \\\start\\\ : (_end) ? \\\end\\\ : \\\no\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\start\\\:\\n\\t\\t\\t\\tresult (sel.trimStart().length ! selLength) ? \\\start\\\ : \\\no\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\tresult \\\no\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\treturn result;\\n\\t}\\n\\n\\tfunction togglePrefixSuffix() {\\n\\t\\tif(o.text.substring(o.selStart - prefix.length, o.selStart + suffix.length) prefix + suffix) {\\n\\t\\t\\t// Remove the prefix and suffix\\n\\t\\t\\to.cutStart o.selStart - prefix.length;\\n\\t\\t\\to.cutEnd o.selEnd + suffix.length;\\n\\t\\t\\to.replacement \\\\\\;\\n\\t\\t\\to.newSelStart o.cutStart;\\n\\t\\t\\to.newSelEnd o.newSelStart;\\n\\t\\t} else {\\n\\t\\t\\t// Wrap the cursor instead\\n\\t\\t\\to.cutStart o.selStart;\\n\\t\\t\\to.cutEnd o.selEnd;\\n\\t\\t\\to.replacement prefix + suffix;\\n\\t\\t\\to.newSelStart o.selStart + prefix.length;\\n\\t\\t\\to.newSelEnd o.newSelStart;\\n\\t\\t}\\n\\t}\\n\\n\\t// options: lenPrefix, lenSuffix\\n\\tfunction removePrefixSuffix(options) {\\n\\t\\toptions options || {};\\n\\t\\tvar _lenPrefix options.lenPrefix || 0;\\n\\t\\tvar _lenSuffix options.lenSuffix || 0;\\n\\n\\t\\to.cutStart o.selStart - _lenPrefix;\\n\\t\\to.cutEnd o.selEnd + _lenSuffix;\\n\\t\\to.replacement (_lenPrefix || _lenSuffix) ? o.selection : o.selection.substring(prefix.length, o.selection.length - suffix.length);\\n\\t\\to.newSelStart o.cutStart;\\n\\t\\to.newSelEnd o.cutStart + o.replacement.length;\\n\\t}\\n\\n\\tfunction addPrefixSuffix() {\\n\\t\\t// remove trailing space if requested\\n\\t\\tswitch(trailingSpaceAt(o.selection)) {\\n\\t\\t\\tcase \\\no\\\:\\n\\t\\t\\t\\t// has no trailing spaces\\n\\t\\t\\t\\to.cutStart o.selStart;\\n\\t\\t\\t\\to.cutEnd o.selEnd;\\n\\t\\t\\t\\to.replacement prefix + o.selection + suffix;\\n\\t\\t\\t\\to.newSelStart o.selStart;\\n\\t\\t\\t\\to.newSelEnd o.selStart + o.replacement.length;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\yes\\\:\\n\\t\\t\\t\\t// handle both ends\\n\\t\\t\\t\\to.cutStart o.selEnd - (o.selection.trimStart().length);\\n\\t\\t\\t\\to.cutEnd o.selection.trimEnd().length + o.selStart;\\n\\t\\t\\t\\to.replacement prefix + o.selection.trim() + suffix;\\n\\t\\t\\t\\to.newSelStart o.cutStart;\\n\\t\\t\\t\\to.newSelEnd o.cutStart + o.replacement.length;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\start\\\:\\n\\t\\t\\t\\t// handle leading\\n\\t\\t\\t\\to.cutStart o.selEnd - (o.selection.trimStart().length);\\n\\t\\t\\t\\to.cutEnd o.selEnd;\\n\\t\\t\\t\\to.replacement prefix + o.selection.trimStart() + suffix;\\n\\t\\t\\t\\to.newSelStart o.cutStart;\\n\\t\\t\\t\\to.newSelEnd o.cutStart + o.replacement.length;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\end\\\:\\n\\t\\t\\t\\t// handle trailing\\n\\t\\t\\t\\to.cutStart o.selStart;\\n\\t\\t\\t\\to.cutEnd o.selection.trimEnd().length + o.selStart;\\n\\t\\t\\t\\to.replacement prefix + o.selection.trimEnd() + suffix;\\n\\t\\t\\t\\to.newSelStart o.selStart;\\n\\t\\t\\t\\to.newSelEnd o.selStart + o.replacement.length;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\n\\tif(o.selStart o.selEnd) {\\n\\t\\t// No selection; Create prefix and suffix. Set cursor in between them: \\\\\\|\\\\\\\\n\\t\\ttogglePrefixSuffix();\\n\\t} else if(o.text.substring(o.selStart, o.selStart + prefix.length) prefix &&\\n\\t\\t\\t\\to.text.substring(o.selEnd - suffix.length,o.selEnd) suffix) {\\n\\t\\t// Prefix and suffix are already present, so remove them\\n\\t\\tremovePrefixSuffix();\\n\\t} else if(o.text.substring(o.selStart - prefix.length, o.selStart) prefix &&\\n\\t\\t\\t\\to.text.substring(o.selEnd, o.selEnd + suffix.length) suffix) {\\n\\t\\t// Prefix and suffix are present BUT not selected -> remove them\\n\\t\\tremovePrefixSuffix({\\\lenPrefix\\\: prefix.length, \\\lenSuffix\\\: suffix.length});\\n\\t} else {\\n\\t\\t// Add the prefix and suffix\\n\\t\\taddPrefixSuffix();\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\texteditoroperation\},\$:/core/modules/filterrunprefixes/all.js\:{\title\:\$:/core/modules/filterrunprefixes/all.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/all.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nUnion of sets without de-duplication.\\nEquivalent to filter run prefix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.all function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tresults.push.apply(results, operationSubFunction(source,widget));\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/and.js\:{\title\:\$:/core/modules/filterrunprefixes/and.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/and.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nIntersection of sets.\\nEquivalent to + filter run prefix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.and function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\\n\\t\\tsource options.wiki.makeTiddlerIterator(results.toArray());\\n\\t\\tresults.clear();\\n\\t\\tresults.pushTop(operationSubFunction(source,widget));\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/cascade.js\:{\title\:\$:/core/modules/filterrunprefixes/cascade.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/cascade.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.cascade function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length ! 0) {\\n\\t\\t\\tvar filterList operationSubFunction(source,widget),\\n\\t\\t\\t\\tfilterFnList ;\\n\\t\\t\\tvar inputResults results.toArray();\\n\\t\\t\\tresults.clear();\\n\\t\\t\\t$tw.utils.each(inputResults,function(title) {\\n\\t\\t\\t\\tvar result \\\\\\; // If no filter matches, we return an empty string\\n\\t\\t\\t\\t$tw.utils.each(filterList,function(filter,index) {\\n\\t\\t\\t\\t\\tif(!filterFnListindex) {\\n\\t\\t\\t\\t\\t\\tfilterFnListindex options.wiki.compileFilter(filter);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tvar output filterFnListindex(options.wiki.makeTiddlerIterator(title),widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\t\\t\\\..currentTiddler\\\: widget.getVariable(\\\currentTiddler\\\,\\\\\\)\\n\\t\\t\\t\\t\\t}));\\n\\t\\t\\t\\t\\tif(output.length ! 0) {\\n\\t\\t\\t\\t\\t\\tresult output0;\\n\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tresults.push(result);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/else.js\:{\title\:\$:/core/modules/filterrunprefixes/else.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/else.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nEquivalent to ~ filter run prefix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.else function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length 0) {\\n\\t\\t\\t// Main result so far is empty\\n\\t\\t\\tresults.pushTop(operationSubFunction(source,widget));\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/except.js\:{\title\:\$:/core/modules/filterrunprefixes/except.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/except.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nDifference of sets.\\nEquivalent to - filter run prefix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.except function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tresults.remove(operationSubFunction(source,widget));\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/filter.js\:{\title\:\$:/core/modules/filterrunprefixes/filter.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/filter.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.filter function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length > 0) {\\n\\t\\t\\tvar resultsToRemove ,\\n\\t\\t\\t\\tindex 0;\\n\\t\\t\\tresults.each(function(title) {\\n\\t\\t\\t\\tvar filtered operationSubFunction(options.wiki.makeTiddlerIterator(title),widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\t\\\..currentTiddler\\\: widget.getVariable(\\\currentTiddler\\\,\\\\\\),\\n\\t\\t\\t\\t\\t\\\index\\\: \\\\\\ + index,\\n\\t\\t\\t\\t\\t\\\revIndex\\\: \\\\\\ + (results.length - 1 - index),\\n\\t\\t\\t\\t\\t\\\length\\\: \\\\\\ + results.length\\n\\t\\t\\t\\t}));\\n\\t\\t\\t\\tif(filtered.length 0) {\\n\\t\\t\\t\\t\\tresultsToRemove.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t++index;\\n\\t\\t\\t});\\n\\t\\t\\tresults.remove(resultsToRemove);\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/intersection.js\:{\title\:\$:/core/modules/filterrunprefixes/intersection.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/intersection.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.intersection function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length ! 0) {\\n\\t\\t\\tvar secondRunResults operationSubFunction(source,widget);\\n\\t\\t\\tvar firstRunResults results.toArray();\\n\\t\\t\\tresults.clear();\\n\\t\\t\\t$tw.utils.each(firstRunResults,function(title) {\\n\\t\\t\\t\\tif(secondRunResults.indexOf(title) ! -1) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/map.js\:{\title\:\$:/core/modules/filterrunprefixes/map.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/map.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.map function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length > 0) {\\n\\t\\t\\tvar inputTitles results.toArray(),\\n\\t\\t\\t\\tindex 0,\\n\\t\\t\\t\\tsuffixes options.suffixes,\\n\\t\\t\\t\\tflatten (suffixes0 && suffixes00 \\\flat\\\) ? true : false;\\n\\t\\t\\tresults.clear();\\n\\t\\t\\t$tw.utils.each(inputTitles,function(title) {\\n\\t\\t\\t\\tvar filtered operationSubFunction(options.wiki.makeTiddlerIterator(title),widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\t\\\..currentTiddler\\\: widget.getVariable(\\\currentTiddler\\\,\\\\\\),\\n\\t\\t\\t\\t\\t\\\index\\\: \\\\\\ + index,\\n\\t\\t\\t\\t\\t\\\revIndex\\\: \\\\\\ + (inputTitles.length - 1 - index),\\n\\t\\t\\t\\t\\t\\\length\\\: \\\\\\ + inputTitles.length\\n\\t\\t\\t\\t}));\\n\\t\\t\\t\\tif(filtered.length && flatten) {\\n\\t\\t\\t\\t\\t$tw.utils.each(filtered,function(value) {\\n\\t\\t\\t\\t\\t\\tresults.push(value);\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults.push(filtered0||\\\\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t++index;\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/or.js\:{\title\:\$:/core/modules/filterrunprefixes/or.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/or.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nEquivalent to a filter run with no prefix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.or function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tresults.pushTop(operationSubFunction(source,widget));\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/reduce.js\:{\title\:\$:/core/modules/filterrunprefixes/reduce.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/reduce.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.reduce function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length > 0) {\\n\\t\\t\\tvar accumulator \\\\\\,\\n\\t\\t\\t\\tindex 0;\\n\\t\\t\\tresults.each(function(title) {\\n\\t\\t\\t\\tvar list operationSubFunction(options.wiki.makeTiddlerIterator(title),widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\t\\\..currentTiddler\\\: widget.getVariable(\\\currentTiddler\\\),\\n\\t\\t\\t\\t\\t\\\index\\\: \\\\\\ + index,\\n\\t\\t\\t\\t\\t\\\revIndex\\\: \\\\\\ + (results.length - 1 - index),\\n\\t\\t\\t\\t\\t\\\length\\\: \\\\\\ + results.length,\\n\\t\\t\\t\\t\\t\\\accumulator\\\: \\\\\\ + accumulator\\n\\t\\t\\t\\t}));\\n\\t\\t\\t\\tif(list.length > 0) {\\n\\t\\t\\t\\t\\taccumulator \\\\\\ + list0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t++index;\\n\\t\\t\\t});\\n\\t\\t\\tresults.clear();\\n\\t\\t\\tresults.push(accumulator);\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/sort.js\:{\title\:\$:/core/modules/filterrunprefixes/sort.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/sort.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.sort function(operationSubFunction,options) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length > 0) {\\n\\t\\t\\tvar suffixes options.suffixes,\\n\\t\\t\\t\\tsortType (suffixes0 && suffixes00) ? suffixes00 : \\\string\\\,\\n\\t\\t\\t\\tinvert suffixes1 ? (suffixes1.indexOf(\\\reverse\\\) ! -1) : false,\\n\\t\\t\\t\\tisCaseSensitive suffixes1 ? (suffixes1.indexOf(\\\casesensitive\\\) ! -1) : false,\\n\\t\\t\\t\\tinputTitles results.toArray(),\\n\\t\\t\\t\\tsortKeys ,\\n\\t\\t\\t\\tindexes new Array(inputTitles.length),\\n\\t\\t\\t\\tcompareFn;\\n\\t\\t\\tresults.each(function(title) {\\n\\t\\t\\t\\tvar key operationSubFunction(options.wiki.makeTiddlerIterator(title),widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\t\\\..currentTiddler\\\: widget.getVariable(\\\currentTiddler\\\)\\n\\t\\t\\t\\t}));\\n\\t\\t\\t\\tsortKeys.push(key0 || \\\\\\);\\n\\t\\t\\t});\\n\\t\\t\\tresults.clear();\\n\\t\\t\\t// Prepare an array of indexes to sort\\n\\t\\t\\tfor(var t0; t\u003CinputTitles.length; t++) {\\n\\t\\t\\t\\tindexest t;\\n\\t\\t\\t}\\n\\t\\t\\t// Sort the indexes\\n\\t\\t\\tcompareFn $tw.utils.makeCompareFunction(sortType,{defaultType: \\\string\\\, invert:invert, isCaseSensitive:isCaseSensitive});\\n\\t\\t\\tindexes indexes.sort(function(a,b) {\\n\\t\\t\\t\\t\\treturn compareFn(sortKeysa,sortKeysb);\\n\\t\\t\\t});\\n\\t\\t\\t// Add to results in correct order\\n\\t\\t\\t$tw.utils.each(indexes,function(index) {\\n\\t\\t\\t\\tresults.push(inputTitlesindex);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filterrunprefixes/then.js\:{\title\:\$:/core/modules/filterrunprefixes/then.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filterrunprefixes/then.js\\ntype: application/javascript\\nmodule-type: filterrunprefix\\n\\nReplace results of previous runs unless empty\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter prefix function\\n*/\\nexports.then function(operationSubFunction) {\\n\\treturn function(results,source,widget) {\\n\\t\\tif(results.length ! 0) {\\n\\t\\t\\t// Only run if previous run(s) produced results\\n\\t\\t\\tvar thisRunResult operationSubFunction(source,widget);\\n\\t\\t\\tif(thisRunResult.length ! 0) {\\n\\t\\t\\t\\t// Replace results only if this run actually produces a result\\n\\t\\t\\t\\tresults.clear();\\n\\t\\t\\t\\tresults.pushTop(thisRunResult);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filterrunprefix\},\$:/core/modules/filters/addprefix.js\:{\title\:\$:/core/modules/filters/addprefix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/addprefix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for adding a prefix to each title in the list. This is\\nespecially useful in contexts where only a filter expression is allowed\\nand macro substitution isnt available.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.addprefix function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(operator.operand + title);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/addsuffix.js\:{\title\:\$:/core/modules/filters/addsuffix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/addsuffix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for adding a suffix to each title in the list. This is\\nespecially useful in contexts where only a filter expression is allowed\\nand macro substitution isnt available.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.addsuffix function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title + operator.operand);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/after.js\:{\title\:\$:/core/modules/filters/after.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/after.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.after function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tvar index results.indexOf(operator.operand);\\n\\tif(index -1 || index > (results.length - 2)) {\\n\\t\\treturn ;\\n\\t} else {\\n\\t\\treturn resultsindex + 1;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/all/current.js\:{\title\:\$:/core/modules/filters/all/current.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/current.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for allcurrent\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.current function(source,prefix,options) {\\n\\tvar currTiddlerTitle options.widget && options.widget.getVariable(\\\currentTiddler\\\);\\n\\tif(currTiddlerTitle) {\\n\\t\\treturn currTiddlerTitle;\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all/missing.js\:{\title\:\$:/core/modules/filters/all/missing.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/missing.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for allmissing\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.missing function(source,prefix,options) {\\n\\treturn options.wiki.getMissingTitles();\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all/orphans.js\:{\title\:\$:/core/modules/filters/all/orphans.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/orphans.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for allorphans\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.orphans function(source,prefix,options) {\\n\\treturn options.wiki.getOrphanTitles();\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all/shadows.js\:{\title\:\$:/core/modules/filters/all/shadows.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/shadows.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for allshadows\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.shadows function(source,prefix,options) {\\n\\treturn options.wiki.allShadowTitles();\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all/tags.js\:{\title\:\$:/core/modules/filters/all/tags.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/tags.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for alltags\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tags function(source,prefix,options) {\\n\\treturn Object.keys(options.wiki.getTagMap());\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all/tiddlers.js\:{\title\:\$:/core/modules/filters/all/tiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all/tiddlers.js\\ntype: application/javascript\\nmodule-type: allfilteroperator\\n\\nFilter function for alltiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tiddlers function(source,prefix,options) {\\n\\treturn options.wiki.allTitles();\\n};\\n\,\type\:\application/javascript\,\module-type\:\allfilteroperator\},\$:/core/modules/filters/all.js\:{\title\:\$:/core/modules/filters/all.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/all.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for selecting tiddlers\\n\\nallshadows+tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar allFilterOperators;\\n\\nfunction getAllFilterOperators() {\\n\\tif(!allFilterOperators) {\\n\\t\\tallFilterOperators {};\\n\\t\\t$tw.modules.applyMethods(\\\allfilteroperator\\\,allFilterOperators);\\n\\t}\\n\\treturn allFilterOperators;\\n}\\n\\n/*\\nExport our filter function\\n*/\\nexports.all function(source,operator,options) {\\n\\t// Check for common optimisations\\n\\tvar subops operator.operand.split(\\\+\\\);\\n\\tif(subops.length 1 && subops0 \\\\\\) {\\n\\t\\treturn source;\\n\\t} else if(subops.length 1 && subops0 \\\tiddlers\\\) {\\n\\t\\treturn options.wiki.each;\\n\\t} else if(subops.length 1 && subops0 \\\shadows\\\) {\\n\\t\\treturn options.wiki.eachShadow;\\n\\t} else if(subops.length 2 && subops0 \\\tiddlers\\\ && subops1 \\\shadows\\\) {\\n\\t\\treturn options.wiki.eachTiddlerPlusShadows;\\n\\t} else if(subops.length 2 && subops0 \\\shadows\\\ && subops1 \\\tiddlers\\\) {\\n\\t\\treturn options.wiki.eachShadowPlusTiddlers;\\n\\t}\\n\\t// Do it the hard way\\n\\t// Get our suboperators\\n\\tvar allFilterOperators getAllFilterOperators();\\n\\t// Cycle through the suboperators accumulating their results\\n\\tvar results new $tw.utils.LinkedList();\\n\\tfor(var t0; t\u003Csubops.length; t++) {\\n\\t\\tvar subop allFilterOperatorssubopst;\\n\\t\\tif(subop) {\\n\\t\\t\\tresults.pushTop(subop(source,operator.prefix,options));\\n\\t\\t}\\n\\t}\\n\\treturn results.makeTiddlerIterator(options.wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/backlinks.js\:{\title\:\$:/core/modules/filters/backlinks.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/backlinks.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning all the backlinks from a tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.backlinks function(source,operator,options) {\\n\\tvar results new $tw.utils.LinkedList();\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.pushTop(options.wiki.getTiddlerBacklinks(title));\\n\\t});\\n\\treturn results.makeTiddlerIterator(options.wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/backtranscludes.js\:{\title\:\$:/core/modules/filters/backtranscludes.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/backtranscludes.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning all the backtranscludes from a tiddler\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.backtranscludes function(source,operator,options) {\\n\\tvar results new $tw.utils.LinkedList();\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.pushTop(options.wiki.getTiddlerBacktranscludes(title));\\n\\t});\\n\\treturn results.makeTiddlerIterator(options.wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/before.js\:{\title\:\$:/core/modules/filters/before.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/before.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.before function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tvar index results.indexOf(operator.operand);\\n\\tif(index \u003C 0) {\\n\\t\\treturn ;\\n\\t} else {\\n\\t\\treturn resultsindex - 1;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/commands.js\:{\title\:\$:/core/modules/filters/commands.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/commands.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the commands available in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.commands function(source,operator,options) {\\n\\tvar results ;\\n\\t$tw.utils.each($tw.commands,function(commandInfo,name) {\\n\\t\\tresults.push(name);\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/compare.js\:{\title\:\$:/core/modules/filters/compare.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/compare.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nGeneral purpose comparison operator\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.compare function(source,operator,options) {\\n\\tvar suffixes operator.suffixes || ,\\n\\t\\ttype (suffixes0 || )0,\\n\\t\\tmode (suffixes1 || )0,\\n\\t\\ttypeFn $tw.utils.makeCompareFunction(type,{defaultType: \\\number\\\}),\\n\\t\\tmodeFn modesmode || modes.eq,\\n\\t\\tinvert operator.prefix \\\!\\\,\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(modeFn(typeFn(title,operator.operand)) ! invert) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nvar modes {\\n\\t\\\eq\\\: function(value) {return value 0;},\\n\\t\\\ne\\\: function(value) {return value ! 0;},\\n\\t\\\gteq\\\: function(value) {return value > 0;},\\n\\t\\\gt\\\: function(value) {return value > 0;},\\n\\t\\\lteq\\\: function(value) {return value \u003C 0;},\\n\\t\\\lt\\\: function(value) {return value \u003C 0;}\\n}\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/contains.js\:{\title\:\$:/core/modules/filters/contains.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/contains.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for finding values in array fields\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.contains function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tfieldname operator.suffix || \\\list\\\;\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tvar list tiddler.getFieldList(fieldname);\\n\\t\\t\\t\\tif(list.indexOf(operator.operand) -1) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tvar list tiddler.getFieldList(fieldname);\\n\\t\\t\\t\\tif(list.indexOf(operator.operand) ! -1) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/count.js\:{\title\:\$:/core/modules/filters/count.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/count.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the number of entries in the current list.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.count function(source,operator,options) {\\n\\tvar count 0;\\n\\tsource(function(tiddler,title) {\\n\\t\\tcount++;\\n\\t});\\n\\treturn count + \\\\\\;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/crypto.js\:{\title\:\$:/core/modules/filters/crypto.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/crypto.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operators for cryptography, using the Stanford JavaScript library\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.sha256 function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tlength parseInt(operator.operand,10) || 20;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.sha256(title,{length: length}));\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/days.js\:{\title\:\$:/core/modules/filters/days.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/days.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.days function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tfieldName operator.suffix || \\\modified\\\,\\n\\t\\tdayInterval (parseInt(operator.operand,10)||0),\\n\\t\\tdayIntervalSign $tw.utils.sign(dayInterval),\\n\\t\\ttargetTimeStamp (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\\n\\t\\tisWithinDays function(dateField) {\\n\\t\\t\\tvar sign $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\\n\\t\\t\\treturn sign 0 || sign dayIntervalSign;\\n\\t\\t};\\n\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\ttargetTimeStamp targetTimeStamp - 1000*60*60*24*dayIntervalSign;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler && tiddler.fieldsfieldName) {\\n\\t\\t\\t\\tif(!isWithinDays($tw.utils.parseDate(tiddler.fieldsfieldName))) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler && tiddler.fieldsfieldName) {\\n\\t\\t\\t\\tif(isWithinDays($tw.utils.parseDate(tiddler.fieldsfieldName))) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/deserialize.js\:{\title\:\$:/core/modules/filters/deserialize.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/deserialize.js\\ntype: application/javascript\\nmodule-type: filteroperator\\nFilter operator for deserializing string data into JSON representing tiddlers\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\deserialize\\\ function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tdeserializer;\\n\\tif(operator.operand) {\\n\\t\\t// Get the deserializer identified by the operand\\n\\t\\tdeserializer $tw.Wiki.tiddlerDeserializerModulesoperator.operand;\\n\\t\\tif(deserializer) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tvar tiddlers;\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\ttiddlers deserializer(title);\\n\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\t// Return an empty array if we could not extract any tiddlers\\n\\t\\t\\t\\t\\ttiddlers ;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tresults.push(JSON.stringify(tiddlers));\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\treturn $tw.language.getString(\\\Error/DeserializeOperator/UnknownDeserializer\\\);\\n\\t\\t}\\n\\t} else {\\n\\t\\treturn $tw.language.getString(\\\Error/DeserializeOperator/MissingOperand\\\);\\n\\t}\\n\\treturn results;\\n}\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/deserializers.js\:{\title\:\$:/core/modules/filters/deserializers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/deserializers.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the deserializers in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.deserializers function(source,operator,options) {\\n\\tvar results ;\\n\\t$tw.utils.each($tw.Wiki.tiddlerDeserializerModules,function(deserializer,type) {\\n\\t\\tresults.push(type);\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/duplicateslugs.js\:{\title\:\$:/core/modules/filters/duplicateslugs.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/duplicateslugs.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter function for duplicateslugs\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.duplicateslugs function(source,operator,options) {\\n\\tvar slugs Object.create(null), // Hashmap by slug of title, replaced with \\\true\\\ if the duplicate title has already been output\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar slug options.wiki.slugify(title);\\n\\t\\tif(slug in slugs) {\\n\\t\\t\\tif(slugsslug ! true) {\\n\\t\\t\\t\\tresults.push(slugsslug);\\n\\t\\t\\t\\tslugsslug true;\\n\\t\\t\\t}\\n\\t\\t\\tresults.push(title);\\n\\t\\t} else {\\n\\t\\t\\tslugsslug title;\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/each.js\:{\title\:\$:/core/modules/filters/each.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/each.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that selects one tiddler for each unique value of the specified field.\\nWith suffix \\\list\\\, selects all tiddlers that are values in a specified list field.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.each function(source,operator,options) {\\n\\tvar results ,\\n\\tvalue,values {},\\n\\tfield operator.operand || \\\title\\\;\\n\\tif(operator.suffix \\\value\\\ && field \\\title\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!$tw.utils.hop(values,title)) {\\n\\t\\t\\t\\tvaluestitle true;\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else if(operator.suffix ! \\\list-item\\\) {\\n\\t\\tif(field \\\title\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler && !$tw.utils.hop(values,title)) {\\n\\t\\t\\t\\t\\tvaluestitle true;\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvalue tiddler.getFieldString(field);\\n\\t\\t\\t\\t\\tif(!$tw.utils.hop(values,value)) {\\n\\t\\t\\t\\t\\t\\tvaluesvalue true;\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t$tw.utils.each(\\n\\t\\t\\t\\t\\toptions.wiki.getTiddlerList(title,field),\\n\\t\\t\\t\\t\\tfunction(value) {\\n\\t\\t\\t\\t\\t\\tif(!$tw.utils.hop(values,value)) {\\n\\t\\t\\t\\t\\t\\t\\tvaluesvalue true;\\n\\t\\t\\t\\t\\t\\t\\tresults.push(value);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/eachday.js\:{\title\:\$:/core/modules/filters/eachday.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/eachday.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that selects one tiddler for each unique day covered by the specified date field\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.eachday function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tvalues ,\\n\\t\\tfieldName operator.operand || \\\modified\\\;\\n\\t// Function to convert a date/time to a date integer\\n\\tvar toDate function(value) {\\n\\t\\tvalue (new Date(value)).setHours(0,0,0,0);\\n\\t\\treturn value+0;\\n\\t};\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(tiddler && tiddler.fieldsfieldName) {\\n\\t\\t\\tvar value toDate($tw.utils.parseDate(tiddler.fieldsfieldName));\\n\\t\\t\\tif(values.indexOf(value) -1) {\\n\\t\\t\\t\\tvalues.push(value);\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/editiondescription.js\:{\title\:\$:/core/modules/filters/editiondescription.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/editiondescription.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the descriptions of the specified edition names\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.editiondescription function(source,operator,options) {\\n\\tvar results ;\\n\\tif($tw.node) {\\n\\t\\tvar editionInfo $tw.utils.getEditionInfo();\\n\\t\\tif(editionInfo) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif($tw.utils.hop(editionInfo,title)) {\\n\\t\\t\\t\\t\\tresults.push(editionInfotitle.description || \\\\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/editions.js\:{\title\:\$:/core/modules/filters/editions.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/editions.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the available editions in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.editions function(source,operator,options) {\\n\\tvar results ;\\n\\tif($tw.node) {\\n\\t\\tvar editionInfo $tw.utils.getEditionInfo();\\n\\t\\tif(editionInfo) {\\n\\t\\t\\t$tw.utils.each(editionInfo,function(info,name) {\\n\\t\\t\\t\\tresults.push(name);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\tresults.sort();\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/else.js\:{\title\:\$:/core/modules/filters/else.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/else.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.else function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tif(results.length 0) {\\n\\t\\treturn operator.operand;\\n\\t} else {\\n\\t\\treturn results;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/decodeuricomponent.js\:{\title\:\$:/core/modules/filters/decodeuricomponent.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for applying decodeURIComponent() to each item.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter functions\\n*/\\n\\nexports.decodebase64 function(source,operator,options) {\\n\\tvar results ;\\n\\tvar binary operator.suffixes && operator.suffixes0.indexOf(\\\binary\\\) ! -1;\\n\\tvar urlsafe operator.suffixes && operator.suffixes0.indexOf(\\\urlsafe\\\) ! -1;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.base64Decode(title,binary,urlsafe));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.encodebase64 function(source,operator,options) {\\n\\tvar results ;\\n\\tvar binary operator.suffixes && operator.suffixes0.indexOf(\\\binary\\\) ! -1;\\n\\tvar urlsafe operator.suffixes && operator.suffixes0.indexOf(\\\urlsafe\\\) ! -1;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.base64Encode(title,binary,urlsafe));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.decodeuricomponent function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.decodeURIComponentSafe(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.encodeuricomponent function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.encodeURIComponentExtended(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.decodeuri function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.decodeURISafe(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.encodeuri function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(encodeURI(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.decodehtml function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.htmlDecode(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.encodehtml function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.htmlEncode(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.stringify function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.stringify(title,(operator.suffix \\\rawunicode\\\)));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.jsonstringify function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.jsonStringify(title,(operator.suffix \\\rawunicode\\\)));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.escaperegexp function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push($tw.utils.escapeRegExp(title));\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.escapecss function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\t// escape any character with a special meaning in CSS using CSS.escape()\\n\\t\\tresults.push($tw.utils.escapeCSS(title));\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/enlist.js\:{\title\:\$:/core/modules/filters/enlist.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/enlist.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning its operand parsed as a list\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.enlist function(source,operator,options) {\\n\\tvar allowDuplicates false;\\n\\tswitch(operator.suffix) {\\n\\t\\tcase \\\raw\\\:\\n\\t\\t\\tallowDuplicates true;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\dedupe\\\:\\n\\t\\t\\tallowDuplicates false;\\n\\t\\t\\tbreak;\\n\\t}\\n\\tvar list $tw.utils.parseStringArray(operator.operand,allowDuplicates);\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tvar results ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(list.indexOf(title) -1) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn results;\\n\\t} else {\\n\\t\\treturn list;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/field.js\:{\title\:\$:/core/modules/filters/field.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/field.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for comparing fields for equality\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.field function(source,operator,options) {\\n\\tvar results ,indexedResults,\\n\\t\\tfieldname operator.suffix || operator.operator || \\\title\\\;\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tif(operator.regexp) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvar text tiddler.getFieldString(fieldname);\\n\\t\\t\\t\\t\\tif(text ! null && !operator.regexp.exec(text)) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvar text tiddler.getFieldString(fieldname);\\n\\t\\t\\t\\t\\tif(text ! null && text ! operator.operand) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(operator.regexp) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvar text tiddler.getFieldString(fieldname);\\n\\t\\t\\t\\t\\tif(text ! null && !!operator.regexp.exec(text)) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tif(source.byField && operator.operand) {\\n\\t\\t\\t\\tindexedResults source.byField(fieldname,operator.operand);\\n\\t\\t\\t\\tif(indexedResults) {\\n\\t\\t\\t\\t\\treturn indexedResults\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\tvar text tiddler.getFieldString(fieldname);\\n\\t\\t\\t\\t\\tif(text ! null && text operator.operand) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/fields.js\:{\title\:\$:/core/modules/filters/fields.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/fields.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the fields on the selected tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.fields function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tfieldName,\\n\\t\\tsuffixes (operator.suffixes || )0 || ,\\n\\t\\toperand $tw.utils.parseStringArray(operator.operand);\\n\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(tiddler) {\\n\\t\\t\\tif(suffixes.indexOf(\\\include\\\) ! -1) {\\n\\t\\t\\t\\tfor(fieldName in tiddler.fields) {\\n\\t\\t\\t\\t\\t(operand.indexOf(fieldName) ! -1) ? $tw.utils.pushTop(results,fieldName) : \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if (suffixes.indexOf(\\\exclude\\\) ! -1) {\\n\\t\\t\\t\\tfor(fieldName in tiddler.fields) {\\n\\t\\t\\t\\t\\t(operand.indexOf(fieldName) ! -1) ? \\\\\\ : $tw.utils.pushTop(results,fieldName);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} // else if\\n\\t\\t\\telse {\\n\\t\\t\\t\\tfor(fieldName in tiddler.fields) {\\n\\t\\t\\t\\t\\t$tw.utils.pushTop(results,fieldName);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} // else\\n\\t\\t} // if (tiddler)\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/filter.js\:{\title\:\$:/core/modules/filters/filter.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/filter.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning those input titles that pass a subfilter\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.filter function(source,operator,options) {\\n\\tvar filterFn options.wiki.compileFilter(operator.operand),\\n\\t\\tresults ,\\n\\t\\ttarget operator.prefix ! \\\!\\\;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar list filterFn.call(options.wiki,options.wiki.makeTiddlerIterator(title),options.widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\\..currentTiddler\\\: options.widget.getVariable(\\\currentTiddler\\\,\\\\\\)\\n\\t\\t}));\\n\\t\\tif((list.length > 0) target) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/format/date.js\:{\title\:\$:/core/modules/filters/format/date.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format/date.js\\ntype: application/javascript\\nmodule-type: formatfilteroperator\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.date function(source,operand,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar value $tw.utils.parseDate(title);\\n\\t\\tif(value && $tw.utils.isDate(value) && value.toString() ! \\\Invalid Date\\\) {\\n\\t\\t\\tresults.push($tw.utils.formatDateString(value,operand || \\\YYYY MM DD 0hh:0mm\\\));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\formatfilteroperator\},\$:/core/modules/filters/format/json.js\:{\title\:\$:/core/modules/filters/format/json.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format/json.js\\ntype: application/javascript\\nmodule-type: formatfilteroperator\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.json function(source,operand,options) {\\n\\tvar results ,\\n\\t\\tspaces null;\\n\\tif(operand) {\\n\\t\\tspaces /^\\\\d+$/.test(operand) ? parseInt(operand,10) : operand;\\n\\t}\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title);\\n\\t\\ttry {\\n\\t\\t\\tdata JSON.parse(title);\\n\\t\\t} catch(e) {\\n\\t\\t\\tdata undefined;\\n\\t\\t}\\n\\t\\tif(data ! undefined) {\\n\\t\\t\\tresults.push(JSON.stringify(data,null,spaces));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\formatfilteroperator\},\$:/core/modules/filters/format/relativedate.js\:{\title\:\$:/core/modules/filters/format/relativedate.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format/relativedate.js\\ntype: application/javascript\\nmodule-type: formatfilteroperator\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.relativedate function(source,operand,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar value $tw.utils.parseDate(title);\\n\\t\\tif(value && $tw.utils.isDate(value) && value.toString() ! \\\Invalid Date\\\) {\\n\\t\\t\\tresults.push($tw.utils.getRelativeDate((new Date()) - (new Date(value))).description);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\formatfilteroperator\},\$:/core/modules/filters/format/timestamp.js\:{\title\:\$:/core/modules/filters/format/timestamp.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format/timestamp.js\\ntype: application/javascript\\nmodule-type: formatfilteroperator\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.timestamp function(source,operand,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif (title.match(/^-?\\\\d+$/)) {\\n\\t\\t\\tvar value new Date(Number(title));\\n\\t\\t\\tresults.push($tw.utils.formatDateString(value,operand || \\\UTCYYYY0MM0DD0hh0mm0ss0XXX\\\));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\formatfilteroperator\},\$:/core/modules/filters/format/titlelist.js\:{\title\:\$:/core/modules/filters/format/titlelist.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format/titlelist.js\\ntype: application/javascript\\nmodule-type: formatfilteroperator\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.titlelist function(source,operand,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(title && title.length) {\\n\\t\\t\\tresults.push($tw.utils.stringifyList(title));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\formatfilteroperator\},\$:/core/modules/filters/format.js\:{\title\:\$:/core/modules/filters/format.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/format.js\\ntype: application/javascript\\nmodule-type: filteroperator\\nFilter operator for formatting strings\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar formatFilterOperators;\\n\\nfunction getFormatFilterOperators() {\\n\\tif(!formatFilterOperators) {\\n\\t\\tformatFilterOperators {};\\n\\t\\t$tw.modules.applyMethods(\\\formatfilteroperator\\\,formatFilterOperators);\\n\\t}\\n\\treturn formatFilterOperators;\\n}\\n\\n/*\\nExport our filter function\\n*/\\nexports.format function(source,operator,options) {\\n\\t// Dispatch to the correct formatfilteroperator\\n\\tvar formatFilterOperators getFormatFilterOperators();\\n\\tif(operator.suffix) {\\n\\t\\tvar formatFilterOperator formatFilterOperatorsoperator.suffix;\\n\\t\\tif(formatFilterOperator) {\\n\\t\\t\\treturn formatFilterOperator(source,operator.operand,options);\\n\\t\\t} else {\\n\\t\\t\\treturn $tw.language.getString(\\\Error/FormatFilterOperator\\\);\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Return all unchanged if the suffix is missing\\n\\t\\tvar results ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t\\treturn results;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/function.js\:{\title\:\$:/core/modules/filters/function.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/function.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning those input titles that are returned from a function\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.function function(source,operator,options) {\\n\\tvar functionName operator.operands0,\\n\\t\\tparams ,\\n\\t\\tresults;\\n\\t$tw.utils.each(operator.operands.slice(1),function(param) {\\n\\t\\tparams.push({value: param});\\n\\t});\\n\\t// console.log(`Calling ${functionName} with params ${JSON.stringify(params)}`);\\n\\tvar variableInfo options.widget && options.widget.getVariableInfo && options.widget.getVariableInfo(functionName,{params: params, source: source});\\n\\tif(variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.isFunctionDefinition) {\\n\\t\\tresults variableInfo.resultList ? variableInfo.resultList : variableInfo.text;\\n\\t}\\n\\t// Return the input list if the function wasnt found\\n\\tif(!results) {\\n\\t\\tresults ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\t\\n\\t}\\n\\t// console.log(`function ${functionName} with params ${JSON.stringify(params)} results: ${JSON.stringify(results)}`);\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/get.js\:{\title\:\$:/core/modules/filters/get.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/get.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.get function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(tiddler) {\\n\\t\\t\\tvar value tiddler.getFieldString(operator.operand);\\n\\t\\t\\tif(value) {\\n\\t\\t\\t\\tresults.push(value);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/getindex.js\:{\title\:\$:/core/modules/filters/getindex.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/getindex.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nreturns the value at a given index of datatiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.getindex function(source,operator,options) {\\n\\tvar data,title,results ;\\n\\tif(operator.operand){\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\ttitle tiddler ? tiddler.fields.title : title;\\n\\t\\t\\tdata options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\\n\\t\\t\\tif(data) {\\n\\t\\t\\t\\tresults.push(data);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/getvariable.js\:{\title\:\$:/core/modules/filters/getvariable.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/getvariable.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.getvariable function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(options.widget.getVariable(title) || \\\\\\);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/has.js\:{\title\:\$:/core/modules/filters/has.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/has.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking if a tiddler has the specified field or index\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.has function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tinvert operator.prefix \\\!\\\;\\n\\n\\tif(operator.suffix \\\field\\\) {\\n\\t\\tif(invert) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\telse if(operator.suffix \\\index\\\) {\\n\\t\\tif(invert) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(!tiddler || (tiddler && (!$tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler && $tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\telse {\\n\\t\\tif(invert) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fieldsoperator.operand.length 0)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && (tiddler.fieldsoperator.operand.length ! 0)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/haschanged.js\:{\title\:\$:/core/modules/filters/haschanged.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/haschanged.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returns tiddlers from the list that have a non-zero changecount.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.haschanged function(source,operator,options) {\\n\\tvar results ;\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.getChangeCount(title) 0) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.getChangeCount(title) > 0) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/indexes.js\:{\title\:\$:/core/modules/filters/indexes.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/indexes.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the indexes of a data tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.indexes function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data options.wiki.getTiddlerDataCached(title);\\n\\t\\tif(data) {\\n\\t\\t\\t$tw.utils.pushTop(results,Object.keys(data));\\n\\t\\t}\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/insertafter.js\:{\title\:\$:/core/modules/filters/insertafter.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/insertafter.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nInsert an item after another item in a list\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nOrder a list\\n*/\\nexports.insertafter function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tvar target operator.operands1 || (options.widget && options.widget.getVariable(operator.suffix || \\\currentTiddler\\\));\\n\\tif(target ! operator.operand) {\\n\\t\\t// Remove the entry from the list if it is present\\n\\t\\tvar pos results.indexOf(operator.operand);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tresults.splice(pos,1);\\n\\t\\t}\\n\\t\\t// Insert the entry after the target marker\\n\\t\\tpos results.indexOf(target);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tresults.splice(pos+1,0,operator.operand);\\n\\t\\t} else {\\n\\t\\t\\tvar suffix operator.operands.length > 1 ? operator.suffix : \\\\\\;\\n\\t\\t\\tif(suffix \\\start\\\) {\\n\\t\\t\\t\\tresults.splice(0,0,operator.operand);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tresults.push(operator.operand);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/insertbefore.js\:{\title\:\$:/core/modules/filters/insertbefore.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/insertbefore.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nInsert an item before another item in a list\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nOrder a list\\n*/\\nexports.insertbefore function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tvar target operator.operands1 || (options.widget && options.widget.getVariable(operator.suffix || \\\currentTiddler\\\));\\n\\tif(target ! operator.operand) {\\n\\t\\t// Remove the entry from the list if it is present\\n\\t\\tvar pos results.indexOf(operator.operand);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tresults.splice(pos,1);\\n\\t\\t}\\n\\t\\t// Insert the entry before the target marker\\n\\t\\tpos results.indexOf(target);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tresults.splice(pos,0,operator.operand);\\n\\t\\t} else {\\n\\t\\t\\tvar suffix operator.operands.length > 1 ? operator.suffix : \\\\\\;\\n\\t\\t\\tif(suffix \\\start\\\) {\\n\\t\\t\\t\\tresults.splice(0,0,operator.operand);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tresults.push(operator.operand);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/is/binary.js\:{\title\:\$:/core/modules/filters/is/binary.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/binary.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isbinary\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.binary function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.isBinaryTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.isBinaryTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/blank.js\:{\title\:\$:/core/modules/filters/is/blank.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/blank.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isblank\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.blank function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!title) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/current.js\:{\title\:\$:/core/modules/filters/is/current.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/current.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for iscurrent\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.current function(source,prefix,options) {\\n\\tvar results ,\\n\\t\\tcurrTiddlerTitle options.widget && options.widget.getVariable(\\\currentTiddler\\\);\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title ! currTiddlerTitle) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title currTiddlerTitle) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/draft.js\:{\title\:\$:/core/modules/filters/is/draft.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/draft.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isdraft analagous to hasdraft.of\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.draft function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!tiddler || !tiddler.isDraft()) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler && tiddler.isDraft()) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/image.js\:{\title\:\$:/core/modules/filters/is/image.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/image.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isimage\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.image function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.isImageTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.isImageTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/missing.js\:{\title\:\$:/core/modules/filters/is/missing.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/missing.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for ismissing\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.missing function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.tiddlerExists(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.tiddlerExists(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/orphan.js\:{\title\:\$:/core/modules/filters/is/orphan.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/orphan.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isorphan\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.orphan function(source,prefix,options) {\\n\\tvar results ,\\n\\t\\torphanTitles options.wiki.getOrphanTitles();\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(orphanTitles.indexOf(title) -1) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(orphanTitles.indexOf(title) ! -1) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/shadow.js\:{\title\:\$:/core/modules/filters/is/shadow.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/shadow.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isshadow\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.shadow function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.isShadowTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.isShadowTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/system.js\:{\title\:\$:/core/modules/filters/is/system.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/system.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for issystem\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.system function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.isSystemTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.isSystemTiddler(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/tag.js\:{\title\:\$:/core/modules/filters/is/tag.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/tag.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for istag\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tag function(source,prefix,options) {\\n\\tvar results ,\\n\\t\\ttagMap options.wiki.getTagMap();\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!$tw.utils.hop(tagMap,title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif($tw.utils.hop(tagMap,title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/tiddler.js\:{\title\:\$:/core/modules/filters/is/tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/tiddler.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for istiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tiddler function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!options.wiki.tiddlerExists(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.wiki.tiddlerExists(title)) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is/variable.js\:{\title\:\$:/core/modules/filters/is/variable.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is/variable.js\\ntype: application/javascript\\nmodule-type: isfilteroperator\\n\\nFilter function for isvariable\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.variable function(source,prefix,options) {\\n\\tvar results ;\\n\\tif(prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.widget.getVariable(title) undefined) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(options.widget.getVariable(title) ! undefined) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\isfilteroperator\},\$:/core/modules/filters/is.js\:{\title\:\$:/core/modules/filters/is.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/is.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking tiddler properties\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar isFilterOperators;\\n\\nfunction getIsFilterOperators() {\\n\\tif(!isFilterOperators) {\\n\\t\\tisFilterOperators {};\\n\\t\\t$tw.modules.applyMethods(\\\isfilteroperator\\\,isFilterOperators);\\n\\t}\\n\\treturn isFilterOperators;\\n}\\n\\n/*\\nExport our filter function\\n*/\\nexports.is function(source,operator,options) {\\n\\t// Dispatch to the correct isfilteroperator\\n\\tvar isFilterOperators getIsFilterOperators();\\n\\tif(operator.operand) {\\n\\t\\tvar isFilterOperator isFilterOperatorsoperator.operand;\\n\\t\\tif(isFilterOperator) {\\n\\t\\t\\treturn isFilterOperator(source,operator.prefix,options);\\n\\t\\t} else {\\n\\t\\t\\treturn $tw.language.getString(\\\Error/IsFilterOperator\\\);\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Return all tiddlers if the operand is missing\\n\\t\\tvar results ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t\\treturn results;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/json-ops.js\:{\title\:\$:/core/modules/filters/json-ops.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/json-ops.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operators for JSON operations\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports\\\jsonget\\\ function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title,title);\\n\\t\\tif(data) {\\n\\t\\t\\tvar items getDataItemValueAsStrings(data,operator.operands);\\n\\t\\t\\tif(items ! undefined) {\\n\\t\\t\\t\\tresults.push.apply(results,items);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports\\\jsonextract\\\ function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title,title);\\n\\t\\tif(data) {\\n\\t\\t\\tvar item getDataItem(data,operator.operands);\\n\\t\\t\\tif(item ! undefined) {\\n\\t\\t\\t\\tresults.push(JSON.stringify(item));\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports\\\jsonindexes\\\ function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title,title);\\n\\t\\tif(data) {\\n\\t\\t\\tvar items getDataItemKeysAsStrings(data,operator.operands);\\n\\t\\t\\tif(items ! undefined) {\\n\\t\\t\\t\\tresults.push.apply(results,items);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports\\\jsontype\\\ function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title,title);\\n\\t\\tif(data) {\\n\\t\\t\\tvar item getDataItemType(data,operator.operands);\\n\\t\\t\\tif(item ! undefined) {\\n\\t\\t\\t\\tresults.push(item);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports\\\jsonset\\\ function(source,operator,options) {\\n\\tvar suffixes operator.suffixes || ,\\n\\t\\ttype suffixes0 && suffixes00,\\n\\t\\tindexes operator.operands.slice(0,-1),\\n\\t\\tvalue operator.operandsoperator.operands.length - 1,\\n\\t\\tresults ;\\n\\tif(operator.operands.length 1 && operator.operands0 \\\\\\) {\\n\\t\\tvalue undefined; // Prevents the value from being assigned\\n\\t}\\n\\tswitch(type) {\\n\\t\\tcase \\\string\\\:\\n\\t\\t\\t// Use value unchanged\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\boolean\\\:\\n\\t\\t\\tvalue (value \\\true\\\ ? true : (value \\\false\\\ ? false : undefined));\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\number\\\:\\n\\t\\t\\tvalue $tw.utils.parseNumber(value);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\array\\\:\\n\\t\\t\\tindexes operator.operands;\\n\\t\\t\\tvalue ;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\object\\\:\\n\\t\\t\\tindexes operator.operands;\\n\\t\\t\\tvalue {};\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\null\\\:\\n\\t\\t\\tindexes operator.operands;\\n\\t\\t\\tvalue null;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\json\\\:\\n\\t\\t\\tvalue $tw.utils.parseJSONSafe(value,function() {return undefined;});\\n\\t\\t\\tbreak;\\n\\t\\tdefault:\\n\\t\\t\\t// Use value unchanged\\n\\t\\t\\tbreak;\\n\\t}\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar data $tw.utils.parseJSONSafe(title,title);\\n\\t\\tif(data) {\\n\\t\\t\\tdata setDataItem(data,indexes,value);\\n\\t\\t\\tresults.push(JSON.stringify(data));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\n/*\\nGiven a JSON data structure and an array of index strings, return an array of the string representation of the values at the end of the index chain, or \\\undefined\\\ if any of the index strings are invalid\\n*/\\nfunction getDataItemValueAsStrings(data,indexes) {\\n\\t// Get the item\\n\\tvar item getDataItem(data,indexes);\\n\\t// Return the item as a string list\\n\\treturn convertDataItemValueToStrings(item);\\n}\\n\\n/*\\nGiven a JSON data structure and an array of index strings, return an array of the string representation of the keys of the item at the end of the index chain, or \\\undefined\\\ if any of the index strings are invalid\\n*/\\nfunction getDataItemKeysAsStrings(data,indexes) {\\n\\t// Get the item\\n\\tvar item getDataItem(data,indexes);\\n\\t// Return the item keys as a string\\n\\treturn convertDataItemKeysToStrings(item);\\n}\\n\\n/*\\nReturn an array of the string representation of the values of a data item, or \\\undefined\\\ if the item is undefined\\n*/\\nfunction convertDataItemValueToStrings(item) {\\n\\t// Return the item as a string\\n\\tif(item undefined) {\\n\\t\\treturn undefined;\\n\\t} else if(item null) {\\n\\t\\treturn \\\null\\\\\n\\t} else if(typeof item \\\object\\\) {\\n\\t\\tvar results ,i,t;\\n\\t\\tif($tw.utils.isArray(item)) {\\n\\t\\t\\t// Return all the items in arrays recursively\\n\\t\\t\\tfor(i0; i\u003Citem.length; i++) {\\n\\t\\t\\t\\tt convertDataItemValueToStrings(itemi)\\n\\t\\t\\t\\tif(t ! undefined) {\\n\\t\\t\\t\\t\\tresults.push.apply(results,t);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t// Return all the values in objects recursively\\n\\t\\t\\t$tw.utils.each(Object.keys(item).sort(),function(key) {\\n\\t\\t\\t\\tt convertDataItemValueToStrings(itemkey);\\n\\t\\t\\t\\tif(t ! undefined) {\\n\\t\\t\\t\\t\\tresults.push.apply(results,t);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\treturn results;\\n\\t}\\n\\treturn item.toString();\\n}\\n\\n/*\\nReturn an array of the string representation of the keys of a data item, or \\\undefined\\\ if the item is undefined\\n*/\\nfunction convertDataItemKeysToStrings(item) {\\n\\t// Return the item as a string\\n\\tif(item undefined) {\\n\\t\\treturn item;\\n\\t} else if(typeof item \\\object\\\) {\\n\\t\\tif(item null) {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t\\tvar results ;\\n\\t\\tif($tw.utils.isArray(item)) {\\n\\t\\t\\tfor(var i0; i\u003Citem.length; i++) {\\n\\t\\t\\t\\tresults.push(i.toString());\\n\\t\\t\\t}\\n\\t\\t\\treturn results;\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.each(Object.keys(item).sort(),function(key) {\\n\\t\\t\\t\\tresults.push(key);\\n\\t\\t\\t});\\n\\t\\t\\treturn results;\\n\\t\\t}\\n\\t}\\n\\treturn ;\\n}\\n\\nfunction getDataItemType(data,indexes) {\\n\\t// Get the item\\n\\tvar item getDataItem(data,indexes);\\n\\t// Return the item type\\n\\tif(item undefined) {\\n\\t\\treturn item;\\n\\t} else if(item null) {\\n\\t\\treturn \\\null\\\;\\n\\t} else if($tw.utils.isArray(item)) {\\n\\t\\treturn \\\array\\\;\\n\\t} else if(typeof item \\\object\\\) {\\n\\t\\treturn \\\object\\\;\\n\\t} else {\\n\\t\\treturn typeof item;\\n\\t}\\n}\\n\\nfunction getItemAtIndex(item,index) {\\n\\tif($tw.utils.hop(item,index)) {\\n\\t\\treturn itemindex;\\n\\t} else if($tw.utils.isArray(item)) {\\n\\t\\tindex $tw.utils.parseInt(index);\\n\\t\\tif(index \u003C 0) { index index + item.length };\\n\\t\\treturn itemindex; // Will be undefined if index was out-of-bounds\\n\\t} else {\\n\\t\\treturn undefined;\\n\\t}\\n}\\n\\n/*\\nGiven a JSON data structure and an array of index strings, return the value at the end of the index chain, or \\\undefined\\\ if any of the index strings are invalid\\n*/\\nfunction getDataItem(data,indexes) {\\n\\tif(indexes.length 0 || (indexes.length 1 && indexes0 \\\\\\)) {\\n\\t\\treturn data;\\n\\t}\\n\\t// Get the item\\n\\tvar item data;\\n\\tfor(var i0; i\u003Cindexes.length; i++) {\\n\\t\\tif(item ! undefined) {\\n\\t\\t\\tif(item ! null && \\\number\\\,\\\string\\\,\\\boolean\\\.indexOf(typeof item) -1) {\\n\\t\\t\\t\\titem getItemAtIndex(item,indexesi);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\titem undefined;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn item;\\n}\\n\\n/*\\nGiven a JSON data structure, an array of index strings and a value, return the data structure with the value added at the end of the index chain. If any of the index strings are invalid then the JSON data structure is returned unmodified. If the root item is targetted then a different data object will be returned\\n*/\\nfunction setDataItem(data,indexes,value) {\\n\\t// Ignore attempts to assign undefined\\n\\tif(value undefined) {\\n\\t\\treturn data;\\n\\t}\\n\\t// Check for the root item\\n\\tif(indexes.length 0 || (indexes.length 1 && indexes0 \\\\\\)) {\\n\\t\\treturn value;\\n\\t}\\n\\t// Traverse the JSON data structure using the index chain\\n\\tvar current data;\\n\\tfor(var i 0; i \u003C indexes.length - 1; i++) {\\n\\t\\tcurrent getItemAtIndex(current,indexesi);\\n\\t\\tif(current undefined) {\\n\\t\\t\\t// Return the original JSON data structure if any of the index strings are invalid\\n\\t\\t\\treturn data;\\n\\t\\t}\\n\\t}\\n\\t// Add the value to the end of the index chain\\n\\tvar lastIndex indexesindexes.length - 1;\\n\\tif($tw.utils.isArray(current)) {\\n\\t\\tlastIndex $tw.utils.parseInt(lastIndex);\\n\\t\\tif(lastIndex \u003C 0) { lastIndex lastIndex + current.length };\\n\\t}\\n\\t// Only set indexes on objects and arrays\\n\\tif(typeof current \\\object\\\) {\\n\\t\\tcurrentlastIndex value;\\n\\t}\\n\\treturn data;\\n}\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/limit.js\:{\title\:\$:/core/modules/filters/limit.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/limit.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for chopping the results to a specified maximum number of entries\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.limit function(source,operator,options) {\\n\\tvar results ;\\n\\t// Convert to an array\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\t// Slice the array if necessary\\n\\tvar limit Math.min(results.length,parseInt(operator.operand,10));\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tresults results.slice(-limit);\\n\\t} else {\\n\\t\\tresults results.slice(0,limit);\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/links.js\:{\title\:\$:/core/modules/filters/links.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/links.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning all the links from a tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.links function(source,operator,options) {\\n\\tvar results new $tw.utils.LinkedList();\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.pushTop(options.wiki.getTiddlerLinks(title));\\n\\t});\\n\\treturn results.makeTiddlerIterator(options.wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/list.js\:{\title\:\$:/core/modules/filters/list.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/list.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.list function(source,operator,options) {\\n\\tvar results ,\\n\\t\\ttr $tw.utils.parseTextReference(operator.operand),\\n\\t\\tcurrTiddlerTitle options.widget && options.widget.getVariable(\\\currentTiddler\\\),\\n\\t\\tlist options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(list.indexOf(title) -1) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tresults list;\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/listed.js\:{\title\:\$:/core/modules/filters/listed.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/listed.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning all tiddlers that have the selected tiddlers in a list\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.listed function(source,operator,options) {\\n\\tvar field operator.operand || \\\list\\\,\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/listops.js\:{\title\:\$:/core/modules/filters/listops.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/listops.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operators for manipulating the current selection list\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nOrder a list\\n*/\\nexports.order function(source,operator,options) {\\n\\tvar results ;\\n\\tif(operator.operand.toLowerCase() \\\reverse\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.unshift(title);\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\\n/*\\nReverse list\\n*/\\nexports.reverse function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.unshift(title);\\n\\t});\\n\\treturn results;\\n};\\n\\n/*\\nFirst entry/entries in list\\n*/\\nexports.first function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,1),\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results.slice(0,count);\\n};\\n\\n/*\\nLast entry/entries in list\\n*/\\nexports.last function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,1),\\n\\t\\tresults ;\\n\\tif(count 0) return results;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results.slice(-count);\\n};\\n\\n/*\\nAll but the first entry/entries of the list\\n*/\\nexports.rest function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,1),\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results.slice(count);\\n};\\nexports.butfirst exports.rest;\\nexports.bf exports.rest;\\n\\n/*\\nAll but the last entry/entries of the list\\n*/\\nexports.butlast function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,1),\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\tvar index count 0 ? results.length : -count;\\n\\treturn results.slice(0,index);\\n};\\nexports.bl exports.butlast;\\n\\n/*\\nThe nth member of the list\\n*/\\nexports.nth function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,1),\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results.slice(count - 1,count);\\n};\\n\\n/*\\nThe zero based nth member of the list\\n*/\\nexports.zth function(source,operator,options) {\\n\\tvar count $tw.utils.getInt(operator.operand,0),\\n\\t\\tresults ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results.slice(count,count + 1);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/lookup.js\:{\title\:\$:/core/modules/filters/lookup.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/lookup.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that looks up values via a title prefix\\n\\nlookup:\u003Cdefaultvalue>:\u003Cfield OR index>\u003Cprefix>,\u003Cfield-name OR index-name>\\n\\nPrepends the prefix to the selected items and returns the specified \\nfield or index value. If the 2nd suffix does not exist, it defaults to field.\\nIf the second operand is missing it defaults to \\\text\\\ for fields, and \\\0\\\ for indexes\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.lookup function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes operator.suffixes || ,\\n\\t\\tdefaultSuffix suffixes0 ? (suffixes00 || \\\\\\) : \\\\\\,\\n\\t\\tindexSuffix (suffixes1 && suffixes10 \\\index\\\) ? true : false,\\n\\t\\ttarget;\\n\\tif(operator.operands.length 2) {\\n\\t\\ttarget operator.operands1\\n\\t} else {\\n\\t\\ttarget indexSuffix ? \\\0\\\: \\\text\\\;\\n\\t}\\n\\tif(indexSuffix) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tvar data options.wiki.extractTiddlerDataItem(operator.operands0+title,target,defaultSuffix);\\n\\t\\t\\tresults.push(data);\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tvar value defaultSuffix;\\n\\t\\t\\tvar targetTiddler options.wiki.getTiddler(operator.operands0+title);\\n\\t\\t\\tif(targetTiddler && targetTiddler.getFieldString(target)) {\\n\\t\\t\\t\\tvalue targetTiddler.getFieldString(target);\\n\\t\\t\\t}\\n\\t\\t\\tresults.push(value);\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/match.js\:{\title\:\$:/core/modules/filters/match.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/match.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking if a title matches a string\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.match function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes (operator.suffixes || )0 || ;\\n\\tif(suffixes.indexOf(\\\caseinsensitive\\\) ! -1) {\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase() ! (operator.operand || \\\\\\).toLowerCase()) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase() (operator.operand || \\\\\\).toLowerCase()) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title ! operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/math.js\:{\title\:\$:/core/modules/filters/math.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/math.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\\n\\nSum/product/maxall/minall operate on the entire list, returning a single item.\\n\\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\\n\\n* \\\\\\ converts to 0\\n* \\\12kk\\\ converts to 12\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.negate makeNumericBinaryOperator(\\n\\tfunction(a) {return -a}\\n);\\n\\nexports.abs makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.abs(a)}\\n);\\n\\nexports.ceil makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.ceil(a)}\\n);\\n\\nexports.floor makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.floor(a)}\\n);\\n\\nexports.round makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.round(a)}\\n);\\n\\nexports.trunc makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.trunc(a)}\\n);\\n\\nexports.untrunc makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\\n);\\n\\nexports.sign makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.sign(a)}\\n);\\n\\nexports.add makeNumericBinaryOperator(\\n\\tfunction(a,b) {return a + b;}\\n);\\n\\nexports.subtract makeNumericBinaryOperator(\\n\\tfunction(a,b) {return a - b;}\\n);\\n\\nexports.multiply makeNumericBinaryOperator(\\n\\tfunction(a,b) {return a * b;}\\n);\\n\\nexports.divide makeNumericBinaryOperator(\\n\\tfunction(a,b) {return a / b;}\\n);\\n\\nexports.remainder makeNumericBinaryOperator(\\n\\tfunction(a,b) {return a % b;}\\n);\\n\\nexports.max makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Math.max(a,b);}\\n);\\n\\nexports.min makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Math.min(a,b);}\\n);\\n\\nexports.fixed makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\\n);\\n\\nexports.precision makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\\n);\\n\\nexports.exponential makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\\n);\\n\\nexports.power makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Math.pow(a,b);}\\n);\\n\\nexports.log makeNumericBinaryOperator(\\n\\tfunction(a,b) {\\n\\t\\tif(b) {\\n\\t\\t\\treturn Math.log(a)/Math.log(b);\\n\\t\\t} else {\\n\\t\\t\\treturn Math.log(a);\\n\\t\\t}\\n\\t}\\n);\\n\\nexports.sum makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return accumulator + value},\\n\\t0 // Initial value\\n);\\n\\nexports.product makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return accumulator * value},\\n\\t1 // Initial value\\n);\\n\\nexports.maxall makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return Math.max(accumulator,value)},\\n\\t-Infinity // Initial value\\n);\\n\\nexports.minall makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return Math.min(accumulator,value)},\\n\\tInfinity // Initial value\\n);\\n\\nexports.median makeNumericArrayOperator(\\n\\tfunction(values) {\\n\\t\\tvar len values.length, median;\\n\\t\\tvalues.sort(function(a,b) {return a-b});\\n\\t\\tif(len % 2) { \\n\\t\\t\\t// Odd, return the middle number\\n\\t\\t\\tmedian values(len - 1) / 2;\\n\\t\\t} else {\\n\\t\\t\\t// Even, return average of two middle numbers\\n\\t\\t\\tmedian (valueslen / 2 - 1 + valueslen / 2) / 2;\\n\\t\\t}\\n\\t\\treturn median;\\n\\t}\\n);\\n\\nexports.average makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return accumulator + value},\\n\\t0, // Initial value\\n\\tfunction(finalValue,numberOfValues) {\\n\\t\\treturn finalValue/numberOfValues;\\n\\t}\\n);\\n\\nexports.variance makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return accumulator + value},\\n\\t0,\\n\\tfunction(finalValue,numberOfValues,originalValues) {\\n\\t\\treturn getVarianceFromArray(originalValues,finalValue/numberOfValues);\\n\\t}\\n);\\n\\nexports\\\standard-deviation\\\ makeNumericReducingOperator(\\n\\tfunction(accumulator,value) {return accumulator + value},\\n\\t0,\\n\\tfunction(finalValue,numberOfValues,originalValues) {\\n\\t\\tvar variance getVarianceFromArray(originalValues,finalValue/numberOfValues);\\n\\t\\treturn Math.sqrt(variance);\\n\\t}\\n);\\n\\n//trigonometry\\nexports.cos makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.cos(a)}\\n);\\n\\nexports.sin makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.sin(a)}\\n);\\n\\nexports.tan makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.tan(a)}\\n);\\n\\nexports.acos makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.acos(a)}\\n);\\n\\nexports.asin makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.asin(a)}\\n);\\n\\nexports.atan makeNumericBinaryOperator(\\n\\tfunction(a) {return Math.atan(a)}\\n);\\n\\nexports.atan2 makeNumericBinaryOperator(\\n\\tfunction(a,b) {return Math.atan2(a,b)}\\n);\\n\\n//Calculate the variance of a population of numbers in an array given its mean\\nfunction getVarianceFromArray(values,mean) {\\n\\tvar deviationTotal values.reduce(function(accumulator,value) {\\n\\t\\treturn accumulator + Math.pow(value - mean, 2);\\n\\t},0);\\n\\treturn deviationTotal/values.length;\\n};\\n\\nfunction makeNumericBinaryOperator(fnCalc) {\\n\\treturn function(source,operator,options) {\\n\\t\\tvar result ,\\n\\t\\t\\tnumOperand $tw.utils.parseNumber(operator.operand);\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\\n\\t\\t});\\n\\t\\treturn result;\\n\\t};\\n};\\n\\nfunction makeNumericReducingOperator(fnCalc,initialValue,fnFinal) {\\n\\tinitialValue initialValue || 0;\\n\\treturn function(source,operator,options) {\\n\\t\\tvar result ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresult.push($tw.utils.parseNumber(title));\\n\\t\\t});\\n\\t\\tvar value result.reduce(function(accumulator,currentValue) {\\n\\t\\t\\t\\treturn fnCalc(accumulator,currentValue);\\n\\t\\t\\t},initialValue);\\n\\t\\tif(fnFinal) {\\n\\t\\t\\tvalue fnFinal(value,result.length,result);\\n\\t\\t}\\n\\t\\treturn $tw.utils.stringifyNumber(value);\\n\\t};\\n};\\n\\nfunction makeNumericArrayOperator(fnCalc) {\\n\\treturn function(source,operator,options) {\\n\\t\\tvar results ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push($tw.utils.parseNumber(title));\\n\\t\\t});\\n\\t\\tresults fnCalc(results);\\n\\t\\t$tw.utils.each(results,function(value,index) {\\n\\t\\t\\tresultsindex $tw.utils.stringifyNumber(value);\\n\\t\\t});\\n\\t\\treturn results;\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/minlength.js\:{\title\:\$:/core/modules/filters/minlength.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/minlength.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for filtering out titles that dont meet the minimum length in the operand\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.minlength function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tminLength parseInt(operator.operand || \\\\\\,10) || 0;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(title.length > minLength) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/moduleproperty.js\:{\title\:\$:/core/modules/filters/moduleproperty.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/moduleproperty.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter module-namemodulepropertyname retrieve a module property\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.moduleproperty function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\ttry {\\n\\t\\t\\tvar value require(title)operator.operand || \\\\\\;\\n\\t\\t\\tif(value ! undefined) {\\n\\t\\t\\t\\tif(typeof value ! \\\string\\\) {\\n\\t\\t\\t\\t\\tvalue JSON.stringify(value);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tresults.push(value);\\n\\t\\t\\t}\\n\\t\\t} catch(e) {\\n\\t\\t\\t// Do nothing. It probably wasnt a module.\\n\\t\\t}\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/modules.js\:{\title\:\$:/core/modules/filters/modules.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/modules.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the titles of the modules of a given type in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.modules function(source,operator,options) {\\n\\tvar results ;\\n\\tif(operator.operands.length > 2) {\\n\\t\\t// Return the modules that have the module property specified in the first operand with the value in the second operand\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t$tw.utils.each($tw.modules.typestitle,function(moduleInfo,moduleName) {\\n\\t\\t\\t\\tif(require(moduleName)operator.operands0 operator.operands1) {\\n\\t\\t\\t\\t\\tresults.push(moduleName);\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t});\\n\\t} else {\\n\\t\\t// Return all the module names without filtering\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t$tw.utils.each($tw.modules.typestitle,function(moduleInfo,moduleName) {\\n\\t\\t\\t\\tresults.push(moduleName);\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/moduletypes.js\:{\title\:\$:/core/modules/filters/moduletypes.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/moduletypes.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the module types in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.moduletypes function(source,operator,options) {\\n\\tvar results ;\\n\\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\\n\\t\\tresults.push(type);\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/next.js\:{\title\:\$:/core/modules/filters/next.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/next.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.next function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tlist options.wiki.getTiddlerList(operator.operand);\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar match list.indexOf(title);\\n\\t\\t// increment match and then test if result is in range\\n\\t\\tmatch++;\\n\\t\\tif(match > 0 && match \u003C list.length) {\\n\\t\\t\\tresults.push(listmatch);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/plugintiddlers.js\:{\title\:\$:/core/modules/filters/plugintiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/plugintiddlers.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the titles of the shadow tiddlers within a plugin\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.plugintiddlers function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar pluginInfo options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:});\\n\\t\\tif(pluginInfo && pluginInfo.tiddlers) {\\n\\t\\t\\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/prefix.js\:{\title\:\$:/core/modules/filters/prefix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/prefix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking if a title starts with a prefix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.prefix function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes (operator.suffixes || )0 || ;\\n\\tif(suffixes.indexOf(\\\caseinsensitive\\\) ! -1) {\\n\\t\\tvar operand operator.operand.toLowerCase();\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase().substr(0,operand.length) ! operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase().substr(0,operand.length) operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.substr(0,operator.operand.length) ! operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.substr(0,operator.operand.length) operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/previous.js\:{\title\:\$:/core/modules/filters/previous.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/previous.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.previous function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tlist options.wiki.getTiddlerList(operator.operand);\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar match list.indexOf(title);\\n\\t\\t// increment match and then test if result is in range\\n\\t\\tmatch--;\\n\\t\\tif(match > 0) {\\n\\t\\t\\tresults.push(listmatch);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/range.js\:{\title\:\$:/core/modules/filters/range.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/range.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for generating a numeric range.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.range function(source,operator,options) {\\n\\tvar results ;\\n\\t// For backwards compatibility, if there is only one operand, try to split it using one of the delimiters\\n\\tvar parts operator.operands || ;\\n\\tif(parts.length 1) {\\n\\t\\tparts operator.operand.split(/,:;/g);\\n\\t}\\n\\t// Process the parts\\n\\tvar beg, end, inc, i, fixed 0;\\n\\tfor (i0; i\u003Cparts.length; i++) {\\n\\t\\t// Validate real number\\n\\t\\tif(!/^\\\\s*+-?((\\\\d+(\\\\.\\\\d*)?)|(\\\\.\\\\d+))\\\\s*$/.test(partsi)) {\\n\\t\\t\\treturn \\\range: bad number \\\\\\\\\\ + partsi + \\\\\\\\\\\\\;\\n\\t\\t}\\n\\t\\t// Count digits; the most precise number determines decimal places in output.\\n\\t\\tvar frac /\\\\.\\\\d+/.exec(partsi);\\n\\t\\tif(frac) {\\n\\t\\t\\tfixed Math.max(fixed,frac0.length-1);\\n\\t\\t}\\n\\t\\tpartsi parseFloat(partsi);\\n\\t}\\n\\tswitch(parts.length) {\\n\\t\\tcase 1:\\n\\t\\t\\tend parts0;\\n\\t\\t\\tif (end > 1) {\\n\\t\\t\\t\\tbeg 1;\\n\\t\\t\\t}\\n\\t\\t\\telse if (end \u003C -1) {\\n\\t\\t\\t\\tbeg -1;\\n\\t\\t\\t}\\n\\t\\t\\telse {\\n\\t\\t\\t\\treturn ;\\n\\t\\t\\t}\\n\\t\\t\\tinc 1;\\n\\t\\t\\tbreak;\\n\\t\\tcase 2:\\n\\t\\t\\tbeg parts0;\\n\\t\\t\\tend parts1;\\n\\t\\t\\tinc 1;\\n\\t\\t\\tbreak;\\n\\t\\tcase 3:\\n\\t\\t\\tbeg parts0;\\n\\t\\t\\tend parts1;\\n\\t\\t\\tinc Math.abs(parts2);\\n\\t\\t\\tbreak;\\n\\t}\\n\\tif(inc 0) {\\n\\t\\treturn \\\range: increment 0 causes infinite loop\\\;\\n\\t}\\n\\t// May need to count backwards\\n\\tvar direction ((end \u003C beg) ? -1 : 1);\\n\\tinc * direction;\\n\\t// Estimate number of resulting elements\\n\\tif((end - beg) / inc > 10000) {\\n\\t\\treturn \\\range: too many steps (over 10K)\\\;\\n\\t}\\n\\t// Avoid rounding error on last step\\n\\tend + direction * 0.5 * Math.pow(0.1,fixed);\\n\\tvar safety 10010;\\n\\t// Enumerate the range\\n\\tif (end\u003Cbeg) {\\n\\t\\tfor(ibeg; i>end; i+inc) {\\n\\t\\t\\tresults.push(i.toFixed(fixed));\\n\\t\\t\\tif(--safety\u003C0) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tfor(ibeg; i\u003Cend; i+inc) {\\n\\t\\t\\tresults.push(i.toFixed(fixed));\\n\\t\\t\\tif(--safety\u003C0) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif(safety\u003C0) {\\n\\t\\treturn \\\range: unexpectedly large output\\\;\\n\\t}\\n\\t// Reverse?\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tresults.reverse();\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/reduce.js\:{\title\:\$:/core/modules/filters/reduce.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/reduce.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator evaluates a subfilter for each item, making the running total available in the variable `accumulator`, and the current index available in the variable `index`\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.reduce function(source,operator,options) {\\n\\t// Accumulate the list\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\t// Run the filter over each item\\n\\tvar filterFn options.wiki.compileFilter(operator.operand),\\n\\t\\taccumulator operator.operands1 || \\\\\\;\\n\\tfor(var index0; index\u003Cresults.length; index++) {\\n\\t\\tvar title resultsindex,\\n\\t\\t\\tlist filterFn.call(options.wiki,options.wiki.makeTiddlerIterator(title),options.widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\t\\\..currentTiddler\\\: options.widget.getVariable(\\\currentTiddler\\\),\\n\\t\\t\\t\\t\\\accumulator\\\: \\\\\\ + accumulator,\\n\\t\\t\\t\\t\\\index\\\: \\\\\\ + index,\\n\\t\\t\\t\\t\\\revIndex\\\: \\\\\\ + (results.length - 1 - index),\\n\\t\\t\\t\\t\\\length\\\: \\\\\\ + results.length\\n\\t\\t\\t}));\\n\\t\\tif(list.length > 0) {\\n\\t\\t\\taccumulator \\\\\\ + list0;\\n\\t\\t}\\n\\t}\\n\\tif(results.length > 0) {\\n\\t\\treturn accumulator;\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/regexp.js\:{\title\:\$:/core/modules/filters/regexp.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/regexp.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for regexp matching\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.regexp function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tfieldname operator.suffix || \\\title\\\,\\n\\t\\tregexpString, regexp, flags \\\\\\, match,\\n\\t\\tgetFieldString function(tiddler,title) {\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\treturn tiddler.getFieldString(fieldname);\\n\\t\\t\\t} else if(fieldname \\\title\\\) {\\n\\t\\t\\t\\treturn title;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn null;\\n\\t\\t\\t}\\n\\t\\t};\\n\\t// Process flags and construct regexp\\n\\tregexpString operator.operand;\\n\\tmatch /^\\\\(\\\\?(gim+)\\\\)/.exec(regexpString);\\n\\tif(match) {\\n\\t\\tflags match1;\\n\\t\\tregexpString regexpString.substr(match0.length);\\n\\t} else {\\n\\t\\tmatch /\\\\(\\\\?(gim+)\\\\)$/.exec(regexpString);\\n\\t\\tif(match) {\\n\\t\\t\\tflags match1;\\n\\t\\t\\tregexpString regexpString.substr(0,regexpString.length - match0.length);\\n\\t\\t}\\n\\t}\\n\\ttry {\\n\\t\\tregexp new RegExp(regexpString,flags);\\n\\t} catch(e) {\\n\\t\\treturn \\\\\\ + e;\\n\\t}\\n\\t// Process the incoming tiddlers\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tvar text getFieldString(tiddler,title);\\n\\t\\t\\tif(text ! null) {\\n\\t\\t\\t\\tif(!regexp.exec(text)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tvar text getFieldString(tiddler,title);\\n\\t\\t\\tif(text ! null) {\\n\\t\\t\\t\\tif(!!regexp.exec(text)) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/removeprefix.js\:{\title\:\$:/core/modules/filters/removeprefix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/removeprefix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.removeprefix function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes (operator.suffixes || )0 || ;\\n\\tif(suffixes.indexOf(\\\caseinsensitive\\\) ! -1) {\\n\\t\\tvar operand operator.operand.toLowerCase();\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title.toLowerCase().substr(0,operand.length) operand) {\\n\\t\\t\\t\\tresults.push(title.substr(operand.length));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title.substr(0,operator.operand.length) operator.operand) {\\n\\t\\t\\t\\tresults.push(title.substr(operator.operand.length));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/removesuffix.js\:{\title\:\$:/core/modules/filters/removesuffix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/removesuffix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.removesuffix function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes (operator.suffixes || )0 || ;\\n\\tif (!operator.operand) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t} else if(suffixes.indexOf(\\\caseinsensitive\\\) ! -1) {\\n\\t\\tvar operand operator.operand.toLowerCase();\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title && title.toLowerCase().substr(-operand.length) operand) {\\n\\t\\t\\t\\tresults.push(title.substr(0,title.length - operand.length));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(title && title.substr(-operator.operand.length) operator.operand) {\\n\\t\\t\\t\\tresults.push(title.substr(0,title.length - operator.operand.length));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/sameday.js\:{\title\:\$:/core/modules/filters/sameday.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/sameday.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.sameday function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tfieldName operator.suffix || \\\modified\\\,\\n\\t\\ttargetDate (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\\n\\t// Function to convert a date/time to a date integer\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(tiddler) {\\n\\t\\t\\tif(tiddler.getFieldDay(fieldName) targetDate) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/search.js\:{\title\:\$:/core/modules/filters/search.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/search.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for searching for the text in the operand tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.search function(source,operator,options) {\\n\\tvar invert operator.prefix \\\!\\\;\\n\\tif(operator.suffixes) {\\n\\t\\tvar hasFlag function(flag) {\\n\\t\\t\\t\\treturn (operator.suffixes1 || ).indexOf(flag) ! -1;\\n\\t\\t\\t},\\n\\t\\t\\texcludeFields false,\\n\\t\\t\\tfieldList operator.suffixes0 || ,\\n\\t\\t\\tfirstField fieldList0 || \\\\\\, \\n\\t\\t\\tfirstChar firstField.charAt(0),\\n\\t\\t\\tfields;\\n\\t\\tif(firstChar \\\-\\\) {\\n\\t\\t\\tfields firstField.slice(1).concat(fieldList.slice(1));\\n\\t\\t\\texcludeFields true;\\n\\t\\t} else if(fieldList0 \\\*\\\){\\n\\t\\t\\tfields ;\\n\\t\\t\\texcludeFields true;\\n\\t\\t} else {\\n\\t\\t\\tfields fieldList.slice(0);\\n\\t\\t}\\n\\t\\treturn options.wiki.search(operator.operand,{\\n\\t\\t\\tsource: source,\\n\\t\\t\\tinvert: invert,\\n\\t\\t\\tfield: fields,\\n\\t\\t\\texcludeField: excludeFields,\\n\\t\\t\\tsome: hasFlag(\\\some\\\),\\n\\t\\t\\tcaseSensitive: hasFlag(\\\casesensitive\\\),\\n\\t\\t\\tliteral: hasFlag(\\\literal\\\),\\n\\t\\t\\twhitespace: hasFlag(\\\whitespace\\\),\\n\\t\\t\\tanchored: hasFlag(\\\anchored\\\),\\n\\t\\t\\tregexp: hasFlag(\\\regexp\\\),\\n\\t\\t\\twords: hasFlag(\\\words\\\)\\n\\t\\t});\\n\\t} else {\\n\\t\\treturn options.wiki.search(operator.operand,{\\n\\t\\t\\tsource: source,\\n\\t\\t\\tinvert: invert\\n\\t\\t});\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/shadowsource.js\:{\title\:\$:/core/modules/filters/shadowsource.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/shadowsource.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the source plugins for shadow tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.shadowsource function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar source options.wiki.getShadowSource(title);\\n\\t\\tif(source) {\\n\\t\\t\\t$tw.utils.pushTop(results,source);\\n\\t\\t}\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/slugify.js\:{\title\:\$:/core/modules/filters/slugify.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/slugify.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for slugifying a tiddler title\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.slugify function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(options.wiki.slugify(title));\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/sort.js\:{\title\:\$:/core/modules/filters/sort.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/sort.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for sorting\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.sort function(source,operator,options) {\\n\\tvar results prepare_results(source);\\n\\toptions.wiki.sortTiddlers(results,operator.operand || \\\title\\\,operator.prefix \\\!\\\,false,false);\\n\\treturn results;\\n};\\n\\nexports.nsort function(source,operator,options) {\\n\\tvar results prepare_results(source);\\n\\toptions.wiki.sortTiddlers(results,operator.operand || \\\title\\\,operator.prefix \\\!\\\,false,true);\\n\\treturn results;\\n};\\n\\nexports.sortan function(source, operator, options) {\\n\\tvar results prepare_results(source);\\n\\toptions.wiki.sortTiddlers(results, operator.operand || \\\title\\\, operator.prefix \\\!\\\,false,false,true);\\n\\treturn results;\\n};\\n\\nexports.sortcs function(source,operator,options) {\\n\\tvar results prepare_results(source);\\n\\toptions.wiki.sortTiddlers(results,operator.operand || \\\title\\\,operator.prefix \\\!\\\,true,false);\\n\\treturn results;\\n};\\n\\nexports.nsortcs function(source,operator,options) {\\n\\tvar results prepare_results(source);\\n\\toptions.wiki.sortTiddlers(results,operator.operand || \\\title\\\,operator.prefix \\\!\\\,true,true);\\n\\treturn results;\\n};\\n\\nvar prepare_results function (source) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(title);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/sortsub.js\:{\title\:\$:/core/modules/filters/sortsub.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/sortsub.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for sorting by a subfilter\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.sortsub function(source,operator,options) {\\n\\t// Compile the subfilter\\n\\tvar filterFn options.wiki.compileFilter(operator.operand);\\n\\t// Collect the input titles and the corresponding sort keys\\n\\tvar inputTitles ,\\n\\t\\tsortKeys ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tinputTitles.push(title);\\n\\t\\tvar r filterFn.call(options.wiki,function(iterator) {\\n\\t\\t\\titerator(options.wiki.getTiddler(title),title);\\n\\t\\t},options.widget.makeFakeWidgetWithVariables({\\n\\t\\t\\t\\\currentTiddler\\\: \\\\\\ + title,\\n\\t\\t\\t\\\..currentTiddler\\\: options.widget.getVariable(\\\currentTiddler\\\)\\n\\t\\t}));\\n\\t\\tsortKeys.push(r0 || \\\\\\);\\n\\t});\\n\\t// Rather than sorting the titles array, well sort the indexes so that we can consult both arrays\\n\\tvar indexes new Array(inputTitles.length);\\n\\tfor(var t0; t\u003CinputTitles.length; t++) {\\n\\t\\tindexest t;\\n\\t}\\n\\t// Sort the indexes\\n\\tvar compareFn $tw.utils.makeCompareFunction(operator.suffix,{defaultType: \\\string\\\,invert: operator.prefix \\\!\\\});\\n\\tindexes indexes.sort(function(a,b) {\\n\\t\\treturn compareFn(sortKeysa,sortKeysb);\\n\\t});\\n\\t// Make the results array in order\\n\\tvar results ;\\n\\t$tw.utils.each(indexes,function(index) {\\n\\t\\tresults.push(inputTitlesindex);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/splitbefore.js\:{\title\:\$:/core/modules/filters/splitbefore.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/splitbefore.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.splitbefore function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar parts title.split(operator.operand);\\n\\t\\tif(parts.length 1) {\\n\\t\\t\\t$tw.utils.pushTop(results,parts0);\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.pushTop(results,parts0 + operator.operand);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/storyviews.js\:{\title\:\$:/core/modules/filters/storyviews.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/storyviews.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the story views in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.storyviews function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tstoryviews {};\\n\\t$tw.modules.applyMethods(\\\storyview\\\,storyviews);\\n\\t$tw.utils.each(storyviews,function(info,name) {\\n\\t\\tresults.push(name);\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/strings.js\:{\title\:\$:/core/modules/filters/strings.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/strings.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\\n\\nSum/product/maxall/minall operate on the entire list, returning a single item.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.length makeStringBinaryOperator(\\n\\tfunction(a) {return \\\\\\ + (\\\\\\ + a).length;}\\n);\\n\\nexports.uppercase makeStringBinaryOperator(\\n\\tfunction(a) {return (\\\\\\ + a).toUpperCase();}\\n);\\n\\nexports.lowercase makeStringBinaryOperator(\\n\\tfunction(a) {return (\\\\\\ + a).toLowerCase();}\\n);\\n\\nexports.sentencecase makeStringBinaryOperator(\\n\\tfunction(a) {return $tw.utils.toSentenceCase(a);}\\n);\\n\\nexports.titlecase makeStringBinaryOperator(\\n\\tfunction(a) {return $tw.utils.toTitleCase(a);}\\n);\\n\\nexports.trim function(source,operator,options) {\\n\\tvar result ,\\n\\t\\tsuffix operator.suffix || \\\\\\,\\n\\t\\toperand (operator.operand || \\\\\\),\\n\\t\\tfnCalc;\\n\\tif(suffix \\\prefix\\\) {\\n\\t\\tfnCalc function(a,b) {return $tw.utils.trimPrefix(a,b);}\\n\\t} else if(suffix \\\suffix\\\) {\\n\\t\\tfnCalc function(a,b) {return $tw.utils.trimSuffix(a,b);}\\n\\t} else {\\n\\t\\tif(operand \\\\\\) {\\n\\t\\t\\tfnCalc function(a) {return $tw.utils.trim(a);}\\n\\t\\t} else {\\n\\t\\t\\tfnCalc function(a,b) {return $tw.utils.trimSuffix($tw.utils.trimPrefix(a,b),b);}\\n\\t\\t}\\n\\t}\\n\\tsource(function(tiddler,title) {\\n\\t\\tArray.prototype.push.apply(result,fnCalc(title,operand));\\n\\t});\\n\\treturn result;\\n};\\n\\nexports.split makeStringBinaryOperator(\\n\\tfunction(a,b) {return (\\\\\\ + a).split(b);}\\n);\\n\\nexports\\\enlist-input\\\ makeStringBinaryOperator(\\n\\tfunction(a,o,s) {return $tw.utils.parseStringArray(\\\\\\ + a,(s \\\raw\\\));}\\n);\\n\\nexports.join makeStringReducingOperator(\\n\\tfunction(accumulator,value,operand) {\\n\\t\\tif(accumulator null) {\\n\\t\\t\\treturn value;\\n\\t\\t} else {\\n\\t\\t\\treturn accumulator + operand + value;\\n\\t\\t}\\n\\t},null\\n);\\n\\nvar dmp require(\\\$:/core/modules/utils/diff-match-patch/diff_match_patch.js\\\);\\n\\nexports.levenshtein makeStringBinaryOperator(\\n\\tfunction(a,b) {\\n\\t\\tvar dmpObject new dmp.diff_match_patch(),\\n\\t\\t\\tdiffs dmpObject.diff_main(a,b);\\n\\t\\treturn dmpObject.diff_levenshtein(diffs) + \\\\\\;\\n\\t}\\n);\\n\\n// these two functions are adapted from https://github.com/google/diff-match-patch/wiki/Line-or-Word-Diffs\\nfunction diffLineWordMode(text1,text2,mode) {\\n\\tvar dmpObject new dmp.diff_match_patch();\\n\\tvar a diffPartsToChars(text1,text2,mode);\\n\\tvar lineText1 a.chars1;\\n\\tvar lineText2 a.chars2;\\n\\tvar lineArray a.lineArray;\\n\\tvar diffs dmpObject.diff_main(lineText1,lineText2,false);\\n\\tdmpObject.diff_charsToLines_(diffs,lineArray);\\n\\treturn diffs;\\n}\\n\\nfunction diffPartsToChars(text1,text2,mode) {\\n\\tvar lineArray ;\\n\\tvar lineHash {};\\n\\tlineArray0 ;\\n\\n function diff_linesToPartsMunge_(text,mode) {\\n var chars ;\\n var lineStart 0;\\n var lineEnd -1;\\n var lineArrayLength lineArray.length,\\n regexpResult;\\n var searchRegexp /\\\\W+/g;\\n while(lineEnd \u003C text.length - 1) {\\n\\t if(mode \\\words\\\) {\\n regexpResult searchRegexp.exec(text);\\n lineEnd searchRegexp.lastIndex;\\n if(regexpResult null) {\\n lineEnd text.length;\\n }\\n lineEnd --lineEnd;\\n } else {\\n lineEnd text.indexOf(\\\\n, lineStart);\\n if(lineEnd -1) {\\n lineEnd text.length - 1;\\n }\\n }\\n var line text.substring(lineStart, lineEnd + 1);\\n\\n if(lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : (lineHashline ! undefined)) {\\n\\t\\t\\t\\tchars + String.fromCharCode(lineHashline);\\n } else {\\n if(lineArrayLength maxLines) {\\n line text.substring(lineStart);\\n lineEnd text.length;\\n }\\n chars + String.fromCharCode(lineArrayLength);\\n lineHashline lineArrayLength;\\n lineArraylineArrayLength++ line;\\n }\\n lineStart lineEnd + 1;\\n }\\n return chars;\\n }\\n var maxLines 40000;\\n var chars1 diff_linesToPartsMunge_(text1,mode);\\n maxLines 65535;\\n var chars2 diff_linesToPartsMunge_(text2,mode);\\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\\n};\\n\\nexports.makepatches function(source,operator,options) {\\n\\tvar dmpObject new dmp.diff_match_patch(),\\n\\t\\tsuffix operator.suffix || \\\\\\,\\n\\t\\tresult ;\\n\\t\\t\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tvar diffs, patches;\\n\\t\\t\\tif(suffix \\\lines\\\ || suffix \\\words\\\) {\\n\\t\\t\\t\\tdiffs diffLineWordMode(title,operator.operand,suffix);\\n\\t\\t\\t\\tpatches dmpObject.patch_make(title,diffs);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tpatches dmpObject.patch_make(title,operator.operand);\\n\\t\\t\\t}\\n\\t\\t\\tArray.prototype.push.apply(result,dmpObject.patch_toText(patches));\\n\\t\\t});\\n\\n\\treturn result;\\n};\\n\\nexports.applypatches makeStringBinaryOperator(\\n\\tfunction(a,b) {\\n\\t\\tvar dmpObject new dmp.diff_match_patch(),\\n\\t\\t\\tpatches;\\n\\t\\ttry {\\n\\t\\t\\tpatches dmpObject.patch_fromText(b);\\n\\t\\t} catch(e) {\\n\\t\\t}\\n\\t\\tif(patches) {\\n\\t\\t\\treturn dmpObject.patch_apply(patches,a)0;\\n\\t\\t} else {\\n\\t\\t\\treturn a;\\n\\t\\t}\\n\\t}\\n);\\n\\nfunction makeStringBinaryOperator(fnCalc) {\\n\\treturn function(source,operator,options) {\\n\\t\\tvar result ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \\\\\\,operator.suffix || \\\\\\));\\n\\t\\t});\\n\\t\\treturn result;\\n\\t};\\n}\\n\\nfunction makeStringReducingOperator(fnCalc,initialValue) {\\n\\treturn function(source,operator,options) {\\n\\t\\tvar result ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresult.push(title);\\n\\t\\t});\\n\\t\\tif(result.length 0) {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t\\treturn result.reduce(function(accumulator,currentValue) {\\n\\t\\t\\treturn fnCalc(accumulator,currentValue,operator.operand || \\\\\\);\\n\\t\\t},initialValue) || \\\\\\;\\n\\t};\\n}\\n\\nexports.splitregexp function(source,operator,options) {\\n\\tvar result ,\\n\\t\\tsuffix operator.suffix || \\\\\\,\\n\\t\\tflags (suffix.indexOf(\\\m\\\) ! -1 ? \\\m\\\ : \\\\\\) + (suffix.indexOf(\\\i\\\) ! -1 ? \\\i\\\ : \\\\\\),\\n\\t\\tregExp;\\n\\ttry {\\n\\t\\tregExp new RegExp(operator.operand || \\\\\\,flags);\\n\\t} catch(ex) {\\n\\t\\treturn \\\RegExp error: \\\ + ex;\\n\\t}\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar parts title.split(regExp).map(function(part){\\n\\t\\t\\treturn part || \\\\\\;\\t// make sure its a string\\n\\t\\t});\\n\\t\\tArray.prototype.push.apply(result,parts);\\n\\t});\\n\\treturn result;\\n};\\n\\nexports\\\search-replace\\\ function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes operator.suffixes || ,\\n\\t\\tflagSuffix (suffixes0 ? (suffixes00 || \\\\\\) : \\\\\\),\\n\\t\\tflags (flagSuffix.indexOf(\\\g\\\) ! -1 ? \\\g\\\ : \\\\\\) + (flagSuffix.indexOf(\\\i\\\) ! -1 ? \\\i\\\ : \\\\\\) + (flagSuffix.indexOf(\\\m\\\) ! -1 ? \\\m\\\ : \\\\\\),\\n\\t\\tisRegExp (suffixes1 && suffixes10 \\\regexp\\\) ? true : false,\\n\\t\\t//Escape regexp characters if the operand is not a regular expression\\n\\t\\tsearchTerm isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand),\\n\\t\\t//Escape $ character in replacement string if not in regular expression mode\\n\\t\\treplacement isRegExp ? operator.operands1 : (operator.operands1||\\\\\\).replace(/\\\\$/g,\\\$$$$\\\),\\n\\t\\tregExp;\\n\\ttry {\\n\\t\\tregExp new RegExp(searchTerm,flags);\\n\\t} catch(ex) {\\n\\t\\treturn \\\RegExp error: \\\ + ex;\\n\\t}\\n\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(title && (operator.operands.length > 1)) {\\n\\t\\t\\tresults.push(\\n\\t\\t\\t\\ttitle.replace(regExp,replacement)\\n\\t\\t\\t);\\n\\t\\t\\tregExp.lastIndex 0;\\n\\t\\t} else {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.pad function(source,operator,options) {\\n\\tvar results ,\\n\\t\\ttargetLength operator.operand ? parseInt(operator.operand) : 0,\\n\\t\\tfill operator.operands1 || \\\0\\\;\\n\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(title && title.length) {\\n\\t\\t\\tif(title.length > targetLength) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar padString \\\\\\,\\n\\t\\t\\t\\t\\tpadStringLength targetLength - title.length;\\n\\t\\t\\t\\twhile(padStringLength > padString.length) {\\n\\t\\t\\t\\t\\tpadString + fill;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t//make sure we do not exceed the specified length\\n\\t\\t\\t\\tpadString padString.slice(0,padStringLength);\\n\\t\\t\\t\\tif(operator.suffix && (operator.suffix \\\suffix\\\)) {\\n\\t\\t\\t\\t\\ttitle title + padString;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ttitle padString + title;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n}\\n\\nexports.charcode function(source,operator,options) {\\n\\tvar chars ;\\n\\t$tw.utils.each(operator.operands,function(operand) {\\n\\t\\tif(operand ! \\\\\\) {\\n\\t\\t\\tchars.push(String.fromCharCode($tw.utils.parseInt(operand)));\\n\\t\\t}\\n\\t});\\n\\treturn chars.join(\\\\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/subfilter.js\:{\title\:\$:/core/modules/filters/subfilter.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/subfilter.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning its operand evaluated as a filter\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.subfilter function(source,operator,options) {\\n\\tvar list options.wiki.filterTiddlers(operator.operand,options.widget,source);\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tvar results ;\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(list.indexOf(title) -1) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn results;\\n\\t} else {\\n\\t\\treturn list;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/substitute.js\:{\title\:\$:/core/modules/filters/substitute.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/substitute.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for substituting variables and embedded filter expressions with their corresponding values\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.substitute function(source,operator,options) {\\n\\tvar results ,\\n\\t\\toperands ;\\n\\t$tw.utils.each(operator.operands,function(operand,index){\\n\\t\\toperands.push({\\n\\t\\t\\tname: (index + 1).toString(),\\n\\t\\t\\tvalue: operand\\n\\t\\t});\\n\\t});\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(title) {\\n\\t\\t\\tresults.push(options.wiki.getSubstitutedText(title,options.widget,{substitutions:operands}));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/subtiddlerfields.js\:{\title\:\$:/core/modules/filters/subtiddlerfields.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.subtiddlerfields function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar subtiddler options.wiki.getSubTiddler(operator.operand,title);\\n\\t\\tif(subtiddler) {\\n\\t\\t\\tfor(var fieldName in subtiddler.fields) {\\n\\t\\t\\t\\t$tw.utils.pushTop(results,fieldName);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/suffix.js\:{\title\:\$:/core/modules/filters/suffix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/suffix.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking if a title ends with a suffix\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.suffix function(source,operator,options) {\\n\\tvar results ,\\n\\t\\tsuffixes (operator.suffixes || )0 || ;\\n\\tif (!operator.operand) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t} else if(suffixes.indexOf(\\\caseinsensitive\\\) ! -1) {\\n\\t\\tvar operand operator.operand.toLowerCase();\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase().substr(-operand.length) ! operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.toLowerCase().substr(-operand.length) operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.substr(-operator.operand.length) ! operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(title.substr(-operator.operand.length) operator.operand) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/tag.js\:{\title\:\$:/core/modules/filters/tag.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/tag.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for checking for the presence of a tag\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tag function(source,operator,options) {\\n\\tvar results ,indexedResults;\\n\\tif((operator.suffix || \\\\\\).toLowerCase() \\\strict\\\ && !operator.operand) {\\n\\t\\t// New semantics:\\n\\t\\t// Always return copy of input if operator.operand is missing\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t} else {\\n\\t\\t// Old semantics:\\n\\t\\tvar tiddlers;\\n\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\t// Returns a copy of the input if operator.operand is missing\\n\\t\\t\\ttiddlers options.wiki.getTiddlersWithTag(operator.operand);\\n\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\tif(tiddlers.indexOf(title) -1) {\\n\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\t// Returns empty results if operator.operand is missing\\n\\t\\t\\tif(source.byTag) {\\n\\t\\t\\t\\tindexedResults source.byTag(operator.operand);\\n\\t\\t\\t\\tif(indexedResults) {\\n\\t\\t\\t\\t\\treturn indexedResults;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttiddlers options.wiki.getTiddlersWithTag(operator.operand);\\n\\t\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\t\\tif(tiddlers.indexOf(title) ! -1) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tresults options.wiki.sortByList(results,operator.operand);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/tagging.js\:{\title\:\$:/core/modules/filters/tagging.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/tagging.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tagging function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/tags.js\:{\title\:\$:/core/modules/filters/tags.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/tags.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning all the tags of the selected tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.tags function(source,operator,options) {\\n\\tvar tags {};\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar t, length;\\n\\t\\tif(tiddler && tiddler.fields.tags) {\\n\\t\\t\\tfor(t0, lengthtiddler.fields.tags.length; t\u003Clength; t++) {\\n\\t\\t\\t\\ttagstiddler.fields.tagst true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn Object.keys(tags);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/then.js\:{\title\:\$:/core/modules/filters/then.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/then.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for replacing any titles with a constant\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.then function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.push(operator.operand);\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/title.js\:{\title\:\$:/core/modules/filters/title.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/title.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for comparing title fields for equality\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.title function(source,operator,options) {\\n\\tvar results ;\\n\\tif(operator.prefix \\\!\\\) {\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(tiddler && tiddler.fields.title ! operator.operand) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tresults.push(operator.operand);\\n\\t}\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/transcludes.js\:{\title\:\$:/core/modules/filters/transcludes.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/transcludes.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning all the transcludes from a tiddler\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.transcludes function(source,operator,options) {\\n\\tvar results new $tw.utils.LinkedList();\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.pushTop(options.wiki.getTiddlerTranscludes(title));\\n\\t});\\n\\treturn results.makeTiddlerIterator(options.wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/unknown.js\:{\title\:\$:/core/modules/filters/unknown.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/unknown.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for handling unknown filter operators.\\n\\nNot intended to be used directly by end users, hence the square brackets around the name.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar fieldFilterOperatorFn require(\\\$:/core/modules/filters/field.js\\\).field;\\n\\n/*\\nExport our filter function\\n*/\\nexports\\\unknown\\\ function(source,operator,options) {\\n\\t// Check for a user defined filter operator\\n\\tif(operator.operator.indexOf(\\\.\\\) ! -1) {\\n\\t\\tvar params ;\\n\\t\\t$tw.utils.each(operator.operands,function(param) {\\n\\t\\t\\tparams.push({value: param});\\n\\t\\t});\\t\\n\\t\\tvar variableInfo options.widget && options.widget.getVariableInfo && options.widget.getVariableInfo(operator.operator,{params: params, source: source});\\n\\t\\tif(variableInfo && variableInfo.srcVariable) {\\n\\t\\t\\tvar list variableInfo.resultList ? variableInfo.resultList : variableInfo.text;\\n\\t\\t\\tif(operator.prefix \\\!\\\) {\\n\\t\\t\\t\\tvar results ;\\n\\t\\t\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t\\t\\tif(list.indexOf(title) -1) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\treturn results;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn list;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Otherwise, use the \\\field\\\ operator\\n\\treturn fieldFilterOperatorFn(source,operator,options);\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/untagged.js\:{\title\:\$:/core/modules/filters/untagged.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/untagged.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator returning all the selected tiddlers that are untagged\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.untagged function(source,operator,options) {\\n\\tvar results ,\\n\\t\\texpected (operator.prefix \\\!\\\);\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(((tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) expected) || (!tiddler && !expected)) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/variables.js\:{\title\:\$:/core/modules/filters/variables.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/variables.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the active variables\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.variables function(source,operator,options) {\\n\\tvar names ,\\n\\t\\twidget options.widget;\\n\\twhile(widget && !widget.hasOwnProperty(\\\variables\\\)) {\\n\\t\\twidget widget.parentWidget;\\n\\t}\\n\\tif(widget && widget.variables) {\\n\\t\\tfor(var variable in widget.variables) {\\n\\t\\t\\tnames.push(variable);\\n\\t\\t}\\n\\t}\\n\\treturn names.sort();\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/wikiparserrules.js\:{\title\:\$:/core/modules/filters/wikiparserrules.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/wikiparserrules.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nFilter operator for returning the names of the wiki parser rules in this wiki\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.wikiparserrules function(source,operator,options) {\\n\\tvar results ,\\n\\t\\toperand operator.operand;\\n\\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\\n\\t\\tvar exp mod.exports;\\n\\t\\tif(!operand || exp.typesoperand) {\\n\\t\\t\\tresults.push(exp.name);\\n\\t\\t}\\n\\t});\\n\\tresults.sort();\\n\\treturn results;\\n};\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters/x-listops.js\:{\title\:\$:/core/modules/filters/x-listops.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/x-listops.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nExtended filter operators to manipulate the current list.\\n\\n\\\\*/\\n\\n\\t\\\use strict\\\;\\n\\n\\t/*\\n\\tFetch titles from the current list\\n\\t*/\\n\\tvar prepare_results function (source) {\\n\\tvar results ;\\n\\t\\tsource(function (tiddler, title) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t});\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tMoves a number of items from the tail of the current list before the item named in the operand\\n\\t*/\\n\\texports.putbefore function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1);\\n\\t\\treturn (index -1) ?\\n\\t\\t\\tresults.slice(0, -1) :\\n\\t\\t\\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\\n\\t};\\n\\n\\t/*\\n\\tMoves a number of items from the tail of the current list after the item named in the operand\\n\\t*/\\n\\texports.putafter function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1);\\n\\t\\treturn (index -1) ?\\n\\t\\t\\tresults.slice(0, -1) :\\n\\t\\t\\tresults.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\\n\\t};\\n\\n\\t/*\\n\\tReplaces the item named in the operand with a number of items from the tail of the current list\\n\\t*/\\n\\texports.replace function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1);\\n\\t\\treturn (index -1) ?\\n\\t\\t\\tresults.slice(0, -count) :\\n\\t\\t\\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\\n\\t};\\n\\n\\t/*\\n\\tMoves a number of items from the tail of the current list to the head of the list\\n\\t*/\\n\\texports.putfirst function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1);\\n\\t\\treturn results.slice(-count).concat(results.slice(0, -count));\\n\\t};\\n\\n\\t/*\\n\\tMoves a number of items from the head of the current list to the tail of the list\\n\\t*/\\n\\texports.putlast function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1);\\n\\t\\treturn results.slice(count).concat(results.slice(0, count));\\n\\t};\\n\\n\\t/*\\n\\tMoves the item named in the operand a number of places forward or backward in the list\\n\\t*/\\n\\texports.move function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,1),\\n\\t\\t\\tmarker results.splice(index, 1),\\n\\t\\t\\toffset (index + count) > 0 ? index + count : 0;\\n\\t\\treturn results.slice(0, offset).concat(marker).concat(results.slice(offset));\\n\\t};\\n\\n\\t/*\\n\\tReturns the items from the current list that are after the item named in the operand\\n\\t*/\\n\\texports.allafter function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand);\\n\\t\\treturn (index -1) ? :\\n\\t\\t\\t(operator.suffix) ? results.slice(index) :\\n\\t\\t\\tresults.slice(index + 1);\\n\\t};\\n\\n\\t/*\\n\\tReturns the items from the current list that are before the item named in the operand\\n\\t*/\\n\\texports.allbefore function (source, operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\tindex results.indexOf(operator.operand);\\n\\t\\treturn (index -1) ? :\\n\\t\\t\\t(operator.suffix) ? results.slice(0, index + 1) :\\n\\t\\t\\tresults.slice(0, index);\\n\\t};\\n\\n\\t/*\\n\\tAppends the items listed in the operand array to the tail of the current list\\n\\t*/\\n\\texports.append function (source, operator) {\\n\\t\\tvar append $tw.utils.parseStringArray(operator.operand, \\\true\\\),\\n\\t\\t\\tresults prepare_results(source),\\n\\t\\t\\tcount parseInt(operator.suffix) || append.length;\\n\\t\\treturn (append.length 0) ? results :\\n\\t\\t\\t(operator.prefix) ? results.concat(append.slice(-count)) :\\n\\t\\t\\tresults.concat(append.slice(0, count));\\n\\t};\\n\\n\\t/*\\n\\tPrepends the items listed in the operand array to the head of the current list\\n\\t*/\\n\\texports.prepend function (source, operator) {\\n\\t\\tvar prepend $tw.utils.parseStringArray(operator.operand, \\\true\\\),\\n\\t\\t\\tresults prepare_results(source),\\n\\t\\t\\tcount $tw.utils.getInt(operator.suffix,prepend.length);\\n\\t\\treturn (prepend.length 0) ? results :\\n\\t\\t\\t(operator.prefix) ? prepend.slice(-count).concat(results) :\\n\\t\\t\\tprepend.slice(0, count).concat(results);\\n\\t};\\n\\n\\t/*\\n\\tReturns all items from the current list except the items listed in the operand array\\n\\t*/\\n\\texports.remove function (source, operator) {\\n\\t\\tvar array $tw.utils.parseStringArray(operator.operand, \\\true\\\),\\n\\t\\t\\tresults prepare_results(source),\\n\\t\\t\\tcount parseInt(operator.suffix) || array.length,\\n\\t\\t\\tp,\\n\\t\\t\\tlen,\\n\\t\\t\\tindex;\\n\\t\\tlen array.length - 1;\\n\\t\\tfor (p 0; p \u003C count; ++p) {\\n\\t\\t\\tif (operator.prefix) {\\n\\t\\t\\t\\tindex results.indexOf(arraylen - p);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tindex results.indexOf(arrayp);\\n\\t\\t\\t}\\n\\t\\t\\tif (index ! -1) {\\n\\t\\t\\t\\tresults.splice(index, 1);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tReturns all items from the current list sorted in the order of the items in the operand array\\n\\t*/\\n\\texports.sortby function (source, operator) {\\n\\t\\tvar results prepare_results(source);\\n\\t\\tif (!results || results.length \u003C 2) {\\n\\t\\t\\treturn results;\\n\\t\\t}\\n\\t\\tvar lookup $tw.utils.parseStringArray(operator.operand, \\\true\\\);\\n\\t\\tresults.sort(function (a, b) {\\n\\t\\t\\treturn lookup.indexOf(a) - lookup.indexOf(b);\\n\\t\\t});\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tRemoves all duplicate items from the current list\\n\\t*/\\n\\texports.unique function (source, operator) {\\n\\t\\tvar results prepare_results(source);\\n\\t\\tvar set results.reduce(function (a, b) {\\n\\t\\t\\tif (a.indexOf(b) \u003C 0) {\\n\\t\\t\\t\\ta.push(b);\\n\\t\\t\\t}\\n\\t\\t\\treturn a;\\n\\t\\t}, );\\n\\t\\treturn set;\\n\\t};\\n\\n\\tvar cycleValueInArray function(results,operands,stepSize) {\\n\\t\\tvar resultsIndex,\\n\\t\\t\\tstep stepSize || 1,\\n\\t\\t\\ti 0,\\n\\t\\t\\topLength operands.length,\\n\\t\\t\\tnextOperandIndex;\\n\\t\\tfor(i; i \u003C opLength; i++) {\\n\\t\\t\\tresultsIndex results.indexOf(operandsi);\\n\\t\\t\\tif(resultsIndex ! -1) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(resultsIndex ! -1) {\\n\\t\\t\\ti i + step;\\n\\t\\t\\tnextOperandIndex (i \u003C opLength ? i : i % opLength);\\n\\t\\t\\tif(operands.length > 1) {\\n\\t\\t\\t\\tresults.splice(resultsIndex,1,operandsnextOperandIndex);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tresults.splice(resultsIndex,1);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tresults.push(operands0);\\n\\t\\t}\\n\\t\\treturn results;\\n\\t}\\n\\n\\t/*\\n\\tToggles an item in the current list.\\n\\t*/\\n\\texports.toggle function(source,operator) {\\n\\t\\treturn cycleValueInArray(prepare_results(source),operator.operands);\\n\\t}\\n\\n\\texports.cycle function(source,operator) {\\n\\t\\tvar results prepare_results(source),\\n\\t\\t\\toperands (operator.operand.length ? $tw.utils.parseStringArray(operator.operand, \\\true\\\) : \\\\\\),\\n\\t\\t\\tstep $tw.utils.getInt(operator.operands1||\\\\\\,1);\\n\\t\\tif(step \u003C 0) {\\n\\t\\t\\toperands.reverse();\\n\\t\\t\\tstep Math.abs(step);\\n\\t\\t}\\n\\t\\treturn cycleValueInArray(results,operands,step);\\n\\t}\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/core/modules/filters.js\:{\title\:\$:/core/modules/filters.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters.js\\ntype: application/javascript\\nmodule-type: wikimethod\\n\\nAdds tiddler filtering methods to the $tw.Wiki object.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widgetClass require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\n/* Maximum permitted filter recursion depth */\\nvar MAX_FILTER_DEPTH 300;\\n\\n/*\\nParses an operation (i.e. a run) within a filter string\\n\\toperators: Array of array of operator nodes into which results should be inserted\\n\\tfilterString: filter string\\n\\tp: start position within the string\\nReturns the new start position, after the parsed operation\\n*/\\nfunction parseFilterOperation(operators,filterString,p) {\\n\\tvar nextBracketPos, operator;\\n\\t// Skip the starting square bracket\\n\\tif(filterString.charAt(p++) ! \\\\\\) {\\n\\t\\tthrow \\\Missing in filter expression\\\;\\n\\t}\\n\\t// Process each operator in turn\\n\\tdo {\\n\\t\\toperator {};\\n\\t\\t// Check for an operator prefix\\n\\t\\tif(filterString.charAt(p) \\\!\\\) {\\n\\t\\t\\toperator.prefix filterString.charAt(p++);\\n\\t\\t}\\n\\t\\t// Get the operator name\\n\\t\\tnextBracketPos filterString.substring(p).search(/\\\\\\\\{\u003C\\\\//);\\n\\t\\tif(nextBracketPos -1) {\\n\\t\\t\\tthrow \\\Missing in filter expression\\\;\\n\\t\\t}\\n\\t\\tnextBracketPos + p;\\n\\t\\tvar bracket filterString.charAt(nextBracketPos);\\n\\t\\toperator.operator filterString.substring(p,nextBracketPos);\\n\\t\\t// Any suffix?\\n\\t\\tvar colon operator.operator.indexOf(:);\\n\\t\\tif(colon > -1) {\\n\\t\\t\\t// The raw suffix for older filters\\n\\t\\t\\toperator.suffix operator.operator.substring(colon + 1);\\n\\t\\t\\toperator.operator operator.operator.substring(0,colon) || \\\field\\\;\\n\\t\\t\\t// The processed suffix for newer filters\\n\\t\\t\\toperator.suffixes ;\\n\\t\\t\\t$tw.utils.each(operator.suffix.split(\\\:\\\),function(subsuffix) {\\n\\t\\t\\t\\toperator.suffixes.push();\\n\\t\\t\\t\\t$tw.utils.each(subsuffix.split(\\\,\\\),function(entry) {\\n\\t\\t\\t\\t\\tentry $tw.utils.trim(entry);\\n\\t\\t\\t\\t\\tif(entry) {\\n\\t\\t\\t\\t\\t\\toperator.suffixesoperator.suffixes.length - 1.push(entry); \\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\t// Empty operator means: title\\n\\t\\telse if(operator.operator \\\\\\) {\\n\\t\\t\\toperator.operator \\\title\\\;\\n\\t\\t}\\n\\t\\toperator.operands ;\\n\\t\\tvar parseOperand function(bracketType) {\\n\\t\\t\\tvar operand {};\\n\\t\\t\\tswitch (bracketType) {\\n\\t\\t\\t\\tcase \\\{\\\: // Curly brackets\\n\\t\\t\\t\\t\\toperand.indirect true;\\n\\t\\t\\t\\t\\tnextBracketPos filterString.indexOf(\\\}\\\,p);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\\\\: // Square brackets\\n\\t\\t\\t\\t\\tnextBracketPos filterString.indexOf(\\\\\\,p);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\\u003C\\\: // Angle brackets\\n\\t\\t\\t\\t\\toperand.variable true;\\n\\t\\t\\t\\t\\tnextBracketPos filterString.indexOf(\\\>\\\,p);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\/\\\: // regexp brackets\\n\\t\\t\\t\\t\\tvar rex /^((?:^\\\\\\\\\\\\/|\\\\\\\\.)*)\\\\/(?:\\\\((mygi+)\\\\))?/g,\\n\\t\\t\\t\\t\\t\\trexMatch rex.exec(filterString.substring(p));\\n\\t\\t\\t\\t\\tif(rexMatch) {\\n\\t\\t\\t\\t\\t\\toperator.regexp new RegExp(rexMatch1, rexMatch2);\\n\\t// DEPRECATION WARNING\\n\\tconsole.log(\\\WARNING: Filter\\\,operator.operator,\\\has a deprecated regexp operand\\\,operator.regexp);\\n\\t\\t\\t\\t\\t\\tnextBracketPos p + rex.lastIndex - 1;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\telse {\\n\\t\\t\\t\\t\\t\\tthrow \\\Unterminated regular expression in filter expression\\\;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif(nextBracketPos -1) {\\n\\t\\t\\t\\tthrow \\\Missing closing bracket in filter expression\\\;\\n\\t\\t\\t}\\n\\t\\t\\tif(operator.regexp) {\\n\\t\\t\\t\\toperand.text \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\toperand.text filterString.substring(p,nextBracketPos);\\n\\t\\t\\t}\\n\\t\\t\\toperator.operands.push(operand);\\n\\t\\t\\tp nextBracketPos + 1;\\n\\t\\t}\\n\\n\\t\\tp nextBracketPos + 1;\\n\\t\\tparseOperand(bracket);\\n\\n\\t\\t// Check for multiple operands\\n\\t\\twhile(filterString.charAt(p) \\\,\\\) {\\n\\t\\t\\tp++;\\n\\t\\t\\tif(/^\\\\\\\\{\u003C\\\\//.test(filterString.substring(p))) {\\n\\t\\t\\t\\tnextBracketPos p;\\n\\t\\t\\t\\tp++;\\n\\t\\t\\t\\tparseOperand(filterString.charAt(nextBracketPos));\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthrow \\\Missing in filter expression\\\;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t// Push this operator\\n\\t\\toperators.push(operator);\\n\\t} while(filterString.charAt(p) ! \\\\\\);\\n\\t// Skip the ending square bracket\\n\\tif(filterString.charAt(p++) ! \\\\\\) {\\n\\t\\tthrow \\\Missing in filter expression\\\;\\n\\t}\\n\\t// Return the parsing position\\n\\treturn p;\\n}\\n\\n/*\\nParse a filter string\\n*/\\nexports.parseFilter function(filterString) {\\n\\tfilterString filterString || \\\\\\;\\n\\tvar results , // Array of arrays of operator nodes {operator:,operand:}\\n\\t\\tp 0, // Current position in the filter string\\n\\t\\tmatch;\\n\\tvar whitespaceRegExp /(\\\\s+)/mg,\\n\\t\\toperandRegExp /((?:\\\\+|\\\\-|~||\\\\:(\\\\w+)(?:\\\\:(\\\\w\\\\:, *))?)?)(?:(\\\\)|(?:\\\(^\\\*)\\\)|(?:(^*))|(^\\\\s\\\\\\\\+))/mg;\\n\\twhile(p \u003C filterString.length) {\\n\\t\\t// Skip any whitespace\\n\\t\\twhitespaceRegExp.lastIndex p;\\n\\t\\tmatch whitespaceRegExp.exec(filterString);\\n\\t\\tif(match && match.index p) {\\n\\t\\t\\tp p + match0.length;\\n\\t\\t}\\n\\t\\t// Match the start of the operation\\n\\t\\tif(p \u003C filterString.length) {\\n\\t\\t\\toperandRegExp.lastIndex p;\\n\\t\\t\\tmatch operandRegExp.exec(filterString);\\n\\t\\t\\tif(!match || match.index ! p) {\\n\\t\\t\\t\\tthrow $tw.language.getString(\\\Error/FilterSyntax\\\);\\n\\t\\t\\t}\\n\\t\\t\\tvar operation {\\n\\t\\t\\t\\tprefix: \\\\\\,\\n\\t\\t\\t\\toperators: \\n\\t\\t\\t};\\n\\t\\t\\tif(match1) {\\n\\t\\t\\t\\toperation.prefix match1;\\n\\t\\t\\t\\tp p + operation.prefix.length;\\n\\t\\t\\t\\tif(match2) {\\n\\t\\t\\t\\t\\toperation.namedPrefix match2;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(match3) {\\n\\t\\t\\t\\t\\toperation.suffixes ;\\n\\t\\t\\t\\t\\t $tw.utils.each(match3.split(\\\:\\\),function(subsuffix) {\\n\\t\\t\\t\\t\\t\\toperation.suffixes.push();\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(subsuffix.split(\\\,\\\),function(entry) {\\n\\t\\t\\t\\t\\t\\t\\tentry $tw.utils.trim(entry);\\n\\t\\t\\t\\t\\t\\t\\tif(entry) {\\n\\t\\t\\t\\t\\t\\t\\t\\toperation.suffixesoperation.suffixes.length -1.push(entry);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t });\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif(match4) { // Opening square bracket\\n\\t\\t\\t\\tp parseFilterOperation(operation.operators,filterString,p);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tp match.index + match0.length;\\n\\t\\t\\t}\\n\\t\\t\\tif(match5 || match6 || match7) { // Double quoted string, single quoted string or unquoted title\\n\\t\\t\\t\\toperation.operators.push(\\n\\t\\t\\t\\t\\t{operator: \\\title\\\, operands: {text: match5 || match6 || match7}}\\n\\t\\t\\t\\t);\\n\\t\\t\\t}\\n\\t\\t\\tresults.push(operation);\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\nexports.getFilterOperators function() {\\n\\tif(!this.filterOperators) {\\n\\t\\t$tw.Wiki.prototype.filterOperators {};\\n\\t\\t$tw.modules.applyMethods(\\\filteroperator\\\,this.filterOperators);\\n\\t}\\n\\treturn this.filterOperators;\\n};\\n\\nexports.getFilterRunPrefixes function() {\\n\\tif(!this.filterRunPrefixes) {\\n\\t\\t$tw.Wiki.prototype.filterRunPrefixes {};\\n\\t\\t$tw.modules.applyMethods(\\\filterrunprefix\\\,this.filterRunPrefixes);\\n\\t}\\n\\treturn this.filterRunPrefixes;\\n}\\n\\nexports.filterTiddlers function(filterString,widget,source) {\\n\\tvar fn this.compileFilter(filterString);\\n\\treturn fn.call(this,source,widget);\\n};\\n\\n/*\\nCompile a filter into a function with the signature fn(source,widget) where:\\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\\nwidget: an optional widget node for retrieving the current tiddler etc.\\n*/\\nexports.compileFilter function(filterString) {\\n\\tif(!this.filterCache) {\\n\\t\\tthis.filterCache Object.create(null);\\n\\t\\tthis.filterCacheCount 0;\\n\\t}\\n\\tif(this.filterCachefilterString ! undefined) {\\n\\t\\treturn this.filterCachefilterString;\\n\\t}\\n\\tvar filterParseTree;\\n\\ttry {\\n\\t\\tfilterParseTree this.parseFilter(filterString);\\n\\t} catch(e) {\\n\\t\\t// We do not cache this result, so it adjusts along with localization changes\\n\\t\\treturn function(source,widget) {\\n\\t\\t\\treturn $tw.language.getString(\\\Error/Filter\\\) + \\\: \\\ + e;\\n\\t\\t};\\n\\t}\\n\\t// Get the hashmap of filter operator functions\\n\\tvar filterOperators this.getFilterOperators();\\n\\t// Assemble array of functions, one for each operation\\n\\tvar operationFunctions ;\\n\\t// Step through the operations\\n\\tvar self this;\\n\\t$tw.utils.each(filterParseTree,function(operation) {\\n\\t\\t// Create a function for the chain of operators in the operation\\n\\t\\tvar operationSubFunction function(source,widget) {\\n\\t\\t\\tvar accumulator source,\\n\\t\\t\\t\\tresults ;\\n\\t\\t\\t$tw.utils.each(operation.operators,function(operator) {\\n\\t\\t\\t\\tvar operands ,\\n\\t\\t\\t\\t\\toperatorFunction;\\n\\t\\t\\t\\tif(!operator.operator) {\\n\\t\\t\\t\\t\\t// Use the \\\title\\\ operator if no operator is specified\\n\\t\\t\\t\\t\\toperatorFunction filterOperators.title;\\n\\t\\t\\t\\t} else if(!filterOperatorsoperator.operator) {\\n\\t\\t\\t\\t\\t// Unknown operators treated as \\\unknown\\\ - at run time we can distinguish between a custom operator and falling back to the default \\\field\\\ operator\\n\\t\\t\\t\\t\\toperatorFunction filterOperators\\\unknown\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Use the operator function\\n\\t\\t\\t\\t\\toperatorFunction filterOperatorsoperator.operator;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t$tw.utils.each(operator.operands,function(operand) {\\n\\t\\t\\t\\t\\tif(operand.indirect) {\\n\\t\\t\\t\\t\\t\\tvar currTiddlerTitle widget && widget.getVariable(\\\currentTiddler\\\);\\n\\t\\t\\t\\t\\t\\toperand.value self.getTextReference(operand.text,\\\\\\,currTiddlerTitle);\\n\\t\\t\\t\\t\\t} else if(operand.variable) {\\n\\t\\t\\t\\t\\t\\tvar varTree $tw.utils.parseFilterVariable(operand.text);\\n\\t\\t\\t\\t\\t\\toperand.value widgetClass.evaluateVariable(widget,varTree.name,{params: varTree.params, source: source})0 || \\\\\\;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\toperand.value operand.text;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\toperands.push(operand.value);\\n\\t\\t\\t\\t});\\n\\n\\t\\t\\t\\t// Invoke the appropriate filteroperator module\\n\\t\\t\\t\\tresults operatorFunction(accumulator,{\\n\\t\\t\\t\\t\\t\\t\\toperator: operator.operator,\\n\\t\\t\\t\\t\\t\\t\\toperand: operands.length > 0 ? operands0 : undefined,\\n\\t\\t\\t\\t\\t\\t\\toperands: operands,\\n\\t\\t\\t\\t\\t\\t\\tprefix: operator.prefix,\\n\\t\\t\\t\\t\\t\\t\\tsuffix: operator.suffix,\\n\\t\\t\\t\\t\\t\\t\\tsuffixes: operator.suffixes,\\n\\t\\t\\t\\t\\t\\t\\tregexp: operator.regexp\\n\\t\\t\\t\\t\\t\\t},{\\n\\t\\t\\t\\t\\t\\t\\twiki: self,\\n\\t\\t\\t\\t\\t\\t\\twidget: widget\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\tif($tw.utils.isArray(results)) {\\n\\t\\t\\t\\t\\taccumulator self.makeTiddlerIterator(results);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\taccumulator results;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tif($tw.utils.isArray(results)) {\\n\\t\\t\\t\\treturn results;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar resultArray ;\\n\\t\\t\\t\\tresults(function(tiddler,title) {\\n\\t\\t\\t\\t\\tresultArray.push(title);\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\treturn resultArray;\\n\\t\\t\\t}\\n\\t\\t};\\n\\t\\tvar filterRunPrefixes self.getFilterRunPrefixes();\\n\\t\\t// Wrap the operator functions in a wrapper function that depends on the prefix\\n\\t\\toperationFunctions.push((function() {\\n\\t\\t\\tvar options {wiki: self, suffixes: operation.suffixes || };\\n\\t\\t\\tswitch(operation.prefix || \\\\\\) {\\n\\t\\t\\t\\tcase \\\\\\: // No prefix means that the operation is unioned into the result\\n\\t\\t\\t\\t\\treturn filterRunPrefixes\\\or\\\(operationSubFunction, options);\\n\\t\\t\\t\\tcase \\\\\\: // The results of the operation are pushed into the result without deduplication\\n\\t\\t\\t\\t\\treturn filterRunPrefixes\\\all\\\(operationSubFunction, options);\\n\\t\\t\\t\\tcase \\\-\\\: // The results of this operation are removed from the main result\\n\\t\\t\\t\\t\\treturn filterRunPrefixes\\\except\\\(operationSubFunction, options);\\n\\t\\t\\t\\tcase \\\+\\\: // This operation is applied to the main results so far\\n\\t\\t\\t\\t\\treturn filterRunPrefixes\\\and\\\(operationSubFunction, options);\\n\\t\\t\\t\\tcase \\\~\\\: // This operation is unioned into the result only if the main result so far is empty\\n\\t\\t\\t\\t\\treturn filterRunPrefixes\\\else\\\(operationSubFunction, options);\\n\\t\\t\\t\\tdefault: \\n\\t\\t\\t\\t\\tif(operation.namedPrefix && filterRunPrefixesoperation.namedPrefix) {\\n\\t\\t\\t\\t\\t\\treturn filterRunPrefixesoperation.namedPrefix(operationSubFunction, options);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\treturn function(results,source,widget) {\\n\\t\\t\\t\\t\\t\\t\\tresults.clear();\\n\\t\\t\\t\\t\\t\\t\\tresults.push($tw.language.getString(\\\Error/FilterRunPrefix\\\));\\n\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t})());\\n\\t});\\n\\t// Return a function that applies the operations to a source iterator of tiddler titles\\n\\tvar fnMeasured $tw.perf.measure(\\\filter: \\\ + filterString,function filterFunction(source,widget) {\\n\\t\\tif(!source) {\\n\\t\\t\\tsource self.each;\\n\\t\\t} else if(typeof source \\\object\\\) { // Array or hashmap\\n\\t\\t\\tsource self.makeTiddlerIterator(source);\\n\\t\\t}\\n\\t\\tif(!widget) {\\n\\t\\t\\twidget $tw.rootWidget;\\n\\t\\t}\\n\\t\\tvar results new $tw.utils.LinkedList();\\n\\t\\tself.filterRecursionCount (self.filterRecursionCount || 0) + 1;\\n\\t\\tif(self.filterRecursionCount \u003C MAX_FILTER_DEPTH) {\\n\\t\\t\\t$tw.utils.each(operationFunctions,function(operationFunction) {\\n\\t\\t\\t\\toperationFunction(results,source,widget);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tresults.push(\\\/**-- Excessive filter recursion --**/\\\);\\n\\t\\t}\\n\\t\\tself.filterRecursionCount self.filterRecursionCount - 1;\\n\\t\\treturn results.toArray();\\n\\t});\\n\\tif(this.filterCacheCount > 2000) {\\n\\t\\t// To prevent memory leak, we maintain an upper limit for cache size.\\n\\t\\t// Reset if exceeded. This should give us 95% of the benefit\\n\\t\\t// that no cache limit would give us.\\n\\t\\tthis.filterCache Object.create(null);\\n\\t\\tthis.filterCacheCount 0;\\n\\t}\\n\\tthis.filterCachefilterString fnMeasured;\\n\\tthis.filterCacheCount++;\\n\\treturn fnMeasured;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikimethod\},\$:/core/modules/indexers/back-indexer.js\:{\title\:\$:/core/modules/indexers/back-indexer.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/indexers/back-indexer.js\\ntype: application/javascript\\nmodule-type: indexer\\n\\nBy parsing the tiddler text, indexes the tiddlers back links, back transclusions, block level back links.\\n\\n\\\\*/\\nfunction BackIndexer(wiki) {\\n\\tthis.wiki wiki;\\n}\\n\\nBackIndexer.prototype.init function() {\\n\\tthis.subIndexers {\\n\\t\\tlink: new BackSubIndexer(this,\\\extractLinks\\\),\\n\\t\\ttransclude: new BackSubIndexer(this,\\\extractTranscludes\\\),\\n\\t};\\n};\\n\\nBackIndexer.prototype.rebuild function() {\\n\\t$tw.utils.each(this.subIndexers,function(subIndexer) {\\n\\t\\tsubIndexer.rebuild();\\n\\t});\\n};\\n\\nBackIndexer.prototype.update function(updateDescriptor) {\\n\\t$tw.utils.each(this.subIndexers,function(subIndexer) {\\n\\t\\tsubIndexer.update(updateDescriptor);\\n\\t});\\n};\\nfunction BackSubIndexer(indexer,extractor) {\\n\\tthis.wiki indexer.wiki;\\n\\tthis.indexer indexer;\\n\\tthis.extractor extractor;\\n\\t/**\\n\\t * {\\n\\t * target title, e.g. tiddler title being linked to:\\n\\t * {\\n\\t * \\t\\t source title, e.g. tiddler title that has link syntax in its text: true\\n\\t * \\t }\\n\\t * }\\n\\t */\\n\\tthis.index null;\\n}\\n\\nBackSubIndexer.prototype.init function() {\\n\\t// lazy init until first lookup\\n\\tthis.index null;\\n}\\n\\nBackSubIndexer.prototype._init function() {\\n\\tthis.index Object.create(null);\\n\\tvar self this;\\n\\tthis.wiki.forEachTiddler(function(sourceTitle,tiddler) {\\n\\t\\tvar newTargets self._getTarget(tiddler);\\n\\t\\t$tw.utils.each(newTargets, function(target) {\\n\\t\\t\\tif(!self.indextarget) {\\n\\t\\t\\t\\tself.indextarget Object.create(null);\\n\\t\\t\\t}\\n\\t\\t\\tself.indextargetsourceTitle true;\\n\\t\\t});\\n\\t});\\n}\\n\\nBackSubIndexer.prototype.rebuild function() {\\n\\tthis.index null;\\n}\\n\\n/*\\n* Get things that is being referenced in the text, e.g. tiddler names in the link syntax.\\n*/\\nBackSubIndexer.prototype._getTarget function(tiddler) {\\n\\tif(this.wiki.isBinaryTiddler(tiddler.fields.text)) {\\n\\t\\treturn ;\\n\\t}\\n\\tvar parser this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\\n\\tif(parser) {\\n\\t\\treturn this.wikithis.extractor(parser.tree, tiddler.fields.title);\\n\\t}\\n\\treturn ;\\n}\\n\\nBackSubIndexer.prototype.update function(updateDescriptor) {\\n\\t// lazy init/update until first lookup\\n\\tif(!this.index) {\\n\\t\\treturn;\\n\\t}\\n\\tvar newTargets ,\\n\\t oldTargets ,\\n\\t self this;\\n\\tif(updateDescriptor.old.exists) {\\n\\t\\toldTargets this._getTarget(updateDescriptor.old.tiddler);\\n\\t}\\n\\tif(updateDescriptor.new.exists) {\\n\\t\\tnewTargets this._getTarget(updateDescriptor.new.tiddler);\\n\\t}\\n\\n\\t$tw.utils.each(oldTargets,function(target) {\\n\\t\\tif(self.indextarget) {\\n\\t\\t\\tdelete self.indextargetupdateDescriptor.old.tiddler.fields.title;\\n\\t\\t}\\n\\t});\\n\\t$tw.utils.each(newTargets,function(target) {\\n\\t\\tif(!self.indextarget) {\\n\\t\\t\\tself.indextarget Object.create(null);\\n\\t\\t}\\n\\t\\tself.indextargetupdateDescriptor.new.tiddler.fields.title true;\\n\\t});\\n}\\n\\nBackSubIndexer.prototype.lookup function(title) {\\n\\tif(!this.index) {\\n\\t\\tthis._init();\\n\\t}\\n\\tif(this.indextitle) {\\n\\t\\treturn Object.keys(this.indextitle);\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n}\\n\\nexports.BackIndexer BackIndexer;\\n\,\type\:\application/javascript\,\module-type\:\indexer\},\$:/core/modules/indexers/field-indexer.js\:{\title\:\$:/core/modules/indexers/field-indexer.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/indexers/field-indexer.js\\ntype: application/javascript\\nmodule-type: indexer\\n\\nIndexes the tiddlers with each field value\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH 128;\\n\\nfunction FieldIndexer(wiki) {\\n\\tthis.wiki wiki;\\n}\\n\\nFieldIndexer.prototype.init function() {\\n\\tthis.index null;\\n\\tthis.maxIndexedValueLength DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\\n\\tthis.addIndexMethods();\\n}\\n\\n// Provided for testing\\nFieldIndexer.prototype.setMaxIndexedValueLength function(length) {\\n\\tthis.index null;\\n\\tthis.maxIndexedValueLength length;\\n};\\n\\nFieldIndexer.prototype.addIndexMethods function() {\\n\\tvar self this;\\n\\t// get all tiddlers, including those overwrite shadow tiddlers\\n\\tthis.wiki.each.byField function(name,value) {\\n\\t\\tvar lookup self.lookup(name,value);\\n\\t\\treturn lookup && lookup.filter(function(title) {\\n\\t\\t\\treturn self.wiki.tiddlerExists(title)\\n\\t\\t});\\n\\t};\\n\\t// get shadow tiddlers, including shadow tiddlers that is overwritten\\n\\tthis.wiki.eachShadow.byField function(name,value) {\\n\\t\\tvar lookup self.lookup(name,value);\\n\\t\\treturn lookup && lookup.filter(function(title) {\\n\\t\\t\\treturn self.wiki.isShadowTiddler(title)\\n\\t\\t});\\n\\t};\\n\\tthis.wiki.eachTiddlerPlusShadows.byField function(name,value) {\\n\\t\\tvar lookup self.lookup(name,value);\\n\\t\\treturn lookup ? lookup.slice(0) : null;\\n\\t};\\n\\tthis.wiki.eachShadowPlusTiddlers.byField function(name,value) {\\n\\t\\tvar lookup self.lookup(name,value);\\n\\t\\treturn lookup ? lookup.slice(0) : null;\\n\\t};\\n};\\n\\n/*\\nTear down and then rebuild the index as if all tiddlers have changed\\n*/\\nFieldIndexer.prototype.rebuild function() {\\n\\t// Invalidate the index so that it will be rebuilt when it is next used\\n\\tthis.index null;\\n};\\n\\n/*\\nBuild the index for a particular field\\n*/\\nFieldIndexer.prototype.buildIndexForField function(name) {\\n\\tvar self this;\\n\\t// Hashmap by field name of hashmap by field value of array of tiddler titles\\n\\tthis.index this.index || Object.create(null);\\n\\tthis.indexname Object.create(null);\\n\\tvar baseIndex this.indexname;\\n\\t// Update the index for each tiddler\\n\\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\\n\\t\\tif(name in tiddler.fields) {\\n\\t\\t\\tvar value tiddler.getFieldString(name);\\n\\t\\t\\t// Skip any values above the maximum length\\n\\t\\t\\tif(value.length \u003C self.maxIndexedValueLength) {\\n\\t\\t\\t\\tbaseIndexvalue baseIndexvalue || ;\\n\\t\\t\\t\\tbaseIndexvalue.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\\nupdateDescriptor: {old: {tiddler: \u003Ctiddler>, shadow: \u003Cboolean>, exists: \u003Cboolean>},new: {tiddler: \u003Ctiddler>, shadow: \u003Cboolean>, exists: \u003Cboolean>}}\\n*/\\nFieldIndexer.prototype.update function(updateDescriptor) {\\n\\tvar self this;\\n\\t// Dont do anything if the index hasnt been built yet\\n\\tif(this.index null) {\\n\\t\\treturn;\\n\\t}\\n\\t// Remove the old tiddler from the index\\n\\tif(updateDescriptor.old.tiddler) {\\n\\t\\t$tw.utils.each(this.index,function(indexEntry,name) {\\n\\t\\t\\tif(name in updateDescriptor.old.tiddler.fields) {\\n\\t\\t\\t\\tvar value updateDescriptor.old.tiddler.getFieldString(name),\\n\\t\\t\\t\\t\\ttiddlerList indexEntryvalue;\\n\\t\\t\\t\\tif(tiddlerList) {\\n\\t\\t\\t\\t\\tvar index tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\\n\\t\\t\\t\\t\\tif(index ! -1) {\\n\\t\\t\\t\\t\\t\\ttiddlerList.splice(index,1);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\t// Add the new tiddler to the index\\n\\tif(updateDescriptor\\\new\\\.tiddler) {\\n\\t\\t$tw.utils.each(this.index,function(indexEntry,name) {\\n\\t\\t\\tif(name in updateDescriptor\\\new\\\.tiddler.fields) {\\n\\t\\t\\t\\tvar value updateDescriptor\\\new\\\.tiddler.getFieldString(name);\\n\\t\\t\\t\\tif(value.length \u003C self.maxIndexedValueLength) {\\n\\t\\t\\t\\t\\tindexEntryvalue indexEntryvalue || ;\\n\\t\\t\\t\\t\\tindexEntryvalue.push(updateDescriptor\\\new\\\.tiddler.fields.title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\n// Lookup the given field returning a list of tiddler titles\\nFieldIndexer.prototype.lookup function(name,value) {\\n\\t// Fail the lookup if the value is too long\\n\\tif(value.length > this.maxIndexedValueLength) {\\n\\t\\treturn null;\\n\\t}\\n\\t// Update the index if it has yet to be built\\n\\tif(this.index null || !this.indexname) {\\n\\t\\tthis.buildIndexForField(name);\\n\\t}\\n\\treturn this.indexnamevalue || ;\\n};\\n\\nexports.FieldIndexer FieldIndexer;\\n\,\type\:\application/javascript\,\module-type\:\indexer\},\$:/core/modules/indexers/tag-indexer.js\:{\title\:\$:/core/modules/indexers/tag-indexer.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/indexers/tag-indexer.js\\ntype: application/javascript\\nmodule-type: indexer\\n\\nIndexes the tiddlers with each tag\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction TagIndexer(wiki) {\\n\\tthis.wiki wiki;\\n}\\n\\nTagIndexer.prototype.init function() {\\n\\tthis.subIndexers \\n\\t\\tnew TagSubIndexer(this,\\\each\\\),\\n\\t\\tnew TagSubIndexer(this,\\\eachShadow\\\),\\n\\t\\tnew TagSubIndexer(this,\\\eachTiddlerPlusShadows\\\),\\n\\t\\tnew TagSubIndexer(this,\\\eachShadowPlusTiddlers\\\)\\n\\t;\\n\\t$tw.utils.each(this.subIndexers,function(subIndexer) {\\n\\t\\tsubIndexer.addIndexMethod();\\n\\t});\\n};\\n\\nTagIndexer.prototype.rebuild function() {\\n\\t$tw.utils.each(this.subIndexers,function(subIndexer) {\\n\\t\\tsubIndexer.rebuild();\\n\\t});\\n};\\n\\nTagIndexer.prototype.update function(updateDescriptor) {\\n\\t$tw.utils.each(this.subIndexers,function(subIndexer) {\\n\\t\\tsubIndexer.update(updateDescriptor);\\n\\t});\\n};\\n\\nfunction TagSubIndexer(indexer,iteratorMethod) {\\n\\tthis.indexer indexer;\\n\\tthis.iteratorMethod iteratorMethod;\\n\\tthis.index null; // Hashmap of tag title to {isSorted: bool, titles: array} or null if not yet initialised\\n}\\n\\nTagSubIndexer.prototype.addIndexMethod function() {\\n\\tvar self this;\\n\\tthis.indexer.wikithis.iteratorMethod.byTag function(tag) {\\n\\t\\treturn self.lookup(tag).slice(0);\\n\\t};\\n};\\n\\nTagSubIndexer.prototype.rebuild function() {\\n\\tvar self this;\\n\\t// Hashmap by tag of array of {isSorted:, titles:}\\n\\tthis.index Object.create(null);\\n\\t// Add all the tags\\n\\tthis.indexer.wikithis.iteratorMethod(function(tiddler,title) {\\n\\t\\t$tw.utils.each(tiddler.fields.tags,function(tag) {\\n\\t\\t\\tif(!self.indextag) {\\n\\t\\t\\t\\tself.indextag {isSorted: false, titles: title};\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.indextag.titles.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n};\\n\\nTagSubIndexer.prototype.update function(updateDescriptor) {\\n\\tthis.index null;\\n};\\n\\nTagSubIndexer.prototype.lookup function(tag) {\\n\\t// Update the index if it has yet to be built\\n\\tif(this.index null) {\\n\\t\\tthis.rebuild();\\n\\t}\\n\\tvar indexRecord this.indextag;\\n\\tif(indexRecord) {\\n\\t\\tif(!indexRecord.isSorted) {\\n\\t\\t\\tif(this.indexer.wiki.sortByList) {\\n\\t\\t\\t\\tindexRecord.titles this.indexer.wiki.sortByList(indexRecord.titles,tag);\\n\\t\\t\\t}\\n\\t\\t\\tindexRecord.isSorted true;\\n\\t\\t}\\n\\t\\treturn indexRecord.titles;\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\\n\\nexports.TagIndexer TagIndexer;\\n\,\type\:\application/javascript\,\module-type\:\indexer\},\$:/core/modules/info/platform.js\:{\title\:\$:/core/modules/info/platform.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/info/platform.js\\ntype: application/javascript\\nmodule-type: info\\n\\nInitialise basic platform $:/info/ tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.getInfoTiddlerFields function(updateInfoTiddlersCallback) {\\n\\tvar mapBoolean function(value) {return value ? \\\yes\\\ : \\\no\\\;},\\n\\t\\tinfoTiddlerFields ;\\n\\t// Basics\\n\\tinfoTiddlerFields.push({title: \\\$:/info/browser\\\, text: mapBoolean(!!$tw.browser)});\\n\\tinfoTiddlerFields.push({title: \\\$:/info/node\\\, text: mapBoolean(!!$tw.node)});\\n\\tinfoTiddlerFields.push({title: \\\$:/info/startup-timestamp\\\, text: $tw.utils.stringifyDate(new Date())});\\n\\tif($tw.browser) {\\n\\t\\t// Document location\\n\\t\\tvar setLocationProperty function(name,value) {\\n\\t\\t\\t\\tinfoTiddlerFields.push({title: \\\$:/info/url/\\\ + name, text: value});\\n\\t\\t\\t},\\n\\t\\t\\tlocation document.location;\\n\\t\\tsetLocationProperty(\\\full\\\, (location.toString()).split(\\\#\\\)0);\\n\\t\\tsetLocationProperty(\\\host\\\, location.host);\\n\\t\\tsetLocationProperty(\\\hostname\\\, location.hostname);\\n\\t\\tsetLocationProperty(\\\protocol\\\, location.protocol);\\n\\t\\tsetLocationProperty(\\\port\\\, location.port);\\n\\t\\tsetLocationProperty(\\\pathname\\\, location.pathname);\\n\\t\\tsetLocationProperty(\\\search\\\, location.search);\\n\\t\\tsetLocationProperty(\\\origin\\\, location.origin);\\n\\t\\t// Screen size\\n\\t\\tinfoTiddlerFields.push({title: \\\$:/info/browser/screen/width\\\, text: window.screen.width.toString()});\\n\\t\\tinfoTiddlerFields.push({title: \\\$:/info/browser/screen/height\\\, text: window.screen.height.toString()});\\n \\t\\t// Dark mode through event listener on MediaQueryList\\n \\t\\tvar mqList window.matchMedia(\\\(prefers-color-scheme: dark)\\\),\\n \\t\\t\\tgetDarkModeTiddler function() {return {title: \\\$:/info/darkmode\\\, text: mqList.matches ? \\\yes\\\ : \\\no\\\};};\\n \\t\\tinfoTiddlerFields.push(getDarkModeTiddler());\\n \\t\\tmqList.addListener(function(event) {\\n \\t\\t\\tupdateInfoTiddlersCallback(getDarkModeTiddler());\\n \\t\\t});\\n\\t\\t// Language\\n\\t\\tinfoTiddlerFields.push({title: \\\$:/info/browser/language\\\, text: navigator.language || \\\\\\});\\n\\t}\\n\\treturn infoTiddlerFields;\\n};\\n\,\type\:\application/javascript\,\module-type\:\info\},\$:/core/modules/keyboard.js\:{\title\:\$:/core/modules/keyboard.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/keyboard.js\\ntype: application/javascript\\nmodule-type: global\\n\\nKeyboard handling utilities\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar namedKeys {\\n\\t\\\cancel\\\: 3,\\n\\t\\\help\\\: 6,\\n\\t\\\backspace\\\: 8,\\n\\t\\\tab\\\: 9,\\n\\t\\\clear\\\: 12,\\n\\t\\\return\\\: 13,\\n\\t\\\enter\\\: 13,\\n\\t\\\pause\\\: 19,\\n\\t\\\escape\\\: 27,\\n\\t\\\space\\\: 32,\\n\\t\\\page_up\\\: 33,\\n\\t\\\page_down\\\: 34,\\n\\t\\\end\\\: 35,\\n\\t\\\home\\\: 36,\\n\\t\\\left\\\: 37,\\n\\t\\\up\\\: 38,\\n\\t\\\right\\\: 39,\\n\\t\\\down\\\: 40,\\n\\t\\\printscreen\\\: 44,\\n\\t\\\insert\\\: 45,\\n\\t\\\delete\\\: 46,\\n\\t\\\0\\\: 48,\\n\\t\\\1\\\: 49,\\n\\t\\\2\\\: 50,\\n\\t\\\3\\\: 51,\\n\\t\\\4\\\: 52,\\n\\t\\\5\\\: 53,\\n\\t\\\6\\\: 54,\\n\\t\\\7\\\: 55,\\n\\t\\\8\\\: 56,\\n\\t\\\9\\\: 57,\\n\\t\\\firefoxsemicolon\\\: 59,\\n\\t\\\firefoxequals\\\: 61,\\n\\t\\\a\\\: 65,\\n\\t\\\b\\\: 66,\\n\\t\\\c\\\: 67,\\n\\t\\\d\\\: 68,\\n\\t\\\e\\\: 69,\\n\\t\\\f\\\: 70,\\n\\t\\\g\\\: 71,\\n\\t\\\h\\\: 72,\\n\\t\\\i\\\: 73,\\n\\t\\\j\\\: 74,\\n\\t\\\k\\\: 75,\\n\\t\\\l\\\: 76,\\n\\t\\\m\\\: 77,\\n\\t\\\n\\\: 78,\\n\\t\\\o\\\: 79,\\n\\t\\\p\\\: 80,\\n\\t\\\q\\\: 81,\\n\\t\\\r\\\: 82,\\n\\t\\\s\\\: 83,\\n\\t\\\t\\\: 84,\\n\\t\\\u\\\: 85,\\n\\t\\\v\\\: 86,\\n\\t\\\w\\\: 87,\\n\\t\\\x\\\: 88,\\n\\t\\\y\\\: 89,\\n\\t\\\z\\\: 90,\\n\\t\\\numpad0\\\: 96,\\n\\t\\\numpad1\\\: 97,\\n\\t\\\numpad2\\\: 98,\\n\\t\\\numpad3\\\: 99,\\n\\t\\\numpad4\\\: 100,\\n\\t\\\numpad5\\\: 101,\\n\\t\\\numpad6\\\: 102,\\n\\t\\\numpad7\\\: 103,\\n\\t\\\numpad8\\\: 104,\\n\\t\\\numpad9\\\: 105,\\n\\t\\\multiply\\\: 106,\\n\\t\\\add\\\: 107,\\n\\t\\\separator\\\: 108,\\n\\t\\\subtract\\\: 109,\\n\\t\\\decimal\\\: 110,\\n\\t\\\divide\\\: 111,\\n\\t\\\f1\\\: 112,\\n\\t\\\f2\\\: 113,\\n\\t\\\f3\\\: 114,\\n\\t\\\f4\\\: 115,\\n\\t\\\f5\\\: 116,\\n\\t\\\f6\\\: 117,\\n\\t\\\f7\\\: 118,\\n\\t\\\f8\\\: 119,\\n\\t\\\f9\\\: 120,\\n\\t\\\f10\\\: 121,\\n\\t\\\f11\\\: 122,\\n\\t\\\f12\\\: 123,\\n\\t\\\f13\\\: 124,\\n\\t\\\f14\\\: 125,\\n\\t\\\f15\\\: 126,\\n\\t\\\f16\\\: 127,\\n\\t\\\f17\\\: 128,\\n\\t\\\f18\\\: 129,\\n\\t\\\f19\\\: 130,\\n\\t\\\f20\\\: 131,\\n\\t\\\f21\\\: 132,\\n\\t\\\f22\\\: 133,\\n\\t\\\f23\\\: 134,\\n\\t\\\f24\\\: 135,\\n\\t\\\firefoxminus\\\: 173,\\n\\t\\\semicolon\\\: 186,\\n\\t\\\equals\\\: 187,\\n\\t\\\comma\\\: 188,\\n\\t\\\dash\\\: 189,\\n\\t\\\period\\\: 190,\\n\\t\\\slash\\\: 191,\\n\\t\\\backquote\\\: 192,\\n\\t\\\openbracket\\\: 219,\\n\\t\\\backslash\\\: 220,\\n\\t\\\closebracket\\\: 221,\\n\\t\\\quote\\\: 222\\n};\\n\\nfunction KeyboardManager(options) {\\n\\tvar self this;\\n\\toptions options || \\\\\\;\\n\\t// Save the named key hashmap\\n\\tthis.namedKeys namedKeys;\\n\\t// Create a reverse mapping of code to keyname\\n\\tthis.keyNames ;\\n\\t$tw.utils.each(namedKeys,function(keyCode,name) {\\n\\t\\tself.keyNameskeyCode name.substr(0,1).toUpperCase() + name.substr(1);\\n\\t});\\n\\t// Save the platform-specific name of the \\\meta\\\ key\\n\\tthis.metaKeyName $tw.platform.isMac ? \\\cmd-\\\ : \\\win-\\\;\\n\\tthis.shortcutKeysList , // Stores the shortcut-key descriptors\\n\\tthis.shortcutActionList , // Stores the corresponding action strings\\n\\tthis.shortcutParsedList ; // Stores the parsed key descriptors\\n\\tthis.shortcutPriorityList ; // Stores the parsed shortcut priority\\n\\tthis.lookupNames \\\shortcuts\\\;\\n\\tthis.lookupNames.push($tw.platform.isMac ? \\\shortcuts-mac\\\ : \\\shortcuts-not-mac\\\)\\n\\tthis.lookupNames.push($tw.platform.isWindows ? \\\shortcuts-windows\\\ : \\\shortcuts-not-windows\\\);\\n\\tthis.lookupNames.push($tw.platform.isLinux ? \\\shortcuts-linux\\\ : \\\shortcuts-not-linux\\\);\\n\\tthis.updateShortcutLists(this.getShortcutTiddlerList());\\n\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\tself.handleShortcutChanges(changes);\\n\\t});\\n}\\n\\n/*\\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\\n*/\\nKeyboardManager.prototype.getModifierKeys function() {\\n\\treturn \\n\\t\\t16, // Shift\\n\\t\\t17, // Ctrl\\n\\t\\t18, // Alt\\n\\t\\t20, // CAPS LOCK\\n\\t\\t91, // Meta (left)\\n\\t\\t93, // Meta (right)\\n\\t\\t224 // Meta (Firefox)\\n\\t\\n};\\n\\n/*\\nParses a key descriptor into the structure:\\n{\\n\\tkeyCode: numeric keycode\\n\\tshiftKey: boolean\\n\\taltKey: boolean\\n\\tctrlKey: boolean\\n\\tmetaKey: boolean\\n}\\nKey descriptors have the following format:\\n\\tctrl+enter\\n\\tctrl+shift+alt+A\\n*/\\nKeyboardManager.prototype.parseKeyDescriptor function(keyDescriptor,options) {\\n\\tvar components keyDescriptor.split(/\\\\+|\\\\-/),\\n\\t\\tinfo {\\n\\t\\t\\tkeyCode: 0,\\n\\t\\t\\tshiftKey: false,\\n\\t\\t\\taltKey: false,\\n\\t\\t\\tctrlKey: false,\\n\\t\\t\\tmetaKey: false\\n\\t\\t};\\n\\tfor(var t0; t\u003Ccomponents.length; t++) {\\n\\t\\tvar s componentst.toLowerCase(),\\n\\t\\t\\tc s.charCodeAt(0);\\n\\t\\t// Look for modifier keys\\n\\t\\tif(s \\\ctrl\\\) {\\n\\t\\t\\tinfo.ctrlKey true;\\n\\t\\t} else if(s \\\shift\\\) {\\n\\t\\t\\tinfo.shiftKey true;\\n\\t\\t} else if(s \\\alt\\\) {\\n\\t\\t\\tinfo.altKey true;\\n\\t\\t} else if(s \\\meta\\\ || s \\\cmd\\\ || s \\\win\\\) {\\n\\t\\t\\tinfo.metaKey true;\\n\\t\\t}\\n\\t\\t// Replace named keys with their code\\n\\t\\tif(this.namedKeyss) {\\n\\t\\t\\tinfo.keyCode this.namedKeyss;\\n\\t\\t}\\n\\t}\\n\\tif(options.keyDescriptor) {\\n\\t\\tinfo.keyDescriptor options.keyDescriptor;\\n\\t}\\n\\tif(info.keyCode) {\\n\\t\\treturn info;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n/*\\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\\n*/\\nKeyboardManager.prototype.parseKeyDescriptors function(keyDescriptors,options) {\\n\\tvar self this;\\n\\toptions options || {};\\n\\toptions.stack options.stack || ;\\n\\tvar wiki options.wiki || $tw.wiki;\\n\\tif(typeof keyDescriptors \\\string\\\ && keyDescriptors \\\\\\) {\\n\\t\\treturn ;\\n\\t}\\n\\tif(!$tw.utils.isArray(keyDescriptors)) {\\n\\t\\tkeyDescriptors keyDescriptors.split(\\\ \\\);\\n\\t}\\n\\tvar result ;\\n\\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\\n\\t\\t// Look for a named shortcut\\n\\t\\tif(keyDescriptor.substr(0,2) \\\((\\\ && keyDescriptor.substr(-2,2) \\\))\\\) {\\n\\t\\t\\tif(options.stack.indexOf(keyDescriptor) -1) {\\n\\t\\t\\t\\toptions.stack.push(keyDescriptor);\\n\\t\\t\\t\\tvar name keyDescriptor.substring(2,keyDescriptor.length - 2),\\n\\t\\t\\t\\t\\tlookupName function(configName) {\\n\\t\\t\\t\\t\\t\\tvar keyDescriptors wiki.getTiddlerText(\\\$:/config/\\\ + configName + \\\/\\\ + name);\\n\\t\\t\\t\\t\\t\\tif(keyDescriptors) {\\n\\t\\t\\t\\t\\t\\t\\toptions.keyDescriptor keyDescriptor;\\n\\t\\t\\t\\t\\t\\t\\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\\n\\t\\t\\t\\t\\tlookupName(platformDescriptor);\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tresult.push(self.parseKeyDescriptor(keyDescriptor,options));\\n\\t\\t}\\n\\t});\\n\\treturn result;\\n};\\n\\nKeyboardManager.prototype.getPrintableShortcuts function(keyInfoArray) {\\n\\tvar self this,\\n\\t\\tresult ;\\n\\t$tw.utils.each(keyInfoArray,function(keyInfo) {\\n\\t\\tif(keyInfo) {\\n\\t\\t\\tresult.push((keyInfo.ctrlKey ? \\\ctrl-\\\ : \\\\\\) + \\n\\t\\t\\t\\t (keyInfo.shiftKey ? \\\shift-\\\ : \\\\\\) + \\n\\t\\t\\t\\t (keyInfo.altKey ? \\\alt-\\\ : \\\\\\) + \\n\\t\\t\\t\\t (keyInfo.metaKey ? self.metaKeyName : \\\\\\) + \\n\\t\\t\\t\\t (self.keyNameskeyInfo.keyCode));\\n\\t\\t}\\n\\t});\\n\\treturn result;\\n}\\n\\nKeyboardManager.prototype.checkKeyDescriptor function(event,keyInfo) {\\n\\treturn keyInfo &&\\n\\t\\t\\tevent.keyCode keyInfo.keyCode && \\n\\t\\t\\tevent.shiftKey keyInfo.shiftKey && \\n\\t\\t\\tevent.altKey keyInfo.altKey && \\n\\t\\t\\tevent.ctrlKey keyInfo.ctrlKey && \\n\\t\\t\\tevent.metaKey keyInfo.metaKey;\\n};\\n\\nKeyboardManager.prototype.checkKeyDescriptors function(event,keyInfoArray) {\\n\\treturn (this.getMatchingKeyDescriptor(event,keyInfoArray) ! null);\\n};\\n\\nKeyboardManager.prototype.getMatchingKeyDescriptor function(event,keyInfoArray) {\\n\\tfor(var t0; t\u003CkeyInfoArray.length; t++) {\\n\\t\\tif(this.checkKeyDescriptor(event,keyInfoArrayt)) {\\n\\t\\t\\treturn keyInfoArrayt;\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\nKeyboardManager.prototype.getEventModifierKeyDescriptor function(event) {\\n\\treturn event.ctrlKey && !event.shiftKey\\t&& !event.altKey && !event.metaKey ? \\\ctrl\\\ : \\n\\t\\tevent.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey ? \\\shift\\\ : \\n\\t\\tevent.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey ? \\\ctrl-shift\\\ : \\n\\t\\tevent.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ? \\\alt\\\ : \\n\\t\\tevent.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey ? \\\alt-shift\\\ : \\n\\t\\tevent.altKey && event.ctrlKey && !event.shiftKey && !event.metaKey ? \\\ctrl-alt\\\ : \\n\\t\\tevent.altKey && event.shiftKey && event.ctrlKey && !event.metaKey ? \\\ctrl-alt-shift\\\ : \\n\\t\\tevent.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey ? \\\meta\\\ : \\n\\t\\tevent.metaKey && event.ctrlKey && !event.shiftKey && !event.altKey ? \\\meta-ctrl\\\ :\\n\\t\\tevent.metaKey && event.ctrlKey && event.shiftKey && !event.altKey ? \\\meta-ctrl-shift\\\ :\\n\\t\\tevent.metaKey && event.ctrlKey && event.shiftKey && event.altKey ? \\\meta-ctrl-alt-shift\\\ : \\\normal\\\;\\n};\\n\\nKeyboardManager.prototype.getShortcutTiddlerList function() {\\n\\treturn $tw.wiki.getTiddlersWithTag(\\\$:/tags/KeyboardShortcut\\\);\\n};\\n\\nKeyboardManager.prototype.updateShortcutLists function(tiddlerList) {\\n\\tthis.shortcutTiddlers tiddlerList;\\n\\tfor(var i0; i\u003CtiddlerList.length; i++) {\\n\\t\\tvar title tiddlerListi,\\n\\t\\t\\ttiddlerFields $tw.wiki.getTiddler(title).fields;\\n\\t\\tthis.shortcutKeysListi tiddlerFields.key ! undefined ? tiddlerFields.key : undefined;\\n\\t\\tthis.shortcutActionListi tiddlerFields.text;\\n\\t\\tthis.shortcutParsedListi this.shortcutKeysListi ! undefined ? this.parseKeyDescriptors(this.shortcutKeysListi) : undefined;\\n\\t\\tthis.shortcutPriorityListi tiddlerFields.priority \\\yes\\\ ? true : false;\\n\\t}\\n};\\n\\n/*\\nevent: the keyboard event object\\noptions:\\n\\tonlyPriority: true if only priority global shortcuts should be invoked\\n*/\\nKeyboardManager.prototype.handleKeydownEvent function(event, options) {\\n\\toptions options || {};\\n\\tvar key, action;\\n\\tfor(var i0; i\u003Cthis.shortcutTiddlers.length; i++) {\\n\\t\\tif(options.onlyPriority && this.shortcutPriorityListi ! true) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\n\\t\\tif(this.shortcutParsedListi ! undefined && this.checkKeyDescriptors(event,this.shortcutParsedListi)) {\\n\\t\\t\\tkey this.shortcutParsedListi;\\n\\t\\t\\taction this.shortcutActionListi;\\n\\t\\t}\\n\\t}\\n\\tif(key ! undefined) {\\n\\t\\tevent.preventDefault();\\n\\t\\tevent.stopPropagation();\\n\\t\\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget,event);\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n};\\n\\nKeyboardManager.prototype.detectNewShortcuts function(changedTiddlers) {\\n\\tvar shortcutConfigTiddlers ,\\n\\t\\thandled false;\\n\\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\\n\\t\\tvar descriptorString \\\$:/config/\\\ + platformDescriptor + \\\/\\\;\\n\\t\\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\\n\\t\\t\\tvar configString configTiddler.substr(0, configTiddler.lastIndexOf(\\\/\\\) + 1);\\n\\t\\t\\tif(configString descriptorString) {\\n\\t\\t\\t\\tshortcutConfigTiddlers.push(configTiddler);\\n\\t\\t\\t\\thandled true;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n\\tif(handled) {\\n\\t\\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nKeyboardManager.prototype.handleShortcutChanges function(changedTiddlers) {\\n\\tvar newList this.getShortcutTiddlerList();\\n\\tvar hasChanged $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\\n\\t\\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\\n\\t\\t(this.detectNewShortcuts(changedTiddlers))\\n\\t);\\n\\t// Re-cache shortcuts if something changed\\n\\tif(hasChanged) {\\n\\t\\tthis.updateShortcutLists(newList);\\n\\t}\\n};\\n\\nexports.KeyboardManager KeyboardManager;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/language.js\:{\title\:\$:/core/modules/language.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/language.js\\ntype: application/javascript\\nmodule-type: global\\n\\nThe $tw.Language() manages translateable strings\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nCreate an instance of the language manager. Options include:\\nwiki: wiki from which to retrieve translation tiddlers\\n*/\\nfunction Language(options) {\\n\\toptions options || \\\\\\;\\n\\tthis.wiki options.wiki || $tw.wiki;\\n}\\n\\n/*\\nReturn a wikified translateable string. The title is automatically prefixed with \\\$:/language/\\\\\nOptions include:\\nvariables: optional hashmap of variables to supply to the language wikification\\n*/\\nLanguage.prototype.getString function(title,options) {\\n\\toptions options || {};\\n\\ttitle \\\$:/language/\\\ + title;\\n\\treturn this.wiki.renderTiddler(\\\text/plain\\\,title,{variables: options.variables});\\n};\\n\\n/*\\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \\\$:/language/\\\\\n*/\\nLanguage.prototype.getRawString function(title) {\\n\\ttitle \\\$:/language/\\\ + title;\\n\\treturn this.wiki.getTiddlerText(title);\\n};\\n\\nexports.Language Language;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/macros/changecount.js\:{\title\:\$:/core/modules/macros/changecount.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/changecount.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to return the changecount for the current tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\changecount\\\;\\n\\nexports.params ;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function() {\\n\\treturn this.wiki.getChangeCount(this.getVariable(\\\currentTiddler\\\)) + \\\\\\;\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/contrastcolour.js\:{\title\:\$:/core/modules/macros/contrastcolour.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/contrastcolour.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to choose which of two colours has the highest contrast with a base colour\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\contrastcolour\\\;\\n\\nexports.params \\n\\t{name: \\\target\\\},\\n\\t{name: \\\fallbackTarget\\\},\\n\\t{name: \\\colourA\\\},\\n\\t{name: \\\colourB\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(target,fallbackTarget,colourA,colourB) {\\n\\tvar rgbTarget $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\\n\\tif(!rgbTarget) {\\n\\t\\treturn colourA;\\n\\t}\\n\\tvar rgbColourA $tw.utils.parseCSSColor(colourA),\\n\\t\\trgbColourB $tw.utils.parseCSSColor(colourB);\\n\\tif(rgbColourA && !rgbColourB) {\\n\\t\\treturn rgbColourA;\\n\\t}\\n\\tif(rgbColourB && !rgbColourA) {\\n\\t\\treturn rgbColourB;\\n\\t}\\n\\tif(!rgbColourA && !rgbColourB) {\\n\\t\\t// If neither colour is readable, return a crude inverse of the target\\n\\t\\treturn 255 - rgbTarget0,255 - rgbTarget1,255 - rgbTarget2,rgbTarget3;\\n\\t}\\n\\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\\n\\tvar brightnessTarget rgbTarget0 * 0.299 + rgbTarget1 * 0.587 + rgbTarget2 * 0.114,\\n\\t\\tbrightnessA rgbColourA0 * 0.299 + rgbColourA1 * 0.587 + rgbColourA2 * 0.114,\\n\\t\\tbrightnessB rgbColourB0 * 0.299 + rgbColourB1 * 0.587 + rgbColourB2 * 0.114;\\n\\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/csvtiddlers.js\:{\title\:\$:/core/modules/macros/csvtiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/csvtiddlers.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to output tiddlers matching a filter to CSV\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\csvtiddlers\\\;\\n\\nexports.params \\n\\t{name: \\\filter\\\},\\n\\t{name: \\\format\\\},\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(filter,format) {\\n\\tvar self this,\\n\\t\\ttiddlers this.wiki.filterTiddlers(filter),\\n\\t\\ttiddler,\\n\\t\\tfields ,\\n\\t\\tt,f;\\n\\t// Collect all the fields\\n\\tfor(t0;t\u003Ctiddlers.length; t++) {\\n\\t\\ttiddler this.wiki.getTiddler(tiddlerst);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tfor(f in tiddler.fields) {\\n\\t\\t\\t\\tif(fields.indexOf(f) -1) {\\n\\t\\t\\t\\t\\tfields.push(f);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Sort the fields and bring the standard ones to the front\\n\\tfields.sort();\\n\\t\\\title text modified modifier created creator\\\.split(\\\ \\\).reverse().forEach(function(value,index) {\\n\\t\\tvar p fields.indexOf(value);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tfields.splice(p,1);\\n\\t\\t\\tfields.unshift(value)\\n\\t\\t}\\n\\t});\\n\\t// Output the column headings\\n\\tvar output , row ;\\n\\tfields.forEach(function(value) {\\n\\t\\trow.push(quoteAndEscape(value))\\n\\t});\\n\\toutput.push(row.join(\\\,\\\));\\n\\t// Output each tiddler\\n\\tfor(var t0;t\u003Ctiddlers.length; t++) {\\n\\t\\trow ;\\n\\t\\ttiddler this.wiki.getTiddler(tiddlerst);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tfor(f0; f\u003Cfields.length; f++) {\\n\\t\\t\\t\\t\\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fieldsf) || \\\\\\ : \\\\\\));\\n\\t\\t\\t\\t}\\t\\n\\t\\t\\t}\\n\\t\\toutput.push(row.join(\\\,\\\));\\n\\t}\\n\\treturn output.join(\\\\\\\n\\\);\\n};\\n\\nfunction quoteAndEscape(value) {\\n\\treturn \\\\\\\\\\\\\ + value.replace(/\\\/mg,\\\\\\\\\\\\\\\\\\\\) + \\\\\\\\\\\\\;\\n}\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/displayshortcuts.js\:{\title\:\$:/core/modules/macros/displayshortcuts.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/displayshortcuts.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\displayshortcuts\\\;\\n\\nexports.params \\n\\t{name: \\\shortcuts\\\},\\n\\t{name: \\\prefix\\\},\\n\\t{name: \\\separator\\\},\\n\\t{name: \\\suffix\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(shortcuts,prefix,separator,suffix) {\\n\\tvar shortcutArray $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\\n\\t\\twiki: this.wiki\\n\\t}));\\n\\tif(shortcutArray.length > 0) {\\n\\t\\tshortcutArray.sort(function(a,b) {\\n\\t\\t return a.toLowerCase().localeCompare(b.toLowerCase());\\n\\t\\t})\\n\\t\\treturn prefix + shortcutArray.join(separator) + suffix;\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/jsontiddler.js\:{\title\:\$:/core/modules/macros/jsontiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/jsontiddler.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to output a single tiddler to JSON\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\jsontiddler\\\;\\n\\nexports.params \\n\\t{name: \\\title\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(title) {\\n\\ttitle title || this.getVariable(\\\currentTiddler\\\);\\n\\tvar tiddler !!title && this.wiki.getTiddler(title),\\n\\t\\tfields new Object();\\n\\tif(tiddler) {\\n\\t\\tfor(var field in tiddler.fields) {\\n\\t\\t\\tfieldsfield tiddler.getFieldString(field);\\n\\t\\t}\\n\\t}\\n\\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\\n};\\n\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/jsontiddlers.js\:{\title\:\$:/core/modules/macros/jsontiddlers.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/jsontiddlers.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to output tiddlers matching a filter to JSON\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\jsontiddlers\\\;\\n\\nexports.params \\n\\t{name: \\\filter\\\},\\n\\t{name: \\\spaces\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(filter,spaces) {\\n\\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/makedatauri.js\:{\title\:\$:/core/modules/macros/makedatauri.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/makedatauri.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to convert a string of text to a data URI\\n\\n\u003C\u003Cmakedatauri text:\\\Text to be converted\\\ type:\\\text/vnd.tiddlywiki\\\>>\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\makedatauri\\\;\\n\\nexports.params \\n\\t{name: \\\text\\\},\\n\\t{name: \\\type\\\},\\n\\t{name: \\\_canonical_uri\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(text,type,_canonical_uri) {\\n\\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/now.js\:{\title\:\$:/core/modules/macros/now.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/now.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to return a formatted version of the current time\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\now\\\;\\n\\nexports.params \\n\\t{name: \\\format\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(format) {\\n\\treturn $tw.utils.formatDateString(new Date(),format || \\\0hh:0mm, DDth MMM YYYY\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/qualify.js\:{\title\:\$:/core/modules/macros/qualify.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/qualify.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to qualify a state tiddler title according\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\qualify\\\;\\n\\nexports.params \\n\\t{name: \\\title\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(title) {\\n\\treturn title + \\\-\\\ + this.getStateQualifier();\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/resolvepath.js\:{\title\:\$:/core/modules/macros/resolvepath.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/resolvepath.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nResolves a relative path for an absolute rootpath.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\resolvepath\\\;\\n\\nexports.params \\n\\t{name: \\\source\\\},\\n\\t{name: \\\root\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(source, root) {\\n\\treturn $tw.utils.resolvePath(source, root);\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/unusedtitle.js\:{\title\:\$:/core/modules/macros/unusedtitle.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/unusedtitle.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\unusedtitle\\\;\\n\\nexports.params \\n\\t{name: \\\baseName\\\},\\n\\t{name: \\\separator\\\},\\n\\t{name: \\\template\\\},\\n\\t{name: \\\startCount\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(baseName,separator,template,startCount) {\\n\\tseparator separator || \\\ \\\;\\n\\tstartCount startCount || 0;\\n\\tif(!baseName) {\\n\\t\\tbaseName $tw.language.getString(\\\DefaultNewTiddlerTitle\\\);\\n\\t}\\n\\t// $tw.wiki.generateNewTitle function(baseTitle,options)\\n\\t// options.prefix must be a string!\\n\\treturn this.wiki.generateNewTitle(baseName, {\\\prefix\\\: separator, \\\template\\\: template, \\\startCount\\\: startCount}).trim();\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/macros/version.js\:{\title\:\$:/core/modules/macros/version.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/macros/version.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nMacro to return the TiddlyWiki core version number\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\version\\\;\\n\\nexports.params ;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function() {\\n\\treturn $tw.version;\\n};\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/core/modules/parsers/audioparser.js\:{\title\:\$:/core/modules/parsers/audioparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/audioparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe audio parser parses an audio tiddler into an embeddable HTML element\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar AudioParser function(type,text,options) {\\n\\tvar element {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\audio\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tcontrols: {type: \\\string\\\, value: \\\controls\\\},\\n\\t\\t\\t\\tstyle: {type: \\\string\\\, value: \\\width: 100%; object-fit: contain\\\}\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tsrc;\\n\\tif(options._canonical_uri) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: options._canonical_uri};\\n\\t} else if(text) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: \\\data:\\\ + type + \\\;base64,\\\ + text};\\n\\t}\\n\\tthis.tree element;\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\audio/ogg\\\ AudioParser;\\nexports\\\audio/mpeg\\\ AudioParser;\\nexports\\\audio/mp3\\\ AudioParser;\\nexports\\\audio/mp4\\\ AudioParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/binaryparser.js\:{\title\:\$:/core/modules/parsers/binaryparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/binaryparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe binary parser parses a binary tiddler into a warning message and download link\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar BINARY_WARNING_MESSAGE \\\$:/core/ui/BinaryWarning\\\;\\nvar EXPORT_BUTTON_IMAGE \\\$:/core/images/export-button\\\;\\n\\nvar BinaryParser function(type,text,options) {\\n\\t// Transclude the binary data tiddler warning message\\n\\tvar warn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\p\\\,\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\\$tiddler\\\: {type: \\\string\\\, value: BINARY_WARNING_MESSAGE}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Create download link based on binary tiddler title\\n\\tvar link {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\a\\\,\\n\\t\\tattributes: {\\n\\t\\t\\ttitle: {type: \\\indirect\\\, textReference: \\\!!title\\\},\\n\\t\\t\\tdownload: {type: \\\indirect\\\, textReference: \\\!!title\\\}\\n\\t\\t},\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\\$tiddler\\\: {type: \\\string\\\, value: EXPORT_BUTTON_IMAGE}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Set the link href to external or internal data URI\\n\\tif(options._canonical_uri) {\\n\\t\\tlink.attributes.href {\\n\\t\\t\\ttype: \\\string\\\, \\n\\t\\t\\tvalue: options._canonical_uri\\n\\t\\t};\\n\\t} else if(text) {\\n\\t\\tlink.attributes.href {\\n\\t\\t\\ttype: \\\string\\\, \\n\\t\\t\\tvalue: \\\data:\\\ + type + \\\;base64,\\\ + text\\n\\t\\t};\\n\\t}\\n\\t// Combine warning message and download link in a div\\n\\tvar element {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\div\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tclass: {type: \\\string\\\, value: \\\tc-binary-warning\\\}\\n\\t\\t},\\n\\t\\tchildren: warn, link\\n\\t}\\n\\tthis.tree element;\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\application/octet-stream\\\ BinaryParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/csvparser.js\:{\title\:\$:/core/modules/parsers/csvparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/csvparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar CsvParser function(type,text,options) {\\n\\t// Special handler for tab-delimited files\\n\\tif (type text/tab-delimited-values && !options.separator) {\\n\\t\\toptions.separator \\\\\\\t\\\;\\n\\t}\\n\\t\\n\\t// Table framework\\n\\tthis.tree {\\n\\t\\t\\\type\\\: \\\scrollable\\\, \\\children\\\: {\\n\\t\\t\\t\\\type\\\: \\\element\\\, \\\tag\\\: \\\table\\\, \\\children\\\: {\\n\\t\\t\\t\\t\\\type\\\: \\\element\\\, \\\tag\\\: \\\tbody\\\, \\\children\\\: \\n\\t\\t\\t}, \\\attributes\\\: {\\n\\t\\t\\t\\t\\\class\\\: {\\\type\\\: \\\string\\\, \\\value\\\: \\\tc-csv-table\\\}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Split the text into lines\\n\\tvar lines $tw.utils.parseCsvString(text, options),\\n\\t\\ttag \\\th\\\;\\n\\tvar maxColumns 0;\\n\\t$tw.utils.each(lines, function(columns) {\\n\\t\\tmaxColumns Math.max(columns.length, maxColumns);\\n\\t});\\n\\t\\n\\tfor(var line0; line\u003Clines.length; line++) {\\n\\t\\tvar columns linesline;\\n\\t\\tvar row {\\n\\t\\t\\t\\\type\\\: \\\element\\\, \\\tag\\\: \\\tr\\\, \\\children\\\: \\n\\t\\t};\\n\\t\\tfor(var column0; column\u003CmaxColumns; column++) {\\n\\t\\t\\trow.children.push({\\n\\t\\t\\t\\t\\\type\\\: \\\element\\\, \\\tag\\\: tag, \\\children\\\: {\\n\\t\\t\\t\\t\\t\\\type\\\: \\\text\\\,\\n\\t\\t\\t\\t\\t\\\text\\\: columnscolumn || \\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\ttag \\\td\\\;\\n\\t\\tthis.tree0.children0.children0.children.push(row);\\n\\t}\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\text/csv\\\ CsvParser;\\nexports\\\text/tab-delimited-values\\\ CsvParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/htmlparser.js\:{\title\:\$:/core/modules/parsers/htmlparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/htmlparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe HTML parser displays text as raw HTML\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar HtmlParser function(type,text,options) {\\n\\tvar src;\\n\\tif(options._canonical_uri) {\\n\\t\\tsrc options._canonical_uri;\\n\\t} else if(text) {\\n\\t\\tsrc \\\data:text/html;charsetutf-8,\\\ + encodeURIComponent(text);\\n\\t}\\n\\tthis.tree {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\iframe\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tsrc: {type: \\\string\\\, value: src}\\n\\t\\t}\\n\\t};\\n\\tif($tw.wiki.getTiddlerText(\\\$:/config/HtmlParser/DisableSandbox\\\,\\\no\\\) ! \\\yes\\\) {\\n\\t\\tthis.tree0.attributes.sandbox {type: \\\string\\\, value: $tw.wiki.getTiddlerText(\\\$:/config/HtmlParser/SandboxTokens\\\,\\\\\\)};\\n\\t}\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\text/html\\\ HtmlParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/imageparser.js\:{\title\:\$:/core/modules/parsers/imageparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/imageparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe image parser parses an image into an embeddable HTML element\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar ImageParser function(type,text,options) {\\n\\tvar element {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\img\\\,\\n\\t\\t\\tattributes: {}\\n\\t\\t};\\n\\tif(options._canonical_uri) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: options._canonical_uri};\\n\\t} else if(text) {\\n\\t\\tif(type \\\image/svg+xml\\\ || type \\\.svg\\\) {\\n\\t\\t\\telement.attributes.src {type: \\\string\\\, value: \\\data:image/svg+xml,\\\ + encodeURIComponent(text)};\\n\\t\\t} else {\\n\\t\\t\\telement.attributes.src {type: \\\string\\\, value: \\\data:\\\ + type + \\\;base64,\\\ + text};\\n\\t\\t}\\n\\t}\\n\\tthis.tree element;\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\image/svg+xml\\\ ImageParser;\\nexports\\\image/jpg\\\ ImageParser;\\nexports\\\image/jpeg\\\ ImageParser;\\nexports\\\image/png\\\ ImageParser;\\nexports\\\image/gif\\\ ImageParser;\\nexports\\\image/webp\\\ ImageParser;\\nexports\\\image/heic\\\ ImageParser;\\nexports\\\image/heif\\\ ImageParser;\\nexports\\\image/avif\\\ ImageParser;\\nexports\\\image/x-icon\\\ ImageParser;\\nexports\\\image/vnd.microsoft.icon\\\ ImageParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/utils/parseutils.js\:{\title\:\$:/core/modules/utils/parseutils.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/parseutils.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nUtility functions concerned with parsing text into tokens.\\n\\nMost functions have the following pattern:\\n\\n* The parameters are:\\n** `source`: the source string being parsed\\n** `pos`: the current parse position within the string\\n** Any further parameters are used to identify the token that is being parsed\\n* The return value is:\\n** null if the token was not found at the specified position\\n** an object representing the token with the following standard fields:\\n*** `type`: string indicating the type of the token\\n*** `start`: start position of the token in the source string\\n*** `end`: end position of the token in the source string\\n*** Any further fields required to describe the token\\n\\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \\\whitespace\\\, start:, end:,}\\n*/\\nexports.parseWhiteSpace function(source,pos) {\\n\\tvar p pos,c;\\n\\twhile(true) {\\n\\t\\tc source.charAt(p);\\n\\t\\tif((c \\\ \\\) || (c \\\\\\\f\\\) || (c \\\\\\\n\\\) || (c \\\\\\\r\\\) || (c \\\\\\\t\\\) || (c \\\\\\\v\\\) || (c \\\\\\\u00a0\\\)) { // Ignores some obscure unicode spaces\\n\\t\\t\\tp++;\\n\\t\\t} else {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\tif(p pos) {\\n\\t\\treturn null;\\n\\t} else {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\whitespace\\\,\\n\\t\\t\\tstart: pos,\\n\\t\\t\\tend: p\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\\n*/\\nexports.skipWhiteSpace function(source,pos) {\\n\\tvar c;\\n\\twhile(true) {\\n\\t\\tc source.charAt(pos);\\n\\t\\tif((c \\\ \\\) || (c \\\\\\\f\\\) || (c \\\\\\\n\\\) || (c \\\\\\\r\\\) || (c \\\\\\\t\\\) || (c \\\\\\\v\\\) || (c \\\\\\\u00a0\\\)) { // Ignores some obscure unicode spaces\\n\\t\\t\\tpos++;\\n\\t\\t} else {\\n\\t\\t\\treturn pos;\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nLook for a given string token. Returns null if not found, otherwise returns {type: \\\token\\\, value:, start:, end:,}\\n*/\\nexports.parseTokenString function(source,pos,token) {\\n\\tvar match source.indexOf(token,pos) pos;\\n\\tif(match) {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\token\\\,\\n\\t\\t\\tvalue: token,\\n\\t\\t\\tstart: pos,\\n\\t\\t\\tend: pos + token.length\\n\\t\\t};\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \\\regexp\\\, match:, start:, end:,}\\n*/\\nexports.parseTokenRegExp function(source,pos,reToken) {\\n\\tvar node {\\n\\t\\ttype: \\\regexp\\\,\\n\\t\\tstart: pos\\n\\t};\\n\\treToken.lastIndex pos;\\n\\tnode.match reToken.exec(source);\\n\\tif(node.match && node.match.index pos) {\\n\\t\\tnode.end pos + node.match0.length;\\n\\t\\treturn node;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n/*\\nLook for a string literal. Returns null if not found, otherwise returns {type: \\\string\\\, value:, start:, end:,}\\n*/\\nexports.parseStringLiteral function(source,pos) {\\n\\tvar node {\\n\\t\\ttype: \\\string\\\,\\n\\t\\tstart: pos\\n\\t};\\n\\tvar reString /(?:\\\\\\\\\(\\\\s\\\\S*?)\\\\\\\\\|\\\(^\\\*)\\\)|(?:(^*))/g;\\n\\treString.lastIndex pos;\\n\\tvar match reString.exec(source);\\n\\tif(match && match.index pos) {\\n\\t\\tnode.value match1 ! undefined ? match1 :(\\n\\t\\t\\tmatch2 ! undefined ? match2 : match3\\n\\t\\t\\t\\t\\t);\\n\\t\\tnode.end pos + match0.length;\\n\\t\\treturn node;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n/*\\nReturns an array of {name:} with an optional \\\default\\\ property. Options include:\\nrequireParenthesis: require the parameter definition to be wrapped in parenthesis\\n*/\\nexports.parseParameterDefinition function(paramString,options) {\\n\\toptions options || {};\\n\\tif(options.requireParenthesis) {\\n\\t\\tvar parenMatch /^\\\\s*\\\\((.*)\\\\)\\\\s*$/g.exec(paramString);\\n\\t\\tif(!parenMatch) {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t\\tparamString parenMatch1;\\n\\t}\\n\\tvar params ,\\n\\t\\treParam /\\\\s*(^:),\\\\s+)(?:\\\\s*:\\\\s*(?:\\\\\\\\\(\\\\s\\\\S*?)\\\\\\\\\|\\\(^\\\*)\\\|(^*)|(^,\\\\\\\s+)))?/mg,\\n\\t\\tparamMatch reParam.exec(paramString);\\n\\twhile(paramMatch) {\\n\\t\\t// Save the parameter details\\n\\t\\tvar paramInfo {name: paramMatch1},\\n\\t\\t\\tdefaultValue paramMatch2 || paramMatch3 || paramMatch4 || paramMatch5;\\n\\t\\tif(defaultValue ! undefined) {\\n\\t\\t\\tparamInfo\\\default\\\ defaultValue;\\n\\t\\t}\\n\\t\\tparams.push(paramInfo);\\n\\t\\t// Look for the next parameter\\n\\t\\tparamMatch reParam.exec(paramString);\\n\\t}\\n\\treturn params;\\n};\\n\\nexports.parseMacroParameters function(node,source,pos) {\\n\\t// Process parameters\\n\\tvar parameter $tw.utils.parseMacroParameter(source,pos);\\n\\twhile(parameter) {\\n\\t\\tnode.params.push(parameter);\\n\\t\\tpos parameter.end;\\n\\t\\t// Get the next parameter\\n\\t\\tparameter $tw.utils.parseMacroParameter(source,pos);\\n\\t}\\n\\tnode.end pos;\\n\\treturn node;\\n}\\n\\n/*\\nLook for a macro invocation parameter. Returns null if not found, or {type: \\\macro-parameter\\\, name:, value:, start:, end:}\\n*/\\nexports.parseMacroParameter function(source,pos) {\\n\\tvar node {\\n\\t\\ttype: \\\macro-parameter\\\,\\n\\t\\tstart: pos\\n\\t};\\n\\t// Define our regexp\\n\\tvar reMacroParameter /(?:(A-Za-z0-9\\\\-_+)\\\\s*:)?(?:\\\\s*(?:\\\\\\\\\(\\\\s\\\\S*?)\\\\\\\\\|\\\(^\\\*)\\\|(^*)|\\\\\\\\(^\\\\*)\\\\\\\\|((?:(?:>(?!>))|^\\\\s>\\\)+)))/g;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for the parameter\\n\\tvar token $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Get the parameter details\\n\\tnode.value token.match2 ! undefined ? token.match2 : (\\n\\t\\t\\t\\t\\ttoken.match3 ! undefined ? token.match3 : (\\n\\t\\t\\t\\t\\t\\ttoken.match4 ! undefined ? token.match4 : (\\n\\t\\t\\t\\t\\t\\t\\ttoken.match5 ! undefined ? token.match5 : (\\n\\t\\t\\t\\t\\t\\t\\t\\ttoken.match6 ! undefined ? token.match6 : (\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\\\\\\n\\t\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t\\t)\\n\\t\\t\\t\\t);\\n\\tif(token.match1) {\\n\\t\\tnode.name token.match1;\\n\\t}\\n\\t// Update the end position\\n\\tnode.end pos;\\n\\treturn node;\\n};\\n\\n/*\\nLook for a macro invocation. Returns null if not found, or {type: \\\transclude\\\, attributes:, start:, end:}\\n*/\\nexports.parseMacroInvocationAsTransclusion function(source,pos) {\\n\\tvar node $tw.utils.parseMacroInvocation(source,pos);\\n\\tif(node) {\\n\\t\\tvar positionalName 0,\\n\\t\\t\\ttransclusion {\\n\\t\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\t\\tstart: node.start,\\n\\t\\t\\t\\tend: node.end\\n\\t\\t\\t};\\n\\t\\t$tw.utils.addAttributeToParseTreeNode(transclusion,\\\$variable\\\,node.name);\\n\\t\\t$tw.utils.each(node.params,function(param) {\\n\\t\\t\\tvar name param.name;\\n\\t\\t\\tif(name) {\\n\\t\\t\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\t\\t\\tname \\\$\\\ + name;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(transclusion,{name: name,type: \\\string\\\, value: param.value, start: param.start, end: param.end});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(transclusion,{name: (positionalName++) + \\\\\\,type: \\\string\\\, value: param.value, start: param.start, end: param.end});\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn transclusion;\\n\\t}\\n\\treturn node;\\n};\\n\\n/*\\nLook for a macro invocation. Returns null if not found, or {type: \\\macrocall\\\, name:, params:, start:, end:}\\n*/\\nexports.parseMacroInvocation function(source,pos) {\\n\\tvar node {\\n\\t\\ttype: \\\macrocall\\\,\\n\\t\\tstart: pos,\\n\\t\\tparams: \\n\\t};\\n\\t// Define our regexps\\n\\tvar reMacroName /(^\\\\s>\\\+)/g;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for a double less than sign\\n\\tvar token $tw.utils.parseTokenString(source,pos,\\\\u003C\u003C\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Get the macro name\\n\\tvar name $tw.utils.parseTokenRegExp(source,pos,reMacroName);\\n\\tif(!name) {\\n\\t\\treturn null;\\n\\t}\\n\\tnode.name name.match1;\\n\\tpos name.end;\\n\\tnode $tw.utils.parseMacroParameters(node,source,pos);\\n\\tpos node.end;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for a double greater than sign\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\>>\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Update the end position\\n\\tnode.end pos;\\n\\treturn node;\\n};\\n\\nexports.parseFilterVariable function(source) {\\n\\tvar node {\\n\\t\\t\\tname: \\\\\\,\\n\\t\\t\\tparams: ,\\n\\t\\t},\\n\\t\\tpos 0,\\n\\t\\treName /(^\\\\s\\\+)/g;\\n\\t// If there is no whitespace or it is an empty string then there are no macro parameters\\n\\tif(/^\\\\S*$/.test(source)) {\\n\\t\\tnode.name source;\\n\\t\\treturn node;\\n\\t}\\n\\t// Get the variable name\\n\\tvar nameMatch $tw.utils.parseTokenRegExp(source,pos,reName);\\n\\tif(nameMatch) {\\n\\t\\tnode.name nameMatch.match1;\\n\\t\\tpos nameMatch.end;\\n\\t\\tnode $tw.utils.parseMacroParameters(node,source,pos);\\n\\t\\tdelete node.end;\\n\\t}\\n\\treturn node;\\n};\\n\\n/*\\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \\\attribute\\\, name:, type: \\\filtered|string|indirect|macro\\\, value|filter|textReference:, start:, end:,}\\n*/\\nexports.parseAttribute function(source,pos) {\\n\\tvar node {\\n\\t\\tstart: pos\\n\\t};\\n\\t// Define our regexps\\n\\tvar reAttributeName /(^\\\\/\\\\s>\\\`+)/g,\\n\\t\\treUnquotedAttribute /(^\\\\/\\\\s\u003C>\\\`+)/g,\\n\\t\\treFilteredValue /\\\\{\\\\{\\\\{(\\\\S\\\\s+?)\\\\}\\\\}\\\\}/g,\\n\\t\\treIndirectValue /\\\\{\\\\{(^\\\\}+)\\\\}\\\\}/g,\\n\\t\\treSubstitutedValue /(?:```(\\\\s\\\\S*?)```|`(^`|\\\\S\\\\s*?)`)/g;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Get the attribute name\\n\\tvar name $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\\n\\tif(!name) {\\n\\t\\treturn null;\\n\\t}\\n\\tnode.name name.match1;\\n\\tpos name.end;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for an equals sign\\n\\tvar token $tw.utils.parseTokenString(source,pos,\\\\\\);\\n\\tif(token) {\\n\\t\\tpos token.end;\\n\\t\\t// Skip whitespace\\n\\t\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t\\t// Look for a string literal\\n\\t\\tvar stringLiteral $tw.utils.parseStringLiteral(source,pos);\\n\\t\\tif(stringLiteral) {\\n\\t\\t\\tpos stringLiteral.end;\\n\\t\\t\\tnode.type \\\string\\\;\\n\\t\\t\\tnode.value stringLiteral.value;\\n\\t\\t} else {\\n\\t\\t\\t// Look for a filtered value\\n\\t\\t\\tvar filteredValue $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\\n\\t\\t\\tif(filteredValue) {\\n\\t\\t\\t\\tpos filteredValue.end;\\n\\t\\t\\t\\tnode.type \\\filtered\\\;\\n\\t\\t\\t\\tnode.filter filteredValue.match1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Look for an indirect value\\n\\t\\t\\t\\tvar indirectValue $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\\n\\t\\t\\t\\tif(indirectValue) {\\n\\t\\t\\t\\t\\tpos indirectValue.end;\\n\\t\\t\\t\\t\\tnode.type \\\indirect\\\;\\n\\t\\t\\t\\t\\tnode.textReference indirectValue.match1;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Look for a unquoted value\\n\\t\\t\\t\\t\\tvar unquotedValue $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\\n\\t\\t\\t\\t\\tif(unquotedValue) {\\n\\t\\t\\t\\t\\t\\tpos unquotedValue.end;\\n\\t\\t\\t\\t\\t\\tnode.type \\\string\\\;\\n\\t\\t\\t\\t\\t\\tnode.value unquotedValue.match1;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t// Look for a macro invocation value\\n\\t\\t\\t\\t\\t\\tvar macroInvocation $tw.utils.parseMacroInvocation(source,pos);\\n\\t\\t\\t\\t\\t\\tif(macroInvocation) {\\n\\t\\t\\t\\t\\t\\t\\tpos macroInvocation.end;\\n\\t\\t\\t\\t\\t\\t\\tnode.type \\\macro\\\;\\n\\t\\t\\t\\t\\t\\t\\tnode.value macroInvocation;\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tvar substitutedValue $tw.utils.parseTokenRegExp(source,pos,reSubstitutedValue);\\n\\t\\t\\t\\t\\t\\t\\tif(substitutedValue) {\\n\\t\\t\\t\\t\\t\\t\\t\\tpos substitutedValue.end;\\n\\t\\t\\t\\t\\t\\t\\t\\tnode.type \\\substituted\\\;\\n\\t\\t\\t\\t\\t\\t\\t\\tnode.rawValue substitutedValue.match1 || substitutedValue.match2;\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tnode.type \\\string\\\;\\n\\t\\t\\t\\t\\t\\t\\t\\tnode.value \\\true\\\;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tnode.type \\\string\\\;\\n\\t\\tnode.value \\\true\\\;\\n\\t}\\n\\t// Update the end position\\n\\tnode.end pos;\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/parsers/pdfparser.js\:{\title\:\$:/core/modules/parsers/pdfparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/pdfparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe PDF parser embeds a PDF viewer\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar ImageParser function(type,text,options) {\\n\\tvar element {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\iframe\\\,\\n\\t\\t\\tattributes: {}\\n\\t\\t},\\n\\t\\tsrc;\\n\\tif(options._canonical_uri) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: options._canonical_uri};\\n\\t} else if(text) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: \\\data:application/pdf;base64,\\\ + text};\\n\\t}\\n\\tthis.tree element;\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\application/pdf\\\ ImageParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/textparser.js\:{\title\:\$:/core/modules/parsers/textparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/textparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar TextParser function(type,text,options) {\\n\\tthis.tree {\\n\\t\\ttype: \\\genesis\\\,\\n\\t\\tattributes: {\\n\\t\\t\\t$type: {name: \\\$type\\\, type: \\\string\\\, value: \\\$codeblock\\\},\\n\\t\\t\\tcode: {name: \\\code\\\, type: \\\string\\\, value: text},\\n\\t\\t\\tlanguage: {name: \\\language\\\, type: \\\string\\\, value: type},\\n\\t\\t\\t$remappable: {name: \\\$remappable\\\, type:\\\string\\\, value: \\\no\\\}\\n\\t\\t}\\n\\t};\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\text/plain\\\ TextParser;\\nexports\\\text/x-tiddlywiki\\\ TextParser;\\nexports\\\application/javascript\\\ TextParser;\\nexports\\\application/json\\\ TextParser;\\nexports\\\text/css\\\ TextParser;\\nexports\\\application/x-tiddler-dictionary\\\ TextParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/videoparser.js\:{\title\:\$:/core/modules/parsers/videoparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/videoparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe video parser parses a video tiddler into an embeddable HTML element\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar VideoParser function(type,text,options) {\\n\\tvar element {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\video\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tcontrols: {type: \\\string\\\, value: \\\controls\\\},\\n\\t\\t\\t\\tstyle: {type: \\\string\\\, value: \\\width: 100%; object-fit: contain\\\}\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tsrc;\\n\\tif(options._canonical_uri) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: options._canonical_uri};\\n\\t} else if(text) {\\n\\t\\telement.attributes.src {type: \\\string\\\, value: \\\data:\\\ + type + \\\;base64,\\\ + text};\\n\\t}\\n\\tthis.tree element;\\n\\tthis.source text;\\n\\tthis.type type;\\n};\\n\\nexports\\\video/ogg\\\ VideoParser;\\nexports\\\video/webm\\\ VideoParser;\\nexports\\\video/mp4\\\ VideoParser;\\nexports\\\video/quicktime\\\ VideoParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/wikiparser/rules/codeblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/codeblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for code blocks. For example:\\n\\n```\\n\\t```\\n\\tThis text will not be //wikified//\\n\\t```\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\codeblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match and get language if defined\\n\\tthis.matchRegExp /```(\\\\w-*)\\\\r?\\\\n/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar reEnd /(\\\\r?\\\\n```$)/mg;\\n\\tvar languageStart this.parser.pos + 3,\\n\\t\\tlanguageEnd languageStart + this.match1.length;\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Look for the end of the block\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(this.parser.source),\\n\\t\\ttext,\\n\\t\\tcodeStart this.parser.pos;\\n\\t// Process the block\\n\\tif(match) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\ttext this.parser.source.substr(this.parser.pos);\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\t// Return the $codeblock widget\\n\\treturn {\\n\\t\\t\\ttype: \\\codeblock\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\tcode: {type: \\\string\\\, value: text, start: codeStart, end: this.parser.pos},\\n\\t\\t\\t\\t\\tlanguage: {type: \\\string\\\, value: this.match1, start: languageStart, end: languageEnd}\\n\\t\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/codeinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/codeinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for code runs. For example:\\n\\n```\\n\\tThis is a `code run`.\\n\\tThis is another ``code run``\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\codeinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /(``?)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar reEnd new RegExp(this.match1, \\\mg\\\);\\n\\t// Look for the end marker\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(this.parser.source),\\n\\t\\ttext,\\n\\t\\tstart this.parser.pos;\\n\\t// Process the text\\n\\tif(match) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\ttext this.parser.source.substr(this.parser.pos);\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\code\\\,\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\ttext: text,\\n\\t\\t\\tstart: start,\\n\\t\\t\\tend: this.parser.pos\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/commentblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/commentblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for HTML comments. For example:\\n\\n```\\n\u003C!-- This is a comment -->\\n\\\\define macroX()\\n\u003C!-- This is a comment -->\\nxxxx\\n\\\\end\\n\u003C!-- This is a comment -->\\n\\n```\\n\\nNote that the syntax for comments is simplified to an opening \\\\u003C!--\\\ sequence and a closing \\\-->\\\ sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\commentblock\\\;\\nexports.types {block:true, pragma:true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\tthis.matchRegExp /\u003C!--/mg;\\n\\tthis.endMatchRegExp /-->/mg;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\tthis.matchRegExp.lastIndex startPos;\\n\\tthis.match this.matchRegExp.exec(this.parser.source);\\n\\tif(this.match) {\\n\\t\\tthis.endMatchRegExp.lastIndex this.match.index + this.match0.length;\\n\\t\\tthis.endMatch this.endMatchRegExp.exec(this.parser.source);\\n\\t\\tif(this.endMatch) {\\n\\t\\t\\treturn this.match.index;\\n\\t\\t}\\n\\t}\\n\\treturn undefined;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.endMatchRegExp.lastIndex;\\n\\t// Dont return any elements\\n\\treturn ;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/commentinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/commentinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for HTML comments. For example:\\n\\n```\\n\u003C!-- This is a comment -->\\n```\\n\\nNote that the syntax for comments is simplified to an opening \\\\u003C!--\\\ sequence and a closing \\\-->\\\ sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\commentinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\tthis.matchRegExp /\u003C!--/mg;\\n\\tthis.endMatchRegExp /-->/mg;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\tthis.matchRegExp.lastIndex startPos;\\n\\tthis.match this.matchRegExp.exec(this.parser.source);\\n\\tif(this.match) {\\n\\t\\tthis.endMatchRegExp.lastIndex this.match.index + this.match0.length;\\n\\t\\tthis.endMatch this.endMatchRegExp.exec(this.parser.source);\\n\\t\\tif(this.endMatch) {\\n\\t\\t\\treturn this.match.index;\\n\\t\\t}\\n\\t}\\n\\treturn undefined;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.endMatchRegExp.lastIndex;\\n\\t// Dont return any elements\\n\\treturn ;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/conditional.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/conditional.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/conditional.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nConditional shortcut syntax\\n\\n```\\nThis is a \u003C%if {something} %>Elephant\u003C%elseif {else} %>Pelican\u003C%else%>Crocodile\u003C%endif%>\\n```\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.name \\\conditional\\\;\\nexports.types {inline: true, block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\u003C\\\\%\\\\s*if\\\\s+/mg;\\n\\tthis.terminateIfRegExp /\\\\%\\\\>/mg;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\t// Look for the next \u003C%if shortcut\\n\\tthis.matchRegExp.lastIndex startPos;\\n\\tthis.match this.matchRegExp.exec(this.parser.source);\\n\\t// If not found then return no match\\n\\tif(!this.match) {\\n\\t\\treturn undefined;\\n\\t}\\n\\t// Check for the next %>\\n\\tthis.terminateIfRegExp.lastIndex this.match.index;\\n\\tthis.terminateIfMatch this.terminateIfRegExp.exec(this.parser.source);\\n\\t// If not found then return no match\\n\\tif(!this.terminateIfMatch) {\\n\\t\\treturn undefined;\\n\\t}\\n\\t// Return the position at which the construction was found\\n\\treturn this.match.index;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Get the filter condition\\n\\tvar filterCondition this.parser.source.substring(this.match.index + this.match0.length,this.terminateIfMatch.index);\\n\\t// Advance the parser position to past the %>\\n\\tthis.parser.pos this.terminateIfMatch.index + this.terminateIfMatch0.length;\\n\\t// Parse the if clause\\n\\treturn this.parseIfClause(filterCondition);\\n};\\n\\nexports.parseIfClause function(filterCondition) {\\n\\t// Create the list widget\\n\\tvar listWidget {\\n\\t\\ttype: \\\list\\\,\\n\\t\\ttag: \\\$list\\\,\\n\\t\\tisBlock: this.is.block,\\n\\t\\tchildren: \\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: \\\list-template\\\,\\n\\t\\t\\t\\ttag: \\\$list-template\\\\\n\\t\\t\\t},\\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: \\\list-empty\\\,\\n\\t\\t\\t\\ttag: \\\$list-empty\\\\\n\\t\\t\\t}\\n\\t\\t\\n\\t};\\n\\t$tw.utils.addAttributeToParseTreeNode(listWidget,\\\filter\\\,filterCondition);\\n\\t$tw.utils.addAttributeToParseTreeNode(listWidget,\\\variable\\\,\\\condition\\\);\\n\\t$tw.utils.addAttributeToParseTreeNode(listWidget,\\\limit\\\,\\\1\\\);\\n\\t// Check for an immediately following double linebreak\\n\\tvar hasLineBreak !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/(^\\\\S\\\\n\\\\r*\\\\r?\\\\n(?:^\\\\S\\\\n\\\\r*\\\\r?\\\\n|$))/g);\\n\\t// Parse the body looking for else or endif\\n\\tvar reEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(else)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(elseif)\\\\\\\\s+(\\\\\\\\s\\\\\\\\S+?)\\\\\\\\%\\\\\\\\>\\\,\\n\\t\\tex;\\n\\tif(hasLineBreak) {\\n\\t\\tex this.parser.parseBlocksTerminatedExtended(reEndString);\\n\\t} else {\\n\\t\\tvar reEnd new RegExp(reEndString,\\\mg\\\);\\n\\t\\tex this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true});\\n\\t}\\n\\t// Put the body into the list template\\n\\tlistWidget.children0.children ex.tree;\\n\\t// Check for an else or elseif\\n\\tif(ex.match) {\\n\\t\\tif(ex.match1 \\\endif\\\) {\\n\\t\\t\\t// Nothing to do if we just found an endif\\n\\t\\t} else if(ex.match2 \\\else\\\) {\\n\\t\\t\\t// Check for an immediately following double linebreak\\n\\t\\t\\thasLineBreak !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/(^\\\\S\\\\n\\\\r*\\\\r?\\\\n(?:^\\\\S\\\\n\\\\r*\\\\r?\\\\n|$))/g);\\n\\t\\t\\t// If we found an else then we need to parse the body looking for the endif\\n\\t\\t\\tvar reEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>\\\,\\n\\t\\t\\tex;\\n\\t\\t\\tif(hasLineBreak) {\\n\\t\\t\\t\\tex this.parser.parseBlocksTerminatedExtended(reEndString);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar reEnd new RegExp(reEndString,\\\mg\\\);\\n\\t\\t\\t\\tex this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true});\\n\\t\\t\\t}\\n\\t\\t\\t// Put the parsed content inside the list empty template\\n\\t\\t\\tlistWidget.children1.children ex.tree;\\n\\t\\t} else if(ex.match3 \\\elseif\\\) {\\n\\t\\t\\t// Parse the elseif clause by reusing this parser, passing the new filter condition\\n\\t\\t\\tlistWidget.children1.children this.parseIfClause(ex.match4);\\n\\t\\t}\\n\\t}\\n\\t// Return the parse tree node\\n\\treturn listWidget;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/dash.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/dash.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for dashes. For example:\\n\\n```\\nThis is an en-dash: --\\n\\nThis is an em-dash: ---\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\dash\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /-{2,3}(?!-)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar dash this.match0.length 2 ? \\\–\\\ : \\\—\\\;\\n\\treturn {\\n\\t\\ttype: \\\entity\\\,\\n\\t\\tentity: dash\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - bold. For example:\\n\\n```\\n\\tThis is bold text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except bold \\n\\\\rules only bold \\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\bold\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp //mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(//mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\strong\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - italic. For example:\\n\\n```\\n\\tThis is //italic// text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except italic\\n\\\\rules only italic\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\italic\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\/\\\\//mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(/\\\\/\\\\//mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\em\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - strikethrough. For example:\\n\\n```\\n\\tThis is ~~strikethrough~~ text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except strikethrough \\n\\\\rules only strikethrough \\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\strikethrough\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /~~/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\strike\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - subscript. For example:\\n\\n```\\n\\tThis is ,,subscript,, text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except subscript \\n\\\\rules only subscript \\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\subscript\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /,,/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\sub\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - superscript. For example:\\n\\n```\\n\\tThis is ^^superscript^^ text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except superscript \\n\\\\rules only superscript \\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\superscript\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\^\\\\^/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(/\\\\^\\\\^/mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\sup\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for emphasis - underscore. For example:\\n\\n```\\n\\tThis is __underscore__ text\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except underscore \\n\\\\rules only underscore\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\underscore\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /__/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\t// Parse the run including the terminator\\n\\tvar tree this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\\n\\n\\t// Return the classed span\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\u\\\,\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/entity.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/entity.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for HTML entities. For example:\\n\\n```\\n\\tThis is a copyright symbol: ©\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\entity\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /(?a-zA-Z0-9{2,8};)/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Get all the details of the match\\n\\tvar entityString this.match1;\\n\\t// Move past the macro call\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Return the entity\\n\\treturn {type: \\\entity\\\, entity: this.match0};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/extlink.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/extlink.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for external links. For example:\\n\\n```\\nAn external link: https://www.tiddlywiki.com/\\n\\nA suppressed external link: ~http://www.tiddlyspace.com/\\n```\\n\\nExternal links can be suppressed by preceding them with `~`.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\extlink\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):^\\\\s\u003C>{}\\\\\\\\`|\\\\\\\\\\\^+(?:\\\\/|\\\\b)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n var start this.parser.pos;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Create the link unless it is suppressed\\n\\tif(this.match0.substr(0,1) \\\~\\\) {\\n\\t\\treturn {type: \\\text\\\, text: this.match0.substr(1)};\\n\\t} else {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\a\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\thref: {type: \\\string\\\, value: this.match0},\\n\\t\\t\\t\\t\\\class\\\: {type: \\\string\\\, value: \\\tc-tiddlylink-external\\\},\\n\\t\\t\\t\\ttarget: {type: \\\string\\\, value: \\\_blank\\\},\\n\\t\\t\\t\\trel: {type: \\\string\\\, value: \\\noopener noreferrer\\\}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\, text: this.match0, start: start, end: this.parser.pos\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for block-level filtered transclusion. For example:\\n\\n```\\n{{{ tagdocs }}}\\n{{{ tagdocs |tooltip}}}\\n{{{ tagdocs ||TemplateTitle}}}\\n{{{ tagdocs |tooltip||TemplateTitle}}}\\n{{{ tagdocs }}width:40;height:50;}.class.class\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\filteredtranscludeblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\{\\\\{\\\\{(^\\\\|+?)(?:\\\\|(^\\\\|\\\\{\\\\}+))?(?:\\\\|\\\\|(^\\\\|\\\\{\\\\}+))?\\\\}\\\\}(^\\\\}*)\\\\}(?:\\\\.(\\\\S+))?(?:\\\\r?\\\\n|$)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tvar filterStart this.parser.pos + 3;\\n\\tvar filterEnd filterStart + this.match1.length;\\n\\tvar toolTipStart filterEnd + 1;\\n\\tvar toolTipEnd toolTipStart + (this.match2 ? this.match2.length : 0);\\n\\tvar templateStart toolTipEnd + 2;\\n\\tvar templateEnd templateStart + (this.match3 ? this.match3.length : 0);\\n\\tvar styleStart templateEnd + 2;\\n\\tvar styleEnd styleStart + (this.match4 ? this.match4.length : 0);\\n\\tvar classesStart styleEnd + 1;\\n\\tvar classesEnd classesStart + (this.match5 ? this.match5.length : 0);\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Get the match details\\n\\tvar filter this.match1,\\n\\t\\ttooltip this.match2,\\n\\t\\ttemplate $tw.utils.trim(this.match3),\\n\\t\\tstyle this.match4,\\n\\t\\tclasses this.match5;\\n\\t// Return the list widget\\n\\tvar node {\\n\\t\\ttype: \\\list\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tfilter: {type: \\\string\\\, value: filter, start: filterStart, end: filterEnd},\\n\\t\\t},\\n\\t\\tisBlock: true\\n\\t};\\n\\tif(tooltip) {\\n\\t\\tnode.attributes.tooltip {type: \\\string\\\, value: tooltip, start: toolTipStart, end: toolTipEnd};\\n\\t}\\n\\tif(template) {\\n\\t\\tnode.attributes.template {type: \\\string\\\, value: template, start: templateStart, end: templateEnd};\\n\\t}\\n\\tif(style) {\\n\\t\\tnode.attributes.style {type: \\\string\\\, value: style, start: styleStart, end: styleEnd};\\n\\t}\\n\\tif(classes) {\\n\\t\\tnode.attributes.itemClass {type: \\\string\\\, value: classes.split(\\\.\\\).join(\\\ \\\), start: classesStart, end: classesEnd};\\n\\t}\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for inline filtered transclusion. For example:\\n\\n```\\n{{{ tagdocs }}}\\n{{{ tagdocs |tooltip}}}\\n{{{ tagdocs ||TemplateTitle}}}\\n{{{ tagdocs |tooltip||TemplateTitle}}}\\n{{{ tagdocs }}width:40;height:50;}.class.class\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\filteredtranscludeinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\{\\\\{\\\\{(^\\\\|+?)(?:\\\\|(^\\\\|\\\\{\\\\}+))?(?:\\\\|\\\\|(^\\\\|\\\\{\\\\}+))?\\\\}\\\\}(^\\\\}*)\\\\}(?:\\\\.(\\\\S+))?/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar filterStart this.parser.pos + 3;\\n\\tvar filterEnd filterStart + this.match1.length;\\n\\tvar toolTipStart filterEnd + 1;\\n\\tvar toolTipEnd toolTipStart + (this.match2 ? this.match2.length : 0);\\n\\tvar templateStart toolTipEnd + 2;\\n\\tvar templateEnd templateStart + (this.match3 ? this.match3.length : 0);\\n\\tvar styleStart templateEnd + 2;\\n\\tvar styleEnd styleStart + (this.match4 ? this.match4.length : 0);\\n\\tvar classesStart styleEnd + 1;\\n\\tvar classesEnd classesStart + (this.match5 ? this.match5.length : 0);\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Get the match details\\n\\tvar filter this.match1,\\n\\t\\ttooltip this.match2,\\n\\t\\ttemplate $tw.utils.trim(this.match3),\\n\\t\\tstyle this.match4,\\n\\t\\tclasses this.match5;\\n\\t// Return the list widget\\n\\tvar node {\\n\\t\\ttype: \\\list\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tfilter: {type: \\\string\\\, value: filter, start: filterStart, end: filterEnd},\\n\\t\\t}\\n\\t};\\n\\tif(tooltip) {\\n\\t\\tnode.attributes.tooltip {type: \\\string\\\, value: tooltip, start: toolTipStart, end: toolTipEnd};\\n\\t}\\n\\tif(template) {\\n\\t\\tnode.attributes.template {type: \\\string\\\, value: template, start: templateStart, end: templateEnd};\\n\\t}\\n\\tif(style) {\\n\\t\\tnode.attributes.style {type: \\\string\\\, value: style, start: styleStart, end: styleEnd};\\n\\t}\\n\\tif(classes) {\\n\\t\\tnode.attributes.itemClass {type: \\\string\\\, value: classes.split(\\\.\\\).join(\\\ \\\), start: classesStart, end: classesEnd};\\n\\t}\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/fnprocdef.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/fnprocdef.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/fnprocdef.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for function, procedure and widget definitions\\n\\n```\\n\\\\function name(param:defaultvalue,param2:defaultvalue)\\ndefinition text\\n\\\\end\\n\\n\\\\procedure name(param:defaultvalue,param2:defaultvalue)\\ndefinition text\\n\\\\end\\n\\n\\\\widget $mywidget(param:defaultvalue,param2:defaultvalue)\\ndefinition text\\n\\\\end\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\fnprocdef\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\(function|procedure|widget)\\\\s+(^(\\\\s+)\\\\((\\\\s*(^)*))?\\\\)(\\\\s*\\\\r?\\\\n)?/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Move past the macro name and parameters\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse the parameters\\n\\tvar params ;\\n\\tif(this.match3) {\\n\\t\\tparams $tw.utils.parseParameterDefinition(this.match4);\\n\\t}\\n\\t// Is the remainder of the line blank after the parameter close paren?\\n\\tvar reEnd;\\n\\tif(this.match5) {\\n\\t\\t// If so, it is a multiline definition and the end of the body is marked with \\\\end\\n\\t\\treEnd new RegExp(\\\((:?^|\\\\\\\\r?\\\\\\\\n)^\\\\\\\\S\\\\\\\\n\\\\\\\\r*\\\\\\\\\\\\\\\\end^\\\\\\\\S\\\\\\\\n\\\\\\\\r*(?:\\\ + $tw.utils.escapeRegExp(this.match2) + \\\)?\\\\\\\\s*?(?:$|\\\\\\\\r?\\\\\\\\n))\\\,\\\mg\\\);\\n\\t} else {\\n\\t\\t// Otherwise, the end of the definition is marked by the end of the line\\n\\t\\treEnd /($|\\\\r?\\\\n)/mg;\\n\\t\\t// Move past any whitespace\\n\\t\\tthis.parser.pos $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\\n\\t}\\n\\t// Find the end of the definition\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar text,\\n\\t\\tendMatch reEnd.exec(this.parser.source);\\n\\tif(endMatch) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,endMatch.index);\\n\\t\\tthis.parser.pos endMatch.index + endMatch0.length;\\n\\t} else {\\n\\t\\t// We didnt find the end of the definition, so well make it blank\\n\\t\\ttext \\\\\\;\\n\\t}\\n\\t// Save the macro definition\\n\\tvar parseTreeNodes {\\n\\t\\ttype: \\\set\\\,\\n\\t\\tattributes: {},\\n\\t\\tchildren: ,\\n\\t\\tparams: params\\n\\t};\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\name\\\,this.match2);\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\value\\\,text);\\n\\tif(this.match1 \\\function\\\) {\\n\\t\\tparseTreeNodes0.isFunctionDefinition true;\\n\\t} else if(this.match1 \\\procedure\\\) {\\n\\t\\tparseTreeNodes0.isProcedureDefinition true;\\n\\t} else if(this.match1 \\\widget\\\) {\\n\\t\\tparseTreeNodes0.isWidgetDefinition true;\\n\\t}\\n\\tif(this.parser.configTrimWhiteSpace) {\\n\\t\\tparseTreeNodes0.configTrimWhiteSpace true;\\n\\t}\\n\\treturn parseTreeNodes;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for marking areas with hard line breaks. For example:\\n\\n```\\n\\\\\\\\\\\nThis is some text\\nThat is set like\\nIt is a Poem\\nWhen it is\\nClearly\\nNot\\n\\\\\\\\\\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\hardlinebreaks\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\\(?:\\\\r?\\\\n)?/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar reEnd /(\\\\\\\\\)|(\\\\r?\\\\n)/mg,\\n\\t\\ttree ,\\n\\t\\tmatch;\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tdo {\\n\\t\\t// Parse the run up to the terminator\\n\\t\\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\\n\\t\\t// Redo the terminator match\\n\\t\\treEnd.lastIndex this.parser.pos;\\n\\t\\tmatch reEnd.exec(this.parser.source);\\n\\t\\tif(match) {\\n\\t\\t\\tvar start this.parser.pos;\\n\\t\\t\\tthis.parser.pos reEnd.lastIndex;\\n\\t\\t\\t// Add a line break if the terminator was a line break\\n\\t\\t\\tif(match2) {\\n\\t\\t\\t\\ttree.push({type: \\\element\\\, tag: \\\br\\\, start: start, end: this.parser.pos});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} while(match && !match1);\\n\\t// Return the nodes\\n\\treturn tree;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/heading.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/heading.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for headings\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\heading\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /(!{1,6})/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Get all the details of the match\\n\\tvar headingLevel this.match1.length;\\n\\t// Move past the !s\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse any classes, whitespace and then the heading itself\\n\\tvar classStart this.parser.pos;\\n\\tvar classes this.parser.parseClasses();\\n\\tvar classEnd this.parser.pos;\\n\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\tvar tree this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg);\\n\\t// Return the heading\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\h\\\ + headingLevel,\\n\\t\\tattributes: {\\n\\t\\t\\t\\\class\\\: {type: \\\string\\\, value: classes.join(\\\ \\\), start: classStart, end: classEnd}\\n\\t\\t},\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/horizrule.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/horizrule.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for rules. For example:\\n\\n```\\n---\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\horizrule\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /-{3,}\\\\r?(?:\\\\n|$)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\treturn {type: \\\element\\\, tag: \\\hr\\\};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/html.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/html.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki rule for HTML elements and widgets. For example:\\n\\n{{{\\n\u003Caside>\\nThis is an HTML5 aside element\\n\u003C/aside>\\n\\n\u003C$slider target\\\MyTiddler\\\>\\nThis is a widget invocation\\n\u003C/$slider>\\n\\n}}}\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\html\\\;\\nexports.types {inline: true, block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\t// Find the next tag\\n\\tthis.nextTag this.findNextTag(this.parser.source,startPos,{\\n\\t\\trequireLineBreak: this.is.block\\n\\t});\\n\\treturn this.nextTag ? this.nextTag.start : undefined;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Retrieve the most recent match so that recursive calls dont overwrite it\\n\\tvar tag this.nextTag;\\n\\tif (!tag.isSelfClosing) {\\n\\t\\ttag.openTagStart tag.start;\\n\\t\\ttag.openTagEnd tag.end;\\n\\t}\\n\\tthis.nextTag null;\\n\\t// Advance the parser position to past the tag\\n\\tthis.parser.pos tag.end;\\n\\t// Check for an immediately following double linebreak\\n\\tvar hasLineBreak !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/(^\\\\S\\\\n\\\\r*\\\\r?\\\\n(?:^\\\\S\\\\n\\\\r*\\\\r?\\\\n|$))/g);\\n\\t// Set whether were in block mode\\n\\ttag.isBlock this.is.block || hasLineBreak;\\n\\t// Parse the body if we need to\\n\\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) -1) {\\n\\t\\tvar reEndString \\\\u003C/\\\ + $tw.utils.escapeRegExp(tag.tag) + \\\>\\\;\\n\\t\\tif(hasLineBreak) {\\n\\t\\t\\ttag.children this.parser.parseBlocks(reEndString);\\n\\t\\t} else {\\n\\t\\t\\tvar reEnd new RegExp(\\\(\\\ + reEndString + \\\)\\\,\\\mg\\\);\\n\\t\\t\\ttag.children this.parser.parseInlineRun(reEnd,{eatTerminator: true});\\n\\t\\t}\\n\\t\\ttag.end this.parser.pos;\\n\\t\\ttag.closeTagEnd tag.end;\\n\\t\\tif (tag.closeTagEnd tag.openTagEnd || this.parser.sourcetag.closeTagEnd - 1 ! >) {\\n\\t\\t\\ttag.closeTagStart tag.end;\\n\\t\\t} else {\\n\\t\\t\\ttag.closeTagStart tag.closeTagEnd - 2;\\n\\t\\t\\tvar closeTagMinPos tag.children.length > 0 ? tag.childrentag.children.length-1.end : tag.openTagEnd;\\n\\t\\t\\tif (!Number.isSafeInteger(closeTagMinPos)) closeTagMinPos tag.openTagEnd;\\n\\t\\t\\twhile (tag.closeTagStart > closeTagMinPos) {\\n\\t\\t\\t\\tvar char this.parser.sourcetag.closeTagStart;\\n\\t\\t\\t\\tif (char >) {\\n\\t\\t\\t\\t\\ttag.closeTagStart -1;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (char \u003C) break;\\n\\t\\t\\t\\ttag.closeTagStart - 1;\\n\\t\\t\\t}\\n\\t\\t\\tif (tag.closeTagStart \u003C closeTagMinPos) {\\n\\t\\t\\t\\ttag.closeTagStart tag.end;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Return the tag\\n\\treturn tag;\\n};\\n\\n/*\\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \\\element\\\, name:, attributes: {}, orderedAttributes: , isSelfClosing:, start:, end:,}\\n*/\\nexports.parseTag function(source,pos,options) {\\n\\toptions options || {};\\n\\tvar token,\\n\\t\\tnode {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\tstart: pos,\\n\\t\\t\\tattributes: {},\\n\\t\\t\\torderedAttributes: \\n\\t\\t};\\n\\t// Define our regexps\\n\\tvar reTagName /(a-zA-Z0-9\\\\-\\\\$\\\\.+)/g;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for a less than sign\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\\u003C\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Get the tag name\\n\\ttoken $tw.utils.parseTokenRegExp(source,pos,reTagName);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tnode.tag token.match1;\\n\\tif(node.tag.charAt(0) \\\$\\\) {\\n\\t\\tnode.type node.tag.substr(1);\\n\\t}\\n\\tpos token.end;\\n\\t// Check that the tag is terminated by a space, / or >\\n\\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) \\\/\\\) && !(source.charAt(pos) \\\>\\\) ) {\\n\\t\\treturn null;\\n\\t}\\n\\t// Process attributes\\n\\tvar attribute $tw.utils.parseAttribute(source,pos);\\n\\twhile(attribute) {\\n\\t\\tnode.orderedAttributes.push(attribute);\\n\\t\\tnode.attributesattribute.name attribute;\\n\\t\\tpos attribute.end;\\n\\t\\t// Get the next attribute\\n\\t\\tattribute $tw.utils.parseAttribute(source,pos);\\n\\t}\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for a closing slash\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\/\\\);\\n\\tif(token) {\\n\\t\\tpos token.end;\\n\\t\\tnode.isSelfClosing true;\\n\\t}\\n\\t// Look for a greater than sign\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\>\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Check for a required line break\\n\\tif(options.requireLineBreak) {\\n\\t\\ttoken $tw.utils.parseTokenRegExp(source,pos,/(^\\\\S\\\\n\\\\r*\\\\r?\\\\n(?:^\\\\S\\\\n\\\\r*\\\\r?\\\\n|$))/g);\\n\\t\\tif(!token) {\\n\\t\\t\\treturn null;\\n\\t\\t}\\n\\t}\\n\\t// Update the end position\\n\\tnode.end pos;\\n\\treturn node;\\n};\\n\\nexports.findNextTag function(source,pos,options) {\\n\\t// A regexp for finding candidate HTML tags\\n\\tvar reLookahead /\u003C(a-zA-Z\\\\-\\\\$\\\\.+)/g;\\n\\t// Find the next candidate\\n\\treLookahead.lastIndex pos;\\n\\tvar match reLookahead.exec(source);\\n\\twhile(match) {\\n\\t\\t// Try to parse the candidate as a tag\\n\\t\\tvar tag this.parseTag(source,match.index,options);\\n\\t\\t// Return success\\n\\t\\tif(tag && this.isLegalTag(tag)) {\\n\\t\\t\\treturn tag;\\n\\t\\t}\\n\\t\\t// Look for the next match\\n\\t\\treLookahead.lastIndex match.index + 1;\\n\\t\\tmatch reLookahead.exec(source);\\n\\t}\\n\\t// Failed\\n\\treturn null;\\n};\\n\\nexports.isLegalTag function(tag) {\\n\\t// Widgets are always OK\\n\\tif(tag.type ! \\\element\\\) {\\n\\t\\treturn true;\\n\\t// If its an HTML tag that starts with a dash then its not legal\\n\\t} else if(tag.tag.charAt(0) \\\-\\\) {\\n\\t\\treturn false;\\n\\t} else {\\n\\t\\t// Otherwise its OK\\n\\t\\treturn true;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/image.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/image.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for embedding images. For example:\\n\\n```\\nimghttps://tiddlywiki.com/fractalveg.jpg\\nimg width23 height24 https://tiddlywiki.com/fractalveg.jpg\\nimg width{{!!width}} height{{!!height}} https://tiddlywiki.com/fractalveg.jpg\\nimgDescription of image|https://tiddlywiki.com/fractalveg.jpg\\nimgTiddlerTitle\\nimgDescription of image|TiddlerTitle\\n```\\n\\nGenerates the `\u003C$image>` widget.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\image\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\t// Find the next tag\\n\\tthis.nextImage this.findNextImage(this.parser.source,startPos);\\n\\treturn this.nextImage ? this.nextImage.start : undefined;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.nextImage.end;\\n\\tvar node {\\n\\t\\ttype: \\\image\\\,\\n\\t\\tattributes: this.nextImage.attributes\\n\\t};\\n\\treturn node;\\n};\\n\\n/*\\nFind the next image from the current position\\n*/\\nexports.findNextImage function(source,pos) {\\n\\t// A regexp for finding candidate HTML tags\\n\\tvar reLookahead /(\\\\img)/g;\\n\\t// Find the next candidate\\n\\treLookahead.lastIndex pos;\\n\\tvar match reLookahead.exec(source);\\n\\twhile(match) {\\n\\t\\t// Try to parse the candidate as a tag\\n\\t\\tvar tag this.parseImage(source,match.index);\\n\\t\\t// Return success\\n\\t\\tif(tag) {\\n\\t\\t\\treturn tag;\\n\\t\\t}\\n\\t\\t// Look for the next match\\n\\t\\treLookahead.lastIndex match.index + 1;\\n\\t\\tmatch reLookahead.exec(source);\\n\\t}\\n\\t// Failed\\n\\treturn null;\\n};\\n\\n/*\\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \\\image\\\, attributes: , isSelfClosing:, start:, end:,}\\n*/\\nexports.parseImage function(source,pos) {\\n\\tvar token,\\n\\t\\tnode {\\n\\t\\t\\ttype: \\\image\\\,\\n\\t\\t\\tstart: pos,\\n\\t\\t\\tattributes: {}\\n\\t\\t};\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for the `img`\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\img\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Process attributes\\n\\tif(source.charAt(pos) ! \\\\\\) {\\n\\t\\tvar attribute $tw.utils.parseAttribute(source,pos);\\n\\t\\twhile(attribute) {\\n\\t\\t\\tnode.attributesattribute.name attribute;\\n\\t\\t\\tpos attribute.end;\\n\\t\\t\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t\\t\\tif(source.charAt(pos) ! \\\\\\) {\\n\\t\\t\\t\\t// Get the next attribute\\n\\t\\t\\t\\tattribute $tw.utils.parseAttribute(source,pos);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tattribute null;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for the `` after the attributes\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Get the source up to the terminating ``\\n\\ttoken $tw.utils.parseTokenRegExp(source,pos,/(?:(^|\\\\*?)\\\\|)?(^\\\\+?)\\\\\\\\/g);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\tif(token.match1) {\\n\\t\\tnode.attributes.tooltip {type: \\\string\\\, value: token.match1.trim(),start: token.start,end:token.start + token.match1.length - 1};\\n\\t}\\n\\tnode.attributes.source {type: \\\string\\\, value: (token.match2 || \\\\\\).trim(), start: token.start + (token.match1 ? token.match1.length : 0), end: token.end - 2};\\n\\t// Update the end position\\n\\tnode.end pos;\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/import.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/import.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for importing variable definitions\\n\\n```\\n\\\\import $:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\import\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\import^\\\\S\\\\n/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\tvar self this;\\n\\t// Move past the pragma invocation\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse the filter terminated by a line break\\n\\tvar reMatch /(.*)(?:$|\\\\r?\\\\n)/mg;\\n\\treMatch.lastIndex this.parser.pos;\\n\\tvar filterStart this.parser.source;\\n\\tvar match reMatch.exec(this.parser.source);\\n\\tthis.parser.pos reMatch.lastIndex;\\n\\t// Parse tree nodes to return\\n\\treturn {\\n\\t\\ttype: \\\importvariables\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tfilter: {type: \\\string\\\, value: match1, start: filterStart, end: this.parser.pos}\\n\\t\\t},\\n\\t\\tchildren: \\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/list.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/list.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for lists. For example:\\n\\n```\\n* This is an unordered list\\n* It has two items\\n\\n# This is a numbered list\\n## With a subitem\\n# And a third item\\n\\n; This is a term that is being defined\\n: This is the definition of that term\\n```\\n\\nNote that lists can be nested arbitrarily:\\n\\n```\\n#** One\\n#* Two\\n#** Three\\n#**** Four\\n#**# Five\\n#**## Six\\n## Seven\\n### Eight\\n## Nine\\n```\\n\\nA CSS class can be applied to a list item as follows:\\n\\n```\\n* List item one\\n*.active List item two has the class `active`\\n* List item three\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\list\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /(\\\\*#;:>+)/mg;\\n};\\n\\nvar listTypes {\\n\\t\\\*\\\: {listTag: \\\ul\\\, itemTag: \\\li\\\},\\n\\t\\\#\\\: {listTag: \\\ol\\\, itemTag: \\\li\\\},\\n\\t\\\;\\\: {listTag: \\\dl\\\, itemTag: \\\dt\\\},\\n\\t\\\:\\\: {listTag: \\\dl\\\, itemTag: \\\dd\\\},\\n\\t\\\>\\\: {listTag: \\\blockquote\\\, itemTag: \\\div\\\}\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Array of parse tree nodes for the previous row of the list\\n\\tvar listStack ;\\n\\t// Cycle through the items in the list\\n\\twhile(true) {\\n\\t\\t// Match the list marker\\n\\t\\tvar reMatch /(\\\\*#;:>+)/mg;\\n\\t\\treMatch.lastIndex this.parser.pos;\\n\\t\\tvar start this.parser.pos;\\n\\t\\tvar match reMatch.exec(this.parser.source);\\n\\t\\tif(!match || match.index ! this.parser.pos) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Check whether the list type of the top level matches\\n\\t\\tvar listInfo listTypesmatch0.charAt(0);\\n\\t\\tif(listStack.length > 0 && listStack0.tag ! listInfo.listTag) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Move past the list marker\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t\\t// Walk through the list markers for the current row\\n\\t\\tfor(var t0; t\u003Cmatch0.length; t++) {\\n\\t\\t\\tlistInfo listTypesmatch0.charAt(t);\\n\\t\\t\\t// Remove any stacked up element if we cant re-use it because the list type doesnt match\\n\\t\\t\\tif(listStack.length > t && listStackt.tag ! listInfo.listTag) {\\n\\t\\t\\t\\tlistStack.splice(t,listStack.length - t);\\n\\t\\t\\t}\\n\\t\\t\\t// Construct the list element or reuse the previous one at this level\\n\\t\\t\\tif(listStack.length \u003C t) {\\n\\t\\t\\t\\tvar listElement {\\n\\t\\t\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\t\\t\\ttag: listInfo.listTag,\\n\\t\\t\\t\\t\\tchildren: \\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\t\\t\\t\\t\\ttag: listInfo.itemTag,\\n\\t\\t\\t\\t\\t\\t\\tchildren: ,\\n\\t\\t\\t\\t\\t\\t\\tstart: start,\\n\\t\\t\\t\\t\\t\\t\\tend: this.parser.pos,\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t,\\n\\t\\t\\t\\t\\tstart: start,\\n\\t\\t\\t\\t\\tend: this.parser.pos,\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\t// Link this list element into the last child item of the parent list item\\n\\t\\t\\t\\tif(t) {\\n\\t\\t\\t\\t\\tvar prevListItem listStackt-1.childrenlistStackt-1.children.length-1;\\n\\t\\t\\t\\t\\tprevListItem.children.push(listElement);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Save this element in the stack\\n\\t\\t\\t\\tlistStackt listElement;\\n\\t\\t\\t} else if(t (match0.length - 1)) {\\n\\t\\t\\t\\tlistStackt.children.push({\\n\\t\\t\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\t\\t\\ttag: listInfo.itemTag,\\n\\t\\t\\t\\t\\tchildren: ,\\n\\t\\t\\t\\t\\tstart: start,\\n\\t\\t\\t\\t\\tend: this.parser.pos,\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(listStack.length > match0.length) {\\n\\t\\t\\tlistStack.splice(match0.length,listStack.length - match0.length);\\n\\t\\t}\\n\\t\\t// Process the body of the list item into the last list item\\n\\t\\tvar classStart this.parser.pos;\\n\\t\\tvar lastListChildren listStacklistStack.length-1.children,\\n\\t\\t\\tlastListItem lastListChildrenlastListChildren.length-1,\\n\\t\\t\\tclasses this.parser.parseClasses();\\n\\t\\tvar classEnd this.parser.pos;\\n\\t\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\t\\tvar tree this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg);\\n\\t\\tlastListItem.children.push.apply(lastListItem.children,tree);\\n\\t\\tlastListItem.end this.parser.pos;\\n\\t\\tlistStacklistStack.length-1.end this.parser.pos;\\n\\t\\tif(classes.length > 0) {\\n\\t\\t\\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\\\ \\\));\\n\\t\\t\\tlastListItem.attributes.class.start classStart;\\n\\t\\t\\tlastListItem.attributes.class.end classEnd;\\n\\t\\t}\\n\\t\\t// Consume any whitespace following the list item\\n\\t\\tthis.parser.skipWhitespace();\\n\\t}\\n\\t// Return the root element of the list\\n\\treturn listStack0;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/macrocallblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/macrocallblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki rule for block macro calls\\n\\n```\\n\u003C\u003Cname value value2>>\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\macrocallblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\tvar nextStart startPos;\\n\\t// Try parsing at all possible macrocall openers until we match\\n\\twhile((nextStart this.parser.source.indexOf(\\\\u003C\u003C\\\,nextStart)) > 0) {\\n\\t\\tvar nextCall $tw.utils.parseMacroInvocationAsTransclusion(this.parser.source,nextStart);\\n\\t\\tif(nextCall) {\\n\\t\\t\\tvar c this.parser.source.charAt(nextCall.end);\\n\\t\\t\\t// Ensure EOL after parsed macro\\n\\t\\t\\t// If we didnt need to support IE, wed just use /(?:\\\\r?\\\\n|$)/ym\\n\\t\\t\\tif ((c \\\\\\) || (c \\\\\\\n\\\) || ((c \\\\\\\r\\\) && this.parser.source.charAt(nextCall.end+1) \\\\\\\n\\\)) {\\n\\t\\t\\t\\tthis.nextCall nextCall;\\n\\t\\t\\t\\treturn nextStart;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tnextStart + 2;\\n\\t}\\n\\treturn undefined;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\tvar call this.nextCall;\\n\\tcall.isBlock true;\\n\\tthis.nextCall null;\\n\\tthis.parser.pos call.end;\\n\\treturn call;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/macrocallinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/macrocallinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki rule for macro calls\\n\\n```\\n\u003C\u003Cname value value2>>\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\macrocallinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\tvar nextStart startPos;\\n\\t// Try parsing at all possible macrocall openers until we match\\n\\twhile((nextStart this.parser.source.indexOf(\\\\u003C\u003C\\\,nextStart)) > 0) {\\n\\t\\tthis.nextCall $tw.utils.parseMacroInvocationAsTransclusion(this.parser.source,nextStart);\\n\\t\\tif(this.nextCall) {\\n\\t\\t\\treturn nextStart;\\n\\t\\t}\\n\\t\\tnextStart + 2;\\n\\t}\\n\\treturn undefined;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\tvar call this.nextCall;\\n\\tthis.nextCall null;\\n\\tthis.parser.pos call.end;\\n\\treturn call;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/macrodef.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/macrodef.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for macro definitions\\n\\n```\\n\\\\define name(param:defaultvalue,param2:defaultvalue)\\ndefinition text, including $param$ markers\\n\\\\end\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\macrodef\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\define\\\\s+(^(\\\\s+)\\\\(\\\\s*(^)*)\\\\)(\\\\s*\\\\r?\\\\n)?/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Move past the macro name and parameters\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse the parameters\\n\\tvar paramString this.match2,\\n\\t\\tparams ;\\n\\tif(paramString ! \\\\\\) {\\n\\t\\tvar reParam /\\\\s*(A-Za-z0-9\\\\-_+)(?:\\\\s*:\\\\s*(?:\\\\\\\\\(\\\\s\\\\S*?)\\\\\\\\\|\\\(^\\\*)\\\|(^*)|\\\\\\\\(^\\\\*)\\\\\\\\|(^\\\\\\\s+)))?/mg,\\n\\t\\t\\tparamMatch reParam.exec(paramString);\\n\\t\\twhile(paramMatch) {\\n\\t\\t\\t// Save the parameter details\\n\\t\\t\\tvar paramInfo {name: paramMatch1},\\n\\t\\t\\t\\tdefaultValue paramMatch2 || paramMatch3 || paramMatch4 || paramMatch5 || paramMatch6;\\n\\t\\t\\tif(defaultValue) {\\n\\t\\t\\t\\tparamInfo\\\default\\\ defaultValue;\\n\\t\\t\\t}\\n\\t\\t\\tparams.push(paramInfo);\\n\\t\\t\\t// Look for the next parameter\\n\\t\\t\\tparamMatch reParam.exec(paramString);\\n\\t\\t}\\n\\t}\\n\\t// Is the remainder of the \\\\define line blank after the parameter close paren?\\n\\tvar reEnd;\\n\\tif(this.match3) {\\n\\t\\t// If so, it is a multiline definition and the end of the body is marked with \\\\end\\n\\t\\treEnd new RegExp(\\\((?:^|\\\\\\\\r?\\\\\\\\n)^\\\\\\\\S\\\\\\\\n\\\\\\\\r*\\\\\\\\\\\\\\\\end^\\\\\\\\S\\\\\\\\n\\\\\\\\r*(?:\\\ + $tw.utils.escapeRegExp(this.match1) + \\\)?\\\\\\\\s*?(?:$|\\\\\\\\r?\\\\\\\\n))\\\,\\\mg\\\);\\n\\t} else {\\n\\t\\t// Otherwise, the end of the definition is marked by the end of the line\\n\\t\\treEnd /($|\\\\r?\\\\n)/mg;\\n\\t\\t// Move past any whitespace\\n\\t\\tthis.parser.pos $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\\n\\t}\\n\\t// Find the end of the definition\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar text,\\n\\t\\tendMatch reEnd.exec(this.parser.source);\\n\\tif(endMatch) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,endMatch.index);\\n\\t\\tthis.parser.pos endMatch.index + endMatch0.length;\\n\\t} else {\\n\\t\\t// We didnt find the end of the definition, so well make it blank\\n\\t\\ttext \\\\\\;\\n\\t}\\n\\t// Save the macro definition\\n\\tvar parseTreeNodes {\\n\\t\\ttype: \\\set\\\,\\n\\t\\tattributes: {},\\n\\t\\tchildren: ,\\n\\t\\tparams: params,\\n\\t\\tisMacroDefinition: true\\n\\t};\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\name\\\,this.match1);\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\value\\\,text);\\n\\treturn parseTreeNodes;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/parameters.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/parameters.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/parameters.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for parameter definitions\\n\\n```\\n\\\\parameters(param:defaultvalue,param2:defaultvalue)\\ndefinition text\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\parameters\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\parameters\\\\s*\\\\((^)*)\\\\)(\\\\s*\\\\r?\\\\n)?/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Move past the macro name and parameters\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse the parameters\\n\\tvar params $tw.utils.parseParameterDefinition(this.match1);\\n\\tvar attributes Object.create(null),\\n\\t\\torderedAttributes ;\\n\\t$tw.utils.each(params,function(param) {\\n\\t\\tvar name param.name;\\n\\t\\t// Parameter names starting with dollar must be escaped to double dollars for the parameters widget\\n\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\tname \\\$\\\ + name;\\n\\t\\t}\\n\\t\\tvar attribute {name: name, type: \\\string\\\, value: param\\\default\\\ || \\\\\\};\\n\\t\\tattributesname attribute;\\n\\t\\torderedAttributes.push(attribute);\\n\\t});\\n\\t// Save the macro definition\\n\\treturn {\\n\\t\\ttype: \\\parameters\\\,\\n\\t\\tattributes: attributes,\\n\\t\\torderedAttributes: orderedAttributes\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/parsermode.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/parsermode.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/parsermode.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for parser mode specifications\\n\\n```\\n\\\\parsermode block\\n\\\\parsermode inline\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\parsermode\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\parsermode^\\\\S\\\\n/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Move past the pragma invocation\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse whitespace delimited tokens terminated by a line break\\n\\tvar reMatch /^\\\\S\\\\n*(\\\\S+)|(\\\\r?\\\\n)/mg,\\n\\t\\tparserMode undefined;\\n\\treMatch.lastIndex this.parser.pos;\\n\\tvar match reMatch.exec(this.parser.source);\\n\\twhile(match && match.index this.parser.pos) {\\n\\t\\tthis.parser.pos reMatch.lastIndex;\\n\\t\\t// Exit if weve got the line break\\n\\t\\tif(match2) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Process the token\\n\\t\\tif(match1) {\\n\\t\\t\\tparserMode match1;\\n\\t\\t}\\n\\t\\t// Match the next token\\n\\t\\tmatch reMatch.exec(this.parser.source);\\n\\t}\\n\\t// Process the tokens\\n\\tif(parserMode ! undefined) {\\n\\t\\tif(parserMode \\\block\\\) {\\n\\t\\t\\tthis.parser.parseAsInline false;\\n\\t\\t} else if(parserMode \\\inline\\\) {\\n\\t\\t\\tthis.parser.parseAsInline true;\\n\\t\\t}\\n\\t}\\n\\t// No parse tree nodes to return\\n\\treturn ;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/prettyextlink.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/prettyextlink.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for external links. For example:\\n\\n```\\nexthttps://tiddlywiki.com/fractalveg.jpg\\nextTooltip|https://tiddlywiki.com/fractalveg.jpg\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\prettyextlink\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\nexports.findNextMatch function(startPos) {\\n\\t// Find the next tag\\n\\tthis.nextLink this.findNextLink(this.parser.source,startPos);\\n\\treturn this.nextLink ? this.nextLink.start : undefined;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.nextLink.end;\\n\\treturn this.nextLink;\\n};\\n\\n/*\\nFind the next link from the current position\\n*/\\nexports.findNextLink function(source,pos) {\\n\\t// A regexp for finding candidate links\\n\\tvar reLookahead /(\\\\ext\\\\)/g;\\n\\t// Find the next candidate\\n\\treLookahead.lastIndex pos;\\n\\tvar match reLookahead.exec(source);\\n\\twhile(match) {\\n\\t\\t// Try to parse the candidate as a link\\n\\t\\tvar link this.parseLink(source,match.index);\\n\\t\\t// Return success\\n\\t\\tif(link) {\\n\\t\\t\\treturn link;\\n\\t\\t}\\n\\t\\t// Look for the next match\\n\\t\\treLookahead.lastIndex match.index + 1;\\n\\t\\tmatch reLookahead.exec(source);\\n\\t}\\n\\t// Failed\\n\\treturn null;\\n};\\n\\n/*\\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \\\element\\\, tag: \\\a\\\, attributes: , isSelfClosing:, start:, end:,}\\n*/\\nexports.parseLink function(source,pos) {\\n\\tvar token,\\n\\t\\ttextNode {\\n\\t\\t\\ttype: \\\text\\\\\n\\t\\t},\\n\\t\\tnode {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\a\\\,\\n\\t\\t\\tstart: pos,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\\class\\\: {type: \\\string\\\, value: \\\tc-tiddlylink-external\\\},\\n\\t\\t\\t},\\n\\t\\t\\tchildren: textNode\\n\\t\\t};\\n\\t// Skip whitespace\\n\\tpos $tw.utils.skipWhiteSpace(source,pos);\\n\\t// Look for the `ext`\\n\\ttoken $tw.utils.parseTokenString(source,pos,\\\ext\\\);\\n\\tif(!token) {\\n\\t\\treturn null;\\n\\t}\\n\\tpos token.end;\\n\\t// Look ahead for the terminating ``\\n\\tvar closePos source.indexOf(\\\\\\,pos);\\n\\tif(closePos -1) {\\n\\t\\treturn null;\\n\\t}\\n\\t// Look for a `|` separating the tooltip\\n\\tvar splitPos source.indexOf(\\\|\\\,pos);\\n\\tif(splitPos -1 || splitPos > closePos) {\\n\\t\\tsplitPos null;\\n\\t}\\n\\t// Pull out the tooltip and URL\\n\\tvar tooltip, URL, urlStart;\\n\\ttextNode.start pos;\\n\\tif(splitPos) {\\n\\t\\turlStart splitPos + 1;\\n\\t\\tURL source.substring(splitPos + 1,closePos).trim();\\n\\t\\ttextNode.text source.substring(pos,splitPos).trim();\\n\\t\\ttextNode.end splitPos;\\n\\t} else {\\n\\t\\turlStart pos;\\n\\t\\tURL source.substring(pos,closePos).trim();\\n\\t\\ttextNode.text URL;\\n\\t\\ttextNode.end closePos;\\n\\t}\\n\\tnode.attributes.href {type: \\\string\\\, value: URL, start: urlStart, end: closePos};\\n\\tnode.attributes.target {type: \\\string\\\, value: \\\_blank\\\};\\n\\tnode.attributes.rel {type: \\\string\\\, value: \\\noopener noreferrer\\\};\\n\\t// Update the end position\\n\\tnode.end closePos + 2;\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/prettylink.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/prettylink.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for pretty links. For example:\\n\\n```\\nIntroduction\\n\\nLink description|TiddlerTitle\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\prettylink\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\(.*?)(?:\\\\|(.*?))?\\\\\\\\/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tvar start this.parser.pos + 2;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Process the link\\n\\tvar text this.match1,\\n\\t\\tlink this.match2 || text,\\n\\t\\ttextEndPos this.parser.source.indexOf(\\\|\\\, start);\\n\\tif (textEndPos \u003C 0 || textEndPos > this.matchRegExp.lastIndex) {\\n\\t\\ttextEndPos this.matchRegExp.lastIndex - 2;\\n\\t}\\n\\tvar linkStart this.match2 ? (start + this.match1.length + 1) : start;\\n\\tvar linkEnd linkStart + link.length;\\n\\tif($tw.utils.isLinkExternal(link)) {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\a\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\thref: {type: \\\string\\\, value: link, start: linkStart, end: linkEnd},\\n\\t\\t\\t\\t\\\class\\\: {type: \\\string\\\, value: \\\tc-tiddlylink-external\\\},\\n\\t\\t\\t\\ttarget: {type: \\\string\\\, value: \\\_blank\\\},\\n\\t\\t\\t\\trel: {type: \\\string\\\, value: \\\noopener noreferrer\\\}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\, text: text, start: start, end: textEndPos\\n\\t\\t\\t}\\n\\t\\t};\\n\\t} else {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\link\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tto: {type: \\\string\\\, value: link, start: linkStart, end: linkEnd}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\, text: text, start: start, end: textEndPos\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/quoteblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/quoteblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for quote blocks.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\quoteblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /(\u003C\u003C\u003C+)/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar classes \\\tc-quote\\\;\\n\\t// Get all the details of the match\\n\\tvar reEndString \\\^\\\\\\\\s*\\\ + this.match1 + \\\(?!\u003C)\\\;\\n\\t// Move past the \u003Cs\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse any classes, whitespace and then the optional cite itself\\n\\tvar classStart this.parser.pos;\\n\\tclasses.push.apply(classes, this.parser.parseClasses());\\n\\tvar classEnd this.parser.pos;\\n\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\tvar citeStart this.parser.pos;\\n\\tvar cite this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg);\\n\\tvar citeEnd this.parser.pos;\\n\\t// before handling the cite, parse the body of the quote\\n\\tvar tree this.parser.parseBlocks(reEndString);\\n\\t// If we got a cite, put it before the text\\n\\tif(cite.length > 0) {\\n\\t\\ttree.unshift({\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\cite\\\,\\n\\t\\t\\tchildren: cite,\\n\\t\\t\\tstart: citeStart,\\n\\t\\t\\tend: citeEnd\\n\\t\\t});\\n\\t}\\n\\t// Parse any optional cite\\n\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\tciteStart this.parser.pos;\\n\\tcite this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg);\\n\\tciteEnd this.parser.pos;\\n\\t// If we got a cite, push it\\n\\tif(cite.length > 0) {\\n\\t\\ttree.push({\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\cite\\\,\\n\\t\\t\\tchildren: cite,\\n\\t\\t\\tstart: citeStart,\\n\\t\\t\\tend: citeEnd\\n\\t\\t});\\n\\t}\\n\\t// Return the blockquote element\\n\\treturn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\blockquote\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tclass: { type: \\\string\\\, value: classes.join(\\\ \\\), start: classStart, end: classEnd },\\n\\t\\t},\\n\\t\\tchildren: tree\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/rules.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/rules.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for rules specifications\\n\\n```\\n\\\\rules except ruleone ruletwo rulethree\\n\\\\rules only ruleone ruletwo rulethree\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\rules\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\rules^\\\\S\\\\n/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Move past the pragma invocation\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse whitespace delimited tokens terminated by a line break\\n\\tvar reMatch /^\\\\S\\\\n*(\\\\S+)|(\\\\r?\\\\n)/mg,\\n\\t\\ttokens ;\\n\\treMatch.lastIndex this.parser.pos;\\n\\tvar match reMatch.exec(this.parser.source);\\n\\twhile(match && match.index this.parser.pos) {\\n\\t\\tthis.parser.pos reMatch.lastIndex;\\n\\t\\t// Exit if weve got the line break\\n\\t\\tif(match2) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Process the token\\n\\t\\tif(match1) {\\n\\t\\t\\ttokens.push(match1);\\n\\t\\t}\\n\\t\\t// Match the next token\\n\\t\\tmatch reMatch.exec(this.parser.source);\\n\\t}\\n\\t// Process the tokens\\n\\tif(tokens.length > 0) {\\n\\t\\tthis.parser.amendRules(tokens0,tokens.slice(1));\\n\\t}\\n\\t// No parse tree nodes to return\\n\\treturn ;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/styleblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/styleblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\\n\\n```\\n@@.myClass\\n@@background-color:red;\\nThis paragraph will have the CSS class `myClass`.\\n\\n* The `\u003Cul>` around this list will also have the class `myClass`\\n* List item 2\\n\\n@@\\n```\\n\\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\\n\\n```\\n@@.myFirstClass.mySecondClass\\n@@width:100px;.myThirdClass\\nThis is a paragraph\\n@@\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\styleblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /@@((?:^\\\\.\\\\r\\\\n\\\\s:+:^\\\\r\\\\n;+;)+)?(?:\\\\.(^\\\\r\\\\n\\\\s+))?\\\\r?\\\\n/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar reEndString \\\^@@(?:\\\\\\\\r?\\\\\\\\n)?\\\;\\n\\tvar classes , styles ;\\n\\tdo {\\n\\t\\t// Get the class and style\\n\\t\\tif(this.match1) {\\n\\t\\t\\tstyles.push(this.match1);\\n\\t\\t}\\n\\t\\tif(this.match2) {\\n\\t\\t\\tclasses.push(this.match2.split(\\\.\\\).join(\\\ \\\));\\n\\t\\t}\\n\\t\\t// Move past the match\\n\\t\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t\\t// Look for another line of classes and styles\\n\\t\\tthis.match this.matchRegExp.exec(this.parser.source);\\n\\t} while(this.match && this.match.index this.parser.pos);\\n\\t// Parse the body\\n\\tvar tree this.parser.parseBlocks(reEndString);\\n\\tfor(var t0; t\u003Ctree.length; t++) {\\n\\t\\tif(classes.length > 0) {\\n\\t\\t\\t$tw.utils.addClassToParseTreeNode(treet,classes.join(\\\ \\\));\\n\\t\\t}\\n\\t\\tif(styles.length > 0) {\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(treet,\\\style\\\,styles.join(\\\\\\));\\n\\t\\t}\\n\\t}\\n\\treturn tree;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/styleinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/styleinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for assigning styles and classes to inline runs. For example:\\n\\n```\\n@@.myClass This is some text with a class@@\\n@@background-color:red;This is some text with a background colour@@\\n@@width:100px;.myClass This is some text with a class and a width@@\\n```\\n\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\styleinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /@@((?:^\\\\.\\\\r\\\\n\\\\s:+:^\\\\r\\\\n;+;)+)?(\\\\.(?:^\\\\r\\\\n\\\\s+)\\\\s+)?/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar reEnd /@@/g;\\n\\t// Get the styles and class\\n\\tvar stylesString this.match1,\\n\\t\\tclassString this.match2 ? this.match2.split(\\\.\\\).join(\\\ \\\) : undefined;\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse the run up to the terminator\\n\\tvar tree this.parser.parseInlineRun(reEnd,{eatTerminator: true});\\n\\t// Return the classed span\\n\\tvar node {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\span\\\,\\n\\t\\tchildren: tree\\n\\t};\\n\\tif(classString) {\\n\\t\\t$tw.utils.addClassToParseTreeNode(node,classString);\\n\\t}\\n\\tif(stylesString) {\\n\\t\\t$tw.utils.addAttributeToParseTreeNode(node,\\\style\\\,stylesString);\\n\\t}\\n\\tif(!classString && !stylesString) {\\n\\t\\t$tw.utils.addClassToParseTreeNode(node,\\\tc-inline-style\\\);\\n\\t}\\n\\treturn node;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/syslink.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/syslink.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for system tiddler links.\\nCan be suppressed preceding them with `~`.\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\syslink\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp new RegExp(\\n\\t\\t\\\~?\\\\\\\\$:\\\\\\\\/\\\ +\\n\\t\\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\\n\\t\\t\\\\\\\/._-+\\\,\\n\\t\\t\\\mg\\\\\n\\t);\\n};\\n\\nexports.parse function() {\\n\\tvar match this.match0;\\n\\t// Move past the match\\n\\tvar start this.parser.pos;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Create the link unless it is suppressed\\n\\tif(match.substr(0,1) \\\~\\\) {\\n\\t\\treturn {type: \\\text\\\, text: match.substr(1), start: start+1, end: this.parser.pos};\\n\\t} else {\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\link\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tto: {type: \\\string\\\, value: match}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\ttext: match,\\n\\t\\t\\t\\tstart: start,\\n\\t\\t\\t\\tend: this.parser.pos\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/table.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/table.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text block rule for tables.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\table\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /^\\\\|(?:^\\\\n*)\\\\|(?:fhck?)\\\\r?(?:\\\\n|$)/mg;\\n};\\n\\nvar processRow function(prevColumns) {\\n\\tvar cellRegExp /(?:\\\\|(^\\\\n\\\\|*)\\\\|)|(\\\\|fhck?\\\\r?(?:\\\\n|$))/mg,\\n\\t\\tcellTermRegExp /((?:\\\\x20*)\\\\|)/mg,\\n\\t\\ttree ,\\n\\t\\tcol 0,\\n\\t\\tcolSpanCount 1,\\n\\t\\tprevCell,\\n\\t\\tvAlign;\\n\\t// Match a single cell\\n\\tcellRegExp.lastIndex this.parser.pos;\\n\\tvar cellMatch cellRegExp.exec(this.parser.source);\\n\\twhile(cellMatch && cellMatch.index this.parser.pos) {\\n\\t\\tif(cellMatch1 \\\~\\\) {\\n\\t\\t\\t// Rowspan\\n\\t\\t\\tvar last prevColumnscol;\\n\\t\\t\\tif(last) {\\n\\t\\t\\t\\tlast.rowSpanCount++;\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\rowspan\\\,last.rowSpanCount);\\n\\t\\t\\t\\tvAlign $tw.utils.getAttributeValueFromParseTreeNode(last.element,\\\valign\\\,\\\center\\\);\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\valign\\\,vAlign);\\n\\t\\t\\t\\tif(colSpanCount > 1) {\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(last.element,\\\colspan\\\,colSpanCount);\\n\\t\\t\\t\\t\\tcolSpanCount 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Move to just before the `|` terminating the cell\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t} else if(cellMatch1 \\\>\\\) {\\n\\t\\t\\t// Colspan\\n\\t\\t\\tcolSpanCount++;\\n\\t\\t\\t// Move to just before the `|` terminating the cell\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t} else if(cellMatch1 \\\\u003C\\\ && prevCell) {\\n\\t\\t\\tcolSpanCount 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\\\colspan\\\,1);\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(prevCell,\\\colspan\\\,colSpanCount);\\n\\t\\t\\tcolSpanCount 1;\\n\\t\\t\\t// Move to just before the `|` terminating the cell\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t} else if(cellMatch2) {\\n\\t\\t\\t// End of row\\n\\t\\t\\tif(prevCell && colSpanCount > 1) {\\n\\t\\t\\t\\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\\n\\t\\t\\t\\t\\t\\tcolSpanCount + prevCell.attributes.colspan.value;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tcolSpanCount - 1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(prevCell,\\\colspan\\\,colSpanCount);\\n\\t\\t\\t}\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t\\tbreak;\\n\\t\\t} else {\\n\\t\\t\\t// For ordinary cells, step beyond the opening `|`\\n\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t// Look for a space at the start of the cell\\n\\t\\t\\tvar spaceLeft false;\\n\\t\\t\\tvAlign null;\\n\\t\\t\\tif(this.parser.source.substr(this.parser.pos).search(/^\\\\^(^\\\\^|\\\\^\\\\^)/) 0) {\\n\\t\\t\\t\\tvAlign \\\top\\\;\\n\\t\\t\\t} else if(this.parser.source.substr(this.parser.pos).search(/^,(^,|,,)/) 0) {\\n\\t\\t\\t\\tvAlign \\\bottom\\\;\\n\\t\\t\\t}\\n\\t\\t\\tif(vAlign) {\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t}\\n\\t\\t\\tvar chr this.parser.source.substr(this.parser.pos,1);\\n\\t\\t\\twhile(chr \\\ \\\) {\\n\\t\\t\\t\\tspaceLeft true;\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\tchr this.parser.source.substr(this.parser.pos,1);\\n\\t\\t\\t}\\n\\t\\t\\t// Check whether this is a heading cell\\n\\t\\t\\tvar cell;\\n\\t\\t\\tvar start this.parser.pos;\\n\\t\\t\\tif(chr \\\!\\\) {\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\tcell {type: \\\element\\\, tag: \\\th\\\, start: start, children: };\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcell {type: \\\element\\\, tag: \\\td\\\, start: start, children: };\\n\\t\\t\\t}\\n\\t\\t\\ttree.push(cell);\\n\\t\\t\\t// Record information about this cell\\n\\t\\t\\tprevCell cell;\\n\\t\\t\\tprevColumnscol {rowSpanCount:1,element:cell};\\n\\t\\t\\t// Check for a colspan\\n\\t\\t\\tif(colSpanCount > 1) {\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\colspan\\\,colSpanCount);\\n\\t\\t\\t\\tcolSpanCount 1;\\n\\t\\t\\t}\\n\\t\\t\\t// Parse the cell\\n\\t\\t\\tcell.children this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\\n\\t\\t\\t// Set the alignment for the cell\\n\\t\\t\\tif(vAlign) {\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\valign\\\,vAlign);\\n\\t\\t\\t}\\n\\t\\t\\tif(this.parser.source.substr(this.parser.pos - 2,1) \\\ \\\) { // spaceRight\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\align\\\,spaceLeft ? \\\center\\\ : \\\left\\\);\\n\\t\\t\\t} else if(spaceLeft) {\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(cell,\\\align\\\,\\\right\\\);\\n\\t\\t\\t}\\n\\t\\t\\t// Move back to the closing `|`\\n\\t\\t\\tthis.parser.pos--;\\n\\t\\t\\tcell.end this.parser.pos;\\n\\t\\t}\\n\\t\\tcol++;\\n\\t\\tcellRegExp.lastIndex this.parser.pos;\\n\\t\\tcellMatch cellRegExp.exec(this.parser.source);\\n\\t}\\n\\treturn tree;\\n};\\n\\nexports.parse function() {\\n\\tvar rowContainerTypes {\\\c\\\:\\\caption\\\, \\\h\\\:\\\thead\\\, \\\\\\:\\\tbody\\\, \\\f\\\:\\\tfoot\\\},\\n\\t\\ttable {type: \\\element\\\, tag: \\\table\\\, children: },\\n\\t\\trowRegExp /^\\\\|(^\\\\n*)\\\\|(fhck?)\\\\r?(?:\\\\n|$)/mg,\\n\\t\\trowTermRegExp /(\\\\|(?:fhck?)\\\\r?(?:\\\\n|$))/mg,\\n\\t\\tprevColumns ,\\n\\t\\tcurrRowType,\\n\\t\\trowContainer,\\n\\t\\trowCount 0;\\n\\t// Match the row\\n\\trowRegExp.lastIndex this.parser.pos;\\n\\tvar rowMatch rowRegExp.exec(this.parser.source);\\n\\twhile(rowMatch && rowMatch.index this.parser.pos) {\\n\\t\\tvar rowType rowMatch2;\\n\\t\\t// Check if it is a class assignment\\n\\t\\tif(rowType \\\k\\\) {\\n\\t\\t\\t$tw.utils.addClassToParseTreeNode(table,rowMatch1);\\n\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t} else {\\n\\t\\t\\t// Otherwise, create a new row if this one is of a different type\\n\\t\\t\\tif(rowType ! currRowType) {\\n\\t\\t\\t\\trowContainer {type: \\\element\\\, tag: rowContainerTypesrowType, children: , start: this.parser.pos, end: this.parser.pos};\\n\\t\\t\\t\\ttable.children.push(rowContainer);\\n\\t\\t\\t\\tcurrRowType rowType;\\n\\t\\t\\t}\\n\\t\\t\\t// Is this a caption row?\\n\\t\\t\\tif(currRowType \\\c\\\) {\\n\\t\\t\\t\\t// If so, move past the opening `|` of the row\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\t// Move the caption to the first row if it isnt already\\n\\t\\t\\t\\tif(table.children.length ! 1) {\\n\\t\\t\\t\\t\\ttable.children.pop(); // Take rowContainer out of the children array\\n\\t\\t\\t\\t\\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Set the alignment - TODO: figure out why TW did this\\n//\\t\\t\\t\\trowContainer.attributes.align rowCount 0 ? \\\top\\\ : \\\bottom\\\;\\n\\t\\t\\t\\t// Parse the caption\\n\\t\\t\\t\\trowContainer.children this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Create the row\\n\\t\\t\\t\\tvar theRow {type: \\\element\\\, tag: \\\tr\\\, children: , start: rowMatch.index};\\n\\t\\t\\t\\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \\\oddRow\\\ : \\\evenRow\\\);\\n\\t\\t\\t\\trowContainer.children.push(theRow);\\n\\t\\t\\t\\t// Process the row\\n\\t\\t\\t\\ttheRow.children processRow.call(this,prevColumns);\\n\\t\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t\\t\\ttheRow.end this.parser.pos;\\n\\t\\t\\t\\t// Increment the row count\\n\\t\\t\\t\\trowCount++;\\n\\t\\t\\t}\\n\\t\\t\\trowContainer.end this.parser.pos;\\n\\t\\t}\\n\\t\\trowMatch rowRegExp.exec(this.parser.source);\\n\\t}\\n\\treturn table;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/transcludeblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/transcludeblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for block-level transclusion. For example:\\n\\n```\\n{{MyTiddler}}\\n{{MyTiddler||TemplateTitle}}\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\transcludeblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\{\\\\{(^\\\\{\\\\}\\\\|*)(?:\\\\|\\\\|(^\\\\|\\\\{\\\\}+))?(?:\\\\|(^\\\\{\\\\}+))?\\\\}\\\\}(?:\\\\r?\\\\n|$)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Get the match details\\n\\tvar template $tw.utils.trim(this.match2),\\n\\t\\ttextRef $tw.utils.trim(this.match1),\\n\\t\\tparams this.match3 ? this.match3.split(\\\|\\\) : ;\\n\\t// Prepare the transclude widget\\n\\tvar transcludeNode {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {},\\n\\t\\t\\tisBlock: true\\n\\t\\t};\\n\\t$tw.utils.each(params,function(paramValue,index) {\\n\\t\\tvar name \\\\\\ + index;\\n\\t\\ttranscludeNode.attributesname {\\n\\t\\t\\tname: name,\\n\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\tvalue: paramValue\\n\\t\\t}\\n\\t});\\n\\t// Prepare the tiddler widget\\n\\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\\n\\tif(textRef) {\\n\\t\\ttr $tw.utils.parseTextReference(textRef);\\n\\t\\ttargetTitle tr.title;\\n\\t\\ttargetField tr.field;\\n\\t\\ttargetIndex tr.index;\\n\\t\\ttiddlerNode {\\n\\t\\t\\ttype: \\\tiddler\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {name: \\\tiddler\\\, type: \\\string\\\, value: targetTitle}\\n\\t\\t\\t},\\n\\t\\t\\tisBlock: true,\\n\\t\\t\\tchildren: transcludeNode\\n\\t\\t};\\n\\t}\\n\\tif(template) {\\n\\t\\ttranscludeNode.attributes\\\$tiddler\\\ {name: \\\$tiddler\\\, type: \\\string\\\, value: template};\\n\\t\\tif(textRef) {\\n\\t\\t\\treturn tiddlerNode;\\n\\t\\t} else {\\n\\t\\t\\treturn transcludeNode;\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(textRef) {\\n\\t\\t\\ttranscludeNode.attributes\\\$tiddler\\\ {name: \\\$tiddler\\\, type: \\\string\\\, value: targetTitle};\\n\\t\\t\\tif(targetField) {\\n\\t\\t\\t\\ttranscludeNode.attributes\\\$field\\\ {name: \\\$field\\\, type: \\\string\\\, value: targetField};\\n\\t\\t\\t}\\n\\t\\t\\tif(targetIndex) {\\n\\t\\t\\t\\ttranscludeNode.attributes\\\$index\\\ {name: \\\$index\\\, type: \\\string\\\, value: targetIndex};\\n\\t\\t\\t}\\n\\t\\t\\treturn tiddlerNode;\\n\\t\\t} else {\\n\\t\\t\\treturn transcludeNode;\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/transcludeinline.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/transcludeinline.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for inline-level transclusion. For example:\\n\\n```\\n{{MyTiddler}}\\n{{MyTiddler||TemplateTitle}}\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\transcludeinline\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\{\\\\{(^\\\\{\\\\}\\\\|*)(?:\\\\|\\\\|(^\\\\|\\\\{\\\\}+))?(?:\\\\|(^\\\\{\\\\}+))?\\\\}\\\\}/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Get the match details\\n\\tvar template $tw.utils.trim(this.match2),\\n\\t\\ttextRef $tw.utils.trim(this.match1),\\n\\t\\tparams this.match3 ? this.match3.split(\\\|\\\) : ;\\n\\t// Prepare the transclude widget\\n\\tvar transcludeNode {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {}\\n\\t\\t};\\n\\t$tw.utils.each(params,function(paramValue,index) {\\n\\t\\tvar name \\\\\\ + index;\\n\\t\\ttranscludeNode.attributesname {\\n\\t\\t\\tname: name,\\n\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\tvalue: paramValue\\n\\t\\t}\\n\\t});\\n\\t// Prepare the tiddler widget\\n\\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\\n\\tif(textRef) {\\n\\t\\ttr $tw.utils.parseTextReference(textRef);\\n\\t\\ttargetTitle tr.title;\\n\\t\\ttargetField tr.field;\\n\\t\\ttargetIndex tr.index;\\n\\t\\ttiddlerNode {\\n\\t\\t\\ttype: \\\tiddler\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {name: \\\tiddler\\\, type: \\\string\\\, value: targetTitle}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: transcludeNode\\n\\t\\t};\\n\\t}\\n\\tif(template) {\\n\\t\\ttranscludeNode.attributes\\\$tiddler\\\ {name: \\\$tiddler\\\, type: \\\string\\\, value: template};\\n\\t\\tif(textRef) {\\n\\t\\t\\treturn tiddlerNode;\\n\\t\\t} else {\\n\\t\\t\\treturn transcludeNode;\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(textRef) {\\n\\t\\t\\ttranscludeNode.attributes\\\$tiddler\\\ {name: \\\$tiddler\\\, type: \\\string\\\, value: targetTitle};\\n\\t\\t\\tif(targetField) {\\n\\t\\t\\t\\ttranscludeNode.attributes\\\$field\\\ {name: \\\$field\\\, type: \\\string\\\, value: targetField};\\n\\t\\t\\t}\\n\\t\\t\\tif(targetIndex) {\\n\\t\\t\\t\\ttranscludeNode.attributes\\\$index\\\ {name: \\\$index\\\, type: \\\string\\\, value: targetIndex};\\n\\t\\t\\t}\\n\\t\\t\\treturn tiddlerNode;\\n\\t\\t} else {\\n\\t\\t\\treturn transcludeNode;\\n\\t\\t}\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/typedblock.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/typedblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text rule for typed blocks. For example:\\n\\n```\\n$$$.js\\nThis will be rendered as JavaScript\\n$$$\\n\\n$$$.svg\\n\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\150\\\ height\\\100\\\>\\n \u003Ccircle cx\\\100\\\ cy\\\50\\\ r\\\40\\\ stroke\\\black\\\ stroke-width\\\2\\\ fill\\\red\\\ />\\n\u003C/svg>\\n$$$\\n\\n$$$text/vnd.tiddlywiki>text/html\\nThis will be rendered as an //HTML representation// of WikiText\\n$$$\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nexports.name \\\typedblock\\\;\\nexports.types {block: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\$\\\\$\\\\$(^ >\\\\r\\\\n*)(?: *> *(^ \\\\r\\\\n+))?\\\\r?\\\\n/mg;\\n};\\n\\nexports.parse function() {\\n\\tvar reEnd /\\\\r?\\\\n\\\\$\\\\$\\\\$\\\\r?(?:\\\\n|$)/mg;\\n\\t// Save the type\\n\\tvar parseType this.match1,\\n\\t\\trenderType this.match2;\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar start this.parser.pos;\\n\\t// Look for the end of the block\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(this.parser.source),\\n\\t\\ttext;\\n\\t// Process the block\\n\\tif(match) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\ttext this.parser.source.substr(this.parser.pos);\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\t// Parse the block according to the specified type\\n\\tvar parser this.parser.wiki.parseText(parseType,text,{defaultType: \\\text/plain\\\});\\n\\t// If theres no render type, just return the parse tree\\n\\tif(!renderType) {\\n\\t\\treturn parser.tree;\\n\\t} else {\\n\\t\\t// Otherwise, render to the rendertype and return in a \u003CPRE> tag\\n\\t\\tvar widgetNode this.parser.wiki.makeWidget(parser),\\n\\t\\t\\tcontainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\twidgetNode.render(container,null);\\n\\t\\ttext renderType \\\text/html\\\ ? container.innerHTML : container.textContent;\\n\\t\\treturn {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\pre\\\,\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\ttext: text,\\n\\t\\t\\t\\tstart: start,\\n\\t\\t\\t\\tend: this.parser.pos\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/whitespace.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/whitespace.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki pragma rule for whitespace specifications\\n\\n```\\n\\\\whitespace trim\\n\\\\whitespace notrim\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\whitespace\\\;\\nexports.types {pragma: true};\\n\\n/*\\nInstantiate parse rule\\n*/\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\\\\\whitespace^\\\\S\\\\n/mg;\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\tvar self this;\\n\\t// Move past the pragma invocation\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Parse whitespace delimited tokens terminated by a line break\\n\\tvar reMatch /^\\\\S\\\\n*(\\\\S+)|(\\\\r?\\\\n)/mg,\\n\\t\\ttokens ;\\n\\treMatch.lastIndex this.parser.pos;\\n\\tvar match reMatch.exec(this.parser.source);\\n\\twhile(match && match.index this.parser.pos) {\\n\\t\\tthis.parser.pos reMatch.lastIndex;\\n\\t\\t// Exit if weve got the line break\\n\\t\\tif(match2) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Process the token\\n\\t\\tif(match1) {\\n\\t\\t\\ttokens.push(match1);\\n\\t\\t}\\n\\t\\t// Match the next token\\n\\t\\tmatch reMatch.exec(this.parser.source);\\n\\t}\\n\\t// Process the tokens\\n\\t$tw.utils.each(tokens,function(token) {\\n\\t\\tswitch(token) {\\n\\t\\t\\tcase \\\trim\\\:\\n\\t\\t\\t\\tself.parser.configTrimWhiteSpace true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\notrim\\\:\\n\\t\\t\\t\\tself.parser.configTrimWhiteSpace false;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t});\\n\\t// No parse tree nodes to return\\n\\treturn ;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/wikilink.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/wikilink.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for wiki links. For example:\\n\\n```\\nAWikiLink\\nAnotherLink\\n~SuppressedLink\\n```\\n\\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\wikilink\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp new RegExp($tw.config.textPrimitives.unWikiLink + \\\?\\\ + $tw.config.textPrimitives.wikiLink,\\\mg\\\);\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Get the details of the match\\n\\tvar linkText this.match0;\\n\\t// Move past the macro call\\n\\tvar start this.parser.pos;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// If the link starts with the unwikilink character then just output it as plain text\\n\\tif(linkText.substr(0,1) $tw.config.textPrimitives.unWikiLink) {\\n\\t\\treturn {type: \\\text\\\, text: linkText.substr(1)};\\n\\t}\\n\\t// If the link has been preceded with a blocked letter then dont treat it as a link\\n\\tif(this.match.index > 0) {\\n\\t\\tvar preRegExp new RegExp($tw.config.textPrimitives.blockPrefixLetters,\\\mg\\\);\\n\\t\\tpreRegExp.lastIndex this.match.index-1;\\n\\t\\tvar preMatch preRegExp.exec(this.parser.source);\\n\\t\\tif(preMatch && preMatch.index this.match.index-1) {\\n\\t\\t\\treturn {type: \\\text\\\, text: linkText};\\n\\t\\t}\\n\\t}\\n\\treturn {\\n\\t\\ttype: \\\link\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tto: {type: \\\string\\\, value: linkText}\\n\\t\\t},\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\ttext: linkText,\\n\\t\\t\\tstart: start,\\n\\t\\t\\tend: this.parser.pos\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/rules/wikilinkprefix.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/wikilinkprefix.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilinkprefix.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for suppressed wiki links. For example:\\n\\n```\\n~SuppressedLink\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\wikilinkprefix\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp new RegExp($tw.config.textPrimitives.unWikiLink + $tw.config.textPrimitives.wikiLink,\\\mg\\\);\\n};\\n\\n/*\\nParse the most recent match\\n*/\\nexports.parse function() {\\n\\t// Get the details of the match\\n\\tvar linkText this.match0;\\n\\t// Move past the wikilink\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Return the link without unwikilink character as plain text\\n\\treturn {type: \\\text\\\, text: linkText.substr(1)};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/core/modules/parsers/wikiparser/wikiparser.js\:{\title\:\$:/core/modules/parsers/wikiparser/wikiparser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\\ntype: application/javascript\\nmodule-type: parser\\n\\nThe wiki text parser processes blocks of source text into a parse tree.\\n\\nThe parse tree is made up of nested arrays of these JavaScript objects:\\n\\n\\t{type: \\\element\\\, tag: \u003Cstring>, attributes: {}, children: } - an HTML element\\n\\t{type: \\\text\\\, text: \u003Cstring>} - a text node\\n\\t{type: \\\entity\\\, value: \u003Cstring>} - an entity\\n\\t{type: \\\raw\\\, html: \u003Cstring>} - raw HTML\\n\\nAttributes are stored as hashmaps of the following objects:\\n\\n\\t{type: \\\string\\\, value: \u003Cstring>} - literal string\\n\\t{type: \\\indirect\\\, textReference: \u003CtextReference>} - indirect through a text reference\\n\\t{type: \\\macro\\\, macro: \u003CTBD>} - indirect through a macro invocation\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\ntype: content type of text\\ntext: text to be parsed\\noptions: see below:\\n\\tparseAsInline: true to parse text as inline instead of block\\n\\twiki: reference to wiki to use\\n\\t_canonical_uri: optional URI of content if text is missing or empty\\n\\tconfigTrimWhiteSpace: true to trim whitespace\\n*/\\nvar WikiParser function(type,text,options) {\\n\\tthis.wiki options.wiki;\\n\\tvar self this;\\n\\t// Check for an externally linked tiddler\\n\\tif($tw.browser && (text || \\\\\\) \\\\\\ && options._canonical_uri) {\\n\\t\\tthis.loadRemoteTiddler(options._canonical_uri);\\n\\t\\ttext $tw.language.getRawString(\\\LazyLoadingWarning\\\);\\n\\t}\\n\\t// Save the parse text\\n\\tthis.type type || \\\text/vnd.tiddlywiki\\\;\\n\\tthis.source text || \\\\\\;\\n\\tthis.sourceLength this.source.length;\\n\\t// Flag for ignoring whitespace\\n\\tthis.configTrimWhiteSpace options.configTrimWhiteSpace ! undefined ? options.configTrimWhiteSpace : false;\\n\\t// Parser mode\\n\\tthis.parseAsInline options.parseAsInline;\\n\\t// Set current parse position\\n\\tthis.pos 0;\\n\\t// Start with empty output\\n\\tthis.tree ;\\n\\t// Assemble the rule classes were going to use\\n\\tvar pragmaRuleClasses, blockRuleClasses, inlineRuleClasses;\\n\\tif(options.rules) {\\n\\t\\tpragmaRuleClasses options.rules.pragma;\\n\\t\\tblockRuleClasses options.rules.block;\\n\\t\\tinlineRuleClasses options.rules.inline;\\n\\t} else {\\n\\t\\t// Setup the rule classes if we dont have them already\\n\\t\\tif(!this.pragmaRuleClasses) {\\n\\t\\t\\tWikiParser.prototype.pragmaRuleClasses $tw.modules.createClassesFromModules(\\\wikirule\\\,\\\pragma\\\,$tw.WikiRuleBase);\\n\\t\\t\\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\\\$:/config/WikiParserRules/Pragmas/\\\);\\n\\t\\t}\\n\\t\\tpragmaRuleClasses this.pragmaRuleClasses;\\n\\t\\tif(!this.blockRuleClasses) {\\n\\t\\t\\tWikiParser.prototype.blockRuleClasses $tw.modules.createClassesFromModules(\\\wikirule\\\,\\\block\\\,$tw.WikiRuleBase);\\n\\t\\t\\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\\\$:/config/WikiParserRules/Block/\\\);\\n\\t\\t}\\n\\t\\tblockRuleClasses this.blockRuleClasses;\\n\\t\\tif(!this.inlineRuleClasses) {\\n\\t\\t\\tWikiParser.prototype.inlineRuleClasses $tw.modules.createClassesFromModules(\\\wikirule\\\,\\\inline\\\,$tw.WikiRuleBase);\\n\\t\\t\\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\\\$:/config/WikiParserRules/Inline/\\\);\\n\\t\\t}\\n\\t\\tinlineRuleClasses this.inlineRuleClasses;\\n\\t}\\n\\t// Instantiate the pragma parse rules\\n\\tthis.pragmaRules this.instantiateRules(pragmaRuleClasses,\\\pragma\\\,0);\\n\\t// Instantiate the parser block and inline rules\\n\\tthis.blockRules this.instantiateRules(blockRuleClasses,\\\block\\\,0);\\n\\tthis.inlineRules this.instantiateRules(inlineRuleClasses,\\\inline\\\,0);\\n\\t// Parse any pragmas\\n\\tvar topBranch this.parsePragmas();\\n\\t// Parse the text into inline runs or blocks\\n\\tif(this.parseAsInline) {\\n\\t\\ttopBranch.push.apply(topBranch,this.parseInlineRun());\\n\\t} else {\\n\\t\\ttopBranch.push.apply(topBranch,this.parseBlocks());\\n\\t}\\n\\t// Build rules name map\\n\\tthis.usingRuleMap {};\\n\\t$tw.utils.each(this.pragmaRules, function (ruleInfo) { self.usingRuleMapruleInfo.rule.name Object.getPrototypeOf(ruleInfo.rule); });\\n\\t$tw.utils.each(this.blockRules, function (ruleInfo) { self.usingRuleMapruleInfo.rule.name Object.getPrototypeOf(ruleInfo.rule); });\\n\\t$tw.utils.each(this.inlineRules, function (ruleInfo) { self.usingRuleMapruleInfo.rule.name Object.getPrototypeOf(ruleInfo.rule); });\\n\\t// Return the parse tree\\n};\\n\\n/*\\n*/\\nWikiParser.prototype.loadRemoteTiddler function(url) {\\n\\tvar self this;\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: url,\\n\\t\\ttype: \\\GET\\\,\\n\\t\\tcallback: function(err,data) {\\n\\t\\t\\tif(!err) {\\n\\t\\t\\t\\tvar tiddlers self.wiki.deserializeTiddlers(\\\.tid\\\,data,self.wiki.getCreationFields());\\n\\t\\t\\t\\t$tw.utils.each(tiddlers,function(tiddler) {\\n\\t\\t\\t\\t\\ttiddler\\\_canonical_uri\\\ url;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tif(tiddlers) {\\n\\t\\t\\t\\t\\tself.wiki.addTiddlers(tiddlers);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\n*/\\nWikiParser.prototype.setupRules function(proto,configPrefix) {\\n\\tvar self this;\\n\\tif(!$tw.safeMode) {\\n\\t\\t$tw.utils.each(proto,function(object,name) {\\n\\t\\t\\tif(self.wiki.getTiddlerText(configPrefix + name,\\\enable\\\) ! \\\enable\\\) {\\n\\t\\t\\t\\tdelete protoname;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nInstantiate an array of parse rules\\n*/\\nWikiParser.prototype.instantiateRules function(classes,type,startPos) {\\n\\tvar rulesInfo ,\\n\\t\\tself this;\\n\\t$tw.utils.each(classes,function(RuleClass) {\\n\\t\\t// Instantiate the rule\\n\\t\\tvar rule new RuleClass(self);\\n\\t\\trule.is {};\\n\\t\\trule.istype true;\\n\\t\\trule.init(self);\\n\\t\\tvar matchIndex rule.findNextMatch(startPos);\\n\\t\\tif(matchIndex ! undefined) {\\n\\t\\t\\trulesInfo.push({\\n\\t\\t\\t\\trule: rule,\\n\\t\\t\\t\\tmatchIndex: matchIndex\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\treturn rulesInfo;\\n};\\n\\n/*\\nSkip any whitespace at the current position. Options are:\\n\\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\\n*/\\nWikiParser.prototype.skipWhitespace function(options) {\\n\\toptions options || {};\\n\\tvar whitespaceRegExp options.treatNewlinesAsNonWhitespace ? /(^\\\\S\\\\n+)/mg : /(\\\\s+)/mg;\\n\\twhitespaceRegExp.lastIndex this.pos;\\n\\tvar whitespaceMatch whitespaceRegExp.exec(this.source);\\n\\tif(whitespaceMatch && whitespaceMatch.index this.pos) {\\n\\t\\tthis.pos whitespaceRegExp.lastIndex;\\n\\t}\\n};\\n\\n/*\\nGet the next match out of an array of parse rule instances\\n*/\\nWikiParser.prototype.findNextMatch function(rules,startPos) {\\n\\t// Find the best matching rule by finding the closest match position\\n\\tvar matchingRule,\\n\\t\\tmatchingRulePos this.sourceLength;\\n\\t// Step through each rule\\n\\tfor(var t0; t\u003Crules.length; t++) {\\n\\t\\tvar ruleInfo rulest;\\n\\t\\t// Ask the rule to get the next match if weve moved past the current one\\n\\t\\tif(ruleInfo.matchIndex ! undefined && ruleInfo.matchIndex \u003C startPos) {\\n\\t\\t\\truleInfo.matchIndex ruleInfo.rule.findNextMatch(startPos);\\n\\t\\t}\\n\\t\\t// Adopt this match if its closer than the current best match\\n\\t\\tif(ruleInfo.matchIndex ! undefined && ruleInfo.matchIndex \u003C matchingRulePos) {\\n\\t\\t\\tmatchingRule ruleInfo;\\n\\t\\t\\tmatchingRulePos ruleInfo.matchIndex;\\n\\t\\t}\\n\\t}\\n\\treturn matchingRule;\\n};\\n\\n/*\\nParse any pragmas at the beginning of a block of parse text\\n*/\\nWikiParser.prototype.parsePragmas function() {\\n\\tvar currentTreeBranch this.tree;\\n\\twhile(true) {\\n\\t\\tvar savedPos this.pos;\\n\\t\\t// Skip whitespace\\n\\t\\tthis.skipWhitespace();\\n\\t\\t// Check for the end of the text\\n\\t\\tif(this.pos > this.sourceLength) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Check if weve arrived at a pragma rule match\\n\\t\\tvar nextMatch this.findNextMatch(this.pragmaRules,this.pos);\\n\\t\\t// If not, just exit\\n\\t\\tif(!nextMatch || nextMatch.matchIndex ! this.pos) {\\n\\t\\t\\tthis.pos savedPos;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\t// Process the pragma rule\\n\\t\\tvar start this.pos;\\n\\t\\tvar subTree nextMatch.rule.parse();\\n\\t\\tif(subTree.length > 0) {\\n\\t\\t\\t// Set the start and end positions of the pragma rule if\\n\\t\\t\\tif (subTree0.start undefined) subTree0.start start;\\n\\t\\t\\tif (subTreesubTree.length - 1.end undefined) subTreesubTree.length - 1.end this.pos;\\n\\t\\t\\t$tw.utils.each(subTree, function (node) { node.rule nextMatch.rule.name; });\\n\\t\\t\\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\\n\\t\\t\\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\\n\\t\\t\\tsubTree0.children ;\\n\\t\\t\\tcurrentTreeBranch subTree0.children;\\n\\t\\t}\\n\\t\\t// Skip whitespace after the pragma\\n\\t\\tthis.skipWhitespace();\\n\\t}\\n\\treturn currentTreeBranch;\\n};\\n\\n/*\\nParse a block from the current position\\n\\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\\n*/\\nWikiParser.prototype.parseBlock function(terminatorRegExpString) {\\n\\tvar terminatorRegExp terminatorRegExpString ? new RegExp(terminatorRegExpString + \\\|\\\\\\\\r?\\\\\\\\n\\\\\\\\r?\\\\\\\\n\\\,\\\mg\\\) : /(\\\\r?\\\\n\\\\r?\\\\n)/mg;\\n\\tthis.skipWhitespace();\\n\\tif(this.pos > this.sourceLength) {\\n\\t\\treturn ;\\n\\t}\\n\\t// Look for a block rule that applies at the current position\\n\\tvar nextMatch this.findNextMatch(this.blockRules,this.pos);\\n\\tif(nextMatch && nextMatch.matchIndex this.pos) {\\n\\t\\tvar start this.pos;\\n\\t\\tvar subTree nextMatch.rule.parse();\\n\\t\\t// Set the start and end positions of the first and last blocks if theyre not already set\\n\\t\\tif (subTree.length > 0) {\\n\\t\\t\\tif (subTree0.start undefined) subTree0.start start;\\n\\t\\t\\tif (subTreesubTree.length - 1.end undefined) subTreesubTree.length - 1.end this.pos;\\n\\t\\t}\\n\\t\\t$tw.utils.each(subTree, function (node) { node.rule nextMatch.rule.name; });\\n\\t\\treturn subTree;\\n\\t}\\n\\t// Treat it as a paragraph if we didnt find a block rule\\n\\tvar start this.pos;\\n\\tvar children this.parseInlineRun(terminatorRegExp);\\n\\tvar end this.pos;\\n\\treturn {type: \\\element\\\, tag: \\\p\\\, children: children, start: start, end: end };\\n};\\n\\n/*\\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\\n\\tterminatorRegExpString: terminating regular expression\\n*/\\nWikiParser.prototype.parseBlocks function(terminatorRegExpString) {\\n\\tif(terminatorRegExpString) {\\n\\t\\treturn this.parseBlocksTerminated(terminatorRegExpString);\\n\\t} else {\\n\\t\\treturn this.parseBlocksUnterminated();\\n\\t}\\n};\\n\\n/*\\nParse a block from the current position to the end of the text\\n*/\\nWikiParser.prototype.parseBlocksUnterminated function() {\\n\\tvar tree ;\\n\\twhile(this.pos \u003C this.sourceLength) {\\n\\t\\ttree.push.apply(tree,this.parseBlock());\\n\\t}\\n\\treturn tree;\\n};\\n\\n/*\\nParse blocks of text until a terminating regexp is encountered. Wrapper for parseBlocksTerminatedExtended that just returns the parse tree\\n*/\\nWikiParser.prototype.parseBlocksTerminated function(terminatorRegExpString) {\\n\\tvar ex this.parseBlocksTerminatedExtended(terminatorRegExpString);\\n\\treturn ex.tree;\\n};\\n\\n/*\\nParse blocks of text until a terminating regexp is encountered\\n*/\\nWikiParser.prototype.parseBlocksTerminatedExtended function(terminatorRegExpString) {\\n\\tvar terminatorRegExp new RegExp(terminatorRegExpString,\\\mg\\\),\\n\\t\\tresult {\\n\\t\\t\\ttree: \\n\\t\\t};\\n\\t// Skip any whitespace\\n\\tthis.skipWhitespace();\\n\\t// Check if weve got the end marker\\n\\tterminatorRegExp.lastIndex this.pos;\\n\\tvar match terminatorRegExp.exec(this.source);\\n\\t// Parse the text into blocks\\n\\twhile(this.pos \u003C this.sourceLength && !(match && match.index this.pos)) {\\n\\t\\tvar blocks this.parseBlock(terminatorRegExpString);\\n\\t\\tresult.tree.push.apply(result.tree,blocks);\\n\\t\\t// Skip any whitespace\\n\\t\\tthis.skipWhitespace();\\n\\t\\t// Check if weve got the end marker\\n\\t\\tterminatorRegExp.lastIndex this.pos;\\n\\t\\tmatch terminatorRegExp.exec(this.source);\\n\\t}\\n\\tif(match && match.index this.pos) {\\n\\t\\tthis.pos match.index + match0.length;\\n\\t\\tresult.match match;\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nParse a run of text at the current position\\n\\tterminatorRegExp: a regexp at which to stop the run\\n\\toptions: see below\\nOptions available:\\n\\teatTerminator: move the parse position past any encountered terminator (default false)\\n*/\\nWikiParser.prototype.parseInlineRun function(terminatorRegExp,options) {\\n\\tif(terminatorRegExp) {\\n\\t\\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\\n\\t} else {\\n\\t\\treturn this.parseInlineRunUnterminated(options);\\n\\t}\\n};\\n\\nWikiParser.prototype.parseInlineRunUnterminated function(options) {\\n\\tvar tree ;\\n\\t// Find the next occurrence of an inline rule\\n\\tvar nextMatch this.findNextMatch(this.inlineRules,this.pos);\\n\\t// Loop around the matches until weve reached the end of the text\\n\\twhile(this.pos \u003C this.sourceLength && nextMatch) {\\n\\t\\t// Process the text preceding the run rule\\n\\t\\tif(nextMatch.matchIndex > this.pos) {\\n\\t\\t\\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex),this.pos,nextMatch.matchIndex);\\n\\t\\t\\tthis.pos nextMatch.matchIndex;\\n\\t\\t}\\n\\t\\t// Process the run rule\\n\\t\\tvar start this.pos;\\n\\t\\tvar subTree nextMatch.rule.parse();\\n\\t\\t// Set the start and end positions of the first and last child if theyre not already set\\n\\t\\tif (subTree.length > 0) {\\n\\t\\t\\t// Set the start and end positions of the first and last child if theyre not already set\\n\\t\\t\\tif (subTree0.start undefined) subTree0.start start;\\n\\t\\t\\tif (subTreesubTree.length - 1.end undefined) subTreesubTree.length - 1.end this.pos;\\n\\t\\t}\\n\\t\\t$tw.utils.each(subTree, function (node) { node.rule nextMatch.rule.name; });\\n\\t\\ttree.push.apply(tree,subTree);\\n\\t\\t// Look for the next run rule\\n\\t\\tnextMatch this.findNextMatch(this.inlineRules,this.pos);\\n\\t}\\n\\t// Process the remaining text\\n\\tif(this.pos \u003C this.sourceLength) {\\n\\t\\tthis.pushTextWidget(tree,this.source.substr(this.pos),this.pos,this.sourceLength);\\n\\t}\\n\\tthis.pos this.sourceLength;\\n\\treturn tree;\\n};\\n\\nWikiParser.prototype.parseInlineRunTerminated function(terminatorRegExp,options) {\\n\\tvar ex this.parseInlineRunTerminatedExtended(terminatorRegExp,options);\\n\\treturn ex.tree;\\n};\\n\\nWikiParser.prototype.parseInlineRunTerminatedExtended function(terminatorRegExp,options) {\\n\\toptions options || {};\\n\\tvar tree ;\\n\\t// Find the next occurrence of the terminator\\n\\tterminatorRegExp.lastIndex this.pos;\\n\\tvar terminatorMatch terminatorRegExp.exec(this.source);\\n\\t// Find the next occurrence of a inlinerule\\n\\tvar inlineRuleMatch this.findNextMatch(this.inlineRules,this.pos);\\n\\t// Loop around until weve reached the end of the text\\n\\twhile(this.pos \u003C this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\\n\\t\\t// Return if weve found the terminator, and it precedes any inline rule match\\n\\t\\tif(terminatorMatch) {\\n\\t\\t\\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex > terminatorMatch.index) {\\n\\t\\t\\t\\tif(terminatorMatch.index > this.pos) {\\n\\t\\t\\t\\t\\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index),this.pos,terminatorMatch.index);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tthis.pos terminatorMatch.index;\\n\\t\\t\\t\\tif(options.eatTerminator) {\\n\\t\\t\\t\\t\\tthis.pos + terminatorMatch0.length;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tmatch: terminatorMatch,\\n\\t\\t\\t\\t\\ttree: tree\\n\\t\\t\\t\\t};\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Process any inline rule, along with the text preceding it\\n\\t\\tif(inlineRuleMatch) {\\n\\t\\t\\t// Preceding text\\n\\t\\t\\tif(inlineRuleMatch.matchIndex > this.pos) {\\n\\t\\t\\t\\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex),this.pos,inlineRuleMatch.matchIndex);\\n\\t\\t\\t\\tthis.pos inlineRuleMatch.matchIndex;\\n\\t\\t\\t}\\n\\t\\t\\t// Process the inline rule\\n\\t\\t\\tvar start this.pos;\\n\\t\\t\\tvar subTree inlineRuleMatch.rule.parse();\\n\\t\\t\\t// Set the start and end positions of the first and last child if theyre not already set\\n\\t\\t\\tif (subTree.length > 0) {\\n\\t\\t\\t\\tif (subTree0.start undefined) subTree0.start start;\\n\\t\\t\\t\\tif (subTreesubTree.length - 1.end undefined) subTreesubTree.length - 1.end this.pos;\\n\\t\\t\\t}\\n\\t\\t\\t$tw.utils.each(subTree, function (node) { node.rule inlineRuleMatch.rule.name; });\\n\\t\\t\\ttree.push.apply(tree,subTree);\\n\\t\\t\\t// Look for the next inline rule\\n\\t\\t\\tinlineRuleMatch this.findNextMatch(this.inlineRules,this.pos);\\n\\t\\t\\t// Look for the next terminator match\\n\\t\\t\\tterminatorRegExp.lastIndex this.pos;\\n\\t\\t\\tterminatorMatch terminatorRegExp.exec(this.source);\\n\\t\\t}\\n\\t}\\n\\t// Process the remaining text\\n\\tif(this.pos \u003C this.sourceLength) {\\n\\t\\tthis.pushTextWidget(tree,this.source.substr(this.pos),this.pos,this.sourceLength);\\n\\t}\\n\\tthis.pos this.sourceLength;\\n\\treturn {\\n\\t\\ttree: tree\\n\\t};\\n};\\n\\n/*\\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\\n*/\\nWikiParser.prototype.pushTextWidget function(array,text,start,end) {\\n\\tif(this.configTrimWhiteSpace) {\\n\\t\\ttext $tw.utils.trim(text);\\n\\t}\\n\\tif(text) {\\n\\t\\tarray.push({type: \\\text\\\, text: text, start: start, end: end});\\n\\t}\\n};\\n\\n/*\\nParse zero or more class specifiers `.classname`\\n*/\\nWikiParser.prototype.parseClasses function() {\\n\\tvar classRegExp /\\\\.(^\\\\s\\\\.+)/mg,\\n\\t\\tclassNames ;\\n\\tclassRegExp.lastIndex this.pos;\\n\\tvar match classRegExp.exec(this.source);\\n\\twhile(match && match.index this.pos) {\\n\\t\\tthis.pos match.index + match0.length;\\n\\t\\tclassNames.push(match1);\\n\\t\\tmatch classRegExp.exec(this.source);\\n\\t}\\n\\treturn classNames;\\n};\\n\\n/*\\nAmend the rules used by this instance of the parser\\n\\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\\n\\tnames: array of rule names\\n*/\\nWikiParser.prototype.amendRules function(type,names) {\\n\\tnames names || ;\\n\\t// Define the filter function\\n\\tvar target;\\n\\tif(type \\\only\\\) {\\n\\t\\ttarget true;\\n\\t} else if(type \\\except\\\) {\\n\\t\\ttarget false;\\n\\t} else {\\n\\t\\treturn;\\n\\t}\\n\\t// Define a function to process each of our rule arrays\\n\\tvar processRuleArray function(ruleArray) {\\n\\t\\tfor(var truleArray.length-1; t>0; t--) {\\n\\t\\t\\tif((names.indexOf(ruleArrayt.rule.name) -1) target) {\\n\\t\\t\\t\\truleArray.splice(t,1);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Process each rule array\\n\\tprocessRuleArray(this.pragmaRules);\\n\\tprocessRuleArray(this.blockRules);\\n\\tprocessRuleArray(this.inlineRules);\\n};\\n\\nexports\\\text/vnd.tiddlywiki\\\ WikiParser;\\n\,\type\:\application/javascript\,\module-type\:\parser\},\$:/core/modules/parsers/wikiparser/rules/wikirulebase.js\:{\title\:\$:/core/modules/parsers/wikiparser/rules/wikirulebase.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\\ntype: application/javascript\\nmodule-type: global\\n\\nBase class for wiki parser rules\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nThis constructor is always overridden with a blank constructor, and so shouldnt be used\\n*/\\nvar WikiRuleBase function() {\\n};\\n\\n/*\\nTo be overridden by individual rules\\n*/\\nWikiRuleBase.prototype.init function(parser) {\\n\\tthis.parser parser;\\n};\\n\\n/*\\nDefault implementation of findNextMatch uses RegExp matching\\n*/\\nWikiRuleBase.prototype.findNextMatch function(startPos) {\\n\\tthis.matchRegExp.lastIndex startPos;\\n\\tthis.match this.matchRegExp.exec(this.parser.source);\\n\\treturn this.match ? this.match.index : undefined;\\n};\\n\\nexports.WikiRuleBase WikiRuleBase;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/pluginswitcher.js\:{\title\:\$:/core/modules/pluginswitcher.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/pluginswitcher.js\\ntype: application/javascript\\nmodule-type: global\\n\\nManages switching plugins for themes and languages.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\noptions:\\nwiki: wiki store to be used\\npluginType: type of plugin to be switched\\ncontrollerTitle: title of tiddler used to control switching of this resource\\ndefaultPlugins: array of default plugins to be used if nominated plugin isnt found\\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\\n*/\\nfunction PluginSwitcher(options) {\\n\\tthis.wiki options.wiki;\\n\\tthis.pluginType options.pluginType;\\n\\tthis.controllerTitle options.controllerTitle;\\n\\tthis.defaultPlugins options.defaultPlugins || ;\\n\\tthis.onSwitch options.onSwitch;\\n\\t// Switch to the current plugin\\n\\tthis.switchPlugins();\\n\\t// Listen for changes to the selected plugin\\n\\tvar self this;\\n\\tthis.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\tif($tw.utils.hop(changes,self.controllerTitle)) {\\n\\t\\t\\tself.switchPlugins();\\n\\t\\t}\\n\\t});\\n}\\n\\nPluginSwitcher.prototype.switchPlugins function() {\\n\\t// Get the name of the current theme\\n\\tvar selectedPluginTitle this.wiki.getTiddlerText(this.controllerTitle);\\n\\t// If it doesnt exist, then fallback to one of the default themes\\n\\tvar index 0;\\n\\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index \u003C this.defaultPlugins.length) {\\n\\t\\tselectedPluginTitle this.defaultPluginsindex++;\\n\\t}\\n\\t// Accumulate the titles of the plugins that we need to load\\n\\tvar plugins ,\\n\\t\\tself this,\\n\\t\\taccumulatePlugin function(title) {\\n\\t\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) -1) {\\n\\t\\t\\t\\tplugins.push(title);\\n\\t\\t\\t\\tvar pluginInfo $tw.utils.parseJSONSafe(self.wiki.getTiddlerText(title)),\\n\\t\\t\\t\\t\\tdependents $tw.utils.parseStringArray(tiddler.fields.dependents || \\\\\\);\\n\\t\\t\\t\\t$tw.utils.each(dependents,function(title) {\\n\\t\\t\\t\\t\\taccumulatePlugin(title);\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t};\\n\\taccumulatePlugin(selectedPluginTitle);\\n\\t// Read the plugin info for the incoming plugins\\n\\tvar changes $tw.wiki.readPluginInfo(plugins);\\n\\t// Unregister any existing theme tiddlers\\n\\tvar unregisteredTiddlers $tw.wiki.unregisterPluginTiddlers(this.pluginType);\\n\\t// Register any new theme tiddlers\\n\\tvar registeredTiddlers $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\\n\\t// Unpack the current theme tiddlers\\n\\t$tw.wiki.unpackPluginTiddlers();\\n\\t// Call the switch handler\\n\\tif(this.onSwitch) {\\n\\t\\tthis.onSwitch(plugins);\\n\\t}\\n};\\n\\nexports.PluginSwitcher PluginSwitcher;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/saver-handler.js\:{\title\:\$:/core/modules/saver-handler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/saver-handler.js\\ntype: application/javascript\\nmodule-type: global\\n\\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nInstantiate the saver handler with the following options:\\nwiki: wiki to be synced\\ndirtyTracking: true if dirty tracking should be performed\\n*/\\nfunction SaverHandler(options) {\\n\\tvar self this;\\n\\tthis.wiki options.wiki;\\n\\tthis.dirtyTracking options.dirtyTracking;\\n\\tthis.preloadDirty options.preloadDirty || ;\\n\\tthis.pendingAutoSave false;\\n\\t// Make a logger\\n\\tthis.logger new $tw.utils.Logger(\\\saver-handler\\\);\\n\\t// Initialise our savers\\n\\tif($tw.browser) {\\n\\t\\tthis.initSavers();\\n\\t}\\n\\t// Only do dirty tracking if required\\n\\tif($tw.browser && this.dirtyTracking) {\\n\\t\\t// Compile the dirty tiddler filter\\n\\t\\tthis.filterFn this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\\n\\t\\t// Count of changes that have not yet been saved\\n\\t\\tvar filteredChanges self.filterFn.call(self.wiki,function(iterator) {\\n\\t\\t\\t\\t$tw.utils.each(self.preloadDirty,function(title) {\\n\\t\\t\\t\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\t\\t\\t\\titerator(tiddler,title);\\n\\t\\t\\t\\t});\\n\\t\\t});\\n\\t\\tthis.numChanges filteredChanges.length;\\n\\t\\t// Listen out for changes to tiddlers\\n\\t\\tthis.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\t\\t// Filter the changes so that we only count changes to tiddlers that we care about\\n\\t\\t\\tvar filteredChanges self.filterFn.call(self.wiki,function(iterator) {\\n\\t\\t\\t\\t$tw.utils.each(changes,function(change,title) {\\n\\t\\t\\t\\t\\tif(change.normal) {\\n\\t\\t\\t\\t\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\t\\t\\t\\t\\titerator(tiddler,title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t});\\n\\t\\t\\t// Adjust the number of changes\\n\\t\\t\\tself.numChanges + filteredChanges.length;\\n\\t\\t\\tself.updateDirtyStatus();\\n\\t\\t\\t// Do any autosave if one is pending and theres no more change events\\n\\t\\t\\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() 0) {\\n\\t\\t\\t\\t// Check if were dirty\\n\\t\\t\\t\\tif(self.numChanges > 0) {\\n\\t\\t\\t\\t\\tself.saveWiki({\\n\\t\\t\\t\\t\\t\\tmethod: \\\autosave\\\,\\n\\t\\t\\t\\t\\t\\tdownloadType: \\\text/plain\\\\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.pendingAutoSave false;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Listen for the autosave event\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-auto-save-wiki\\\,function(event) {\\n\\t\\t\\t// Do the autosave unless there are outstanding tiddler change events\\n\\t\\t\\tif(self.wiki.getSizeOfTiddlerEventQueue() 0) {\\n\\t\\t\\t\\t// Check if were dirty\\n\\t\\t\\t\\tif(self.numChanges > 0) {\\n\\t\\t\\t\\t\\tself.saveWiki({\\n\\t\\t\\t\\t\\t\\tmethod: \\\autosave\\\,\\n\\t\\t\\t\\t\\t\\tdownloadType: \\\text/plain\\\\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Otherwise put ourselves in the \\\pending autosave\\\ state and wait for the change event before we do the autosave\\n\\t\\t\\t\\tself.pendingAutoSave true;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Set up our beforeunload handler\\n\\t\\t$tw.addUnloadTask(function(event) {\\n\\t\\t\\tvar confirmationMessage;\\n\\t\\t\\tif(self.isDirty()) {\\n\\t\\t\\t\\tconfirmationMessage $tw.language.getString(\\\UnsavedChangesWarning\\\);\\n\\t\\t\\t\\tevent.returnValue confirmationMessage; // Gecko\\n\\t\\t\\t}\\n\\t\\t\\treturn confirmationMessage;\\n\\t\\t});\\n\\t}\\n\\t// Install the save action handlers\\n\\tif($tw.browser) {\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-save-wiki\\\,function(event) {\\n\\t\\t\\tself.saveWiki({\\n\\t\\t\\t\\twiki: event.widget.wiki,\\n\\t\\t\\t\\ttemplate: event.param,\\n\\t\\t\\t\\tdownloadType: \\\text/plain\\\,\\n\\t\\t\\t\\tvariables: event.paramObject\\n\\t\\t\\t});\\n\\t\\t});\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-download-file\\\,function(event) {\\n\\t\\t\\tself.saveWiki({\\n\\t\\t\\t\\twiki: event.widget.wiki,\\n\\t\\t\\t\\tmethod: \\\download\\\,\\n\\t\\t\\t\\ttemplate: event.param,\\n\\t\\t\\t\\tdownloadType: \\\text/plain\\\,\\n\\t\\t\\t\\tvariables: event.paramObject\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n}\\n\\nSaverHandler.prototype.titleSyncFilter \\\$:/config/SaverFilter\\\;\\nSaverHandler.prototype.titleAutoSave \\\$:/config/AutoSave\\\;\\nSaverHandler.prototype.titleSavedNotification \\\$:/language/Notifications/Save/Done\\\;\\n\\n/*\\nSelect the appropriate saver modules and set them up\\n*/\\nSaverHandler.prototype.initSavers function(moduleType) {\\n\\tmoduleType moduleType || \\\saver\\\;\\n\\t// Instantiate the available savers\\n\\tthis.savers ;\\n\\tvar self this;\\n\\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\\n\\t\\tif(module.canSave(self)) {\\n\\t\\t\\tself.savers.push(module.create(self.wiki));\\n\\t\\t}\\n\\t});\\n\\t// Sort the savers into priority order\\n\\tthis.savers.sort(function(a,b) {\\n\\t\\tif(a.info.priority \u003C b.info.priority) {\\n\\t\\t\\treturn -1;\\n\\t\\t} else {\\n\\t\\t\\tif(a.info.priority > b.info.priority) {\\n\\t\\t\\t\\treturn +1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nSave the wiki contents. Options are:\\n\\tmethod: \\\save\\\, \\\autosave\\\ or \\\download\\\\\n\\ttemplate: the tiddler containing the template to save\\n\\tdownloadType: the content type for the saved file\\n\\twiki: optional wiki, overriding the default wiki specified in the constructor\\n*/\\nSaverHandler.prototype.saveWiki function(options) {\\n\\toptions options || {};\\n\\tvar self this,\\n\\t\\twiki options.wiki || this.wiki,\\n\\t\\tmethod options.method || \\\save\\\;\\n\\t// Ignore autosave if disabled\\n\\tif(method \\\autosave\\\ && ($tw.config.disableAutoSave || wiki.getTiddlerText(this.titleAutoSave,\\\yes\\\) ! \\\yes\\\)) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar\\tvariables options.variables || {},\\n\\t\\ttemplate (options.template || \\n\\t\\t wiki.getTiddlerText(\\\$:/config/SaveWikiButton/Template\\\,\\\$:/core/save/all\\\)).trim(),\\n\\t\\tdownloadType options.downloadType || \\\text/plain\\\,\\n\\t\\ttext wiki.renderTiddler(downloadType,template,options),\\n\\t\\tcallback function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\talert($tw.language.getString(\\\Error/WhileSaving\\\) + \\\:\\\\n\\\\n\\\ + err);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Clear the task queue if were saving (rather than downloading)\\n\\t\\t\\t\\tif(method ! \\\download\\\) {\\n\\t\\t\\t\\t\\tself.numChanges 0;\\n\\t\\t\\t\\t\\tself.updateDirtyStatus();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t$tw.notifier.display(self.titleSavedNotification);\\n\\t\\t\\t\\tif(options.callback) {\\n\\t\\t\\t\\t\\toptions.callback();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t// Call the highest priority saver that supports this method\\n\\tfor(var tthis.savers.length-1; t>0; t--) {\\n\\t\\tvar saver this.saverst;\\n\\t\\tif(saver.info.capabilities.indexOf(method) ! -1 && saver.save(text,method,callback,{variables: {filename: variables.filename, type: variables.type}})) {\\n\\t\\t\\tthis.logger.log(\\\Saving wiki with method\\\,method,\\\through saver\\\,saver.info.name);\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n/*\\nChecks whether the wiki is dirty (ie the window shouldnt be closed)\\n*/\\nSaverHandler.prototype.isDirty function() {\\n\\treturn this.numChanges > 0;\\n};\\n\\n/*\\nUpdate the document body with the class \\\tc-dirty\\\ if the wiki has unsaved/unsynced changes\\n*/\\nSaverHandler.prototype.updateDirtyStatus function() {\\n\\tvar self this;\\n\\tif($tw.browser) {\\n\\t\\t$tw.utils.toggleClass(document.body,\\\tc-dirty\\\,this.isDirty());\\n\\t\\t$tw.utils.each($tw.windows,function(win) {\\n\\t\\t\\t$tw.utils.toggleClass(win.document.body,\\\tc-dirty\\\,self.isDirty());\\n\\t\\t});\\n\\t}\\n};\\n\\nexports.SaverHandler SaverHandler;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/savers/andtidwiki.js\:{\title\:\$:/core/modules/savers/andtidwiki.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/andtidwiki.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via the AndTidWiki Android app\\n\\n\\\\*/\\n\\n\\n\\\use strict\\\;\\n\\nvar AndTidWiki function(wiki) {\\n};\\n\\nAndTidWiki.prototype.save function(text,method,callback,options) {\\n\\tvar filename options && options.variables ? options.variables.filename : null;\\n\\tif (method \\\download\\\) {\\n\\t\\t// Support download\\n\\t\\tif (window.twi.saveDownload) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\twindow.twi.saveDownload(text,filename);\\n\\t\\t\\t} catch(err) {\\n\\t\\t\\t\\tif (err.message \\\Method not found\\\) {\\n\\t\\t\\t\\t\\twindow.twi.saveDownload(text);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar link document.createElement(\\\a\\\);\\n\\t\\t\\tlink.setAttribute(\\\href\\\,\\\data:text/plain,\\\ + encodeURIComponent(text));\\n\\t\\t\\tif (filename) {\\n\\t\\t\\t link.setAttribute(\\\download\\\,filename);\\n\\t\\t\\t}\\n\\t\\t\\tdocument.body.appendChild(link);\\n\\t\\t\\tlink.click();\\n\\t\\t\\tdocument.body.removeChild(link);\\n\\t\\t}\\n\\t} else if (window.twi.saveWiki) {\\n\\t\\t// Direct save in Tiddloid\\n\\t\\twindow.twi.saveWiki(text);\\n\\t} else {\\n\\t\\t// Get the pathname of this document\\n\\t\\tvar pathname $tw.utils.decodeURIComponentSafe(document.location.toString().split(\\\#\\\)0);\\n\\t\\t// Strip the file://\\n\\t\\tif(pathname.indexOf(\\\file://\\\) 0) {\\n\\t\\t\\tpathname pathname.substr(7);\\n\\t\\t}\\n\\t\\t// Strip any query or location part\\n\\t\\tvar p pathname.indexOf(\\\?\\\);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tpathname pathname.substr(0,p);\\n\\t\\t}\\n\\t\\tp pathname.indexOf(\\\#\\\);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tpathname pathname.substr(0,p);\\n\\t\\t}\\n\\t\\t// Save the file\\n\\t\\twindow.twi.saveFile(pathname,text);\\n\\t}\\n\\t// Call the callback\\n\\tcallback(null);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nAndTidWiki.prototype.info {\\n\\tname: \\\andtidwiki\\\,\\n\\tpriority: 1600,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\, \\\download\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn !!window.twi && !!window.twi.saveFile;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new AndTidWiki(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/custom.js\:{\title\:\$:/core/modules/savers/custom.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/custom.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nLooks for `window.$tw.customSaver` first on the current window, then\\non the parent window (of an iframe). If present, the saver must define\\n\\tsave: function(text,method,callback) { ... }\\nand the saver may define\\n\\tpriority: number\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar findSaver function(window) {\\n\\ttry {\\n\\t\\treturn window && window.$tw && window.$tw.customSaver;\\n\\t} catch (err) {\\n\\t\\t// Catching the exception is the most reliable way to detect cross-origin iframe errors.\\n\\t\\t// For example, instead of saying that `window.parent.$tw` is undefined, Firefox will throw\\n\\t\\t// Uncaught DOMException: Permission denied to access property \\\$tw\\\ on cross-origin object\\n\\t\\tconsole.log({ msg: \\\custom saver is disabled\\\, reason: err });\\n\\t\\treturn null;\\n\\t}\\n}\\nvar saver findSaver(window) || findSaver(window.parent) || {};\\n\\nvar CustomSaver function(wiki) {\\n};\\n\\nCustomSaver.prototype.save function(text,method,callback) {\\n\\treturn saver.save(text, method, callback);\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nCustomSaver.prototype.info {\\n\\tname: \\\custom\\\,\\n\\tpriority: saver.priority || 4000,\\n\\tcapabilities: \\\save\\\,\\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn !!(saver.save);\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new CustomSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/download.js\:{\title\:\$:/core/modules/savers/download.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/download.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via HTML5s download APIs\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar DownloadSaver function(wiki) {\\n};\\n\\nDownloadSaver.prototype.save function(text,method,callback,options) {\\n\\toptions options || {};\\n\\t// Get the current filename\\n\\tvar filename options.variables.filename;\\n\\tvar type options.variables.type;\\n\\tif(!filename) {\\n\\t\\tvar p document.location.pathname.lastIndexOf(\\\/\\\);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\t// We decode the pathname because document.location is URL encoded by the browser\\n\\t\\t\\tfilename $tw.utils.decodeURIComponentSafe(document.location.pathname.substr(p+1));\\n\\t\\t}\\n\\t}\\n\\tif(!filename) {\\n\\t\\tfilename \\\tiddlywiki.html\\\;\\n\\t}\\n\\tif(!type) {\\n\\t\\ttype \\\text/html\\\;\\n\\t}\\n\\t// Set up the link\\n\\tvar link document.createElement(\\\a\\\);\\n\\tif(Blob ! undefined) {\\n\\t\\tvar blob new Blob(text, {type: type});\\n\\t\\tlink.setAttribute(\\\href\\\, URL.createObjectURL(blob));\\n\\t} else {\\n\\t\\tlink.setAttribute(\\\href\\\,\\\data:\\\ + type + \\\,\\\ + encodeURIComponent(text));\\n\\t}\\n\\tlink.setAttribute(\\\download\\\,filename);\\n\\tdocument.body.appendChild(link);\\n\\tlink.click();\\n\\tdocument.body.removeChild(link);\\n\\t// Callback that we succeeded\\n\\tcallback(null);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nDownloadSaver.prototype.info {\\n\\tname: \\\download\\\,\\n\\tpriority: 100\\n};\\n\\nObject.defineProperty(DownloadSaver.prototype.info, \\\capabilities\\\, {\\n\\tget: function() {\\n\\t\\tvar capabilities \\\save\\\, \\\download\\\;\\n\\t\\tif(($tw.wiki.getTextReference(\\\$:/config/DownloadSaver/AutoSave\\\) || \\\\\\).toLowerCase() \\\yes\\\) {\\n\\t\\t\\tcapabilities.push(\\\autosave\\\);\\n\\t\\t}\\n\\t\\treturn capabilities;\\n\\t}\\n});\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn document.createElement(\\\a\\\).download ! undefined;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new DownloadSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/fsosaver.js\:{\title\:\$:/core/modules/savers/fsosaver.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/fsosaver.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via MS FileSystemObject ActiveXObject\\n\\nNote: Since TiddlyWikis markup contains the MOTW, the FileSystemObject normally wont be available. \\nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar FSOSaver function(wiki) {\\n};\\n\\nFSOSaver.prototype.save function(text,method,callback) {\\n\\t// Get the pathname of this document\\n\\tvar pathname unescape(document.location.pathname);\\n\\t// Test for a Windows path of the form /x:\\\\blah...\\n\\tif(/^\\\\/A-Z\\\\:\\\\\\\\^\\\\\\\\+/i.test(pathname)) {\\t// ie: ^/a-z:/^/+\\n\\t\\t// Remove the leading slash\\n\\t\\tpathname pathname.substr(1);\\n\\t} else if(document.location.hostname ! \\\\\\ && /^\\\\/\\\\\\\\^\\\\\\\\+\\\\\\\\^\\\\\\\\+/i.test(pathname)) {\\t// test for \\\\\\\\server\\\\share\\\\blah... - ^/^/+/^/+\\n\\t\\t// Remove the leading slash\\n\\t\\tpathname pathname.substr(1);\\n\\t\\t// reconstruct UNC path\\n\\t\\tpathname \\\\\\\\\\\\\\\\\\\\\\ + document.location.hostname + pathname;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n\\t// Save the file (as UTF-16)\\n\\tvar fso new ActiveXObject(\\\Scripting.FileSystemObject\\\);\\n\\tvar file fso.OpenTextFile(pathname,2,-1,-1);\\n\\tfile.Write(text);\\n\\tfile.Close();\\n\\t// Callback that we succeeded\\n\\tcallback(null);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nFSOSaver.prototype.info {\\n\\tname: \\\FSOSaver\\\,\\n\\tpriority: 120,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\ttry {\\n\\t\\treturn (window.location.protocol \\\file:\\\) && !!(new ActiveXObject(\\\Scripting.FileSystemObject\\\));\\n\\t} catch(e) { return false; }\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new FSOSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/gitea.js\:{\title\:\$:/core/modules/savers/gitea.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/gitea.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nSaves wiki by pushing a commit to the gitea\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar GiteaSaver function(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nGiteaSaver.prototype.save function(text,method,callback) {\\n\\tvar self this,\\n\\t\\tusername this.wiki.getTiddlerText(\\\$:/Gitea/Username\\\),\\n\\t\\tpassword $tw.utils.getPassword(\\\Gitea\\\),\\n\\t\\trepo this.wiki.getTiddlerText(\\\$:/Gitea/Repo\\\),\\n\\t\\tpath this.wiki.getTiddlerText(\\\$:/Gitea/Path\\\,\\\\\\),\\n\\t\\tfilename this.wiki.getTiddlerText(\\\$:/Gitea/Filename\\\),\\n\\t\\tbranch this.wiki.getTiddlerText(\\\$:/Gitea/Branch\\\) || \\\master\\\,\\n\\t\\tendpoint this.wiki.getTiddlerText(\\\$:/Gitea/ServerURL\\\) || \\\https://gitea\\\,\\n\\t\\theaders {\\n\\t\\t\\t\\\Accept\\\: \\\application/json\\\,\\n\\t\\t\\t\\\Content-Type\\\: \\\application/json;charsetUTF-8\\\,\\n\\t\\t\\t\\\Authorization\\\: \\\token \\\ + password\\n\\t\\t};\\n\\t// Bail if we dont have everything we need\\n\\tif(!username || !password || !repo || !filename) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Make sure the path start and ends with a slash\\n\\tif(path.substring(0,1) ! \\\/\\\) {\\n\\t\\tpath \\\/\\\ + path;\\n\\t}\\n\\tif(path.substring(path.length - 1) ! \\\/\\\) {\\n\\t\\tpath path + \\\/\\\;\\n\\t}\\n\\t// Compose the base URI\\n\\tvar uri endpoint + \\\/repos/\\\ + repo + \\\/contents\\\ + path;\\n\\t// Perform a get request to get the details (inc shas) of files in the same path as our file\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: uri,\\n\\t\\ttype: \\\GET\\\,\\n\\t\\theaders: headers,\\n\\t\\tdata: {\\n\\t\\t\\tref: branch\\n\\t\\t},\\n\\t\\tcallback: function(err,getResponseDataJson,xhr) {\\n\\t\\t\\tvar getResponseData,sha \\\\\\;\\n\\t\\t\\tif(err && xhr.status ! 404) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tvar use_put true;\\n\\t\\t\\tif(xhr.status ! 404) {\\n\\t\\t\\t\\tgetResponseData $tw.utils.parseJSONSafe(getResponseDataJson);\\n\\t\\t\\t\\t$tw.utils.each(getResponseData,function(details) {\\n\\t\\t\\t\\t\\tif(details.name filename) {\\n\\t\\t\\t\\t\\t\\tsha details.sha;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tif(sha \\\\\\){\\n\\t\\t\\t\\t\\tuse_put false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tvar data {\\n\\t\\t\\t\\tmessage: $tw.language.getString(\\\ControlPanel/Saving/GitService/CommitMessage\\\),\\n\\t\\t\\t\\tcontent: $tw.utils.base64Encode(text),\\n\\t\\t\\t\\tsha: sha\\n\\t\\t\\t};\\n\\t\\t\\t$tw.utils.httpRequest({\\n\\t\\t\\t\\turl: endpoint + \\\/repos/\\\ + repo + \\\/branches/\\\ + branch,\\n\\t\\t\\t\\ttype: \\\GET\\\,\\n\\t\\t\\t\\theaders: headers,\\n\\t\\t\\t\\tcallback: function(err,getResponseDataJson,xhr) {\\n\\t\\t\\t\\t\\tif(xhr.status 404) {\\n\\t\\t\\t\\t\\t\\tcallback(\\\Please ensure the branch in the Gitea repo exists\\\);\\n\\t\\t\\t\\t\\t}else{\\n\\t\\t\\t\\t\\t\\tdata\\\branch\\\ branch;\\n\\t\\t\\t\\t\\t\\tself.upload(uri + filename, use_put?\\\PUT\\\:\\\POST\\\, headers, data, callback);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\treturn true;\\n};\\n\\nGiteaSaver.prototype.upload function(uri,method,headers,data,callback) {\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: uri,\\n\\t\\ttype: method,\\n\\t\\theaders: headers,\\n\\t\\tdata: JSON.stringify(data),\\n\\t\\tcallback: function(err,putResponseDataJson,xhr) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tvar putResponseData $tw.utils.parseJSONSafe(putResponseDataJson);\\n\\t\\t\\tcallback(null);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nGiteaSaver.prototype.info {\\n\\tname: \\\Gitea\\\,\\n\\tpriority: 2000,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new GiteaSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/github.js\:{\title\:\$:/core/modules/savers/github.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/github.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nSaves wiki by pushing a commit to the GitHub v3 REST API\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar GitHubSaver function(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nGitHubSaver.prototype.save function(text,method,callback) {\\n\\tvar self this,\\n\\t\\tusername this.wiki.getTiddlerText(\\\$:/GitHub/Username\\\),\\n\\t\\tpassword $tw.utils.getPassword(\\\github\\\),\\n\\t\\trepo this.wiki.getTiddlerText(\\\$:/GitHub/Repo\\\),\\n\\t\\tpath this.wiki.getTiddlerText(\\\$:/GitHub/Path\\\,\\\\\\),\\n\\t\\tfilename this.wiki.getTiddlerText(\\\$:/GitHub/Filename\\\),\\n\\t\\tbranch this.wiki.getTiddlerText(\\\$:/GitHub/Branch\\\) || \\\main\\\,\\n\\t\\tendpoint this.wiki.getTiddlerText(\\\$:/GitHub/ServerURL\\\) || \\\https://api.github.com\\\,\\n\\t\\theaders {\\n\\t\\t\\t\\\Accept\\\: \\\application/vnd.github.v3+json\\\,\\n\\t\\t\\t\\\Content-Type\\\: \\\application/json;charsetUTF-8\\\,\\n\\t\\t\\t\\\Authorization\\\: \\\Basic \\\ + $tw.utils.base64Encode(username + \\\:\\\ + password),\\n\\t\\t\\t\\\If-None-Match\\\: \\\\\\\\n\\t\\t};\\n\\t// Bail if we dont have everything we need\\n\\tif(!username || !password || !repo || !filename) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Make sure the path start and ends with a slash\\n\\tif(path.substring(0,1) ! \\\/\\\) {\\n\\t\\tpath \\\/\\\ + path;\\n\\t}\\n\\tif(path.substring(path.length - 1) ! \\\/\\\) {\\n\\t\\tpath path + \\\/\\\;\\n\\t}\\n\\t// Compose the base URI\\n\\tvar uri endpoint + \\\/repos/\\\ + repo + \\\/contents\\\ + path;\\n\\t// Perform a get request to get the details (inc shas) of files in the same path as our file\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: uri,\\n\\t\\ttype: \\\GET\\\,\\n\\t\\theaders: headers,\\n\\t\\tdata: {\\n\\t\\t\\tref: branch\\n\\t\\t},\\n\\t\\tcallback: function(err,getResponseDataJson,xhr) {\\n\\t\\t\\tvar getResponseData,sha \\\\\\;\\n\\t\\t\\tif(err && xhr.status ! 404) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tif(xhr.status ! 404) {\\n\\t\\t\\t\\tgetResponseData $tw.utils.parseJSONSafe(getResponseDataJson);\\n\\t\\t\\t\\t$tw.utils.each(getResponseData,function(details) {\\n\\t\\t\\t\\t\\tif(details.name filename) {\\n\\t\\t\\t\\t\\t\\tsha details.sha;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t\\tvar data {\\n\\t\\t\\t\\tmessage: $tw.language.getString(\\\ControlPanel/Saving/GitService/CommitMessage\\\),\\n\\t\\t\\t\\tcontent: $tw.utils.base64Encode(text),\\n\\t\\t\\t\\tbranch: branch,\\n\\t\\t\\t\\tsha: sha\\n\\t\\t\\t};\\n\\t\\t\\t// Perform a PUT request to save the file\\n\\t\\t\\t$tw.utils.httpRequest({\\n\\t\\t\\t\\turl: uri + filename,\\n\\t\\t\\t\\ttype: \\\PUT\\\,\\n\\t\\t\\t\\theaders: headers,\\n\\t\\t\\t\\tdata: JSON.stringify(data),\\n\\t\\t\\t\\tcallback: function(err,putResponseDataJson,xhr) {\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tvar putResponseData $tw.utils.parseJSONSafe(putResponseDataJson);\\n\\t\\t\\t\\t\\tcallback(null);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nGitHubSaver.prototype.info {\\n\\tname: \\\github\\\,\\n\\tpriority: 2000,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new GitHubSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/gitlab.js\:{\title\:\$:/core/modules/savers/gitlab.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/gitlab.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nSaves wiki by pushing a commit to the GitLab REST API\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar GitLabSaver function(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nGitLabSaver.prototype.save function(text,method,callback) {\\n\\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\\n\\tvar self this,\\n\\t\\tusername this.wiki.getTiddlerText(\\\$:/GitLab/Username\\\),\\n\\t\\tpassword $tw.utils.getPassword(\\\gitlab\\\),\\n\\t\\trepo this.wiki.getTiddlerText(\\\$:/GitLab/Repo\\\),\\n\\t\\tpath this.wiki.getTiddlerText(\\\$:/GitLab/Path\\\,\\\\\\),\\n\\t\\tfilename this.wiki.getTiddlerText(\\\$:/GitLab/Filename\\\),\\n\\t\\tbranch this.wiki.getTiddlerText(\\\$:/GitLab/Branch\\\) || \\\master\\\,\\n\\t\\tendpoint this.wiki.getTiddlerText(\\\$:/GitLab/ServerURL\\\) || \\\https://gitlab.com/api/v4\\\,\\n\\t\\theaders {\\n\\t\\t\\t\\\Content-Type\\\: \\\application/json;charsetUTF-8\\\,\\n\\t\\t\\t\\\Private-Token\\\: password\\n\\t\\t};\\n\\t// Bail if we dont have everything we need\\n\\tif(!username || !password || !repo || !filename) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Make sure the path start and ends with a slash\\n\\tif(path.substring(0,1) ! \\\/\\\) {\\n\\t\\tpath \\\/\\\ + path;\\n\\t}\\n\\tif(path.substring(path.length - 1) ! \\\/\\\) {\\n\\t\\tpath path + \\\/\\\;\\n\\t}\\n\\t// Compose the base URI\\n\\tvar uri endpoint + \\\/projects/\\\ + encodeURIComponent(repo) + \\\/repository/\\\;\\n\\t// Perform a get request to get the details (inc shas) of files in the same path as our file\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: uri + \\\tree/?path\\\ + encodeURIComponent(path.replace(/^\\\\/+|\\\\/$/g, )) + \\\&branch\\\ + encodeURIComponent(branch.replace(/^\\\\/+|\\\\/$/g, )),\\n\\t\\ttype: \\\GET\\\,\\n\\t\\theaders: headers,\\n\\t\\tcallback: function(err,getResponseDataJson,xhr) {\\n\\t\\t\\tvar getResponseData,sha \\\\\\;\\n\\t\\t\\tif(err && xhr.status ! 404) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tvar requestType \\\POST\\\;\\n\\t\\t\\tif(xhr.status ! 404) {\\n\\t\\t\\t\\tgetResponseData $tw.utils.parseJSONSafe(getResponseDataJson);\\n\\t\\t\\t\\t$tw.utils.each(getResponseData,function(details) {\\n\\t\\t\\t\\t\\tif(details.name filename) {\\n\\t\\t\\t\\t\\t\\trequestType \\\PUT\\\;\\n\\t\\t\\t\\t\\t\\tsha details.sha;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t\\tvar data {\\n\\t\\t\\t\\tcommit_message: $tw.language.getString(\\\ControlPanel/Saving/GitService/CommitMessage\\\),\\n\\t\\t\\t\\tcontent: text,\\n\\t\\t\\t\\tbranch: branch,\\n\\t\\t\\t\\tsha: sha\\n\\t\\t\\t};\\n\\t\\t\\t// Perform a request to save the file\\n\\t\\t\\t$tw.utils.httpRequest({\\n\\t\\t\\t\\turl: uri + \\\files/\\\ + encodeURIComponent(path.replace(/^\\\\/+/, ) + filename),\\n\\t\\t\\t\\ttype: requestType,\\n\\t\\t\\t\\theaders: headers,\\n\\t\\t\\t\\tdata: JSON.stringify(data),\\n\\t\\t\\t\\tcallback: function(err,putResponseDataJson,xhr) {\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tvar putResponseData $tw.utils.parseJSONSafe(putResponseDataJson);\\n\\t\\t\\t\\t\\tcallback(null);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nGitLabSaver.prototype.info {\\n\\tname: \\\gitlab\\\,\\n\\tpriority: 2000,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new GitLabSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/manualdownload.js\:{\title\:\$:/core/modules/savers/manualdownload.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/manualdownload.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via HTML5s download APIs\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Title of the tiddler containing the download message\\nvar downloadInstructionsTitle \\\$:/language/Modals/Download\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar ManualDownloadSaver function(wiki) {\\n};\\n\\nManualDownloadSaver.prototype.save function(text,method,callback) {\\n\\t$tw.modal.display(downloadInstructionsTitle,{\\n\\t\\tdownloadLink: \\\data:text/html,\\\ + encodeURIComponent(text)\\n\\t});\\n\\t// Callback that we succeeded\\n\\tcallback(null);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nManualDownloadSaver.prototype.info {\\n\\tname: \\\manualdownload\\\,\\n\\tpriority: 0,\\n\\tcapabilities: \\\save\\\, \\\download\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new ManualDownloadSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/msdownload.js\:{\title\:\$:/core/modules/savers/msdownload.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/msdownload.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via window.navigator.msSaveBlob()\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar MsDownloadSaver function(wiki) {\\n};\\n\\nMsDownloadSaver.prototype.save function(text,method,callback) {\\n\\t// Get the current filename\\n\\tvar filename \\\tiddlywiki.html\\\,\\n\\t\\tp document.location.pathname.lastIndexOf(\\\/\\\);\\n\\tif(p ! -1) {\\n\\t\\tfilename document.location.pathname.substr(p+1);\\n\\t}\\n\\t// Set up the link\\n\\tvar blob new Blob(text, {type: \\\text/html\\\});\\n\\twindow.navigator.msSaveBlob(blob,filename);\\n\\t// Callback that we succeeded\\n\\tcallback(null);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nMsDownloadSaver.prototype.info {\\n\\tname: \\\msdownload\\\,\\n\\tpriority: 110,\\n\\tcapabilities: \\\save\\\, \\\download\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn !!window.navigator.msSaveBlob;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new MsDownloadSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/put.js\:{\title\:\$:/core/modules/savers/put.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/put.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nSaves wiki by performing a PUT request to the server\\n\\nWorks with any server which accepts a PUT request\\nto the current URL, such as a WebDAV server.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nRetrieve ETag if available\\n*/\\nvar retrieveETag function(self) {\\n\\tvar headers {\\n\\t\\tAccept: \\\*/*\\\\\n\\t};\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: self.uri(),\\n\\t\\ttype: \\\HEAD\\\,\\n\\t\\theaders: headers,\\n\\t\\tcallback: function(err,data,xhr) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\tvar etag xhr.getResponseHeader(\\\ETag\\\);\\n\\t\\t\\tif(!etag) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\tself.etag etag.replace(/^W\\\\//,\\\\\\);\\n\\t\\t}\\n\\t});\\n};\\n\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar PutSaver function(wiki) {\\n\\tthis.wiki wiki;\\n\\tvar self this;\\n\\tvar uri this.uri();\\n\\t// Async server probe. Until probe finishes, save will fail fast\\n\\t// See also https://github.com/TiddlyWiki/TiddlyWiki5/issues/2276\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: uri,\\n\\t\\ttype: \\\OPTIONS\\\,\\n\\t\\tcallback: function(err,data,xhr) {\\n\\t\\t\\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\\n\\t\\t\\tif(!err) {\\n\\t\\t\\t\\tself.serverAcceptsPuts xhr.status > 200 && xhr.status \u003C 300 && !!xhr.getResponseHeader(\\\dav\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\tretrieveETag(this);\\n};\\n\\nPutSaver.prototype.uri function() {\\n\\treturn document.location.toString().split(\\\#\\\)0;\\n};\\n\\n// TODO: in case of edit conflict\\n// Prompt: Do you want to save over this? Y/N\\n// Merging would be ideal, and may be possible using future generic merge flow\\nPutSaver.prototype.save function(text,method,callback) {\\n\\tif(!this.serverAcceptsPuts) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar self this;\\n\\tvar headers {\\n\\t\\t\\\Content-Type\\\: \\\text/html;charsetUTF-8\\\\\n\\t};\\n\\tif(this.etag) {\\n\\t\\theaders\\\If-Match\\\ this.etag;\\n\\t}\\n\\t$tw.notifier.display(\\\$:/language/Notifications/Save/Starting\\\);\\n\\t$tw.utils.httpRequest({\\n\\t\\turl: this.uri(),\\n\\t\\ttype: \\\PUT\\\,\\n\\t\\theaders: headers,\\n\\t\\tdata: text,\\n\\t\\tcallback: function(err,data,xhr) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tvar status xhr.status,\\n\\t\\t\\t\\t\\terrorMsg err;\\n\\t\\t\\t\\tif(status 412) { // file changed on server\\n\\t\\t\\t\\t\\terrorMsg $tw.language.getString(\\\Error/PutEditConflict\\\);\\n\\t\\t\\t\\t} else if(status 401) { // authentication required\\n\\t\\t\\t\\t\\terrorMsg $tw.language.getString(\\\Error/PutUnauthorized\\\);\\n\\t\\t\\t\\t} else if(status 403) { // permission denied\\n\\t\\t\\t\\t\\terrorMsg $tw.language.getString(\\\Error/PutForbidden\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (xhr.responseText) {\\n\\t\\t\\t\\t\\t// treat any server response like a plain text error explanation\\n\\t\\t\\t\\t\\terrorMsg errorMsg + \\\\\\\n\\\\n\\\ + xhr.responseText;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tcallback(errorMsg); // fail\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.etag xhr.getResponseHeader(\\\ETag\\\);\\n\\t\\t\\t\\tif(self.etag null) {\\n\\t\\t\\t\\t\\tretrieveETag(self);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tcallback(null); // success\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nPutSaver.prototype.info {\\n\\tname: \\\put\\\,\\n\\tpriority: 2000,\\n\\tcapabilities: \\\save\\\,\\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn /^https?:/.test(location.protocol);\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new PutSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/tiddlyfox.js\:{\title\:\$:/core/modules/savers/tiddlyfox.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/tiddlyfox.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via the TiddlyFox file extension\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar TiddlyFoxSaver function(wiki) {\\n};\\n\\nTiddlyFoxSaver.prototype.save function(text,method,callback) {\\n\\tvar messageBox document.getElementById(\\\tiddlyfox-message-box\\\);\\n\\tif(messageBox) {\\n\\t\\t// Get the pathname of this document\\n\\t\\tvar pathname document.location.toString().split(\\\#\\\)0;\\n\\t\\t// Replace file://localhost/ with file:///\\n\\t\\tif(pathname.indexOf(\\\file://localhost/\\\) 0) {\\n\\t\\t\\tpathname \\\file://\\\ + pathname.substr(16);\\n\\t\\t}\\n\\t\\t// Windows path file:///x:/blah/blah --> x:\\\\blah\\\\blah\\n\\t\\tif(/^file\\\\:\\\\/\\\\/\\\\/A-Z\\\\:\\\\//i.test(pathname)) {\\n\\t\\t\\t// Remove the leading slash and convert slashes to backslashes\\n\\t\\t\\tpathname pathname.substr(8).replace(/\\\\//g,\\\\\\\\\\\\\\);\\n\\t\\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\\n\\t\\t} else if(pathname.indexOf(\\\file://///\\\) 0) {\\n\\t\\t\\tpathname \\\\\\\\\\\\\\\\\\\\\\ + unescape(pathname.substr(10)).replace(/\\\\//g,\\\\\\\\\\\\\\);\\n\\t\\t// Mac/Unix local path file:///path/path --> /path/path\\n\\t\\t} else if(pathname.indexOf(\\\file:///\\\) 0) {\\n\\t\\t\\tpathname unescape(pathname.substr(7));\\n\\t\\t// Mac/Unix local path file:/path/path --> /path/path\\n\\t\\t} else if(pathname.indexOf(\\\file:/\\\) 0) {\\n\\t\\t\\tpathname unescape(pathname.substr(5));\\n\\t\\t// Otherwise Windows networth path file://server/share/path/path --> \\\\\\\\server\\\\share\\\\path\\\\path\\n\\t\\t} else {\\n\\t\\t\\tpathname \\\\\\\\\\\\\\\\\\\\\\ + unescape(pathname.substr(7)).replace(new RegExp(\\\/\\\,\\\g\\\),\\\\\\\\\\\\\\);\\n\\t\\t}\\n\\t\\t// Create the message element and put it in the message box\\n\\t\\tvar message document.createElement(\\\div\\\);\\n\\t\\tmessage.setAttribute(\\\data-tiddlyfox-path\\\,$tw.utils.decodeURIComponentSafe(pathname));\\n\\t\\tmessage.setAttribute(\\\data-tiddlyfox-content\\\,text);\\n\\t\\tmessageBox.appendChild(message);\\n\\t\\t// Add an event handler for when the file has been saved\\n\\t\\tmessage.addEventListener(\\\tiddlyfox-have-saved-file\\\,function(event) {\\n\\t\\t\\tcallback(null);\\n\\t\\t}, false);\\n\\t\\t// Create and dispatch the custom event to the extension\\n\\t\\tvar event document.createEvent(\\\Events\\\);\\n\\t\\tevent.initEvent(\\\tiddlyfox-save-file\\\,true,false);\\n\\t\\tmessage.dispatchEvent(event);\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nTiddlyFoxSaver.prototype.info {\\n\\tname: \\\tiddlyfox\\\,\\n\\tpriority: 1500,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new TiddlyFoxSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/tiddlyie.js\:{\title\:\$:/core/modules/savers/tiddlyie.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/tiddlyie.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar TiddlyIESaver function(wiki) {\\n};\\n\\nTiddlyIESaver.prototype.save function(text,method,callback) {\\n\\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\\n\\tif(typeof(window.TiddlyIE) ! \\\undefined\\\) {\\n\\t\\t// Get the pathname of this document\\n\\t\\tvar pathname unescape(document.location.pathname);\\n\\t\\t// Test for a Windows path of the form /x:/blah...\\n\\t\\tif(/^\\\\/A-Z\\\\:\\\\/^\\\\/+/i.test(pathname)) {\\t// ie: ^/a-z:/^/+ (is this better?: ^/a-z:/^/+(/^/+)*\\\\.^/+ )\\n\\t\\t\\t// Remove the leading slash\\n\\t\\t\\tpathname pathname.substr(1);\\n\\t\\t\\t// Convert slashes to backslashes\\n\\t\\t\\tpathname pathname.replace(/\\\\//g,\\\\\\\\\\\\\\);\\n\\t\\t} else if(document.hostname ! \\\\\\ && /^\\\\/^\\\\/+\\\\/^\\\\/+/i.test(pathname)) {\\t// test for \\\\\\\\server\\\\share\\\\blah... - ^/^/+/^/+\\n\\t\\t\\t// Convert slashes to backslashes\\n\\t\\t\\tpathname pathname.replace(/\\\\//g,\\\\\\\\\\\\\\);\\n\\t\\t\\t// reconstruct UNC path\\n\\t\\t\\tpathname \\\\\\\\\\\\\\\\\\\\\\ + document.location.hostname + pathname;\\n\\t\\t} else return false;\\n\\t\\t// Prompt the user to save the file\\n\\t\\twindow.TiddlyIE.save(pathname, text);\\n\\t\\t// Callback that we succeeded\\n\\t\\tcallback(null);\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nTiddlyIESaver.prototype.info {\\n\\tname: \\\tiddlyiesaver\\\,\\n\\tpriority: 1500,\\n\\tcapabilities: \\\save\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn (window.location.protocol \\\file:\\\);\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new TiddlyIESaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/twedit.js\:{\title\:\$:/core/modules/savers/twedit.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/twedit.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via the TWEdit iOS app\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar TWEditSaver function(wiki) {\\n};\\n\\nTWEditSaver.prototype.save function(text,method,callback) {\\n\\t// Bail if were not running under TWEdit\\n\\tif(typeof DeviceInfo ! \\\object\\\) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Get the pathname of this document\\n\\tvar pathname $tw.utils.decodeURIComponentSafe(document.location.pathname);\\n\\t// Strip any query or location part\\n\\tvar p pathname.indexOf(\\\?\\\);\\n\\tif(p ! -1) {\\n\\t\\tpathname pathname.substr(0,p);\\n\\t}\\n\\tp pathname.indexOf(\\\#\\\);\\n\\tif(p ! -1) {\\n\\t\\tpathname pathname.substr(0,p);\\n\\t}\\n\\t// Remove the leading \\\/Documents\\\ from path\\n\\tvar prefix \\\/Documents\\\;\\n\\tif(pathname.indexOf(prefix) 0) {\\n\\t\\tpathname pathname.substr(prefix.length);\\n\\t}\\n\\t// Error handler\\n\\tvar errorHandler function(event) {\\n\\t\\t// Error\\n\\t\\tcallback($tw.language.getString(\\\Error/SavingToTWEdit\\\) + \\\: \\\ + event.target.error.code);\\n\\t};\\n\\t// Get the file system\\n\\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\\n\\t\\t// Now weve got the filesystem, get the fileEntry\\n\\t\\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\\n\\t\\t\\t// Now weve got the fileEntry, create the writer\\n\\t\\t\\tfileEntry.createWriter(function(writer) {\\n\\t\\t\\t\\twriter.onerror errorHandler;\\n\\t\\t\\t\\twriter.onwrite function() {\\n\\t\\t\\t\\t\\tcallback(null);\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\twriter.position 0;\\n\\t\\t\\t\\twriter.write(text);\\n\\t\\t\\t},errorHandler);\\n\\t\\t}, errorHandler);\\n\\t}, errorHandler);\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nTWEditSaver.prototype.info {\\n\\tname: \\\twedit\\\,\\n\\tpriority: 1600,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new TWEditSaver(wiki);\\n};\\n\\n/////////////////////////// Hack\\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\\nif($tw.browser) {\\n\\twindow.version {title: \\\TiddlyWiki\\\};\\n}\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/savers/upload.js\:{\title\:\$:/core/modules/savers/upload.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/savers/upload.js\\ntype: application/javascript\\nmodule-type: saver\\n\\nHandles saving changes via upload to a server.\\n\\nDesigned to be compatible with BidiXs UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSelect the appropriate saver module and set it up\\n*/\\nvar UploadSaver function(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nUploadSaver.prototype.save function(text,method,callback) {\\n\\t// Get the various parameters we need\\n\\tvar backupDir this.wiki.getTextReference(\\\$:/UploadBackupDir\\\) || \\\.\\\,\\n\\t\\tusername this.wiki.getTextReference(\\\$:/UploadName\\\),\\n\\t\\tpassword $tw.utils.getPassword(\\\upload\\\),\\n\\t\\tuploadDir this.wiki.getTextReference(\\\$:/UploadDir\\\) || \\\.\\\,\\n\\t\\tuploadFilename this.wiki.getTextReference(\\\$:/UploadFilename\\\) || \\\index.html\\\,\\n\\t\\tuploadWithUrlOnly this.wiki.getTextReference(\\\$:/UploadWithUrlOnly\\\) || \\\no\\\,\\n\\t\\turl this.wiki.getTextReference(\\\$:/UploadURL\\\);\\n\\t// Bail out if we dont have the bits we need\\n\\tif (uploadWithUrlOnly \\\yes\\\) {\\n\\t\\t// The url is good enough. No need for a username and password.\\n\\t\\t// Assume the server uses some other kind of auth mechanism.\\n\\t\\tif(!url || url.toString().trim() \\\\\\) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t}\\n\\telse {\\n\\t\\t// Require username and password to be present.\\n\\t\\t// Assume the server uses the standard UploadPlugin username/password.\\n\\t\\tif(!username || username.toString().trim() \\\\\\ || !password || password.toString().trim() \\\\\\) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t}\\n\\t// Construct the url if not provided\\n\\tif(!url) {\\n\\t\\turl \\\http://\\\ + username + \\\.tiddlyhost.com/\\\;\\n\\t}\\n\\t// Assemble the header\\n\\tvar boundary \\\---------------------------\\\ + \\\AaB03x\\\;\\n\\tvar uploadFormName \\\UploadPlugin\\\;\\n\\tvar head ;\\n\\thead.push(\\\--\\\ + boundary + \\\\\\\r\\\\nContent-disposition: form-data; name\\\\\\\UploadPlugin\\\\\\\\\\\r\\\\n\\\);\\n\\thead.push(\\\backupDir\\\ + backupDir + \\\;user\\\ + username + \\\;password\\\ + password + \\\;uploaddir\\\ + uploadDir + \\\;;\\\); \\n\\thead.push(\\\\\\\r\\\\n\\\ + \\\--\\\ + boundary);\\n\\thead.push(\\\Content-disposition: form-data; name\\\\\\\userfile\\\\\\\; filename\\\\\\\\\\ + uploadFilename + \\\\\\\\\\\\\);\\n\\thead.push(\\\Content-Type: text/html;charsetUTF-8\\\);\\n\\thead.push(\\\Content-Length: \\\ + text.length + \\\\\\\r\\\\n\\\);\\n\\thead.push(\\\\\\);\\n\\t// Assemble the tail and the data itself\\n\\tvar tail \\\\\\\r\\\\n--\\\ + boundary + \\\--\\\\r\\\\n\\\,\\n\\t\\tdata head.join(\\\\\\\r\\\\n\\\) + text + tail;\\n\\t// Do the HTTP post\\n\\t$tw.notifier.display(\\\$:/language/Notifications/Save/Starting\\\);\\n\\tvar http new XMLHttpRequest();\\n\\thttp.open(\\\POST\\\,url,true,username,password);\\n\\thttp.setRequestHeader(\\\Content-Type\\\,\\\multipart/form-data; charsetUTF-8; boundary\\\ + boundary);\\n\\thttp.onreadystatechange function() {\\n\\t\\tif(http.readyState 4 && http.status 200) {\\n\\t\\t\\tif(http.responseText.substr(0,4) \\\0 - \\\) {\\n\\t\\t\\t\\tcallback(null);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcallback(http.responseText);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\ttry {\\n\\t\\thttp.send(data);\\n\\t} catch(ex) {\\n\\t\\treturn callback($tw.language.getString(\\\Error/Caption\\\) + \\\:\\\ + ex);\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nInformation about this saver\\n*/\\nUploadSaver.prototype.info {\\n\\tname: \\\upload\\\,\\n\\tpriority: 2000,\\n\\tcapabilities: \\\save\\\, \\\autosave\\\\\n};\\n\\n/*\\nStatic method that returns true if this saver is capable of working\\n*/\\nexports.canSave function(wiki) {\\n\\treturn true;\\n};\\n\\n/*\\nCreate an instance of this saver\\n*/\\nexports.create function(wiki) {\\n\\treturn new UploadSaver(wiki);\\n};\\n\,\type\:\application/javascript\,\module-type\:\saver\},\$:/core/modules/server/authenticators/basic.js\:{\title\:\$:/core/modules/server/authenticators/basic.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/authenticators/basic.js\\ntype: application/javascript\\nmodule-type: authenticator\\n\\nAuthenticator for WWW basic authentication\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nif($tw.node) {\\n\\tvar util require(\\\util\\\),\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\turl require(\\\url\\\),\\n\\t\\tpath require(\\\path\\\);\\n}\\n\\nfunction BasicAuthenticator(server) {\\n\\tthis.server server;\\n\\tthis.credentialsData ;\\n}\\n\\n/*\\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\\n*/\\nBasicAuthenticator.prototype.init function() {\\n\\t// Read the credentials data\\n\\tthis.credentialsFilepath this.server.get(\\\credentials\\\);\\n\\tif(this.credentialsFilepath) {\\n\\t\\tvar resolveCredentialsFilepath path.resolve(this.server.boot.wikiPath,this.credentialsFilepath);\\n\\t\\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\\n\\t\\t\\tvar credentialsText fs.readFileSync(resolveCredentialsFilepath,\\\utf8\\\),\\n\\t\\t\\t\\tcredentialsData $tw.utils.parseCsvStringWithHeader(credentialsText);\\n\\t\\t\\tif(typeof credentialsData \\\string\\\) {\\n\\t\\t\\t\\treturn \\\Error: \\\ + credentialsData + \\\ reading credentials from \\\ + resolveCredentialsFilepath + \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.credentialsData credentialsData;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\treturn \\\Error: Unable to load user credentials from \\\ + resolveCredentialsFilepath + \\\\\\;\\n\\t\\t}\\n\\t}\\n\\t// Add the hardcoded username and password if specified\\n\\tif(this.server.get(\\\username\\\) && this.server.get(\\\password\\\)) {\\n\\t\\tthis.credentialsData this.credentialsData || ;\\n\\t\\tthis.credentialsData.push({\\n\\t\\t\\tusername: this.server.get(\\\username\\\),\\n\\t\\t\\tpassword: this.server.get(\\\password\\\)\\n\\t\\t});\\n\\t}\\n\\treturn this.credentialsData.length > 0;\\n};\\n\\n/*\\nReturns true if the request is authenticated and assigns the \\\authenticatedUsername\\\ state variable.\\nReturns false if the request couldnt be authenticated having sent an appropriate response to the browser\\n*/\\nBasicAuthenticator.prototype.authenticateRequest function(request,response,state) {\\n\\t// Extract the incoming username and password from the request\\n\\tvar header request.headers.authorization || \\\\\\;\\n\\tif(!header && state.allowAnon) {\\n\\t\\t// If theres no header and anonymous access is allowed then we dont set authenticatedUsername\\n\\t\\treturn true;\\n\\t}\\n\\tvar token header.split(/\\\\s+/).pop() || \\\\\\,\\n\\t\\tauth $tw.utils.base64Decode(token),\\n\\t\\tparts auth.split(/:/),\\n\\t\\tincomingUsername parts0,\\n\\t\\tincomingPassword parts1;\\n\\t// Check that at least one of the credentials matches\\n\\tvar matchingCredentials this.credentialsData.find(function(credential) {\\n\\t\\treturn credential.username incomingUsername && credential.password incomingPassword;\\n\\t});\\n\\tif(matchingCredentials) {\\n\\t\\t// If so, add the authenticated username to the request state\\n\\t\\tstate.authenticatedUsername incomingUsername;\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\t// If not, return an authentication challenge\\n\\t\\tresponse.writeHead(401,\\\Authentication required\\\,{\\n\\t\\t\\t\\\WWW-Authenticate\\\: Basic realm\\\Please provide your username and password to login to + state.server.servername + \\\\\n\\t\\t});\\n\\t\\tresponse.end();\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.AuthenticatorClass BasicAuthenticator;\\n\,\type\:\application/javascript\,\module-type\:\authenticator\},\$:/core/modules/server/authenticators/header.js\:{\title\:\$:/core/modules/server/authenticators/header.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/authenticators/header.js\\ntype: application/javascript\\nmodule-type: authenticator\\n\\nAuthenticator for trusted header authentication\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction HeaderAuthenticator(server) {\\n\\tthis.server server;\\n\\tthis.header server.get(\\\authenticated-user-header\\\) ? server.get(\\\authenticated-user-header\\\).toLowerCase() : undefined;\\n}\\n\\n/*\\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\\n*/\\nHeaderAuthenticator.prototype.init function() {\\n\\treturn !!this.header;\\n};\\n\\n/*\\nReturns true if the request is authenticated and assigns the \\\authenticatedUsername\\\ state variable.\\nReturns false if the request couldnt be authenticated having sent an appropriate response to the browser\\n*/\\nHeaderAuthenticator.prototype.authenticateRequest function(request,response,state) {\\n\\t// Otherwise, authenticate as the username in the specified header\\n\\tvar username request.headersthis.header;\\n\\tif(!username && !state.allowAnon) {\\n\\t\\tresponse.writeHead(401,\\\Authorization header required to login to \\\ + state.server.servername + \\\\\\);\\n\\t\\tresponse.end();\\n\\t\\treturn false;\\n\\t} else {\\n\\t\\t// authenticatedUsername will be undefined for anonymous users\\n\\t\\tif(username) {\\n\\t\\t\\tstate.authenticatedUsername $tw.utils.decodeURIComponentSafe(username);\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n};\\n\\nexports.AuthenticatorClass HeaderAuthenticator;\\n\\n\,\type\:\application/javascript\,\module-type\:\authenticator\},\$:/core/modules/server/routes/delete-tiddler.js\:{\title\:\$:/core/modules/server/routes/delete-tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\\ntype: application/javascript\\nmodule-type: route\\n\\nDELETE /recipes/default/tiddlers/:title\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\DELETE\\\;\\n\\nexports.path /^\\\\/bags\\\\/default\\\\/tiddlers\\\\/(.+)$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar title $tw.utils.decodeURIComponentSafe(state.params0);\\n\\tstate.wiki.deleteTiddler(title);\\n\\tresponse.writeHead(204, \\\OK\\\, {\\n\\t\\t\\\Content-Type\\\: \\\text/plain\\\\\n\\t});\\n\\tresponse.end();\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-favicon.js\:{\title\:\$:/core/modules/server/routes/get-favicon.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-favicon.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /favicon.ico\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/favicon.ico$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar buffer state.wiki.getTiddlerText(\\\$:/favicon.ico\\\,\\\\\\);\\n\\tstate.sendResponse(200,{\\\Content-Type\\\: \\\image/x-icon\\\},buffer,\\\base64\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-file.js\:{\title\:\$:/core/modules/server/routes/get-file.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-file.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /files/:filepath\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/files\\\\/(.+)$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar path require(\\\path\\\),\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\tutil require(\\\util\\\),\\n\\t\\tsuppliedFilename $tw.utils.decodeURIComponentSafe(state.params0),\\n\\t\\tbaseFilename path.resolve(state.boot.wikiPath,\\\files\\\),\\n\\t\\tfilename path.resolve(baseFilename,suppliedFilename),\\n\\t\\textension path.extname(filename);\\n\\t// Check that the filename is inside the wiki files folder\\n\\tif(path.relative(baseFilename,filename).indexOf(\\\..\\\) ! 0) {\\n\\t\\t// Send the file\\n\\t\\tfs.readFile(filename,function(err,content) {\\n\\t\\t\\tvar status,content,type \\\text/plain\\\;\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tconsole.log(\\\Error accessing file \\\ + filename + \\\: \\\ + err.toString());\\n\\t\\t\\t\\tstatus 404;\\n\\t\\t\\t\\tcontent \\\File \\\ + suppliedFilename + \\\ not found\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tstatus 200;\\n\\t\\t\\t\\tcontent content;\\n\\t\\t\\t\\ttype ($tw.config.fileExtensionInfoextension ? $tw.config.fileExtensionInfoextension.type : \\\application/octet-stream\\\);\\n\\t\\t\\t}\\n\\t\\t\\tstate.sendResponse(status,{\\\Content-Type\\\: type},content);\\n\\t\\t});\\n\\t} else {\\n\\t\\tstate.sendResponse(404,{\\\Content-Type\\\: \\\text/plain\\\},\\\File \\\ + suppliedFilename + \\\ not found\\\);\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-index.js\:{\title\:\$:/core/modules/server/routes/get-index.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-index.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar text state.wiki.renderTiddler(state.server.get(\\\root-render-type\\\),state.server.get(\\\root-tiddler\\\)),\\n\\t\\tresponseHeaders {\\n\\t\\t\\\Content-Type\\\: state.server.get(\\\root-serve-type\\\)\\n\\t};\\n\\tstate.sendResponse(200,responseHeaders,text);\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-login-basic.js\:{\title\:\$:/core/modules/server/routes/get-login-basic.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /login-basic -- force a Basic Authentication challenge\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/login-basic$/;\\n\\nexports.handler function(request,response,state) {\\n\\tif(!state.authenticatedUsername) {\\n\\t\\t// Challenge if theres no username\\n\\t\\tresponse.writeHead(401,{\\n\\t\\t\\t\\\WWW-Authenticate\\\: Basic realm\\\Please provide your username and password to login to + state.server.servername + \\\\\n\\t\\t});\\n\\t\\tresponse.end();\\n\\t} else {\\n\\t\\t// Redirect to the root wiki if login worked\\n\\t\\tvar location ($tw.syncadaptor && $tw.syncadaptor.host)? $tw.syncadaptor.host: `${state.pathPrefix}/`;\\n\\t\\tresponse.writeHead(302,{\\n\\t\\t\\tLocation: location\\n\\t\\t});\\n\\t\\tresponse.end();\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-status.js\:{\title\:\$:/core/modules/server/routes/get-status.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-status.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /status\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/status$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar text JSON.stringify({\\n\\t\\tusername: state.authenticatedUsername || state.server.get(\\\anon-username\\\) || \\\\\\,\\n\\t\\tanonymous: !state.authenticatedUsername,\\n\\t\\tread_only: !state.server.isAuthorized(\\\writers\\\,state.authenticatedUsername),\\n\\t\\tlogout_is_available: false,\\n\\t\\tspace: {\\n\\t\\t\\trecipe: \\\default\\\\\n\\t\\t},\\n\\t\\ttiddlywiki_version: $tw.version\\n\\t});\\n\\tstate.sendResponse(200,{\\\Content-Type\\\: \\\application/json\\\},text,\\\utf8\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-tiddler-html.js\:{\title\:\$:/core/modules/server/routes/get-tiddler-html.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /:title\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/(^\\\\/+)$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar title $tw.utils.decodeURIComponentSafe(state.params0),\\n\\t\\ttiddler state.wiki.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar renderType tiddler.getFieldString(\\\_render_type\\\),\\n\\t\\t\\trenderTemplate tiddler.getFieldString(\\\_render_template\\\);\\n\\t\\t// Tiddler fields _render_type and _render_template overwrite\\n\\t\\t// system wide settings for render type and template\\n\\t\\tif(state.wiki.isSystemTiddler(title)) {\\n\\t\\t\\trenderType renderType || state.server.get(\\\system-tiddler-render-type\\\);\\n\\t\\t\\trenderTemplate renderTemplate || state.server.get(\\\system-tiddler-render-template\\\);\\n\\t\\t} else {\\n\\t\\t\\trenderType renderType || state.server.get(\\\tiddler-render-type\\\);\\n\\t\\t\\trenderTemplate renderTemplate || state.server.get(\\\tiddler-render-template\\\);\\n\\t\\t}\\n\\t\\tvar text state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\\n\\n\\t\\t// Naughty not to set a content-type, but its the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\\n\\t\\tstate.sendResponse(200,{},text,\\\utf8\\\);\\n\\t} else {\\n\\t\\tresponse.writeHead(404);\\n\\t\\tresponse.end();\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-tiddler.js\:{\title\:\$:/core/modules/server/routes/get-tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /recipes/default/tiddlers/:title\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/recipes\\\\/default\\\\/tiddlers\\\\/(.+)$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar title $tw.utils.decodeURIComponentSafe(state.params0),\\n\\t\\ttiddler state.wiki.getTiddler(title),\\n\\t\\ttiddlerFields {},\\n\\t\\tknownFields \\n\\t\\t\\t\\\bag\\\, \\\created\\\, \\\creator\\\, \\\modified\\\, \\\modifier\\\, \\\permissions\\\, \\\recipe\\\, \\\revision\\\, \\\tags\\\, \\\text\\\, \\\title\\\, \\\type\\\, \\\uri\\\\\n\\t\\t;\\n\\tif(tiddler) {\\n\\t\\t$tw.utils.each(tiddler.fields,function(field,name) {\\n\\t\\t\\tvar value tiddler.getFieldString(name);\\n\\t\\t\\tif(knownFields.indexOf(name) ! -1) {\\n\\t\\t\\t\\ttiddlerFieldsname value;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttiddlerFields.fields tiddlerFields.fields || {};\\n\\t\\t\\t\\ttiddlerFields.fieldsname value;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\ttiddlerFields.revision state.wiki.getChangeCount(title);\\n\\t\\ttiddlerFields.bag \\\default\\\;\\n\\t\\ttiddlerFields.type tiddlerFields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\tstate.sendResponse(200,{\\\Content-Type\\\: \\\application/json\\\},JSON.stringify(tiddlerFields),\\\utf8\\\);\\n\\t} else {\\n\\t\\tresponse.writeHead(404);\\n\\t\\tresponse.end();\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/get-tiddlers-json.js\:{\title\:\$:/core/modules/server/routes/get-tiddlers-json.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\\ntype: application/javascript\\nmodule-type: route\\n\\nGET /recipes/default/tiddlers.json?filter\u003Cfilter>\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nvar DEFAULT_FILTER \\\alltiddlers!issystemsorttitle\\\;\\n\\nexports.method \\\GET\\\;\\n\\nexports.path /^\\\\/recipes\\\\/default\\\\/tiddlers.json$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar filter state.queryParameters.filter || DEFAULT_FILTER;\\n\\tif(state.wiki.getTiddlerText(\\\$:/config/Server/AllowAllExternalFilters\\\) ! \\\yes\\\) {\\n\\t\\tif(state.wiki.getTiddlerText(\\\$:/config/Server/ExternalFilters/\\\ + filter) ! \\\yes\\\) {\\n\\t\\t\\tconsole.log(\\\Blocked attempt to GET /recipes/default/tiddlers.json with filter: \\\ + filter);\\n\\t\\t\\tresponse.writeHead(403);\\n\\t\\t\\tresponse.end();\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t}\\n\\tif(state.wiki.getTiddlerText(\\\$:/config/SyncSystemTiddlersFromServer\\\) \\\no\\\) {\\n\\t\\tfilter + \\\+!issystem\\\;\\n\\t}\\n\\tvar excludeFields (state.queryParameters.exclude || \\\text\\\).split(\\\,\\\),\\n\\t\\ttitles state.wiki.filterTiddlers(filter);\\n\\tvar tiddlers ;\\n\\t$tw.utils.each(titles,function(title) {\\n\\t\\tvar tiddler state.wiki.getTiddler(title);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tvar tiddlerFields tiddler.getFieldStrings({exclude: excludeFields});\\n\\t\\t\\ttiddlerFields.revision state.wiki.getChangeCount(title);\\n\\t\\t\\ttiddlerFields.type tiddlerFields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\t\\ttiddlers.push(tiddlerFields);\\n\\t\\t}\\n\\t});\\n\\tvar text JSON.stringify(tiddlers);\\n\\tstate.sendResponse(200,{\\\Content-Type\\\: \\\application/json\\\},text,\\\utf8\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/routes/put-tiddler.js\:{\title\:\$:/core/modules/server/routes/put-tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\\ntype: application/javascript\\nmodule-type: route\\n\\nPUT /recipes/default/tiddlers/:title\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nexports.method \\\PUT\\\;\\n\\nexports.path /^\\\\/recipes\\\\/default\\\\/tiddlers\\\\/(.+)$/;\\n\\nexports.handler function(request,response,state) {\\n\\tvar title $tw.utils.decodeURIComponentSafe(state.params0),\\n\\tfields $tw.utils.parseJSONSafe(state.data);\\n\\t// Pull up any subfields in the `fields` object\\n\\tif(fields.fields) {\\n\\t\\t$tw.utils.each(fields.fields,function(field,name) {\\n\\t\\t\\tfieldsname field;\\n\\t\\t});\\n\\t\\tdelete fields.fields;\\n\\t}\\n\\t// Remove any revision field\\n\\tif(fields.revision) {\\n\\t\\tdelete fields.revision;\\n\\t}\\n\\t// If this is a skinny tiddler, it means the client never got the full\\n\\t// version of the tiddler to edit. So we must preserve whatever text\\n\\t// already exists on the server, or else well inadvertently delete it.\\n\\tif(fields._is_skinny ! undefined) {\\n\\t\\tvar tiddler state.wiki.getTiddler(title);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tfields.text tiddler.fields.text;\\n\\t\\t}\\n\\t\\tdelete fields._is_skinny;\\n\\t}\\n\\tstate.wiki.addTiddler(new $tw.Tiddler(fields,{title: title}));\\n\\tvar changeCount state.wiki.getChangeCount(title).toString();\\n\\tresponse.writeHead(204, \\\OK\\\,{\\n\\t\\tEtag: \\\\\\\\\\default/\\\ + encodeURIComponent(title) + \\\/\\\ + changeCount + \\\:\\\\\\\\\\,\\n\\t\\t\\\Content-Type\\\: \\\text/plain\\\\\n\\t});\\n\\tresponse.end();\\n};\\n\,\type\:\application/javascript\,\module-type\:\route\},\$:/core/modules/server/server.js\:{\title\:\$:/core/modules/server/server.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/server/server.js\\ntype: application/javascript\\nmodule-type: library\\n\\nServe tiddlers over http\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nif($tw.node) {\\n\\tvar util require(\\\util\\\),\\n\\t\\tfs require(\\\fs\\\),\\n\\t\\turl require(\\\url\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\tquerystring require(\\\querystring\\\),\\n\\t\\tcrypto require(\\\crypto\\\),\\n\\t\\tzlib require(\\\zlib\\\);\\n}\\n\\n/*\\nA simple HTTP server with regexp-based routes\\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\\n\\t\\t routes - optional array of routes to use\\n\\t\\t wiki - reference to wiki object\\n*/\\nfunction Server(options) {\\n\\tvar self this;\\n\\tthis.routes options.routes || ;\\n\\tthis.authenticators options.authenticators || ;\\n\\tthis.wiki options.wiki;\\n\\tthis.boot options.boot || $tw.boot;\\n\\t// Initialise the variables\\n\\tthis.variables $tw.utils.extend({},this.defaultVariables);\\n\\tif(options.variables) {\\n\\t\\tfor(var variable in options.variables) {\\n\\t\\t\\tif(options.variablesvariable) {\\n\\t\\t\\t\\tthis.variablesvariable options.variablesvariable;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Setup the default required plugins\\n\\tthis.requiredPlugins this.get(\\\required-plugins\\\).split(,);\\n\\t// Initialise CSRF\\n\\tthis.csrfDisable this.get(\\\csrf-disable\\\) \\\yes\\\;\\n\\t// Initialize Gzip compression\\n\\tthis.enableGzip this.get(\\\gzip\\\) \\\yes\\\;\\n\\t// Initialize browser-caching\\n\\tthis.enableBrowserCache this.get(\\\use-browser-cache\\\) \\\yes\\\;\\n\\t// Initialise authorization\\n\\tvar authorizedUserName;\\n\\tif(this.get(\\\username\\\) && this.get(\\\password\\\)) {\\n\\t\\tauthorizedUserName this.get(\\\username\\\);\\n\\t} else if(this.get(\\\credentials\\\)) {\\n\\t\\tauthorizedUserName \\\(authenticated)\\\;\\n\\t} else {\\n\\t\\tauthorizedUserName \\\(anon)\\\;\\n\\t}\\n\\tthis.authorizationPrincipals {\\n\\t\\treaders: (this.get(\\\readers\\\) || authorizedUserName).split(\\\,\\\).map($tw.utils.trim),\\n\\t\\twriters: (this.get(\\\writers\\\) || authorizedUserName).split(\\\,\\\).map($tw.utils.trim)\\n\\t}\\n\\tif(this.get(\\\admin\\\) || authorizedUserName ! \\\(anon)\\\) {\\n\\t\\tthis.authorizationPrincipals\\\admin\\\ (this.get(\\\admin\\\) || authorizedUserName).split(,).map($tw.utils.trim)\\n\\t}\\n\\t// Load and initialise authenticators\\n\\t$tw.modules.forEachModuleOfType(\\\authenticator\\\, function(title,authenticatorDefinition) {\\n\\t\\t// console.log(\\\Loading authenticator \\\ + title);\\n\\t\\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\\n\\t});\\n\\t// Load route handlers\\n\\t$tw.modules.forEachModuleOfType(\\\route\\\, function(title,routeDefinition) {\\n\\t\\t// console.log(\\\Loading server route \\\ + title);\\n\\t\\tself.addRoute(routeDefinition);\\n\\t});\\n\\t// Initialise the http vs https\\n\\tthis.listenOptions null;\\n\\tthis.protocol \\\http\\\;\\n\\tvar tlsKeyFilepath this.get(\\\tls-key\\\),\\n\\t\\ttlsCertFilepath this.get(\\\tls-cert\\\),\\n\\t\\ttlsPassphrase this.get(\\\tls-passphrase\\\);\\n\\tif(tlsCertFilepath && tlsKeyFilepath) {\\n\\t\\tthis.listenOptions {\\n\\t\\t\\tkey: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),\\\utf8\\\),\\n\\t\\t\\tcert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),\\\utf8\\\),\\n\\t\\t\\tpassphrase: tlsPassphrase || \\n\\t\\t};\\n\\t\\tthis.protocol \\\https\\\;\\n\\t}\\n\\tthis.transport require(this.protocol);\\n\\t// Name the server and init the boot state\\n\\tthis.servername $tw.utils.transliterateToSafeASCII(this.get(\\\server-name\\\) || this.wiki.getTiddlerText(\\\$:/SiteTitle\\\) || \\\TiddlyWiki5\\\);\\n\\tthis.boot.origin this.get(\\\origin\\\)? this.get(\\\origin\\\): this.protocol+\\\://\\\+this.get(\\\host\\\)+\\\:\\\+this.get(\\\port\\\);\\n\\tthis.boot.pathPrefix this.get(\\\path-prefix\\\) || \\\\\\;\\n}\\n\\n/*\\nSend a response to the client. This method checks if the response must be sent\\nor if the client alrady has the data cached. If thats the case only a 304\\nresponse will be transmitted and the browser will use the cached data.\\nOnly requests with status code 200 are considdered for caching.\\nrequest: request instance passed to the handler\\nresponse: response instance passed to the handler\\nstatusCode: stauts code to send to the browser\\nheaders: response headers (they will be augmented with an `Etag` header)\\ndata: the data to send (passed to the end method of the response instance)\\nencoding: the encoding of the data to send (passed to the end method of the response instance)\\n*/\\nfunction sendResponse(request,response,statusCode,headers,data,encoding) {\\n\\tif(this.enableBrowserCache && (statusCode 200)) {\\n\\t\\tvar hash crypto.createHash(md5);\\n\\t\\t// Put everything into the hash that could change and invalidate the data that\\n\\t\\t// the browser already stored. The headers the data and the encoding.\\n\\t\\thash.update(data);\\n\\t\\thash.update(JSON.stringify(headers));\\n\\t\\tif(encoding) {\\n\\t\\t\\thash.update(encoding);\\n\\t\\t}\\n\\t\\tvar contentDigest hash.digest(\\\hex\\\);\\n\\t\\t// RFC 7232 section 2.3 mandates for the etag to be enclosed in quotes\\n\\t\\theaders\\\Etag\\\ \\\ + contentDigest + \\\;\\n\\t\\theaders\\\Cache-Control\\\ \\\max-age0, must-revalidate\\\;\\n\\t\\t// Check if any of the hashes contained within the if-none-match header\\n\\t\\t// matches the current hash.\\n\\t\\t// If one matches, do not send the data but tell the browser to use the\\n\\t\\t// cached data.\\n\\t\\t// We do not implement \\\*\\\ as it makes no sense here.\\n\\t\\tvar ifNoneMatch request.headers\\\if-none-match\\\;\\n\\t\\tif(ifNoneMatch) {\\n\\t\\t\\tvar matchParts ifNoneMatch.split(\\\,\\\).map(function(etag) {\\n\\t\\t\\t\\treturn etag.replace(/^ \\\+| \\\+$/g, \\\\\\);\\n\\t\\t\\t});\\n\\t\\t\\tif(matchParts.indexOf(contentDigest) ! -1) {\\n\\t\\t\\t\\tresponse.writeHead(304,headers);\\n\\t\\t\\t\\tresponse.end();\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\t// RFC 7231, 6.1. Overview of Status Codes:\\n\\t\\t// Browser clients may cache 200, 203, 204, 206, 300, 301, \\n\\t\\t// 404, 405, 410, 414, and 501 unless given explicit cache controls\\n\\t\\theaders\\\Cache-Control\\\ headers\\\Cache-Control\\\ || \\\no-store\\\;\\n\\t}\\n\\t/*\\n\\tIf the gzipyes is set, check if the user agent permits compression. If so,\\n\\tcompress our response if the raw data is bigger than 2k. Compressing less\\n\\tdata is inefficient. Note that we use the synchronous functions from zlib\\n\\tto stay in the imperative style. The current `Server` doesnt depend on\\n\\tthis, and we may just as well use the async versions.\\n\\t*/\\n\\tif(this.enableGzip && (data.length > 2048)) {\\n\\t\\tvar acceptEncoding request.headers\\\accept-encoding\\\ || \\\\\\;\\n\\t\\tif(/\\\\bdeflate\\\\b/.test(acceptEncoding)) {\\n\\t\\t\\theaders\\\Content-Encoding\\\ \\\deflate\\\;\\n\\t\\t\\tdata zlib.deflateSync(data);\\n\\t\\t} else if(/\\\\bgzip\\\\b/.test(acceptEncoding)) {\\n\\t\\t\\theaders\\\Content-Encoding\\\ \\\gzip\\\;\\n\\t\\t\\tdata zlib.gzipSync(data);\\n\\t\\t}\\n\\t}\\n\\n\\tresponse.writeHead(statusCode,headers);\\n\\tresponse.end(data,encoding);\\n}\\n\\nServer.prototype.defaultVariables {\\n\\tport: \\\8080\\\,\\n\\thost: \\\127.0.0.1\\\,\\n\\t\\\required-plugins\\\: \\\$:/plugins/tiddlywiki/filesystem,$:/plugins/tiddlywiki/tiddlyweb\\\,\\n\\t\\\root-tiddler\\\: \\\$:/core/save/all\\\,\\n\\t\\\root-render-type\\\: \\\text/plain\\\,\\n\\t\\\root-serve-type\\\: \\\text/html\\\,\\n\\t\\\tiddler-render-type\\\: \\\text/html\\\,\\n\\t\\\tiddler-render-template\\\: \\\$:/core/templates/server/static.tiddler.html\\\,\\n\\t\\\system-tiddler-render-type\\\: \\\text/plain\\\,\\n\\t\\\system-tiddler-render-template\\\: \\\$:/core/templates/wikified-tiddler\\\,\\n\\t\\\debug-level\\\: \\\none\\\,\\n\\t\\\gzip\\\: \\\no\\\,\\n\\t\\\use-browser-cache\\\: \\\no\\\\\n};\\n\\nServer.prototype.get function(name) {\\n\\treturn this.variablesname;\\n};\\n\\nServer.prototype.addRoute function(route) {\\n\\tthis.routes.push(route);\\n};\\n\\nServer.prototype.addAuthenticator function(AuthenticatorClass) {\\n\\t// Instantiate and initialise the authenticator\\n\\tvar authenticator new AuthenticatorClass(this),\\n\\t\\tresult authenticator.init();\\n\\tif(typeof result \\\string\\\) {\\n\\t\\t$tw.utils.error(\\\Error: \\\ + result);\\n\\t} else if(result) {\\n\\t\\t// Only use the authenticator if it initialised successfully\\n\\t\\tthis.authenticators.push(authenticator);\\n\\t}\\n};\\n\\nServer.prototype.findMatchingRoute function(request,state) {\\n\\tfor(var t0; t\u003Cthis.routes.length; t++) {\\n\\t\\tvar potentialRoute this.routest,\\n\\t\\t\\tpathRegExp potentialRoute.path,\\n\\t\\t\\tpathname state.urlInfo.pathname,\\n\\t\\t\\tmatch;\\n\\t\\tif(state.pathPrefix) {\\n\\t\\t\\tif(pathname.substr(0,state.pathPrefix.length) state.pathPrefix) {\\n\\t\\t\\t\\tpathname pathname.substr(state.pathPrefix.length) || \\\/\\\;\\n\\t\\t\\t\\tmatch potentialRoute.path.exec(pathname);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tmatch false;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tmatch potentialRoute.path.exec(pathname);\\n\\t\\t}\\n\\t\\tif(match && request.method potentialRoute.method) {\\n\\t\\t\\tstate.params ;\\n\\t\\t\\tfor(var p1; p\u003Cmatch.length; p++) {\\n\\t\\t\\t\\tstate.params.push(matchp);\\n\\t\\t\\t}\\n\\t\\t\\treturn potentialRoute;\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\nServer.prototype.methodMappings {\\n\\t\\\GET\\\: \\\readers\\\,\\n\\t\\\OPTIONS\\\: \\\readers\\\,\\n\\t\\\HEAD\\\: \\\readers\\\,\\n\\t\\\PUT\\\: \\\writers\\\,\\n\\t\\\POST\\\: \\\writers\\\,\\n\\t\\\DELETE\\\: \\\writers\\\\\n};\\n\\n/*\\nCheck whether a given user is authorized for the specified authorizationType (\\\readers\\\ or \\\writers\\\). Pass null or undefined as the username to check for anonymous access\\n*/\\nServer.prototype.isAuthorized function(authorizationType,username) {\\n\\tvar principals this.authorizationPrincipalsauthorizationType || ;\\n\\treturn principals.indexOf(\\\(anon)\\\) ! -1 || (username && (principals.indexOf(\\\(authenticated)\\\) ! -1 || principals.indexOf(username) ! -1));\\n}\\n\\nServer.prototype.requestHandler function(request,response,options) {\\n\\toptions options || {};\\n\\t// Compose the state object\\n\\tvar self this;\\n\\tvar state {};\\n\\tstate.wiki options.wiki || self.wiki;\\n\\tstate.boot options.boot || self.boot;\\n\\tstate.server self;\\n\\tstate.urlInfo url.parse(request.url);\\n\\tstate.queryParameters querystring.parse(state.urlInfo.query);\\n\\tstate.pathPrefix options.pathPrefix || this.get(\\\path-prefix\\\) || \\\\\\;\\n\\tstate.sendResponse sendResponse.bind(self,request,response);\\n\\t// Get the principals authorized to access this resource\\n\\tstate.authorizationType options.authorizationType || this.methodMappingsrequest.method || \\\readers\\\;\\n\\t// Check for the CSRF header if this is a write\\n\\tif(!this.csrfDisable && state.authorizationType \\\writers\\\ && request.headers\\\x-requested-with\\\ ! \\\TiddlyWiki\\\) {\\n\\t\\tresponse.writeHead(403,\\\X-Requested-With header required to login to \\\ + this.servername + \\\\\\);\\n\\t\\tresponse.end();\\n\\t\\treturn;\\n\\t}\\n\\t// Check whether anonymous access is granted\\n\\tstate.allowAnon this.isAuthorized(state.authorizationType,null);\\n\\t// Authenticate with the first active authenticator\\n\\tif(this.authenticators.length > 0) {\\n\\t\\tif(!this.authenticators0.authenticateRequest(request,response,state)) {\\n\\t\\t\\t// Bail if we failed (the authenticator will have sent the response)\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t}\\n\\t// Authorize with the authenticated username\\n\\tif(!this.isAuthorized(state.authorizationType,state.authenticatedUsername)) {\\n\\t\\tresponse.writeHead(401,\\\\\\ + state.authenticatedUsername + \\\ is not authorized to access \\\ + this.servername + \\\\\\);\\n\\t\\tresponse.end();\\n\\t\\treturn;\\n\\t}\\n\\t// Find the route that matches this path\\n\\tvar route self.findMatchingRoute(request,state);\\n\\t// Optionally output debug info\\n\\tif(self.get(\\\debug-level\\\) ! \\\none\\\) {\\n\\t\\tconsole.log(\\\Request path:\\\,JSON.stringify(state.urlInfo));\\n\\t\\tconsole.log(\\\Request headers:\\\,JSON.stringify(request.headers));\\n\\t\\tconsole.log(\\\authenticatedUsername:\\\,state.authenticatedUsername);\\n\\t}\\n\\t// Return a 404 if we didnt find a route\\n\\tif(!route) {\\n\\t\\tresponse.writeHead(404);\\n\\t\\tresponse.end();\\n\\t\\treturn;\\n\\t}\\n\\t// Receive the request body if necessary and hand off to the route handler\\n\\tif(route.bodyFormat \\\stream\\\ || request.method \\\GET\\\ || request.method \\\HEAD\\\) {\\n\\t\\t// Let the route handle the request stream itself\\n\\t\\troute.handler(request,response,state);\\n\\t} else if(route.bodyFormat \\\string\\\ || !route.bodyFormat) {\\n\\t\\t// Set the encoding for the incoming request\\n\\t\\trequest.setEncoding(\\\utf8\\\);\\n\\t\\tvar data \\\\\\;\\n\\t\\trequest.on(\\\data\\\,function(chunk) {\\n\\t\\t\\tdata + chunk.toString();\\n\\t\\t});\\n\\t\\trequest.on(\\\end\\\,function() {\\n\\t\\t\\tstate.data data;\\n\\t\\t\\troute.handler(request,response,state);\\n\\t\\t});\\n\\t} else if(route.bodyFormat \\\buffer\\\) {\\n\\t\\tvar data ;\\n\\t\\trequest.on(\\\data\\\,function(chunk) {\\n\\t\\t\\tdata.push(chunk);\\n\\t\\t});\\n\\t\\trequest.on(\\\end\\\,function() {\\n\\t\\t\\tstate.data Buffer.concat(data);\\n\\t\\t\\troute.handler(request,response,state);\\n\\t\\t})\\n\\t} else {\\n\\t\\tresponse.writeHead(400,\\\Invalid bodyFormat \\\ + route.bodyFormat + \\\ in route \\\ + route.method + \\\ \\\ + route.path.source);\\n\\t\\tresponse.end();\\n\\t}\\n};\\n\\n/*\\nListen for requests\\nport: optional port number (falls back to value of \\\port\\\ variable)\\nhost: optional host address (falls back to value of \\\host\\\ variable)\\nprefix: optional prefix (falls back to value of \\\path-prefix\\\ variable)\\n*/\\nServer.prototype.listen function(port,host,prefix) {\\n\\tvar self this;\\n\\t// Handle defaults for port and host\\n\\tport port || this.get(\\\port\\\);\\n\\thost host || this.get(\\\host\\\);\\n\\tprefix prefix || this.get(\\\path-prefix\\\) || \\\\\\;\\n\\t// Check for the port being a string and look it up as an environment variable\\n\\tif(parseInt(port,10).toString() ! port) {\\n\\t\\tport process.envport || 8080;\\n\\t}\\n\\t// Warn if required plugins are missing\\n\\tvar missing ;\\n\\tfor (var index0; index\u003Cthis.requiredPlugins.length; index++) {\\n\\t\\tif (!this.wiki.getTiddler(this.requiredPluginsindex)) {\\n\\t\\t\\tmissing.push(this.requiredPluginsindex);\\n\\t\\t}\\n\\t}\\n\\tif(missing.length > 0) {\\n\\t\\tvar error \\\Warning: Plugin(s) required for client-server operation are missing.\\\\n\\\+\\n\\t\\t\\t\\\\\\\\\\\\\+ missing.join(\\\\\\\\\\, \\\\\\\\\\)+\\\\\\\\\\\\\;\\n\\t\\t$tw.utils.warning(error);\\n\\t}\\n\\t// Create the server\\n\\tvar server;\\n\\tif(this.listenOptions) {\\n\\t\\tserver this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\\n\\t} else {\\n\\t\\tserver this.transport.createServer(this.requestHandler.bind(this));\\n\\t}\\n\\t// Display the port number after weve started listening (the port number might have been specified as zero, in which case we will get an assigned port)\\n\\tserver.on(\\\listening\\\,function() {\\n\\t\\tvar address server.address(),\\n\\t\\t\\turl self.protocol + \\\://\\\ + (address.family \\\IPv6\\\ ? \\\\\\ + address.address + \\\\\\ : address.address) + \\\:\\\ + address.port + prefix;\\n\\t\\t$tw.utils.log(\\\Serving on \\\ + url,\\\brown/orange\\\);\\n\\t\\t$tw.utils.log(\\\(press ctrl-C to exit)\\\,\\\red\\\);\\n\\t});\\n\\t// Listen\\n\\treturn server.listen(port,host);\\n};\\n\\nexports.Server Server;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/core/modules/browser-messaging.js\:{\title\:\$:/core/modules/browser-messaging.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/browser-messaging.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nBrowser message handling\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\browser-messaging\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\startup\\\;\\nexports.synchronous true;\\n\\n/*\\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\\n*/\\nfunction loadIFrame(url,callback) {\\n\\t// Check if iframe already exists\\n\\tvar iframeInfo $tw.browserMessaging.iframeInfoMapurl;\\n\\tif(iframeInfo) {\\n\\t\\t// Weve already got the iframe\\n\\t\\tcallback(null,iframeInfo);\\n\\t} else {\\n\\t\\t// Create the iframe and save it in the list\\n\\t\\tvar iframe document.createElement(\\\iframe\\\);\\n\\t\\tiframeInfo {\\n\\t\\t\\turl: url,\\n\\t\\t\\tstatus: \\\loading\\\,\\n\\t\\t\\tdomNode: iframe\\n\\t\\t};\\n\\t\\t$tw.browserMessaging.iframeInfoMapurl iframeInfo;\\n\\t\\tsaveIFrameInfoTiddler(iframeInfo);\\n\\t\\t// Add the iframe to the DOM and hide it\\n\\t\\tiframe.style.display \\\none\\\;\\n\\t\\tiframe.setAttribute(\\\library\\\,\\\true\\\);\\n\\t\\tdocument.body.appendChild(iframe);\\n\\t\\t// Set up onload\\n\\t\\tiframe.onload function() {\\n\\t\\t\\tiframeInfo.status \\\loaded\\\;\\n\\t\\t\\tsaveIFrameInfoTiddler(iframeInfo);\\n\\t\\t\\tcallback(null,iframeInfo);\\n\\t\\t};\\n\\t\\tiframe.onerror function() {\\n\\t\\t\\tcallback(\\\Cannot load iframe\\\);\\n\\t\\t};\\n\\t\\ttry {\\n\\t\\t\\tiframe.src url;\\n\\t\\t} catch(ex) {\\n\\t\\t\\tcallback(ex);\\n\\t\\t}\\n\\t}\\n}\\n\\n/*\\nUnload library iframe for given url\\n*/\\nfunction unloadIFrame(url){\\n\\tvar iframes document.getElementsByTagName(iframe);\\n\\tfor(var tiframes.length-1; t--; t>0) {\\n\\t\\tvar iframe iframest;\\n\\t\\tif(iframe.getAttribute(\\\library\\\) \\\true\\\ &&\\n\\t\\t iframe.getAttribute(\\\src\\\) url) {\\n\\t\\t\\tiframe.parentNode.removeChild(iframe);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction saveIFrameInfoTiddler(iframeInfo) {\\n\\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\\n\\t\\ttitle: \\\$:/temp/ServerConnection/\\\ + iframeInfo.url,\\n\\t\\ttext: iframeInfo.status,\\n\\t\\ttags: \\\$:/tags/ServerConnection\\\,\\n\\t\\turl: iframeInfo.url\\n\\t},$tw.wiki.getModificationFields()));\\n}\\n\\nexports.startup function() {\\n\\t// Initialise the store of iframes weve created\\n\\t$tw.browserMessaging {\\n\\t\\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\\\loading/loaded\\\,domNode:}\\n\\t};\\n\\t// Listen for widget messages to control loading the plugin library\\n\\t$tw.rootWidget.addEventListener(\\\tm-load-plugin-library\\\,function(event) {\\n\\t\\tvar paramObject event.paramObject || {},\\n\\t\\t\\turl paramObject.url;\\n\\t\\tif(url) {\\n\\t\\t\\tloadIFrame(url,function(err,iframeInfo) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\talert($tw.language.getString(\\\Error/LoadingPluginLibrary\\\) + \\\: \\\ + url);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tiframeInfo.domNode.contentWindow.postMessage({\\n\\t\\t\\t\\t\\t\\tverb: \\\GET\\\,\\n\\t\\t\\t\\t\\t\\turl: \\\recipes/library/tiddlers.json\\\,\\n\\t\\t\\t\\t\\t\\tcookies: {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\save-info\\\,\\n\\t\\t\\t\\t\\t\\t\\tinfoTitlePrefix: paramObject.infoTitlePrefix || \\\$:/temp/RemoteAssetInfo/\\\,\\n\\t\\t\\t\\t\\t\\t\\turl: url\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t},\\\*\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\t// Listen for widget messages to control unloading the plugin library\\n\\t$tw.rootWidget.addEventListener(\\\tm-unload-plugin-library\\\,function(event) {\\n\\t\\tvar paramObject event.paramObject || {},\\n\\t\\t\\turl paramObject.url;\\n\\t\\t$tw.browserMessaging.iframeInfoMapurl undefined;\\n\\t\\tif(url) {\\n\\t\\t\\tunloadIFrame(url);\\n\\t\\t\\t$tw.utils.each(\\n\\t\\t\\t\\t$tw.wiki.filterTiddlers(\\\$:/temp/ServerConnection/\\\ + url + \\\ prefix$:/temp/RemoteAssetInfo/\\\ + url + \\\/\\\),\\n\\t\\t\\t\\tfunction(title) {\\n\\t\\t\\t\\t\\t$tw.wiki.deleteTiddler(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t);\\n\\t\\t}\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\tm-load-plugin-from-library\\\,function(event) {\\n\\t\\tvar paramObject event.paramObject || {},\\n\\t\\t\\turl paramObject.url,\\n\\t\\t\\ttitle paramObject.title;\\n\\t\\tif(url && title) {\\n\\t\\t\\tloadIFrame(url,function(err,iframeInfo) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\talert($tw.language.getString(\\\Error/LoadingPluginLibrary\\\) + \\\: \\\ + url);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tiframeInfo.domNode.contentWindow.postMessage({\\n\\t\\t\\t\\t\\t\\tverb: \\\GET\\\,\\n\\t\\t\\t\\t\\t\\turl: \\\recipes/library/tiddlers/\\\ + encodeURIComponent(title) + \\\.json\\\,\\n\\t\\t\\t\\t\\t\\tcookies: {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\save-tiddler\\\,\\n\\t\\t\\t\\t\\t\\t\\turl: url\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t},\\\*\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n\\t// Listen for window messages from other windows\\n\\twindow.addEventListener(\\\message\\\,function listener(event){\\n\\t\\t// console.log(\\\browser-messaging: \\\,document.location.toString())\\n\\t\\t// console.log(\\\browser-messaging: Received message from\\\,event.origin);\\n\\t\\t// console.log(\\\browser-messaging: Message content\\\,event.data);\\n\\t\\tswitch(event.data.verb) {\\n\\t\\t\\tcase \\\GET-RESPONSE\\\:\\n\\t\\t\\t\\tif(event.data.status.charAt(0) \\\2\\\) {\\n\\t\\t\\t\\t\\tif(event.data.cookies) {\\n\\t\\t\\t\\t\\t\\tif(event.data.cookies.type \\\save-info\\\) {\\n\\t\\t\\t\\t\\t\\t\\tvar tiddlers $tw.utils.parseJSONSafe(event.data.body);\\n\\t\\t\\t\\t\\t\\t\\t$tw.utils.each(tiddlers,function(tiddler) {\\n\\t\\t\\t\\t\\t\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \\\/\\\ + tiddler.title,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\original-title\\\: tiddler.title,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttext: \\\\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttype: \\\text/vnd.tiddlywiki\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\original-type\\\: tiddler.type,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\plugin-type\\\: undefined,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\original-plugin-type\\\: tiddler\\\plugin-type\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\module-type\\\: undefined,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\original-module-type\\\: tiddler\\\module-type\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttags: \\\$:/tags/RemoteAssetInfo\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\original-tags\\\: $tw.utils.stringifyList(tiddler.tags || ),\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\\server-url\\\: event.data.cookies.url\\n\\t\\t\\t\\t\\t\\t\\t\\t},$tw.wiki.getModificationFields()));\\n\\t\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t\\t} else if(event.data.cookies.type \\\save-tiddler\\\) {\\n\\t\\t\\t\\t\\t\\t\\tvar tiddler $tw.utils.parseJSONSafe(event.data.body);\\n\\t\\t\\t\\t\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t},false);\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/commands.js\:{\title\:\$:/core/modules/startup/commands.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/commands.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nCommand processing\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\commands\\\;\\nexports.platforms \\\node\\\;\\nexports.after \\\story\\\;\\nexports.synchronous false;\\n\\nexports.startup function(callback) {\\n\\t// On the server, start a commander with the command line arguments\\n\\tvar commander new $tw.Commander(\\n\\t\\t$tw.boot.argv,\\n\\t\\tfunction(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn $tw.utils.error(\\\Error: \\\ + err);\\n\\t\\t\\t}\\n\\t\\t\\tcallback();\\n\\t\\t},\\n\\t\\t$tw.wiki,\\n\\t\\t{output: process.stdout, error: process.stderr}\\n\\t);\\n\\tcommander.execute();\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/favicon.js\:{\title\:\$:/core/modules/startup/favicon.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/favicon.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nFavicon handling\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\favicon\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\startup\\\;\\nexports.synchronous true;\\n\\n// Favicon tiddler\\nvar FAVICON_TITLE \\\$:/favicon.ico\\\;\\n\\nexports.startup function() {\\n\\t// Set up the favicon\\n\\tsetFavicon();\\n\\t// Reset the favicon when the tiddler changes\\n\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\\n\\t\\t\\tsetFavicon();\\n\\t\\t}\\n\\t});\\n};\\n\\nfunction setFavicon() {\\n\\tvar tiddler $tw.wiki.getTiddler(FAVICON_TITLE);\\n\\tif(tiddler) {\\n\\t\\tvar faviconLink document.getElementById(\\\faviconLink\\\);\\n\\t\\tfaviconLink.setAttribute(\\\href\\\,$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri));\\n\\t}\\n}\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/info.js\:{\title\:\$:/core/modules/startup/info.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/info.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\info\\\;\\nexports.before \\\startup\\\;\\nexports.after \\\load-modules\\\;\\nexports.synchronous true;\\n\\nvar TITLE_INFO_PLUGIN \\\$:/temp/info-plugin\\\;\\n\\nexports.startup function() {\\n\\t// Function to bake the info plugin with new tiddlers\\n\\tvar updateInfoPlugin function(tiddlerFieldsArray) {\\n\\t\\t// Get the existing tiddlers\\n\\t\\tvar json $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}});\\n\\t\\t// Add the new ones\\n\\t\\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\\n\\t\\t\\tif(fields && fields.title) {\\n\\t\\t\\t\\tjson.tiddlersfields.title fields;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \\\info\\\ because ordinary plugins are only registered asynchronously after being loaded dynamically\\n\\t\\tvar fields {\\n\\t\\t\\ttitle: TITLE_INFO_PLUGIN,\\n\\t\\t\\ttype: \\\application/json\\\,\\n\\t\\t\\t\\\plugin-type\\\: \\\info\\\,\\n\\t\\t\\ttext: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces)\\n\\t\\t};\\n\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\\n\\n\\t};\\n\\t// Collect up the info tiddlers\\n\\tvar tiddlerFieldsArray ;\\n\\t// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them\\n\\t$tw.modules.forEachModuleOfType(\\\info\\\,function(title,moduleExports) {\\n\\t\\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\\n\\t\\t\\tArray.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin));\\n\\t\\t}\\n\\t});\\n\\tupdateInfoPlugin(tiddlerFieldsArray);\\n\\tvar changes $tw.wiki.readPluginInfo(TITLE_INFO_PLUGIN);\\n\\t$tw.wiki.registerPluginTiddlers(\\\info\\\,TITLE_INFO_PLUGIN);\\n\\t$tw.wiki.unpackPluginTiddlers();\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/load-modules.js\:{\title\:\$:/core/modules/startup/load-modules.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/load-modules.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nLoad core modules\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\load-modules\\\;\\nexports.synchronous true;\\n\\nexports.startup function() {\\n\\t// Load modules\\n\\t$tw.modules.applyMethods(\\\utils\\\,$tw.utils);\\n\\tif($tw.node) {\\n\\t\\t$tw.modules.applyMethods(\\\utils-node\\\,$tw.utils);\\n\\t}\\n\\tif($tw.browser) {\\n\\t\\t$tw.modules.applyMethods(\\\utils-browser\\\,$tw.utils);\\n\\t}\\n\\t$tw.modules.applyMethods(\\\global\\\,$tw);\\n\\t$tw.modules.applyMethods(\\\config\\\,$tw.config);\\n\\t$tw.Tiddler.fieldModules $tw.modules.getModulesByTypeAsHashmap(\\\tiddlerfield\\\);\\n\\t$tw.modules.applyMethods(\\\tiddlermethod\\\,$tw.Tiddler.prototype);\\n\\t$tw.modules.applyMethods(\\\wikimethod\\\,$tw.Wiki.prototype);\\n\\t$tw.wiki.addIndexersToWiki();\\n\\t$tw.modules.applyMethods(\\\tiddlerdeserializer\\\,$tw.Wiki.tiddlerDeserializerModules);\\n\\t$tw.macros $tw.modules.getModulesByTypeAsHashmap(\\\macro\\\);\\n\\t$tw.wiki.initParsers();\\n\\t$tw.Commander.initCommands();\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/password.js\:{\title\:\$:/core/modules/startup/password.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/password.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nPassword handling\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\password\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\startup\\\;\\nexports.synchronous true;\\n\\nexports.startup function() {\\n\\t$tw.rootWidget.addEventListener(\\\tm-set-password\\\,function(event) {\\n\\t\\t$tw.passwordPrompt.createPrompt({\\n\\t\\t\\tserviceName: $tw.language.getString(\\\Encryption/PromptSetPassword\\\),\\n\\t\\t\\tnoUserName: true,\\n\\t\\t\\tsubmitText: $tw.language.getString(\\\Encryption/SetPassword\\\),\\n\\t\\t\\tcanCancel: true,\\n\\t\\t\\trepeatPassword: true,\\n\\t\\t\\tcallback: function(data) {\\n\\t\\t\\t\\tif(data) {\\n\\t\\t\\t\\t\\t$tw.crypto.setPassword(data.password);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn true; // Get rid of the password prompt\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\tm-clear-password\\\,function(event) {\\n\\t\\tif($tw.browser) {\\n\\t\\t\\tif(!confirm($tw.language.getString(\\\Encryption/ConfirmClearPassword\\\))) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t$tw.crypto.setPassword(null);\\n\\t});\\n\\t// Ensure that $:/isEncrypted is maintained properly\\n\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\tif($tw.utils.hop(changes,\\\$:/isEncrypted\\\)) {\\n\\t\\t\\t$tw.crypto.updateCryptoStateTiddler();\\n\\t\\t}\\n\\t});\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/plugins.js\:{\title\:\$:/core/modules/startup/plugins.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/plugins.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nStartup logic concerned with managing plugins\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\plugins\\\;\\nexports.after \\\load-modules\\\;\\nexports.before \\\startup\\\;\\nexports.synchronous true;\\n\\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE \\\$:/status/RequireReloadDueToPluginChange\\\;\\n\\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE \\\$:/config/RegisterPluginType/\\\;\\n\\nexports.startup function() {\\n\\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \\\no\\\});\\n\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\t// Work out which of the changed tiddlers are plugins that we need to reregister\\n\\t\\tvar changesToProcess ,\\n\\t\\t\\trequireReloadDueToPluginChange false;\\n\\t\\t$tw.utils.each(Object.keys(changes),function(title) {\\n\\t\\t\\tvar tiddler $tw.wiki.getTiddler(title),\\n\\t\\t\\t\\trequiresReload $tw.wiki.doesPluginRequireReload(title);\\n\\t\\t\\tif(requiresReload) {\\n\\t\\t\\t\\trequireReloadDueToPluginChange true;\\n\\t\\t\\t} else if(tiddler) {\\n\\t\\t\\t\\tvar pluginType tiddler.fields\\\plugin-type\\\;\\n\\t\\t\\t\\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields\\\plugin-type\\\ || \\\\\\),\\\no\\\) \\\yes\\\) {\\n\\t\\t\\t\\t\\tchangesToProcess.push(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Issue warning if any of the tiddlers require a reload\\n\\t\\tif(requireReloadDueToPluginChange) {\\n\\t\\t\\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \\\yes\\\});\\n\\t\\t}\\n\\t\\t// Read or delete the plugin info of the changed tiddlers\\n\\t\\tif(changesToProcess.length > 0) {\\n\\t\\t\\tvar changes $tw.wiki.readPluginInfo(changesToProcess);\\n\\t\\t\\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\\n\\t\\t\\t\\tvar changedShadowTiddlers {};\\n\\t\\t\\t\\t// Collect the shadow tiddlers of any deleted plugins\\n\\t\\t\\t\\t$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {\\n\\t\\t\\t\\t\\tvar pluginInfo $tw.wiki.getPluginInfo(pluginTitle);\\n\\t\\t\\t\\t\\tif(pluginInfo) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\\n\\t\\t\\t\\t\\t\\t\\tchangedShadowTiddlerstitle true;\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\t// Collect the shadow tiddlers of any modified plugins\\n\\t\\t\\t\\t$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {\\n\\t\\t\\t\\t\\tvar pluginInfo $tw.wiki.getPluginInfo(pluginTitle);\\n\\t\\t\\t\\t\\tif(pluginInfo && pluginInfo.tiddlers) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\\n\\t\\t\\t\\t\\t\\t\\tchangedShadowTiddlerstitle false;\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\t// (Re-)register any modified plugins\\n\\t\\t\\t\\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\\n\\t\\t\\t\\t// Unregister any deleted plugins\\n\\t\\t\\t\\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\\n\\t\\t\\t\\t// Unpack the shadow tiddlers\\n\\t\\t\\t\\t$tw.wiki.unpackPluginTiddlers();\\n\\t\\t\\t\\t// Queue change events for the changed shadow tiddlers\\n\\t\\t\\t\\t$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {\\n\\t\\t\\t\\t\\t$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlerstitle, true);\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/render.js\:{\title\:\$:/core/modules/startup/render.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/render.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nTitle, stylesheet and page rendering\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\render\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\story\\\;\\nexports.synchronous true;\\n\\n// Default story and history lists\\nvar PAGE_TITLE_TITLE \\\$:/core/wiki/title\\\;\\nvar PAGE_STYLESHEET_TITLE \\\$:/core/ui/PageStylesheet\\\;\\nvar PAGE_TEMPLATE_TITLE \\\$:/core/ui/RootTemplate\\\;\\n\\n// Time (in ms) that we defer refreshing changes to draft tiddlers\\nvar DRAFT_TIDDLER_TIMEOUT_TITLE \\\$:/config/Drafts/TypingTimeout\\\;\\nvar THROTTLE_REFRESH_TIMEOUT 400;\\n\\nexports.startup function() {\\n\\t// Set up the title\\n\\t$tw.titleWidgetNode $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE, {\\n\\t\\tdocument: $tw.fakeDocument,\\n\\t\\tparseAsInline: true,\\n\\t\\timportPageMacros: true,\\n\\t});\\n\\t$tw.titleContainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\t$tw.titleWidgetNode.render($tw.titleContainer,null);\\n\\tdocument.title $tw.titleContainer.textContent;\\n\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\\n\\t\\t\\tdocument.title $tw.titleContainer.textContent;\\n\\t\\t}\\n\\t});\\n\\t// Set up the styles\\n\\t$tw.styleWidgetNode $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\\n\\t$tw.styleContainer $tw.fakeDocument.createElement(\\\style\\\);\\n\\t$tw.styleWidgetNode.render($tw.styleContainer,null);\\n\\t$tw.styleWidgetNode.assignedStyles $tw.styleContainer.textContent;\\n\\t$tw.styleElement document.createElement(\\\style\\\);\\n\\t$tw.styleElement.innerHTML $tw.styleWidgetNode.assignedStyles;\\n\\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\\n\\t$tw.wiki.addEventListener(\\\change\\\,$tw.perf.report(\\\styleRefresh\\\,function(changes) {\\n\\t\\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\\n\\t\\t\\tvar newStyles $tw.styleContainer.textContent;\\n\\t\\t\\tif(newStyles ! $tw.styleWidgetNode.assignedStyles) {\\n\\t\\t\\t\\t$tw.styleWidgetNode.assignedStyles newStyles;\\n\\t\\t\\t\\t$tw.styleElement.innerHTML $tw.styleWidgetNode.assignedStyles;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}));\\n\\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\\n\\t$tw.perf.report(\\\mainRender\\\,function() {\\n\\t\\t$tw.pageWidgetNode $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget, recursionMarker: \\\no\\\});\\n\\t\\t$tw.pageContainer document.createElement(\\\div\\\);\\n\\t\\t$tw.utils.addClass($tw.pageContainer,\\\tc-page-container-wrapper\\\);\\n\\t\\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\\n\\t\\t$tw.pageWidgetNode.render($tw.pageContainer,null);\\n \\t\\t$tw.hooks.invokeHook(\\\th-page-refreshed\\\);\\n\\t})();\\n\\t// Remove any splash screen elements\\n\\tvar removeList document.querySelectorAll(\\\.tc-remove-when-wiki-loaded\\\);\\n\\t$tw.utils.each(removeList,function(removeItem) {\\n\\t\\tif(removeItem.parentNode) {\\n\\t\\t\\tremoveItem.parentNode.removeChild(removeItem);\\n\\t\\t}\\n\\t});\\n\\t// Prepare refresh mechanism\\n\\tvar deferredChanges Object.create(null),\\n\\t\\ttimerId;\\n\\tfunction refresh() {\\n\\t\\t// Process the refresh\\n\\t\\t$tw.hooks.invokeHook(\\\th-page-refreshing\\\);\\n\\t\\t$tw.pageWidgetNode.refresh(deferredChanges);\\n\\t\\tdeferredChanges Object.create(null);\\n\\t\\t$tw.hooks.invokeHook(\\\th-page-refreshed\\\);\\n\\t}\\n\\tvar throttledRefresh $tw.perf.report(\\\throttledRefresh\\\,refresh);\\n\\n\\t// Add the change event handler\\n\\t$tw.wiki.addEventListener(\\\change\\\,$tw.perf.report(\\\mainRefresh\\\,function(changes) {\\n\\t\\t// Check if only tiddlers that are throttled have changed\\n\\t\\tvar onlyThrottledTiddlersHaveChanged true;\\n\\t\\tfor(var title in changes) {\\n\\t\\t\\tvar tiddler $tw.wiki.getTiddler(title);\\n\\t\\t\\tif(!$tw.wiki.isVolatileTiddler(title) && (!tiddler || !(tiddler.hasField(\\\draft.of\\\) || tiddler.hasField(\\\throttle.refresh\\\)))) {\\n\\t\\t\\t\\tonlyThrottledTiddlersHaveChanged false;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Defer the change if only drafts have changed\\n\\t\\tif(timerId) {\\n\\t\\t\\tclearTimeout(timerId);\\n\\t\\t}\\n\\t\\ttimerId null;\\n\\t\\tif(onlyThrottledTiddlersHaveChanged) {\\n\\t\\t\\tvar timeout parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\\\\\\),10);\\n\\t\\t\\tif(isNaN(timeout)) {\\n\\t\\t\\t\\ttimeout THROTTLE_REFRESH_TIMEOUT;\\n\\t\\t\\t}\\n\\t\\t\\ttimerId setTimeout(throttledRefresh,timeout);\\n\\t\\t\\t$tw.utils.extend(deferredChanges,changes);\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.extend(deferredChanges,changes);\\n\\t\\t\\trefresh();\\n\\t\\t}\\n\\t}));\\n\\t// Fix up the link between the root widget and the page container\\n\\t$tw.rootWidget.domNodes $tw.pageContainer;\\n\\t$tw.rootWidget.children $tw.pageWidgetNode;\\n\\t// Run any post-render startup actions\\n\\t$tw.rootWidget.invokeActionsByTag(\\\$:/tags/StartupAction/PostRender\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/rootwidget.js\:{\title\:\$:/core/modules/startup/rootwidget.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/rootwidget.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nSetup the root widget and the core root widget handlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\rootwidget\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\startup\\\;\\nexports.before \\\story\\\;\\nexports.synchronous true;\\n\\nexports.startup function() {\\n\\t// Install the HTTP client event handler\\n\\t$tw.httpClient new $tw.utils.HttpClient();\\n\\tvar getPropertiesWithPrefix function(properties,prefix) {\\n\\t\\tvar result Object.create(null);\\n\\t\\t$tw.utils.each(properties,function(value,name) {\\n\\t\\t\\tif(name.indexOf(prefix) 0) {\\n\\t\\t\\t\\tresultname.substring(prefix.length) propertiesname;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn result;\\n\\t};\\n\\t$tw.rootWidget.addEventListener(\\\tm-http-request\\\,function(event) {\\n\\t\\tvar params event.paramObject || {};\\n\\t\\t$tw.httpClient.initiateHttpRequest({\\n\\t\\t\\twiki: event.widget.wiki,\\n\\t\\t\\turl: params.url,\\n\\t\\t\\tmethod: params.method,\\n\\t\\t\\tbody: params.body,\\n\\t\\t\\tbinary: params.binary,\\n\\t\\t\\tuseDefaultHeaders: params.useDefaultHeaders,\\n\\t\\t\\toncompletion: params.oncompletion,\\n\\t\\t\\tonprogress: params.onprogress,\\n\\t\\t\\tbindStatus: params\\\bind-status\\\,\\n\\t\\t\\tbindProgress: params\\\bind-progress\\\,\\n\\t\\t\\tvariables: getPropertiesWithPrefix(params,\\\var-\\\),\\n\\t\\t\\theaders: getPropertiesWithPrefix(params,\\\header-\\\),\\n\\t\\t\\tpasswordHeaders: getPropertiesWithPrefix(params,\\\password-header-\\\),\\n\\t\\t\\tqueryStrings: getPropertiesWithPrefix(params,\\\query-\\\),\\n\\t\\t\\tpasswordQueryStrings: getPropertiesWithPrefix(params,\\\password-query-\\\),\\n\\t\\t\\tbasicAuthUsername: params\\\basic-auth-username\\\,\\n\\t\\t\\tbasicAuthUsernameFromStore: params\\\basic-auth-username-from-store\\\,\\n\\t\\t\\tbasicAuthPassword: params\\\basic-auth-password\\\,\\n\\t\\t\\tbasicAuthPasswordFromStore: params\\\basic-auth-password-from-store\\\,\\n\\t\\t\\tbearerAuthToken: params\\\bearer-auth-token\\\,\\n\\t\\t\\tbearerAuthTokenFromStore: params\\\bearer-auth-token-from-store\\\\\n\\t\\t});\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\tm-http-cancel-all-requests\\\,function(event) {\\n\\t\\t$tw.httpClient.cancelAllHttpRequests();\\n\\t});\\n\\t// Install the modal message mechanism\\n\\t$tw.modal new $tw.utils.Modal($tw.wiki);\\n\\t$tw.rootWidget.addEventListener(\\\tm-modal\\\,function(event) {\\n\\t\\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\tm-show-switcher\\\,function(event) {\\n\\t\\t$tw.modal.display(\\\$:/core/ui/SwitcherModal\\\,{variables: event.paramObject, event: event});\\n\\t});\\n\\t// Install the notification mechanism\\n\\t$tw.notifier new $tw.utils.Notifier($tw.wiki);\\n\\t$tw.rootWidget.addEventListener(\\\tm-notify\\\,function(event) {\\n\\t\\t$tw.notifier.display(event.param,{variables: event.paramObject});\\n\\t});\\n\\t// Install the copy-to-clipboard mechanism\\n\\t$tw.rootWidget.addEventListener(\\\tm-copy-to-clipboard\\\,function(event) {\\n\\t\\t$tw.utils.copyToClipboard(event.param,{\\n\\t\\t\\tsuccessNotification: event.paramObject && event.paramObject.successNotification,\\n\\t\\t\\tfailureNotification: event.paramObject && event.paramObject.failureNotification\\n\\t\\t});\\n\\t});\\n\\t// Install the tm-focus-selector message\\n\\t$tw.rootWidget.addEventListener(\\\tm-focus-selector\\\,function(event) {\\n\\t\\tvar selector event.param || \\\\\\,\\n\\t\\t\\telement,\\n\\t\\t \\tbaseElement event.event && event.event.target ? event.event.target.ownerDocument : document;\\n\\t\\telement $tw.utils.querySelectorSafe(selector,baseElement);\\n\\t\\tif(element && element.focus) {\\n\\t\\t\\telement.focus(event.paramObject);\\n\\t\\t}\\n\\t});\\n\\t// Install the tm-rename-tiddler and tm-relink-tiddler messages\\n\\tvar makeRenameHandler function(method) {\\n\\t\\treturn function(event) {\\n\\t\\t\\tvar options {},\\n\\t\\t\\t\\tparamObject event.paramObject || {},\\n\\t\\t\\t\\tfrom paramObject.from || event.tiddlerTitle,\\n\\t\\t\\t\\tto paramObject.to;\\n\\t\\t\\toptions.dontRenameInTags (paramObject.renameInTags \\\false\\\ || paramObject.renameInTags \\\no\\\) ? true : false;\\n\\t\\t\\toptions.dontRenameInLists (paramObject.renameInLists \\\false\\\ || paramObject.renameInLists \\\no\\\) ? true : false;\\n\\t\\t\\t$tw.wikimethod(from,to,options);\\n\\t\\t};\\n\\t};\\n\\t$tw.rootWidget.addEventListener(\\\tm-rename-tiddler\\\,makeRenameHandler(\\\renameTiddler\\\));\\n\\t$tw.rootWidget.addEventListener(\\\tm-relink-tiddler\\\,makeRenameHandler(\\\relinkTiddler\\\));\\n\\t// Install the scroller\\n\\t$tw.pageScroller new $tw.utils.PageScroller();\\n\\t$tw.rootWidget.addEventListener(\\\tm-scroll\\\,function(event) {\\n\\t\\t$tw.pageScroller.handleEvent(event);\\n\\t});\\n\\tvar fullscreen $tw.utils.getFullScreenApis();\\n\\tif(fullscreen) {\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-full-screen\\\,function(event) {\\n\\t\\t\\tvar fullScreenDocument event.event ? event.event.target.ownerDocument : document;\\n\\t\\t\\tif(event.param \\\enter\\\) {\\n\\t\\t\\t\\tfullScreenDocument.documentElementfullscreen._requestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\\n\\t\\t\\t} else if(event.param \\\exit\\\) {\\n\\t\\t\\t\\tfullScreenDocumentfullscreen._exitFullscreen();\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(fullScreenDocumentfullscreen._fullscreenElement) {\\n\\t\\t\\t\\t\\tfullScreenDocumentfullscreen._exitFullscreen();\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tfullScreenDocument.documentElementfullscreen._requestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup.js\:{\title\:\$:/core/modules/startup.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nMiscellaneous startup logic for both the client and server.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\startup\\\;\\nexports.after \\\load-modules\\\;\\nexports.synchronous true;\\n\\n// Set to `true` to enable performance instrumentation\\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE \\\$:/config/Performance/Instrumentation\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nexports.startup function() {\\n\\t// Minimal browser detection\\n\\tif($tw.browser) {\\n\\t\\t$tw.browser.isIE (/msie|trident/i.test(navigator.userAgent));\\n\\t\\t$tw.browser.isFirefox !!document.mozFullScreenEnabled;\\n\\t\\t// 2023-07-21 Edge returns UA below. So we use \\\isChromeLike\\\\\n\\t\\t//mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/114.0.0.0 safari/537.36 edg/114.0.1823.82\\n\\t\\t$tw.browser.isChromeLike navigator.userAgent.toLowerCase().indexOf(\\\chrome\\\) > -1;\\n\\t\\t$tw.browser.hasTouch !!window.matchMedia && window.matchMedia(\\\(pointer: coarse)\\\).matches;\\n\\t\\t$tw.browser.isMobileChrome $tw.browser.isChromeLike && $tw.browser.hasTouch;\\n\\t}\\n\\t// Platform detection\\n\\t$tw.platform {};\\n\\tif($tw.browser) {\\n\\t\\t$tw.platform.isMac /Mac/.test(navigator.platform);\\n\\t\\t$tw.platform.isWindows /win/i.test(navigator.platform);\\n\\t\\t$tw.platform.isLinux /Linux/i.test(navigator.platform);\\n\\t} else {\\n\\t\\tswitch(require(\\\os\\\).platform()) {\\n\\t\\t\\tcase \\\darwin\\\:\\n\\t\\t\\t\\t$tw.platform.isMac true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\win32\\\:\\n\\t\\t\\t\\t$tw.platform.isWindows true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\freebsd\\\:\\n\\t\\t\\t\\t$tw.platform.isLinux true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\linux\\\:\\n\\t\\t\\t\\t$tw.platform.isLinux true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n\\t// Initialise version\\n\\t$tw.version $tw.utils.extractVersionInfo();\\n\\t// Set up the performance framework\\n\\t$tw.perf new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\\\no\\\) \\\yes\\\);\\n\\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\\n\\t$tw.rootWidget new widget.widget({\\n\\t\\ttype: \\\widget\\\,\\n\\t\\tchildren: \\n\\t},{\\n\\t\\twiki: $tw.wiki,\\n\\t\\tdocument: $tw.browser ? document : $tw.fakeDocument\\n\\t});\\n\\t// Kick off the language manager and switcher\\n\\t$tw.language new $tw.Language();\\n\\t$tw.languageSwitcher new $tw.PluginSwitcher({\\n\\t\\twiki: $tw.wiki,\\n\\t\\tpluginType: \\\language\\\,\\n\\t\\tcontrollerTitle: \\\$:/language\\\,\\n\\t\\tdefaultPlugins: \\n\\t\\t\\t\\\$:/languages/en-GB\\\\\n\\t\\t,\\n\\t\\tonSwitch: function(plugins) {\\n\\t\\t\\tif($tw.browser) {\\n\\t\\t\\t\\tvar pluginTiddler $tw.wiki.getTiddler(plugins0);\\n\\t\\t\\t\\tif(pluginTiddler) {\\n\\t\\t\\t\\t\\tdocument.documentElement.setAttribute(\\\lang\\\,pluginTiddler.getFieldString(\\\name\\\));\\n\\t\\t\\t\\t\\tdocument.documentElement.setAttribute(\\\dir\\\,pluginTiddler.getFieldString(\\\text-direction\\\) || \\\auto\\\);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tdocument.documentElement.setAttribute(\\\lang\\\,\\\en-GB\\\);\\n\\t\\t\\t\\t\\tdocument.documentElement.removeAttribute(\\\dir\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\t// Kick off the theme manager\\n\\t$tw.themeManager new $tw.PluginSwitcher({\\n\\t\\twiki: $tw.wiki,\\n\\t\\tpluginType: \\\theme\\\,\\n\\t\\tcontrollerTitle: \\\$:/theme\\\,\\n\\t\\tdefaultPlugins: \\n\\t\\t\\t\\\$:/themes/tiddlywiki/snowwhite\\\,\\n\\t\\t\\t\\\$:/themes/tiddlywiki/vanilla\\\\\n\\t\\t\\n\\t});\\n\\t// Kick off the keyboard manager\\n\\t$tw.keyboardManager new $tw.KeyboardManager();\\n\\t// Listen for shortcuts\\n\\tif($tw.browser) {\\n\\t\\t$tw.utils.addEventListeners(document,{\\n\\t\\t\\tname: \\\keydown\\\,\\n\\t\\t\\thandlerObject: $tw.keyboardManager,\\n\\t\\t\\thandlerMethod: \\\handleKeydownEvent\\\\\n\\t\\t});\\n\\t}\\n\\t// Execute any startup actions\\n\\t$tw.rootWidget.invokeActionsByTag(\\\$:/tags/StartupAction\\\);\\n\\tif($tw.browser) {\\n\\t\\t$tw.rootWidget.invokeActionsByTag(\\\$:/tags/StartupAction/Browser\\\);\\n\\t}\\n\\tif($tw.node) {\\n\\t\\t$tw.rootWidget.invokeActionsByTag(\\\$:/tags/StartupAction/Node\\\);\\n\\t}\\n\\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\\n\\t$tw.wiki.clearTiddlerEventQueue();\\n\\t// Find a working syncadaptor\\n\\t$tw.syncadaptor undefined;\\n\\t$tw.modules.forEachModuleOfType(\\\syncadaptor\\\,function(title,module) {\\n\\t\\tif(!$tw.syncadaptor && module.adaptorClass) {\\n\\t\\t\\t$tw.syncadaptor new module.adaptorClass({wiki: $tw.wiki});\\n\\t\\t}\\n\\t});\\n\\t// Set up the syncer object if weve got a syncadaptor\\n\\tif($tw.syncadaptor) {\\n\\t\\t$tw.syncer new $tw.Syncer({\\n\\t\\t\\twiki: $tw.wiki,\\n\\t\\t\\tsyncadaptor: $tw.syncadaptor,\\n\\t\\t\\tlogging: $tw.wiki.getTiddlerText($:/config/SyncLogging, \\\yes\\\) \\\yes\\\\\n\\t\\t});\\n\\t}\\n\\t// Setup the saver handler\\n\\t$tw.saverHandler new $tw.SaverHandler({\\n\\t\\twiki: $tw.wiki,\\n\\t\\tdirtyTracking: !$tw.syncadaptor,\\n\\t\\tpreloadDirty: $tw.boot.preloadDirty || \\n\\t});\\n\\t// Host-specific startup\\n\\tif($tw.browser) {\\n\\t\\t// Install the popup manager\\n\\t\\t$tw.popup new $tw.utils.Popup();\\n\\t\\t// Install the animator\\n\\t\\t$tw.anim new $tw.utils.Animator();\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/story.js\:{\title\:\$:/core/modules/startup/story.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/story.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nLoad core modules\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\story\\\;\\nexports.after \\\startup\\\;\\nexports.synchronous true;\\n\\n// Default story and history lists\\nvar DEFAULT_STORY_TITLE \\\$:/StoryList\\\;\\nvar DEFAULT_HISTORY_TITLE \\\$:/HistoryList\\\;\\n\\n// Default tiddlers\\nvar DEFAULT_TIDDLERS_TITLE \\\$:/DefaultTiddlers\\\;\\n\\n// Config\\nvar CONFIG_UPDATE_ADDRESS_BAR \\\$:/config/Navigation/UpdateAddressBar\\\; // Can be \\\no\\\, \\\permalink\\\, \\\permaview\\\\\nvar CONFIG_UPDATE_HISTORY \\\$:/config/Navigation/UpdateHistory\\\; // Can be \\\yes\\\ or \\\no\\\\\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD \\\$:/config/Navigation/Permalinkview/CopyToClipboard\\\; // Can be \\\yes\\\ (default) or \\\no\\\\\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR \\\$:/config/Navigation/Permalinkview/UpdateAddressBar\\\; // Can be \\\yes\\\ (default) or \\\no\\\\\n\\n\\n// Links to help, if there is no param\\nvar HELP_OPEN_EXTERNAL_WINDOW \\\http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\\\;\\n\\nexports.startup function() {\\n\\t// Open startup tiddlers\\n\\topenStartupTiddlers({\\n\\t\\tdisableHistory: $tw.boot.disableStartupNavigation\\n\\t});\\n\\tif($tw.browser) {\\n\\t\\t// Set up location hash update\\n\\t\\t$tw.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\t\\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\\n\\t\\t\\t\\tupdateLocationHash({\\n\\t\\t\\t\\t\\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\\\permaview\\\).trim(),\\n\\t\\t\\t\\t\\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\\\no\\\).trim()\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Listen for changes to the browser location hash\\n\\t\\twindow.addEventListener(\\\hashchange\\\,function() {\\n\\t\\t\\tvar hash $tw.utils.getLocationHash();\\n\\t\\t\\tif(hash ! $tw.locationHash) {\\n\\t\\t\\t\\t$tw.locationHash hash;\\n\\t\\t\\t\\tif(hash ! \\\#\\\) {\\n\\t\\t\\t\\t\\topenStartupTiddlers({defaultToCurrentStory: true});\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t},false);\\n\\t\\t// Listen for the tm-browser-refresh message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-browser-refresh\\\,function(event) {\\n\\t\\t\\twindow.location.reload(true);\\n\\t\\t});\\n\\t\\t// Listen for tm-open-external-window message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-open-external-window\\\,function(event) {\\n\\t\\t\\tvar paramObject event.paramObject || {},\\n\\t\\t\\t\\tstrUrl event.param || HELP_OPEN_EXTERNAL_WINDOW,\\n\\t\\t\\t\\tstrWindowName paramObject.windowName,\\n\\t\\t\\t\\tstrWindowFeatures paramObject.windowFeatures;\\n\\t\\t\\twindow.open(strUrl, strWindowName, strWindowFeatures);\\n\\t\\t});\\n\\t\\t// Listen for the tm-print message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-print\\\,function(event) {\\n\\t\\t\\t(event.event.view || window).print();\\n\\t\\t});\\n\\t\\t// Listen for the tm-home message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-home\\\,function(event) {\\n\\t\\t\\twindow.location.hash \\\\\\;\\n\\t\\t\\tvar storyFilter $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\\n\\t\\t\\t\\tstoryList $tw.wiki.filterTiddlers(storyFilter);\\n\\t\\t\\t//invoke any hooks that might change the default story list\\n\\t\\t\\tstoryList $tw.hooks.invokeHook(\\\th-opening-default-tiddlers-list\\\,storyList);\\n\\t\\t\\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \\\\\\, list: storyList},$tw.wiki.getModificationFields());\\n\\t\\t\\tif(storyList0) {\\n\\t\\t\\t\\t$tw.wiki.addToHistory(storyList0);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t// Listen for the tm-permalink message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-permalink\\\,function(event) {\\n\\t\\t\\tupdateLocationHash({\\n\\t\\t\\t\\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\\\yes\\\).trim() \\\yes\\\ ? \\\permalink\\\ : \\\none\\\,\\n\\t\\t\\t\\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\\\no\\\).trim(),\\n\\t\\t\\t\\ttargetTiddler: event.param || event.tiddlerTitle,\\n\\t\\t\\t\\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\\\yes\\\).trim() \\\yes\\\ ? \\\permalink\\\ : \\\none\\\,\\n\\t\\t\\t\\tsuccessNotification: event.paramObject && event.paramObject.successNotification,\\n\\t\\t\\t\\tfailureNotification: event.paramObject && event.paramObject.failureNotification\\n\\t\\t\\t});\\n\\t\\t});\\n\\t\\t// Listen for the tm-permaview message\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-permaview\\\,function(event) {\\n\\t\\t\\tupdateLocationHash({\\n\\t\\t\\t\\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\\\yes\\\).trim() \\\yes\\\ ? \\\permaview\\\ : \\\none\\\,\\n\\t\\t\\t\\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\\\no\\\).trim(),\\n\\t\\t\\t\\ttargetTiddler: event.param || event.tiddlerTitle,\\n\\t\\t\\t\\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\\\yes\\\).trim() \\\yes\\\ ? \\\permaview\\\ : \\\none\\\,\\n\\t\\t\\t\\tsuccessNotification: event.paramObject && event.paramObject.successNotification,\\n\\t\\t\\t\\tfailureNotification: event.paramObject && event.paramObject.failureNotification\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nProcess the location hash to open the specified tiddlers. Options:\\ndisableHistory: if true $:/History is NOT updated\\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\\n*/\\nfunction openStartupTiddlers(options) {\\n\\toptions options || {};\\n\\t// Work out the target tiddler and the story filter. \\\null\\\ means \\\unspecified\\\\\n\\tvar target null,\\n\\t\\tstoryFilter null;\\n\\tif($tw.locationHash.length > 1) {\\n\\t\\tvar hash $tw.locationHash.substr(1),\\n\\t\\t\\tsplit hash.indexOf(\\\:\\\);\\n\\t\\tif(split -1) {\\n\\t\\t\\ttarget $tw.utils.decodeURIComponentSafe(hash.trim());\\n\\t\\t} else {\\n\\t\\t\\ttarget $tw.utils.decodeURIComponentSafe(hash.substr(0,split).trim());\\n\\t\\t\\tstoryFilter $tw.utils.decodeURIComponentSafe(hash.substr(split + 1).trim());\\n\\t\\t}\\n\\t}\\n\\t// If the story wasnt specified use the current tiddlers or a blank story\\n\\tif(storyFilter null) {\\n\\t\\tif(options.defaultToCurrentStory) {\\n\\t\\t\\tvar currStoryList $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\\n\\t\\t\\tstoryFilter $tw.utils.stringifyList(currStoryList);\\n\\t\\t} else {\\n\\t\\t\\tif(target && target ! \\\\\\) {\\n\\t\\t\\t\\tstoryFilter \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tstoryFilter $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Process the story filter to get the story list\\n\\tvar storyList $tw.wiki.filterTiddlers(storyFilter);\\n\\t// Invoke any hooks that want to change the default story list\\n\\tstoryList $tw.hooks.invokeHook(\\\th-opening-default-tiddlers-list\\\,storyList);\\n\\t// If the target tiddler isnt included then splice it in at the top\\n\\tif(target && storyList.indexOf(target) -1) {\\n\\t\\tstoryList.unshift(target);\\n\\t}\\n\\t// Save the story list\\n\\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \\\\\\, list: storyList},$tw.wiki.getModificationFields());\\n\\t// Update history\\n\\tvar story new $tw.Story({\\n\\t\\twiki: $tw.wiki,\\n\\t\\tstoryTitle: DEFAULT_STORY_TITLE,\\n\\t\\thistoryTitle: DEFAULT_HISTORY_TITLE\\n\\t});\\n\\tif(!options.disableHistory) {\\n\\t\\t// If a target tiddler was specified add it to the history stack\\n\\t\\tif(target && target ! \\\\\\) {\\n\\t\\t\\t// The target tiddler doesnt need double square brackets, but well silently remove them if theyre present\\n\\t\\t\\tif(target.indexOf(\\\\\\) 0 && target.substr(-2) \\\\\\) {\\n\\t\\t\\t\\ttarget target.substr(2,target.length - 4);\\n\\t\\t\\t}\\n\\t\\t\\tstory.addToHistory(target);\\n\\t\\t} else if(storyList.length > 0) {\\n\\t\\t\\tstory.addToHistory(storyList0);\\n\\t\\t}\\n\\t}\\n}\\n\\n/*\\noptions: See below\\noptions.updateAddressBar: \\\permalink\\\, \\\permaview\\\ or \\\no\\\ (defaults to \\\permaview\\\)\\noptions.updateHistory: \\\yes\\\ or \\\no\\\ (defaults to \\\no\\\)\\noptions.copyToClipboard: \\\permalink\\\, \\\permaview\\\ or \\\no\\\ (defaults to \\\no\\\)\\noptions.targetTiddler: optional title of target tiddler for permalink\\noptions.successNotification: optional title of tiddler to use as the notification in case of success\\noptions.failureNotification: optional title of tiddler to use as the notification in case of failure\\n*/\\nfunction updateLocationHash(options) {\\n\\t// Get the story and the history stack\\n\\tvar storyList $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\\n\\t\\thistoryList $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,),\\n\\t\\ttargetTiddler \\\\\\;\\n\\tif(options.targetTiddler) {\\n\\t\\ttargetTiddler options.targetTiddler;\\n\\t} else {\\n\\t\\t// The target tiddler is the one at the top of the stack\\n\\t\\tif(historyList.length > 0) {\\n\\t\\t\\ttargetTiddler historyListhistoryList.length-1.title;\\n\\t\\t}\\n\\t\\t// Blank the target tiddler if it isnt present in the story\\n\\t\\tif(storyList.indexOf(targetTiddler) -1) {\\n\\t\\t\\ttargetTiddler \\\\\\;\\n\\t\\t}\\n\\t}\\n\\t// Assemble the location hash\\n\\tswitch(options.updateAddressBar) {\\n\\t\\tcase \\\permalink\\\:\\n\\t\\t\\t$tw.locationHash \\\#\\\ + encodeURIComponent(targetTiddler);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\permaview\\\:\\n\\t\\t\\t$tw.locationHash \\\#\\\ + encodeURIComponent(targetTiddler) + \\\:\\\ + encodeURIComponent($tw.utils.stringifyList(storyList));\\n\\t\\t\\tbreak;\\n\\t}\\n\\t// Copy URL to the clipboard\\n\\tvar url \\\\\\;\\n\\tswitch(options.copyToClipboard) {\\n\\t\\tcase \\\permalink\\\:\\n\\t\\t\\turl $tw.utils.getLocationPath() + \\\#\\\ + encodeURIComponent(targetTiddler);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\permaview\\\:\\n\\t\\t\\turl $tw.utils.getLocationPath() + \\\#\\\ + encodeURIComponent(targetTiddler) + \\\:\\\ + encodeURIComponent($tw.utils.stringifyList(storyList));\\n\\t\\t\\tbreak;\\n\\t}\\n\\tif(url) {\\n\\t\\t$tw.utils.copyToClipboard(url,{successNotification: options.successNotification, failureNotification: options.failureNotification});\\n\\t}\\n\\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\\n\\tif($tw.utils.getLocationHash() ! $tw.locationHash) {\\n\\t\\tif(options.updateHistory \\\yes\\\) {\\n\\t\\t\\t// Assign the location hash so that history is updated\\n\\t\\t\\twindow.location.hash $tw.locationHash;\\n\\t\\t} else {\\n\\t\\t\\t// We use replace so that browser history isnt affected\\n\\t\\t\\twindow.location.replace(window.location.toString().split(\\\#\\\)0 + $tw.locationHash);\\n\\t\\t}\\n\\t}\\n}\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/startup/windows.js\:{\title\:\$:/core/modules/startup/windows.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/startup/windows.js\\ntype: application/javascript\\nmodule-type: startup\\n\\nSetup root widget handlers for the messages concerned with opening external browser windows\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Export name and synchronous status\\nexports.name \\\windows\\\;\\nexports.platforms \\\browser\\\;\\nexports.after \\\startup\\\;\\nexports.synchronous true;\\n\\n// Global to keep track of open windows (hashmap by title)\\n$tw.windows {};\\n// Default template to use for new windows\\nvar DEFAULT_WINDOW_TEMPLATE \\\$:/core/templates/single.tiddler.window\\\;\\n\\nexports.startup function() {\\n\\t// Handle open window message\\n\\t$tw.rootWidget.addEventListener(\\\tm-open-window\\\,function(event) {\\n\\t\\t// Get the parameters\\n\\t\\tvar refreshHandler,\\n\\t\\t\\ttitle event.param || event.tiddlerTitle,\\n\\t\\t\\tparamObject event.paramObject || {},\\n\\t\\t\\twindowTitle paramObject.windowTitle || title,\\n\\t\\t\\twindowID paramObject.windowID || title,\\n\\t\\t\\ttemplate paramObject.template || DEFAULT_WINDOW_TEMPLATE,\\n\\t\\t\\twidth paramObject.width || \\\700\\\,\\n\\t\\t\\theight paramObject.height || \\\600\\\,\\n\\t\\t\\ttop paramObject.top,\\n\\t\\t\\tleft paramObject.left,\\n\\t\\t\\tvariables $tw.utils.extend({},paramObject,{currentTiddler: title, \\\tv-window-id\\\: windowID});\\n\\t\\t// Open the window\\n\\t\\tvar srcWindow,\\n\\t\\t\\tsrcDocument;\\n\\t\\t// In case that popup blockers deny opening a new window\\n\\t\\ttry {\\n\\t\\t\\tsrcWindow window.open(\\\\\\,\\\external-\\\ + windowID,\\\scrollbars,width\\\ + width + \\\,height\\\ + height + (top ? \\\,top\\\ + top : \\\\\\ ) + (left ? \\\,left\\\ + left : \\\\\\ )),\\n\\t\\t\\tsrcDocument srcWindow.document;\\n\\t\\t}\\n\\t\\tcatch(e) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t$tw.windowswindowID srcWindow;\\n\\t\\t// Check for reopening the same window\\n\\t\\tif(srcWindow.haveInitialisedWindow) {\\n\\t\\t\\tsrcWindow.focus();\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Initialise the document\\n\\t\\tsrcDocument.write(\\\\u003C!DOCTYPE html>\u003Chead>\u003C/head>\u003Cbody classtc-body tc-single-tiddler-window>\u003C/body>\u003C/html>\\\);\\n\\t\\tsrcDocument.close();\\n\\t\\tsrcDocument.title windowTitle;\\n\\t\\tsrcWindow.addEventListener(\\\beforeunload\\\,function(event) {\\n\\t\\t\\tdelete $tw.windowswindowID;\\n\\t\\t\\t$tw.wiki.removeEventListener(\\\change\\\,refreshHandler);\\n\\t\\t},false);\\n\\t\\t// Set up the styles\\n\\t\\tvar styleWidgetNode $tw.wiki.makeTranscludeWidget(\\\$:/core/ui/PageStylesheet\\\,{\\n\\t\\t\\t\\tdocument: $tw.fakeDocument,\\n\\t\\t\\t\\tvariables: variables,\\n\\t\\t\\t\\timportPageMacros: true}),\\n\\t\\t\\tstyleContainer $tw.fakeDocument.createElement(\\\style\\\);\\n\\t\\tstyleWidgetNode.render(styleContainer,null);\\n\\t\\tvar styleElement srcDocument.createElement(\\\style\\\);\\n\\t\\tstyleElement.innerHTML styleContainer.textContent;\\n\\t\\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\\n\\t\\t// Render the text of the tiddler\\n\\t\\tvar parser $tw.wiki.parseTiddler(template),\\n\\t\\t\\twidgetNode $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\\n\\t\\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\\n\\t\\t// Function to handle refreshes\\n\\t\\trefreshHandler function(changes) {\\n\\t\\t\\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\\n\\t\\t\\t\\tstyleElement.innerHTML styleContainer.textContent;\\n\\t\\t\\t}\\n\\t\\t\\twidgetNode.refresh(changes);\\n\\t\\t};\\n\\t\\t$tw.wiki.addEventListener(\\\change\\\,refreshHandler);\\n\\t\\t// Listen for keyboard shortcuts\\n\\t\\t$tw.utils.addEventListeners(srcDocument,{\\n\\t\\t\\tname: \\\keydown\\\,\\n\\t\\t\\thandlerObject: $tw.keyboardManager,\\n\\t\\t\\thandlerMethod: \\\handleKeydownEvent\\\\\n\\t\\t});\\n\\t\\tsrcWindow.document.documentElement.addEventListener(\\\click\\\,$tw.popup,true);\\n\\t\\tsrcWindow.haveInitialisedWindow true;\\n\\t});\\n\\t$tw.rootWidget.addEventListener(\\\tm-close-window\\\,function(event) {\\n\\t\\tvar windowID event.param,\\n\\t\\t\\twin $tw.windowswindowID;\\n\\t\\t\\tif(win) {\\n\\t\\t\\t\\twin.close();\\n\\t\\t\\t}\\n\\t});\\n\\tvar closeAllWindows function() {\\n\\t\\t$tw.utils.each($tw.windows,function(win) {\\n\\t\\t\\twin.close();\\n\\t\\t});\\n\\t}\\n\\t$tw.rootWidget.addEventListener(\\\tm-close-all-windows\\\,closeAllWindows);\\n\\t// Close open windows when unloading main window\\n\\t$tw.addUnloadTask(closeAllWindows);\\n};\\n\,\type\:\application/javascript\,\module-type\:\startup\},\$:/core/modules/story.js\:{\title\:\$:/core/modules/story.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/story.js\\ntype: application/javascript\\nmodule-type: global\\n\\nLightweight object for managing interactions with the story and history lists.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nConstruct Story object with options:\\nwiki: reference to wiki object to use to resolve tiddler titles\\nstoryTitle: title of story list tiddler\\nhistoryTitle: title of history list tiddler\\n*/\\nfunction Story(options) {\\n\\toptions options || {};\\n\\tthis.wiki options.wiki || $tw.wiki;\\n\\tthis.storyTitle options.storyTitle || \\\$:/StoryList\\\;\\n\\tthis.historyTitle options.historyTitle || \\\$:/HistoryList\\\;\\n};\\n\\nStory.prototype.navigateTiddler function(navigateTo,navigateFromTitle,navigateFromClientRect) {\\n\\tthis.addToStory(navigateTo,navigateFromTitle);\\n\\tthis.addToHistory(navigateTo,navigateFromClientRect);\\n};\\n\\nStory.prototype.getStoryList function() {\\n\\treturn this.wiki.getTiddlerList(this.storyTitle) || ;\\n};\\n\\nStory.prototype.addToStory function(navigateTo,navigateFromTitle,options) {\\n\\toptions options || {};\\n\\tvar storyList this.getStoryList();\\n\\t// See if the tiddler is already there\\n\\tvar slot storyList.indexOf(navigateTo);\\n\\t// Quit if it already exists in the story river\\n\\tif(slot > 0) {\\n\\t\\treturn;\\n\\t}\\n\\t// First we try to find the position of the story element we navigated from\\n\\tvar fromIndex storyList.indexOf(navigateFromTitle);\\n\\tif(fromIndex > 0) {\\n\\t\\t// The tiddler is added from inside the river\\n\\t\\t// Determine where to insert the tiddler; Fallback is \\\below\\\\\n\\t\\tswitch(options.openLinkFromInsideRiver) {\\n\\t\\t\\tcase \\\top\\\:\\n\\t\\t\\t\\tslot 0;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\bottom\\\:\\n\\t\\t\\t\\tslot storyList.length;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\above\\\:\\n\\t\\t\\t\\tslot fromIndex;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase \\\below\\\: // Intentional fall-through\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\tslot fromIndex + 1;\\n\\t\\t\\t\\tbreak;\\n\\t\\t}\\n\\t} else {\\n\\t\\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \\\top\\\\\n\\t\\tif(options.openLinkFromOutsideRiver \\\bottom\\\) {\\n\\t\\t\\t// Insert at bottom\\n\\t\\t\\tslot storyList.length;\\n\\t\\t} else {\\n\\t\\t\\t// Insert at top\\n\\t\\t\\tslot 0;\\n\\t\\t}\\n\\t}\\n\\t// Add the tiddler\\n\\tstoryList.splice(slot,0,navigateTo);\\n\\t// Save the story\\n\\tthis.saveStoryList(storyList);\\n};\\n\\nStory.prototype.saveStoryList function(storyList) {\\n\\tvar storyTiddler this.wiki.getTiddler(this.storyTitle);\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(\\n\\t\\tthis.wiki.getCreationFields(),\\n\\t\\t{title: this.storyTitle},\\n\\t\\tstoryTiddler,\\n\\t\\t{list: storyList},\\n\\t\\tthis.wiki.getModificationFields()\\n\\t));\\n};\\n\\nStory.prototype.addToHistory function(navigateTo,navigateFromClientRect) {\\n\\tvar titles $tw.utils.isArray(navigateTo) ? navigateTo : navigateTo;\\n\\t// Add a new record to the top of the history stack\\n\\tvar historyList this.wiki.getTiddlerData(this.historyTitle,);\\n\\t$tw.utils.each(titles,function(title) {\\n\\t\\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\\n\\t});\\n\\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\\\current-tiddler\\\: titlestitles.length-1});\\n};\\n\\nStory.prototype.storyCloseTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storyCloseAllTiddlers function() {\\n// TBD\\n};\\n\\nStory.prototype.storyCloseOtherTiddlers function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storyEditTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storyDeleteTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storySaveTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storyCancelTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nStory.prototype.storyNewTiddler function(targetTitle) {\\n// TBD\\n};\\n\\nexports.Story Story;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/storyviews/classic.js\:{\title\:\$:/core/modules/storyviews/classic.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/storyviews/classic.js\\ntype: application/javascript\\nmodule-type: storyview\\n\\nViews the story as a linear sequence\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar easing \\\cubic-bezier(0.645, 0.045, 0.355, 1)\\\; // From http://easings.net/#easeInOutCubic\\n\\nvar ClassicStoryView function(listWidget) {\\n\\tthis.listWidget listWidget;\\n};\\n\\nClassicStoryView.prototype.navigateTo function(historyInfo) {\\n\\tvar duration $tw.utils.getAnimationDuration()\\n\\tvar listElementIndex this.listWidget.findListItem(0,historyInfo.title);\\n\\tif(listElementIndex undefined) {\\n\\t\\treturn;\\n\\t}\\n\\tvar listItemWidget this.listWidget.childrenlistElementIndex,\\n\\t\\ttargetElement listItemWidget.findFirstDomNode();\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\treturn;\\n\\t}\\n\\t// Scroll the node into view\\n\\tthis.listWidget.dispatchEvent({type: \\\tm-scroll\\\, target: targetElement});\\n};\\n\\nClassicStoryView.prototype.insert function(widget) {\\n\\tvar duration $tw.utils.getAnimationDuration();\\n\\tif(duration) {\\n\\t\\tvar targetElement widget.findFirstDomNode();\\n\\t\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\t\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Get the current height of the tiddler\\n\\t\\tvar computedStyle window.getComputedStyle(targetElement),\\n\\t\\t\\tcurrMarginBottom parseInt(computedStyle.marginBottom,10),\\n\\t\\t\\tcurrMarginTop parseInt(computedStyle.marginTop,10),\\n\\t\\t\\tcurrHeight targetElement.offsetHeight + currMarginTop;\\n\\t\\t// Reset the margin once the transition is over\\n\\t\\tsetTimeout(function() {\\n\\t\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t\\t{marginBottom: \\\\\\}\\n\\t\\t\\t);\\n\\t\\t},duration);\\n\\t\\t// Set up the initial position of the element\\n\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t{marginBottom: (-currHeight) + \\\px\\\},\\n\\t\\t\\t{opacity: \\\0.0\\\}\\n\\t\\t);\\n\\t\\t$tw.utils.forceLayout(targetElement);\\n\\t\\t// Transition to the final position\\n\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t{transition: \\\opacity \\\ + duration + \\\ms \\\ + easing + \\\, \\\ +\\n\\t\\t\\t\\t\\t\\t\\\margin-bottom \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t\\t{marginBottom: currMarginBottom + \\\px\\\},\\n\\t\\t\\t{opacity: \\\1.0\\\}\\n\\t);\\n\\t}\\n};\\n\\nClassicStoryView.prototype.remove function(widget) {\\n\\tvar duration $tw.utils.getAnimationDuration();\\n\\tif(duration) {\\n\\t\\tvar targetElement widget.findFirstDomNode(),\\n\\t\\t\\tremoveElement function() {\\n\\t\\t\\t\\twidget.removeChildDomNodes();\\n\\t\\t\\t};\\n\\t\\t// Blur the focus if it is within the descendents of the node we are removing\\n\\t\\tif($tw.utils.domContains(targetElement,targetElement.ownerDocument.activeElement)) {\\n\\t\\t\\ttargetElement.ownerDocument.activeElement.blur();\\n\\t\\t}\\n\\t\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\t\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\t\\tremoveElement();\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Get the current height of the tiddler\\n\\t\\tvar currWidth targetElement.offsetWidth,\\n\\t\\t\\tcomputedStyle window.getComputedStyle(targetElement),\\n\\t\\t\\tcurrMarginBottom parseInt(computedStyle.marginBottom,10),\\n\\t\\t\\tcurrMarginTop parseInt(computedStyle.marginTop,10),\\n\\t\\t\\tcurrHeight targetElement.offsetHeight + currMarginTop;\\n\\t\\t// Remove the dom nodes of the widget at the end of the transition\\n\\t\\tsetTimeout(removeElement,duration);\\n\\t\\t// Animate the closure\\n\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t{transform: \\\translateX(0px)\\\},\\n\\t\\t\\t{marginBottom: currMarginBottom + \\\px\\\},\\n\\t\\t\\t{opacity: \\\1.0\\\}\\n\\t\\t);\\n\\t\\t$tw.utils.forceLayout(targetElement);\\n\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms \\\ + easing + \\\, \\\ +\\n\\t\\t\\t\\t\\t\\t\\\opacity \\\ + duration + \\\ms \\\ + easing + \\\, \\\ +\\n\\t\\t\\t\\t\\t\\t\\\margin-bottom \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t\\t{transform: \\\translateX(-\\\ + currWidth + \\\px)\\\},\\n\\t\\t\\t{marginBottom: (-currHeight) + \\\px\\\},\\n\\t\\t\\t{opacity: \\\0.0\\\}\\n\\t\\t);\\n\\t} else {\\n\\t\\twidget.removeChildDomNodes();\\n\\t}\\n};\\n\\nexports.classic ClassicStoryView;\\n\,\type\:\application/javascript\,\module-type\:\storyview\},\$:/core/modules/storyviews/pop.js\:{\title\:\$:/core/modules/storyviews/pop.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/storyviews/pop.js\\ntype: application/javascript\\nmodule-type: storyview\\n\\nAnimates list insertions and removals\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar PopStoryView function(listWidget) {\\n\\tthis.listWidget listWidget;\\n};\\n\\nPopStoryView.prototype.navigateTo function(historyInfo) {\\n\\tvar listElementIndex this.listWidget.findListItem(0,historyInfo.title);\\n\\tif(listElementIndex undefined) {\\n\\t\\treturn;\\n\\t}\\n\\tvar listItemWidget this.listWidget.childrenlistElementIndex,\\n\\t\\ttargetElement listItemWidget.findFirstDomNode();\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\treturn;\\n\\t}\\n\\t// Scroll the node into view\\n\\tthis.listWidget.dispatchEvent({type: \\\tm-scroll\\\, target: targetElement});\\n};\\n\\nPopStoryView.prototype.insert function(widget) {\\n\\tvar targetElement widget.findFirstDomNode(),\\n\\t\\tduration $tw.utils.getAnimationDuration();\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\treturn;\\n\\t}\\n\\t// Reset once the transition is over\\n\\tsetTimeout(function() {\\n\\t\\t$tw.utils.setStyle(targetElement,\\n\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t{transform: \\\none\\\}\\n\\t\\t);\\n\\t\\t$tw.utils.setStyle(widget.document.body,\\n\\t\\t\\t{\\\overflow-x\\\: \\\\\\}\\n\\t\\t);\\n\\t},duration);\\n\\t// Prevent the page from overscrolling due to the zoom factor\\n\\t$tw.utils.setStyle(widget.document.body,\\n\\t\\t{\\\overflow-x\\\: \\\hidden\\\}\\n\\t);\\n\\t// Set up the initial position of the element\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transition: \\\none\\\},\\n\\t\\t{transform: \\\scale(2)\\\},\\n\\t\\t{opacity: \\\0.0\\\}\\n\\t);\\n\\t$tw.utils.forceLayout(targetElement);\\n\\t// Transition to the final position\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\opacity \\\ + duration + \\\ms ease-in-out\\\},\\n\\t\\t{transform: \\\scale(1)\\\},\\n\\t\\t{opacity: \\\1.0\\\}\\n\\t);\\n};\\n\\nPopStoryView.prototype.remove function(widget) {\\n\\tvar targetElement widget.findFirstDomNode(),\\n\\t\\tduration $tw.utils.getAnimationDuration(),\\n\\t\\tremoveElement function() {\\n\\t\\t\\tif(targetElement && targetElement.parentNode) {\\n\\t\\t\\t\\twidget.removeChildDomNodes();\\n\\t\\t\\t}\\n\\t\\t};\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\tremoveElement();\\n\\t\\treturn;\\n\\t}\\n\\t// Remove the element at the end of the transition\\n\\tsetTimeout(removeElement,duration);\\n\\t// Animate the closure\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transition: \\\none\\\},\\n\\t\\t{transform: \\\scale(1)\\\},\\n\\t\\t{opacity: \\\1.0\\\}\\n\\t);\\n\\t$tw.utils.forceLayout(targetElement);\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\opacity \\\ + duration + \\\ms ease-in-out\\\},\\n\\t\\t{transform: \\\scale(0.1)\\\},\\n\\t\\t{opacity: \\\0.0\\\}\\n\\t);\\n};\\n\\nexports.pop PopStoryView;\\n\,\type\:\application/javascript\,\module-type\:\storyview\},\$:/core/modules/storyviews/zoomin.js\:{\title\:\$:/core/modules/storyviews/zoomin.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/storyviews/zoomin.js\\ntype: application/javascript\\nmodule-type: storyview\\n\\nZooms between individual tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar easing \\\cubic-bezier(0.645, 0.045, 0.355, 1)\\\; // From http://easings.net/#easeInOutCubic\\n\\nvar ZoominListView function(listWidget) {\\n\\tvar self this;\\n\\tthis.listWidget listWidget;\\n\\tthis.textNodeLogger new $tw.utils.Logger(\\\zoomin story river view\\\, {\\n\\t\\tenable: true,\\n\\t\\tcolour: red\\n\\t});\\n\\t// Get the index of the tiddler that is at the top of the history\\n\\tvar history this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,),\\n\\t\\ttargetTiddler;\\n\\tif(history.length > 0) {\\n\\t\\ttargetTiddler historyhistory.length-1.title;\\n\\t}\\n\\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\\n\\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\\n\\t\\tvar domNode itemWidget.findFirstDomNode();\\n\\t\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\t\\tif(!(domNode instanceof Element)) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tif((targetTiddler && targetTiddler ! itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\\n\\t\\t\\tdomNode.style.display \\\none\\\;\\n\\t\\t} else {\\n\\t\\t\\tself.currentTiddlerDomNode domNode;\\n\\t\\t}\\n\\t\\t$tw.utils.addClass(domNode,\\\tc-storyview-zoomin-tiddler\\\);\\n\\t});\\n};\\n\\nZoominListView.prototype.navigateTo function(historyInfo) {\\n\\tvar duration $tw.utils.getAnimationDuration(),\\n\\t\\tlistElementIndex this.listWidget.findListItem(0,historyInfo.title);\\n\\tif(listElementIndex undefined) {\\n\\t\\treturn;\\n\\t}\\n\\tvar listItemWidget this.listWidget.childrenlistElementIndex,\\n\\t\\ttargetElement listItemWidget.findFirstDomNode();\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement) {\\n\\t\\treturn;\\n\\t} else if (targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\tthis.logTextNodeRoot(targetElement);\\n\\t\\treturn;\\n\\t}\\n\\t// Make the new tiddler be position absolute and visible so that we can measure it\\n\\t$tw.utils.addClass(targetElement,\\\tc-storyview-zoomin-tiddler\\\);\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{display: \\\block\\\},\\n\\t\\t{transformOrigin: \\\0 0\\\},\\n\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(1)\\\},\\n\\t\\t{transition: \\\none\\\},\\n\\t\\t{opacity: \\\0.0\\\}\\n\\t);\\n\\t// Get the position of the source node, or use the centre of the window as the source position\\n\\tvar sourceBounds historyInfo.fromPageRect || {\\n\\t\\t\\tleft: window.innerWidth/2 - 2,\\n\\t\\t\\ttop: window.innerHeight/2 - 2,\\n\\t\\t\\twidth: window.innerWidth/8,\\n\\t\\t\\theight: window.innerHeight/8\\n\\t\\t};\\n\\t// Try to find the title node in the target tiddler\\n\\tvar titleDomNode findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\\n\\t\\tzoomBounds titleDomNode.getBoundingClientRect();\\n\\t// Compute the transform for the target tiddler to make the title lie over the source rectange\\n\\tvar targetBounds targetElement.getBoundingClientRect(),\\n\\t\\tscale sourceBounds.width / zoomBounds.width,\\n\\t\\tx sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\\n\\t\\ty sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\\n\\t// Transform the target tiddler to its starting position\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transform: \\\translateX(\\\ + x + \\\px) translateY(\\\ + y + \\\px) scale(\\\ + scale + \\\)\\\}\\n\\t);\\n\\t// Force layout\\n\\t$tw.utils.forceLayout(targetElement);\\n\\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\\n\\tvar self this,\\n\\t\\tprevCurrentTiddler this.currentTiddlerDomNode;\\n\\tthis.currentTiddlerDomNode targetElement;\\n\\t// Transform the target tiddler to its natural size\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms \\\ + easing + \\\, opacity \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t{opacity: \\\1.0\\\},\\n\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(1)\\\},\\n\\t\\t{zIndex: \\\500\\\},\\n\\t);\\n\\t// Transform the previous tiddler out of the way and then hide it\\n\\tif(prevCurrentTiddler && prevCurrentTiddler ! targetElement) {\\n\\t\\tscale zoomBounds.width / sourceBounds.width;\\n\\t\\tx zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\\n\\t\\ty zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\\n\\t\\t$tw.utils.setStyle(prevCurrentTiddler,\\n\\t\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms \\\ + easing + \\\, opacity \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t\\t{opacity: \\\0.0\\\},\\n\\t\\t\\t{transformOrigin: \\\0 0\\\},\\n\\t\\t\\t{transform: \\\translateX(\\\ + x + \\\px) translateY(\\\ + y + \\\px) scale(\\\ + scale + \\\)\\\},\\n\\t\\t\\t{zIndex: \\\0\\\}\\n\\t\\t);\\n\\t\\t// Hide the tiddler when the transition has finished\\n\\t\\tsetTimeout(function() {\\n\\t\\t\\tif(self.currentTiddlerDomNode ! prevCurrentTiddler) {\\n\\t\\t\\t\\tprevCurrentTiddler.style.display \\\none\\\;\\n\\t\\t\\t}\\n\\t\\t},duration);\\n\\t}\\n\\t// Scroll the target into view\\n//\\t$tw.pageScroller.scrollIntoView(targetElement);\\n};\\n\\n/*\\nFind the first child DOM node of a widget that has the class \\\tc-title\\\\\n*/\\nfunction findTitleDomNode(widget,targetClass) {\\n\\ttargetClass targetClass || \\\tc-title\\\;\\n\\tvar domNode widget.findFirstDomNode();\\n\\tif(domNode && domNode.querySelector) {\\n\\t\\treturn $tw.utils.querySelectorSafe(\\\.\\\ + targetClass,domNode);\\n\\t}\\n\\treturn null;\\n}\\n\\nZoominListView.prototype.insert function(widget) {\\n\\tvar targetElement widget.findFirstDomNode();\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement) {\\n\\t\\treturn;\\n\\t} else if (targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\tthis.logTextNodeRoot(targetElement);\\n\\t\\treturn;\\n\\t}\\n\\t// Make the newly inserted node position absolute and hidden\\n\\t$tw.utils.addClass(targetElement,\\\tc-storyview-zoomin-tiddler\\\);\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{display: \\\none\\\}\\n\\t);\\n};\\n\\nZoominListView.prototype.remove function(widget) {\\n\\tvar targetElement widget.findFirstDomNode(),\\n\\t\\tduration $tw.utils.getAnimationDuration(),\\n\\t\\tremoveElement function() {\\n\\t\\t\\twidget.removeChildDomNodes();\\n\\t\\t};\\n\\t// Abandon if the list entry isnt a DOM element (it might be a text node)\\n\\tif(!targetElement || targetElement.nodeType Node.TEXT_NODE) {\\n\\t\\tremoveElement();\\n\\t\\treturn;\\n\\t}\\n\\t// Abandon if hidden\\n\\tif(targetElement.style.display ! \\\block\\\ ) {\\n\\t\\tremoveElement();\\n\\t\\treturn;\\n\\t}\\n\\t// Set up the tiddler that is being closed\\n\\t$tw.utils.addClass(targetElement,\\\tc-storyview-zoomin-tiddler\\\);\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{display: \\\block\\\},\\n\\t\\t{transformOrigin: \\\50% 50%\\\},\\n\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(1)\\\},\\n\\t\\t{transition: \\\none\\\},\\n\\t\\t{zIndex: \\\0\\\}\\n\\t);\\n\\t// Well move back to the previous or next element in the story\\n\\tvar toWidget widget.previousSibling();\\n\\tif(!toWidget) {\\n\\t\\ttoWidget widget.nextSibling();\\n\\t}\\n\\tvar toWidgetDomNode toWidget && toWidget.findFirstDomNode();\\n\\t// Set up the tiddler were moving back in\\n\\tif(toWidgetDomNode) {\\n\\t\\tif (toWidgetDomNode.nodeType Node.TEXT_NODE) {\\n\\t\\t\\tthis.logTextNodeRoot(toWidgetDomNode);\\n\\t\\t\\ttoWidgetDomNode null;\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.addClass(toWidgetDomNode,\\\tc-storyview-zoomin-tiddler\\\);\\n\\t\\t\\t$tw.utils.setStyle(toWidgetDomNode,\\n\\t\\t\\t\\t{display: \\\block\\\},\\n\\t\\t\\t\\t{transformOrigin: \\\50% 50%\\\},\\n\\t\\t\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(10)\\\},\\n\\t\\t\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms \\\ + easing + \\\, opacity \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t\\t\\t{opacity: \\\0\\\},\\n\\t\\t\\t\\t{zIndex: \\\500\\\}\\n\\t\\t\\t);\\n\\t\\t\\tthis.currentTiddlerDomNode toWidgetDomNode;\\n\\t\\t}\\n\\t}\\n\\t// Animate them both\\n\\t// Force layout\\n\\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\\n\\t// First, the tiddler were closing\\n\\t$tw.utils.setStyle(targetElement,\\n\\t\\t{transformOrigin: \\\50% 50%\\\},\\n\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(0.1)\\\},\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms \\\ + easing + \\\, opacity \\\ + duration + \\\ms \\\ + easing},\\n\\t\\t{opacity: \\\0\\\},\\n\\t\\t{zIndex: \\\0\\\}\\n\\t);\\n\\tsetTimeout(removeElement,duration);\\n\\t// Now the tiddler were going back to\\n\\tif(toWidgetDomNode) {\\n\\t\\t$tw.utils.setStyle(toWidgetDomNode,\\n\\t\\t\\t{transform: \\\translateX(0px) translateY(0px) scale(1)\\\},\\n\\t\\t\\t{opacity: \\\1\\\}\\n\\t\\t);\\n\\t}\\n\\treturn true; // Indicate that well delete the DOM node\\n};\\n\\nZoominListView.prototype.logTextNodeRoot function(node) {\\n\\tthis.textNodeLogger.log($tw.language.getString(\\\Error/ZoominTextNode\\\) + \\\ \\\ + node.textContent);\\n};\\n\\nexports.zoomin ZoominListView;\\n\,\type\:\application/javascript\,\module-type\:\storyview\},\$:/core/modules/syncer.js\:{\title\:\$:/core/modules/syncer.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/syncer.js\\ntype: application/javascript\\nmodule-type: global\\n\\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \\\sync adaptor\\\\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nDefaults\\n*/\\nSyncer.prototype.titleIsLoggedIn \\\$:/status/IsLoggedIn\\\;\\nSyncer.prototype.titleIsAnonymous \\\$:/status/IsAnonymous\\\;\\nSyncer.prototype.titleIsReadOnly \\\$:/status/IsReadOnly\\\;\\nSyncer.prototype.titleUserName \\\$:/status/UserName\\\;\\nSyncer.prototype.titleSyncFilter \\\$:/config/SyncFilter\\\;\\nSyncer.prototype.titleSyncPollingInterval \\\$:/config/SyncPollingInterval\\\;\\nSyncer.prototype.titleSyncDisableLazyLoading \\\$:/config/SyncDisableLazyLoading\\\;\\nSyncer.prototype.titleSavedNotification \\\$:/language/Notifications/Save/Done\\\;\\nSyncer.prototype.titleSyncThrottleInterval \\\$:/config/SyncThrottleInterval\\\;\\nSyncer.prototype.taskTimerInterval 0.25 * 1000; // Interval for sync timer\\nSyncer.prototype.throttleInterval 1 * 1000; // Defer saving tiddlers if theyve changed in the last 1s...\\nSyncer.prototype.errorRetryInterval 5 * 1000; // Interval to retry after an error\\nSyncer.prototype.fallbackInterval 10 * 1000; // Unless the task is older than 10s\\nSyncer.prototype.pollTimerInterval 60 * 1000; // Interval for polling for changes from the adaptor\\n\\n/*\\nInstantiate the syncer with the following options:\\nsyncadaptor: reference to syncadaptor to be used\\nwiki: wiki to be synced\\n*/\\nfunction Syncer(options) {\\n\\tvar self this;\\n\\tthis.wiki options.wiki;\\n\\t// Save parameters\\n\\tthis.syncadaptor options.syncadaptor;\\n\\tthis.disableUI !!options.disableUI;\\n\\tthis.titleIsLoggedIn options.titleIsLoggedIn || this.titleIsLoggedIn;\\n\\tthis.titleUserName options.titleUserName || this.titleUserName;\\n\\tthis.titleSyncFilter options.titleSyncFilter || this.titleSyncFilter;\\n\\tthis.titleSavedNotification options.titleSavedNotification || this.titleSavedNotification;\\n\\tthis.taskTimerInterval options.taskTimerInterval || this.taskTimerInterval;\\n\\tthis.throttleInterval options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\\\\\\),10) || this.throttleInterval;\\n\\tthis.errorRetryInterval options.errorRetryInterval || this.errorRetryInterval;\\n\\tthis.fallbackInterval options.fallbackInterval || this.fallbackInterval;\\n\\tthis.pollTimerInterval options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\\\\\\),10) || this.pollTimerInterval;\\n\\tthis.logging \\\logging\\\ in options ? options.logging : true;\\n\\t// Make a logger\\n\\tthis.logger new $tw.utils.Logger(\\\syncer\\\ + ($tw.browser ? \\\-browser\\\ : \\\\\\) + ($tw.node ? \\\-server\\\ : \\\\\\) + (this.syncadaptor.name ? (\\\-\\\ + this.syncadaptor.name) : \\\\\\),{\\n\\t\\tcolour: \\\cyan\\\,\\n\\t\\tenable: this.logging,\\n\\t\\tsaveHistory: true\\n\\t});\\n\\t// Make another logger for connection errors\\n\\tthis.loggerConnection new $tw.utils.Logger(\\\syncer\\\ + ($tw.browser ? \\\-browser\\\ : \\\\\\) + ($tw.node ? \\\-server\\\ : \\\\\\) + (this.syncadaptor.name ? (\\\-\\\ + this.syncadaptor.name) : \\\\\\) + \\\-connection\\\,{\\n\\t\\tcolour: \\\cyan\\\,\\n\\t\\tenable: this.logging\\n\\t});\\n\\t// Ask the syncadaptor to use the main logger\\n\\tif(this.syncadaptor.setLoggerSaveBuffer) {\\n\\t\\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\\n\\t}\\n\\t// Compile the dirty tiddler filter\\n\\tthis.filterFn this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\\n\\t// Record information for known tiddlers\\n\\tthis.readTiddlerInfo();\\n\\tthis.titlesToBeLoaded {}; // Hashmap of titles of tiddlers that need loading from the server\\n\\tthis.titlesHaveBeenLazyLoaded {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\\n\\t// Timers\\n\\tthis.taskTimerId null; // Timer for task dispatch\\n\\t// Number of outstanding requests\\n\\tthis.numTasksInProgress 0;\\n\\t// True when we want to force an immediate sync from the server\\n\\tthis.forceSyncFromServer false;\\n\\tthis.timestampLastSyncFromServer new Date();\\n\\t// Listen out for changes to tiddlers\\n\\tthis.wiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\t// Filter the changes to just include ones that are being synced\\n\\t\\tvar filteredChanges self.getSyncedTiddlers(function(callback) {\\n\\t\\t\\t$tw.utils.each(changes,function(change,title) {\\n\\t\\t\\t\\tvar tiddler self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\\n\\t\\t\\t\\tcallback(tiddler,title);\\n\\t\\t\\t});\\n\\t\\t});\\n\\t\\tif(filteredChanges.length > 0) {\\n\\t\\t\\tself.processTaskQueue();\\n\\t\\t} else {\\n\\t\\t\\t// Look for deletions of tiddlers were already syncing\\t\\n\\t\\t\\tvar outstandingDeletion false\\n\\t\\t\\t$tw.utils.each(changes,function(change,title,object) {\\n\\t\\t\\t\\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\\n\\t\\t\\t\\t\\toutstandingDeletion true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tif(outstandingDeletion) {\\n\\t\\t\\t\\tself.processTaskQueue();\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\t// Browser event handlers\\n\\tif($tw.browser && !this.disableUI) {\\n\\t\\t// Set up our beforeunload handler\\n\\t\\t$tw.addUnloadTask(function(event) {\\n\\t\\t\\tvar confirmationMessage;\\n\\t\\t\\tif(self.isDirty()) {\\n\\t\\t\\t\\tconfirmationMessage $tw.language.getString(\\\UnsavedChangesWarning\\\);\\n\\t\\t\\t\\tevent.returnValue confirmationMessage; // Gecko\\n\\t\\t\\t}\\n\\t\\t\\treturn confirmationMessage;\\n\\t\\t});\\n\\t\\t// Listen out for login/logout/refresh events in the browser\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-login\\\,function(event) {\\n\\t\\t\\tvar username event && event.paramObject && event.paramObject.username,\\n\\t\\t\\t\\tpassword event && event.paramObject && event.paramObject.password;\\n\\t\\t\\tif(username && password) {\\n\\t\\t\\t\\t// Login with username and password\\n\\t\\t\\t\\tself.login(username,password,function() {});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// No username and password, so we display a prompt\\n\\t\\t\\t\\tself.handleLoginEvent();\\t\\t\\t\\t\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-logout\\\,function() {\\n\\t\\t\\tself.handleLogoutEvent();\\n\\t\\t});\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-server-refresh\\\,function() {\\n\\t\\t\\tself.handleRefreshEvent();\\n\\t\\t});\\n\\t\\t$tw.rootWidget.addEventListener(\\\tm-copy-syncer-logs-to-clipboard\\\,function() {\\n\\t\\t\\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \\\\\\\n\\\\nLog:\\\\n\\\ + self.logger.getBuffer());\\n\\t\\t});\\n\\t}\\n\\t// Listen out for lazyLoad events\\n\\tif(!this.disableUI && this.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) ! \\\yes\\\) {\\n\\t\\tthis.wiki.addEventListener(\\\lazyLoad\\\,function(title) {\\n\\t\\t\\tself.handleLazyLoadEvent(title);\\n\\t\\t});\\t\\t\\n\\t}\\n\\t// Get the login status\\n\\tthis.getStatus(function(err,isLoggedIn) {\\n\\t\\t// Do a sync from the server\\n\\t\\tself.syncFromServer();\\n\\t});\\n}\\n\\n/*\\nShow a generic network error alert\\n*/\\nSyncer.prototype.displayError function(msg,err) {\\n\\tif(err ($tw.language.getString(\\\Error/XMLHttpRequest\\\) + \\\: 0\\\)) {\\n\\t\\tthis.loggerConnection.alert($tw.language.getString(\\\Error/NetworkErrorAlert\\\));\\n\\t\\tthis.logger.log(msg + \\\:\\\,err);\\n\\t} else {\\n\\t\\tthis.logger.alert(msg + \\\:\\\,err);\\n\\t}\\n};\\n\\n/*\\nReturn an array of the tiddler titles that are subjected to syncing\\n*/\\nSyncer.prototype.getSyncedTiddlers function(source) {\\n\\treturn this.filterFn.call(this.wiki,source);\\n};\\n\\n/*\\nReturn an array of the tiddler titles that are subjected to syncing\\n*/\\nSyncer.prototype.getTiddlerRevision function(title) {\\n\\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\\n\\t\\treturn this.syncadaptor.getTiddlerRevision(title);\\n\\t} else {\\n\\t\\treturn this.wiki.getTiddler(title).fields.revision;\\t\\n\\t} \\n};\\n\\n/*\\nRead (or re-read) the latest tiddler info from the store\\n*/\\nSyncer.prototype.readTiddlerInfo function() {\\n\\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\\n\\t// \\\revision\\\ is the revision of the tiddler last seen on the server, and \\\changecount\\\ is the corresponding local changecount\\n\\tthis.tiddlerInfo {};\\n\\t// Record information for known tiddlers\\n\\tvar self this,\\n\\t\\ttiddlers this.getSyncedTiddlers();\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tself.tiddlerInfotitle {\\n\\t\\t\\t\\trevision: self.getTiddlerRevision(title),\\n\\t\\t\\t\\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\\n\\t\\t\\t\\tchangeCount: self.wiki.getChangeCount(title)\\n\\t\\t\\t};\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nChecks whether the wiki is dirty (ie the window shouldnt be closed)\\n*/\\nSyncer.prototype.isDirty function() {\\n\\tvar self this;\\n\\tfunction checkIsDirty() {\\n\\t\\t// Check tiddlers that are in the store and included in the filter function\\n\\t\\tvar titles self.getSyncedTiddlers();\\n\\t\\tfor(var index0; index\u003Ctitles.length; index++) {\\n\\t\\t\\tvar title titlesindex,\\n\\t\\t\\t\\ttiddlerInfo self.tiddlerInfotitle;\\n\\t\\t\\tif(self.wiki.tiddlerExists(title)) {\\n\\t\\t\\t\\tif(tiddlerInfo) {\\n\\t\\t\\t\\t\\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\\n\\t\\t\\t\\t\\tif(self.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// If the tiddler isnt known on the server then it needs to be saved to the server\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Check tiddlers that are known from the server but not currently in the store\\n\\t\\ttitles Object.keys(self.tiddlerInfo);\\n\\t\\tfor(index0; index\u003Ctitles.length; index++) {\\n\\t\\t\\tif(!self.wiki.tiddlerExists(titlesindex)) {\\n\\t\\t\\t\\t// There must be a pending delete\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn false;\\n\\t}\\n\\tvar dirtyStatus checkIsDirty();\\n\\treturn dirtyStatus;\\n};\\n\\n/*\\nUpdate the document body with the class \\\tc-dirty\\\ if the wiki has unsaved/unsynced changes\\n*/\\nSyncer.prototype.updateDirtyStatus function() {\\n\\tif($tw.browser && !this.disableUI) {\\n\\t\\tvar dirty this.isDirty();\\n\\t\\t$tw.utils.toggleClass(document.body,\\\tc-dirty\\\,dirty);\\n\\t\\tif(!dirty) {\\n\\t\\t\\tthis.loggerConnection.clearAlerts();\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\\n*/\\nSyncer.prototype.storeTiddler function(tiddlerFields) {\\n\\t// Save the tiddler\\n\\tvar tiddler new $tw.Tiddler(tiddlerFields);\\n\\tthis.wiki.addTiddler(tiddler);\\n\\t// Save the tiddler revision and changeCount details\\n\\tthis.tiddlerInfotiddlerFields.title {\\n\\t\\trevision: this.getTiddlerRevision(tiddlerFields.title),\\n\\t\\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\\n\\t\\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\\n\\t};\\n};\\n\\nSyncer.prototype.getStatus function(callback) {\\n\\tvar self this;\\n\\t// Check if the adaptor supports getStatus()\\n\\tif(this.syncadaptor && this.syncadaptor.getStatus) {\\n\\t\\t// Mark us as not logged in\\n\\t\\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \\\no\\\});\\n\\t\\t// Get login status\\n\\t\\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tself.displayError(\\\Get Status Error\\\,err);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Set the various status tiddlers\\n\\t\\t\\t\\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \\\yes\\\ : \\\no\\\});\\n\\t\\t\\t\\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \\\yes\\\ : \\\no\\\});\\n\\t\\t\\t\\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \\\yes\\\ : \\\no\\\});\\n\\t\\t\\t\\tif(isLoggedIn) {\\n\\t\\t\\t\\t\\tself.wiki.addTiddler({title: self.titleUserName,text: username || \\\\\\});\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Invoke the callback\\n\\t\\t\\tif(callback) {\\n\\t\\t\\t\\tcallback(err,isLoggedIn,username);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\tcallback(null,true,\\\UNAUTHENTICATED\\\);\\n\\t}\\n};\\n\\n/*\\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we dont already have up to date\\n*/\\nSyncer.prototype.syncFromServer function() {\\n\\tif(this.canSyncFromServer()) {\\n\\t\\tthis.forceSyncFromServer true;\\n\\t\\tthis.processTaskQueue();\\t\\n\\t}\\n};\\n\\nSyncer.prototype.canSyncFromServer function() {\\n\\treturn !!this.syncadaptor.getUpdatedTiddlers || !!this.syncadaptor.getSkinnyTiddlers;\\n}\\n\\n/*\\nForce load a tiddler from the server\\n*/\\nSyncer.prototype.enqueueLoadTiddler function(title) {\\n\\tthis.titlesToBeLoadedtitle true;\\n\\tthis.processTaskQueue();\\n};\\n\\n/*\\nLazily load a skinny tiddler if we can\\n*/\\nSyncer.prototype.handleLazyLoadEvent function(title) {\\n\\t// Ignore if the syncadaptor doesnt handle it\\n\\tif(!this.syncadaptor.supportsLazyLoading) {\\n\\t\\treturn;\\n\\t}\\n\\t// Dont lazy load the same tiddler twice\\n\\tif(!this.titlesHaveBeenLazyLoadedtitle) {\\n\\t\\t// Dont lazy load if the tiddler isnt included in the sync filter\\n\\t\\tif(this.getSyncedTiddlers().indexOf(title) ! -1) {\\n\\t\\t\\t// Mark the tiddler as needing loading, and having already been lazily loaded\\n\\t\\t\\tthis.titlesToBeLoadedtitle true;\\n\\t\\t\\tthis.titlesHaveBeenLazyLoadedtitle true;\\n\\t\\t\\tthis.processTaskQueue();\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nDispay a password prompt and allow the user to login\\n*/\\nSyncer.prototype.handleLoginEvent function() {\\n\\tvar self this;\\n\\tthis.getStatus(function(err,isLoggedIn,username) {\\n\\t\\tif(!err && !isLoggedIn) {\\n\\t\\t\\tif(self.syncadaptor && self.syncadaptor.displayLoginPrompt) {\\n\\t\\t\\t\\tself.syncadaptor.displayLoginPrompt(self);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.displayLoginPrompt();\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nDispay a password prompt\\n*/\\nSyncer.prototype.displayLoginPrompt function() {\\n\\tvar self this;\\n\\tvar promptInfo $tw.passwordPrompt.createPrompt({\\n\\t\\tserviceName: $tw.language.getString(\\\LoginToTiddlySpace\\\),\\n\\t\\tcallback: function(data) {\\n\\t\\t\\tself.login(data.username,data.password,function(err,isLoggedIn) {\\n\\t\\t\\t\\tself.syncFromServer();\\n\\t\\t\\t});\\n\\t\\t\\treturn true; // Get rid of the password prompt\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nAttempt to login to TiddlyWeb.\\n\\tusername: username\\n\\tpassword: password\\n\\tcallback: invoked with arguments (err,isLoggedIn)\\n*/\\nSyncer.prototype.login function(username,password,callback) {\\n\\tthis.logger.log(\\\Attempting to login as\\\,username);\\n\\tvar self this;\\n\\tif(this.syncadaptor.login) {\\n\\t\\tthis.syncadaptor.login(username,password,function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tself.getStatus(function(err,isLoggedIn,username) {\\n\\t\\t\\t\\tif(callback) {\\n\\t\\t\\t\\t\\tcallback(err,isLoggedIn);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t});\\n\\t} else {\\n\\t\\tcallback(null,true);\\n\\t}\\n};\\n\\n/*\\nAttempt to log out of TiddlyWeb\\n*/\\nSyncer.prototype.handleLogoutEvent function() {\\n\\tthis.logger.log(\\\Attempting to logout\\\);\\n\\tvar self this;\\n\\tif(this.syncadaptor.logout) {\\n\\t\\tthis.syncadaptor.logout(function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tself.displayError(\\\Logout Error\\\,err);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tself.getStatus();\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nImmediately refresh from the server\\n*/\\nSyncer.prototype.handleRefreshEvent function() {\\n\\tthis.syncFromServer();\\n};\\n\\n/*\\nProcess the next task\\n*/\\nSyncer.prototype.processTaskQueue function() {\\n\\tvar self this;\\n\\t// Only process a task if the sync adaptor is fully initialised and were not already performing\\n\\t// a task. If we are already performing a task then well dispatch the next one when it completes\\n\\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress 0) {\\n\\t\\t// Choose the next task to perform\\n\\t\\tvar task this.chooseNextTask();\\n\\t\\t// Perform the task if we had one\\n\\t\\tif(typeof task \\\object\\\ && task ! null) {\\n\\t\\t\\tthis.numTasksInProgress + 1;\\n\\t\\t\\ttask.run(function(err) {\\n\\t\\t\\t\\tself.numTasksInProgress - 1;\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\tself.displayError(\\\Sync error while processing \\\ + task.type + \\\ of \\\ + task.title + \\\\\\,err);\\n\\t\\t\\t\\t\\tself.updateDirtyStatus();\\n\\t\\t\\t\\t\\tself.triggerTimeout(self.errorRetryInterval);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tself.updateDirtyStatus();\\n\\t\\t\\t\\t\\t// Process the next task\\n\\t\\t\\t\\t\\tself.processTaskQueue.call(self);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\t// No task is ready so update the status\\n\\t\\t\\tthis.updateDirtyStatus();\\n\\t\\t\\t// And trigger a timeout if there is a pending task\\n\\t\\t\\tif(task true) {\\n\\t\\t\\t\\tthis.triggerTimeout(this.taskTimerInterval);\\n\\t\\t\\t} else if(this.canSyncFromServer()) {\\n\\t\\t\\t\\tthis.triggerTimeout(this.pollTimerInterval);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tthis.updateDirtyStatus();\\n\\t\\tthis.triggerTimeout(this.taskTimerInterval);\\n\\t}\\n};\\n\\nSyncer.prototype.triggerTimeout function(interval) {\\n\\tvar self this;\\n\\tif(this.taskTimerId) {\\n\\t\\tclearTimeout(this.taskTimerId);\\n\\t}\\n\\tthis.taskTimerId setTimeout(function() {\\n\\t\\tself.taskTimerId null;\\n\\t\\tself.processTaskQueue.call(self);\\n\\t},interval || self.taskTimerInterval);\\n};\\n\\n/*\\nChoose the next sync task. We prioritise saves to the server, then getting updates from the server, then deletes to the server, then loads from the server\\n\\nReturns either:\\n* a task object\\n* the boolean true if there are pending sync tasks that arent yet due\\n* null if theres no pending sync tasks (just the next poll)\\n*/\\nSyncer.prototype.chooseNextTask function() {\\n\\tvar now new Date(),\\n\\t\\tthresholdLastSaved now - this.throttleInterval,\\n\\t\\thavePending null;\\n\\t// First we look for tiddlers that have been modified locally and need saving back to the server\\n\\tvar titles this.getSyncedTiddlers();\\n\\tfor(var index0; index\u003Ctitles.length; index++) {\\n\\t\\tvar title titlesindex,\\n\\t\\t\\ttiddler this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\\n\\t\\t\\ttiddlerInfo this.tiddlerInfotitle;\\n\\t\\tif(tiddler) {\\n\\t\\t\\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\\n\\t\\t\\tvar hasChanged !tiddlerInfo || this.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\\n\\t\\t\\t\\tisReadyToSave !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved \u003C thresholdLastSaved;\\n\\t\\t\\tif(hasChanged) {\\n\\t\\t\\t\\tif(isReadyToSave) {\\n\\t\\t\\t\\t\\treturn new SaveTiddlerTask(this,title);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\thavePending true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Second we check for an outstanding sync from server\\n\\tif(this.forceSyncFromServer || (this.timestampLastSyncFromServer && (now.valueOf() > (this.timestampLastSyncFromServer.valueOf() + this.pollTimerInterval)))) {\\n\\t\\treturn new SyncFromServerTask(this);\\n\\t}\\n\\t// Third, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\\n\\ttitles Object.keys(this.tiddlerInfo);\\n\\tfor(index0; index\u003Ctitles.length; index++) {\\n\\t\\ttitle titlesindex;\\n\\t\\ttiddlerInfo this.tiddlerInfotitle;\\n\\t\\ttiddler this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\\n\\t\\tif(!tiddler) {\\n\\t\\t\\treturn new DeleteTiddlerTask(this,title);\\n\\t\\t}\\n\\t}\\n\\t// Finally, check for tiddlers that need loading\\n\\ttitle Object.keys(this.titlesToBeLoaded)0;\\n\\tif(title) {\\n\\t\\tdelete this.titlesToBeLoadedtitle;\\n\\t\\treturn new LoadTiddlerTask(this,title);\\n\\t}\\n\\t// No tasks are ready now, but might be in the future\\n\\treturn havePending;\\n};\\n\\nfunction SaveTiddlerTask(syncer,title) {\\n\\tthis.syncer syncer;\\n\\tthis.title title;\\n\\tthis.type \\\save\\\;\\n}\\n\\nSaveTiddlerTask.prototype.toString function() {\\n\\treturn \\\SAVE \\\ + this.title;\\n}\\n\\nSaveTiddlerTask.prototype.run function(callback) {\\n\\tvar self this,\\n\\t\\tchangeCount this.syncer.wiki.getChangeCount(this.title),\\n\\t\\ttiddler this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\\n\\tthis.syncer.logger.log(\\\Dispatching save task:\\\,this.title);\\n\\tif(tiddler) {\\n\\t\\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\\n\\t\\t\\t// If theres an error, exit without changing any internal state\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Adjust the info stored about this tiddler\\n\\t\\t\\tself.syncer.tiddlerInfoself.title {\\n\\t\\t\\t\\tchangeCount: changeCount,\\n\\t\\t\\t\\tadaptorInfo: adaptorInfo,\\n\\t\\t\\t\\trevision: revision,\\n\\t\\t\\t\\ttimestampLastSaved: new Date()\\n\\t\\t\\t};\\n\\t\\t\\t// Invoke the callback\\n\\t\\t\\tcallback(null);\\n\\t\\t},{\\n\\t\\t\\ttiddlerInfo: self.syncer.tiddlerInfoself.title\\n\\t\\t});\\n\\t} else {\\n\\t\\t$tw.utils.nextTick(callback(null));\\n\\t}\\n};\\n\\nfunction DeleteTiddlerTask(syncer,title) {\\n\\tthis.syncer syncer;\\n\\tthis.title title;\\n\\tthis.type \\\delete\\\;\\n}\\n\\nDeleteTiddlerTask.prototype.toString function() {\\n\\treturn \\\DELETE \\\ + this.title;\\n}\\n\\nDeleteTiddlerTask.prototype.run function(callback) {\\n\\tvar self this;\\n\\tthis.syncer.logger.log(\\\Dispatching delete task:\\\,this.title);\\n\\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\\n\\t\\t// If theres an error, exit without changing any internal state\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\t// Remove the info stored about this tiddler\\n\\t\\tdelete self.syncer.tiddlerInfoself.title;\\n\\t\\t// Invoke the callback\\n\\t\\tcallback(null);\\n\\t},{\\n\\t\\ttiddlerInfo: self.syncer.tiddlerInfothis.title\\n\\t});\\n};\\n\\nfunction LoadTiddlerTask(syncer,title) {\\n\\tthis.syncer syncer;\\n\\tthis.title title;\\n\\tthis.type \\\load\\\;\\n}\\n\\nLoadTiddlerTask.prototype.toString function() {\\n\\treturn \\\LOAD \\\ + this.title;\\n}\\n\\nLoadTiddlerTask.prototype.run function(callback) {\\n\\tvar self this;\\n\\tthis.syncer.logger.log(\\\Dispatching load task:\\\,this.title);\\n\\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\\n\\t\\t// If theres an error, exit without changing any internal state\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\t// Update the info stored about this tiddler\\n\\t\\tif(tiddlerFields) {\\n\\t\\t\\tself.syncer.storeTiddler(tiddlerFields);\\n\\t\\t}\\n\\t\\t// Invoke the callback\\n\\t\\tcallback(null);\\n\\t});\\n};\\n\\nfunction SyncFromServerTask(syncer) {\\n\\tthis.syncer syncer;\\n\\tthis.type \\\syncfromserver\\\;\\n}\\n\\nSyncFromServerTask.prototype.toString function() {\\n\\treturn \\\SYNCFROMSERVER\\\;\\n}\\n\\nSyncFromServerTask.prototype.run function(callback) {\\n\\tvar self this;\\n\\tvar syncSystemFromServer (self.syncer.wiki.getTiddlerText(\\\$:/config/SyncSystemTiddlersFromServer\\\) \\\yes\\\ ? true : false);\\n\\tvar successCallback function() {\\n\\t\\tself.syncer.forceSyncFromServer false;\\n\\t\\tself.syncer.timestampLastSyncFromServer new Date();\\n\\t\\tcallback(null);\\n\\t};\\n\\tif(this.syncer.syncadaptor.getUpdatedTiddlers) {\\n\\t\\tthis.syncer.syncadaptor.getUpdatedTiddlers(self.syncer,function(err,updates) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tself.syncer.displayError($tw.language.getString(\\\Error/RetrievingSkinny\\\),err);\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tif(updates) {\\n\\t\\t\\t\\t$tw.utils.each(updates.modifications,function(title) {\\n\\t\\t\\t\\t\\tself.syncer.titlesToBeLoadedtitle true;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\t$tw.utils.each(updates.deletions,function(title) {\\n\\t\\t\\t\\t\\tif(syncSystemFromServer || !self.syncer.wiki.isSystemTiddler(title)) {\\n\\t\\t\\t\\t\\t\\tdelete self.syncer.tiddlerInfotitle;\\n\\t\\t\\t\\t\\t\\tself.syncer.logger.log(\\\Deleting tiddler missing from server:\\\,title);\\n\\t\\t\\t\\t\\t\\tself.syncer.wiki.deleteTiddler(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t\\treturn successCallback();\\n\\t\\t});\\n\\t} else if(this.syncer.syncadaptor.getSkinnyTiddlers) {\\n\\t\\tthis.syncer.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\\n\\t\\t\\t// Check for errors\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tself.syncer.displayError($tw.language.getString(\\\Error/RetrievingSkinny\\\),err);\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\t// Keep track of which tiddlers we already know about have been reported this time\\n\\t\\t\\tvar previousTitles Object.keys(self.syncer.tiddlerInfo);\\n\\t\\t\\t// Process each incoming tiddler\\n\\t\\t\\tfor(var t0; t\u003Ctiddlers.length; t++) {\\n\\t\\t\\t\\t// Get the incoming tiddler fields, and the existing tiddler\\n\\t\\t\\t\\tvar tiddlerFields tiddlerst,\\n\\t\\t\\t\\t\\tincomingRevision tiddlerFields.revision + \\\\\\,\\n\\t\\t\\t\\t\\ttiddler self.syncer.wiki.tiddlerExists(tiddlerFields.title) && self.syncer.wiki.getTiddler(tiddlerFields.title),\\n\\t\\t\\t\\t\\ttiddlerInfo self.syncer.tiddlerInfotiddlerFields.title,\\n\\t\\t\\t\\t\\tcurrRevision tiddlerInfo ? tiddlerInfo.revision : null,\\n\\t\\t\\t\\t\\tindexInPreviousTitles previousTitles.indexOf(tiddlerFields.title);\\n\\t\\t\\t\\tif(indexInPreviousTitles ! -1) {\\n\\t\\t\\t\\t\\tpreviousTitles.splice(indexInPreviousTitles,1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Ignore the incoming tiddler if its the same as the revision weve already got\\n\\t\\t\\t\\tif(currRevision ! incomingRevision) {\\n\\t\\t\\t\\t\\t// Only load the skinny version if we dont already have a fat version of the tiddler\\n\\t\\t\\t\\t\\tif(!tiddler || tiddler.fields.text undefined) {\\n\\t\\t\\t\\t\\t\\tself.syncer.storeTiddler(tiddlerFields);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Do a full load of this tiddler\\n\\t\\t\\t\\t\\tself.syncer.titlesToBeLoadedtiddlerFields.title true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Delete any tiddlers that were previously reported but missing this time\\n\\t\\t\\t$tw.utils.each(previousTitles,function(title) {\\n\\t\\t\\t\\tif(syncSystemFromServer || !self.syncer.wiki.isSystemTiddler(title)) {\\n\\t\\t\\t\\t\\tdelete self.syncer.tiddlerInfotitle;\\n\\t\\t\\t\\t\\tself.syncer.logger.log(\\\Deleting tiddler missing from server:\\\,title);\\n\\t\\t\\t\\t\\tself.syncer.wiki.deleteTiddler(title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tself.syncer.forceSyncFromServer false;\\n\\t\\t\\tself.syncer.timestampLastSyncFromServer new Date();\\n\\t\\t\\treturn successCallback();\\n\\t\\t});\\n\\t} else {\\n\\t\\treturn successCallback();\\n\\t}\\n};\\n\\nexports.Syncer Syncer;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/tiddler.js\:{\title\:\$:/core/modules/tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/tiddler.js\\ntype: application/javascript\\nmodule-type: tiddlermethod\\n\\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.hasTag function(tag) {\\n\\treturn this.fields.tags && this.fields.tags.indexOf(tag) ! -1;\\n};\\n\\nexports.isPlugin function() {\\n\\treturn this.fields.type \\\application/json\\\ && this.hasField(\\\plugin-type\\\);\\n};\\n\\nexports.isDraft function() {\\n\\treturn this.hasField(\\\draft.of\\\);\\n};\\n\\nexports.getFieldString function(field,defaultValue) {\\n\\tvar value this.fieldsfield;\\n\\t// Check for a missing field\\n\\tif(value undefined || value null) {\\n\\t\\treturn defaultValue || \\\\\\;\\n\\t}\\n\\t// Stringify the field with the associated tiddler field module (if any)\\n\\tvar fieldModule $tw.Tiddler.fieldModulesfield;\\n\\tif(fieldModule && fieldModule.stringify) {\\n\\t\\treturn fieldModule.stringify.call(this,value);\\n\\t} else {\\n\\t\\treturn value.toString();\\n\\t}\\n};\\n\\n/*\\nGet the value of a field as an array / list\\n*/\\nexports.getFieldList function(field) {\\n\\tvar value this.getFieldString(field,null);\\n\\t// Check for a missing field\\n\\tif(value undefined || value null) {\\n\\t\\treturn ;\\n\\t}\\n\\treturn $tw.utils.parseStringArray(value);\\n};\\n\\n/*\\nGet all the fields as a hashmap of strings. Options:\\n\\texclude: an array of field names to exclude\\n*/\\nexports.getFieldStrings function(options) {\\n\\toptions options || {};\\n\\tvar exclude options.exclude || ;\\n\\tvar fields {};\\n\\tfor(var field in this.fields) {\\n\\t\\tif($tw.utils.hop(this.fields,field)) {\\n\\t\\t\\tif(exclude.indexOf(field) -1) {\\n\\t\\t\\t\\tfieldsfield this.getFieldString(field);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn fields;\\n};\\n\\n/*\\nGet all the fields as a name:value block. Options:\\n\\texclude: an array of field names to exclude\\n*/\\nexports.getFieldStringBlock function(options) {\\n\\toptions options || {};\\n\\tvar exclude options.exclude || ,\\n\\t\\tfields Object.keys(this.fields).sort(),\\n\\t\\tresult ;\\n\\tfor(var t0; t\u003Cfields.length; t++) {\\n\\t\\tvar field fieldst;\\n\\t\\tif(exclude.indexOf(field) -1) {\\n\\t\\t\\tresult.push(field + \\\: \\\ + this.getFieldString(field));\\n\\t\\t}\\n\\t}\\n\\treturn result.join(\\\\\\\n\\\);\\n};\\n\\nexports.getFieldDay function(field) {\\n\\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\\n\\t\\treturn this.cache.dayfield;\\n\\t}\\n\\tvar day \\\\\\;\\n\\tif(this.fieldsfield) {\\n\\t\\tday (new Date($tw.utils.parseDate(this.fieldsfield))).setHours(0,0,0,0);\\n\\t}\\n\\tthis.cache.day this.cache.day || {};\\n\\tthis.cache.dayfield day;\\n\\treturn day;\\n};\\n\,\type\:\application/javascript\,\module-type\:\tiddlermethod\},\$:/core/modules/upgraders/plugins.js\:{\title\:\$:/core/modules/upgraders/plugins.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/upgraders/plugins.js\\ntype: application/javascript\\nmodule-type: upgrader\\n\\nUpgrader module that checks that plugins are newer than any already installed version\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar UPGRADE_LIBRARY_TITLE \\\$:/UpgradeLibrary\\\;\\n\\nvar BLOCKED_PLUGINS {\\n\\t\\\$:/themes/tiddlywiki/stickytitles\\\: {\\n\\t\\tversions: \\\*\\\\\n\\t},\\n\\t\\\$:/plugins/tiddlywiki/fullscreen\\\: {\\n\\t\\tversions: \\\*\\\\\n\\t}\\n};\\n\\nexports.upgrade function(wiki,titles,tiddlers) {\\n\\tvar self this,\\n\\t\\tmessages {},\\n\\t\\tupgradeLibrary,\\n\\t\\tgetLibraryTiddler function(title) {\\n\\t\\t\\tif(!upgradeLibrary) {\\n\\t\\t\\t\\tupgradeLibrary wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\\n\\t\\t\\t\\tupgradeLibrary.tiddlers upgradeLibrary.tiddlers || {};\\n\\t\\t\\t}\\n\\t\\t\\treturn upgradeLibrary.tiddlerstitle;\\n\\t\\t};\\n\\n\\t// Go through all the incoming tiddlers\\n\\t$tw.utils.each(titles,function(title) {\\n\\t\\tvar incomingTiddler tiddlerstitle;\\n\\t\\t// Check if were dealing with a plugin\\n\\t\\tif(incomingTiddler && incomingTiddler\\\plugin-type\\\) {\\n\\t\\t\\t// Check whether the plugin contains JS modules\\n\\t\\t\\tvar requiresReload wiki.doesPluginInfoRequireReload($tw.utils.parseJSONSafe(incomingTiddler.text)) ? (wiki.getTiddlerText(\\\$:/language/ControlPanel/Plugins/PluginWillRequireReload\\\) + \\\ \\\) : \\\\\\;\\n\\t\\t\\tmessagestitle requiresReload;\\n\\t\\t\\tif(incomingTiddler.version) {\\n\\t\\t\\t\\t// Upgrade the incoming plugin if it is in the upgrade library\\n\\t\\t\\t\\tvar libraryTiddler getLibraryTiddler(title);\\n\\t\\t\\t\\tif(libraryTiddler && libraryTiddler\\\plugin-type\\\ && libraryTiddler.version) {\\n\\t\\t\\t\\t\\ttiddlerstitle libraryTiddler;\\n\\t\\t\\t\\t\\tmessagestitle requiresReload + $tw.language.getString(\\\Import/Upgrader/Plugins/Upgraded\\\,{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Suppress the incoming plugin if it is older than the currently installed one\\n\\t\\t\\t\\tvar existingTiddler wiki.getTiddler(title);\\n\\t\\t\\t\\tif(existingTiddler && existingTiddler.hasField(\\\plugin-type\\\) && existingTiddler.hasField(\\\version\\\)) {\\n\\t\\t\\t\\t\\t// Reject the incoming plugin by blanking all its fields\\n\\t\\t\\t\\t\\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\\n\\t\\t\\t\\t\\t\\ttiddlerstitle Object.create(null);\\n\\t\\t\\t\\t\\t\\tmessagestitle $tw.language.getString(\\\Import/Upgrader/Plugins/Suppressed/Version\\\,{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\\n\\t\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Check whether the plugin is on the blocked list\\n\\t\\t\\tvar blockInfo BLOCKED_PLUGINStitle;\\n\\t\\t\\tif(blockInfo) {\\n\\t\\t\\t\\tif(blockInfo.versions.indexOf(\\\*\\\) ! -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) ! -1)) {\\n\\t\\t\\t\\t\\ttiddlerstitle Object.create(null);\\n\\t\\t\\t\\t\\tmessagestitle $tw.language.getString(\\\Import/Upgrader/Plugins/Suppressed/Incompatible\\\);\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn messages;\\n};\\n\,\type\:\application/javascript\,\module-type\:\upgrader\},\$:/core/modules/upgraders/system.js\:{\title\:\$:/core/modules/upgraders/system.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/upgraders/system.js\\ntype: application/javascript\\nmodule-type: upgrader\\n\\nUpgrader module that suppresses certain system tiddlers that shouldnt be imported\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar DONT_IMPORT_LIST \\\$:/Import\\\, \\\$:/build\\\,\\n\\tUNSELECT_PREFIX_LIST \\\$:/temp/\\\,\\\$:/state/\\\,\\\$:/StoryList\\\,\\\$:/HistoryList\\\,\\n\\tWARN_IMPORT_PREFIX_LIST \\\$:/core/modules/\\\;\\n\\nexports.upgrade function(wiki,titles,tiddlers) {\\n\\tvar self this,\\n\\t\\tmessages {},\\n\\t\\tshowAlert false;\\n\\t// Check for tiddlers on our list\\n\\t$tw.utils.each(titles,function(title) {\\n\\t\\tif(DONT_IMPORT_LIST.indexOf(title) ! -1) {\\n\\t\\t\\ttiddlerstitle Object.create(null);\\n\\t\\t\\tmessagestitle $tw.language.getString(\\\Import/Upgrader/System/Suppressed\\\);\\n\\t\\t} else {\\n\\t\\t\\tfor(var t0; t\u003CUNSELECT_PREFIX_LIST.length; t++) {\\n\\t\\t\\t\\tvar prefix UNSELECT_PREFIX_LISTt;\\n\\t\\t\\t\\tif(title.substr(0,prefix.length) prefix) {\\n\\t\\t\\t\\t\\tmessagestitle $tw.language.getString(\\\Import/Upgrader/Tiddler/Unselected\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tfor(var t0; t\u003CWARN_IMPORT_PREFIX_LIST.length; t++) {\\n\\t\\t\\t\\tvar prefix WARN_IMPORT_PREFIX_LISTt;\\n\\t\\t\\t\\tif(title.substr(0,prefix.length) prefix && wiki.isShadowTiddler(title)) {\\n\\t\\t\\t\\t\\tshowAlert true;\\n\\t\\t\\t\\t\\tmessagestitle $tw.language.getString(\\\Import/Upgrader/System/Warning\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\tif(showAlert) {\\n\\t\\tvar logger new $tw.utils.Logger(\\\import\\\);\\n\\t\\tlogger.alert($tw.language.getString(\\\Import/Upgrader/System/Alert\\\));\\n\\t}\\n\\treturn messages;\\n};\\n\,\type\:\application/javascript\,\module-type\:\upgrader\},\$:/core/modules/upgraders/themetweaks.js\:{\title\:\$:/core/modules/upgraders/themetweaks.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/upgraders/themetweaks.js\\ntype: application/javascript\\nmodule-type: upgrader\\n\\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\\n\\nPreviously, theme tweaks were stored in two data tiddlers:\\n\\n* $:/themes/tiddlywiki/vanilla/metrics\\n* $:/themes/tiddlywiki/vanilla/settings\\n\\nNow, each tweak is stored in its own separate tiddler.\\n\\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar MAPPINGS {\\n\\t\\\$:/themes/tiddlywiki/vanilla/metrics\\\: {\\n\\t\\t\\\fontsize\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\,\\n\\t\\t\\\lineheight\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\,\\n\\t\\t\\\storyleft\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\,\\n\\t\\t\\\storytop\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/storytop\\\,\\n\\t\\t\\\storyright\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/storyright\\\,\\n\\t\\t\\\storywidth\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\,\\n\\t\\t\\\tiddlerwidth\\\: \\\$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\\\n\\t},\\n\\t\\\$:/themes/tiddlywiki/vanilla/settings\\\: {\\n\\t\\t\\\fontfamily\\\: \\\$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\\\n\\t}\\n};\\n\\nexports.upgrade function(wiki,titles,tiddlers) {\\n\\tvar self this,\\n\\t\\tmessages {};\\n\\t// Check for tiddlers on our list\\n\\t$tw.utils.each(titles,function(title) {\\n\\t\\tvar mapping MAPPINGStitle;\\n\\t\\tif(mapping) {\\n\\t\\t\\tvar tiddler new $tw.Tiddler(tiddlerstitle),\\n\\t\\t\\t\\ttiddlerData wiki.getTiddlerDataCached(tiddler,{});\\n\\t\\t\\tfor(var index in mapping) {\\n\\t\\t\\t\\tvar mappedTitle mappingindex;\\n\\t\\t\\t\\tif(!tiddlersmappedTitle || tiddlersmappedTitle.title ! mappedTitle) {\\n\\t\\t\\t\\t\\ttiddlersmappedTitle {\\n\\t\\t\\t\\t\\t\\ttitle: mappedTitle,\\n\\t\\t\\t\\t\\t\\ttext: tiddlerDataindex\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tmessagesmappedTitle $tw.language.getString(\\\Import/Upgrader/ThemeTweaks/Created\\\,{variables: {\\n\\t\\t\\t\\t\\t\\tfrom: title + \\\##\\\ + index\\n\\t\\t\\t\\t\\t}});\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn messages;\\n};\\n\,\type\:\application/javascript\,\module-type\:\upgrader\},\$:/core/modules/utils/base64-utf8/base64-utf8.module.js\:{\text\:\(function(){// From https://gist.github.com/Nijikokun/5192472\\n//\\n// UTF8 Module\\n//\\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\\n//\\n// copyright: MIT\\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\\n!function(r,e,o,t){void 0!o.module&&o.module.exports?o.module.exportse.apply(o):void 0!o.define&&\\\function\\\o.define&&o.define.amd?define(\\\utf8\\\,,e):o.utf8e.apply(o)}(0,function(){return{encode:function(r){if(\\\string\\\!typeof r)return r;rr.replace(/\\\\r\\\\n/g,\\\\\\\n\\\);for(var e,o\\\\\\,t0;t\u003Cr.length;t++)if((er.charCodeAt(t))\u003C128)o+String.fromCharCode(e);else if(e>127&&e\u003C2048)o+String.fromCharCode(e>>6|192),o+String.fromCharCode(63&e|128);else if(e>55295&&e\u003C57344&&r.length>t+1){var ie,nr.charCodeAt(t+1);t++;var d65536+(i-55296\u003C\u003C10|n-56320);o+String.fromCharCode(d>>18|240),o+String.fromCharCode(d>>12&63|128),o+String.fromCharCode(d>>6&63|128),o+String.fromCharCode(63&d|128)}else o+String.fromCharCode(e>>12|224),o+String.fromCharCode(e>>6&63|128),o+String.fromCharCode(63&e|128);return o},decode:function(r){if(\\\string\\\!typeof r)return r;for(var e\\\\\\,o0,t0;o\u003Cr.length;)if((tr.charCodeAt(o))\u003C128)e+String.fromCharCode(t),o++;else if(t>191&&t\u003C224)e+String.fromCharCode((31&t)\u003C\u003C6|63&r.charCodeAt(o+1)),o+2;else if(t>223&&t\u003C240)e+String.fromCharCode((15&t)\u003C\u003C12|(63&r.charCodeAt(o+1))\u003C\u003C6|63&r.charCodeAt(o+2)),o+3;else{var i(7&t)\u003C\u003C18|(63&r.charCodeAt(o+1))\u003C\u003C12|(63&r.charCodeAt(o+2))\u003C\u003C6|63&r.charCodeAt(o+3);e+String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+4}return e}}},this),function(r,e,o,t){if(void 0!o.module&&o.module.exports){if(t&&o.require)for(var i0;i\u003Ct.length;i++)otio.require(ti);o.module.exportse.apply(o)}else void 0!o.define&&\\\function\\\o.define&&o.define.amd?define(\\\base64\\\,t||,e):o.base64e.apply(o)}(0,function(r){var er||this.utf8,o\\\ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\;return{encode:function(r){if(void 0e)throw{error:\\\MissingMethod\\\,message:\\\UTF8 Module is missing.\\\};if(\\\string\\\!typeof r)return r;re.encode(r);for(var t,i,n,d,f,a,h,C\\\\\\,c0;c\u003Cr.length;)d(tr.charCodeAt(c++))>>2,f(3&t)\u003C\u003C4|(ir.charCodeAt(c++))>>4,a(15&i)\u003C\u003C2|(nr.charCodeAt(c++))>>6,h63&n,isNaN(i)?ah64:isNaN(n)&&(h64),C+o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0e)throw{error:\\\MissingMethod\\\,message:\\\UTF8 Module is missing.\\\};if(\\\string\\\!typeof r)return r;rr.replace(/^A-Za-z0-9\\\\+\\\\/\\\\/g,\\\\\\);for(var t,i,n,d,f,a,h\\\\\\,C0;C\u003Cr.length;)to.indexOf(r.charAt(C++))\u003C\u003C2|(do.indexOf(r.charAt(C++)))>>4,i(15&d)\u003C\u003C4|(fo.indexOf(r.charAt(C++)))>>2,n(3&f)\u003C\u003C6|(ao.indexOf(r.charAt(C++))),h+String.fromCharCode(t),64!f&&(h+String.fromCharCode(i)),64!a&&(h+String.fromCharCode(n));return e.decode(h)}}},this,\\\utf8\\\);}).call(exports);\,\type\:\application/javascript\,\title\:\$:/core/modules/utils/base64-utf8/base64-utf8.module.js\,\module-type\:\library\},\$:/core/modules/utils/crypto.js\:{\title\:\$:/core/modules/utils/crypto.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/crypto.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nUtility functions related to crypto.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nLook for an encrypted store area in the text of a TiddlyWiki file\\n*/\\nexports.extractEncryptedStoreArea function(text) {\\n\\tvar encryptedStoreAreaStartMarker \\\\u003Cpre id\\\\\\\encryptedStoreArea\\\\\\\ type\\\\\\\text/plain\\\\\\\ style\\\\\\\display:none;\\\\\\\>\\\,\\n\\t\\tencryptedStoreAreaStart text.indexOf(encryptedStoreAreaStartMarker);\\n\\tif(encryptedStoreAreaStart ! -1) {\\n\\t\\tvar encryptedStoreAreaEnd text.indexOf(\\\\u003C/pre>\\\,encryptedStoreAreaStart);\\n\\t\\tif(encryptedStoreAreaEnd ! -1) {\\n\\t\\t\\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd));\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\\n*/\\nexports.decryptStoreArea function(encryptedStoreArea,password) {\\n\\tvar decryptedText $tw.crypto.decrypt(encryptedStoreArea,password);\\n\\tif(decryptedText) {\\n\\t\\tvar json $tw.utils.parseJSONSafe(decryptedText),\\n\\t\\t\\ttiddlers ;\\n\\t\\tfor(var title in json) {\\n\\t\\t\\tif(title ! \\\$:/isEncrypted\\\) {\\n\\t\\t\\t\\ttiddlers.push(jsontitle);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn tiddlers;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n\\n/*\\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\\ncallback: function(tiddlers) called with the array of decrypted tiddlers\\n\\nThe following configuration settings are supported:\\n\\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\\n*/\\nexports.decryptStoreAreaInteractive function(encryptedStoreArea,callback,options) {\\n\\t// Try to decrypt with the current password\\n\\tvar tiddlers $tw.utils.decryptStoreArea(encryptedStoreArea);\\n\\tif(tiddlers) {\\n\\t\\tcallback(tiddlers);\\n\\t} else {\\n\\t\\t// Prompt for a new password and keep trying\\n\\t\\t$tw.passwordPrompt.createPrompt({\\n\\t\\t\\tserviceName: \\\Enter a password to decrypt the imported TiddlyWiki\\\,\\n\\t\\t\\tnoUserName: true,\\n\\t\\t\\tcanCancel: true,\\n\\t\\t\\tsubmitText: \\\Decrypt\\\,\\n\\t\\t\\tcallback: function(data) {\\n\\t\\t\\t\\t// Exit if the user cancelled\\n\\t\\t\\t\\tif(!data) {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Attempt to decrypt the tiddlers\\n\\t\\t\\t\\tvar tiddlers $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\\n\\t\\t\\t\\tif(tiddlers) {\\n\\t\\t\\t\\t\\tif($tw.config.usePasswordVault) {\\n\\t\\t\\t\\t\\t\\t$tw.crypto.setPassword(data.password);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcallback(tiddlers);\\n\\t\\t\\t\\t\\t// Exit and remove the password prompt\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// We didnt decrypt everything, so continue to prompt for password\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/csv.js\:{\title\:\$:/core/modules/utils/csv.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/csv.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nA barebones CSV parser\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar QUOTE \\\;\\n\\nvar getCellInfo function(text, start, length, SEPARATOR) {\\n\\tvar isCellQuoted text.charAt(start) QUOTE;\\n\\tvar cellStart isCellQuoted ? start + 1 : start;\\n\\t\\n\\tif (text.charAt(i) SEPARATOR) {\\n\\t\\treturn cellStart, cellStart, false;\\n\\t}\\n\\t\\n\\tfor (var i cellStart; i \u003C length; i++) {\\n\\t\\tvar cellCharacter text.charAt(i);\\n\\t\\tvar isEOL cellCharacter \\\\\\\n\\\ || cellCharacter \\\\\\\r\\\;\\n\\t\\t\\n\\t\\tif (isEOL && !isCellQuoted) {\\n\\t\\t\\treturn cellStart, i, false;\\n\\t\\t\\t\\n\\t\\t} else if (cellCharacter SEPARATOR && !isCellQuoted) {\\n\\t\\t\\treturn cellStart, i, false;\\n\\t\\t\\t\\n\\t\\t} else if (cellCharacter QUOTE && isCellQuoted) {\\n\\t\\t\\tvar nextCharacter i + 1 \u003C length ? text.charAt(i + 1) : ;\\n\\t\\t\\tif (nextCharacter ! QUOTE) {\\n\\t\\t\\t\\treturn cellStart, i, true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti++;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t\\n\\treturn cellStart, i, isCellQuoted;\\n}\\n\\t\\nexports.parseCsvString function(text, options) {\\n\\tif (!text) {\\n\\t\\treturn ;\\n\\t}\\n\\t\\n\\toptions options || {};\\n\\tvar SEPARATOR options.separator || \\\,\\\,\\n\\t\\tlength text.length,\\n\\t\\trows ,\\n\\t\\tnextRow ;\\n\\t\\t\\n\\tfor (var i 0; i \u003C length; i++) {\\n\\t\\tvar cellInfo getCellInfo(text, i, length, SEPARATOR);\\n\\t\\tvar cellText text.substring(cellInfo0, cellInfo1);\\n\\t\\tif (cellInfo2) {\\n\\t\\t\\tcellText cellText.replace(/\\\\\\/g, \\\);\\n\\t\\t\\tcellInfo1++;\\n\\t\\t}\\n\\t\\tnextRow.push(cellText);\\n\\t\\t\\n\\t\\ti cellInfo1;\\n\\t\\t\\n\\t\\tvar character text.charAt(i);\\n\\t\\tvar nextCharacter i + 1 \u003C length ? text.charAt(i + 1) : ;\\n\\t\\t\\n\\t\\tif (character \\\\\\\r\\\ || character \\\\\\\n\\\) {\\n\\t\\t\\t// Edge case for empty rows\\n\\t\\t\\tif (nextRow.length 1 && nextRow0 ) {\\n\\t\\t\\t\\tnextRow.length 0;\\n\\t\\t\\t}\\n\\t\\t\\trows.push(nextRow);\\n\\t\\t\\tnextRow ;\\n\\t\\t\\t\\n\\t\\t\\tif (character \\\\\\\r\\\) {\\n\\t\\t\\t\\tvar nextCharacter i + 1 \u003C length ? text.charAt(i + 1) : ;\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tif (nextCharacter \\\\\\\n\\\) {\\n\\t\\t\\t\\t\\ti++;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t\\n\\t// Special case if last cell in last row is an empty cell\\n\\tif (text.charAt(length - 1) SEPARATOR) {\\n\\t\\tnextRow.push(\\\\\\);\\n\\t}\\n\\t\\n\\trows.push(nextRow);\\n\\t\\n\\treturn rows;\\n}\\n\\n/*\\nParse a CSV string with a header row and return an array of hashmaps.\\n*/\\nexports.parseCsvStringWithHeader function(text,options) {\\n\\tvar csv $tw.utils.parseCsvString(text, options);\\n\\tvar headers csv0;\\n\\t\\n\\tcsv csv.slice(1);\\n\\tfor (var i 0; i \u003C csv.length; i++) {\\n\\t\\tvar row csvi;\\n\\t\\tvar rowObject Object.create(null);\\n\\n\\t\\tfor(var columnIndex0; columnIndex\u003Cheaders.length; columnIndex++) {\\n\\t\\t\\tvar columnName headerscolumnIndex;\\n\\t\\t\\tif (columnName) {\\n\\t\\t\\t\\trowObjectcolumnName $tw.utils.trim(rowcolumnIndex || \\\\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tcsvi rowObject;\\n\\t}\\n\\treturn csv;\\n}\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/diff-match-patch/diff_match_patch.js\:{\text\:\(function(){function diff_match_patch(){this.Diff_Timeout1;this.Diff_EditCost4;this.Match_Threshold.5;this.Match_Distance1E3;this.Patch_DeleteThreshold.5;this.Patch_Margin4;this.Match_MaxBits32}var DIFF_DELETE-1,DIFF_INSERT1,DIFF_EQUAL0;\\ndiff_match_patch.prototype.diff_mainfunction(a,b,c,d){\\\undefined\\\typeof d&&(d0>this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(nulla||nullb)throw Error(\\\Null input. (diff_main)\\\);if(ab)return a?DIFF_EQUAL,a:;\\\undefined\\\typeof c&&(c!0);var ec,fthis.diff_commonPrefix(a,b);ca.substring(0,f);aa.substring(f);bb.substring(f);fthis.diff_commonSuffix(a,b);var ga.substring(a.length-f);aa.substring(0,a.length-f);bb.substring(0,b.length-f);athis.diff_compute_(a,\\nb,e,d);c&&a.unshift(DIFF_EQUAL,c);g&&a.push(DIFF_EQUAL,g);this.diff_cleanupMerge(a);return a};\\ndiff_match_patch.prototype.diff_compute_function(a,b,c,d){if(!a)returnDIFF_INSERT,b;if(!b)returnDIFF_DELETE,a;var ea.length>b.length?a:b,fa.length>b.length?b:a,ge.indexOf(f);return-1!g?(cDIFF_INSERT,e.substring(0,g),DIFF_EQUAL,f,DIFF_INSERT,e.substring(g+f.length),a.length>b.length&&(c00c20DIFF_DELETE),c):1f.length?DIFF_DELETE,a,DIFF_INSERT,b:(ethis.diff_halfMatch_(a,b))?(be1,fe3,ae4,ethis.diff_main(e0,e2,c,d),cthis.diff_main(b,f,c,d),e.concat(DIFF_EQUAL,\\na,c)):c&&100\u003Ca.length&&100\u003Cb.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\\ndiff_match_patch.prototype.diff_lineMode_function(a,b,c){var dthis.diff_linesToChars_(a,b);ad.chars1;bd.chars2;dd.lineArray;athis.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push(DIFF_EQUAL,\\\\\\);for(var edb0,f\\\\\\,g\\\\\\;b\u003Ca.length;){switch(ab0){case DIFF_INSERT:e++;g+ab1;break;case DIFF_DELETE:d++;f+ab1;break;case DIFF_EQUAL:if(1\u003Cd&&1\u003Ce){a.splice(b-d-e,d+e);bb-d-e;dthis.diff_main(f,g,!1,c);for(ed.length-1;0\u003Ce;e--)a.splice(b,0,de);b+\\nd.length}de0;gf\\\\\\}b++}a.pop();return a};\\ndiff_match_patch.prototype.diff_bisect_function(a,b,c){for(var da.length,eb.length,fMath.ceil((d+e)/2),g2*f,hArray(g),lArray(g),k0;k\u003Cg;k++)hk-1,lk-1;hf+10;lf+10;kd-e;for(var m0!k%2,p0,x0,w0,q0,t0;t\u003Cf&&!((new Date).getTime()>c);t++){for(var v-t+p;v\u003Ct-x;v+2){var nf+v;var rv-t||v!t&&hn-1\u003Chn+1?hn+1:hn-1+1;for(var yr-v;r\u003Cd&&y\u003Ce&&a.charAt(r)b.charAt(y);)r++,y++;hnr;if(r>d)x+2;else if(y>e)p+2;else if(m&&(nf+k-v,0\u003Cn&&n\u003Cg&&-1!ln)){var ud-ln;if(r>\\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v-t+w;v\u003Ct-q;v+2){nf+v;uv-t||v!t&&ln-1\u003Cln+1?ln+1:ln-1+1;for(ru-v;u\u003Cd&&r\u003Ce&&a.charAt(d-u-1)b.charAt(e-r-1);)u++,r++;lnu;if(u>d)q+2;else if(r>e)w+2;else if(!m&&(nf+k-v,0\u003Cn&&n\u003Cg&&-1!hn&&(rhn,yf+r-n,ud-u,r>u)))return this.diff_bisectSplit_(a,b,r,y,c)}}returnDIFF_DELETE,a,DIFF_INSERT,b};\\ndiff_match_patch.prototype.diff_bisectSplit_function(a,b,c,d,e){var fa.substring(0,c),gb.substring(0,d);aa.substring(c);bb.substring(d);fthis.diff_main(f,g,!1,e);ethis.diff_main(a,b,!1,e);return f.concat(e)};\\ndiff_match_patch.prototype.diff_linesToChars_function(a,b){function c(a){for(var b\\\\\\,c0,f-1,gd.length;f\u003Ca.length-1;){fa.indexOf(\\\\\\\n\\\,c);-1f&&(fa.length-1);var ha.substring(c,f+1);cf+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!eh)?b+String.fromCharCode(eh):(b+String.fromCharCode(g),ehg,dg++h)}return b}var d,e{};d0\\\\\\;var fc(a),gc(b);return{chars1:f,chars2:g,lineArray:d}};\\ndiff_match_patch.prototype.diff_charsToLines_function(a,b){for(var c0;c\u003Ca.length;c++){for(var dac1,e,f0;f\u003Cd.length;f++)efbd.charCodeAt(f);ac1e.join(\\\\\\)}};diff_match_patch.prototype.diff_commonPrefixfunction(a,b){if(!a||!b||a.charAt(0)!b.charAt(0))return 0;for(var c0,dMath.min(a.length,b.length),ed,f0;c\u003Ce;)a.substring(f,e)b.substring(f,e)?fce:de,eMath.floor((d-c)/2+c);return e};\\ndiff_match_patch.prototype.diff_commonSuffixfunction(a,b){if(!a||!b||a.charAt(a.length-1)!b.charAt(b.length-1))return 0;for(var c0,dMath.min(a.length,b.length),ed,f0;c\u003Ce;)a.substring(a.length-e,a.length-f)b.substring(b.length-e,b.length-f)?fce:de,eMath.floor((d-c)/2+c);return e};\\ndiff_match_patch.prototype.diff_commonOverlap_function(a,b){var ca.length,db.length;if(0c||0d)return 0;c>d?aa.substring(c-d):c\u003Cd&&(bb.substring(0,c));cMath.min(c,d);if(ab)return c;d0;for(var e1;;){var fa.substring(c-e);fb.indexOf(f);if(-1f)return d;e+f;if(0f||a.substring(c-e)b.substring(0,e))de,e++}};\\ndiff_match_patch.prototype.diff_halfMatch_function(a,b){function c(a,b,c){for(var da.substring(c,c+Math.floor(a.length/4)),e-1,g\\\\\\,h,k,l,m;-1!(eb.indexOf(d,e+1));){var pf.diff_commonPrefix(a.substring(c),b.substring(e)),uf.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length\u003Cu+p&&(gb.substring(e-u,e)+b.substring(e,e+p),ha.substring(0,c-u),ka.substring(c+p),lb.substring(0,e-u),mb.substring(e+p))}return 2*g.length>a.length?h,k,l,m,g:null}if(0>this.Diff_Timeout)return null;\\nvar da.length>b.length?a:b,ea.length>b.length?b:a;if(4>d.length||2*e.length\u003Cd.length)return null;var fthis,gc(d,e,Math.ceil(d.length/4));dc(d,e,Math.ceil(d.length/2));if(g||d)gd?g?g4.length>d4.length?g:d:d:g;else return null;if(a.length>b.length){dg0;eg1;var hg2;var lg3}else hg0,lg1,dg2,eg3;returnd,e,h,l,g4};\\ndiff_match_patch.prototype.diff_cleanupSemanticfunction(a){for(var b!1,c,d0,enull,f0,g0,h0,l0,k0;f\u003Ca.length;)af0DIFF_EQUAL?(cd++f,gl,hk,kl0,eaf1):(af0DIFF_INSERT?l+af1.length:k+af1.length,e&&e.length\u003CMath.max(g,h)&&e.length\u003CMath.max(l,k)&&(a.splice(cd-1,0,DIFF_DELETE,e),acd-1+10DIFF_INSERT,d--,d--,f0\u003Cd?cd-1:-1,klhg0,enull,b!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f1;f\u003Ca.length;){if(af-10\\nDIFF_DELETE&&af0DIFF_INSERT){baf-11;caf1;dthis.diff_commonOverlap_(b,c);ethis.diff_commonOverlap_(c,b);if(d>e){if(d>b.length/2||d>c.length/2)a.splice(f,0,DIFF_EQUAL,c.substring(0,d)),af-11b.substring(0,b.length-d),af+11c.substring(d),f++}else if(e>b.length/2||e>c.length/2)a.splice(f,0,DIFF_EQUAL,b.substring(0,e)),af-10DIFF_INSERT,af-11c.substring(0,c.length-e),af+10DIFF_DELETE,af+11b.substring(e),f++;f++}f++}};\\ndiff_match_patch.prototype.diff_cleanupSemanticLosslessfunction(a){function b(a,b){if(!a||!b)return 6;var ca.charAt(a.length-1),db.charAt(0),ec.match(diff_match_patch.nonAlphaNumericRegex_),fd.match(diff_match_patch.nonAlphaNumericRegex_),ge&&c.match(diff_match_patch.whitespaceRegex_),hf&&d.match(diff_match_patch.whitespaceRegex_);cg&&c.match(diff_match_patch.linebreakRegex_);dh&&d.match(diff_match_patch.linebreakRegex_);var kc&&a.match(diff_match_patch.blanklineEndRegex_),ld&&b.match(diff_match_patch.blanklineStartRegex_);\\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c1;c\u003Ca.length-1;){if(ac-10DIFF_EQUAL&&ac+10DIFF_EQUAL){var dac-11,eac1,fac+11,gthis.diff_commonSuffix(d,e);if(g){var he.substring(e.length-g);dd.substring(0,d.length-g);eh+e.substring(0,e.length-g);fh+f}gd;he;for(var lf,kb(d,e)+b(e,f);e.charAt(0)f.charAt(0);){d+e.charAt(0);ee.substring(1)+f.charAt(0);ff.substring(1);var mb(d,e)+b(e,f);m>k&&(km,gd,he,lf)}ac-11!g&&(g?ac-11g:(a.splice(c-\\n1,1),c--),ac1h,l?ac+11l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_/^a-zA-Z0-9/;diff_match_patch.whitespaceRegex_/\\\\s/;diff_match_patch.linebreakRegex_/\\\\r\\\\n/;diff_match_patch.blanklineEndRegex_/\\\\n\\\\r?\\\\n$/;diff_match_patch.blanklineStartRegex_/^\\\\r?\\\\n\\\\r?\\\\n/;\\ndiff_match_patch.prototype.diff_cleanupEfficiencyfunction(a){for(var b!1,c,d0,enull,f0,g!1,h!1,l!1,k!1;f\u003Ca.length;)af0DIFF_EQUAL?(af1.length\u003Cthis.Diff_EditCost&&(l||k)?(cd++f,gl,hk,eaf1):(d0,enull),lk!1):(af0DIFF_DELETE?k!0:l!0,e&&(g&&h&&l&&k||e.length\u003Cthis.Diff_EditCost/2&&3g+h+l+k)&&(a.splice(cd-1,0,DIFF_DELETE,e),acd-1+10DIFF_INSERT,d--,enull,g&&h?(lk!0,d0):(d--,f0\u003Cd?cd-1:-1,lk!1),b!0)),f++;b&&this.diff_cleanupMerge(a)};\\ndiff_match_patch.prototype.diff_cleanupMergefunction(a){a.push(DIFF_EQUAL,\\\\\\);for(var b0,c0,d0,e\\\\\\,f\\\\\\,g;b\u003Ca.length;)switch(ab0){case DIFF_INSERT:d++;f+ab1;b++;break;case DIFF_DELETE:c++;e+ab1;b++;break;case DIFF_EQUAL:1\u003Cc+d?(0!c&&0!d&&(gthis.diff_commonPrefix(f,e),0!g&&(0\u003Cb-c-d&&ab-c-d-10DIFF_EQUAL?ab-c-d-11+f.substring(0,g):(a.splice(0,0,DIFF_EQUAL,f.substring(0,g)),b++),ff.substring(g),ee.substring(g)),gthis.diff_commonSuffix(f,e),0!g&&(ab1f.substring(f.length-\\ng)+ab1,ff.substring(0,f.length-g),ee.substring(0,e.length-g))),0c?a.splice(b-d,c+d,DIFF_INSERT,f):0d?a.splice(b-c,c+d,DIFF_DELETE,e):a.splice(b-c-d,c+d,DIFF_DELETE,e,DIFF_INSERT,f),bb-c-d+(c?1:0)+(d?1:0)+1):0!b&&ab-10DIFF_EQUAL?(ab-11+ab1,a.splice(b,1)):b++,cd0,fe\\\\\\}\\\\\\aa.length-11&&a.pop();c!1;for(b1;b\u003Ca.length-1;)ab-10DIFF_EQUAL&&ab+10DIFF_EQUAL&&(ab1.substring(ab1.length-ab-11.length)ab-11?(ab1ab-11+ab1.substring(0,\\nab1.length-ab-11.length),ab+11ab-11+ab+11,a.splice(b-1,1),c!0):ab1.substring(0,ab+11.length)ab+11&&(ab-11+ab+11,ab1ab1.substring(ab+11.length)+ab+11,a.splice(b+1,1),c!0)),b++;c&&this.diff_cleanupMerge(a)};\\ndiff_match_patch.prototype.diff_xIndexfunction(a,b){var c0,d0,e0,f0,g;for(g0;g\u003Ca.length;g++){ag0!DIFF_INSERT&&(c+ag1.length);ag0!DIFF_DELETE&&(d+ag1.length);if(c>b)break;ec;fd}return a.length!g&&ag0DIFF_DELETE?f:f+(b-e)};\\ndiff_match_patch.prototype.diff_prettyHtmlfunction(a){for(var b,c/&/g,d/\u003C/g,e/>/g,f/\\\\n/g,g0;g\u003Ca.length;g++){var hag0,lag1.replace(c,\\\&\\\).replace(d,\\\<\\\).replace(e,\\\>\\\).replace(f,\\\¶\u003Cbr>\\\);switch(h){case DIFF_INSERT:bg\u003Cins style\\\background:#e6ffe6;\\\>+l+\\\\u003C/ins>\\\;break;case DIFF_DELETE:bg\u003Cdel style\\\background:#ffe6e6;\\\>+l+\\\\u003C/del>\\\;break;case DIFF_EQUAL:bg\\\\u003Cspan>\\\+l+\\\\u003C/span>\\\}}return b.join(\\\\\\)};\\ndiff_match_patch.prototype.diff_text1function(a){for(var b,c0;c\u003Ca.length;c++)ac0!DIFF_INSERT&&(bcac1);return b.join(\\\\\\)};diff_match_patch.prototype.diff_text2function(a){for(var b,c0;c\u003Ca.length;c++)ac0!DIFF_DELETE&&(bcac1);return b.join(\\\\\\)};\\ndiff_match_patch.prototype.diff_levenshteinfunction(a){for(var b0,c0,d0,e0;e\u003Ca.length;e++){var fae1;switch(ae0){case DIFF_INSERT:c+f.length;break;case DIFF_DELETE:d+f.length;break;case DIFF_EQUAL:b+Math.max(c,d),dc0}}return b+Math.max(c,d)};\\ndiff_match_patch.prototype.diff_toDeltafunction(a){for(var b,c0;c\u003Ca.length;c++)switch(ac0){case DIFF_INSERT:bc\\\+\\\+encodeURI(ac1);break;case DIFF_DELETE:bc\\\-\\\+ac1.length;break;case DIFF_EQUAL:bc\\\\\\+ac1.length}return b.join(\\\\\\\t\\\).replace(/%20/g,\\\ \\\)};\\ndiff_match_patch.prototype.diff_fromDeltafunction(a,b){for(var c,d0,e0,fb.split(/\\\\t/g),g0;g\u003Cf.length;g++){var hfg.substring(1);switch(fg.charAt(0)){case \\\+\\\:try{cd++DIFF_INSERT,decodeURI(h)}catch(k){throw Error(\\\Illegal escape in diff_fromDelta: \\\+h);}break;case \\\-\\\:case \\\\\\:var lparseInt(h,10);if(isNaN(l)||0>l)throw Error(\\\Invalid number in diff_fromDelta: \\\+h);ha.substring(e,e+l);\\\\\\fg.charAt(0)?cd++DIFF_EQUAL,h:cd++DIFF_DELETE,h;break;default:if(fg)throw Error(\\\Invalid diff operation in diff_fromDelta: \\\+\\nfg);}}if(e!a.length)throw Error(\\\Delta length (\\\+e+\\\) does not equal source text length (\\\+a.length+\\\).\\\);return c};diff_match_patch.prototype.match_mainfunction(a,b,c){if(nulla||nullb||nullc)throw Error(\\\Null input. (match_main)\\\);cMath.max(0,Math.min(c,a.length));return ab?0:a.length?a.substring(c,c+b.length)b?c:this.match_bitap_(a,b,c):-1};\\ndiff_match_patch.prototype.match_bitap_function(a,b,c){function d(a,d){var ea/b.length,gMath.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\\\Pattern too long for this browser.\\\);var ethis.match_alphabet_(b),fthis,gthis.Match_Threshold,ha.indexOf(b,c);-1!h&&(gMath.min(d(0,h),g),ha.lastIndexOf(b,c+b.length),-1!h&&(gMath.min(d(0,h),g)));var l1\u003C\u003Cb.length-1;h-1;for(var k,m,pb.length+a.length,x,w0;w\u003Cb.length;w++){k0;for(mp;k\u003Cm;)d(w,\\nc+m)\u003Cg?km:pm,mMath.floor((p-k)/2+k);pm;kMath.max(1,c-m+1);var qMath.min(c+m,a.length)+b.length;mArray(q+2);for(mq+1(1\u003C\u003Cw)-1;q>k;q--){var tea.charAt(q-1);mq0w?(mq+1\u003C\u003C1|1)&t:(mq+1\u003C\u003C1|1)&t|(xq+1|xq)\u003C\u003C1|1|xq+1;if(mq&l&&(td(w,q-1),t\u003Cg))if(gt,hq-1,h>c)kMath.max(1,2*c-h);else break}if(d(w+1,c)>g)break;xm}return h};\\ndiff_match_patch.prototype.match_alphabet_function(a){for(var b{},c0;c\u003Ca.length;c++)ba.charAt(c)0;for(c0;c\u003Ca.length;c++)ba.charAt(c)|1\u003C\u003Ca.length-c-1;return b};\\ndiff_match_patch.prototype.patch_addContext_function(a,b){if(0!b.length){for(var cb.substring(a.start2,a.start2+a.length1),d0;b.indexOf(c)!b.lastIndexOf(c)&&c.length\u003Cthis.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+this.Patch_Margin,cb.substring(a.start2-d,a.start2+a.length1+d);d+this.Patch_Margin;(cb.substring(a.start2-d,a.start2))&&a.diffs.unshift(DIFF_EQUAL,c);(db.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push(DIFF_EQUAL,d);a.start1-c.length;a.start2-\\nc.length;a.length1+c.length+d.length;a.length2+c.length+d.length}};\\ndiff_match_patch.prototype.patch_makefunction(a,b,c){if(\\\string\\\typeof a&&\\\string\\\typeof b&&\\\undefined\\\typeof c){var da;bthis.diff_main(d,b,!0);2\u003Cb.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\\\object\\\typeof a&&\\\undefined\\\typeof b&&\\\undefined\\\typeof c)ba,dthis.diff_text1(b);else if(\\\string\\\typeof a&&b&&\\\object\\\typeof b&&\\\undefined\\\typeof c)da;else if(\\\string\\\typeof a&&\\\string\\\typeof b&&c&&\\\object\\\typeof c)da,bc;else throw Error(\\\Unknown call format to patch_make.\\\);\\nif(0b.length)return;c;anew diff_match_patch.patch_obj;for(var e0,f0,g0,hd,l0;l\u003Cb.length;l++){var kbl0,mbl1;e||kDIFF_EQUAL||(a.start1f,a.start2g);switch(k){case DIFF_INSERT:a.diffse++bl;a.length2+m.length;dd.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+m.length;a.diffse++bl;dd.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length\u003C2*this.Patch_Margin&&e&&b.length!l+1?(a.diffse++bl,a.length1+m.length,a.length2+m.length):\\nm.length>2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),anew diff_match_patch.patch_obj,e0,hd,fg)}k!DIFF_INSERT&&(f+m.length);k!DIFF_DELETE&&(g+m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\\ndiff_match_patch.prototype.patch_deepCopyfunction(a){for(var b,c0;c\u003Ca.length;c++){var dac,enew diff_match_patch.patch_obj;e.diffs;for(var f0;f\u003Cd.diffs.length;f++)e.diffsfd.diffsf.slice();e.start1d.start1;e.start2d.start2;e.length1d.length1;e.length2d.length2;bce}return b};\\ndiff_match_patch.prototype.patch_applyfunction(a,b){if(0a.length)returnb,;athis.patch_deepCopy(a);var cthis.patch_addPadding(a);bc+b+c;this.patch_splitMax(a);for(var d0,e,f0;f\u003Ca.length;f++){var gaf.start2+d,hthis.diff_text1(af.diffs),l-1;if(h.length>this.Match_MaxBits){var kthis.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!k&&(lthis.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1l||k>l)&&(k-1)}else kthis.match_main(b,h,\\ng);if(-1k)ef!1,d-af.length2-af.length1;else if(ef!0,dk-g,g-1l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),hg)bb.substring(0,k)+this.diff_text2(af.diffs)+b.substring(k+h.length);else if(gthis.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)ef!1;else{this.diff_cleanupSemanticLossless(g);h0;var m;for(l0;l\u003Caf.diffs.length;l++){var paf.diffsl;p0!DIFF_EQUAL&&(mthis.diff_xIndex(g,h));p0\\nDIFF_INSERT?bb.substring(0,k+m)+p1+b.substring(k+m):p0DIFF_DELETE&&(bb.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p1.length)));p0!DIFF_DELETE&&(h+p1.length)}}}bb.substring(c.length,b.length-c.length);returnb,e};\\ndiff_match_patch.prototype.patch_addPaddingfunction(a){for(var bthis.Patch_Margin,c\\\\\\,d1;d\u003Cb;d++)c+String.fromCharCode(d);for(d0;d\u003Ca.length;d++)ad.start1+b,ad.start2+b;da0;var ed.diffs;if(0e.length||e00!DIFF_EQUAL)e.unshift(DIFF_EQUAL,c),d.start1-b,d.start2-b,d.length1+b,d.length2+b;else if(b>e01.length){var fb-e01.length;e01c.substring(e01.length)+e01;d.start1-f;d.start2-f;d.length1+f;d.length2+f}daa.length-1;ed.diffs;0e.length||ee.length-\\n10!DIFF_EQUAL?(e.push(DIFF_EQUAL,c),d.length1+b,d.length2+b):b>ee.length-11.length&&(fb-ee.length-11.length,ee.length-11+c.substring(0,f),d.length1+f,d.length2+f);return c};\\ndiff_match_patch.prototype.patch_splitMaxfunction(a){for(var bthis.Match_MaxBits,c0;c\u003Ca.length;c++)if(!(ac.length1\u003Cb)){var dac;a.splice(c--,1);for(var ed.start1,fd.start2,g\\\\\\;0!d.diffs.length;){var hnew diff_match_patch.patch_obj,l!0;h.start1e-g.length;h.start2f-g.length;\\\\\\!g&&(h.length1h.length2g.length,h.diffs.push(DIFF_EQUAL,g));for(;0!d.diffs.length&&h.length1\u003Cb-this.Patch_Margin;){gd.diffs00;var kd.diffs01;gDIFF_INSERT?(h.length2+k.length,f+k.length,h.diffs.push(d.diffs.shift()),\\nl!1):gDIFF_DELETE&&1h.diffs.length&&h.diffs00DIFF_EQUAL&&k.length>2*b?(h.length1+k.length,e+k.length,l!1,h.diffs.push(g,k),d.diffs.shift()):(kk.substring(0,b-h.length1-this.Patch_Margin),h.length1+k.length,e+k.length,gDIFF_EQUAL?(h.length2+k.length,f+k.length):l!1,h.diffs.push(g,k),kd.diffs01?d.diffs.shift():d.diffs01d.diffs01.substring(k.length))}gthis.diff_text2(h.diffs);gg.substring(g.length-this.Patch_Margin);kthis.diff_text1(d.diffs).substring(0,\\nthis.Patch_Margin);\\\\\\!k&&(h.length1+k.length,h.length2+k.length,0!h.diffs.length&&h.diffsh.diffs.length-10DIFF_EQUAL?h.diffsh.diffs.length-11+k:h.diffs.push(DIFF_EQUAL,k));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toTextfunction(a){for(var b,c0;c\u003Ca.length;c++)bcac;return b.join(\\\\\\)};\\ndiff_match_patch.prototype.patch_fromTextfunction(a){var b;if(!a)return b;aa.split(\\\\\\\n\\\);for(var c0,d/^@@ -(\\\\d+),?(\\\\d*) \\\\+(\\\\d+),?(\\\\d*) @@$/;c\u003Ca.length;){var eac.match(d);if(!e)throw Error(\\\Invalid patch string: \\\+ac);var fnew diff_match_patch.patch_obj;b.push(f);f.start1parseInt(e1,10);\\\\\\e2?(f.start1--,f.length11):\\\0\\\e2?f.length10:(f.start1--,f.length1parseInt(e2,10));f.start2parseInt(e3,10);\\\\\\e4?(f.start2--,f.length21):\\\0\\\e4?f.length20:(f.start2--,f.length2\\nparseInt(e4,10));for(c++;c\u003Ca.length;){eac.charAt(0);try{var gdecodeURI(ac.substring(1))}catch(h){throw Error(\\\Illegal escape in patch_fromText: \\\+g);}if(\\\-\\\e)f.diffs.push(DIFF_DELETE,g);else if(\\\+\\\e)f.diffs.push(DIFF_INSERT,g);else if(\\\ \\\e)f.diffs.push(DIFF_EQUAL,g);else if(\\\@\\\e)break;else if(\\\\\\!e)throw Error(Invalid patch mode \\\+e+\\\ in: +g);c++}}return b};diff_match_patch.patch_objfunction(){this.diffs;this.start2this.start1null;this.length2this.length10};\\ndiff_match_patch.patch_obj.prototype.toStringfunction(){for(var a\\\@@ -\\\+(0this.length1?this.start1+\\\,0\\\:1this.length1?this.start1+1:this.start1+1+\\\,\\\+this.length1)+\\\ +\\\+(0this.length2?this.start2+\\\,0\\\:1this.length2?this.start2+1:this.start2+1+\\\,\\\+this.length2)+\\\ @@\\\\n\\\,b,c0;c\u003Cthis.diffs.length;c++){switch(this.diffsc0){case DIFF_INSERT:b\\\+\\\;break;case DIFF_DELETE:b\\\-\\\;break;case DIFF_EQUAL:b\\\ \\\}ac+1b+encodeURI(this.diffsc1)+\\\\\\\n\\\}return a.join(\\\\\\).replace(/%20/g,\\\ \\\)};\\nthis.diff_match_patchdiff_match_patch;this.DIFF_DELETEDIFF_DELETE;this.DIFF_INSERTDIFF_INSERT;this.DIFF_EQUALDIFF_EQUAL;\\n}).call(exports);\,\type\:\application/javascript\,\title\:\$:/core/modules/utils/diff-match-patch/diff_match_patch.js\,\module-type\:\library\},\$:/core/modules/utils/dom/animations/slide.js\:{\title\:\$:/core/modules/utils/dom/animations/slide.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\\ntype: application/javascript\\nmodule-type: animation\\n\\nA simple slide animation that varies the height of the element\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction slideOpen(domNode,options) {\\n\\toptions options || {};\\n\\tvar duration options.duration || $tw.utils.getAnimationDuration();\\n\\t// Get the current height of the domNode\\n\\tvar computedStyle window.getComputedStyle(domNode),\\n\\t\\tcurrMarginBottom parseInt(computedStyle.marginBottom,10),\\n\\t\\tcurrMarginTop parseInt(computedStyle.marginTop,10),\\n\\t\\tcurrPaddingBottom parseInt(computedStyle.paddingBottom,10),\\n\\t\\tcurrPaddingTop parseInt(computedStyle.paddingTop,10),\\n\\t\\tcurrHeight domNode.offsetHeight;\\n\\t// Reset the margin once the transition is over\\n\\tsetTimeout(function() {\\n\\t\\t$tw.utils.setStyle(domNode,\\n\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t{marginBottom: \\\\\\},\\n\\t\\t\\t{marginTop: \\\\\\},\\n\\t\\t\\t{paddingBottom: \\\\\\},\\n\\t\\t\\t{paddingTop: \\\\\\},\\n\\t\\t\\t{height: \\\auto\\\},\\n\\t\\t\\t{opacity: \\\\\\}\\n\\t\\t);\\n\\t\\tif(options.callback) {\\n\\t\\t\\toptions.callback();\\n\\t\\t}\\n\\t},duration);\\n\\t// Set up the initial position of the element\\n\\t$tw.utils.setStyle(domNode,\\n\\t\\t{transition: \\\none\\\},\\n\\t\\t{marginTop: \\\0px\\\},\\n\\t\\t{marginBottom: \\\0px\\\},\\n\\t\\t{paddingTop: \\\0px\\\},\\n\\t\\t{paddingBottom: \\\0px\\\},\\n\\t\\t{height: \\\0px\\\},\\n\\t\\t{opacity: \\\0\\\}\\n\\t);\\n\\t$tw.utils.forceLayout(domNode);\\n\\t// Transition to the final position\\n\\t$tw.utils.setStyle(domNode,\\n\\t\\t{transition: \\\margin-top \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\margin-bottom \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\padding-top \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\padding-bottom \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\height \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\opacity \\\ + duration + \\\ms ease-in-out\\\},\\n\\t\\t{marginBottom: currMarginBottom + \\\px\\\},\\n\\t\\t{marginTop: currMarginTop + \\\px\\\},\\n\\t\\t{paddingBottom: currPaddingBottom + \\\px\\\},\\n\\t\\t{paddingTop: currPaddingTop + \\\px\\\},\\n\\t\\t{height: currHeight + \\\px\\\},\\n\\t\\t{opacity: \\\1\\\}\\n\\t);\\n}\\n\\nfunction slideClosed(domNode,options) {\\n\\toptions options || {};\\n\\tvar duration options.duration || $tw.utils.getAnimationDuration(),\\n\\t\\tcurrHeight domNode.offsetHeight;\\n\\t// Clear the properties weve set when the animation is over\\n\\tsetTimeout(function() {\\n\\t\\t$tw.utils.setStyle(domNode,\\n\\t\\t\\t{transition: \\\none\\\},\\n\\t\\t\\t{marginBottom: \\\\\\},\\n\\t\\t\\t{marginTop: \\\\\\},\\n\\t\\t\\t{paddingBottom: \\\\\\},\\n\\t\\t\\t{paddingTop: \\\\\\},\\n\\t\\t\\t{height: \\\auto\\\},\\n\\t\\t\\t{opacity: \\\\\\}\\n\\t\\t);\\n\\t\\tif(options.callback) {\\n\\t\\t\\toptions.callback();\\n\\t\\t}\\n\\t},duration);\\n\\t// Set up the initial position of the element\\n\\t$tw.utils.setStyle(domNode,\\n\\t\\t{height: currHeight + \\\px\\\},\\n\\t\\t{opacity: \\\1\\\}\\n\\t);\\n\\t$tw.utils.forceLayout(domNode);\\n\\t// Transition to the final position\\n\\t$tw.utils.setStyle(domNode,\\n\\t\\t{transition: \\\margin-top \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\margin-bottom \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\padding-top \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\padding-bottom \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\height \\\ + duration + \\\ms ease-in-out, \\\ +\\n\\t\\t\\t\\t\\t\\\opacity \\\ + duration + \\\ms ease-in-out\\\},\\n\\t\\t{marginTop: \\\0px\\\},\\n\\t\\t{marginBottom: \\\0px\\\},\\n\\t\\t{paddingTop: \\\0px\\\},\\n\\t\\t{paddingBottom: \\\0px\\\},\\n\\t\\t{height: \\\0px\\\},\\n\\t\\t{opacity: \\\0\\\}\\n\\t);\\n}\\n\\nexports.slide {\\n\\topen: slideOpen,\\n\\tclose: slideClosed\\n};\\n\,\type\:\application/javascript\,\module-type\:\animation\},\$:/core/modules/utils/dom/animator.js\:{\title\:\$:/core/modules/utils/dom/animator.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/animator.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nOrchestrates animations and transitions\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction Animator() {\\n\\t// Get the registered animation modules\\n\\tthis.animations {};\\n\\t$tw.modules.applyMethods(\\\animation\\\,this.animations);\\n}\\n\\nAnimator.prototype.perform function(type,domNode,options) {\\n\\toptions options || {};\\n\\t// Find an animation that can handle this type\\n\\tvar chosenAnimation;\\n\\t$tw.utils.each(this.animations,function(animation,name) {\\n\\t\\tif($tw.utils.hop(animation,type)) {\\n\\t\\t\\tchosenAnimation animationtype;\\n\\t\\t}\\n\\t});\\n\\tif(!chosenAnimation) {\\n\\t\\tchosenAnimation function(domNode,options) {\\n\\t\\t\\tif(options.callback) {\\n\\t\\t\\t\\toptions.callback();\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n\\t// Call the animation\\n\\tchosenAnimation(domNode,options);\\n};\\n\\nexports.Animator Animator;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/browser.js\:{\title\:\$:/core/modules/utils/dom/browser.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/browser.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nBrowser feature detection\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nSet style properties of an element\\n\\telement: dom node\\n\\tstyles: ordered array of {name: value} pairs\\n*/\\nexports.setStyle function(element,styles) {\\n\\tif(element.nodeType 1) { // Element.ELEMENT_NODE\\n\\t\\tfor(var t0; t\u003Cstyles.length; t++) {\\n\\t\\t\\tfor(var styleName in stylest) {\\n\\t\\t\\t\\telement.style$tw.utils.convertStyleNameToPropertyName(styleName) styleststyleName;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\\n\\t\\\background-color\\\ --> \\\backgroundColor\\\\\n\\t\\\transition\\\ --> \\\webkitTransition\\\\\n*/\\n\\nvar styleNameCache {}; // Well cache the style name conversions\\n\\nexports.convertStyleNameToPropertyName function(styleName) {\\n\\t// Return from the cache if we can\\n\\tif(styleNameCachestyleName) {\\n\\t\\treturn styleNameCachestyleName;\\n\\t}\\n\\t// Convert it by first removing any hyphens\\n\\tvar propertyName $tw.utils.unHyphenateCss(styleName);\\n\\t// Then check if it needs a prefix\\n\\tif($tw.browser && document.body.stylepropertyName undefined) {\\n\\t\\tvar prefixes \\\O\\\,\\\MS\\\,\\\Moz\\\,\\\webkit\\\;\\n\\t\\tfor(var t0; t\u003Cprefixes.length; t++) {\\n\\t\\t\\tvar prefixedName prefixest + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\\n\\t\\t\\tif(document.body.styleprefixedName ! undefined) {\\n\\t\\t\\t\\tpropertyName prefixedName;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Put it in the cache too\\n\\tstyleNameCachestyleName propertyName;\\n\\treturn propertyName;\\n};\\n\\n/*\\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\\n\\t\\\backgroundColor\\\ --> \\\background-color\\\\\n\\t\\\webkitTransform\\\ --> \\\-webkit-transform\\\\\n*/\\nexports.convertPropertyNameToStyleName function(propertyName) {\\n\\t// Rehyphenate the name\\n\\tvar styleName $tw.utils.hyphenateCss(propertyName);\\n\\t// If theres a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\\n\\tif(styleName.indexOf(\\\webkit\\\) 0) {\\n\\t\\tstyleName \\\-\\\ + styleName;\\n\\t} else if(styleName.indexOf(\\\-m-s\\\) 0) {\\n\\t\\tstyleName \\\-ms\\\ + styleName.substr(4);\\n\\t}\\n\\treturn styleName;\\n};\\n\\n/*\\nRound trip a stylename to a property name and back again. For example:\\n\\t\\\transform\\\ --> \\\webkitTransform\\\ --> \\\-webkit-transform\\\\\n*/\\nexports.roundTripPropertyName function(propertyName) {\\n\\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\\n};\\n\\n/*\\nConverts a standard event name into the local browser specific equivalent. For example:\\n\\t\\\animationEnd\\\ --> \\\webkitAnimationEnd\\\\\n*/\\n\\nvar eventNameCache {}; // Well cache the conversions\\n\\nvar eventNameMappings {\\n\\t\\\transitionEnd\\\: {\\n\\t\\tcorrespondingCssProperty: \\\transition\\\,\\n\\t\\tmappings: {\\n\\t\\t\\ttransition: \\\transitionend\\\,\\n\\t\\t\\tOTransition: \\\oTransitionEnd\\\,\\n\\t\\t\\tMSTransition: \\\msTransitionEnd\\\,\\n\\t\\t\\tMozTransition: \\\transitionend\\\,\\n\\t\\t\\twebkitTransition: \\\webkitTransitionEnd\\\\\n\\t\\t}\\n\\t},\\n\\t\\\animationEnd\\\: {\\n\\t\\tcorrespondingCssProperty: \\\animation\\\,\\n\\t\\tmappings: {\\n\\t\\t\\tanimation: \\\animationend\\\,\\n\\t\\t\\tOAnimation: \\\oAnimationEnd\\\,\\n\\t\\t\\tMSAnimation: \\\msAnimationEnd\\\,\\n\\t\\t\\tMozAnimation: \\\animationend\\\,\\n\\t\\t\\twebkitAnimation: \\\webkitAnimationEnd\\\\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.convertEventName function(eventName) {\\n\\tif(eventNameCacheeventName) {\\n\\t\\treturn eventNameCacheeventName;\\n\\t}\\n\\tvar newEventName eventName,\\n\\t\\tmappings eventNameMappingseventName;\\n\\tif(mappings) {\\n\\t\\tvar convertedProperty $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\\n\\t\\tif(mappings.mappingsconvertedProperty) {\\n\\t\\t\\tnewEventName mappings.mappingsconvertedProperty;\\n\\t\\t}\\n\\t}\\n\\t// Put it in the cache too\\n\\teventNameCacheeventName newEventName;\\n\\treturn newEventName;\\n};\\n\\n/*\\nReturn the names of the fullscreen APIs\\n*/\\nexports.getFullScreenApis function() {\\n\\tvar d document,\\n\\t\\tdb d.body,\\n\\t\\tresult {\\n\\t\\t\\\_requestFullscreen\\\: db.webkitRequestFullscreen ! undefined ? \\\webkitRequestFullscreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\tdb.mozRequestFullScreen ! undefined ? \\\mozRequestFullScreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\tdb.msRequestFullscreen ! undefined ? \\\msRequestFullscreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\tdb.requestFullscreen ! undefined ? \\\requestFullscreen\\\ : \\\\\\,\\n\\t\\t\\\_exitFullscreen\\\: d.webkitExitFullscreen ! undefined ? \\\webkitExitFullscreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.mozCancelFullScreen ! undefined ? \\\mozCancelFullScreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.msExitFullscreen ! undefined ? \\\msExitFullscreen\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.exitFullscreen ! undefined ? \\\exitFullscreen\\\ : \\\\\\,\\n\\t\\t\\\_fullscreenElement\\\: d.webkitFullscreenElement ! undefined ? \\\webkitFullscreenElement\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.mozFullScreenElement ! undefined ? \\\mozFullScreenElement\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.msFullscreenElement ! undefined ? \\\msFullscreenElement\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.fullscreenElement ! undefined ? \\\fullscreenElement\\\ : \\\\\\,\\n\\t\\t\\\_fullscreenChange\\\: d.webkitFullscreenElement ! undefined ? \\\webkitfullscreenchange\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.mozFullScreenElement ! undefined ? \\\mozfullscreenchange\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.msFullscreenElement ! undefined ? \\\MSFullscreenChange\\\ :\\n\\t\\t\\t\\t\\t\\t\\td.fullscreenElement ! undefined ? \\\fullscreenchange\\\ : \\\\\\\\n\\t};\\n\\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\\n\\t\\treturn null;\\n\\t} else {\\n\\t\\treturn result;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/csscolorparser.js\:{\title\:\$:/core/modules/utils/dom/csscolorparser.js\,\text\:\// (c) Dean McNamee \u003Cdean@gmail.com>, 2012.\\n//\\n// https://github.com/deanm/css-color-parser-js\\n//\\n// Permission is hereby granted, free of charge, to any person obtaining a copy\\n// of this software and associated documentation files (the \\\Software\\\), to\\n// deal in the Software without restriction, including without limitation the\\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n// sell copies of the Software, and to permit persons to whom the Software is\\n// furnished to do so, subject to the following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included in\\n// all copies or substantial portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n// IN THE SOFTWARE.\\n\\n// http://www.w3.org/TR/css3-color/\\nvar kCSSColorTable {\\n \\\transparent\\\: 0,0,0,0, \\\aliceblue\\\: 240,248,255,1,\\n \\\antiquewhite\\\: 250,235,215,1, \\\aqua\\\: 0,255,255,1,\\n \\\aquamarine\\\: 127,255,212,1, \\\azure\\\: 240,255,255,1,\\n \\\beige\\\: 245,245,220,1, \\\bisque\\\: 255,228,196,1,\\n \\\black\\\: 0,0,0,1, \\\blanchedalmond\\\: 255,235,205,1,\\n \\\blue\\\: 0,0,255,1, \\\blueviolet\\\: 138,43,226,1,\\n \\\brown\\\: 165,42,42,1, \\\burlywood\\\: 222,184,135,1,\\n \\\cadetblue\\\: 95,158,160,1, \\\chartreuse\\\: 127,255,0,1,\\n \\\chocolate\\\: 210,105,30,1, \\\coral\\\: 255,127,80,1,\\n \\\cornflowerblue\\\: 100,149,237,1, \\\cornsilk\\\: 255,248,220,1,\\n \\\crimson\\\: 220,20,60,1, \\\cyan\\\: 0,255,255,1,\\n \\\darkblue\\\: 0,0,139,1, \\\darkcyan\\\: 0,139,139,1,\\n \\\darkgoldenrod\\\: 184,134,11,1, \\\darkgray\\\: 169,169,169,1,\\n \\\darkgreen\\\: 0,100,0,1, \\\darkgrey\\\: 169,169,169,1,\\n \\\darkkhaki\\\: 189,183,107,1, \\\darkmagenta\\\: 139,0,139,1,\\n \\\darkolivegreen\\\: 85,107,47,1, \\\darkorange\\\: 255,140,0,1,\\n \\\darkorchid\\\: 153,50,204,1, \\\darkred\\\: 139,0,0,1,\\n \\\darksalmon\\\: 233,150,122,1, \\\darkseagreen\\\: 143,188,143,1,\\n \\\darkslateblue\\\: 72,61,139,1, \\\darkslategray\\\: 47,79,79,1,\\n \\\darkslategrey\\\: 47,79,79,1, \\\darkturquoise\\\: 0,206,209,1,\\n \\\darkviolet\\\: 148,0,211,1, \\\deeppink\\\: 255,20,147,1,\\n \\\deepskyblue\\\: 0,191,255,1, \\\dimgray\\\: 105,105,105,1,\\n \\\dimgrey\\\: 105,105,105,1, \\\dodgerblue\\\: 30,144,255,1,\\n \\\firebrick\\\: 178,34,34,1, \\\floralwhite\\\: 255,250,240,1,\\n \\\forestgreen\\\: 34,139,34,1, \\\fuchsia\\\: 255,0,255,1,\\n \\\gainsboro\\\: 220,220,220,1, \\\ghostwhite\\\: 248,248,255,1,\\n \\\gold\\\: 255,215,0,1, \\\goldenrod\\\: 218,165,32,1,\\n \\\gray\\\: 128,128,128,1, \\\green\\\: 0,128,0,1,\\n \\\greenyellow\\\: 173,255,47,1, \\\grey\\\: 128,128,128,1,\\n \\\honeydew\\\: 240,255,240,1, \\\hotpink\\\: 255,105,180,1,\\n \\\indianred\\\: 205,92,92,1, \\\indigo\\\: 75,0,130,1,\\n \\\ivory\\\: 255,255,240,1, \\\khaki\\\: 240,230,140,1,\\n \\\lavender\\\: 230,230,250,1, \\\lavenderblush\\\: 255,240,245,1,\\n \\\lawngreen\\\: 124,252,0,1, \\\lemonchiffon\\\: 255,250,205,1,\\n \\\lightblue\\\: 173,216,230,1, \\\lightcoral\\\: 240,128,128,1,\\n \\\lightcyan\\\: 224,255,255,1, \\\lightgoldenrodyellow\\\: 250,250,210,1,\\n \\\lightgray\\\: 211,211,211,1, \\\lightgreen\\\: 144,238,144,1,\\n \\\lightgrey\\\: 211,211,211,1, \\\lightpink\\\: 255,182,193,1,\\n \\\lightsalmon\\\: 255,160,122,1, \\\lightseagreen\\\: 32,178,170,1,\\n \\\lightskyblue\\\: 135,206,250,1, \\\lightslategray\\\: 119,136,153,1,\\n \\\lightslategrey\\\: 119,136,153,1, \\\lightsteelblue\\\: 176,196,222,1,\\n \\\lightyellow\\\: 255,255,224,1, \\\lime\\\: 0,255,0,1,\\n \\\limegreen\\\: 50,205,50,1, \\\linen\\\: 250,240,230,1,\\n \\\magenta\\\: 255,0,255,1, \\\maroon\\\: 128,0,0,1,\\n \\\mediumaquamarine\\\: 102,205,170,1, \\\mediumblue\\\: 0,0,205,1,\\n \\\mediumorchid\\\: 186,85,211,1, \\\mediumpurple\\\: 147,112,219,1,\\n \\\mediumseagreen\\\: 60,179,113,1, \\\mediumslateblue\\\: 123,104,238,1,\\n \\\mediumspringgreen\\\: 0,250,154,1, \\\mediumturquoise\\\: 72,209,204,1,\\n \\\mediumvioletred\\\: 199,21,133,1, \\\midnightblue\\\: 25,25,112,1,\\n \\\mintcream\\\: 245,255,250,1, \\\mistyrose\\\: 255,228,225,1,\\n \\\moccasin\\\: 255,228,181,1, \\\navajowhite\\\: 255,222,173,1,\\n \\\navy\\\: 0,0,128,1, \\\oldlace\\\: 253,245,230,1,\\n \\\olive\\\: 128,128,0,1, \\\olivedrab\\\: 107,142,35,1,\\n \\\orange\\\: 255,165,0,1, \\\orangered\\\: 255,69,0,1,\\n \\\orchid\\\: 218,112,214,1, \\\palegoldenrod\\\: 238,232,170,1,\\n \\\palegreen\\\: 152,251,152,1, \\\paleturquoise\\\: 175,238,238,1,\\n \\\palevioletred\\\: 219,112,147,1, \\\papayawhip\\\: 255,239,213,1,\\n \\\peachpuff\\\: 255,218,185,1, \\\peru\\\: 205,133,63,1,\\n \\\pink\\\: 255,192,203,1, \\\plum\\\: 221,160,221,1,\\n \\\powderblue\\\: 176,224,230,1, \\\purple\\\: 128,0,128,1,\\n \\\red\\\: 255,0,0,1, \\\rosybrown\\\: 188,143,143,1,\\n \\\royalblue\\\: 65,105,225,1, \\\saddlebrown\\\: 139,69,19,1,\\n \\\salmon\\\: 250,128,114,1, \\\sandybrown\\\: 244,164,96,1,\\n \\\seagreen\\\: 46,139,87,1, \\\seashell\\\: 255,245,238,1,\\n \\\sienna\\\: 160,82,45,1, \\\silver\\\: 192,192,192,1,\\n \\\skyblue\\\: 135,206,235,1, \\\slateblue\\\: 106,90,205,1,\\n \\\slategray\\\: 112,128,144,1, \\\slategrey\\\: 112,128,144,1,\\n \\\snow\\\: 255,250,250,1, \\\springgreen\\\: 0,255,127,1,\\n \\\steelblue\\\: 70,130,180,1, \\\tan\\\: 210,180,140,1,\\n \\\teal\\\: 0,128,128,1, \\\thistle\\\: 216,191,216,1,\\n \\\tomato\\\: 255,99,71,1, \\\turquoise\\\: 64,224,208,1,\\n \\\violet\\\: 238,130,238,1, \\\wheat\\\: 245,222,179,1,\\n \\\white\\\: 255,255,255,1, \\\whitesmoke\\\: 245,245,245,1,\\n \\\yellow\\\: 255,255,0,1, \\\yellowgreen\\\: 154,205,50,1}\\n\\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\\n i Math.round(i); // Seems to be what Chrome does (vs truncation).\\n return i \u003C 0 ? 0 : i > 255 ? 255 : i;\\n}\\n\\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\\n return f \u003C 0 ? 0 : f > 1 ? 1 : f;\\n}\\n\\nfunction parse_css_int(str) { // int or percentage.\\n if (strstr.length - 1 %)\\n return clamp_css_byte(parseFloat(str) / 100 * 255);\\n return clamp_css_byte(parseInt(str));\\n}\\n\\nfunction parse_css_float(str) { // float or percentage.\\n if (strstr.length - 1 %)\\n return clamp_css_float(parseFloat(str) / 100);\\n return clamp_css_float(parseFloat(str));\\n}\\n\\nfunction css_hue_to_rgb(m1, m2, h) {\\n if (h \u003C 0) h + 1;\\n else if (h > 1) h - 1;\\n\\n if (h * 6 \u003C 1) return m1 + (m2 - m1) * h * 6;\\n if (h * 2 \u003C 1) return m2;\\n if (h * 3 \u003C 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\\n return m1;\\n}\\n\\nfunction parseCSSColor(css_str) {\\n // Remove all whitespace, not compliant, but should just be more accepting.\\n var str css_str.replace(/ /g, ).toLowerCase();\\n\\n // Color keywords (and transparent) lookup.\\n if (str in kCSSColorTable) return kCSSColorTablestr.slice(); // dup.\\n\\n // #abc and #abc123 syntax.\\n if (str0 #) {\\n if (str.length 4) {\\n var iv parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\\n if (!(iv > 0 && iv \u003C 0xfff)) return null; // Covers NaN.\\n return ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\\n (iv & 0xf) | ((iv & 0xf) \u003C\u003C 4),\\n 1;\\n } else if (str.length 7) {\\n var iv parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\\n if (!(iv > 0 && iv \u003C 0xffffff)) return null; // Covers NaN.\\n return (iv & 0xff0000) >> 16,\\n (iv & 0xff00) >> 8,\\n iv & 0xff,\\n 1;\\n }\\n\\n return null;\\n }\\n\\n var op str.indexOf((), ep str.indexOf());\\n if (op ! -1 && ep + 1 str.length) {\\n var fname str.substr(0, op);\\n var params str.substr(op+1, ep-(op+1)).split(,);\\n var alpha 1; // To allow case fallthrough.\\n switch (fname) {\\n case rgba:\\n if (params.length ! 4) return null;\\n alpha parse_css_float(params.pop());\\n // Fall through.\\n case rgb:\\n if (params.length ! 3) return null;\\n return parse_css_int(params0),\\n parse_css_int(params1),\\n parse_css_int(params2),\\n alpha;\\n case hsla:\\n if (params.length ! 4) return null;\\n alpha parse_css_float(params.pop());\\n // Fall through.\\n case hsl:\\n if (params.length ! 3) return null;\\n var h (((parseFloat(params0) % 360) + 360) % 360) / 360; // 0 .. 1\\n // NOTE(deanm): According to the CSS spec s/l should only be\\n // percentages, but we dont bother and let float or percentage.\\n var s parse_css_float(params1);\\n var l parse_css_float(params2);\\n var m2 l \u003C 0.5 ? l * (s + 1) : l + s - l * s;\\n var m1 l * 2 - m2;\\n return clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\\n alpha;\\n default:\\n return null;\\n }\\n }\\n\\n return null;\\n}\\n\\ntry { exports.parseCSSColor parseCSSColor } catch(e) { }\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom.js\:{\title\:\$:/core/modules/utils/dom.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nVarious static DOM-related utility functions.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Popup require(\\\$:/core/modules/utils/dom/popup.js\\\);\\n\\n/*\\nDetermines whether element a contains element b\\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\\n*/\\nexports.domContains function(a,b) {\\n\\treturn a.contains ?\\n\\t\\ta ! b && a.contains(b) :\\n\\t\\t!!(a.compareDocumentPosition(b) & 16);\\n};\\n\\nexports.domMatchesSelector function(node,selector) {\\n\\treturn node.matches ? node.matches(selector) : node.msMatchesSelector(selector);\\n};\\n\\n/*\\nSelect text in a an input or textarea (setSelectionRange crashes on certain input types)\\n*/\\nexports.setSelectionRangeSafe function(node,start,end,direction) {\\n\\ttry {\\n\\t\\tnode.setSelectionRange(start,end,direction);\\n\\t} catch(e) {\\n\\t\\tnode.select();\\n\\t}\\n};\\n\\n/*\\nSelect the text in an input or textarea by position\\n*/\\nexports.setSelectionByPosition function(node,selectFromStart,selectFromEnd) {\\n\\t$tw.utils.setSelectionRangeSafe(node,selectFromStart,node.value.length - selectFromEnd);\\n};\\n\\nexports.removeChildren function(node) {\\n\\twhile(node.hasChildNodes()) {\\n\\t\\tnode.removeChild(node.firstChild);\\n\\t}\\n};\\n\\nexports.hasClass function(el,className) {\\n\\treturn el && el.hasAttribute && el.hasAttribute(\\\class\\\) && el.getAttribute(\\\class\\\).split(\\\ \\\).indexOf(className) ! -1;\\n};\\n\\nexports.addClass function(el,className) {\\n\\tvar c (el.getAttribute(\\\class\\\) || \\\\\\).split(\\\ \\\);\\n\\tif(c.indexOf(className) -1) {\\n\\t\\tc.push(className);\\n\\t\\tel.setAttribute(\\\class\\\,c.join(\\\ \\\));\\n\\t}\\n};\\n\\nexports.removeClass function(el,className) {\\n\\tvar c (el.getAttribute(\\\class\\\) || \\\\\\).split(\\\ \\\),\\n\\t\\tp c.indexOf(className);\\n\\tif(p ! -1) {\\n\\t\\tc.splice(p,1);\\n\\t\\tel.setAttribute(\\\class\\\,c.join(\\\ \\\));\\n\\t}\\n};\\n\\nexports.toggleClass function(el,className,status) {\\n\\tif(status undefined) {\\n\\t\\tstatus !exports.hasClass(el,className);\\n\\t}\\n\\tif(status) {\\n\\t\\texports.addClass(el,className);\\n\\t} else {\\n\\t\\texports.removeClass(el,className);\\n\\t}\\n};\\n\\n/*\\nGet the first parent element that has scrollbars or use the body as fallback.\\n*/\\nexports.getScrollContainer function(el) {\\n\\tvar doc el.ownerDocument;\\n\\twhile(el.parentNode) {\\n\\t\\tel el.parentNode;\\n\\t\\tif(el.scrollTop) {\\n\\t\\t\\treturn el;\\n\\t\\t}\\n\\t}\\n\\treturn doc.body;\\n};\\n\\n/*\\nGet the scroll position of the viewport\\nReturns:\\n\\t{\\n\\t\\tx: horizontal scroll position in pixels,\\n\\t\\ty: vertical scroll position in pixels\\n\\t}\\n*/\\nexports.getScrollPosition function(srcWindow) {\\n\\tvar scrollWindow srcWindow || window;\\n\\tif(\\\scrollX\\\ in scrollWindow) {\\n\\t\\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\\n\\t} else {\\n\\t\\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\\n\\t}\\n};\\n\\n/*\\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\\n*/\\nexports.resizeTextAreaToFit function(domNode,minHeight) {\\n\\t// Get the scroll container and register the current scroll position\\n\\tvar container $tw.utils.getScrollContainer(domNode),\\n\\t\\tscrollTop container.scrollTop;\\n // Measure the specified minimum height\\n\\tdomNode.style.height minHeight;\\n\\tvar measuredHeight domNode.offsetHeight || parseInt(minHeight,10);\\n\\t// Set its height to auto so that it snaps to the correct height\\n\\tdomNode.style.height \\\auto\\\;\\n\\t// Calculate the revised height\\n\\tvar newHeight Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\\n\\t// Only try to change the height if it has changed\\n\\tif(newHeight ! domNode.offsetHeight) {\\n\\t\\tdomNode.style.height newHeight + \\\px\\\;\\n\\t\\t// Make sure that the dimensions of the textarea are recalculated\\n\\t\\t$tw.utils.forceLayout(domNode);\\n\\t\\t// Set the container to the position we registered at the beginning\\n\\t\\tcontainer.scrollTop scrollTop;\\n\\t}\\n\\treturn newHeight;\\n};\\n\\n/*\\nGets the bounding rectangle of an element in absolute page coordinates\\n*/\\nexports.getBoundingPageRect function(element) {\\n\\tvar scrollPos $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\\n\\t\\tclientRect element.getBoundingClientRect();\\n\\treturn {\\n\\t\\tleft: clientRect.left + scrollPos.x,\\n\\t\\twidth: clientRect.width,\\n\\t\\tright: clientRect.right + scrollPos.x,\\n\\t\\ttop: clientRect.top + scrollPos.y,\\n\\t\\theight: clientRect.height,\\n\\t\\tbottom: clientRect.bottom + scrollPos.y\\n\\t};\\n};\\n\\n/*\\nSaves a named password in the browser\\n*/\\nexports.savePassword function(name,password) {\\n\\tvar done false;\\n\\ttry {\\n\\t\\twindow.localStorage.setItem(\\\tw5-password-\\\ + name,password);\\n\\t\\tdone true;\\n\\t} catch(e) {\\n\\t}\\n\\tif(!done) {\\n\\t\\t$tw.savedPasswords $tw.savedPasswords || Object.create(null);\\n\\t\\t$tw.savedPasswordsname password;\\n\\t}\\n};\\n\\n/*\\nRetrieve a named password from the browser\\n*/\\nexports.getPassword function(name) {\\n\\tvar value;\\n\\ttry {\\n\\t\\tvalue window.localStorage.getItem(\\\tw5-password-\\\ + name);\\n\\t} catch(e) {\\n\\t}\\n\\tif(value ! undefined) {\\n\\t\\treturn value;\\n\\t} else {\\n\\t\\treturn ($tw.savedPasswords || Object.create(null))name || \\\\\\;\\n\\t}\\n};\\n\\n/*\\nForce layout of a dom node and its descendents\\n*/\\nexports.forceLayout function(element) {\\n\\tvar dummy element.offsetWidth;\\n};\\n\\n/*\\nPulse an element for debugging purposes\\n*/\\nexports.pulseElement function(element) {\\n\\t// Event handler to remove the class at the end\\n\\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\\n\\t\\telement.removeEventListener($tw.browser.animationEnd,handler,false);\\n\\t\\t$tw.utils.removeClass(element,\\\pulse\\\);\\n\\t},false);\\n\\t// Apply the pulse class\\n\\t$tw.utils.removeClass(element,\\\pulse\\\);\\n\\t$tw.utils.forceLayout(element);\\n\\t$tw.utils.addClass(element,\\\pulse\\\);\\n};\\n\\n/*\\nAttach specified event handlers to a DOM node\\ndomNode: where to attach the event handlers\\nevents: array of event handlers to be added (see below)\\nEach entry in the events array is an object with these properties:\\nhandlerFunction: optional event handler function\\nhandlerObject: optional event handler object\\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\\n*/\\nexports.addEventListeners function(domNode,events) {\\n\\t$tw.utils.each(events,function(eventInfo) {\\n\\t\\tvar handler;\\n\\t\\tif(eventInfo.handlerFunction) {\\n\\t\\t\\thandler eventInfo.handlerFunction;\\n\\t\\t} else if(eventInfo.handlerObject) {\\n\\t\\t\\tif(eventInfo.handlerMethod) {\\n\\t\\t\\t\\thandler function(event) {\\n\\t\\t\\t\\t\\teventInfo.handlerObjecteventInfo.handlerMethod.call(eventInfo.handlerObject,event);\\n\\t\\t\\t\\t};\\n\\t\\t\\t} else {\\n\\t\\t\\t\\thandler eventInfo.handlerObject;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tdomNode.addEventListener(eventInfo.name,handler,false);\\n\\t});\\n};\\n\\n/*\\nGet the computed styles applied to an element as an array of strings of individual CSS properties\\n*/\\nexports.getComputedStyles function(domNode) {\\n\\tvar textAreaStyles window.getComputedStyle(domNode,null),\\n\\t\\tstyleDefs ,\\n\\t\\tname;\\n\\tfor(var t0; t\u003CtextAreaStyles.length; t++) {\\n\\t\\tname textAreaStylest;\\n\\t\\tstyleDefs.push(name + \\\: \\\ + textAreaStyles.getPropertyValue(name) + \\\;\\\);\\n\\t}\\n\\treturn styleDefs;\\n};\\n\\n/*\\nApply a set of styles passed as an array of strings of individual CSS properties\\n*/\\nexports.setStyles function(domNode,styleDefs) {\\n\\tdomNode.style.cssText styleDefs.join(\\\\\\);\\n};\\n\\n/*\\nCopy the computed styles from a source element to a destination element\\n*/\\nexports.copyStyles function(srcDomNode,dstDomNode) {\\n\\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\\n};\\n\\n/*\\nCopy plain text to the clipboard on browsers that support it\\n*/\\nexports.copyToClipboard function(text,options) {\\n\\toptions options || {};\\n\\ttext text || \\\\\\;\\n\\tvar textArea document.createElement(\\\textarea\\\);\\n\\ttextArea.style.position \\\fixed\\\;\\n\\ttextArea.style.top 0;\\n\\ttextArea.style.left 0;\\n\\ttextArea.style.fontSize \\\12pt\\\;\\n\\ttextArea.style.width \\\2em\\\;\\n\\ttextArea.style.height \\\2em\\\;\\n\\ttextArea.style.padding 0;\\n\\ttextArea.style.border \\\none\\\;\\n\\ttextArea.style.outline \\\none\\\;\\n\\ttextArea.style.boxShadow \\\none\\\;\\n\\ttextArea.style.background \\\transparent\\\;\\n\\ttextArea.value text;\\n\\tdocument.body.appendChild(textArea);\\n\\ttextArea.select();\\n\\ttextArea.setSelectionRange(0,text.length);\\n\\tvar succeeded false;\\n\\ttry {\\n\\t\\tsucceeded document.execCommand(\\\copy\\\);\\n\\t} catch(err) {\\n\\t}\\n\\tif(!options.doNotNotify) {\\n\\t\\tvar successNotification options.successNotification || \\\$:/language/Notifications/CopiedToClipboard/Succeeded\\\,\\n\\t\\t\\tfailureNotification options.failureNotification || \\\$:/language/Notifications/CopiedToClipboard/Failed\\\\\n\\t\\t$tw.notifier.display(succeeded ? successNotification : failureNotification);\\n\\t}\\n\\tdocument.body.removeChild(textArea);\\n};\\n\\nexports.getLocationPath function() {\\n\\treturn window.location.toString().split(\\\#\\\)0;\\n};\\n\\n/*\\nCollect DOM variables\\n*/\\nexports.collectDOMVariables function(selectedNode,domNode,event) {\\n\\tvar variables {},\\n\\t selectedNodeRect,\\n\\t domNodeRect;\\n\\tif(selectedNode) {\\n\\t\\t$tw.utils.each(selectedNode.attributes,function(attribute) {\\n\\t\\t\\tvariables\\\dom-\\\ + attribute.name attribute.value.toString();\\n\\t\\t});\\n\\t\\t\\n\\t\\tif(\\\offsetLeft\\\ in selectedNode) {\\n\\t\\t\\t// Add variables with a (relative and absolute) popup coordinate string for the selected node\\n\\t\\t\\tvar nodeRect {\\n\\t\\t\\t\\tleft: selectedNode.offsetLeft,\\n\\t\\t\\t\\ttop: selectedNode.offsetTop,\\n\\t\\t\\t\\twidth: selectedNode.offsetWidth,\\n\\t\\t\\t\\theight: selectedNode.offsetHeight\\n\\t\\t\\t};\\n\\t\\t\\tvariables\\\tv-popup-coords\\\ Popup.buildCoordinates(Popup.coordinatePrefix.csOffsetParent,nodeRect);\\n\\n\\t\\t\\tvar absRect $tw.utils.extend({}, nodeRect);\\n\\t\\t\\tfor(var currentNode selectedNode.offsetParent; currentNode; currentNode currentNode.offsetParent) {\\n\\t\\t\\t\\tabsRect.left + currentNode.offsetLeft;\\n\\t\\t\\t\\tabsRect.top + currentNode.offsetTop;\\n\\t\\t\\t}\\n\\t\\t\\tvariables\\\tv-popup-abs-coords\\\ Popup.buildCoordinates(Popup.coordinatePrefix.csAbsolute,absRect);\\n\\n\\t\\t\\t// Add variables for offset of selected node\\n\\t\\t\\tvariables\\\tv-selectednode-posx\\\ selectedNode.offsetLeft.toString();\\n\\t\\t\\tvariables\\\tv-selectednode-posy\\\ selectedNode.offsetTop.toString();\\n\\t\\t\\tvariables\\\tv-selectednode-width\\\ selectedNode.offsetWidth.toString();\\n\\t\\t\\tvariables\\\tv-selectednode-height\\\ selectedNode.offsetHeight.toString();\\n\\t\\t}\\n\\t}\\n\\t\\n\\tif(domNode && (\\\offsetWidth\\\ in domNode)) {\\n\\t\\tvariables\\\tv-widgetnode-width\\\ domNode.offsetWidth.toString();\\n\\t\\tvariables\\\tv-widgetnode-height\\\ domNode.offsetHeight.toString();\\n\\t}\\n\\n\\tif(event && (\\\clientX\\\ in event) && (\\\clientY\\\ in event)) {\\n\\t\\tif(selectedNode) {\\n\\t\\t\\t// Add variables for event X and Y position relative to selected node\\n\\t\\t\\tselectedNodeRect selectedNode.getBoundingClientRect();\\n\\t\\t\\tvariables\\\event-fromselected-posx\\\ (event.clientX - selectedNodeRect.left).toString();\\n\\t\\t\\tvariables\\\event-fromselected-posy\\\ (event.clientY - selectedNodeRect.top).toString();\\n\\t\\t}\\n\\t\\t\\n\\t\\tif(domNode) {\\n\\t\\t\\t// Add variables for event X and Y position relative to event catcher node\\n\\t\\t\\tdomNodeRect domNode.getBoundingClientRect();\\n\\t\\t\\tvariables\\\event-fromcatcher-posx\\\ (event.clientX - domNodeRect.left).toString();\\n\\t\\t\\tvariables\\\event-fromcatcher-posy\\\ (event.clientY - domNodeRect.top).toString();\\n\\t\\t}\\n\\n\\t\\t// Add variables for event X and Y position relative to the viewport\\n\\t\\tvariables\\\event-fromviewport-posx\\\ event.clientX.toString();\\n\\t\\tvariables\\\event-fromviewport-posy\\\ event.clientY.toString();\\n\\t}\\n\\treturn variables;\\n};\\n\\n/*\\nMake sure the CSS selector is not invalid\\n*/\\nexports.querySelectorSafe function(selector,baseElement) {\\n\\tbaseElement baseElement || document;\\n\\ttry {\\n\\t\\treturn baseElement.querySelector(selector);\\n\\t} catch(e) {\\n\\t\\tconsole.log(\\\Invalid selector: \\\,selector);\\n\\t}\\n};\\n\\nexports.querySelectorAllSafe function(selector,baseElement) {\\n\\tbaseElement baseElement || document;\\n\\ttry {\\n\\t\\treturn baseElement.querySelectorAll(selector);\\n\\t} catch(e) {\\n\\t\\tconsole.log(\\\Invalid selector: \\\,selector);\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/dragndrop.js\:{\title\:\$:/core/modules/utils/dom/dragndrop.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nBrowser data transfer utilities, used with the clipboard and drag and drop\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nOptions:\\n\\ndomNode: dom node to make draggable\\nselector: CSS selector to identify element within domNode to be used as drag handle (optional)\\ndragImageType: \\\pill\\\, \\\blank\\\ or \\\dom\\\ (the default)\\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\\nwidget: widget to use as the context for the filter\\n*/\\nexports.makeDraggable function(options) {\\n\\tvar dragImageType options.dragImageType || \\\dom\\\,\\n\\t\\tdragImage,\\n\\t\\tdomNode options.domNode;\\n\\t// Make the dom node draggable (not necessary for anchor tags)\\n\\tif(!options.selector && ((domNode.tagName || \\\\\\).toLowerCase() ! \\\a\\\)) {\\n\\t\\tdomNode.setAttribute(\\\draggable\\\,\\\true\\\);\\n\\t}\\n\\t// Add event handlers\\n\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t{name: \\\dragstart\\\, handlerFunction: function(event) {\\n\\t\\t\\tif(event.dataTransfer undefined) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\t// Collect the tiddlers being dragged\\n\\t\\t\\tvar dragTiddler options.dragTiddlerFn && options.dragTiddlerFn(),\\n\\t\\t\\t\\tdragFilter options.dragFilterFn && options.dragFilterFn(),\\n\\t\\t\\t\\ttitles dragTiddler ? dragTiddler : ,\\n\\t\\t\\t\\tstartActions options.startActions,\\n\\t\\t\\t\\tvariables,\\n\\t\\t\\t\\tdomNodeRect;\\n\\t\\t\\tif(dragFilter) {\\n\\t\\t\\t\\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\\n\\t\\t\\t}\\n\\t\\t\\tvar titleString $tw.utils.stringifyList(titles);\\n\\t\\t\\t// Check that weve something to drag\\n\\t\\t\\tif(titles.length > 0 && (options.selector && $tw.utils.domMatchesSelector(event.target,options.selector) || event.target domNode)) {\\n\\t\\t\\t\\t// Mark the drag in progress\\n\\t\\t\\t\\t$tw.dragInProgress domNode;\\n\\t\\t\\t\\t// Set the dragging class on the element being dragged\\n\\t\\t\\t\\t$tw.utils.addClass(domNode,\\\tc-dragging\\\);\\n\\t\\t\\t\\t// Invoke drag-start actions if given\\n\\t\\t\\t\\tif(startActions ! undefined) {\\n\\t\\t\\t\\t\\t// Collect our variables\\n\\t\\t\\t\\t\\tvariables $tw.utils.collectDOMVariables(domNode,null,event);\\n\\t\\t\\t\\t\\tvariables.modifier $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\t\\t\\t\\tvariables\\\actionTiddler\\\ titleString;\\n\\t\\t\\t\\t\\toptions.widget.invokeActionString(startActions,options.widget,event,variables);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Create the drag image elements\\n\\t\\t\\t\\tdragImage options.widget.document.createElement(\\\div\\\);\\n\\t\\t\\t\\tdragImage.className \\\tc-tiddler-dragger\\\;\\n\\t\\t\\t\\tvar inner options.widget.document.createElement(\\\div\\\);\\n\\t\\t\\t\\tinner.className \\\tc-tiddler-dragger-inner\\\;\\n\\t\\t\\t\\tinner.appendChild(options.widget.document.createTextNode(\\n\\t\\t\\t\\t\\ttitles.length 1 ? \\n\\t\\t\\t\\t\\t\\ttitles0 :\\n\\t\\t\\t\\t\\t\\ttitles.length + \\\ tiddlers\\\\\n\\t\\t\\t\\t));\\n\\t\\t\\t\\tdragImage.appendChild(inner);\\n\\t\\t\\t\\toptions.widget.document.body.appendChild(dragImage);\\n\\t\\t\\t\\t// Set the data transfer properties\\n\\t\\t\\t\\tvar dataTransfer event.dataTransfer;\\n\\t\\t\\t\\t// Set up the image\\n\\t\\t\\t\\tdataTransfer.effectAllowed \\\all\\\;\\n\\t\\t\\t\\tif(dataTransfer.setDragImage) {\\n\\t\\t\\t\\t\\tif(dragImageType \\\pill\\\) {\\n\\t\\t\\t\\t\\t\\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\\n\\t\\t\\t\\t\\t} else if(dragImageType \\\blank\\\) {\\n\\t\\t\\t\\t\\t\\tdragImage.removeChild(dragImage.firstChild);\\n\\t\\t\\t\\t\\t\\tdataTransfer.setDragImage(dragImage,0,0);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvar r domNode.getBoundingClientRect();\\n\\t\\t\\t\\t\\t\\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Set up the data transfer\\n\\t\\t\\t\\tif(dataTransfer.clearData) {\\n\\t\\t\\t\\t\\tdataTransfer.clearData();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar jsonData ;\\n\\t\\t\\t\\tif(titles.length > 1) {\\n\\t\\t\\t\\t\\ttitles.forEach(function(title) {\\n\\t\\t\\t\\t\\t\\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\tjsonData \\\\\\ + jsonData.join(\\\,\\\) + \\\\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tjsonData options.widget.wiki.getTiddlerAsJson(titles0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// IE doesnt like these content types\\n\\t\\t\\t\\tif(!$tw.browser.isIE) {\\n\\t\\t\\t\\t\\tdataTransfer.setData(\\\text/vnd.tiddler\\\,jsonData);\\n\\t\\t\\t\\t\\tdataTransfer.setData(\\\text/plain\\\,titleString);\\n\\t\\t\\t\\t\\tdataTransfer.setData(\\\text/x-moz-url\\\,\\\data:text/vnd.tiddler,\\\ + encodeURIComponent(jsonData));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// If browser is Chrome-like and has a touch-input device do NOT .setData\\n\\t\\t\\t\\tif(!($tw.browser.isMobileChrome)) {\\n\\t\\t\\t\\t\\tdataTransfer.setData(\\\URL\\\,\\\data:text/vnd.tiddler,\\\ + encodeURIComponent(jsonData));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tdataTransfer.setData(\\\Text\\\,titleString);\\n\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t}\\n\\t\\t\\treturn false;\\n\\t\\t}},\\n\\t\\t{name: \\\dragend\\\, handlerFunction: function(event) {\\n\\t\\t\\tif((options.selector && $tw.utils.domMatchesSelector(event.target,options.selector)) || event.target domNode) {\\n\\t\\t\\t\\t// Collect the tiddlers being dragged\\n\\t\\t\\t\\tvar dragTiddler options.dragTiddlerFn && options.dragTiddlerFn(),\\n\\t\\t\\t\\t\\tdragFilter options.dragFilterFn && options.dragFilterFn(),\\n\\t\\t\\t\\t\\ttitles dragTiddler ? dragTiddler : ,\\n\\t\\t\\t\\t\\tendActions options.endActions,\\n\\t\\t\\t\\t\\tvariables;\\n\\t\\t\\t\\tif(dragFilter) {\\n\\t\\t\\t\\t\\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar titleString $tw.utils.stringifyList(titles);\\n\\t\\t\\t\\t$tw.dragInProgress null;\\n\\t\\t\\t\\t// Invoke drag-end actions if given\\n\\t\\t\\t\\tif(endActions ! undefined) {\\n\\t\\t\\t\\t\\tvariables $tw.utils.collectDOMVariables(domNode,null,event);\\n\\t\\t\\t\\t\\tvariables.modifier $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\t\\t\\t\\tvariables\\\actionTiddler\\\ titleString;\\n\\t\\t\\t\\t\\toptions.widget.invokeActionString(endActions,options.widget,event,variables);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Remove the dragging class on the element being dragged\\n\\t\\t\\t\\t$tw.utils.removeClass(domNode,\\\tc-dragging\\\);\\n\\t\\t\\t\\t// Delete the drag image element\\n\\t\\t\\t\\tif(dragImage) {\\n\\t\\t\\t\\t\\tdragImage.parentNode.removeChild(dragImage);\\n\\t\\t\\t\\t\\tdragImage null;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn false;\\n\\t\\t}}\\n\\t);\\n};\\n\\nexports.importDataTransfer function(dataTransfer,fallbackTitle,callback) {\\n\\t// Try each provided data type in turn\\n\\tif($tw.log.IMPORT) {\\n\\t\\tconsole.log(\\\Available data types:\\\);\\n\\t\\tfor(var type0; type\u003CdataTransfer.types.length; type++) {\\n\\t\\t\\tconsole.log(\\\type\\\,dataTransfer.typestype,dataTransfer.getData(dataTransfer.typestype))\\n\\t\\t}\\n\\t}\\n\\tfor(var t0; t\u003CimportDataTypes.length; t++) {\\n\\t\\tif(!$tw.browser.isIE || importDataTypest.IECompatible) {\\n\\t\\t\\t// Get the data\\n\\t\\t\\tvar dataType importDataTypest;\\n\\t\\t\\tvar data dataTransfer.getData(dataType.type);\\n\\t\\t\\t// Import the tiddlers in the data\\n\\t\\t\\tif(data ! \\\\\\ && data ! null) {\\n\\t\\t\\t\\tif($tw.log.IMPORT) {\\n\\t\\t\\t\\t\\tconsole.log(\\\Importing data type \\\ + dataType.type + \\\, data: \\\ + data + \\\\\\)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar tiddlerFields dataType.toTiddlerFieldsArray(data,fallbackTitle);\\n\\t\\t\\t\\tcallback(tiddlerFields);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.importPaste function(item,fallbackTitle,callback) {\\n\\t// Try each provided data type in turn\\n\\tfor(var t0; t\u003CimportDataTypes.length; t++) {\\n\\t\\tif(item.type importDataTypest.type) {\\n\\t\\t\\t// Get the data\\n\\t\\t\\tvar dataType importDataTypest;\\n\\n\\t\\t\\titem.getAsString(function(data){\\n\\t\\t\\t\\tif($tw.log.IMPORT) {\\n\\t\\t\\t\\t\\tconsole.log(\\\Importing data type \\\ + dataType.type + \\\, data: \\\ + data + \\\\\\)\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar tiddlerFields dataType.toTiddlerFieldsArray(data,fallbackTitle);\\n\\t\\t\\t\\tcallback(tiddlerFields);\\n\\t\\t\\t});\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.itemHasValidDataType function(item) {\\n\\tfor(var t0; t\u003CimportDataTypes.length; t++) {\\n\\t\\tif(!$tw.browser.isIE || importDataTypest.IECompatible) {\\n\\t\\t\\tif(item.type importDataTypest.type) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n}\\n\\nvar importDataTypes \\n\\t{type: \\\text/vnd.tiddler\\\, IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\treturn parseJSONTiddlers(data,fallbackTitle);\\n\\t}},\\n\\t{type: \\\URL\\\, IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\t// Check for tiddler data URI\\n\\t\\tvar match $tw.utils.decodeURIComponentSafe(data).match(/^data\\\\:text\\\\/vnd\\\\.tiddler,(.*)/i);\\n\\t\\tif(match) {\\n\\t\\t\\treturn parseJSONTiddlers(match1,fallbackTitle);\\n\\t\\t} else {\\n\\t\\t\\treturn {title: fallbackTitle, text: data}; // As URL string\\n\\t\\t}\\n\\t}},\\n\\t{type: \\\text/x-moz-url\\\, IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\t// Check for tiddler data URI\\n\\t\\tvar match $tw.utils.decodeURIComponentSafe(data).match(/^data\\\\:text\\\\/vnd\\\\.tiddler,(.*)/i);\\n\\t\\tif(match) {\\n\\t\\t\\treturn parseJSONTiddlers(match1,fallbackTitle);\\n\\t\\t} else {\\n\\t\\t\\treturn {title: fallbackTitle, text: data}; // As URL string\\n\\t\\t}\\n\\t}},\\n\\t{type: \\\text/html\\\, IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\treturn {title: fallbackTitle, text: data};\\n\\t}},\\n\\t{type: \\\text/plain\\\, IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\treturn {title: fallbackTitle, text: data};\\n\\t}},\\n\\t{type: \\\Text\\\, IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\treturn {title: fallbackTitle, text: data};\\n\\t}},\\n\\t{type: \\\text/uri-list\\\, IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\\n\\t\\t// Check for tiddler data URI\\n\\t\\tvar match $tw.utils.decodeURIComponentSafe(data).match(/^data\\\\:text\\\\/vnd\\\\.tiddler,(.*)/i);\\n\\t\\tif(match) {\\n\\t\\t\\treturn parseJSONTiddlers(match1,fallbackTitle);\\n\\t\\t} else {\\n\\t\\t\\treturn {title: fallbackTitle, text: data}; // As URL string\\n\\t\\t}\\n\\t}}\\n;\\n\\nfunction parseJSONTiddlers(json,fallbackTitle) {\\n\\tvar data $tw.utils.parseJSONSafe(json);\\n\\tif(!$tw.utils.isArray(data)) {\\n\\t\\tdata data;\\n\\t}\\n\\tdata.forEach(function(fields) {\\n\\t\\tfields.title fields.title || fallbackTitle;\\n\\t});\\n\\treturn data;\\n};\\n\\nfunction dragEventContainsType(event,targetType) {\\n\\tif(event.dataTransfer.types) {\\n\\t\\tfor(var i0; i\u003Cevent.dataTransfer.types.length; i++) {\\n\\t\\t\\tif(event.dataTransfer.typesi targetType) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.dragEventContainsFiles function(event) {\\n\\treturn (dragEventContainsType(event,\\\Files\\\) && !dragEventContainsType(event,\\\text/plain\\\));\\n};\\n\\nexports.dragEventContainsType dragEventContainsType;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/http.js\:{\title\:\$:/core/modules/utils/dom/http.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/http.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nHTTP support\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nManage tm-http-request events. Options include:\\nwiki: Reference to the wiki to be used for state tiddler tracking\\nstateTrackerTitle: Title of tiddler to be used for state tiddler tracking\\n*/\\nfunction HttpClient(options) {\\n\\toptions options || {};\\n\\tthis.nextId 1;\\n\\tthis.wiki options.wiki || $tw.wiki;\\n\\tthis.stateTrackerTitle options.stateTrackerTitle || \\\$:/state/http-requests\\\;\\n\\tthis.requests ; // Array of {id: string,request: HttpClientRequest}\\n\\tthis.updateRequestTracker();\\n}\\n\\n/*\\nReturn the index into this.requests corresponding to a given ID. Returns null if not found\\n*/\\nHttpClient.prototype.getRequestIndex function(targetId) {\\n\\tvar targetIndex null;\\n\\t$tw.utils.each(this.requests,function(requestInfo,index) {\\n\\t\\tif(requestInfo.id targetId) {\\n\\t\\t\\ttargetIndex index;\\n\\t\\t}\\n\\t});\\n\\treturn targetIndex;\\n};\\n\\n/*\\nUpdate the state tiddler that is tracking the outstanding requests\\n*/\\nHttpClient.prototype.updateRequestTracker function() {\\n\\tthis.wiki.addTiddler({title: this.stateTrackerTitle, text: \\\\\\ + this.requests.length});\\n};\\n\\nHttpClient.prototype.initiateHttpRequest function(options) {\\n\\tvar self this,\\n\\t\\tid this.nextId,\\n\\t\\trequest new HttpClientRequest(options);\\n\\tthis.nextId + 1;\\n\\tthis.requests.push({id: id, request: request});\\n\\tthis.updateRequestTracker();\\n\\trequest.send(function(err) {\\n\\t\\tvar targetIndex self.getRequestIndex(id);\\n\\t\\tif(targetIndex ! null) {\\n\\t\\t\\tself.requests.splice(targetIndex,1);\\n\\t\\t\\tself.updateRequestTracker();\\n\\t\\t}\\n\\t});\\n\\treturn id;\\n};\\n\\nHttpClient.prototype.cancelAllHttpRequests function() {\\n\\tvar self this;\\n\\tif(this.requests.length > 0) {\\n\\t\\tfor(var tthis.requests.length - 1; t--; t>0) {\\n\\t\\t\\tvar requestInfo this.requestst;\\n\\t\\t\\trequestInfo.request.cancel();\\n\\t\\t}\\n\\t}\\n\\tthis.requests ;\\n\\tthis.updateRequestTracker();\\n};\\n\\nHttpClient.prototype.cancelHttpRequest function(targetId) {\\n\\tvar targetIndex this.getRequestIndex(targetId);\\n\\tif(targetIndex ! null) {\\n\\t\\tthis.requeststargetIndex.request.cancel();\\n\\t\\tthis.requests.splice(targetIndex,1);\\n\\t\\tthis.updateRequestTracker();\\n\\t}\\n};\\n\\n/*\\nInitiate an HTTP request. Options:\\nwiki: wiki to be used for executing action strings\\nurl: URL for request\\nmethod: method eg GET, POST\\nbody: text of request body\\nbinary: set to \\\yes\\\ to force binary processing of response payload\\noncompletion: action string to be invoked on completion\\nonprogress: action string to be invoked on progress updates\\nbindStatus: optional title of tiddler to which status (\\\pending\\\, \\\complete\\\, \\\error\\\) should be written\\nbindProgress: optional title of tiddler to which the progress of the request (0 to 100) should be bound\\nvariables: hashmap of variable name to string value passed to action strings\\nheaders: hashmap of header name to header value to be sent with the request\\npasswordHeaders: hashmap of header name to password store name to be sent with the request\\nqueryStrings: hashmap of query string parameter name to parameter value to be sent with the request\\npasswordQueryStrings: hashmap of query string parameter name to password store name to be sent with the request\\nbasicAuthUsername: plain username for basic authentication\\nbasicAuthUsernameFromStore: name of password store entry containing username\\nbasicAuthPassword: plain password for basic authentication\\nbasicAuthPasswordFromStore: name of password store entry containing password\\nbearerAuthToken: plain text token for bearer authentication\\nbearerAuthTokenFromStore: name of password store entry contain bear authorization token\\n*/\\nfunction HttpClientRequest(options) {\\n\\tvar self this;\\n\\tconsole.log(\\\Initiating an HTTP request\\\,options)\\n\\tthis.wiki options.wiki;\\n\\tthis.completionActions options.oncompletion;\\n\\tthis.progressActions options.onprogress;\\n\\tthis.bindStatus options\\\bindStatus\\\;\\n\\tthis.bindProgress options\\\bindProgress\\\;\\n\\tthis.method options.method || \\\GET\\\;\\n\\tthis.body options.body || \\\\\\;\\n\\tthis.binary options.binary || \\\\\\;\\n\\tthis.useDefaultHeaders options.useDefaultHeaders ! \\\false\\\ ? true : false,\\n\\tthis.variables options.variables;\\n\\tvar url options.url;\\n\\t$tw.utils.each(options.queryStrings,function(value,name) {\\n\\t\\turl $tw.utils.setQueryStringParameter(url,name,value);\\n\\t});\\n\\t$tw.utils.each(options.passwordQueryStrings,function(value,name) {\\n\\t\\turl $tw.utils.setQueryStringParameter(url,name,$tw.utils.getPassword(value) || \\\\\\);\\n\\t});\\n\\tthis.url url;\\n\\tthis.requestHeaders {};\\n\\t$tw.utils.each(options.headers,function(value,name) {\\n\\t\\tself.requestHeadersname value;\\n\\t});\\n\\t$tw.utils.each(options.passwordHeaders,function(value,name) {\\n\\t\\tself.requestHeadersname $tw.utils.getPassword(value) || \\\\\\;\\n\\t});\\n\\tthis.basicAuthUsername options.basicAuthUsername || (options.basicAuthUsernameFromStore && $tw.utils.getPassword(options.basicAuthUsernameFromStore)) || \\\\\\;\\n\\tthis.basicAuthPassword options.basicAuthPassword || (options.basicAuthPasswordFromStore && $tw.utils.getPassword(options.basicAuthPasswordFromStore)) || \\\\\\;\\n\\tthis.bearerAuthToken options.bearerAuthToken || (options.bearerAuthTokenFromStore && $tw.utils.getPassword(options.bearerAuthTokenFromStore)) || \\\\\\;\\n\\tif(this.basicAuthUsername && this.basicAuthPassword) {\\n\\t\\tthis.requestHeaders.Authorization \\\Basic \\\ + $tw.utils.base64Encode(this.basicAuthUsername + \\\:\\\ + this.basicAuthPassword);\\n\\t} else if(this.bearerAuthToken) {\\n\\t\\tthis.requestHeaders.Authorization \\\Bearer \\\ + this.bearerAuthToken;\\n\\t}\\n}\\n\\nHttpClientRequest.prototype.send function(callback) {\\n\\tvar self this,\\n\\t\\tsetBinding function(title,text) {\\n\\t\\t\\tif(title) {\\n\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler({title: title, text: text}));\\n\\t\\t\\t}\\n\\t\\t};\\n\\tif(this.url) {\\n\\t\\tsetBinding(this.bindStatus,\\\pending\\\);\\n\\t\\tsetBinding(this.bindProgress,\\\0\\\);\\n\\t\\t// Set the request tracker tiddler\\n\\t\\tvar requestTrackerTitle this.wiki.generateNewTitle(\\\$:/temp/HttpRequest\\\);\\n\\t\\tthis.wiki.addTiddler({\\n\\t\\t\\ttitle: requestTrackerTitle,\\n\\t\\t\\ttags: \\\$:/tags/HttpRequest\\\,\\n\\t\\t\\ttext: JSON.stringify({\\n\\t\\t\\t\\turl: this.url,\\n\\t\\t\\t\\ttype: this.method,\\n\\t\\t\\t\\tstatus: \\\inprogress\\\,\\n\\t\\t\\t\\theaders: this.requestHeaders,\\n\\t\\t\\t\\tdata: this.body\\n\\t\\t\\t})\\n\\t\\t});\\n\\t\\tthis.xhr $tw.utils.httpRequest({\\n\\t\\t\\turl: this.url,\\n\\t\\t\\ttype: this.method,\\n\\t\\t\\tuseDefaultHeaders: this.useDefaultHeaders,\\n\\t\\t\\theaders: this.requestHeaders,\\n\\t\\t\\tdata: this.body,\\n\\t\\t\\treturnProp: this.binary \\\\\\ ? \\\responseText\\\ : \\\response\\\,\\n\\t\\t\\tresponseType: this.binary \\\\\\ ? \\\text\\\ : \\\arraybuffer\\\,\\n\\t\\t\\tcallback: function(err,data,xhr) {\\n\\t\\t\\t\\tvar hasSucceeded xhr.status > 200 && xhr.status \u003C 300,\\n\\t\\t\\t\\t\\tcompletionCode hasSucceeded ? \\\complete\\\ : \\\error\\\,\\n\\t\\t\\t\\t\\theaders {};\\n\\t\\t\\t\\t$tw.utils.each(xhr.getAllResponseHeaders().split(\\\\\\\r\\\\n\\\),function(line) {\\n\\t\\t\\t\\t\\tvar pos line.indexOf(\\\:\\\);\\n\\t\\t\\t\\t\\tif(pos ! -1) {\\n\\t\\t\\t\\t\\t\\theadersline.substr(0,pos) line.substr(pos + 1).trim();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tsetBinding(self.bindStatus,completionCode);\\n\\t\\t\\t\\tsetBinding(self.bindProgress,\\\100\\\);\\n\\t\\t\\t\\tvar resultVariables {\\n\\t\\t\\t\\t\\tstatus: xhr.status.toString(),\\n\\t\\t\\t\\t\\tstatusText: xhr.statusText,\\n\\t\\t\\t\\t\\terror: (err || \\\\\\).toString(),\\n\\t\\t\\t\\t\\tdata: (data || \\\\\\).toString(),\\n\\t\\t\\t\\t\\theaders: JSON.stringify(headers)\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\t/* Convert data from binary to base64 */\\n\\t\\t\\t\\tif (xhr.responseType \\\arraybuffer\\\) {\\n\\t\\t\\t\\t\\tvar binary \\\\\\,\\n\\t\\t\\t\\t\\t\\tbytes new Uint8Array(data),\\n\\t\\t\\t\\t\\t\\tlen bytes.byteLength;\\n\\t\\t\\t\\t\\tfor (var i0; i\u003Clen; i++) {\\n\\t\\t\\t\\t\\t\\tbinary + String.fromCharCode(bytesi);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tresultVariables.data $tw.utils.base64Encode(binary,true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getTiddler(requestTrackerTitle),{\\n\\t\\t\\t\\t\\tstatus: completionCode,\\n\\t\\t\\t\\t}));\\n\\t\\t\\t\\tself.wiki.invokeActionString(self.completionActions,undefined,$tw.utils.extend({},self.variables,resultVariables),{parentWidget: $tw.rootWidget});\\n\\t\\t\\t\\tcallback(hasSucceeded ? null : xhr.statusText);\\n\\t\\t\\t\\t// console.log(\\\Back!\\\,err,data,xhr);\\n\\t\\t\\t},\\n\\t\\t\\tprogress: function(lengthComputable,loaded,total) {\\n\\t\\t\\t\\tif(lengthComputable) {\\n\\t\\t\\t\\t\\tsetBinding(self.bindProgress,\\\\\\ + Math.floor((loaded/total) * 100))\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.wiki.invokeActionString(self.progressActions,undefined,$tw.utils.extend({},self.variables,{\\n\\t\\t\\t\\t\\tlengthComputable: lengthComputable ? \\\yes\\\ : \\\no\\\,\\n\\t\\t\\t\\t\\tloaded: loaded,\\n\\t\\t\\t\\t\\ttotal: total\\n\\t\\t\\t\\t}),{parentWidget: $tw.rootWidget});\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\nHttpClientRequest.prototype.cancel function() {\\n\\tif(this.xhr) {\\n\\t\\tthis.xhr.abort();\\n\\t}\\n};\\n\\nexports.HttpClient HttpClient;\\n\\n/*\\nMake an HTTP request. Options are:\\n\\turl: URL to retrieve\\n\\theaders: hashmap of headers to send\\n\\ttype: GET, PUT, POST etc\\n\\tcallback: function invoked with (err,data,xhr)\\n\\tprogress: optional function invoked with (lengthComputable,loaded,total)\\n\\treturnProp: string name of the property to return as first argument of callback\\n\\tresponseType: \\\text\\\ or \\\arraybuffer\\\\\n*/\\nexports.httpRequest function(options) {\\n\\tvar type options.type || \\\GET\\\,\\n\\t\\turl options.url,\\n\\t\\tuseDefaultHeaders options.useDefaultHeaders ! false ? true : false,\\n\\t\\theaders options.headers || (useDefaultHeaders ? {accept: \\\application/json\\\} : {}),\\n\\t\\thasHeader function(targetHeader) {\\n\\t\\t\\ttargetHeader targetHeader.toLowerCase();\\n\\t\\t\\tvar result false;\\n\\t\\t\\t$tw.utils.each(headers,function(header,headerTitle,object) {\\n\\t\\t\\t\\tif(headerTitle.toLowerCase() targetHeader) {\\n\\t\\t\\t\\t\\tresult true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn result;\\n\\t\\t},\\n\\t\\tgetHeader function(targetHeader) {\\n\\t\\t\\treturn headerstargetHeader || headerstargetHeader.toLowerCase();\\n\\t\\t},\\n\\t\\tisSimpleRequest function(type,headers) {\\n\\t\\t\\tif(\\\GET\\\,\\\HEAD\\\,\\\POST\\\.indexOf(type) -1) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\tfor(var header in headers) {\\n\\t\\t\\t\\tif(\\\accept\\\,\\\accept-language\\\,\\\content-language\\\,\\\content-type\\\.indexOf(header.toLowerCase()) -1) {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif(hasHeader(\\\Content-Type\\\) && \\\application/x-www-form-urlencoded\\\,\\\multipart/form-data\\\,\\\text/plain\\\.indexOf(getHeader\\\Content-Type\\\) -1) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t},\\n\\t\\treturnProp options.returnProp || \\\responseText\\\,\\n\\t\\trequest new XMLHttpRequest(),\\n\\t\\tdata \\\\\\,\\n\\t\\tf,results;\\n\\t// Massage the data hashmap into a string\\n\\tif(options.data) {\\n\\t\\tif(typeof options.data \\\string\\\) { // Already a string\\n\\t\\t\\tdata options.data;\\n\\t\\t} else { // A hashmap of strings\\n\\t\\t\\tresults ;\\n\\t\\t\\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\\n\\t\\t\\t\\tresults.push(dataItemTitle + \\\\\\ + encodeURIComponent(dataItem));\\n\\t\\t\\t});\\n\\t\\t\\tif(type \\\GET\\\ || type \\\HEAD\\\) {\\n\\t\\t\\t\\turl + \\\?\\\ + results.join(\\\&\\\);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tdata results.join(\\\&\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\trequest.responseType options.responseType || \\\text\\\;\\n\\t// Set up the state change handler\\n\\trequest.onreadystatechange function() {\\n\\t\\tif(this.readyState 4) {\\n\\t\\t\\tif(this.status > 200 && this.status \u003C 300) {\\n\\t\\t\\t\\t// Success!\\n\\t\\t\\t\\toptions.callback(null,thisreturnProp,this);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t// Something went wrong\\n\\t\\toptions.callback($tw.language.getString(\\\Error/XMLHttpRequest\\\) + \\\: \\\ + this.status,thisreturnProp,this);\\n\\t\\t}\\n\\t};\\n\\t// Handle progress\\n\\tif(options.progress) {\\n\\t\\trequest.onprogress function(event) {\\n\\t\\t\\tconsole.log(\\\Progress event\\\,event)\\n\\t\\t\\toptions.progress(event.lengthComputable,event.loaded,event.total);\\n\\t\\t};\\n\\t}\\n\\t// Make the request\\n\\trequest.open(type,url,true);\\n\\t// Headers\\n\\tif(headers) {\\n\\t\\t$tw.utils.each(headers,function(header,headerTitle,object) {\\n\\t\\t\\trequest.setRequestHeader(headerTitle,header);\\n\\t\\t});\\n\\t}\\n\\tif(data && !hasHeader(\\\Content-Type\\\) && useDefaultHeaders) {\\n\\t\\trequest.setRequestHeader(\\\Content-Type\\\,\\\application/x-www-form-urlencoded; charsetUTF-8\\\);\\n\\t}\\n\\tif(!hasHeader(\\\X-Requested-With\\\) && !isSimpleRequest(type,headers) && useDefaultHeaders) {\\n\\t\\trequest.setRequestHeader(\\\X-Requested-With\\\,\\\TiddlyWiki\\\);\\n\\t}\\n\\t// Send data\\n\\ttry {\\n\\t\\trequest.send(data);\\n\\t} catch(e) {\\n\\t\\toptions.callback(e,null,this);\\n\\t}\\n\\treturn request;\\n};\\n\\nexports.setQueryStringParameter function(url,paramName,paramValue) {\\n\\tvar URL $tw.browser ? window.URL : require(\\\url\\\).URL,\\n\\t\\tnewUrl;\\n\\ttry {\\n\\t\\tnewUrl new URL(url);\\n\\t} catch(e) {\\n\\t}\\n\\tif(newUrl && paramName) {\\n\\t\\tnewUrl.searchParams.set(paramName,paramValue || \\\\\\);\\n\\t\\treturn newUrl.toString();\\n\\t} else {\\n\\t\\treturn url;\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/keyboard.js\:{\title\:\$:/core/modules/utils/dom/keyboard.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/keyboard.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n\\\parseKeyDescriptor\\\,\\\checkKeyDescriptor\\\.forEach(function(method) {\\n\\texportsmethod function() {\\n\\t\\tif($tw.keyboardManager) {\\n\\t\\t\\treturn $tw.keyboardManagermethod.apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\\n\\t\\t} else {\\n\\t\\t\\treturn null\\n\\t\\t}\\n\\t};\\n});\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/modal.js\:{\title\:\$:/core/modules/utils/dom/modal.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/modal.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nModal message mechanism\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\nvar navigator require(\\\$:/core/modules/widgets/navigator.js\\\);\\n\\nvar Modal function(wiki) {\\n\\tthis.wiki wiki;\\n\\tthis.modalCount 0;\\n};\\n\\n/*\\nDisplay a modal dialogue\\n\\ttitle: Title of tiddler to display\\n\\toptions: see below\\nOptions include:\\n\\tdownloadLink: Text of a big download link to include\\n\\tevent: widget event\\n\\tvariables: from event.paramObject\\n*/\\nModal.prototype.display function(title,options) {\\n\\toptions options || {};\\n\\tthis.srcDocument options.variables && (options.variables.rootwindow \\\true\\\ ||\\n\\t\\t\\t\\toptions.variables.rootwindow \\\yes\\\) ? document :\\n\\t\\t\\t\\t(options.event && options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\\n\\tthis.srcWindow this.srcDocument.defaultView;\\n\\tvar self this,\\n\\t\\trefreshHandler,\\n\\t\\tduration $tw.utils.getAnimationDuration(),\\n\\t\\ttiddler this.wiki.getTiddler(title);\\n\\t// Dont do anything if the tiddler doesnt exist\\n\\tif(!tiddler) {\\n\\t\\treturn;\\n\\t}\\n\\t// Create the variables\\n\\tvar variables $tw.utils.extend({\\n\\t\\t\\tcurrentTiddler: title,\\n\\t\\t\\t\\\tv-story-list\\\: (options.event && options.event.widget ? options.event.widget.getVariable(\\\tv-story-list\\\) : \\\\\\),\\n\\t\\t\\t\\\tv-history-list\\\: (options.event && options.event.widget ? options.event.widget.getVariable(\\\tv-history-list\\\) : \\\\\\)\\n\\t\\t},options.variables);\\n\\n\\t// Create the wrapper divs\\n\\tvar wrapper this.srcDocument.createElement(\\\div\\\),\\n\\t\\tmodalBackdrop this.srcDocument.createElement(\\\div\\\),\\n\\t\\tmodalWrapper this.srcDocument.createElement(\\\div\\\),\\n\\t\\tmodalHeader this.srcDocument.createElement(\\\div\\\),\\n\\t\\theaderTitle this.srcDocument.createElement(\\\h3\\\),\\n\\t\\tmodalBody this.srcDocument.createElement(\\\div\\\),\\n\\t\\tmodalLink this.srcDocument.createElement(\\\a\\\),\\n\\t\\tmodalFooter this.srcDocument.createElement(\\\div\\\),\\n\\t\\tmodalFooterHelp this.srcDocument.createElement(\\\span\\\),\\n\\t\\tmodalFooterButtons this.srcDocument.createElement(\\\span\\\);\\n\\t// Up the modal count and adjust the body class\\n\\tthis.modalCount++;\\n\\tthis.adjustPageClass();\\n\\t// Add classes\\n\\t$tw.utils.addClass(wrapper,\\\tc-modal-wrapper\\\);\\n\\tif(tiddler.fields && tiddler.fields.class) {\\n\\t\\t$tw.utils.addClass(wrapper,tiddler.fields.class);\\n\\t}\\n\\t$tw.utils.addClass(modalBackdrop,\\\tc-modal-backdrop\\\);\\n\\t$tw.utils.addClass(modalWrapper,\\\tc-modal\\\);\\n\\t$tw.utils.addClass(modalHeader,\\\tc-modal-header\\\);\\n\\t$tw.utils.addClass(modalBody,\\\tc-modal-body\\\);\\n\\t$tw.utils.addClass(modalFooter,\\\tc-modal-footer\\\);\\n\\t// Join them together\\n\\twrapper.appendChild(modalBackdrop);\\n\\twrapper.appendChild(modalWrapper);\\n\\tmodalHeader.appendChild(headerTitle);\\n\\tmodalWrapper.appendChild(modalHeader);\\n\\tmodalWrapper.appendChild(modalBody);\\n\\tmodalFooter.appendChild(modalFooterHelp);\\n\\tmodalFooter.appendChild(modalFooterButtons);\\n\\tmodalWrapper.appendChild(modalFooter);\\n\\tvar navigatorTree {\\n\\t\\t\\\type\\\: \\\navigator\\\,\\n\\t\\t\\\attributes\\\: {\\n\\t\\t\\t\\\story\\\: {\\n\\t\\t\\t\\t\\\name\\\: \\\story\\\,\\n\\t\\t\\t\\t\\\type\\\: \\\string\\\,\\n\\t\\t\\t\\t\\\value\\\: variables\\\tv-story-list\\\\\n\\t\\t\\t},\\n\\t\\t\\t\\\history\\\: {\\n\\t\\t\\t\\t\\\name\\\: \\\history\\\,\\n\\t\\t\\t\\t\\\type\\\: \\\string\\\,\\n\\t\\t\\t\\t\\\value\\\: variables\\\tv-history-list\\\\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\t\\\tag\\\: \\\$navigator\\\,\\n\\t\\t\\\isBlock\\\: true,\\n\\t\\t\\\children\\\: \\n\\t};\\n\\tvar navigatorWidgetNode new navigator.navigator(navigatorTree, {\\n\\t\\twiki: this.wiki,\\n\\t\\tdocument : this.srcDocument,\\n\\t\\tparentWidget: $tw.rootWidget\\n\\t});\\n\\tnavigatorWidgetNode.render(modalBody,null);\\n\\n\\t// Render the title of the message\\n\\tvar headerWidgetNode this.wiki.makeTranscludeWidget(title,{\\n\\t\\tfield: \\\subtitle\\\,\\n\\t\\tmode: \\\inline\\\,\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttext: {\\n\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\tvalue: title\\n\\t\\t}}},\\n\\t\\tparentWidget: navigatorWidgetNode,\\n\\t\\tdocument: this.srcDocument,\\n\\t\\tvariables: variables,\\n\\t\\timportPageMacros: true\\n\\t});\\n\\theaderWidgetNode.render(headerTitle,null);\\n\\t// Render the body of the message\\n\\tvar bodyWidgetNode this.wiki.makeTranscludeWidget(title,{\\n\\t\\tparentWidget: navigatorWidgetNode,\\n\\t\\tdocument: this.srcDocument,\\n\\t\\tvariables: variables,\\n\\t\\timportPageMacros: true\\n\\t});\\n\\n\\tbodyWidgetNode.render(modalBody,null);\\n\\t// Setup the link if present\\n\\tif(options.downloadLink) {\\n\\t\\tmodalLink.href options.downloadLink;\\n\\t\\tmodalLink.appendChild(this.srcDocument.createTextNode(\\\Right-click to save changes\\\));\\n\\t\\tmodalBody.appendChild(modalLink);\\n\\t}\\n\\t// Render the footer of the message\\n\\tif(tiddler.fields && tiddler.fields.help) {\\n\\t\\tvar link this.srcDocument.createElement(\\\a\\\);\\n\\t\\tlink.setAttribute(\\\href\\\,tiddler.fields.help);\\n\\t\\tlink.setAttribute(\\\target\\\,\\\_blank\\\);\\n\\t\\tlink.setAttribute(\\\rel\\\,\\\noopener noreferrer\\\);\\n\\t\\tlink.setAttribute(\\\class\\\,\\\tc-tiddlylink-external\\\);\\n\\t\\tlink.appendChild(this.srcDocument.createTextNode(\\\Help\\\));\\n\\t\\tmodalFooterHelp.appendChild(link);\\n\\t\\tmodalFooterHelp.style.float \\\left\\\;\\n\\t}\\n\\tvar footerWidgetNode this.wiki.makeTranscludeWidget(title,{\\n\\t\\tfield: \\\footer\\\,\\n\\t\\tmode: \\\inline\\\,\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\button\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tmessage: {\\n\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\tvalue: \\\tm-close-tiddler\\\\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: {\\n\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\ttext: {\\n\\t\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\t\\tvalue: $tw.language.getString(\\\Buttons/Close/Caption\\\)\\n\\t\\t\\t}}}\\n\\t\\t},\\n\\t\\tparentWidget: navigatorWidgetNode,\\n\\t\\tdocument: this.srcDocument,\\n\\t\\tvariables: variables,\\n\\t\\timportPageMacros: true\\n\\t});\\n\\tfooterWidgetNode.render(modalFooterButtons,null);\\n\\t// Set up the refresh handler\\n\\trefreshHandler function(changes) {\\n\\t\\theaderWidgetNode.refresh(changes,modalHeader,null);\\n\\t\\tbodyWidgetNode.refresh(changes,modalBody,null);\\n\\t\\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\\n\\t};\\n\\tthis.wiki.addEventListener(\\\change\\\,refreshHandler);\\n\\t// Add the close event handler\\n\\tvar closeHandler function(event) {\\n\\t\\t// Remove our refresh handler\\n\\t\\tself.wiki.removeEventListener(\\\change\\\,refreshHandler);\\n\\t\\t// Decrease the modal count and adjust the body class\\n\\t\\tself.modalCount--;\\n\\t\\tself.adjustPageClass();\\n\\t\\t// Force layout and animate the modal message away\\n\\t\\t$tw.utils.forceLayout(modalBackdrop);\\n\\t\\t$tw.utils.forceLayout(modalWrapper);\\n\\t\\t$tw.utils.setStyle(modalBackdrop,\\n\\t\\t\\t{opacity: \\\0\\\}\\n\\t\\t);\\n\\t\\t$tw.utils.setStyle(modalWrapper,\\n\\t\\t\\t{transform: \\\translateY(\\\ + self.srcWindow.innerHeight + \\\px)\\\}\\n\\t\\t);\\n\\t\\t// Set up an event for the transition end\\n\\t\\tself.srcWindow.setTimeout(function() {\\n\\t\\t\\tif(wrapper.parentNode) {\\n\\t\\t\\t\\t// Remove the modal message from the DOM\\n\\t\\t\\t\\tself.srcDocument.body.removeChild(wrapper);\\n\\t\\t\\t}\\n\\t\\t},duration);\\n\\t\\t// Dont let anyone else handle the tm-close-tiddler message\\n\\t\\treturn false;\\n\\t};\\n\\theaderWidgetNode.addEventListener(\\\tm-close-tiddler\\\,closeHandler,false);\\n\\tbodyWidgetNode.addEventListener(\\\tm-close-tiddler\\\,closeHandler,false);\\n\\tfooterWidgetNode.addEventListener(\\\tm-close-tiddler\\\,closeHandler,false);\\n\\t// Whether to close the modal dialog when the mask (area outside the modal) is clicked\\n\\tif(tiddler.fields && (tiddler.fields\\\mask-closable\\\ \\\yes\\\ || tiddler.fields\\\mask-closable\\\ \\\true\\\)) {\\n\\t\\tmodalBackdrop.addEventListener(\\\click\\\,closeHandler,false);\\n\\t}\\n\\t// Set the initial styles for the message\\n\\t$tw.utils.setStyle(modalBackdrop,\\n\\t\\t{opacity: \\\0\\\}\\n\\t);\\n\\t$tw.utils.setStyle(modalWrapper,\\n\\t\\t{transformOrigin: \\\0% 0%\\\},\\n\\t\\t{transform: \\\translateY(\\\ + (-this.srcWindow.innerHeight) + \\\px)\\\}\\n\\t);\\n\\t// Put the message into the document\\n\\tthis.srcDocument.body.appendChild(wrapper);\\n\\t// Set up animation for the styles\\n\\t$tw.utils.setStyle(modalBackdrop,\\n\\t\\t{transition: \\\opacity \\\ + duration + \\\ms ease-out\\\}\\n\\t);\\n\\t$tw.utils.setStyle(modalWrapper,\\n\\t\\t{transition: $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms ease-in-out\\\}\\n\\t);\\n\\t// Force layout\\n\\t$tw.utils.forceLayout(modalBackdrop);\\n\\t$tw.utils.forceLayout(modalWrapper);\\n\\t// Set final animated styles\\n\\t$tw.utils.setStyle(modalBackdrop,\\n\\t\\t{opacity: \\\0.7\\\}\\n\\t);\\n\\t$tw.utils.setStyle(modalWrapper,\\n\\t\\t{transform: \\\translateY(0px)\\\}\\n\\t);\\n};\\n\\nModal.prototype.adjustPageClass function() {\\n\\tvar windowContainer $tw.pageContainer ? ($tw.pageContainer this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\\n\\tif(windowContainer) {\\n\\t\\t$tw.utils.toggleClass(windowContainer,\\\tc-modal-displayed\\\,this.modalCount > 0);\\n\\t}\\n\\t$tw.utils.toggleClass(this.srcDocument.body,\\\tc-modal-prevent-scroll\\\,this.modalCount > 0);\\n};\\n\\nexports.Modal Modal;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/notifier.js\:{\title\:\$:/core/modules/utils/dom/notifier.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/notifier.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nNotifier mechanism\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nvar Notifier function(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\n/*\\nDisplay a notification\\n\\ttitle: Title of tiddler containing the notification text\\n\\toptions: see below\\nOptions include:\\n*/\\nNotifier.prototype.display function(title,options) {\\n\\toptions options || {};\\n\\t// Create the wrapper divs\\n\\tvar self this,\\n\\t\\tnotification document.createElement(\\\div\\\),\\n\\t\\ttiddler this.wiki.getTiddler(title),\\n\\t\\tduration $tw.utils.getAnimationDuration(),\\n\\t\\trefreshHandler;\\n\\t// Dont do anything if the tiddler doesnt exist\\n\\tif(!tiddler) {\\n\\t\\treturn;\\n\\t}\\n\\t// Add classes and roles\\n\\t$tw.utils.addClass(notification,\\\tc-notification\\\);\\n\\tnotification.setAttribute(\\\role\\\,\\\alert\\\);\\n\\t// Create the variables\\n\\tvar variables $tw.utils.extend({currentTiddler: title},options.variables);\\n\\t// Render the body of the notification\\n\\tvar widgetNode this.wiki.makeTranscludeWidget(title,{\\n\\t\\tparentWidget: $tw.rootWidget,\\n\\t\\tdocument: document,\\n\\t\\tvariables: variables,\\n\\t\\timportPageMacros: true});\\n\\twidgetNode.render(notification,null);\\n\\trefreshHandler function(changes) {\\n\\t\\twidgetNode.refresh(changes,notification,null);\\n\\t};\\n\\tthis.wiki.addEventListener(\\\change\\\,refreshHandler);\\n\\t// Set the initial styles for the notification\\n\\t$tw.utils.setStyle(notification,\\n\\t\\t{opacity: \\\0\\\},\\n\\t\\t{transformOrigin: \\\0% 0%\\\},\\n\\t\\t{transform: \\\translateY(\\\ + (-window.innerHeight) + \\\px)\\\},\\n\\t\\t{transition: \\\opacity \\\ + duration + \\\ms ease-out, \\\ + $tw.utils.roundTripPropertyName(\\\transform\\\) + \\\ \\\ + duration + \\\ms ease-in-out\\\}\\n\\t);\\n\\t// Add the notification to the DOM\\n\\tdocument.body.appendChild(notification);\\n\\t// Force layout\\n\\t$tw.utils.forceLayout(notification);\\n\\t// Set final animated styles\\n\\t$tw.utils.setStyle(notification,\\n\\t\\t{opacity: \\\1.0\\\},\\n\\t\\t{transform: \\\translateY(0px)\\\}\\n\\t);\\n\\t// Set a timer to remove the notification\\n\\twindow.setTimeout(function() {\\n\\t\\t// Remove our change event handler\\n\\t\\tself.wiki.removeEventListener(\\\change\\\,refreshHandler);\\n\\t\\t// Force layout and animate the notification away\\n\\t\\t$tw.utils.forceLayout(notification);\\n\\t\\t$tw.utils.setStyle(notification,\\n\\t\\t\\t{opacity: \\\0.0\\\},\\n\\t\\t\\t{transform: \\\translateX(\\\ + (notification.offsetWidth) + \\\px)\\\}\\n\\t\\t);\\n\\t\\t// Remove the modal message from the DOM once the transition ends\\n\\t\\tsetTimeout(function() {\\n\\t\\t\\tif(notification.parentNode) {\\n\\t\\t\\t\\tdocument.body.removeChild(notification);\\n\\t\\t\\t}\\n\\t\\t},duration);\\n\\t},$tw.config.preferences.notificationDuration);\\n};\\n\\nexports.Notifier Notifier;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/popup.js\:{\title\:\$:/core/modules/utils/dom/popup.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/popup.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nCreates a Popup object with these options:\\n\\trootElement: the DOM element to which the popup zapper should be attached\\n*/\\nvar Popup function(options) {\\n\\toptions options || {};\\n\\tthis.rootElement options.rootElement || document.documentElement;\\n\\tthis.popups ; // Array of {title:,wiki:,domNode:} objects\\n};\\n\\n/*\\nGlobal regular expression for parsing the location of a popup.\\nThis is also used by the Reveal widget.\\n*/\\nexports.popupLocationRegExp /^(@?)\\\\((-?0-9\\\\.E+),(-?0-9\\\\.E+),(-?0-9\\\\.E+),(-?0-9\\\\.E+)\\\\)$/\\n\\n/*\\nObjekt containing the available prefixes for coordinates build with the `buildCoordinates` function:\\n - csOffsetParent: Uses a coordinate system based on the offset parent (no prefix).\\n - csAbsolute: Use an absolute coordinate system (prefix \\\@\\\).\\n*/\\nexports.coordinatePrefix { csOffsetParent: \\\\\\, csAbsolute: \\\@\\\ }\\n\\n/*\\nTrigger a popup open or closed. Parameters are in a hashmap:\\n\\ttitle: title of the tiddler where the popup details are stored\\n\\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\\n\\tdomNodeRect: rectangle to which the popup will be positioned\\n\\twiki: wiki\\n\\tforce: if specified, forces the popup state to true or false (instead of toggling it)\\n\\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\\n*/\\nPopup.prototype.triggerPopup function(options) {\\n\\t// Check if this popup is already active\\n\\tvar index this.findPopup(options.title);\\n\\t// Compute the new state\\n\\tvar state index -1;\\n\\tif(options.force ! undefined) {\\n\\t\\tstate options.force;\\n\\t}\\n\\t// Show or cancel the popup according to the new state\\n\\tif(state) {\\n\\t\\tthis.show(options);\\n\\t} else {\\n\\t\\tthis.cancel(index);\\n\\t}\\n};\\n\\nPopup.prototype.findPopup function(title) {\\n\\tvar index -1;\\n\\tfor(var t0; t\u003Cthis.popups.length; t++) {\\n\\t\\tif(this.popupst.title title) {\\n\\t\\t\\tindex t;\\n\\t\\t}\\n\\t}\\n\\treturn index;\\n};\\n\\nPopup.prototype.handleEvent function(event) {\\n\\tif(event.type \\\click\\\) {\\n\\t\\t// Find out what was clicked on\\n\\t\\tvar info this.popupInfo(event.target),\\n\\t\\t\\tcancelLevel info.popupLevel - 1;\\n\\t\\t// Dont remove the level that was clicked on if we clicked on a handle\\n\\t\\tif(info.isHandle) {\\n\\t\\t\\tcancelLevel++;\\n\\t\\t}\\n\\t\\t// Cancel\\n\\t\\tthis.cancel(cancelLevel);\\n\\t}\\n};\\n\\n/*\\nFind the popup level containing a DOM node. Returns:\\npopupLevel: count of the number of nested popups containing the specified element\\nisHandle: true if the specified element is within a popup handle\\n*/\\nPopup.prototype.popupInfo function(domNode) {\\n\\tvar isHandle false,\\n\\t\\tpopupCount 0,\\n\\t\\tnode domNode;\\n\\t// First check ancestors to see if were within a popup handle\\n\\twhile(node) {\\n\\t\\tif($tw.utils.hasClass(node,\\\tc-popup-handle\\\)) {\\n\\t\\t\\tisHandle true;\\n\\t\\t\\tpopupCount++;\\n\\t\\t}\\n\\t\\tif($tw.utils.hasClass(node,\\\tc-popup-keep\\\)) {\\n\\t\\t\\tisHandle true;\\n\\t\\t}\\n\\t\\tnode node.parentNode;\\n\\t}\\n\\t// Then count the number of ancestor popups\\n\\tnode domNode;\\n\\twhile(node) {\\n\\t\\tif($tw.utils.hasClass(node,\\\tc-popup\\\)) {\\n\\t\\t\\tpopupCount++;\\n\\t\\t}\\n\\t\\tnode node.parentNode;\\n\\t}\\n\\tvar info {\\n\\t\\tpopupLevel: popupCount,\\n\\t\\tisHandle: isHandle\\n\\t};\\n\\treturn info;\\n};\\n\\n/*\\nDisplay a popup by adding it to the stack\\n*/\\nPopup.prototype.show function(options) {\\n\\t// Find out what was clicked on\\n\\tvar info this.popupInfo(options.domNode);\\n\\t// Cancel any higher level popups\\n\\tthis.cancel(info.popupLevel);\\n\\n\\t// Store the popup details if not already there\\n\\tif(!options.floating && this.findPopup(options.title) -1) {\\n\\t\\tthis.popups.push({\\n\\t\\t\\ttitle: options.title,\\n\\t\\t\\twiki: options.wiki,\\n\\t\\t\\tdomNode: options.domNode,\\n\\t\\t\\tnoStateReference: options.noStateReference\\n\\t\\t});\\n\\t}\\n\\t// Set the state tiddler\\n\\tvar rect;\\n\\tif(options.domNodeRect) {\\n\\t\\trect options.domNodeRect;\\n\\t} else {\\n\\t\\trect {\\n\\t\\t\\tleft: options.domNode.offsetLeft,\\n\\t\\t\\ttop: options.domNode.offsetTop,\\n\\t\\t\\twidth: options.domNode.offsetWidth,\\n\\t\\t\\theight: options.domNode.offsetHeight\\n\\t\\t};\\n\\t}\\n\\tif(options.absolute && options.domNode) {\\n\\t\\t// Walk the offsetParent chain and add the position of the offsetParents to make\\n\\t\\t// the position absolute to the root node of the page.\\n\\t\\tvar currentNode options.domNode.offsetParent;\\n\\t\\twhile(currentNode) {\\n\\t\\t\\trect.left + currentNode.offsetLeft;\\n\\t\\t\\trect.top + currentNode.offsetTop;\\n\\t\\t\\tcurrentNode currentNode.offsetParent;\\n\\t\\t}\\n\\t}\\n\\tvar popupRect exports.buildCoordinates(options.absolute?exports.coordinatePrefix.csAbsolute:exports.coordinatePrefix.csOffsetParent,rect);\\n\\tif(options.noStateReference) {\\n\\t\\toptions.wiki.setText(options.title,\\\text\\\,undefined,popupRect);\\n\\t} else {\\n\\t\\toptions.wiki.setTextReference(options.title,popupRect);\\n\\t}\\n\\t// Add the click handler if we have any popups\\n\\tif(this.popups.length > 0) {\\n\\t\\tthis.rootElement.addEventListener(\\\click\\\,this,true);\\n\\t}\\n};\\n\\n/*\\nCancel all popups at or above a specified level or DOM node\\nlevel: popup level to cancel (0 cancels all popups)\\n*/\\nPopup.prototype.cancel function(level) {\\n\\tvar numPopups this.popups.length;\\n\\tlevel Math.max(0,Math.min(level,numPopups));\\n\\tfor(var tlevel; t\u003CnumPopups; t++) {\\n\\t\\tvar popup this.popups.pop();\\n\\t\\tif(popup.title) {\\n\\t\\t\\tif(popup.noStateReference) {\\n\\t\\t\\t\\tpopup.wiki.deleteTiddler(popup.title);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\\n \\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif(this.popups.length 0) {\\n\\t\\tthis.rootElement.removeEventListener(\\\click\\\,this,false);\\n\\t}\\n};\\n\\n/*\\nReturns true if the specified title and text identifies an active popup.\\nThis function is safe to call, even if the popup class was not initialized.\\n*/\\nexports.readPopupState function(text) {\\n\\treturn exports.popupLocationRegExp.test(text);\\n};\\n\\n/*\\nParses a coordinate string in the format `(x,y,w,h)` or `@(x,y,z,h)` and returns\\nan object containing the position, width and height. The absolute-Mark is boolean\\nvalue that indicates the coordinate system of the coordinates. If they start with\\nan `@`, `absolute` is set to true and the coordinates are relative to the root\\nelement. If the initial `@` is missing, they are relative to the offset parent\\nelement and `absoute` is false.\\nThis function is safe to call, even if the popup class was not initialized.\\n*/\\nexports.parseCoordinates function(coordinates) {\\n\\tvar match exports.popupLocationRegExp.exec(coordinates);\\n\\tif(match) {\\n\\t\\treturn {\\n\\t\\t\\tabsolute: (match1 \\\@\\\),\\n\\t\\t\\tleft: parseFloat(match2),\\n\\t\\t\\ttop: parseFloat(match3),\\n\\t\\t\\twidth: parseFloat(match4),\\n\\t\\t\\theight: parseFloat(match5)\\n\\t\\t};\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n}\\n\\n/*\\nBuilds a coordinate string from a coordinate system identifier and an object\\ncontaining the left, top, width and height values.\\nUse constants defined in coordinatePrefix to specify a coordinate system.\\nIf one of the parameters is invalid for building a coordinate string `(0,0,0,0)`\\nwill be returned.\\nThis function is safe to call, even if the popup class was not initialized.\\n*/\\nexports.buildCoordinates function(prefix,position) {\\n\\tvar coord prefix + \\\(\\\ + position.left + \\\,\\\ + position.top + \\\,\\\ + position.width + \\\,\\\ + position.height + \\\)\\\;\\n\\tif (exports.popupLocationRegExp.test(coord)) {\\n\\t\\treturn coord;\\n\\t} else {\\n\\t\\treturn \\\(0,0,0,0)\\\;\\n\\t}\\n}\\n\\nexports.Popup Popup;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/dom/scroller.js\:{\title\:\$:/core/modules/utils/dom/scroller.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/dom/scroller.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nEvent handler for when the `tm-scroll` event hits the document body\\n*/\\nvar PageScroller function() {\\n\\tthis.idRequestFrame null;\\n\\tthis.requestAnimationFrame window.requestAnimationFrame ||\\n\\t\\twindow.webkitRequestAnimationFrame ||\\n\\t\\twindow.mozRequestAnimationFrame ||\\n\\t\\tfunction(callback) {\\n\\t\\t\\treturn window.setTimeout(callback, 1000/60);\\n\\t\\t};\\n\\tthis.cancelAnimationFrame window.cancelAnimationFrame ||\\n\\t\\twindow.webkitCancelAnimationFrame ||\\n\\t\\twindow.webkitCancelRequestAnimationFrame ||\\n\\t\\twindow.mozCancelAnimationFrame ||\\n\\t\\twindow.mozCancelRequestAnimationFrame ||\\n\\t\\tfunction(id) {\\n\\t\\t\\twindow.clearTimeout(id);\\n\\t\\t};\\n};\\n\\nPageScroller.prototype.isScrolling function() {\\n\\treturn this.idRequestFrame ! null;\\n}\\n\\nPageScroller.prototype.cancelScroll function(srcWindow) {\\n\\tif(this.idRequestFrame) {\\n\\t\\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\\n\\t\\tthis.idRequestFrame null;\\n\\t}\\n};\\n\\n/*\\nHandle an event\\n*/\\nPageScroller.prototype.handleEvent function(event) {\\n\\tif(event.type \\\tm-scroll\\\) {\\n\\t\\tvar options {};\\n\\t\\tif($tw.utils.hop(event.paramObject,\\\animationDuration\\\)) {\\n\\t\\t\\toptions.animationDuration event.paramObject.animationDuration;\\n\\t\\t}\\n\\t\\tif(event.paramObject && event.paramObject.selector) {\\n\\t\\t\\tthis.scrollSelectorIntoView(null,event.paramObject.selector,null,options);\\n\\t\\t} else {\\n\\t\\t\\tthis.scrollIntoView(event.target,null,options);\\n\\t\\t}\\n\\t\\treturn false; // Event was handled\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nHandle a scroll event hitting the page document\\n*/\\nPageScroller.prototype.scrollIntoView function(element,callback,options) {\\n\\tvar self this,\\n\\t\\tduration $tw.utils.hop(options,\\\animationDuration\\\) ? parseInt(options.animationDuration) : $tw.utils.getAnimationDuration(),\\n\\t\\tsrcWindow element ? element.ownerDocument.defaultView : window;\\n\\t// Now get ready to scroll the body\\n\\tthis.cancelScroll(srcWindow);\\n\\tthis.startTime Date.now();\\n\\t// Get the height of any position:fixed toolbars\\n\\tvar toolbar srcWindow.document.querySelector(\\\.tc-adjust-top-of-scroll\\\),\\n\\t\\toffset 0;\\n\\tif(toolbar) {\\n\\t\\toffset toolbar.offsetHeight;\\n\\t}\\n\\t// Get the client bounds of the element and adjust by the scroll position\\n\\tvar getBounds function() {\\n\\t\\t\\tvar clientBounds typeof callback function ? callback() : element.getBoundingClientRect(),\\n\\t\\t\\t\\tscrollPosition $tw.utils.getScrollPosition(srcWindow);\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tleft: clientBounds.left + scrollPosition.x,\\n\\t\\t\\t\\ttop: clientBounds.top + scrollPosition.y - offset,\\n\\t\\t\\t\\twidth: clientBounds.width,\\n\\t\\t\\t\\theight: clientBounds.height\\n\\t\\t\\t};\\n\\t\\t},\\n\\t\\t// Well consider the horizontal and vertical scroll directions separately via this function\\n\\t\\t// targetPos/targetSize - position and size of the target element\\n\\t\\t// currentPos/currentSize - position and size of the current scroll viewport\\n\\t\\t// returns: new position of the scroll viewport\\n\\t\\tgetEndPos function(targetPos,targetSize,currentPos,currentSize) {\\n\\t\\t\\tvar newPos targetPos;\\n\\t\\t\\t// If we are scrolling within 50 pixels of the top/left then snap to zero\\n\\t\\t\\tif(newPos \u003C 50) {\\n\\t\\t\\t\\tnewPos 0;\\n\\t\\t\\t}\\n\\t\\t\\treturn newPos;\\n\\t\\t},\\n\\t\\tdrawFrame function drawFrame() {\\n\\t\\t\\tvar t;\\n\\t\\t\\tif(duration \u003C 0) {\\n\\t\\t\\t\\tt 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tt ((Date.now()) - self.startTime) / duration;\\n\\t\\t\\t}\\n\\t\\t\\tif(t > 1) {\\n\\t\\t\\t\\tself.cancelScroll(srcWindow);\\n\\t\\t\\t\\tt 1;\\n\\t\\t\\t}\\n\\t\\t\\tt $tw.utils.slowInSlowOut(t);\\n\\t\\t\\tvar scrollPosition $tw.utils.getScrollPosition(srcWindow),\\n\\t\\t\\t\\tbounds getBounds(),\\n\\t\\t\\t\\tendX getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\\n\\t\\t\\t\\tendY getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\\n\\t\\t\\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\\n\\t\\t\\tif(t \u003C 1) {\\n\\t\\t\\t\\tself.idRequestFrame self.requestAnimationFrame.call(srcWindow,drawFrame);\\n\\t\\t\\t}\\n\\t\\t};\\n\\tdrawFrame();\\n};\\n\\nPageScroller.prototype.scrollSelectorIntoView function(baseElement,selector,callback,options) {\\n\\tbaseElement baseElement || document;\\n\\tvar element $tw.utils.querySelectorSafe(selector,baseElement);\\n\\tif(element) {\\n\\t\\tthis.scrollIntoView(element,callback,options);\\n\\t}\\n};\\n\\nexports.PageScroller PageScroller;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/edition-info.js\:{\title\:\$:/core/modules/utils/edition-info.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/edition-info.js\\ntype: application/javascript\\nmodule-type: utils-node\\n\\nInformation about the available editions\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar fs require(\\\fs\\\),\\n\\tpath require(\\\path\\\);\\n\\nvar editionInfo;\\n\\nexports.getEditionInfo function() {\\n\\tif(!editionInfo) {\\n\\t\\t// Enumerate the edition paths\\n\\t\\tvar editionPaths $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\\n\\t\\teditionInfo {};\\n\\t\\tfor(var editionIndex0; editionIndex\u003CeditionPaths.length; editionIndex++) {\\n\\t\\t\\tvar editionPath editionPathseditionIndex;\\n\\t\\t\\t// Enumerate the folders\\n\\t\\t\\tvar entries fs.readdirSync(editionPath);\\n\\t\\t\\tfor(var entryIndex0; entryIndex\u003Centries.length; entryIndex++) {\\n\\t\\t\\t\\tvar entry entriesentryIndex;\\n\\t\\t\\t\\t// Check if directories have a valid tiddlywiki.info\\n\\t\\t\\t\\t// Check if the entry is a hidden directory\\n\\t\\t\\t\\tif((entry.charAt(0) ! \\\.\\\) && !editionInfoentry && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\\n\\t\\t\\t\\t\\tvar filepath.resolve(editionPath,entry,\\\tiddlywiki.info\\\);\\n\\t\\t\\t\\t\\tif(fs.existsSync(file)) {\\n\\t\\t\\t\\t\\t\\tvar info $tw.utils.parseJSONSafe(fs.readFileSync(file,\\\utf8\\\),null);\\n\\t\\t\\t\\t\\t\\tif(info) {\\n\\t\\t\\t\\t\\t\\t\\teditionInfoentry info;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn editionInfo;\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils-node\},\$:/core/modules/utils/errors.js\:{\title\:\$:/core/modules/utils/errors.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/errors.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nCustom errors for TiddlyWiki.\\n\\n\\\\*/\\nfunction TranscludeRecursionError() {\\n\\tError.apply(this,arguments);\\n\\tthis.signatures Object.create(null);\\n};\\n\\n/* Maximum permitted depth of the widget tree for recursion detection */\\nTranscludeRecursionError.MAX_WIDGET_TREE_DEPTH 1000;\\n\\nTranscludeRecursionError.prototype Object.create(Error);\\n\\nexports.TranscludeRecursionError TranscludeRecursionError;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/escapecss.js\:{\title\:\$:/core/modules/utils/escapecss.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/escapecss.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nProvides CSS.escape() functionality.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// TODO -- resolve this construction\\nexports.escapeCSS (function() {\\n\\t// use browsers native CSS.escape() function if available\\n\\tif ($tw.browser && window.CSS && window.CSS.escape) {\\n\\t\\treturn window.CSS.escape;\\n\\t}\\n\\n\\t// otherwise, a utility method is provided\\n\\t// see also https://drafts.csswg.org/cssom/#serialize-an-identifier\\n\\n\\t/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\\n\\treturn function(value) {\\n\\t\\tif (arguments.length 0) {\\n\\t\\t\\tthrow new TypeError(`CSS.escape` requires an argument.);\\n\\t\\t}\\n\\t\\tvar string String(value);\\n\\t\\tvar length string.length;\\n\\t\\tvar index -1;\\n\\t\\tvar codeUnit;\\n\\t\\tvar result ;\\n\\t\\tvar firstCodeUnit string.charCodeAt(0);\\n\\t\\twhile (++index \u003C length) {\\n\\t\\t\\tcodeUnit string.charCodeAt(index);\\n\\t\\t\\t// Note: there’s no need to special-case astral symbols, surrogate\\n\\t\\t\\t// pairs, or lone surrogates.\\n\\n\\t\\t\\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\\n\\t\\t\\t// (U+FFFD).\\n\\t\\t\\tif (codeUnit 0x0000) {\\n\\t\\t\\t\\tresult + \\\\uFFFD;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (\\n\\t\\t\\t\\t// If the character is in the range \\\\1-\\\\1F (U+0001 to U+001F) or is\\n\\t\\t\\t\\t// U+007F, …\\n\\t\\t\\t\\t(codeUnit > 0x0001 && codeUnit \u003C 0x001F) || codeUnit 0x007F ||\\n\\t\\t\\t\\t// If the character is the first character and is in the range 0-9\\n\\t\\t\\t\\t// (U+0030 to U+0039), …\\n\\t\\t\\t\\t(index 0 && codeUnit > 0x0030 && codeUnit \u003C 0x0039) ||\\n\\t\\t\\t\\t// If the character is the second character and is in the range 0-9\\n\\t\\t\\t\\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), …\\n\\t\\t\\t\\t(\\n\\t\\t\\t\\t\\tindex 1 &&\\n\\t\\t\\t\\t\\tcodeUnit > 0x0030 && codeUnit \u003C 0x0039 &&\\n\\t\\t\\t\\t\\tfirstCodeUnit 0x002D\\n\\t\\t\\t\\t)\\n\\t\\t\\t) {\\n\\t\\t\\t\\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\\n\\t\\t\\t\\tresult + \\\\\\\\ + codeUnit.toString(16) + ;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (\\n\\t\\t\\t\\t// If the character is the first character and is a `-` (U+002D), and\\n\\t\\t\\t\\t// there is no second character, …\\n\\t\\t\\t\\tindex 0 &&\\n\\t\\t\\t\\tlength 1 &&\\n\\t\\t\\t\\tcodeUnit 0x002D\\n\\t\\t\\t) {\\n\\t\\t\\t\\tresult + \\\\\\\\ + string.charAt(index);\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// If the character is not handled by one of the above rules and is\\n\\t\\t\\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\\n\\t\\t\\t// is in one of the ranges 0-9 (U+0030 to U+0039), A-Z (U+0041 to\\n\\t\\t\\t// U+005A), or a-z (U+0061 to U+007A), …\\n\\t\\t\\tif (\\n\\t\\t\\t\\tcodeUnit > 0x0080 ||\\n\\t\\t\\t\\tcodeUnit 0x002D ||\\n\\t\\t\\t\\tcodeUnit 0x005F ||\\n\\t\\t\\t\\tcodeUnit > 0x0030 && codeUnit \u003C 0x0039 ||\\n\\t\\t\\t\\tcodeUnit > 0x0041 && codeUnit \u003C 0x005A ||\\n\\t\\t\\t\\tcodeUnit > 0x0061 && codeUnit \u003C 0x007A\\n\\t\\t\\t) {\\n\\t\\t\\t\\t// the character itself\\n\\t\\t\\t\\tresult + string.charAt(index);\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Otherwise, the escaped character.\\n\\t\\t\\t// https://drafts.csswg.org/cssom/#escape-a-character\\n\\t\\t\\tresult + \\\\\\\\ + string.charAt(index);\\n\\n\\t\\t}\\n\\t\\treturn result;\\n\\t};\\n})();\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/fakedom.js\:{\title\:\$:/core/modules/utils/fakedom.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/fakedom.js\\ntype: application/javascript\\nmodule-type: global\\n\\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Sequence number used to enable us to track objects for testing\\nvar sequenceNumber null;\\n\\nvar bumpSequenceNumber function(object) {\\n\\tif(sequenceNumber ! null) {\\n\\t\\tobject.sequenceNumber sequenceNumber++;\\n\\t}\\n};\\n\\nvar TW_Node function (){\\n\\tthrow TypeError(\\\Illegal constructor\\\);\\n};\\n\\nObject.defineProperty(TW_Node.prototype, ELEMENT_NODE, {\\n\\tget: function() {\\n\\t\\treturn 1;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Node.prototype, TEXT_NODE, {\\n\\tget: function() {\\n\\t\\treturn 3;\\n\\t}\\n});\\n\\nvar TW_TextNode function(text) {\\n\\tbumpSequenceNumber(this);\\n\\tthis.textContent text + \\\\\\;\\n};\\n\\nObject.setPrototypeOf(TW_TextNode.prototype,TW_Node.prototype);\\n\\nObject.defineProperty(TW_TextNode.prototype, \\\nodeType\\\, {\\n\\tget: function() {\\n\\t\\treturn this.TEXT_NODE;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_TextNode.prototype, \\\formattedTextContent\\\, {\\n\\tget: function() {\\n\\t\\treturn this.textContent.replace(/(\\\\r?\\\\n)/g,\\\\\\);\\n\\t}\\n});\\n\\nvar TW_Style function(el) {\\n\\t// Define the internal style object\\n\\tvar styleObject {\\n\\t\\t// Method to get the entire style object\\n\\t\\tget: function() {\\n\\t\\t\\treturn el._style;\\n\\t\\t},\\n\\t\\t// Method to set styles using a string (e.g. \\\color:red; background-color:blue;\\\)\\n\\t\\tset: function(str) {\\n\\t\\t\\tvar self this;\\n\\t\\t\\tstr str || \\\\\\;\\n\\t\\t\\t$tw.utils.each(str.split(\\\;\\\),function(declaration) {\\n\\t\\t\\t\\tvar parts declaration.split(\\\:\\\),\\n\\t\\t\\t\\t\\tname $tw.utils.trim(parts0),\\n\\t\\t\\t\\t\\tvalue $tw.utils.trim(parts1);\\n\\t\\t\\t\\tif(name && value) {\\n\\t\\t\\t\\t\\tel._style$tw.utils.convertStyleNameToPropertyName(name) value;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t},\\n\\t\\t// Method to set a specific property without transforming the property name, such as a custom property\\n\\t\\tsetProperty: function(name, value) {\\n\\t\\t\\tel._stylename value;\\n\\t\\t}\\n\\t};\\n\\n\\t// Return a Proxy to handle direct access to individual style properties\\n\\treturn new Proxy(styleObject, {\\n\\t\\tget: function(target, property) {\\n\\t\\t\\t// If the property exists on styleObject, return it (get, set, setProperty methods)\\n\\t\\t\\tif (property in target) {\\n\\t\\t\\t\\treturn targetproperty;\\n\\t\\t\\t}\\n\\t\\t\\t// Otherwise, return the corresponding property from _style\\n\\t\\t\\treturn el._style$tw.utils.convertStyleNameToPropertyName(property) || \\\\\\;\\n\\t\\t},\\n\\t\\tset: function(target, property, value) {\\n\\t\\t\\t// Set the property in _style\\n\\t\\t\\tel._style$tw.utils.convertStyleNameToPropertyName(property) value;\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t});\\n};\\n\\nvar TW_Element function(tag, namespace) {\\n\\tbumpSequenceNumber(this);\\n\\tthis.isTiddlyWikiFakeDom true;\\n\\tthis.tag tag;\\n\\tthis.attributes {};\\n\\tthis.isRaw false;\\n\\tthis.children ;\\n\\tthis._style {}; // Internal style object\\n\\tthis.style new TW_Style(this); // Proxy for style management\\n\\tthis.namespaceURI namespace || \\\http://www.w3.org/1999/xhtml\\\;\\n};\\n\\n\\nObject.setPrototypeOf(TW_Element.prototype,TW_Node.prototype);\\n\\nObject.defineProperty(TW_Element.prototype, \\\nodeType\\\, {\\n\\tget: function() {\\n\\t\\treturn this.ELEMENT_NODE;\\n\\t}\\n});\\n\\nTW_Element.prototype.getAttribute function(name) {\\n\\tif(this.isRaw) {\\n\\t\\tthrow \\\Cannot getAttribute on a raw TW_Element\\\;\\n\\t}\\n\\treturn this.attributesname;\\n};\\n\\nTW_Element.prototype.setAttribute function(name,value) {\\n\\tif(this.isRaw) {\\n\\t\\tthrow \\\Cannot setAttribute on a raw TW_Element\\\;\\n\\t}\\n\\tif(name \\\style\\\) {\\n\\t\\tthis.style.set(value);\\n\\t} else {\\n\\t\\tthis.attributesname value + \\\\\\;\\n\\t}\\n};\\n\\nTW_Element.prototype.setAttributeNS function(namespace,name,value) {\\n\\tthis.setAttribute(name,value);\\n};\\n\\nTW_Element.prototype.removeAttribute function(name) {\\n\\tif(this.isRaw) {\\n\\t\\tthrow \\\Cannot removeAttribute on a raw TW_Element\\\;\\n\\t}\\n\\tif($tw.utils.hop(this.attributes,name)) {\\n\\t\\tdelete this.attributesname;\\n\\t}\\n};\\n\\nTW_Element.prototype.appendChild function(node) {\\n\\tthis.children.push(node);\\n\\tnode.parentNode this;\\n};\\n\\nTW_Element.prototype.insertBefore function(node,nextSibling) {\\n\\tif(nextSibling) {\\n\\t\\tvar p this.children.indexOf(nextSibling);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tthis.children.splice(p,0,node);\\n\\t\\t\\tnode.parentNode this;\\n\\t\\t} else {\\n\\t\\t\\tthis.appendChild(node);\\n\\t\\t}\\n\\t} else {\\n\\t\\tthis.appendChild(node);\\n\\t}\\n};\\n\\nTW_Element.prototype.removeChild function(node) {\\n\\tvar p this.children.indexOf(node);\\n\\tif(p ! -1) {\\n\\t\\tthis.children.splice(p,1);\\n\\t}\\n};\\n\\nTW_Element.prototype.hasChildNodes function() {\\n\\treturn !!this.children.length;\\n};\\n\\nObject.defineProperty(TW_Element.prototype, \\\childNodes\\\, {\\n\\tget: function() {\\n\\t\\treturn this.children;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\firstChild\\\, {\\n\\tget: function() {\\n\\t\\treturn this.children0;\\n\\t}\\n});\\n\\nTW_Element.prototype.addEventListener function(type,listener,useCapture) {\\n\\t// Do nothing\\n};\\n\\nObject.defineProperty(TW_Element.prototype, \\\tagName\\\, {\\n\\tget: function() {\\n\\t\\treturn this.tag || \\\\\\;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\className\\\, {\\n\\tget: function() {\\n\\t\\treturn this.attributes\\\class\\\ || \\\\\\;\\n\\t},\\n\\tset: function(value) {\\n\\t\\tthis.attributes\\\class\\\ value + \\\\\\;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\value\\\, {\\n\\tget: function() {\\n\\t\\treturn this.attributes.value || \\\\\\;\\n\\t},\\n\\tset: function(value) {\\n\\t\\tthis.attributes.value value + \\\\\\;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\outerHTML\\\, {\\n\\tget: function() {\\n\\t\\tvar output ,attr,a,v;\\n\\t\\toutput.push(\\\\u003C\\\,this.tag);\\n\\t\\tif(this.attributes) {\\n\\t\\t\\tattr ;\\n\\t\\t\\tfor(a in this.attributes) {\\n\\t\\t\\t\\tattr.push(a);\\n\\t\\t\\t}\\n\\t\\t\\tattr.sort();\\n\\t\\t\\tfor(a0; a\u003Cattr.length; a++) {\\n\\t\\t\\t\\tv this.attributesattra;\\n\\t\\t\\t\\tif(v ! undefined) {\\n\\t\\t\\t\\t\\toutput.push(\\\ \\\,attra,\\\\\\\\\\\\\,$tw.utils.htmlEncode(v),\\\\\\\\\\\\\);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(this._style) {\\n\\t\\t\\tvar style ;\\n\\t\\t\\tfor(var s in this._style) {\\n\\t\\t\\t\\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \\\:\\\ + this._styles + \\\;\\\);\\n\\t\\t\\t}\\n\\t\\t\\tif(style.length > 0) {\\n\\t\\t\\t\\toutput.push(\\\ style\\\\\\\\\\,style.join(\\\\\\),\\\\\\\\\\\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\toutput.push(\\\>\\\);\\n\\t\\tif($tw.config.htmlVoidElements.indexOf(this.tag) -1) {\\n\\t\\t\\toutput.push(this.innerHTML);\\n\\t\\t\\toutput.push(\\\\u003C/\\\,this.tag,\\\>\\\);\\n\\t\\t}\\n\\t\\treturn output.join(\\\\\\);\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\innerHTML\\\, {\\n\\tget: function() {\\n\\t\\tif(this.isRaw) {\\n\\t\\t\\treturn this.rawHTML;\\n\\t\\t} else {\\n\\t\\t\\tvar b ;\\n\\t\\t\\t$tw.utils.each(this.children,function(node) {\\n\\t\\t\\t\\tif(node instanceof TW_Element) {\\n\\t\\t\\t\\t\\tb.push(node.outerHTML);\\n\\t\\t\\t\\t} else if(node instanceof TW_TextNode) {\\n\\t\\t\\t\\t\\tb.push($tw.utils.htmlTextEncode(node.textContent));\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\treturn b.join(\\\\\\);\\n\\t\\t}\\n\\t},\\n\\tset: function(value) {\\n\\t\\tthis.isRaw true;\\n\\t\\tthis.rawHTML value;\\n\\t\\tthis.rawTextContent null;\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\textInnerHTML\\\, {\\n\\tset: function(value) {\\n\\t\\tif(this.isRaw) {\\n\\t\\t\\tthis.rawTextContent value;\\n\\t\\t} else {\\n\\t\\t\\tthrow \\\Cannot set textInnerHTML of a non-raw TW_Element\\\;\\n\\t\\t}\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\textContent\\\, {\\n\\tget: function() {\\n\\t\\tif(this.isRaw) {\\n\\t\\t\\tif(this.rawTextContent null) {\\n\\t\\t\\t\\treturn \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn this.rawTextContent;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar b ;\\n\\t\\t\\t$tw.utils.each(this.children,function(node) {\\n\\t\\t\\t\\tb.push(node.textContent);\\n\\t\\t\\t});\\n\\t\\t\\treturn b.join(\\\\\\);\\n\\t\\t}\\n\\t},\\n\\tset: function(value) {\\n\\t\\tthis.children new TW_TextNode(value);\\n\\t}\\n});\\n\\nObject.defineProperty(TW_Element.prototype, \\\formattedTextContent\\\, {\\n\\tget: function() {\\n\\t\\tif(this.isRaw) {\\n\\t\\t\\treturn \\\\\\;\\n\\t\\t} else {\\n\\t\\t\\tvar b ,\\n\\t\\t\\t\\tisBlock $tw.config.htmlBlockElements.indexOf(this.tag) ! -1;\\n\\t\\t\\tif(isBlock) {\\n\\t\\t\\t\\tb.push(\\\\\\\n\\\);\\n\\t\\t\\t}\\n\\t\\t\\tif(this.tag \\\li\\\) {\\n\\t\\t\\t\\tb.push(\\\* \\\);\\n\\t\\t\\t}\\n\\t\\t\\t$tw.utils.each(this.children,function(node) {\\n\\t\\t\\t\\tb.push(node.formattedTextContent);\\n\\t\\t\\t});\\n\\t\\t\\tif(isBlock) {\\n\\t\\t\\t\\tb.push(\\\\\\\n\\\);\\n\\t\\t\\t}\\n\\t\\t\\treturn b.join(\\\\\\);\\n\\t\\t}\\n\\t}\\n});\\n\\nvar document {\\n\\tsetSequenceNumber: function(value) {\\n\\t\\tsequenceNumber value;\\n\\t},\\n\\tcreateElementNS: function(namespace,tag) {\\n\\t\\treturn new TW_Element(tag,namespace);\\n\\t},\\n\\tcreateElement: function(tag) {\\n\\t\\treturn new TW_Element(tag);\\n\\t},\\n\\tcreateTextNode: function(text) {\\n\\t\\treturn new TW_TextNode(text);\\n\\t},\\n\\tcompatMode: \\\CSS1Compat\\\, // For KaTeX to know that were not a browser in quirks mode\\n\\tisTiddlyWikiFakeDom: true\\n};\\n\\nexports.fakeDocument document;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/utils/filesystem.js\:{\title\:\$:/core/modules/utils/filesystem.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/filesystem.js\\ntype: application/javascript\\nmodule-type: utils-node\\n\\nFile system utilities\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar fs require(\\\fs\\\),\\n\\tpath require(\\\path\\\);\\n\\n/*\\nReturn the subdirectories of a path\\n*/\\nexports.getSubdirectories function(dirPath) {\\n\\tif(!$tw.utils.isDirectory(dirPath)) {\\n\\t\\treturn null;\\n\\t}\\n\\tvar subdirs ;\\n\\t$tw.utils.each(fs.readdirSync(dirPath),function(item) {\\n\\t\\tif($tw.utils.isDirectory(path.resolve(dirPath,item))) {\\n\\t\\t\\tsubdirs.push(item);\\n\\t\\t}\\n\\t});\\n\\treturn subdirs;\\n}\\n\\n/*\\nRecursively (and synchronously) copy a directory and all its content\\n*/\\nexports.copyDirectory function(srcPath,dstPath) {\\n\\t// Remove any trailing path separators\\n\\tsrcPath path.resolve($tw.utils.removeTrailingSeparator(srcPath));\\n\\tdstPath path.resolve($tw.utils.removeTrailingSeparator(dstPath));\\n\\t// Check that neither director is within the other\\n\\tif(srcPath.substring(0,dstPath.length) dstPath || dstPath.substring(0,srcPath.length) srcPath) {\\n\\t\\treturn \\\Cannot copy nested directories\\\;\\n\\t}\\n\\t// Create the destination directory\\n\\tvar err $tw.utils.createDirectory(dstPath);\\n\\tif(err) {\\n\\t\\treturn err;\\n\\t}\\n\\t// Function to copy a folder full of files\\n\\tvar copy function(srcPath,dstPath) {\\n\\t\\tvar srcStats fs.lstatSync(srcPath),\\n\\t\\t\\tdstExists fs.existsSync(dstPath);\\n\\t\\tif(srcStats.isFile()) {\\n\\t\\t\\t$tw.utils.copyFile(srcPath,dstPath);\\n\\t\\t} else if(srcStats.isDirectory()) {\\n\\t\\t\\tvar items fs.readdirSync(srcPath);\\n\\t\\t\\tfor(var t0; t\u003Citems.length; t++) {\\n\\t\\t\\t\\tvar item itemst,\\n\\t\\t\\t\\t\\terr copy(srcPath + path.sep + item,dstPath + path.sep + item);\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn err;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\tcopy(srcPath,dstPath);\\n\\treturn null;\\n};\\n\\n/*\\nCopy a file\\n*/\\nvar FILE_BUFFER_LENGTH 64 * 1024,\\n\\tfileBuffer;\\n\\nexports.copyFile function(srcPath,dstPath) {\\n\\t// Create buffer if required\\n\\tif(!fileBuffer) {\\n\\t\\tfileBuffer Buffer.alloc(FILE_BUFFER_LENGTH);\\n\\t}\\n\\t// Create any directories in the destination\\n\\t$tw.utils.createDirectory(path.dirname(dstPath));\\n\\t// Copy the file\\n\\tvar srcFile fs.openSync(srcPath,\\\r\\\),\\n\\t\\tdstFile fs.openSync(dstPath,\\\w\\\),\\n\\t\\tbytesRead 1,\\n\\t\\tpos 0;\\n\\twhile (bytesRead > 0) {\\n\\t\\tbytesRead fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\\n\\t\\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\\n\\t\\tpos + bytesRead;\\n\\t}\\n\\tfs.closeSync(srcFile);\\n\\tfs.closeSync(dstFile);\\n\\treturn null;\\n};\\n\\n/*\\nRemove trailing path separator\\n*/\\nexports.removeTrailingSeparator function(dirPath) {\\n\\tvar len dirPath.length;\\n\\tif(dirPath.charAt(len-1) path.sep) {\\n\\t\\tdirPath dirPath.substr(0,len-1);\\n\\t}\\n\\treturn dirPath;\\n};\\n\\n/*\\nRecursively create a directory\\n*/\\nexports.createDirectory function(dirPath) {\\n\\tif(dirPath.substr(dirPath.length-1,1) ! path.sep) {\\n\\t\\tdirPath dirPath + path.sep;\\n\\t}\\n\\tvar pos 1;\\n\\tpos dirPath.indexOf(path.sep,pos);\\n\\twhile(pos ! -1) {\\n\\t\\tvar subDirPath dirPath.substr(0,pos);\\n\\t\\tif(!$tw.utils.isDirectory(subDirPath)) {\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tfs.mkdirSync(subDirPath);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\treturn \\\Error creating directory \\\ + subDirPath + \\\\\\;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpos dirPath.indexOf(path.sep,pos + 1);\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nRecursively create directories needed to contain a specified file\\n*/\\nexports.createFileDirectories function(filePath) {\\n\\treturn $tw.utils.createDirectory(path.dirname(filePath));\\n};\\n\\n/*\\nRecursively delete a directory\\n*/\\nexports.deleteDirectory function(dirPath) {\\n\\tif(fs.existsSync(dirPath)) {\\n\\t\\tvar entries fs.readdirSync(dirPath);\\n\\t\\tfor(var entryIndex0; entryIndex\u003Centries.length; entryIndex++) {\\n\\t\\t\\tvar currPath dirPath + path.sep + entriesentryIndex;\\n\\t\\t\\tif(fs.lstatSync(currPath).isDirectory()) {\\n\\t\\t\\t\\t$tw.utils.deleteDirectory(currPath);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tfs.unlinkSync(currPath);\\n\\t\\t\\t}\\n\\t\\t}\\n\\tfs.rmdirSync(dirPath);\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nCheck if a path identifies a directory\\n*/\\nexports.isDirectory function(dirPath) {\\n\\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\\n};\\n\\n/*\\nCheck if a path identifies a directory that is empty\\n*/\\nexports.isDirectoryEmpty function(dirPath) {\\n\\tif(!$tw.utils.isDirectory(dirPath)) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar files fs.readdirSync(dirPath),\\n\\t\\tempty true;\\n\\t$tw.utils.each(files,function(file,index) {\\n\\t\\tif(file.charAt(0) ! \\\.\\\) {\\n\\t\\t\\tempty false;\\n\\t\\t}\\n\\t});\\n\\treturn empty;\\n};\\n\\n/*\\nRecursively delete a tree of empty directories\\n*/\\nexports.deleteEmptyDirs function(dirpath,callback) {\\n\\tvar self this;\\n\\tfs.readdir(dirpath,function(err,files) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\tif(files.length > 0) {\\n\\t\\t\\treturn callback(null);\\n\\t\\t}\\n\\t\\tfs.rmdir(dirpath,function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\\n\\t\\t});\\n\\t});\\n};\\n\\n/*\\nCreate a fileInfo object for saving a tiddler:\\n\\tfilepath: the absolute path to the file containing the tiddler\\n\\ttype: the type of the tiddler file on disk (NOT the type of the tiddler)\\n\\thasMetaFile: true if the file also has a companion .meta file\\n\\tisEditableFile: true if the tiddler was loaded via non-standard options & marked editable\\nOptions include:\\n\\tdirectory: absolute path of root directory to which we are saving\\n\\tpathFilters: optional array of filters to be used to generate the base path\\n\\textFilters: optional array of filters to be used to generate the base path\\n\\twiki: optional wiki for evaluating the pathFilters,\\n\\tfileInfo: an existing fileInfo to check against\\n*/\\nexports.generateTiddlerFileInfo function(tiddler,options) {\\n\\tvar fileInfo {}, metaExt;\\n\\t// Propagate the isEditableFile flag\\n\\tif(options.fileInfo && !!options.fileInfo.isEditableFile) {\\n\\t\\tfileInfo.isEditableFile true;\\n\\t\\tfileInfo.originalpath options.fileInfo.originalpath;\\n\\t}\\n\\t// Check if the tiddler has any unsafe fields that cant be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\\n\\tvar hasUnsafeFields false;\\n\\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\\n\\t\\tif(fieldName ! \\\text\\\) {\\n\\t\\t\\thasUnsafeFields hasUnsafeFields || /\\\\x00-\\\\x1F/mg.test(value);\\n\\t\\t\\thasUnsafeFields hasUnsafeFields || ($tw.utils.trim(value) ! value);\\n\\t\\t}\\n\\t\\thasUnsafeFields hasUnsafeFields || /:|#/mg.test(fieldName);\\n\\t});\\n\\t// Check for field values \\n\\tif(hasUnsafeFields) {\\n\\t\\t// Save as a JSON file\\n\\t\\tfileInfo.type \\\application/json\\\;\\n\\t\\tfileInfo.hasMetaFile false;\\n\\t} else {\\n\\t\\t// Save as a .tid or a text/binary file plus a .meta file\\n\\t\\tvar tiddlerType tiddler.fields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\tif(tiddlerType \\\text/vnd.tiddlywiki\\\ || tiddlerType \\\text/vnd.tiddlywiki-multiple\\\ || tiddler.hasField(\\\_canonical_uri\\\)) {\\n\\t\\t\\t// Save as a .tid file\\n\\t\\t\\tfileInfo.type \\\application/x-tiddler\\\;\\n\\t\\t\\tfileInfo.hasMetaFile false;\\n\\t\\t} else {\\n\\t\\t\\t// Save as a text/binary file and a .meta file\\n\\t\\t\\tfileInfo.type tiddlerType;\\n\\t\\t\\tfileInfo.hasMetaFile true;\\n\\t\\t}\\n\\t\\tif(options.extFilters) {\\n\\t\\t\\t// Check for extension overrides\\n\\t\\t\\tmetaExt $tw.utils.generateTiddlerExtension(tiddler.fields.title,{\\n\\t\\t\\t\\textFilters: options.extFilters,\\n\\t\\t\\t\\twiki: options.wiki\\n\\t\\t\\t});\\n\\t\\t\\tif(metaExt) {\\n\\t\\t\\t\\tif(metaExt \\\.tid\\\) {\\n\\t\\t\\t\\t\\t// Overriding to the .tid extension needs special handling\\n\\t\\t\\t\\t\\tfileInfo.type \\\application/x-tiddler\\\;\\n\\t\\t\\t\\t\\tfileInfo.hasMetaFile false;\\n\\t\\t\\t\\t} else if (metaExt \\\.json\\\) {\\n\\t\\t\\t\\t\\t// Overriding to the .json extension needs special handling\\n\\t\\t\\t\\t\\tfileInfo.type \\\application/json\\\;\\n\\t\\t\\t\\t\\tfileInfo.hasMetaFile false;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t//If the new type matches a known extention, use that MIME types encoding\\n\\t\\t\\t\\t\\tvar extInfo $tw.utils.getFileExtensionInfo(metaExt);\\n\\t\\t\\t\\t\\tfileInfo.type extInfo ? extInfo.type : null;\\n\\t\\t\\t\\t\\tfileInfo.encoding $tw.utils.getTypeEncoding(metaExt);\\n\\t\\t\\t\\t\\tfileInfo.hasMetaFile true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Take the file extension from the tiddler content type or metaExt\\n\\tvar contentTypeInfo $tw.config.contentTypeInfofileInfo.type || {extension: \\\\\\};\\n\\t// Generate the filepath\\n\\tfileInfo.filepath $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\\n\\t\\textension: metaExt || contentTypeInfo.extension,\\n\\t\\tdirectory: options.directory,\\n\\t\\tpathFilters: options.pathFilters,\\n\\t\\twiki: options.wiki,\\n\\t\\tfileInfo: options.fileInfo\\n\\t});\\n\\treturn fileInfo;\\n};\\n\\n/*\\nGenerate the file extension for saving a tiddler\\nOptions include:\\n\\textFilters: optional array of filters to be used to generate the extention\\n\\twiki: optional wiki for evaluating the extFilters\\n*/\\nexports.generateTiddlerExtension function(title,options) {\\n\\tvar extension;\\n\\t// Check if any of the extFilters applies\\n\\tif(options.extFilters && options.wiki) { \\n\\t\\t$tw.utils.each(options.extFilters,function(filter) {\\n\\t\\t\\tif(!extension) {\\n\\t\\t\\t\\tvar source options.wiki.makeTiddlerIterator(title),\\n\\t\\t\\t\\t\\tresult options.wiki.filterTiddlers(filter,null,source);\\n\\t\\t\\t\\tif(result.length > 0) {\\n\\t\\t\\t\\t\\textension result0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn extension;\\n};\\n\\n/*\\nGenerate the filepath for saving a tiddler\\nOptions include:\\n\\textension: file extension to be added the finished filepath\\n\\tdirectory: absolute path of root directory to which we are saving\\n\\tpathFilters: optional array of filters to be used to generate the base path\\n\\twiki: optional wiki for evaluating the pathFilters\\n\\tfileInfo: an existing fileInfo object to check against\\n\\tfileInfo.overwrite: if true, turns off filename clash numbers (defaults to false)\\n*/\\nexports.generateTiddlerFilepath function(title,options) {\\n\\tvar directory options.directory || \\\\\\,\\n\\t\\textension options.extension || \\\\\\,\\n\\t\\toriginalpath (options.fileInfo && options.fileInfo.originalpath) ? options.fileInfo.originalpath : \\\\\\,\\n\\t\\toverwrite options.fileInfo && options.fileInfo.overwrite || false,\\n\\t\\tfilepath;\\n\\t// Check if any of the pathFilters applies\\n\\tif(options.pathFilters && options.wiki) {\\n\\t\\t$tw.utils.each(options.pathFilters,function(filter) {\\n\\t\\t\\tif(!filepath) {\\n\\t\\t\\t\\tvar source options.wiki.makeTiddlerIterator(title),\\n\\t\\t\\t\\t\\tresult options.wiki.filterTiddlers(filter,null,source);\\n\\t\\t\\t\\tif(result.length > 0) {\\n\\t\\t\\t\\t\\tfilepath result0;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\tif(!filepath && !!originalpath) {\\n\\t\\t//Use the originalpath without the extension\\n\\t\\tvar ext path.extname(originalpath);\\n\\t\\tfilepath originalpath.substring(0,originalpath.length - ext.length);\\n\\t} else if(!filepath) {\\n\\t\\tfilepath title;\\n\\t\\t// Remove any forward or backward slashes so we dont create directories\\n\\t\\tfilepath filepath.replace(/\\\\/|\\\\\\\\/g,\\\_\\\);\\n\\t}\\n\\t// Replace any Windows control codes\\n\\tfilepath filepath.replace(/^(con|prn|aux|nul|com0-9|lpt0-9)$/i,\\\_$1_\\\);\\n\\t// Replace any leading spaces with the same number of underscores\\n\\tfilepath filepath.replace(/^ +/,function (u) { return u.replace(/ /g, \\\_\\\)});\\n\\t//If the path does not start with \\\.\\\ or \\\..\\\ && a path seperator, then\\n\\tif(!/^\\\\.{1,2}/\\\\\\\\/g.test(filepath)) {\\n\\t\\t// Dont let the filename start with any dots because such files are invisible on *nix\\n\\t\\tfilepath filepath.replace(/^\\\\.+/g,function (u) { return u.replace(/\\\\./g, \\\_\\\)});\\n\\t}\\n\\t// Replace any Unicode control codes\\n\\tfilepath filepath.replace(/\\\\x00-\\\\x1f\\\\x80-\\\\x9f/g,\\\_\\\);\\n\\t// Replace any characters that cant be used in cross-platform filenames\\n\\tfilepath $tw.utils.transliterate(filepath.replace(/\u003C|>|~|\\\\:|\\\\\\\|\\\\||\\\\?|\\\\*|\\\\^/g,\\\_\\\));\\n\\t// Replace any dots or spaces at the end of the extension with the same number of underscores\\n\\textension extension.replace(/\\\\. +$/, function (u) { return u.replace(/\\\\. /g, \\\_\\\)});\\n\\t// Truncate the extension if it is too long\\n\\tif(extension.length > 32) {\\n\\t\\textension extension.substr(0,32);\\n\\t}\\n\\t// If the filepath already ends in the extension then remove it\\n\\tif(filepath.substring(filepath.length - extension.length) extension) {\\n\\t\\tfilepath filepath.substring(0,filepath.length - extension.length);\\n\\t}\\n\\t// Truncate the filename if it is too long\\n\\tif(filepath.length > 200) {\\n\\t\\tfilepath filepath.substr(0,200);\\n\\t}\\n\\t// If the resulting filename is blank (eg because the title is just punctuation)\\n\\tif(!filepath || /^_+$/g.test(filepath)) {\\n\\t\\t// ...then just use the character codes of the title\\n\\t\\tfilepath \\\\\\;\\n\\t\\t$tw.utils.each(title.split(\\\\\\),function(char) {\\n\\t\\t\\tif(filepath) {\\n\\t\\t\\t\\tfilepath + \\\-\\\;\\n\\t\\t\\t}\\n\\t\\t\\tfilepath + char.charCodeAt(0).toString();\\n\\t\\t});\\n\\t}\\n\\t// Add a uniquifier if the file already exists (default)\\n\\tvar fullPath path.resolve(directory, filepath + extension);\\n\\tif (!overwrite) {\\n\\t\\tvar oldPath (options.fileInfo) ? options.fileInfo.filepath : undefined,\\n\\t\\tcount 0;\\n\\t\\tdo {\\n\\t\\t\\tfullPath path.resolve(directory,filepath + (count ? \\\_\\\ + count : \\\\\\) + extension);\\n\\t\\t\\tif(oldPath && oldPath fullPath) break;\\n\\t\\t\\tcount++;\\n\\t\\t} while(fs.existsSync(fullPath));\\n\\t}\\n\\t// If the last write failed with an error, or if path does not start with:\\n\\t//\\tthe resolved options.directory, the resolved wikiPath directory, the wikiTiddlersPath directory, \\n\\t//\\tor the originalpath directory, then $tw.utils.encodeURIComponentExtended() and resolve to options.directory.\\n\\tvar writePath $tw.hooks.invokeHook(\\\th-make-tiddler-path\\\,fullPath,fullPath),\\n\\t\\tencode (options.fileInfo || {writeError: false}).writeError true;\\n\\tif(!encode) {\\n\\t\\tencode !(writePath.indexOf($tw.boot.wikiTiddlersPath) 0 ||\\n\\t\\t\\twritePath.indexOf(path.resolve(directory)) 0 ||\\n\\t\\t\\twritePath.indexOf(path.resolve($tw.boot.wikiPath)) 0 ||\\n\\t\\t\\twritePath.indexOf(path.resolve($tw.boot.wikiTiddlersPath,originalpath)) 0 );\\n\\t\\t}\\n\\tif(encode) {\\n\\t\\twritePath path.resolve(directory,$tw.utils.encodeURIComponentExtended(fullPath));\\n\\t}\\n\\t// Return the full path to the file\\n\\treturn writePath;\\n};\\n\\n/*\\nSave a tiddler to a file described by the fileInfo:\\n\\tfilepath: the absolute path to the file containing the tiddler\\n\\ttype: the type of the tiddler file (NOT the type of the tiddler)\\n\\thasMetaFile: true if the file also has a companion .meta file\\n*/\\nexports.saveTiddlerToFile function(tiddler,fileInfo,callback) {\\n\\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\\n\\tif(fileInfo.hasMetaFile) {\\n\\t\\t// Save the tiddler as a separate body and meta file\\n\\t\\tvar typeInfo $tw.config.contentTypeInfotiddler.fields.type || \\\text/plain\\\ || {encoding: \\\utf8\\\};\\n\\t\\tfs.writeFile(fileInfo.filepath,tiddler.fields.text || \\\\\\,typeInfo.encoding,function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t}\\n\\t\\t\\tfs.writeFile(fileInfo.filepath + \\\.meta\\\,tiddler.getFieldStringBlock({exclude: \\\text\\\,\\\bag\\\}),\\\utf8\\\,function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn callback(null,fileInfo);\\n\\t\\t\\t});\\n\\t\\t});\\n\\t} else {\\n\\t\\t// Save the tiddler as a self contained templated file\\n\\t\\tif(fileInfo.type \\\application/x-tiddler\\\) {\\n\\t\\t\\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: \\\text\\\,\\\bag\\\}) + (!!tiddler.fields.text ? \\\\\\\n\\\\n\\\ + tiddler.fields.text : \\\\\\),\\\utf8\\\,function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn callback(null,fileInfo);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tfs.writeFile(fileInfo.filepath,JSON.stringify(tiddler.getFieldStrings({exclude: \\\bag\\\}),null,$tw.config.preferences.jsonSpaces),\\\utf8\\\,function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn callback(null,fileInfo);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nSave a tiddler to a file described by the fileInfo:\\n\\tfilepath: the absolute path to the file containing the tiddler\\n\\ttype: the type of the tiddler file (NOT the type of the tiddler)\\n\\thasMetaFile: true if the file also has a companion .meta file\\n*/\\nexports.saveTiddlerToFileSync function(tiddler,fileInfo) {\\n\\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\\n\\tif(fileInfo.hasMetaFile) {\\n\\t\\t// Save the tiddler as a separate body and meta file\\n\\t\\tvar typeInfo $tw.config.contentTypeInfotiddler.fields.type || \\\text/plain\\\ || {encoding: \\\utf8\\\};\\n\\t\\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text || \\\\\\,typeInfo.encoding);\\n\\t\\tfs.writeFileSync(fileInfo.filepath + \\\.meta\\\,tiddler.getFieldStringBlock({exclude: \\\text\\\,\\\bag\\\}),\\\utf8\\\);\\n\\t} else {\\n\\t\\t// Save the tiddler as a self contained templated file\\n\\t\\tif(fileInfo.type \\\application/x-tiddler\\\) {\\n\\t\\t\\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: \\\text\\\,\\\bag\\\}) + (!!tiddler.fields.text ? \\\\\\\n\\\\n\\\ + tiddler.fields.text : \\\\\\),\\\utf8\\\);\\n\\t\\t} else {\\n\\t\\t\\tfs.writeFileSync(fileInfo.filepath,JSON.stringify(tiddler.getFieldStrings({exclude: \\\bag\\\}),null,$tw.config.preferences.jsonSpaces),\\\utf8\\\);\\n\\t\\t}\\n\\t}\\n\\treturn fileInfo;\\n};\\n\\n/*\\nDelete a file described by the fileInfo if it exits\\n*/\\nexports.deleteTiddlerFile function(fileInfo,callback) {\\n\\t//Only attempt to delete files that exist on disk\\n\\tif(!fileInfo.filepath || !fs.existsSync(fileInfo.filepath)) {\\n\\t\\t//For some reason, the tiddler is only in memory or we cant modify the file at this path\\n\\t\\t$tw.syncer.displayError(\\\Server deleteTiddlerFile task failed for filepath: \\\+fileInfo.filepath);\\n\\t\\treturn callback(null,fileInfo);\\n\\t}\\n\\t// Delete the file\\n\\tfs.unlink(fileInfo.filepath,function(err) {\\n\\t\\tif(err) {\\n\\t\\t\\treturn callback(err);\\n\\t\\t}\\n\\t\\t// Delete the metafile if present\\n\\t\\tif(fileInfo.hasMetaFile && fs.existsSync(fileInfo.filepath + \\\.meta\\\)) {\\n\\t\\t\\tfs.unlink(fileInfo.filepath + \\\.meta\\\,function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),function(err) {\\n\\t\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn callback(null,fileInfo);\\n\\t\\t\\t\\t});\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),function(err) {\\n\\t\\t\\t\\tif(err) {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn callback(null,fileInfo);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nCleanup old files on disk, by comparing the options values:\\n\\tadaptorInfo from $tw.syncer.tiddlerInfo\\n\\tbootInfo from $tw.boot.files\\n*/\\nexports.cleanupTiddlerFiles function(options,callback) {\\n\\tvar adaptorInfo options.adaptorInfo || {},\\n\\tbootInfo options.bootInfo || {},\\n\\ttitle options.title || \\\undefined\\\;\\n\\tif(adaptorInfo.filepath && bootInfo.filepath && adaptorInfo.filepath ! bootInfo.filepath) {\\n\\t\\t$tw.utils.deleteTiddlerFile(adaptorInfo,function(err) {\\n\\t\\t\\tif(err) {\\n\\t\\t\\t\\tif ((err.code \\\EPERM\\\ || err.code \\\EACCES\\\) && err.syscall \\\unlink\\\) {\\n\\t\\t\\t\\t\\t// Error deleting the previous file on disk, should fail gracefully\\n\\t\\t\\t\\t\\t$tw.syncer.displayError(\\\Server desynchronized. Error cleaning up previous file for tiddler: \\\\\\\\\\+title+\\\\\\\\\\\\\,err);\\n\\t\\t\\t\\t\\treturn callback(null,bootInfo);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\treturn callback(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn callback(null,bootInfo);\\n\\t\\t});\\n\\t} else {\\n\\t\\treturn callback(null,bootInfo);\\n\\t}\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils-node\},\$:/core/modules/utils/linkedlist.js\:{\title\:\$:/core/modules/utils/linkedlist.js\,\text\:\/*\\\\\\nmodule-type: utils\\ntitle: $:/core/modules/utils/linkedlist.js\\ntype: application/javascript\\n\\nThis is a doubly-linked indexed list intended for manipulation, particularly\\npushTop, which it does with significantly better performance than an array.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction LinkedList() {\\n\\tthis.clear();\\n};\\n\\nLinkedList.prototype.clear function() {\\n\\t// LinkedList performs the duty of both the head and tail node\\n\\tthis.next new LLMap();\\n\\tthis.prev new LLMap();\\n\\t// Linked list head initially points to itself\\n\\tthis.next.set(null, null);\\n\\tthis.prev.set(null, null);\\n\\tthis.length 0;\\n};\\n\\nLinkedList.prototype.remove function(value) {\\n\\tif($tw.utils.isArray(value)) {\\n\\t\\tfor(var t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\t_assertString(valuet);\\n\\t\\t}\\n\\t\\tfor(var t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\t_removeOne(this,valuet);\\n\\t\\t}\\n\\t} else {\\n\\t\\t_assertString(value);\\n\\t\\t_removeOne(this,value);\\n\\t}\\n};\\n\\n/*\\nPush behaves like array.push and accepts multiple string arguments. But it also\\naccepts a single array argument too, to be consistent with its other methods.\\n*/\\nLinkedList.prototype.push function(/* values */) {\\n\\tvar i, values arguments;\\n\\tif($tw.utils.isArray(values0)) {\\n\\t\\tvalues values0;\\n\\t}\\n\\tfor(i 0; i \u003C values.length; i++) {\\n\\t\\t_assertString(valuesi);\\n\\t}\\n\\tfor(i 0; i \u003C values.length; i++) {\\n\\t\\t_linkToEnd(this,valuesi);\\n\\t}\\n\\treturn this.length;\\n};\\n\\nLinkedList.prototype.pushTop function(value) {\\n\\tvar t;\\n\\tif($tw.utils.isArray(value)) {\\n\\t\\tfor (t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\t_assertString(valuet);\\n\\t\\t}\\n\\t\\tfor(t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\t_removeOne(this,valuet);\\n\\t\\t}\\n\\t\\tfor(t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\t_linkToEnd(this,valuet);\\n\\t\\t}\\n\\t} else {\\n\\t\\t_assertString(value);\\n\\t\\t_removeOne(this,value);\\n\\t\\t_linkToEnd(this,value);\\n\\t}\\n};\\n\\nLinkedList.prototype.each function(callback) {\\n\\tvar visits Object.create(null),\\n\\t\\tvalue this.next.get(null);\\n\\twhile(value ! null) {\\n\\t\\tcallback(value);\\n\\t\\tvar next this.next.get(value);\\n\\t\\tif(Array.isArray(next)) {\\n\\t\\t\\tvar i visitsvalue || 0;\\n\\t\\t\\tvisitsvalue i+1;\\n\\t\\t\\tvalue nexti;\\n\\t\\t} else {\\n\\t\\t\\tvalue next;\\n\\t\\t}\\n\\t}\\n};\\n\\nLinkedList.prototype.toArray function() {\\n\\tvar output new Array(this.length),\\n\\t\\tindex 0;\\n\\tthis.each(function(value) { outputindex++ value; });\\n\\treturn output;\\n};\\n\\nLinkedList.prototype.makeTiddlerIterator function(wiki) {\\n\\tvar self this;\\n\\treturn function(callback) {\\n\\t\\tself.each(function(title) {\\n\\t\\t\\tcallback(wiki.getTiddler(title),title);\\n\\t\\t});\\n\\t};\\n};\\n\\nfunction _removeOne(list,value) {\\n\\tvar nextEntry list.next.get(value);\\n\\tif(nextEntry undefined) {\\n\\t\\treturn;\\n\\t}\\n\\tvar prevEntry list.prev.get(value),\\n\\t\\tprev prevEntry,\\n\\t\\tnext nextEntry,\\n\\t\\tref;\\n\\tif(Array.isArray(nextEntry)) {\\n\\t\\tnext nextEntry0;\\n\\t\\tprev prevEntry0;\\n\\t}\\n\\t// Relink preceding element.\\n\\tref list.next.get(prev);\\n\\tif(Array.isArray(ref)) {\\n\\t\\tvar i ref.indexOf(value);\\n\\t\\trefi next;\\n\\t} else {\\n\\t\\tlist.next.set(prev,next);\\n\\t}\\n\\n\\t// Now relink following element\\n\\tref list.prev.get(next);\\n\\tif(Array.isArray(ref)) {\\n\\t\\tvar i ref.indexOf(value);\\n\\t\\trefi prev;\\n\\t} else {\\n\\t\\tlist.prev.set(next,prev);\\n\\t}\\n\\n\\t// Delink actual value. If it uses arrays, just remove first entries.\\n\\tif(Array.isArray(nextEntry) && nextEntry.length > 1) {\\n\\t\\tnextEntry.shift();\\n\\t\\tprevEntry.shift();\\n\\t} else {\\n\\t\\tlist.next.set(value,undefined);\\n\\t\\tlist.prev.set(value,undefined);\\n\\t}\\n\\tlist.length - 1;\\n};\\n\\n// Sticks the given node onto the end of the list.\\nfunction _linkToEnd(list,value) {\\n\\tvar old list.next.get(value);\\n\\tvar last list.prev.get(null);\\n\\t// Does it already exists?\\n\\tif(old ! undefined) {\\n\\t\\tif(!Array.isArray(old)) {\\n\\t\\t\\told old;\\n\\t\\t\\tlist.next.set(value,old);\\n\\t\\t\\tlist.prev.set(value,list.prev.get(value));\\n\\t\\t}\\n\\t\\told.push(null);\\n\\t\\tlist.prev.get(value).push(last);\\n\\t} else {\\n\\t\\tlist.next.set(value,null);\\n\\t\\tlist.prev.set(value,last);\\n\\t}\\n\\t// Make the old last point to this new one.\\n\\tif(value ! last) {\\n\\t\\tvar array list.next.get(last);\\n\\t\\tif(Array.isArray(array)) {\\n\\t\\t\\tarrayarray.length-1 value;\\n\\t\\t} else {\\n\\t\\t\\tlist.next.set(last,value);\\n\\t\\t}\\n\\t\\tlist.prev.set(null,value);\\n\\t} else {\\n\\t\\t// Edge case, the pushed value was already the last value.\\n\\t\\t// The second-to-last nextPtr for that value must point to itself now.\\n\\t\\tvar array list.next.get(last);\\n\\t\\tarrayarray.length-2 value;\\n\\t}\\n\\tlist.length + 1;\\n};\\n\\nfunction _assertString(value) {\\n\\tif(typeof value ! \\\string\\\) {\\n\\t\\tthrow \\\Linked List only accepts string values, not \\\ + value;\\n\\t}\\n};\\n\\nvar LLMap function() {\\n\\tthis.map Object.create(null);\\n};\\n\\n// Just a wrapper so our object map can also accept null.\\nLLMap.prototype {\\n\\tset: function(key,val) {\\n\\t\\t(key null) ? (this.null val) : (this.mapkey val);\\n\\t},\\n\\tget: function(key) {\\n\\t\\treturn (key null) ? this.null : this.mapkey;\\n\\t}\\n};\\n\\nexports.LinkedList LinkedList;\\n\,\module-type\:\utils\,\type\:\application/javascript\},\$:/core/modules/utils/logger.js\:{\title\:\$:/core/modules/utils/logger.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/logger.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nA basic logging implementation\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar ALERT_TAG \\\$:/tags/Alert\\\;\\n\\n/*\\nMake a new logger\\n*/\\nfunction Logger(componentName,options) {\\n\\toptions options || {};\\n\\tthis.componentName componentName || \\\\\\;\\n\\tthis.colour options.colour || \\\white\\\;\\n\\tthis.enable \\\enable\\\ in options ? options.enable : true;\\n\\tthis.save \\\save\\\ in options ? options.save : true;\\n\\tthis.saveLimit options.saveLimit || 100 * 1024;\\n\\tthis.saveBufferLogger this;\\n\\tthis.buffer \\\\\\;\\n\\tthis.alertCount 0;\\n}\\n\\nLogger.prototype.setSaveBuffer function(logger) {\\n\\tthis.saveBufferLogger logger;\\n};\\n\\n/*\\nLog a message\\n*/\\nLogger.prototype.log function(/* args */) {\\n\\tvar self this;\\n\\tif(this.enable) {\\n\\t\\tif(this.saveBufferLogger.save) {\\n\\t\\t\\tthis.saveBufferLogger.buffer + $tw.utils.formatDateString(new Date(),\\\YYYY MM DD 0hh:0mm:0ss.0XXX\\\) + \\\:\\\;\\n\\t\\t\\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\\n\\t\\t\\t\\tself.saveBufferLogger.buffer + \\\ \\\ + arg;\\n\\t\\t\\t});\\n\\t\\t\\tthis.saveBufferLogger.buffer + \\\\\\\n\\\;\\n\\t\\t\\tthis.saveBufferLogger.buffer this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\\n\\t\\t}\\n\\t\\tif(console ! undefined && console.log ! undefined) {\\n\\t\\t\\tvar logMessage $tw.utils.terminalColour(this.colour) + this.componentName + \\\:\\\.concat(Array.prototype.slice.call(arguments,0));\\n\\t\\t\\tlogMessagelogMessage.length-1 + $tw.utils.terminalColour();\\n\\t\\t\\treturn Function.apply.call(console.log, console, logMessage);\\n\\t\\t}\\n\\t} \\n};\\n\\n/*\\nRead the message buffer\\n*/\\nLogger.prototype.getBuffer function() {\\n\\treturn this.saveBufferLogger.buffer;\\n};\\n\\n/*\\nLog a structure as a table\\n*/\\nLogger.prototype.table function(value) {\\n\\t(console.table || console.log)(value);\\n};\\n\\n/*\\nAlert a message\\n*/\\nLogger.prototype.alert function(/* args */) {\\n\\tif(this.enable) {\\n\\t\\t// Prepare the text of the alert\\n\\t\\tvar text Array.prototype.join.call(arguments,\\\ \\\);\\n\\t\\t// Create alert tiddlers in the browser\\n\\t\\tif($tw.browser) {\\n\\t\\t\\t// Check if there is an existing alert with the same text and the same component\\n\\t\\t\\tvar existingAlerts $tw.wiki.getTiddlersWithTag(ALERT_TAG),\\n\\t\\t\\t\\talertFields,\\n\\t\\t\\t\\texistingCount,\\n\\t\\t\\t\\tself this;\\n\\t\\t\\t$tw.utils.each(existingAlerts,function(title) {\\n\\t\\t\\t\\tvar tiddler $tw.wiki.getTiddler(title);\\n\\t\\t\\t\\tif(tiddler.fields.text text && tiddler.fields.component self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified \u003C alertFields.modified)) {\\n\\t\\t\\t\\t\\t\\talertFields $tw.utils.extend({},tiddler.fields);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\tif(alertFields) {\\n\\t\\t\\t\\texistingCount alertFields.count || 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\talertFields {\\n\\t\\t\\t\\t\\ttitle: $tw.wiki.generateNewTitle(\\\$:/temp/alerts/alert\\\,{prefix: \\\\\\}),\\n\\t\\t\\t\\t\\ttext: text,\\n\\t\\t\\t\\t\\ttags: ALERT_TAG,\\n\\t\\t\\t\\t\\tcomponent: this.componentName\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\texistingCount 0;\\n\\t\\t\\t\\tthis.alertCount + 1;\\n\\t\\t\\t}\\n\\t\\t\\talertFields.modified new Date();\\n\\t\\t\\tif(++existingCount > 1) {\\n\\t\\t\\t\\talertFields.count existingCount;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\talertFields.count undefined;\\n\\t\\t\\t}\\n\\t\\t\\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\\n\\t\\t\\t// Log the alert as well\\n\\t\\t\\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\\n\\t\\t} else {\\n\\t\\t\\t// Print an orange message to the console if not in the browser\\n\\t\\t\\tconsole.error(\\\\\\\x1b1;33m\\\ + text + \\\\\\\x1b0m\\\);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nClear outstanding alerts\\n*/\\nLogger.prototype.clearAlerts function() {\\n\\tvar self this;\\n\\tif($tw.browser && this.alertCount > 0) {\\n\\t\\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\\n\\t\\t\\tvar tiddler $tw.wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler.fields.component self.componentName) {\\n\\t\\t\\t\\t$tw.wiki.deleteTiddler(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.alertCount 0;\\n\\t}\\n};\\n\\nexports.Logger Logger;\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/parsetree.js\:{\title\:\$:/core/modules/utils/parsetree.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/parsetree.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nParse tree utility functions.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nAdd attribute to parse tree node\\nCan be invoked as (node,name,value) or (node,attr)\\n*/\\nexports.addAttributeToParseTreeNode function(node,name,value) {\\n\\tvar attribute typeof name \\\object\\\ ? name : {name: name, type: \\\string\\\, value: value};\\n\\tname attribute.name;\\n\\tnode.attributes node.attributes || {};\\n\\tnode.orderedAttributes node.orderedAttributes || ;\\n\\tnode.attributesname attribute;\\n\\tvar foundIndex -1;\\n\\t$tw.utils.each(node.orderedAttributes,function(attr,index) {\\n\\t\\tif(attr.name name) {\\n\\t\\t\\tfoundIndex index;\\n\\t\\t}\\n\\t});\\n\\tif(foundIndex -1) {\\n\\t\\tnode.orderedAttributes.push(attribute);\\n\\t} else {\\n\\t\\tnode.orderedAttributesfoundIndex attribute;\\n\\t}\\n};\\n\\nexports.getOrderedAttributesFromParseTreeNode function(node) {\\n\\tif(node.orderedAttributes) {\\n\\t\\treturn node.orderedAttributes;\\n\\t} else {\\n\\t\\tvar attributes ;\\n\\t\\t$tw.utils.each(node.attributes,function(attribute) {\\n\\t\\t\\tattributes.push(attribute);\\n\\t\\t});\\n\\t\\treturn attributes.sort(function(a,b) {\\n\\t\\t\\treturn a.name \u003C b.name ? -1 : (a.name > b.name ? 1 : 0);\\n\\t\\t});\\n\\t}\\n};\\n\\nexports.getAttributeValueFromParseTreeNode function(node,name,defaultValue) {\\n\\tif(node.attributes && node.attributesname && node.attributesname.value ! undefined) {\\n\\t\\treturn node.attributesname.value;\\n\\t}\\n\\treturn defaultValue;\\n};\\n\\nexports.addClassToParseTreeNode function(node,classString) {\\n\\tvar classes ,\\n\\t\\tattribute;\\n\\tnode.attributes node.attributes || {};\\n\\tattribute node.attributes\\\class\\\;\\n\\tif(!attribute) {\\n\\t\\t// If the class attribute does not exist, we must create it first.\\n\\t\\tattribute {name: \\\class\\\, type: \\\string\\\, value: \\\\\\};\\n\\t\\tnode.attributes\\\class\\\ attribute;\\n\\t\\tnode.orderedAttributes node.orderedAttributes || ;\\n\\t\\tnode.orderedAttributes.push(attribute);\\n\\t}\\n\\tif(attribute.type \\\string\\\) {\\n\\t\\tif(attribute.value ! \\\\\\) {\\n\\t\\t\\tclasses attribute.value.split(\\\ \\\);\\n\\t\\t}\\n\\t\\tif(classString ! \\\\\\) {\\n\\t\\t\\t$tw.utils.pushTop(classes,classString.split(\\\ \\\));\\n\\t\\t}\\n\\t\\tattribute.value classes.join(\\\ \\\);\\n\\t}\\n};\\n\\nexports.addStyleToParseTreeNode function(node,name,value) {\\n\\tvar attribute;\\n\\tnode.attributes node.attributes || {};\\n\\tattribute node.attributes.style;\\n\\tif(!attribute) {\\n\\t\\tattribute {name: \\\style\\\, type: \\\string\\\, value: \\\\\\};\\n\\t\\tnode.attributes.style attribute;\\n\\t\\tnode.orderedAttributes node.orderedAttributes || ;\\n\\t\\tnode.orderedAttributes.push(attribute);\\n\\t}\\n\\tif(attribute.type \\\string\\\) {\\n\\t\\tattribute.value + name + \\\:\\\ + value + \\\;\\\;\\n\\t}\\n};\\n\\nexports.findParseTreeNode function(nodeArray,search) {\\n\\tfor(var t0; t\u003CnodeArray.length; t++) {\\n\\t\\tif(nodeArrayt.type search.type && nodeArrayt.tag search.tag) {\\n\\t\\t\\treturn nodeArrayt;\\n\\t\\t}\\n\\t}\\n\\treturn undefined;\\n};\\n\\n/*\\nHelper to get the text of a parse tree node or array of nodes\\n*/\\nexports.getParseTreeText function getParseTreeText(tree) {\\n\\tvar output ;\\n\\tif($tw.utils.isArray(tree)) {\\n\\t\\t$tw.utils.each(tree,function(node) {\\n\\t\\t\\toutput.push(getParseTreeText(node));\\n\\t\\t});\\n\\t} else {\\n\\t\\tif(tree.type \\\text\\\) {\\n\\t\\t\\toutput.push(tree.text);\\n\\t\\t}\\n\\t\\tif(tree.children) {\\n\\t\\t\\treturn getParseTreeText(tree.children);\\n\\t\\t}\\n\\t}\\n\\treturn output.join(\\\\\\);\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/performance.js\:{\title\:\$:/core/modules/utils/performance.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/performance.js\\ntype: application/javascript\\nmodule-type: global\\n\\nPerformance measurement.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nfunction Performance(enabled) {\\n\\tthis.enabled !!enabled;\\n\\tthis.measures {}; // Hashmap by measurement name of {time:, invocations:}\\n\\tthis.logger new $tw.utils.Logger(\\\performance\\\);\\n\\tthis.showGreeting();\\n}\\n\\nPerformance.prototype.showGreeting function() {\\n\\tif($tw.browser) {\\n\\t\\tthis.logger.log(\\\Execute $tw.perf.log(); to see filter execution timings\\\);\\n\\t}\\n};\\n\\n/*\\nWrap performance reporting around a top level function\\n*/\\nPerformance.prototype.report function(name,fn) {\\n\\tvar self this;\\n\\tif(this.enabled) {\\n\\t\\treturn function() {\\n\\t\\t\\tvar startTime $tw.utils.timer(),\\n\\t\\t\\t\\tresult fn.apply(this,arguments);\\n\\t\\t\\tself.logger.log(name + \\\: \\\ + $tw.utils.timer(startTime).toFixed(2) + \\\ms\\\);\\n\\t\\t\\treturn result;\\n\\t\\t};\\n\\t} else {\\n\\t\\treturn fn;\\n\\t}\\n};\\n\\nPerformance.prototype.log function() {\\n\\tvar self this,\\n\\t\\ttotalTime 0,\\n\\t\\torderedMeasures Object.keys(this.measures).sort(function(a,b) {\\n\\t\\t\\tif(self.measuresa.time > self.measuresb.time) {\\n\\t\\t\\t\\treturn -1;\\n\\t\\t\\t} else if (self.measuresa.time \u003C self.measuresb.time) {\\n\\t\\t\\t\\treturn + 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn 0;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t$tw.utils.each(orderedMeasures,function(name) {\\n\\t\\ttotalTime + self.measuresname.time;\\n\\t});\\n\\tvar results \\n\\t$tw.utils.each(orderedMeasures,function(name) {\\n\\t\\tvar measure self.measuresname;\\n\\t\\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\\n\\t});\\n\\tself.logger.table(results);\\n};\\n\\n/*\\nWrap performance measurements around a subfunction\\n*/\\nPerformance.prototype.measure function(name,fn) {\\n\\tvar self this;\\n\\tif(this.enabled) {\\n\\t\\treturn function() {\\n\\t\\t\\tvar startTime $tw.utils.timer(),\\n\\t\\t\\t\\tresult fn.apply(this,arguments);\\n\\t\\t\\tif(!(name in self.measures)) {\\n\\t\\t\\t\\tself.measuresname {time: 0, invocations: 0};\\n\\t\\t\\t}\\n\\t\\t\\tself.measuresname.time + $tw.utils.timer(startTime);\\n\\t\\t\\tself.measuresname.invocations++;\\n\\t\\t\\treturn result;\\n\\t\\t};\\n\\t} else {\\n\\t\\treturn fn;\\n\\t}\\n};\\n\\nexports.Performance Performance;\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/core/modules/utils/pluginmaker.js\:{\title\:\$:/core/modules/utils/pluginmaker.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/pluginmaker.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nA quick and dirty way to pack up plugins within the browser.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nRepack a plugin, and then delete any non-shadow payload tiddlers\\n*/\\nexports.repackPlugin function(title,additionalTiddlers,excludeTiddlers) {\\n\\tadditionalTiddlers additionalTiddlers || ;\\n\\texcludeTiddlers excludeTiddlers || ;\\n\\t// Get the plugin tiddler\\n\\tvar pluginTiddler $tw.wiki.getTiddler(title);\\n\\tif(!pluginTiddler) {\\n\\t\\tthrow \\\No such tiddler as \\\ + title;\\n\\t}\\n\\t// Extract the JSON\\n\\tvar jsonPluginTiddler $tw.utils.parseJSONSafe(pluginTiddler.fields.text,null);\\n\\tif(!jsonPluginTiddler) {\\n\\t\\tthrow \\\Cannot parse plugin tiddler \\\ + title + \\\\\\\n\\\ + $tw.language.getString(\\\Error/Caption\\\) + \\\: \\\ + e;\\n\\t}\\n\\t// Get the list of tiddlers\\n\\tvar tiddlers Object.keys(jsonPluginTiddler.tiddlers);\\n\\t// Add the additional tiddlers\\n\\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\\n\\t// Remove any excluded tiddlers\\n\\tfor(var ttiddlers.length-1; t>0; t--) {\\n\\t\\tif(excludeTiddlers.indexOf(tiddlerst) ! -1) {\\n\\t\\t\\ttiddlers.splice(t,1);\\n\\t\\t}\\n\\t}\\n\\t// Pack up the tiddlers into a block of JSON\\n\\tvar plugins {};\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar tiddler $tw.wiki.getTiddler(title),\\n\\t\\t\\tfields {};\\n\\t\\t$tw.utils.each(tiddler.fields,function (value,name) {\\n\\t\\t\\tfieldsname tiddler.getFieldString(name);\\n\\t\\t});\\n\\t\\tpluginstitle fields;\\n\\t});\\n\\t// Retrieve and bump the version number\\n\\tvar pluginVersion $tw.utils.parseVersion(pluginTiddler.getFieldString(\\\version\\\) || \\\0.0.0\\\) || {\\n\\t\\t\\tmajor: \\\0\\\,\\n\\t\\t\\tminor: \\\0\\\,\\n\\t\\t\\tpatch: \\\0\\\\\n\\t\\t};\\n\\tpluginVersion.patch++;\\n\\tvar version pluginVersion.major + \\\.\\\ + pluginVersion.minor + \\\.\\\ + pluginVersion.patch;\\n\\tif(pluginVersion.prerelease) {\\n\\t\\tversion + \\\-\\\ + pluginVersion.prerelease;\\n\\t}\\n\\tif(pluginVersion.build) {\\n\\t\\tversion + \\\+\\\ + pluginVersion.build;\\n\\t}\\n\\t// Save the tiddler\\n\\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\\n\\t// Delete any non-shadow constituent tiddlers\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tif($tw.wiki.tiddlerExists(title)) {\\n\\t\\t\\t$tw.wiki.deleteTiddler(title);\\n\\t\\t}\\n\\t});\\n\\t// Trigger an autosave\\n\\t$tw.rootWidget.dispatchEvent({type: \\\tm-auto-save-wiki\\\});\\n\\t// Return a heartwarming confirmation\\n\\treturn \\\Plugin \\\ + title + \\\ successfully saved\\\;\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/repository.js\:{\title\:\$:/core/modules/utils/repository.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/repository.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nUtilities for working with the TiddlyWiki repository file structure\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\n/*\\nGet an object containing all the plugins as a hashmap by title of the JSON representation of the plugin\\nOptions:\\n\\nignoreEnvironmentVariables: defaults to false\\n*/\\nexports.getAllPlugins function(options) {\\n\\toptions options || {};\\n\\tvar fs require(\\\fs\\\),\\n\\t\\tpath require(\\\path\\\),\\n\\t\\ttiddlers {};\\n\\t// Collect up the library plugins\\n\\tvar collectPlugins function(folder) {\\n\\t\\t\\tvar pluginFolders $tw.utils.getSubdirectories(folder) || ;\\n\\t\\t\\tfor(var p0; p\u003CpluginFolders.length; p++) {\\n\\t\\t\\t\\tif(!$tw.boot.excludeRegExp.test(pluginFoldersp)) {\\n\\t\\t\\t\\t\\tvar pluginFields $tw.loadPluginFolder(path.resolve(folder,\\\./\\\ + pluginFoldersp));\\n\\t\\t\\t\\t\\tif(pluginFields && pluginFields.title) {\\n\\t\\t\\t\\t\\t\\ttiddlerspluginFields.title pluginFields;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcollectPublisherPlugins function(folder) {\\n\\t\\t\\tvar publisherFolders $tw.utils.getSubdirectories(folder) || ;\\n\\t\\t\\tfor(var t0; t\u003CpublisherFolders.length; t++) {\\n\\t\\t\\t\\tif(!$tw.boot.excludeRegExp.test(publisherFolderst)) {\\n\\t\\t\\t\\t\\tcollectPlugins(path.resolve(folder,\\\./\\\ + publisherFolderst));\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,options.ignoreEnvironmentVariables ? undefined : $tw.config.pluginsEnvVar),collectPublisherPlugins);\\n\\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,options.ignoreEnvironmentVariables ? undefined : $tw.config.themesEnvVar),collectPublisherPlugins);\\n\\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,options.ignoreEnvironmentVariables ? undefined : $tw.config.languagesEnvVar),collectPlugins);\\n\\treturn tiddlers;\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/transliterate.js\:{\title\:\$:/core/modules/utils/transliterate.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/transliterate.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nTransliteration static utility functions.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nTransliterate string to ASCII\\n\\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\\n*/\\nexports.transliterationPairs {\\n\\t\\\Á\\\:\\\A\\\,\\n\\t\\\Ă\\\:\\\A\\\,\\n\\t\\\Ắ\\\:\\\A\\\,\\n\\t\\\Ặ\\\:\\\A\\\,\\n\\t\\\Ằ\\\:\\\A\\\,\\n\\t\\\Ẳ\\\:\\\A\\\,\\n\\t\\\Ẵ\\\:\\\A\\\,\\n\\t\\\Ǎ\\\:\\\A\\\,\\n\\t\\\Â\\\:\\\A\\\,\\n\\t\\\Ấ\\\:\\\A\\\,\\n\\t\\\Ậ\\\:\\\A\\\,\\n\\t\\\Ầ\\\:\\\A\\\,\\n\\t\\\Ẩ\\\:\\\A\\\,\\n\\t\\\Ẫ\\\:\\\A\\\,\\n\\t\\\Ä\\\:\\\A\\\,\\n\\t\\\Ǟ\\\:\\\A\\\,\\n\\t\\\Ȧ\\\:\\\A\\\,\\n\\t\\\Ǡ\\\:\\\A\\\,\\n\\t\\\Ạ\\\:\\\A\\\,\\n\\t\\\Ȁ\\\:\\\A\\\,\\n\\t\\\À\\\:\\\A\\\,\\n\\t\\\Ả\\\:\\\A\\\,\\n\\t\\\Ȃ\\\:\\\A\\\,\\n\\t\\\Ā\\\:\\\A\\\,\\n\\t\\\Ą\\\:\\\A\\\,\\n\\t\\\Å\\\:\\\A\\\,\\n\\t\\\Ǻ\\\:\\\A\\\,\\n\\t\\\Ḁ\\\:\\\A\\\,\\n\\t\\\Ⱥ\\\:\\\A\\\,\\n\\t\\\Ã\\\:\\\A\\\,\\n\\t\\\Ꜳ\\\:\\\AA\\\,\\n\\t\\\Æ\\\:\\\AE\\\,\\n\\t\\\Ǽ\\\:\\\AE\\\,\\n\\t\\\Ǣ\\\:\\\AE\\\,\\n\\t\\\Ꜵ\\\:\\\AO\\\,\\n\\t\\\Ꜷ\\\:\\\AU\\\,\\n\\t\\\Ꜹ\\\:\\\AV\\\,\\n\\t\\\Ꜻ\\\:\\\AV\\\,\\n\\t\\\Ꜽ\\\:\\\AY\\\,\\n\\t\\\Ḃ\\\:\\\B\\\,\\n\\t\\\Ḅ\\\:\\\B\\\,\\n\\t\\\Ɓ\\\:\\\B\\\,\\n\\t\\\Ḇ\\\:\\\B\\\,\\n\\t\\\Ƀ\\\:\\\B\\\,\\n\\t\\\Ƃ\\\:\\\B\\\,\\n\\t\\\Ć\\\:\\\C\\\,\\n\\t\\\Č\\\:\\\C\\\,\\n\\t\\\Ç\\\:\\\C\\\,\\n\\t\\\Ḉ\\\:\\\C\\\,\\n\\t\\\Ĉ\\\:\\\C\\\,\\n\\t\\\Ċ\\\:\\\C\\\,\\n\\t\\\Ƈ\\\:\\\C\\\,\\n\\t\\\Ȼ\\\:\\\C\\\,\\n\\t\\\Ď\\\:\\\D\\\,\\n\\t\\\Ḑ\\\:\\\D\\\,\\n\\t\\\Ḓ\\\:\\\D\\\,\\n\\t\\\Ḋ\\\:\\\D\\\,\\n\\t\\\Ḍ\\\:\\\D\\\,\\n\\t\\\Ɗ\\\:\\\D\\\,\\n\\t\\\Ḏ\\\:\\\D\\\,\\n\\t\\\Dz\\\:\\\D\\\,\\n\\t\\\Dž\\\:\\\D\\\,\\n\\t\\\Đ\\\:\\\D\\\,\\n\\t\\\Ƌ\\\:\\\D\\\,\\n\\t\\\DZ\\\:\\\DZ\\\,\\n\\t\\\DŽ\\\:\\\DZ\\\,\\n\\t\\\É\\\:\\\E\\\,\\n\\t\\\Ĕ\\\:\\\E\\\,\\n\\t\\\Ě\\\:\\\E\\\,\\n\\t\\\Ȩ\\\:\\\E\\\,\\n\\t\\\Ḝ\\\:\\\E\\\,\\n\\t\\\Ê\\\:\\\E\\\,\\n\\t\\\Ế\\\:\\\E\\\,\\n\\t\\\Ệ\\\:\\\E\\\,\\n\\t\\\Ề\\\:\\\E\\\,\\n\\t\\\Ể\\\:\\\E\\\,\\n\\t\\\Ễ\\\:\\\E\\\,\\n\\t\\\Ḙ\\\:\\\E\\\,\\n\\t\\\Ë\\\:\\\E\\\,\\n\\t\\\Ė\\\:\\\E\\\,\\n\\t\\\Ẹ\\\:\\\E\\\,\\n\\t\\\Ȅ\\\:\\\E\\\,\\n\\t\\\È\\\:\\\E\\\,\\n\\t\\\Ẻ\\\:\\\E\\\,\\n\\t\\\Ȇ\\\:\\\E\\\,\\n\\t\\\Ē\\\:\\\E\\\,\\n\\t\\\Ḗ\\\:\\\E\\\,\\n\\t\\\Ḕ\\\:\\\E\\\,\\n\\t\\\Ę\\\:\\\E\\\,\\n\\t\\\Ɇ\\\:\\\E\\\,\\n\\t\\\Ẽ\\\:\\\E\\\,\\n\\t\\\Ḛ\\\:\\\E\\\,\\n\\t\\\Ꝫ\\\:\\\ET\\\,\\n\\t\\\Ḟ\\\:\\\F\\\,\\n\\t\\\Ƒ\\\:\\\F\\\,\\n\\t\\\Ǵ\\\:\\\G\\\,\\n\\t\\\Ğ\\\:\\\G\\\,\\n\\t\\\Ǧ\\\:\\\G\\\,\\n\\t\\\Ģ\\\:\\\G\\\,\\n\\t\\\Ĝ\\\:\\\G\\\,\\n\\t\\\Ġ\\\:\\\G\\\,\\n\\t\\\Ɠ\\\:\\\G\\\,\\n\\t\\\Ḡ\\\:\\\G\\\,\\n\\t\\\Ǥ\\\:\\\G\\\,\\n\\t\\\Ḫ\\\:\\\H\\\,\\n\\t\\\Ȟ\\\:\\\H\\\,\\n\\t\\\Ḩ\\\:\\\H\\\,\\n\\t\\\Ĥ\\\:\\\H\\\,\\n\\t\\\Ⱨ\\\:\\\H\\\,\\n\\t\\\Ḧ\\\:\\\H\\\,\\n\\t\\\Ḣ\\\:\\\H\\\,\\n\\t\\\Ḥ\\\:\\\H\\\,\\n\\t\\\Ħ\\\:\\\H\\\,\\n\\t\\\Í\\\:\\\I\\\,\\n\\t\\\Ĭ\\\:\\\I\\\,\\n\\t\\\Ǐ\\\:\\\I\\\,\\n\\t\\\Î\\\:\\\I\\\,\\n\\t\\\Ï\\\:\\\I\\\,\\n\\t\\\Ḯ\\\:\\\I\\\,\\n\\t\\\İ\\\:\\\I\\\,\\n\\t\\\Ị\\\:\\\I\\\,\\n\\t\\\Ȉ\\\:\\\I\\\,\\n\\t\\\Ì\\\:\\\I\\\,\\n\\t\\\Ỉ\\\:\\\I\\\,\\n\\t\\\Ȋ\\\:\\\I\\\,\\n\\t\\\Ī\\\:\\\I\\\,\\n\\t\\\Į\\\:\\\I\\\,\\n\\t\\\Ɨ\\\:\\\I\\\,\\n\\t\\\Ĩ\\\:\\\I\\\,\\n\\t\\\Ḭ\\\:\\\I\\\,\\n\\t\\\Ꝺ\\\:\\\D\\\,\\n\\t\\\Ꝼ\\\:\\\F\\\,\\n\\t\\\Ᵹ\\\:\\\G\\\,\\n\\t\\\Ꞃ\\\:\\\R\\\,\\n\\t\\\Ꞅ\\\:\\\S\\\,\\n\\t\\\Ꞇ\\\:\\\T\\\,\\n\\t\\\Ꝭ\\\:\\\IS\\\,\\n\\t\\\Ĵ\\\:\\\J\\\,\\n\\t\\\Ɉ\\\:\\\J\\\,\\n\\t\\\Ḱ\\\:\\\K\\\,\\n\\t\\\Ǩ\\\:\\\K\\\,\\n\\t\\\Ķ\\\:\\\K\\\,\\n\\t\\\Ⱪ\\\:\\\K\\\,\\n\\t\\\Ꝃ\\\:\\\K\\\,\\n\\t\\\Ḳ\\\:\\\K\\\,\\n\\t\\\Ƙ\\\:\\\K\\\,\\n\\t\\\Ḵ\\\:\\\K\\\,\\n\\t\\\Ꝁ\\\:\\\K\\\,\\n\\t\\\Ꝅ\\\:\\\K\\\,\\n\\t\\\Ĺ\\\:\\\L\\\,\\n\\t\\\Ƚ\\\:\\\L\\\,\\n\\t\\\Ľ\\\:\\\L\\\,\\n\\t\\\Ļ\\\:\\\L\\\,\\n\\t\\\Ḽ\\\:\\\L\\\,\\n\\t\\\Ḷ\\\:\\\L\\\,\\n\\t\\\Ḹ\\\:\\\L\\\,\\n\\t\\\Ⱡ\\\:\\\L\\\,\\n\\t\\\Ꝉ\\\:\\\L\\\,\\n\\t\\\Ḻ\\\:\\\L\\\,\\n\\t\\\Ŀ\\\:\\\L\\\,\\n\\t\\\Ɫ\\\:\\\L\\\,\\n\\t\\\Lj\\\:\\\L\\\,\\n\\t\\\Ł\\\:\\\L\\\,\\n\\t\\\LJ\\\:\\\LJ\\\,\\n\\t\\\Ḿ\\\:\\\M\\\,\\n\\t\\\Ṁ\\\:\\\M\\\,\\n\\t\\\Ṃ\\\:\\\M\\\,\\n\\t\\\Ɱ\\\:\\\M\\\,\\n\\t\\\Ń\\\:\\\N\\\,\\n\\t\\\Ň\\\:\\\N\\\,\\n\\t\\\Ņ\\\:\\\N\\\,\\n\\t\\\Ṋ\\\:\\\N\\\,\\n\\t\\\Ṅ\\\:\\\N\\\,\\n\\t\\\Ṇ\\\:\\\N\\\,\\n\\t\\\Ǹ\\\:\\\N\\\,\\n\\t\\\Ɲ\\\:\\\N\\\,\\n\\t\\\Ṉ\\\:\\\N\\\,\\n\\t\\\Ƞ\\\:\\\N\\\,\\n\\t\\\Nj\\\:\\\N\\\,\\n\\t\\\Ñ\\\:\\\N\\\,\\n\\t\\\NJ\\\:\\\NJ\\\,\\n\\t\\\ð\\\:\\\d\\\,\\n\\t\\\Ð\\\:\\\D\\\,\\n\\t\\\Ó\\\:\\\O\\\,\\n\\t\\\Ŏ\\\:\\\O\\\,\\n\\t\\\Ǒ\\\:\\\O\\\,\\n\\t\\\Ô\\\:\\\O\\\,\\n\\t\\\Ố\\\:\\\O\\\,\\n\\t\\\Ộ\\\:\\\O\\\,\\n\\t\\\Ồ\\\:\\\O\\\,\\n\\t\\\Ổ\\\:\\\O\\\,\\n\\t\\\Ỗ\\\:\\\O\\\,\\n\\t\\\Ö\\\:\\\O\\\,\\n\\t\\\Ȫ\\\:\\\O\\\,\\n\\t\\\Ȯ\\\:\\\O\\\,\\n\\t\\\Ȱ\\\:\\\O\\\,\\n\\t\\\Ọ\\\:\\\O\\\,\\n\\t\\\Ő\\\:\\\O\\\,\\n\\t\\\Ȍ\\\:\\\O\\\,\\n\\t\\\Ò\\\:\\\O\\\,\\n\\t\\\Ỏ\\\:\\\O\\\,\\n\\t\\\Ơ\\\:\\\O\\\,\\n\\t\\\Ớ\\\:\\\O\\\,\\n\\t\\\Ợ\\\:\\\O\\\,\\n\\t\\\Ờ\\\:\\\O\\\,\\n\\t\\\Ở\\\:\\\O\\\,\\n\\t\\\Ỡ\\\:\\\O\\\,\\n\\t\\\Ȏ\\\:\\\O\\\,\\n\\t\\\Ꝋ\\\:\\\O\\\,\\n\\t\\\Ꝍ\\\:\\\O\\\,\\n\\t\\\Ō\\\:\\\O\\\,\\n\\t\\\Ṓ\\\:\\\O\\\,\\n\\t\\\Ṑ\\\:\\\O\\\,\\n\\t\\\Ɵ\\\:\\\O\\\,\\n\\t\\\Ǫ\\\:\\\O\\\,\\n\\t\\\Ǭ\\\:\\\O\\\,\\n\\t\\\Ø\\\:\\\O\\\,\\n\\t\\\Ǿ\\\:\\\O\\\,\\n\\t\\\Õ\\\:\\\O\\\,\\n\\t\\\Ṍ\\\:\\\O\\\,\\n\\t\\\Ṏ\\\:\\\O\\\,\\n\\t\\\Ȭ\\\:\\\O\\\,\\n\\t\\\Ƣ\\\:\\\OI\\\,\\n\\t\\\Ꝏ\\\:\\\OO\\\,\\n\\t\\\Ɛ\\\:\\\E\\\,\\n\\t\\\Ɔ\\\:\\\O\\\,\\n\\t\\\Ȣ\\\:\\\OU\\\,\\n\\t\\\Ṕ\\\:\\\P\\\,\\n\\t\\\Ṗ\\\:\\\P\\\,\\n\\t\\\Ꝓ\\\:\\\P\\\,\\n\\t\\\Ƥ\\\:\\\P\\\,\\n\\t\\\Ꝕ\\\:\\\P\\\,\\n\\t\\\Ᵽ\\\:\\\P\\\,\\n\\t\\\Ꝑ\\\:\\\P\\\,\\n\\t\\\Ꝙ\\\:\\\Q\\\,\\n\\t\\\Ꝗ\\\:\\\Q\\\,\\n\\t\\\Ŕ\\\:\\\R\\\,\\n\\t\\\Ř\\\:\\\R\\\,\\n\\t\\\Ŗ\\\:\\\R\\\,\\n\\t\\\Ṙ\\\:\\\R\\\,\\n\\t\\\Ṛ\\\:\\\R\\\,\\n\\t\\\Ṝ\\\:\\\R\\\,\\n\\t\\\Ȑ\\\:\\\R\\\,\\n\\t\\\Ȓ\\\:\\\R\\\,\\n\\t\\\Ṟ\\\:\\\R\\\,\\n\\t\\\Ɍ\\\:\\\R\\\,\\n\\t\\\Ɽ\\\:\\\R\\\,\\n\\t\\\Ꜿ\\\:\\\C\\\,\\n\\t\\\Ǝ\\\:\\\E\\\,\\n\\t\\\ß\\\:\\\ss\\\,\\n\\t\\\ẞ\\\:\\\SS\\\,\\n\\t\\\Ś\\\:\\\S\\\,\\n\\t\\\Ṥ\\\:\\\S\\\,\\n\\t\\\Š\\\:\\\S\\\,\\n\\t\\\Ṧ\\\:\\\S\\\,\\n\\t\\\Ş\\\:\\\S\\\,\\n\\t\\\Ŝ\\\:\\\S\\\,\\n\\t\\\Ș\\\:\\\S\\\,\\n\\t\\\Ṡ\\\:\\\S\\\,\\n\\t\\\Ṣ\\\:\\\S\\\,\\n\\t\\\Ṩ\\\:\\\S\\\,\\n\\t\\\þ\\\: \\\th\\\,\\n\\t\\\Þ\\\: \\\TH\\\,\\n\\t\\\Ť\\\:\\\T\\\,\\n\\t\\\Ţ\\\:\\\T\\\,\\n\\t\\\Ṱ\\\:\\\T\\\,\\n\\t\\\Ț\\\:\\\T\\\,\\n\\t\\\Ⱦ\\\:\\\T\\\,\\n\\t\\\Ṫ\\\:\\\T\\\,\\n\\t\\\Ṭ\\\:\\\T\\\,\\n\\t\\\Ƭ\\\:\\\T\\\,\\n\\t\\\Ṯ\\\:\\\T\\\,\\n\\t\\\Ʈ\\\:\\\T\\\,\\n\\t\\\Ŧ\\\:\\\T\\\,\\n\\t\\\Ɐ\\\:\\\A\\\,\\n\\t\\\Ꞁ\\\:\\\L\\\,\\n\\t\\\Ɯ\\\:\\\M\\\,\\n\\t\\\Ʌ\\\:\\\V\\\,\\n\\t\\\Ꜩ\\\:\\\TZ\\\,\\n\\t\\\Ú\\\:\\\U\\\,\\n\\t\\\Ŭ\\\:\\\U\\\,\\n\\t\\\Ǔ\\\:\\\U\\\,\\n\\t\\\Û\\\:\\\U\\\,\\n\\t\\\Ṷ\\\:\\\U\\\,\\n\\t\\\Ü\\\:\\\U\\\,\\n\\t\\\Ǘ\\\:\\\U\\\,\\n\\t\\\Ǚ\\\:\\\U\\\,\\n\\t\\\Ǜ\\\:\\\U\\\,\\n\\t\\\Ǖ\\\:\\\U\\\,\\n\\t\\\Ṳ\\\:\\\U\\\,\\n\\t\\\Ụ\\\:\\\U\\\,\\n\\t\\\Ű\\\:\\\U\\\,\\n\\t\\\Ȕ\\\:\\\U\\\,\\n\\t\\\Ù\\\:\\\U\\\,\\n\\t\\\Ủ\\\:\\\U\\\,\\n\\t\\\Ư\\\:\\\U\\\,\\n\\t\\\Ứ\\\:\\\U\\\,\\n\\t\\\Ự\\\:\\\U\\\,\\n\\t\\\Ừ\\\:\\\U\\\,\\n\\t\\\Ử\\\:\\\U\\\,\\n\\t\\\Ữ\\\:\\\U\\\,\\n\\t\\\Ȗ\\\:\\\U\\\,\\n\\t\\\Ū\\\:\\\U\\\,\\n\\t\\\Ṻ\\\:\\\U\\\,\\n\\t\\\Ų\\\:\\\U\\\,\\n\\t\\\Ů\\\:\\\U\\\,\\n\\t\\\Ũ\\\:\\\U\\\,\\n\\t\\\Ṹ\\\:\\\U\\\,\\n\\t\\\Ṵ\\\:\\\U\\\,\\n\\t\\\Ꝟ\\\:\\\V\\\,\\n\\t\\\Ṿ\\\:\\\V\\\,\\n\\t\\\Ʋ\\\:\\\V\\\,\\n\\t\\\Ṽ\\\:\\\V\\\,\\n\\t\\\Ꝡ\\\:\\\VY\\\,\\n\\t\\\Ẃ\\\:\\\W\\\,\\n\\t\\\Ŵ\\\:\\\W\\\,\\n\\t\\\Ẅ\\\:\\\W\\\,\\n\\t\\\Ẇ\\\:\\\W\\\,\\n\\t\\\Ẉ\\\:\\\W\\\,\\n\\t\\\Ẁ\\\:\\\W\\\,\\n\\t\\\Ⱳ\\\:\\\W\\\,\\n\\t\\\Ẍ\\\:\\\X\\\,\\n\\t\\\Ẋ\\\:\\\X\\\,\\n\\t\\\Ý\\\:\\\Y\\\,\\n\\t\\\Ŷ\\\:\\\Y\\\,\\n\\t\\\Ÿ\\\:\\\Y\\\,\\n\\t\\\Ẏ\\\:\\\Y\\\,\\n\\t\\\Ỵ\\\:\\\Y\\\,\\n\\t\\\Ỳ\\\:\\\Y\\\,\\n\\t\\\Ƴ\\\:\\\Y\\\,\\n\\t\\\Ỷ\\\:\\\Y\\\,\\n\\t\\\Ỿ\\\:\\\Y\\\,\\n\\t\\\Ȳ\\\:\\\Y\\\,\\n\\t\\\Ɏ\\\:\\\Y\\\,\\n\\t\\\Ỹ\\\:\\\Y\\\,\\n\\t\\\Ź\\\:\\\Z\\\,\\n\\t\\\Ž\\\:\\\Z\\\,\\n\\t\\\Ẑ\\\:\\\Z\\\,\\n\\t\\\Ⱬ\\\:\\\Z\\\,\\n\\t\\\Ż\\\:\\\Z\\\,\\n\\t\\\Ẓ\\\:\\\Z\\\,\\n\\t\\\Ȥ\\\:\\\Z\\\,\\n\\t\\\Ẕ\\\:\\\Z\\\,\\n\\t\\\Ƶ\\\:\\\Z\\\,\\n\\t\\\IJ\\\:\\\IJ\\\,\\n\\t\\\Œ\\\:\\\OE\\\,\\n\\t\\\ᴀ\\\:\\\A\\\,\\n\\t\\\ᴁ\\\:\\\AE\\\,\\n\\t\\\ʙ\\\:\\\B\\\,\\n\\t\\\ᴃ\\\:\\\B\\\,\\n\\t\\\ᴄ\\\:\\\C\\\,\\n\\t\\\ᴅ\\\:\\\D\\\,\\n\\t\\\ᴇ\\\:\\\E\\\,\\n\\t\\\ꜰ\\\:\\\F\\\,\\n\\t\\\ɢ\\\:\\\G\\\,\\n\\t\\\ʛ\\\:\\\G\\\,\\n\\t\\\ʜ\\\:\\\H\\\,\\n\\t\\\ɪ\\\:\\\I\\\,\\n\\t\\\ʁ\\\:\\\R\\\,\\n\\t\\\ᴊ\\\:\\\J\\\,\\n\\t\\\ᴋ\\\:\\\K\\\,\\n\\t\\\ʟ\\\:\\\L\\\,\\n\\t\\\ᴌ\\\:\\\L\\\,\\n\\t\\\ᴍ\\\:\\\M\\\,\\n\\t\\\ɴ\\\:\\\N\\\,\\n\\t\\\ᴏ\\\:\\\O\\\,\\n\\t\\\ɶ\\\:\\\OE\\\,\\n\\t\\\ᴐ\\\:\\\O\\\,\\n\\t\\\ᴕ\\\:\\\OU\\\,\\n\\t\\\ᴘ\\\:\\\P\\\,\\n\\t\\\ʀ\\\:\\\R\\\,\\n\\t\\\ᴎ\\\:\\\N\\\,\\n\\t\\\ᴙ\\\:\\\R\\\,\\n\\t\\\ꜱ\\\:\\\S\\\,\\n\\t\\\ᴛ\\\:\\\T\\\,\\n\\t\\\ⱻ\\\:\\\E\\\,\\n\\t\\\ᴚ\\\:\\\R\\\,\\n\\t\\\ᴜ\\\:\\\U\\\,\\n\\t\\\ᴠ\\\:\\\V\\\,\\n\\t\\\ᴡ\\\:\\\W\\\,\\n\\t\\\ʏ\\\:\\\Y\\\,\\n\\t\\\ᴢ\\\:\\\Z\\\,\\n\\t\\\á\\\:\\\a\\\,\\n\\t\\\ă\\\:\\\a\\\,\\n\\t\\\ắ\\\:\\\a\\\,\\n\\t\\\ặ\\\:\\\a\\\,\\n\\t\\\ằ\\\:\\\a\\\,\\n\\t\\\ẳ\\\:\\\a\\\,\\n\\t\\\ẵ\\\:\\\a\\\,\\n\\t\\\ǎ\\\:\\\a\\\,\\n\\t\\\â\\\:\\\a\\\,\\n\\t\\\ấ\\\:\\\a\\\,\\n\\t\\\ậ\\\:\\\a\\\,\\n\\t\\\ầ\\\:\\\a\\\,\\n\\t\\\ẩ\\\:\\\a\\\,\\n\\t\\\ẫ\\\:\\\a\\\,\\n\\t\\\ä\\\:\\\a\\\,\\n\\t\\\ǟ\\\:\\\a\\\,\\n\\t\\\ȧ\\\:\\\a\\\,\\n\\t\\\ǡ\\\:\\\a\\\,\\n\\t\\\ạ\\\:\\\a\\\,\\n\\t\\\ȁ\\\:\\\a\\\,\\n\\t\\\à\\\:\\\a\\\,\\n\\t\\\ả\\\:\\\a\\\,\\n\\t\\\ȃ\\\:\\\a\\\,\\n\\t\\\ā\\\:\\\a\\\,\\n\\t\\\ą\\\:\\\a\\\,\\n\\t\\\ᶏ\\\:\\\a\\\,\\n\\t\\\ẚ\\\:\\\a\\\,\\n\\t\\\å\\\:\\\a\\\,\\n\\t\\\ǻ\\\:\\\a\\\,\\n\\t\\\ḁ\\\:\\\a\\\,\\n\\t\\\ⱥ\\\:\\\a\\\,\\n\\t\\\ã\\\:\\\a\\\,\\n\\t\\\ꜳ\\\:\\\aa\\\,\\n\\t\\\æ\\\:\\\ae\\\,\\n\\t\\\ǽ\\\:\\\ae\\\,\\n\\t\\\ǣ\\\:\\\ae\\\,\\n\\t\\\ꜵ\\\:\\\ao\\\,\\n\\t\\\ꜷ\\\:\\\au\\\,\\n\\t\\\ꜹ\\\:\\\av\\\,\\n\\t\\\ꜻ\\\:\\\av\\\,\\n\\t\\\ꜽ\\\:\\\ay\\\,\\n\\t\\\ḃ\\\:\\\b\\\,\\n\\t\\\ḅ\\\:\\\b\\\,\\n\\t\\\ɓ\\\:\\\b\\\,\\n\\t\\\ḇ\\\:\\\b\\\,\\n\\t\\\ᵬ\\\:\\\b\\\,\\n\\t\\\ᶀ\\\:\\\b\\\,\\n\\t\\\ƀ\\\:\\\b\\\,\\n\\t\\\ƃ\\\:\\\b\\\,\\n\\t\\\ɵ\\\:\\\o\\\,\\n\\t\\\ć\\\:\\\c\\\,\\n\\t\\\č\\\:\\\c\\\,\\n\\t\\\ç\\\:\\\c\\\,\\n\\t\\\ḉ\\\:\\\c\\\,\\n\\t\\\ĉ\\\:\\\c\\\,\\n\\t\\\ɕ\\\:\\\c\\\,\\n\\t\\\ċ\\\:\\\c\\\,\\n\\t\\\ƈ\\\:\\\c\\\,\\n\\t\\\ȼ\\\:\\\c\\\,\\n\\t\\\ď\\\:\\\d\\\,\\n\\t\\\ḑ\\\:\\\d\\\,\\n\\t\\\ḓ\\\:\\\d\\\,\\n\\t\\\ȡ\\\:\\\d\\\,\\n\\t\\\ḋ\\\:\\\d\\\,\\n\\t\\\ḍ\\\:\\\d\\\,\\n\\t\\\ɗ\\\:\\\d\\\,\\n\\t\\\ᶑ\\\:\\\d\\\,\\n\\t\\\ḏ\\\:\\\d\\\,\\n\\t\\\ᵭ\\\:\\\d\\\,\\n\\t\\\ᶁ\\\:\\\d\\\,\\n\\t\\\đ\\\:\\\d\\\,\\n\\t\\\ɖ\\\:\\\d\\\,\\n\\t\\\ƌ\\\:\\\d\\\,\\n\\t\\\ı\\\:\\\i\\\,\\n\\t\\\ȷ\\\:\\\j\\\,\\n\\t\\\ɟ\\\:\\\j\\\,\\n\\t\\\ʄ\\\:\\\j\\\,\\n\\t\\\dz\\\:\\\dz\\\,\\n\\t\\\dž\\\:\\\dz\\\,\\n\\t\\\é\\\:\\\e\\\,\\n\\t\\\ĕ\\\:\\\e\\\,\\n\\t\\\ě\\\:\\\e\\\,\\n\\t\\\ȩ\\\:\\\e\\\,\\n\\t\\\ḝ\\\:\\\e\\\,\\n\\t\\\ê\\\:\\\e\\\,\\n\\t\\\ế\\\:\\\e\\\,\\n\\t\\\ệ\\\:\\\e\\\,\\n\\t\\\ề\\\:\\\e\\\,\\n\\t\\\ể\\\:\\\e\\\,\\n\\t\\\ễ\\\:\\\e\\\,\\n\\t\\\ḙ\\\:\\\e\\\,\\n\\t\\\ë\\\:\\\e\\\,\\n\\t\\\ė\\\:\\\e\\\,\\n\\t\\\ẹ\\\:\\\e\\\,\\n\\t\\\ȅ\\\:\\\e\\\,\\n\\t\\\è\\\:\\\e\\\,\\n\\t\\\ẻ\\\:\\\e\\\,\\n\\t\\\ȇ\\\:\\\e\\\,\\n\\t\\\ē\\\:\\\e\\\,\\n\\t\\\ḗ\\\:\\\e\\\,\\n\\t\\\ḕ\\\:\\\e\\\,\\n\\t\\\ⱸ\\\:\\\e\\\,\\n\\t\\\ę\\\:\\\e\\\,\\n\\t\\\ᶒ\\\:\\\e\\\,\\n\\t\\\ɇ\\\:\\\e\\\,\\n\\t\\\ẽ\\\:\\\e\\\,\\n\\t\\\ḛ\\\:\\\e\\\,\\n\\t\\\ꝫ\\\:\\\et\\\,\\n\\t\\\ḟ\\\:\\\f\\\,\\n\\t\\\ƒ\\\:\\\f\\\,\\n\\t\\\ᵮ\\\:\\\f\\\,\\n\\t\\\ᶂ\\\:\\\f\\\,\\n\\t\\\ǵ\\\:\\\g\\\,\\n\\t\\\ğ\\\:\\\g\\\,\\n\\t\\\ǧ\\\:\\\g\\\,\\n\\t\\\ģ\\\:\\\g\\\,\\n\\t\\\ĝ\\\:\\\g\\\,\\n\\t\\\ġ\\\:\\\g\\\,\\n\\t\\\ɠ\\\:\\\g\\\,\\n\\t\\\ḡ\\\:\\\g\\\,\\n\\t\\\ᶃ\\\:\\\g\\\,\\n\\t\\\ǥ\\\:\\\g\\\,\\n\\t\\\ḫ\\\:\\\h\\\,\\n\\t\\\ȟ\\\:\\\h\\\,\\n\\t\\\ḩ\\\:\\\h\\\,\\n\\t\\\ĥ\\\:\\\h\\\,\\n\\t\\\ⱨ\\\:\\\h\\\,\\n\\t\\\ḧ\\\:\\\h\\\,\\n\\t\\\ḣ\\\:\\\h\\\,\\n\\t\\\ḥ\\\:\\\h\\\,\\n\\t\\\ɦ\\\:\\\h\\\,\\n\\t\\\ẖ\\\:\\\h\\\,\\n\\t\\\ħ\\\:\\\h\\\,\\n\\t\\\ƕ\\\:\\\hv\\\,\\n\\t\\\í\\\:\\\i\\\,\\n\\t\\\ĭ\\\:\\\i\\\,\\n\\t\\\ǐ\\\:\\\i\\\,\\n\\t\\\î\\\:\\\i\\\,\\n\\t\\\ï\\\:\\\i\\\,\\n\\t\\\ḯ\\\:\\\i\\\,\\n\\t\\\ị\\\:\\\i\\\,\\n\\t\\\ȉ\\\:\\\i\\\,\\n\\t\\\ì\\\:\\\i\\\,\\n\\t\\\ỉ\\\:\\\i\\\,\\n\\t\\\ȋ\\\:\\\i\\\,\\n\\t\\\ī\\\:\\\i\\\,\\n\\t\\\į\\\:\\\i\\\,\\n\\t\\\ᶖ\\\:\\\i\\\,\\n\\t\\\ɨ\\\:\\\i\\\,\\n\\t\\\ĩ\\\:\\\i\\\,\\n\\t\\\ḭ\\\:\\\i\\\,\\n\\t\\\ꝺ\\\:\\\d\\\,\\n\\t\\\ꝼ\\\:\\\f\\\,\\n\\t\\\ᵹ\\\:\\\g\\\,\\n\\t\\\ꞃ\\\:\\\r\\\,\\n\\t\\\ꞅ\\\:\\\s\\\,\\n\\t\\\ꞇ\\\:\\\t\\\,\\n\\t\\\ꝭ\\\:\\\is\\\,\\n\\t\\\ǰ\\\:\\\j\\\,\\n\\t\\\ĵ\\\:\\\j\\\,\\n\\t\\\ʝ\\\:\\\j\\\,\\n\\t\\\ɉ\\\:\\\j\\\,\\n\\t\\\ḱ\\\:\\\k\\\,\\n\\t\\\ǩ\\\:\\\k\\\,\\n\\t\\\ķ\\\:\\\k\\\,\\n\\t\\\ⱪ\\\:\\\k\\\,\\n\\t\\\ꝃ\\\:\\\k\\\,\\n\\t\\\ḳ\\\:\\\k\\\,\\n\\t\\\ƙ\\\:\\\k\\\,\\n\\t\\\ḵ\\\:\\\k\\\,\\n\\t\\\ᶄ\\\:\\\k\\\,\\n\\t\\\ꝁ\\\:\\\k\\\,\\n\\t\\\ꝅ\\\:\\\k\\\,\\n\\t\\\ĺ\\\:\\\l\\\,\\n\\t\\\ƚ\\\:\\\l\\\,\\n\\t\\\ɬ\\\:\\\l\\\,\\n\\t\\\ľ\\\:\\\l\\\,\\n\\t\\\ļ\\\:\\\l\\\,\\n\\t\\\ḽ\\\:\\\l\\\,\\n\\t\\\ȴ\\\:\\\l\\\,\\n\\t\\\ḷ\\\:\\\l\\\,\\n\\t\\\ḹ\\\:\\\l\\\,\\n\\t\\\ⱡ\\\:\\\l\\\,\\n\\t\\\ꝉ\\\:\\\l\\\,\\n\\t\\\ḻ\\\:\\\l\\\,\\n\\t\\\ŀ\\\:\\\l\\\,\\n\\t\\\ɫ\\\:\\\l\\\,\\n\\t\\\ᶅ\\\:\\\l\\\,\\n\\t\\\ɭ\\\:\\\l\\\,\\n\\t\\\ł\\\:\\\l\\\,\\n\\t\\\lj\\\:\\\lj\\\,\\n\\t\\\ſ\\\:\\\s\\\,\\n\\t\\\ẜ\\\:\\\s\\\,\\n\\t\\\ẛ\\\:\\\s\\\,\\n\\t\\\ẝ\\\:\\\s\\\,\\n\\t\\\ḿ\\\:\\\m\\\,\\n\\t\\\ṁ\\\:\\\m\\\,\\n\\t\\\ṃ\\\:\\\m\\\,\\n\\t\\\ɱ\\\:\\\m\\\,\\n\\t\\\ᵯ\\\:\\\m\\\,\\n\\t\\\ᶆ\\\:\\\m\\\,\\n\\t\\\ń\\\:\\\n\\\,\\n\\t\\\ň\\\:\\\n\\\,\\n\\t\\\ņ\\\:\\\n\\\,\\n\\t\\\ṋ\\\:\\\n\\\,\\n\\t\\\ȵ\\\:\\\n\\\,\\n\\t\\\ṅ\\\:\\\n\\\,\\n\\t\\\ṇ\\\:\\\n\\\,\\n\\t\\\ǹ\\\:\\\n\\\,\\n\\t\\\ɲ\\\:\\\n\\\,\\n\\t\\\ṉ\\\:\\\n\\\,\\n\\t\\\ƞ\\\:\\\n\\\,\\n\\t\\\ᵰ\\\:\\\n\\\,\\n\\t\\\ᶇ\\\:\\\n\\\,\\n\\t\\\ɳ\\\:\\\n\\\,\\n\\t\\\ñ\\\:\\\n\\\,\\n\\t\\\nj\\\:\\\nj\\\,\\n\\t\\\ó\\\:\\\o\\\,\\n\\t\\\ŏ\\\:\\\o\\\,\\n\\t\\\ǒ\\\:\\\o\\\,\\n\\t\\\ô\\\:\\\o\\\,\\n\\t\\\ố\\\:\\\o\\\,\\n\\t\\\ộ\\\:\\\o\\\,\\n\\t\\\ồ\\\:\\\o\\\,\\n\\t\\\ổ\\\:\\\o\\\,\\n\\t\\\ỗ\\\:\\\o\\\,\\n\\t\\\ö\\\:\\\o\\\,\\n\\t\\\ȫ\\\:\\\o\\\,\\n\\t\\\ȯ\\\:\\\o\\\,\\n\\t\\\ȱ\\\:\\\o\\\,\\n\\t\\\ọ\\\:\\\o\\\,\\n\\t\\\ő\\\:\\\o\\\,\\n\\t\\\ȍ\\\:\\\o\\\,\\n\\t\\\ò\\\:\\\o\\\,\\n\\t\\\ỏ\\\:\\\o\\\,\\n\\t\\\ơ\\\:\\\o\\\,\\n\\t\\\ớ\\\:\\\o\\\,\\n\\t\\\ợ\\\:\\\o\\\,\\n\\t\\\ờ\\\:\\\o\\\,\\n\\t\\\ở\\\:\\\o\\\,\\n\\t\\\ỡ\\\:\\\o\\\,\\n\\t\\\ȏ\\\:\\\o\\\,\\n\\t\\\ꝋ\\\:\\\o\\\,\\n\\t\\\ꝍ\\\:\\\o\\\,\\n\\t\\\ⱺ\\\:\\\o\\\,\\n\\t\\\ō\\\:\\\o\\\,\\n\\t\\\ṓ\\\:\\\o\\\,\\n\\t\\\ṑ\\\:\\\o\\\,\\n\\t\\\ǫ\\\:\\\o\\\,\\n\\t\\\ǭ\\\:\\\o\\\,\\n\\t\\\ø\\\:\\\o\\\,\\n\\t\\\ǿ\\\:\\\o\\\,\\n\\t\\\õ\\\:\\\o\\\,\\n\\t\\\ṍ\\\:\\\o\\\,\\n\\t\\\ṏ\\\:\\\o\\\,\\n\\t\\\ȭ\\\:\\\o\\\,\\n\\t\\\ƣ\\\:\\\oi\\\,\\n\\t\\\ꝏ\\\:\\\oo\\\,\\n\\t\\\ɛ\\\:\\\e\\\,\\n\\t\\\ᶓ\\\:\\\e\\\,\\n\\t\\\ɔ\\\:\\\o\\\,\\n\\t\\\ᶗ\\\:\\\o\\\,\\n\\t\\\ȣ\\\:\\\ou\\\,\\n\\t\\\ṕ\\\:\\\p\\\,\\n\\t\\\ṗ\\\:\\\p\\\,\\n\\t\\\ꝓ\\\:\\\p\\\,\\n\\t\\\ƥ\\\:\\\p\\\,\\n\\t\\\ᵱ\\\:\\\p\\\,\\n\\t\\\ᶈ\\\:\\\p\\\,\\n\\t\\\ꝕ\\\:\\\p\\\,\\n\\t\\\ᵽ\\\:\\\p\\\,\\n\\t\\\ꝑ\\\:\\\p\\\,\\n\\t\\\ꝙ\\\:\\\q\\\,\\n\\t\\\ʠ\\\:\\\q\\\,\\n\\t\\\ɋ\\\:\\\q\\\,\\n\\t\\\ꝗ\\\:\\\q\\\,\\n\\t\\\ŕ\\\:\\\r\\\,\\n\\t\\\ř\\\:\\\r\\\,\\n\\t\\\ŗ\\\:\\\r\\\,\\n\\t\\\ṙ\\\:\\\r\\\,\\n\\t\\\ṛ\\\:\\\r\\\,\\n\\t\\\ṝ\\\:\\\r\\\,\\n\\t\\\ȑ\\\:\\\r\\\,\\n\\t\\\ɾ\\\:\\\r\\\,\\n\\t\\\ᵳ\\\:\\\r\\\,\\n\\t\\\ȓ\\\:\\\r\\\,\\n\\t\\\ṟ\\\:\\\r\\\,\\n\\t\\\ɼ\\\:\\\r\\\,\\n\\t\\\ᵲ\\\:\\\r\\\,\\n\\t\\\ᶉ\\\:\\\r\\\,\\n\\t\\\ɍ\\\:\\\r\\\,\\n\\t\\\ɽ\\\:\\\r\\\,\\n\\t\\\ↄ\\\:\\\c\\\,\\n\\t\\\ꜿ\\\:\\\c\\\,\\n\\t\\\ɘ\\\:\\\e\\\,\\n\\t\\\ɿ\\\:\\\r\\\,\\n\\t\\\ś\\\:\\\s\\\,\\n\\t\\\ṥ\\\:\\\s\\\,\\n\\t\\\š\\\:\\\s\\\,\\n\\t\\\ṧ\\\:\\\s\\\,\\n\\t\\\ş\\\:\\\s\\\,\\n\\t\\\ŝ\\\:\\\s\\\,\\n\\t\\\ș\\\:\\\s\\\,\\n\\t\\\ṡ\\\:\\\s\\\,\\n\\t\\\ṣ\\\:\\\s\\\,\\n\\t\\\ṩ\\\:\\\s\\\,\\n\\t\\\ʂ\\\:\\\s\\\,\\n\\t\\\ᵴ\\\:\\\s\\\,\\n\\t\\\ᶊ\\\:\\\s\\\,\\n\\t\\\ȿ\\\:\\\s\\\,\\n\\t\\\ɡ\\\:\\\g\\\,\\n\\t\\\ᴑ\\\:\\\o\\\,\\n\\t\\\ᴓ\\\:\\\o\\\,\\n\\t\\\ᴝ\\\:\\\u\\\,\\n\\t\\\ť\\\:\\\t\\\,\\n\\t\\\ţ\\\:\\\t\\\,\\n\\t\\\ṱ\\\:\\\t\\\,\\n\\t\\\ț\\\:\\\t\\\,\\n\\t\\\ȶ\\\:\\\t\\\,\\n\\t\\\ẗ\\\:\\\t\\\,\\n\\t\\\ⱦ\\\:\\\t\\\,\\n\\t\\\ṫ\\\:\\\t\\\,\\n\\t\\\ṭ\\\:\\\t\\\,\\n\\t\\\ƭ\\\:\\\t\\\,\\n\\t\\\ṯ\\\:\\\t\\\,\\n\\t\\\ᵵ\\\:\\\t\\\,\\n\\t\\\ƫ\\\:\\\t\\\,\\n\\t\\\ʈ\\\:\\\t\\\,\\n\\t\\\ŧ\\\:\\\t\\\,\\n\\t\\\ᵺ\\\:\\\th\\\,\\n\\t\\\ɐ\\\:\\\a\\\,\\n\\t\\\ᴂ\\\:\\\ae\\\,\\n\\t\\\ǝ\\\:\\\e\\\,\\n\\t\\\ᵷ\\\:\\\g\\\,\\n\\t\\\ɥ\\\:\\\h\\\,\\n\\t\\\ʮ\\\:\\\h\\\,\\n\\t\\\ʯ\\\:\\\h\\\,\\n\\t\\\ᴉ\\\:\\\i\\\,\\n\\t\\\ʞ\\\:\\\k\\\,\\n\\t\\\ꞁ\\\:\\\l\\\,\\n\\t\\\ɯ\\\:\\\m\\\,\\n\\t\\\ɰ\\\:\\\m\\\,\\n\\t\\\ᴔ\\\:\\\oe\\\,\\n\\t\\\ɹ\\\:\\\r\\\,\\n\\t\\\ɻ\\\:\\\r\\\,\\n\\t\\\ɺ\\\:\\\r\\\,\\n\\t\\\ⱹ\\\:\\\r\\\,\\n\\t\\\ʇ\\\:\\\t\\\,\\n\\t\\\ʌ\\\:\\\v\\\,\\n\\t\\\ʍ\\\:\\\w\\\,\\n\\t\\\ʎ\\\:\\\y\\\,\\n\\t\\\ꜩ\\\:\\\tz\\\,\\n\\t\\\ú\\\:\\\u\\\,\\n\\t\\\ŭ\\\:\\\u\\\,\\n\\t\\\ǔ\\\:\\\u\\\,\\n\\t\\\û\\\:\\\u\\\,\\n\\t\\\ṷ\\\:\\\u\\\,\\n\\t\\\ü\\\:\\\u\\\,\\n\\t\\\ǘ\\\:\\\u\\\,\\n\\t\\\ǚ\\\:\\\u\\\,\\n\\t\\\ǜ\\\:\\\u\\\,\\n\\t\\\ǖ\\\:\\\u\\\,\\n\\t\\\ṳ\\\:\\\u\\\,\\n\\t\\\ụ\\\:\\\u\\\,\\n\\t\\\ű\\\:\\\u\\\,\\n\\t\\\ȕ\\\:\\\u\\\,\\n\\t\\\ù\\\:\\\u\\\,\\n\\t\\\ủ\\\:\\\u\\\,\\n\\t\\\ư\\\:\\\u\\\,\\n\\t\\\ứ\\\:\\\u\\\,\\n\\t\\\ự\\\:\\\u\\\,\\n\\t\\\ừ\\\:\\\u\\\,\\n\\t\\\ử\\\:\\\u\\\,\\n\\t\\\ữ\\\:\\\u\\\,\\n\\t\\\ȗ\\\:\\\u\\\,\\n\\t\\\ū\\\:\\\u\\\,\\n\\t\\\ṻ\\\:\\\u\\\,\\n\\t\\\ų\\\:\\\u\\\,\\n\\t\\\ᶙ\\\:\\\u\\\,\\n\\t\\\ů\\\:\\\u\\\,\\n\\t\\\ũ\\\:\\\u\\\,\\n\\t\\\ṹ\\\:\\\u\\\,\\n\\t\\\ṵ\\\:\\\u\\\,\\n\\t\\\ᵫ\\\:\\\ue\\\,\\n\\t\\\ꝸ\\\:\\\um\\\,\\n\\t\\\ⱴ\\\:\\\v\\\,\\n\\t\\\ꝟ\\\:\\\v\\\,\\n\\t\\\ṿ\\\:\\\v\\\,\\n\\t\\\ʋ\\\:\\\v\\\,\\n\\t\\\ᶌ\\\:\\\v\\\,\\n\\t\\\ⱱ\\\:\\\v\\\,\\n\\t\\\ṽ\\\:\\\v\\\,\\n\\t\\\ꝡ\\\:\\\vy\\\,\\n\\t\\\ẃ\\\:\\\w\\\,\\n\\t\\\ŵ\\\:\\\w\\\,\\n\\t\\\ẅ\\\:\\\w\\\,\\n\\t\\\ẇ\\\:\\\w\\\,\\n\\t\\\ẉ\\\:\\\w\\\,\\n\\t\\\ẁ\\\:\\\w\\\,\\n\\t\\\ⱳ\\\:\\\w\\\,\\n\\t\\\ẘ\\\:\\\w\\\,\\n\\t\\\ẍ\\\:\\\x\\\,\\n\\t\\\ẋ\\\:\\\x\\\,\\n\\t\\\ᶍ\\\:\\\x\\\,\\n\\t\\\ý\\\:\\\y\\\,\\n\\t\\\ŷ\\\:\\\y\\\,\\n\\t\\\ÿ\\\:\\\y\\\,\\n\\t\\\ẏ\\\:\\\y\\\,\\n\\t\\\ỵ\\\:\\\y\\\,\\n\\t\\\ỳ\\\:\\\y\\\,\\n\\t\\\ƴ\\\:\\\y\\\,\\n\\t\\\ỷ\\\:\\\y\\\,\\n\\t\\\ỿ\\\:\\\y\\\,\\n\\t\\\ȳ\\\:\\\y\\\,\\n\\t\\\ẙ\\\:\\\y\\\,\\n\\t\\\ɏ\\\:\\\y\\\,\\n\\t\\\ỹ\\\:\\\y\\\,\\n\\t\\\ź\\\:\\\z\\\,\\n\\t\\\ž\\\:\\\z\\\,\\n\\t\\\ẑ\\\:\\\z\\\,\\n\\t\\\ʑ\\\:\\\z\\\,\\n\\t\\\ⱬ\\\:\\\z\\\,\\n\\t\\\ż\\\:\\\z\\\,\\n\\t\\\ẓ\\\:\\\z\\\,\\n\\t\\\ȥ\\\:\\\z\\\,\\n\\t\\\ẕ\\\:\\\z\\\,\\n\\t\\\ᵶ\\\:\\\z\\\,\\n\\t\\\ᶎ\\\:\\\z\\\,\\n\\t\\\ʐ\\\:\\\z\\\,\\n\\t\\\ƶ\\\:\\\z\\\,\\n\\t\\\ɀ\\\:\\\z\\\,\\n\\t\\\ff\\\:\\\ff\\\,\\n\\t\\\ffi\\\:\\\ffi\\\,\\n\\t\\\ffl\\\:\\\ffl\\\,\\n\\t\\\fi\\\:\\\fi\\\,\\n\\t\\\fl\\\:\\\fl\\\,\\n\\t\\\ij\\\:\\\ij\\\,\\n\\t\\\œ\\\:\\\oe\\\,\\n\\t\\\st\\\:\\\st\\\,\\n\\t\\\ₐ\\\:\\\a\\\,\\n\\t\\\ₑ\\\:\\\e\\\,\\n\\t\\\ᵢ\\\:\\\i\\\,\\n\\t\\\ⱼ\\\:\\\j\\\,\\n\\t\\\ₒ\\\:\\\o\\\,\\n\\t\\\ᵣ\\\:\\\r\\\,\\n\\t\\\ᵤ\\\:\\\u\\\,\\n\\t\\\ᵥ\\\:\\\v\\\,\\n\\t\\\ₓ\\\:\\\x\\\,\\n\\t\\\Ё\\\:\\\YO\\\,\\n\\t\\\Й\\\:\\\I\\\,\\n\\t\\\Ц\\\:\\\TS\\\,\\n\\t\\\У\\\:\\\U\\\,\\n\\t\\\К\\\:\\\K\\\,\\n\\t\\\Е\\\:\\\E\\\,\\n\\t\\\Н\\\:\\\N\\\,\\n\\t\\\Г\\\:\\\G\\\,\\n\\t\\\Ш\\\:\\\SH\\\,\\n\\t\\\Щ\\\:\\\SCH\\\,\\n\\t\\\З\\\:\\\Z\\\,\\n\\t\\\Х\\\:\\\H\\\,\\n\\t\\\Ъ\\\:\\\\\\,\\n\\t\\\ё\\\:\\\yo\\\,\\n\\t\\\й\\\:\\\i\\\,\\n\\t\\\ц\\\:\\\ts\\\,\\n\\t\\\у\\\:\\\u\\\,\\n\\t\\\к\\\:\\\k\\\,\\n\\t\\\е\\\:\\\e\\\,\\n\\t\\\н\\\:\\\n\\\,\\n\\t\\\г\\\:\\\g\\\,\\n\\t\\\ш\\\:\\\sh\\\,\\n\\t\\\щ\\\:\\\sch\\\,\\n\\t\\\з\\\:\\\z\\\,\\n\\t\\\х\\\:\\\h\\\,\\n\\t\\\ъ\\\:\\\\\\,\\n\\t\\\Ф\\\:\\\F\\\,\\n\\t\\\Ы\\\:\\\I\\\,\\n\\t\\\В\\\:\\\V\\\,\\n\\t\\\А\\\:\\\a\\\,\\n\\t\\\П\\\:\\\P\\\,\\n\\t\\\Р\\\:\\\R\\\,\\n\\t\\\О\\\:\\\O\\\,\\n\\t\\\Л\\\:\\\L\\\,\\n\\t\\\Д\\\:\\\D\\\,\\n\\t\\\Ж\\\:\\\ZH\\\,\\n\\t\\\Э\\\:\\\E\\\,\\n\\t\\\ф\\\:\\\f\\\,\\n\\t\\\ы\\\:\\\i\\\,\\n\\t\\\в\\\:\\\v\\\,\\n\\t\\\а\\\:\\\a\\\,\\n\\t\\\п\\\:\\\p\\\,\\n\\t\\\р\\\:\\\r\\\,\\n\\t\\\о\\\:\\\o\\\,\\n\\t\\\л\\\:\\\l\\\,\\n\\t\\\д\\\:\\\d\\\,\\n\\t\\\ж\\\:\\\zh\\\,\\n\\t\\\э\\\:\\\e\\\,\\n\\t\\\Я\\\:\\\Ya\\\,\\n\\t\\\Ч\\\:\\\CH\\\,\\n\\t\\\С\\\:\\\S\\\,\\n\\t\\\М\\\:\\\M\\\,\\n\\t\\\И\\\:\\\I\\\,\\n\\t\\\Т\\\:\\\T\\\,\\n\\t\\\Ь\\\:\\\\\\,\\n\\t\\\Б\\\:\\\B\\\,\\n\\t\\\Ю\\\:\\\YU\\\,\\n\\t\\\я\\\:\\\ya\\\,\\n\\t\\\ч\\\:\\\ch\\\,\\n\\t\\\с\\\:\\\s\\\,\\n\\t\\\м\\\:\\\m\\\,\\n\\t\\\и\\\:\\\i\\\,\\n\\t\\\т\\\:\\\t\\\,\\n\\t\\\ь\\\:\\\\\\,\\n\\t\\\б\\\:\\\b\\\,\\n\\t\\\ю\\\:\\\yu\\\,\\n\\t\\\…\\\:\\\...\\\\\n};\\n\\nexports.transliterate function(str) {\\n\\treturn str.replace(/^A-Za-z0-9\\\\\\\\ /g,function(ch) {\\n\\t\\treturn exports.transliterationPairsch || ch\\n\\t});\\n};\\n\\nexports.transliterateToSafeASCII function(str) {\\n\\treturn str.replace(/^\\\\x20-\\\\x7F/g,function(ch) {\\n\\t\\treturn exports.transliterationPairsch || \\\\\\\\n\\t});\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/utils/utils.js\:{\title\:\$:/core/modules/utils/utils.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/utils/utils.js\\ntype: application/javascript\\nmodule-type: utils\\n\\nVarious static utility functions.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar base64utf8 require(\\\$:/core/modules/utils/base64-utf8/base64-utf8.module.js\\\);\\n\\n/*\\nDisplay a message, in colour if were on a terminal\\n*/\\nexports.log function(text,colour) {\\n\\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\\n};\\n\\nexports.terminalColour function(colour) {\\n\\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\\n\\t\\tif(colour) {\\n\\t\\t\\tvar code exports.terminalColourLookupcolour;\\n\\t\\t\\tif(code) {\\n\\t\\t\\t\\treturn \\\\\\\x1b\\\ + code + \\\m\\\;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\treturn \\\\\\\x1b0m\\\; // Cancel colour\\n\\t\\t}\\n\\t}\\n\\treturn \\\\\\;\\n};\\n\\nexports.terminalColourLookup {\\n\\t\\\black\\\: \\\0;30\\\,\\n\\t\\\red\\\: \\\0;31\\\,\\n\\t\\\green\\\: \\\0;32\\\,\\n\\t\\\brown/orange\\\: \\\0;33\\\,\\n\\t\\\blue\\\: \\\0;34\\\,\\n\\t\\\purple\\\: \\\0;35\\\,\\n\\t\\\cyan\\\: \\\0;36\\\,\\n\\t\\\light gray\\\: \\\0;37\\\\\n};\\n\\n/*\\nDisplay a warning, in colour if were on a terminal\\n*/\\nexports.warning function(text) {\\n\\texports.log(text,\\\brown/orange\\\);\\n};\\n\\n/*\\nLog a table of name: value pairs\\n*/\\nexports.logTable function(data) {\\n\\tif(console.table) {\\n\\t\\tconsole.table(data);\\n\\t} else {\\n\\t\\t$tw.utils.each(data,function(value,name) {\\n\\t\\t\\tconsole.log(name + \\\: \\\ + value);\\n\\t\\t});\\n\\t}\\n}\\n\\n/*\\nReturn the integer represented by the str (string).\\nReturn the dflt (default) parameter if str is not a base-10 number.\\n*/\\nexports.getInt function(str,deflt) {\\n\\tvar i parseInt(str,10);\\n\\treturn isNaN(i) ? deflt : i;\\n}\\n\\n/*\\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\\n*/\\nexports.replaceString function(text,search,replace) {\\n\\treturn text.replace(search,function() {\\n\\t\\treturn replace;\\n\\t});\\n};\\n\\n/*\\nRepeats a string\\n*/\\nexports.repeat function(str,count) {\\n\\tvar result \\\\\\;\\n\\tfor(var t0;t\u003Ccount;t++) {\\n\\t\\tresult + str;\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nCheck if a string starts with another string\\n*/\\nexports.startsWith function(str,search) {\\n\\treturn str.substring(0, search.length) search;\\n};\\n\\n/*\\nCheck if a string ends with another string\\n*/\\nexports.endsWith function(str,search) {\\n\\treturn str.substring(str.length - search.length) search;\\n};\\n\\n/*\\nTrim whitespace from the start and end of a string\\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\\n*/\\nexports.trim function(str) {\\n\\tif(typeof str \\\string\\\) {\\n\\t\\treturn str.replace(/^\\\\s\\\\s*/, ).replace(/\\\\s\\\\s*$/, );\\n\\t} else {\\n\\t\\treturn str;\\n\\t}\\n};\\n\\nexports.trimPrefix function(str,unwanted) {\\n\\tif(typeof str \\\string\\\ && typeof unwanted \\\string\\\) {\\n\\t\\tif(unwanted \\\\\\) {\\n\\t\\t\\treturn str.replace(/^\\\\s\\\\s*/, );\\n\\t\\t} else {\\n\\t\\t\\t// Safely regexp-escape the unwanted text\\n\\t\\t\\tunwanted unwanted.replace(/\\\\\\\\^$*+?.()|\\\\{}/g, \\\\\\\\$&);\\n\\t\\t\\tvar regex new RegExp(^( + unwanted + )+);\\n\\t\\t\\treturn str.replace(regex, );\\n\\t\\t}\\n\\t} else {\\n\\t\\treturn str;\\n\\t}\\n};\\n\\nexports.trimSuffix function(str,unwanted) {\\n\\tif(typeof str \\\string\\\ && typeof unwanted \\\string\\\) {\\n\\t\\tif(unwanted \\\\\\) {\\n\\t\\t\\treturn str.replace(/\\\\s\\\\s*$/, );\\n\\t\\t} else {\\n\\t\\t\\t// Safely regexp-escape the unwanted text\\n\\t\\t\\tunwanted unwanted.replace(/\\\\\\\\^$*+?.()|\\\\{}/g, \\\\\\\\$&);\\n\\t\\t\\tvar regex new RegExp(( + unwanted + )+$);\\n\\t\\t\\treturn str.replace(regex, );\\n\\t\\t}\\n\\t} else {\\n\\t\\treturn str;\\n\\t}\\n};\\n\\n/*\\nConvert a string to sentence case (ie capitalise first letter)\\n*/\\nexports.toSentenceCase function(str) {\\n\\treturn (str || \\\\\\).replace(/^\\\\S/, function(c) {return c.toUpperCase();});\\n}\\n\\n/*\\nConvert a string to title case (ie capitalise each initial letter)\\n*/\\nexports.toTitleCase function(str) {\\n\\treturn (str || \\\\\\).replace(/(^|\\\\s)\\\\S/g, function(c) {return c.toUpperCase();});\\n}\\n\\n/*\\nFind the line break preceding a given position in a string\\nReturns position immediately after that line break, or the start of the string\\n*/\\nexports.findPrecedingLineBreak function(text,pos) {\\n\\tvar result text.lastIndexOf(\\\\\\\n\\\,pos - 1);\\n\\tif(result -1) {\\n\\t\\tresult 0;\\n\\t} else {\\n\\t\\tresult++;\\n\\t\\tif(text.charAt(result) \\\\\\\r\\\) {\\n\\t\\t\\tresult++;\\n\\t\\t}\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nFind the line break following a given position in a string\\n*/\\nexports.findFollowingLineBreak function(text,pos) {\\n\\t// Cut to just past the following line break, or to the end of the text\\n\\tvar result text.indexOf(\\\\\\\n\\\,pos);\\n\\tif(result -1) {\\n\\t\\tresult text.length;\\n\\t} else {\\n\\t\\tif(text.charAt(result) \\\\\\\r\\\) {\\n\\t\\t\\tresult++;\\n\\t\\t}\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nReturn the number of keys in an object\\n*/\\nexports.count function(object) {\\n\\treturn Object.keys(object || {}).length;\\n};\\n\\n/*\\nDetermine whether an array-item is an object-property\\n*/\\nexports.hopArray function(object,array) {\\n\\tfor(var i0; i\u003Carray.length; i++) {\\n\\t\\tif($tw.utils.hop(object,arrayi)) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n/*\\nRemove entries from an array\\n\\tarray: array to modify\\n\\tvalue: a single value to remove, or an array of values to remove\\n*/\\nexports.removeArrayEntries function(array,value) {\\n\\tvar t,p;\\n\\tif($tw.utils.isArray(value)) {\\n\\t\\tfor(t0; t\u003Cvalue.length; t++) {\\n\\t\\t\\tp array.indexOf(valuet);\\n\\t\\t\\tif(p ! -1) {\\n\\t\\t\\t\\tarray.splice(p,1);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tp array.indexOf(value);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tarray.splice(p,1);\\n\\t\\t}\\n\\t}\\n\\treturn array;\\n};\\n\\n/*\\nCheck whether any members of a hashmap are present in another hashmap\\n*/\\nexports.checkDependencies function(dependencies,changes) {\\n\\tvar hit false;\\n\\t$tw.utils.each(changes,function(change,title) {\\n\\t\\tif($tw.utils.hop(dependencies,title)) {\\n\\t\\t\\thit true;\\n\\t\\t}\\n\\t});\\n\\treturn hit;\\n};\\n\\nexports.extend function(object /* , src */) {\\n\\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\\n\\t\\tif(source) {\\n\\t\\t\\tfor(var property in source) {\\n\\t\\t\\t\\tobjectproperty sourceproperty;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn object;\\n};\\n\\nexports.deepCopy function(object) {\\n\\tvar result,t;\\n\\tif($tw.utils.isArray(object)) {\\n\\t\\t// Copy arrays\\n\\t\\tresult object.slice(0);\\n\\t} else if(typeof object \\\object\\\) {\\n\\t\\tresult {};\\n\\t\\tfor(t in object) {\\n\\t\\t\\tif(objectt ! undefined) {\\n\\t\\t\\t\\tresultt $tw.utils.deepCopy(objectt);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\tresult object;\\n\\t}\\n\\treturn result;\\n};\\n\\nexports.extendDeepCopy function(object,extendedProperties) {\\n\\tvar result $tw.utils.deepCopy(object),t;\\n\\tfor(t in extendedProperties) {\\n\\t\\tif(extendedPropertiest ! undefined) {\\n\\t\\t\\tresultt $tw.utils.deepCopy(extendedPropertiest);\\n\\t\\t}\\n\\t}\\n\\treturn result;\\n};\\n\\nexports.deepFreeze function deepFreeze(object) {\\n\\tvar property, key;\\n\\tif(object) {\\n\\t\\tObject.freeze(object);\\n\\t\\tfor(key in object) {\\n\\t\\t\\tproperty objectkey;\\n\\t\\t\\tif($tw.utils.hop(object,key) && (typeof property \\\object\\\) && !Object.isFrozen(property)) {\\n\\t\\t\\t\\tdeepFreeze(property);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.slowInSlowOut function(t) {\\n\\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\\n};\\n\\nexports.formatTitleString function(template,options) {\\n\\tvar base options.base || \\\\\\,\\n\\t\\tseparator options.separator || \\\\\\,\\n\\t\\tcounter options.counter || \\\\\\;\\n\\tvar result \\\\\\,\\n\\t\\tt template,\\n\\t\\tmatches \\n\\t\\t\\t/^\\\\$basename\\\\$/i, function() {\\n\\t\\t\\t\\treturn base;\\n\\t\\t\\t},\\n\\t\\t\\t/^\\\\$count:(\\\\d+)\\\\$/i, function(match) {\\n\\t\\t\\t\\treturn $tw.utils.pad(counter,match1);\\n\\t\\t\\t},\\n\\t\\t\\t/^\\\\$separator\\\\$/i, function() {\\n\\t\\t\\t\\treturn separator;\\n\\t\\t\\t},\\n\\t\\t\\t/^\\\\$count\\\\$/i, function() {\\n\\t\\t\\t\\treturn counter + \\\\\\;\\n\\t\\t\\t}\\n\\t\\t;\\n\\twhile(t.length){\\n\\t\\tvar matchString \\\\\\,\\n\\t\\t\\tfound false;\\n\\t\\t$tw.utils.each(matches, function(m) {\\n\\t\\t\\tvar match m0.exec(t);\\n\\t\\t\\tif(match) {\\n\\t\\t\\t\\tfound true;\\n\\t\\t\\t\\tmatchString m1.call(null,match);\\n\\t\\t\\t\\tt t.substr(match0.length);\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(found) {\\n\\t\\t\\tresult + matchString;\\n\\t\\t} else {\\n\\t\\t\\tresult + t.charAt(0);\\n\\t\\t\\tt t.substr(1);\\n\\t\\t}\\n\\t}\\n\\tresult result.replace(/\\\\\\\\(.)/g,\\\$1\\\);\\n\\treturn result;\\n};\\n\\nexports.formatDateString function(date,template) {\\n\\tvar result \\\\\\,\\n\\t\\tt template,\\n\\t\\tmatches \\n\\t\\t\\t/^TIMESTAMP/, function() {\\n\\t\\t\\t\\treturn date.getTime();\\n\\t\\t\\t},\\n\\t\\t\\t/^0hh12/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad($tw.utils.getHours12(date));\\n\\t\\t\\t},\\n\\t\\t\\t/^wYYYY/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date),4);\\n\\t\\t\\t},\\n\\t\\t\\t/^hh12/, function() {\\n\\t\\t\\t\\treturn $tw.utils.getHours12(date);\\n\\t\\t\\t},\\n\\t\\t\\t/^DDth/, function() {\\n\\t\\t\\t\\treturn date.getDate() + $tw.utils.getDaySuffix(date);\\n\\t\\t\\t},\\n\\t\\t\\t/^YYYY/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getFullYear(),4);\\n\\t\\t\\t},\\n\\t\\t\\t/^aYYYY/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(Math.abs(date.getFullYear()),4);\\n\\t\\t\\t},\\n\\t\\t\\t/^\\\\{era:(^,\\\\|}*)\\\\|(^}\\\\|*)\\\\|(^}*)\\\\}/, function(match) {\\n\\t\\t\\t\\tvar year date.getFullYear();\\n\\t\\t\\t\\treturn year 0 ? match2 : (year \u003C 0 ? match1 : match3);\\n\\t\\t\\t},\\n\\t\\t\\t/^0hh/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getHours());\\n\\t\\t\\t},\\n\\t\\t\\t/^0mm/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getMinutes());\\n\\t\\t\\t},\\n\\t\\t\\t/^0ss/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getSeconds());\\n\\t\\t\\t},\\n\\t\\t\\t/^0XXX/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getMilliseconds(),3);\\n\\t\\t\\t},\\n\\t\\t\\t/^0DD/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getDate());\\n\\t\\t\\t},\\n\\t\\t\\t/^0MM/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getMonth()+1);\\n\\t\\t\\t},\\n\\t\\t\\t/^0WW/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad($tw.utils.getWeek(date));\\n\\t\\t\\t},\\n\\t\\t\\t/^0ddddd/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24),3);\\n\\t\\t\\t},\\n\\t\\t\\t/^ddddd/, function() {\\n\\t\\t\\t\\treturn Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);\\n\\t\\t\\t},\\n\\t\\t\\t/^dddd/, function() {\\n\\t\\t\\t\\treturn 7,1,2,3,4,5,6date.getDay();\\n\\t\\t\\t},\\n\\t\\t\\t/^ddd/, function() {\\n\\t\\t\\t\\treturn $tw.language.getString(\\\Date/Short/Day/\\\ + date.getDay());\\n\\t\\t\\t},\\n\\t\\t\\t/^mmm/, function() {\\n\\t\\t\\t\\treturn $tw.language.getString(\\\Date/Short/Month/\\\ + (date.getMonth() + 1));\\n\\t\\t\\t},\\n\\t\\t\\t/^DDD/, function() {\\n\\t\\t\\t\\treturn $tw.language.getString(\\\Date/Long/Day/\\\ + date.getDay());\\n\\t\\t\\t},\\n\\t\\t\\t/^MMM/, function() {\\n\\t\\t\\t\\treturn $tw.language.getString(\\\Date/Long/Month/\\\ + (date.getMonth() + 1));\\n\\t\\t\\t},\\n\\t\\t\\t/^TZD/, function() {\\n\\t\\t\\t\\tvar tz date.getTimezoneOffset(),\\n\\t\\t\\t\\tatz Math.abs(tz);\\n\\t\\t\\t\\treturn (tz \u003C 0 ? + : -) + $tw.utils.pad(Math.floor(atz / 60)) + : + $tw.utils.pad(atz % 60);\\n\\t\\t\\t},\\n\\t\\t\\t/^wYY/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\\n\\t\\t\\t},\\n\\t\\t\\t/^apm/, function() {\\n\\t\\t\\t\\treturn $tw.utils.getAmPm(date).toLowerCase();\\n\\t\\t\\t},\\n\\t\\t\\t/^hh/, function() {\\n\\t\\t\\t\\treturn date.getHours();\\n\\t\\t\\t},\\n\\t\\t\\t/^mm/, function() {\\n\\t\\t\\t\\treturn date.getMinutes();\\n\\t\\t\\t},\\n\\t\\t\\t/^ss/, function() {\\n\\t\\t\\t\\treturn date.getSeconds();\\n\\t\\t\\t},\\n\\t\\t\\t/^XXX/, function() {\\n\\t\\t\\t\\treturn date.getMilliseconds();\\n\\t\\t\\t},\\n\\t\\t\\t/^APM/, function() {\\n\\t\\t\\t\\treturn $tw.utils.getAmPm(date).toUpperCase();\\n\\t\\t\\t},\\n\\t\\t\\t/^DD/, function() {\\n\\t\\t\\t\\treturn date.getDate();\\n\\t\\t\\t},\\n\\t\\t\\t/^MM/, function() {\\n\\t\\t\\t\\treturn date.getMonth() + 1;\\n\\t\\t\\t},\\n\\t\\t\\t/^WW/, function() {\\n\\t\\t\\t\\treturn $tw.utils.getWeek(date);\\n\\t\\t\\t},\\n\\t\\t\\t/^YY/, function() {\\n\\t\\t\\t\\treturn $tw.utils.pad(date.getFullYear() - 2000);\\n\\t\\t\\t}\\n\\t\\t;\\n\\t// If the user wants everything in UTC, shift the datestamp\\n\\t// Optimize for format string that essentially means\\n\\t// return raw UTC (tiddlywiki style) date string.\\n\\tif(t.indexOf(\\\UTC\\\) 0 ) {\\n\\t\\tif(t \\\UTCYYYY0MM0DD0hh0mm0ssXXX\\\)\\n\\t\\t\\treturn $tw.utils.stringifyDate(date || new Date());\\n\\t\\tvar offset date.getTimezoneOffset() ; // in minutes\\n\\t\\tdate new Date(date.getTime()+offset*60*1000) ;\\n\\t\\tt t.substr(5) ;\\n\\t}\\n\\twhile(t.length){\\n\\t\\tvar matchString \\\\\\;\\n\\t\\t$tw.utils.each(matches, function(m) {\\n\\t\\t\\tvar match m0.exec(t);\\n\\t\\t\\tif(match) {\\n\\t\\t\\t\\tmatchString m1.call(null,match);\\n\\t\\t\\t\\tt t.substr(match0.length);\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(matchString) {\\n\\t\\t\\tresult + matchString;\\n\\t\\t} else {\\n\\t\\t\\tresult + t.charAt(0);\\n\\t\\t\\tt t.substr(1);\\n\\t\\t}\\n\\t}\\n\\tresult result.replace(/\\\\\\\\(.)/g,\\\$1\\\);\\n\\treturn result;\\n};\\n\\nexports.getAmPm function(date) {\\n\\treturn $tw.language.getString(\\\Date/Period/\\\ + (date.getHours() > 12 ? \\\pm\\\ : \\\am\\\));\\n};\\n\\nexports.getDaySuffix function(date) {\\n\\treturn $tw.language.getString(\\\Date/DaySuffix/\\\ + date.getDate());\\n};\\n\\nexports.getWeek function(date) {\\n\\tvar dt new Date(date.getTime());\\n\\tvar d dt.getDay();\\n\\tif(d 0) {\\n\\t\\td 7; // JavaScript Sun0, ISO Sun7\\n\\t}\\n\\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\\n\\tvar x new Date(dt.getFullYear(),0,1);\\n\\tvar n Math.floor((dt.getTime() - x.getTime()) / 86400000);\\n\\treturn Math.floor(n / 7) + 1;\\n};\\n\\nexports.getYearForWeekNo function(date) {\\n\\tvar dt new Date(date.getTime());\\n\\tvar d dt.getDay();\\n\\tif(d 0) {\\n\\t\\td 7; // JavaScript Sun0, ISO Sun7\\n\\t}\\n\\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\\n\\treturn dt.getFullYear();\\n};\\n\\nexports.getHours12 function(date) {\\n\\tvar h date.getHours();\\n\\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\\n};\\n\\n/*\\nConvert a date delta in milliseconds into a string representation of \\\23 seconds ago\\\, \\\27 minutes ago\\\ etc.\\n\\tdelta: delta in milliseconds\\nReturns an object with these members:\\n\\tdescription: string describing the delta period\\n\\tupdatePeriod: time in millisecond until the string will be inaccurate\\n*/\\nexports.getRelativeDate function(delta) {\\n\\tvar futurep false;\\n\\tif(delta \u003C 0) {\\n\\t\\tdelta -1 * delta;\\n\\t\\tfuturep true;\\n\\t}\\n\\tvar units \\n\\t\\t{name: \\\Years\\\, duration: 365 * 24 * 60 * 60 * 1000},\\n\\t\\t{name: \\\Months\\\, duration: (365/12) * 24 * 60 * 60 * 1000},\\n\\t\\t{name: \\\Days\\\, duration: 24 * 60 * 60 * 1000},\\n\\t\\t{name: \\\Hours\\\, duration: 60 * 60 * 1000},\\n\\t\\t{name: \\\Minutes\\\, duration: 60 * 1000},\\n\\t\\t{name: \\\Seconds\\\, duration: 1000}\\n\\t;\\n\\tfor(var t0; t\u003Cunits.length; t++) {\\n\\t\\tvar result Math.floor(delta / unitst.duration);\\n\\t\\tif(result > 2) {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tdelta: delta,\\n\\t\\t\\t\\tdescription: $tw.language.getString(\\n\\t\\t\\t\\t\\t\\\RelativeDate/\\\ + (futurep ? \\\Future\\\ : \\\Past\\\) + \\\/\\\ + unitst.name,\\n\\t\\t\\t\\t\\t{variables:\\n\\t\\t\\t\\t\\t\\t{period: result.toString()}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t),\\n\\t\\t\\t\\tupdatePeriod: unitst.duration\\n\\t\\t\\t};\\n\\t\\t}\\n\\t}\\n\\treturn {\\n\\t\\tdelta: delta,\\n\\t\\tdescription: $tw.language.getString(\\n\\t\\t\\t\\\RelativeDate/\\\ + (futurep ? \\\Future\\\ : \\\Past\\\) + \\\/Second\\\,\\n\\t\\t\\t{variables:\\n\\t\\t\\t\\t{period: \\\1\\\}\\n\\t\\t\\t}\\n\\t\\t),\\n\\t\\tupdatePeriod: 1000\\n\\t};\\n};\\n\\n// Convert & to \\\&\\\, \u003C to \\\<\\\, > to \\\>\\\, \\\ to \\\"\\\\\nexports.htmlEncode function(s) {\\n\\tif(s) {\\n\\t\\treturn s.toString().replace(/&/mg,\\\&\\\).replace(/\u003C/mg,\\\<\\\).replace(/>/mg,\\\>\\\).replace(/\\\\\\\/mg,\\\"\\\);\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\\n// Converts like htmlEncode, but forgets the double quote for brevity\\nexports.htmlTextEncode function(s) {\\n\\tif(s) {\\n\\t\\treturn s.toString().replace(/&/mg,\\\&\\\).replace(/\u003C/mg,\\\<\\\).replace(/>/mg,\\\>\\\);\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\\n// Converts all HTML entities to their character equivalents\\nexports.entityDecode function(s) {\\n\\tvar converter String.fromCodePoint || String.fromCharCode,\\n\\t\\te s.substr(1,s.length-2), // Strip the & and the ;\\n\\t\\tc;\\n\\tif(e.charAt(0) \\\#\\\) {\\n\\t\\tif(e.charAt(1) \\\x\\\ || e.charAt(1) \\\X\\\) {\\n\\t\\t\\tc parseInt(e.substr(2),16);\\n\\t\\t} else {\\n\\t\\t\\tc parseInt(e.substr(1),10);\\n\\t\\t}\\n\\t\\tif(isNaN(c)) {\\n\\t\\t\\treturn s;\\n\\t\\t} else {\\n\\t\\t\\treturn converter(c);\\n\\t\\t}\\n\\t} else {\\n\\t\\tc $tw.config.htmlEntitiese;\\n\\t\\tif(c) {\\n\\t\\t\\treturn converter(c);\\n\\t\\t} else {\\n\\t\\t\\treturn s; // Couldnt convert it as an entity, just return it raw\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.unescapeLineBreaks function(s) {\\n\\treturn s.replace(/\\\\\\\\n/mg,\\\\\\\n\\\).replace(/\\\\\\\\b/mg,\\\ \\\).replace(/\\\\\\\\s/mg,\\\\\\\\\\\\\\).replace(/\\\\r/mg,\\\\\\);\\n};\\n\\n/*\\n * Returns an escape sequence for given character. Uses \\\\x for characters \u003C\\n * 0xFF to save space, \\\\u for the rest.\\n *\\n * The code needs to be in sync with th code template in the compilation\\n * function for \\\action\\\ nodes.\\n */\\n// Copied from peg.js, thanks to David Majda\\nexports.escape function(ch) {\\n\\tvar charCode ch.charCodeAt(0);\\n\\tif(charCode \u003C 0xFF) {\\n\\t\\treturn \\\\\\\\x + $tw.utils.pad(charCode.toString(16).toUpperCase());\\n\\t} else {\\n\\t\\treturn \\\\\\\\u + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\\n\\t}\\n};\\n\\n// Turns a string into a legal JavaScript string\\n// Copied from peg.js, thanks to David Majda\\nexports.stringify function(s, rawUnicode) {\\n\\t/*\\n\\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\\n\\t* literal except for the closing quote character, backslash, carriage return,\\n\\t* line separator, paragraph separator, and line feed. Any character may\\n\\t* appear in the form of an escape sequence.\\n\\t*\\n\\t* For portability, we also escape all non-ASCII characters.\\n\\t*/\\n\\tvar regex rawUnicode ? /\\\\x00-\\\\x1f/g : /\\\\x00-\\\\x1f\\\\x80-\\\\uFFFF/g;\\n\\treturn (s || \\\\\\)\\n\\t\\t.replace(/\\\\\\\\/g, \\\\\\\\\\\\\\\\) // backslash\\n\\t\\t.replace(/\\\/g, \\\\\\\\\\\) // double quote character\\n\\t\\t.replace(//g, \\\\\\\\\\\\\\) // single quote character\\n\\t\\t.replace(/\\\\r/g, \\\\\\\\r) // carriage return\\n\\t\\t.replace(/\\\\n/g, \\\\\\\\n) // line feed\\n\\t\\t.replace(regex, exports.escape); // non-ASCII characters\\n};\\n\\n// Turns a string into a legal JSON string\\n// Derived from peg.js, thanks to David Majda\\nexports.jsonStringify function(s, rawUnicode) {\\n\\t// See http://www.json.org/\\n\\tvar regex rawUnicode ? /\\\\x00-\\\\x1f/g : /\\\\x00-\\\\x1f\\\\x80-\\\\uFFFF/g;\\n\\treturn (s || \\\\\\)\\n\\t\\t.replace(/\\\\\\\\/g, \\\\\\\\\\\\\\\\) // backslash\\n\\t\\t.replace(/\\\/g, \\\\\\\\\\\) // double quote character\\n\\t\\t.replace(/\\\\r/g, \\\\\\\\r) // carriage return\\n\\t\\t.replace(/\\\\n/g, \\\\\\\\n) // line feed\\n\\t\\t.replace(/\\\\x08/g, \\\\\\\\b) // backspace\\n\\t\\t.replace(/\\\\x0c/g, \\\\\\\\f) // formfeed\\n\\t\\t.replace(/\\\\t/g, \\\\\\\\t) // tab\\n\\t\\t.replace(regex,function(s) {\\n\\t\\t\\treturn \\\\\\\\u + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\\n\\t\\t}); // non-ASCII characters\\n};\\n\\n/*\\nEscape the RegExp special characters with a preceding backslash\\n*/\\nexports.escapeRegExp function(s) {\\n return s.replace(/\\\\-\\\\/\\\\\\\\\\\\^\\\\$\\\\*\\\\+\\\\?\\\\.\\\\(\\\\)\\\\|\\\\\\\\\\\\{\\\\}/g, \\\\\\\\$&);\\n};\\n\\n/*\\nExtended version of encodeURIComponent that encodes additional characters including\\nthose that are illegal within filepaths on various platforms including Windows\\n*/\\nexports.encodeURIComponentExtended function(s) {\\n\\treturn encodeURIComponent(s).replace(/!()*/g,function(c) {\\n\\t\\treturn \\\%\\\ + c.charCodeAt(0).toString(16).toUpperCase();\\n\\t});\\n};\\n\\n// Checks whether a link target is external, i.e. not a tiddler title\\nexports.isLinkExternal function(to) {\\n\\tvar externalRegExp /^(?:file|http|https|mailto|ftp|irc|news|obsidian|data|skype):^\\\\s\u003C>{}\\\\\\\\`|\\\\\\\\\\\^+(?:\\\\/|\\\\b)/i;\\n\\treturn externalRegExp.test(to);\\n};\\n\\nexports.nextTick function(fn) {\\n/*global window: false */\\n\\tif(typeof process \\\undefined\\\) {\\n\\t\\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\\n\\t\\twindow.setTimeout(fn,0);\\n\\t} else {\\n\\t\\tprocess.nextTick(fn);\\n\\t}\\n};\\n\\n/*\\nConvert a hyphenated CSS property name into a camel case one\\n*/\\nexports.unHyphenateCss function(propName) {\\n\\treturn propName.replace(/-(a-z)/gi, function(match0,match1) {\\n\\t\\treturn match1.toUpperCase();\\n\\t});\\n};\\n\\n/*\\nConvert a camelcase CSS property name into a dashed one (\\\backgroundColor\\\ --> \\\background-color\\\)\\n*/\\nexports.hyphenateCss function(propName) {\\n\\treturn propName.replace(/(A-Z)/g, function(match0,match1) {\\n\\t\\treturn \\\-\\\ + match1.toLowerCase();\\n\\t});\\n};\\n\\n/*\\nParse a text reference of one of these forms:\\n* title\\n* !!field\\n* title!!field\\n* title##index\\n* etc\\nReturns an object with the following fields, all optional:\\n* title: tiddler title\\n* field: tiddler field name\\n* index: JSON property index\\n*/\\nexports.parseTextReference function(textRef) {\\n\\t// Separate out the title, field name and/or JSON indices\\n\\tvar reTextRef /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\\n\\t\\tmatch reTextRef.exec(textRef),\\n\\t\\tresult {};\\n\\tif(match && reTextRef.lastIndex textRef.length) {\\n\\t\\t// Return the parts\\n\\t\\tif(match1) {\\n\\t\\t\\tresult.title match1;\\n\\t\\t}\\n\\t\\tif(match2) {\\n\\t\\t\\tresult.field match2;\\n\\t\\t}\\n\\t\\tif(match3) {\\n\\t\\t\\tresult.title match3;\\n\\t\\t}\\n\\t\\tif(match4) {\\n\\t\\t\\tresult.index match4;\\n\\t\\t}\\n\\t\\tif(match5) {\\n\\t\\t\\tresult.title match5;\\n\\t\\t}\\n\\t} else {\\n\\t\\t// If we couldnt parse it\\n\\t\\tresult.title textRef\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nChecks whether a string is a valid fieldname\\n*/\\nexports.isValidFieldName function(name) {\\n\\tif(!name || typeof name ! \\\string\\\) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Since v5.2.x, there are no restrictions on characters in field names\\n\\treturn name;\\n};\\n\\n/*\\nExtract the version number from the meta tag or from the boot file\\n*/\\n\\n// Browser version\\nexports.extractVersionInfo function() {\\n\\tif($tw.packageInfo) {\\n\\t\\treturn $tw.packageInfo.version;\\n\\t} else {\\n\\t\\tvar metatags document.getElementsByTagName(\\\meta\\\);\\n\\t\\tfor(var t0; t\u003Cmetatags.length; t++) {\\n\\t\\t\\tvar m metatagst;\\n\\t\\t\\tif(m.name \\\tiddlywiki-version\\\) {\\n\\t\\t\\t\\treturn m.content;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nGet the animation duration in ms\\n*/\\nexports.getAnimationDuration function() {\\n\\treturn parseInt($tw.wiki.getTiddlerText(\\\$:/config/AnimationDuration\\\,\\\400\\\),10) || 0;\\n};\\n\\n/*\\nHash a string to a number\\nDerived from http://stackoverflow.com/a/15710692\\n*/\\nexports.hashString function(str) {\\n\\treturn str.split(\\\\\\).reduce(function(a,b) {\\n\\t\\ta ((a \u003C\u003C 5) - a) + b.charCodeAt(0);\\n\\t\\treturn a & a;\\n\\t},0);\\n};\\n\\n/*\\nCryptographic hash function as used by sha256 filter operator\\noptions.length .. number of characters returned defaults to 64\\n*/\\nexports.sha256 function(str, options) {\\n\\toptions options || {}\\n\\treturn $tw.sjcl.codec.hex.fromBits($tw.sjcl.hash.sha256.hash(str)).substr(0,options.length || 64);\\n}\\n\\n/*\\nBase64 utility functions that work in either browser or Node.js\\n*/\\nif(typeof window ! undefined) {\\n\\texports.btoa function(binstr) { return window.btoa(binstr); }\\n\\texports.atob function(b64) { return window.atob(b64); }\\n} else {\\n\\texports.btoa function(binstr) {\\n\\t\\treturn Buffer.from(binstr, binary).toString(base64);\\n\\t}\\n\\texports.atob function(b64) {\\n\\t\\treturn Buffer.from(b64, base64).toString(binary);\\n\\t}\\n}\\n\\n/*\\nDecode a base64 string\\n*/\\nexports.base64Decode function(string64,binary,urlsafe) {\\n\\tvar encoded urlsafe ? string64.replace(/_/g,/).replace(/-/g,+) : string64;\\n\\tif(binary) return exports.atob(encoded)\\n\\telse return base64utf8.base64.decode.call(base64utf8,encoded);\\n};\\n\\n/*\\nEncode a string to base64\\n*/\\nexports.base64Encode function(string64,binary,urlsafe) {\\n\\tvar encoded;\\n\\tif(binary) encoded exports.btoa(string64);\\n\\telse encoded base64utf8.base64.encode.call(base64utf8,string64);\\n\\tif(urlsafe) {\\n\\t\\tencoded encoded.replace(/\\\\+/g,-).replace(/\\\\//g,_);\\n\\t}\\n\\treturn encoded;\\n};\\n\\n/*\\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\\n*/\\nexports.makeTiddlerDictionary function(data) {\\n\\tvar output ;\\n\\tfor(var name in data) {\\n\\t\\toutput.push(name + \\\: \\\ + dataname);\\n\\t}\\n\\treturn output.join(\\\\\\\n\\\);\\n};\\n\\n/*\\nHigh resolution microsecond timer for profiling\\n*/\\nexports.timer function(base) {\\n\\tvar m;\\n\\tif($tw.node) {\\n\\t\\tvar r process.hrtime();\\n\\t\\tm r0 * 1e3 + (r1 / 1e6);\\n\\t} else if(window.performance) {\\n\\t\\tm performance.now();\\n\\t} else {\\n\\t\\tm Date.now();\\n\\t}\\n\\tif(typeof base ! \\\undefined\\\) {\\n\\t\\tm m - base;\\n\\t}\\n\\treturn m;\\n};\\n\\n/*\\nConvert text and content type to a data URI\\n*/\\nexports.makeDataUri function(text,type,_canonical_uri) {\\n\\ttype type || \\\text/vnd.tiddlywiki\\\;\\n\\tvar typeInfo $tw.config.contentTypeInfotype || $tw.config.contentTypeInfo\\\text/plain\\\,\\n\\t\\tisBase64 typeInfo.encoding \\\base64\\\,\\n\\t\\tparts ;\\n\\tif(_canonical_uri) {\\n\\t\\tparts.push(_canonical_uri);\\n\\t} else {\\n\\t\\tparts.push(\\\data:\\\);\\n\\t\\tparts.push(type);\\n\\t\\tparts.push(isBase64 ? \\\;base64\\\ : \\\\\\);\\n\\t\\tparts.push(\\\,\\\);\\n\\t\\tparts.push(isBase64 ? text : encodeURIComponent(text));\\n\\t}\\n\\treturn parts.join(\\\\\\);\\n};\\n\\n/*\\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\\n\\n$tw.utils.tagToCssSelector(\\\$:/tags/Stylesheet\\\) --> tc-tagged-\\\\%24\\\\%3A\\\\%2Ftags\\\\%2FStylesheet\\n*/\\nexports.tagToCssSelector function(tagName) {\\n\\treturn \\\tc-tagged-\\\ + encodeURIComponent(tagName).replace(/!\\\#$%&()*+,\\\\-./:;\u003C>?@\\\\\\\\\\\\^`{\\\\|}~,/mg,function(c) {\\n\\t\\treturn \\\\\\\\\\\\\\ + c;\\n\\t});\\n};\\n\\n/*\\nIE does not have sign function\\n*/\\nexports.sign Math.sign || function(x) {\\n\\tx +x; // convert to a number\\n\\tif(x 0 || isNaN(x)) {\\n\\t\\treturn x;\\n\\t}\\n\\treturn x > 0 ? 1 : -1;\\n};\\n\\n/*\\nIE does not have an endsWith function\\n*/\\nexports.strEndsWith function(str,ending,position) {\\n\\tif(str.endsWith) {\\n\\t\\treturn str.endsWith(ending,position);\\n\\t} else {\\n\\t\\tif(typeof position ! number || !isFinite(position) || Math.floor(position) ! position || position > str.length) {\\n\\t\\t\\tposition str.length;\\n\\t\\t}\\n\\t\\tposition - ending.length;\\n\\t\\tvar lastIndex str.indexOf(ending, position);\\n\\t\\treturn lastIndex ! -1 && lastIndex position;\\n\\t}\\n};\\n\\n/*\\nReturn system information useful for debugging\\n*/\\nexports.getSystemInfo function(str,ending,position) {\\n\\tvar results ,\\n\\t\\tsave function(desc,value) {\\n\\t\\t\\tresults.push(desc + \\\: \\\ + value);\\n\\t\\t};\\n\\tif($tw.browser) {\\n\\t\\tsave(\\\User Agent\\\,navigator.userAgent);\\n\\t\\tsave(\\\Online Status\\\,window.navigator.onLine);\\n\\t}\\n\\tif($tw.node) {\\n\\t\\tsave(\\\Node Version\\\,process.version);\\n\\t}\\n\\treturn results.join(\\\\\\\n\\\);\\n};\\n\\nexports.parseNumber function(str) {\\n\\treturn parseFloat(str) || 0;\\n};\\n\\nexports.parseInt function(str) {\\n\\treturn parseInt(str,10) || 0;\\n};\\n\\nexports.stringifyNumber function(num) {\\n\\treturn num + \\\\\\;\\n};\\n\\nexports.makeCompareFunction function(type,options) {\\n\\toptions options || {};\\n\\t// set isCaseSensitive to true if not defined in options\\n\\tvar isCaseSensitive (options.isCaseSensitive false) ? false : true,\\n\\t\\tgt options.invert ? -1 : +1,\\n\\t\\tlt options.invert ? +1 : -1,\\n\\t\\tcompare function(a,b) {\\n\\t\\t\\tif(a > b) {\\n\\t\\t\\t\\treturn gt ;\\n\\t\\t\\t} else if(a \u003C b) {\\n\\t\\t\\t\\treturn lt;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn 0;\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\ttypes {\\n\\t\\t\\t\\\number\\\: function(a,b) {\\n\\t\\t\\t\\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\\n\\t\\t\\t},\\n\\t\\t\\t\\\integer\\\: function(a,b) {\\n\\t\\t\\t\\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\\n\\t\\t\\t},\\n\\t\\t\\t\\\string\\\: function(a,b) {\\n\\t\\t\\t\\tif(!isCaseSensitive) {\\n\\t\\t\\t\\t\\ta a.toLowerCase();\\n\\t\\t\\t\\t\\tb b.toLowerCase();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn compare(\\\\\\ + a,\\\\\\ + b);\\n\\t\\t\\t},\\n\\t\\t\\t\\\date\\\: function(a,b) {\\n\\t\\t\\t\\tvar dateA $tw.utils.parseDate(a),\\n\\t\\t\\t\\t\\tdateB $tw.utils.parseDate(b);\\n\\t\\t\\t\\tif(!isFinite(dateA)) {\\n\\t\\t\\t\\t\\tdateA new Date(0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(!isFinite(dateB)) {\\n\\t\\t\\t\\t\\tdateB new Date(0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn compare(dateA,dateB);\\n\\t\\t\\t},\\n\\t\\t\\t\\\version\\\: function(a,b) {\\n\\t\\t\\t\\treturn $tw.utils.compareVersions(a,b);\\n\\t\\t\\t},\\n\\t\\t\\t\\\alphanumeric\\\: function(a,b) {\\n\\t\\t\\t\\tif(!isCaseSensitive) {\\n\\t\\t\\t\\t\\ta a.toLowerCase();\\n\\t\\t\\t\\t\\tb b.toLowerCase();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn options.invert ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \\\base\\\}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \\\base\\\});\\n\\t\\t\\t}\\n\\t\\t};\\n\\treturn (typestype || typesoptions.defaultType || types.number);\\n};\\n\,\type\:\application/javascript\,\module-type\:\utils\},\$:/core/modules/widgets/action-confirm.js\:{\title\:\$:/core/modules/widgets/action-confirm.js\,\text\:\/*\\\\\\n\\ntitle: $:/core/modules/widgets/action-confirm.js\\ntype: application/javascript\\nmodule-type: widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ConfirmWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nConfirmWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nConfirmWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.parentDomNode parent;\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nConfirmWidget.prototype.execute function() {\\n\\tthis.message this.getAttribute(\\\$message\\\,$tw.language.getString(\\\ConfirmAction\\\));\\n\\tthis.prompt (this.getAttribute(\\\$prompt\\\,\\\yes\\\) \\\no\\\ ? false : true);\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nConfirmWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$message\\\ || changedAttributes\\\$prompt\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nConfirmWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar invokeActions true,\\n\\t\\thandled true,\\n\\t \\twin event && event.event && event.event.view ? event.event.view : window;\\n\\tif(this.prompt) {\\n\\t\\tinvokeActions win.confirm(this.message);\\n\\t}\\n\\tif(invokeActions) {\\n\\t\\thandled this.invokeActions(triggeringWidget,event);\\n\\t}\\n\\treturn handled;\\n};\\n\\nConfirmWidget.prototype.allowActionPropagation function() {\\n\\treturn false;\\n};\\n\\nexports\\\action-confirm\\\ ConfirmWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-createtiddler.js\:{\title\:\$:/core/modules/widgets/action-createtiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to create a new tiddler with a unique name and specified fields.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar CreateTiddlerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCreateTiddlerWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCreateTiddlerWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Render children\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCreateTiddlerWidget.prototype.execute function() {\\n\\tthis.actionBaseTitle this.getAttribute(\\\$basetitle\\\);\\n\\tthis.hasBase !!this.actionBaseTitle;\\n\\tthis.actionSaveTitle this.getAttribute(\\\$savetitle\\\);\\n\\tthis.actionSaveDraftTitle this.getAttribute(\\\$savedrafttitle\\\);\\n\\tthis.actionTimestamp this.getAttribute(\\\$timestamp\\\,\\\yes\\\) \\\yes\\\;\\n\\t//Following params are new since 5.1.22\\n\\tthis.actionTemplate this.getAttribute(\\\$template\\\);\\n\\tthis.useTemplate !!this.actionTemplate;\\n\\tthis.actionOverwrite this.getAttribute(\\\$overwrite\\\,\\\no\\\);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nCreateTiddlerWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nCreateTiddlerWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar title this.wiki.getTiddlerText(\\\$:/language/DefaultNewTiddlerTitle\\\), // Get the initial new-tiddler title\\n\\t\\tfields {},\\n\\t\\tcreationFields,\\n\\t\\tmodificationFields;\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\tfieldsname attribute;\\n\\t\\t}\\n\\t});\\n\\tif(this.actionTimestamp) {\\n\\t\\tcreationFields this.wiki.getCreationFields();\\n\\t\\tmodificationFields this.wiki.getModificationFields();\\n\\t}\\n\\tif(this.hasBase && this.actionOverwrite \\\no\\\) {\\n\\t\\ttitle this.wiki.generateNewTitle(this.actionBaseTitle);\\n\\t} else if (this.hasBase && this.actionOverwrite \\\yes\\\) {\\n\\t\\ttitle this.actionBaseTitle\\n\\t}\\n\\t// NO $basetitle BUT $template parameter is available\\n\\t// the title MUST be unique, otherwise the template would be overwritten\\n\\tif (!this.hasBase && this.useTemplate) {\\n\\t\\ttitle this.wiki.generateNewTitle(this.actionTemplate);\\n\\t} else if (!this.hasBase && !this.useTemplate) {\\n\\t\\t// If no $basetitle and no $template then use initial title\\n\\t\\ttitle this.wiki.generateNewTitle(title);\\n\\t}\\n\\tvar templateTiddler this.wiki.getTiddler(this.actionTemplate) || {};\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\\n\\tvar draftTitle this.wiki.generateDraftTitle(title);\\n\\tif(this.actionSaveTitle) {\\n\\t\\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\\\currentTiddler\\\));\\n\\t}\\n\\tif(this.actionSaveDraftTitle) {\\n\\t\\tthis.wiki.setTextReference(this.actionSaveDraftTitle,draftTitle,this.getVariable(\\\currentTiddler\\\));\\n\\t}\\n\\tthis.setVariable(\\\createTiddler-title\\\,title);\\n\\tthis.setVariable(\\\createTiddler-draftTitle\\\,draftTitle);\\n\\tthis.refreshChildren();\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-createtiddler\\\ CreateTiddlerWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-deletefield.js\:{\title\:\$:/core/modules/widgets/action-deletefield.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-deletefield.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to delete fields of a tiddler.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DeleteFieldWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDeleteFieldWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDeleteFieldWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDeleteFieldWidget.prototype.execute function() {\\n\\tthis.actionTiddler this.getAttribute(\\\$tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.actionField this.getAttribute(\\\$field\\\,null);\\n\\tthis.actionTimestamp this.getAttribute(\\\$timestamp\\\,\\\yes\\\) \\\yes\\\;\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nDeleteFieldWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$tiddler\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nDeleteFieldWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar self this,\\n\\t\\ttiddler this.wiki.getTiddler(self.actionTiddler),\\n\\t\\tremoveFields {},\\n\\t\\thasChanged false;\\n\\tif((this.actionField ! null) && tiddler) {\\n\\t\\tremoveFieldsthis.actionField undefined;\\n\\t\\tif(this.actionField in tiddler.fields) {\\n\\t\\t\\thasChanged true;\\n\\t\\t}\\n\\t}\\n\\tif(tiddler) {\\n\\t\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\t\\tif(name.charAt(0) ! \\\$\\\ && name ! \\\title\\\) {\\n\\t\\t\\t\\tremoveFieldsname undefined;\\n\\t\\t\\t\\tif(name in tiddler.fields) {\\n\\t\\t\\t\\t\\thasChanged true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(hasChanged) {\\n\\t\\t\\tvar creationFields this.actionTimestamp ? this.wiki.getCreationFields() : {};\\n\\t\\t\\tvar modificationFields this.actionTimestamp ? this.wiki.getModificationFields() : {};\\n\\t\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(creationFields,tiddler,removeFields,modificationFields));\\n\\t\\t}\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-deletefield\\\ DeleteFieldWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-deletetiddler.js\:{\title\:\$:/core/modules/widgets/action-deletetiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to delete a tiddler.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DeleteTiddlerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDeleteTiddlerWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDeleteTiddlerWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDeleteTiddlerWidget.prototype.execute function() {\\n\\tthis.actionFilter this.getAttribute(\\\$filter\\\);\\n\\tthis.actionTiddler this.getAttribute(\\\$tiddler\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nDeleteTiddlerWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$filter\\\ || changedAttributes\\\$tiddler\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nDeleteTiddlerWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar tiddlers ;\\n\\tif(this.actionFilter) {\\n\\t\\ttiddlers this.wiki.filterTiddlers(this.actionFilter,this);\\n\\t}\\n\\tif(this.actionTiddler) {\\n\\t\\ttiddlers.push(this.actionTiddler);\\n\\t}\\n\\tfor(var t0; t\u003Ctiddlers.length; t++) {\\n\\t\\tthis.wiki.deleteTiddler(tiddlerst);\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-deletetiddler\\\ DeleteTiddlerWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-listops.js\:{\title\:\$:/core/modules/widgets/action-listops.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-listops.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to apply list operations to any tiddler field (defaults to the list field of the current tiddler)\\n\\n\\\\*/\\n\\\use strict\\\;\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\nvar ActionListopsWidget function(parseTreeNode, options) {\\n\\tthis.initialise(parseTreeNode, options);\\n};\\n/**\\n * Inherit from the base widget class\\n */\\nActionListopsWidget.prototype new Widget();\\n/**\\n * Render this widget into the DOM\\n */\\nActionListopsWidget.prototype.render function(parent, nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n/**\\n * Compute the internal state of the widget\\n */\\nActionListopsWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.target this.getAttribute(\\\$tiddler\\\, this.getVariable(\\n\\t\\t\\\currentTiddler\\\));\\n\\tthis.filter this.getAttribute(\\\$filter\\\);\\n\\tthis.subfilter this.getAttribute(\\\$subfilter\\\);\\n\\tthis.listField this.getAttribute(\\\$field\\\, \\\list\\\);\\n\\tthis.listIndex this.getAttribute(\\\$index\\\);\\n\\tthis.filtertags this.getAttribute(\\\$tags\\\);\\n};\\n/**\\n * \\tRefresh the widget by ensuring our attributes are up to date\\n */\\nActionListopsWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n/**\\n * \\tInvoke the action associated with this widget\\n */\\nActionListopsWidget.prototype.invokeAction function(triggeringWidget,\\n\\tevent) {\\n\\t//Apply the specified filters to the lists\\n\\tvar field this.listField,\\n\\t\\tindex,\\n\\t\\tlist this.listField;\\n\\tif(this.listIndex) {\\n\\t\\tfield undefined;\\n\\t\\tindex this.listIndex;\\n\\t\\tlist this.listIndex;\\n\\t}\\n\\tif(this.filter) {\\n\\t\\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\\n\\t\\t\\tthis.wiki\\n\\t\\t\\t.filterTiddlers(this.filter, this)));\\n\\t}\\n\\tif(this.subfilter) {\\n\\t\\tvar inputList this.wiki.getTiddlerList(this.target,field,index),\\n\\t\\t\\tsubfilter \\\all \\\ + this.subfilter;\\n\\t\\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter,this,this.wiki.makeTiddlerIterator(inputList))));\\n\\t}\\n\\tif(this.filtertags) {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.target),\\n\\t\\t\\toldtags tiddler ? (tiddler.fields.tags || ).slice(0) : ,\\n\\t\\t\\ttagfilter $tw.utils.stringifyList(oldtags) + \\\ \\\ + this.filtertags,\\n\\t\\t\\tnewtags this.wiki.filterTiddlers(tagfilter,this);\\n\\t\\tif($tw.utils.stringifyList(oldtags.sort()) ! $tw.utils.stringifyList(newtags.sort())) {\\n\\t\\t\\tthis.wiki.setText(this.target,\\\tags\\\,undefined,$tw.utils.stringifyList(newtags));\\n\\t\\t}\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-listops\\\ ActionListopsWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-log.js\:{\title\:\$:/core/modules/widgets/action-log.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-log.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to log debug messages\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar LogWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nLogWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nLogWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\nLogWidget.prototype.execute function(){\\n\\tthis.message this.getAttribute(\\\$$message\\\,\\\debug\\\);\\n\\tthis.logAll this.getAttribute(\\\$$all\\\,\\\no\\\) \\\yes\\\ ? true : false;\\n\\tthis.filter this.getAttribute(\\\$$filter\\\);\\n}\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nLogWidget.prototype.refresh function(changedTiddlers) {\\n\\tthis.refreshSelf();\\n\\treturn true;\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nLogWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tthis.log();\\n\\treturn true; // Action was invoked\\n};\\n\\nLogWidget.prototype.log function() {\\n\\tvar data {},\\n\\t\\tdataCount,\\n\\t\\tallVars {},\\n\\t\\tfilteredVars;\\n\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.substring(0,2) ! \\\$$\\\) {\\n\\t\\t\\tdataname attribute;\\n\\t\\t}\\n\\t});\\n\\n\\tfor(var v in this.variables) {\\n\\t\\tvar variable this.parentWidget && this.parentWidget.variablesv;\\n\\t\\tif(variable && variable.isFunctionDefinition) {\\n\\t\\t\\tallVarsv variable.value;\\n\\t\\t} else {\\n\\t\\t\\tallVarsv this.getVariable(v,{defaultValue:\\\\\\});\\n\\t\\t}\\n\\t}\\n\\tif(this.filter) {\\n\\t\\tfilteredVars this.wiki.compileFilter(this.filter).call(this.wiki,this.wiki.makeTiddlerIterator(allVars));\\n\\t\\t$tw.utils.each(filteredVars,function(name) {\\n\\t\\t\\tdataname allVarsname;\\n\\t\\t});\\n\\t}\\n\\tdataCount $tw.utils.count(data);\\n\\n\\tconsole.group(this.message);\\n\\tif(dataCount > 0) {\\n\\t\\t$tw.utils.logTable(data);\\n\\t}\\n\\tif(this.logAll || !dataCount) {\\n\\t\\tconsole.groupCollapsed(\\\All variables\\\);\\n\\t\\t$tw.utils.logTable(allVars);\\n\\t\\tconsole.groupEnd();\\n\\t}\\n\\tconsole.groupEnd();\\n}\\n\\nexports\\\action-log\\\ LogWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-navigate.js\:{\title\:\$:/core/modules/widgets/action-navigate.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-navigate.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to navigate to a tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar NavigateWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nNavigateWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nNavigateWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nNavigateWidget.prototype.execute function() {\\n\\tthis.actionTo this.getAttribute(\\\$to\\\);\\n\\tthis.actionScroll this.getAttribute(\\\$scroll\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nNavigateWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$to\\\ || changedAttributes\\\$scroll\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nNavigateWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tevent event || {};\\n\\tvar bounds triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\\n\\t\\tsuppressNavigation event.metaKey || event.ctrlKey || (event.button 1);\\n\\tif(this.actionScroll \\\yes\\\) {\\n\\t\\tsuppressNavigation false;\\n\\t} else if(this.actionScroll \\\no\\\) {\\n\\t\\tsuppressNavigation true;\\n\\t}\\n\\tthis.dispatchEvent({\\n\\t\\ttype: \\\tm-navigate\\\,\\n\\t\\tnavigateTo: this.actionTo undefined ? this.getVariable(\\\currentTiddler\\\) : this.actionTo,\\n\\t\\tnavigateFromTitle: this.getVariable(\\\storyTiddler\\\),\\n\\t\\tnavigateFromNode: triggeringWidget,\\n\\t\\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\\n\\t\\t},\\n\\t\\tnavigateFromClientTop: bounds && bounds.top,\\n\\t\\tnavigateFromClientLeft: bounds && bounds.left,\\n\\t\\tnavigateFromClientWidth: bounds && bounds.width,\\n\\t\\tnavigateFromClientRight: bounds && bounds.right,\\n\\t\\tnavigateFromClientBottom: bounds && bounds.bottom,\\n\\t\\tnavigateFromClientHeight: bounds && bounds.height,\\n\\t\\tnavigateSuppressNavigation: suppressNavigation,\\n\\t\\tmetaKey: event.metaKey,\\n\\t\\tctrlKey: event.ctrlKey,\\n\\t\\taltKey: event.altKey,\\n\\t\\tshiftKey: event.shiftKey,\\n\\t\\tevent: event\\n\\t});\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-navigate\\\ NavigateWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-popup.js\:{\title\:\$:/core/modules/widgets/action-popup.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-popup.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to trigger a popup.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar Popup require(\\\$:/core/modules/utils/dom/popup.js\\\);\\n\\nvar ActionPopupWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nActionPopupWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nActionPopupWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nActionPopupWidget.prototype.execute function() {\\n\\tthis.actionState this.getAttribute(\\\$state\\\);\\n\\tthis.actionCoords this.getAttribute(\\\$coords\\\);\\n\\tthis.floating this.getAttribute(\\\$floating\\\,\\\no\\\) \\\yes\\\;\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nActionPopupWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$state\\\ || changedAttributes\\\$coords\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nActionPopupWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\t// Trigger the popup\\n\\tvar coordinates Popup.parseCoordinates(this.actionCoords || \\\\\\);\\n\\tif(coordinates) {\\n\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\tdomNode: null,\\n\\t\\t\\tdomNodeRect: {\\n\\t\\t\\t\\tleft: coordinates.left,\\n\\t\\t\\t\\ttop: coordinates.top,\\n\\t\\t\\t\\twidth: coordinates.width,\\n\\t\\t\\t\\theight: coordinates.height\\n\\t\\t\\t},\\n\\t\\t\\ttitle: this.actionState,\\n\\t\\t\\twiki: this.wiki,\\n\\t\\t\\tfloating: this.floating,\\n\\t\\t\\tabsolute: coordinates.absolute\\n\\t\\t});\\n\\t} else {\\n\\t\\t$tw.popup.cancel(0);\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-popup\\\ ActionPopupWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-sendmessage.js\:{\title\:\$:/core/modules/widgets/action-sendmessage.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to send a message\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SendMessageWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSendMessageWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSendMessageWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSendMessageWidget.prototype.execute function() {\\n\\tthis.actionMessage this.getAttribute(\\\$message\\\);\\n\\tthis.actionParam this.getAttribute(\\\$param\\\);\\n\\tthis.actionName this.getAttribute(\\\$name\\\);\\n\\tthis.actionValue this.getAttribute(\\\$value\\\,\\\\\\);\\n\\tthis.actionNames this.getAttribute(\\\$names\\\);\\n\\tthis.actionValues this.getAttribute(\\\$values\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nSendMessageWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(Object.keys(changedAttributes).length) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nSendMessageWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\t// Get the string parameter\\n\\tvar param this.actionParam;\\n\\t// Assemble the parameters as a hashmap\\n\\tvar paramObject Object.create(null);\\n\\t// Add names/values pairs if present\\n\\tif(this.actionNames && this.actionValues) {\\n\\t\\tvar names this.wiki.filterTiddlers(this.actionNames,this),\\n\\t\\t\\tvalues this.wiki.filterTiddlers(this.actionValues,this);\\n\\t\\t$tw.utils.each(names,function(name,index) {\\n\\t\\t\\tparamObjectname valuesindex || \\\\\\;\\n\\t\\t});\\n\\t}\\n\\t// Add raw parameters\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\tparamObjectname attribute;\\n\\t\\t}\\n\\t});\\n\\t// Add name/value pair if present\\n\\tif(this.actionName) {\\n\\t\\tparamObjectthis.actionName this.actionValue;\\n\\t}\\n\\t// Dispatch the message\\n\\tvar params {\\n\\t\\ttype: this.actionMessage,\\n\\t\\tparam: param,\\n\\t\\tparamObject: paramObject,\\n\\t\\tevent: event,\\n\\t\\ttiddlerTitle: this.getVariable(\\\currentTiddler\\\),\\n\\t\\tnavigateFromTitle: this.getVariable(\\\storyTiddler\\\)\\n\\t};\\n\\tthis.dispatchEvent(params);\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-sendmessage\\\ SendMessageWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-setfield.js\:{\title\:\$:/core/modules/widgets/action-setfield.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-setfield.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to set a single field or index on a tiddler.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SetFieldWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSetFieldWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSetFieldWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSetFieldWidget.prototype.execute function() {\\n\\tthis.actionTiddler this.getAttribute(\\\$tiddler\\\) || (!this.hasParseTreeNodeAttribute(\\\$tiddler\\\) && this.getVariable(\\\currentTiddler\\\));\\n\\tthis.actionField this.getAttribute(\\\$field\\\);\\n\\tthis.actionIndex this.getAttribute(\\\$index\\\);\\n\\tthis.actionValue this.getAttribute(\\\$value\\\);\\n\\tthis.actionTimestamp this.getAttribute(\\\$timestamp\\\,\\\yes\\\) \\\yes\\\;\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nSetFieldWidget.prototype.refresh function(changedTiddlers) {\\n\\t// Nothing to refresh\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nSetFieldWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar self this,\\n\\t\\toptions {};\\n\\tif(this.actionTiddler) {\\n\\t\\toptions.suppressTimestamp !this.actionTimestamp;\\n\\t\\tif((typeof this.actionField \\\string\\\) || (typeof this.actionIndex \\\string\\\) || (typeof this.actionValue \\\string\\\)) {\\n\\t\\t\\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\\n\\t\\t}\\n\\t\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\t\\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-setfield\\\ SetFieldWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/action-setmultiplefields.js\:{\title\:\$:/core/modules/widgets/action-setmultiplefields.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/action-setmultiplefields.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nAction widget to set multiple fields or indexes on a tiddler\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SetMultipleFieldsWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSetMultipleFieldsWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSetMultipleFieldsWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSetMultipleFieldsWidget.prototype.execute function() {\\n\\tthis.actionTiddler this.getAttribute(\\\$tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.actionFields this.getAttribute(\\\$fields\\\);\\n\\tthis.actionIndexes this.getAttribute(\\\$indexes\\\);\\n\\tthis.actionValues this.getAttribute(\\\$values\\\);\\n\\tthis.actionTimestamp this.getAttribute(\\\$timestamp\\\,\\\yes\\\) \\\yes\\\;\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nSetMultipleFieldsWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$tiddler\\\ || changedAttributes\\\$fields\\\ || changedAttributes\\\$indexes\\\ || changedAttributes\\\$values\\\ || changedAttributes\\\$timestamp\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nSetMultipleFieldsWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar tiddler this.wiki.getTiddler(this.actionTiddler),\\n\\t\\tnames, values this.wiki.filterTiddlers(this.actionValues,this);\\n\\tif(this.actionFields) {\\n\\t\\tvar additions {};\\n\\t\\tnames this.wiki.filterTiddlers(this.actionFields,this);\\n\\t\\t$tw.utils.each(names,function(fieldname,index) {\\n\\t\\t\\tadditionsfieldname valuesindex || \\\\\\;\\n\\t\\t});\\n\\t\\tvar creationFields this.actionTimestamp ? this.wiki.getCreationFields() : undefined,\\n\\t\\t\\tmodificationFields this.actionTimestamp ? this.wiki.getModificationFields() : undefined;\\n\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(creationFields,tiddler,{title: this.actionTiddler},modificationFields,additions));\\n\\t} else if(this.actionIndexes) {\\n\\t\\tvar data this.wiki.getTiddlerData(this.actionTiddler,Object.create(null));\\n\\t\\tnames this.wiki.filterTiddlers(this.actionIndexes,this);\\n\\t\\t$tw.utils.each(names,function(name,index) {\\n\\t\\t\\tdataname valuesindex || \\\\\\;\\n\\t\\t});\\n\\t\\tthis.wiki.setTiddlerData(this.actionTiddler,data,{},{suppressTimestamp: !this.actionTimestamp});\\n\\t}\\n\\treturn true; // Action was invoked\\n};\\n\\nexports\\\action-setmultiplefields\\\ SetMultipleFieldsWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/browse.js\:{\title\:\$:/core/modules/widgets/browse.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/browse.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nBrowse widget for browsing for files to import\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar BrowseWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nBrowseWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nBrowseWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create element\\n\\tvar domNode this.document.createElement(\\\input\\\);\\n\\tdomNode.setAttribute(\\\type\\\,\\\file\\\);\\n\\tif(this.browseMultiple) {\\n\\t\\tdomNode.setAttribute(\\\multiple\\\,\\\multiple\\\);\\n\\t}\\n\\tif(this.tooltip) {\\n\\t\\tdomNode.setAttribute(\\\title\\\,this.tooltip);\\n\\t}\\n\\tif(this.tabIndex) {\\n\\t\\tdomNode.setAttribute(\\\tabindex\\\, this.tabIndex);\\n\\t}\\n\\t// Nw.js supports \\\nwsaveas\\\ to force a \\\save as\\\ dialogue that allows a new or existing file to be selected\\n\\tif(this.nwsaveas) {\\n\\t\\tdomNode.setAttribute(\\\nwsaveas\\\,this.nwsaveas);\\n\\t}\\n\\tif(this.accept) {\\n\\t\\tdomNode.setAttribute(\\\accept\\\,this.accept);\\n\\t}\\n\\t// Nw.js supports \\\webkitdirectory\\\ and \\\nwdirectory\\\ to allow a directory to be selected\\n\\tif(this.webkitdirectory) {\\n\\t\\tdomNode.setAttribute(\\\webkitdirectory\\\,this.webkitdirectory);\\n\\t}\\n\\tif(this.nwdirectory) {\\n\\t\\tdomNode.setAttribute(\\\nwdirectory\\\,this.nwdirectory);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tdomNode.setAttribute(\\\disabled\\\, true);\\n\\t}\\n\\t// Add a click event handler\\n\\tdomNode.addEventListener(\\\change\\\,function (event) {\\n\\t\\tif(self.message) {\\n\\t\\t\\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\\n\\t\\t} else {\\n\\t\\t\\tself.wiki.readFiles(event.target.files,{\\n\\t\\t\\t\\tcallback: function(tiddlerFieldsArray) {\\n\\t\\t\\t\\t\\tself.dispatchEvent({type: \\\tm-import-tiddlers\\\, param: JSON.stringify(tiddlerFieldsArray)});\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tdeserializer: self.deserializer\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\treturn false;\\n\\t},false);\\n\\t// Assign data- attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nBrowseWidget.prototype.execute function() {\\n\\tthis.browseMultiple this.getAttribute(\\\multiple\\\);\\n\\tthis.deserializer this.getAttribute(\\\deserializer\\\);\\n\\tthis.message this.getAttribute(\\\message\\\);\\n\\tthis.param this.getAttribute(\\\param\\\);\\n\\tthis.tooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis.nwsaveas this.getAttribute(\\\nwsaveas\\\);\\n\\tthis.accept this.getAttribute(\\\accept\\\);\\n\\tthis.webkitdirectory this.getAttribute(\\\webkitdirectory\\\);\\n\\tthis.nwdirectory this.getAttribute(\\\nwdirectory\\\);\\n\\tthis.tabIndex this.getAttribute(\\\tabindex\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\, \\\no\\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nBrowseWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\t\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.browse BrowseWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/button.js\:{\title\:\$:/core/modules/widgets/button.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/button.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nButton widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar Popup require(\\\$:/core/modules/utils/dom/popup.js\\\);\\n\\nvar ButtonWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nButtonWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nButtonWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this,\\n\\t\\ttag \\\button\\\,\\n\\t\\tdomNode;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create element\\n\\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) -1) {\\n\\t\\ttag this.buttonTag;\\n\\t}\\n\\tdomNode this.document.createElement(tag);\\n\\tthis.domNode domNode;\\n\\t// Assign classes\\n\\tvar classes this\\\class\\\.split(\\\ \\\) || ,\\n\\t\\tisPoppedUp (this.popup || this.popupTitle) && this.isPoppedUp();\\n\\tif(this.selectedClass) {\\n\\t\\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\\n\\t\\t\\t$tw.utils.pushTop(classes, this.selectedClass.split(\\\ \\\));\\n\\t\\t\\tdomNode.setAttribute(\\\aria-checked\\\, \\\true\\\);\\n\\t\\t}\\n\\t\\tif(isPoppedUp) {\\n\\t\\t\\t$tw.utils.pushTop(classes,this.selectedClass.split(\\\ \\\));\\n\\t\\t}\\n\\t}\\n\\tif(isPoppedUp) {\\n\\t\\t$tw.utils.pushTop(classes,\\\tc-popup-handle\\\);\\n\\t}\\n\\tdomNode.className classes.join(\\\ \\\);\\n\\t// Assign data- attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Assign other attributes\\n\\tif(this.style) {\\n\\t\\tdomNode.setAttribute(\\\style\\\,this.style);\\n\\t}\\n\\tif(this.tooltip) {\\n\\t\\tdomNode.setAttribute(\\\title\\\,this.tooltip);\\n\\t}\\n\\tif(this\\\aria-label\\\) {\\n\\t\\tdomNode.setAttribute(\\\aria-label\\\,this\\\aria-label\\\);\\n\\t}\\n\\tif (this.role) {\\n\\t\\tdomNode.setAttribute(\\\role\\\, this.role);\\n\\t}\\n\\tif(this.popup || this.popupTitle) {\\n\\t\\tdomNode.setAttribute(\\\aria-expanded\\\,isPoppedUp ? \\\true\\\ : \\\false\\\);\\n\\t}\\n\\t// Set the tabindex\\n\\tif(this.tabIndex) {\\n\\t\\tdomNode.setAttribute(\\\tabindex\\\,this.tabIndex);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tdomNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\t// Add a click event handler\\n\\tdomNode.addEventListener(\\\click\\\,function (event) {\\n\\t\\tvar handled false;\\n\\t\\tif(self.invokeActions(self,event)) {\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t\\tif(self.to) {\\n\\t\\t\\tself.navigateTo(event);\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t\\tif(self.message) {\\n\\t\\t\\tself.dispatchMessage(event);\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t\\tif(self.popup || self.popupTitle) {\\n\\t\\t\\tself.triggerPopup(event);\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t\\tif(self.set || self.setTitle) {\\n\\t\\t\\tself.setTiddler();\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t\\tif(self.actions) {\\n\\t\\t\\tvar modifierKey $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\t\\tself.invokeActionString(self.actions,self,event,{modifier: modifierKey});\\n\\t\\t}\\n\\t\\tif(handled) {\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t}\\n\\t\\treturn handled;\\n\\t},false);\\n\\t// Make it draggable if required\\n\\tif(this.dragTiddler || this.dragFilter) {\\n\\t\\t$tw.utils.makeDraggable({\\n\\t\\t\\tdomNode: domNode,\\n\\t\\t\\tdragTiddlerFn: function() {return self.dragTiddler;},\\n\\t\\t\\tdragFilterFn: function() {return self.dragFilter;},\\n\\t\\t\\twidget: this\\n\\t\\t});\\n\\t}\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nWe dont allow actions to propagate because we trigger actions ourselves\\n*/\\nButtonWidget.prototype.allowActionPropagation function() {\\n\\treturn false;\\n};\\n\\nButtonWidget.prototype.getBoundingClientRect function() {\\n\\treturn this.domNodes0.getBoundingClientRect();\\n};\\n\\nButtonWidget.prototype.isSelected function() {\\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) this.setTo :\\n\\t\\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) this.setTo :\\n\\t\\t\\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\\\currentTiddler\\\) :\\n\\t\\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\\\currentTiddler\\\)) this.setTo;\\n};\\n\\nButtonWidget.prototype.isPoppedUp function() {\\n\\tvar tiddler this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\\n\\tvar result tiddler && tiddler.fields.text ? Popup.readPopupState(tiddler.fields.text) : false;\\n\\treturn result;\\n};\\n\\nButtonWidget.prototype.navigateTo function(event) {\\n\\tvar bounds this.getBoundingClientRect();\\n\\tthis.dispatchEvent({\\n\\t\\ttype: \\\tm-navigate\\\,\\n\\t\\tnavigateTo: this.to,\\n\\t\\tnavigateFromTitle: this.getVariable(\\\storyTiddler\\\),\\n\\t\\tnavigateFromNode: this,\\n\\t\\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\\n\\t\\t},\\n\\t\\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button 1),\\n\\t\\tevent: event\\n\\t});\\n};\\n\\nButtonWidget.prototype.dispatchMessage function(event) {\\n\\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\\\currentTiddler\\\), event: event});\\n};\\n\\nButtonWidget.prototype.triggerPopup function(event) {\\n\\tif(this.popupTitle) {\\n\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\tdomNode: this.domNodes0,\\n\\t\\t\\tabsolute: (this.popupAbsCoords \\\yes\\\),\\n\\t\\t\\ttitle: this.popupTitle,\\n\\t\\t\\twiki: this.wiki,\\n\\t\\t\\tnoStateReference: true\\n\\t\\t});\\n\\t} else {\\n\\t\\t$tw.popup.triggerPopup({\\n\\t\\t\\tdomNode: this.domNodes0,\\n\\t\\t\\tabsolute: (this.popupAbsCoords \\\yes\\\),\\n\\t\\t\\ttitle: this.popup,\\n\\t\\t\\twiki: this.wiki\\n\\t\\t});\\n\\t}\\n};\\n\\nButtonWidget.prototype.setTiddler function() {\\n\\tif(this.setTitle) {\\n\\t\\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\\n\\t\\t\\t\\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\\n\\t\\t\\t\\tthis.wiki.setText(this.setTitle,\\\text\\\,undefined,this.setTo));\\n\\t} else {\\n\\t\\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\\\currentTiddler\\\));\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nButtonWidget.prototype.execute function() {\\n\\t// Get attributes\\n\\tthis.actions this.getAttribute(\\\actions\\\);\\n\\tthis.to this.getAttribute(\\\to\\\);\\n\\tthis.message this.getAttribute(\\\message\\\);\\n\\tthis.param this.getAttribute(\\\param\\\);\\n\\tthis.set this.getAttribute(\\\set\\\);\\n\\tthis.setTo this.getAttribute(\\\setTo\\\);\\n\\tthis.popup this.getAttribute(\\\popup\\\);\\n\\tthis.hover this.getAttribute(\\\hover\\\);\\n\\tthis\\\aria-label\\\ this.getAttribute(\\\aria-label\\\);\\n\\tthis.role this.getAttribute(\\\role\\\);\\n\\tthis.tooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis.style this.getAttribute(\\\style\\\);\\n\\tthis\\\class\\\ this.getAttribute(\\\class\\\,\\\\\\);\\n\\tthis.selectedClass this.getAttribute(\\\selectedClass\\\);\\n\\tthis.defaultSetValue this.getAttribute(\\\default\\\,\\\\\\);\\n\\tthis.buttonTag this.getAttribute(\\\tag\\\);\\n\\tthis.dragTiddler this.getAttribute(\\\dragTiddler\\\);\\n\\tthis.dragFilter this.getAttribute(\\\dragFilter\\\);\\n\\tthis.setTitle this.getAttribute(\\\setTitle\\\);\\n\\tthis.setField this.getAttribute(\\\setField\\\);\\n\\tthis.setIndex this.getAttribute(\\\setIndex\\\);\\n\\tthis.popupTitle this.getAttribute(\\\popupTitle\\\);\\n\\tthis.popupAbsCoords this.getAttribute(\\\popupAbsCoords\\\, \\\no\\\);\\n\\tthis.tabIndex this.getAttribute(\\\tabindex\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\nButtonWidget.prototype.updateDomNodeClasses function() {\\n\\tvar domNodeClasses this.domNode.className.split(\\\ \\\),\\n\\t\\toldClasses this.class.split(\\\ \\\),\\n\\t\\tnewClasses;\\n\\tthis\\\class\\\ this.getAttribute(\\\class\\\,\\\\\\);\\n\\tnewClasses this.class.split(\\\ \\\);\\n\\t//Remove classes assigned from the old value of class attribute\\n\\t$tw.utils.each(oldClasses,function(oldClass){\\n\\t\\tvar i domNodeClasses.indexOf(oldClass);\\n\\t\\tif(i ! -1) {\\n\\t\\t\\tdomNodeClasses.splice(i,1);\\n\\t\\t}\\n\\t});\\n\\t//Add new classes from updated class attribute.\\n\\t$tw.utils.pushTop(domNodeClasses,newClasses);\\n\\tthis.domNode.className domNodeClasses.join(\\\ \\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nButtonWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tooltip || changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlersthis.set) || (this.popup && changedTiddlersthis.popup) || (this.popupTitle && changedTiddlersthis.popupTitle) || changedAttributes.popupAbsCoords || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes\\\default\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tif(changedAttributes\\\class\\\) {\\n\\t\\t\\tthis.updateDomNodeClasses();\\n\\t\\t}\\n\\t\\tthis.assignAttributes(this.domNodes0,{\\n\\t\\t\\tchangedAttributes: changedAttributes,\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.button ButtonWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/checkbox.js\:{\title\:\$:/core/modules/widgets/checkbox.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/checkbox.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nCheckbox widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar CheckboxWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCheckboxWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCheckboxWidget.prototype.render function(parent,nextSibling) {\\n\\tvar isChecked;\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create our elements\\n\\tthis.labelDomNode this.document.createElement(\\\label\\\);\\n\\tthis.labelDomNode.setAttribute(\\\class\\\,\\\tc-checkbox \\\ + this.checkboxClass);\\n\\tthis.inputDomNode this.document.createElement(\\\input\\\);\\n\\tthis.inputDomNode.setAttribute(\\\type\\\,\\\checkbox\\\);\\n\\tisChecked this.getValue();\\n\\tif(isChecked) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\checked\\\,\\\true\\\);\\n\\t\\t$tw.utils.addClass(this.labelDomNode,\\\tc-checkbox-checked\\\);\\n\\t}\\n\\tif(isChecked undefined && this.checkboxIndeterminate \\\yes\\\) {\\n\\t\\tthis.inputDomNode.indeterminate true;\\n\\t}\\n\\tif(this.tabIndex) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\tabindex\\\, this.tabIndex);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\tthis.labelDomNode.appendChild(this.inputDomNode);\\n\\tthis.spanDomNode this.document.createElement(\\\span\\\);\\n\\tthis.labelDomNode.appendChild(this.spanDomNode);\\n\\t// Assign data- attributes\\n\\tthis.assignAttributes(this.inputDomNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Add a click event handler\\n\\t$tw.utils.addEventListeners(this.inputDomNode,\\n\\t\\t{name: \\\change\\\, handlerObject: this, handlerMethod: \\\handleChangeEvent\\\}\\n\\t);\\n\\t// Insert the label into the DOM and render any children\\n\\tparent.insertBefore(this.labelDomNode,nextSibling);\\n\\tthis.renderChildren(this.spanDomNode,null);\\n\\tthis.domNodes.push(this.labelDomNode);\\n};\\n\\nCheckboxWidget.prototype.getValue function() {\\n\\tvar tiddler this.wiki.getTiddler(this.checkboxTitle);\\n\\tif(tiddler || this.checkboxFilter) {\\n\\t\\tif(tiddler && this.checkboxTag) {\\n\\t\\t\\tif(this.checkboxInvertTag \\\yes\\\) {\\n\\t\\t\\t\\treturn !tiddler.hasTag(this.checkboxTag);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn tiddler.hasTag(this.checkboxTag);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(tiddler && (this.checkboxField || this.checkboxIndex)) {\\n\\t\\t\\t// Same logic applies to fields and indexes\\n\\t\\t\\tvar value;\\n\\t\\t\\tif(this.checkboxField) {\\n\\t\\t\\t\\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\\n\\t\\t\\t\\t\\tvalue tiddler.fieldsthis.checkboxField || \\\\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvalue this.checkboxDefault || \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvalue this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \\\\\\);\\n\\t\\t\\t}\\n\\t\\t\\tif(value this.checkboxChecked) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\tif(value this.checkboxUnchecked) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\t// Neither value found: were both specified?\\n\\t\\t\\tif(this.checkboxChecked && !this.checkboxUnchecked) {\\n\\t\\t\\t\\treturn false; // Absence of checked value\\n\\t\\t\\t}\\n\\t\\t\\tif(this.checkboxUnchecked && !this.checkboxChecked) {\\n\\t\\t\\t\\treturn true; // Absence of unchecked value\\n\\t\\t\\t}\\n\\t\\t\\tif(this.checkboxChecked && this.checkboxUnchecked) {\\n\\t\\t\\t\\t// Both specified but neither found: indeterminate or false, depending\\n\\t\\t\\t\\tif(this.checkboxIndeterminate \\\yes\\\) {\\n\\t\\t\\t\\t\\treturn undefined;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(this.checkboxListField || this.checkboxListIndex || this.checkboxFilter) {\\n\\t\\t\\t// Same logic applies to lists and filters\\n\\t\\t\\tvar list;\\n\\t\\t\\tif(this.checkboxListField) {\\n\\t\\t\\t\\tif($tw.utils.hop(tiddler.fields,this.checkboxListField)) {\\n\\t\\t\\t\\t\\tlist tiddler.getFieldList(this.checkboxListField) || ;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tlist $tw.utils.parseStringArray(this.checkboxDefault || \\\\\\) || ;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(this.checkboxListIndex) {\\n\\t\\t\\t\\tlist $tw.utils.parseStringArray(this.wiki.extractTiddlerDataItem(tiddler,this.checkboxListIndex,this.checkboxDefault || \\\\\\)) || ;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tlist this.wiki.filterTiddlers(this.checkboxFilter,this) || ;\\n\\t\\t\\t}\\n\\t\\t\\tif(list.indexOf(this.checkboxChecked) ! -1) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\tif(list.indexOf(this.checkboxUnchecked) ! -1) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\t// Neither one present\\n\\t\\t\\tif(this.checkboxChecked && !this.checkboxUnchecked) {\\n\\t\\t\\t\\treturn false; // Absence of checked value\\n\\t\\t\\t}\\n\\t\\t\\tif(this.checkboxUnchecked && !this.checkboxChecked) {\\n\\t\\t\\t\\treturn true; // Absence of unchecked value\\n\\t\\t\\t}\\n\\t\\t\\tif(this.checkboxChecked && this.checkboxUnchecked) {\\n\\t\\t\\t\\t// Both specified but neither found: indeterminate or false, depending\\n\\t\\t\\t\\tif(this.checkboxIndeterminate \\\yes\\\) {\\n\\t\\t\\t\\t\\treturn undefined;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Neither specified, so empty list is false, non-empty is true\\n\\t\\t\\treturn !!list.length;\\n\\t\\t}\\n\\t} else {\\n\\t\\tif(this.checkboxTag) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t\\tif(this.checkboxField || this.checkboxIndex) {\\n\\t\\t\\tif(this.checkboxDefault this.checkboxChecked) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\tif(this.checkboxDefault this.checkboxUnchecked) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\nCheckboxWidget.prototype.handleChangeEvent function(event) {\\n\\tvar checked this.inputDomNode.checked,\\n\\t\\ttiddler this.wiki.getTiddler(this.checkboxTitle),\\n\\t\\tfallbackFields {text: \\\\\\},\\n\\t\\tnewFields {title: this.checkboxTitle},\\n\\t\\thasChanged false,\\n\\t\\ttagCheck false,\\n\\t\\thasTag tiddler && tiddler.hasTag(this.checkboxTag),\\n\\t\\tvalue checked ? this.checkboxChecked : this.checkboxUnchecked,\\n\\t\\tnotValue checked ? this.checkboxUnchecked : this.checkboxChecked;\\n\\tif(this.checkboxTag && this.checkboxInvertTag \\\yes\\\) {\\n\\t\\ttagCheck hasTag checked;\\n\\t} else {\\n\\t\\ttagCheck hasTag ! checked;\\n\\t}\\n\\t// Set the tag if specified\\n\\tif(this.checkboxTag && (!tiddler || tagCheck)) {\\n\\t\\tnewFields.tags tiddler ? (tiddler.fields.tags || ).slice(0) : ;\\n\\t\\tvar pos newFields.tags.indexOf(this.checkboxTag);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tnewFields.tags.splice(pos,1);\\n\\t\\t}\\n\\t\\tif(this.checkboxInvertTag \\\yes\\\ && !checked) {\\n\\t\\t\\tnewFields.tags.push(this.checkboxTag);\\n\\t\\t} else if(this.checkboxInvertTag ! \\\yes\\\ && checked) {\\n\\t\\t\\tnewFields.tags.push(this.checkboxTag);\\n\\t\\t}\\n\\t\\thasChanged true;\\n\\t}\\n\\t// Set the field if specified\\n\\tif(this.checkboxField) {\\n\\t\\tif(!tiddler || tiddler.fieldsthis.checkboxField ! value) {\\n\\t\\t\\tnewFieldsthis.checkboxField value;\\n\\t\\t\\thasChanged true;\\n\\t\\t}\\n\\t}\\n\\t// Set the index if specified\\n\\tif(this.checkboxIndex) {\\n\\t\\tvar indexValue this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\\n\\t\\tif(!tiddler || indexValue ! value) {\\n\\t\\t\\thasChanged true;\\n\\t\\t}\\n\\t}\\n\\t// Set the list field (or index) if specified\\n\\tif(this.checkboxListField || this.checkboxListIndex) {\\n\\t\\tvar fieldContents, listContents, oldPos, newPos;\\n\\t\\tif(this.checkboxListField) {\\n\\t\\t\\tfieldContents (tiddler ? tiddler.fieldsthis.checkboxListField : undefined) || ;\\n\\t\\t} else {\\n\\t\\t\\tfieldContents this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxListIndex);\\n\\t\\t}\\n\\t\\tif($tw.utils.isArray(fieldContents)) {\\n\\t\\t\\t// Make a copy so we can modify it without changing original thats refrenced elsewhere\\n\\t\\t\\tlistContents fieldContents.slice(0);\\n\\t\\t} else if(fieldContents undefined) {\\n\\t\\t\\tlistContents ;\\n\\t\\t} else if(typeof fieldContents \\\string\\\) {\\n\\t\\t\\tlistContents $tw.utils.parseStringArray(fieldContents);\\n\\t\\t\\t// No need to copy since parseStringArray returns a fresh array, not refrenced elsewhere\\n\\t\\t} else {\\n\\t\\t\\t// Field was neither an array nor a string; its probably something that shouldnt become\\n\\t\\t\\t// an array (such as a date field), so bail out *without* triggering actions\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\toldPos notValue ? listContents.indexOf(notValue) : -1;\\n\\t\\tnewPos value ? listContents.indexOf(value) : -1;\\n\\t\\tif(oldPos -1 && newPos ! -1) {\\n\\t\\t\\t// old value absent, new value present: no change needed\\n\\t\\t} else if(oldPos -1) {\\n\\t\\t\\t// neither one was present\\n\\t\\t\\tif(value) {\\n\\t\\t\\t\\tlistContents.push(value);\\n\\t\\t\\t\\thasChanged true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// value unspecified? then leave list unchanged\\n\\t\\t\\t}\\n\\t\\t} else if(newPos -1) {\\n\\t\\t\\t// old value present, new value absent\\n\\t\\t\\tif(value) {\\n\\t\\t\\t\\tlistContentsoldPos value;\\n\\t\\t\\t\\thasChanged true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tlistContents.splice(oldPos, 1)\\n\\t\\t\\t\\thasChanged true;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t// both were present: just remove the old one, leave new alone\\n\\t\\t\\tlistContents.splice(oldPos, 1)\\n\\t\\t\\thasChanged true;\\n\\t\\t}\\n\\t\\tif(this.checkboxListField) {\\n\\t\\t\\tnewFieldsthis.checkboxListField $tw.utils.stringifyList(listContents);\\n\\t\\t}\\n\\t\\t// The listIndex case will be handled in the if(hasChanged) block below\\n\\t}\\n\\tif(hasChanged) {\\n\\t\\tif(this.checkboxIndex) {\\n\\t\\t\\tthis.wiki.setText(this.checkboxTitle,\\\\\\,this.checkboxIndex,value);\\n\\t\\t} else if(this.checkboxListIndex) {\\n\\t\\t\\tvar listIndexValue (listContents && listContents.length) ? $tw.utils.stringifyList(listContents) : undefined;\\n\\t\\t\\tthis.wiki.setText(this.checkboxTitle,\\\\\\,this.checkboxListIndex,listIndexValue);\\n\\t\\t} else {\\n\\t\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\\n\\t\\t}\\n\\t}\\n\\t// Trigger actions\\n\\tif(this.checkboxActions) {\\n\\t\\tthis.invokeActionString(this.checkboxActions,this,event);\\n\\t}\\n\\tif(this.checkboxCheckActions && checked) {\\n\\t\\tthis.invokeActionString(this.checkboxCheckActions,this,event);\\n\\t}\\n\\tif(this.checkboxUncheckActions && !checked) {\\n\\t\\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCheckboxWidget.prototype.execute function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.checkboxActions this.getAttribute(\\\actions\\\);\\n\\tthis.checkboxCheckActions this.getAttribute(\\\checkactions\\\);\\n\\tthis.checkboxUncheckActions this.getAttribute(\\\uncheckactions\\\);\\n\\tthis.checkboxTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.checkboxTag this.getAttribute(\\\tag\\\);\\n\\tthis.checkboxField this.getAttribute(\\\field\\\);\\n\\tthis.checkboxIndex this.getAttribute(\\\index\\\);\\n\\tthis.checkboxListField this.getAttribute(\\\listField\\\);\\n\\tthis.checkboxListIndex this.getAttribute(\\\listIndex\\\);\\n\\tthis.checkboxFilter this.getAttribute(\\\filter\\\);\\n\\tthis.checkboxChecked this.getAttribute(\\\checked\\\);\\n\\tthis.checkboxUnchecked this.getAttribute(\\\unchecked\\\);\\n\\tthis.checkboxDefault this.getAttribute(\\\default\\\);\\n\\tthis.checkboxIndeterminate this.getAttribute(\\\indeterminate\\\,\\\no\\\);\\n\\tthis.checkboxClass this.getAttribute(\\\class\\\,\\\\\\);\\n\\tthis.checkboxInvertTag this.getAttribute(\\\invertTag\\\,\\\\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\tthis.tabIndex this.getAttribute();\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nCheckboxWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.listField || changedAttributes.listIndex || changedAttributes.filter || changedAttributes.checked || changedAttributes.unchecked || changedAttributes\\\default\\\ || changedAttributes.indeterminate || changedAttributes\\\class\\\ || changedAttributes.disabled || changedAttributes.tabindex) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tvar refreshed false;\\n\\t\\tif(changedTiddlersthis.checkboxTitle) {\\n\\t\\t\\tvar isChecked this.getValue();\\n\\t\\t\\tthis.inputDomNode.checked !!isChecked;\\n\\t\\t\\tthis.inputDomNode.indeterminate (isChecked undefined);\\n\\t\\t\\trefreshed true;\\n\\t\\t\\tif(isChecked) {\\n\\t\\t\\t\\t$tw.utils.addClass(this.labelDomNode,\\\tc-checkbox-checked\\\);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t$tw.utils.removeClass(this.labelDomNode,\\\tc-checkbox-checked\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tthis.assignAttributes(this.inputDomNode,{\\n\\t\\t\\tchangedAttributes: changedAttributes,\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t\\treturn this.refreshChildren(changedTiddlers) || refreshed;\\n\\t}\\n};\\n\\nexports.checkbox CheckboxWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/codeblock.js\:{\title\:\$:/core/modules/widgets/codeblock.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/codeblock.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nCode block node widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar CodeBlockWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCodeBlockWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCodeBlockWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar codeNode this.document.createElement(\\\code\\\),\\n\\t\\tdomNode this.document.createElement(\\\pre\\\);\\n\\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\\\code\\\)));\\n\\tdomNode.appendChild(codeNode);\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.domNodes.push(domNode);\\n\\tif(this.postRender) {\\n\\t\\tthis.postRender();\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCodeBlockWidget.prototype.execute function() {\\n\\tthis.language this.getAttribute(\\\language\\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nCodeBlockWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.code || changedAttributes.language) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.codeblock CodeBlockWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/count.js\:{\title\:\$:/core/modules/widgets/count.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/count.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nCount widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar CountWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nCountWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nCountWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar textNode this.document.createTextNode(this.currentCount);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nCountWidget.prototype.execute function() {\\n\\t// Get parameters from our attributes\\n\\tthis.filter this.getAttribute(\\\filter\\\);\\n\\t// Execute the filter\\n\\tif(this.filter) {\\n\\t\\tthis.currentCount this.wiki.filterTiddlers(this.filter,this).length;\\n\\t} else {\\n\\t\\tthis.currentCount \\\0\\\;\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nCountWidget.prototype.refresh function(changedTiddlers) {\\n\\t// Re-execute the filter to get the count\\n\\tthis.computeAttributes();\\n\\tvar oldCount this.currentCount;\\n\\tthis.execute();\\n\\tif(this.currentCount ! oldCount) {\\n\\t\\t// Regenerate and rerender the widget and replace the existing DOM node\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n\\n};\\n\\nexports.count CountWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/data.js\:{\title\:\$:/core/modules/widgets/data.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/data.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to dynamically represent one or more tiddlers\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DataWidget function(parseTreeNode,options) {\\n\\tthis.dataWidgetTag parseTreeNode.type;\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDataWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDataWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.dataPayload this.computeDataTiddlerValues(); // Array of $tw.Tiddler objects\\n\\tthis.domNode this.document.createTextNode(this.readDataTiddlerValuesAsJson());\\n\\tparent.insertBefore(this.domNode,nextSibling);\\n\\tthis.domNodes.push(this.domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDataWidget.prototype.execute function() {\\n\\t// Nothing to do here\\n};\\n\\n/*\\nRead the tiddler value(s) from a data widget as an array of tiddler field objects (not $tw.Tiddler objects)\\n*/\\nDataWidget.prototype.readDataTiddlerValues function() {\\n\\tvar results ;\\n\\t$tw.utils.each(this.dataPayload,function(tiddler,index) {\\n\\t\\tresults.push(tiddler.getFieldStrings());\\n\\t});\\n\\treturn results;\\n};\\n\\n/*\\nRead the tiddler value(s) from a data widget as an array of tiddler field objects (not $tw.Tiddler objects)\\n*/\\nDataWidget.prototype.readDataTiddlerValuesAsJson function() {\\n\\treturn JSON.stringify(this.readDataTiddlerValues(),null,4);\\n};\\n\\n/*\\nCompute list of tiddlers from a data widget\\n*/\\nDataWidget.prototype.computeDataTiddlerValues function() {\\n\\tvar self this;\\n\\t// Read any attributes not prefixed with $\\n\\tvar item Object.create(null);\\n\\t$tw.utils.each(this.attributes,function(value,name) {\\n\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\titemname value;\\t\\n\\t\\t}\\n\\t});\\n\\t// Deal with $tiddler, $filter or $compound-tiddler attributes\\n\\tvar tiddlers ,\\n\\t\\tcompoundTiddlers,\\n\\t\\ttitle;\\n\\tif(this.hasAttribute(\\\$tiddler\\\)) {\\n\\t\\ttitle this.getAttribute(\\\$tiddler\\\);\\n\\t\\tif(title) {\\n\\t\\t\\tvar tiddler this.wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\ttiddlers.push(tiddler);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif(this.hasAttribute(\\\$filter\\\)) {\\n\\t\\tvar filter this.getAttribute(\\\$filter\\\);\\n\\t\\tif(filter) {\\n\\t\\t\\tvar titles this.wiki.filterTiddlers(filter);\\n\\t\\t\\t$tw.utils.each(titles,function(title) {\\n\\t\\t\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\t\\ttiddlers.push(tiddler);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\tif(this.hasAttribute(\\\$compound-tiddler\\\)) {\\n\\t\\ttitle this.getAttribute(\\\$compound-tiddler\\\);\\n\\t\\tif(title) {\\n\\t\\t\\ttiddlers.push.apply(tiddlers,this.extractCompoundTiddler(title));\\n\\t\\t}\\n\\t}\\n\\tif(this.hasAttribute(\\\$compound-filter\\\)) {\\n\\t\\tfilter this.getAttribute(\\\$compound-filter\\\);\\n\\t\\tif(filter) {\\n\\t\\t\\tcompoundTiddlers this.wiki.filterTiddlers(filter);\\n\\t\\t\\t$tw.utils.each(compoundTiddlers, function(title){\\n\\t\\t\\t\\ttiddlers.push.apply(tiddlers,self.extractCompoundTiddler(title));\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\t// Return the literal item if none of the special attributes were used\\n\\tif(!this.hasAttribute(\\\$tiddler\\\) && !this.hasAttribute(\\\$filter\\\) && !this.hasAttribute(\\\$compound-tiddler\\\) && !this.hasAttribute(\\\$compound-filter\\\)) {\\n\\t\\tif(Object.keys(item).length > 0 && !!item.title) {\\n\\t\\t\\treturn new $tw.Tiddler(item);\\n\\t\\t} else {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Apply the item fields to each of the tiddlers\\n\\t\\tif(Object.keys(item).length > 0) {\\n\\t\\t\\t$tw.utils.each(tiddlers,function(tiddler,index) {\\n\\t\\t\\t\\ttiddlersindex new $tw.Tiddler(tiddler,item);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\treturn tiddlers;\\n\\t}\\n};\\n\\n/*\\nHelper to extract tiddlers from text/vnd.tiddlywiki-multiple tiddlers\\n*/\\nDataWidget.prototype.extractCompoundTiddler function(title) {\\n\\tvar tiddler this.wiki.getTiddler(title);\\n\\tif(tiddler && tiddler.fields.type \\\text/vnd.tiddlywiki-multiple\\\) {\\n\\t\\tvar text tiddler.fields.text || \\\\\\,\\n\\t\\t\\trawTiddlers text.split(/\\\\r?\\\\n\\\\+\\\\r?\\\\n/),\\n\\t\\t\\ttiddlers ;\\n\\t\\t$tw.utils.each(rawTiddlers,function(rawTiddler) {\\n\\t\\t\\tvar fields Object.create(null),\\n\\t\\t\\t\\tsplit rawTiddler.split(/\\\\r?\\\\n\\\\r?\\\\n/mg);\\n\\t\\t\\tif(split.length > 1) {\\n\\t\\t\\t\\tfields $tw.utils.parseFields(split0,fields);\\n\\t\\t\\t}\\n\\t\\t\\tif(split.length > 2) {\\n\\t\\t\\t\\tfields.text split.slice(1).join(\\\\\\\n\\\\n\\\);\\n\\t\\t\\t}\\n\\t\\t\\ttiddlers.push(new $tw.Tiddler(fields));\\n\\t\\t});\\n\\t\\treturn tiddlers;\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDataWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tvar newPayload this.computeDataTiddlerValues();\\n\\tif(hasPayloadChanged(this.dataPayload,newPayload)) {\\n\\t\\tthis.dataPayload newPayload;\\n\\t\\tthis.domNode.textContent this.readDataTiddlerValuesAsJson();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\n/*\\nCompare two arrays of tiddlers and return true if they are different\\n*/\\nfunction hasPayloadChanged(a,b) {\\n\\tif(a.length b.length) {\\n\\t\\tfor(var t0; t\u003Ca.length; t++) {\\n\\t\\t\\tif(!(at.isEqual(bt))) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn false;\\n\\t} else {\\n\\t\\treturn true;\\n\\t}\\n}\\n\\nexports.data DataWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/diff-text.js\:{\title\:\$:/core/modules/widgets/diff-text.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/diff-text.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to display a diff between two texts\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget,\\n\\tdmp require(\\\$:/core/modules/utils/diff-match-patch/diff_match_patch.js\\\);\\n\\nvar DiffTextWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDiffTextWidget.prototype new Widget();\\n\\nDiffTextWidget.prototype.invisibleCharacters {\\n\\t\\\\\\\n\\\: \\\↩︎\\\\n\\\,\\n\\t\\\\\\\r\\\: \\\⇠\\\,\\n\\t\\\\\\\t\\\: \\\⇥\\\\t\\\\\n};\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDiffTextWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create the diff\\n\\tvar dmpObject new dmp.diff_match_patch(),\\n\\t\\tdiffs dmpObject.diff_main(this.getAttribute(\\\source\\\,\\\\\\),this.getAttribute(\\\dest\\\,\\\\\\));\\n\\t// Apply required cleanup\\n\\tswitch(this.getAttribute(\\\cleanup\\\,\\\semantic\\\)) {\\n\\t\\tcase \\\none\\\:\\n\\t\\t\\t// No cleanup\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\efficiency\\\:\\n\\t\\t\\tdmpObject.diff_cleanupEfficiency(diffs);\\n\\t\\t\\tbreak;\\n\\t\\tdefault: // case \\\semantic\\\\\n\\t\\t\\tdmpObject.diff_cleanupSemantic(diffs);\\n\\t\\t\\tbreak;\\n\\t}\\n\\t// Create the elements\\n\\tvar domContainer this.document.createElement(\\\div\\\), \\n\\t\\tdomDiff this.createDiffDom(diffs);\\n\\tparent.insertBefore(domContainer,nextSibling);\\n\\t// Set variables\\n\\tthis.setVariable(\\\diff-count\\\,diffs.reduce(function(acc,diff) {\\n\\t\\tif(diff0 ! dmp.DIFF_EQUAL) {\\n\\t\\t\\tacc++;\\n\\t\\t}\\n\\t\\treturn acc;\\n\\t},0).toString());\\n\\t// Render child widgets\\n\\tthis.renderChildren(domContainer,null);\\n\\t// Render the diff\\n\\tdomContainer.appendChild(domDiff);\\n\\t// Save our container\\n\\tthis.domNodes.push(domContainer);\\n};\\n\\n/*\\nCreate DOM elements representing a list of diffs\\n*/\\nDiffTextWidget.prototype.createDiffDom function(diffs) {\\n\\tvar self this;\\n\\t// Create the element and assign the attributes\\n\\tvar domPre this.document.createElement(\\\pre\\\),\\n\\t\\tdomCode this.document.createElement(\\\code\\\);\\n\\t$tw.utils.each(diffs,function(diff) {\\n\\t\\tvar tag diff0 dmp.DIFF_INSERT ? \\\ins\\\ : (diff0 dmp.DIFF_DELETE ? \\\del\\\ : \\\span\\\),\\n\\t\\t\\tclassName diff0 dmp.DIFF_INSERT ? \\\tc-diff-insert\\\ : (diff0 dmp.DIFF_DELETE ? \\\tc-diff-delete\\\ : \\\tc-diff-equal\\\),\\n\\t\\t\\tdom self.document.createElement(tag),\\n\\t\\t\\ttext diff1,\\n\\t\\t\\tcurrPos 0,\\n\\t\\t\\tre /(\\\\x00-\\\\x1F)/mg,\\n\\t\\t\\tmatch re.exec(text),\\n\\t\\t\\tspan,\\n\\t\\t\\tprintable;\\n\\t\\tdom.className className;\\n\\t\\twhile(match) {\\n\\t\\t\\tif(currPos \u003C match.index) {\\n\\t\\t\\t\\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\\n\\t\\t\\t}\\n\\t\\t\\tspan self.document.createElement(\\\span\\\);\\n\\t\\t\\tspan.className \\\tc-diff-invisible\\\;\\n\\t\\t\\tprintable self.invisibleCharactersmatch0 || (\\\0x\\\ + match0.charCodeAt(0).toString(16) + \\\\\\);\\n\\t\\t\\tspan.appendChild(self.document.createTextNode(printable));\\n\\t\\t\\tdom.appendChild(span);\\n\\t\\t\\tcurrPos match.index + match0.length;\\n\\t\\t\\tmatch re.exec(text);\\n\\t\\t}\\n\\t\\tif(currPos \u003C text.length) {\\n\\t\\t\\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\\n\\t\\t}\\n\\t\\tdomCode.appendChild(dom);\\n\\t});\\n\\tdomPre.appendChild(domCode);\\n\\treturn domPre;\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDiffTextWidget.prototype.execute function() {\\n\\t// Make child widgets\\n\\tvar parseTreeNodes;\\n\\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\\n\\t\\tparseTreeNodes this.parseTreeNode.children;\\n\\t} else {\\n\\t\\tparseTreeNodes {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {type: \\\string\\\, value: \\\$:/language/Diffs/CountMessage\\\}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t}\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDiffTextWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports\\\diff-text\\\ DiffTextWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/draggable.js\:{\title\:\$:/core/modules/widgets/draggable.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/draggable.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDraggable widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DraggableWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDraggableWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDraggableWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this,\\n\\t\\ttag,\\n\\t\\tdomNode,\\n\\t\\tclasses ;\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Sanitise the specified tag\\n\\ttag this.draggableTag;\\n\\tif($tw.config.htmlUnsafeElements.indexOf(tag) ! -1) {\\n\\t\\ttag \\\div\\\;\\n\\t}\\n\\t// Create our element\\n\\tdomNode this.document.createElement(tag);\\n\\t// Assign classes\\n\\tif(this.draggableClasses) {\\n\\t\\tclasses.push(this.draggableClasses);\\n\\t}\\n\\tif(!this.dragHandleSelector && this.dragEnable) {\\n\\t\\tclasses.push(\\\tc-draggable\\\);\\n\\t}\\n\\tdomNode.setAttribute(\\\class\\\,classes.join(\\\ \\\));\\n\\t// Assign data- attributes and style. attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Insert the node into the DOM and render any children\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\t// Add event handlers\\n\\tif(this.dragEnable) {\\n\\t\\t$tw.utils.makeDraggable({\\n\\t\\t\\tdomNode: domNode,\\n\\t\\t\\tdragTiddlerFn: function() {return self.getAttribute(\\\tiddler\\\);},\\n\\t\\t\\tdragFilterFn: function() {return self.getAttribute(\\\filter\\\);},\\n\\t\\t\\tstartActions: self.startActions,\\n\\t\\t\\tendActions: self.endActions,\\n\\t\\t\\tdragImageType: self.dragImageType,\\n\\t\\t\\twidget: this,\\n\\t\\t\\tselector: self.dragHandleSelector\\n\\t\\t});\\n\\t}\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDraggableWidget.prototype.execute function() {\\n\\t// Pick up our attributes\\n\\tthis.draggableTag this.getAttribute(\\\tag\\\,\\\div\\\);\\n\\tthis.draggableClasses this.getAttribute(\\\class\\\);\\n\\tthis.startActions this.getAttribute(\\\startactions\\\);\\n\\tthis.endActions this.getAttribute(\\\endactions\\\);\\n\\tthis.dragImageType this.getAttribute(\\\dragimagetype\\\);\\n\\tthis.dragHandleSelector this.getAttribute(\\\selector\\\);\\n\\tthis.dragEnable this.getAttribute(\\\enable\\\,\\\yes\\\) \\\yes\\\;\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n\\nDraggableWidget.prototype.updateDomNodeClasses function() {\\n\\tvar domNodeClasses this.domNodes0.className.split(\\\ \\\),\\n\\t\\toldClasses this.draggableClasses.split(\\\ \\\);\\n\\tthis.draggableClasses this.getAttribute(\\\class\\\);\\n\\t//Remove classes assigned from the old value of class attribute\\n\\t$tw.utils.each(oldClasses,function(oldClass){\\n\\t\\tvar i domNodeClasses.indexOf(oldClass);\\n\\t\\tif(i ! -1) {\\n\\t\\t\\tdomNodeClasses.splice(i,1);\\n\\t\\t}\\n\\t});\\n\\t//Add new classes from updated class attribute.\\n\\t$tw.utils.pushTop(domNodeClasses,this.draggableClasses);\\n\\tthis.domNodes0.setAttribute(\\\class\\\,domNodeClasses.join(\\\ \\\))\\n}\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDraggableWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tag || changedAttributes.selector || changedAttributes.dragimagetype || changedAttributes.enable || changedAttributes.startactions || changedAttributes.endactions) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tif(changedAttributes\\\class\\\) {\\n\\t\\t\\tthis.updateDomNodeClasses();\\n\\t\\t}\\n\\t\\tthis.assignAttributes(this.domNodes0,{\\n\\t\\t\\tchangedAttributes: changedAttributes,\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.draggable DraggableWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/droppable.js\:{\title\:\$:/core/modules/widgets/droppable.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/droppable.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDroppable widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DroppableWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDroppableWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDroppableWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this,\\n\\t\\ttag this.parseTreeNode.isBlock ? \\\div\\\ : \\\span\\\,\\n\\t\\tdomNode;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) -1) {\\n\\t\\ttag this.droppableTag;\\n\\t}\\n\\t// Create element and assign classes\\n\\tdomNode this.document.createElement(tag);\\n\\tthis.domNode domNode;\\n\\tthis.assignDomNodeClasses();\\n\\t// Assign data- attributes and style. attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Add event handlers\\n\\tif(this.droppableEnable) {\\n\\t\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t\\t{name: \\\dragenter\\\, handlerObject: this, handlerMethod: \\\handleDragEnterEvent\\\},\\n\\t\\t\\t{name: \\\dragover\\\, handlerObject: this, handlerMethod: \\\handleDragOverEvent\\\},\\n\\t\\t\\t{name: \\\dragleave\\\, handlerObject: this, handlerMethod: \\\handleDragLeaveEvent\\\},\\n\\t\\t\\t{name: \\\drop\\\, handlerObject: this, handlerMethod: \\\handleDropEvent\\\}\\n\\t\\t);\\n\\t} else {\\n\\t\\t$tw.utils.addClass(this.domNode,this.disabledClass);\\n\\t}\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n\\t// Stack of outstanding enter/leave events\\n\\tthis.currentlyEntered ;\\n};\\n\\nDroppableWidget.prototype.enterDrag function(event) {\\n\\tif(this.currentlyEntered.indexOf(event.target) -1) {\\n\\t\\tthis.currentlyEntered.push(event.target);\\n\\t}\\n\\t// If were entering for the first time we need to apply highlighting\\n\\t$tw.utils.addClass(this.domNodes0,\\\tc-dragover\\\);\\n};\\n\\nDroppableWidget.prototype.leaveDrag function(event) {\\n\\tvar pos this.currentlyEntered.indexOf(event.target);\\n\\tif(pos ! -1) {\\n\\t\\tthis.currentlyEntered.splice(pos,1);\\n\\t}\\n\\t// Remove highlighting if were leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\\n\\tif(this.currentlyEntered.length 0 || (this.currentlyEntered.length 1 && this.currentlyEntered0 $tw.dragInProgress)) {\\n\\t\\tthis.currentlyEntered ;\\n\\t\\tif(this.domNodes0) {\\n\\t\\t\\t$tw.utils.removeClass(this.domNodes0,\\\tc-dragover\\\);\\n\\t\\t}\\n\\t}\\n};\\n\\nDroppableWidget.prototype.handleDragEnterEvent function(event) {\\n\\tthis.enterDrag(event);\\n\\t// Tell the browser that were ready to handle the drop\\n\\tevent.preventDefault();\\n\\t// Tell the browser not to ripple the drag up to any parent drop handlers\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nDroppableWidget.prototype.handleDragOverEvent function(event) {\\n\\t// Check for being over a TEXTAREA or INPUT\\n\\tif(\\\TEXTAREA\\\,\\\INPUT\\\.indexOf(event.target.tagName) ! -1) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Tell the browser that were still interested in the drop\\n\\tevent.preventDefault();\\n\\t// Set the drop effect\\n\\tevent.dataTransfer.dropEffect this.droppableEffect;\\n\\treturn false;\\n};\\n\\nDroppableWidget.prototype.handleDragLeaveEvent function(event) {\\n\\tthis.leaveDrag(event);\\n\\treturn false;\\n};\\n\\nDroppableWidget.prototype.handleDropEvent function(event) {\\n\\tvar self this;\\n\\tthis.leaveDrag(event);\\n\\t// Check for being over a TEXTAREA or INPUT\\n\\tif(\\\TEXTAREA\\\,\\\INPUT\\\.indexOf(event.target.tagName) ! -1) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar dataTransfer event.dataTransfer;\\n\\t// Remove highlighting\\n\\t$tw.utils.removeClass(this.domNodes0,\\\tc-dragover\\\);\\n\\t// Try to import the various data types we understand\\n\\tif(this.droppableActions) {\\n\\t\\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\\n\\t\\t\\tfieldsArray.forEach(function(fields) {\\n\\t\\t\\t\\tself.performActions(fields.title || fields.text,event);\\n\\t\\t\\t});\\n\\t\\t});\\n\\t}\\n\\t// Send a TitleList to performListActions\\n\\tif(this.droppableListActions) {\\n\\t\\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\\n\\t\\t\\tvar titleList ;\\n\\t\\t\\tfieldsArray.forEach(function(fields) {\\n\\t\\t\\t\\ttitleList.push(fields.title || fields.text);\\n\\t\\t\\t});\\n\\t\\t\\tself.performListActions($tw.utils.stringifyList(titleList),event);\\n\\t\\t});\\n\\t}\\n\\t// Tell the browser that we handled the drop\\n\\tevent.preventDefault();\\n\\t// Stop the drop ripple up to any parent handlers\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nDroppableWidget.prototype.performListActions function(titleList,event) {\\n\\tif(this.droppableListActions) {\\n\\t\\tvar modifierKey $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\tthis.invokeActionString(this.droppableListActions,this,event,{actionTiddlerList: titleList, modifier: modifierKey});\\n\\t}\\n};\\n\\nDroppableWidget.prototype.performActions function(title,event) {\\n\\tif(this.droppableActions) {\\n\\t\\tvar modifierKey $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDroppableWidget.prototype.execute function() {\\n\\tthis.droppableActions this.getAttribute(\\\actions\\\);\\n\\tthis.droppableListActions this.getAttribute(\\\listActions\\\);\\n\\tthis.droppableEffect this.getAttribute(\\\effect\\\,\\\copy\\\);\\n\\tthis.droppableTag this.getAttribute(\\\tag\\\);\\n\\tthis.droppableEnable (this.getAttribute(\\\enable\\\) || \\\yes\\\) \\\yes\\\;\\n\\tthis.disabledClass this.getAttribute(\\\disabledClass\\\,\\\\\\);\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\nDroppableWidget.prototype.assignDomNodeClasses function() {\\n\\tvar classes this.getAttribute(\\\class\\\,\\\\\\).split(\\\ \\\);\\n\\tclasses.push(\\\tc-droppable\\\);\\n\\tthis.domNode.className classes.join(\\\ \\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDroppableWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass ||\\n\\t\\tchangedAttributes.actions|| changedAttributes.listActions || changedAttributes.effect) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tif(changedAttributes\\\class\\\) {\\n\\t\\t\\tthis.assignDomNodeClasses();\\n\\t\\t}\\n\\t\\tthis.assignAttributes(this.domNodes0,{\\n\\t\\t\\tchangedAttributes: changedAttributes,\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.droppable DroppableWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/dropzone.js\:{\title\:\$:/core/modules/widgets/dropzone.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/dropzone.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDropzone widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar IMPORT_TITLE \\\$:/Import\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DropZoneWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDropZoneWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDropZoneWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create element\\n\\tvar domNode this.document.createElement(\\\div\\\);\\n\\tthis.domNode domNode;\\n\\tdomNode.className this.dropzoneClass || \\\tc-dropzone\\\;\\n\\t// Add event handlers\\n\\tif(this.dropzoneEnable) {\\n\\t\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t\\t{name: \\\dragenter\\\, handlerObject: this, handlerMethod: \\\handleDragEnterEvent\\\},\\n\\t\\t\\t{name: \\\dragover\\\, handlerObject: this, handlerMethod: \\\handleDragOverEvent\\\},\\n\\t\\t\\t{name: \\\dragleave\\\, handlerObject: this, handlerMethod: \\\handleDragLeaveEvent\\\},\\n\\t\\t\\t{name: \\\drop\\\, handlerObject: this, handlerMethod: \\\handleDropEvent\\\},\\n\\t\\t\\t{name: \\\paste\\\, handlerObject: this, handlerMethod: \\\handlePasteEvent\\\},\\n\\t\\t\\t{name: \\\dragend\\\, handlerObject: this, handlerMethod: \\\handleDragEndEvent\\\}\\n\\t\\t);\\n\\t}\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n\\t// Stack of outstanding enter/leave events\\n\\tthis.currentlyEntered ;\\n};\\n\\n// Handler for transient event listeners added when the dropzone has an active drag in progress\\nDropZoneWidget.prototype.handleEvent function(event) {\\n\\tif(event.type \\\click\\\) {\\n\\t\\tif(this.currentlyEntered.length) {\\n\\t\\t\\tthis.resetState();\\n\\t\\t}\\n\\t} else if(event.type \\\dragenter\\\) {\\n\\t\\tif(event.target && event.target ! this.domNode && !$tw.utils.domContains(this.domNode,event.target)) {\\n\\t\\t\\tthis.resetState();\\n\\t\\t}\\n\\t} else if(event.type \\\dragleave\\\) {\\n\\t\\t// Check if drag left the window\\n\\t\\tif(event.relatedTarget null || (event.relatedTarget && event.relatedTarget.nodeName \\\HTML\\\)) {\\n\\t\\t\\tthis.resetState();\\n\\t\\t}\\n\\t}\\n};\\n\\n// Reset the state of the dropzone after a drag has ended\\nDropZoneWidget.prototype.resetState function() {\\n\\t$tw.utils.removeClass(this.domNode,\\\tc-dragover\\\);\\n\\tthis.currentlyEntered ;\\n\\tthis.document.body.removeEventListener(\\\click\\\,this,true);\\n\\tthis.document.body.removeEventListener(\\\dragenter\\\,this,true);\\n\\tthis.document.body.removeEventListener(\\\dragleave\\\,this,true);\\n\\tthis.dragInProgress false;\\n};\\n\\nDropZoneWidget.prototype.enterDrag function(event) {\\n\\tif(this.currentlyEntered.indexOf(event.target) -1) {\\n\\t\\tthis.currentlyEntered.push(event.target);\\n\\t}\\n\\tif(!this.dragInProgress) {\\n\\t\\tthis.dragInProgress true;\\n\\t\\t// If were entering for the first time we need to apply highlighting\\n\\t\\t$tw.utils.addClass(this.domNodes0,\\\tc-dragover\\\);\\n\\t\\tthis.document.body.addEventListener(\\\click\\\,this,true);\\n\\t\\tthis.document.body.addEventListener(\\\dragenter\\\,this,true);\\n\\t\\tthis.document.body.addEventListener(\\\dragleave\\\,this,true);\\n\\t}\\n};\\n\\nDropZoneWidget.prototype.leaveDrag function(event) {\\n\\tvar pos this.currentlyEntered.indexOf(event.target);\\n\\tif(pos ! -1) {\\n\\t\\tthis.currentlyEntered.splice(pos,1);\\n\\t}\\n\\t// Remove highlighting if were leaving externally\\n\\tif(this.currentlyEntered.length 0) {\\n\\t\\tthis.resetState();\\n\\t}\\n};\\n\\nDropZoneWidget.prototype.handleDragEnterEvent function(event) {\\n\\tif($tw.dragInProgress) {\\n\\t\\treturn false;\\n\\t}\\n\\tif(this.filesOnly && !$tw.utils.dragEventContainsFiles(event)) {\\n\\t\\treturn false;\\n\\t}\\n\\tthis.enterDrag(event);\\n\\t// Tell the browser that were ready to handle the drop\\n\\tevent.preventDefault();\\n\\t// Tell the browser not to ripple the drag up to any parent drop handlers\\n\\tevent.stopPropagation();\\n};\\n\\nDropZoneWidget.prototype.handleDragOverEvent function(event) {\\n\\t// Check for being over a TEXTAREA or INPUT\\n\\tif(\\\TEXTAREA\\\,\\\INPUT\\\.indexOf(event.target.tagName) ! -1) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Check for this window being the source of the drag\\n\\tif($tw.dragInProgress) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Tell the browser that were still interested in the drop\\n\\tevent.preventDefault();\\n\\t// Check if this is a synthetic event, IE does not allow accessing dropEffect outside of original event handler\\n\\tif(event.isTrusted) {\\n\\t\\tevent.dataTransfer.dropEffect \\\copy\\\; // Explicitly show this is a copy\\n\\t}\\n};\\n\\nDropZoneWidget.prototype.handleDragLeaveEvent function(event) {\\n\\tthis.leaveDrag(event);\\n};\\n\\nDropZoneWidget.prototype.handleDragEndEvent function(event) {\\n\\tthis.resetState();\\n};\\n\\nDropZoneWidget.prototype.filterByContentTypes function(tiddlerFieldsArray) {\\n\\tvar filteredTypes,\\n\\t\\tfiltered ,\\n\\t\\ttypes ;\\n\\t$tw.utils.each(tiddlerFieldsArray,function(tiddlerFields) {\\n\\t\\ttypes.push(tiddlerFields.type || \\\\\\);\\n\\t});\\n\\tfilteredTypes this.wiki.filterTiddlers(this.contentTypesFilter,this,this.wiki.makeTiddlerIterator(types));\\n\\t$tw.utils.each(tiddlerFieldsArray,function(tiddlerFields) {\\n\\t\\tif(filteredTypes.indexOf(tiddlerFields.type) ! -1) {\\n\\t\\t\\tfiltered.push(tiddlerFields);\\n\\t\\t}\\n\\t});\\n\\treturn filtered;\\n};\\n\\nDropZoneWidget.prototype.readFileCallback function(tiddlerFieldsArray) {\\n\\tif(this.contentTypesFilter) {\\n\\t\\ttiddlerFieldsArray this.filterByContentTypes(tiddlerFieldsArray);\\n\\t}\\n\\tif(tiddlerFieldsArray.length) {\\n\\t\\tthis.dispatchEvent({type: \\\tm-import-tiddlers\\\, param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: this.autoOpenOnImport, importTitle: this.importTitle});\\n\\t\\tif(this.actions) {\\n\\t\\t\\tthis.invokeActionString(this.actions,this,event,{importTitle: this.importTitle});\\n\\t\\t}\\n\\t}\\n};\\n\\nDropZoneWidget.prototype.handleDropEvent function(event) {\\n\\tvar self this,\\n\\t\\treadFileCallback function(tiddlerFieldsArray) {\\n\\t\\t\\tself.readFileCallback(tiddlerFieldsArray);\\n\\t\\t};\\n\\tthis.leaveDrag(event);\\n\\t// Check for being over a TEXTAREA or INPUT\\n\\tif(\\\TEXTAREA\\\,\\\INPUT\\\.indexOf(event.target.tagName) ! -1) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Check for this window being the source of the drag\\n\\tif($tw.dragInProgress) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar self this,\\n\\t\\tdataTransfer event.dataTransfer;\\n\\t// Remove highlighting\\n\\tthis.resetState();\\n\\t// Import any files in the drop\\n\\tvar numFiles 0;\\n\\t// If we have type text/vnd.tiddlywiki then skip trying to import files\\n\\tif(dataTransfer.files && !$tw.utils.dragEventContainsType(event,\\\text/vnd.tiddler\\\)) {\\n\\t\\tnumFiles this.wiki.readFiles(dataTransfer.files,{\\n\\t\\t\\tcallback: readFileCallback,\\n\\t\\t\\tdeserializer: this.dropzoneDeserializer\\n\\t\\t});\\n\\t}\\n\\t// Try to import the various data types we understand\\n\\tif(numFiles 0) {\\n\\t\\tvar fallbackTitle self.wiki.generateNewTitle(\\\Untitled\\\);\\n\\t\\t//Use the deserializer specified if any\\n\\t\\tif(this.dropzoneDeserializer) {\\n\\t\\t\\tfor(var t 0; t\u003CdataTransfer.items.length; t++) {\\n\\t\\t\\t\\tvar item dataTransfer.itemst;\\n\\t\\t\\t\\tif(item.kind \\\string\\\) {\\n\\t\\t\\t\\t\\titem.getAsString(function(str){\\n\\t\\t\\t\\t\\t\\tvar tiddlerFields self.wiki.deserializeTiddlers(null,str,{title: fallbackTitle},{deserializer:self.dropzoneDeserializer});\\n\\t\\t\\t\\t\\t\\tif(tiddlerFields && tiddlerFields.length) {\\n\\t\\t\\t\\t\\t\\t\\treadFileCallback(tiddlerFields);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t})\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.importDataTransfer(dataTransfer,fallbackTitle,readFileCallback);\\n\\t\\t}\\n\\t}\\n\\t// Tell the browser that we handled the drop\\n\\tevent.preventDefault();\\n\\t// Stop the drop ripple up to any parent handlers\\n\\tevent.stopPropagation();\\n};\\n\\nDropZoneWidget.prototype.handlePasteEvent function(event) {\\n\\tvar self this;\\n\\tvar\\treadFileCallback function(tiddlerFieldsArray) {\\n\\t\\t\\tself.readFileCallback(tiddlerFieldsArray);\\n\\t\\t};\\n\\tvar getItem function(type) {\\n\\t\\t\\ttype type || \\\text/plain\\\;\\n\\t\\t\\treturn function(str) {\\n\\t\\t\\t\\t// Use the deserializer specified if any\\n\\t\\t\\t\\tif(self.dropzoneDeserializer) {\\n\\t\\t\\t\\t\\ttiddlerFields self.wiki.deserializeTiddlers(null,str,{title: self.wiki.generateNewTitle(\\\Untitled \\\ + type)},{deserializer:self.dropzoneDeserializer});\\n\\t\\t\\t\\t\\tif(tiddlerFields && tiddlerFields.length) {\\n\\t\\t\\t\\t\\t\\treadFileCallback(tiddlerFields);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ttiddlerFields {\\n\\t\\t\\t\\t\\t\\ttitle: self.wiki.generateNewTitle(\\\Untitled \\\ + type),\\n\\t\\t\\t\\t\\t\\ttext: str,\\n\\t\\t\\t\\t\\t\\ttype: type\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tif($tw.log.IMPORT) {\\n\\t\\t\\t\\t\\t\\tconsole.log(\\\Importing string \\\ + str + \\\, type: \\\ + type + \\\\\\);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treadFileCallback(tiddlerFields);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t// Let the browser handle it if were in a textarea or input box\\n\\tif(\\\TEXTAREA\\\,\\\INPUT\\\.indexOf(event.target.tagName) -1 && !event.target.isContentEditable && !event.twEditor) {\\n\\t\\tvar self this,\\n\\t\\t\\titems event.clipboardData.items;\\n\\t\\t// Enumerate the clipboard items\\n\\t\\tfor(var t 0; t\u003Citems.length; t++) {\\n\\t\\t\\tvar item itemst;\\n\\t\\t\\tif(item.kind \\\file\\\) {\\n\\t\\t\\t\\t// Import any files\\n\\t\\t\\t\\tthis.wiki.readFile(item.getAsFile(),{\\n\\t\\t\\t\\t\\tcallback: readFileCallback,\\n\\t\\t\\t\\t\\tdeserializer: this.dropzoneDeserializer\\n\\t\\t\\t\\t});\\n\\t\\t\\t} else if(item.kind \\\string\\\ && !\\\text/html\\\, \\\text/plain\\\, \\\Text\\\.includes(item.type) && $tw.utils.itemHasValidDataType(item)) {\\n\\t\\t\\t\\t// Try to import the various data types we understand\\n\\t\\t\\t\\tvar fallbackTitle self.wiki.generateNewTitle(\\\Untitled\\\);\\n\\t\\t\\t\\t//Use the deserializer specified if any\\n\\t\\t\\t\\tif(this.dropzoneDeserializer) {\\n\\t\\t\\t\\t\\titem.getAsString(function(str){\\n\\t\\t\\t\\t\\t\\tvar tiddlerFields self.wiki.deserializeTiddlers(null,str,{title: fallbackTitle},{deserializer:self.dropzoneDeserializer});\\n\\t\\t\\t\\t\\t\\tif(tiddlerFields && tiddlerFields.length) {\\n\\t\\t\\t\\t\\t\\t\\treadFileCallback(tiddlerFields);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t$tw.utils.importPaste(item,fallbackTitle,readFileCallback);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(item.kind \\\string\\\) {\\n\\t\\t\\t\\t// Create tiddlers from string items\\n\\t\\t\\t\\tvar tiddlerFields;\\n\\t\\t\\t\\t// Its important to give getAsString a closure with the right type\\n\\t\\t\\t\\t// So it can be added to the import queue\\n\\t\\t\\t\\titem.getAsString(getItem(item.type));\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Tell the browser that weve handled the paste\\n\\t\\tevent.stopPropagation();\\n\\t\\tevent.preventDefault();\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDropZoneWidget.prototype.execute function() {\\n\\tthis.dropzoneClass this.getAttribute(\\\class\\\);\\n\\tthis.dropzoneDeserializer this.getAttribute(\\\deserializer\\\);\\n\\tthis.dropzoneEnable (this.getAttribute(\\\enable\\\) || \\\yes\\\) \\\yes\\\;\\n\\tthis.autoOpenOnImport this.getAttribute(\\\autoOpenOnImport\\\);\\n\\tthis.importTitle this.getAttribute(\\\importTitle\\\,IMPORT_TITLE);\\n\\tthis.actions this.getAttribute(\\\actions\\\);\\n\\tthis.contentTypesFilter this.getAttribute(\\\contentTypesFilter\\\);\\n\\tthis.filesOnly this.getAttribute(\\\filesOnly\\\,\\\no\\\) \\\yes\\\;\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDropZoneWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.dropzone DropZoneWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/edit-binary.js\:{\title\:\$:/core/modules/widgets/edit-binary.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/edit-binary.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit-binary widget; placeholder for editing binary tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar BINARY_WARNING_MESSAGE \\\$:/core/ui/BinaryWarning\\\;\\nvar EXPORT_BUTTON_IMAGE \\\$:/core/images/export-button\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EditBinaryWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEditBinaryWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEditBinaryWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEditBinaryWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tvar editTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tvar tiddler this.wiki.getTiddler(editTitle);\\n\\tvar type tiddler.fields.type;\\n\\tvar text tiddler.fields.text;\\n\\t// Transclude the binary data tiddler warning message\\n\\tvar warn {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\p\\\,\\n\\t\\tchildren: {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {type: \\\string\\\, value: BINARY_WARNING_MESSAGE}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Create download link based on draft tiddler title\\n\\tvar link {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\a\\\,\\n\\t\\tattributes: {\\n\\t\\t\\ttitle: {type: \\\indirect\\\, textReference: \\\!!draft.title\\\},\\n\\t\\t\\tdownload: {type: \\\indirect\\\, textReference: \\\!!draft.title\\\}\\n\\t\\t},\\n\\t\\tchildren: {\\n\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\ttiddler: {type: \\\string\\\, value: EXPORT_BUTTON_IMAGE}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Set the link href to internal data URI (no external)\\n\\tif(text) {\\n\\t\\tlink.attributes.href {\\n\\t\\t\\ttype: \\\string\\\, \\n\\t\\t\\tvalue: \\\data:\\\ + type + \\\;base64,\\\ + text\\n\\t\\t};\\n\\t}\\n\\t// Combine warning message and download link in a div\\n\\tvar element {\\n\\t\\ttype: \\\element\\\,\\n\\t\\ttag: \\\div\\\,\\n\\t\\tattributes: {\\n\\t\\t\\tclass: {type: \\\string\\\, value: \\\tc-binary-warning\\\}\\n\\t\\t},\\n\\t\\tchildren: warn, link\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(element);\\n};\\n\\n/*\\nRefresh by refreshing our child widget\\n*/\\nEditBinaryWidget.prototype.refresh function(changedTiddlers) {\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports\\\edit-binary\\\ EditBinaryWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/edit-bitmap.js\:{\title\:\$:/core/modules/widgets/edit-bitmap.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit-bitmap widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n// Default image sizes\\nvar DEFAULT_IMAGE_WIDTH 600,\\n\\tDEFAULT_IMAGE_HEIGHT 370,\\n\\tDEFAULT_IMAGE_TYPE \\\image/png\\\;\\n\\n// Configuration tiddlers\\nvar LINE_WIDTH_TITLE \\\$:/config/BitmapEditor/LineWidth\\\,\\n\\tLINE_COLOUR_TITLE \\\$:/config/BitmapEditor/Colour\\\,\\n\\tLINE_OPACITY_TITLE \\\$:/config/BitmapEditor/Opacity\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EditBitmapWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEditBitmapWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEditBitmapWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Initialise the editor operations if theyve not been done already\\n\\tif(!this.editorOperations) {\\n\\t\\tEditBitmapWidget.prototype.editorOperations {};\\n\\t\\t$tw.modules.applyMethods(\\\bitmapeditoroperation\\\,this.editorOperations);\\n\\t}\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create the wrapper for the toolbar and render its content\\n\\tthis.toolbarNode this.document.createElement(\\\div\\\);\\n\\tthis.toolbarNode.className \\\tc-editor-toolbar\\\;\\n\\tparent.insertBefore(this.toolbarNode,nextSibling);\\n\\tthis.domNodes.push(this.toolbarNode);\\n\\t// Create the on-screen canvas\\n\\tthis.canvasDomNode $tw.utils.domMaker(\\\canvas\\\,{\\n\\t\\tdocument: this.document,\\n\\t\\t\\\class\\\:\\\tc-edit-bitmapeditor\\\,\\n\\t\\teventListeners: {\\n\\t\\t\\tname: \\\touchstart\\\, handlerObject: this, handlerMethod: \\\handleTouchStartEvent\\\\\n\\t\\t},{\\n\\t\\t\\tname: \\\touchmove\\\, handlerObject: this, handlerMethod: \\\handleTouchMoveEvent\\\\\n\\t\\t},{\\n\\t\\t\\tname: \\\touchend\\\, handlerObject: this, handlerMethod: \\\handleTouchEndEvent\\\\\n\\t\\t},{\\n\\t\\t\\tname: \\\mousedown\\\, handlerObject: this, handlerMethod: \\\handleMouseDownEvent\\\\\n\\t\\t},{\\n\\t\\t\\tname: \\\mousemove\\\, handlerObject: this, handlerMethod: \\\handleMouseMoveEvent\\\\\n\\t\\t},{\\n\\t\\t\\tname: \\\mouseup\\\, handlerObject: this, handlerMethod: \\\handleMouseUpEvent\\\\\n\\t\\t}\\n\\t});\\n\\t// Set the width and height variables\\n\\tthis.setVariable(\\\tv-bitmap-editor-width\\\,this.canvasDomNode.width + \\\px\\\);\\n\\tthis.setVariable(\\\tv-bitmap-editor-height\\\,this.canvasDomNode.height + \\\px\\\);\\n\\t// Render toolbar child widgets\\n\\tthis.renderChildren(this.toolbarNode,null);\\n\\t// // Insert the elements into the DOM\\n\\tparent.insertBefore(this.canvasDomNode,nextSibling);\\n\\tthis.domNodes.push(this.canvasDomNode);\\n\\t// Load the image into the canvas\\n\\tif($tw.browser) {\\n\\t\\tthis.loadCanvas();\\n\\t}\\n\\t// Add widget message listeners\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-edit-bitmap-operation\\\, handler: \\\handleEditBitmapOperationMessage\\\}\\n\\t);\\n};\\n\\n/*\\nHandle an edit bitmap operation message from the toolbar\\n*/\\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage function(event) {\\n\\t// Invoke the handler\\n\\tvar handler this.editorOperationsevent.param;\\n\\tif(handler) {\\n\\t\\thandler.call(this,event);\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEditBitmapWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.editTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nJust refresh the toolbar\\n*/\\nEditBitmapWidget.prototype.refresh function(changedTiddlers) {\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nSet the bitmap size variables and refresh the toolbar\\n*/\\nEditBitmapWidget.prototype.refreshToolbar function() {\\n\\t// Set the width and height variables\\n\\tthis.setVariable(\\\tv-bitmap-editor-width\\\,this.canvasDomNode.width + \\\px\\\);\\n\\tthis.setVariable(\\\tv-bitmap-editor-height\\\,this.canvasDomNode.height + \\\px\\\);\\n\\t// Refresh each of our child widgets\\n\\t$tw.utils.each(this.children,function(childWidget) {\\n\\t\\tchildWidget.refreshSelf();\\n\\t});\\n};\\n\\nEditBitmapWidget.prototype.loadCanvas function() {\\n\\tvar tiddler this.wiki.getTiddler(this.editTitle),\\n\\t\\tcurrImage new Image();\\n\\t// Set up event handlers for loading the image\\n\\tvar self this;\\n\\tcurrImage.onload function() {\\n\\t\\t// Copy the image to the on-screen canvas\\n\\t\\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\\n\\t\\t// And also copy the current bitmap to the off-screen canvas\\n\\t\\tself.currCanvas self.document.createElement(\\\canvas\\\);\\n\\t\\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\\n\\t\\t// Set the width and height input boxes\\n\\t\\tself.refreshToolbar();\\n\\t};\\n\\tcurrImage.onerror function() {\\n\\t\\t// Set the on-screen canvas size and clear it\\n\\t\\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\\n\\t\\t// Set the off-screen canvas size and clear it\\n\\t\\tself.currCanvas self.document.createElement(\\\canvas\\\);\\n\\t\\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\\n\\t\\t// Set the width and height input boxes\\n\\t\\tself.refreshToolbar();\\n\\t};\\n\\t// Get the current bitmap into an image object\\n\\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\\n\\t\\tcurrImage.src \\\data:\\\ + tiddler.fields.type + \\\;base64,\\\ + tiddler.fields.text;\\n\\t} else {\\n\\t\\tcurrImage.width DEFAULT_IMAGE_WIDTH;\\n\\t\\tcurrImage.height DEFAULT_IMAGE_HEIGHT;\\n\\t\\tcurrImage.onerror();\\n\\t}\\n};\\n\\nEditBitmapWidget.prototype.initCanvas function(canvas,width,height,image) {\\n\\tcanvas.width width;\\n\\tcanvas.height height;\\n\\tvar ctx canvas.getContext(\\\2d\\\);\\n\\tif(image) {\\n\\t\\tctx.drawImage(image,0,0);\\n\\t} else {\\n\\t\\tctx.fillStyle \\\#fff\\\;\\n\\t\\tctx.fillRect(0,0,canvas.width,canvas.height);\\n\\t}\\n};\\n\\n/*\\n** Change the size of the canvas, preserving the current image\\n*/\\nEditBitmapWidget.prototype.changeCanvasSize function(newWidth,newHeight) {\\n\\t// Create and size a new canvas\\n\\tvar newCanvas this.document.createElement(\\\canvas\\\);\\n\\tthis.initCanvas(newCanvas,newWidth,newHeight);\\n\\t// Copy the old image\\n\\tvar ctx newCanvas.getContext(\\\2d\\\);\\n\\tctx.drawImage(this.currCanvas,0,0);\\n\\t// Set the new canvas as the current one\\n\\tthis.currCanvas newCanvas;\\n\\t// Set the size of the onscreen canvas\\n\\tthis.canvasDomNode.width newWidth;\\n\\tthis.canvasDomNode.height newHeight;\\n\\t// Paint the onscreen canvas with the offscreen canvas\\n\\tctx this.canvasDomNode.getContext(\\\2d\\\);\\n\\tctx.drawImage(this.currCanvas,0,0);\\n};\\n\\n/*\\n** Rotate the canvas left by 90 degrees\\n*/\\nEditBitmapWidget.prototype.rotateCanvasLeft function() {\\n\\t// Get the current size of the image\\n\\tvar origWidth this.currCanvas.width,\\n\\t\\torigHeight this.currCanvas.height;\\n\\t// Create and size a new canvas\\n\\tvar newCanvas this.document.createElement(\\\canvas\\\),\\n\\t\\tnewWidth origHeight,\\n\\t\\tnewHeight origWidth;\\n\\tthis.initCanvas(newCanvas,newWidth,newHeight);\\n\\t// Copy the old image\\n\\tvar ctx newCanvas.getContext(\\\2d\\\);\\n\\tctx.save();\\n\\tctx.translate(newWidth / 2,newHeight / 2);\\n\\tctx.rotate(-Math.PI / 2);\\n\\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\\n\\tctx.restore();\\n\\t// Set the new canvas as the current one\\n\\tthis.currCanvas newCanvas;\\n\\t// Set the size of the onscreen canvas\\n\\tthis.canvasDomNode.width newWidth;\\n\\tthis.canvasDomNode.height newHeight;\\n\\t// Paint the onscreen canvas with the offscreen canvas\\n\\tctx this.canvasDomNode.getContext(\\\2d\\\);\\n\\tctx.drawImage(this.currCanvas,0,0);\\n};\\n\\nEditBitmapWidget.prototype.handleTouchStartEvent function(event) {\\n\\tthis.brushDown true;\\n\\tthis.strokeStart(event.touches0.clientX,event.touches0.clientY);\\n\\tevent.preventDefault();\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nEditBitmapWidget.prototype.handleTouchMoveEvent function(event) {\\n\\tif(this.brushDown) {\\n\\t\\tthis.strokeMove(event.touches0.clientX,event.touches0.clientY);\\n\\t}\\n\\tevent.preventDefault();\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nEditBitmapWidget.prototype.handleTouchEndEvent function(event) {\\n\\tif(this.brushDown) {\\n\\t\\tthis.brushDown false;\\n\\t\\tthis.strokeEnd();\\n\\t}\\n\\tevent.preventDefault();\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nEditBitmapWidget.prototype.handleMouseDownEvent function(event) {\\n\\tthis.strokeStart(event.clientX,event.clientY);\\n\\tthis.brushDown true;\\n\\tevent.preventDefault();\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\nEditBitmapWidget.prototype.handleMouseMoveEvent function(event) {\\n\\tif(this.brushDown) {\\n\\t\\tthis.strokeMove(event.clientX,event.clientY);\\n\\t\\tevent.preventDefault();\\n\\t\\tevent.stopPropagation();\\n\\t\\treturn false;\\n\\t}\\n\\treturn true;\\n};\\n\\nEditBitmapWidget.prototype.handleMouseUpEvent function(event) {\\n\\tif(this.brushDown) {\\n\\t\\tthis.brushDown false;\\n\\t\\tthis.strokeEnd();\\n\\t\\tevent.preventDefault();\\n\\t\\tevent.stopPropagation();\\n\\t\\treturn false;\\n\\t}\\n\\treturn true;\\n};\\n\\nEditBitmapWidget.prototype.adjustCoordinates function(x,y) {\\n\\tvar canvasRect this.canvasDomNode.getBoundingClientRect(),\\n\\t\\tscale this.canvasDomNode.width/canvasRect.width;\\n\\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\\n};\\n\\nEditBitmapWidget.prototype.strokeStart function(x,y) {\\n\\t// Start off a new stroke\\n\\tthis.stroke this.adjustCoordinates(x,y);\\n};\\n\\nEditBitmapWidget.prototype.strokeMove function(x,y) {\\n\\tvar ctx this.canvasDomNode.getContext(\\\2d\\\),\\n\\t\\tt;\\n\\t// Add the new position to the end of the stroke\\n\\tthis.stroke.push(this.adjustCoordinates(x,y));\\n\\t// Redraw the previous image\\n\\tctx.drawImage(this.currCanvas,0,0);\\n\\t// Render the stroke\\n\\tctx.globalAlpha parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\\\1.0\\\));\\n\\tctx.strokeStyle this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\\\#ff0\\\);\\n\\tctx.lineWidth parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\\\3\\\));\\n\\tctx.lineCap \\\round\\\;\\n\\tctx.lineJoin \\\round\\\;\\n\\tctx.beginPath();\\n\\tctx.moveTo(this.stroke0.x,this.stroke0.y);\\n\\tfor(t1; t\u003Cthis.stroke.length-1; t++) {\\n\\t\\tvar s1 this.stroket,\\n\\t\\t\\ts2 this.stroket-1,\\n\\t\\t\\ttx (s1.x + s2.x)/2,\\n\\t\\t\\tty (s1.y + s2.y)/2;\\n\\t\\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\\n\\t}\\n\\tctx.stroke();\\n};\\n\\nEditBitmapWidget.prototype.strokeEnd function() {\\n\\t// Copy the bitmap to the off-screen canvas\\n\\tvar ctx this.currCanvas.getContext(\\\2d\\\);\\n\\tctx.drawImage(this.canvasDomNode,0,0);\\n\\t// Save the image into the tiddler\\n\\tthis.saveChanges();\\n};\\n\\nEditBitmapWidget.prototype.saveChanges function() {\\n\\tvar tiddler this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\\n\\t// data URIs look like \\\data:\u003Ctype>;base64,\u003Ctext>\\\\\n\\tvar dataURL this.canvasDomNode.toDataURL(tiddler.fields.type),\\n\\t\\tposColon dataURL.indexOf(\\\:\\\),\\n\\t\\tposSemiColon dataURL.indexOf(\\\;\\\),\\n\\t\\tposComma dataURL.indexOf(\\\,\\\),\\n\\t\\ttype dataURL.substring(posColon+1,posSemiColon),\\n\\t\\ttext dataURL.substring(posComma+1);\\n\\tvar update {type: type, text: text};\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\\n};\\n\\nexports\\\edit-bitmap\\\ EditBitmapWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/edit-shortcut.js\:{\title\:\$:/core/modules/widgets/edit-shortcut.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to display an editable keyboard shortcut\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EditShortcutWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEditShortcutWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEditShortcutWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.inputNode this.document.createElement(\\\input\\\);\\n\\t// Assign classes\\n\\tif(this.shortcutClass) {\\n\\t\\tthis.inputNode.className this.shortcutClass;\\n\\t}\\n\\t// Assign other attributes\\n\\tif(this.shortcutStyle) {\\n\\t\\tthis.inputNode.setAttribute(\\\style\\\,this.shortcutStyle);\\n\\t}\\n\\tif(this.shortcutTooltip) {\\n\\t\\tthis.inputNode.setAttribute(\\\title\\\,this.shortcutTooltip);\\n\\t}\\n\\tif(this.shortcutPlaceholder) {\\n\\t\\tthis.inputNode.setAttribute(\\\placeholder\\\,this.shortcutPlaceholder);\\n\\t}\\n\\tif(this.shortcutAriaLabel) {\\n\\t\\tthis.inputNode.setAttribute(\\\aria-label\\\,this.shortcutAriaLabel);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tthis.inputNode.setAttribute(\\\disabled\\\, true);\\n\\t}\\n\\t// Assign the current shortcut\\n\\tthis.updateInputNode();\\n\\t// Add event handlers\\n\\t$tw.utils.addEventListeners(this.inputNode,\\n\\t\\t{name: \\\keydown\\\, handlerObject: this, handlerMethod: \\\handleKeydownEvent\\\}\\n\\t);\\n\\t// Link into the DOM\\n\\tparent.insertBefore(this.inputNode,nextSibling);\\n\\tthis.domNodes.push(this.inputNode);\\n\\t// Focus the input Node if focus \\\yes\\\ or focus \\\true\\\\\n\\tif(this.shortcutFocus \\\yes\\\ || this.shortcutFocus \\\true\\\) {\\n\\t\\tthis.focus();\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEditShortcutWidget.prototype.execute function() {\\n\\tthis.shortcutTiddler this.getAttribute(\\\tiddler\\\);\\n\\tthis.shortcutField this.getAttribute(\\\field\\\);\\n\\tthis.shortcutIndex this.getAttribute(\\\index\\\);\\n\\tthis.shortcutPlaceholder this.getAttribute(\\\placeholder\\\);\\n\\tthis.shortcutDefault this.getAttribute(\\\default\\\,\\\\\\);\\n\\tthis.shortcutClass this.getAttribute(\\\class\\\);\\n\\tthis.shortcutStyle this.getAttribute(\\\style\\\);\\n\\tthis.shortcutTooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis.shortcutAriaLabel this.getAttribute(\\\aria-label\\\);\\n\\tthis.shortcutFocus this.getAttribute(\\\focus\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\, \\\no\\\);\\n};\\n\\n/*\\nUpdate the value of the input node\\n*/\\nEditShortcutWidget.prototype.updateInputNode function() {\\n\\tif(this.shortcutField) {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.shortcutTiddler);\\n\\t\\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\\n\\t\\t\\tthis.inputNode.value tiddler.getFieldString(this.shortcutField);\\n\\t\\t} else {\\n\\t\\t\\tthis.inputNode.value this.shortcutDefault;\\n\\t\\t}\\n\\t} else if(this.shortcutIndex) {\\n\\t\\tthis.inputNode.value this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\\n\\t} else {\\n\\t\\tthis.inputNode.value this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\\n\\t}\\n};\\n\\n/*\\nHandle a dom \\\keydown\\\ event\\n*/\\nEditShortcutWidget.prototype.handleKeydownEvent function(event) {\\n\\t// Ignore shift, ctrl, meta, alt\\n\\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) -1) {\\n\\t\\t// Get the shortcut text representation\\n\\t\\tvar value $tw.keyboardManager.getPrintableShortcuts({\\n\\t\\t\\tctrlKey: event.ctrlKey,\\n\\t\\t\\tshiftKey: event.shiftKey,\\n\\t\\t\\taltKey: event.altKey,\\n\\t\\t\\tmetaKey: event.metaKey,\\n\\t\\t\\tkeyCode: event.keyCode\\n\\t\\t});\\n\\t\\tif(value.length > 0) {\\n\\t\\t\\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value0);\\n\\t\\t}\\n\\t\\t// Ignore the keydown if it was already handled\\n\\t\\tevent.preventDefault();\\n\\t\\tevent.stopPropagation();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\n/*\\nfocus the input node\\n*/\\nEditShortcutWidget.prototype.focus function() {\\n\\tif(this.inputNode.focus && this.inputNode.select) {\\n\\t\\tthis.inputNode.focus();\\n\\t\\tthis.inputNode.select();\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\\n*/\\nEditShortcutWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes\\\default\\\ || changedAttributes\\\class\\\ || changedAttributes.style || changedAttributes.tooltip || changedAttributes\\\aria-label\\\ || changedAttributes.focus || changedAttributes.disabled) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedTiddlersthis.shortcutTiddler) {\\n\\t\\tthis.updateInputNode();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports\\\edit-shortcut\\\ EditShortcutWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/edit-text.js\:{\title\:\$:/core/modules/widgets/edit-text.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/edit-text.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit-text widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar editTextWidgetFactory require(\\\$:/core/modules/editor/factory.js\\\).editTextWidgetFactory,\\n\\tFramedEngine require(\\\$:/core/modules/editor/engines/framed.js\\\).FramedEngine,\\n\\tSimpleEngine require(\\\$:/core/modules/editor/engines/simple.js\\\).SimpleEngine;\\n\\nexports\\\edit-text\\\ editTextWidgetFactory(FramedEngine,SimpleEngine);\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/edit.js\:{\title\:\$:/core/modules/widgets/edit.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/edit.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit widget is a meta-widget chooses the appropriate actual editting widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EditWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEditWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEditWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n// Mappings from content type to editor type are stored in tiddlers with this prefix\\nvar EDITOR_MAPPING_PREFIX \\\$:/config/EditorTypeMappings/\\\;\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEditWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.editTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.editField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\t// Choose the appropriate edit widget\\n\\tthis.editorType this.getEditorType();\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets({\\n\\t\\ttype: \\\edit-\\\ + this.editorType,\\n\\t\\tattributes: this.parseTreeNode.attributes,\\n\\t\\tchildren: this.parseTreeNode.children\\n\\t});\\n};\\n\\nEditWidget.prototype.getEditorType function() {\\n\\t// Get the content type of the thing were editing\\n\\tvar type;\\n\\tif(this.editField \\\text\\\) {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.editTitle);\\n\\t\\tif(tiddler) {\\n\\t\\t\\ttype tiddler.fields.type;\\n\\t\\t}\\n\\t}\\n\\ttype type || \\\text/vnd.tiddlywiki\\\;\\n\\tvar editorType this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\\n\\tif(!editorType) {\\n\\t\\tvar typeInfo $tw.config.contentTypeInfotype;\\n\\t\\tif(typeInfo && typeInfo.encoding \\\base64\\\) {\\n\\t\\t\\teditorType \\\binary\\\;\\n\\t\\t} else {\\n\\t\\t\\teditorType \\\text\\\;\\n\\t\\t}\\n\\t}\\n\\treturn editorType;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nEditWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\t// Refresh if the editor type has changed\\n\\tif(changedAttributes.tiddler || changedAttributes.field || (this.getEditorType() ! this.editorType)) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.edit EditWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/element.js\:{\title\:\$:/core/modules/widgets/element.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/element.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nElement widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ElementWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nElementWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nElementWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\t// Neuter blacklisted elements\\n\\tthis.tag this.parseTreeNode.tag;\\n\\tif($tw.config.htmlUnsafeElements.indexOf(this.tag) ! -1) {\\n\\t\\tthis.tag \\\safe-\\\ + this.tag;\\n\\t}\\n\\t// Restrict tag name to digits, letts and dashes\\n\\tthis.tag this.tag.replace(/^0-9a-zA-Z\\\\-/mg,\\\\\\);\\n\\t// Default to a span\\n\\tthis.tag this.tag || \\\span\\\;\\n\\t// Adjust headings by the current base level\\n\\tvar headingLevel \\\h1\\\,\\\h2\\\,\\\h3\\\,\\\h4\\\,\\\h5\\\,\\\h6\\\.indexOf(this.tag);\\n\\tif(headingLevel ! -1) {\\n\\t\\tvar baseLevel parseInt(this.getVariable(\\\tv-adjust-heading-level\\\,\\\0\\\),10) || 0;\\n\\t\\theadingLevel Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\\n\\t\\tthis.tag \\\h\\\ + headingLevel;\\n\\t}\\n\\t// Select the namespace for the tag\\n\\tvar XHTML_NAMESPACE \\\http://www.w3.org/1999/xhtml\\\,\\n\\t\\ttagNamespaces {\\n\\t\\t\\tsvg: \\\http://www.w3.org/2000/svg\\\,\\n\\t\\t\\tmath: \\\http://www.w3.org/1998/Math/MathML\\\,\\n\\t\\t\\tbody: XHTML_NAMESPACE\\n\\t\\t};\\n\\tthis.namespace tagNamespacesthis.tag;\\n\\tif(this.namespace) {\\n\\t\\tthis.setVariable(\\\namespace\\\,this.namespace);\\n\\t} else {\\n\\t\\tif(this.hasAttribute(\\\xmlns\\\)) {\\n\\t\\t\\tthis.namespace this.getAttribute(\\\xmlns\\\);\\n\\t\\t\\tthis.setVariable(\\\namespace\\\,this.namespace);\\n\\t\\t} else {\\n\\t\\t\\tthis.namespace this.getVariable(\\\namespace\\\,{defaultValue: XHTML_NAMESPACE});\\n\\t\\t}\\n\\t}\\n\\t// Invoke the th-rendering-element hook\\n\\tvar parseTreeNodes $tw.hooks.invokeHook(\\\th-rendering-element\\\,null,this);\\n\\tthis.isReplaced !!parseTreeNodes;\\n\\tif(parseTreeNodes) {\\n\\t\\t// Use the parse tree nodes provided by the hook\\n\\t\\tthis.makeChildWidgets(parseTreeNodes);\\n\\t\\tthis.renderChildren(this.parentDomNode,null);\\n\\t\\treturn;\\n\\t}\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n\\t// Create the DOM node and render children\\n\\tvar domNode this.document.createElementNS(this.namespace,this.tag);\\n\\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nElementWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\thasChangedAttributes $tw.utils.count(changedAttributes) > 0;\\n\\tif(hasChangedAttributes) {\\n\\t\\tif(!this.isReplaced) {\\n\\t\\t\\t// Update our attributes\\n\\t\\t\\tthis.assignAttributes(this.domNodes0,{excludeEventAttributes: true});\\n\\t\\t} else {\\n\\t\\t\\t// If we were replaced then completely refresh ourselves\\n\\t\\t\\treturn this.refreshSelf();\\n\\t\\t}\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\\n};\\n\\nexports.element ElementWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/encrypt.js\:{\title\:\$:/core/modules/widgets/encrypt.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/encrypt.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEncrypt widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EncryptWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEncryptWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEncryptWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar textNode this.document.createTextNode(this.encryptedText);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEncryptWidget.prototype.execute function() {\\n\\t// Get parameters from our attributes\\n\\tthis.filter this.getAttribute(\\\filter\\\,\\\!issystem\\\);\\n\\t// Encrypt the filtered tiddlers\\n\\tvar tiddlers this.wiki.filterTiddlers(this.filter),\\n\\t\\tjson {},\\n\\t\\tself this;\\n\\t$tw.utils.each(tiddlers,function(title) {\\n\\t\\tvar tiddler self.wiki.getTiddler(title),\\n\\t\\t\\tjsonTiddler {};\\n\\t\\tfor(var f in tiddler.fields) {\\n\\t\\t\\tjsonTiddlerf tiddler.getFieldString(f);\\n\\t\\t}\\n\\t\\tjsontitle jsonTiddler;\\n\\t});\\n\\tthis.encryptedText $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nEncryptWidget.prototype.refresh function(changedTiddlers) {\\n\\t// We dont need to worry about refreshing because the encrypt widget isnt for interactive use\\n\\treturn false;\\n};\\n\\nexports.encrypt EncryptWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/entity.js\:{\title\:\$:/core/modules/widgets/entity.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/entity.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nHTML entity widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EntityWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEntityWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEntityWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar entityString this.getAttribute(\\\entity\\\,this.parseTreeNode.entity || \\\\\\),\\n\\t\\ttextNode this.document.createTextNode($tw.utils.entityDecode(entityString));\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEntityWidget.prototype.execute function() {\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nEntityWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.entity) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.entity EntityWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/error.js\:{\title\:\$:/core/modules/widgets/error.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/error.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nError widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ErrorWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nErrorWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nErrorWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar message this.getAttribute(\\\$message\\\,\\\Unknown error\\\),\\n\\t\\tdomNode this.document.createElement(\\\span\\\);\\n\\tdomNode.appendChild(this.document.createTextNode(message));\\n\\tdomNode.className \\\tc-error\\\;\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nErrorWidget.prototype.execute function() {\\n\\t// Nothing to do for a text node\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nErrorWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$message\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.error ErrorWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/eventcatcher.js\:{\title\:\$:/core/modules/widgets/eventcatcher.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/eventcatcher.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEvent handler widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar EventWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nEventWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nEventWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create element\\n\\tvar tag this.parseTreeNode.isBlock ? \\\div\\\ : \\\span\\\;\\n\\tif(this.elementTag && $tw.config.htmlUnsafeElements.indexOf(this.elementTag) -1) {\\n\\t\\ttag this.elementTag;\\n\\t}\\n\\tvar domNode this.document.createElement(tag);\\n\\tthis.domNode domNode;\\n\\t// Assign classes\\n\\tthis.assignDomNodeClasses();\\n\\t// Add our event handler\\n\\t$tw.utils.each(this.types,function(type) {\\n\\t\\tdomNode.addEventListener(type,function(event) {\\n\\t\\t\\tvar selector self.getAttribute(\\\selector\\\),\\n\\t\\t\\t\\tmatchSelector self.getAttribute(\\\matchSelector\\\),\\n\\t\\t\\t\\tactions self.getAttribute(\\\$\\\+type) || self.getAttribute(\\\actions-\\\+type),\\n\\t\\t\\t\\tstopPropagation self.getAttribute(\\\stopPropagation\\\,\\\onaction\\\),\\n\\t\\t\\t\\tselectedNode event.target,\\n\\t\\t\\t\\tselectedNodeRect,\\n\\t\\t\\t\\tcatcherNodeRect,\\n\\t\\t\\t\\tvariables {};\\n\\t\\t\\t// Firefox can fire dragover and dragenter events on text nodes instead of their parents\\n\\t\\t\\tif(selectedNode.nodeType 3) {\\n\\t\\t\\t\\tselectedNode selectedNode.parentNode;\\n\\t\\t\\t}\\n\\t\\t\\t// Check that the selected node matches any matchSelector\\n\\t\\t\\tif(matchSelector && !$tw.utils.domMatchesSelector(selectedNode,matchSelector)) {\\n\\t\\t\\t\\treturn false;\\n\\t\\t\\t}\\n\\t\\t\\tif(selector) {\\n\\t\\t\\t\\t// Search ancestors for a node that matches the selector\\n\\t\\t\\t\\twhile(!$tw.utils.domMatchesSelector(selectedNode,selector) && selectedNode ! domNode) {\\n\\t\\t\\t\\t\\tselectedNode selectedNode.parentNode;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Exit if we didnt find one\\n\\t\\t\\t\\tif(selectedNode domNode) {\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Only set up variables if we have actions to invoke\\n\\t\\t\\t\\tif(actions) {\\n\\t\\t\\t\\t\\tvariables $tw.utils.collectDOMVariables(selectedNode,self.domNode,event);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// Execute our actions with the variables\\n\\t\\t\\tif(actions) {\\n\\t\\t\\t\\t// Add a variable for the modifier key\\n\\t\\t\\t\\tvariables.modifier $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\t\\t\\t// Add a variable for the mouse button\\n\\t\\t\\t\\tif(\\\button\\\ in event) {\\n\\t\\t\\t\\t\\tif(event.button 0) {\\n\\t\\t\\t\\t\\t\\tvariables\\\event-mousebutton\\\ \\\left\\\;\\n\\t\\t\\t\\t\\t} else if(event.button 1) {\\n\\t\\t\\t\\t\\t\\tvariables\\\event-mousebutton\\\ \\\middle\\\;\\n\\t\\t\\t\\t\\t} else if(event.button 2) {\\n\\t\\t\\t\\t\\t\\tvariables\\\event-mousebutton\\\ \\\right\\\;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvariables\\\event-type\\\ event.type.toString();\\n\\t\\t\\t\\tif(typeof event.detail \\\object\\\ && !!event.detail) {\\n\\t\\t\\t\\t\\t$tw.utils.each(event.detail,function(detailValue,detail) {\\n\\t\\t\\t\\t\\t\\tvariables\\\event-detail-\\\ + detail detailValue.toString();\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else if(!!event.detail) {\\n\\t\\t\\t\\t\\tvariables\\\event-detail\\\ event.detail.toString();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.invokeActionString(actions,self,event,variables);\\n\\t\\t\\t}\\n\\t\\t\\tif((actions && stopPropagation \\\onaction\\\) || stopPropagation \\\always\\\) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\treturn false;\\n\\t\\t},false);\\n\\t});\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nEventWidget.prototype.execute function() {\\n\\tvar self this;\\n\\t// Get attributes that require a refresh on change\\n\\tthis.types ;\\n\\t$tw.utils.each(this.attributes,function(value,key) {\\n\\t\\tif(key.charAt(0) \\\$\\\) {\\n\\t\\t\\tself.types.push(key.slice(1));\\n\\t\\t}\\n\\t});\\n\\tif(!this.types.length) {\\n\\t\\tthis.types this.getAttribute(\\\events\\\,\\\\\\).split(\\\ \\\);\\n\\t}\\n\\tthis.elementTag this.getAttribute(\\\tag\\\);\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\nEventWidget.prototype.assignDomNodeClasses function() {\\n\\tvar classes this.getAttribute(\\\class\\\,\\\\\\).split(\\\ \\\);\\n\\tclasses.push(\\\tc-eventcatcher\\\);\\n\\tthis.domNode.className classes.join(\\\ \\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nEventWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\tchangedAttributesCount $tw.utils.count(changedAttributes);\\n\\tif(changedAttributesCount 1 && changedAttributes\\\class\\\) {\\n\\t\\tthis.assignDomNodeClasses();\\n\\t} else if(changedAttributesCount > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.eventcatcher EventWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/fieldmangler.js\:{\title\:\$:/core/modules/widgets/fieldmangler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/fieldmangler.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nField mangler widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FieldManglerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFieldManglerWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nFieldManglerWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-remove-field\\\, handler: \\\handleRemoveFieldEvent\\\},\\n\\t\\t{type: \\\tm-add-field\\\, handler: \\\handleAddFieldEvent\\\},\\n\\t\\t{type: \\\tm-remove-tag\\\, handler: \\\handleRemoveTagEvent\\\},\\n\\t\\t{type: \\\tm-add-tag\\\, handler: \\\handleAddTagEvent\\\}\\n\\t);\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nFieldManglerWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.mangleTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nFieldManglerWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tiddler) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nFieldManglerWidget.prototype.handleRemoveFieldEvent function(event) {\\n\\tvar tiddler this.wiki.getTiddler(this.mangleTitle),\\n\\t\\tdeletion {};\\n\\tdeletionevent.param undefined;\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\\n\\treturn false;\\n};\\n\\nFieldManglerWidget.prototype.handleAddFieldEvent function(event) {\\n\\tvar tiddler this.wiki.getTiddler(this.mangleTitle),\\n\\t\\taddition this.wiki.getModificationFields(),\\n\\t\\taddField function(name,value) {\\n\\t\\t\\tvar trimmedName name.trim();\\n\\t\\t\\tif(!value && tiddler) {\\n\\t\\t\\t\\tvalue tiddler.fieldstrimmedName;\\n\\t\\t\\t}\\n\\t\\t\\tadditiontrimmedName value || \\\\\\;\\n\\t\\t\\treturn;\\n\\t\\t};\\n\\taddition.title this.mangleTitle;\\n\\tif(typeof event.param \\\string\\\) {\\n\\t\\taddField(event.param,\\\\\\);\\n\\t}\\n\\tif(typeof event.paramObject \\\object\\\) {\\n\\t\\tfor(var name in event.paramObject) {\\n\\t\\t\\taddField(name,event.paramObjectname);\\n\\t\\t}\\n\\t}\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\\n\\treturn false;\\n};\\n\\nFieldManglerWidget.prototype.handleRemoveTagEvent function(event) {\\n\\tvar tiddler this.wiki.getTiddler(this.mangleTitle),\\n\\t\\tmodification this.wiki.getModificationFields();\\n\\tif(tiddler && tiddler.fields.tags) {\\n\\t\\tvar p tiddler.fields.tags.indexOf(event.param);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tmodification.tags (tiddler.fields.tags || ).slice(0);\\n\\t\\t\\tmodification.tags.splice(p,1);\\n\\t\\t\\tif(modification.tags.length 0) {\\n\\t\\t\\t\\tmodification.tags undefined;\\n\\t\\t\\t}\\n\\t\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\nFieldManglerWidget.prototype.handleAddTagEvent function(event) {\\n\\tvar tiddler this.wiki.getTiddler(this.mangleTitle),\\n\\t\\tmodification this.wiki.getModificationFields();\\n\\tif(tiddler && typeof event.param \\\string\\\) {\\n\\t\\tvar tag event.param.trim();\\n\\t\\tif(tag ! \\\\\\) {\\n\\t\\t\\tmodification.tags (tiddler.fields.tags || ).slice(0);\\n\\t\\t\\t$tw.utils.pushTop(modification.tags,tag);\\n\\t\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\\n\\t\\t}\\n\\t} else if(typeof event.param \\\string\\\ && event.param.trim() ! \\\\\\ && this.mangleTitle.trim() ! \\\\\\) {\\n\\t\\tvar tag ;\\n\\t\\ttag.push(event.param.trim());\\n\\t\\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.fieldmangler FieldManglerWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/fields.js\:{\title\:\$:/core/modules/widgets/fields.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/fields.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nFields widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FieldsWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFieldsWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nFieldsWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar textNode this.document.createTextNode(this.text);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nFieldsWidget.prototype.execute function() {\\n\\t// Get parameters from our attributes\\n\\tthis.tiddlerTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.template this.getAttribute(\\\template\\\);\\n\\tthis.sort this.getAttribute(\\\sort\\\,\\\yes\\\) \\\yes\\\;\\n\\tthis.sortReverse this.getAttribute(\\\sortReverse\\\,\\\no\\\) \\\yes\\\;\\n\\tthis.exclude this.getAttribute(\\\exclude\\\);\\n\\tthis.include this.getAttribute(\\\include\\\,null);\\n\\tthis.stripTitlePrefix this.getAttribute(\\\stripTitlePrefix\\\,\\\no\\\) \\\yes\\\;\\n\\t// Get the value to display\\n\\tvar tiddler this.wiki.getTiddler(this.tiddlerTitle);\\n\\n\\t// Get the inclusion and exclusion list\\n\\tvar excludeArr (this.exclude) ? this.exclude.split(\\\ \\\) : \\\text\\\;\\n\\t// Include takes precedence\\n\\tvar includeArr (this.include) ? this.include.split(\\\ \\\) : null;\\n\\n\\t// Compose the template\\n\\tvar text ;\\n\\tif(this.template && tiddler) {\\n\\t\\tvar fields ;\\n\\t\\tif (includeArr) { // Include takes precedence\\n\\t\\t\\tfor(var i0; i\u003CincludeArr.length; i++) {\\n\\t\\t\\t\\tif(tiddler.fieldsincludeArri) {\\n\\t\\t\\t\\t\\tfields.push(includeArri);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tfor(var fieldName in tiddler.fields) {\\n\\t\\t\\t\\tif(excludeArr.indexOf(fieldName) -1) {\\n\\t\\t\\t\\t\\tfields.push(fieldName);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (this.sort) fields.sort();\\n\\t\\tif (this.sortReverse) fields.reverse();\\n\\t\\tfor(var f0, fmaxfields.length; f\u003Cfmax; f++) {\\n\\t\\t\\tfieldName fieldsf;\\n\\t\\t\\tvar row this.template,\\n\\t\\t\\t\\tvalue tiddler.getFieldString(fieldName);\\n\\t\\t\\tif(this.stripTitlePrefix && fieldName \\\title\\\) {\\n\\t\\t\\t\\tvar reStrip /^\\\\{^\\\\}+\\\\}(.+)/mg,\\n\\t\\t\\t\\t\\treMatch reStrip.exec(value);\\n\\t\\t\\t\\tif(reMatch) {\\n\\t\\t\\t\\t\\tvalue reMatch1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\trow $tw.utils.replaceString(row,\\\$name$\\\,fieldName);\\n\\t\\t\\trow $tw.utils.replaceString(row,\\\$value$\\\,value);\\n\\t\\t\\trow $tw.utils.replaceString(row,\\\$encoded_value$\\\,$tw.utils.htmlEncode(value));\\n\\t\\t\\ttext.push(row);\\n\\t\\t}\\n\\t}\\n\\tthis.text text.join(\\\\\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nFieldsWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\\n\\t\\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\\n\\t\\tchangedTiddlersthis.tiddlerTitle || changedAttributes.stripTitlePrefix) {\\n\\t\\t\\tthis.refreshSelf();\\n\\t\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.fields FieldsWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/fill.js\:{\title\:\$:/core/modules/widgets/fill.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/fill.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nSub-widget used by the transclude widget for specifying values for slots within transcluded content. It doesnt do anything by itself because the transclude widget only ever deals with the parse tree nodes, and doesnt instantiate the widget itself\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FillWidget function(parseTreeNode,options) {\\n\\t// Initialise\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFillWidget.prototype new Widget();\\n\\nFillWidget.prototype.execute function() {\\n\\t// Do nothing. Make no child widgets. $Fill widgets should be invisible when naturally encountered. Instead, their parseTreeNodes are made available to $slot widgets that want it.\\n};\\n\\nexports.fill FillWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/genesis.js\:{\title\:\$:/core/modules/widgets/genesis.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/genesis.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nGenesis widget for dynamically creating widgets\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar GenesisWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nGenesisWidget.prototype new Widget();\\n\\nGenesisWidget.prototype.computeAttributes function(options) {\\n\\toptions options || Object.create(null);\\n\\toptions.filterFn function(name) {\\n\\t\\t// Only compute our own attributes which start with a single dollar\\n\\t\\treturn name.charAt(0) \\\$\\\ && name.charAt(1) ! \\\$\\\;\\n\\t}\\n\\treturn Widget.prototype.computeAttributes.call(this,options);\\n};\\n\\n/*\\nRender this widget into the DOM\\n*/\\nGenesisWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nGenesisWidget.prototype.execute function() {\\n\\tvar self this;\\n\\t// Collect attributes\\n\\tthis.genesisType this.getAttribute(\\\$type\\\);\\n\\tthis.genesisRemappable this.getAttribute(\\\$remappable\\\,\\\yes\\\) \\\yes\\\;\\n\\tthis.genesisNames this.getAttribute(\\\$names\\\,\\\\\\);\\n\\tthis.genesisValues this.getAttribute(\\\$values\\\,\\\\\\);\\n\\tthis.genesisIsBlock this.getAttribute(\\\$mode\\\,this.parseTreeNode.isBlock && \\\block\\\) \\\block\\\;\\n\\t// Do not create a child widget if the $type attribute is missing or blank\\n\\tif(!this.genesisType) {\\n\\t\\tthis.makeChildWidgets(this.parseTreeNode.children);\\n\\t\\treturn;\\n\\t}\\n\\t// Construct parse tree\\n\\tvar isElementWidget this.genesisType.charAt(0) ! \\\$\\\,\\n\\t\\tnodeType isElementWidget ? \\\element\\\ : this.genesisType.substr(1),\\n\\t\\tnodeTag isElementWidget ? this.genesisType : undefined;\\n\\tvar parseTreeNodes {\\n\\t\\ttype: nodeType,\\n\\t\\ttag: nodeTag,\\n\\t\\tattributes: {},\\n\\t\\torderedAttributes: ,\\n\\t\\tisBlock: this.genesisIsBlock,\\n\\t\\tchildren: this.parseTreeNode.children || ,\\n\\t\\tisNotRemappable: !this.genesisRemappable\\n\\t};\\n\\t// Apply attributes in $names/$values\\n\\tthis.attributeNames ;\\n\\tthis.attributeValues ;\\n\\tif(this.genesisNames && this.genesisValues) {\\n\\t\\tthis.attributeNames this.wiki.filterTiddlers(self.genesisNames,this);\\n\\t\\tthis.attributeValues this.wiki.filterTiddlers(self.genesisValues,this);\\n\\t\\t$tw.utils.each(this.attributeNames,function(varname,index) {\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,varname,self.attributeValuesindex || \\\\\\);\\n\\t\\t});\\n\\t}\\n\\t// Apply explicit attributes\\n\\t$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(this.parseTreeNode),function(attribute) {\\n\\t\\tvar name attribute.name;\\n\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\tif(name.charAt(1) \\\$\\\) {\\n\\t\\t\\t\\t// Double $$ is changed to a single $\\n\\t\\t\\t\\tname name.substr(1);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Single dollar is ignored\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,$tw.utils.extend({},attribute,{name: name}));\\n\\t});\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nGenesisWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\tfilterNames this.getAttribute(\\\$names\\\,\\\\\\),\\n\\t\\tfilterValues this.getAttribute(\\\$values\\\,\\\\\\),\\n\\t\\tattributeNames this.wiki.filterTiddlers(filterNames,this),\\n\\t\\tattributeValues this.wiki.filterTiddlers(filterValues,this);\\n\\tif($tw.utils.count(changedAttributes) > 0 || !$tw.utils.isArrayEqual(this.attributeNames,attributeNames) || !$tw.utils.isArrayEqual(this.attributeValues,attributeValues)) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.genesis GenesisWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/image.js\:{\title\:\$:/core/modules/widgets/image.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/image.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\\n\\n```\\n\u003C$image src\\\TiddlerTitle\\\ width\\\320\\\ height\\\400\\\ class\\\classnames\\\>\\n```\\n\\nThe image source can be the title of an existing tiddler or the URL of an external image.\\n\\nExternal images always generate an HTML `\u003Cimg>` tag.\\n\\nTiddlers that have a _canonical_uri field generate an HTML `\u003Cimg>` tag with the src attribute containing the URI.\\n\\nTiddlers that contain image data generate an HTML `\u003Cimg>` tag with the src attribute containing a base64 representation of the image.\\n\\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\\n\\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \\\px\\\ suffix.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ImageWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nImageWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nImageWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create element\\n\\t// Determine what type of image it is\\n\\tvar tag \\\img\\\, src \\\\\\,\\n\\t\\ttiddler this.wiki.getTiddler(this.imageSource);\\n\\tif(!tiddler) {\\n\\t\\t// The source isnt the title of a tiddler, so well assume its a URL\\n\\t\\tsrc this.getVariable(\\\tv-get-export-image-link\\\,{params: {name: \\\src\\\,value: this.imageSource},defaultValue: this.imageSource});\\n\\t} else {\\n\\t\\t// Check if it is an image tiddler\\n\\t\\tif(this.wiki.isImageTiddler(this.imageSource)) {\\n\\t\\t\\tvar type tiddler.fields.type,\\n\\t\\t\\t\\ttext tiddler.fields.text,\\n\\t\\t\\t\\t_canonical_uri tiddler.fields._canonical_uri,\\n\\t\\t\\t\\ttypeInfo $tw.config.contentTypeInfotype || {},\\n\\t\\t\\t\\tdeserializerType typeInfo.deserializerType || type;\\n\\t\\t\\t// If the tiddler has body text then it doesnt need to be lazily loaded\\n\\t\\t\\tif(text) {\\n\\t\\t\\t\\t// Render the appropriate element for the image type by looking up the encoding in the content type info\\n\\t\\t\\t\\tvar encoding typeInfo.encoding || \\\utf8\\\;\\n\\t\\t\\t\\tif (encoding \\\base64\\\) {\\n\\t\\t\\t\\t\\t// .pdf .png .jpg etc.\\n\\t\\t\\t\\t\\tsrc \\\data:\\\ + deserializerType + \\\;base64,\\\ + text;\\n\\t\\t\\t\\t\\tif (deserializerType \\\application/pdf\\\) {\\n\\t\\t\\t\\t\\t\\ttag \\\embed\\\;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// .svg .tid .xml etc.\\n\\t\\t\\t\\t\\tsrc \\\data:\\\ + deserializerType + \\\,\\\ + encodeURIComponent(text);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else if(_canonical_uri) {\\n\\t\\t\\t\\tswitch(deserializerType) {\\n\\t\\t\\t\\t\\tcase \\\application/pdf\\\:\\n\\t\\t\\t\\t\\t\\ttag \\\embed\\\;\\n\\t\\t\\t\\t\\t\\tsrc _canonical_uri;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\image/svg+xml\\\:\\n\\t\\t\\t\\t\\t\\tsrc _canonical_uri;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tdefault:\\n\\t\\t\\t\\t\\t\\tsrc _canonical_uri;\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Just trigger loading of the tiddler\\n\\t\\t\\t\\tthis.wiki.getTiddlerText(this.imageSource);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Create the element and assign the attributes\\n\\tvar domNode this.document.createElement(tag);\\n\\tdomNode.setAttribute(\\\src\\\,src);\\n\\tif(this.imageClass) {\\n\\t\\tdomNode.setAttribute(\\\class\\\,this.imageClass);\\n\\t}\\n\\tif(this.imageUsemap) {\\n\\t \\tdomNode.setAttribute(\\\usemap\\\,this.imageUsemap);\\n\\t}\\n\\tif(this.imageWidth) {\\n\\t\\tdomNode.setAttribute(\\\width\\\,this.imageWidth);\\n\\t}\\n\\tif(this.imageHeight) {\\n\\t\\tdomNode.setAttribute(\\\height\\\,this.imageHeight);\\n\\t}\\n\\tif(this.imageTooltip) {\\n\\t\\tdomNode.setAttribute(\\\title\\\,this.imageTooltip);\\n\\t}\\n\\tif(this.imageAlt) {\\n\\t\\tdomNode.setAttribute(\\\alt\\\,this.imageAlt);\\n\\t}\\n\\tif(this.lazyLoading && tag \\\img\\\) {\\n\\t\\tdomNode.setAttribute(\\\loading\\\,this.lazyLoading);\\n\\t}\\n\\t// Add classes when the image loads or fails\\n\\t$tw.utils.addClass(domNode,\\\tc-image-loading\\\);\\n\\tdomNode.addEventListener(\\\load\\\,function() {\\n\\t\\t$tw.utils.removeClass(domNode,\\\tc-image-loading\\\);\\n\\t\\t$tw.utils.addClass(domNode,\\\tc-image-loaded\\\);\\n\\t},false);\\n\\tdomNode.addEventListener(\\\error\\\,function() {\\n\\t\\t$tw.utils.removeClass(domNode,\\\tc-image-loading\\\);\\n\\t\\t$tw.utils.addClass(domNode,\\\tc-image-error\\\);\\n\\t},false);\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nImageWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.imageSource this.getAttribute(\\\source\\\);\\n\\tthis.imageWidth this.getAttribute(\\\width\\\);\\n\\tthis.imageHeight this.getAttribute(\\\height\\\);\\n\\tthis.imageClass this.getAttribute(\\\class\\\);\\n \\tthis.imageUsemap this.getAttribute(\\\usemap\\\);\\n\\tthis.imageTooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis.imageAlt this.getAttribute(\\\alt\\\);\\n\\tthis.lazyLoading this.getAttribute(\\\loading\\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nImageWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes\\\class\\\ || changedAttributes.usemap || changedAttributes.tooltip || changedTiddlersthis.imageSource) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.image ImageWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/importvariables.js\:{\title\:\$:/core/modules/widgets/importvariables.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/importvariables.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nImport variable definitions from other tiddlers\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ImportVariablesWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nImportVariablesWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nImportVariablesWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nImportVariablesWidget.prototype.execute function(tiddlerList) {\\n\\tvar widgetPointer this;\\n\\t// Got to flush all the accumulated variables\\n\\tthis.variables Object.create(null);\\n\\tif(this.parentWidget) {\\n\\t\\tObject.setPrototypeOf(this.variables,this.parentWidget.variables);\\n\\t}\\n\\t// Get our parameters\\n\\tthis.filter this.getAttribute(\\\filter\\\);\\n\\t// Compute the filter\\n\\tthis.tiddlerList tiddlerList || this.wiki.filterTiddlers(this.filter,this);\\n\\t// Accumulate the \u003C$set> widgets from each tiddler\\n\\t$tw.utils.each(this.tiddlerList,function(title) {\\n\\t\\tvar parser widgetPointer.wiki.parseTiddler(title,{parseAsInline:true, configTrimWhiteSpace:false});\\n\\t\\tif(parser) {\\n\\t\\t\\tvar parseTreeNode parser.tree0;\\n\\t\\t\\twhile(parseTreeNode && \\\setvariable\\\,\\\set\\\,\\\parameters\\\.indexOf(parseTreeNode.type) ! -1) {\\n\\t\\t\\t\\tvar node {\\n\\t\\t\\t\\t\\ttype: \\\set\\\,\\n\\t\\t\\t\\t\\tattributes: parseTreeNode.attributes,\\n\\t\\t\\t\\t\\tparams: parseTreeNode.params,\\n\\t\\t\\t\\t\\tisMacroDefinition: parseTreeNode.isMacroDefinition,\\n\\t\\t\\t\\t\\tisFunctionDefinition: parseTreeNode.isFunctionDefinition,\\n\\t\\t\\t\\t\\tisProcedureDefinition: parseTreeNode.isProcedureDefinition,\\n\\t\\t\\t\\t\\tisWidgetDefinition: parseTreeNode.isWidgetDefinition,\\n\\t\\t\\t\\t\\tconfigTrimWhiteSpace: parseTreeNode.configTrimWhiteSpace\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\tif(parseTreeNode.type \\\set\\\ || parseTreeNode.type \\\setvariable\\\) {\\n\\t\\t\\t\\t\\tif(parseTreeNode.isMacroDefinition || parseTreeNode.isProcedureDefinition || parseTreeNode.isWidgetDefinition || parseTreeNode.isFunctionDefinition) {\\n\\t\\t\\t\\t\\t\\t// Macro definitions can be folded into\\n\\t\\t\\t\\t\\t\\t// current widget instead of adding\\n\\t\\t\\t\\t\\t\\t// another link to the chain.\\n\\t\\t\\t\\t\\t\\tvar widget widgetPointer.makeChildWidget(node);\\n\\t\\t\\t\\t\\t\\twidget.computeAttributes();\\n\\t\\t\\t\\t\\t\\twidget.execute();\\n\\t\\t\\t\\t\\t\\t// We SHALLOW copy over all variables\\n\\t\\t\\t\\t\\t\\t// in widget. We cant use\\n\\t\\t\\t\\t\\t\\t// $tw.utils.assign, because that copies\\n\\t\\t\\t\\t\\t\\t// up the prototype chain, which we\\n\\t\\t\\t\\t\\t\\t// dont want.\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(Object.keys(widget.variables), function(key) {\\n\\t\\t\\t\\t\\t\\t\\twidgetPointer.variableskey widget.variableskey;\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\twidgetPointer.children widgetPointer.makeChildWidget(node);\\n\\t\\t\\t\\t\\t\\t// No more regenerating children for\\n\\t\\t\\t\\t\\t\\t// this widget. If it needs to refresh,\\n\\t\\t\\t\\t\\t\\t// itll do so along with the the whole\\n\\t\\t\\t\\t\\t\\t// importvariable tree.\\n\\t\\t\\t\\t\\t\\tif (widgetPointer ! this) {\\n\\t\\t\\t\\t\\t\\t\\twidgetPointer.makeChildWidgets function(){};\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\twidgetPointer widgetPointer.children0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tparseTreeNode parseTreeNode.children && parseTreeNode.children0;\\n\\t\\t\\t}\\n\\t\\t} \\n\\t});\\n\\n\\tif (widgetPointer ! this) {\\n\\t\\twidgetPointer.parseTreeNode.children this.parseTreeNode.children;\\n\\t} else {\\n\\t\\twidgetPointer.makeChildWidgets();\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nImportVariablesWidget.prototype.refresh function(changedTiddlers) {\\n\\t// Recompute our attributes and the filter list\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\ttiddlerList this.wiki.filterTiddlers(this.getAttribute(\\\filter\\\),this);\\n\\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\\n\\tfunction haveListedTiddlersChanged() {\\n\\t\\tvar changed false;\\n\\t\\ttiddlerList.forEach(function(title) {\\n\\t\\t\\tif(changedTiddlerstitle) {\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn changed;\\n\\t}\\n\\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\\n\\t\\t// Compute the filter\\n\\t\\tthis.removeChildDomNodes();\\n\\t\\tthis.execute(tiddlerList);\\n\\t\\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.importvariables ImportVariablesWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/jsontiddler.js\:{\title\:\$:/core/modules/widgets/jsontiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/jsontiddler.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nRender a tiddler as JSON text\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar JSONTiddlerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nJSONTiddlerWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nJSONTiddlerWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Collect the fields from the optional base tiddler\\n\\tvar fields this.getTiddlerFields();\\n\\t// Add custom fields specified in attributes starting with $\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\tfieldsname.slice(1) attribute;\\n\\t\\t}\\n\\t});\\n\\t// JSONify\\n\\tvar json JSON.stringify(fields);\\n\\t// Escape unsafe script characters\\n\\tif(this.attEscapeUnsafeScriptChars) {\\n\\t\\tjson json.replace(/\u003C/g,\\\\\\\\\\\u003C\\\);\\n\\t}\\n\\t// Update the DOM\\n\\tvar textNode this.document.createTextNode(json);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nJSONTiddlerWidget.prototype.execute function() {\\n\\tthis.attTiddler this.getAttribute(\\\tiddler\\\);\\n\\tthis.attExclude this.getAttribute(\\\exclude\\\,\\\\\\);\\n\\tthis.attEscapeUnsafeScriptChars this.getAttribute(\\\escapeUnsafeScriptChars\\\,\\\no\\\) \\\yes\\\;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nJSONTiddlerWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0 || (this.attTiddler && changedTiddlersthis.attTiddler)) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nJSONTiddlerWidget.prototype.getTiddlerFields function() {\\n\\tvar fields {};\\n\\tif(this.attTiddler) {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.attTiddler);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tfields tiddler.getFieldStrings({exclude: this.attExclude.split(\\\ \\\)});\\n\\t\\t} else {\\n\\t\\t\\tfields {title: this.attTiddler};\\n\\t\\t}\\n\\t}\\n\\treturn fields;\\n};\\n\\nexports.jsontiddler JSONTiddlerWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/keyboard.js\:{\title\:\$:/core/modules/widgets/keyboard.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/keyboard.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nKeyboard shortcut widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar KeyboardWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nKeyboardWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nKeyboardWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar tag this.parseTreeNode.isBlock ? \\\div\\\ : \\\span\\\;\\n\\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) -1) {\\n\\t\\ttag this.tag;\\n\\t}\\n\\t// Create element\\n\\tvar domNode this.document.createElement(tag);\\n\\t// Assign classes\\n\\tthis.domNode domNode;\\n\\tthis.assignDomNodeClasses();\\n\\t// Add a keyboard event handler\\n\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t{name: \\\keydown\\\, handlerObject: this, handlerMethod: \\\handleChangeEvent\\\}\\n\\t);\\n\\t// Insert element\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\nKeyboardWidget.prototype.handleChangeEvent function(event) {\\n\\tif ($tw.keyboardManager.handleKeydownEvent(event, {onlyPriority: true})) {\\n\\t\\treturn true;\\n\\t}\\n\\n\\tvar keyInfo $tw.keyboardManager.getMatchingKeyDescriptor(event,this.keyInfoArray);\\n\\tif(keyInfo) {\\n\\t\\tvar handled this.invokeActions(this,event);\\n\\t\\tif(this.actions) {\\n\\t\\t\\tvar variables {\\n\\t\\t\\t\\t\\t\\\event-key\\\: event.key,\\n\\t\\t\\t\\t\\t\\\event-code\\\: event.code,\\n\\t\\t\\t\\t\\t\\\modifier\\\: $tw.keyboardManager.getEventModifierKeyDescriptor(event)\\n\\t\\t\\t\\t};\\n\\t\\t\\tif(keyInfo.keyDescriptor) {\\n\\t\\t\\t\\tvariables\\\event-key-descriptor\\\ keyInfo.keyDescriptor;\\n\\t\\t\\t}\\n\\t\\t\\tthis.invokeActionString(this.actions,this,event,variables);\\n\\t\\t}\\n\\t\\tthis.dispatchMessage(event);\\n\\t\\tif(handled || this.actions || this.message) {\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t}\\n\\t\\treturn true;\\n\\t}\\n\\treturn false;\\n}\\n\\nKeyboardWidget.prototype.dispatchMessage function(event) {\\n\\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\\\currentTiddler\\\)});\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nKeyboardWidget.prototype.execute function() {\\n\\tvar self this;\\n\\t// Get attributes\\n\\tthis.actions this.getAttribute(\\\actions\\\,\\\\\\);\\n\\tthis.message this.getAttribute(\\\message\\\,\\\\\\);\\n\\tthis.param this.getAttribute(\\\param\\\,\\\\\\);\\n\\tthis.key this.getAttribute(\\\key\\\,\\\\\\);\\n\\tthis.tag this.getAttribute(\\\tag\\\,\\\\\\);\\n\\tif($tw.keyboardManager) {\\n\\t\\tthis.keyInfoArray $tw.keyboardManager.parseKeyDescriptors(this.key);\\n\\t\\tif(this.key.substr(0,2) \\\((\\\ && this.key.substr(-2,2) \\\))\\\) {\\n\\t\\t\\tthis.shortcutTiddlers ;\\n\\t\\t\\tvar name this.key.substring(2,this.key.length -2);\\n\\t\\t\\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\\n\\t\\t\\t\\tself.shortcutTiddlers.push(\\\$:/config/\\\ + platformDescriptor + \\\/\\\ + name);\\n\\t\\t\\t});\\n\\t\\t}\\t\\n\\t}\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\nKeyboardWidget.prototype.assignDomNodeClasses function() {\\n\\tvar classes this.getAttribute(\\\class\\\,\\\\\\).split(\\\ \\\);\\n\\tclasses.push(\\\tc-keyboard\\\);\\n\\tthis.domNode.className classes.join(\\\ \\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nKeyboardWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes.tag) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedAttributes\\\class\\\) {\\n\\t\\tthis.assignDomNodeClasses();\\n\\t}\\n\\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\\n\\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) && $tw.keyboardManager) {\\n\\t\\tthis.keyInfoArray $tw.keyboardManager.parseKeyDescriptors(this.key);\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.keyboard KeyboardWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/let.js\:{\title\:\$:/core/modules/widgets/let.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/let.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nThis widget allows defining multiple variables at once, while allowing\\nthe later variables to depend upon the earlier ones.\\n\\n```\\n\\\\define helloworld() Hello world!\\n\u003C$let currentTiddler\\\target\\\ value{{!!value}} currentTiddler\\\different\\\>\\n {{!!value}} will be different from \u003C\u003Cvalue>>\\n\u003C/$let>\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar LetWidget function(parseTreeNode,options) {\\n\\t// Initialise\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nLetWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nLetWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\nLetWidget.prototype.computeAttributes function() {\\n\\t// Before computing attributes, we must make clear that none of the\\n\\t// existing attributes are staged for lookup, even on a refresh\\n\\tvar changedAttributes {},\\n\\t\\tself this;\\n\\tthis.currentValueFor Object.create(null);\\n\\t$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(this.parseTreeNode),function(attribute) {\\n\\t\\tvar value self.computeAttribute(attribute),\\n\\t\\t\\tname attribute.name;\\n\\t\\t// Now that its prepped, were allowed to look this variable up\\n\\t\\t// when defining later variables\\n\\t\\tif(value ! undefined) {\\n\\t\\t\\tself.currentValueForname value;\\n\\t\\t}\\n\\t});\\n\\t// Run through again, setting variables and looking for differences\\n\\t$tw.utils.each(this.currentValueFor,function(value,name) {\\n\\t\\tif (self.attributesname ! value) {\\n\\t\\t\\tself.attributesname value;\\n\\t\\t\\tself.setVariable(name,value);\\n\\t\\t\\tchangedAttributesname true;\\n\\t\\t}\\n\\t});\\n\\treturn changedAttributes;\\n};\\n\\nLetWidget.prototype.getVariableInfo function(name,options) {\\n\\t// Special handling: If this variable exists in this very $let, we can\\n\\t// use it, but only if its been staged.\\n\\tif ($tw.utils.hop(this.currentValueFor,name)) {\\n\\t\\treturn {\\n\\t\\t\\ttext: this.currentValueForname\\n\\t\\t};\\n\\t}\\n\\treturn Widget.prototype.getVariableInfo.call(this,name,options);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nLetWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports\\\let\\\ LetWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/link.js\:{\title\:\$:/core/modules/widgets/link.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/link.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nLink widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar LinkWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nLinkWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nLinkWidget.prototype.render function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Get the value of the tv-wikilinks configuration macro\\n\\tvar wikiLinksMacro this.getVariable(\\\tv-wikilinks\\\),\\n\\t\\tuseWikiLinks wikiLinksMacro ? (wikiLinksMacro.trim() ! \\\no\\\) : true,\\n\\t\\tmissingLinksEnabled !(this.hideMissingLinks && this.isMissing && !this.isShadow);\\n\\t// Render the link if required\\n\\tif(useWikiLinks && missingLinksEnabled) {\\n\\t\\tthis.renderLink(parent,nextSibling);\\n\\t} else {\\n\\t\\t// Just insert the link text\\n\\t\\tvar domNode this.document.createElement(\\\span\\\);\\n\\t\\t// Assign data- attributes\\n\\t\\tthis.assignAttributes(domNode,{\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t\\tparent.insertBefore(domNode,nextSibling);\\n\\t\\tthis.renderChildren(domNode,null);\\n\\t\\tthis.domNodes.push(domNode);\\n\\t}\\n};\\n\\n/*\\nRender this widget into the DOM\\n*/\\nLinkWidget.prototype.renderLink function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Sanitise the specified tag\\n\\tvar tag this.linkTag;\\n\\tif($tw.config.htmlUnsafeElements.indexOf(tag) ! -1) {\\n\\t\\ttag \\\a\\\;\\n\\t}\\n\\t// Create our element\\n\\tvar namespace this.getVariable(\\\namespace\\\,{defaultValue: \\\http://www.w3.org/1999/xhtml\\\}),\\n\\t\\tdomNode this.document.createElementNS(namespace,tag);\\n\\t// Assign classes\\n\\tvar classes ;\\n\\tif(this.overrideClasses undefined) {\\n\\t\\tclasses.push(\\\tc-tiddlylink\\\);\\n\\t\\tif(this.isShadow) {\\n\\t\\t\\tclasses.push(\\\tc-tiddlylink-shadow\\\);\\n\\t\\t}\\n\\t\\tif(this.isMissing && !this.isShadow) {\\n\\t\\t\\tclasses.push(\\\tc-tiddlylink-missing\\\);\\n\\t\\t} else {\\n\\t\\t\\tif(!this.isMissing) {\\n\\t\\t\\t\\tclasses.push(\\\tc-tiddlylink-resolves\\\);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(this.linkClasses) {\\n\\t\\t\\tclasses.push(this.linkClasses);\\n\\t\\t}\\n\\t} else if(this.overrideClasses ! \\\\\\) {\\n\\t\\tclasses.push(this.overrideClasses)\\n\\t}\\n\\tif(classes.length > 0) {\\n\\t\\tdomNode.setAttribute(\\\class\\\,classes.join(\\\ \\\));\\n\\t}\\n\\t// Set an href\\n\\tvar wikilinkTransformFilter this.getVariable(\\\tv-filter-export-link\\\),\\n\\t\\twikiLinkText;\\n\\tif(wikilinkTransformFilter) {\\n\\t\\t// Use the filter to construct the href\\n\\t\\twikiLinkText this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\\n\\t\\t\\titerator(self.wiki.getTiddler(self.to),self.to)\\n\\t\\t})0;\\n\\t} else {\\n\\t\\t// Expand the tv-wikilink-template variable to construct the href\\n\\t\\tvar wikiLinkTemplateMacro this.getVariable(\\\tv-wikilink-template\\\),\\n\\t\\t\\twikiLinkTemplate wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \\\#$uri_encoded$\\\;\\n\\t\\twikiLinkText $tw.utils.replaceString(wikiLinkTemplate,\\\$uri_encoded$\\\,$tw.utils.encodeURIComponentExtended(this.to));\\n\\t\\twikiLinkText $tw.utils.replaceString(wikiLinkText,\\\$uri_doubleencoded$\\\,$tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.to)));\\n\\t}\\n\\t// Override with the value of tv-get-export-link if defined\\n\\twikiLinkText this.getVariable(\\\tv-get-export-link\\\,{params: {name: \\\to\\\,value: this.to},defaultValue: wikiLinkText});\\n\\tif(tag \\\a\\\) {\\n\\t\\tvar namespaceHref (namespace \\\http://www.w3.org/2000/svg\\\) ? \\\http://www.w3.org/1999/xlink\\\ : undefined;\\n\\t\\tdomNode.setAttributeNS(namespaceHref,\\\href\\\,wikiLinkText);\\n\\t}\\n\\t// Set the tabindex\\n\\tif(this.tabIndex) {\\n\\t\\tdomNode.setAttribute(\\\tabindex\\\,this.tabIndex);\\n\\t}\\n\\t// Set the tooltip\\n\\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \\\\u003C$transclude fieldtooltip>\u003C$transclude fieldtitle/>\u003C/$transclude>\\\\\n\\tvar tooltipWikiText this.tooltip || this.getVariable(\\\tv-wikilink-tooltip\\\);\\n\\tif(tooltipWikiText) {\\n\\t\\tvar tooltipText this.wiki.renderText(\\\text/plain\\\,\\\text/vnd.tiddlywiki\\\,tooltipWikiText,{\\n\\t\\t\\t\\tparseAsInline: true,\\n\\t\\t\\t\\tvariables: {\\n\\t\\t\\t\\t\\tcurrentTiddler: this.to\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tparentWidget: this\\n\\t\\t\\t});\\n\\t\\tdomNode.setAttribute(\\\title\\\,tooltipText);\\n\\t}\\n\\tif(this\\\aria-label\\\) {\\n\\t\\tdomNode.setAttribute(\\\aria-label\\\,this\\\aria-label\\\);\\n\\t}\\n\\t// Add a click event handler\\n\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t{name: \\\click\\\, handlerObject: this, handlerMethod: \\\handleClickEvent\\\},\\n\\t);\\n\\t// Make the link draggable if required\\n\\tif(this.draggable \\\yes\\\) {\\n\\t\\t$tw.utils.makeDraggable({\\n\\t\\t\\tdomNode: domNode,\\n\\t\\t\\tdragTiddlerFn: function() {return self.to;},\\n\\t\\t\\twidget: this\\n\\t\\t});\\n\\t}\\n\\t// Assign data- attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Insert the link into the DOM and render any children\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\nLinkWidget.prototype.handleClickEvent function(event) {\\n\\t// Send the click on its way as a navigate event\\n\\tvar bounds this.domNodes0.getBoundingClientRect();\\n\\tthis.dispatchEvent({\\n\\t\\ttype: \\\tm-navigate\\\,\\n\\t\\tnavigateTo: this.to,\\n\\t\\tnavigateFromTitle: this.getVariable(\\\storyTiddler\\\),\\n\\t\\tnavigateFromNode: this,\\n\\t\\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\\n\\t\\t},\\n\\t\\tnavigateFromClientTop: bounds.top,\\n\\t\\tnavigateFromClientLeft: bounds.left,\\n\\t\\tnavigateFromClientWidth: bounds.width,\\n\\t\\tnavigateFromClientRight: bounds.right,\\n\\t\\tnavigateFromClientBottom: bounds.bottom,\\n\\t\\tnavigateFromClientHeight: bounds.height,\\n\\t\\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button 1),\\n\\t\\tmetaKey: event.metaKey,\\n\\t\\tctrlKey: event.ctrlKey,\\n\\t\\taltKey: event.altKey,\\n\\t\\tshiftKey: event.shiftKey,\\n\\t\\tevent: event\\n\\t});\\n\\tif(this.domNodes0.hasAttribute(\\\href\\\)) {\\n\\t\\tevent.preventDefault();\\n\\t}\\n\\tevent.stopPropagation();\\n\\treturn false;\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nLinkWidget.prototype.execute function() {\\n\\t// Pick up our attributes\\n\\tthis.to this.getAttribute(\\\to\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.tooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis\\\aria-label\\\ this.getAttribute(\\\aria-label\\\);\\n\\tthis.linkClasses this.getAttribute(\\\class\\\);\\n\\tthis.overrideClasses this.getAttribute(\\\overrideClass\\\);\\n\\tthis.tabIndex this.getAttribute(\\\tabindex\\\);\\n\\tthis.draggable this.getAttribute(\\\draggable\\\,\\\yes\\\);\\n\\tthis.linkTag this.getAttribute(\\\tag\\\,\\\a\\\);\\n\\t// Determine the link characteristics\\n\\tthis.isMissing !this.wiki.tiddlerExists(this.to);\\n\\tthis.isShadow this.wiki.isShadowTiddler(this.to);\\n\\tthis.hideMissingLinks (this.getVariable(\\\tv-show-missing-links\\\) || \\\yes\\\) \\\no\\\;\\n\\t// Make the child widgets\\n\\tvar templateTree;\\n\\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\\n\\t\\ttemplateTree this.parseTreeNode.children;\\n\\t} else {\\n\\t\\t// Default template is a link to the title\\n\\t\\ttemplateTree {type: \\\text\\\, text: this.to};\\n\\t}\\n\\tthis.makeChildWidgets(templateTree);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nLinkWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0 || changedTiddlersthis.to) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.link LinkWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/linkcatcher.js\:{\title\:\$:/core/modules/widgets/linkcatcher.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/linkcatcher.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nLinkcatcher widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar LinkCatcherWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nLinkCatcherWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nLinkCatcherWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-navigate\\\, handler: \\\handleNavigateEvent\\\}\\n\\t);\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nLinkCatcherWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.catchTo this.getAttribute(\\\to\\\);\\n\\tthis.catchMessage this.getAttribute(\\\message\\\);\\n\\tthis.catchSet this.getAttribute(\\\set\\\);\\n\\tthis.catchSetTo this.getAttribute(\\\setTo\\\);\\n\\tthis.catchActions this.getAttribute(\\\actions\\\);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n\\t// When executing actions we avoid trapping navigate events, so that we dont trigger ourselves recursively\\n\\tthis.executingActions false;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nLinkCatcherWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\n/*\\nHandle a tm-navigate event\\n*/\\nLinkCatcherWidget.prototype.handleNavigateEvent function(event) {\\n\\tif(!this.executingActions) {\\n\\t\\t// Execute the actions\\n\\t\\tif(this.catchTo) {\\n\\t\\t\\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\\\currentTiddler\\\));\\n\\t\\t}\\n\\t\\tif(this.catchMessage && this.parentWidget) {\\n\\t\\t\\tthis.parentWidget.dispatchEvent({\\n\\t\\t\\t\\ttype: this.catchMessage,\\n\\t\\t\\t\\tparam: event.navigateTo,\\n\\t\\t\\t\\tnavigateTo: event.navigateTo\\n\\t\\t\\t});\\n\\t\\t}\\n\\t\\tif(this.catchSet) {\\n\\t\\t\\tvar tiddler this.wiki.getTiddler(this.catchSet);\\n\\t\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\\n\\t\\t}\\n\\t\\tif(this.catchActions) {\\n\\t\\t\\tthis.executingActions true;\\n\\t\\t\\tvar modifierKey $tw.keyboardManager.getEventModifierKeyDescriptor(event);\\n\\t\\t\\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo, modifier: modifierKey});\\n\\t\\t\\tthis.executingActions false;\\n\\t\\t}\\n\\t} else {\\n\\t\\t\\t// This is a navigate event generated by the actions of this linkcatcher,\\n\\t\\t\\t// so we dont trap it again, but just pass it to the parent\\n\\t\\t\\tthis.parentWidget.dispatchEvent(event);\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.linkcatcher LinkCatcherWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/list.js\:{\title\:\$:/core/modules/widgets/list.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/list.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nList and list item widgets\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\n/*\\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\\n*/\\n\\nvar ListWidget function(parseTreeNode,options) {\\n\\t// Main initialisation inherited from widget.js\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nListWidget.prototype new Widget();\\n\\nListWidget.prototype.initialise function(parseTreeNode,options) {\\n\\t// Bail if parseTreeNode is undefined, meaning that the ListWidget constructor was called without any arguments so that it can be subclassed\\n\\tif(parseTreeNode undefined) {\\n\\t\\treturn;\\n\\t}\\n\\t// First call parent constructor to set everything else up\\n\\tWidget.prototype.initialise.call(this,parseTreeNode,options);\\n\\t// Now look for \u003C$list-template> and \u003C$list-empty> widgets as immediate child widgets\\n\\t// This is safe to do during initialization because parse trees never change after creation\\n\\tthis.findExplicitTemplates();\\n}\\n\\n/*\\nRender this widget into the DOM\\n*/\\nListWidget.prototype.render function(parent,nextSibling) {\\n\\t// Initialise the storyviews if theyve not been done already\\n\\tif(!this.storyViews) {\\n\\t\\tListWidget.prototype.storyViews {};\\n\\t\\t$tw.modules.applyMethods(\\\storyview\\\,this.storyViews);\\n\\t}\\n\\tthis.parentDomNode parent;\\n\\tvar changedAttributes this.computeAttributes();\\n\\tthis.execute(changedAttributes);\\n\\tthis.renderChildren(parent,nextSibling);\\n\\t// Construct the storyview\\n\\tvar StoryView this.storyViewsthis.storyViewName;\\n\\tif(this.storyViewName && !StoryView) {\\n\\t\\tStoryView this.storyViews\\\classic\\\;\\n\\t}\\n\\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\\n\\t\\tthis.storyview new StoryView(this);\\n\\t} else {\\n\\t\\tthis.storyview null;\\n\\t}\\n\\tif(this.storyview && this.storyview.renderEnd) {\\n\\t\\tthis.storyview.renderEnd();\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nListWidget.prototype.execute function(changedAttributes) {\\n\\tvar self this;\\n\\t// Get our attributes\\n\\tthis.template this.getAttribute(\\\template\\\);\\n\\tthis.editTemplate this.getAttribute(\\\editTemplate\\\);\\n\\tthis.variableName this.getAttribute(\\\variable\\\,\\\currentTiddler\\\);\\n\\tthis.counterName this.getAttribute(\\\counter\\\);\\n\\tthis.storyViewName this.getAttribute(\\\storyview\\\);\\n\\tthis.historyTitle this.getAttribute(\\\history\\\);\\n\\t// Create join template only if needed\\n\\tif(this.join undefined || (changedAttributes && changedAttributes.join)) {\\n\\t\\tthis.join this.makeJoinTemplate();\\n\\t}\\n\\t// Compose the list elements\\n\\tthis.list this.getTiddlerList();\\n\\tvar members ,\\n\\t\\tself this;\\n\\t// Check for an empty list\\n\\tif(this.list.length 0) {\\n\\t\\tmembers this.getEmptyMessage();\\n\\t} else {\\n\\t\\t$tw.utils.each(this.list,function(title,index) {\\n\\t\\t\\tmembers.push(self.makeItemTemplate(title,index));\\n\\t\\t});\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(members);\\n\\t// Clear the last history\\n\\tthis.history ;\\n};\\n\\nListWidget.prototype.findExplicitTemplates function() {\\n\\tvar self this;\\n\\tthis.explicitListTemplate null;\\n\\tthis.explicitEmptyTemplate null;\\n\\tthis.explicitJoinTemplate null;\\n\\tthis.hasTemplateInBody false;\\n\\tvar searchChildren function(childNodes) {\\n\\t\\tvar foundInlineTemplate false;\\n\\t\\t$tw.utils.each(childNodes,function(node) {\\n\\t\\t\\tif(node.type \\\list-template\\\) {\\n\\t\\t\\t\\tself.explicitListTemplate node.children;\\n\\t\\t\\t} else if(node.type \\\list-empty\\\) {\\n\\t\\t\\t\\tself.explicitEmptyTemplate node.children;\\n\\t\\t\\t} else if(node.type \\\list-join\\\) {\\n\\t\\t\\t\\tself.explicitJoinTemplate node.children;\\n\\t\\t\\t} else if(node.type \\\element\\\ && node.tag \\\p\\\) {\\n\\t\\t\\t\\tsearchChildren(node.children);\\n\\t\\t\\t\\tfoundInlineTemplate true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tfoundInlineTemplate true;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn foundInlineTemplate;\\n\\t};\\n\\tthis.hasTemplateInBody searchChildren(this.parseTreeNode.children);\\n}\\n\\nListWidget.prototype.getTiddlerList function() {\\n\\tvar limit $tw.utils.getInt(this.getAttribute(\\\limit\\\,\\\\\\),undefined);\\n\\tvar defaultFilter \\\!issystemsorttitle\\\;\\n\\tvar results this.wiki.filterTiddlers(this.getAttribute(\\\filter\\\,defaultFilter),this);\\n\\tif(limit ! undefined) {\\n\\t\\tif(limit > 0) {\\n\\t\\t\\tresults results.slice(0,limit);\\n\\t\\t} else {\\n\\t\\t\\tresults results.slice(limit);\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\nListWidget.prototype.getEmptyMessage function() {\\n\\tvar parser,\\n\\t\\temptyMessage this.getAttribute(\\\emptyMessage\\\);\\n\\t// If emptyMessage attribute is not present or empty then look for an explicit empty template\\n\\tif(!emptyMessage) {\\n\\t\\tif(this.explicitEmptyTemplate) {\\n\\t\\t\\treturn this.explicitEmptyTemplate;\\n\\t\\t} else {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t}\\n\\tparser this.wiki.parseText(\\\text/vnd.tiddlywiki\\\,emptyMessage,{parseAsInline: true});\\n\\tif(parser) {\\n\\t\\treturn parser.tree;\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\\n/*\\nCompose the template for a join between list items\\n*/\\nListWidget.prototype.makeJoinTemplate function() {\\n\\tvar parser,\\n\\t\\tjoin this.getAttribute(\\\join\\\,\\\\\\);\\n\\tif(join) {\\n\\t\\tparser this.wiki.parseText(\\\text/vnd.tiddlywiki\\\,join,{parseAsInline:true})\\n\\t\\tif(parser) {\\n\\t\\t\\treturn parser.tree;\\n\\t\\t} else {\\n\\t\\t\\treturn ;\\n\\t\\t}\\n\\t} else {\\n\\t\\treturn this.explicitJoinTemplate; // May be null, and thats fine\\n\\t}\\n};\\n\\n/*\\nCompose the template for a list item\\n*/\\nListWidget.prototype.makeItemTemplate function(title,index) {\\n\\t// Check if the tiddler is a draft\\n\\tvar tiddler this.wiki.getTiddler(title),\\n\\t\\tisDraft tiddler && tiddler.hasField(\\\draft.of\\\),\\n\\t\\ttemplate this.template,\\n\\t\\tjoin this.join,\\n\\t\\ttemplateTree;\\n\\tif(isDraft && this.editTemplate) {\\n\\t\\ttemplate this.editTemplate;\\n\\t}\\n\\t// Compose the transclusion of the template\\n\\tif(template) {\\n\\t\\ttemplateTree {type: \\\transclude\\\, attributes: {tiddler: {type: \\\string\\\, value: template}}};\\n\\t} else {\\n\\t\\t// Check for child nodes of the list widget\\n\\t\\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\\n\\t\\t\\t// Check for a \u003C$list-item> widget\\n\\t\\t\\tif(this.explicitListTemplate) {\\n\\t\\t\\t\\ttemplateTree this.explicitListTemplate;\\n\\t\\t\\t} else if(this.hasTemplateInBody) {\\n\\t\\t\\t\\ttemplateTree this.parseTreeNode.children;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(!templateTree || templateTree.length 0) {\\n\\t\\t\\t// Default template is a link to the title\\n\\t\\t\\ttemplateTree {type: \\\element\\\, tag: this.parseTreeNode.isBlock ? \\\div\\\ : \\\span\\\, children: {type: \\\link\\\, attributes: {to: {type: \\\string\\\, value: title}}, children: \\n\\t\\t\\t\\t{type: \\\text\\\, text: title}\\n\\t\\t\\t}};\\n\\t\\t}\\n\\t}\\n\\t// Return the list item\\n\\tvar parseTreeNode {type: \\\listitem\\\, itemTitle: title, variableName: this.variableName, children: templateTree, join: join};\\n\\tparseTreeNode.isLast index this.list.length - 1;\\n\\tif(this.counterName) {\\n\\t\\tparseTreeNode.counter (index + 1).toString();\\n\\t\\tparseTreeNode.counterName this.counterName;\\n\\t\\tparseTreeNode.isFirst index 0;\\n\\t}\\n\\treturn parseTreeNode;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nListWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\tresult;\\n\\t// Call the storyview\\n\\tif(this.storyview && this.storyview.refreshStart) {\\n\\t\\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\\n\\t}\\n\\t// Completely refresh if any of our attributes have changed\\n\\tif(changedAttributes.filter || changedAttributes.variable || changedAttributes.counter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.join || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\\n\\t\\tthis.refreshSelf();\\n\\t\\tresult true;\\n\\t} else {\\n\\t\\t// Handle any changes to the list\\n\\t\\tresult this.handleListChanges(changedTiddlers);\\n\\t\\t// Handle any changes to the history stack\\n\\t\\tif(this.historyTitle && changedTiddlersthis.historyTitle) {\\n\\t\\t\\tthis.handleHistoryChanges();\\n\\t\\t}\\n\\t}\\n\\t// Call the storyview\\n\\tif(this.storyview && this.storyview.refreshEnd) {\\n\\t\\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nHandle any changes to the history list\\n*/\\nListWidget.prototype.handleHistoryChanges function() {\\n\\t// Get the history data\\n\\tvar newHistory this.wiki.getTiddlerDataCached(this.historyTitle,);\\n\\t// Ignore any entries of the history that match the previous history\\n\\tvar entry 0;\\n\\twhile(entry \u003C newHistory.length && entry \u003C this.history.length && newHistoryentry.title this.historyentry.title) {\\n\\t\\tentry++;\\n\\t}\\n\\t// Navigate forwards to each of the new tiddlers\\n\\twhile(entry \u003C newHistory.length) {\\n\\t\\tif(this.storyview && this.storyview.navigateTo) {\\n\\t\\t\\tthis.storyview.navigateTo(newHistoryentry);\\n\\t\\t}\\n\\t\\tentry++;\\n\\t}\\n\\t// Update the history\\n\\tthis.history newHistory;\\n};\\n\\n/*\\nProcess any changes to the list\\n*/\\nListWidget.prototype.handleListChanges function(changedTiddlers) {\\n\\t// Get the new list\\n\\tvar prevList this.list;\\n\\tthis.list this.getTiddlerList();\\n\\t// Check for an empty list\\n\\tif(this.list.length 0) {\\n\\t\\t// Check if it was empty before\\n\\t\\tif(prevList.length 0) {\\n\\t\\t\\t// If so, just refresh the empty message\\n\\t\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t\\t} else {\\n\\t\\t\\t// Replace the previous content with the empty message\\n\\t\\t\\tfor(tthis.children.length-1; t>0; t--) {\\n\\t\\t\\t\\tthis.removeListItem(t);\\n\\t\\t\\t}\\n\\t\\t\\tvar nextSibling this.findNextSiblingDomNode();\\n\\t\\t\\tthis.makeChildWidgets(this.getEmptyMessage());\\n\\t\\t\\tthis.renderChildren(this.parentDomNode,nextSibling);\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t} else {\\n\\t\\t// If the list was empty then we need to remove the empty message\\n\\t\\tif(prevList.length 0) {\\n\\t\\t\\tthis.removeChildDomNodes();\\n\\t\\t\\tthis.children ;\\n\\t\\t}\\n\\t\\t// If we are providing an counter variable then we must refresh the items, otherwise we can rearrange them\\n\\t\\tvar hasRefreshed false,t;\\n\\t\\tif(this.counterName) {\\n\\t\\t\\tvar mustRefreshOldLast false;\\n\\t\\t\\tvar oldLength this.children.length;\\n\\t\\t\\t// Cycle through the list and remove and re-insert the first item that has changed, and all the remaining items\\n\\t\\t\\tfor(t0; t\u003Cthis.list.length; t++) {\\n\\t\\t\\t\\tif(hasRefreshed || !this.childrent || this.childrent.parseTreeNode.itemTitle ! this.listt) {\\n\\t\\t\\t\\t\\tif(this.childrent) {\\n\\t\\t\\t\\t\\t\\tthis.removeListItem(t);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tthis.insertListItem(t,this.listt);\\n\\t\\t\\t\\t\\tif(!hasRefreshed && t oldLength) {\\n\\t\\t\\t\\t\\t\\tmustRefreshOldLast true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\thasRefreshed true;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Refresh the item were reusing\\n\\t\\t\\t\\t\\tvar refreshed this.childrent.refresh(changedTiddlers);\\n\\t\\t\\t\\t\\thasRefreshed hasRefreshed || refreshed;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// If items were inserted then we must recreate the item that used to be at the last position as it is no longer last\\n\\t\\t\\tif(mustRefreshOldLast && oldLength > 0) {\\n\\t\\t\\t\\tvar oldLastIdx oldLength-1;\\n\\t\\t\\t\\tthis.removeListItem(oldLastIdx);\\n\\t\\t\\t\\tthis.insertListItem(oldLastIdx,this.listoldLastIdx);\\n\\t\\t\\t}\\n\\t\\t\\t// If there are items to remove and we have not refreshed then recreate the item that will now be at the last position\\n\\t\\t\\tif(!hasRefreshed && this.children.length > this.list.length) {\\n\\t\\t\\t\\tthis.removeListItem(this.list.length-1);\\n\\t\\t\\t\\tthis.insertListItem(this.list.length-1,this.listthis.list.length-1);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t// Cycle through the list, inserting and removing list items as needed\\n\\t\\t\\tvar mustRecreateLastItem false;\\n\\t\\t\\tif(this.join && this.join.length) {\\n\\t\\t\\t\\tif(this.children.length ! this.list.length) {\\n\\t\\t\\t\\t\\t\\tmustRecreateLastItem true;\\n\\t\\t\\t\\t} else if(prevListprevList.length-1 ! this.listthis.list.length-1) {\\n\\t\\t\\t\\t\\t\\tmustRecreateLastItem true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tvar isLast false, wasLast false;\\n\\t\\t\\tfor(t0; t\u003Cthis.list.length; t++) {\\n\\t\\t\\t\\tisLast t this.list.length-1;\\n\\t\\t\\t\\tvar index this.findListItem(t,this.listt);\\n\\t\\t\\t\\twasLast index this.children.length-1;\\n\\t\\t\\t\\tif(wasLast && (index ! t || this.children.length ! this.list.length)) {\\n\\t\\t\\t\\t\\tmustRecreateLastItem !!(this.join && this.join.length);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(index undefined) {\\n\\t\\t\\t\\t\\t// The list item must be inserted\\n\\t\\t\\t\\t\\tif(isLast && mustRecreateLastItem && t>0) {\\n\\t\\t\\t\\t\\t\\t// First re-create previosly-last item that will no longer be last\\n\\t\\t\\t\\t\\t\\tthis.removeListItem(t-1);\\n\\t\\t\\t\\t\\t\\tthis.insertListItem(t-1,this.listt-1);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tthis.insertListItem(t,this.listt);\\n\\t\\t\\t\\t\\thasRefreshed true;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// There are intervening list items that must be removed\\n\\t\\t\\t\\t\\tfor(var nindex-1; n>t; n--) {\\n\\t\\t\\t\\t\\t\\tthis.removeListItem(n);\\n\\t\\t\\t\\t\\t\\thasRefreshed true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Refresh the item were reusing, or recreate if necessary\\n\\t\\t\\t\\t\\tif(mustRecreateLastItem && (isLast || wasLast)) {\\n\\t\\t\\t\\t\\t\\tthis.removeListItem(t);\\n\\t\\t\\t\\t\\t\\tthis.insertListItem(t,this.listt);\\n\\t\\t\\t\\t\\t\\thasRefreshed true;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvar refreshed this.childrent.refresh(changedTiddlers);\\n\\t\\t\\t\\t\\t\\thasRefreshed hasRefreshed || refreshed;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Remove any left over items\\n\\t\\tfor(tthis.children.length-1; t>this.list.length; t--) {\\n\\t\\t\\tthis.removeListItem(t);\\n\\t\\t\\thasRefreshed true;\\n\\t\\t}\\n\\t\\treturn hasRefreshed;\\n\\t}\\n};\\n\\n/*\\nFind the list item with a given title, starting from a specified position\\n*/\\nListWidget.prototype.findListItem function(startIndex,title) {\\n\\twhile(startIndex \u003C this.children.length) {\\n\\t\\tif(this.childrenstartIndex.parseTreeNode.itemTitle title) {\\n\\t\\t\\treturn startIndex;\\n\\t\\t}\\n\\t\\tstartIndex++;\\n\\t}\\n\\treturn undefined;\\n};\\n\\n/*\\nInsert a new list item at the specified index\\n*/\\nListWidget.prototype.insertListItem function(index,title) {\\n\\t// Create, insert and render the new child widgets\\n\\tvar widget this.makeChildWidget(this.makeItemTemplate(title,index));\\n\\twidget.parentDomNode this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\\n\\tthis.children.splice(index,0,widget);\\n\\tvar nextSibling widget.findNextSiblingDomNode();\\n\\twidget.render(this.parentDomNode,nextSibling);\\n\\t// Animate the insertion if required\\n\\tif(this.storyview && this.storyview.insert) {\\n\\t\\tthis.storyview.insert(widget);\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nRemove the specified list item\\n*/\\nListWidget.prototype.removeListItem function(index) {\\n\\tvar widget this.childrenindex;\\n\\t// Animate the removal if required\\n\\tif(this.storyview && this.storyview.remove) {\\n\\t\\tthis.storyview.remove(widget);\\n\\t} else {\\n\\t\\twidget.removeChildDomNodes();\\n\\t}\\n\\t// Remove the child widget\\n\\tthis.children.splice(index,1);\\n};\\n\\nexports.list ListWidget;\\n\\nvar ListItemWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nListItemWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nListItemWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nListItemWidget.prototype.execute function() {\\n\\t// Set the current list item title\\n\\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\\n\\tif(this.parseTreeNode.counterName) {\\n\\t\\tthis.setVariable(this.parseTreeNode.counterName,this.parseTreeNode.counter);\\n\\t\\tthis.setVariable(this.parseTreeNode.counterName + \\\-first\\\,this.parseTreeNode.isFirst ? \\\yes\\\ : \\\no\\\);\\n\\t\\tthis.setVariable(this.parseTreeNode.counterName + \\\-last\\\,this.parseTreeNode.isLast ? \\\yes\\\ : \\\no\\\);\\n\\t}\\n\\t// Add join if needed\\n\\tvar children this.parseTreeNode.children,\\n\\t\\tjoin this.parseTreeNode.join;\\n\\tif(join && join.length && !this.parseTreeNode.isLast) {\\n\\t\\tchildren children.slice(0);\\n\\t\\t$tw.utils.each(join,function(joinNode) {\\n\\t\\t\\tchildren.push(joinNode);\\n\\t\\t})\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(children);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nListItemWidget.prototype.refresh function(changedTiddlers) {\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.listitem ListItemWidget;\\n\\n/*\\nMake \u003C$list-template> and \u003C$list-empty> widgets that do nothing\\n*/\\nvar ListTemplateWidget function(parseTreeNode,options) {\\n\\t// Main initialisation inherited from widget.js\\n\\tthis.initialise(parseTreeNode,options);\\n};\\nListTemplateWidget.prototype new Widget();\\nListTemplateWidget.prototype.render function() {}\\nListTemplateWidget.prototype.refresh function() { return false; }\\n\\nexports\\\list-template\\\ ListTemplateWidget;\\n\\nvar ListEmptyWidget function(parseTreeNode,options) {\\n\\t// Main initialisation inherited from widget.js\\n\\tthis.initialise(parseTreeNode,options);\\n};\\nListEmptyWidget.prototype new Widget();\\nListEmptyWidget.prototype.render function() {}\\nListEmptyWidget.prototype.refresh function() { return false; }\\n\\nexports\\\list-empty\\\ ListEmptyWidget;\\n\\nvar ListJoinWidget function(parseTreeNode,options) {\\n\\t// Main initialisation inherited from widget.js\\n\\tthis.initialise(parseTreeNode,options);\\n};\\nListJoinWidget.prototype new Widget();\\nListJoinWidget.prototype.render function() {}\\nListJoinWidget.prototype.refresh function() { return false; }\\n\\nexports\\\list-join\\\ ListJoinWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/log.js\:{\title\:\$:/core/modules/widgets/log.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/log.js\\ntype: application/javascript\\nmodule-type: widget-subclass\\n\\nWidget to log debug messages\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.baseClass \\\action-log\\\;\\n\\nexports.name \\\log\\\;\\n\\nexports.constructor function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n}\\n\\nexports.prototype {};\\n\\nexports.prototype.render function(event) {\\n\\tObject.getPrototypeOf(Object.getPrototypeOf(this)).render.call(this,event);\\n\\tObject.getPrototypeOf(Object.getPrototypeOf(this)).log.call(this);\\n}\\n\,\type\:\application/javascript\,\module-type\:\widget-subclass\},\$:/core/modules/widgets/macrocall.js\:{\title\:\$:/core/modules/widgets/macrocall.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/macrocall.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nMacrocall widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar MacroCallWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nMacroCallWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nMacroCallWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nMacroCallWidget.prototype.execute function() {\\n\\tthis.macroName this.parseTreeNode.name || this.getAttribute(\\\$name\\\),\\n\\tthis.parseType this.getAttribute(\\\$type\\\,\\\text/vnd.tiddlywiki\\\);\\n\\tthis.renderOutput this.getAttribute(\\\$output\\\,\\\text/html\\\);\\n\\t// Merge together the parameters specified in the parse tree with the specified attributes\\n\\tvar params this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : ;\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\tparams.push({name: name, value: attribute});\\n\\t\\t}\\n\\t});\\n\\t// Make a transclude widget\\n\\tvar positionalName 0,\\n\\t\\tparseTreeNodes {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tisBlock: this.parseTreeNode.isBlock,\\n\\t\\t\\tchildren: this.parseTreeNode.children\\n\\t\\t};\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\$variable\\\,this.macroName);\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\$type\\\,this.parseType);\\n\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,\\\$output\\\,this.renderOutput);\\n\\t$tw.utils.each(params,function(param) {\\n\\t\\tvar name param.name;\\n\\t\\tif(name) {\\n\\t\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\t\\tname \\\$\\\ + name;\\n\\t\\t\\t}\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,name,param.value);\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(parseTreeNodes0,(positionalName++) + \\\\\\,param.value);\\n\\t\\t}\\n\\t});\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nMacroCallWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\t// Rerender ourselves\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.macrocall MacroCallWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/messagecatcher.js\:{\title\:\$:/core/modules/widgets/messagecatcher.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/messagecatcher.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nMessage catcher widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar MessageCatcherWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nMessageCatcherWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nMessageCatcherWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Helper to add an event handler\\n\\tvar addEventHandler function(type,actions) {\\n\\t\\tif(type && actions) {\\n\\t\\t\\tvar isActionStringExecuting false;\\n\\t\\t\\tself.addEventListener(\\n\\t\\t\\t\\ttype,\\n\\t\\t\\t\\tfunction(event) {\\n\\t\\t\\t\\t\\t// Dont trap the event if it came from one of our action handlers\\n\\t\\t\\t\\t\\tif(isActionStringExecuting) {\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Collect all the event properties into variables\\n\\t\\t\\t\\t\\tvar collectProps function(obj,prefix) {\\n\\t\\t\\t\\t\\t\\tprefix prefix || \\\\\\;\\n\\t\\t\\t\\t\\t\\tvar props {},\\n\\t\\t\\t\\t\\t\\t\\tnames ;\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(obj,function(value,name) {\\n\\t\\t\\t\\t\\t\\t\\tif(\\\string\\\,\\\boolean\\\,\\\number\\\.indexOf(typeof value) ! -1) {\\n\\t\\t\\t\\t\\t\\t\\t\\tnames.push(name);\\n\\t\\t\\t\\t\\t\\t\\t\\tpropsprefix + \\\-\\\ + name value.toString();\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t\\tprops\\\list-\\\ + prefix $tw.utils.stringifyList(names);\\n\\t\\t\\t\\t\\t\\treturn props;\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tvar variables $tw.utils.extend(\\n\\t\\t\\t\\t\\t\\t{},\\n\\t\\t\\t\\t\\t\\tcollectProps(event.paramObject,\\\event-paramObject\\\),\\n\\t\\t\\t\\t\\t\\tcollectProps(event,\\\event\\\),\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tmodifier: $tw.keyboardManager.getEventModifierKeyDescriptor(event)\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\tisActionStringExecuting true;\\n\\t\\t\\t\\t\\tself.invokeActionString(actions,self,event,variables);\\n\\t\\t\\t\\t\\tisActionStringExecuting false;\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t);\\n\\t\\t}\\n\\t}\\n\\t// Add the main event handler\\n\\taddEventHandler(this.getAttribute(\\\type\\\),this.getAttribute(\\\actions\\\));\\n\\t// Add any other event handlers\\n\\t$tw.utils.each(this.attributes,function(value,key) {\\n\\t\\tif(key.charAt(0) \\\$\\\) {\\n\\t\\t\\taddEventHandler(key.slice(1),value);\\n\\t\\t}\\n\\t});\\n\\t// Render children\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nMessageCatcherWidget.prototype.execute function() {\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nMessageCatcherWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.messagecatcher MessageCatcherWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/navigator.js\:{\title\:\$:/core/modules/widgets/navigator.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/navigator.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nNavigator widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar IMPORT_TITLE \\\$:/Import\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar NavigatorWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nNavigatorWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nNavigatorWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-navigate\\\, handler: \\\handleNavigateEvent\\\},\\n\\t\\t{type: \\\tm-edit-tiddler\\\, handler: \\\handleEditTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-delete-tiddler\\\, handler: \\\handleDeleteTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-save-tiddler\\\, handler: \\\handleSaveTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-cancel-tiddler\\\, handler: \\\handleCancelTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-close-tiddler\\\, handler: \\\handleCloseTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-close-all-tiddlers\\\, handler: \\\handleCloseAllTiddlersEvent\\\},\\n\\t\\t{type: \\\tm-close-other-tiddlers\\\, handler: \\\handleCloseOtherTiddlersEvent\\\},\\n\\t\\t{type: \\\tm-new-tiddler\\\, handler: \\\handleNewTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-import-tiddlers\\\, handler: \\\handleImportTiddlersEvent\\\},\\n\\t\\t{type: \\\tm-perform-import\\\, handler: \\\handlePerformImportEvent\\\},\\n\\t\\t{type: \\\tm-fold-tiddler\\\, handler: \\\handleFoldTiddlerEvent\\\},\\n\\t\\t{type: \\\tm-fold-other-tiddlers\\\, handler: \\\handleFoldOtherTiddlersEvent\\\},\\n\\t\\t{type: \\\tm-fold-all-tiddlers\\\, handler: \\\handleFoldAllTiddlersEvent\\\},\\n\\t\\t{type: \\\tm-unfold-all-tiddlers\\\, handler: \\\handleUnfoldAllTiddlersEvent\\\}\\n\\t);\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nNavigatorWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.storyTitle this.getAttribute(\\\story\\\);\\n\\tthis.historyTitle this.getAttribute(\\\history\\\);\\n\\tthis.setVariable(\\\tv-story-list\\\,this.storyTitle);\\n\\tthis.setVariable(\\\tv-history-list\\\,this.historyTitle);\\n\\tthis.story new $tw.Story({\\n\\t\\twiki: this.wiki,\\n\\t\\tstoryTitle: this.storyTitle,\\n\\t\\thistoryTitle: this.historyTitle\\n\\t});\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nNavigatorWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.story || changedAttributes.history) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nNavigatorWidget.prototype.getStoryList function() {\\n\\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\\n};\\n\\nNavigatorWidget.prototype.saveStoryList function(storyList) {\\n\\tif(this.storyTitle) {\\n\\t\\tvar storyTiddler this.wiki.getTiddler(this.storyTitle);\\n\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(\\n\\t\\t\\t{title: this.storyTitle},\\n\\t\\t\\tstoryTiddler,\\n\\t\\t\\t{list: storyList}\\n\\t\\t));\\n\\t}\\n};\\n\\nNavigatorWidget.prototype.removeTitleFromStory function(storyList,title) {\\n\\tif(storyList) {\\n\\t\\tvar p storyList.indexOf(title);\\n\\t\\twhile(p ! -1) {\\n\\t\\t\\tstoryList.splice(p,1);\\n\\t\\t\\tp storyList.indexOf(title);\\n\\t\\t}\\n\\t}\\n};\\n\\nNavigatorWidget.prototype.replaceFirstTitleInStory function(storyList,oldTitle,newTitle) {\\n\\tif(storyList) {\\n\\t\\tvar pos storyList.indexOf(oldTitle);\\n\\t\\tif(pos ! -1) {\\n\\t\\t\\tstoryListpos newTitle;\\n\\t\\t\\tdo {\\n\\t\\t\\t\\tpos storyList.indexOf(oldTitle,pos + 1);\\n\\t\\t\\t\\tif(pos ! -1) {\\n\\t\\t\\t\\t\\tstoryList.splice(pos,1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} while(pos ! -1);\\n\\t\\t} else {\\n\\t\\t\\tstoryList.splice(0,0,newTitle);\\n\\t\\t}\\n\\t}\\n};\\n\\nNavigatorWidget.prototype.addToStory function(title,fromTitle) {\\n\\tif(this.storyTitle) {\\n\\t\\tthis.story.addToStory(title,fromTitle,{\\n\\t\\t\\topenLinkFromInsideRiver: this.getAttribute(\\\openLinkFromInsideRiver\\\,\\\top\\\),\\n\\t\\t\\topenLinkFromOutsideRiver: this.getAttribute(\\\openLinkFromOutsideRiver\\\,\\\top\\\)\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nAdd a new record to the top of the history stack\\ntitle: a title string or an array of title strings\\nfromPageRect: page coordinates of the origin of the navigation\\n*/\\nNavigatorWidget.prototype.addToHistory function(title,fromPageRect) {\\n\\tthis.story.addToHistory(title,fromPageRect,this.historyTitle);\\n};\\n\\n/*\\nHandle a tm-navigate event\\n*/\\nNavigatorWidget.prototype.handleNavigateEvent function(event) {\\n\\tevent $tw.hooks.invokeHook(\\\th-navigating\\\,event);\\n\\tif(event.navigateTo) {\\n\\t\\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\\n\\t\\tif(!event.navigateSuppressNavigation) {\\n\\t\\t\\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n// Close a specified tiddler\\nNavigatorWidget.prototype.handleCloseTiddlerEvent function(event) {\\n\\tevent $tw.hooks.invokeHook(\\\th-closing-tiddler\\\,event);\\n\\tvar title event.param || event.tiddlerTitle,\\n\\t\\tstoryList this.getStoryList();\\n\\t// Look for tiddlers with this title to close\\n\\tthis.removeTitleFromStory(storyList,title);\\n\\tthis.saveStoryList(storyList);\\n\\treturn false;\\n};\\n\\n// Close all tiddlers\\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent function(event) {\\n\\tthis.saveStoryList();\\n\\treturn false;\\n};\\n\\n// Close other tiddlers\\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent function(event) {\\n\\tvar title event.param || event.tiddlerTitle;\\n\\tthis.saveStoryList(title);\\n\\treturn false;\\n};\\n\\n// Place a tiddler in edit mode\\nNavigatorWidget.prototype.handleEditTiddlerEvent function(event) {\\n\\tvar editTiddler $tw.hooks.invokeHook(\\\th-editing-tiddler\\\,event),\\n\\t\\twin event.event && event.event.view ? event.event.view : window;\\n\\tif(!editTiddler) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar self this;\\n\\tfunction isUnmodifiedShadow(title) {\\n\\t\\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\\n\\t}\\n\\tfunction confirmEditShadow(title) {\\n\\t\\treturn win.confirm($tw.language.getString(\\n\\t\\t\\t\\\ConfirmEditShadowTiddler\\\,\\n\\t\\t\\t{variables:\\n\\t\\t\\t\\t{title: title}\\n\\t\\t\\t}\\n\\t\\t));\\n\\t}\\n\\tvar title event.param || event.tiddlerTitle;\\n\\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Replace the specified tiddler with a draft in edit mode\\n\\tvar draftTiddler this.makeDraftTiddler(title);\\n\\t// Update the story and history if required\\n\\tif(!event.paramObject || event.paramObject.suppressNavigation ! \\\yes\\\) {\\n\\t\\tvar draftTitle draftTiddler.fields.title,\\n\\t\\t\\tstoryList this.getStoryList();\\n\\t\\tthis.removeTitleFromStory(storyList,draftTitle);\\n\\t\\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\\n\\t\\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\\n\\t\\tthis.saveStoryList(storyList);\\n\\t\\treturn false;\\n\\t}\\n};\\n\\n// Delete a tiddler\\nNavigatorWidget.prototype.handleDeleteTiddlerEvent function(event) {\\n\\t// Get the tiddler were deleting\\n\\tvar title event.param || event.tiddlerTitle,\\n\\t\\ttiddler this.wiki.getTiddler(title),\\n\\t\\tstoryList this.getStoryList(),\\n\\t\\toriginalTitle tiddler ? tiddler.fields\\\draft.of\\\ : \\\\\\,\\n\\t\\toriginalTiddler originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\\n\\t\\tconfirmationTitle,\\n\\t\\twin event.event && event.event.view ? event.event.view : window;\\n\\t// Check if the tiddler were deleting is in draft mode\\n\\tif(originalTitle) {\\n\\t\\t// If so, well prompt for confirmation referencing the original tiddler\\n\\t\\tconfirmationTitle originalTitle;\\n\\t} else {\\n\\t\\t// If not a draft, then prompt for confirmation referencing the specified tiddler\\n\\t\\tconfirmationTitle title;\\n\\t}\\n\\t// Seek confirmation\\n\\tif(((originalTitle && this.wiki.getTiddler(originalTitle)) || (tiddler && ((tiddler.fields.text || \\\\\\) ! \\\\\\))) && !win.confirm($tw.language.getString(\\n\\t\\t\\t\\t\\\ConfirmDeleteTiddler\\\,\\n\\t\\t\\t\\t{variables:\\n\\t\\t\\t\\t\\t{title: confirmationTitle}\\n\\t\\t\\t\\t}\\n\\t\\t\\t))) {\\n\\t\\treturn false;\\n\\t}\\n\\t// Delete the original tiddler\\n\\tif(originalTitle) {\\n\\t\\tif(originalTiddler) {\\n\\t\\t\\t$tw.hooks.invokeHook(\\\th-deleting-tiddler\\\,originalTiddler);\\n\\t\\t}\\n\\t\\tthis.wiki.deleteTiddler(originalTitle);\\n\\t\\tthis.removeTitleFromStory(storyList,originalTitle);\\n\\t}\\n\\t// Invoke the hook function and delete this tiddler\\n\\tif(tiddler) {\\n\\t\\t$tw.hooks.invokeHook(\\\th-deleting-tiddler\\\,tiddler);\\n\\t\\tthis.wiki.deleteTiddler(title);\\t\\n\\t}\\n\\t// Remove the closed tiddler from the story\\n\\tthis.removeTitleFromStory(storyList,title);\\n\\tthis.saveStoryList(storyList);\\n\\t// Trigger an autosave\\n\\t$tw.rootWidget.dispatchEvent({type: \\\tm-auto-save-wiki\\\});\\n\\treturn false;\\n};\\n\\n/*\\nCreate/reuse the draft tiddler for a given title\\n*/\\nNavigatorWidget.prototype.makeDraftTiddler function(targetTitle) {\\n\\t// See if there is already a draft tiddler for this tiddler\\n\\tvar draftTitle this.wiki.findDraft(targetTitle);\\n\\tif(draftTitle) {\\n\\t\\treturn this.wiki.getTiddler(draftTitle);\\n\\t}\\n\\t// Get the current value of the tiddler were editing\\n\\tvar tiddler this.wiki.getTiddler(targetTitle);\\n\\tvar defaultType this.wiki.getTiddlerText(\\\$:/config/DefaultMissingType\\\, \\\\\\).trim();\\n\\tvar defaultFields { type: defaultType };\\n\\t// Save the initial value of the draft tiddler\\n\\tdraftTitle this.generateDraftTitle(targetTitle);\\n\\tvar draftTiddler new $tw.Tiddler({\\n\\t\\t\\t\\ttext: \\\\\\,\\n\\t\\t\\t},\\n\\t\\t\\ttiddler,\\n\\t\\t\\t{\\n\\t\\t\\t\\ttitle: draftTitle,\\n\\t\\t\\t\\t\\\draft.title\\\: targetTitle,\\n\\t\\t\\t\\t\\\draft.of\\\: targetTitle\\n\\t\\t\\t},\\n\\t\\t\\tthis.wiki.getModificationFields(),\\n\\t\\t\\ttiddler null || tiddler undefined ? defaultFields : {}\\n\\t\\t);\\n\\tthis.wiki.addTiddler(draftTiddler);\\n\\treturn draftTiddler;\\n};\\n\\n/*\\nGenerate a title for the draft of a given tiddler\\n*/\\nNavigatorWidget.prototype.generateDraftTitle function(title) {\\n\\treturn this.wiki.generateDraftTitle(title);\\n};\\n\\n// Take a tiddler out of edit mode, saving the changes\\nNavigatorWidget.prototype.handleSaveTiddlerEvent function(event) {\\n\\tvar title event.param || event.tiddlerTitle,\\n\\t\\ttiddler this.wiki.getTiddler(title),\\n\\t\\tstoryList this.getStoryList(),\\n\\t\\twin event.event && event.event.view ? event.event.view : window;\\n\\t// Replace the original tiddler with the draft\\n\\tif(tiddler) {\\n\\t\\tvar draftTitle (tiddler.fields\\\draft.title\\\ || \\\\\\).trim(),\\n\\t\\t\\tdraftOf (tiddler.fields\\\draft.of\\\ || \\\\\\).trim();\\n\\t\\tif(draftTitle) {\\n\\t\\t\\tvar isRename draftOf ! draftTitle,\\n\\t\\t\\t\\tisConfirmed true;\\n\\t\\t\\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\\n\\t\\t\\t\\tisConfirmed win.confirm($tw.language.getString(\\n\\t\\t\\t\\t\\t\\\ConfirmOverwriteTiddler\\\,\\n\\t\\t\\t\\t\\t{variables:\\n\\t\\t\\t\\t\\t\\t{title: draftTitle}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t));\\n\\t\\t\\t}\\n\\t\\t\\tif(isConfirmed) {\\n\\t\\t\\t\\t// Create the new tiddler and pass it through the th-saving-tiddler hook\\n\\t\\t\\t\\tvar newTiddler new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\\n\\t\\t\\t\\t\\ttitle: draftTitle,\\n\\t\\t\\t\\t\\t\\\draft.title\\\: undefined,\\n\\t\\t\\t\\t\\t\\\draft.of\\\: undefined\\n\\t\\t\\t\\t},this.wiki.getModificationFields());\\n\\t\\t\\t\\tnewTiddler $tw.hooks.invokeHook(\\\th-saving-tiddler\\\,newTiddler,tiddler);\\n\\t\\t\\t\\tthis.wiki.addTiddler(newTiddler);\\n\\t\\t\\t\\t// If enabled, relink references to renamed tiddler\\n\\t\\t\\t\\tvar shouldRelink this.getAttribute(\\\relinkOnRename\\\,\\\no\\\).toLowerCase().trim() \\\yes\\\;\\n\\t\\t\\t\\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\\n\\t\\t\\t\\t\\tthis.wiki.relinkTiddler(draftOf,draftTitle);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Remove the draft tiddler\\n\\t\\t\\t\\tthis.wiki.deleteTiddler(title);\\n\\t\\t\\t\\t// Remove the original tiddler if were renaming it\\n\\t\\t\\t\\tif(isRename) {\\n\\t\\t\\t\\t\\tthis.wiki.deleteTiddler(draftOf);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// #2381 always remove new title & old\\n\\t\\t\\t\\tthis.removeTitleFromStory(storyList,draftTitle);\\n\\t\\t\\t\\tthis.removeTitleFromStory(storyList,draftOf);\\n\\t\\t\\t\\tif(!event.paramObject || event.paramObject.suppressNavigation ! \\\yes\\\) {\\n\\t\\t\\t\\t\\t// Replace the draft in the story with the original\\n\\t\\t\\t\\t\\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\\n\\t\\t\\t\\t\\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\\n\\t\\t\\t\\t\\tif(draftTitle ! this.storyTitle) {\\n\\t\\t\\t\\t\\t\\tthis.saveStoryList(storyList);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Trigger an autosave\\n\\t\\t\\t\\t$tw.rootWidget.dispatchEvent({type: \\\tm-auto-save-wiki\\\});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n// Take a tiddler out of edit mode without saving the changes\\nNavigatorWidget.prototype.handleCancelTiddlerEvent function(event) {\\n\\tevent $tw.hooks.invokeHook(\\\th-cancelling-tiddler\\\, event);\\n\\tvar win event.event && event.event.view ? event.event.view : window;\\n\\t// Flip the specified tiddler from draft back to the original\\n\\tvar draftTitle event.param || event.tiddlerTitle,\\n\\t\\tdraftTiddler this.wiki.getTiddler(draftTitle),\\n\\t\\toriginalTitle draftTiddler && draftTiddler.fields\\\draft.of\\\;\\n\\tif(draftTiddler && originalTitle) {\\n\\t\\t// Ask for confirmation if the tiddler text has changed\\n\\t\\tvar isConfirmed true,\\n\\t\\t\\toriginalTiddler this.wiki.getTiddler(originalTitle),\\n\\t\\t\\tstoryList this.getStoryList();\\n\\t\\tif(this.wiki.isDraftModified(draftTitle)) {\\n\\t\\t\\tisConfirmed win.confirm($tw.language.getString(\\n\\t\\t\\t\\t\\\ConfirmCancelTiddler\\\,\\n\\t\\t\\t\\t{variables:\\n\\t\\t\\t\\t\\t{title: draftTitle}\\n\\t\\t\\t\\t}\\n\\t\\t\\t));\\n\\t\\t}\\n\\t\\t// Remove the draft tiddler\\n\\t\\tif(isConfirmed) {\\n\\t\\t\\tthis.wiki.deleteTiddler(draftTitle);\\n\\t\\t\\tif(!event.paramObject || event.paramObject.suppressNavigation ! \\\yes\\\) {\\n\\t\\t\\t\\tif(originalTiddler) {\\n\\t\\t\\t\\t\\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\\n\\t\\t\\t\\t\\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthis.removeTitleFromStory(storyList,draftTitle);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tthis.saveStoryList(storyList);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n// Create a new draft tiddler\\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\\n//\\n// The title of the newly created tiddler follows these rules:\\n// * If a hashmap was used and a title field was specified, use that title\\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\\n//\\n// If a draft of the target tiddler already exists then it is reused\\nNavigatorWidget.prototype.handleNewTiddlerEvent function(event) {\\n\\tevent $tw.hooks.invokeHook(\\\th-new-tiddler\\\, event);\\n\\t// Get the story details\\n\\tvar storyList this.getStoryList(),\\n\\t\\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler,\\n\\t\\ttemplateHasTags false;\\n\\t// Get the template tiddler (if any)\\n\\tif(typeof event.param \\\string\\\) {\\n\\t\\t// Get the template tiddler\\n\\t\\ttemplateTiddler this.wiki.getTiddler(event.param);\\n\\t\\t// Generate a new title\\n\\t\\ttitle this.wiki.generateNewTitle(event.param || $tw.language.getString(\\\DefaultNewTiddlerTitle\\\));\\n\\t}\\n\\t// Get the specified additional fields\\n\\tif(typeof event.paramObject \\\object\\\) {\\n\\t\\tadditionalFields event.paramObject;\\n\\t}\\n\\tif(typeof event.param \\\object\\\) { // Backwards compatibility with 5.1.3\\n\\t\\tadditionalFields event.param;\\n\\t}\\n\\tif(additionalFields && additionalFields.title) {\\n\\t\\ttitle additionalFields.title;\\n\\t}\\n\\t// Make a copy of the additional fields excluding any blank ones\\n\\tvar filteredAdditionalFields $tw.utils.extend({},additionalFields);\\n\\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\\n\\t\\tif(filteredAdditionalFieldsfieldName \\\\\\) {\\n\\t\\t\\tdelete filteredAdditionalFieldsfieldName;\\n\\t\\t}\\n\\t});\\n\\t// Generate a title if we dont have one\\n\\ttitle title || this.wiki.generateNewTitle($tw.language.getString(\\\DefaultNewTiddlerTitle\\\));\\n\\t// Find any existing draft for this tiddler\\n\\tdraftTitle this.wiki.findDraft(title);\\n\\t// Pull in any existing tiddler\\n\\tif(draftTitle) {\\n\\t\\texistingTiddler this.wiki.getTiddler(draftTitle);\\n\\t} else {\\n\\t\\tdraftTitle this.generateDraftTitle(title);\\n\\t\\texistingTiddler this.wiki.getTiddler(title);\\n\\t}\\n\\t// Merge the tags\\n\\tvar mergedTags ;\\n\\tif(existingTiddler && existingTiddler.fields.tags) {\\n\\t\\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\\n\\t}\\n\\tif(additionalFields && additionalFields.tags) {\\n\\t\\t// Merge tags\\n\\t\\tmergedTags $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\\n\\t}\\n\\tvar additionalFieldsHasTags !!(additionalFields && (additionalFields.tags \\\\\\));\\n\\tif(templateTiddler && templateTiddler.fields.tags) {\\n\\t\\t// Merge tags\\n\\t\\ttemplateHasTags true;\\n\\t\\tmergedTags $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\\n\\t}\\n\\t// Save the draft tiddler\\n\\tvar draftTiddler new $tw.Tiddler({\\n\\t\\t\\ttext: \\\\\\,\\n\\t\\t\\t\\\draft.title\\\: title\\n\\t\\t},\\n\\t\\ttemplateTiddler,\\n\\t\\tadditionalFields,\\n\\t\\tthis.wiki.getCreationFields(),\\n\\t\\texistingTiddler,\\n\\t\\tfilteredAdditionalFields,\\n\\t\\t{\\n\\t\\t\\ttitle: draftTitle,\\n\\t\\t\\t\\\draft.of\\\: title,\\n\\t\\t\\t// If template or additionalFields have \\\tags\\\ even if empty a tags field will be created.\\n\\t\\t\\ttags: ((mergedTags.length > 0) || templateHasTags || additionalFieldsHasTags) ? mergedTags : undefined\\n\\t\\t},this.wiki.getModificationFields());\\n\\tthis.wiki.addTiddler(draftTiddler);\\n\\t// Update the story to insert the new draft at the top and remove any existing tiddler\\n\\tif(storyList && storyList.indexOf(draftTitle) -1) {\\n\\t\\tvar slot storyList.indexOf(event.navigateFromTitle);\\n\\t\\tif(slot -1) {\\n\\t\\t\\tslot this.getAttribute(\\\openLinkFromOutsideRiver\\\,\\\top\\\) \\\bottom\\\ ? storyList.length - 1 : slot;\\n\\t\\t}\\n\\t\\tstoryList.splice(slot + 1,0,draftTitle);\\n\\t}\\n\\tif(storyList && storyList.indexOf(title) ! -1) {\\n\\t\\tstoryList.splice(storyList.indexOf(title),1);\\n\\t}\\n\\tthis.saveStoryList(storyList);\\n\\t// Add a new record to the top of the history stack\\n\\tthis.addToHistory(draftTitle);\\n\\treturn false;\\n};\\n\\n// Import JSON tiddlers into a pending import tiddler\\nNavigatorWidget.prototype.handleImportTiddlersEvent function(event) {\\n\\t// Get the tiddlers\\n\\tvar tiddlers $tw.utils.parseJSONSafe(event.param,);\\n\\t// Get the current $:/Import tiddler\\n\\tvar paramObject event.paramObject || {},\\n\\t\\timportTitle event.importTitle || paramObject.importTitle || IMPORT_TITLE,\\n\\t\\timportTiddler this.wiki.getTiddler(importTitle),\\n\\t\\timportData this.wiki.getTiddlerData(importTitle,{}),\\n\\t\\tnewFields new Object({\\n\\t\\t\\ttitle: importTitle,\\n\\t\\t\\ttype: \\\application/json\\\,\\n\\t\\t\\t\\\plugin-type\\\: \\\import\\\,\\n\\t\\t\\t\\\status\\\: \\\pending\\\\\n\\t\\t}),\\n\\t\\tincomingTiddlers ;\\n\\t// Process each tiddler\\n\\timportData.tiddlers importData.tiddlers || {};\\n\\t$tw.utils.each(tiddlers,function(tiddlerFields) {\\n\\t\\ttiddlerFields.title $tw.utils.trim(tiddlerFields.title);\\n\\t\\tvar title tiddlerFields.title;\\n\\t\\tif(title) {\\n\\t\\t\\tincomingTiddlers.push(title);\\n\\t\\t\\timportData.tiddlerstitle tiddlerFields;\\n\\t\\t}\\n\\t});\\n\\t// Give the active upgrader modules a chance to process the incoming tiddlers\\n\\tvar messages this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\\n\\t// Deselect any disabled, but _not_ suppressed tiddlers\\n\\tvar systemMessage $tw.language.getString(\\\Import/Upgrader/Tiddler/Unselected\\\);\\n\\t$tw.utils.each(messages,function(message,title) {\\n\\t\\tnewFields\\\message-\\\ + title message;\\n\\t\\tif(message.indexOf(systemMessage) ! -1) {\\n\\t\\t\\tnewFields\\\selection-\\\ + title \\\unchecked\\\;\\n\\t\\t}\\n\\t});\\n\\t// Deselect suppressed tiddlers ... they have been removed and cant be selected anymore\\n\\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\\n\\t\\tif($tw.utils.count(tiddler) 0) {\\n\\t\\t\\tnewFields\\\selection-\\\ + title \\\unchecked\\\;\\n\\t\\t\\tnewFields\\\suppressed-\\\ + title \\\yes\\\;\\n\\t\\t}\\n\\t});\\n\\t// Save the $:/Import tiddler\\n\\tnewFields.text JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\\n\\t// Update the story and history details\\n\\tvar autoOpenOnImport event.autoOpenOnImport || paramObject.autoOpenOnImport || this.getVariable(\\\tv-auto-open-on-import\\\);\\n\\tif(autoOpenOnImport ! \\\no\\\) {\\n\\t\\tvar storyList this.getStoryList(),\\n\\t\\t\\thistory ;\\n\\t\\t// Add it to the story\\n\\t\\tif(storyList && storyList.indexOf(importTitle) -1) {\\n\\t\\t\\tstoryList.unshift(importTitle);\\n\\t\\t}\\n\\t\\t// And to history\\n\\t\\thistory.push(importTitle);\\n\\t\\t// Save the updated story and history\\n\\t\\tthis.saveStoryList(storyList);\\n\\t\\tthis.addToHistory(history);\\n\\t}\\n\\treturn false;\\n};\\n\\n//\\nNavigatorWidget.prototype.handlePerformImportEvent function(event) {\\n\\tvar self this,\\n\\t\\timportTiddler this.wiki.getTiddler(event.param),\\n\\t\\timportData,\\n\\t\\timportReport ;\\n\\timportReport.push($tw.language.getString(\\\Import/Imported/Hint\\\) + \\\\\\\n\\\);\\n\\t// If you need to modify the import tiddler payload then consider th-importing-tiddler instead\\n\\timportTiddler $tw.hooks.invokeHook(\\\th-before-importing\\\,importTiddler);\\n\\timportData this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\\n\\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\\n\\t\\tvar title tiddlerFields.title;\\n\\t\\tif(title && importTiddler && importTiddler.fields\\\selection-\\\ + title ! \\\unchecked\\\) {\\n\\t\\t\\tif($tw.utils.hop(importTiddler.fields,\\\rename-\\\ + title)) {\\n\\t\\t\\t\\tvar tiddler new $tw.Tiddler(tiddlerFields,{title : importTiddler.fields\\\rename-\\\ + title});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar tiddler new $tw.Tiddler(tiddlerFields);\\n\\t\\t\\t}\\n\\t\\t\\t// th-importing-tiddler doesnt allow user interaction by default\\n\\t\\t\\t// If you want to use the default UI then use: $:/core/modules/upgraders/ instead\\n\\t\\t\\ttiddler $tw.hooks.invokeHook(\\\th-importing-tiddler\\\,tiddler);\\n\\t\\t\\t// Add the tiddlers to the store\\n\\t\\t\\tself.wiki.addTiddler(tiddler);\\n\\t\\t\\timportReport.push(\\\# \\\ + tiddler.fields.title + \\\\\\);\\n\\t\\t}\\n\\t});\\n\\t// Replace the $:/Import tiddler with an import report\\n\\tthis.wiki.addTiddler(new $tw.Tiddler({\\n\\t\\ttitle: event.param,\\n\\t\\ttext: importReport.join(\\\\\\\n\\\),\\n\\t\\t\\\status\\\: \\\complete\\\\\n\\t}));\\n\\t// Navigate to the $:/Import tiddler\\n\\tthis.addToHistory(event.param);\\n\\t// Trigger an autosave\\n\\t$tw.rootWidget.dispatchEvent({type: \\\tm-auto-save-wiki\\\});\\n};\\n\\nNavigatorWidget.prototype.handleFoldTiddlerEvent function(event) {\\n\\tvar paramObject event.paramObject || {};\\n\\tif(paramObject.foldedState) {\\n\\t\\tvar foldedState this.wiki.getTiddlerText(paramObject.foldedState,\\\show\\\) \\\show\\\ ? \\\hide\\\ : \\\show\\\;\\n\\t\\tthis.wiki.setText(paramObject.foldedState,\\\text\\\,null,foldedState);\\n\\t}\\n};\\n\\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent function(event) {\\n\\tvar self this,\\n\\t\\tparamObject event.paramObject || {},\\n\\t\\tprefix paramObject.foldedStatePrefix;\\n\\t$tw.utils.each(this.getStoryList(),function(title) {\\n\\t\\tself.wiki.setText(prefix + title,\\\text\\\,null,event.param title ? \\\show\\\ : \\\hide\\\);\\n\\t});\\n};\\n\\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent function(event) {\\n\\tvar self this,\\n\\t\\tparamObject event.paramObject || {},\\n\\t\\tprefix paramObject.foldedStatePrefix || \\\$:/state/folded/\\\;\\n\\t$tw.utils.each(this.getStoryList(),function(title) {\\n\\t\\tself.wiki.setText(prefix + title,\\\text\\\,null,\\\hide\\\);\\n\\t});\\n};\\n\\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent function(event) {\\n\\tvar self this,\\n\\t\\tparamObject event.paramObject || {},\\n\\t\\tprefix paramObject.foldedStatePrefix;\\n\\t$tw.utils.each(this.getStoryList(),function(title) {\\n\\t\\tself.wiki.setText(prefix + title,\\\text\\\,null,\\\show\\\);\\n\\t});\\n};\\n\\nexports.navigator NavigatorWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/parameters.js\:{\title\:\$:/core/modules/widgets/parameters.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/parameters.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget for definition of transclusion parameters\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget,\\n\\tTranscludeWidget require(\\\$:/core/modules/widgets/transclude.js\\\).transclude;\\n\\nvar ParametersWidget function(parseTreeNode,options) {\\n\\t// Initialise\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nParametersWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nParametersWidget.prototype.render function(parent,nextSibling) {\\n\\t// Call the constructor\\n\\tWidget.call(this);\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nParametersWidget.prototype.execute function() {\\n\\tvar self this;\\n\\tthis.parametersDepth Math.max(parseInt(this.getAttribute(\\\$depth\\\,\\\1\\\),10) || 1,1);\\n\\t// Find the parent transclusions\\n\\tvar pointer this.parentWidget,\\n\\t\\tdepth this.parametersDepth;\\n\\twhile(pointer) {\\n\\t\\tif(pointer instanceof TranscludeWidget) {\\n\\t\\t\\tdepth--;\\n\\t\\t\\tif(depth \u003C 0) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpointer pointer.parentWidget;\\n\\t}\\n\\t// Process each parameter\\n\\tif(pointer instanceof TranscludeWidget) {\\n\\t\\t// Get the value for each defined parameter\\n\\t\\t$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(self.parseTreeNode),function(attr,index) {\\n\\t\\t\\tvar name attr.name;\\n\\t\\t\\t// If the attribute name starts with $$ then reduce to a single dollar\\n\\t\\t\\tif(name.substr(0,2) \\\$$\\\) {\\n\\t\\t\\t\\tname name.substr(1);\\n\\t\\t\\t}\\n\\t\\t\\tvar value pointer.getTransclusionParameter(name,index,self.getAttribute(attr.name,\\\\\\));\\n\\t\\t\\tself.setVariable(name,value);\\n\\t\\t});\\n\\t\\t// Assign any metaparameters\\n\\t\\t$tw.utils.each(pointer.getTransclusionMetaParameters(),function(getValue,name) {\\n\\t\\t\\tvar variableName self.getAttribute(\\\$\\\ + name);\\n\\t\\t\\tif(variableName) {\\n\\t\\t\\t\\tself.setVariable(variableName,getValue(name));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t} else {\\n\\t\\t// There is no parent transclude. i.e. direct rendering.\\n\\t\\t// We use default values only.\\n\\t\\t$tw.utils.each($tw.utils.getOrderedAttributesFromParseTreeNode(self.parseTreeNode),function(attr,index) {\\n\\t\\t\\tvar name attr.name;\\n\\t\\t\\t// If the attribute name starts with $$ then reduce to a single dollar\\n\\t\\t\\tif(name.substr(0,2) \\\$$\\\) {\\n\\t\\t\\t\\tname name.substr(1);\\n\\t\\t\\t}\\n\\t\\t\\tvar value self.getAttribute(attr.name,\\\\\\);\\n\\t\\t\\tself.setVariable(name,value);\\n\\t\\t});\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nParametersWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(Object.keys(changedAttributes).length) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.parameters ParametersWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/password.js\:{\title\:\$:/core/modules/widgets/password.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/password.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nPassword widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar PasswordWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nPasswordWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nPasswordWidget.prototype.render function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Get the current password\\n\\tvar password $tw.browser ? $tw.utils.getPassword(this.passwordName) || \\\\\\ : \\\\\\;\\n\\t// Create our element\\n\\tvar domNode this.document.createElement(\\\input\\\);\\n\\tdomNode.setAttribute(\\\type\\\,\\\password\\\);\\n\\tdomNode.setAttribute(\\\value\\\,password);\\n\\t// Add a click event handler\\n\\t$tw.utils.addEventListeners(domNode,\\n\\t\\t{name: \\\change\\\, handlerObject: this, handlerMethod: \\\handleChangeEvent\\\}\\n\\t);\\n\\t// Insert the label into the DOM and render any children\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n};\\n\\nPasswordWidget.prototype.handleChangeEvent function(event) {\\n\\tvar password this.domNodes0.value;\\n\\treturn $tw.utils.savePassword(this.passwordName,password);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nPasswordWidget.prototype.execute function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.passwordName this.getAttribute(\\\name\\\,\\\\\\);\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nPasswordWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.name) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.password PasswordWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/qualify.js\:{\title\:\$:/core/modules/widgets/qualify.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/qualify.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nQualify text to a variable \\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar QualifyWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nQualifyWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nQualifyWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nQualifyWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.qualifyName this.getAttribute(\\\name\\\);\\n\\tthis.qualifyTitle this.getAttribute(\\\title\\\);\\n\\t// Set context variable\\n\\tif(this.qualifyName) {\\n\\t\\tthis.setVariable(this.qualifyName,this.qualifyTitle + \\\-\\\ + this.getStateQualifier());\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nQualifyWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.name || changedAttributes.title) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.qualify QualifyWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/radio.js\:{\title\:\$:/core/modules/widgets/radio.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/radio.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nSet a field or index at a given tiddler via radio buttons\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\nvar RadioWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nRadioWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRadioWidget.prototype.render function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\tvar isChecked this.getValue() this.radioValue;\\n\\t// Create our elements\\n\\tthis.labelDomNode this.document.createElement(\\\label\\\);\\n\\tthis.labelDomNode.setAttribute(\\\class\\\,\\n\\t\\t\\\tc-radio \\\ + this.radioClass + (isChecked ? \\\ tc-radio-selected\\\ : \\\\\\)\\n\\t);\\n\\tthis.inputDomNode this.document.createElement(\\\input\\\);\\n\\tthis.inputDomNode.setAttribute(\\\type\\\,\\\radio\\\);\\n\\tthis.assignAttributes(this.inputDomNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\tif(isChecked) {\\n\\t\\tthis.inputDomNode.checked true;\\n\\t}\\n\\tif(this.tabIndex) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\tabindex\\\, this.tabIndex);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\tthis.labelDomNode.appendChild(this.inputDomNode);\\n\\tthis.spanDomNode this.document.createElement(\\\span\\\);\\n\\tthis.labelDomNode.appendChild(this.spanDomNode);\\n\\t// Add a click event handler\\n\\t$tw.utils.addEventListeners(this.inputDomNode,\\n\\t\\t{name: \\\change\\\, handlerObject: this, handlerMethod: \\\handleChangeEvent\\\}\\n\\t);\\n\\t// Insert the label into the DOM and render any children\\n\\tparent.insertBefore(this.labelDomNode,nextSibling);\\n\\tthis.renderChildren(this.spanDomNode,null);\\n\\tthis.domNodes.push(this.labelDomNode);\\n};\\n\\nRadioWidget.prototype.getValue function() {\\n\\tvar value,\\n\\t\\ttiddler this.wiki.getTiddler(this.radioTitle);\\n\\tif(tiddler) {\\n\\t\\tif(this.radioIndex) {\\n\\t\\t\\tvalue this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex,this.radioDefault);\\n\\t\\t} else {\\n\\t\\t\\tvalue tiddler.getFieldString(this.radioField,this.radioDefault);\\n\\t\\t}\\n\\t} else {\\n\\t\\tvalue this.radioDefault;\\n\\t}\\n\\treturn value;\\n};\\n\\nRadioWidget.prototype.setValue function() {\\n\\tif(this.radioIndex) {\\n\\t\\tthis.wiki.setText(this.radioTitle,\\\\\\,this.radioIndex,this.radioValue);\\n\\t} else {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.radioTitle),\\n\\t\\t\\taddition {};\\n\\t\\tadditionthis.radioField this.radioValue;\\n\\t\\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\\n\\t}\\n};\\n\\nRadioWidget.prototype.handleChangeEvent function(event) {\\n\\tif(this.inputDomNode.checked) {\\n\\t\\tthis.setValue();\\n\\t}\\n\\t// Trigger actions\\n\\tif(this.radioActions) {\\n\\t\\tthis.invokeActionString(this.radioActions,this,event,{\\\actionValue\\\: this.radioValue});\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nRadioWidget.prototype.execute function() {\\n\\t// Get the parameters from the attributes\\n\\tthis.radioTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.radioField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\tthis.radioIndex this.getAttribute(\\\index\\\);\\n\\tthis.radioValue this.getAttribute(\\\value\\\);\\n\\tthis.radioClass this.getAttribute(\\\class\\\,\\\\\\);\\n\\tthis.radioDefault this.getAttribute(\\\default\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\tthis.tabIndex this.getAttribute(\\\tabindex\\\);\\n\\tthis.radioActions this.getAttribute(\\\actions\\\,\\\\\\);\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nRadioWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(($tw.utils.count(changedAttributes) > 0)) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else if(changedTiddlersthis.radioTitle) {\\n\\t\\tthis.inputDomNode.checked this.getValue() this.radioValue;\\n\\t\\t$tw.utils.toggleClass(this.labelDomNode,\\\tc-radio-selected\\\,this.inputDomNode.checked);\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.radio RadioWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/range.js\:{\title\:\$:/core/modules/widgets/range.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/range.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nRange widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar RangeWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nRangeWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRangeWidget.prototype.render function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute our attributes\\n\\tthis.computeAttributes();\\n\\t// Execute our logic\\n\\tthis.execute();\\n\\t// Create our elements\\n\\tthis.inputDomNode this.document.createElement(\\\input\\\);\\n\\tthis.inputDomNode.setAttribute(\\\type\\\,\\\range\\\);\\n\\tthis.inputDomNode.setAttribute(\\\class\\\,this.elementClass);\\n\\tif(this.minValue){\\n\\t\\tthis.inputDomNode.setAttribute(\\\min\\\, this.minValue);\\n\\t}\\n\\tif(this.maxValue){\\n\\t\\tthis.inputDomNode.setAttribute(\\\max\\\, this.maxValue);\\n\\t}\\n\\tif(this.increment){\\n\\t\\tthis.inputDomNode.setAttribute(\\\step\\\, this.increment);\\n\\t}\\n\\tif(this.tabIndex) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\tabindex\\\, this.tabIndex);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tthis.inputDomNode.setAttribute(\\\disabled\\\,true);\\n\\t}\\n\\tthis.inputDomNode.value this.getValue();\\n\\tthis.assignAttributes(this.inputDomNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\t// Add a click event handler\\n\\t$tw.utils.addEventListeners(this.inputDomNode,\\n\\t\\t{name:\\\mousedown\\\, handlerObject:this, handlerMethod:\\\handleMouseDownEvent\\\},\\n\\t\\t{name:\\\mouseup\\\, handlerObject:this, handlerMethod:\\\handleMouseUpEvent\\\},\\n\\t\\t{name:\\\change\\\, handlerObject:this, handlerMethod:\\\handleChangeEvent\\\},\\n\\t\\t{name:\\\input\\\, handlerObject:this, handlerMethod:\\\handleInputEvent\\\},\\n\\t);\\n\\t// Insert the label into the DOM and render any children\\n\\tparent.insertBefore(this.inputDomNode,nextSibling);\\n\\tthis.domNodes.push(this.inputDomNode);\\n};\\n\\nRangeWidget.prototype.getValue function() {\\n\\tvar tiddler this.wiki.getTiddler(this.tiddlerTitle),\\n\\t\\tfieldName this.tiddlerField,\\n\\t\\tvalue this.defaultValue;\\n\\tif(tiddler) {\\n\\t\\tif(this.tiddlerIndex) {\\n\\t\\t\\tvalue this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue);\\n\\t\\t} else {\\n\\t\\t\\tif($tw.utils.hop(tiddler.fields,fieldName)) {\\n\\t\\t\\t\\tvalue tiddler.fieldsfieldName || \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvalue this.defaultValue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn value;\\n};\\n\\nRangeWidget.prototype.getActionVariables function(options) {\\n\\toptions options || {};\\n\\tvar hasChanged (this.startValue ! this.inputDomNode.value) ? \\\yes\\\ : \\\no\\\;\\n\\t// Trigger actions. Use variables {key:value, key:value ...}\\n\\t// the \\\value\\\ is needed.\\n\\treturn $tw.utils.extend({\\\actionValue\\\: this.inputDomNode.value, \\\actionValueHasChanged\\\: hasChanged}, options);\\n}\\n\\n// actionsStart\\nRangeWidget.prototype.handleMouseDownEvent function(event) {\\n\\tthis.mouseDown true; // TODO remove once IE is gone.\\n\\tthis.startValue this.inputDomNode.value; // TODO remove this line once IE is gone!\\n\\tthis.handleEvent(event);\\n\\t// Trigger actions\\n\\tif(this.actionsMouseDown) {\\n\\t\\tvar variables this.getActionVariables() // TODO this line will go into the function call below.\\n\\t\\tthis.invokeActionString(this.actionsMouseDown,this,event,variables);\\n\\t}\\n}\\n\\n// actionsStop\\nRangeWidget.prototype.handleMouseUpEvent function(event) {\\n\\tthis.mouseDown false; // TODO remove once IE is gone.\\n\\tthis.handleEvent(event);\\n\\t// Trigger actions\\n\\tif(this.actionsMouseUp) {\\n\\t\\tvar variables this.getActionVariables()\\n\\t\\tthis.invokeActionString(this.actionsMouseUp,this,event,variables);\\n\\t}\\n\\t// TODO remove the following if() once IE is gone!\\n\\tif ($tw.browser.isIE) {\\n\\t\\tif (this.startValue ! this.inputDomNode.value) {\\n\\t\\t\\tthis.handleChangeEvent(event);\\n\\t\\t\\tthis.startValue this.inputDomNode.value;\\n\\t\\t}\\n\\t}\\n}\\n\\nRangeWidget.prototype.handleChangeEvent function(event) {\\n\\tif (this.mouseDown) { // TODO refactor this function once IE is gone.\\n\\t\\tthis.handleInputEvent(event);\\n\\t}\\n};\\n\\nRangeWidget.prototype.handleInputEvent function(event) {\\n\\tthis.handleEvent(event);\\n\\t// Trigger actions\\n\\tif(this.actionsInput) {\\n\\t\\t// \\\tiddler\\\ parameter may be missing. See .execute() below\\n\\t\\tvar variables this.getActionVariables({\\\actionValueHasChanged\\\: \\\yes\\\}) // TODO this line will go into the function call below.\\n\\t\\tthis.invokeActionString(this.actionsInput,this,event,variables);\\n\\t}\\n};\\n\\nRangeWidget.prototype.handleEvent function(event) {\\n\\tif(this.getValue() ! this.inputDomNode.value) {\\n\\t\\tif(this.tiddlerIndex) {\\n\\t\\t\\tthis.wiki.setText(this.tiddlerTitle,\\\\\\,this.tiddlerIndex,this.inputDomNode.value);\\n\\t\\t} else {\\n\\t\\t\\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nRangeWidget.prototype.execute function() {\\n\\t// TODO remove the next 1 lines once IE is gone!\\n\\tthis.mouseUp true; // Needed for IE10\\n\\t// Get the parameters from the attributes\\n\\tthis.tiddlerTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.tiddlerField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\tthis.tiddlerIndex this.getAttribute(\\\index\\\);\\n\\tthis.minValue this.getAttribute(\\\min\\\);\\n\\tthis.maxValue this.getAttribute(\\\max\\\);\\n\\tthis.increment this.getAttribute(\\\increment\\\);\\n\\tthis.defaultValue this.getAttribute(\\\default\\\,\\\\\\);\\n\\tthis.elementClass this.getAttribute(\\\class\\\,\\\\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\tthis.tabIndex this.getAttribute(\\\tabindex\\\);\\n\\t// Actions since 5.1.23\\n\\t// Next 2 only fire once!\\n\\tthis.actionsMouseDown this.getAttribute(\\\actionsStart\\\,\\\\\\);\\n\\tthis.actionsMouseUp this.getAttribute(\\\actionsStop\\\,\\\\\\);\\n\\t// Input fires very often!\\n\\tthis.actionsInput this.getAttribute(\\\actions\\\,\\\\\\);\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nRangeWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tvar refreshed false;\\n\\t\\tif(changedTiddlersthis.tiddlerTitle) {\\n\\t\\t\\tvar value this.getValue();\\n\\t\\t\\tif(this.inputDomNode.value ! value) {\\n\\t\\t\\t\\tthis.inputDomNode.value value;\\n\\t\\t\\t}\\n\\t\\t\\trefreshed true;\\n\\t\\t}\\n\\t\\treturn this.refreshChildren(changedTiddlers) || refreshed;\\n\\t}\\n};\\n\\nexports.range RangeWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/raw.js\:{\title\:\$:/core/modules/widgets/raw.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/raw.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nRaw widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar RawWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nRawWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRawWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.execute();\\n\\tvar div this.document.createElement(\\\div\\\);\\n\\tdiv.innerHTMLthis.parseTreeNode.html;\\n\\tparent.insertBefore(div,nextSibling);\\n\\tthis.domNodes.push(div);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nRawWidget.prototype.execute function() {\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nRawWidget.prototype.refresh function(changedTiddlers) {\\n\\treturn false;\\n};\\n\\nexports.raw RawWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/reveal.js\:{\title\:\$:/core/modules/widgets/reveal.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/reveal.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nReveal widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar Popup require(\\\$:/core/modules/utils/dom/popup.js\\\);\\n\\nvar RevealWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nRevealWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nRevealWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar tag this.parseTreeNode.isBlock ? \\\div\\\ : \\\span\\\;\\n\\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) -1) {\\n\\t\\ttag this.revealTag;\\n\\t}\\n\\tvar domNode this.document.createElement(tag);\\n\\tthis.domNode domNode;\\n\\tthis.assignDomNodeClasses();\\n\\tif(this.style) {\\n\\t\\tdomNode.setAttribute(\\\style\\\,this.style);\\n\\t}\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tif(!domNode.isTiddlyWikiFakeDom && this.type \\\popup\\\ && this.isOpen) {\\n\\t\\tthis.positionPopup(domNode);\\n\\t\\t$tw.utils.addClass(domNode,\\\tc-popup\\\); // Make sure that clicks dont dismiss popups within the revealed content\\n\\t}\\n\\tif(!this.isOpen) {\\n\\t\\tdomNode.setAttribute(\\\hidden\\\,\\\true\\\);\\n\\t}\\n\\tthis.domNodes.push(domNode);\\n};\\n\\nRevealWidget.prototype.positionPopup function(domNode) {\\n\\tdomNode.style.position \\\absolute\\\;\\n\\tdomNode.style.zIndex \\\1000\\\;\\n\\tvar left,top;\\n\\tswitch(this.position) {\\n\\t\\tcase \\\left\\\:\\n\\t\\t\\tleft this.popup.left - domNode.offsetWidth;\\n\\t\\t\\ttop this.popup.top;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\above\\\:\\n\\t\\t\\tleft this.popup.left;\\n\\t\\t\\ttop this.popup.top - domNode.offsetHeight;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\aboveright\\\:\\n\\t\\t\\tleft this.popup.left + this.popup.width;\\n\\t\\t\\ttop this.popup.top + this.popup.height - domNode.offsetHeight;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\belowright\\\:\\n\\t\\t\\tleft this.popup.left + this.popup.width;\\n\\t\\t\\ttop this.popup.top + this.popup.height;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\right\\\:\\n\\t\\t\\tleft this.popup.left + this.popup.width;\\n\\t\\t\\ttop this.popup.top;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\belowleft\\\:\\n\\t\\t\\tleft this.popup.left + this.popup.width - domNode.offsetWidth;\\n\\t\\t\\ttop this.popup.top + this.popup.height;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\aboveleft\\\:\\n\\t\\t\\tleft this.popup.left - domNode.offsetWidth;\\n\\t\\t\\ttop this.popup.top - domNode.offsetHeight;\\n\\t\\t\\tbreak;\\n\\t\\tdefault: // Below\\n\\t\\t\\tleft this.popup.left;\\n\\t\\t\\ttop this.popup.top + this.popup.height;\\n\\t\\t\\tbreak;\\n\\t}\\n\\tif(!this.positionAllowNegative) {\\n\\t\\tleft Math.max(0,left);\\n\\t\\ttop Math.max(0,top);\\n\\t}\\n\\tif (this.popup.absolute) {\\n\\t\\t// Traverse the offsetParent chain and correct the offset to make it relative to the parent node.\\n\\t\\tfor (var offsetParentDomNode domNode.offsetParent; offsetParentDomNode; offsetParentDomNode offsetParentDomNode.offsetParent) {\\n\\t\\t\\tleft - offsetParentDomNode.offsetLeft;\\n\\t\\t\\ttop - offsetParentDomNode.offsetTop;\\n\\t\\t}\\n\\t}\\n\\tdomNode.style.left left + \\\px\\\;\\n\\tdomNode.style.top top + \\\px\\\;\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nRevealWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.state this.getAttribute(\\\state\\\);\\n\\tthis.revealTag this.getAttribute(\\\tag\\\);\\n\\tthis.type this.getAttribute(\\\type\\\);\\n\\tthis.text this.getAttribute(\\\text\\\);\\n\\tthis.position this.getAttribute(\\\position\\\);\\n\\tthis.positionAllowNegative this.getAttribute(\\\positionAllowNegative\\\) \\\yes\\\;\\n\\t// class attribute handled in assignDomNodeClasses()\\n\\tthis.style this.getAttribute(\\\style\\\,\\\\\\);\\n\\tthis\\\default\\\ this.getAttribute(\\\default\\\,\\\\\\);\\n\\tthis.animate this.getAttribute(\\\animate\\\,\\\no\\\);\\n\\tthis.retain this.getAttribute(\\\retain\\\,\\\no\\\);\\n\\tthis.openAnimation this.animate \\\no\\\ ? undefined : \\\open\\\;\\n\\tthis.closeAnimation this.animate \\\no\\\ ? undefined : \\\close\\\;\\n\\tthis.updatePopupPosition this.getAttribute(\\\updatePopupPosition\\\,\\\no\\\) \\\yes\\\;\\n\\t// Compute the title of the state tiddler and read it\\n\\tthis.stateTiddlerTitle this.state;\\n\\tthis.stateTitle this.getAttribute(\\\stateTitle\\\);\\n\\tthis.stateField this.getAttribute(\\\stateField\\\);\\n\\tthis.stateIndex this.getAttribute(\\\stateIndex\\\);\\n\\tthis.readState();\\n\\t// Construct the child widgets\\n\\tvar childNodes this.isOpen ? this.parseTreeNode.children : ;\\n\\tthis.hasChildNodes this.isOpen;\\n\\tthis.makeChildWidgets(childNodes);\\n};\\n\\n/*\\nRead the state tiddler\\n*/\\nRevealWidget.prototype.readState function() {\\n\\t// Read the information from the state tiddler\\n\\tvar state,\\n\\t defaultState this\\\default\\\;\\n\\tif(this.stateTitle) {\\n\\t\\tvar stateTitleTiddler this.wiki.getTiddler(this.stateTitle);\\n\\t\\tif(this.stateField) {\\n\\t\\t\\tstate stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\\n\\t\\t} else if(this.stateIndex) {\\n\\t\\t\\tstate stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\\n\\t\\t} else if(stateTitleTiddler) {\\n\\t\\t\\tstate this.wiki.getTiddlerText(this.stateTitle) || defaultState;\\n\\t\\t} else {\\n\\t\\t\\tstate defaultState;\\n\\t\\t}\\n\\t} else {\\n\\t\\tstate this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this\\\default\\\,this.getVariable(\\\currentTiddler\\\)) : this\\\default\\\;\\n\\t}\\n\\tif(state null) {\\n\\t\\tstate this\\\default\\\;\\n\\t}\\n\\tswitch(this.type) {\\n\\t\\tcase \\\popup\\\:\\n\\t\\t\\tthis.readPopupState(state);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\match\\\:\\n\\t\\t\\tthis.isOpen this.text state;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\nomatch\\\:\\n\\t\\t\\tthis.isOpen this.text ! state;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\lt\\\:\\n\\t\\t\\tthis.isOpen !!(this.compareStateText(state) \u003C 0);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\gt\\\:\\n\\t\\t\\tthis.isOpen !!(this.compareStateText(state) > 0);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\lteq\\\:\\n\\t\\t\\tthis.isOpen !(this.compareStateText(state) > 0);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\gteq\\\:\\n\\t\\t\\tthis.isOpen !(this.compareStateText(state) \u003C 0);\\n\\t\\t\\tbreak;\\n\\t}\\n};\\n\\nRevealWidget.prototype.compareStateText function(state) {\\n\\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \\\case\\\});\\n};\\n\\nRevealWidget.prototype.readPopupState function(state) {\\n\\tthis.popup Popup.parseCoordinates(state);\\n\\t// Check if the state matches the location regexp\\n\\tif(this.popup) {\\n\\t\\t// If so, were open\\n\\t\\tthis.isOpen true;\\n\\t} else {\\n\\t\\t// If not, were closed\\n\\t\\tthis.isOpen false;\\n\\t}\\n};\\n\\nRevealWidget.prototype.assignDomNodeClasses function() {\\n\\tvar classes this.getAttribute(\\\class\\\,\\\\\\).split(\\\ \\\);\\n\\tclasses.push(\\\tc-reveal\\\);\\n\\tthis.domNode.className classes.join(\\\ \\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nRevealWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes\\\default\\\ || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tvar currentlyOpen this.isOpen;\\n\\t\\tthis.readState();\\n\\t\\tif(this.isOpen ! currentlyOpen) {\\n\\t\\t\\tif(this.retain \\\yes\\\) {\\n\\t\\t\\t\\tthis.updateState();\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.refreshSelf();\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t} else if(this.type \\\popup\\\ && this.isOpen && this.updatePopupPosition && (changedTiddlersthis.state || changedTiddlersthis.stateTitle)) {\\n\\t\\t\\tthis.positionPopup(this.domNode);\\n\\t\\t}\\n\\t\\tif(changedAttributes.style) {\\n\\t\\t\\tthis.domNode.style this.getAttribute(\\\style\\\,\\\\\\);\\n\\t\\t}\\n\\t\\tif(changedAttributes\\\class\\\) {\\n\\t\\t\\tthis.assignDomNodeClasses();\\n\\t\\t}\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\n/*\\nCalled by refresh() to dynamically show or hide the content\\n*/\\nRevealWidget.prototype.updateState function() {\\n\\tvar self this;\\n\\t// Read the current state\\n\\tthis.readState();\\n\\t// Construct the child nodes if needed\\n\\tvar domNode this.domNodes0;\\n\\tif(this.isOpen && !this.hasChildNodes) {\\n\\t\\tthis.hasChildNodes true;\\n\\t\\tthis.makeChildWidgets(this.parseTreeNode.children);\\n\\t\\tthis.renderChildren(domNode,null);\\n\\t}\\n\\t// Animate our DOM node\\n\\tif(!domNode.isTiddlyWikiFakeDom && this.type \\\popup\\\ && this.isOpen) {\\n\\t\\tthis.positionPopup(domNode);\\n\\t\\t$tw.utils.addClass(domNode,\\\tc-popup\\\); // Make sure that clicks dont dismiss popups within the revealed content\\n\\n\\t}\\n\\tif(this.isOpen) {\\n\\t\\tdomNode.removeAttribute(\\\hidden\\\);\\n $tw.anim.perform(this.openAnimation,domNode);\\n\\t} else {\\n\\t\\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\\n\\t\\t\\t//make sure that the state hasnt changed during the close animation\\n\\t\\t\\tself.readState()\\n\\t\\t\\tif(!self.isOpen) {\\n\\t\\t\\t\\tdomNode.setAttribute(\\\hidden\\\,\\\true\\\);\\n\\t\\t\\t}\\n\\t\\t}});\\n\\t}\\n};\\n\\nexports.reveal RevealWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/scrollable.js\:{\title\:\$:/core/modules/widgets/scrollable.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/scrollable.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nScrollable widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar DEBOUNCE_INTERVAL 100; // Delay after last scroll event before updating the bound tiddler\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ScrollableWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nScrollableWidget.prototype new Widget();\\n\\nScrollableWidget.prototype.cancelScroll function() {\\n\\tif(this.idRequestFrame) {\\n\\t\\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\\n\\t\\tthis.idRequestFrame null;\\n\\t}\\n};\\n\\n/*\\nHandle a scroll event\\n*/\\nScrollableWidget.prototype.handleScrollEvent function(event) {\\n\\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\\n\\tif(this.outerDomNode.scrollWidth \u003C this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight \u003C this.outerDomNode.offsetHeight && this.fallthrough \\\yes\\\) {\\n\\t\\treturn true;\\n\\t}\\n\\tvar options {};\\n\\tif($tw.utils.hop(event.paramObject,\\\animationDuration\\\)) {\\n\\t\\toptions.animationDuration event.paramObject.animationDuration;\\n\\t}\\n\\tif(event.paramObject && event.paramObject.selector) {\\n\\t\\tthis.scrollSelectorIntoView(null,event.paramObject.selector,null,options);\\n\\t} else {\\n\\t\\tthis.scrollIntoView(event.target,null,options);\\n\\t}\\n\\treturn false; // Handled event\\n};\\n\\n/*\\nScroll an element into view\\n*/\\nScrollableWidget.prototype.scrollIntoView function(element,callback,options) {\\n\\tvar duration $tw.utils.hop(options,\\\animationDuration\\\) ? parseInt(options.animationDuration) : $tw.utils.getAnimationDuration(),\\n\\t\\tsrcWindow element ? element.ownerDocument.defaultView : window;\\n\\tthis.cancelScroll();\\n\\tthis.startTime Date.now();\\n\\tvar scrollPosition {\\n\\t\\tx: this.outerDomNode.scrollLeft,\\n\\t\\ty: this.outerDomNode.scrollTop\\n\\t};\\n\\t// Get the client bounds of the element and adjust by the scroll position\\n\\tvar scrollableBounds this.outerDomNode.getBoundingClientRect(),\\n\\t\\tclientTargetBounds element.getBoundingClientRect(),\\n\\t\\tbounds {\\n\\t\\t\\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\\n\\t\\t\\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\\n\\t\\t\\twidth: clientTargetBounds.width,\\n\\t\\t\\theight: clientTargetBounds.height\\n\\t\\t};\\n\\t// Well consider the horizontal and vertical scroll directions separately via this function\\n\\tvar getEndPos function(targetPos,targetSize,currentPos,currentSize) {\\n\\t\\t\\t// If the target is already visible then stay where we are\\n\\t\\t\\tif(targetPos > currentPos && (targetPos + targetSize) \u003C (currentPos + currentSize)) {\\n\\t\\t\\t\\treturn currentPos;\\n\\t\\t\\t// If the target is above/left of the current view, then scroll to its top/left\\n\\t\\t\\t} else if(targetPos \u003C currentPos) {\\n\\t\\t\\t\\treturn targetPos;\\n\\t\\t\\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\\n\\t\\t\\t} else if(targetSize \u003C currentSize && currentPos \u003C (targetPos + targetSize - currentSize)) {\\n\\t\\t\\t\\treturn targetPos + targetSize - currentSize;\\n\\t\\t\\t// If the target is big, then just scroll to the top\\n\\t\\t\\t} else if(currentPos \u003C targetPos) {\\n\\t\\t\\t\\treturn targetPos;\\n\\t\\t\\t// Otherwise, stay where we are\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn currentPos;\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tendX getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\\n\\t\\tendY getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\\n\\t// Only scroll if necessary\\n\\tif(endX ! scrollPosition.x || endY ! scrollPosition.y) {\\n\\t\\tvar self this,\\n\\t\\t\\tdrawFrame;\\n\\t\\tdrawFrame function () {\\n\\t\\t\\tvar t;\\n\\t\\t\\tif(duration \u003C 0) {\\n\\t\\t\\t\\tt 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tt ((Date.now()) - self.startTime) / duration;\\n\\t\\t\\t}\\n\\t\\t\\tif(t > 1) {\\n\\t\\t\\t\\tself.cancelScroll();\\n\\t\\t\\t\\tt 1;\\n\\t\\t\\t}\\n\\t\\t\\tt $tw.utils.slowInSlowOut(t);\\n\\t\\t\\tself.outerDomNode.scrollLeft scrollPosition.x + (endX - scrollPosition.x) * t;\\n\\t\\t\\tself.outerDomNode.scrollTop scrollPosition.y + (endY - scrollPosition.y) * t;\\n\\t\\t\\tif(t \u003C 1) {\\n\\t\\t\\t\\tself.idRequestFrame self.requestAnimationFrame.call(srcWindow,drawFrame);\\n\\t\\t\\t}\\n\\t\\t};\\n\\t\\tdrawFrame();\\n\\t}\\n};\\n\\nScrollableWidget.prototype.scrollSelectorIntoView function(baseElement,selector,callback,options) {\\n\\tbaseElement baseElement || document;\\n\\tvar element $tw.utils.querySelectorSafe(selector,baseElement);\\n\\tif(element) {\\n\\t\\tthis.scrollIntoView(element,callback,options);\\n\\t}\\n};\\n\\n/*\\nRender this widget into the DOM\\n*/\\nScrollableWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\tthis.scaleFactor 1;\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-scroll\\\, handler: \\\handleScrollEvent\\\}\\n\\t);\\n\\tif($tw.browser) {\\n\\t\\tthis.requestAnimationFrame window.requestAnimationFrame ||\\n\\t\\t\\twindow.webkitRequestAnimationFrame ||\\n\\t\\t\\twindow.mozRequestAnimationFrame ||\\n\\t\\t\\tfunction(callback) {\\n\\t\\t\\t\\treturn window.setTimeout(callback, 1000/60);\\n\\t\\t\\t};\\n\\t\\tthis.cancelAnimationFrame window.cancelAnimationFrame ||\\n\\t\\t\\twindow.webkitCancelAnimationFrame ||\\n\\t\\t\\twindow.webkitCancelRequestAnimationFrame ||\\n\\t\\t\\twindow.mozCancelAnimationFrame ||\\n\\t\\t\\twindow.mozCancelRequestAnimationFrame ||\\n\\t\\t\\tfunction(id) {\\n\\t\\t\\t\\twindow.clearTimeout(id);\\n\\t\\t\\t};\\n\\t}\\n\\t// Remember parent\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes and execute state\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create elements\\n\\tthis.outerDomNode this.document.createElement(\\\div\\\);\\n\\t$tw.utils.setStyle(this.outerDomNode,\\n\\t\\t{overflowY: \\\auto\\\},\\n\\t\\t{overflowX: \\\auto\\\},\\n\\t\\t{webkitOverflowScrolling: \\\touch\\\}\\n\\t);\\n\\tthis.innerDomNode this.document.createElement(\\\div\\\);\\n\\tthis.outerDomNode.appendChild(this.innerDomNode);\\n\\t// Assign classes\\n\\tthis.outerDomNode.className this\\\class\\\ || \\\\\\;\\n\\t// Insert element\\n\\tparent.insertBefore(this.outerDomNode,nextSibling);\\n\\tthis.renderChildren(this.innerDomNode,null);\\n\\tthis.domNodes.push(this.outerDomNode);\\n\\t// If the scroll position is bound to a tiddler\\n\\tif(this.scrollableBind) {\\n\\t\\t// After a delay for rendering, scroll to the bound position\\n\\t\\tthis.updateScrollPositionFromBoundTiddler();\\n\\t\\t// Set up event listener\\n\\t\\tthis.currentListener this.listenerFunction.bind(this);\\n\\t\\tthis.outerDomNode.addEventListener(\\\scroll\\\, this.currentListener);\\n\\t}\\n};\\n\\nScrollableWidget.prototype.listenerFunction function(event) {\\n\\tself this;\\n\\tclearTimeout(this.timeout);\\n\\tthis.timeout setTimeout(function() {\\n\\t\\tvar existingTiddler self.wiki.getTiddler(self.scrollableBind),\\n\\t\\t\\tnewTiddlerFields {\\n\\t\\t\\t\\ttitle: self.scrollableBind,\\n\\t\\t\\t\\t\\\scroll-left\\\: self.outerDomNode.scrollLeft.toString(),\\n\\t\\t\\t\\t\\\scroll-top\\\: self.outerDomNode.scrollTop.toString()\\n\\t\\t\\t};\\n\\t\\tif(!existingTiddler || (existingTiddler.fields\\\title\\\ ! newTiddlerFields\\\title\\\) || (existingTiddler.fields\\\scroll-left\\\ ! newTiddlerFields\\\scroll-left\\\ || existingTiddler.fields\\\scroll-top\\\ ! newTiddlerFields\\\scroll-top\\\)) {\\n\\t\\t\\tself.wiki.addTiddler(new $tw.Tiddler(existingTiddler,newTiddlerFields));\\n\\t\\t}\\n\\t}, DEBOUNCE_INTERVAL);\\n}\\n\\nScrollableWidget.prototype.updateScrollPositionFromBoundTiddler function() {\\n\\t// Bail if were running on the fakedom\\n\\tif(!this.outerDomNode.scrollTo) {\\n\\t\\treturn;\\n\\t}\\n\\tvar tiddler this.wiki.getTiddler(this.scrollableBind);\\n\\tif(tiddler) {\\n\\t\\tvar scrollLeftTo this.outerDomNode.scrollLeft;\\n\\t\\tif(parseFloat(tiddler.fields\\\scroll-left\\\).toString() tiddler.fields\\\scroll-left\\\) {\\n\\t\\t\\tscrollLeftTo parseFloat(tiddler.fields\\\scroll-left\\\);\\n\\t\\t}\\n\\t\\tvar scrollTopTo this.outerDomNode.scrollTop;\\n\\t\\tif(parseFloat(tiddler.fields\\\scroll-top\\\).toString() tiddler.fields\\\scroll-top\\\) {\\n\\t\\t\\tscrollTopTo parseFloat(tiddler.fields\\\scroll-top\\\);\\n\\t\\t}\\n\\t\\tthis.outerDomNode.scrollTo({\\n\\t\\t\\ttop: scrollTopTo,\\n\\t\\t\\tleft: scrollLeftTo,\\n\\t\\t\\tbehavior: \\\instant\\\\\n\\t\\t})\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nScrollableWidget.prototype.execute function() {\\n\\t// Get attributes\\n\\tthis.scrollableBind this.getAttribute(\\\bind\\\);\\n\\tthis.fallthrough this.getAttribute(\\\fallthrough\\\,\\\yes\\\);\\n\\tthis\\\class\\\ this.getAttribute(\\\class\\\);\\n\\t// Make child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nScrollableWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\class\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\t// If the bound tiddler has changed, update the eventListener and update scroll position\\n\\tif(changedAttributes\\\bind\\\) {\\n\\t\\tif(this.currentListener) {\\n\\t\\t\\tthis.outerDomNode.removeEventListener(\\\scroll\\\, this.currentListener, false);\\n\\t\\t}\\n\\t\\tthis.scrollableBind this.getAttribute(\\\bind\\\);\\n\\t\\tthis.currentListener this.listenerFunction.bind(this);\\n\\t\\tthis.outerDomNode.addEventListener(\\\scroll\\\, this.currentListener);\\n\\t}\\n\\t// Refresh children\\n\\tvar result this.refreshChildren(changedTiddlers);\\n\\t// If the bound tiddler has changed, update scroll position\\n\\tif(changedAttributes\\\bind\\\ || changedTiddlersthis.getAttribute(\\\bind\\\)) {\\n\\t\\tthis.updateScrollPositionFromBoundTiddler();\\n\\t}\\n\\treturn result;\\n};\\n\\nexports.scrollable ScrollableWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/select.js\:{\title\:\$:/core/modules/widgets/select.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/select.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nSelect widget:\\n\\n```\\n\u003C$select tiddler\\\MyTiddler\\\ field\\\text\\\>\\n\u003C$list filter\\\tagchapter\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\\n\u003C$view field\\\description\\\/>\\n\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SelectWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSelectWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSelectWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t//Create element\\n\\tvar domNode this.document.createElement(\\\select\\\);\\n\\tif(this.selectClass) {\\n\\t\\tdomNode.className this.selectClass;\\n\\t}\\n\\t// Assign data- attributes\\n\\tthis.assignAttributes(domNode,{\\n\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\tdestPrefix: \\\data-\\\\\n\\t});\\n\\tif(this.selectMultiple) {\\n\\t\\tdomNode.setAttribute(\\\multiple\\\,\\\multiple\\\);\\n\\t}\\n\\tif(this.isDisabled \\\yes\\\) {\\n\\t\\tdomNode.setAttribute(\\\disabled\\\, true);\\n\\t}\\n\\tif(this.selectSize) {\\n\\t\\tdomNode.setAttribute(\\\size\\\,this.selectSize);\\n\\t}\\n\\tif(this.selectTabindex) {\\n\\t\\tdomNode.setAttribute(\\\tabindex\\\,this.selectTabindex);\\n\\t}\\n\\tif(this.selectTooltip) {\\n\\t\\tdomNode.setAttribute(\\\title\\\,this.selectTooltip);\\n\\t}\\n\\tthis.parentDomNode.insertBefore(domNode,nextSibling);\\n\\tthis.renderChildren(domNode,null);\\n\\tthis.domNodes.push(domNode);\\n\\tthis.setSelectValue();\\n\\tif(this.selectFocus \\\yes\\\) {\\n\\t\\tthis.getSelectDomNode().focus();\\n\\t}\\n\\t$tw.utils.addEventListeners(this.getSelectDomNode(),\\n\\t\\t{name: \\\change\\\, handlerObject: this, handlerMethod: \\\handleChangeEvent\\\}\\n\\t);\\n};\\n\\n/*\\nHandle a change event\\n*/\\nSelectWidget.prototype.handleChangeEvent function(event) {\\n\\t// Get the new value and assign it to the tiddler\\n\\tif(this.selectMultiple false) {\\n\\t\\tvar value this.getSelectDomNode().value;\\n\\t} else {\\n\\t\\tvar value this.getSelectValues()\\n\\t\\t\\t\\tvalue $tw.utils.stringifyList(value);\\n\\t}\\n\\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\\n\\t// Trigger actions\\n\\tif(this.selectActions) {\\n\\t\\tthis.invokeActionString(this.selectActions,this,event);\\n\\t}\\n};\\n\\n/*\\nIf necessary, set the value of the select element to the current value\\n*/\\nSelectWidget.prototype.setSelectValue function() {\\n\\tvar value this.selectDefault;\\n\\t// Get the value\\n\\tif(this.selectIndex) {\\n\\t\\tvalue this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\\n\\t} else {\\n\\t\\tvar tiddler this.wiki.getTiddler(this.selectTitle);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tif(this.selectField \\\text\\\) {\\n\\t\\t\\t\\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\\n\\t\\t\\t\\tvalue this.wiki.getTiddlerText(this.selectTitle);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\\n\\t\\t\\t\\t\\tvalue tiddler.getFieldString(this.selectField);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tif(this.selectField \\\title\\\) {\\n\\t\\t\\t\\tvalue this.selectTitle;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Assign it to the select element if its different than the current value\\n\\tif (this.selectMultiple) {\\n\\t\\tvalue value undefined ? \\\\\\ : value;\\n\\t\\tvar select this.getSelectDomNode();\\n\\t\\tvar values Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\\n\\t\\tfor(var i0; i \u003C select.children.length; i++){\\n\\t\\t\\tselect.childreni.selected values.indexOf(select.childreni.value) ! -1\\n\\t\\t}\\n\\t} else {\\n\\t\\tvar domNode this.getSelectDomNode();\\n\\t\\tif(domNode.value ! value) {\\n\\t\\t\\tdomNode.value value;\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nGet the DOM node of the select element\\n*/\\nSelectWidget.prototype.getSelectDomNode function() {\\n\\treturn this.domNodes0;\\n};\\n\\n// Return an array of the selected opion values\\n// select is an HTML select element\\nSelectWidget.prototype.getSelectValues function() {\\n\\tvar select, result, options, opt;\\n\\tselect this.getSelectDomNode();\\n\\tresult ;\\n\\toptions select && select.options;\\n\\tfor (var i0; i\u003Coptions.length; i++) {\\n\\t\\topt optionsi;\\n\\t\\tif (opt.selected) {\\n\\t\\t\\tresult.push(opt.value || opt.text);\\n\\t\\t}\\n\\t}\\n\\treturn result;\\n}\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSelectWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.selectActions this.getAttribute(\\\actions\\\);\\n\\tthis.selectTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.selectField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\tthis.selectIndex this.getAttribute(\\\index\\\);\\n\\tthis.selectClass this.getAttribute(\\\class\\\);\\n\\tthis.selectDefault this.getAttribute(\\\default\\\);\\n\\tthis.selectMultiple this.getAttribute(\\\multiple\\\, false);\\n\\tthis.selectSize this.getAttribute(\\\size\\\);\\n\\tthis.selectTabindex this.getAttribute(\\\tabindex\\\);\\n\\tthis.selectTooltip this.getAttribute(\\\tooltip\\\);\\n\\tthis.selectFocus this.getAttribute(\\\focus\\\);\\n\\tthis.isDisabled this.getAttribute(\\\disabled\\\,\\\no\\\);\\n\\t// Make the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nSelectWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\t// If were using a different tiddler/field/index then completely refresh ourselves\\n\\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tooltip || changedAttributes.tabindex || changedAttributes.disabled) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tif(changedAttributes.class) {\\n\\t\\t\\tthis.selectClass this.getAttribute(\\\class\\\);\\n\\t\\t\\tthis.getSelectDomNode().setAttribute(\\\class\\\,this.selectClass); \\n\\t\\t}\\n\\t\\tthis.assignAttributes(this.getSelectDomNode(),{\\n\\t\\t\\tchangedAttributes: changedAttributes,\\n\\t\\t\\tsourcePrefix: \\\data-\\\,\\n\\t\\t\\tdestPrefix: \\\data-\\\\\n\\t\\t});\\n\\t\\tvar childrenRefreshed this.refreshChildren(changedTiddlers);\\n\\t\\t// If the target tiddler value has changed, just update setting and refresh the children\\n\\t\\tif(changedTiddlersthis.selectTitle || childrenRefreshed) {\\n\\t\\t\\tthis.setSelectValue();\\n\\t\\t} \\n\\t\\treturn childrenRefreshed;\\n\\t}\\n};\\n\\nexports.select SelectWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/setmultiplevariables.js\:{\title\:\$:/core/modules/widgets/setmultiplevariables.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/setmultiplevariables.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to set multiple variables at once from a list of names and a list of values\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SetMultipleVariablesWidget function(parseTreeNode,options) {\\n this.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSetMultipleVariablesWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSetMultipleVariablesWidget.prototype.render function(parent,nextSibling) {\\n this.parentDomNode parent;\\n this.computeAttributes();\\n this.execute();\\n this.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSetMultipleVariablesWidget.prototype.execute function() {\\n // Setup our variables\\n this.setVariables();\\n // Construct the child widgets\\n this.makeChildWidgets();\\n};\\n\\n\\nSetMultipleVariablesWidget.prototype.setVariables function() {\\n // Set the variables\\n var self this,\\n filterNames this.getAttribute(\\\$names\\\,\\\\\\),\\n filterValues this.getAttribute(\\\$values\\\,\\\\\\);\\n this.variableNames ;\\n this.variableValues ;\\n if(filterNames && filterValues) {\\n this.variableNames this.wiki.filterTiddlers(filterNames,this);\\n this.variableValues this.wiki.filterTiddlers(filterValues,this);\\n $tw.utils.each(this.variableNames,function(varname,index) {\\n self.setVariable(varname,self.variableValuesindex);\\n });\\n }\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nSetMultipleVariablesWidget.prototype.refresh function(changedTiddlers) {\\n var filterNames this.getAttribute(\\\$names\\\,\\\\\\),\\n filterValues this.getAttribute(\\\$values\\\,\\\\\\),\\n variableNames this.wiki.filterTiddlers(filterNames,this),\\n variableValues this.wiki.filterTiddlers(filterValues,this);\\n if(!$tw.utils.isArrayEqual(this.variableNames,variableNames) || !$tw.utils.isArrayEqual(this.variableValues,variableValues)) {\\n this.refreshSelf();\\n return true;\\n }\\n return this.refreshChildren(changedTiddlers);\\n};\\n\\nexports\\\setmultiplevariables\\\ SetMultipleVariablesWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/set.js\:{\title\:\$:/core/modules/widgets/set.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/set.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nSet variable widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar SetWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSetWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSetWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSetWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.setName this.getAttribute(\\\name\\\,\\\currentTiddler\\\);\\n\\tthis.setFilter this.getAttribute(\\\filter\\\);\\n\\tthis.setSelect this.getAttribute(\\\select\\\);\\n\\tthis.setTiddler this.getAttribute(\\\tiddler\\\);\\n\\tthis.setSubTiddler this.getAttribute(\\\subtiddler\\\);\\n\\tthis.setField this.getAttribute(\\\field\\\);\\n\\tthis.setIndex this.getAttribute(\\\index\\\);\\n\\tthis.setValue this.getAttribute(\\\value\\\);\\n\\tthis.setEmptyValue this.getAttribute(\\\emptyValue\\\);\\n\\t// Set context variable\\n\\tif(this.parseTreeNode.isMacroDefinition) {\\n\\t\\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,true);\\n\\t} else if(this.parseTreeNode.isFunctionDefinition) {\\n\\t\\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,undefined,{isFunctionDefinition: true});\\n\\t} else if(this.parseTreeNode.isProcedureDefinition) {\\n\\t\\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,undefined,{isProcedureDefinition: true, configTrimWhiteSpace: this.parseTreeNode.configTrimWhiteSpace});\\n\\t} else if(this.parseTreeNode.isWidgetDefinition) {\\n\\t\\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,undefined,{isWidgetDefinition: true, configTrimWhiteSpace: this.parseTreeNode.configTrimWhiteSpace});\\n\\t} else {\\n\\t\\tthis.setVariable(this.setName,this.getValue());\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nGet the value to be assigned\\n*/\\nSetWidget.prototype.getValue function() {\\n\\tvar value this.setValue;\\n\\tif(this.setTiddler) {\\n\\t\\tvar tiddler;\\n\\t\\tif(this.setSubTiddler) {\\n\\t\\t\\ttiddler this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\\n\\t\\t} else {\\n\\t\\t\\ttiddler this.wiki.getTiddler(this.setTiddler);\\n\\t\\t}\\n\\t\\tif(!tiddler) {\\n\\t\\t\\tvalue this.setEmptyValue;\\n\\t\\t} else if(this.setField) {\\n\\t\\t\\tvalue tiddler.getFieldString(this.setField) || this.setEmptyValue;\\n\\t\\t} else if(this.setIndex) {\\n\\t\\t\\tvalue this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\\n\\t\\t} else {\\n\\t\\t\\tvalue tiddler.fields.text || this.setEmptyValue ;\\n\\t\\t}\\n\\t} else if(this.setFilter) {\\n\\t\\tvar results this.wiki.filterTiddlers(this.setFilter,this);\\n\\t\\tif(this.setValue null) {\\n\\t\\t\\tvar select;\\n\\t\\t\\tif(this.setSelect) {\\n\\t\\t\\t\\tselect parseInt(this.setSelect,10);\\n\\t\\t\\t}\\n\\t\\t\\tif(select ! undefined) {\\n\\t\\t\\t\\tvalue resultsselect || \\\\\\;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvalue $tw.utils.stringifyList(results);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(results.length 0 && this.setEmptyValue ! undefined) {\\n\\t\\t\\tvalue this.setEmptyValue;\\n\\t\\t}\\n\\t} else if(!value && this.setEmptyValue) {\\n\\t\\tvalue this.setEmptyValue;\\n\\t}\\n\\treturn value || \\\\\\;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nSetWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlersthis.setTiddler) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\\n\\t (this.setFilter && this.getValue() ! this.variablesthis.setName.value)) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.setvariable SetWidget;\\nexports.set SetWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/slot.js\:{\title\:\$:/core/modules/widgets/slot.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/slot.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget for definition of slots within transcluded content. The values provided by the translusion are passed to the slot.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget,\\n\\tTranscludeWidget require(\\\$:/core/modules/widgets/transclude.js\\\).transclude;\\n\\nvar SlotWidget function(parseTreeNode,options) {\\n\\t// Initialise\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nSlotWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nSlotWidget.prototype.render function(parent,nextSibling) {\\n\\t// Call the constructor\\n\\tWidget.call(this);\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nSlotWidget.prototype.execute function() {\\n\\tvar self this;\\n\\tthis.slotName this.getAttribute(\\\$name\\\);\\n\\tthis.slotDepth parseInt(this.getAttribute(\\\$depth\\\,\\\1\\\),10) || 1;\\n\\t// Find the parent transclusions\\n\\tvar pointer this.parentWidget,\\n\\t\\tdepth this.slotDepth;\\n\\twhile(pointer) {\\n\\t\\tif(pointer instanceof TranscludeWidget && pointer.hasVisibleSlots()) {\\n\\t\\t\\tdepth--;\\n\\t\\t\\tif(depth \u003C 0) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpointer pointer.parentWidget;\\n\\t}\\n\\tvar parseTreeNodes {type: \\\text\\\, attributes: {text: {type: \\\string\\\, value: \\\Missing slot reference!\\\}}};\\n\\tif(pointer instanceof TranscludeWidget) {\\n\\t\\t// Get the parse tree nodes comprising the slot contents\\n\\t\\tparseTreeNodes pointer.getTransclusionSlotFill(this.slotName,this.parseTreeNode.children);\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nSlotWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\$name\\\ || changedAttributes\\\$depth\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports.slot SlotWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/testcase.js\:{\title\:\$:/core/modules/widgets/testcase.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/testcase.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to display a test case\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar TestCaseWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTestCaseWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTestCaseWidget.prototype.render function(parent,nextSibling) {\\n\\tvar self this;\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Create container DOM node\\n\\tvar domNode this.document.createElement(\\\div\\\);\\n\\tdomNode.setAttribute(\\\class\\\, \\\tc-test-case \\\ + this.testcaseClass);\\n\\tthis.domNodes.push(domNode);\\n\\tparent.insertBefore(domNode,nextSibling);\\n\\t// Render the children into a hidden DOM node\\n\\tvar parser {\\n\\t\\ttree: {\\n\\t\\t\\ttype: \\\widget\\\,\\n\\t\\t\\tattributes: {},\\n\\t\\t\\torderedAttributes: ,\\n\\t\\t\\tchildren: this.parseTreeNode.children || \\n\\t\\t}\\n\\t};\\n\\tthis.contentRoot this.wiki.makeWidget(parser,{\\n\\t\\tdocument: $tw.fakeDocument,\\n\\t\\tparentWidget: this\\n\\t});\\n\\tthis.contentContainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\tthis.contentRoot.render(this.contentContainer,null);\\n\\t// Create a wiki\\n\\tthis.testcaseWiki new $tw.Wiki();\\n\\t// Always load the core plugin\\n\\tvar loadTiddler function(title) {\\n\\t\\tvar tiddler self.wiki.getTiddler(title);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tself.testcaseWiki.addTiddler(tiddler);\\n\\t\\t}\\n\\t}\\n\\tloadTiddler(\\\$:/core\\\);\\n\\tloadTiddler(\\\$:/plugins/tiddlywiki/codemirror\\\);\\n\\t// Load tiddlers from child data widgets\\n\\tvar tiddlers ;\\n\\tthis.findChildrenDataWidgets(this.contentRoot.children,\\\data\\\,function(widget) {\\n\\t\\tArray.prototype.push.apply(tiddlers,widget.readDataTiddlerValues());\\n\\t});\\n\\tvar jsonPayload JSON.stringify(tiddlers);\\n\\tthis.testcaseWiki.addTiddlers(tiddlers);\\n\\t// Unpack plugin tiddlers\\n\\tthis.testcaseWiki.readPluginInfo();\\n\\tthis.testcaseWiki.registerPluginTiddlers(\\\plugin\\\);\\n\\tthis.testcaseWiki.unpackPluginTiddlers();\\n\\tthis.testcaseWiki.addIndexersToWiki();\\n\\t// Generate a `transclusion` variable that depends on the values of the payload tiddlers so that the template can easily make unique state tiddlers\\n\\tthis.setVariable(\\\transclusion\\\,$tw.utils.hashString(jsonPayload));\\n\\t// Generate a `payloadTiddlers` variable that contains the payload in JSON format\\n\\tthis.setVariable(\\\payloadTiddlers\\\,jsonPayload);\\n\\t// Only run the tests if the testcase output and expected results were specified, and those tiddlers actually exist in the wiki\\n\\tvar shouldRunTests false;\\n\\tif(this.testcaseTestOutput && this.testcaseWiki.tiddlerExists(this.testcaseTestOutput) && this.testcaseTestExpectedResult && this.testcaseWiki.tiddlerExists(this.testcaseTestExpectedResult)) {\\n\\t\\tshouldRunTests true;\\n\\t}\\n\\t// Render the test rendering if required\\n\\tif(shouldRunTests) {\\n\\t\\tvar testcaseOutputContainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\tvar testcaseOutputWidget this.testcaseWiki.makeTranscludeWidget(this.testcaseTestOutput,{\\n\\t\\t\\tdocument: $tw.fakeDocument,\\n\\t\\t\\tparseAsInline: false,\\n\\t\\t\\tparentWidget: this,\\n\\t\\t\\tvariables: {\\n\\t\\t\\t\\tcurrentTiddler: this.testcaseTestOutput\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\ttestcaseOutputWidget.render(testcaseOutputContainer);\\n\\t}\\n\\t// Clear changes queue\\n\\tthis.testcaseWiki.clearTiddlerEventQueue();\\n\\t// Run the actions if provided\\n\\tif(this.testcaseWiki.tiddlerExists(this.testcaseTestActions)) {\\n\\t\\ttestcaseOutputWidget.invokeActionString(this.testcaseWiki.getTiddlerText(this.testcaseTestActions));\\n\\t\\ttestcaseOutputWidget.refresh(this.testcaseWiki.changedTiddlers,testcaseOutputContainer);\\n\\t}\\n\\t// Set up the test result variables\\n\\tvar testResult \\\\\\,\\n\\t\\toutputHTML \\\\\\,\\n\\t\\texpectedHTML \\\\\\;\\n\\tif(shouldRunTests) {\\n\\t\\toutputHTML testcaseOutputContainer.children0.innerHTML;\\n\\t\\texpectedHTML this.testcaseWiki.getTiddlerText(this.testcaseTestExpectedResult);\\n\\t\\tif(outputHTML expectedHTML) {\\n\\t\\t\\ttestResult \\\pass\\\;\\n\\t\\t} else {\\n\\t\\t\\ttestResult \\\fail\\\;\\n\\t\\t}\\n\\t\\tthis.setVariable(\\\outputHTML\\\,outputHTML);\\n\\t\\tthis.setVariable(\\\expectedHTML\\\,expectedHTML);\\n\\t\\tthis.setVariable(\\\testResult\\\,testResult);\\n\\t\\tthis.setVariable(\\\currentTiddler\\\,this.testcaseTestOutput);\\n\\t}\\n\\t// Dont display anything if testHideIfPass is \\\yes\\\ and the tests have passed\\n\\tif(this.testcaseHideIfPass \\\yes\\\ && testResult ! \\\fail\\\) {\\n\\t\\treturn;\\n\\t}\\n\\t// Render the page root template of the subwiki\\n\\tvar rootWidget this.testcaseWiki.makeTranscludeWidget(this.testcaseTemplate,{\\n\\t\\tdocument: this.document,\\n\\t\\tparseAsInline: false,\\n\\t\\tparentWidget: this\\n\\t});\\n\\trootWidget.render(domNode);\\n\\t// Trap changes in the wiki and refresh the rendering\\n\\tthis.testcaseWiki.addEventListener(\\\change\\\,function(changes) {\\n\\t\\trootWidget.refresh(changes,domNode);\\n\\t});\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTestCaseWidget.prototype.execute function() {\\n\\tthis.testcaseTemplate this.getAttribute(\\\template\\\,\\\$:/core/ui/testcases/DefaultTemplate\\\);\\n\\tthis.testcaseTestOutput this.getAttribute(\\\testOutput\\\);\\n\\tthis.testcaseTestActions this.getAttribute(\\\testActions\\\);\\n\\tthis.testcaseTestExpectedResult this.getAttribute(\\\testExpectedResult\\\);\\n\\tthis.testcaseHideIfPass this.getAttribute(\\\testHideIfPass\\\);\\n\\tthis.testcaseClass this.getAttribute(\\\class\\\,\\\\\\);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTestCaseWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.contentRoot.refresh(changedTiddlers);\\n\\t}\\n};\\n\\nexports\\\testcase\\\ TestCaseWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/text.js\:{\title\:\$:/core/modules/widgets/text.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/text.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nText node widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar TextNodeWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTextNodeWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTextNodeWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tvar text this.getAttribute(\\\text\\\,this.parseTreeNode.text || \\\\\\);\\n\\ttext text.replace(/\\\\r/mg,\\\\\\);\\n\\tvar textNode this.document.createTextNode(text);\\n\\tparent.insertBefore(textNode,nextSibling);\\n\\tthis.domNodes.push(textNode);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTextNodeWidget.prototype.execute function() {\\n\\t// Nothing to do for a text node\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTextNodeWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.text) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.text TextNodeWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/tiddler.js\:{\title\:\$:/core/modules/widgets/tiddler.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/tiddler.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nTiddler widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar TiddlerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTiddlerWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTiddlerWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTiddlerWidget.prototype.execute function() {\\n\\tthis.tiddlerState this.computeTiddlerState();\\n\\tthis.setVariable(\\\currentTiddler\\\,this.tiddlerState.currentTiddler);\\n\\tthis.setVariable(\\\missingTiddlerClass\\\,this.tiddlerState.missingTiddlerClass);\\n\\tthis.setVariable(\\\shadowTiddlerClass\\\,this.tiddlerState.shadowTiddlerClass);\\n\\tthis.setVariable(\\\systemTiddlerClass\\\,this.tiddlerState.systemTiddlerClass);\\n\\tthis.setVariable(\\\tiddlerTagClasses\\\,this.tiddlerState.tiddlerTagClasses);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nCompute the tiddler state flags\\n*/\\nTiddlerWidget.prototype.computeTiddlerState function() {\\n\\t// Get our parameters\\n\\tthis.tiddlerTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t// Compute the state\\n\\tvar state {\\n\\t\\tcurrentTiddler: this.tiddlerTitle || \\\\\\,\\n\\t\\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \\\tc-tiddler-exists\\\ : \\\tc-tiddler-missing\\\,\\n\\t\\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \\\tc-tiddler-shadow\\\ : \\\\\\,\\n\\t\\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \\\tc-tiddler-system\\\ : \\\\\\,\\n\\t\\ttiddlerTagClasses: this.getTagClasses()\\n\\t};\\n\\t// Compute a simple hash to make it easier to detect changes\\n\\tstate.hash state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\\n\\treturn state;\\n};\\n\\n/*\\nCreate a string of CSS classes derived from the tags of the current tiddler\\n*/\\nTiddlerWidget.prototype.getTagClasses function() {\\n\\tvar tiddler this.wiki.getTiddler(this.tiddlerTitle);\\n\\tif(tiddler) {\\n\\t\\tvar tags ;\\n\\t\\t$tw.utils.each(tiddler.fields.tags,function(tag) {\\n\\t\\t\\ttags.push(\\\tc-tagged-\\\ + encodeURIComponent(tag));\\n\\t\\t});\\n\\t\\treturn tags.join(\\\ \\\);\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTiddlerWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes(),\\n\\t\\tnewTiddlerState this.computeTiddlerState();\\n\\tif(changedAttributes.tiddler || newTiddlerState.hash ! this.tiddlerState.hash) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.tiddler TiddlerWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/transclude.js\:{\title\:\$:/core/modules/widgets/transclude.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/transclude.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nTransclude widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar TranscludeWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nTranscludeWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nTranscludeWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\ttry {\\n\\t\\tthis.renderChildren(parent,nextSibling);\\n\\t} catch(error) {\\n\\t\\tif(error instanceof $tw.utils.TranscludeRecursionError) {\\n\\t\\t\\t// We were infinite looping.\\n\\t\\t\\t// We need to try and abort as much of the loop as we can, so we will keep \\\throwing\\\ upward until we find a transclusion that has a different signature.\\n\\t\\t\\t// Hopefully that will land us just outside where the loop began. Thats where we want to issue an error.\\n\\t\\t\\t// Rendering widgets beneath this point may result in a freezing browser if they explode exponentially.\\n\\t\\t\\tvar transcludeSignature this.getVariable(\\\transclusion\\\);\\n\\t\\t\\tif(this.getAncestorCount() > $tw.utils.TranscludeRecursionError.MAX_WIDGET_TREE_DEPTH - 50) {\\n\\t\\t\\t\\t// For the first fifty transcludes we climb up, we simply collect signatures.\\n\\t\\t\\t\\t// Were assuming that those first 50 will likely include all transcludes involved in the loop.\\n\\t\\t\\t\\terror.signaturestranscludeSignature true;\\n\\t\\t\\t} else if(!error.signaturestranscludeSignature) {\\n\\t\\t\\t\\t// Now that were past the first 50, lets look for the first signature that wasnt in the loop. Thatll be where we print the error and resume rendering.\\n\\t\\t\\t\\tthis.children this.makeChildWidget({type: \\\error\\\, attributes: {\\n\\t\\t\\t\\t\\t\\\$message\\\: {type: \\\string\\\, value: $tw.language.getString(\\\Error/RecursiveTransclusion\\\)}\\n\\t\\t\\t\\t}});\\n\\t\\t\\t\\tthis.renderChildren(parent,nextSibling);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tthrow error;\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nTranscludeWidget.prototype.execute function() {\\n\\t// Get our attributes, string parameters, and slot values into properties of the widget object\\n\\tthis.collectAttributes();\\n\\tthis.collectStringParameters();\\n\\tthis.collectSlotFillParameters();\\n\\t// Determine whether were being used in inline or block mode\\n\\tvar parseAsInline !this.parseTreeNode.isBlock;\\n\\tif(this.transcludeMode \\\inline\\\) {\\n\\t\\tparseAsInline true;\\n\\t} else if(this.transcludeMode \\\block\\\) {\\n\\t\\tparseAsInline false;\\n\\t}\\n\\t// Set thisTiddler\\n\\tthis.setVariable(\\\thisTiddler\\\,this.transcludeTitle);\\n\\tvar parseTreeNodes, target;\\n\\t// Process the transclusion according to the output type\\n\\tswitch(this.transcludeOutput || \\\text/html\\\) {\\n\\t\\tcase \\\text/html\\\:\\n\\t\\t\\t// Return the parse tree nodes of the target\\n\\t\\t\\ttarget this.parseTransclusionTarget(parseAsInline);\\n\\t\\t\\tthis.parseAsInline target.parseAsInline;\\n\\t\\t\\tparseTreeNodes target.parseTreeNodes;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\text/raw\\\:\\n\\t\\t\\t// Just return the raw text\\n\\t\\t\\ttarget this.getTransclusionTarget();\\n\\t\\t\\tparseTreeNodes {type: \\\text\\\, text: target.text};\\n\\t\\t\\tbreak;\\n\\t\\tdefault:\\n\\t\\t\\t// \\\text/plain\\\ is the plain text result of wikifying the text\\n\\t\\t\\ttarget this.parseTransclusionTarget(parseAsInline);\\n\\t\\t\\tvar widgetNode this.wiki.makeWidget(target.parser,{\\n\\t\\t\\t\\tparentWidget: this,\\n\\t\\t\\t\\tdocument: $tw.fakeDocument\\n\\t\\t\\t});\\n\\t\\t\\tvar container $tw.fakeDocument.createElement(\\\div\\\);\\n\\t\\t\\twidgetNode.render(container,null);\\n\\t\\t\\tparseTreeNodes {type: \\\text\\\, text: container.textContent};\\n\\t\\t\\tbreak;\\n\\t}\\n\\tthis.sourceText target.text;\\n\\tthis.parserType target.type;\\n\\tthis._canonical_uri target._canonical_uri;\\n\\t// Set the legacy transclusion context variables only if were not transcluding a variable\\n\\tif(!this.transcludeVariable) {\\n\\t\\tvar recursionMarker this.makeRecursionMarker();\\n\\t\\tthis.setVariable(\\\transclusion\\\,recursionMarker);\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nCollect the attributes we need, in the process determining whether were being used in legacy mode\\n*/\\nTranscludeWidget.prototype.collectAttributes function() {\\n\\tvar self this;\\n\\t// Detect legacy mode\\n\\tthis.legacyMode true;\\n\\t$tw.utils.each(this.attributes,function(value,name) {\\n\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\tself.legacyMode false;\\n\\t\\t}\\n\\t});\\n\\t// Get the attributes for the appropriate mode\\n\\tif(this.legacyMode) {\\n\\t\\tthis.transcludeTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t\\tthis.transcludeSubTiddler this.getAttribute(\\\subtiddler\\\);\\n\\t\\tthis.transcludeField this.getAttribute(\\\field\\\);\\n\\t\\tthis.transcludeIndex this.getAttribute(\\\index\\\);\\n\\t\\tthis.transcludeMode this.getAttribute(\\\mode\\\);\\n\\t\\tthis.recursionMarker this.getAttribute(\\\recursionMarker\\\,\\\yes\\\);\\n\\t} else {\\n\\t\\tthis.transcludeVariable this.getAttribute(\\\$variable\\\);\\n\\t\\tthis.transcludeVariableIsFunction false;\\n\\t\\tthis.transcludeType this.getAttribute(\\\$type\\\);\\n\\t\\tthis.transcludeOutput this.getAttribute(\\\$output\\\,\\\text/html\\\);\\n\\t\\tthis.transcludeTitle this.getAttribute(\\\$tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\t\\tthis.transcludeSubTiddler this.getAttribute(\\\$subtiddler\\\);\\n\\t\\tthis.transcludeField this.getAttribute(\\\$field\\\);\\n\\t\\tthis.transcludeIndex this.getAttribute(\\\$index\\\);\\n\\t\\tthis.transcludeMode this.getAttribute(\\\$mode\\\);\\n\\t\\tthis.recursionMarker this.getAttribute(\\\$recursionMarker\\\,\\\yes\\\);\\n\\t}\\n};\\n\\n/*\\nCollect string parameters\\n*/\\nTranscludeWidget.prototype.collectStringParameters function() {\\n\\tvar self this;\\n\\tthis.stringParametersByName Object.create(null);\\n\\tif(!this.legacyMode) {\\n\\t\\t$tw.utils.each(this.attributes,function(value,name) {\\n\\t\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\t\\tif(name.charAt(1) \\\$\\\) {\\n\\t\\t\\t\\t\\t// Attributes starting $$ represent parameters starting with a single $\\n\\t\\t\\t\\t\\tname name.slice(1);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// Attributes starting with a single $ are reserved for the widget\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tself.stringParametersByNamename value;\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nCollect slot value parameters\\n*/\\nTranscludeWidget.prototype.collectSlotFillParameters function() {\\n\\tvar self this;\\n\\tthis.slotFillParseTrees Object.create(null);\\n\\tif(this.legacyMode) {\\n\\t\\tthis.slotFillParseTrees\\\ts-missing\\\ this.parseTreeNode.children;\\n\\t} else {\\n\\t\\tthis.slotFillParseTrees\\\ts-raw\\\ this.parseTreeNode.children;\\n\\t\\tvar noFillWidgetsFound true,\\n\\t\\t\\tsearchParseTreeNodes function(nodes) {\\n\\t\\t\\t\\t$tw.utils.each(nodes,function(node) {\\n\\t\\t\\t\\t\\tif(node.type \\\fill\\\) {\\n\\t\\t\\t\\t\\t\\tif(node.attributes\\\$name\\\ && node.attributes\\\$name\\\.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t\\tvar slotValueName node.attributes\\\$name\\\.value;\\n\\t\\t\\t\\t\\t\\t\\tself.slotFillParseTreesslotValueName node.children || ;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tnoFillWidgetsFound false;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tsearchParseTreeNodes(node.children);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t};\\n\\t\\tsearchParseTreeNodes(this.parseTreeNode.children);\\n\\t\\tif(noFillWidgetsFound) {\\n\\t\\t\\tthis.slotFillParseTrees\\\ts-missing\\\ this.parseTreeNode.children;\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nGet transcluded details as an object {text:,type:}\\n*/\\nTranscludeWidget.prototype.getTransclusionTarget function() {\\n\\tvar self this;\\n\\tvar text;\\n\\t// Return the text and type of the target\\n\\tif(this.hasAttribute(\\\$variable\\\)) {\\n\\t\\tif(this.transcludeVariable) {\\n\\t\\t\\t// Transcluding a variable\\n\\t\\t\\tvar variableInfo this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()});\\n\\t\\t\\tthis.transcludeVariableIsFunction variableInfo.srcVariable && variableInfo.srcVariable.isFunctionDefinition;\\n\\t\\t\\ttext variableInfo.text;\\n\\t\\t\\tthis.transcludeFunctionResult text;\\n\\t\\t\\treturn {\\n\\t\\t\\t\\ttext: variableInfo.text,\\n\\t\\t\\t\\ttype: this.transcludeType\\n\\t\\t\\t};\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Transcluding a text reference\\n\\t\\tvar parserInfo this.wiki.getTextReferenceParserInfo(\\n\\t\\t\\t\\t\\t\\tthis.transcludeTitle,\\n\\t\\t\\t\\t\\t\\tthis.transcludeField,\\n\\t\\t\\t\\t\\t\\tthis.transcludeIndex,\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tsubTiddler: this.transcludeSubTiddler,\\n\\t\\t\\t\\t\\t\\t\\tdefaultType: this.transcludeType\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\treturn {\\n\\t\\t\\ttext: parserInfo.text,\\n\\t\\t\\ttype: parserInfo.type,\\n\\t\\t\\t_canonical_uri: parserInfo._canonical_uri\\n\\t\\t};\\n\\t}\\n};\\n\\n/*\\nGet transcluded parse tree nodes as an object {text:,type:,parseTreeNodes:,parseAsInline:}\\n*/\\nTranscludeWidget.prototype.parseTransclusionTarget function(parseAsInline) {\\n\\tvar self this;\\n\\tvar parser;\\n\\t// Get the parse tree\\n\\tif(this.hasAttribute(\\\$variable\\\)) {\\n\\t\\tif(this.transcludeVariable) {\\n\\t\\t\\t// Transcluding a variable\\n\\t\\t\\tvar variableInfo this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()}),\\n\\t\\t\\t\\tsrcVariable variableInfo && variableInfo.srcVariable;\\n\\t\\t\\tif(srcVariable && srcVariable.isFunctionDefinition) {\\n\\t\\t\\t\\tthis.transcludeVariableIsFunction true;\\n\\t\\t\\t\\tthis.transcludeFunctionResult (variableInfo.resultList ? variableInfo.resultList0 : variableInfo.text) || \\\\\\;\\n\\t\\t\\t}\\n\\t\\t\\tif(variableInfo.text) {\\n\\t\\t\\t\\tif(srcVariable && srcVariable.isFunctionDefinition) {\\n\\t\\t\\t\\t\\tparser {\\n\\t\\t\\t\\t\\t\\ttree: {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\t\\t\\t\\ttext: this.transcludeFunctionResult\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\tsource: this.transcludeFunctionResult,\\n\\t\\t\\t\\t\\t\\ttype: \\\text/vnd.tiddlywiki\\\\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tif(parseAsInline) {\\n\\t\\t\\t\\t\\t\\tparser.tree0 {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\t\\t\\t\\ttext: this.transcludeFunctionResult\\n\\t\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tparser.tree0 {\\n\\t\\t\\t\\t\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\t\\t\\t\\t\\ttag: \\\p\\\,\\n\\t\\t\\t\\t\\t\\t\\tchildren: {\\n\\t\\t\\t\\t\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\ttext: this.transcludeFunctionResult\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tvar cacheKey (parseAsInline ? \\\inlineParser\\\ : \\\blockParser\\\) + (this.transcludeType || \\\\\\);\\n\\t\\t\\t\\t\\tif(variableInfo.isCacheable && srcVariablecacheKey) {\\n\\t\\t\\t\\t\\t\\tparser srcVariablecacheKey;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tparser this.wiki.parseText(this.transcludeType,variableInfo.text || \\\\\\,{parseAsInline: parseAsInline, configTrimWhiteSpace: srcVariable && srcVariable.configTrimWhiteSpace});\\n\\t\\t\\t\\t\\t\\tif(variableInfo.isCacheable) {\\n\\t\\t\\t\\t\\t\\t\\tsrcVariablecacheKey parser;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(parser) {\\n\\t\\t\\t\\t\\t// Add parameters widget for procedures and custom widgets\\n\\t\\t\\t\\t\\tif(srcVariable && (srcVariable.isProcedureDefinition || srcVariable.isWidgetDefinition)) {\\n\\t\\t\\t\\t\\t\\tparser {\\n\\t\\t\\t\\t\\t\\t\\ttree: \\n\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttype: \\\parameters\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchildren: parser.tree\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t,\\n\\t\\t\\t\\t\\t\\t\\tsource: parser.source,\\n\\t\\t\\t\\t\\t\\t\\ttype: parser.type\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(srcVariable.params,function(param) {\\n\\t\\t\\t\\t\\t\\t\\tvar name param.name;\\n\\t\\t\\t\\t\\t\\t\\t// Parameter names starting with dollar must be escaped to double dollars\\n\\t\\t\\t\\t\\t\\t\\tif(name.charAt(0) \\\$\\\) {\\n\\t\\t\\t\\t\\t\\t\\t\\tname \\\$\\\ + name;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(parser.tree0,name,param\\\default\\\)\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t} else if(srcVariable && !srcVariable.isFunctionDefinition) {\\n\\t\\t\\t\\t\\t\\t// For macros and ordinary variables, wrap the parse tree in a vars widget assigning the parameters to variables named \\\__paramname__\\\\\n\\t\\t\\t\\t\\t\\tparser {\\n\\t\\t\\t\\t\\t\\t\\ttree: \\n\\t\\t\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttype: \\\vars\\\,\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchildren: parser.tree\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t,\\n\\t\\t\\t\\t\\t\\t\\tsource: parser.source,\\n\\t\\t\\t\\t\\t\\t\\ttype: parser.type\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t$tw.utils.each(variableInfo.params,function(param) {\\n\\t\\t\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(parser.tree0,\\\__\\\ + param.name + \\\__\\\,param.value)\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else {\\n\\t\\t// Transcluding a text reference\\n\\t\\tparser this.wiki.parseTextReference(\\n\\t\\t\\t\\t\\t\\tthis.transcludeTitle,\\n\\t\\t\\t\\t\\t\\tthis.transcludeField,\\n\\t\\t\\t\\t\\t\\tthis.transcludeIndex,\\n\\t\\t\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\t\\t\\tparseAsInline: parseAsInline,\\n\\t\\t\\t\\t\\t\\t\\tsubTiddler: this.transcludeSubTiddler,\\n\\t\\t\\t\\t\\t\\t\\tdefaultType: this.transcludeType\\n\\t\\t\\t\\t\\t\\t});\\n\\t}\\n\\t// Return the parse tree\\n\\treturn {\\n\\t\\tparser: parser,\\n\\t\\tparseTreeNodes: parser ? parser.tree : (this.slotFillParseTrees\\\ts-missing\\\ || ),\\n\\t\\tparseAsInline: parseAsInline,\\n\\t\\ttext: parser && parser.source,\\n\\t\\ttype: parser && parser.type\\n\\t};\\n};\\n\\n/*\\nFetch all the string parameters as an ordered array of {name:, value:} where the name is optional\\n*/\\nTranscludeWidget.prototype.getOrderedTransclusionParameters function() {\\n\\tvar result ;\\n\\t// Collect the parameters\\n\\tfor(var name in this.stringParametersByName) {\\n\\t\\tvar value this.stringParametersByNamename;\\n\\t\\tresult.push({name: name, value: value});\\n\\t}\\n\\t// Sort numerical parameter names first\\n\\tresult.sort(function(a,b) {\\n\\t\\tvar aIsNumeric !isNaN(a.name),\\n\\t\\t\\tbIsNumeric !isNaN(b.name);\\n\\t\\tif(aIsNumeric && bIsNumeric) {\\n\\t\\t\\treturn a.name - b.name;\\n\\t\\t} else if(aIsNumeric) {\\n\\t\\t\\treturn -1;\\n\\t\\t} else if(bIsNumeric) {\\n\\t\\t\\treturn 1;\\n\\t\\t} else {\\n\\t\\t\\treturn a.name b.name ? 0 : (a.name \u003C b.name ? -1 : 1);\\n\\t\\t}\\n\\t});\\n\\t// Remove names from numerical parameters\\n\\t$tw.utils.each(result,function(param,index) {\\n\\t\\tif(!isNaN(param.name)) {\\n\\t\\t\\tdelete param.name;\\n\\t\\t}\\n\\t});\\n\\treturn result;\\n};\\n\\n/*\\nFetch the value of a parameter\\n*/\\nTranscludeWidget.prototype.getTransclusionParameter function(name,index,defaultValue) {\\n\\tif(name in this.stringParametersByName) {\\n\\t\\treturn this.stringParametersByNamename;\\n\\t} else {\\n\\t\\tvar name \\\\\\ + index;\\n\\t\\tif(name in this.stringParametersByName) {\\n\\t\\t\\treturn this.stringParametersByNamename;\\n\\t\\t}\\n\\t}\\n\\treturn defaultValue;\\n};\\n\\n/*\\nGet one of the special parameters to be provided by the parameters widget\\n*/\\nTranscludeWidget.prototype.getTransclusionMetaParameters function() {\\n\\tvar self this;\\n\\treturn {\\n\\t\\t\\\parseMode\\\: function() {\\n\\t\\t\\treturn self.parseAsInline ? \\\inline\\\ : \\\block\\\;\\n\\t\\t},\\n\\t\\t\\\parseTreeNodes\\\: function() {\\n\\t\\t\\treturn JSON.stringify(self.parseTreeNode.children || );\\n\\t\\t},\\n\\t\\t\\\slotFillParseTreeNodes\\\: function() {\\n\\t\\t\\treturn JSON.stringify(self.slotFillParseTrees);\\n\\t\\t},\\n\\t\\t\\\params\\\: function() {\\n\\t\\t\\treturn JSON.stringify(self.stringParametersByName);\\n\\t\\t}\\n\\t};\\n};\\n\\n/*\\nFetch the value of a slot\\n*/\\nTranscludeWidget.prototype.getTransclusionSlotFill function(name,defaultParseTreeNodes) {\\n\\tif(name && this.slotFillParseTreesname && this.slotFillParseTreesname.length > 0) {\\n\\t\\treturn this.slotFillParseTreesname;\\n\\t} else {\\n\\t\\treturn defaultParseTreeNodes || ;\\n\\t}\\n};\\n\\n/*\\nReturn whether this transclusion should be visible to the slot widget\\n*/\\nTranscludeWidget.prototype.hasVisibleSlots function() {\\n\\treturn this.getAttribute(\\\$fillignore\\\,\\\no\\\) \\\no\\\;\\n}\\n\\n/*\\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\\n*/\\nTranscludeWidget.prototype.makeRecursionMarker function() {\\n\\tvar output ;\\n\\toutput.push(\\\{\\\);\\n\\toutput.push(this.getVariable(\\\currentTiddler\\\,{defaultValue: \\\\\\}));\\n\\toutput.push(\\\|\\\);\\n\\toutput.push(this.transcludeTitle || \\\\\\);\\n\\toutput.push(\\\|\\\);\\n\\toutput.push(this.transcludeField || \\\\\\);\\n\\toutput.push(\\\|\\\);\\n\\toutput.push(this.transcludeIndex || \\\\\\);\\n\\toutput.push(\\\|\\\);\\n\\toutput.push(this.transcludeSubTiddler || \\\\\\);\\n\\toutput.push(\\\}\\\);\\n\\treturn output.join(\\\\\\);\\n};\\n\\nTranscludeWidget.prototype.parserNeedsRefresh function() {\\n\\t// Doesnt need to consider transcluded variables because a parent variable cant change once a widget has been created\\n\\tvar parserInfo this.wiki.getTextReferenceParserInfo(this.transcludeTitle,this.transcludeField,this.transcludeIndex,{\\n\\t\\tsubTiddler: this.transcludeSubTiddler,\\n\\t\\tdefaultType: this.transcludeType\\n\\t});\\n\\treturn (this.sourceText undefined || parserInfo.sourceText ! this.sourceText || parserInfo.parserType ! this.parserType || parserInfo._canonical_uri ! this._canonical_uri);\\n};\\n\\nTranscludeWidget.prototype.functionNeedsRefresh function() {\\n\\tvar oldResult this.transcludeFunctionResult;\\n\\tvar variableInfo this.getVariableInfo(this.transcludeVariable,{params: this.getOrderedTransclusionParameters()});\\n\\tvar newResult (variableInfo.resultList ? variableInfo.resultList0 : variableInfo.text) || \\\\\\;\\n\\treturn oldResult ! newResult;\\n}\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nTranscludeWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(($tw.utils.count(changedAttributes) > 0) || (this.transcludeVariableIsFunction && this.functionNeedsRefresh()) || (!this.transcludeVariable && changedTiddlersthis.transcludeTitle && this.parserNeedsRefresh())) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.transclude TranscludeWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/vars.js\:{\title\:\$:/core/modules/widgets/vars.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/vars.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nThis widget allows multiple variables to be set in one go:\\n\\n```\\n\\\\define helloworld() Hello world!\\n\u003C$vars greeting\\\Hi\\\ me{{!!title}} sentence\u003C\u003Chelloworld>>>\\n \u003C\u003Cgreeting>>! I am \u003C\u003Cme>> and I say: \u003C\u003Csentence>>\\n\u003C/$vars>\\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar VarsWidget function(parseTreeNode,options) {\\n\\t// Initialise\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nVarsWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nVarsWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nVarsWidget.prototype.execute function() {\\n\\t// Parse variables\\n\\tvar self this;\\n\\t$tw.utils.each(this.attributes,function(val,key) {\\n\\t\\tif(key.charAt(0) ! \\\$\\\) {\\n\\t\\t\\tself.setVariable(key,val);\\n\\t\\t}\\n\\t});\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nVarsWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\nexports\\\vars\\\ VarsWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/view.js\:{\title\:\$:/core/modules/widgets/view.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/view.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nView widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar ViewWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nViewWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nViewWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tif(this.text) {\\n\\t\\tvar textNode this.document.createTextNode(this.text);\\n\\t\\tparent.insertBefore(textNode,nextSibling);\\n\\t\\tthis.domNodes.push(textNode);\\n\\t} else {\\n\\t\\tthis.makeChildWidgets();\\n\\t\\tthis.renderChildren(parent,nextSibling);\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nViewWidget.prototype.execute function() {\\n\\t// Get parameters from our attributes\\n\\tthis.viewTitle this.getAttribute(\\\tiddler\\\,this.getVariable(\\\currentTiddler\\\));\\n\\tthis.viewSubtiddler this.getAttribute(\\\subtiddler\\\);\\n\\tthis.viewField this.getAttribute(\\\field\\\,\\\text\\\);\\n\\tthis.viewIndex this.getAttribute(\\\index\\\);\\n\\tthis.viewFormat this.getAttribute(\\\format\\\,\\\text\\\);\\n\\tthis.viewTemplate this.getAttribute(\\\template\\\,\\\\\\);\\n\\tthis.viewMode this.getAttribute(\\\mode\\\,\\\block\\\);\\n\\tswitch(this.viewFormat) {\\n\\t\\tcase \\\htmlwikified\\\:\\n\\t\\t\\tthis.text this.getValueAsHtmlWikified(this.viewMode);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\plainwikified\\\:\\n\\t\\t\\tthis.text this.getValueAsPlainWikified(this.viewMode);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\htmlencodedplainwikified\\\:\\n\\t\\t\\tthis.text this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\htmlencoded\\\:\\n\\t\\t\\tthis.text this.getValueAsHtmlEncoded();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\htmltextencoded\\\:\\n\\t\\t\\tthis.text this.getValueAsHtmlTextEncoded();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\urlencoded\\\:\\n\\t\\t\\tthis.text this.getValueAsUrlEncoded();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\doubleurlencoded\\\:\\n\\t\\t\\tthis.text this.getValueAsDoubleUrlEncoded();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\date\\\:\\n\\t\\t\\tthis.text this.getValueAsDate(this.viewTemplate);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\relativedate\\\:\\n\\t\\t\\tthis.text this.getValueAsRelativeDate();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\stripcomments\\\:\\n\\t\\t\\tthis.text this.getValueAsStrippedComments();\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\jsencoded\\\:\\n\\t\\t\\tthis.text this.getValueAsJsEncoded();\\n\\t\\t\\tbreak;\\n\\t\\tdefault: // \\\text\\\\\n\\t\\t\\tthis.text this.getValueAsText();\\n\\t\\t\\tbreak;\\n\\t}\\n};\\n\\n/*\\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\\n*/\\n\\n/*\\nRetrieve the value of the widget. Options are:\\nasString: Optionally return the value as a string\\n*/\\nViewWidget.prototype.getValue function(options) {\\n\\toptions options || {};\\n\\tvar value options.asString ? \\\\\\ : undefined;\\n\\tif(this.viewIndex) {\\n\\t\\tvalue this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\\n\\t} else {\\n\\t\\tvar tiddler;\\n\\t\\tif(this.viewSubtiddler) {\\n\\t\\t\\ttiddler this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\\n\\t\\t} else {\\n\\t\\t\\ttiddler this.wiki.getTiddler(this.viewTitle);\\n\\t\\t}\\n\\t\\tif(tiddler) {\\n\\t\\t\\tif(this.viewField \\\text\\\ && !this.viewSubtiddler) {\\n\\t\\t\\t\\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\\n\\t\\t\\t\\tvalue this.wiki.getTiddlerText(this.viewTitle);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\\n\\t\\t\\t\\t\\tif(options.asString) {\\n\\t\\t\\t\\t\\t\\tvalue tiddler.getFieldString(this.viewField);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvalue tiddler.fieldsthis.viewField;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tif(this.viewField \\\title\\\) {\\n\\t\\t\\t\\tvalue this.viewTitle;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn value;\\n};\\n\\nViewWidget.prototype.getValueAsText function() {\\n\\treturn this.getValue({asString: true});\\n};\\n\\nViewWidget.prototype.getValueAsHtmlWikified function(mode) {\\n\\treturn this.wiki.renderText(\\\text/html\\\,\\\text/vnd.tiddlywiki\\\,this.getValueAsText(),{\\n\\t\\tparseAsInline: mode ! \\\block\\\,\\n\\t\\tparentWidget: this\\n\\t});\\n};\\n\\nViewWidget.prototype.getValueAsPlainWikified function(mode) {\\n\\treturn this.wiki.renderText(\\\text/plain\\\,\\\text/vnd.tiddlywiki\\\,this.getValueAsText(),{\\n\\t\\tparseAsInline: mode ! \\\block\\\,\\n\\t\\tparentWidget: this\\n\\t});\\n};\\n\\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified function(mode) {\\n\\treturn $tw.utils.htmlEncode(this.wiki.renderText(\\\text/plain\\\,\\\text/vnd.tiddlywiki\\\,this.getValueAsText(),{\\n\\t\\tparseAsInline: mode ! \\\block\\\,\\n\\t\\tparentWidget: this\\n\\t}));\\n};\\n\\nViewWidget.prototype.getValueAsHtmlEncoded function() {\\n\\treturn $tw.utils.htmlEncode(this.getValueAsText());\\n};\\n\\nViewWidget.prototype.getValueAsHtmlTextEncoded function() {\\n\\treturn $tw.utils.htmlTextEncode(this.getValueAsText());\\n};\\n\\nViewWidget.prototype.getValueAsUrlEncoded function() {\\n\\treturn $tw.utils.encodeURIComponentExtended(this.getValueAsText());\\n};\\n\\nViewWidget.prototype.getValueAsDoubleUrlEncoded function() {\\n\\treturn $tw.utils.encodeURIComponentExtended($tw.utils.encodeURIComponentExtended(this.getValueAsText()));\\n};\\n\\nViewWidget.prototype.getValueAsDate function(format) {\\n\\tformat format || \\\YYYY MM DD 0hh:0mm\\\;\\n\\tvar value $tw.utils.parseDate(this.getValue());\\n\\tif(value && $tw.utils.isDate(value) && value.toString() ! \\\Invalid Date\\\) {\\n\\t\\treturn $tw.utils.formatDateString(value,format);\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\\nViewWidget.prototype.getValueAsRelativeDate function(format) {\\n\\tvar value $tw.utils.parseDate(this.getValue());\\n\\tif(value && $tw.utils.isDate(value) && value.toString() ! \\\Invalid Date\\\) {\\n\\t\\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\\n\\t} else {\\n\\t\\treturn \\\\\\;\\n\\t}\\n};\\n\\nViewWidget.prototype.getValueAsStrippedComments function() {\\n\\tvar lines this.getValueAsText().split(\\\\\\\n\\\),\\n\\t\\tout ;\\n\\tfor(var line0; line\u003Clines.length; line++) {\\n\\t\\tvar text linesline;\\n\\t\\tif(!/^\\\\s*\\\\/\\\\/#/.test(text)) {\\n\\t\\t\\tout.push(text);\\n\\t\\t}\\n\\t}\\n\\treturn out.join(\\\\\\\n\\\);\\n};\\n\\nViewWidget.prototype.getValueAsJsEncoded function() {\\n\\treturn $tw.utils.stringify(this.getValueAsText());\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nViewWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlersthis.viewTitle) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\n\\t}\\n};\\n\\nexports.view ViewWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/widget.js\:{\title\:\$:/core/modules/widgets/widget.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/widget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget base class\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nCreate a widget object for a parse tree node\\n\\tparseTreeNode: reference to the parse tree node to be rendered\\n\\toptions: see below\\nOptions include:\\n\\twiki: mandatory reference to wiki associated with this render tree\\n\\tparentWidget: optional reference to a parent renderer node for the context chain\\n\\tdocument: optional document object to use instead of global document\\n*/\\nvar Widget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\\n*/\\nWidget.prototype.initialise function(parseTreeNode,options) {\\n\\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\\n\\tif(parseTreeNode undefined) {\\n\\t\\treturn;\\n\\t}\\n\\toptions options || {};\\n\\t// Save widget info\\n\\tthis.parseTreeNode parseTreeNode;\\n\\tthis.wiki options.wiki;\\n\\tthis.parentWidget options.parentWidget;\\n\\tthis.variables Object.create(this.parentWidget ? this.parentWidget.variables : null);\\n\\tthis.document options.document;\\n\\tthis.attributes {};\\n\\tthis.children ;\\n\\tthis.domNodes ;\\n\\tthis.eventListeners {};\\n\\t// Hashmap of the widget classes\\n\\tif(!this.widgetClasses) {\\n\\t\\t// Get widget classes\\n\\t\\tWidget.prototype.widgetClasses $tw.modules.applyMethods(\\\widget\\\);\\n\\t\\t// Process any subclasses\\n\\t\\t$tw.modules.forEachModuleOfType(\\\widget-subclass\\\,function(title,module) {\\n\\t\\t\\tif(module.baseClass) {\\n\\t\\t\\t\\tvar baseClass Widget.prototype.widgetClassesmodule.baseClass;\\n\\t\\t\\t\\tif(!baseClass) {\\n\\t\\t\\t\\t\\tthrow \\\Module \\\ + title + \\\ is attemping to extend a non-existent base class \\\ + module.baseClass + \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar subClass module.constructor;\\n\\t\\t\\t\\tsubClass.prototype new baseClass();\\n\\t\\t\\t\\t$tw.utils.extend(subClass.prototype,module.prototype);\\n\\t\\t\\t\\tWidget.prototype.widgetClassesmodule.name || module.baseClass subClass;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nRender this widget into the DOM\\n*/\\nWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nWidget.prototype.execute function() {\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSet the value of a context variable\\nname: name of the variable\\nvalue: value of the variable\\nparams: array of {name:, default:} for each parameter\\nisMacroDefinition: true if the variable is set via a \\\\define macro pragma (and hence should have variable substitution performed)\\noptions includes:\\n\\tisProcedureDefinition: true if the variable is set via a \\\\procedure pragma (and hence should not have variable substitution performed)\\n\\tisFunctionDefinition: true if the variable is set via a \\\\function pragma (and hence should not have variable substitution performed)\\n\\tisWidgetDefinition: true if the variable is set via a \\\\widget pragma (and hence should not have variable substitution performed)\\n*/\\nWidget.prototype.setVariable function(name,value,params,isMacroDefinition,options) {\\n\\toptions options || {};\\n\\tthis.variablesname {\\n\\t\\tvalue: value,\\n\\t\\tparams: params,\\n\\t\\tisMacroDefinition: !!isMacroDefinition,\\n\\t\\tisFunctionDefinition: !!options.isFunctionDefinition,\\n\\t\\tisProcedureDefinition: !!options.isProcedureDefinition,\\n\\t\\tisWidgetDefinition: !!options.isWidgetDefinition,\\n\\t\\tconfigTrimWhiteSpace: !!options.configTrimWhiteSpace\\n\\t};\\n};\\n\\n/*\\nGet the prevailing value of a context variable\\nname: name of variable\\noptions: see below\\nOptions include\\n\\nparams: array of {name:, value:} for each parameter\\ndefaultValue: default value if the variable is not defined\\nsource: optional source iterator for evaluating function invocations\\nallowSelfAssigned: if true, includes the current widget in the context chain instead of just the parent\\n\\nReturns an object with the following fields:\\n\\nparams: array of {name:,value:} or {value:} of parameters to be applied\\ntext: text of variable, with parameters properly substituted\\nresultList: result of variable evaluation as an array\\nsrcVariable: reference to the object defining the variable\\n*/\\nWidget.prototype.getVariableInfo function(name,options) {\\n\\toptions options || {};\\n\\tvar self this,\\n\\t\\tactualParams options.params || ,\\n\\t\\tvariable;\\n\\tif(options.allowSelfAssigned) {\\n\\t\\tvariable this.variablesname;\\n\\t} else {\\n\\t\\tvariable this.parentWidget && this.parentWidget.variablesname;\\n\\t}\\n\\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\\n\\tif(variable) {\\n\\t\\tvar originalValue variable.value,\\n\\t\\t\\tvalue originalValue,\\n\\t\\t\\tparams ,\\n\\t\\t\\tresultList value;\\n\\t\\t// Only substitute parameter and variable references if this variable was defined with the \\\\define pragma\\n\\t\\tif(variable.isMacroDefinition) {\\n\\t\\t\\tparams self.resolveVariableParameters(variable.params,actualParams);\\n\\t\\t\\t// Substitute any parameters specified in the definition\\n\\t\\t\\t$tw.utils.each(params,function(param) {\\n\\t\\t\\t\\tvalue $tw.utils.replaceString(value,new RegExp(\\\\\\\\\\\$\\\ + $tw.utils.escapeRegExp(param.name) + \\\\\\\\\\\$\\\,\\\mg\\\),param.value);\\n\\t\\t\\t});\\n\\t\\t\\tvalue self.substituteVariableReferences(value,options);\\n\\t\\t\\tresultList value;\\n\\t\\t} else if(variable.isFunctionDefinition) {\\n\\t\\t\\t// Function evaluations\\n\\t\\t\\tparams self.resolveVariableParameters(variable.params,actualParams);\\n\\t\\t\\tvar variables options.variables || Object.create(null);\\n\\t\\t\\t// Apply default parameter values\\n\\t\\t\\t$tw.utils.each(variable.params,function(param,index) {\\n\\t\\t\\t\\tif(param\\\default\\\) {\\n\\t\\t\\t\\t\\tvariablesparam.name param\\\default\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t\\t// Parameters are an array of {value:} or {name:, value:} pairs\\n\\t\\t\\t$tw.utils.each(params,function(param) {\\n\\t\\t\\t\\tvariablesparam.name param.value;\\n\\t\\t\\t});\\n\\t\\t\\tresultList this.wiki.filterTiddlers(value,this.makeFakeWidgetWithVariables(variables),options.source);\\n\\t\\t\\tvalue resultList0 || \\\\\\;\\n\\t\\t} else {\\n\\t\\t\\tparams variable.params;\\n\\t\\t}\\n\\t\\treturn {\\n\\t\\t\\ttext: value,\\n\\t\\t\\tparams: params,\\n\\t\\t\\tresultList: resultList,\\n\\t\\t\\tsrcVariable: variable,\\n\\t\\t\\tisCacheable: originalValue value\\n\\t\\t};\\n\\t}\\n\\t// If the variable doesnt exist in the parent widget then look for a macro module\\n\\tvar text this.evaluateMacroModule(name,actualParams);\\n\\tif(text undefined) {\\n\\t\\ttext options.defaultValue;\\n\\t}\\n\\treturn {\\n\\t\\ttext: text,\\n\\t\\tresultList: text\\n\\t};\\n};\\n\\n/*\\nSimplified version of getVariableInfo() that just returns the text\\n*/\\nWidget.prototype.getVariable function(name,options) {\\n\\treturn this.getVariableInfo(name,options).text;\\n};\\n\\n/*\\nMaps actual parameters onto formal parameters, returning an array of {name:,value:} objects\\nformalParams - Array of {name:,default:} (default value is optional)\\nactualParams - Array of string values or {name:,value:} (name is optional)\\n*/\\nWidget.prototype.resolveVariableParameters function(formalParams,actualParams) {\\n\\tformalParams formalParams || ;\\n\\tactualParams actualParams || ;\\n\\tvar nextAnonParameter 0, // Next candidate anonymous parameter in macro call\\n\\t\\tparamInfo, paramValue,\\n\\t\\tresults ;\\n\\t// Step through each of the parameters in the macro definition\\n\\tfor(var p0; p\u003CformalParams.length; p++) {\\n\\t\\t// Check if weve got a macro call parameter with the same name\\n\\t\\tparamInfo formalParamsp;\\n\\t\\tparamValue undefined;\\n\\t\\tfor(var m0; m\u003CactualParams.length; m++) {\\n\\t\\t\\tif(typeof actualParamsm ! \\\string\\\ && actualParamsm.name paramInfo.name) {\\n\\t\\t\\t\\tparamValue actualParamsm.value;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// If not, use the next available anonymous macro call parameter\\n\\t\\twhile(nextAnonParameter \u003C actualParams.length && actualParamsnextAnonParameter.name) {\\n\\t\\t\\tnextAnonParameter++;\\n\\t\\t}\\n\\t\\tif(paramValue undefined && nextAnonParameter \u003C actualParams.length) {\\n\\t\\t\\tvar param actualParamsnextAnonParameter++;\\n\\t\\t\\tparamValue typeof param \\\string\\\ ? param : param.value;\\n\\t\\t}\\n\\t\\t// If weve still not got a value, use the default, if any\\n\\t\\tparamValue paramValue || paramInfo\\\default\\\ || \\\\\\;\\n\\t\\t// Store the parameter name and value\\n\\t\\tresults.push({name: paramInfo.name, value: paramValue});\\n\\t}\\n\\treturn results;\\n};\\n\\nWidget.prototype.substituteVariableReferences function(text,options) {\\n\\tvar self this;\\n\\treturn (text || \\\\\\).replace(/\\\\$\\\\((^\\\\)\\\\$+)\\\\)\\\\$/g,function(match,p1,offset,string) {\\n\\t\\treturn options.variables && options.variablesp1 || (self.getVariable(p1,{defaultValue: \\\\\\}));\\n\\t});\\n};\\n\\nWidget.prototype.evaluateMacroModule function(name,actualParams,defaultValue) {\\n\\tif($tw.utils.hop($tw.macros,name)) {\\n\\t\\tvar macro $tw.macrosname,\\n\\t\\t\\targs ;\\n\\t\\tif(macro.params.length > 0) {\\n\\t\\t\\tvar nextAnonParameter 0, // Next candidate anonymous parameter in macro call\\n\\t\\t\\t\\tparamInfo, paramValue;\\n\\t\\t\\t// Step through each of the parameters in the macro definition\\n\\t\\t\\tfor(var p0; p\u003Cmacro.params.length; p++) {\\n\\t\\t\\t\\t// Check if weve got a macro call parameter with the same name\\n\\t\\t\\t\\tparamInfo macro.paramsp;\\n\\t\\t\\t\\tparamValue undefined;\\n\\t\\t\\t\\tfor(var m0; m\u003CactualParams.length; m++) {\\n\\t\\t\\t\\t\\tif(actualParamsm.name paramInfo.name) {\\n\\t\\t\\t\\t\\t\\tparamValue actualParamsm.value;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// If not, use the next available anonymous macro call parameter\\n\\t\\t\\t\\twhile(nextAnonParameter \u003C actualParams.length && actualParamsnextAnonParameter.name) {\\n\\t\\t\\t\\t\\tnextAnonParameter++;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(paramValue undefined && nextAnonParameter \u003C actualParams.length) {\\n\\t\\t\\t\\t\\tparamValue actualParamsnextAnonParameter++.value;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// If weve still not got a value, use the default, if any\\n\\t\\t\\t\\tparamValue paramValue || paramInfo\\\default\\\ || \\\\\\;\\n\\t\\t\\t\\t// Save the parameter\\n\\t\\t\\t\\targs.push(paramValue);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\telse for(var i0; i\u003CactualParams.length; ++i) {\\n\\t\\t\\targs.push(actualParamsi.value);\\n\\t\\t}\\n\\t\\treturn (macro.run.apply(this,args) || \\\\\\).toString();\\n\\t} else {\\n\\t\\treturn defaultValue;\\n\\t}\\n};\\n\\n/*\\nCheck whether a given context variable value exists in the parent chain\\n*/\\nWidget.prototype.hasVariable function(name,value) {\\n\\tvar node this;\\n\\twhile(node) {\\n\\t\\tif($tw.utils.hop(node.variables,name) && node.variablesname.value value) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t\\tnode node.parentWidget;\\n\\t}\\n\\treturn false;\\n};\\n\\n/*\\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\\n*/\\nWidget.prototype.getStateQualifier function(name) {\\n\\tthis.qualifiers this.qualifiers || Object.create(null);\\n\\tname name || \\\transclusion\\\;\\n\\tif(this.qualifiersname) {\\n\\t\\treturn this.qualifiersname;\\n\\t} else {\\n\\t\\tvar output ,\\n\\t\\t\\tnode this;\\n\\t\\twhile(node && node.parentWidget) {\\n\\t\\t\\tif($tw.utils.hop(node.parentWidget.variables,name)) {\\n\\t\\t\\t\\toutput.push(node.getVariable(name));\\n\\t\\t\\t}\\n\\t\\t\\tnode node.parentWidget;\\n\\t\\t}\\n\\t\\tvar value $tw.utils.hashString(output.join(\\\\\\));\\n\\t\\tthis.qualifiersname value;\\n\\t\\treturn value;\\n\\t}\\n};\\n\\n/*\\nMake a fake widget with specified variables, suitable for variable lookup in filters\\n*/\\nWidget.prototype.makeFakeWidgetWithVariables function(variables) {\\n\\tvar self this,\\n\\t\\tvariables variables || {};\\n\\treturn {\\n\\t\\tgetVariable: function(name,opts) {\\n\\t\\t\\tif($tw.utils.hop(variables,name)) {\\n\\t\\t\\t\\treturn variablesname;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\topts opts || {};\\n\\t\\t\\t\\topts.variables variables;\\n\\t\\t\\t\\treturn self.getVariable(name,opts);\\n\\t\\t\\t};\\n\\t\\t},\\n\\t\\tgetVariableInfo: function(name,opts) {\\n\\t\\t\\tif($tw.utils.hop(variables,name)) {\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\ttext: variablesname\\n\\t\\t\\t\\t};\\n\\t\\t\\t} else {\\n\\t\\t\\t\\topts opts || {};\\n\\t\\t\\t\\topts.variables $tw.utils.extend({},variables,opts.variables);\\n\\t\\t\\t\\treturn self.getVariableInfo(name,opts);\\n\\t\\t\\t};\\n\\t\\t},\\n\\t\\tmakeFakeWidgetWithVariables: self.makeFakeWidgetWithVariables,\\n\\t\\tresolveVariableParameters: self.resolveVariableParameters,\\n\\t\\twiki: self.wiki\\n\\t};\\n};\\n\\n/*\\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed.\\nOptions include:\\nfilterFn: only include attributes where filterFn(name) returns true\\n*/\\nWidget.prototype.computeAttributes function(options) {\\n\\toptions options || {};\\n\\tvar changedAttributes {},\\n\\t\\tself this;\\n\\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\\n\\t\\tif(options.filterFn) {\\n\\t\\t\\tif(!options.filterFn(name)) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar value self.computeAttribute(attribute);\\n\\t\\tif(self.attributesname ! value) {\\n\\t\\t\\tself.attributesname value;\\n\\t\\t\\tchangedAttributesname true;\\n\\t\\t}\\n\\t});\\n\\treturn changedAttributes;\\n};\\n\\nWidget.prototype.computeAttribute function(attribute) {\\n\\tvar self this,\\n\\t\\tvalue;\\n\\tif(attribute.type \\\filtered\\\) {\\n\\t\\tvalue this.wiki.filterTiddlers(attribute.filter,this)0 || \\\\\\;\\n\\t} else if(attribute.type \\\indirect\\\) {\\n\\t\\tvalue this.wiki.getTextReference(attribute.textReference,\\\\\\,this.getVariable(\\\currentTiddler\\\)) || \\\\\\;\\n\\t} else if(attribute.type \\\macro\\\) {\\n\\t\\tvar variableInfo this.getVariableInfo(attribute.value.name,{params: attribute.value.params});\\n\\t\\tvalue variableInfo.text;\\n\\t} else if(attribute.type \\\substituted\\\) {\\n\\t\\tvalue this.wiki.getSubstitutedText(attribute.rawValue,this) || \\\\\\;\\n\\t} else { // String attribute\\n\\t\\tvalue attribute.value;\\n\\t}\\n\\treturn value;\\n};\\n\\n/*\\nCheck for the presence of an evaluated attribute on the widget. Note that attributes set to a missing variable (ie attr\u003C\u003Cmissing>>) will be treated as missing\\n*/\\nWidget.prototype.hasAttribute function(name) {\\n\\treturn $tw.utils.hop(this.attributes,name);\\n};\\n\\n/*\\nCheck for the presence of a raw attribute on the widget parse tree node. Note that attributes set to a missing variable (ie attr\u003C\u003Cmissing>>) will NOT be treated as missing\\n*/\\nWidget.prototype.hasParseTreeNodeAttribute function(name) {\\n\\treturn $tw.utils.hop(this.parseTreeNode.attributes,name);\\n};\\n\\n/*\\nGet the value of an attribute\\n*/\\nWidget.prototype.getAttribute function(name,defaultText) {\\n\\tif($tw.utils.hop(this.attributes,name)) {\\n\\t\\treturn this.attributesname;\\n\\t} else {\\n\\t\\treturn defaultText;\\n\\t}\\n};\\n\\n/*\\nAssign the common attributes of the widget to a domNode\\noptions include:\\nsourcePrefix: prefix of attributes that are to be directly assigned (defaults to the empty string meaning all attributes)\\ndestPrefix: prefix to be applied to attribute names that are to be directly assigned (defaults to the emtpy string which means no prefix is added)\\nchangedAttributes: hashmap by attribute name of attributes to process (if missing, process all attributes)\\nexcludeEventAttributes: ignores attributes whose name would begin with \\\on\\\\\n*/\\nWidget.prototype.assignAttributes function(domNode,options) {\\n\\toptions options || {};\\n\\tvar self this,\\n\\t\\tchangedAttributes options.changedAttributes || this.attributes,\\n\\t\\tsourcePrefix options.sourcePrefix || \\\\\\,\\n\\t\\tdestPrefix options.destPrefix || \\\\\\,\\n\\t\\tEVENT_ATTRIBUTE_PREFIX \\\on\\\;\\n\\tvar assignAttribute function(name,value) {\\n\\t\\t// Process any CSS custom properties\\n\\t\\tif(name.substr(0,2) \\\--\\\ && name.length > 2) {\\n\\t\\t\\tdomNode.style.setProperty(name,value);\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Process any style attributes before considering sourcePrefix and destPrefix\\n\\t\\tif(name.substr(0,6) \\\style.\\\ && name.length > 6) {\\n\\t\\t\\tdomNode.style$tw.utils.unHyphenateCss(name.substr(6)) value;\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t// Check if the sourcePrefix is a match\\n\\t\\tif(name.substr(0,sourcePrefix.length) sourcePrefix) {\\n\\t\\t\\tname destPrefix + name.substr(sourcePrefix.length);\\n\\t\\t} else {\\n\\t\\t\\tvalue undefined;\\n\\t\\t}\\n\\t\\t// Check for excluded attribute names\\n\\t\\tif(options.excludeEventAttributes && name.substr(0,2).toLowerCase() EVENT_ATTRIBUTE_PREFIX) {\\n\\t\\t\\tvalue undefined;\\n\\t\\t}\\n\\t\\tif(value ! undefined) {\\n\\t\\t\\t// Handle the xlink: namespace\\n\\t\\t\\tvar namespace null;\\n\\t\\t\\tif(name.substr(0,6) \\\xlink:\\\ && name.length > 6) {\\n\\t\\t\\t\\tnamespace \\\http://www.w3.org/1999/xlink\\\;\\n\\t\\t\\t\\tname name.substr(6);\\n\\t\\t\\t}\\n\\t\\t\\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tdomNode.setAttributeNS(namespace,name,value);\\n\\t\\t\\t} catch(e) {\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// If the parse tree node has the orderedAttributes property then use that order\\n\\tif(this.parseTreeNode.orderedAttributes) {\\n\\t\\t$tw.utils.each(this.parseTreeNode.orderedAttributes,function(attribute,index) {\\n\\t\\t\\tif(attribute.name in changedAttributes) {\\n\\t\\t\\t\\tassignAttribute(attribute.name,self.getAttribute(attribute.name));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t// Otherwise update each changed attribute irrespective of order\\n\\t} else {\\n\\t\\t$tw.utils.each(changedAttributes,function(value,name) {\\n\\t\\t\\tassignAttribute(name,self.getAttribute(name));\\n\\t\\t});\\t\\n\\t}\\n};\\n\\n/*\\nGet the number of ancestor widgets for this widget\\n*/\\nWidget.prototype.getAncestorCount function() {\\n\\tif(this.ancestorCount undefined) {\\n\\t\\tif(this.parentWidget) {\\n\\t\\t\\tthis.ancestorCount this.parentWidget.getAncestorCount() + 1;\\n\\t\\t} else {\\n\\t\\t\\tthis.ancestorCount 0;\\n\\t\\t}\\n\\t}\\n\\treturn this.ancestorCount;\\n};\\n\\n/*\\nMake child widgets correspondng to specified parseTreeNodes\\n*/\\nWidget.prototype.makeChildWidgets function(parseTreeNodes,options) {\\n\\toptions options || {};\\n\\tthis.children ;\\n\\tvar self this;\\n\\t// Check for too much recursion\\n\\tif(this.getAncestorCount() > $tw.utils.TranscludeRecursionError.MAX_WIDGET_TREE_DEPTH) {\\n\\t\\tthrow new $tw.utils.TranscludeRecursionError();\\n\\t} else {\\n\\t\\t// Create set variable widgets for each variable\\n\\t\\t$tw.utils.each(options.variables,function(value,name) {\\n\\t\\t\\tvar setVariableWidget {\\n\\t\\t\\t\\ttype: \\\set\\\,\\n\\t\\t\\t\\tattributes: {\\n\\t\\t\\t\\t\\tname: {type: \\\string\\\, value: name},\\n\\t\\t\\t\\t\\tvalue: {type: \\\string\\\, value: value}\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\tchildren: parseTreeNodes\\n\\t\\t\\t};\\n\\t\\t\\tparseTreeNodes setVariableWidget;\\n\\t\\t});\\n\\t\\t// Create the child widgets\\n\\t\\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\\n\\t\\t\\tself.children.push(self.makeChildWidget(childNode));\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nConstruct the widget object for a parse tree node\\noptions include:\\n\\tvariables: optional hashmap of variables to wrap around the widget\\n*/\\nWidget.prototype.makeChildWidget function(parseTreeNode,options) {\\n\\tvar self this;\\n\\toptions options || {};\\n\\t// Check whether this node type is defined by a custom widget definition\\n\\tvar variableDefinitionName \\\$\\\ + parseTreeNode.type;\\n\\tif(this.variablesvariableDefinitionName) {\\n\\t\\tvar isOverrideable function() {\\n\\t\\t\\t\\t// Widget is overrideable if its name contains a period, or if it is an existing JS widget and were not in safe mode\\n\\t\\t\\t\\treturn parseTreeNode.type.indexOf(\\\.\\\) ! -1 || (!!self.widgetClassesparseTreeNode.type && !$tw.safeMode);\\n\\t\\t\\t};\\n\\t\\tif(!parseTreeNode.isNotRemappable && isOverrideable()) { \\n\\t\\t\\tvar variableInfo this.getVariableInfo(variableDefinitionName,{allowSelfAssigned: true});\\n\\t\\t\\tif(variableInfo && variableInfo.srcVariable && variableInfo.srcVariable.value && variableInfo.srcVariable.isWidgetDefinition) {\\n\\t\\t\\t\\tvar newParseTreeNode {\\n\\t\\t\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\t\\t\\tchildren: parseTreeNode.children,\\n\\t\\t\\t\\t\\tisBlock: parseTreeNode.isBlock\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(newParseTreeNode,\\\$variable\\\,variableDefinitionName);\\n\\t\\t\\t\\t$tw.utils.each(parseTreeNode.attributes,function(attr,name) {\\n\\t\\t\\t\\t\\t// If the attribute starts with a dollar then add an extra dollar so that it doesnt clash with the $xxx attributes of transclude\\n\\t\\t\\t\\t\\tname name.charAt(0) \\\$\\\ ? \\\$\\\ + name : name;\\n\\t\\t\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(newParseTreeNode,$tw.utils.extend({},attr,{name: name}));\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tparseTreeNode newParseTreeNode;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Get the widget class for this node type\\n\\tvar WidgetClass this.widgetClassesparseTreeNode.type;\\n\\tif(!WidgetClass) {\\n\\t\\tWidgetClass this.widgetClasses.text;\\n\\t\\tparseTreeNode {type: \\\text\\\, text: \\\Undefined widget \\\ + parseTreeNode.type + \\\\\\};\\n\\t}\\n\\t// Create set variable widgets for each variable\\n\\t$tw.utils.each(options.variables,function(value,name) {\\n\\t\\tvar setVariableWidget {\\n\\t\\t\\ttype: \\\set\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tname: {type: \\\string\\\, value: name},\\n\\t\\t\\t\\tvalue: {type: \\\string\\\, value: value}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: \\n\\t\\t\\t\\tparseTreeNode\\n\\t\\t\\t\\n\\t\\t};\\n\\t\\tparseTreeNode setVariableWidget;\\n\\t});\\n\\treturn new WidgetClass(parseTreeNode,{\\n\\t\\twiki: this.wiki,\\n\\t\\tparentWidget: this,\\n\\t\\tdocument: this.document\\n\\t});\\n};\\n\\n/*\\nGet the next sibling of this widget\\n*/\\nWidget.prototype.nextSibling function() {\\n\\tif(this.parentWidget) {\\n\\t\\tvar index this.parentWidget.children.indexOf(this);\\n\\t\\tif(index ! -1 && index \u003C this.parentWidget.children.length-1) {\\n\\t\\t\\treturn this.parentWidget.childrenindex+1;\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nGet the previous sibling of this widget\\n*/\\nWidget.prototype.previousSibling function() {\\n\\tif(this.parentWidget) {\\n\\t\\tvar index this.parentWidget.children.indexOf(this);\\n\\t\\tif(index ! -1 && index > 0) {\\n\\t\\t\\treturn this.parentWidget.childrenindex-1;\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nRender the children of this widget into the DOM\\n*/\\nWidget.prototype.renderChildren function(parent,nextSibling) {\\n\\tvar children this.children;\\n\\tfor(var i 0; i \u003C children.length; i++) {\\n\\t\\tchildreni.render(parent,nextSibling);\\n\\t};\\n};\\n\\n/*\\nAdd a list of event listeners from an array {type:,handler:},...\\n*/\\nWidget.prototype.addEventListeners function(listeners) {\\n\\tvar self this;\\n\\t$tw.utils.each(listeners,function(listenerInfo) {\\n\\t\\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\\n\\t});\\n};\\n\\n/*\\nAdd an event listener.\\n\\nListener could return a boolean indicating whether to further propagation or not, default to `false`.\\n*/\\nWidget.prototype.addEventListener function(type,handler) {\\n\\tthis.eventListenerstype this.eventListenerstype || ;\\n\\tif(this.eventListenerstype.indexOf(handler) -1) {\\n\\t\\tthis.eventListenerstype.push(handler);\\n\\t}\\n};\\n\\n/*\\nRemove an event listener\\n*/\\nWidget.prototype.removeEventListener function(type,handler) {\\n\\tif(!this.eventListenerstype) return;\\n\\tvar index this.eventListenerstype.indexOf(handler);\\n\\tif(index ! -1) {\\n\\t\\tthis.eventListenerstype.splice(index,1);\\n\\t}\\n};\\n\\n/*\\nDispatch an event to a widget.\\n\\nIf the widget doesnt handle the event then it is also dispatched to the parent widget\\n*/\\nWidget.prototype.dispatchEvent function(event) {\\n\\tevent.widget event.widget || this;\\n\\tvar listeners this.eventListenersevent.type;\\n\\tif(listeners) {\\n\\t\\tvar self this;\\n\\t\\tvar shouldPropagate true;\\n\\t\\t$tw.utils.each(listeners,function(handler) {\\n\\t\\t\\tvar propagate;\\n\\t\\t\\tif(typeof handler \\\string\\\) {\\n\\t\\t\\t\\t // If handler is a string, call it as a method on the widget\\n\\t\\t\\t\\tpropagate selfhandler.call(self,event);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Otherwise call the function handler directly\\n\\t\\t\\t\\tpropagate handler.call(self,event);\\n\\t\\t\\t}\\n\\t\\t\\tif(propagate false) {\\n\\t\\t\\t\\tshouldPropagate false;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tif(!shouldPropagate) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t}\\n\\t// Dispatch the event to the parent widget\\n\\tif(this.parentWidget) {\\n\\t\\treturn this.parentWidget.dispatchEvent(event);\\n\\t}\\n\\treturn true;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nWidget.prototype.refresh function(changedTiddlers) {\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nRebuild a previously rendered widget\\n*/\\nWidget.prototype.refreshSelf function() {\\n\\tvar nextSibling this.findNextSiblingDomNode();\\n\\tthis.removeChildDomNodes();\\n\\tthis.render(this.parentDomNode,nextSibling);\\n};\\n\\n/*\\nRefresh all the children of a widget\\n*/\\nWidget.prototype.refreshChildren function(changedTiddlers) {\\n\\tvar children this.children,\\n\\t\\trefreshed false;\\n\\tfor (var i 0; i \u003C children.length; i++) {\\n\\t\\trefreshed childreni.refresh(changedTiddlers) || refreshed;\\n\\t}\\n\\treturn refreshed;\\n};\\n\\n/*\\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\\n*/\\nWidget.prototype.findNextSiblingDomNode function(startIndex) {\\n\\t// Refer to this widget by its index within its parents children\\n\\tvar parent this.parentWidget,\\n\\t\\tindex startIndex ! undefined ? startIndex : parent.children.indexOf(this);\\nif(index -1) {\\n\\tthrow \\\node not found in parents children\\\;\\n}\\n\\t// Look for a DOM node in the later siblings\\n\\twhile(++index \u003C parent.children.length) {\\n\\t\\tvar domNode parent.childrenindex.findFirstDomNode();\\n\\t\\tif(domNode) {\\n\\t\\t\\treturn domNode;\\n\\t\\t}\\n\\t}\\n\\t// Go back and look for later siblings of our parent if it has the same parent dom node\\n\\tvar grandParent parent.parentWidget;\\n\\tif(grandParent && parent.parentDomNode this.parentDomNode) {\\n\\t\\tindex grandParent.children.indexOf(parent);\\n\\t\\tif(index ! -1) {\\n\\t\\t\\treturn parent.findNextSiblingDomNode(index);\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nFind the first DOM node generated by a widget or its children\\n*/\\nWidget.prototype.findFirstDomNode function() {\\n\\t// Return the first dom node of this widget, if weve got one\\n\\tif(this.domNodes.length > 0) {\\n\\t\\treturn this.domNodes0;\\n\\t}\\n\\t// Otherwise, recursively call our children\\n\\tfor(var t0; t\u003Cthis.children.length; t++) {\\n\\t\\tvar domNode this.childrent.findFirstDomNode();\\n\\t\\tif(domNode) {\\n\\t\\t\\treturn domNode;\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nRemove any DOM nodes created by this widget or its children\\n*/\\nWidget.prototype.removeChildDomNodes function() {\\n\\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\\n\\tif(this.domNodes.length > 0) {\\n\\t\\t$tw.utils.each(this.domNodes,function(domNode) {\\n\\t\\t\\tdomNode.parentNode.removeChild(domNode);\\n\\t\\t});\\n\\t\\tthis.domNodes ;\\n\\t} else {\\n\\t\\t// Otherwise, ask the child widgets to delete their DOM nodes\\n\\t\\t$tw.utils.each(this.children,function(childWidget) {\\n\\t\\t\\tchildWidget.removeChildDomNodes();\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nInvoke the action widgets that are descendents of the current widget.\\n*/\\nWidget.prototype.invokeActions function(triggeringWidget,event) {\\n\\tvar handled false;\\n\\t// For each child widget\\n\\tfor(var t0; t\u003Cthis.children.length; t++) {\\n\\t\\tvar child this.childrent,\\n\\t\\t\\tchildIsActionWidget !!child.invokeAction,\\n\\t\\t\\tactionRefreshPolicy child.getVariable(\\\tv-action-refresh-policy\\\); // Default is \\\once\\\\\n\\t\\t// Refresh the child if required\\n\\t\\tif(childIsActionWidget || actionRefreshPolicy \\\always\\\) {\\n\\t\\t\\tchild.refreshSelf();\\n\\t\\t}\\n\\t\\t// Invoke the child if it is an action widget\\n\\t\\tif(childIsActionWidget) {\\n\\t\\t\\tif(child.invokeAction(triggeringWidget,event)) {\\n\\t\\t\\t\\thandled true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Propagate through through the child if it permits it\\n\\t\\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\\n\\t\\t\\thandled true;\\n\\t\\t}\\n\\t}\\n\\treturn handled;\\n};\\n\\n/*\\nInvoke the action widgets defined in a string\\n*/\\nWidget.prototype.invokeActionString function(actions,triggeringWidget,event,variables) {\\n\\tactions actions || \\\\\\;\\n\\tvar parser this.wiki.parseText(\\\text/vnd.tiddlywiki\\\,actions,{\\n\\t\\t\\tparentWidget: this,\\n\\t\\t\\tdocument: this.document\\n\\t\\t}),\\n\\t\\twidgetNode this.wiki.makeWidget(parser,{\\n\\t\\t\\tparentWidget: this,\\n\\t\\t\\tdocument: this.document,\\n\\t\\t\\tvariables: variables\\n\\t\\t});\\n\\tvar container this.document.createElement(\\\div\\\);\\n\\twidgetNode.render(container,null);\\n\\treturn widgetNode.invokeActions(this,event);\\n};\\n\\n/*\\nExecute action tiddlers by tag\\n*/\\nWidget.prototype.invokeActionsByTag function(tag,event,variables) {\\n\\tvar self this;\\n\\t$tw.utils.each(self.wiki.filterTiddlers(\\\allshadows+tiddlerstag\\\ + tag + \\\!hasdraft.of\\\),function(title) {\\n\\t\\tself.invokeActionString(self.wiki.getTiddlerText(title),self,event,variables);\\n\\t});\\n};\\n\\nWidget.prototype.allowActionPropagation function() {\\n\\treturn true;\\n};\\n\\n/*\\nFind child \u003C$data> widgets recursively. The tag name allows aliased versions of the widget to be found too\\n*/\\nWidget.prototype.findChildrenDataWidgets function(children,tag,callback) {\\n\\tvar self this;\\n\\t$tw.utils.each(children,function(child) {\\n\\t\\tif(child.dataWidgetTag tag) {\\n\\t\\t\\tcallback(child);\\n\\t\\t}\\n\\t\\tif(child.children) {\\n\\t\\t\\tself.findChildrenDataWidgets(child.children,tag,callback);\\n\\t\\t}\\n\\t});\\n};\\n\\n/*\\nEvaluate a variable with parameters. This is a static convenience method that attempts to evaluate a variable as a function, returning an array of strings\\n*/\\nWidget.evaluateVariable function(widget,name,options) {\\n\\tvar result;\\n\\tif(widget.getVariableInfo) {\\n\\t\\tvar variableInfo widget.getVariableInfo(name,options);\\n\\t\\tresult variableInfo.resultList || variableInfo.text;\\n\\t} else {\\n\\t\\tresult widget.getVariable(name);\\n\\t}\\n\\treturn result;\\n};\\n\\nexports.widget Widget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/widgets/wikify.js\:{\title\:\$:/core/modules/widgets/wikify.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/wikify.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWidget to wikify text into a variable\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar WikifyWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nWikifyWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nWikifyWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nWikifyWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.wikifyName this.getAttribute(\\\name\\\);\\n\\tthis.wikifyText this.getAttribute(\\\text\\\);\\n\\tthis.wikifyType this.getAttribute(\\\type\\\);\\n\\tthis.wikifyMode this.getAttribute(\\\mode\\\,\\\block\\\);\\n\\tthis.wikifyOutput this.getAttribute(\\\output\\\,\\\text\\\);\\n\\t// Create the parse tree\\n\\tthis.wikifyParser this.wiki.parseText(this.wikifyType,this.wikifyText,{\\n\\t\\t\\tparseAsInline: this.wikifyMode \\\inline\\\\\n\\t\\t});\\n\\t// Create the widget tree \\n\\tthis.wikifyWidgetNode this.wiki.makeWidget(this.wikifyParser,{\\n\\t\\t\\tdocument: $tw.fakeDocument,\\n\\t\\t\\tparentWidget: this\\n\\t\\t});\\n\\t// Render the widget tree to the container\\n\\tthis.wikifyContainer $tw.fakeDocument.createElement(\\\div\\\);\\n\\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\\n\\tthis.wikifyResult this.getResult();\\n\\t// Set context variable\\n\\tthis.setVariable(this.wikifyName,this.wikifyResult);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nReturn the result string\\n*/\\nWikifyWidget.prototype.getResult function() {\\n\\tvar result;\\n\\tswitch(this.wikifyOutput) {\\n\\t\\tcase \\\text\\\:\\n\\t\\t\\tresult this.wikifyContainer.textContent;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\formattedtext\\\:\\n\\t\\t\\tresult this.wikifyContainer.formattedTextContent;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\html\\\:\\n\\t\\t\\tresult this.wikifyContainer.innerHTML;\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\parsetree\\\:\\n\\t\\t\\tresult JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\widgettree\\\:\\n\\t\\t\\tresult JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\\n\\t\\t\\tbreak;\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nReturn a string of the widget tree\\n*/\\nWikifyWidget.prototype.getWidgetTree function() {\\n\\tvar copyNode function(widgetNode,resultNode) {\\n\\t\\t\\tvar type widgetNode.parseTreeNode.type;\\n\\t\\t\\tresultNode.type type;\\n\\t\\t\\tswitch(type) {\\n\\t\\t\\t\\tcase \\\element\\\:\\n\\t\\t\\t\\t\\tresultNode.tag widgetNode.parseTreeNode.tag;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\tcase \\\text\\\:\\n\\t\\t\\t\\t\\tresultNode.text widgetNode.parseTreeNode.text;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\\n\\t\\t\\t\\tresultNode.attributes {};\\n\\t\\t\\t\\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\\n\\t\\t\\t\\t\\tresultNode.attributesattrName widgetNode.getAttribute(attrName);\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t\\tif(Object.keys(widgetNode.children || {}).length > 0) {\\n\\t\\t\\t\\tresultNode.children ;\\n\\t\\t\\t\\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\\n\\t\\t\\t\\t\\tvar node {};\\n\\t\\t\\t\\t\\tresultNode.children.push(node);\\n\\t\\t\\t\\t\\tcopyNode(widgetChildNode,node);\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tresults {};\\n\\tcopyNode(this.wikifyWidgetNode,results);\\n\\treturn results;\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nWikifyWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\t// Refresh ourselves entirely if any of our attributes have changed\\n\\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\t// Refresh the widget tree\\n\\t\\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\\n\\t\\t\\t// Check if there was any change\\n\\t\\t\\tvar result this.getResult();\\n\\t\\t\\tif(result ! this.wikifyResult) {\\n\\t\\t\\t\\t// If so, save the change\\n\\t\\t\\t\\tthis.wikifyResult result;\\n\\t\\t\\t\\tthis.setVariable(this.wikifyName,this.wikifyResult);\\n\\t\\t\\t\\t// Refresh each of our child widgets\\n\\t\\t\\t\\t$tw.utils.each(this.children,function(childWidget) {\\n\\t\\t\\t\\t\\tchildWidget.refreshSelf();\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Just refresh the children\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\n\\t}\\n};\\n\\nexports.wikify WikifyWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/core/modules/wiki-bulkops.js\:{\title\:\$:/core/modules/wiki-bulkops.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/wiki-bulkops.js\\ntype: application/javascript\\nmodule-type: wikimethod\\n\\nBulk tiddler operations such as rename.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\n/*\\nRename a tiddler, and relink any tags or lists that reference it.\\n*/\\nfunction renameTiddler(fromTitle,toTitle,options) {\\n\\tfromTitle (fromTitle || \\\\\\).trim();\\n\\ttoTitle (toTitle || \\\\\\).trim();\\n\\toptions options || {};\\n\\tif(fromTitle && toTitle && fromTitle ! toTitle) {\\n\\t\\t// Rename the tiddler itself\\n\\t\\tvar oldTiddler this.getTiddler(fromTitle),\\n\\t\\t\\tnewTiddler new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\\n\\t\\tnewTiddler $tw.hooks.invokeHook(\\\th-renaming-tiddler\\\,newTiddler,oldTiddler);\\n\\t\\tthis.addTiddler(newTiddler);\\n\\t\\tthis.deleteTiddler(fromTitle);\\n\\t\\t// Rename any tags or lists that reference it\\n\\t\\tthis.relinkTiddler(fromTitle,toTitle,options)\\n\\t}\\n}\\n\\n/*\\nRelink any tags or lists that reference a given tiddler\\n*/\\nfunction relinkTiddler(fromTitle,toTitle,options) {\\n\\tvar self this;\\n\\tfromTitle (fromTitle || \\\\\\).trim();\\n\\ttoTitle (toTitle || \\\\\\).trim();\\n\\toptions options || {};\\n\\tif(fromTitle && toTitle && fromTitle ! toTitle) {\\n\\t\\tthis.each(function(tiddler,title) {\\n\\t\\t\\tvar type tiddler.fields.type || \\\\\\;\\n\\t\\t\\t// Dont touch plugins or JavaScript modules\\n\\t\\t\\tif(!tiddler.fields\\\plugin-type\\\ && type ! \\\application/javascript\\\) {\\n\\t\\t\\t\\tvar tags tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\\n\\t\\t\\t\\t\\tlist tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\\n\\t\\t\\t\\t\\tisModified false,\\n\\t\\t\\t\\t\\tprocessList function(listField) {\\n\\t\\t\\t\\t\\t\\tif(listField && listField.indexOf(fromTitle) ! -1) {\\n\\t\\t\\t\\t\\t\\t\\t// Remove any existing instances of the toTitle\\n\\t\\t\\t\\t\\t\\t\\tvar p listField.indexOf(toTitle);\\n\\t\\t\\t\\t\\t\\t\\twhile(p ! -1) {\\n\\t\\t\\t\\t\\t\\t\\t\\tlistField.splice(p,1);\\n\\t\\t\\t\\t\\t\\t\\t\\tp listField.indexOf(toTitle);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t// Replace the fromTitle with toTitle\\n\\t\\t\\t\\t\\t\\t\\t$tw.utils.each(listField,function (title,index) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif(title fromTitle) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tlistFieldindex toTitle;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tisModified true;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\tif(!options.dontRenameInTags) {\\n\\t\\t\\t\\t\\t// Rename tags\\n\\t\\t\\t\\t\\tprocessList(tags);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(!options.dontRenameInLists) {\\n\\t\\t\\t\\t\\t// Rename lists\\n\\t\\t\\t\\t\\tprocessList(list);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(isModified) {\\n\\t\\t\\t\\t\\tvar newTiddler new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\\n\\t\\t\\t\\t\\tnewTiddler $tw.hooks.invokeHook(\\\th-relinking-tiddler\\\,newTiddler,tiddler);\\n\\t\\t\\t\\t\\tself.addTiddler(newTiddler);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\nexports.renameTiddler renameTiddler;\\nexports.relinkTiddler relinkTiddler;\\n\,\type\:\application/javascript\,\module-type\:\wikimethod\},\$:/core/modules/wiki.js\:{\title\:\$:/core/modules/wiki.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/wiki.js\\ntype: application/javascript\\nmodule-type: wikimethod\\n\\nExtension methods for the $tw.Wiki object\\n\\nAdds the following properties to the wiki object:\\n\\n* `eventListeners` is a hashmap by type of arrays of listener functions\\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\\n\\tmodified: true/false\\n\\tdeleted: true/false\\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar widget require(\\\$:/core/modules/widgets/widget.js\\\);\\n\\nvar USER_NAME_TITLE \\\$:/status/UserName\\\,\\n\\tTIMESTAMP_DISABLE_TITLE \\\$:/config/TimestampDisable\\\;\\n\\n/*\\nAdd available indexers to this wiki\\n*/\\nexports.addIndexersToWiki function() {\\n\\tvar self this;\\n\\t$tw.utils.each($tw.modules.applyMethods(\\\indexer\\\),function(Indexer,name) {\\n\\t\\tself.addIndexer(new Indexer(self),name);\\n\\t});\\n};\\n\\n/*\\nGet the value of a text reference. Text references can have any of these forms:\\n\\t\u003Ctiddlertitle>\\n\\t\u003Ctiddlertitle>!!\u003Cfieldname>\\n\\t!!\u003Cfieldname> - specifies a field of the current tiddlers\\n\\t\u003Ctiddlertitle>##\u003Cindex>\\n*/\\nexports.getTextReference function(textRef,defaultText,currTiddlerTitle) {\\n\\tvar tr $tw.utils.parseTextReference(textRef),\\n\\t\\ttitle tr.title || currTiddlerTitle;\\n\\tif(tr.field) {\\n\\t\\tvar tiddler this.getTiddler(title);\\n\\t\\tif(tr.field \\\title\\\) { // Special case so we can return the title of a non-existent tiddler\\n\\t\\t\\treturn title || defaultText;\\n\\t\\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\\n\\t\\t\\treturn tiddler.getFieldString(tr.field);\\n\\t\\t} else {\\n\\t\\t\\treturn defaultText;\\n\\t\\t}\\n\\t} else if(tr.index) {\\n\\t\\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\\n\\t} else {\\n\\t\\treturn this.getTiddlerText(title,defaultText);\\n\\t}\\n};\\n\\nexports.setTextReference function(textRef,value,currTiddlerTitle) {\\n\\tvar tr $tw.utils.parseTextReference(textRef),\\n\\t\\ttitle tr.title || currTiddlerTitle;\\n\\tthis.setText(title,tr.field,tr.index,value);\\n};\\n\\nexports.setText function(title,field,index,value,options) {\\n\\toptions options || {};\\n\\tvar creationFields options.suppressTimestamp ? {} : this.getCreationFields(),\\n\\t\\tmodificationFields options.suppressTimestamp ? {} : this.getModificationFields();\\n\\t// Check if it is a reference to a tiddler field\\n\\tif(index) {\\n\\t\\tvar data this.getTiddlerData(title,Object.create(null));\\n\\t\\tif(value ! undefined) {\\n\\t\\t\\tdataindex value;\\n\\t\\t} else {\\n\\t\\t\\tdelete dataindex;\\n\\t\\t}\\n\\t\\tthis.setTiddlerData(title,data,{},{suppressTimestamp: options.suppressTimestamp});\\n\\t} else {\\n\\t\\tvar tiddler this.getTiddler(title),\\n\\t\\t\\tfields {title: title};\\n\\t\\tfieldsfield || \\\text\\\ value;\\n\\t\\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\\n\\t}\\n};\\n\\nexports.deleteTextReference function(textRef,currTiddlerTitle) {\\n\\tvar tr $tw.utils.parseTextReference(textRef),\\n\\t\\ttitle,tiddler,fields;\\n\\t// Check if it is a reference to a tiddler\\n\\tif(tr.title && !tr.field) {\\n\\t\\tthis.deleteTiddler(tr.title);\\n\\t// Else check for a field reference\\n\\t} else if(tr.field) {\\n\\t\\ttitle tr.title || currTiddlerTitle;\\n\\t\\ttiddler this.getTiddler(title);\\n\\t\\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\\n\\t\\t\\tfields Object.create(null);\\n\\t\\t\\tfieldstr.field undefined;\\n\\t\\t\\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.addEventListener function(type,listener) {\\n\\tthis.eventListeners this.eventListeners || {};\\n\\tthis.eventListenerstype this.eventListenerstype || ;\\n\\tthis.eventListenerstype.push(listener);\\n};\\n\\nexports.removeEventListener function(type,listener) {\\n\\tvar listeners this.eventListenerstype;\\n\\tif(listeners) {\\n\\t\\tvar p listeners.indexOf(listener);\\n\\t\\tif(p ! -1) {\\n\\t\\t\\tlisteners.splice(p,1);\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.dispatchEvent function(type /*, args */) {\\n\\tvar args Array.prototype.slice.call(arguments,1),\\n\\t\\tlisteners this.eventListenerstype;\\n\\tif(listeners) {\\n\\t\\tfor(var p0; p\u003Clisteners.length; p++) {\\n\\t\\t\\tvar listener listenersp;\\n\\t\\t\\tlistener.apply(listener,args);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\\nThis method should be called after the changes it describes have been made to the wiki.tiddlers array.\\n\\ttitle: Title of tiddler\\n\\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\\n\\t\\ttrue if the tiddler has been deleted\\n\\tisShadow: defaults to false (meaning the change applies to the normal tiddler),\\n\\t\\ttrue if the tiddler being changed is a shadow tiddler\\n*/\\nexports.enqueueTiddlerEvent function(title,isDeleted,isShadow) {\\n\\t// Record the touch in the list of changed tiddlers\\n\\tthis.changedTiddlers this.changedTiddlers || Object.create(null);\\n\\tthis.changedTiddlerstitle this.changedTiddlerstitle || Object.create(null);\\n\\tthis.changedTiddlerstitleisDeleted ? \\\deleted\\\ : \\\modified\\\ true;\\n\\tthis.changedTiddlerstitleisShadow ? \\\shadow\\\ : \\\normal\\\ true;\\n\\t// Increment the change count\\n\\tthis.changeCount this.changeCount || Object.create(null);\\n\\tif($tw.utils.hop(this.changeCount,title)) {\\n\\t\\tthis.changeCounttitle++;\\n\\t} else {\\n\\t\\tthis.changeCounttitle 1;\\n\\t}\\n\\t// Trigger events\\n\\tthis.eventListeners this.eventListeners || {};\\n\\tif(!this.eventsTriggered) {\\n\\t\\tvar self this;\\n\\t\\t$tw.utils.nextTick(function() {\\n\\t\\t\\tvar changes self.changedTiddlers;\\n\\t\\t\\tself.changedTiddlers Object.create(null);\\n\\t\\t\\tself.eventsTriggered false;\\n\\t\\t\\tif($tw.utils.count(changes) > 0) {\\n\\t\\t\\t\\tself.dispatchEvent(\\\change\\\,changes);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.eventsTriggered true;\\n\\t}\\n};\\n\\nexports.getSizeOfTiddlerEventQueue function() {\\n\\treturn $tw.utils.count(this.changedTiddlers);\\n};\\n\\nexports.clearTiddlerEventQueue function() {\\n\\tthis.changedTiddlers Object.create(null);\\n\\tthis.changeCount Object.create(null);\\n};\\n\\nexports.getChangeCount function(title) {\\n\\tthis.changeCount this.changeCount || Object.create(null);\\n\\tif($tw.utils.hop(this.changeCount,title)) {\\n\\t\\treturn this.changeCounttitle;\\n\\t} else {\\n\\t\\treturn 0;\\n\\t}\\n};\\n\\n/*\\nGenerate an unused title from the specified base\\noptions.prefix must be a string\\n*/\\nexports.generateNewTitle function(baseTitle,options) {\\n\\toptions options || {};\\n\\tvar title baseTitle,\\n\\t\\ttemplate options.template || \\\\\\,\\n\\t\\t// test if .startCount is a positive integer. If not set to 0\\n\\t\\tc (parseInt(options.startCount,10) > 0) ? parseInt(options.startCount,10) : 0,\\n\\t\\tprefix (typeof(options.prefix) \\\string\\\) ? options.prefix : \\\ \\\;\\n\\n\\tif (template) {\\n\\t\\t// \\\count\\\ is important to avoid an endless loop in while(...)!!\\n\\t\\ttemplate (/\\\\$count:?(\\\\d+)?\\\\$/i.test(template)) ? template : template + \\\$count$\\\;\\n\\t\\t// .formatTitleString() expects strings as input\\n\\t\\ttitle $tw.utils.formatTitleString(template,{\\\base\\\:baseTitle,\\\separator\\\:prefix,\\\counter\\\:c+\\\\\\});\\n\\t\\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\\n\\t\\t\\ttitle $tw.utils.formatTitleString(template,{\\\base\\\:baseTitle,\\\separator\\\:prefix,\\\counter\\\:(++c)+\\\\\\});\\n\\t\\t}\\n\\t} else {\\n\\t\\tif (c > 0) {\\n\\t\\t\\ttitle baseTitle + prefix + c;\\n\\t\\t}\\n\\t\\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\\n\\t\\t\\ttitle baseTitle + prefix + (++c);\\n\\t\\t}\\n\\t}\\n\\treturn title;\\n};\\n\\nexports.isSystemTiddler function(title) {\\n\\treturn title && title.indexOf(\\\$:/\\\) 0;\\n};\\n\\nexports.isTemporaryTiddler function(title) {\\n\\treturn title && title.indexOf(\\\$:/temp/\\\) 0;\\n};\\n\\nexports.isVolatileTiddler function(title) {\\n\\treturn title && title.indexOf(\\\$:/temp/volatile/\\\) 0;\\n};\\n\\nexports.isImageTiddler function(title) {\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar contentTypeInfo $tw.config.contentTypeInfotiddler.fields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\\\image\\\) ! -1;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\nexports.isBinaryTiddler function(title) {\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar contentTypeInfo $tw.config.contentTypeInfotiddler.fields.type || \\\text/vnd.tiddlywiki\\\;\\n\\t\\treturn !!contentTypeInfo && contentTypeInfo.encoding \\\base64\\\;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n/*\\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\\n*/\\nexports.importTiddler function(tiddler) {\\n\\tvar existingTiddler this.getTiddler(tiddler.fields.title);\\n\\t// Check if were dealing with a plugin\\n\\tif(tiddler && tiddler.hasField(\\\plugin-type\\\) && tiddler.hasField(\\\version\\\) && existingTiddler && existingTiddler.hasField(\\\plugin-type\\\) && existingTiddler.hasField(\\\version\\\)) {\\n\\t\\t// Reject the incoming plugin if it is older\\n\\t\\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t}\\n\\t// Fall through to adding the tiddler\\n\\tthis.addTiddler(tiddler);\\n\\treturn true;\\n};\\n\\n/*\\nReturn a hashmap of the fields that should be set when a tiddler is created\\n*/\\nexports.getCreationFields function() {\\n\\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\\\\\\).toLowerCase() ! \\\yes\\\) {\\n\\t\\tvar fields {\\n\\t\\t\\t\\tcreated: new Date()\\n\\t\\t\\t},\\n\\t\\t\\tcreator this.getTiddlerText(USER_NAME_TITLE);\\n\\t\\tif(creator) {\\n\\t\\t\\tfields.creator creator;\\n\\t\\t}\\n\\t\\treturn fields;\\n\\t} else {\\n\\t\\treturn {};\\n\\t}\\n};\\n\\n/*\\nReturn a hashmap of the fields that should be set when a tiddler is modified\\n*/\\nexports.getModificationFields function() {\\n\\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\\\\\\).toLowerCase() ! \\\yes\\\) {\\n\\t\\tvar fields Object.create(null),\\n\\t\\t\\tmodifier this.getTiddlerText(USER_NAME_TITLE);\\n\\t\\tfields.modified new Date();\\n\\t\\tif(modifier) {\\n\\t\\t\\tfields.modifier modifier;\\n\\t\\t}\\n\\t\\treturn fields;\\n\\t} else {\\n\\t\\treturn {};\\n\\t}\\n};\\n\\n/*\\nReturn a sorted array of tiddler titles. Options include:\\nsortField: field to sort by\\nexcludeTag: tag to exclude\\nincludeSystem: whether to include system tiddlers (defaults to false)\\n*/\\nexports.getTiddlers function(options) {\\n\\toptions options || Object.create(null);\\n\\tvar self this,\\n\\t\\tsortField options.sortField || \\\title\\\,\\n\\t\\ttiddlers , t, titles ;\\n\\tthis.each(function(tiddler,title) {\\n\\t\\tif(options.includeSystem || !self.isSystemTiddler(title)) {\\n\\t\\t\\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\\n\\t\\t\\t\\ttiddlers.push(tiddler);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\ttiddlers.sort(function(a,b) {\\n\\t\\tvar aa a.fieldssortField.toLowerCase() || \\\\\\,\\n\\t\\t\\tbb b.fieldssortField.toLowerCase() || \\\\\\;\\n\\t\\tif(aa \u003C bb) {\\n\\t\\t\\treturn -1;\\n\\t\\t} else {\\n\\t\\t\\tif(aa > bb) {\\n\\t\\t\\t\\treturn 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\tfor(t0; t\u003Ctiddlers.length; t++) {\\n\\t\\ttitles.push(tiddlerst.fields.title);\\n\\t}\\n\\treturn titles;\\n};\\n\\nexports.countTiddlers function(excludeTag) {\\n\\tvar tiddlers this.getTiddlers({excludeTag: excludeTag});\\n\\treturn $tw.utils.count(tiddlers);\\n};\\n\\n/*\\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\\n*/\\nexports.makeTiddlerIterator function(titles) {\\n\\tvar self this;\\n\\tif(!$tw.utils.isArray(titles)) {\\n\\t\\ttitles Object.keys(titles);\\n\\t} else {\\n\\t\\ttitles titles.slice(0);\\n\\t}\\n\\treturn function(callback) {\\n\\t\\ttitles.forEach(function(title) {\\n\\t\\t\\tcallback(self.getTiddler(title),title);\\n\\t\\t});\\n\\t};\\n};\\n\\n/*\\nSort an array of tiddler titles by a specified field\\n\\ttitles: array of titles (sorted in place)\\n\\tsortField: name of field to sort by\\n\\tisDescending: true if the sort should be descending\\n\\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\\n*/\\nexports.sortTiddlers function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\\n\\tvar self this;\\n\\tif(sortField \\\title\\\) {\\n\\t\\tif(!isNumeric && !isAlphaNumeric) {\\n\\t\\t\\tif(isCaseSensitive) {\\n\\t\\t\\t\\tif(isDescending) {\\n\\t\\t\\t\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\t\\t\\t\\treturn b.localeCompare(a);\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\t\\t\\t\\treturn a.localeCompare(b);\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\t\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(isDescending) {\\n\\t\\t\\t\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\t\\t\\t\\treturn b.toLowerCase().localeCompare(a.toLowerCase());\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\t\\t\\t\\treturn a.toLowerCase().localeCompare(b.toLowerCase());\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t}\\t\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\t\\tvar x,y;\\n\\t\\t\\t\\tif(isNumeric) {\\n\\t\\t\\t\\t\\tx Number(a);\\n\\t\\t\\t\\t\\ty Number(b);\\n\\t\\t\\t\\t\\tif(isNaN(x)) {\\n\\t\\t\\t\\t\\t\\tif(isNaN(y)) {\\n\\t\\t\\t\\t\\t\\t\\t// If neither value is a number then fall through to a textual comparison\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\treturn isDescending ? -1 : 1;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tif(isNaN(y)) {\\n\\t\\t\\t\\t\\t\\t\\treturn isDescending ? 1 : -1;\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\treturn isDescending ? y - x : x - y;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(isAlphaNumeric) {\\n\\t\\t\\t\\t\\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \\\base\\\}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \\\base\\\});\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(!isCaseSensitive) {\\n\\t\\t\\t\\t\\ta a.toLowerCase();\\n\\t\\t\\t\\t\\tb b.toLowerCase();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\\n\\t\\t\\t});\\n\\t\\t}\\n\\t} else {\\n\\t\\ttitles.sort(function(a,b) {\\n\\t\\t\\tvar x,y;\\n\\t\\t\\tif(sortField ! \\\title\\\) {\\n\\t\\t\\t\\tvar tiddlerA self.getTiddler(a),\\n\\t\\t\\t\\t\\ttiddlerB self.getTiddler(b);\\n\\t\\t\\t\\tif(tiddlerA) {\\n\\t\\t\\t\\t\\ta tiddlerA.fieldssortField || \\\\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ta \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(tiddlerB) {\\n\\t\\t\\t\\t\\tb tiddlerB.fieldssortField || \\\\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tb \\\\\\;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif(isNumeric) {\\n\\t\\t\\t\\tx Number(a);\\n\\t\\t\\t\\ty Number(b);\\n\\t\\t\\t\\tif(isNaN(x)) {\\n\\t\\t\\t\\t\\tif(isNaN(y)) {\\n\\t\\t\\t\\t\\t\\t// If neither value is a number then fall through to a textual comparison\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\treturn isDescending ? -1 : 1;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tif(isNaN(y)) {\\n\\t\\t\\t\\t\\t\\treturn isDescending ? 1 : -1;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\treturn isDescending ? y - x : x - y;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif(Object.prototype.toString.call(a) \\\object Date\\\ && Object.prototype.toString.call(b) \\\object Date\\\) {\\n\\t\\t\\t\\treturn isDescending ? b - a : a - b;\\n\\t\\t\\t}\\n\\t\\t\\ta String(a);\\n\\t\\t\\tb String(b);\\n\\t\\t\\tif(isAlphaNumeric) {\\n\\t\\t\\t\\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \\\base\\\}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \\\base\\\});\\n\\t\\t\\t}\\n\\t\\t\\tif(!isCaseSensitive) {\\n\\t\\t\\t\\ta a.toLowerCase();\\n\\t\\t\\t\\tb b.toLowerCase();\\n\\t\\t\\t}\\n\\t\\t\\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\\nsortField: field to sort by\\nexcludeTag: tag to exclude\\nincludeSystem: whether to include system tiddlers (defaults to false)\\n*/\\nexports.forEachTiddler function(/* options,callback */) {\\n\\tvar arg 0,\\n\\t\\toptions arguments.length > 2 ? argumentsarg++ : {},\\n\\t\\tcallback argumentsarg++,\\n\\t\\ttitles this.getTiddlers(options),\\n\\t\\tt, tiddler;\\n\\tfor(t0; t\u003Ctitles.length; t++) {\\n\\t\\ttiddler this.getTiddler(titlest);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tcallback.call(this,tiddler.fields.title,tiddler);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nReturn an array of tiddler titles that are directly linked within the given parse tree\\n */\\nexports.extractLinks function(parseTreeRoot) {\\n\\t// Count up the links\\n\\tvar links ,\\n\\t\\tcheckParseTree function(parseTree) {\\n\\t\\t\\tfor(var t0; t\u003CparseTree.length; t++) {\\n\\t\\t\\t\\tvar parseTreeNode parseTreet;\\n\\t\\t\\t\\tif(parseTreeNode.type \\\link\\\ && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type \\\string\\\) {\\n\\t\\t\\t\\t\\tvar value parseTreeNode.attributes.to.value;\\n\\t\\t\\t\\t\\tif(links.indexOf(value) -1) {\\n\\t\\t\\t\\t\\t\\tlinks.push(value);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(parseTreeNode.children) {\\n\\t\\t\\t\\t\\tcheckParseTree(parseTreeNode.children);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\tcheckParseTree(parseTreeRoot);\\n\\treturn links;\\n};\\n\\n/*\\nReturn an array of tiddler titles that are directly linked from the specified tiddler\\n*/\\nexports.getTiddlerLinks function(title) {\\n\\tvar self this;\\n\\t// Well cache the links so they only get computed if the tiddler changes\\n\\treturn this.getCacheForTiddler(title,\\\links\\\,function() {\\n\\t\\t// Parse the tiddler\\n\\t\\tvar parser self.parseTiddler(title);\\n\\t\\tif(parser) {\\n\\t\\t\\treturn self.extractLinks(parser.tree);\\n\\t\\t}\\n\\t\\treturn ;\\n\\t});\\n};\\n\\n/*\\nReturn an array of tiddler titles that link to the specified tiddler\\n*/\\nexports.getTiddlerBacklinks function(targetTitle) {\\n\\tvar self this,\\n\\t\\tbackIndexer this.getIndexer(\\\BackIndexer\\\),\\n\\t\\tbacklinks backIndexer && backIndexer.subIndexers.link.lookup(targetTitle);\\n\\n\\tif(!backlinks) {\\n\\t\\tbacklinks ;\\n\\t\\tthis.forEachTiddler(function(title,tiddler) {\\n\\t\\t\\tvar links self.getTiddlerLinks(title);\\n\\t\\t\\tif(links.indexOf(targetTitle) ! -1) {\\n\\t\\t\\t\\tbacklinks.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn backlinks;\\n};\\n\\n\\n/*\\nReturn an array of tiddler titles that are directly transcluded within the given parse tree. `title` is the tiddler being parsed, we will ignore its self-referential transclusions, only return\\n */\\nexports.extractTranscludes function(parseTreeRoot, title) {\\n\\t// Count up the transcludes\\n\\tvar transcludes ,\\n\\t\\tcheckParseTree function(parseTree, parentNode) {\\n\\t\\t\\tfor(var t0; t\u003CparseTree.length; t++) {\\n\\t\\t\\t\\tvar parseTreeNode parseTreet;\\n\\t\\t\\t\\tif(parseTreeNode.type \\\transclude\\\) {\\n\\t\\t\\t\\t\\tif(parseTreeNode.attributes.$tiddler) {\\n\\t\\t\\t\\t\\t\\tif(parseTreeNode.attributes.$tiddler.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t\\tvar value;\\n\\t\\t\\t\\t\\t\\t\\t// if it is Transclusion with Templates like `{{Index||$:/core/ui/TagTemplate}}`, the `$tiddler` will point to the template. We need to find the actual target tiddler from parent node\\n\\t\\t\\t\\t\\t\\t\\tif(parentNode && parentNode.type \\\tiddler\\\ && parentNode.attributes.tiddler && parentNode.attributes.tiddler.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t\\t\\t// Empty value (like `{{!!field}}`) means self-referential transclusion.\\n\\t\\t\\t\\t\\t\\t\\t\\tvalue parentNode.attributes.tiddler.value || title;\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tvalue parseTreeNode.attributes.$tiddler.value;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} else if(parseTreeNode.attributes.tiddler) {\\n\\t\\t\\t\\t\\t\\tif (parseTreeNode.attributes.tiddler.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t\\t// Old transclude widget usage\\n\\t\\t\\t\\t\\t\\t\\tvalue parseTreeNode.attributes.tiddler.value;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} else if(parseTreeNode.attributes.$field && parseTreeNode.attributes.$field.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t// Empty value (like `\u003C$transclude $fieldcreated/>`) means self-referential transclusion. \\n\\t\\t\\t\\t\\t\\tvalue title;\\n\\t\\t\\t\\t\\t} else if(parseTreeNode.attributes.field && parseTreeNode.attributes.field.type \\\string\\\) {\\n\\t\\t\\t\\t\\t\\t// Old usage with Empty value (like `\u003C$transclude fieldcreated/>`)\\n\\t\\t\\t\\t\\t\\tvalue title;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t// Deduplicate the result.\\n\\t\\t\\t\\t\\tif(value && transcludes.indexOf(value) -1) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.pushTop(transcludes,value);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(parseTreeNode.children) {\\n\\t\\t\\t\\t\\tcheckParseTree(parseTreeNode.children,parseTreeNode);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\tcheckParseTree(parseTreeRoot);\\n\\treturn transcludes;\\n};\\n\\n\\n/*\\nReturn an array of tiddler titles that are transcluded from the specified tiddler\\n*/\\nexports.getTiddlerTranscludes function(title) {\\n\\tvar self this;\\n\\t// Well cache the transcludes so they only get computed if the tiddler changes\\n\\treturn this.getCacheForTiddler(title,\\\transcludes\\\,function() {\\n\\t\\t// Parse the tiddler\\n\\t\\tvar parser self.parseTiddler(title);\\n\\t\\tif(parser) {\\n\\t\\t\\t// this will ignore self-referential transclusions from `title`\\n\\t\\t\\treturn self.extractTranscludes(parser.tree,title);\\n\\t\\t}\\n\\t\\treturn ;\\n\\t});\\n};\\n\\n/*\\nReturn an array of tiddler titles that transclude to the specified tiddler\\n*/\\nexports.getTiddlerBacktranscludes function(targetTitle) {\\n\\tvar self this,\\n\\t\\tbackIndexer this.getIndexer(\\\BackIndexer\\\),\\n\\t\\tbacktranscludes backIndexer && backIndexer.subIndexers.transclude.lookup(targetTitle);\\n\\n\\tif(!backtranscludes) {\\n\\t\\tbacktranscludes ;\\n\\t}\\n\\treturn backtranscludes;\\n};\\n\\n/*\\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\\n*/\\nexports.getMissingTitles function() {\\n\\tvar self this,\\n\\t\\tmissing ;\\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\\n\\tthis.forEachTiddler(function(title,tiddler) {\\n\\t\\tvar links self.getTiddlerLinks(title);\\n\\t\\t$tw.utils.each(links,function(link) {\\n\\t\\t\\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) -1) {\\n\\t\\t\\t\\tmissing.push(link);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n\\treturn missing;\\n};\\n\\nexports.getOrphanTitles function() {\\n\\tvar self this,\\n\\t\\torphans this.getTiddlers();\\n\\tthis.forEachTiddler(function(title,tiddler) {\\n\\t\\tvar links self.getTiddlerLinks(title);\\n\\t\\t$tw.utils.each(links,function(link) {\\n\\t\\t\\tvar p orphans.indexOf(link);\\n\\t\\t\\tif(p ! -1) {\\n\\t\\t\\t\\torphans.splice(p,1);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t});\\n\\treturn orphans; // Todo\\n};\\n\\n/*\\nRetrieves a list of the tiddler titles that are tagged with a given tag\\n*/\\nexports.getTiddlersWithTag function(tag) {\\n\\t// Try to use the indexer\\n\\tvar self this,\\n\\t\\ttagIndexer this.getIndexer(\\\TagIndexer\\\),\\n\\t\\tresults tagIndexer && tagIndexer.subIndexers3.lookup(tag);\\n\\tif(!results) {\\n\\t\\t// If not available, perform a manual scan\\n\\t\\tresults this.getGlobalCache(\\\taglist-\\\ + tag,function() {\\n\\t\\t\\tvar tagmap self.getTagMap();\\n\\t\\t\\treturn self.sortByList(tagmaptag,tag);\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\\n/*\\nGet a hashmap by tag of arrays of tiddler titles\\n*/\\nexports.getTagMap function() {\\n\\tvar self this;\\n\\treturn this.getGlobalCache(\\\tagmap\\\,function() {\\n\\t\\tvar tags Object.create(null),\\n\\t\\t\\tstoreTags function(tagArray,title) {\\n\\t\\t\\t\\tif(tagArray) {\\n\\t\\t\\t\\t\\tfor(var index0; index\u003CtagArray.length; index++) {\\n\\t\\t\\t\\t\\t\\tvar tag tagArrayindex;\\n\\t\\t\\t\\t\\t\\tif($tw.utils.hop(tags,tag)) {\\n\\t\\t\\t\\t\\t\\t\\ttagstag.push(title);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\ttagstag title;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\ttitle, tiddler;\\n\\t\\t// Collect up all the tags\\n\\t\\tself.eachShadow(function(tiddler,title) {\\n\\t\\t\\tif(!self.tiddlerExists(title)) {\\n\\t\\t\\t\\ttiddler self.getTiddler(title);\\n\\t\\t\\t\\tstoreTags(tiddler.fields.tags,title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tself.each(function(tiddler,title) {\\n\\t\\t\\tstoreTags(tiddler.fields.tags,title);\\n\\t\\t});\\n\\t\\treturn tags;\\n\\t});\\n};\\n\\n/*\\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\\n*/\\nexports.findListingsOfTiddler function(targetTitle,fieldName) {\\n\\tfieldName fieldName || \\\list\\\;\\n\\tvar wiki this;\\n\\tvar listings this.getGlobalCache(\\\listings-\\\ + fieldName,function() {\\n\\t\\tvar listings Object.create(null);\\n\\t\\twiki.each(function(tiddler,title) {\\n\\t\\t\\tvar list $tw.utils.parseStringArray(tiddler.fieldsfieldName);\\n\\t\\t\\tif(list) {\\n\\t\\t\\t\\tfor(var i 0; i \u003C list.length; i++) {\\n\\t\\t\\t\\t\\tvar listItem listi,\\n\\t\\t\\t\\t\\t\\tlisting listingslistItem || ;\\n\\t\\t\\t\\t\\tif (listing.indexOf(title) -1) {\\n\\t\\t\\t\\t\\t\\tlisting.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tlistingslistItem listing;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn listings;\\n\\t});\\n\\treturn listingstargetTitle || ;\\n};\\n\\n/*\\nSorts an array of tiddler titles according to an ordered list\\n*/\\nexports.sortByList function(array,listTitle) {\\n\\tvar self this,\\n\\t\\treplacedTitles Object.create(null);\\n\\t// Given a title, this function will place it in the correct location\\n\\t// within titles.\\n\\tfunction moveItemInList(title) {\\n\\t\\tif(!$tw.utils.hop(replacedTitles, title)) {\\n\\t\\t\\treplacedTitlestitle true;\\n\\t\\t\\tvar newPos -1,\\n\\t\\t\\t\\ttiddler self.getTiddler(title);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\tvar beforeTitle tiddler.fields\\\list-before\\\,\\n\\t\\t\\t\\t\\tafterTitle tiddler.fields\\\list-after\\\;\\n\\t\\t\\t\\tif(beforeTitle \\\\\\) {\\n\\t\\t\\t\\t\\tnewPos 0;\\n\\t\\t\\t\\t} else if(afterTitle \\\\\\) {\\n\\t\\t\\t\\t\\tnewPos titles.length;\\n\\t\\t\\t\\t} else if(beforeTitle) {\\n\\t\\t\\t\\t\\t// if this title is placed relative\\n\\t\\t\\t\\t\\t// to another title, make sure that\\n\\t\\t\\t\\t\\t// title is placed before we place\\n\\t\\t\\t\\t\\t// this one.\\n\\t\\t\\t\\t\\tmoveItemInList(beforeTitle);\\n\\t\\t\\t\\t\\tnewPos titles.indexOf(beforeTitle);\\n\\t\\t\\t\\t} else if(afterTitle) {\\n\\t\\t\\t\\t\\t// Same deal\\n\\t\\t\\t\\t\\tmoveItemInList(afterTitle);\\n\\t\\t\\t\\t\\tnewPos titles.indexOf(afterTitle);\\n\\t\\t\\t\\t\\tif(newPos > 0) {\\n\\t\\t\\t\\t\\t\\t++newPos;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// If a new position is specified, lets move it\\n\\t\\t\\t\\tif (newPos ! -1) {\\n\\t\\t\\t\\t\\t// get its current Pos, and make sure\\n\\t\\t\\t\\t\\t// sure that its _actually_ in the list\\n\\t\\t\\t\\t\\t// and that it would _actually_ move\\n\\t\\t\\t\\t\\t// (#4275) We dont bother calling\\n\\t\\t\\t\\t\\t// indexOf unless we have a new\\n\\t\\t\\t\\t\\t// position to work with\\n\\t\\t\\t\\t\\tvar currPos titles.indexOf(title);\\n\\t\\t\\t\\t\\tif(currPos > 0 && newPos ! currPos) {\\n\\t\\t\\t\\t\\t\\t// move it!\\n\\t\\t\\t\\t\\t\\ttitles.splice(currPos,1);\\n\\t\\t\\t\\t\\t\\tif(newPos > currPos) {\\n\\t\\t\\t\\t\\t\\t\\tnewPos--;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\ttitles.splice(newPos,0,title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tvar list this.getTiddlerList(listTitle);\\n\\tif(!array || array.length 0) {\\n\\t\\treturn ;\\n\\t} else {\\n\\t\\tvar titles , t, title;\\n\\t\\t// First place any entries that are present in the list\\n\\t\\tfor(t0; t\u003Clist.length; t++) {\\n\\t\\t\\ttitle listt;\\n\\t\\t\\tif(array.indexOf(title) ! -1) {\\n\\t\\t\\t\\ttitles.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Then place any remaining entries\\n\\t\\tfor(t0; t\u003Carray.length; t++) {\\n\\t\\t\\ttitle arrayt;\\n\\t\\t\\tif(list.indexOf(title) -1) {\\n\\t\\t\\t\\ttitles.push(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Finally obey the list-before and list-after fields of each tiddler in turn\\n\\t\\tvar sortedTitles titles.slice(0);\\n\\t\\tfor(t0; t\u003CsortedTitles.length; t++) {\\n\\t\\t\\ttitle sortedTitlest;\\n\\t\\t\\tmoveItemInList(title);\\n\\t\\t}\\n\\t\\treturn titles;\\n\\t}\\n};\\n\\nexports.getSubTiddler function(title,subTiddlerTitle) {\\n\\tvar bundleInfo this.getPluginInfo(title) || this.getTiddlerDataCached(title);\\n\\tif(bundleInfo && bundleInfo.tiddlers) {\\n\\t\\tvar subTiddler bundleInfo.tiddlerssubTiddlerTitle;\\n\\t\\tif(subTiddler) {\\n\\t\\t\\treturn new $tw.Tiddler(subTiddler);\\n\\t\\t}\\n\\t}\\n\\treturn null;\\n};\\n\\n/*\\nRetrieve a tiddler as a JSON string of the fields\\n*/\\nexports.getTiddlerAsJson function(title) {\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\tvar fields Object.create(null);\\n\\t\\t$tw.utils.each(tiddler.fields,function(value,name) {\\n\\t\\t\\tfieldsname tiddler.getFieldString(name);\\n\\t\\t});\\n\\t\\treturn JSON.stringify(fields);\\n\\t} else {\\n\\t\\treturn JSON.stringify({title: title});\\n\\t}\\n};\\n\\nexports.getTiddlersAsJson function(filter,spaces) {\\n\\tvar tiddlers this.filterTiddlers(filter),\\n\\t\\tspaces (spaces undefined) ? $tw.config.preferences.jsonSpaces : spaces,\\n\\t\\tdata ;\\n\\tfor(var t0;t\u003Ctiddlers.length; t++) {\\n\\t\\tvar tiddler this.getTiddler(tiddlerst);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tvar fields new Object();\\n\\t\\t\\tfor(var field in tiddler.fields) {\\n\\t\\t\\t\\tfieldsfield tiddler.getFieldString(field);\\n\\t\\t\\t}\\n\\t\\t\\tdata.push(fields);\\n\\t\\t}\\n\\t}\\n\\treturn JSON.stringify(data,null,spaces);\\n};\\n\\n/*\\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\\n\\napplication/json: the tiddler JSON is parsed into an object\\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\\n\\nOther types currently just return null.\\n\\ntitleOrTiddler: string tiddler title or a tiddler object\\ndefaultData: default data to be returned if the tiddler is missing or doesnt contain data\\n\\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\\n*/\\nexports.getTiddlerDataCached function(titleOrTiddler,defaultData) {\\n\\tvar self this,\\n\\t\\ttiddler titleOrTiddler;\\n\\tif(!(tiddler instanceof $tw.Tiddler)) {\\n\\t\\ttiddler this.getTiddler(tiddler);\\n\\t}\\n\\tif(tiddler) {\\n\\t\\treturn this.getCacheForTiddler(tiddler.fields.title,\\\data\\\,function() {\\n\\t\\t\\t// Return the frozen value\\n\\t\\t\\tvar value self.getTiddlerData(tiddler.fields.title,undefined);\\n\\t\\t\\t$tw.utils.deepFreeze(value);\\n\\t\\t\\treturn value;\\n\\t\\t}) || defaultData;\\n\\t} else {\\n\\t\\treturn defaultData;\\n\\t}\\n};\\n\\n/*\\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\\n*/\\nexports.getTiddlerData function(titleOrTiddler,defaultData) {\\n\\tvar tiddler titleOrTiddler,\\n\\t\\tdata;\\n\\tif(!(tiddler instanceof $tw.Tiddler)) {\\n\\t\\ttiddler this.getTiddler(tiddler);\\n\\t}\\n\\tif(tiddler && tiddler.fields.text) {\\n\\t\\tswitch(tiddler.fields.type) {\\n\\t\\t\\tcase \\\application/json\\\:\\n\\t\\t\\t\\t// JSON tiddler\\n\\t\\t\\t\\treturn $tw.utils.parseJSONSafe(tiddler.fields.text,defaultData);\\n\\t\\t\\tcase \\\application/x-tiddler-dictionary\\\:\\n\\t\\t\\t\\treturn $tw.utils.parseFields(tiddler.fields.text);\\n\\t\\t}\\n\\t}\\n\\treturn defaultData;\\n};\\n\\n/*\\nExtract an indexed field from within a data tiddler\\n*/\\nexports.extractTiddlerDataItem function(titleOrTiddler,index,defaultText) {\\n\\tvar data this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\\n\\t\\ttext;\\n\\tif(data && $tw.utils.hop(data,index)) {\\n\\t\\ttext dataindex;\\n\\t}\\n\\tif(typeof text \\\string\\\ || typeof text \\\number\\\) {\\n\\t\\treturn text.toString();\\n\\t} else {\\n\\t\\treturn defaultText;\\n\\t}\\n};\\n\\n/*\\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddlers type to \\\application/json\\\ and setting the text to the JSON text of the data.\\ntitle: title of tiddler\\ndata: object that can be serialised to JSON\\nfields: optional hashmap of additional tiddler fields to be set\\noptions: optional hashmap of options including:\\n\\tsuppressTimestamp: if true, dont set the creation/modification timestamps\\n*/\\nexports.setTiddlerData function(title,data,fields,options) {\\n\\toptions options || {};\\n\\tvar existingTiddler this.getTiddler(title),\\n\\t\\tcreationFields options.suppressTimestamp ? {} : this.getCreationFields(),\\n\\t\\tmodificationFields options.suppressTimestamp ? {} : this.getModificationFields(),\\n\\t\\tnewFields {\\n\\t\\t\\ttitle: title\\n\\t\\t};\\n\\tif(existingTiddler && existingTiddler.fields.type \\\application/x-tiddler-dictionary\\\) {\\n\\t\\tnewFields.text $tw.utils.makeTiddlerDictionary(data);\\n\\t} else {\\n\\t\\tnewFields.type \\\application/json\\\;\\n\\t\\tnewFields.text JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\\n\\t}\\n\\tthis.addTiddler(new $tw.Tiddler(creationFields,existingTiddler,fields,newFields,modificationFields));\\n};\\n\\n/*\\nReturn the content of a tiddler as an array containing each line\\n*/\\nexports.getTiddlerList function(title,field,index) {\\n\\tif(index) {\\n\\t\\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\\\\\\));\\n\\t}\\n\\tfield field || \\\list\\\;\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(tiddler) {\\n\\t\\treturn ($tw.utils.parseStringArray(tiddler.fieldsfield) || ).slice(0);\\n\\t}\\n\\treturn ;\\n};\\n\\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\\nexports.getGlobalCache function(cacheName,initializer) {\\n\\tthis.globalCache this.globalCache || Object.create(null);\\n\\tif($tw.utils.hop(this.globalCache,cacheName)) {\\n\\t\\treturn this.globalCachecacheName;\\n\\t} else {\\n\\t\\tthis.globalCachecacheName initializer();\\n\\t\\treturn this.globalCachecacheName;\\n\\t}\\n};\\n\\nexports.clearGlobalCache function() {\\n\\tthis.globalCache Object.create(null);\\n};\\n\\n// Return the named cache object for a tiddler. If the cache doesnt exist then the initializer function is invoked to create it\\nexports.getCacheForTiddler function(title,cacheName,initializer) {\\n\\tthis.caches this.caches || Object.create(null);\\n\\tvar caches this.cachestitle;\\n\\tif(caches && cachescacheName ! undefined) {\\n\\t\\treturn cachescacheName;\\n\\t} else {\\n\\t\\tif(!caches) {\\n\\t\\t\\tcaches Object.create(null);\\n\\t\\t\\tthis.cachestitle caches;\\n\\t\\t}\\n\\t\\tcachescacheName initializer();\\n\\t\\treturn cachescacheName;\\n\\t}\\n};\\n\\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\\nexports.clearCache function(title) {\\n\\tif(title) {\\n\\t\\tthis.caches this.caches || Object.create(null);\\n\\t\\tif($tw.utils.hop(this.caches,title)) {\\n\\t\\t\\tdelete this.cachestitle;\\n\\t\\t}\\n\\t} else {\\n\\t\\tthis.caches Object.create(null);\\n\\t}\\n};\\n\\nexports.initParsers function(moduleType) {\\n\\t// Install the parser modules\\n\\t$tw.Wiki.parsers {};\\n\\tvar self this;\\n\\t$tw.modules.forEachModuleOfType(\\\parser\\\,function(title,module) {\\n\\t\\tfor(var f in module) {\\n\\t\\t\\tif($tw.utils.hop(module,f)) {\\n\\t\\t\\t\\t$tw.Wiki.parsersf modulef; // Store the parser class\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\t// Use the generic binary parser for any binary types not registered so far\\n\\tif($tw.Wiki.parsers\\\application/octet-stream\\\) {\\n\\t\\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\\n\\t\\t\\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfotype.encoding \\\base64\\\) {\\n\\t\\t\\t\\t$tw.Wiki.parserstype $tw.Wiki.parsers\\\application/octet-stream\\\;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n};\\n\\n/*\\nParse a block of text of a specified MIME type\\n\\ttype: content type of text to be parsed\\n\\ttext: text\\n\\toptions: see below\\nOptions include:\\n\\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\\n\\t_canonical_uri: optional string of the canonical URI of this content\\n*/\\nexports.parseText function(type,text,options) {\\n\\ttext text || \\\\\\;\\n\\toptions options || {};\\n\\t// Select a parser\\n\\tvar Parser $tw.Wiki.parserstype;\\n\\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\\n\\t\\tParser $tw.Wiki.parsers$tw.utils.getFileExtensionInfo(type).type;\\n\\t}\\n\\tif(!Parser) {\\n\\t\\tParser $tw.Wiki.parsersoptions.defaultType || \\\text/vnd.tiddlywiki\\\;\\n\\t}\\n\\tif(!Parser) {\\n\\t\\treturn null;\\n\\t}\\n\\t// Return the parser instance\\n\\treturn new Parser(type,text,{\\n\\t\\tparseAsInline: options.parseAsInline,\\n\\t\\twiki: this,\\n\\t\\t_canonical_uri: options._canonical_uri,\\n\\t\\tconfigTrimWhiteSpace: options.configTrimWhiteSpace\\n\\t});\\n};\\n\\n/*\\nParse a tiddler according to its MIME type\\n*/\\nexports.parseTiddler function(title,options) {\\n\\toptions $tw.utils.extend({},options);\\n\\tvar cacheType options.parseAsInline ? \\\inlineParseTree\\\ : \\\blockParseTree\\\,\\n\\t\\ttiddler this.getTiddler(title),\\n\\t\\tself this;\\n\\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\\n\\t\\t\\tif(tiddler.hasField(\\\_canonical_uri\\\)) {\\n\\t\\t\\t\\toptions._canonical_uri tiddler.fields._canonical_uri;\\n\\t\\t\\t}\\n\\t\\t\\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\\n\\t\\t}) : null;\\n};\\n\\nexports.parseTextReference function(title,field,index,options) {\\n\\tvar tiddler,\\n\\t\\ttext,\\n\\t\\tparserInfo;\\n\\tif(!options.subTiddler) {\\n\\t\\ttiddler this.getTiddler(title);\\n\\t\\tif(field \\\text\\\ || (!field && !index)) {\\n\\t\\t\\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\\n\\t\\t\\treturn this.parseTiddler(title,options);\\n\\t\\t}\\n\\t} \\n\\tparserInfo this.getTextReferenceParserInfo(title,field,index,options);\\n\\tif(parserInfo.sourceText ! null) {\\n\\t\\treturn this.parseText(parserInfo.parserType,parserInfo.sourceText,options);\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\nexports.getTextReferenceParserInfo function(title,field,index,options) {\\n\\tvar defaultType options.defaultType || \\\text/vnd.tiddlywiki\\\,\\n\\t\\ttiddler,\\n\\t\\tparserInfo {\\n\\t\\t\\tsourceText : null,\\n\\t\\t\\tparserType : defaultType\\n\\t\\t};\\n\\tif(options.subTiddler) {\\n\\t\\ttiddler this.getSubTiddler(title,options.subTiddler);\\n\\t} else {\\n\\t\\ttiddler this.getTiddler(title);\\n\\t}\\n\\tif(field \\\text\\\ || (!field && !index)) {\\n\\t\\tif(tiddler && tiddler.fields) {\\n\\t\\t\\tparserInfo.sourceText tiddler.fields.text || \\\\\\;\\n\\t\\t\\tif(tiddler.fields.type) {\\n\\t\\t\\t\\tparserInfo.parserType tiddler.fields.type;\\n\\t\\t\\t}\\n\\t\\t\\tparserInfo._canonical_uri tiddler.fields._canonical_uri;\\n\\t\\t}\\n\\t} else if(field) {\\n\\t\\tif(field \\\title\\\) {\\n\\t\\t\\tparserInfo.sourceText title;\\n\\t\\t} else if(tiddler && tiddler.fields) {\\n\\t\\t\\tparserInfo.sourceText tiddler.hasField(field) ? tiddler.fieldsfield.toString() : null;\\n\\t\\t}\\n\\t} else if(index) {\\n\\t\\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\\n\\t\\tparserInfo.sourceText this.extractTiddlerDataItem(tiddler,index,null);\\n\\t}\\n\\tif(parserInfo.sourceText null) {\\n\\t\\tparserInfo.parserType null;\\n\\t}\\n\\treturn parserInfo;\\n}\\n\\n/*\\nParse a block of text of a specified MIME type\\n\\ttext: text on which to perform substitutions\\n\\twidget\\n\\toptions: see below\\nOptions include:\\n\\tsubstitutions: an optional array of substitutions\\n*/\\nexports.getSubstitutedText function(text,widget,options) {\\n\\toptions options || {};\\n\\ttext text || \\\\\\;\\n\\tvar self this,\\n\\t\\tsubstitutions options.substitutions || ,\\n\\t\\toutput;\\n\\t// Evaluate embedded filters and substitute with first result\\n\\toutput text.replace(/\\\\$\\\\{(\\\\S\\\\s+?)\\\\}\\\\$/g, function(match,filter) {\\n\\t\\treturn self.filterTiddlers(filter,widget)0 || \\\\\\;\\n\\t});\\n\\t// Process any substitutions provided in options\\n\\t$tw.utils.each(substitutions,function(substitute) {\\n\\t\\toutput $tw.utils.replaceString(output,new RegExp(\\\\\\\\\\\$\\\ + $tw.utils.escapeRegExp(substitute.name) + \\\\\\\\\\\$\\\,\\\mg\\\),substitute.value);\\n\\t});\\n\\t// Substitute any variable references with their values\\n\\treturn output.replace(/\\\\$\\\\((.+?)\\\\)\\\\$/g, function(match,varname) {\\n\\t\\treturn widget.getVariable(varname,{defaultValue: \\\\\\})\\n\\t});\\n};\\n\\n/*\\nMake a widget tree for a parse tree\\nparser: parser object\\noptions: see below\\nOptions include:\\ndocument: optional document to use\\nvariables: hashmap of variables to set\\nparentWidget: optional parent widget for the root node\\n*/\\nexports.makeWidget function(parser,options) {\\n\\toptions options || {};\\n\\tvar widgetNode {\\n\\t\\t\\ttype: \\\widget\\\,\\n\\t\\t\\tchildren: \\n\\t\\t},\\n\\t\\tcurrWidgetNode widgetNode;\\n\\t// Create let variable widget for variables\\n\\tif($tw.utils.count(options.variables) > 0) {\\n\\t\\tvar letVariableWidget {\\n\\t\\t\\ttype: \\\let\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t},\\n\\t\\t\\tchildren: \\n\\t\\t};\\n\\t\\t$tw.utils.each(options.variables,function(value,name) {\\n\\t\\t\\t$tw.utils.addAttributeToParseTreeNode(letVariableWidget,name,\\\\\\ + value);\\n\\t\\t});\\n\\t\\tcurrWidgetNode.children letVariableWidget;\\n\\t\\tcurrWidgetNode letVariableWidget;\\n\\t}\\n\\t// Add in the supplied parse tree nodes\\n\\tcurrWidgetNode.children parser ? parser.tree : ;\\n\\t// Create the widget\\n\\treturn new widget.widget(widgetNode,{\\n\\t\\twiki: this,\\n\\t\\tdocument: options.document || $tw.fakeDocument,\\n\\t\\tparentWidget: options.parentWidget\\n\\t});\\n};\\n\\n/*\\nMake a widget tree for transclusion\\ntitle: target tiddler title\\noptions: as for wiki.makeWidget() plus:\\noptions.field: optional field to transclude (defaults to \\\text\\\)\\noptions.mode: transclusion mode \\\inline\\\ or \\\block\\\\\noptions.recursionMarker : optional flag to set a recursion marker, defaults to \\\yes\\\\\noptions.children: optional array of children for the transclude widget\\noptions.importVariables: optional importvariables filter string for macros to be included\\noptions.importPageMacros: optional boolean; if true, equivalent to passing \\\$:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of\\\ to options.importVariables\\n*/\\nexports.makeTranscludeWidget function(title,options) {\\n\\toptions options || {};\\n\\tvar parseTreeDiv {tree: {\\n\\t\\t\\ttype: \\\element\\\,\\n\\t\\t\\ttag: \\\div\\\,\\n\\t\\t\\tchildren: }},\\n\\t\\tparseTreeImportVariables {\\n\\t\\t\\ttype: \\\importvariables\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tfilter: {\\n\\t\\t\\t\\t\\tname: \\\filter\\\,\\n\\t\\t\\t\\t\\ttype: \\\string\\\\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\tisBlock: false,\\n\\t\\t\\tchildren: },\\n\\t\\tparseTreeTransclude {\\n\\t\\t\\ttype: \\\transclude\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\trecursionMarker: {\\n\\t\\t\\t\\t\\tname: \\\recursionMarker\\\,\\n\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\tvalue: options.recursionMarker || \\\yes\\\\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\ttiddler: {\\n\\t\\t\\t\\t\\tname: \\\tiddler\\\,\\n\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\tvalue: title\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\tisBlock: !options.parseAsInline};\\n\\tif(options.importVariables || options.importPageMacros) {\\n\\t\\tif(options.importVariables) {\\n\\t\\t\\tparseTreeImportVariables.attributes.filter.value options.importVariables;\\n\\t\\t} else if(options.importPageMacros) {\\n\\t\\t\\tparseTreeImportVariables.attributes.filter.value this.getTiddlerText(\\\$:/core/config/GlobalImportFilter\\\);\\n\\t\\t}\\n\\t\\tparseTreeDiv.tree0.children.push(parseTreeImportVariables);\\n\\t\\tparseTreeImportVariables.children.push(parseTreeTransclude);\\n\\t} else {\\n\\t\\tparseTreeDiv.tree0.children.push(parseTreeTransclude);\\n\\t}\\n\\tif(options.field) {\\n\\t\\tparseTreeTransclude.attributes.field {type: \\\string\\\, value: options.field};\\n\\t}\\n\\tif(options.mode) {\\n\\t\\tparseTreeTransclude.attributes.mode {type: \\\string\\\, value: options.mode};\\n\\t}\\n\\tif(options.children) {\\n\\t\\tparseTreeTransclude.children options.children;\\n\\t}\\n\\treturn this.makeWidget(parseTreeDiv,options);\\n};\\n\\n/*\\nParse text in a specified format and render it into another format\\n\\toutputType: content type for the output\\n\\ttextType: content type of the input text\\n\\ttext: input text\\n\\toptions: see below\\nOptions include:\\nvariables: hashmap of variables to set\\nparentWidget: optional parent widget for the root node\\n*/\\nexports.renderText function(outputType,textType,text,options) {\\n\\toptions options || {};\\n\\tvar parser this.parseText(textType,text,options),\\n\\t\\twidgetNode this.makeWidget(parser,options);\\n\\tvar container $tw.fakeDocument.createElement(\\\div\\\);\\n\\twidgetNode.render(container,null);\\n\\treturn outputType \\\text/html\\\ ? container.innerHTML : container.textContent;\\n};\\n\\n/*\\nParse text from a tiddler and render it into another format\\n\\toutputType: content type for the output\\n\\ttitle: title of the tiddler to be rendered\\n\\toptions: see below\\nOptions include:\\nvariables: hashmap of variables to set\\nparentWidget: optional parent widget for the root node\\n*/\\nexports.renderTiddler function(outputType,title,options) {\\n\\toptions options || {};\\n\\tvar parser this.parseTiddler(title,options),\\n\\t\\twidgetNode this.makeWidget(parser,options);\\n\\tvar container $tw.fakeDocument.createElement(\\\div\\\);\\n\\twidgetNode.render(container,null);\\n\\treturn outputType \\\text/html\\\ ? container.innerHTML : (outputType \\\text/plain-formatted\\\ ? container.formattedTextContent : container.textContent);\\n};\\n\\n/*\\nReturn an array of tiddler titles that match a search string\\n\\ttext: The text string to search for\\n\\toptions: see below\\nOptions available:\\n\\tsource: an iterator function for the source tiddlers, called source(iterator),\\n\\t\\twhere iterator is called as iterator(tiddler,title)\\n\\texclude: An array of tiddler titles to exclude from the search\\n\\tinvert: If true returns tiddlers that do not contain the specified string\\n\\tcaseSensitive: If true forces a case sensitive search\\n\\tfield: If specified, restricts the search to the specified field, or an array of field names\\n\\tanchored: If true, forces all but regexp searches to be anchored to the start of text\\n\\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\\n\\n\\tThe search mode is determined by the first of these boolean flags to be true\\n\\t\\tliteral: searches for literal string\\n\\t\\twhitespace: same as literal except runs of whitespace are treated as a single space\\n\\t\\tregexp: treats the search term as a regular expression\\n\\t\\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, \\n\\t\\t\\tregardless of adjacency or ordering\\n\\t\\tsome: treats search string as a list of tokens, and matches if at least ONE token is found\\n*/\\nexports.search function(text,options) {\\n\\toptions options || {};\\n\\tvar self this,\\n\\t\\tt,\\n\\t\\tregExpStr\\\\\\,\\n\\t\\tinvert !!options.invert;\\n\\t// Convert the search string into a regexp for each term\\n\\tvar terms, searchTermsRegExps,\\n\\t\\tflags options.caseSensitive ? \\\\\\ : \\\i\\\,\\n\\t\\tanchor options.anchored ? \\\^\\\ : \\\\\\;\\n\\tif(options.literal) {\\n\\t\\tif(text.length 0) {\\n\\t\\t\\tsearchTermsRegExps null;\\n\\t\\t} else {\\n\\t\\t\\tsearchTermsRegExps new RegExp(\\\(\\\ + anchor + $tw.utils.escapeRegExp(text) + \\\)\\\,flags);\\n\\t\\t}\\n\\t} else if(options.whitespace) {\\n\\t\\tterms ;\\n\\t\\t$tw.utils.each(text.split(/\\\\s+/g),function(term) {\\n\\t\\t\\tif(term) {\\n\\t\\t\\t\\tterms.push($tw.utils.escapeRegExp(term));\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tsearchTermsRegExps new RegExp(\\\(\\\ + anchor + terms.join(\\\\\\\\\\\s+\\\) + \\\)\\\,flags);\\n\\t} else if(options.regexp) {\\n\\t\\ttry {\\n\\t\\t\\tsearchTermsRegExps new RegExp(\\\(\\\ + text + \\\)\\\,flags);\\n\\t\\t} catch(e) {\\n\\t\\t\\tsearchTermsRegExps null;\\n\\t\\t\\tconsole.log(\\\Regexp error parsing /(\\\ + text + \\\)/\\\ + flags + \\\: \\\,e);\\n\\t\\t}\\n\\t} else if(options.some) {\\n\\t\\tterms text.trim().split(/^\\\\S\\\\xA0+/);\\n\\t\\tif(terms.length 1 && terms0 \\\\\\) {\\n\\t\\t\\tsearchTermsRegExps null;\\n\\t\\t} else {\\n\\t\\t\\tsearchTermsRegExps ;\\n\\t\\t\\tfor(t0; t\u003Cterms.length; t++) {\\n\\t\\t\\t\\tregExpStr + (t0) ? anchor + $tw.utils.escapeRegExp(termst) : \\\|\\\ + anchor + $tw.utils.escapeRegExp(termst);\\n\\t\\t\\t}\\n\\t\\t\\tsearchTermsRegExps.push(new RegExp(\\\(\\\ + regExpStr + \\\)\\\,flags));\\n\\t\\t}\\n\\t} else { // default: words\\n\\t\\tterms text.split(/^\\\\S\\\\xA0+/);\\n\\t\\tif(terms.length 1 && terms0 \\\\\\) {\\n\\t\\t\\tsearchTermsRegExps null;\\n\\t\\t} else {\\n\\t\\t\\tsearchTermsRegExps ;\\n\\t\\t\\tfor(t0; t\u003Cterms.length; t++) {\\n\\t\\t\\t\\tsearchTermsRegExps.push(new RegExp(\\\(\\\ + anchor + $tw.utils.escapeRegExp(termst) + \\\)\\\,flags));\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n// Accumulate the array of fields to be searched or excluded from the search\\n\\tvar fields ;\\n\\tif(options.field) {\\n\\t\\tif($tw.utils.isArray(options.field)) {\\n\\t\\t\\t$tw.utils.each(options.field,function(fieldName) {\\n\\t\\t\\t\\tif(fieldName) {\\n\\t\\t\\t\\t\\tfields.push(fieldName);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tfields.push(options.field);\\n\\t\\t}\\n\\t}\\n\\t// Use default fields if none specified and were not excluding fields (excluding fields with an empty field array is the same as searching all fields)\\n\\tif(fields.length 0 && !options.excludeField) {\\n\\t\\tfields.push(\\\title\\\);\\n\\t\\tfields.push(\\\tags\\\);\\n\\t\\tfields.push(\\\text\\\);\\n\\t}\\n\\t// Function to check a given tiddler for the search term\\n\\tvar searchTiddler function(title) {\\n\\t\\tif(!searchTermsRegExps) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t\\tvar notYetFound searchTermsRegExps.slice();\\n\\n\\t\\tvar tiddler self.getTiddler(title);\\n\\t\\tif(!tiddler) {\\n\\t\\t\\ttiddler new $tw.Tiddler({title: title, text: \\\\\\, type: \\\text/vnd.tiddlywiki\\\});\\n\\t\\t}\\n\\t\\tvar contentTypeInfo $tw.config.contentTypeInfotiddler.fields.type || $tw.config.contentTypeInfo\\\text/vnd.tiddlywiki\\\,\\n\\t\\t\\tsearchFields;\\n\\t\\t// Get the list of fields were searching\\n\\t\\tif(options.excludeField) {\\n\\t\\t\\tsearchFields Object.keys(tiddler.fields);\\n\\t\\t\\t$tw.utils.each(fields,function(fieldName) {\\n\\t\\t\\t\\tvar p searchFields.indexOf(fieldName);\\n\\t\\t\\t\\tif(p ! -1) {\\n\\t\\t\\t\\t\\tsearchFields.splice(p,1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\tsearchFields fields;\\n\\t\\t}\\n\\t\\tfor(var fieldIndex0; notYetFound.length>0 && fieldIndex\u003CsearchFields.length; fieldIndex++) {\\n\\t\\t\\t// Dont search the text field if the content type is binary\\n\\t\\t\\tvar fieldName searchFieldsfieldIndex;\\n\\t\\t\\tif(fieldName \\\text\\\ && contentTypeInfo.encoding ! \\\utf8\\\) {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tvar str tiddler.fieldsfieldName,\\n\\t\\t\\t\\tt;\\n\\t\\t\\tif(str) {\\n\\t\\t\\t\\tif($tw.utils.isArray(str)) {\\n\\t\\t\\t\\t\\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesnt match at least one field array entry\\n\\t\\t\\t\\t\\tfor(var s0; s\u003Cstr.length; s++) {\\n\\t\\t\\t\\t\\t\\tfor(t0; t\u003CnotYetFound.length;) {\\n\\t\\t\\t\\t\\t\\t\\tif(notYetFoundt.test(strs)) {\\n\\t\\t\\t\\t\\t\\t\\t\\tnotYetFound.splice(t, 1);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tt++;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// If the field isnt an array, force it to a string and test each regexp against it and fail if any do not match\\n\\t\\t\\t\\t\\tstr tiddler.getFieldString(fieldName);\\n\\t\\t\\t\\t\\tfor(t0; t\u003CnotYetFound.length;) {\\n\\t\\t\\t\\t\\t\\tif(notYetFoundt.test(str)) {\\n\\t\\t\\t\\t\\t\\t\\tnotYetFound.splice(t, 1);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tt++;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\t\\treturn notYetFound.length 0;\\n\\t};\\n\\t// Loop through all the tiddlers doing the search\\n\\tvar results ,\\n\\t\\tsource options.source || this.each;\\n\\tsource(function(tiddler,title) {\\n\\t\\tif(searchTiddler(title) ! invert) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t});\\n\\t// Remove any of the results we have to exclude\\n\\tif(options.exclude) {\\n\\t\\tfor(t0; t\u003Coptions.exclude.length; t++) {\\n\\t\\t\\tvar p results.indexOf(options.excludet);\\n\\t\\t\\tif(p ! -1) {\\n\\t\\t\\t\\tresults.splice(p,1);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\n/*\\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\\n*/\\nexports.getTiddlerText function(title,defaultText) {\\n\\tvar tiddler this.getTiddler(title);\\n\\t// Return undefined if the tiddler isnt found\\n\\tif(!tiddler) {\\n\\t\\treturn defaultText;\\n\\t}\\n\\tif(!tiddler.hasField(\\\_is_skinny\\\)) {\\n\\t\\t// Just return the text if weve got it\\n\\t\\treturn tiddler.fields.text || \\\\\\;\\n\\t} else {\\n\\t\\t// Tell any listeners about the need to lazily load this tiddler\\n\\t\\tthis.dispatchEvent(\\\lazyLoad\\\,title);\\n\\t\\t// Indicate that the text is being loaded\\n\\t\\treturn null;\\n\\t}\\n};\\n\\n/*\\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\\n*/\\nexports.checkTiddlerText function(title,targetText,options) {\\n\\toptions options || {};\\n\\tvar text this.getTiddlerText(title,\\\\\\);\\n\\tif(!options.noTrim) {\\n\\t\\ttext text.trim();\\n\\t}\\n\\tif(!options.caseSensitive) {\\n\\t\\ttext text.toLowerCase();\\n\\t\\ttargetText targetText.toLowerCase();\\n\\t}\\n\\treturn text targetText;\\n}\\n\\n/*\\nExecute an action string without an associated context widget\\n*/\\nexports.invokeActionString function(actions,event,variables,options) {\\n\\tvar widget this.makeWidget(null,{parentWidget: options.parentWidget});\\n\\twidget.invokeActionString(actions,null,event,variables);\\n};\\n\\n/*\\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once theyre all read\\n*/\\nexports.readFiles function(files,options) {\\n\\tvar callback;\\n\\tif(typeof options \\\function\\\) {\\n\\t\\tcallback options;\\n\\t\\toptions {};\\n\\t} else {\\n\\t\\tcallback options.callback;\\n\\t}\\n\\tvar result ,\\n\\t\\toutstanding files.length,\\n\\t\\treadFileCallback function(tiddlerFieldsArray) {\\n\\t\\t\\tresult.push.apply(result,tiddlerFieldsArray);\\n\\t\\t\\tif(--outstanding 0) {\\n\\t\\t\\t\\tcallback(result);\\n\\t\\t\\t}\\n\\t\\t};\\n\\tfor(var f0; f\u003Cfiles.length; f++) {\\n\\t\\tthis.readFile(filesf,$tw.utils.extend({},options,{callback: readFileCallback}));\\n\\t}\\n\\treturn files.length;\\n};\\n\\n/*\\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\\n*/\\nexports.readFile function(file,options) {\\n\\tvar callback;\\n\\tif(typeof options \\\function\\\) {\\n\\t\\tcallback options;\\n\\t\\toptions {};\\n\\t} else {\\n\\t\\tcallback options.callback;\\n\\t}\\n\\t// Get the type, falling back to the filename extension\\n\\tvar self this,\\n\\t\\ttype file.type;\\n\\tif(type \\\\\\ || !type) {\\n\\t\\tvar dotPos file.name.lastIndexOf(\\\.\\\);\\n\\t\\tif(dotPos ! -1) {\\n\\t\\t\\tvar fileExtensionInfo $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\\n\\t\\t\\tif(fileExtensionInfo) {\\n\\t\\t\\t\\ttype fileExtensionInfo.type;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// Figure out if were reading a binary file\\n\\tvar contentTypeInfo $tw.config.contentTypeInfotype,\\n\\t\\tisBinary contentTypeInfo ? contentTypeInfo.encoding \\\base64\\\ : false;\\n\\t// Log some debugging information\\n\\tif($tw.log.IMPORT) {\\n\\t\\tconsole.log(\\\Importing file \\\ + file.name + \\\, type: \\\ + type + \\\, isBinary: \\\ + isBinary);\\n\\t}\\n\\t// Give the hook a chance to process the drag\\n\\tif($tw.hooks.invokeHook(\\\th-importing-file\\\,{\\n\\t\\tfile: file,\\n\\t\\ttype: type,\\n\\t\\tisBinary: isBinary,\\n\\t\\tcallback: callback\\n\\t}) ! true) {\\n\\t\\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\\n\\t}\\n};\\n\\n/*\\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\\n*/\\nexports.readFileContent function(file,type,isBinary,deserializer,callback) {\\n\\tvar self this;\\n\\t// Create the FileReader\\n\\tvar reader new FileReader();\\n\\t// Onload\\n\\treader.onload function(event) {\\n\\t\\tvar text event.target.result,\\n\\t\\t\\ttiddlerFields {title: file.name || \\\Untitled\\\};\\n\\t\\tif(isBinary) {\\n\\t\\t\\tvar commaPos text.indexOf(\\\,\\\);\\n\\t\\t\\tif(commaPos ! -1) {\\n\\t\\t\\t\\ttext text.substr(commaPos + 1);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t// Check whether this is an encrypted TiddlyWiki file\\n\\t\\tvar encryptedJson $tw.utils.extractEncryptedStoreArea(text);\\n\\t\\tif(encryptedJson) {\\n\\t\\t\\t// If so, attempt to decrypt it with the current password\\n\\t\\t\\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\\n\\t\\t\\t\\tcallback(tiddlers);\\n\\t\\t\\t});\\n\\t\\t} else {\\n\\t\\t\\t// Otherwise, just try to deserialise any tiddlers in the file\\n\\t\\t\\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\\n\\t\\t}\\n\\t};\\n\\t// Kick off the read\\n\\tif(isBinary) {\\n\\t\\treader.readAsDataURL(file);\\n\\t} else {\\n\\t\\treader.readAsText(file);\\n\\t}\\n};\\n\\n/*\\nFind any existing draft of a specified tiddler\\n*/\\nexports.findDraft function(targetTitle) {\\n\\tvar draftTitle undefined;\\n\\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\\n\\t\\tif(tiddler.fields\\\draft.title\\\ && tiddler.fields\\\draft.of\\\ targetTitle) {\\n\\t\\t\\tdraftTitle title;\\n\\t\\t}\\n\\t});\\n\\treturn draftTitle;\\n}\\n\\n/*\\nCheck whether the specified draft tiddler has been modified.\\nIf the original tiddler doesnt exist, create a vanilla tiddler variable,\\nto check if additional fields have been added.\\n*/\\nexports.isDraftModified function(title) {\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(!tiddler.isDraft()) {\\n\\t\\treturn false;\\n\\t}\\n\\tvar ignoredFields \\\created\\\, \\\modified\\\, \\\title\\\, \\\draft.title\\\, \\\draft.of\\\,\\n\\t\\torigTiddler this.getTiddler(tiddler.fields\\\draft.of\\\) || new $tw.Tiddler({text:\\\\\\, tags:}),\\n\\t\\ttitleModified tiddler.fields\\\draft.title\\\ ! tiddler.fields\\\draft.of\\\;\\n\\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\\n};\\n\\n/*\\nAdd a new record to the top of the history stack\\ntitle: a title string or an array of title strings\\nfromPageRect: page coordinates of the origin of the navigation\\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\\n*/\\nexports.addToHistory function(title,fromPageRect,historyTitle) {\\n\\tvar story new $tw.Story({wiki: this, historyTitle: historyTitle});\\n\\tstory.addToHistory(title,fromPageRect);\\n\\tconsole.log(\\\$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!\\\)\\n};\\n\\n/*\\nAdd a new tiddler to the story river\\ntitle: a title string or an array of title strings\\nfromTitle: the title of the tiddler from which the navigation originated\\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\\noptions: see story.js\\n*/\\nexports.addToStory function(title,fromTitle,storyTitle,options) {\\n\\tvar story new $tw.Story({wiki: this, storyTitle: storyTitle});\\n\\tstory.addToStory(title,fromTitle,options);\\n\\tconsole.log(\\\$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!\\\)\\n};\\n\\n/*\\nGenerate a title for the draft of a given tiddler\\n*/\\nexports.generateDraftTitle function(title) {\\n\\tvar c 0,\\n\\t\\tdraftTitle,\\n\\t\\tusername this.getTiddlerText(\\\$:/status/UserName\\\),\\n\\t\\tattribution username ? \\\ by \\\ + username : \\\\\\;\\n\\tdo {\\n\\t\\tdraftTitle \\\Draft \\\ + (c ? (c + 1) + \\\ \\\ : \\\\\\) + \\\of \\\ + title + \\\\\\ + attribution;\\n\\t\\tc++;\\n\\t} while(this.tiddlerExists(draftTitle));\\n\\treturn draftTitle;\\n};\\n\\n/*\\nInvoke the available upgrader modules\\ntitles: array of tiddler titles to be processed\\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\\nReturns a hashmap of messages keyed by tiddler title.\\n*/\\nexports.invokeUpgraders function(titles,tiddlers) {\\n\\t// Collect up the available upgrader modules\\n\\tvar self this;\\n\\tif(!this.upgraderModules) {\\n\\t\\tthis.upgraderModules ;\\n\\t\\t$tw.modules.forEachModuleOfType(\\\upgrader\\\,function(title,module) {\\n\\t\\t\\tif(module.upgrade) {\\n\\t\\t\\t\\tself.upgraderModules.push(module);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\t// Invoke each upgrader in turn\\n\\tvar messages {};\\n\\tfor(var t0; t\u003Cthis.upgraderModules.length; t++) {\\n\\t\\tvar upgrader this.upgraderModulest,\\n\\t\\t\\tupgraderMessages upgrader.upgrade(this,titles,tiddlers);\\n\\t\\t$tw.utils.extend(messages,upgraderMessages);\\n\\t}\\n\\treturn messages;\\n};\\n\\n// Determine whether a plugin by title is dynamically loadable\\nexports.doesPluginRequireReload function(title) {\\n\\tvar tiddler this.getTiddler(title);\\n\\tif(tiddler && tiddler.fields.type \\\application/json\\\ && tiddler.fields\\\plugin-type\\\) {\\n\\t\\tif(tiddler.fields\\\plugin-type\\\ \\\import\\\) {\\n\\t\\t\\t// The import plugin never requires reloading\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\t}\\n\\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\\n};\\n\\n// Determine whether a plugin info structure is dynamically loadable\\nexports.doesPluginInfoRequireReload function(pluginInfo) {\\n\\tif(pluginInfo) {\\n\\t\\tvar foundModule false;\\n\\t\\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\\n\\t\\t\\tif(tiddler.type \\\application/javascript\\\ && $tw.utils.hop(tiddler,\\\module-type\\\)) {\\n\\t\\t\\t\\tfoundModule true;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\treturn foundModule;\\n\\t} else {\\n\\t\\treturn null;\\n\\t}\\n};\\n\\nexports.slugify function(title,options) {\\n\\tvar tiddler this.getTiddler(title),\\n\\t\\tslug;\\n\\tif(tiddler && tiddler.fields.slug) {\\n\\t\\tslug tiddler.fields.slug;\\n\\t} else {\\n\\t\\tslug $tw.utils.transliterate(title.toString().toLowerCase()) // Replace diacritics with basic lowercase ASCII\\n\\t\\t\\t.replace(/\\\\s+/g,\\\-\\\) // Replace spaces with -\\n\\t\\t\\t.replace(/^\\\\w\\\\-\\\\.+/g,\\\\\\) // Remove all non-word chars except dash and dot\\n\\t\\t\\t.replace(/\\\\-\\\\-+/g,\\\-\\\) // Replace multiple - with single -\\n\\t\\t\\t.replace(/^-+/,\\\\\\) // Trim - from start of text\\n\\t\\t\\t.replace(/-+$/,\\\\\\); // Trim - from end of text\\n\\t}\\n\\t// If the resulting slug is blank (eg because the title is just punctuation characters)\\n\\tif(!slug) {\\n\\t\\t// ...then just use the character codes of the title\\n\\t\\tvar result ;\\n\\t\\t$tw.utils.each(title.split(\\\\\\),function(char) {\\n\\t\\t\\tresult.push(char.charCodeAt(0).toString());\\n\\t\\t});\\n\\t\\tslug result.join(\\\-\\\);\\n\\t}\\n\\treturn slug;\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikimethod\},\$:/palettes/Blanca\:{\title\:\$:/palettes/Blanca\,\name\:\Blanca\,\color-scheme\:\light\,\description\:\A clean white palette to let you focus\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #3aafaf\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #00d900\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333333\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #ffffff\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #6387f1\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #aaaaaa\\nsidebar-foreground-shadow: #ffffff\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #aaaaaa\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #444444\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour primary>>\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-stable: #008000\\nstability-experimental: #c07c00\\nstability-deprecated: #ff0000\\nstability-legacy: #0000ff\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffd5aa\\ntag-foreground: #000000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #eeeeee\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: \u003C\u003Ccolour tiddler-info-background>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #ff9900\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #cccccc\\nvery-muted-foreground: #888888\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/Blue\:{\title\:\$:/palettes/Blue\,\name\:\Blue\,\color-scheme\:\light\,\description\:\A blue theme\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #fff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: \u003C\u003Ccolour foreground>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333353\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #ddddff\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #5778d8\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #ffffff\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #444444\\nsidebar-tiddler-link-foreground: #5959c0\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: #ccccdd\\ntab-border-selected: #ccccdd\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #eeeeff\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #666666\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #ffffff\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #ffffff\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #5959c0\\ntoolbar-new-button: #5eb95e\\ntoolbar-options-button: rgb(128, 88, 165)\\ntoolbar-save-button: #0e90d2\\ntoolbar-info-button: #0e90d2\\ntoolbar-edit-button: rgb(243, 123, 29)\\ntoolbar-close-button: #dd514c\\ntoolbar-delete-button: #dd514c\\ntoolbar-cancel-button: rgb(243, 123, 29)\\ntoolbar-done-button: #5eb95e\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\},\$:/palettes/Muted\:{\title\:\$:/palettes/Muted\,\name\:\Muted\,\color-scheme\:\light\,\description\:\Bright tiddlers on a muted background\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333333\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #bbb\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #6f6f70\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #29a6ee\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #c2c1c2\\nsidebar-foreground-shadow: rgba(255,255,255,0)\\nsidebar-foreground: #d3d2d4\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #6f6f70\\nsidebar-tab-background: #666667\\nsidebar-tab-border-selected: #999\\nsidebar-tab-border: #515151\\nsidebar-tab-divider: #999\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: #999\\nsidebar-tiddler-link-foreground-hover: #444444\\nsidebar-tiddler-link-foreground: #d1d0d2\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #d8d8d8\\ntab-border-selected: #d8d8d8\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #d5ad34\\ntag-foreground: #ffffff\\ntestcase-accent-level-1: #b1b3e3\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #182955\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\},\$:/palettes/ContrastDark\:{\title\:\$:/palettes/ContrastDark\,\name\:\Contrast (Dark)\,\color-scheme\:\dark\,\description\:\High contrast and unambiguous (dark version)\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ff0000\\nalert-border: \u003C\u003Ccolour background>>\\nalert-highlight: \u003C\u003Ccolour foreground>>\\nalert-muted-foreground: #880000\\nbackground: #000000\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background: \u003C\u003Ccolour background>>\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\nbutton-border: \u003C\u003Ccolour foreground>>\\ncode-background: \u003C\u003Ccolour background>>\\ncode-border: \u003C\u003Ccolour foreground>>\\ncode-foreground: \u003C\u003Ccolour foreground>>\\ndirty-indicator: #ff0000\\ndownload-background: #48ff48\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #868686\\ndropdown-tab-background: #515151\\ndropzone-background: #1aff1a\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #5353ff\\nexternal-link-foreground: #9595ff\\nfootnote-target-background: #4c4c4c\\nforeground: #ffffff\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: \u003C\u003Ccolour foreground>>\\nmessage-border: \u003C\u003Ccolour background>>\\nmessage-foreground: \u003C\u003Ccolour background>>\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour foreground>>\\nmodal-footer-background: \u003C\u003Ccolour background>>\\nmodal-footer-border: \u003C\u003Ccolour foreground>>\\nmodal-header-border: \u003C\u003Ccolour foreground>>\\nmuted-foreground: \u003C\u003Ccolour foreground>>\\nnotification-background: \u003C\u003Ccolour background>>\\nnotification-border: \u003C\u003Ccolour foreground>>\\npage-background: \u003C\u003Ccolour background>>\\npre-background: \u003C\u003Ccolour background>>\\npre-border: \u003C\u003Ccolour foreground>>\\nprimary: #8a8aff\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #ffff00\\nsidebar-controls-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-foreground-shadow: rgba(0,0,0, 0)\\nsidebar-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-tab-background-selected: \u003C\u003Ccolour background>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour foreground>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour foreground>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour primary>>\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-stable: #00f400\\nstability-experimental: #ffaf1c\\nstability-deprecated: #ff2b2b\\nstability-legacy: #ceceff\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour foreground>>\\ntab-border-selected: \u003C\u003Ccolour foreground>>\\ntab-border: \u003C\u003Ccolour foreground>>\\ntab-divider: \u003C\u003Ccolour foreground>>\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: \u003C\u003Ccolour background>>\\ntable-border: #dddddd\\ntable-footer-background: #444444\\ntable-header-background: #444444\\ntag-background: #ffffff\\ntag-foreground: #000000\\ntestcase-accent-level-1: #144a8c\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour foreground>>\\ntiddler-controls-foreground-hover: #ddd\\ntiddler-controls-foreground-selected: #ae0000\\ntiddler-controls-foreground: \u003C\u003Ccolour foreground>>\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: \u003C\u003Ccolour foreground>>\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: \u003C\u003Ccolour background>>\\ntiddler-editor-fields-odd: \u003C\u003Ccolour background>>\\ntiddler-info-background: \u003C\u003Ccolour background>>\\ntiddler-info-border: \u003C\u003Ccolour foreground>>\\ntiddler-info-tab-background: \u003C\u003Ccolour background>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour foreground>>\\ntiddler-title-foreground: \u003C\u003Ccolour foreground>>\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: \u003C\u003Ccolour foreground>>\\nvery-muted-foreground: #888888\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/ContrastLight\:{\title\:\$:/palettes/ContrastLight\,\name\:\Contrast (Light)\,\color-scheme\:\light\,\description\:\High contrast and unambiguous (light version)\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ff4a4a\\nalert-border: \u003C\u003Ccolour background>>\\nalert-highlight: \u003C\u003Ccolour foreground>>\\nalert-muted-foreground: #800\\nbackground: #fff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background: \u003C\u003Ccolour background>>\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\nbutton-border: \u003C\u003Ccolour foreground>>\\ncode-background: \u003C\u003Ccolour background>>\\ncode-border: \u003C\u003Ccolour foreground>>\\ncode-foreground: \u003C\u003Ccolour foreground>>\\ndirty-indicator: #f00\\ndownload-background: #008200\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: \u003C\u003Ccolour background>>\\ndropdown-tab-background: \u003C\u003Ccolour foreground>>\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #00a\\nexternal-link-foreground: #00e\\nfootnote-target-background: #e5e5e5\\nforeground: #000\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: \u003C\u003Ccolour foreground>>\\nmessage-border: \u003C\u003Ccolour background>>\\nmessage-foreground: \u003C\u003Ccolour background>>\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour foreground>>\\nmodal-footer-background: \u003C\u003Ccolour background>>\\nmodal-footer-border: \u003C\u003Ccolour foreground>>\\nmodal-header-border: \u003C\u003Ccolour foreground>>\\nmuted-foreground: \u003C\u003Ccolour foreground>>\\nnotification-background: \u003C\u003Ccolour background>>\\nnotification-border: \u003C\u003Ccolour foreground>>\\npage-background: \u003C\u003Ccolour background>>\\npre-background: \u003C\u003Ccolour background>>\\npre-border: \u003C\u003Ccolour foreground>>\\nprimary: #0000ff\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #606060\\nsidebar-controls-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-foreground-shadow: #000000\\nsidebar-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-tab-background-selected: \u003C\u003Ccolour background>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour foreground>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour foreground>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour primary>>\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-deprecated: #ff0000\\nstability-experimental: #b37400\\nstability-legacy: #000075\\nstability-stable: #008000\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour foreground>>\\ntab-border-selected: \u003C\u003Ccolour foreground>>\\ntab-border: \u003C\u003Ccolour foreground>>\\ntab-divider: \u003C\u003Ccolour foreground>>\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: \u003C\u003Ccolour background>>\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #000\\ntag-foreground: #fff\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour foreground>>\\ntiddler-controls-foreground-hover: #ddd\\ntiddler-controls-foreground-selected: #c5abf3\\ntiddler-controls-foreground: \u003C\u003Ccolour foreground>>\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: \u003C\u003Ccolour foreground>>\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: \u003C\u003Ccolour background>>\\ntiddler-editor-fields-odd: \u003C\u003Ccolour background>>\\ntiddler-info-background: \u003C\u003Ccolour background>>\\ntiddler-info-border: \u003C\u003Ccolour foreground>>\\ntiddler-info-tab-background: \u003C\u003Ccolour background>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour foreground>>\\ntiddler-title-foreground: \u003C\u003Ccolour foreground>>\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \u003C\u003Ccolour foreground>>\\nvery-muted-foreground: #888888\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/CupertinoDark\:{\title\:\$:/palettes/CupertinoDark\,\tags\:\$:/tags/Palette\,\color-scheme\:\dark\,\name\:\Cupertino Dark\,\description\:\A macOS inspired dark palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ff4b42\\nalert-border: #950700\\nalert-highlight: #FFD60A\\nalert-muted-foreground: #323234\\nbackground: #282828\\nblockquote-bar: #8d8d8d\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\ncode-background: \u003C\u003Ccolour pre-background>>\\ncode-border: \u003C\u003Ccolour pre-border>>\\ncode-foreground: #c7c7c7\\ndirty-indicator: #FF453A\\ndownload-background: \u003C\u003Ccolour primary>>\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour tiddler-info-background>>\\ndropdown-border: \u003C\u003Ccolour dropdown-background>>\\ndropdown-tab-background-selected: #3F638B\\ndropdown-tab-background: #707070\\ndropzone-background: #30D158\\nexternal-link-background-hover: transparent\\nexternal-link-background-visited: transparent\\nexternal-link-background: transparent\\nexternal-link-foreground-hover: #9511d5\\nexternal-link-foreground-visited: #BF5AF2\\nexternal-link-foreground: #32D74B\\nfootnote-target-background: #747474\\nforeground: #FFFFFF\\nhighlight-background: #ffff78\\nhighlight-foreground: #000000\\nmenubar-background: #464646\\nmenubar-foreground: #ffffff\\nmessage-background: \u003C\u003Ccolour background>>\\nmessage-border: \u003C\u003Ccolour very-muted-foreground>>\\nmessage-foreground: rgba(255, 255, 255, 0.54)\\nmodal-backdrop: \u003C\u003Ccolour page-background>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour very-muted-foreground>>\\nmodal-footer-background: \u003C\u003Ccolour background>>\\nmodal-footer-border: \u003C\u003Ccolour background>>\\nmodal-header-border: \u003C\u003Ccolour very-muted-foreground>>\\nmuted-foreground: #98989D\\nnotification-background: \u003C\u003Ccolour dropdown-background>>\\nnotification-border: \u003C\u003Ccolour dropdown-background>>\\npage-background: #323232\\npre-background: #464646\\npre-border: transparent\\nprimary: #0A84FF\\nselect-tag-background: \u003C\u003Ccolour background>>\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #FF9F0A\\nsidebar-controls-foreground: #8E8E93\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: rgba(255, 255, 255, 0.54)\\nsidebar-muted-foreground-hover: #acacac\\nsidebar-muted-foreground: #787878\\nsidebar-tab-background-selected: #3F638B\\nsidebar-tab-background: \u003C\u003Ccolour background>>\\nsidebar-tab-border-selected: #313131\\nsidebar-tab-border: #404040\\nsidebar-tab-divider: #282828\\nsidebar-tab-foreground-selected: #d2d2d2\\nsidebar-tab-foreground: #d2d2d2\\nsidebar-tiddler-link-foreground-hover: #535353\\nsidebar-tiddler-link-foreground: #949494\\nsite-title-foreground: #ffffff\\nstability-stable: #009f00\\nstability-experimental: #c07c00\\nstability-deprecated: #ff0000\\nstability-legacy: #6c6cff\\nstatic-alert-foreground: #B4B4B4\\ntab-background-selected: #3F638B\\ntab-background: \u003C\u003Ccolour page-background>>\\ntab-border-selected: \u003C\u003Ccolour page-background>>\\ntab-border: #4a4a4a\\ntab-divider: \u003C\u003Ccolour page-background>>\\ntab-foreground-selected: #ffffff\\ntab-foreground: #adadad\\ntable-border: #464646\\ntable-footer-background: #7f7f7f\\ntable-header-background: \u003C\u003Ccolour table-border>>\\ntag-background: #48484A\\ntag-foreground: #323232\\ntestcase-accent-level-1: #345173\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: transparent\\ntiddler-controls-foreground-hover: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground: #48484A\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: \\ntiddler-editor-border: #444444\\ntiddler-editor-fields-even: #1f1f1f\\ntiddler-editor-fields-odd: #464646\\ntiddler-info-background: #1E1E1E\\ntiddler-info-border: #1E1E1E\\ntiddler-info-tab-background: #3F638B\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour muted-foreground>>\\ntiddler-title-foreground: #FFFFFF\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #5f5f5f\\nvery-muted-foreground: #3f3f3f\\nselection-background: #3F638B\\nselection-foreground: #ffffff\\nwikilist-background: \u003C\u003Ccolour page-background>>\\nwikilist-button-background: #3F638B\\nwikilist-button-foreground: \u003C\u003Ccolour foreground>>\\nwikilist-button-open: #32D74B\\nwikilist-button-open-hover: #32D74B\\nwikilist-button-reveal: #0A84FF\\nwikilist-button-reveal-hover: #0A84FF\\nwikilist-button-remove: #FF453A\\nwikilist-button-remove-hover: #FF453A\\nwikilist-droplink-dragover: #32D74B\\nwikilist-item: \u003C\u003Ccolour background>>\\nwikilist-toolbar-background: \u003C\u003Ccolour background>>\\nwikilist-title: \u003C\u003Ccolour foreground>>\\nwikilist-title-svg: \u003C\u003Ccolour foreground>>\\nwikilist-toolbar-foreground: \u003C\u003Ccolour foreground>>\\nwikilist-url: \u003C\u003Ccolour muted-foreground>>\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/DarkPhotos\:{\title\:\$:/palettes/DarkPhotos\,\created\:\20150402111612188\,\description\:\Good with dark photo backgrounds\,\modified\:\20150402112344080\,\name\:\DarkPhotos\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\color-scheme\:\light\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background: \\nbutton-foreground: \\nbutton-border: \\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #30b830\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333333\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #ddd\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #336438\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #5778d8\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #a6a6ff\\nsidebar-controls-foreground: #eeeeee\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: #eeeeee\\nsidebar-muted-foreground-hover: #999999\\nsidebar-muted-foreground: #eeeeee\\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\\nsidebar-tab-background: #e0e0e0\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: #e4e4e4\\nsidebar-tab-foreground-selected: #ddddff\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #aaaaff\\nsidebar-tiddler-link-foreground: #ddddff\\nsite-title-foreground: #ffffff\\nstability-stable: #008000\\nstability-experimental: #c07c00\\nstability-deprecated: #ff0000\\nstability-legacy: #0000ff\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #d8d8d8\\ntab-border-selected: #d8d8d8\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ec6\\ntag-foreground: #ffffff\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #6a6aff\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #182955\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\nnetwork-activity-foreground: #11ff23\},\$:/palettes/DesertSand\:{\title\:\$:/palettes/DesertSand\,\tags\:\$:/tags/Palette\,\color-scheme\:\light\,\name\:\Desert Sand\,\description\:\A desert sand palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #E9E0C7\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\ncode-background: #F3EDDF\\ncode-border: #C3BAA1\\ncode-foreground: #ab3250\\ndiff-delete-background: #bd8b8b\\ndiff-delete-foreground: \u003C\u003Ccolour foreground>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: #91c093\\ndiff-insert-foreground: \u003C\u003Ccolour foreground>>\\ndiff-invisible-background: \\ndiff-invisible-foreground: #d3d2cb\\ndirty-indicator: #ad3434\\ndownload-background: #5eae62\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #E9E0C7\\ndropdown-tab-background: #BAB29C\\ndropzone-background: #00c600\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: #7474ba\\nexternal-link-foreground-visited: #313163\\nexternal-link-foreground: #555592\\nforeground: #2D2A23\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmenubar-background: #CDC2A6\\nmenubar-foreground: #5A5446\\nmessage-background: #ECE5CF\\nmessage-border: #D6CBAA\\nmessage-foreground: #5f6e7d\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #8A8885\\nmodal-footer-background: #CDC2A6\\nmodal-footer-border: #9D998E\\nmodal-header-border: #9D998E\\nmuted-foreground: #9D998E\\nnotification-background: #F0E9D7\\nnotification-border: #939189\\npage-background: #e0d3af\\npre-background: #D6CBAA\\npre-border: #CDC2A6\\nprimary: #5B6F55\\nselection-background: #9D947B\\nselection-foreground: \u003C\u003Ccolour foreground>>\\nselect-tag-background: #F0E9D7\\nselect-tag-foreground: #2D2A23\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #2D2A23\\nsidebar-controls-foreground: #867F69\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: #867F69\\nsidebar-muted-foreground-hover: #706A58\\nsidebar-muted-foreground: #aba081\\nsidebar-tab-background-selected: #e0d3af\\nsidebar-tab-background: #A6A193\\nsidebar-tab-border-selected: #C3BAA1\\nsidebar-tab-border: #C3BAA1\\nsidebar-tab-divider: #CDC2A6\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: #2D2A23\\nsidebar-tiddler-link-foreground-hover: #433F35\\nsidebar-tiddler-link-foreground: #706A58\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-deprecated: #dc322f\\nstability-experimental: #b58900\\nstability-legacy: #268bd2\\nstability-stable: #859900\\nstatic-alert-foreground: #A6A193\\ntab-background-selected: #E9E0C7\\ntab-background: #A6A193\\ntab-border-selected: #C3BAA1\\ntab-border: #C3BAA1\\ntab-divider: #CDC2A6\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #2D2A23\\ntable-border: #9D998E\\ntable-footer-background: #8A8885\\ntable-header-background: #B0AA98\\ntag-background: #706A58\\ntag-foreground: #E3D7B7\\ntestcase-accent-level-1: #b3adc9\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #9D947B\\ntiddler-controls-foreground-selected: #706A58\\ntiddler-controls-foreground: #C3BAA1\\ntiddler-editor-background: #E9E0C7\\ntiddler-editor-border-image: #A6A193\\ntiddler-editor-border: #A6A193\\ntiddler-editor-fields-even: #D6CBAA\\ntiddler-editor-fields-odd: #C3BAA1\\ntiddler-info-background: #E3D7B7\\ntiddler-info-border: #BAB29C\\ntiddler-info-tab-background: #E9E0C7\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #867F69\\ntiddler-title-foreground: #374464\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #8A8885\\nvery-muted-foreground: #CDC2A6\\nwikilist-background: \u003C\u003Ccolour page-background>>\\nwikilist-item: #CDC2A6\\nwikilist-info: #161512\\nwikilist-title: #433F35\\nwikilist-title-svg: \u003C\u003Ccolour wikilist-title>>\\nwikilist-url: #706A58\\nwikilist-button-open: #7db66a\\nwikilist-button-open-hover: #56a556\\nwikilist-button-reveal: #5a6c9e\\nwikilist-button-reveal-hover: #454591\\nwikilist-button-remove: #bc5972\\nwikilist-button-remove-hover: #814040\\nwikilist-toolbar-background: #CDC2A6\\nwikilist-toolbar-foreground: #2D2A23\\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\\nwikilist-button-background: #A6A193\\nwikilist-button-foreground: #161512\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/FlexokiDark\:{\title\:\$:/palettes/FlexokiDark\,\color-scheme\:\dark\,\description\:\An inky color scheme for prose and code\,\name\:\FlexokiDark\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\flexoki-paper: #FFFCF0\\nflexoki-999: #100F0F\\nflexoki-950: #1C1B1A\\nflexoki-900: #282726\\nflexoki-850: #343331\\nflexoki-800: #403E3C\\nflexoki-700: #575653\\nflexoki-600: #6c6b66\\nflexoki-500: #878580\\nflexoki-300: #B7B5AC\\nflexoki-200: #CECDC3\\nflexoki-150: #DAD8CE\\nflexoki-100: #E6E4D9\\nflexoki-050: #F2F0E5\\nflexoki-red-600: #AF3029\\nflexoki-red-400: #D14D41\\nflexoki-orange-600: #BC5215\\nflexoki-orange-400: #DA702C\\nflexoki-yellow-900: #4D3A0B\\nflexoki-yellow-600: #AD8301\\nflexoki-yellow-400: #D0A215\\nflexoki-yellow-100: #FCEEB8\\nflexoki-green-600: #66800B\\nflexoki-green-400: #879A39\\nflexoki-cyan-950: #142625\\nflexoki-cyan-600: #227d77\\nflexoki-cyan-400: #3AA99F\\nflexoki-cyan-050: #EBF2E7\\nflexoki-blue-600: #205EA6\\nflexoki-blue-400: #4385BE\\nflexoki-purple-600: #5E409D\\nflexoki-purple-400: #8B7EC8\\nflexoki-magenta-600: #A02F6F\\nflexoki-magenta-400: #CE5D97\\n\\nflexoki-bg: \u003C\u003Ccolour flexoki-999>>\\nflexoki-tx-2: \u003C\u003Ccolour flexoki-500>>\\nflexoki-tx-3: \u003C\u003Ccolour flexoki-700>>\\nflexoki-ui-3: \u003C\u003Ccolour flexoki-800>>\\nflexoki-ui-2: \u003C\u003Ccolour flexoki-850>>\\nflexoki-ui: \u003C\u003Ccolour flexoki-900>>\\nflexoki-bg-2: \u003C\u003Ccolour flexoki-950>>\\nflexoki-tx: \u003C\u003Ccolour flexoki-300>>\\nflexoki-re: \u003C\u003Ccolour flexoki-red-400>>\\nflexoki-or: \u003C\u003Ccolour flexoki-orange-400>>\\nflexoki-ye: \u003C\u003Ccolour flexoki-yellow-400>>\\nflexoki-gr: \u003C\u003Ccolour flexoki-green-400>>\\nflexoki-cy: \u003C\u003Ccolour flexoki-cyan-400>>\\nflexoki-bl: \u003C\u003Ccolour flexoki-blue-400>>\\nflexoki-pu: \u003C\u003Ccolour flexoki-purple-400>>\\nflexoki-ma: \u003C\u003Ccolour flexoki-magenta-400>>\\nflexoki-re-2: \u003C\u003Ccolour flexoki-red-600>>\\nflexoki-or-2: \u003C\u003Ccolour flexoki-orange-600>>\\nflexoki-ye-2: \u003C\u003Ccolour flexoki-yellow-600>>\\nflexoki-gr-2: \u003C\u003Ccolour flexoki-green-600>>\\nflexoki-cy-2: \u003C\u003Ccolour flexoki-cyan-600>>\\nflexoki-bl-2: \u003C\u003Ccolour flexoki-blue-600>>\\nflexoki-pu-2: \u003C\u003Ccolour flexoki-purple-600>>\\nflexoki-ma-2: \u003C\u003Ccolour flexoki-magenta-600>>\\n\\nalert-background: \u003C\u003Ccolour flexoki-yellow-900>>\\nalert-border: \u003C\u003Ccolour flexoki-ye>>\\nalert-highlight: \u003C\u003Ccolour flexoki-re>>\\nalert-muted-foreground: \u003C\u003Ccolour flexoki-ye>>\\nbackground: #100F0F\\nblockquote-bar: \u003C\u003Ccolour flexoki-ma>>\\nbutton-background: \u003C\u003Ccolour flexoki-bg-2>>\\nbutton-foreground: \u003C\u003Ccolour flexoki-paper>>\\nbutton-border: \u003C\u003Ccolour flexoki-600>>\\ncode-background: \u003C\u003Ccolour background>>\\ncode-border: \u003C\u003Ccolour flexoki-tx>>\\ncode-foreground: \u003C\u003Ccolour flexoki-tx>>\\ndiff-delete-background: \u003C\u003Ccolour flexoki-re>>\\ndiff-delete-foreground: \u003C\u003Ccolour flexoki-bg-2>>\\ndiff-equal-background: \\ndiff-equal-foreground: inherit\\ndiff-insert-background: \u003C\u003Ccolour flexoki-gr>>\\ndiff-insert-foreground: \u003C\u003Ccolour flexoki-bg-2>>\\ndiff-invisible-background: \u003C\u003Ccolour flexoki-ye>>\\ndiff-invisible-foreground: \u003C\u003Ccolour flexoki-bg-2>>\\ndirty-indicator: \u003C\u003Ccolour flexoki-re>>\\ndownload-background: \u003C\u003Ccolour flexoki-cy-2>>\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour background>>\\ndragger-foreground: \u003C\u003Ccolour foreground>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour flexoki-ui-3>>\\ndropdown-tab-background-selected: \u003C\u003Ccolour flexoki-ui>>\\ndropdown-tab-background: \u003C\u003Ccolour flexoki-ui-3>>\\ndropzone-background: \u003C\u003Ccolour flexoki-gr>>\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: \u003C\u003Ccolour flexoki-bl>>\\nexternal-link-foreground: \u003C\u003Ccolour flexoki-bl>>\\nfootnote-target-background: \u003C\u003Ccolour flexoki-bg-2>>\\nforeground: #CECDC3\\nhighlight-background: \u003C\u003Ccolour flexoki-yellow-900>>\\nhighlight-foreground: inherit\\nmenubar-background: \u003C\u003Ccolour primary>>\\nmenubar-foreground: \u003C\u003Ccolour flexoki-999>>\\nmessage-background: \u003C\u003Ccolour background>>\\nmessage-border: \u003C\u003Ccolour foreground>>\\nmessage-foreground: \u003C\u003Ccolour foreground>>\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour flexoki-ui-3>>\\nmodal-footer-background: \u003C\u003Ccolour flexoki-ui-2>>\\nmodal-footer-border: \u003C\u003Ccolour flexoki-ui-3>>\\nmodal-header-border: \u003C\u003Ccolour flexoki-ui-3>>\\nmuted-foreground: \u003C\u003Ccolour flexoki-tx-2>>\\nnetwork-activity-foreground: \u003C\u003Ccolour flexoki-cy>>\\nnotification-background: \u003C\u003Ccolour flexoki-bg>>\\nnotification-border: \u003C\u003Ccolour flexoki-paper>>\\npage-background: \u003C\u003Ccolour flexoki-bg-2>>\\npre-background: \u003C\u003Ccolour flexoki-bg-2>>\\npre-border: \u003C\u003Ccolour flexoki-ui-2>>\\nprimary: \u003C\u003Ccolour flexoki-cy>>\\nselection-background: \u003C\u003Ccolour primary>>\\nselection-foreground: \u003C\u003Ccolour background>>\\nselect-tag-background: \u003C\u003Ccolour flexoki-bg>>\\nselect-tag-foreground: \u003C\u003Ccolour flexoki-paper>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: \u003C\u003Ccolour flexoki-tx>>\\nsidebar-controls-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: \u003C\u003Ccolour flexoki-tx>>\\nsidebar-muted-foreground-hover: \u003C\u003Ccolour flexoki-tx>>\\nsidebar-muted-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\nsidebar-tab-background-selected: \u003C\u003Ccolour flexoki-bg-2>>\\nsidebar-tab-background: \u003C\u003Ccolour flexoki-ui-2>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour flexoki-tx>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour flexoki-tx-2>>\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-stable: \u003C\u003Ccolour flexoki-gr>>\\nstability-experimental: \u003C\u003Ccolour flexoki-ye>>\\nstability-deprecated: \u003C\u003Ccolour flexoki-re>>\\nstability-legacy: \u003C\u003Ccolour flexoki-bl>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntab-border-selected: \u003C\u003Ccolour flexoki-ui-3>>\\ntab-border: \u003C\u003Ccolour flexoki-ui>>\\ntab-divider: \u003C\u003Ccolour flexoki-ui-2>>\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: \u003C\u003Ccolour flexoki-tx-2>>\\ntable-border: \u003C\u003Ccolour flexoki-ui-2>>\\ntable-footer-background: \u003C\u003Ccolour flexoki-ui>>\\ntable-header-background: \u003C\u003Ccolour flexoki-ui>>\\ntag-background: #D0A215\\ntag-foreground: #100F0F\\ntestcase-accent-level-1: \u003C\u003Ccolour flexoki-bl-2>>\\ntestcase-accent-level-2: \u003C\u003Ccolour flexoki-ye-2>>\\ntestcase-accent-level-3: \u003C\u003Ccolour flexoki-gr-2>>\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour flexoki-ui-2>>\\ntiddler-controls-foreground-hover: \u003C\u003Ccolour flexoki-tx-3>>\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour flexoki-tx-2>>\\ntiddler-controls-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\ntiddler-editor-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: \u003C\u003Ccolour flexoki-ui-2>>\\ntiddler-editor-fields-even: \u003C\u003Ccolour flexoki-ui-3>>\\ntiddler-editor-fields-odd: \u003C\u003Ccolour flexoki-ui-2>>\\ntiddler-info-background: \u003C\u003Ccolour flexoki-ui>>\\ntiddler-info-border: \u003C\u003Ccolour flexoki-ui>>\\ntiddler-info-tab-background: \u003C\u003Ccolour flexoki-ui>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\ntiddler-title-foreground: \u003C\u003Ccolour flexoki-ma>>\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \u003C\u003Ccolour flexoki-re>>\\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \u003C\u003Ccolour flexoki-tx-3>>\\nvery-muted-foreground: \u003C\u003Ccolour flexoki-600>>\\nwikilist-background: \u003C\u003Ccolour flexoki-ui>>\\nwikilist-item: \u003C\u003Ccolour flexoki-black>>\\nwikilist-info: \u003C\u003Ccolour flexoki-paper>>\\nwikilist-title: \u003C\u003Ccolour flexoki-tx-2>>\\nwikilist-title-svg: \u003C\u003Ccolour wikilist-title>>\\nwikilist-url: \u003C\u003Ccolour flexoki-tx-3>>\\nwikilist-button-open: \u003C\u003Ccolour flexoki-gr>>\\nwikilist-button-open-hover: \u003C\u003Ccolour flexoki-gr-2>>\\nwikilist-button-reveal: \u003C\u003Ccolour flexoki-cy>>\\nwikilist-button-reveal-hover: \u003C\u003Ccolour flexoki-cy-2>>\\nwikilist-button-remove: \u003C\u003Ccolour flexoki-re>>\\nwikilist-button-remove-hover: \u003C\u003Ccolour flexoki-re-2>>\\nwikilist-toolbar-background: \u003C\u003Ccolour flexoki-ui-2>>\\nwikilist-toolbar-foreground: \u003C\u003Ccolour flexoki-600>>\\nwikilist-droplink-dragover: \u003C\u003Ccolour flexoki-pu>>\\nwikilist-button-background: \u003C\u003Ccolour flexoki-tx-3>>\\nwikilist-button-foreground: \u003C\u003Ccolour flexoki-paper>>\},\$:/palettes/FlexokiLight\:{\title\:\$:/palettes/FlexokiLight\,\name\:\FlexokiLight\,\description\:\An inky color scheme for prose and code\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\color-scheme\:\light\,\text\:\flexoki-black: #100F0F\\nflexoki-paper: #FFFCF0\\nflexoki-950: #1C1B1A\\nflexoki-900: #282726\\nflexoki-850: #343331\\nflexoki-800: #403E3C\\nflexoki-700: #575653\\nflexoki-600: #6F6E69\\nflexoki-500: #878580\\nflexoki-300: #B7B5AC\\nflexoki-200: #CECDC3\\nflexoki-150: #DAD8CE\\nflexoki-100: #E6E4D9\\nflexoki-050: #F2F0E5\\nflexoki-red-600: #AF3029\\nflexoki-red-400: #D14D41\\nflexoki-orange-600: #BC5215\\nflexoki-orange-400: #DA702C\\nflexoki-yellow-900: #4D3A0B\\nflexoki-yellow-600: #AD8301\\nflexoki-yellow-400: #D0A215\\nflexoki-yellow-100: #FCEEB8\\nflexoki-green-600: #66800B\\nflexoki-green-400: #879A39\\nflexoki-cyan-950: #142625\\nflexoki-cyan-600: #24837B\\nflexoki-cyan-400: #3AA99F\\nflexoki-cyan-050: #EBF2E7\\nflexoki-blue-600: #205EA6\\nflexoki-blue-400: #4385BE\\nflexoki-purple-600: #5E409D\\nflexoki-purple-400: #8B7EC8\\nflexoki-magenta-600: #A02F6F\\nflexoki-magenta-400: #CE5D97\\n\\nflexoki-tx: \u003C\u003Ccolour flexoki-black>>\\nflexoki-tx-2: \u003C\u003Ccolour flexoki-600>>\\nflexoki-tx-3: \u003C\u003Ccolour flexoki-300>>\\nflexoki-ui-3: \u003C\u003Ccolour flexoki-200>>\\nflexoki-ui-2: \u003C\u003Ccolour flexoki-150>>\\nflexoki-ui: \u003C\u003Ccolour flexoki-100>>\\nflexoki-bg-2: \u003C\u003Ccolour flexoki-050>>\\nflexoki-bg: \u003C\u003Ccolour flexoki-paper>>\\n\\nflexoki-re: \u003C\u003Ccolour flexoki-red-400>>\\nflexoki-or: \u003C\u003Ccolour flexoki-orange-400>>\\nflexoki-ye: \u003C\u003Ccolour flexoki-yellow-400>>\\nflexoki-gr: \u003C\u003Ccolour flexoki-green-400>>\\nflexoki-cy: \u003C\u003Ccolour flexoki-cyan-400>>\\nflexoki-bl: \u003C\u003Ccolour flexoki-blue-400>>\\nflexoki-pu: \u003C\u003Ccolour flexoki-purple-400>>\\nflexoki-ma: \u003C\u003Ccolour flexoki-magenta-400>>\\n\\nflexoki-re-2: \u003C\u003Ccolour flexoki-red-600>>\\nflexoki-or-2: \u003C\u003Ccolour flexoki-orange-600>>\\nflexoki-ye-2: \u003C\u003Ccolour flexoki-yellow-600>>\\nflexoki-gr-2: \u003C\u003Ccolour flexoki-green-600>>\\nflexoki-cy-2: \u003C\u003Ccolour flexoki-cyan-600>>\\nflexoki-bl-2: \u003C\u003Ccolour flexoki-blue-600>>\\nflexoki-pu-2: \u003C\u003Ccolour flexoki-purple-600>>\\nflexoki-ma-2: \u003C\u003Ccolour flexoki-magenta-600>>\\n\\nalert-background: \u003C\u003Ccolour flexoki-yellow-100>>\\nalert-border: \u003C\u003Ccolour flexoki-ye-2>>\\nalert-highlight: \u003C\u003Ccolour flexoki-re-2>>\\nalert-muted-foreground: \u003C\u003Ccolour flexoki-tx-2>>\\nbackground: #FFFCF0\\nblockquote-bar: \u003C\u003Ccolour flexoki-magenta-600>>\\nbutton-background: \u003C\u003Ccolour flexoki-bg-2>>\\nbutton-foreground: \u003C\u003Ccolour flexoki-black>>\\nbutton-border: \u003C\u003Ccolour flexoki-500>>\\ncode-background: \u003C\u003Ccolour flexoki-bg>>\\ncode-border: \u003C\u003Ccolour flexoki-tx>>\\ncode-foreground: \u003C\u003Ccolour flexoki-tx>>\\ndiff-delete-background: \u003C\u003Ccolour flexoki-re-2>>\\ndiff-delete-foreground: \u003C\u003Ccolour flexoki-paper>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: \u003C\u003Ccolour flexoki-gr-2>>\\ndiff-insert-foreground: \u003C\u003Ccolour flexoki-paper>>\\ndiff-invisible-background: \u003C\u003Ccolour flexoki-ye-2>>\\ndiff-invisible-foreground: \u003C\u003Ccolour flexoki-paper>>\\ndirty-indicator: \u003C\u003Ccolour flexoki-red-600>>\\ndownload-background: \u003C\u003Ccolour flexoki-gr>>\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: \u003C\u003Ccolour background>>\\ndropdown-tab-background: \u003C\u003Ccolour flexoki-bg-2>>\\ndropzone-background: \u003C\u003Ccolour flexoki-gr>>\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: \u003C\u003Ccolour flexoki-bl>>\\nexternal-link-foreground: \u003C\u003Ccolour flexoki-bl>>\\nfootnote-target-background: \u003C\u003Ccolour flexoki-bg-2>>\\nforeground: #100F0F\\nhighlight-background: \u003C\u003Ccolour flexoki-yellow-100>>\\nhighlight-foreground: inherit\\nmenubar-background: \u003C\u003Ccolour primary>>\\nmenubar-foreground: \u003C\u003Ccolour flexoki-paper>>\\nmessage-background: \u003C\u003Ccolour flexoki-bg>>\\nmessage-border: \u003C\u003Ccolour flexoki-black>>\\nmessage-foreground: \u003C\u003Ccolour flexoki-black>>\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour flexoki-tx-3>>\\nmodal-footer-background: \u003C\u003Ccolour flexoki-bg>>\\nmodal-footer-border: \u003C\u003Ccolour flexoki-tx-3>>\\nmodal-header-border: \u003C\u003Ccolour flexoki-tx-3>>\\nmuted-foreground: \u003C\u003Ccolour flexoki-500>>\\nnetwork-activity-foreground: \u003C\u003Ccolour flexoki-cy-2>>\\nnotification-background: \u003C\u003Ccolour flexoki-bg>>\\nnotification-border: \u003C\u003Ccolor flexoki-black>>\\npage-background: \u003C\u003Ccolour flexoki-bg-2>>\\npre-background: \u003C\u003Ccolour flexoki-bg-2>>\\npre-border: \u003C\u003Ccolour flexoki-ui-2>>\\nprimary: \u003C\u003Ccolour flexoki-cy-2>>\\nselection-background: \u003C\u003Ccolour flexoki-cy-2>>\\nselection-foreground: \u003C\u003Ccolour background>>\\nselect-tag-background: \u003C\u003Ccolour flexoki-bg>>\\nselect-tag-foreground: \u003C\u003Ccolor flexoki-black>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: \u003C\u003Ccolour flexoki-tx>>\\nsidebar-controls-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: \u003C\u003Ccolour flexoki-300>>\\nsidebar-muted-foreground-hover: \u003C\u003Ccolour flexoki-700>>\\nsidebar-muted-foreground: \u003C\u003Ccolour flexoki-200>>\\nsidebar-tab-background-selected: \u003C\u003Ccolour flexoki-bg-2>>\\nsidebar-tab-background: \u003C\u003Ccolour flexoki-ui>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour flexoki-100>>\\nsidebar-tab-foreground-selected: \\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour flexoki-500>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour flexoki-700>>\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-stable: \u003C\u003Ccolour flexoki-green-600>>\\nstability-experimental: \u003C\u003Ccolour flexoki-yellow-600>>\\nstability-deprecated: \u003C\u003Ccolour flexoki-red-600>>\\nstability-legacy: \u003C\u003Ccolour flexoki-blue-600>>\\nstatic-alert-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntab-border-selected: \u003C\u003Ccolour flexoki-ui-3>>\\ntab-border: \u003C\u003Ccolour flexoki-ui>>\\ntab-divider: \u003C\u003Ccolour flexoki-ui-2>>\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: \u003C\u003Ccolour flexoki-tx>>\\ntable-border: \u003C\u003Ccolour flexoki-ui-2>>\\ntable-footer-background: \u003C\u003Ccolour flexoki-tx-3>>\\ntable-header-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntag-background: #AD8301\\ntag-foreground: #FFFCF0\\ntestcase-accent-level-1: \u003C\u003Ccolour flexoki-blue-400>>\\ntestcase-accent-level-2: \u003C\u003Ccolour flexoki-yellow-400>>\\ntestcase-accent-level-3: \u003C\u003Ccolour flexoki-green-400>>\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: \u003C\u003Ccolour flexoki-tx-3>>\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour flexoki-tx-2>>\\ntiddler-controls-foreground: \u003C\u003Ccolour flexoki-ui-3>>\\ntiddler-editor-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: \u003C\u003Ccolour flexoki-ui-2>>\\ntiddler-editor-fields-even: \u003C\u003Ccolour flexoki-ui-3>>\\ntiddler-editor-fields-odd: \u003C\u003Ccolour flexoki-ui-2>>\\ntiddler-info-background: \u003C\u003Ccolour flexoki-bg-2>>\\ntiddler-info-border: \u003C\u003Ccolour flexoki-200>>\\ntiddler-info-tab-background: \u003C\u003Ccolour flexoki-bg>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour flexoki-tx-3>>\\ntiddler-title-foreground: \u003C\u003Ccolour flexoki-magenta-600>>\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \u003C\u003Ccolour flexoki-re-2>>\\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \u003C\u003Ccolour flexoki-tx-3>>\\nvery-muted-foreground: \u003C\u003Ccolour flexoki-500>>\\nwikilist-background: \u003C\u003Ccolour flexoki-ui>>\\nwikilist-item: \u003C\u003Ccolour flexoki-paper>>\\nwikilist-info: \u003C\u003Ccolour flexoki-black>>\\nwikilist-title: \u003C\u003Ccolour flexoki-tx-2>>\\nwikilist-title-svg: \u003C\u003Ccolour wikilist-title>>\\nwikilist-url: \u003C\u003Ccolour flexoki-tx-3>>\\nwikilist-button-open: \u003C\u003Ccolour flexoki-gr-2>>\\nwikilist-button-open-hover: \u003C\u003Ccolour flexoki-gr>>\\nwikilist-button-reveal: \u003C\u003Ccolour flexoki-cy-2>>\\nwikilist-button-reveal-hover: \u003C\u003Ccolour flexoki-cy>>\\nwikilist-button-remove: \u003C\u003Ccolour flexoki-re-2>>\\nwikilist-button-remove-hover: \u003C\u003Ccolour flexoki-re>>\\nwikilist-toolbar-background: \u003C\u003Ccolour flexoki-ui-2>>\\nwikilist-toolbar-foreground: \u003C\u003Ccolour flexoki-500>>\\nwikilist-droplink-dragover: \u003C\u003Ccolour flexoki-pu>>\\nwikilist-button-background: \u003C\u003Ccolour flexoki-tx-3>>\\nwikilist-button-foreground: \u003C\u003Ccolour flexoki-black>>\\n\},\$:/palettes/GruvboxDark\:{\title\:\$:/palettes/GruvboxDark\,\name\:\Gruvbox Dark\,\color-scheme\:\dark\,\description\:\Retro groove color scheme\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\license\:\https://github.com/morhetz/gruvbox\,\text\:\alert-background: #cc241d\\nalert-border: #cc241d\\nalert-highlight: #d79921\\nalert-muted-foreground: #272321\\nbackground: #3c3836\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\ncode-background: #504945\\ncode-border: #504945\\ncode-foreground: #fc5e4b\\ndiff-delete-background: #fb4934\\ndiff-delete-foreground: \u003C\u003Ccolour foreground>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: #b8bb26\\ndiff-insert-foreground: \u003C\u003Ccolour background>>\\ndiff-invisible-background: #ffff97\\ndiff-invisible-foreground: #444347\\ndirty-indicator: #fb4934\\ndownload-background: #1daf24\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: #665c54\\ndropdown-border: \u003C\u003Ccolour background>>\\ndropdown-tab-background-selected: #ebdbb2\\ndropdown-tab-background: #665c54\\ndropzone-background: #98971a\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #d3869b\\nexternal-link-foreground: #8ec07c\\nfootnote-target-background: #665c54\\nforeground: #fbf1c7\\nhighlight-background: #ffff79\\nhighlight-foreground: #000000\\nmenubar-background: #504945\\nmenubar-foreground: \u003C\u003Ccolour foreground>>\\nmessage-background: #b4c9c1\\nmessage-border: #83a598\\nmessage-foreground: #3c3836\\nmodal-backdrop: #625a57\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #504945\\nmodal-footer-background: #3c3836\\nmodal-footer-border: #3c3836\\nmodal-header-border: #3c3836\\nmuted-foreground: #d5c4a1\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\\nnotification-background: \u003C\u003Ccolour primary>>\\nnotification-border: \u003C\u003Ccolour primary>>\\npage-background: #282828\\npre-background: #504945\\npre-border: #504945\\nprimary: #da9921\\nselect-tag-background: #665c54\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nselection-background: #458588\\nselection-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #e3e0dd\\nsidebar-controls-foreground: #978b84\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: #fbf1c7\\nsidebar-muted-foreground-hover: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\nsidebar-muted-foreground: \u003C\u003Ccolour sidebar-controls-foreground>>\\nsidebar-tab-background-selected: #bdae93\\nsidebar-tab-background: #3c3836\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: #bdae93\\nsidebar-tab-divider: \u003C\u003Ccolour page-background>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour page-background>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #458588\\nsidebar-tiddler-link-foreground: #98971a\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-deprecated: #cc241d\\nstability-experimental: #b37d1c\\nstability-legacy: #529ca0\\nstability-stable: #649618\\nstatic-alert-foreground: #B48EAD\\ntab-background-selected: #ebdbb2\\ntab-background: #665c54\\ntab-border-selected: \u003C\u003Ccolour tab-background-selected>>\\ntab-border: #82746a\\ntab-divider: #bdae93\\ntab-foreground-selected: #282828\\ntab-foreground: #ebdbb2\\ntable-border: #7c6f64\\ntable-footer-background: #665c54\\ntable-header-background: #504945\\ntag-background: #d3869b\\ntag-foreground: #282828\\ntestcase-accent-level-1: #456d88\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #7c6f64\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour primary>>\\ntiddler-controls-foreground: #665c54\\ntiddler-editor-background: #32302f\\ntiddler-editor-border-image: #282828\\ntiddler-editor-border: #282828\\ntiddler-editor-fields-even: #504945\\ntiddler-editor-fields-odd: #7c6f64\\ntiddler-info-background: #32302f\\ntiddler-info-border: #ebdbb2\\ntiddler-info-tab-background: #ebdbb2\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #7c6f64\\ntiddler-title-foreground: #a89984\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #887b75\\nvery-muted-foreground: #bdae93\\nwikilist-background: \u003C\u003Ccolour page-background>>\\nwikilist-button-background: #acacac\\nwikilist-button-foreground: \u003C\u003Ccolour button-foreground>>\\nwikilist-item: \u003C\u003Ccolour background>>\\nwikilist-toolbar-background: \u003C\u003Ccolour background>>\\nwikilist-toolbar-foreground: \u003C\u003Ccolour foreground>>\\nwikilist-title: \u003C\u003Ccolour foreground>>\\nwikilist-title-svg: \u003C\u003Ccolour wikilist-title>>\\nwikilist-url: \u003C\u003Ccolour muted-foreground>>\\nwikilist-button-open-hover: \u003C\u003Ccolour primary>>\\nwikilist-button-open: \u003C\u003Ccolour dropzone-background>>\\nwikilist-button-remove: \u003C\u003Ccolour dirty-indicator>>\\nwikilist-button-remove-hover: \u003C\u003Ccolour alert-background>>\\nwikilist-droplink-dragover: \u003C\u003Ccolour dropzone-background>>\\nwikilist-button-reveal: \u003C\u003Ccolour sidebar-tiddler-link-foreground-hover>>\\nwikilist-button-reveal-hover: \u003C\u003Ccolour message-background>>\\n\},\$:/palettes/Nord\:{\title\:\$:/palettes/Nord\,\name\:\Nord\,\color-scheme\:\dark\,\description\:\An arctic, north-bluish color palette.\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\license\:\MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md\,\text\:\alert-background: #D08770\\nalert-border: \u003C\u003Ccolour alert-background>>\\nalert-highlight: #a3436f\\nalert-muted-foreground: #495367\\nbackground: #3b4252\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-foreground: \u003C\u003Ccolour foreground>>\\ncode-background: #2E3440\\ncode-border: #2E3440\\ncode-foreground: #c7747c\\ndiff-delete-background: #BF616A\\ndiff-delete-foreground: \u003C\u003Ccolour foreground>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: #A3BE8C\\ndiff-insert-foreground: \u003C\u003Ccolour background>>\\ndiff-invisible-background: #f9f3b5\\ndiff-invisible-foreground: \u003C\u003Ccolour muted-foreground>>\\ndirty-indicator: #BF616A\\ndownload-background: #A3BE8C\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour background>>\\ndropdown-tab-background-selected: #ECEFF4\\ndropdown-tab-background: #4C566A\\ndropzone-background: #A3BE8C\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #5E81AC\\nexternal-link-foreground: #8FBCBB\\nfootnote-target-background: #2E3440\\nforeground: #d8dee9\\nhighlight-background: #ffff78\\nhighlight-foreground: #000000\\nmenubar-background: #2E3440\\nmenubar-foreground: #d8dee9\\nmessage-background: #2E3440\\nmessage-border: #2E3440\\nmessage-foreground: #6485aa\\nmodal-backdrop: #435678\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #3b4252\\nmodal-footer-background: #3b4252\\nmodal-footer-border: #3b4252\\nmodal-header-border: #3b4252\\nmuted-foreground: #687693\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\\nnotification-background: \u003C\u003Ccolour primary>>\\nnotification-border: #EBCB8B\\npage-background: #2e3440\\npre-background: #2E3440\\npre-border: #2E3440\\nprimary: #7b98bb\\nselect-tag-background: #3b4252\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nselection-background: #52749e\\nselection-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #D8DEE9\\nsidebar-controls-foreground: #5e6a84\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: #D8DEE9\\nsidebar-muted-foreground-hover: #9fa8bb\\nsidebar-muted-foreground: #6c7b97\\nsidebar-tab-background-selected: #ECEFF4\\nsidebar-tab-background: #4C566A\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: #4C566A\\nsidebar-tab-divider: \u003C\u003Ccolour page-background>>\\nsidebar-tab-foreground-selected: #4C566A\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #A3BE8C\\nsidebar-tiddler-link-foreground: #81A1C1\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-deprecated: #ff595e\\nstability-experimental: #f29d00\\nstability-legacy: #2ddbca\\nstability-stable: #04ff04\\nstatic-alert-foreground: #B48EAD\\ntab-background-selected: #ECEFF4\\ntab-background: #4C566A\\ntab-border-selected: #4C566A\\ntab-border: #5c6883\\ntab-divider: #4C566A\\ntab-foreground-selected: #6c7a97\\ntab-foreground: #D8DEE9\\ntable-border: #4C566A\\ntable-footer-background: #2e3440\\ntable-header-background: #2e3440\\ntag-background: #A3BE8C\\ntag-foreground: #4C566A\\ntestcase-accent-level-1: #455e7d\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: \\ntiddler-controls-foreground-selected: #EBCB8B\\ntiddler-controls-foreground: #5e6a84\\ntiddler-editor-background: #2e3440\\ntiddler-editor-border-image: #2e3440\\ntiddler-editor-border: #232732\\ntiddler-editor-fields-even: #2e3440\\ntiddler-editor-fields-odd: #424a5b\\ntiddler-info-background: #2e3440\\ntiddler-info-border: #2e3440\\ntiddler-info-tab-background: #2e3440\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #5c6881\\ntiddler-title-foreground: #81A1C1\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: #2d3038\\nvery-muted-foreground: #2d3038\\nwikilist-background: \u003C\u003Ccolour page-background>>\\nwikilist-toolbar-background: \u003C\u003Ccolour background>>\\nwikilist-item: \u003C\u003Ccolour background>>\\nwikilist-title: \u003C\u003Ccolour foreground>>\\nwikilist-info: \u003C\u003Ccolour muted-foreground>>\\nwikilist-button-open: #A3BE8C\\nwikilist-button-open-hover: #A3BE8C\\nwikilist-button-reveal: #81A1C1\\nwikilist-button-reveal-hover: #81A1C1\\nwikilist-button-remove: #B48EAD\\nwikilist-button-remove-hover: #B48EAD\},\$:/palettes/Rocker\:{\title\:\$:/palettes/Rocker\,\name\:\Rocker\,\color-scheme\:\dark\,\description\:\A dark theme\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background: #adadad\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333333\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #000\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #cc0000\\nselect-tag-background: \u003C\u003Ccolour foreground>>\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #797979\\nsidebar-controls-foreground: #cacaca\\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #000000\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: #7c7c7c\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: #ff0909\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #ffbb99\\nsidebar-tiddler-link-foreground: #cc0000\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-deprecated: #ff0000\\nstability-experimental: #c07c00\\nstability-legacy: #0000ff\\nstability-stable: #008000\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #d8d8d8\\ntab-border-selected: #d8d8d8\\ntab-border: #bbbbbb\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffbb99\\ntag-foreground: #000\\ntestcase-accent-level-1: #9e9eff\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #cc0000\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\},\$:/palettes/SolarFlare\:{\title\:\$:/palettes/SolarFlare\,\name\:\Solar Flare\,\color-scheme\:\light\,\description\:\Warm, relaxing earth colours\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\text\:\# Background Tones\\n\\nbase03: #002b36\\nbase02: #073642\\n\\n# Content Tones\\n\\nbase01: #586e75\\nbase00: #657b83\\nbase0: #839496\\nbase1: #93a1a1\\n\\n# Background Tones\\n\\nbase2: #eee8d5\\nbase3: #fdf6e3\\n\\n# Accent Colors\\n\\nyellow: #b58900\\norange: #cb4b16\\nred: #dc322f\\nmagenta: #d33682\\nviolet: #6c71c4\\nblue: #268bd2\\ncyan: #2aa198\\ngreen: #859900\\n\\n# Additional Tones (RA)\\n\\nbase10: #c0c4bb\\nviolet-muted: #7c81b0\\nblue-muted: #4e7baa\\n\\nyellow-hot: #ffcc44\\norange-hot: #eb6d20\\nred-hot: #ff2222\\nblue-hot: #2298ee\\ngreen-hot: #98ee22\\n\\n# Palette\\n\\n# Do not use colour macro for background and foreground\\nbackground: #fdf6e3\\n download-foreground: \u003C\u003Ccolour background>>\\n dragger-foreground: \u003C\u003Ccolour background>>\\n dropdown-background: \u003C\u003Ccolour background>>\\n modal-background: \u003C\u003Ccolour background>>\\n sidebar-foreground-shadow: \u003C\u003Ccolour background>>\\n tiddler-background: \u003C\u003Ccolour background>>\\n tiddler-border: \u003C\u003Ccolour background>>\\n tiddler-link-background: \u003C\u003Ccolour background>>\\n tab-background-selected: \u003C\u003Ccolour background>>\\n dropdown-tab-background-selected: \u003C\u003Ccolour tab-background-selected>>\\nforeground: #657b83\\n dragger-background: \u003C\u003Ccolour foreground>>\\n tab-foreground: \u003C\u003Ccolour foreground>>\\n tab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\n sidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\n sidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\n sidebar-button-foreground: \u003C\u003Ccolour foreground>>\\n sidebar-controls-foreground: \u003C\u003Ccolour foreground>>\\n sidebar-foreground: \u003C\u003Ccolour foreground>>\\n# base03\\n# base02\\n# base01\\n alert-muted-foreground: \u003C\u003Ccolour base01>>\\n# base00\\n code-foreground: \u003C\u003Ccolour base00>>\\n message-foreground: \u003C\u003Ccolour base00>>\\n tag-foreground: \u003C\u003Ccolour base00>>\\n# base0\\n sidebar-tiddler-link-foreground: \u003C\u003Ccolour base0>>\\n# base1\\n muted-foreground: \u003C\u003Ccolour base1>>\\n blockquote-bar: \u003C\u003Ccolour muted-foreground>>\\n dropdown-border: \u003C\u003Ccolour muted-foreground>>\\n sidebar-muted-foreground: \u003C\u003Ccolour muted-foreground>>\\n tiddler-title-foreground: \u003C\u003Ccolour muted-foreground>>\\n site-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\n# base2\\n stability-deprecated: \u003C\u003Ccolour red>>\\n stability-experimental: \u003C\u003Ccolour yellow>>\\n stability-legacy: \u003C\u003Ccolour blue-hot>>\\n stability-stable: \u003C\u003Ccolour green>>\\n modal-footer-background: \u003C\u003Ccolour base2>>\\n page-background: \u003C\u003Ccolour base2>>\\n modal-backdrop: \u003C\u003Ccolour page-background>>\\n notification-background: \u003C\u003Ccolour page-background>>\\n code-background: \u003C\u003Ccolour page-background>>\\n code-border: \u003C\u003Ccolour code-background>>\\n pre-background: \u003C\u003Ccolour page-background>>\\n pre-border: \u003C\u003Ccolour pre-background>>\\n sidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\\n table-header-background: \u003C\u003Ccolour base2>>\\n tag-background: \u003C\u003Ccolour base2>>\\n tiddler-editor-background: \u003C\u003Ccolour base2>>\\n tiddler-info-background: \u003C\u003Ccolour base2>>\\n tiddler-info-tab-background: \u003C\u003Ccolour tiddler-info-border>>\\n tab-background: \u003C\u003Ccolour base2>>\\ndropdown-tab-background: \u003C\u003Ccolour tab-background>>\\n# base3\\n alert-background: \u003C\u003Ccolour base3>>\\n message-background: \u003C\u003Ccolour base3>>\\n# yellow\\n# orange\\n# red\\n# magenta\\n alert-highlight: \u003C\u003Ccolour magenta>>\\n# violet\\n external-link-foreground: \u003C\u003Ccolour violet>>\\n\\n# blue\\n# cyan\\n# green\\n# base10\\n tiddler-controls-foreground: \u003C\u003Ccolour base10>>\\n# violet-muted\\n external-link-foreground-visited: \u003C\u003Ccolour violet-muted>>\\n# blue-muted\\n primary: \u003C\u003Ccolour blue-muted>>\\n download-background: #5bb83d\\n tiddler-link-foreground: \u003C\u003Ccolour primary>>\\nalert-border: #b99e2f\\ndiff-delete-background: \u003C\u003Ccolour red>>\\ndiff-delete-foreground: \u003C\u003Ccolour background>>\\ndiff-equal-background: inherit\\ndiff-equal-foreground: inherit\\ndiff-insert-background: \u003C\u003Ccolour green>>\\ndiff-insert-foreground: \u003C\u003Ccolour background>>\\ndiff-invisible-background: \u003C\u003Ccolour yellow>>\\ndiff-invisible-foreground: \u003C\u003Ccolour background>>\\ndirty-indicator: #ff0000\\ndropzone-background: #008800\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nfootnote-target-background: #ded8c5\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-border: #cfd6e6\\nmodal-border: #999999\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-controls-foreground-hover: #000000\\nsidebar-muted-foreground-hover:\\nsidebar-tab-background: #ded8c5\\nsidebar-tiddler-link-foreground-hover:\\nstatic-alert-foreground: #aaaaaa\\ntab-border: #cccccc\\n modal-footer-border: \u003C\u003Ccolour tab-border>>\\n modal-header-border: \u003C\u003Ccolour tab-border>>\\n notification-border: \u003C\u003Ccolour tab-border>>\\n sidebar-tab-border: \u003C\u003Ccolour tab-border>>\\n tab-border-selected: \u003C\u003Ccolour tab-border>>\\n sidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\ntab-divider: #d8d8d8\\n sidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntestcase-accent-level-1: #bec8cc\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-border: #dddddd\\ntiddler-subtitle-foreground: #c0c0c0\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\},\$:/palettes/SolarizedDark\:{\title\:\$:/palettes/SolarizedDark\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\description\:\Precision dark colors for machines and people\,\license\:\MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE\,\name\:\SolarizedDark\,\color-scheme\:\dark\,\text\:\alert-background: #073642\\nalert-border: #93a1a1\\nalert-highlight: #d33682\\nalert-muted-foreground: #d33682\\nbackground: #073642\\nblockquote-bar: #d33682\\nbutton-background: #073642\\nbutton-border: #586e75\\nbutton-foreground: #93a1a1\\ncode-background: #073642\\ncode-border: #586e75\\ncode-foreground: #93a1a1\\ndiff-delete-background: #dc322f\\ndiff-delete-foreground: #eee8d5\\ndiff-equal-background: inherit\\ndiff-equal-foreground: inherit\\ndiff-insert-background: #859900\\ndiff-insert-foreground: #073642\\ndiff-invisible-background: #b58900\\ndiff-invisible-foreground: #eee8d5\\ndirty-indicator: #dc322f\\ndownload-background: #859900\\ndownload-foreground: #073642\\ndragger-background: #073642\\ndragger-foreground: #839496\\ndropdown-background: #073642\\ndropdown-border: #93a1a1\\ndropdown-tab-background: #002b36\\ndropdown-tab-background-selected: #073642\\ndropzone-background: #859900\\nexternal-link-background: inherit\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-foreground: #268bd2\\nexternal-link-foreground-hover: #1d669c\\nexternal-link-foreground-visited: #268bd2\\nfootnote-target-background: #073642\\nforeground: #839496\\nhighlight-background: #ffff78\\nhighlight-foreground: #000000\\nmessage-background: #002b36\\nmessage-border: #586e75\\nmessage-foreground: #839496\\nmodal-backdrop: #657b83\\nmodal-background: #002b36\\nmodal-border: #586e75\\nmodal-footer-background: #073642\\nmodal-footer-border: #586e75\\nmodal-header-border: #586e75\\nmuted-foreground: #93a1a1\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\\nnotification-background: #002b36\\nnotification-border: #586e75\\npage-background: #073642\\npre-background: inherit\\npre-border: #657b83\\nprimary: #859900\\nselect-tag-background: #002b36\\nselect-tag-foreground: #839496\\nsidebar-button-foreground: #93a1a1\\nsidebar-controls-foreground: #93a1a1\\nsidebar-controls-foreground-hover: #eee8d5\\nsidebar-foreground: #93a1a1\\nsidebar-foreground-shadow: transparent\\nsidebar-muted-foreground: #839496\\nsidebar-muted-foreground-hover: #93a1a1\\nsidebar-tab-background: #002b36\\nsidebar-tab-background-selected: #073642\\nsidebar-tab-border: #073642\\nsidebar-tab-border-selected: #839496\\nsidebar-tab-divider: #002b36\\nsidebar-tab-foreground: #657b83\\nsidebar-tab-foreground-selected: #93a1a1\\nsidebar-tiddler-link-foreground: #2aa198\\nsidebar-tiddler-link-foreground-hover: #eee8d5\\nsite-title-foreground: #d33682\\nstability-deprecated: #aa1a9f\\nstability-experimental: #806000\\nstability-legacy: #1d669c\\nstability-stable: #00df11\\nstatic-alert-foreground: #93a1a1\\ntab-background: #073642\\ntab-background-selected: #002b36\\ntab-border: #586e75\\ntab-border-selected: #93a1a1\\ntab-divider: #93a1a1\\ntab-foreground: #839496\\ntab-foreground-selected: #93a1a1\\ntable-border: #586e75\\ntable-footer-background: #073642\\ntable-header-background: #073642\\ntag-background: #b58900\\ntag-foreground: #002b36\\ntestcase-accent-level-1: #073642\\ntiddler-background: #002b36\\ntiddler-border: #586e75\\ntiddler-controls-foreground: inherit\\ntiddler-controls-foreground-hover: #d33682\\ntiddler-controls-foreground-selected: #2aa198\\ntiddler-editor-background: #002b36\\ntiddler-editor-border: #073642\\ntiddler-editor-border-image: #002b36\\ntiddler-editor-fields-even: #002b36\\ntiddler-editor-fields-odd: #073642\\ntiddler-info-background: #073642\\ntiddler-info-border: #657b83\\ntiddler-info-tab-background: #002b36\\ntiddler-link-background: #002b36\\ntiddler-link-foreground: #2aa198\\ntiddler-subtitle-foreground: #839496\\ntiddler-title-foreground: #d33682\\ntoolbar-cancel-button: #839496\\ntoolbar-close-button: #839496\\ntoolbar-delete-button: #dc322f\\ntoolbar-done-button: #839496\\ntoolbar-edit-button: #839496\\ntoolbar-info-button: #839496\\ntoolbar-new-button: #839496\\ntoolbar-options-button: #839496\\ntoolbar-save-button: inherit\\nuntagged-background: #586e75\\nvery-muted-foreground: #586e75\},\$:/palettes/SolarizedLight\:{\title\:\$:/palettes/SolarizedLight\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\description\:\Precision colors for machines and people\,\license\:\MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE\,\name\:\SolarizedLight\,\color-scheme\:\light\,\text\:\alert-background: #eee8d5\\nalert-border: #586e75\\nalert-highlight: #d33682\\nalert-muted-foreground: #d33682\\nbackground: #eee8d5\\nblockquote-bar: #d33682\\nbutton-background: #eee8d5\\nbutton-border: #93a1a1\\nbutton-foreground: #586e75\\ncode-background: #eee8d5\\ncode-border: #93a1a1\\ncode-foreground: #586e75\\ndiff-delete-background: #dc322f\\ndiff-delete-foreground: #eee8d5\\ndiff-equal-background: inherit\\ndiff-equal-foreground: inherit\\ndiff-insert-background: #859900\\ndiff-insert-foreground: #eee8d5\\ndiff-invisible-background: #b58900\\ndiff-invisible-foreground: #eee8d5\\ndirty-indicator: #dc322f\\ndownload-background: #00910b\\ndownload-foreground: #eee8d5\\ndragger-background: #eee8d5\\ndragger-foreground: #657b83\\ndropdown-background: #eee8d5\\ndropdown-border: #586e75\\ndropdown-tab-background: #fdf6e3\\ndropdown-tab-background-selected: #eee8d5\\ndropzone-background: #859900\\nexternal-link-background: inherit\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-foreground: #268bd2\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #268bd2\\nfootnote-target-background: #eee8d5\\nforeground: #657b83\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #fdf6e3\\nmessage-border: #93a1a1\\nmessage-foreground: #657b83\\nmodal-backdrop: #839496\\nmodal-background: #fdf6e3\\nmodal-border: #93a1a1\\nmodal-footer-background: #eee8d5\\nmodal-footer-border: #93a1a1\\nmodal-header-border: #93a1a1\\nmuted-foreground: #586e75\\nnetwork-activity-foreground: \u003C\u003Ccolour primary>>\\nnotification-background: #fdf6e3\\nnotification-border: #93a1a1\\npage-background: #eee8d5\\npre-background: #eee8d5\\npre-border: #839496\\nprimary: #859900\\nselect-tag-background: #fdf6e3\\nselect-tag-foreground: #657b83\\nsidebar-button-foreground: #586e75\\nsidebar-controls-foreground: #586e75\\nsidebar-controls-foreground-hover: #d33682\\nsidebar-foreground: #586e75\\nsidebar-foreground-shadow: transparent\\nsidebar-muted-foreground: #657b83\\nsidebar-muted-foreground-hover: #586e75\\nsidebar-tab-background: #fdf6e3\\nsidebar-tab-background-selected: #eee8d5\\nsidebar-tab-border: #eee8d5\\nsidebar-tab-border-selected: #657b83\\nsidebar-tab-divider: #fdf6e3\\nsidebar-tab-foreground: #839496\\nsidebar-tab-foreground-selected: #586e75\\nsidebar-tiddler-link-foreground: #2aa198\\nsidebar-tiddler-link-foreground-hover: #002b36\\nsite-title-foreground: #d33682\\nstability-deprecated: #d21a1a\\nstability-experimental: #771e00\\nstability-legacy: #227abb\\nstability-stable: #576400\\nstatic-alert-foreground: #586e75\\ntab-background: #eee8d5\\ntab-background-selected: #fdf6e3\\ntab-border: #93a1a1\\ntab-border-selected: #586e75\\ntab-divider: #586e75\\ntab-foreground: #657b83\\ntab-foreground-selected: #586e75\\ntable-border: #93a1a1\\ntable-footer-background: #eee8d5\\ntable-header-background: #eee8d5\\ntag-background: #b58900\\ntag-foreground: #fdf6e3\\ntestcase-accent-level-1: #afc2db\\ntiddler-background: #fdf6e3\\ntiddler-border: #93a1a1\\ntiddler-controls-foreground: inherit\\ntiddler-controls-foreground-hover: #d33682\\ntiddler-controls-foreground-selected: #2aa198\\ntiddler-editor-background: #fdf6e3\\ntiddler-editor-border: #eee8d5\\ntiddler-editor-border-image: #fdf6e3\\ntiddler-editor-fields-even: #fdf6e3\\ntiddler-editor-fields-odd: #eee8d5\\ntiddler-info-background: #eee8d5\\ntiddler-info-border: #839496\\ntiddler-info-tab-background: #fdf6e3\\ntiddler-link-background: #fdf6e3\\ntiddler-link-foreground: #2aa198\\ntiddler-subtitle-foreground: #657b83\\ntiddler-title-foreground: #d33682\\ntoolbar-cancel-button: #657b83\\ntoolbar-close-button: #657b83\\ntoolbar-delete-button: #dc322f\\ntoolbar-done-button: #657b83\\ntoolbar-edit-button: #657b83\\ntoolbar-info-button: #657b83\\ntoolbar-new-button: #657b83\\ntoolbar-options-button: #657b83\\ntoolbar-save-button: inherit\\nuntagged-background: #586e75\\nvery-muted-foreground: #93a1a1\\n\},\$:/palettes/SpartanDay\:{\title\:\$:/palettes/SpartanDay\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\description\:\Cold, spartan day colors\,\name\:\Spartan Day\,\color-scheme\:\light\,\text\:\alert-background: \u003C\u003Ccolour background>>\\nalert-border: \u003C\u003Ccolour very-muted-foreground>>\\nalert-highlight: \u003C\u003Ccolour very-muted-foreground>>\\nalert-muted-foreground: \u003C\u003Ccolour muted-foreground>>\\nbackground: #FAFAFA\\nblockquote-bar: \u003C\u003Ccolour page-background>>\\nbutton-background: transparent\\nbutton-foreground: inherit\\nbutton-border: \u003C\u003Ccolour tag-background>>\\ncode-background: #ececec\\ncode-border: #ececec\\ncode-foreground: \\ndirty-indicator: #c80000\\ndownload-background: \u003C\u003Ccolour primary>>\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: #FFFFFF\\ndropdown-border: \u003C\u003Ccolour dropdown-background>>\\ndropdown-tab-background-selected: \u003C\u003Ccolour dropdown-background>>\\ndropdown-tab-background: #F5F5F5\\ndropzone-background: \u003C\u003Ccolour tag-background>>\\nexternal-link-background-hover: transparent\\nexternal-link-background-visited: transparent\\nexternal-link-background: transparent\\nexternal-link-foreground-hover: \\nexternal-link-foreground-visited: \\nexternal-link-foreground: \\nfootnote-target-background: #ececec\\nforeground: rgba(0, 0, 0, 0.87)\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: \u003C\u003Ccolour background>>\\nmessage-border: \u003C\u003Ccolour very-muted-foreground>>\\nmessage-foreground: rgba(0, 0, 0, 0.54)\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour very-muted-foreground>>\\nmodal-footer-background: \u003C\u003Ccolour background>>\\nmodal-footer-border: \u003C\u003Ccolour very-muted-foreground>>\\nmodal-header-border: \u003C\u003Ccolour very-muted-foreground>>\\nmuted-foreground: rgba(0, 0, 0, 0.54)\\nnotification-background: \u003C\u003Ccolour dropdown-background>>\\nnotification-border: \u003C\u003Ccolour dropdown-background>>\\npage-background: #f4f4f4\\npre-background: #ececec\\npre-border: #ececec\\nprimary: #3949ab\\nselect-tag-background: \u003C\u003Ccolour background>>\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #aeaeae\\nsidebar-controls-foreground: #c6c6c6\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: rgba(0, 0, 0, 0.54)\\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\\nsidebar-tab-background: transparent\\nsidebar-tab-border-selected: \u003C\u003Ccolour table-border>>\\nsidebar-tab-border: transparent\\nsidebar-tab-divider: \u003C\u003Ccolour table-border>>\\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\\nsite-title-foreground: rgba(0, 0, 0, 0.87)\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: transparent\\ntab-border-selected: \u003C\u003Ccolour table-border>>\\ntab-border: transparent\\ntab-divider: \u003C\u003Ccolour table-border>>\\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\\ntab-foreground: rgba(0, 0, 0, 0.54)\\ntable-border: #d8d8d8\\ntable-footer-background: \u003C\u003Ccolour tiddler-editor-fields-odd>>\\ntable-header-background: \u003C\u003Ccolour tiddler-editor-fields-even>>\\ntag-background: #ec6\\ntag-foreground: \u003C\u003Ccolour button-foreground>>\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #f9f9f9\\ntiddler-controls-foreground-hover: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground: \u003C\u003Ccolour sidebar-controls-foreground>>\\ntiddler-editor-background: transparent\\ntiddler-editor-border-image: \\ntiddler-editor-border: #e8e7e7\\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\\ntiddler-info-background: #F5F5F5\\ntiddler-info-border: #F5F5F5\\ntiddler-info-tab-background: \u003C\u003Ccolour tiddler-editor-fields-odd>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour muted-foreground>>\\ntiddler-title-foreground: #000000\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \u003C\u003Ccolour very-muted-foreground>>\\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\\n\},\$:/palettes/SpartanNight\:{\title\:\$:/palettes/SpartanNight\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\description\:\Dark spartan colors\,\name\:\Spartan Night\,\color-scheme\:\dark\,\text\:\alert-background: \u003C\u003Ccolour background>>\\nalert-border: \u003C\u003Ccolour very-muted-foreground>>\\nalert-highlight: \u003C\u003Ccolour very-muted-foreground>>\\nalert-muted-foreground: \u003C\u003Ccolour muted-foreground>>\\nbackground: #303030\\nblockquote-bar: \u003C\u003Ccolour page-background>>\\nbutton-background: transparent\\nbutton-foreground: inherit\\nbutton-border: \u003C\u003Ccolour tag-background>>\\ncode-background: \u003C\u003Ccolour pre-background>>\\ncode-border: \u003C\u003Ccolour pre-border>>\\ncode-foreground: rgba(255, 255, 255, 0.54)\\ndirty-indicator: #c80000\\ndownload-background: \u003C\u003Ccolour primary>>\\ndownload-foreground: \u003C\u003Ccolour foreground>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: #424242\\ndropdown-border: \u003C\u003Ccolour dropdown-background>>\\ndropdown-tab-background-selected: \u003C\u003Ccolour dropdown-background>>\\ndropdown-tab-background: #050505\\ndropzone-background: \u003C\u003Ccolour tag-background>>\\nexternal-link-background-hover: transparent\\nexternal-link-background-visited: transparent\\nexternal-link-background: transparent\\nexternal-link-foreground-hover: \\nexternal-link-foreground-visited: #7c318c\\nexternal-link-foreground: #9e3eb3\\nfootnote-target-background: #494949\\nforeground: rgba(255, 255, 255, 0.7)\\nhighlight-background: #ffff78\\nhighlight-foreground: #000000\\nmessage-background: \u003C\u003Ccolour background>>\\nmessage-border: \u003C\u003Ccolour very-muted-foreground>>\\nmessage-foreground: rgba(255, 255, 255, 0.54)\\nmodal-backdrop: \u003C\u003Ccolour page-background>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: \u003C\u003Ccolour very-muted-foreground>>\\nmodal-footer-background: \u003C\u003Ccolour background>>\\nmodal-footer-border: \u003C\u003Ccolour background>>\\nmodal-header-border: \u003C\u003Ccolour very-muted-foreground>>\\nmuted-foreground: rgba(255, 255, 255, 0.54)\\nnotification-background: \u003C\u003Ccolour dropdown-background>>\\nnotification-border: \u003C\u003Ccolour dropdown-background>>\\npage-background: #212121\\npre-background: #2a2a2a\\npre-border: transparent\\nprimary: #5656f3\\nselect-tag-background: \u003C\u003Ccolour background>>\\nselect-tag-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #494949\\nsidebar-controls-foreground: #5d5d5d\\nsidebar-foreground-shadow: transparent\\nsidebar-foreground: rgba(255, 255, 255, 0.54)\\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\\nsidebar-tab-background: transparent\\nsidebar-tab-border-selected: \u003C\u003Ccolour table-border>>\\nsidebar-tab-border: transparent\\nsidebar-tab-divider: \u003C\u003Ccolour table-border>>\\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\\nsite-title-foreground: rgba(255, 255, 255, 0.7)\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: transparent\\ntab-border-selected: \u003C\u003Ccolour table-border>>\\ntab-border: transparent\\ntab-divider: \u003C\u003Ccolour table-border>>\\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\\ntab-foreground: rgba(255, 255, 255, 0.54)\\ntable-border: #3a3a3a\\ntable-footer-background: \u003C\u003Ccolour tiddler-editor-fields-odd>>\\ntable-header-background: \u003C\u003Ccolour tiddler-editor-fields-even>>\\ntag-background: #ec6\\ntag-foreground: \u003C\u003Ccolour button-foreground>>\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: rgb(55,55,55)\\ntiddler-controls-foreground-hover: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground-selected: \u003C\u003Ccolour sidebar-controls-foreground-hover>>\\ntiddler-controls-foreground: \u003C\u003Ccolour sidebar-controls-foreground>>\\ntiddler-editor-background: transparent\\ntiddler-editor-border-image: \\ntiddler-editor-border: rgba(255, 255, 255, 0.08)\\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\\ntiddler-info-background: #454545\\ntiddler-info-border: #454545\\ntiddler-info-tab-background: \u003C\u003Ccolour tiddler-editor-fields-odd>>\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: \u003C\u003Ccolour muted-foreground>>\\ntiddler-title-foreground: #FFFFFF\\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\ntoolbar-info-button: \\ntoolbar-edit-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-cancel-button: \\ntoolbar-done-button: \\nuntagged-background: \u003C\u003Ccolour very-muted-foreground>>\\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\\n\},\$:/palettes/Twilight\:{\title\:\$:/palettes/Twilight\,\tags\:\$:/tags/Palette\,\author\:\Thomas Elmiger\,\type\:\application/x-tiddler-dictionary\,\name\:\Twilight\,\description\:\Delightful, soft darkness.\,\color-scheme\:\dark\,\text\:\alert-background: rgb(255, 255, 102)\\nalert-border: rgb(232, 232, 125)\\nalert-highlight: rgb(255, 51, 51)\\nalert-muted-foreground: rgb(224, 82, 82)\\nbackground: rgb(38, 38, 38)\\nblockquote-bar: rgba(240, 196, 117, 0.7)\\nbutton-background: rgb(63, 63, 63)\\nbutton-border: rgb(127, 127, 127)\\nbutton-foreground: rgb(179, 179, 179)\\ncode-background: rgba(0,0,0,0.03)\\ncode-border: rgba(0,0,0,0.08)\\ncode-foreground: rgb(255, 94, 94)\\ndiff-delete-background: #ffc9c9\\ndiff-delete-foreground: \u003C\u003Ccolour background>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: #aaefad\\ndiff-insert-foreground: \u003C\u003Ccolour background>>\\ndiff-invisible-background: #fdfcbd\\ndiff-invisible-foreground: \u003C\u003Ccolour background>>\\ndirty-indicator: rgb(255, 94, 94)\\ndownload-background: #19a974\\ndownload-foreground: rgb(38, 38, 38)\\ndragger-background: rgb(179, 179, 179)\\ndragger-foreground: rgb(38, 38, 38)\\ndropdown-background: rgb(38, 38, 38)\\ndropdown-border: rgb(255, 255, 255)\\ndropdown-tab-background: rgba(0,0,0,.1)\\ndropdown-tab-background-selected: rgba(255,255,255,1)\\ndropzone-background: #9eebcf\\nexternal-link-background: inherit\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-foreground: rgb(179, 179, 255)\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: rgb(153, 153, 255)\\nfootnote-target-background: \u003C\u003Ccolour tag-foreground>>\\nforeground: rgb(179, 179, 179)\\nhighlight-background: #ffff78\\nhighlight-foreground: #000000\\nmessage-background: \u003C\u003Ccolour tag-foreground>>\\nmessage-border: #96ccff\\nmessage-foreground: \u003C\u003Ccolour tag-background>>\\nmodal-backdrop: rgb(179, 179, 179)\\nmodal-background: rgb(38, 38, 38)\\nmodal-border: rgba(0,0,0,.5)\\nmodal-footer-background: #f4f4f4\\nmodal-footer-border: rgba(0,0,0,.1)\\nmodal-header-border: rgba(0,0,0,.2)\\nmuted-foreground: rgb(255, 255, 255)\\nnotification-background: \u003C\u003Ccolour tag-foreground>>\\nnotification-border: \u003C\u003Ccolour tag-background>>\\npage-background: rgb(26, 26, 26)\\npre-background: rgb(25, 25, 25)\\npre-border: rgba(0,0,0,.2)\\nprimary: rgb(255, 201, 102)\\nselect-tag-background: \\nselect-tag-foreground: \\nsidebar-button-foreground: rgb(179, 179, 179)\\nsidebar-controls-foreground: rgb(153, 153, 153)\\nsidebar-controls-foreground-hover: \u003C\u003Ccolour tiddler-controls-foreground-hover>>\\nsidebar-foreground: rgb(141, 141, 141)\\nsidebar-foreground-shadow: transparent\\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\\nsidebar-tab-background-selected: rgb(26, 26, 26)\\nsidebar-tab-border: rgb(127, 127, 127)\\nsidebar-tab-border-selected: rgb(127, 127, 127)\\nsidebar-tab-divider: rgb(127, 127, 127)\\nsidebar-tab-foreground: rgb(179, 179, 179)\\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\\nsite-title-foreground: rgb(255, 201, 102)\\nstatic-alert-foreground: rgba(0,0,0,.3)\\ntab-background: rgba(0,0,0,0.125)\\ntab-background-selected: rgb(38, 38, 38)\\ntab-border: rgb(255, 201, 102)\\ntab-border-selected: rgb(255, 201, 102)\\ntab-divider: rgb(255, 201, 102)\\ntab-foreground: rgb(179, 179, 179)\\ntab-foreground-selected: rgb(179, 179, 179)\\ntable-border: rgba(255,255,255,.3)\\ntable-footer-background: rgba(0,0,0,.4)\\ntable-header-background: rgba(0,0,0,.1)\\ntag-background: rgb(255, 201, 102)\\ntag-foreground: rgb(25, 25, 25)\\ntestcase-accent-level-1: rgb(13, 52, 99)\\ntiddler-background: rgb(38, 38, 38)\\ntiddler-border: rgba(240, 196, 117, 0.7)\\ntiddler-controls-foreground: rgb(128, 128, 128)\\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\\ntiddler-editor-background: rgb(33, 33, 33)\\ntiddler-editor-border: rgb(63, 63, 63)\\ntiddler-editor-border-image: rgb(25, 25, 25)\\ntiddler-editor-fields-even: rgb(33, 33, 33)\\ntiddler-editor-fields-odd: rgb(28, 28, 28)\\ntiddler-info-background: rgb(43, 43, 43)\\ntiddler-info-border: rgb(25, 25, 25)\\ntiddler-info-tab-background: rgb(43, 43, 43)\\ntiddler-link-background: rgb(38, 38, 38)\\ntiddler-link-foreground: rgb(204, 204, 255)\\ntiddler-subtitle-foreground: rgb(255, 255, 255)\\ntiddler-title-foreground: rgb(255, 192, 76)\\ntoolbar-cancel-button: \\ntoolbar-close-button: \\ntoolbar-delete-button: \\ntoolbar-done-button: \\ntoolbar-edit-button: \\ntoolbar-info-button: \\ntoolbar-new-button: \\ntoolbar-options-button: \\ntoolbar-save-button: \\nuntagged-background: rgb(255, 255, 255)\\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\\n\},\$:/palettes/Vanilla\:{\title\:\$:/palettes/Vanilla\,\name\:\Vanilla\,\description\:\Pale and unobtrusive\,\tags\:\$:/tags/Palette\,\type\:\application/x-tiddler-dictionary\,\color-scheme\:\light\,\text\:\alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndiff-delete-background: #ffc9c9\\ndiff-delete-foreground: \u003C\u003Ccolour foreground>>\\ndiff-equal-background: \\ndiff-equal-foreground: \u003C\u003Ccolour foreground>>\\ndiff-insert-background: #aaefad\\ndiff-insert-foreground: \u003C\u003Ccolour foreground>>\\ndiff-invisible-background: \\ndiff-invisible-foreground: \u003C\u003Ccolour muted-foreground>>\\ndirty-indicator: #ff0000\\ndownload-background: #34c734\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\\ndropdown-tab-background-selected: #ffffff\\ndropdown-tab-background: #ececec\\ndropzone-background: rgba(0,200,0,0.7)\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nfootnote-target-background: #ecf2ff\\nforeground: #333333\\nhighlight-background: #ffff00\\nhighlight-foreground: #000000\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #bbbbbb\\nnetwork-activity-foreground: #448844\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f4f4f4\\npre-background: #f5f5f5\\npre-border: #cccccc\\nprimary: #5778d8\\nselection-background:\\nselection-foreground:\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: #aaaaaa\\nsidebar-foreground-shadow: #ffffff\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #f4f4f4\\nsidebar-tab-background: #e0e0e0\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: #e4e4e4\\nsidebar-tab-foreground-selected:\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: #444444\\nsidebar-tiddler-link-foreground: #999999\\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\\nstability-stable: #00b700\\nstability-experimental: #c07c00\\nstability-deprecated: #ff0000\\nstability-legacy: #0000ff\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #d8d8d8\\ntab-border-selected: #d8d8d8\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\\ntab-foreground: #666666\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #eecc66\\ntag-foreground: #ffffff\\ntestcase-accent-level-1: #c1eaff\\ntestcase-accent-level-2: #E3B740\\ntestcase-accent-level-3: #5FD564\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: \u003C\u003Ccolour background>>\\ntiddler-controls-foreground-hover: #888888\\ntiddler-controls-foreground-selected: #444444\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: #f8f8f8\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: #cccccc\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #c0c0c0\\ntiddler-title-foreground: #182955\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\nwikilist-background: #e5e5e5\\nwikilist-item: #ffffff\\nwikilist-info: #000000\\nwikilist-title: #666666\\nwikilist-title-svg: \u003C\u003Ccolour wikilist-title>>\\nwikilist-url: #aaaaaa\\nwikilist-button-open: #4fb82b\\nwikilist-button-open-hover: #009300\\nwikilist-button-reveal: #5778d8\\nwikilist-button-reveal-hover: #0000ff\\nwikilist-button-remove: #d85778\\nwikilist-button-remove-hover: #ff0000\\nwikilist-toolbar-background: #d3d3d3\\nwikilist-toolbar-foreground: #888888\\nwikilist-droplink-dragover: #ffc0c0\\nwikilist-button-background: #acacac\\nwikilist-button-foreground: #000000\},\$:/core/readme\:{\title\:\$:/core/readme\,\text\:\This plugin contains TiddlyWikis core components, comprising:\\n\\n* JavaScript code modules\\n* Icons\\n* Templates needed to create TiddlyWikis user interface\\n* British English (en-GB) translations of the localisable strings used by the core\\n\},\$:/library/sjcl.js/license\:{\title\:\$:/library/sjcl.js/license\,\type\:\text/plain\,\text\:\SJCL is open. You can use, modify and redistribute it under a BSD\\nlicense or under the GNU GPL, version 2.0.\\n\\n---------------------------------------------------------------------\\n\\nhttp://opensource.org/licenses/BSD-2-Clause\\n\\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\\nStanford University. All rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are\\nmet:\\n\\n1. Redistributions of source code must retain the above copyright\\nnotice, this list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright\\nnotice, this list of conditions and the following disclaimer in the\\ndocumentation and/or other materials provided with the distribution.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\AS\\nIS\\\ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\\n---------------------------------------------------------------------\\n\\nhttp://opensource.org/licenses/GPL-2.0\\n\\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\\nproject by the Stanford Computer Security Lab to build a secure,\\npowerful, fast, small, easy-to-use, cross-browser library for\\ncryptography in Javascript.\\n\\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\\nStanford University.\\n\\nThis program is free software; you can redistribute it and/or modify it\\nunder the terms of the GNU General Public License as published by the\\nFree Software Foundation; either version 2 of the License, or (at your\\noption) any later version.\\n\\nThis program is distributed in the hope that it will be useful, but\\nWITHOUT ANY WARRANTY; without even the implied warranty of\\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\\nPublic License for more details.\\n\\nYou should have received a copy of the GNU General Public License along\\nwith this program; if not, write to the Free Software Foundation, Inc.,\\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\},\$:/core/templates/MOTW.html\:{\title\:\$:/core/templates/MOTW.html\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline entity\\n\u003C!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\\n\u003C!-- saved from url(0021)https://tiddlywiki.com --> \},\$:/core/templates/alltiddlers.template.html\:{\title\:\$:/core/templates/alltiddlers.template.html\,\type\:\text/vnd.tiddlywiki-html\,\text\:\\u003C!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\\n\\n\u003C$set name\\\exportFilter\\\ value\\\!issystemsorttitle\\\>\\n\\n{{$:/core/templates/exporters/StaticRiver}}\\n\\n\u003C/$set>\\n\},\$:/core/templates/canonical-uri-external-image\:{\title\:\$:/core/templates/canonical-uri-external-image\,\text\:\\u003C!--\\n\\nThis template is used to assign the _canonical_uri field to external images.\\n\\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\\n\\n-->\\n./images/\u003C$view field\\\title\\\ format\\\doubleurlencoded\\\/>\},\$:/core/templates/canonical-uri-external-raw\:{\title\:\$:/core/templates/canonical-uri-external-raw\,\text\:\\u003C!--\\n\\nThis template is used to assign the _canonical_uri field to external raw files that are stored in the same directory\\n\\n-->\\n\u003C$view field\\\title\\\ format\\\doubleurlencoded\\\/>\},\$:/core/templates/canonical-uri-external-text\:{\title\:\$:/core/templates/canonical-uri-external-text\,\text\:\\u003C!--\\n\\nThis template is used to assign the _canonical_uri field to external text files.\\n\\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\\n\\n-->\\n./text/\u003C$view field\\\title\\\ format\\\doubleurlencoded\\\/>.tid\},\$:/core/templates/css-tiddler\:{\title\:\$:/core/templates/css-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\\n\\n-->`\u003Cstyle`\u003C$fields template data-tiddler-$name$\\\$encoded_value$\\\>\u003C/$fields>` type\\\text/css\\\>`\u003C$view field\\\text\\\ format\\\text\\\ />`\u003C/style>`\},\$:/core/templates/exporters/CsvFile\:{\title\:\$:/core/templates/exporters/CsvFile\,\tags\:\$:/tags/Exporter\,\description\:\{{$:/language/Exporters/CsvFile}}\,\extension\:\.csv\,\file-type\:\text/csv\,\text\:\\u003C$macrocall $name\\\csvtiddlers\\\ filter\u003C\u003CexportFilter>> format\\\quoted-comma-sep\\\ $output\\\text/raw\\\/>\\n\},\$:/core/templates/exporters/JsonFile\:{\title\:\$:/core/templates/exporters/JsonFile\,\tags\:\$:/tags/Exporter\,\description\:\{{$:/language/Exporters/JsonFile}}\,\extension\:\.json\,\file-type\:\application/json\,\text\:\\u003C$macrocall $name\\\jsontiddlers\\\ filter\u003C\u003CexportFilter>> $output\\\text/raw\\\/>\\n\},\$:/core/templates/exporters/StaticRiver\:{\title\:\$:/core/templates/exporters/StaticRiver\,\tags\:\$:/tags/Exporter\,\description\:\{{$:/language/Exporters/StaticRiver}}\,\extension\:\.html\,\text\:\\\\\define tv-config-static() yes\\n\\\\define tv-wikilink-template() #$uri_encoded$\\n\\\\define tv-config-toolbar-icons() no\\n\\\\define tv-config-toolbar-text() no\\n\\\\define tv-config-toolbar-class() tc-btn-invisible\\n\\\\rules only filteredtranscludeinline transcludeinline\\n\u003C!doctype html>\\n\u003Chtml>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content\\\{{$:/core/templates/version}}\\\ />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\>\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Ctitle>{{$:/core/wiki/title}}\u003C/title>\\n\u003Cdiv id\\\styleArea\\\>\\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\\n\u003C/div>\\n\u003Cstyle type\\\text/css\\\>\\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\\n\u003C/style>\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\\n\u003Csection class\\\tc-story-river tc-static-story-river\\\>\\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\\n\u003C/section>\\n\u003C/body>\\n\u003C/html>\\n\},\$:/core/templates/exporters/StaticRiver/Content\:{\title\:\$:/core/templates/exporters/StaticRiver/Content\,\text\:\\\\\define renderContent()\\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\\n\\\\end\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\u003C\u003CrenderContent>>\\n\},\$:/core/templates/exporters/TidFile\:{\title\:\$:/core/templates/exporters/TidFile\,\tags\:\$:/tags/Exporter\,\description\:\{{$:/language/Exporters/TidFile}}\,\extension\:\.tid\,\file-type\:\text/vnd.tiddlywiki\,\condition\:\\u003Ccount>compare:lte1\,\text\:\\\\\define renderContent()\\n{{{ $(exportFilter)$ +limit1 ||$:/core/templates/tid-tiddler}}}\\n\\\\end\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\u003C\u003CrenderContent>>\},\$:/core/save/all-external-js\:{\title\:\$:/core/save/all-external-js\,\text\:\\\\\whitespace trim\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\\\define saveTiddlerFilter()\\nistiddler -prefix$:/state/popup/ -prefix$:/temp/ -prefix$:/HistoryList -statuspendingplugin-typeimport -$:/core -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js +sorttitle $(publishFilter)$\\n\\\\end\\n\\n\u003C!-- Important: core library is provided by serving URI encoded $:/core/templates/tiddlywiki5.js -->\\n\\\\define defaultCoreURL() %24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\\n\\n\u003C$let coreURL{{{ coreURLisvariablethen\u003CcoreURL>else\u003CdefaultCoreURL> }}}>\\n\\t{{$:/core/templates/tiddlywiki5-external-js.html}}\\n\u003C/$let>\\n\},\$:/core/save/offline-external-js\:{\title\:\$:/core/save/offline-external-js\,\text\:\\\\\whitespace trim\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\\\define saveTiddlerFilter()\\nistiddler -prefix$:/state/popup/ -prefix$:/temp/ -prefix$:/HistoryList -statuspendingplugin-typeimport -$:/core -$:/plugins/tiddlywiki/filesystem -$:/plugins/tiddlywiki/tiddlyweb -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js +sorttitle $(publishFilter)$\\n\\\\end\\n\\\\define defaultCoreURL() tiddlywikicore-$(version)$.js\\n\u003C$let coreURL{{{ coreURLisvariablethen\u003CcoreURL>else\u003CdefaultCoreURL> }}}>\\n\\t{{$:/core/templates/tiddlywiki5-external-js.html}}\\n\u003C/$let>\\n\},\$:/core/templates/tiddlywiki.js/load-tiddler\:{\title\:\$:/core/templates/tiddlywiki.js/load-tiddler\,\text\:\_load(window,\u003C$macrocall $name\\\jsontiddler\\\ $output\\\text/raw\\\/>);\},\$:/core/templates/tiddlywiki5.js\:{\title\:\$:/core/templates/tiddlywiki5.js\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline codeinline\\n\\n`/*\\n`{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}`\\n*/\\n\\n$tw (typeof $tw undefined) ? Object.create(null) : $tw;\\n\\n$tw.preloadTiddlers $tw.preloadTiddlers || ;\\n\\n_load function(window,tiddler) {\\n\\t\\\use strict\\\;\\n\\tvar f;\\n\\t$tw.preloadTiddlers.push(tiddler);\\n\\tif(tiddler.library \\\yes\\\) {\\n\\t\\tvar module { exports:{} };\\n\\t\\tvar moduleName function moduleName(path) {\\n\\t\\t\\tvar word path.split(\\\/\\\).pop();\\n\\t\\t\\tword word.substring(0,word.indexOf(\\\.\\\)) || word;\\n\\t\\t\\treturn word;\\n\\t\\t}\\n\\t\\tf new Function(\\\module\\\,tiddler.text);\\n\\t\\tf(module);\\n\\t\\twindowmoduleName(tiddler.title) module.exports;\\n\\t} else {\\n\\t\\tf new Function(\\\window\\\,tiddler.text);\\n\\t\\tf(window);\\n\\t}\\n}\\n\\n/* ~~ Library modules ~~ */\\n\\n`{{{ issystemtypeapplication/javascriptlibraryyes ||$:/core/templates/tiddlywiki.js/load-tiddler}}}`\\n\\n/* ~~ Boot kernel prologue ~~ */\\n\\n`{{ $:/boot/bootprefix.js ||$:/core/templates/tiddlywiki.js/load-tiddler}}`\\n\\n/* ~~ Core tiddlers ~~ */\\n\\n`{{$:/core/templates/tiddlywiki5.js/tiddlers}}`\\n\\n/* ~~ Boot kernel ~~ */\\n\\n`{{ $:/boot/boot.js ||$:/core/templates/tiddlywiki.js/load-tiddler}}`\\n\},\$:/core/templates/tiddlywiki5.js/tiddlers\:{\title\:\$:/core/templates/tiddlywiki5.js/tiddlers\,\text\:\`\\n$tw.preloadTiddlerArray(`\u003C$text text\u003C\u003Cjsontiddlers \\\$:/core\\\>>/>`);\\n$tw.preloadTiddlerArray({\\n\\ttitle: \\\$:/config/SaveWikiButton/Template\\\,\\n\\ttext: \\\$:/core/save/offline-external-js\\\\\n});\\n`\\n\},\$:/core/templates/tiddlywiki5-external-js.html\:{\title\:\$:/core/templates/tiddlywiki5-external-js.html\,\text\:\\u003C$set name\\\saveTiddlerAndShadowsFilter\\\ filter\\\subfilter\u003CsaveTiddlerFilter> subfilter\u003CsaveTiddlerFilter>plugintiddlers\\\>\\n`\u003C!doctype html>\\n`{{$:/core/templates/MOTW.html}}`\u003Chtml lang\\\`\u003C$text text{{{ {$:/language}getname }}}/>`\\\>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003C!--~~ Raw markup for the top of the head section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/TopHead ||$:/core/templates/raw-static-tiddler}}}`\\n\u003Cmeta http-equiv\\\X-UA-Compatible\\\ content\\\IEEdge\\\/>\\n\u003Cmeta name\\\application-name\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content\\\`{{$:/core/templates/version}}`\\\ />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-capable\\\ content\\\yes\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-status-bar-style\\\ content\\\black-translucent\\\ />\\n\u003Cmeta name\\\mobile-web-app-capable\\\ content\\\yes\\\/>\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\ />\\n\u003Cmeta name\\\copyright\\\ content\\\`{{$:/core/copyright.txt}}`\\\ />\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Ctitle>`{{$:/core/wiki/title}}`\u003C/title>\\n\u003C!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\\n\\n\u003C!--~~ Raw markup ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/core/wiki/rawmarkup ||$:/core/templates/plain-text-tiddler}}}`\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkup ||$:/core/templates/plain-text-tiddler}}}`\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n\u003C!--~~ Raw markup for the top of the body section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/TopBody ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C!--~~ Static styles ~~-->\\n\u003Cdiv id\\\styleArea\\\>\\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\\n\u003C/div>\\n\u003C!--~~ Static content for Google and browsers without JavaScript ~~-->\\n\u003Cnoscript>\\n\u003Cdiv id\\\splashArea\\\>\\n`{{$:/core/templates/static.area}}`\\n\u003C/div>\\n\u003C/noscript>\\n\u003C!--~~ Ordinary tiddlers ~~-->\\n`{{$:/core/templates/store.area.template.html}}`\\n\u003C!--~~ Raw markup for the bottom of the body section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/BottomBody ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C!--~~ Load external JavaScripts ~~-->\\n\u003Cscript src\\\`{{{ \u003CcoreURL> }}}`\\\ onerror\\\alert(Error: Cannot load `{{{ \u003CcoreURL> }}}`);\\\>\u003C/script>\\n\u003C/body>\\n\u003C/html>`\\n\u003C/$set>\},\$:/core/templates/html-div-skinny-tiddler\:{\title\:\$:/core/templates/html-div-skinny-tiddler\,\text\:\\u003C!--\\n\\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\\n\\n-->`\u003Cdiv`\u003C$fields template $name$\\\$encoded_value$\\\>\u003C/$fields>`>\\n\u003Cpre>\u003C/pre>\\n\u003C/div>`\\n\},\$:/core/templates/html-div-tiddler\:{\title\:\$:/core/templates/html-div-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\\n\\n-->`\u003Cdiv`\u003C$fields template $name$\\\$encoded_value$\\\>\u003C/$fields>`>\\n\u003Cpre>`\u003C$view field\\\text\\\ format\\\htmltextencoded\\\ />`\u003C/pre>\\n\u003C/div>`\\n\},\$:/core/templates/html-json-skinny-tiddler\:{\title\:\$:/core/templates/html-json-skinny-tiddler\,\text\:\\u003C$text text\u003C\u003Cjoin>>/>\u003C$jsontiddler tiddler\u003C\u003CcurrentTiddler>> exclude\\\text\\\ escapeUnsafeScriptChars\\\yes\\\/>\\n\},\$:/core/templates/html-json-tiddler\:{\title\:\$:/core/templates/html-json-tiddler\,\text\:\\u003C$jsontiddler tiddler\u003C\u003CcurrentTiddler>> escapeUnsafeScriptChars\\\yes\\\/>\},\$:/core/templates/html-tiddler\:{\title\:\$:/core/templates/html-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddlers as raw HTML\\n\\n-->\u003C$view field\\\text\\\ format\\\htmlwikified\\\ />\},\$:/core/templates/javascript-tiddler\:{\title\:\$:/core/templates/javascript-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\\n\\n-->`\u003Cscript`\u003C$fields template data-tiddler-$name$\\\$encoded_value$\\\>\u003C/$fields>` type\\\text/javascript\\\>`\u003C$view field\\\text\\\ format\\\text\\\ />`\u003C/script>`\},\$:/core/templates/json-tiddler\:{\title\:\$:/core/templates/json-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddlers as raw JSON\\n\\n-->\u003C$text text\u003C\u003Cjsontiddler>>/>\},\$:/core/templates/module-tiddler\:{\title\:\$:/core/templates/module-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\\n\\n-->`\u003Cscript`\u003C$fields template data-tiddler-$name$\\\$encoded_value$\\\>\u003C/$fields>` type\\\text/javascript\\\ data-module\\\yes\\\>$tw.modules.define(\\\`\u003C$view field\\\title\\\ format\\\jsencoded\\\ />`\\\,\\\`\u003C$view field\\\module-type\\\ format\\\jsencoded\\\ />`\\\,function(module,exports,require) {`\u003C$view field\\\text\\\ format\\\text\\\ />`});\\n\u003C/script>`\},\$:/core/templates/plain-text-tiddler\:{\title\:\$:/core/templates/plain-text-tiddler\,\text\:\\u003C$view field\\\text\\\ format\\\text\\\ />\},\$:/core/templates/raw-static-tiddler\:{\title\:\$:/core/templates/raw-static-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddlers as static HTML\\n\\n-->\u003C$view field\\\text\\\ format\\\plainwikified\\\ />\},\$:/core/save/all\:{\title\:\$:/core/save/all\,\text\:\\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\\\define saveTiddlerFilter()\\nistiddler -prefix$:/state/popup/ -prefix$:/temp/ -prefix$:/HistoryList -statuspendingplugin-typeimport -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js +sorttitle $(publishFilter)$\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\},\$:/core/save/empty\:{\title\:\$:/core/save/empty\,\text\:\\\\\define saveTiddlerFilter()\\nissystem -prefix$:/state/popup/ -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js +sorttitle\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\},\$:/core/save/lazy-all\:{\title\:\$:/core/save/lazy-all\,\text\:\\\\\define saveTiddlerFilter()\\nissystem -prefix$:/state/popup/ -$:/HistoryList -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js istiddlertypeapplication/javascript +sorttitle\\n\\\\end\\n\\\\define skinnySaveTiddlerFilter()\\n!issystem -typeapplication/javascript\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\},\$:/core/save/lazy-images\:{\title\:\$:/core/save/lazy-images\,\text\:\\\\\define saveTiddlerFilter()\\nistiddler -prefix$:/state/popup/ -$:/HistoryList -$:/boot/boot.css -issystemtypeapplication/javascriptlibraryyes -$:/boot/boot.js -$:/boot/bootprefix.js -!issystemisimage +sorttitle \\n\\\\end\\n\\\\define skinnySaveTiddlerFilter()\\n!issystemisimage\\n\\\\end\\n{{$:/core/templates/tiddlywiki5.html}}\\n\},\$:/core/templates/server/static.sidebar.wikitext\:{\title\:\$:/core/templates/server/static.sidebar.wikitext\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-sidebar-scrollable\\\ style\\\overflow: auto;\\\ role\\\region\\\ aria-label{{$:/language/SideBar/Caption}}>\\n\u003Cdiv class\\\tc-sidebar-header\\\>\\n\u003Ch1 class\\\tc-site-title\\\>\\n\u003C$transclude tiddler\\\$:/SiteTitle\\\/>\\n\u003C/h1>\\n\u003Cdiv class\\\tc-site-subtitle\\\>\\n\u003C$transclude tiddler\\\$:/SiteSubtitle\\\/>\\n\u003C/div>\\n\u003Ch2>\\n\u003C/h2>\\n\u003Cdiv class\\\tc-sidebar-lists\\\>\\n\u003C$list filter{{$:/DefaultTiddlers}}>\\n\u003Cdiv class\\\tc-menu-list-subitem\\\>\\n\u003C$link>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/$link>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/div>\\n\u003C!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\\n\u003Ch2>\\n{{$:/language/SideBar/Recent/Caption}}\\n\u003C/h2>\\n\u003Cdiv class\\\tc-sidebar-lists\\\>\\n\u003C$macrocall $name\\\timeline\\\ format{{$:/language/RecentChanges/DateFormat}}/>\\n\u003C/div>\\n\u003C/div>\\n\u003C/div>\\n-->\\n\},\$:/core/templates/server/static.tiddler.html\:{\title\:\$:/core/templates/server/static.tiddler.html\,\text\:\\\\\whitespace trim\\n\\\\define tv-config-static() yes\\n\\\\define tv-wikilink-template() $uri_encoded$\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\u003Chtml>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content{{$:/core/templates/version}} />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-capable\\\ content\\\yes\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-status-bar-style\\\ content\\\black-translucent\\\ />\\n\u003Cmeta name\\\mobile-web-app-capable\\\ content\\\yes\\\/>\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\>\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Clink rel\\\stylesheet\\\ href\\\%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\\\>\\n\u003Ctitle>\u003C$view field\\\caption\\\ format\\\plainwikified\\\>\u003C$view field\\\title\\\/>\u003C/$view>: \u003C$view tiddler\\\$:/core/wiki/title\\\ format\\\plainwikified\\\/>\u003C/title>\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n\u003C$transclude tiddler\\\$:/core/templates/server/static.sidebar.wikitext\\\ mode\\\inline\\\/>\\n\u003Csection class\\\tc-story-river\\\ role\\\main\\\>\\n\u003Cdiv class\\\tc-tiddler-frame\\\ role\\\article\\\>\\n\u003C$transclude tiddler\\\$:/core/templates/server/static.tiddler.wikitext\\\ mode\\\inline\\\/>\\n\u003C/div>\\n\u003C/section>\\n\u003C/body>\\n\u003C/html>\},\$:/core/templates/server/static.tiddler.wikitext\:{\title\:\$:/core/templates/server/static.tiddler.wikitext\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-tiddler-title tc-clearfix\\\>\\n\u003Cdiv class\\\tc-titlebar\\\>\\n\u003Ch2>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/h2>\\n\u003C/div>\\n\u003C/div>\\n\u003Cdiv class\\\tc-subtitle tc-clearfix\\\>\\n\u003C$link to{{!!modifier}}>\\n\u003C$view field\\\modifier\\\/>\\n\u003C/$link> \u003C$view field\\\modified\\\ format\\\date\\\ template{{$:/language/Tiddler/DateFormat}}/>\\n\u003C/div>\\n\u003Cdiv class\\\tc-tags-wrapper\\\ tc-clearfix>\\n\u003C$list filter\\\allcurrenttagssorttitle\\\>\\n\u003Ca href{{{ \u003CcurrentTiddler>encodeuricomponent }}}>\\n\u003C$macrocall $name\\\tag-pill\\\ tag\u003C\u003CcurrentTiddler>>/>\\n\u003C/a>\\n\u003C/$list>\\n\u003C/div>\\n\u003Cdiv class\\\tc-tiddler-body tc-clearfix\\\>\\n\u003C$transclude mode\\\block\\\/>\\n\u003C/div>\\n\},\$:/core/templates/single.tiddler.window\:{\title\:\$:/core/templates/single.tiddler.window\,\text\:\\\\\whitespace trim\\n\\\\define containerClasses()\\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\\n\\\\end\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\n\u003C$vars\\n\\ttv-config-toolbar-icons{{$:/config/Toolbar/Icons}}\\n\\ttv-config-toolbar-text{{$:/config/Toolbar/Text}}\\n\\ttv-config-toolbar-class{{$:/config/Toolbar/ButtonClass}}\\n\\ttv-show-missing-links{{$:/config/MissingLinks}}\\n\\tstoryviewTitle{{$:/view}}\\n\\tlanguageTitle{{{ {$:/language}getname }}}>\\n\\n\u003Cdiv class\u003C\u003CcontainerClasses>>>\\n\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\>\\n\\n\u003C$transclude tiddler\\\$:/core/ui/ViewTemplate/body\\\ mode\\\block\\\/>\\n\\n\u003C/$navigator>\\n\\n\u003C/div>\\n\\n\u003C/$vars>\\n\},\$:/core/templates/social-metadata\:{\title\:\$:/core/templates/social-metadata\,\tags\:\$:/tags/RawMarkupWikified\,\text\:\\\\\procedure meta-plain(name,source,name-attribute:\\\name\\\)\\n\\\\whitespace trim\\n\u003C%if \u003Csource>hastext %>\\n\\t<meta \u003C$text text\u003C\u003Cname-attribute>>/>\\\\u003C$text text\u003C\u003Cname>>/>\\\ content\\\\u003C$text text{{{ \u003Csource>gettextencodehtml }}}/>\\\>\\n\\t\u003C$text text{{{ charcode10 }}}/>\\n\u003C%endif%>\\n\\\\end meta-plain\\n\\n\\\\procedure meta-wikified(name,source,name-attribute:\\\name\\\)\\n\\\\whitespace trim\\n\u003C%if \u003Csource>hastext %>\\n\\t\u003C$wikify name\\\html\\\ text{{{ \u003Csource>gettext }}} output\\\text\\\>\\n\\t\\t<meta \u003C$text text\u003C\u003Cname-attribute>>/>\\\\u003C$text text\u003C\u003Cname>>/>\\\ content\\\\u003C$text text{{{ \u003Chtml>encodehtml }}}/>\\\>\\n\\t\\t\u003C$text text{{{ charcode10 }}}/>\\n\\t\u003C/$wikify>\\n\u003C%endif%>\\n\\\\end meta-wikified\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock conditional commentinline commentblock\\n\u003C\u003Cmeta-wikified \\\description\\\ \\\$:/SiteSubtitle\\\>>\\n\\n\u003C!-- Facebook Meta Tags -->\\n\u003C\u003Cmeta-plain \\\og:url\\\ \\\$:/SiteUrl\\\ \\\property\\\>>\\n\u003C\u003Cmeta-plain \\\og:type\\\ \\\website\\\ \\\property\\\>>\\n\u003C\u003Cmeta-wikified \\\og:title\\\ \\\$:/SiteTitle\\\ \\\property\\\>>\\n\u003C\u003Cmeta-wikified \\\og:description\\\ \\\$:/SiteSubtitle\\\ \\\property\\\>>\\n\u003C\u003Cmeta-plain \\\og:image\\\ \\\$:/SitePreviewUrl\\\ \\\property\\\>>\\n\\n\u003C!-- Twitter Meta Tags -->\\n\u003C\u003Cmeta-plain \\\twitter:card\\\ \\\summary_large_image\\\>>\\n\u003C\u003Cmeta-plain \\\twitter:domain\\\ \\\$:/SiteDomain\\\ \\\property\\\>>\\n\u003C\u003Cmeta-plain \\\twitter:url\\\ \\\$:/SiteUrl\\\ \\\property\\\>>\\n\u003C\u003Cmeta-wikified \\\twitter:title\\\ \\\$:/SiteTitle\\\>>\\n\u003C\u003Cmeta-wikified \\\twitter:description\\\ \\\$:/SiteSubtitle\\\>>\\n\u003C\u003Cmeta-plain \\\twitter:image\\\ \\\$:/SitePreviewUrl\\\>>\\n\},\$:/core/templates/split-recipe\:{\title\:\$:/core/templates/split-recipe\,\text\:\\u003C$list filter\\\!issystem\\\>\\ntiddler: \u003C$view field\\\title\\\ format\\\urlencoded\\\/>.tid\\n\u003C/$list>\\n\},\$:/core/templates/static-tiddler\:{\title\:\$:/core/templates/static-tiddler\,\text\:\\u003Ca name\u003C\u003CcurrentTiddler>>>\\n\u003C$transclude tiddler\\\$:/core/ui/ViewTemplate\\\/>\\n\u003C/a>\},\$:/core/templates/static.area\:{\title\:\$:/core/templates/static.area\,\text\:\\u003C$reveal type\\\nomatch\\\ state\\\$:/isEncrypted\\\ text\\\yes\\\>\\n{{{ allshadows+tiddlerstag$:/tags/RawStaticContent!hasdraft.of ||$:/core/templates/raw-static-tiddler}}}\\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/isEncrypted\\\ text\\\yes\\\>\\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\\n\u003C/$reveal>\\n\u003C!-- ensure splash screen isnt shown when JS is disabled -->\\n`\u003Cstyle>\\n.tc-remove-when-wiki-loaded {display: none;}\\n\u003C/style>`\\n\},\$:/core/templates/static.content\:{\title\:\$:/core/templates/static.content\,\text\:\\u003C!-- For Google, and people without JavaScript-->\\nThis TiddlyWiki|https://tiddlywiki.com contains the following tiddlers:\\n\\n\u003Cul>\\n\u003C$list filter\u003C\u003CsaveTiddlerFilter>>>\\n\u003Cli>\u003C$view field\\\title\\\ format\\\text\\\>\u003C/$view>\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\},\$:/core/templates/static.template.css\:{\title\:\$:/core/templates/static.template.css\,\text\:\{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\\n\\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\\n\},\$:/core/templates/static.template.html\:{\title\:\$:/core/templates/static.template.html\,\type\:\text/vnd.tiddlywiki-html\,\text\:\\\\\define tv-config-static() yes\\n\\\\define tv-wikilink-template() static/$uri_doubleencoded$.html\\n\\\\define tv-config-toolbar-icons() no\\n\\\\define tv-config-toolbar-text() no\\n\\\\define tv-config-toolbar-class() tc-btn-invisible\\n\\\\rules only filteredtranscludeinline transcludeinline\\n\u003C!doctype html>\\n\u003Chtml>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content\\\{{$:/core/templates/version}}\\\ />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-capable\\\ content\\\yes\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-status-bar-style\\\ content\\\black-translucent\\\ />\\n\u003Cmeta name\\\mobile-web-app-capable\\\ content\\\yes\\\/>\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\>\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Ctitle>{{$:/core/wiki/title}}\u003C/title>\\n\u003Cdiv id\\\styleArea\\\>\\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\\n\u003C/div>\\n\u003Cstyle type\\\text/css\\\>\\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\\n\u003C/style>\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\\n\u003C/body>\\n\u003C/html>\\n\},\$:/core/templates/static.tiddler.html\:{\title\:\$:/core/templates/static.tiddler.html\,\text\:\\\\\define tv-wikilink-template() $uri_doubleencoded$.html\\n\\\\define tv-config-static() yes\\n\\\\define tv-config-toolbar-icons() no\\n\\\\define tv-config-toolbar-text() no\\n\\\\define tv-config-toolbar-class() tc-btn-invisible\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n`\u003C!doctype html>\\n\u003Chtml>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content\\\`{{$:/core/templates/version}}`\\\ />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-capable\\\ content\\\yes\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-status-bar-style\\\ content\\\black-translucent\\\ />\\n\u003Cmeta name\\\mobile-web-app-capable\\\ content\\\yes\\\/>\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\>\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Clink rel\\\stylesheet\\\ href\\\static.css\\\>\\n\u003Ctitle>`\u003C$view field\\\caption\\\>\u003C$view field\\\title\\\/>\u003C/$view>: {{$:/core/wiki/title}}`\u003C/title>\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\\n\u003Csection class\\\tc-story-river tc-static-story-river\\\>\\n`\u003C$view tiddler\\\$:/core/ui/ViewTemplate\\\ format\\\htmlwikified\\\/>`\\n\u003C/section>\\n\u003C/body>\\n\u003C/html>\\n`\\n\},\$:/core/templates/store.area.template.html\:{\title\:\$:/core/templates/store.area.template.html\,\text\:\\\\\whitespace trim\\n\u003C!-- Unencrypted -->\\n\u003C$list filter\\\$:/isEncryptedgettextelsenomatchno\\\>\\n \u003C$list filter\\\storeAreaFormatisvariablegetvariableelsejsonmatchjson\\\>\\n \u003C!-- New-style JSON store area, with an old-style store area for compatibility with v5.1.x tooling -->\\n `\u003Cscript class\\\tiddlywiki-tiddler-store\\\ type\\\application/json\\\>`\\n \u003C$let newline{{{ charcode10 }}} join`,$(newline)$`>\\n \u003C$text text\u003C\u003Cnewline>>/>\\n \u003C$list filter\u003C\u003CsaveTiddlerFilter>> join\u003C\u003Cjoin>> template\\\$:/core/templates/html-json-tiddler\\\/>\\n \u003C$list filter\\\subfilter\u003CskinnySaveTiddlerFilter>\\\ template\\\$:/core/templates/html-json-skinny-tiddler\\\/>\\n \u003C$text text\u003C\u003Cnewline>>/>\\n \u003C/$let>\\n `\u003C/script>`\\n `\u003Cdiv id\\\storeArea\\\ style\\\display:none;\\\>`\\n `\u003C/div>`\\n \u003C/$list>\\n \u003C$list filter\\\storeAreaFormatisvariablegetvariableelsejsonmatchdiv\\\>\\n \u003C!-- Old-style DIV/PRE-based store area -->\\n \u003C$reveal type\\\nomatch\\\ state\\\$:/isEncrypted\\\ text\\\yes\\\>\\n `\u003Cdiv id\\\storeArea\\\ style\\\display:none;\\\>`\\n \u003C$list filter{{{ \u003CsaveTiddlerFilter> }}} template\\\$:/core/templates/html-div-tiddler\\\/>\\n \u003C$list filter\\\subfilter\u003CskinnySaveTiddlerFilter>\\\ template\\\$:/core/templates/html-div-skinny-tiddler\\\/>\\n `\u003C/div>`\\n \u003C/$reveal>\\n \u003C/$list>\\n\u003C/$list>\\n\u003C!-- Encrypted -->\\n\u003C$list filter\\\$:/isEncryptedgettextelsenomatchyes\\\>\\n `\u003C!--~~ Encrypted tiddlers ~~-->`\\n `\u003Cpre id\\\encryptedStoreArea\\\ type\\\text/plain\\\ style\\\display:none;\\\>`\\n \u003C$encrypt filter\u003C\u003CsaveTiddlerFilter>>/>\\n `\u003C/pre>`\\n\u003C/$list>\},\$:/core/templates/tid-tiddler\:{\title\:\$:/core/templates/tid-tiddler\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\\n\\n-->\u003C$fields excludetext bag template$name$: $value$\\n>\u003C/$fields>`\\n`\u003C$view field\\\text\\\ format\\\text\\\ />\},\$:/core/templates/tiddler-metadata\:{\title\:\$:/core/templates/tiddler-metadata\,\text\:\\u003C!--\\n\\nThis template is used for saving tiddler metadata *.meta files\\n\\n-->\u003C$fields excludetext bag template$name$: $value$\\n>\u003C/$fields>\},\$:/core/templates/tiddlywiki5.html\:{\title\:\$:/core/templates/tiddlywiki5.html\,\text\:\\u003C$set name\\\saveTiddlerAndShadowsFilter\\\ filter\\\subfilter\u003CsaveTiddlerFilter> subfilter\u003CsaveTiddlerFilter>plugintiddlers\\\>\\n`\u003C!doctype html>\\n`{{$:/core/templates/MOTW.html}}`\u003Chtml lang\\\`\u003C$text text{{{ {$:/language}getname }}}/>`\\\>\\n\u003Chead>\\n\u003Cmeta http-equiv\\\Content-Type\\\ content\\\text/html;charsetutf-8\\\ />\\n\u003C!--~~ Raw markup for the top of the head section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/TopHead ||$:/core/templates/raw-static-tiddler}}}`\\n\u003Cmeta http-equiv\\\X-UA-Compatible\\\ content\\\IEEdge\\\/>\\n\u003Cmeta name\\\application-name\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\generator\\\ content\\\TiddlyWiki\\\ />\\n\u003Cmeta name\\\tiddlywiki-version\\\ content\\\`{{$:/core/templates/version}}`\\\ />\\n\u003Cmeta name\\\viewport\\\ content\\\widthdevice-width, initial-scale1.0\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-capable\\\ content\\\yes\\\ />\\n\u003Cmeta name\\\apple-mobile-web-app-status-bar-style\\\ content\\\black-translucent\\\ />\\n\u003Cmeta name\\\mobile-web-app-capable\\\ content\\\yes\\\/>\\n\u003Cmeta name\\\format-detection\\\ content\\\telephoneno\\\ />\\n\u003Cmeta name\\\copyright\\\ content\\\`{{$:/core/copyright.txt}}`\\\ />\\n\u003Clink id\\\faviconLink\\\ rel\\\shortcut icon\\\ href\\\favicon.ico\\\>\\n\u003Ctitle>`{{$:/core/wiki/title}}`\u003C/title>\\n\u003C!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\\n\\n\u003C!--~~ Raw markup ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/core/wiki/rawmarkup ||$:/core/templates/plain-text-tiddler}}}\\n{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkup ||$:/core/templates/plain-text-tiddler}}}\\n{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C/head>\\n\u003Cbody class\\\tc-body\\\>\\n\u003C!--~~ Raw markup for the top of the body section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/TopBody ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C!--~~ Static styles ~~-->\\n\u003Cdiv id\\\styleArea\\\>\\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\\n\u003C/div>\\n\u003C!--~~ Static content for Google and browsers without JavaScript ~~-->\\n\u003Cnoscript>\\n\u003Cdiv id\\\splashArea\\\>\\n`{{$:/core/templates/static.area}}`\\n\u003C/div>\\n\u003C/noscript>\\n\u003C!--~~ Ordinary tiddlers ~~-->\\n`{{$:/core/templates/store.area.template.html}}`\\n\u003C!--~~ Library modules ~~-->\\n\u003Cdiv id\\\libraryModules\\\ style\\\display:none;\\\>\\n`{{{ issystemtypeapplication/javascriptlibraryyes ||$:/core/templates/javascript-tiddler}}}`\\n\u003C/div>\\n\u003C!--~~ Boot kernel prologue ~~-->\\n\u003Cdiv id\\\bootKernelPrefix\\\ style\\\display:none;\\\>\\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\\n\u003C/div>\\n\u003C!--~~ Boot kernel ~~-->\\n\u003Cdiv id\\\bootKernel\\\ style\\\display:none;\\\>\\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\\n\u003C/div>\\n\u003C!--~~ Raw markup for the bottom of the body section ~~-->\\n`{{{ enlist\u003CsaveTiddlerAndShadowsFilter>tag$:/tags/RawMarkupWikified/BottomBody ||$:/core/templates/raw-static-tiddler}}}`\\n\u003C/body>\\n\u003C/html>`\\n\u003C/$set>\\n\},\$:/core/templates/version\:{\title\:\$:/core/templates/version\,\text\:\\u003C\u003Cversion>>\},\$:/core/templates/wikified-tiddler\:{\title\:\$:/core/templates/wikified-tiddler\,\text\:\\u003C$transclude />\},\$:/core/ui/AboveStory/tw2-plugin-check\:{\title\:\$:/core/ui/AboveStory/tw2-plugin-check\,\tags\:\$:/tags/AboveStory\,\text\:\\\\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\\n\u003C$list filter\\\allsystem+tiddlerstagsystemConfiglimit1\\\>\\n\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n\u003C\u003Clingo Warning>>\\n\\n\u003Cul>\\n\\n\u003C$list filter\\\allsystem+tiddlerstagsystemConfig\\\>\\n\\n\u003Cli>\\n\\n\u003C$link>\u003C$view field\\\title\\\/>\u003C/$link>\\n\\n\u003C/li>\\n\\n\u003C/$list>\\n\\n\u003C/ul>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\},\$:/core/ui/Actions/new-image\:{\title\:\$:/core/ui/Actions/new-image\,\tags\:\$:/tags/Actions\,\description\:\create a new image tiddler\,\text\:\\\\\whitespace trim\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ type{{{ {$:/config/NewImageType}addprefiximage/ }}}/>\\n\},\$:/core/ui/Actions/new-journal\:{\title\:\$:/core/ui/Actions/new-journal\,\tags\:\$:/tags/Actions\,\description\:\create a new journal tiddler\,\text\:\\\\\whitespace trim\\n\\\\function get-tags() \u003CtextFieldTags> \u003CtagsFieldTags> +join \\n\u003C$let journalTitleTemplate{{$:/config/NewJournal/Title}} textFieldTags{{$:/config/NewJournal/Tags}} tagsFieldTags{{$:/config/NewJournal/Tags!!tags}} journalText{{$:/config/NewJournal/Text}}>\\n\u003C$wikify name\\\journalTitle\\\ text\\\\u003C$transclude $variablenow format\u003C\u003CjournalTitleTemplate>>/>\\\>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CjournalTitle>> text\\\\\\>\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ title\u003C\u003CjournalTitle>> tags\u003C\u003Cget-tags>> text{{{ \u003CjournalTitle>get }}}/>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CjournalTitle>> text\\\\\\>\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ title\u003C\u003CjournalTitle>> tags\u003C\u003Cget-tags>> text\u003C\u003CjournalText>>/>\\n\u003C/$reveal>\\n\u003C/$wikify>\\n\u003C/$let>\\n\},\$:/core/ui/Actions/new-tiddler\:{\title\:\$:/core/ui/Actions/new-tiddler\,\tags\:\$:/tags/Actions\,\description\:\create a new empty tiddler\,\text\:\\\\\whitespace trim\\n\\\\function get-tags() \u003CtextFieldTags> \u003CtagsFieldTags> +join \\n\u003C$let textFieldTags{{$:/config/NewTiddler/Tags}} tagsFieldTags{{$:/config/NewTiddler/Tags!!tags}}>\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ tags\u003C\u003Cget-tags>>/>\\n\u003C/$let>\\n\},\$:/core/ui/AdvancedSearch/Filter\:{\title\:\$:/core/ui/AdvancedSearch/Filter\,\tags\:\$:/tags/AdvancedSearch\,\caption\:\{{$:/language/Search/Filter/Caption}}\,\text\:\\\\\procedure lingo-base() $:/language/Search/\\n\\\\procedure set-next-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\after\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\\\n/>\\n\\\\end\\n\\n\\\\procedure set-previous-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\before\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\\\n/>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions()\\n\\\\whitespace trim\\n\u003C$list filter\\\{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}\\\>\\n\\t\u003C$list-empty>\\n\\t\\t\u003C$action-deletetiddler $filter\\\$:/temp/advancedsearch $:/temp/advancedsearch/input $:/temp/advancedsearch/selected-item\\\/>\\n\\t\u003C/$list-empty>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ text{{$:/temp/advancedsearch}}/>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\procedure input-accept-actions()\\n\\\\whitespace trim\\n\u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\>\\n\\t\u003C$list-empty>\\n\\t\\t\u003C$list filter\\\\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow\\\>\\n\\t\\t\\t\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\\n\\t\\t\u003C/$list>\\n\\t\u003C$/list-empty>\\n\\t\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\procedure input-accept-variant-actions()\\n\\\\whitespace trim\\n\u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\>\\n\\t\u003C$list-empty>\\n\\t\\t\u003C$list filter\\\\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow\\\>\\n\\t\\t\\t\u003C$list filter\\\\u003C__tiddler__>gettextminlength1\\\>\\n\\t\\t\\t\\t\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list-empty>\\n\\t\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\\n\\t\\t\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\\n\\t\u003C/$list>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo Filter/Hint>>\\n\\n\u003Cdiv class\\\tc-search tc-advanced-search\\\>\\n\\t\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>> class\\\tc-small-gap-right\\\>\\n\\t\\t\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>>>\\n\\t\\t\\t\u003C$transclude $variable\\\keyboard-driven-input\\\\\n\\t\\t\\t\\ttiddler\\\$:/temp/advancedsearch/input\\\\\n\\t\\t\\t\\tstoreTitle\\\$:/temp/advancedsearch\\\\\n\\t\\t\\t\\trefreshTitle\\\$:/temp/advancedsearch/refresh\\\\\n\\t\\t\\t\\tselectionStateTitle\\\$:/temp/advancedsearch/selected-item\\\\\n\\t\\t\\t\\ttype\\\search\\\\\n\\t\\t\\t\\ttag\\\input\\\\\n\\t\\t\\t\\tfocus{{$:/config/Search/AutoFocus}}\\n\\t\\t\\t\\tconfigTiddlerFilter\\\$:/temp/advancedsearch\\\\\n\\t\\t\\t\\tfirstSearchFilterField\\\text\\\\\n\\t\\t\\t\\tinputAcceptActions\u003C\u003Cinput-accept-actions>>\\n\\t\\t\\t\\tinputAcceptVariantActions\u003C\u003Cinput-accept-variant-actions>>\\n\\t\\t\\t\\tinputCancelActions\u003C\u003Ccancel-search-actions>>\\n\\t\\t\\t/>\\n\\t\\t\u003C/$keyboard>\\n\\t\u003C/$keyboard>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/AdvancedSearch/FilterButton!hasdraft.of\\\>\\n\\t\\t\u003C$transclude/>\\n\\t\u003C/$list>\\n\u003C/div>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\ tag\\\div\\\ class\\\tc-search-results\\\>\\n\\t\u003C$set name\\\resultCount\\\ value\\\\u003C$count filter{{$:/temp/advancedsearch}}/>\\\>\\n\\t\\t\u003Cp>\u003C\u003Clingo Filter/Matches>>\u003C/p>\\n\\t\\t\u003C$list filter{{$:/temp/advancedsearch}}>\\n\\t\\t\\t\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList -$:/temp/advancedsearch/selected-itemgettext :andthenelsetc-list-item-selected }}}>\\n\\t\\t\\t\\t\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\\t\\t\\t\u003C/span>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$set>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear\:{\title\:\$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear\,\tags\:\$:/tags/AdvancedSearch/FilterButton\,\text\:\\\\\whitespace trim\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C\u003Ccancel-search-actions>>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\\\\\\\.tc-advanced-search input\\\\\\\\\ />\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete\:{\title\:\$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete\,\tags\:\$:/tags/AdvancedSearch/FilterButton\,\text\:\\\\\whitespace trim\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button tooltip{{$:/language/Buttons/DeleteTiddlers/Hint}} popup\u003C\u003Cqualify \\\$:/state/filterDeleteDropdown\\\>> class\\\tc-btn-invisible\\\>\\n{{$:/core/images/delete-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/filterDeleteDropdown\\\>> type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-block-dropdown-wrapper\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-edit-type-dropdown\\\>\\n\u003Cdiv class\\\tc-dropdown-item-plain\\\>\\n\u003C$set name\\\resultCount\\\ value\\\\\\\\\\u003C$count filter{{$:/temp/advancedsearch}}/>\\\\\\\\\>\\n{{$:/language/ConfirmDeleteTiddlers}}\\n\u003C/$set>\\n\u003C/div>\\n\u003Cdiv class\\\tc-dropdown-item-plain\\\>\\n\u003C$button class\\\tc-btn\\\>\\n\u003C$action-deletetiddler $filter{{$:/temp/advancedsearch}}/>\\n{{$:/language/Buttons/DeleteTiddlers/Hint}}\\n\u003C/$button>\\n\u003C/div>\\n\u003C/div>\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown\:{\title\:\$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown\,\tags\:\$:/tags/AdvancedSearch/FilterButton\,\text\:\\\\\whitespace trim\\n\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/filterDropdown\\\>> class\\\tc-btn-invisible\\\>\\n{{$:/core/images/down-arrow}}\\n\u003C/$button>\\n\u003C/span>\\n\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/filterDropdown\\\>> type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\u003C$set name\\\tv-show-missing-links\\\ value\\\yes\\\>\\n\u003C$linkcatcher actions\\\\u003C$action-setfield $tiddler$:/temp/advancedsearch text\u003C\u003CnavigateTo>>/>\u003C$action-setfield $tiddler$:/temp/advancedsearch/input text\u003C\u003CnavigateTo>>/>\u003C$action-setfield $tiddler$:/temp/advancedsearch/refresh textyes/>\u003C$action-sendmessage $messagetm-focus-selector $param.tc-advanced-search input />\\\>\\n\u003Cdiv class\\\tc-block-dropdown-wrapper\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-edit-type-dropdown\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Filter!isdraft\\\>\\n\u003C$link to{{!!filter}}>\u003C$let tv-wikilinks\\\no\\\>\u003C$transclude field\\\description\\\/>\u003C/$let>\u003C/$link>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/div>\\n\u003C/$linkcatcher>\\n\u003C/$set>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Filter/FilterButtons/export\:{\title\:\$:/core/ui/AdvancedSearch/Filter/FilterButtons/export\,\tags\:\$:/tags/AdvancedSearch/FilterButton\,\text\:\\\\\whitespace trim\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$macrocall $name\\\exportButton\\\ exportFilter{{$:/temp/advancedsearch}} lingoBase\\\$:/language/Buttons/ExportTiddlers/\\\/>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Shadows\:{\title\:\$:/core/ui/AdvancedSearch/Shadows\,\tags\:\$:/tags/AdvancedSearch\,\caption\:\{{$:/language/Search/Shadows/Caption}}\,\first-search-filter\:\allshadowssearch\u003CuserInput>sorttitlelimit250 -$:/temp/advancedsearch -$:/temp/advancedsearch/input\,\text\:\\\\\procedure lingo-base() $:/language/Search/\\n\\n\\\\procedure set-next-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\after\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\\\end\\n\\n\\\\procedure set-previous-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\before\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}\\\\\n\\temptyMessage\\\\u003C$action-deletetiddler $filter$:/temp/advancedsearch $:/temp/advancedsearch/input $:/temp/advancedsearch/selected-item />\\\>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ text{{$:/temp/advancedsearch}}/>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\\n\u003C/$list>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-advanced-search input\\\/>\\n\\\\end\\n\\n\\\\procedure input-accept-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\\\n\\temptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\\>\\n\\t\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\procedure input-accept-variant-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\\\n\\temptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$list filter\u003Ctiddler>gettextminlength1>\u003C$action-sendmessage $messagetm-edit-tiddler $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\\>\\n\\t\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\\n\\t\\t\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\\n\u003C/$list>\u003C/$list>\\n\\\\end\\n\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo Shadows/Hint>>\\n\\n\u003Cdiv class\\\tc-search\\\>\\n\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>>>\\n\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>>>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\\\n\\ttiddler\\\$:/temp/advancedsearch/input\\\\\n\\tstoreTitle\\\$:/temp/advancedsearch\\\\\n\\trefreshTitle\\\$:/temp/advancedsearch/refresh\\\\\n\\tselectionStateTitle\\\$:/temp/advancedsearch/selected-item\\\\\n\\ttype\\\search\\\\\n\\ttag\\\input\\\\\n\\tfocus{{$:/config/Search/AutoFocus}}\\n\\tconfigTiddlerFilter\\\$:/core/ui/AdvancedSearch/Shadows\\\\\n\\tinputCancelActions\u003C\u003Ccancel-search-actions>>\\n\\tinputAcceptActions\u003C\u003Cinput-accept-actions>>\\n\\tinputAcceptVariantActions\u003C\u003Cinput-accept-variant-actions>>\\n\\tfilterMinLength{{$:/config/Search/MinLength}}/>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n \\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C\u003Ccancel-search-actions>>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\\n\u003C$list filter\\\{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit1\\\ emptyMessage\\\\u003Cdiv classtc-search-results>{{$:/language/Search/Search/TooShort}}\u003C/div>\\\ variable\\\listItem\\\>\\n\\n\u003C$set name\\\resultCount\\\ value{{{ allshadowssearch{$:/temp/advancedsearch} :except$:/temp/advancedsearch :except$:/temp/advancedsearch/input :andcount}}}>\\n\\n\u003Cdiv class\\\tc-search-results\\\>\\n\\n\u003C%if \u003CresultCount>match0 %>\\n\\t{{$:/language/Search/Matches/NoMatch}}\\n\u003C%else%>\\n\\t\u003C\u003Clingo Shadows/Matches>>\\n\u003C%endif%>\\n\\n\u003C$list filter\\\allshadowssearch{$:/temp/advancedsearch}sorttitlelimit250 :except$:/temp/advancedsearch :except$:/temp/advancedsearch/input\\\>\\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList :except$:/temp/advancedsearch/selected-itemgettext :andthenelsetc-list-item-selected }}}>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/span>\\n\u003C/$list>\\n\\n\u003C/div>\\n\\n\u003C/$set>\\n\\n\u003C/$list>\\n\\n\u003C/$reveal>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\match\\\ text\\\\\\>\\n\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/Standard\:{\title\:\$:/core/ui/AdvancedSearch/Standard\,\tags\:\$:/tags/AdvancedSearch\,\caption\:\{{$:/language/Search/Standard/Caption}}\,\text\:\\\\\procedure lingo-base() $:/language/Search/\\n\\\\procedure set-next-input-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab--1498284803\\\ tag\\\$:/tags/AdvancedSearch\\\ beforeafter\\\after\\\ defaultState\\\$:/core/ui/AdvancedSearch/System\\\ actions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure set-previous-input-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab--1498284803\\\ tag\\\$:/tags/AdvancedSearch\\\ beforeafter\\\before\\\ defaultState\\\$:/core/ui/AdvancedSearch/System\\\ actions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure next-search-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab/search-results/advancedsearch\\\ tag\\\$:/tags/SearchResults\\\ beforeafter\\\after\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/standard/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure previous-search-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab/search-results/advancedsearch\\\ tag\\\$:/tags/SearchResults\\\ beforeafter\\\before\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/standard/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure cancel-search-actions() \u003C$list filter\\\{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}\\\ emptyMessage\\\\u003C$action-deletetiddler $filter$:/temp/advancedsearch $:/temp/advancedsearch/input $:/temp/advancedsearch/selected-item />\\\>\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ text{{$:/temp/advancedsearch}}/>\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\u003C/$list>\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-advanced-search input\\\/>\\n\\n\\\\procedure input-accept-actions() \u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\ emptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\\>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\n\\n\\\\procedure input-accept-variant-actions() \u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\ emptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$list filter\u003Ctiddler>gettextminlength1>\u003C$action-sendmessage $messagetm-edit-tiddler $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\\>\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\n\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo Standard/Hint>>\\n\\n\u003Cdiv class\\\tc-search\\\>\\n\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>>>\\n\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>>>\\n\u003C$keyboard key\\\shift-alt-Right\\\ actions\u003C\u003Cnext-search-tab>>>\\n\u003C$keyboard key\\\shift-alt-Left\\\ actions\u003C\u003Cprevious-search-tab>>>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\\\n\\ttiddler\\\$:/temp/advancedsearch/input\\\\\n\\tstoreTitle\\\$:/temp/advancedsearch\\\\\n\\trefreshTitle\\\$:/temp/advancedsearch/refresh\\\\\n\\tselectionStateTitle\\\$:/temp/advancedsearch/selected-item\\\\\n\\ttype\\\search\\\\\n\\ttag\\\input\\\\\n\\tfocus{{$:/config/Search/AutoFocus}}\\n\\tinputCancelActions\u003C\u003Ccancel-search-actions>>\\n\\tinputAcceptActions\u003C\u003Cinput-accept-actions>>\\n\\tinputAcceptVariantActions\u003C\u003Cinput-accept-variant-actions>>\\n\\tconfigTiddlerFilter\\\$:/state/advancedsearch/standard/currentTab!ismissinggettext :else{$:/config/SearchResults/Default}\\\\\n\\tfilterMinLength{{$:/config/Search/MinLength}}/>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n \\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C\u003Ccancel-search-actions>>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$list\\n\\tfilter\\\{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit1\\\\\n\\temptyMessage\\\\u003Cdiv classtc-search-results>{{$:/language/Search/Search/TooShort}}\u003C/div>\\\\\n\\tvariable\\\listItem\\\>\\n\u003C$vars\\n\\tuserInput{{{ $:/temp/advancedsearchgettext }}}\\n\\tconfigTiddler{{{ $:/state/advancedsearch/standard/currentTab!ismissinggettext :else{$:/config/SearchResults/Default} }}}\\n\\tsearchListState\\\$:/temp/advancedsearch/selected-item\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/SearchResults!hasdraft.ofbutfirstlimit1\\\>\\n\u003C$list-empty>\\n\u003C$list filterallshadows+tiddlerstag$:/tags/SearchResults!hasdraft.of>\u003C$transclude mode\\\block\\\/>\u003C/$list>\\n\u003C/$list-empty>\\n\u003C$transclude $variable\\\tabs\\\\\n\\ttabsList\\\allshadows+tiddlerstag$:/tags/SearchResults!hasdraft.of\\\\\n\\tdefault{{$:/config/SearchResults/Default}}\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/standard/currentTab text\u003C\u003CcurrentTab>>/>\\\\\n\\texplicitState\\\$:/state/tab/search-results/advancedsearch\\\ />\\n\u003C/$list>\\n\u003C/$vars>\\n\u003C/$list>\\n\u003C/$reveal>\\n\},\$:/core/ui/AdvancedSearch/System\:{\title\:\$:/core/ui/AdvancedSearch/System\,\tags\:\$:/tags/AdvancedSearch\,\caption\:\{{$:/language/Search/System/Caption}}\,\first-search-filter\:\issystemsearch\u003CuserInput>sorttitlelimit250 :except$:/temp/advancedsearch :except$:/temp/advancedsearch/input :except$:/temp/advancedsearch/selected-item\,\text\:\\\\\procedure lingo-base() $:/language/Search/\\n\\\\procedure set-next-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\after\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\\\end\\n\\n\\\\procedure set-previous-input-tab()\\n\u003C$transclude $variable\\\change-input-tab\\\\\n\\tstateTitle\\\$:/state/tab--1498284803\\\\\n\\ttag\\\$:/tags/AdvancedSearch\\\\\n\\tbeforeafter\\\before\\\\\n\\tdefaultState\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/advancedsearch/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}\\\\\n\\temptyMessage\\\\u003C$action-deletetiddler $filter$:/temp/advancedsearch $:/temp/advancedsearch/input $:/temp/advancedsearch/selected-item />\\\>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ text{{$:/temp/advancedsearch}}/>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\\n\u003C/$list>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-advanced-search input\\\/>\\n\\\\end\\n\\n\\\\procedure input-accept-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\\\n\\temptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\\>\\n\\t\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\procedure input-accept-variant-actions()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\\\n\\temptyMessage\\\\u003C$list filter\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow>\u003C$list filter\u003Ctiddler>gettextminlength1>\u003C$action-sendmessage $messagetm-edit-tiddler $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\\>\\n\\t\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\\n\\t\\t\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\\n\u003C/$list>\u003C/$list>\\n\\\\end\\n\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo System/Hint>>\\n\\n\u003Cdiv class\\\tc-search\\\>\\n\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>>>\\n\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>>>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\\\n\\ttiddler\\\$:/temp/advancedsearch/input\\\\\n\\tstoreTitle\\\$:/temp/advancedsearch\\\\\n\\trefreshTitle\\\$:/temp/advancedsearch/refresh\\\\\n\\tselectionStateTitle\\\$:/temp/advancedsearch/selected-item\\\\\n\\ttype\\\search\\\\\n\\ttag\\\input\\\\\n\\tfocus{{$:/config/Search/AutoFocus}}\\n\\tconfigTiddlerFilter\\\$:/core/ui/AdvancedSearch/System\\\\\n\\tinputCancelActions\u003C\u003Ccancel-search-actions>>\\n\\tinputAcceptActions\u003C\u003Cinput-accept-actions>>\\n\\tinputAcceptVariantActions\u003C\u003Cinput-accept-variant-actions>>\\n\\tfilterMinLength{{$:/config/Search/MinLength}}/>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n \\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C\u003Ccancel-search-actions>>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\nomatch\\\ text\\\\\\>\\n\\n\u003C$list filter\\\{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit1\\\ emptyMessage\\\\u003Cdiv classtc-search-results>{{$:/language/Search/Search/TooShort}}\u003C/div>\\\ variable\\\listItem\\\>\\n\\n\u003C$set name\\\resultCount\\\ value{{{ issystemsearch{$:/temp/advancedsearch} :except$:/temp/advancedsearch :except$:/temp/advancedsearch/input :except$:/temp/advancedsearch/selected-item +count }}}>\\n\\n\u003Cdiv class\\\tc-search-results\\\>\\n\\n\u003C%if \u003CresultCount>match0 %>\\n\\t{{$:/language/Search/Matches/NoMatch}}\\n\u003C%else%>\\n\\t\u003C\u003Clingo System/Matches>>\\n\u003C%endif%>\\n\\n\u003C$list filter\\\issystemsearch{$:/temp/advancedsearch}sorttitlelimit250 :except$:/temp/advancedsearch :except$:/temp/advancedsearch/input :except$:/temp/advancedsearch/selected-item\\\>\\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList :except$:/temp/advancedsearch/selected-itemgettext :andthenelsetc-list-item-selected }}}>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/span>\\n\u003C/$list>\\n\\n\u003C/div>\\n\\n\u003C/$set>\\n\\n\u003C/$list>\\n\\n\u003C/$reveal>\\n\\n\u003C$reveal state\\\$:/temp/advancedsearch\\\ type\\\match\\\ text\\\\\\>\\n\\n\u003C/$reveal>\\n\},\$:/AdvancedSearch\:{\title\:\$:/AdvancedSearch\,\icon\:\$:/core/images/advanced-search-button\,\color\:\#bbb\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-advanced-search\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/AdvancedSearch!hasdraft.of\\\ default\\\$:/core/ui/AdvancedSearch/System\\\ actions\\\\\\\\\\u003C$action-setfield $tiddler\\\$:/state/advancedsearch/currentTab\\\ text\u003C\u003CcurrentTab>>/>\\\\\\\\\ explicitState\\\$:/state/tab--1498284803\\\/>\\n\u003C/div>\\n\},\$:/core/ui/AlertTemplate\:{\title\:\$:/core/ui/AlertTemplate\,\code-body\:\yes\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-alert\\\>\\n\u003Cdiv class\\\tc-alert-toolbar\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\u003C$action-deletetiddler $tiddler\u003C\u003CcurrentTiddler>>/>{{$:/core/images/cancel-button}}\u003C/$button>\\n\u003C/div>\\n\u003Cdiv class\\\tc-alert-subtitle\\\>\\n\u003C$wikify name\\\format\\\ text\u003C\u003Clingo Tiddler/DateFormat>>>\\n\u003C$view field\\\component\\\/>\\n - \\n\u003C$view field\\\modified\\\ format\\\date\\\ template\u003C\u003Cformat>>/>\\n \\n\u003C$reveal type\\\nomatch\\\ state\\\!!count\\\ text\\\\\\>\\n\u003Cspan class\\\tc-alert-highlight\\\>\\n({{$:/language/Count}}: \u003C$view field\\\count\\\/>)\\n\u003C/span>\\n\u003C/$reveal>\\n\u003C/$wikify>\\n\u003C/div>\\n\u003Cdiv class\\\tc-alert-body\\\>\\n\\n\u003C$transclude/>\\n\\n\u003C/div>\\n\u003C/div>\\n\},\$:/core/ui/BinaryWarning\:{\title\:\$:/core/ui/BinaryWarning\,\text\:\\\\\define lingo-base() $:/language/BinaryWarning/\\n\u003C\u003Clingo Prompt>>\\n\},\$:/core/ui/VisibleTransclude\:{\title\:\$:/core/ui/VisibleTransclude\,\text\:\\u003C!--\\nImport this component to make all the child transclusions visible.\\n\\nBlock transclusions are shown in red, and inline transclusions are shown in green.\\n-->\\n\\\\widget $transclude()\\n\u003C!-- Use a parameters widget so that we can access the `$params` data -->\\n\u003C$parameters tiddler\\\\\\ $$tiddler\\\\\\ mode\\\\\\ $$mode\\\\\\ $parseMode\\\@parseMode\\\ $params\\\@params\\\>\\n\\t\u003C!-- Replicate the logic of the transclude widget to determine the output mode, and hence the tag and colour to use for output -->\\n\\t\u003C$let\\n\\t\\tmode{{{ $modeisvariablethen\u003C$mode>!isblank :elsemodeisvariablethen\u003Cmode>!isblank :else\u003C@parseMode> }}}\\n\\t\\toutputTag{{{ \u003Cmode>matchinlinethenspanelsediv }}}\\n\\t\\toutputColour{{{ \u003Cmode>matchinlinethengreenelsered }}}\\n\\t>\\n\\t\\t\u003C!-- Use divs or spans according to the mode -->\\n\\t\\t\u003C$genesis $type\u003C\u003CoutputTag>> style\\\color:white;padding:4px;\\\ style.background\u003C\u003CoutputColour>>>\\n\\t\\t\\t\u003C$genesis $type\u003C\u003CoutputTag>> style\\\display: inline-block;\\\>\\n\\t\\t\\t\\t\u003Cdiv style\\\background:white;color:black;font-size: 12px;line-height:1.2;text-align:left;font-weight:normal;padding:4px;margin:4px;\\\>\\n\\t\\t\\t\\t\\t\u003C!-- Render the parameters to the transclusion -->\\n\\t\\t\\t\\t\\t\u003C$list filter\\\\u003C@params>jsonindexes\\\ emptyMessage\\\(none)\\\>\\n\\t\\t\\t\\t\\t\\t\u003Cdiv>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C$text text\\\: \\\/>\u003C$text text{{{ \u003C@params>jsonget\u003CcurrentTiddler> }}}/>\\n\\t\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C/$genesis>\\n\\t\\t\\t\u003C$genesis $type\u003C\u003CoutputTag>> style\\\background:white;color:black;padding:4px;\\\>\\n\\t\\t\\t\\t\u003C!-- Look for a parameter starting with $ to determine if we are in legacy mode -->\\n\\t\\t\\t\\t\u003C$list filter\\\\u003C@params>jsonindexes :filter\u003CcurrentTiddler>prefix$ +limit1\\\ variable\\\ignore\\\ emptyMessage\\\\\\\\\\\n\\t\\t\\t\\t\\t\u003C!-- Legacy mode: we render the transclusion without a dollar sign for recursionMarker and mode -->\\n\\t\\t\\t\\t\\t\u003C$genesis $type\\\$transclude\\\ $remappable\\\no\\\ $names\\\\u003C@params>jsonindexes\\\ $values\\\\u003C@params>jsonindexes :map\u003C@params>jsonget\u003CcurrentTiddler>\\\ recursionMarker\\\no\\\ mode\u003C\u003Cmode>> $$fillignore\\\yes\\\>\\n\\t\\t\\t\\t\\t\\t\u003C!-- Reach back up to the grandparent transclusion to get the correct slot value -->\\n\\t\\t\\t\\t\\t\\t\u003C$slot $name\\\ts-raw\\\/>\\n\\t\\t\\t\\t\\t\u003C/$genesis>\\n\\t\\t\\t\\t\\\\\\\\\>\\n\\t\\t\\t\\t\\t\u003C!-- Non-legacy mode: we use dollar signs for the recursionMarker and mode -->\\n\\t\\t\\t\\t\\t\u003C$genesis $type\\\$transclude\\\ $remappable\\\no\\\ $names\\\\u003C@params>jsonindexes\\\ $values\\\\u003C@params>jsonindexes :map\u003C@params>jsonget\u003CcurrentTiddler>\\\ $$recursionMarker\\\no\\\ $$mode\u003C\u003Cmode>> $$fillignore\\\yes\\\>\\n\\t\\t\\t\\t\\t\\t\u003C!-- Reach back up to the grandparent transclusion to get the correct slot fill value -->\\n\\t\\t\\t\\t\\t\\t\u003C$slot $name\\\ts-raw\\\/>\\n\\t\\t\\t\\t\\t\u003C/$genesis>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$genesis>\\n\\t\\t\u003C/$genesis>\\n\\t\u003C/$let>\\n\u003C/$parameters>\\n\\\\end\\n\},\$:/core/ui/Components/plugin-info\:{\title\:\$:/core/ui/Components/plugin-info\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Plugins/\\n\\n\\\\define popup-state-macro()\\n$(qualified-state)$-$(currentTiddler)$\\n\\\\end\\n\\n\\\\define tabs-state-macro()\\n$(popup-state)$-$(pluginInfoType)$\\n\\\\end\\n\\n\\\\define plugin-icon-title()\\n$(currentTiddler)$/icon\\n\\\\end\\n\\n\\\\define plugin-disable-title()\\n$:/config/Plugins/Disabled/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define plugin-table-body(type,disabledMessage,default-popup-state)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-toggle\\\>\\n\\t\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cpopup-state>> text\\\yes\\\ default\\\\\\\\\$default-popup-state$\\\\\\\\\>\\n\\t\\t\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Cpopup-state>> setTo\\\yes\\\>\\n\\t\\t\\t{{$:/core/images/chevron-right}}\\n\\t\\t\u003C/$button>\\n\\t\u003C/$reveal>\\n\\t\u003C$reveal type\\\match\\\ state\u003C\u003Cpopup-state>> text\\\yes\\\ default\\\\\\\\\$default-popup-state$\\\\\\\\\>\\n\\t\\t\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Cpopup-state>> setTo\\\no\\\>\\n\\t\\t\\t{{$:/core/images/chevron-down}}\\n\\t\\t\u003C/$button>\\n\\t\u003C/$reveal>\\n\u003C/div>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-icon\\\>\\n\\t\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003Cplugin-icon-title>>>\\n\\t\\t\u003C$transclude tiddler\\\$:/core/images/plugin-generic-$type$\\\/>\\n\\t\u003C/$transclude>\\n\u003C/div>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-description\\\>\\n\\t\u003Ch1>\\n\\t\\t\u003C$text text{{{ \u003CcurrentTiddler>getname ~\u003CcurrentTiddler>split/last1 }}}/>: \u003C$view field\\\description\\\>\u003C$view field\\\title\\\/>\u003C/$view> $disabledMessage$\\n\\t\u003C/h1>\\n\\t\u003Ch2>\\n\\t\\t\u003C$view field\\\title\\\/>\\n\\t\u003C/h2>\\n\\t\u003Ch2>\\n\\t\\t\u003Cdiv>\\n\\t\\t\\t\u003C%if \u003CcurrentTiddler>getstabilitymatchSTABILITY_0_DEPRECATED %>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-deprecated\\\>\u003C\u003Clingo \\\Stability/Deprecated\\\>>\u003C/span>\\n\\t\\t\\t\u003C%elseif \u003CcurrentTiddler>getstabilitymatchSTABILITY_1_EXPERIMENTAL %>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-experimental\\\>\u003C\u003Clingo \\\Stability/Experimental\\\>>\u003C/span>\\n\\t\\t\\t\u003C%elseif \u003CcurrentTiddler>getstabilitymatchSTABILITY_2_STABLE %>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-stable\\\>\u003C\u003Clingo \\\Stability/Stable\\\>>\u003C/span>\\n\\t\\t\\t\u003C%elseif \u003CcurrentTiddler>getstabilitymatchSTABILITY_3_LEGACY %>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-legacy\\\>\u003C\u003Clingo \\\Stability/Legacy\\\>>\u003C/span>\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\u003Cem>\u003C$view field\\\version\\\/>\u003C/em>\u003C/div>\\n\\t\u003C/h2>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define plugin-info(type,default-popup-state)\\n\\\\whitespace trim\\n\u003C$set name\\\popup-state\\\ value\u003C\u003Cpopup-state-macro>>>\\n\\t\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cplugin-disable-title>> text\\\yes\\\>\\n\\t\\t\u003C$link to{{!!title}} class\\\tc-plugin-info\\\>\\n\\t\\t\\t\u003C\u003Cplugin-table-body type:\\\$type$\\\ default-popup-state:\\\\\\\\\$default-popup-state$\\\\\\\\\>>\\n\\t\\t\u003C/$link>\\n\\t\u003C/$reveal>\\n\\t\u003C$reveal type\\\match\\\ state\u003C\u003Cplugin-disable-title>> text\\\yes\\\>\\n\\t\\t\u003C$link to{{!!title}} class\\\tc-plugin-info tc-plugin-info-disabled\\\>\\n\\t\\t\\t\u003C\u003Cplugin-table-body type:\\\$type$\\\ default-popup-state:\\\\\\\\\$default-popup-state$\\\\\\\\\ disabledMessage:\\\\u003C$macrocall $namelingo titleDisabled/Status/>\\\>>\\n\\t\\t\u003C/$link>\\n\\t\u003C/$reveal>\\n\\t\u003C$reveal type\\\match\\\ text\\\yes\\\ state\u003C\u003Cpopup-state>> default\\\\\\\\\$default-popup-state$\\\\\\\\\>\\n\\t\\t\u003Cdiv class\\\tc-plugin-info-dropdown\\\>\\n\\t\\t\\t\u003Cdiv class\\\tc-plugin-info-dropdown-body\\\>\\n\\t\\t\\t\\t\u003C$list filter\\\allcurrent -$:/core\\\>\\n\\t\\t\\t\\t\\t\u003Cdiv style\\\float:right;\\\>\\n\\t\\t\\t\\t\\t\\t\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cplugin-disable-title>> text\\\yes\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$button set\u003C\u003Cplugin-disable-title>> setTo\\\yes\\\ tooltip{{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label{{$:/language/ControlPanel/Plugins/Disable/Caption}}>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C\u003Clingo Disable/Caption>>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\\t\\t\\t\u003C$reveal type\\\match\\\ state\u003C\u003Cplugin-disable-title>> text\\\yes\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$button set\u003C\u003Cplugin-disable-title>> setTo\\\no\\\ tooltip{{$:/language/ControlPanel/Plugins/Enable Hint}} aria-label{{$:/language/ControlPanel/Plugins/Enable/Caption}}>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C\u003Clingo Enable/Caption>>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C$set name\\\tabsList\\\ filter\\\\u003CcurrentTiddler>list contents\\\>\\n\\t\\t\\t\\t\\t\u003C$macrocall $name\\\tabs\\\ state\u003C\u003Ctabs-state-macro>> tabsList\u003C\u003CtabsList>> default{{{ enlist\u003CtabsList> }}} template\\\$:/core/ui/PluginInfo\\\/>\\n\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C/$reveal>\\n\u003C/$set>\\n\\\\end\\n\\n\u003C$macrocall $name\\\plugin-info\\\ type\u003C\u003Cplugin-type>> default-popup-state\u003C\u003Cdefault-popup-state>>/>\\n\},\$:/core/ui/Components/tag-link\:{\title\:\$:/core/ui/Components/tag-link\,\text\:\\\\\whitespace trim\\n\u003C$link>\\n\u003C$set name\\\backgroundColor\\\ value{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}>\\n\u003Cspan style\u003C\u003Ctag-styles>> class\\\tc-tag-label\\\>\\n\u003C$view field\\\title\\\ format\\\text\\\/>\\n\u003C/span>\\n\u003C/$set>\\n\u003C/$link>\},\$:/core/ui/ControlPanel/Advanced\:{\title\:\$:/core/ui/ControlPanel/Advanced\,\tags\:\$:/tags/ControlPanel/Info\,\caption\:\{{$:/language/ControlPanel/Advanced/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Advanced/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Advanced!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/TiddlerFields\\\ explicitState\\\$:/state/tab--959111941\\\/>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/Appearance\:{\title\:\$:/core/ui/ControlPanel/Appearance\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/Appearance/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Appearance/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Appearance!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Theme\\\ explicitState\\\$:/state/tab--1963855381\\\/>\\n\u003C/div>\\n\},\$:/snippets/retain-story-ordering-button\:{\title\:\$:/snippets/retain-story-ordering-button\,\text\:\\u003C$button set\\\$:/DefaultTiddlers\\\ setTo{{$:/config/ControlPanel/Basics/DefaultTiddlers/RetainStory}} >\u003C\u003CcurrentTiddler>>\u003C/$button>\},\$:/core/ui/ControlPanel/Basics\:{\title\:\$:/core/ui/ControlPanel/Basics\,\tags\:\$:/tags/ControlPanel/Info\,\caption\:\{{$:/language/ControlPanel/Basics/Caption}}\,\text\:\\\\\procedure lingo-base() $:/language/ControlPanel/Basics/\\n\\\\whitespace trim\\n\\n|tc-max-width tc-edit-max-width|k\\n|\u003C\u003Clingo Version/Prompt>> |\u003C\u003Cversion>> |\\n|\u003C$link to\\\$:/SiteTitle\\\>\u003C\u003Clingo Title/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteTitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/SiteSubtitle\\\>\u003C\u003Clingo Subtitle/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteSubtitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/status/UserName\\\>\u003C\u003Clingo Username/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/status/UserName\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/config/AnimationDuration\\\>\u003C\u003Clingo AnimDuration/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/AnimationDuration\\\ default\\\\\\ tag\\\input\\\ type\\\number\\\/> |\\n|\u003C$link to\\\$:/DefaultTiddlers\\\>\u003C\u003Clingo DefaultTiddlers/Prompt>>\u003C/$link> |\u003C\u003Clingo DefaultTiddlers/TopHint>>\u003Cbr> \u003C$edit class\\\tc-edit-texteditor\\\ tiddler\\\$:/DefaultTiddlers\\\ autoHeight\\\yes\\\/>\u003Cbr>//\u003C\u003Clingo DefaultTiddlers/BottomHint>>// |\\n|\u003C$link to\\\$:/language/DefaultNewTiddlerTitle\\\>\u003C\u003Clingo NewTiddler/Title/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/language/DefaultNewTiddlerTitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/config/NewJournal/Title\\\>\u003C\u003Clingo NewJournal/Title/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/NewJournal/Title\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/config/NewJournal/Text\\\>\u003C\u003Clingo NewJournal/Text/Prompt>>\u003C/$link> |\u003C$edit tiddler\\\$:/config/NewJournal/Text\\\ class\\\tc-edit-texteditor\\\ default\\\\\\ autoHeight\\\yes\\\/> |\\n|\u003C$link to\\\$:/config/NewTiddler/Tags\\\>\u003C\u003Clingo NewTiddler/Tags/Prompt>>\u003C/$link> |\u003C$vars currentTiddler\\\$:/config/NewTiddler/Tags\\\ tagField\\\text\\\>{{||$:/core/ui/EditTemplate/tags}}\u003C$list filter\\\\u003CcurrentTiddler>tags +limit1\\\ variable\\\ignore\\\>\u003C$button tooltip{{$:/language/ControlPanel/Basics/RemoveTags/Hint}}>\u003C\u003Clingo RemoveTags>>\u003C$action-listops $tiddler\u003C\u003CcurrentTiddler>> $field\\\text\\\ $subfilter{{{ \u003CcurrentTiddler>gettags }}}/>\u003C$action-setfield $tiddler\u003C\u003CcurrentTiddler>> tags\\\\\\/>\u003C/$button>\u003C/$list>\u003C/$vars> |\\n|\u003C$link to\\\$:/config/NewJournal/Tags\\\>\u003C\u003Clingo NewJournal/Tags/Prompt>>\u003C/$link> |\u003C$vars currentTiddler\\\$:/config/NewJournal/Tags\\\ tagField\\\text\\\>{{||$:/core/ui/EditTemplate/tags}}\u003C$list filter\\\\u003CcurrentTiddler>tags +limit1\\\ variable\\\ignore\\\>\u003C$button tooltip{{$:/language/ControlPanel/Basics/RemoveTags/Hint}}>\u003C\u003Clingo RemoveTags>>\u003C$action-listops $tiddler\u003C\u003CcurrentTiddler>> $field\\\text\\\ $subfilter{{{ \u003CcurrentTiddler>gettags }}}/>\u003C$action-setfield $tiddler\u003C\u003CcurrentTiddler>> tags\\\\\\/>\u003C/$button>\u003C/$list>\u003C/$vars> |\\n|\u003C$link to\\\$:/config/AutoFocus\\\>\u003C\u003Clingo AutoFocus/Prompt>>\u003C/$link> |{{$:/snippets/minifocusswitcher}} |\\n|\u003C\u003Clingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\\n|\u003C\u003Clingo Tiddlers/Prompt>> |\u003C\u003Cshow-filter-count \\\!issystemsorttitle\\\>> |\\n|\u003C\u003Clingo Tags/Prompt>> |\u003C\u003Cshow-filter-count \\\tagssorttitle\\\>> |\\n|\u003C\u003Clingo SystemTiddlers/Prompt>> |\u003C\u003Cshow-filter-count \\\issystemsorttitle\\\>> |\\n|\u003C\u003Clingo ShadowTiddlers/Prompt>> |\u003C\u003Cshow-filter-count \\\allshadowssorttitle\\\>> |\\n|\u003C\u003Clingo OverriddenShadowTiddlers/Prompt>> |\u003C\u003Cshow-filter-count \\\istiddlerisshadowsorttitle\\\>> |\\n\},\$:/core/ui/ControlPanel/EditTemplateBody\:{\title\:\$:/core/ui/ControlPanel/EditTemplateBody\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/EditTemplateBody/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/EditTemplateBody/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/EditTemplateBodyFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/FieldEditor\:{\title\:\$:/core/ui/ControlPanel/FieldEditor\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/FieldEditor/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/FieldEditor/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/FieldEditorFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/StoryTiddler\:{\title\:\$:/core/ui/ControlPanel/StoryTiddler\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/StoryTiddler/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/StoryTiddler/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/StoryTiddlerTemplateFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/TiddlerColour\:{\title\:\$:/core/ui/ControlPanel/TiddlerColour\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/TiddlerColour/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/TiddlerColour/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/TiddlerColourFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/TiddlerIcon\:{\title\:\$:/core/ui/ControlPanel/TiddlerIcon\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/TiddlerIcon/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/TiddlerIcon/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/TiddlerIconFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/ViewTemplateBody\:{\title\:\$:/core/ui/ControlPanel/ViewTemplateBody\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/ViewTemplateBody/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/ViewTemplateBody/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/ViewTemplateBodyFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/ViewTemplateSubtitle\:{\title\:\$:/core/ui/ControlPanel/ViewTemplateSubtitle\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/ViewTemplateSubtitle/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/ViewTemplateSubtitle/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/ViewTemplateSubtitleFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/ViewTemplateTags\:{\title\:\$:/core/ui/ControlPanel/ViewTemplateTags\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/ViewTemplateTags/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/ViewTemplateTags/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/ViewTemplateTagsFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/ViewTemplateTitle\:{\title\:\$:/core/ui/ControlPanel/ViewTemplateTitle\,\tags\:\$:/tags/ControlPanel/Cascades\,\caption\:\{{$:/language/ControlPanel/ViewTemplateTitle/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/ViewTemplateTitle/\\n\\n\u003C\u003Clingo Hint>>\\n\\n{{$:/tags/ViewTemplateTitleFilter||$:/snippets/ListTaggedCascade}}\\n\},\$:/core/ui/ControlPanel/Cascades\:{\title\:\$:/core/ui/ControlPanel/Cascades\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/Cascades/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Cascades/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Cascades!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/StoryTiddler\\\/>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/EditorTypes\:{\title\:\$:/core/ui/ControlPanel/EditorTypes\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/EditorTypes/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/EditorTypes/\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003Ctable>\\n\u003Ctbody>\\n\u003Ctr>\\n\u003Cth>\u003C\u003Clingo Type/Caption>>\u003C/th>\\n\u003Cth>\u003C\u003Clingo Editor/Caption>>\u003C/th>\\n\u003C/tr>\\n\u003C$list filter\\\allshadows+tiddlersprefix$:/config/EditorTypeMappings/sorttitle\\\>\\n\u003Ctr>\\n\u003Ctd>\\n\u003C$link>\\n\u003C$list filter\\\allcurrentremoveprefix$:/config/EditorTypeMappings/\\\>\\n\u003C$text text{{!!title}}/>\\n\u003C/$list>\\n\u003C/$link>\\n\u003C/td>\\n\u003Ctd>\\n\u003C$view field\\\text\\\/>\\n\u003C/td>\\n\u003C/tr>\\n\u003C/$list>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/core/ui/ControlPanel/Info\:{\title\:\$:/core/ui/ControlPanel/Info\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/Info/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Info/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Info!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Basics\\\ explicitState\\\$:/state/tab--2112689675\\\/>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/KeyboardShortcuts\:{\title\:\$:/core/ui/ControlPanel/KeyboardShortcuts\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\\n\\n\\\\define new-shortcut(title)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-dropdown-item-plain\\\>\\n\u003C$edit-shortcut tiddler\\\$title$\\\ placeholder{{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus\\\true\\\ style\\\width:auto;\\\/>\\n \\n\u003C$button>\\n\u003C\u003Clingo Add/Caption>>\\n\u003C$action-listops\\n\\t$tiddler\\\$(shortcutTitle)$\\\\\n\\t$field\\\text\\\\\n\\t$subfilter\\\{$title$}\\\\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\\\$title$\\\\\n/>\\n\u003C/$button>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define shortcut-list-item(caption)\\n\\\\whitespace trim\\n\u003Ctd>\\n\u003C/td>\\n\u003Ctd style\\\text-align:right;font-size:0.7em;\\\>\\n\u003C\u003Clingo Platform/$caption$>>\\n\u003C/td>\\n\u003Ctd>\\n\u003Cdiv style\\\position:relative;\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/dropdown/$(shortcutTitle)$\\\>> class\\\tc-btn-invisible\\\>\\n{{$:/core/images/edit-button}}\\n\u003C/$button>\\n \\n\u003C$macrocall $name\\\displayshortcuts\\\ $output\\\text/html\\\ shortcuts{{$(shortcutTitle)$}} prefix\\\\u003Ckbd>\\\ separator\\\\u003C/kbd> \u003Ckbd>\\\ suffix\\\\u003C/kbd>\\\/>\\n\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/dropdown/$(shortcutTitle)$\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-block-dropdown-wrapper\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\\\>\\n\u003C$list\\n\\tfilter\\\list$(shortcutTitle)$!!textsorttitle\\\\\n\\tvariable\\\shortcut\\\\\n\\temptyMessage\\\\u003Cdiv classtc-dropdown-item-plain>//\u003C\u003Clingo NoShortcuts/Caption>>//\u003C/div>\\\>\\n\u003Cdiv class\\\tc-dropdown-item-plain\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ tooltip{{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\\n\u003C$action-listops\\n\\t$tiddler\\\$(shortcutTitle)$\\\\\n\\t$field\\\text\\\\\n\\t$subfilter\\\+remove\u003Cshortcut>\\\\\n/>\\n\u003Csmall>{{$:/core/images/close-button}}\u003C/small>\\n\u003C/$button>\\n \\n\u003Ckbd>\\n\u003C$macrocall $name\\\displayshortcuts\\\ $output\\\text/html\\\ shortcuts\u003C\u003Cshortcut>>/>\\n\u003C/kbd>\\n\u003C/div>\\n\u003C/$list>\\n\u003Chr/>\\n\u003C$macrocall $name\\\new-shortcut\\\ title\u003C\u003Cqualify \\\$:/state/new-shortcut/$(shortcutTitle)$\\\>>/>\\n\u003C/div>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C/td>\\n\\\\end\\n\\n\\\\define shortcut-list(caption,prefix)\\n\\\\whitespace trim\\n\u003Ctr>\\n\u003C$list filter\\\$prefix$$(shortcutName)$\\\ variable\\\shortcutTitle\\\>\\n\u003C\u003Cshortcut-list-item \\\$caption$\\\>>\\n\u003C/$list>\\n\u003C/tr>\\n\\\\end\\n\\n\\\\define shortcut-editor()\\n\\\\whitespace trim\\n\u003C\u003Cshortcut-list \\\All\\\ \\\$:/config/shortcuts/\\\>> \\n\u003C\u003Cshortcut-list \\\Mac\\\ \\\$:/config/shortcuts-mac/\\\>>\\n\u003C\u003Cshortcut-list \\\NonMac\\\ \\\$:/config/shortcuts-not-mac/\\\>>\\n\u003C\u003Cshortcut-list \\\Linux\\\ \\\$:/config/shortcuts-linux/\\\>>\\n\u003C\u003Cshortcut-list \\\NonLinux\\\ \\\$:/config/shortcuts-not-linux/\\\>>\\n\u003C\u003Cshortcut-list \\\Windows\\\ \\\$:/config/shortcuts-windows/\\\>>\\n\u003C\u003Cshortcut-list \\\NonWindows\\\ \\\$:/config/shortcuts-not-windows/\\\>>\\n\\\\end\\n\\n\\\\define shortcut-preview()\\n\u003C$macrocall $name\\\displayshortcuts\\\ $output\\\text/html\\\ shortcuts{{$(shortcutPrefix)$$(shortcutName)$}} prefix\\\\u003Ckbd>\\\ separator\\\\u003C/kbd> \u003Ckbd>\\\ suffix\\\\u003C/kbd>\\\/>\\n\\\\end\\n\\n\\\\define shortcut-item-inner()\\n\\\\whitespace trim\\n\u003Ctr>\\n\u003Ctd>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CdropdownStateTitle>> text\\\open\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C$action-setfield\\n\\t$tiddler\u003C\u003CdropdownStateTitle>>\\n\\t$value\\\open\\\\\n/>\\n{{$:/core/images/right-arrow}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CdropdownStateTitle>> text\\\open\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C$action-setfield\\n\\t$tiddler\u003C\u003CdropdownStateTitle>>\\n\\t$value\\\close\\\\\n/>\\n{{$:/core/images/down-arrow}}\\n\u003C/$button>\\n\u003C/$reveal>\\n \\n\u003C$text text\u003C\u003CshortcutName>>/>\\n\u003C/td>\\n\u003Ctd>\\n\u003C$transclude tiddler\\\$:/config/ShortcutInfo/$(shortcutName)$\\\/>\\n\u003C/td>\\n\u003Ctd>\\n\u003C$list filter\\\$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\\\ variable\\\shortcutPrefix\\\>\\n\u003C\u003Cshortcut-preview>>\\n\u003C/$list>\\n\u003C/td>\\n\u003C/tr>\\n\u003C$set name\\\dropdownState\\\ value{{$(dropdownStateTitle)$}}>\\n\u003C$list filter\\\\u003CdropdownState>matchopen\\\ variable\\\listItem\\\>\\n\u003C\u003Cshortcut-editor>>\\n\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define shortcut-item()\\n\\\\whitespace trim\\n\u003C$set name\\\dropdownStateTitle\\\ value\u003C\u003Cqualify \\\$:/state/dropdown/keyboardshortcut/$(shortcutName)$\\\>>>\\n\u003C\u003Cshortcut-item-inner>>\\n\u003C/$set>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003Ctable>\\n\u003Ctbody>\\n\u003C$list filter\\\allshadows+tiddlersremoveprefix$:/config/ShortcutInfo/\\\ variable\\\shortcutName\\\>\\n\u003C\u003Cshortcut-item>>\\n\u003C/$list>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/core/ui/ControlPanel/LoadedModules\:{\title\:\$:/core/ui/ControlPanel/LoadedModules\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/LoadedModules/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\u003C\u003Clingo LoadedModules/Hint>>\\n\\n{{$:/snippets/modules}}\\n\},\$:/core/ui/ControlPanel/Modals/AddPlugins\:{\title\:\$:/core/ui/ControlPanel/Modals/AddPlugins\,\subtitle\:\{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}\,\text\:\\\\\define install-plugin-actions()\\n\\\\whitespace trim\\n\u003C$action-sendmessage $message\\\tm-load-plugin-from-library\\\ url{{!!url}} title{{$(assetInfo)$!!original-title}}/>\\n\u003C$set name\\\url\\\ value{{!!url}}>\\n\u003C$set name\\\currentTiddler\\\ value\u003C\u003CassetInfo>>>\\n\u003C$list filter\\\enlist{!!dependents} {!!parent-plugin} +sortname\\\ variable\\\dependency\\\>\\n\u003C$action-sendmessage $message\\\tm-load-plugin-from-library\\\ url\u003C\u003Curl>> title\u003C\u003Cdependency>>/>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define install-plugin-button()\\n\\\\whitespace trim\\n\u003Cdiv>\\n\u003C$set name\\\libraryVersion\\\ value{{{ \u003CassetInfo>getversion }}}>\\n\u003C$set name\\\installedVersion\\\ value{{{ \u003CassetInfo>getoriginal-titlegetversion }}}>\\n\u003C$set name\\\reinstall-type\\\ value{{{ \u003ClibraryVersion>compare:version:eq\u003CinstalledVersion>thentc-reinstall \u003ClibraryVersion>compare:version:gt\u003CinstalledVersion>thentc-reinstall-upgrade \u003ClibraryVersion>compare:version:lt\u003CinstalledVersion>thentc-reinstall-downgrade }}}>\\n\u003C$button actions\u003C\u003Cinstall-plugin-actions>> class{{{ \u003CassetInfo>getoriginal-titlehasversionthen\u003Creinstall-type> tc-btn-invisible tc-install-plugin +join }}}>\\n{{$:/core/images/download-button}}\\n \\n\u003C$list filter\\\\u003CassetInfo>getoriginal-titlegetversion\\\ variable\\\ignore\\\ emptyMessage\\\{{$:/language/ControlPanel/Plugins/Install/Caption}}\\\>\\n\u003C$list filter\\\\u003ClibraryVersion>compare:version:gt\u003CinstalledVersion>\\\ variable\\\ignore\\\ emptyMessage\\\\\n\\\\whitespace trim\\n\u003C$list filter\u003ClibraryVersion>compare:version:lt\u003CinstalledVersion> variableignore emptyMessage{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}>\\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\\n\u003C/$list>\\n\\\>\\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/$button>\\n\u003Cdiv>\\n\u003C/div>\\n\u003C$reveal stateTitle\u003C\u003CassetInfo>> stateField\\\requires-reload\\\ type\\\match\\\ text\\\yes\\\>{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}\u003C/$reveal>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define popup-state-macro()\\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\\n\\\\end\\n\\n\\\\define display-plugin-info(type)\\n\\\\whitespace trim\\n\u003C$set name\\\popup-state\\\ value\u003C\u003Cpopup-state-macro>>>\\n\u003Cdiv class\\\tc-plugin-info\\\>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-toggle\\\>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cpopup-state>> text\\\yes\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Cpopup-state>> setTo\\\yes\\\>\\n{{$:/core/images/chevron-right}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cpopup-state>> text\\\yes\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Cpopup-state>> setTo\\\no\\\>\\n{{$:/core/images/chevron-down}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-icon\\\>\\n\u003C$list filter\\\\u003CassetInfo>hasicon\\\ emptyMessage\\\\\\\\\\u003C$transclude tiddler\\\$:/core/images/plugin-generic-$type$\\\/>\\\\\\\\\>\\n\u003Cimg src{{$(assetInfo)$!!icon}}/>\\n\u003C/$list>\\n\u003C/div>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-description\\\>\\n\u003Ch1>\u003Cstrong>\u003C$text text{{{ \u003CassetInfo>getname ~\u003CassetInfo>getoriginal-titlesplit/last1 }}}/>\u003C/strong>:\\n \\n\u003C$view tiddler\u003C\u003CassetInfo>> field\\\description\\\/>\\n\u003C/h1>\\n\u003Ch2>\u003C$view tiddler\u003C\u003CassetInfo>> field\\\original-title\\\/>\u003C/h2>\\n\u003Cdiv>\\n\u003C%if \u003CassetInfo>getstabilitymatchSTABILITY_0_DEPRECATED %>\\n\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-deprecated\\\>{{$:/language/ControlPanel/Plugins/Stability/Deprecated}}\u003C/span>\\n\u003C%elseif \u003CassetInfo>getstabilitymatchSTABILITY_1_EXPERIMENTAL %>\\n\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-experimental\\\>{{$:/language/ControlPanel/Plugins/Stability/Experimental}}\u003C/span>\\n\u003C%elseif \u003CassetInfo>getstabilitymatchSTABILITY_2_STABLE %>\\n\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-stable\\\>{{$:/language/ControlPanel/Plugins/Stability/Stable}}\u003C/span>\\n\u003C%elseif \u003CassetInfo>getstabilitymatchSTABILITY_3_LEGACY %>\\n\\t\u003Cspan class\\\tc-plugin-info-stability tc-plugin-info-stability-legacy\\\>{{$:/language/ControlPanel/Plugins/Stability/Legacy}}\u003C/span>\\n\u003C%endif%>\\n\u003Cem>\u003C$view tiddler\u003C\u003CassetInfo>> field\\\version\\\/>\u003C/em>\u003C/div>\\n\u003C$list filter\\\\u003CassetInfo>getoriginal-titlegetversion\\\ variable\\\installedVersion\\\>\u003Cdiv>\u003Cem>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\u003C/em>\u003C/div>\u003C/$list>\\n\u003C/div>\\n\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-buttons\\\>\\n\u003C\u003Cinstall-plugin-button>>\\n\u003C/div>\\n\u003C/div>\\n\u003C$set name\\\original-title\\\ value{{{ \u003CassetInfo>getoriginal-title }}}>\\n\u003C$reveal type\\\match\\\ text\\\yes\\\ state\u003C\u003Cpopup-state>>>\\n\u003Cdiv class\\\tc-plugin-info-dropdown\\\>\\n\u003C$list filter\\\enlist{!!dependents} \u003CcurrentTiddler>getparent-plugin +limit1 ~\u003CassetInfo>getoriginal-title!istiddler\\\ variable\\\ignore\\\>\\n\u003Cdiv class\\\tc-plugin-info-dropdown-message\\\>\\n\u003C$list filter\\\\u003CassetInfo>getoriginal-title!istiddler\\\>\\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\\n\u003C/$list>\\n\u003C$set name\\\currentTiddler\\\ value\u003C\u003CassetInfo>>>\\n\u003C$list filter\\\enlist{!!dependents} \u003CcurrentTiddler>getparent-plugin +limit1\\\ variable\\\ignore\\\>\\n\u003Cdiv>\\n{{$:/language/ControlPanel/Plugins/AlsoRequires}} \\n\u003C$list filter\\\enlist{!!dependents} {!!parent-plugin} +sortname\\\ variable\\\dependency\\\>\\n\u003C$text text\u003C\u003Cdependency>>/> \\n\u003C/$list>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/div>\\n\u003C/$list>\\n\u003Cdiv class\\\tc-plugin-info-dropdown-body\\\>\\n\u003C$transclude tiddler\u003C\u003CassetInfo>> field\\\readme\\\ mode\\\block\\\/>\\n\u003C/div>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-type$type$hasparent-pluginparent-plugin\u003Coriginal-title>limit1\\\ variable\\\ignore\\\>\\n\u003Cdiv class\\\tc-plugin-info-sub-plugins\\\>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-type$type$hasparent-pluginparent-plugin\u003Coriginal-title>sortname\\\ variable\\\assetInfo\\\>\\n\u003C\u003Cdisplay-plugin-info \\\$type$\\\>>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-type$type$hasparent-pluginparent-plugin\u003Coriginal-title>limit1\\\ variable\\\ignore\\\>\\n\u003C$reveal type\\\nomatch\\\ text\\\yes\\\ state\u003C\u003Cpopup-state>> tag\\\div\\\ class\\\tc-plugin-info-sub-plugin-indicator\\\>\\n\u003C$wikify name\\\count\\\ text\\\\\\\\\\u003C$count filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-type$type$hasparent-pluginparent-plugin\u003Coriginal-title>\\\/>\\\\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ set\u003C\u003Cpopup-state>> setTo\\\yes\\\>\\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\\n\u003C/$button>\\n\u003C/$wikify>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define load-plugin-library-button()\\n\\\\whitespace trim\\n\u003C$list filter\\\\u003CcurrentTiddler>getenabledelseyesmatchyes\\\ variable\\\ignore\\\>\\n\u003C$button class\\\tc-btn-big-green\\\>\\n\u003C$action-sendmessage $message\\\tm-load-plugin-library\\\ url{{!!url}} infoTitlePrefix\\\$:/temp/RemoteAssetInfo/\\\/>\\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\\n\u003C/$button>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define display-server-assets(type)\\n\\\\whitespace trim\\n{{$:/language/Search/Search}}:\\n \\n\u003C$edit-text tiddler\\\\\\\\\$:/temp/RemoteAssetSearch/$(currentTiddler)$\\\\\\\\\ default\\\\\\ type\\\search\\\ tag\\\input\\\/>\\n \\n\u003C$reveal state\\\\\\\\\$:/temp/RemoteAssetSearch/$(currentTiddler)$\\\\\\\\\ type\\\nomatch\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C$action-setfield $tiddler\\\\\\\\\$:/temp/RemoteAssetSearch/$(currentTiddler)$\\\\\\\\\ $field\\\text\\\ $value\\\\\\/>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003Cdiv class\\\tc-plugin-library-listing\\\>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-type$type$search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sortname\\\ variable\\\assetInfo\\\>\\n\u003C$list filter\\\$:/temp/RemoteAssetSearch/$(currentTiddler)$hastext ~\u003CassetInfo>!hasparent-plugin\\\ variable\\\ignore\\\>\u003C!-- Hide sub-plugins if were not searching -->\\n\u003C\u003Cdisplay-plugin-info \\\$type$\\\>>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define display-server-connection()\\n\\\\whitespace trim\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/ServerConnectionsuffix{!!url}\\\ variable\\\connectionTiddler\\\ emptyMessage\u003C\u003Cload-plugin-library-button>>>\\n\\n\u003C$set name\\\transclusion\\\ value\u003C\u003CconnectionTiddler>>>\\n\\n\u003C\u003Ctabs \\\$:/core/ui/ControlPanel/Plugins/Add/Updates $:/core/ui/ControlPanel/Plugins/Add/Plugins $:/core/ui/ControlPanel/Plugins/Add/Themes $:/core/ui/ControlPanel/Plugins/Add/Languages\\\ \\\$:/core/ui/ControlPanel/Plugins/Add/Plugins\\\>>\\n\\n\u003C/$set>\\n\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define close-library-button()\\n\\\\whitespace trim\\n\u003C$reveal typenomatch state$:/temp/ServerConnection/$(PluginLibraryURL)$ text>\\n\u003C$button classtc-btn-big-green>\\n\u003C$action-sendmessage $message\\\tm-unload-plugin-library\\\ url{{!!url}}/>\\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\\n\u003C$action-deletetiddler $filter\\\prefix$:/temp/ServerConnection/$(PluginLibraryURL)$prefix$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$\\\/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define plugin-library-listing()\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-tab-set\\\>\\n\u003C$set name\\\defaultTab\\\ value{{{ alltiddlers+shadowstag$:/tags/PluginLibrary }}}>\\n\u003Cdiv class\\\tc-tab-buttons\\\>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/PluginLibrary\\\>\\n\u003C$button set\u003C\u003Cqualify \\\$:/state/addplugins/tab\\\>> setTo\u003C\u003CcurrentTiddler>> default\u003C\u003CdefaultTab>> selectedClass\\\tc-tab-selected\\\>\\n\u003C$set name\\\tv-wikilinks\\\ value\\\no\\\>\\n\u003C$transclude field\\\caption\\\/>\\n\u003C/$set>\\n\u003C/$button>\\n\u003C/$list>\\n\u003C/div>\\n\u003Cdiv class\\\tc-tab-divider\\\/>\\n\u003Cdiv class\\\tc-tab-content\\\>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/PluginLibrary\\\>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cqualify \\\$:/state/addplugins/tab\\\>> text\u003C\u003CcurrentTiddler>> default\u003C\u003CdefaultTab>>>\\n\u003Ch2>\u003C$link>\u003C$transclude field\\\caption\\\>\u003C$view field\\\title\\\/>\u003C/$transclude>\u003C/$link>\u003C/h2>\\n//\u003C$view field\\\url\\\/>//\\n\u003C$transclude mode\\\block\\\/>\\n\u003C$set namePluginLibraryURL value{{!!url}}>\\n\u003C\u003Cclose-library-button>>\\n\u003C/$set>\\n \\n\u003C\u003Cdisplay-server-connection>>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/div>\\n\\\\end\\n\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\\\whitespace trim\\n\\n\u003Cdiv>\\n\u003C\u003Cplugin-library-listing>>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/Palette\:{\title\:\$:/core/ui/ControlPanel/Palette\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ControlPanel/Palette/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Palette/\\n\\n{{$:/snippets/paletteswitcher}}\\n\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/state/ShowPaletteEditor\\\ text\\\yes\\\>\\n\\n\u003C$button set\\\$:/state/ShowPaletteEditor\\\ setTo\\\yes\\\>\u003C\u003Clingo ShowEditor/Caption>>\u003C/$button>\\n\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/state/ShowPaletteEditor\\\ text\\\yes\\\>\\n\\n\u003C$button set\\\$:/state/ShowPaletteEditor\\\ setTo\\\no\\\>\u003C\u003Clingo HideEditor/Caption>>\u003C/$button>\\n{{$:/PaletteManager}}\\n\\n\u003C/$reveal>\\n\\n\},\$:/core/ui/ControlPanel/Parsing\:{\title\:\$:/core/ui/ControlPanel/Parsing\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/Parsing/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Parsing/\\n\\n\\\\define toggle(Type)\\n\\\\whitespace trim\\n\u003C$checkbox\\ntiddler\\\\\\\\\$:/config/WikiParserRules/$Type$/$(rule)$\\\\\\\\\\\nfield\\\text\\\\\nchecked\\\enable\\\\\nunchecked\\\disable\\\\\ndefault\\\enable\\\>\\n\u003Cspan class\\\tc-small-gap-left\\\>\u003C\u003Crule>>\u003C/span>\\n\u003C/$checkbox>\\n\\\\end\\n\\n\\\\define rules(type,Type)\\n\\\\whitespace trim\\n\u003C$list filter\\\wikiparserrules$type$\\\ variable\\\rule\\\>\\n\u003Cdd>\u003C\u003Ctoggle $Type$>>\u003C/dd>\\n\u003C/$list>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003Cdl>\\n\u003Cdt>\u003C\u003Clingo Pragma/Caption>>\u003C/dt>\\n\u003C\u003Crules pragma Pragma>>\\n\u003Cdt>\u003C\u003Clingo Inline/Caption>>\u003C/dt>\\n\u003C\u003Crules inline Inline>>\\n\u003Cdt>\u003C\u003Clingo Block/Caption>>\u003C/dt>\\n\u003C\u003Crules block Block>>\\n\u003C/dl>\},\$:/core/ui/ControlPanel/Plugins/Add/Languages\:{\title\:\$:/core/ui/ControlPanel/Plugins/Add/Languages\,\caption\:\{{$:/language/ControlPanel/Plugins/Languages/Caption}} (\u003C$count filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-typelanguage\\\/>)\,\text\:\\u003C\u003Cdisplay-server-assets language>>\\n\},\$:/core/ui/ControlPanel/Plugins/Add/Plugins\:{\title\:\$:/core/ui/ControlPanel/Plugins/Add/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (\u003C$count filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-typeplugin\\\/>)\,\text\:\\u003C\u003Cdisplay-server-assets plugin>>\\n\},\$:/core/ui/ControlPanel/Plugins/Add/Themes\:{\title\:\$:/core/ui/ControlPanel/Plugins/Add/Themes\,\caption\:\{{$:/language/ControlPanel/Plugins/Themes/Caption}} (\u003C$count filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}original-plugin-typetheme\\\/>)\,\text\:\\u003C\u003Cdisplay-server-assets theme>>\\n\},\$:/core/ui/ControlPanel/Plugins/Add/Updates\:{\title\:\$:/core/ui/ControlPanel/Plugins/Add/Updates\,\caption\:\\u003C$importvariables filter\\\$:/core/ui/ControlPanel/Plugins/Add/Updates\\\>{{$:/language/ControlPanel/Plugins/Updates/Caption}} (\u003C\u003Cupdate-count>>)\u003C/$importvariables>\,\text\:\\\\\define each-updateable-plugin(body)\\n\\\\whitespace trim\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/RemoteAssetInfoserver-url{!!url}sorttitle\\\ variable\\\assetInfo\\\>\\n\u003C$set name\\\libraryVersion\\\ value{{{ \u003CassetInfo>getversion }}}>\\n\u003C$list filter\\\\u003CassetInfo>getoriginal-titlehasversion!version\u003ClibraryVersion>\\\ variable\\\ignore\\\>\\n\u003C$set name\\\installedVersion\\\ value{{{ \u003CassetInfo>getoriginal-titlegetversion }}}>\\n\u003C$list filter\\\\u003Cinstalledversion>!match\u003ClibraryVersion>\\\ variable\\\ignore\\\>\\n$body$\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define update-all-actions()\\n\u003C$macrocall $name\\\each-updateable-plugin\\\ body\\\\\\\\\\\n\u003C\u003Cinstall-plugin-actions>>\\n\\\\\\\\\/>\\n\\\\end\\n\\n\\\\define update-count()\\n\u003C$wikify name\\\count-filter\\\ text\u003C\u003Ceach-updateable-plugin \\\[[\u003C$text text\u003C\u003CassetInfo>>/>\\\>>>\u003C$count filter\u003C\u003Ccount-filter>>/>\u003C/$wikify>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003C$button actions\u003C\u003Cupdate-all-actions>> class\\\tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\\\>\\n{{$:/core/images/download-button}}\\n \\n{{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\\n\u003C/$button>\\n\\n\u003Cdiv class\\\tc-plugin-library-listing\\\>\\n\u003C$macrocall $name\\\each-updateable-plugin\\\ body\\\\\\\\\\\n\u003C$macrocall $name\\\display-plugin-info\\\ type{{{ \u003CassetInfo>getoriginal-plugin-type }}}/>\\n\\\\\\\\\/>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/Plugins/AddPlugins\:{\title\:\$:/core/ui/ControlPanel/Plugins/AddPlugins\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Plugins/\\n\\\\whitespace trim\\n\\n\u003C$button message\\\tm-modal\\\ param\\\$:/core/ui/ControlPanel/Modals/AddPlugins\\\ tooltip{{$:/language/ControlPanel/Plugins/Add/Hint}} class\\\tc-btn-big-green tc-primary-btn\\\>\\n{{$:/core/images/download-button}}\\n \\n\u003C\u003Clingo Add/Caption>>\\n\u003C/$button>\\n\},\$:/core/ui/ControlPanel/Plugins/Installed/Languages\:{\title\:\$:/core/ui/ControlPanel/Plugins/Installed/Languages\,\tags\:\$:/tags/ControlPanel/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Languages/Caption}} (\u003C$count filter\\\!hasdraft.ofplugin-typelanguage\\\/>)\,\text\:\\u003C\u003Cplugin-table language>>\\n\},\$:/core/ui/ControlPanel/Plugins/Installed/Plugins\:{\title\:\$:/core/ui/ControlPanel/Plugins/Installed/Plugins\,\tags\:\$:/tags/ControlPanel/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (\u003C$count filter\\\!hasdraft.ofplugin-typeplugin\\\/>)\,\text\:\\u003C\u003Cplugin-table plugin>>\\n\},\$:/core/ui/ControlPanel/Plugins/Installed/Themes\:{\title\:\$:/core/ui/ControlPanel/Plugins/Installed/Themes\,\tags\:\$:/tags/ControlPanel/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Themes/Caption}} (\u003C$count filter\\\!hasdraft.ofplugin-typetheme\\\/>)\,\text\:\\u003C\u003Cplugin-table theme>>\\n\},\$:/core/ui/ControlPanel/Plugins\:{\title\:\$:/core/ui/ControlPanel/Plugins\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/Plugins/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Plugins/\\n\\n\\\\define plugin-table(type)\\n\\\\whitespace trim\\n\u003C$set name\\\plugin-type\\\ value\\\\\\\\\$type$\\\\\\\\\>\\n\u003C$set name\\\qualified-state\\\ value\u003C\u003Cqualify \\\$:/state/plugin-info\\\>>>\\n\u003C$list filter\\\!hasdraft.ofplugin-type$type$sortname\\\ emptyMessage\u003C\u003Clingo \\\Empty/Hint\\\>> template\\\$:/core/ui/Components/plugin-info\\\/>\\n\u003C/$set>\\n\u003C/$set>\\n\\\\end\\n\\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\\n\\n\u003C\u003Clingo Installed/Hint>>\\n\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\alltiddlers+shadowstag$:/tags/ControlPanel/Plugins!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Plugins/Installed/Plugins\\\ explicitState\\\$:/state/tab--86143343\\\/>\\n\},\$:/core/ui/ControlPanel/Saving/DownloadSaver\:{\title\:\$:/core/ui/ControlPanel/Saving/DownloadSaver\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\\n\\n\u003Cdiv class\\\tc-control-panel-saving\\\ data-setting-title\u003C\u003CcurrentTab>>>\\n\\n\u003C\u003Clingo Hint>>\\n\\n!!.tc-control-panel-accent \u003C$link to\\\$:/config/DownloadSaver/AutoSave\\\>\u003C\u003Clingo AutoSave/Hint>>\u003C/$link>\\n\\n\u003C$checkbox tiddler\\\$:/config/DownloadSaver/AutoSave\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\no\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo AutoSave/Description>>\u003C/span>\\n\u003C/$checkbox>\\n\u003C/div>\},\$:/core/ui/ControlPanel/Saving/General\:{\title\:\$:/core/ui/ControlPanel/Saving/General\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/General/Caption}}\,\list-before\:\\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/\\n\\n\u003Cdiv class\\\tc-control-panel-saving\\\ data-setting-title\u003C\u003CcurrentTab>>>\\n\\n{{$:/language/ControlPanel/Saving/General/Hint}}\\n\\n!!.tc-control-panel-accent \u003C$link to\\\$:/config/AutoSave\\\>\u003C\u003Clingo AutoSave/Caption>>\u003C/$link>\\n\\n\u003C\u003Clingo AutoSave/Hint>>\\n\\n\u003C$radio tiddler\\\$:/config/AutoSave\\\ value\\\yes\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo AutoSave/Enabled/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/AutoSave\\\ value\\\no\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo AutoSave/Disabled/Description>>\u003C/span>\\n\u003C/$radio>\\n\u003C/div>\},\$:/core/ui/ControlPanel/Saving/GitHub\:{\title\:\$:/core/ui/ControlPanel/Saving/GitHub\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\\n\\\\define service-name() ~GitHub\\n\\n\u003C\u003Clingo Description>>\\n\\n|\u003C\u003Clingo UserName>> |\u003C$edit-text tiddler\\\$:/GitHub/Username\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo GitHub/Password>> |\u003C$password name\\\github\\\/> |\\n|\u003C\u003Clingo Repo>> |\u003C$edit-text tiddler\\\$:/GitHub/Repo\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Branch>> |\u003C$edit-text tiddler\\\$:/GitHub/Branch\\\ default\\\main\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Path>> |\u003C$edit-text tiddler\\\$:/GitHub/Path\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Filename>> |\u003C$edit-text tiddler\\\$:/GitHub/Filename\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo ServerURL>> |\u003C$edit-text tiddler\\\$:/GitHub/ServerURL\\\ default\\\https://api.github.com\\\ tag\\\input\\\ type\\\url\\\/> |\},\$:/core/ui/ControlPanel/Saving/GitLab\:{\title\:\$:/core/ui/ControlPanel/Saving/GitLab\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\\n\\\\define service-name() ~GitLab\\n\\n\u003C\u003Clingo Description>>\\n\\n|\u003C\u003Clingo UserName>> |\u003C$edit-text tiddler\\\$:/GitLab/Username\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo GitLab/Password>> |\u003C$password name\\\gitlab\\\/> |\\n|\u003C\u003Clingo Repo>> |\u003C$edit-text tiddler\\\$:/GitLab/Repo\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Branch>> |\u003C$edit-text tiddler\\\$:/GitLab/Branch\\\ default\\\master\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Path>> |\u003C$edit-text tiddler\\\$:/GitLab/Path\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Filename>> |\u003C$edit-text tiddler\\\$:/GitLab/Filename\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo ServerURL>> |\u003C$edit-text tiddler\\\$:/GitLab/ServerURL\\\ default\\\https://gitlab.com/api/v4\\\ tag\\\input\\\ type\\\url\\\/> |\},\$:/core/ui/ControlPanel/Saving/TiddlySpot\:{\title\:\$:/core/ui/ControlPanel/Saving/TiddlySpot\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\\n\\n\\\\define siteURL(path)\\nhttp://$(userName)$.tiddlyspot.com/$path$/\\n\\\\end\\n\\\\define siteLink(path)\\n\\\\whitespace trim\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/UploadName\\\ text\\\\\\>\\n\u003C$set name\\\userName\\\ value{{$:/UploadName}}>\\n\u003C$reveal type\\\match\\\ state\\\$:/UploadURL\\\ text\\\\\\>\\n\u003C\u003CsiteURL $path$>>\\n\u003C/$reveal>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/UploadURL\\\ text\\\\\\>\\n\u003C$macrocall $nameresolvePath source{{$:/UploadBackupDir}} root{{$:/UploadURL}}/>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/$reveal>\\n\\\\end\\n\\n\u003C\u003Clingo Description>>\\n\\n|\u003C\u003Clingo UserName>> |\u003C$edit-text tiddler\\\$:/UploadName\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Password>> |\u003C$password name\\\upload\\\/> |\\n\\n\u003C\u003Clingo Advanced/Heading>>\\n\\n|\u003C\u003Clingo ServerURL>> |\u003C$edit-text tiddler\\\$:/UploadURL\\\ default\\\\\\ tag\\\input\\\ type\\\url\\\/> |\\n|\u003C\u003Clingo Filename>> |\u003C$edit-text tiddler\\\$:/UploadFilename\\\ default\\\index.html\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo UploadDir>> |\u003C$edit-text tiddler\\\$:/UploadDir\\\ default\\\.\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo BackupDir>> |\u003C$edit-text tiddler\\\$:/UploadBackupDir\\\ default\\\.\\\ tag\\\input\\\/> |\\n\\n\u003C\u003Clingo TiddlySpot/Hint>>\\n\},\$:/core/ui/ControlPanel/Saving/Gitea\:{\title\:\$:/core/ui/ControlPanel/Saving/Gitea\,\tags\:\$:/tags/ControlPanel/Saving\,\caption\:\{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\\n\\\\define service-name() Gitea\\n\\n\u003C\u003Clingo Description>>\\n\\n|\u003C\u003Clingo UserName>> |\u003C$edit-text tiddler\\\$:/Gitea/Username\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Gitea/Password>> |\u003C$password name\\\Gitea\\\/> |\\n|\u003C\u003Clingo Repo>> |\u003C$edit-text tiddler\\\$:/Gitea/Repo\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Branch>> |\u003C$edit-text tiddler\\\$:/Gitea/Branch\\\ default\\\master\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Path>> |\u003C$edit-text tiddler\\\$:/Gitea/Path\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo Filename>> |\u003C$edit-text tiddler\\\$:/Gitea/Filename\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C\u003Clingo ServerURL>> |\u003C$edit-text tiddler\\\$:/Gitea/ServerURL\\\ default\\\https://gitea/api/v1\\\ tag\\\input\\\ type\\\url\\\/> |\\n\},\$:/core/ui/ControlPanel/Saving\:{\title\:\$:/core/ui/ControlPanel/Saving\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/Saving/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Saving/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Saving!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Saving/General\\\ explicitState\\\$:/state/tab-2065006209\\\/>\\n\u003C/div>\\n\},\$:/core/buttonstyles/Borderless\:{\title\:\$:/core/buttonstyles/Borderless\,\tags\:\$:/tags/ToolbarButtonStyle\,\caption\:\{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}\,\text\:\tc-btn-invisible\},\$:/core/buttonstyles/Boxed\:{\title\:\$:/core/buttonstyles/Boxed\,\tags\:\$:/tags/ToolbarButtonStyle\,\caption\:\{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}\,\text\:\tc-btn-boxed\},\$:/core/buttonstyles/Rounded\:{\title\:\$:/core/buttonstyles/Rounded\,\tags\:\$:/tags/ToolbarButtonStyle\,\caption\:\{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}\,\text\:\tc-btn-rounded\},\$:/core/ui/ControlPanel/Settings/CamelCase\:{\title\:\$:/core/ui/ControlPanel/Settings/CamelCase\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/CamelCase/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/WikiParserRules/Inline/wikilink\\\\\n\\tfield\\\text\\\ checked\\\enable\\\ unchecked\\\disable\\\ default\\\enable\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/WikiParserRules/Inline/wikilink\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab\:{\title\:\$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab\,\caption\:\{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}\,\tags\:\$:/tags/ControlPanel/Settings\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\\n\\n\u003C$link to\\\$:/config/DefaultMoreSidebarTab\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/DefaultMoreSidebarTab\\\ class\\\tc-select\\\>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/MoreSideBar!hasdraft.of\\\>\\n\\t\\t\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$transclude field\\\caption\\\>\\n\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\u003C/$transclude>\\n\\t\\t\u003C/option>\\n\\t\u003C/$list>\\n\u003C/$select>\\n\},\$:/core/ui/ControlPanel/Settings/DefaultSidebarTab\:{\title\:\$:/core/ui/ControlPanel/Settings/DefaultSidebarTab\,\caption\:\{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}\,\tags\:\$:/tags/ControlPanel/Settings\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\\n\\\\whitespace trim\\n\\n\u003C$link to\\\$:/config/DefaultSidebarTab\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/DefaultSidebarTab\\\ class\\\tc-select\\\>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/SideBar!hasdraft.of\\\>\\n\\t\\t\u003Coption value\u003C\u003CcurrentTiddler>>>\\n\\t\\t\\t\u003C$transclude field\\\caption\\\>\\n\\t\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\u003C/$transclude>\\n\\t\\t\u003C/option>\\n\\t\u003C/$list>\\n\u003C/$select>\\n\},\$:/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab\:{\title\:\$:/core/ui/ControlPanel/Settings/DefaultTiddlerInfoTab\,\caption\:\{{$:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/Caption}}\,\tags\:\$:/tags/ControlPanel/Settings\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/DefaultTiddlerInfoTab/\\n\\n\u003C$link to\\\$:/config/TiddlerInfo/Default\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/TiddlerInfo/Default\\\ class\\\tc-select\\\>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TiddlerInfo!isdraft\\\>\\n\\t\\t\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$transclude field\\\caption\\\>\\n\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\u003C/$transclude>\\n\\t\\t\u003C/option>\\n\\t\u003C/$list>\\n\u003C/$select>\\n\},\$:/core/ui/ControlPanel/Settings/EditorToolbar\:{\title\:\$:/core/ui/ControlPanel/Settings/EditorToolbar\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/TextEditor/EnableToolbar\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/TextEditor/EnableToolbar\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/InfoPanelMode\:{\title\:\$:/core/ui/ControlPanel/Settings/InfoPanelMode\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\\n\\n\u003C$link to\\\$:/config/TiddlerInfo/Mode\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$radio tiddler\\\$:/config/TiddlerInfo/Mode\\\ value\\\popup\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Popup/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/TiddlerInfo/Mode\\\ value\\\sticky\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Sticky/Description>>\u003C/span>\\n\u003C/$radio>\\n\},\$:/core/ui/ControlPanel/Settings/LinkToBehaviour\:{\title\:\$:/core/ui/ControlPanel/Settings/LinkToBehaviour\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\\n\\n\u003C$link to\\\$:/config/Navigation/openLinkFromInsideRiver\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo \\\InsideRiver/Hint\\\>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/Navigation/openLinkFromInsideRiver\\\ class\\\tc-select\\\>\\n\\t\u003Coption value\\\above\\\>\u003C\u003Clingo \\\OpenAbove\\\>>\u003C/option>\\n\\t\u003Coption value\\\below\\\>\u003C\u003Clingo \\\OpenBelow\\\>>\u003C/option>\\n\\t\u003Coption value\\\top\\\>\u003C\u003Clingo \\\OpenAtTop\\\>>\u003C/option>\\n\\t\u003Coption value\\\bottom\\\>\u003C\u003Clingo \\\OpenAtBottom\\\>>\u003C/option>\\n\u003C/$select>\\n\\n\u003C$link to\\\$:/config/Navigation/openLinkFromOutsideRiver\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo \\\OutsideRiver/Hint\\\>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/Navigation/openLinkFromOutsideRiver\\\ class\\\tc-select\\\>\\n\\t\u003Coption value\\\top\\\>\u003C\u003Clingo \\\OpenAtTop\\\>>\u003C/option>\\n\\t\u003Coption value\\\bottom\\\>\u003C\u003Clingo \\\OpenAtBottom\\\>>\u003C/option>\\n\u003C/$select>\\n\},\$:/core/ui/ControlPanel/Settings/MissingLinks\:{\title\:\$:/core/ui/ControlPanel/Settings/MissingLinks\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/MissingLinks\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\>\\n\\t\u003C$link to\\\$:/config/MissingLinks\\\ class\\\tc-control-panel-item\\\>\\n\\t\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Description>>\u003C/span>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/NavigationAddressBar\:{\title\:\$:/core/ui/ControlPanel/Settings/NavigationAddressBar\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\\n\\n\u003C$link to\\\$:/config/Navigation/UpdateAddressBar\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$radio tiddler\\\$:/config/Navigation/UpdateAddressBar\\\ value\\\permaview\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Permaview/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/Navigation/UpdateAddressBar\\\ value\\\permalink\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Permalink/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/Navigation/UpdateAddressBar\\\ value\\\no\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo No/Description>>\u003C/span>\\n\u003C/$radio>\\n\},\$:/core/ui/ControlPanel/Settings/NavigationHistory\:{\title\:\$:/core/ui/ControlPanel/Settings/NavigationHistory\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\\n\\n\u003C$link to\\\$:/config/Navigation/UpdateHistory\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$radio tiddler\\\$:/config/Navigation/UpdateHistory\\\ value\\\yes\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Yes/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/Navigation/UpdateHistory\\\ value\\\no\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo No/Description>>\u003C/span>\\n\u003C/$radio>\\n\},\$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode\:{\title\:\$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/Navigation/Permalinkview/CopyToClipboard\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/Navigation/Permalinkview/CopyToClipboard\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo CopyToClipboard/Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\\n\u003C$checkbox tiddler\\\$:/config/Navigation/Permalinkview/UpdateAddressBar\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/Navigation/Permalinkview/UpdateAddressBar\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo UpdateAddressBar/Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation\:{\title\:\$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/Performance/Instrumentation\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\no\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/Performance/Instrumentation\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/RecentLimit\:{\title\:\$:/core/ui/ControlPanel/Settings/RecentLimit\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/RecentLimit/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\procedure lingo-base() $:/language/ControlPanel/Settings/RecentLimit/\\n\u003C\u003Clingo Hint>>\\n\\n|tc-table-no-border|k\\n|\u003C$link to\\\$:/config/RecentLimit\\\>\u003C\u003Clingo Caption>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/RecentLimit\\\ tag\\\input\\\ type\\\number\\\/> |\\n\},\$:/core/ui/ControlPanel/Settings/TitleLinks\:{\title\:\$:/core/ui/ControlPanel/Settings/TitleLinks\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\\n\\n\u003C$link to\\\$:/config/Tiddlers/TitleLinks\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo Hint>>\\n\u003C/$link>\\n\\n\u003C$radio tiddler\\\$:/config/Tiddlers/TitleLinks\\\ value\\\yes\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo Yes/Description>>\u003C/span>\\n\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/Tiddlers/TitleLinks\\\ value\\\no\\\>\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Clingo No/Description>>\u003C/span>\\n\u003C/$radio>\\n\},\$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle\:{\title\:\$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\\n\\n\u003C$link to\\\$:/config/Toolbar/ButtonClass\\\ class\\\tc-control-panel-item\\\>\\n\\t\u003C\u003Clingo \\\Hint\\\>>\\n\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/Toolbar/ButtonClass\\\ class\\\tc-select\\\>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ToolbarButtonStyle\\\>\\n\\t\\t\u003Coption value{{!!text}}>{{!!caption}}\u003C/option>\\n\\t\u003C/$list>\\n\u003C/$select>\\n\},\$:/core/ui/ControlPanel/Settings/ToolbarButtons\:{\title\:\$:/core/ui/ControlPanel/Settings/ToolbarButtons\,\tags\:\$:/tags/ControlPanel/Settings\,\caption\:\{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/Toolbar/Icons\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/Toolbar/Icons\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo Icons/Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\\n\u003C$checkbox tiddler\\\$:/config/Toolbar/Text\\\\\n\\tfield\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\no\\\\\n\\tclass\\\tc-control-panel-item\\\\\n>\\n\\t\u003C$link to\\\$:/config/Toolbar/Text\\\ class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C\u003Clingo Text/Description>>\\n\\t\u003C/$link>\\n\u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings\:{\title\:\$:/core/ui/ControlPanel/Settings\,\tags\:\$:/tags/ControlPanel\,\caption\:\{{$:/language/ControlPanel/Settings/Caption}}\,\text\:\\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/SettingsTab!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Settings/TiddlyWiki\\\ explicitState\\\$:/state/tab--697582678\\\/>\\n\u003C/div>\},\$:/core/ui/ControlPanel/SocialCard\:{\title\:\$:/core/ui/ControlPanel/SocialCard\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/SocialCard/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\\n\u003C\u003Clingo SocialCard/Hint>>\\n\\n|\u003C$link to\\\$:/SiteTitle\\\>\u003C\u003Clingo Basics/Title/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteTitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/SiteSubtitle\\\>\u003C\u003Clingo Basics/Subtitle/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteSubtitle\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/SiteDomain\\\>\u003C\u003Clingo SocialCard/Domain/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteDomain\\\ default\\\\\\ tag\\\input\\\ type\\\url\\\/> |\\n|\u003C$link to\\\$:/SiteUrl\\\>\u003C\u003Clingo SocialCard/Url/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SiteUrl\\\ default\\\\\\ tag\\\input\\\ type\\\url\\\/> |\\n|\u003C$link to\\\$:/SitePreviewUrl\\\>\u003C\u003Clingo SocialCard/PreviewUrl/Prompt>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/SitePreviewUrl\\\ default\\\\\\ tag\\\input\\\ type\\\url\\\/> |\\n\\n\u003C%if $:/SitePreviewUrlgettextelse!isblank %>\\n\u003Cdiv>\\n\u003Cdiv>\\n\u003C\u003Clingo SocialCard/PreviewUrl/Preview>>\\n\u003C/div>\\n\u003Cimg src{{$:/SitePreviewUrl}}/>\\n\u003C/div>\\n\u003C%endif%>\},\$:/core/ui/ControlPanel/StoryView\:{\title\:\$:/core/ui/ControlPanel/StoryView\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ControlPanel/StoryView/Caption}}\,\text\:\{{$:/snippets/viewswitcher}}\\n\},\$:/core/ui/ControlPanel/Stylesheets\:{\title\:\$:/core/ui/ControlPanel/Stylesheets\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/Stylesheets/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\\n\u003C\u003Clingo Stylesheets/Hint>>\\n\\n{{$:/snippets/peek-stylesheets}}\\n\},\$:/core/ui/ControlPanel/TestCases\:{\title\:\$:/core/ui/ControlPanel/TestCases\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/TestCases/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/TestCases/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/TestCases!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/TestCases/All\\\/>\\n\u003C/div>\\n\},\$:/core/ui/ControlPanel/TestCases/All\:{\title\:\$:/core/ui/ControlPanel/TestCases/All\,\tags\:\$:/tags/ControlPanel/TestCases\,\caption\:\{{$:/language/ControlPanel/TestCases/All/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\u003C\u003Clingo TestCases/All/Hint>>\\n\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/wiki-test-spectypetext/vnd.tiddlywiki-multiple alltiddlers+shadowstag$:/tags/wiki-test-spec-failingtypetext/vnd.tiddlywiki-multiple\\\>\\n\\n\u003Ch2>\\n\\n\u003C$link>\\n\\n\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\n\u003C/$link>\\n\\n\u003C/h2>\\n\\n\u003C$transclude\\n\\t$tiddler\\\$:/core/ui/TestCaseTemplate\\\\\n/>\\n\\n\u003C/$list>\\n\},\$:/core/ui/ControlPanel/TestCases/Failed\:{\title\:\$:/core/ui/ControlPanel/TestCases/Failed\,\tags\:\$:/tags/ControlPanel/TestCases\,\caption\:\{{$:/language/ControlPanel/TestCases/Failed/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\u003C\u003Clingo TestCases/Failed/Hint>>\\n\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/wiki-test-spectypetext/vnd.tiddlywiki-multiple alltiddlers+shadowstag$:/tags/wiki-test-spec-failingtypetext/vnd.tiddlywiki-multiple\\\>\\n\\n\u003C$transclude\\n\\t$tiddler\\\$:/core/ui/TestCaseTemplate\\\\\n\\thideIfPass\\\yes\\\\\n/>\\n\\n\u003C/$list>\\n\},\$:/core/ui/ControlPanel/Theme\:{\title\:\$:/core/ui/ControlPanel/Theme\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ControlPanel/Theme/Caption}}\,\text\:\{{$:/snippets/themeswitcher}}\\n\},\$:/core/ui/ControlPanel/TiddlerFields\:{\title\:\$:/core/ui/ControlPanel/TiddlerFields\,\tags\:\$:/tags/ControlPanel/Advanced\,\caption\:\{{$:/language/ControlPanel/TiddlerFields/Caption}}\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/\\n\\n\u003C\u003Clingo TiddlerFields/Hint>>\\n\\n{{$:/snippets/allfields}}\},\$:/core/ui/ControlPanel/Settings/TiddlyWiki\:{\title\:\$:/core/ui/ControlPanel/Settings/TiddlyWiki\,\tags\:\$:/tags/ControlPanel/SettingsTab\,\caption\:\TiddlyWiki\,\list-before\:\\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Settings/\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ControlPanel/Settings\\\>\\n\\n\u003Cdiv class\\\tc-control-panel-setting\\\ data-setting-title\u003C\u003CcurrentTiddler>> >\\n\\n!!.tc-control-panel-accent \u003C$link>\u003C$transclude field\\\caption\\\/>\u003C/$link>\\n\\n\u003C$transclude/>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\},\$:/core/ui/ControlPanel/Toolbars/EditToolbar\:{\title\:\$:/core/ui/ControlPanel/Toolbars/EditToolbar\,\tags\:\$:/tags/ControlPanel/Toolbars\,\caption\:\{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\\n\\\\define config-base() $:/config/EditToolbarButtons/Visibility/\\n\\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\\n\\n\u003C$set name\\\tv-config-toolbar-icons\\\ value\\\yes\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-text\\\ value\\\yes\\\>\\n\\n\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\\\$:/tags/EditToolbar\\\ itemTemplate\\\$:/core/ui/ControlPanel/Toolbars/ItemTemplate\\\/>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\},\$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\:{\title\:\$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\,\text\:\\\\\define config-title()\\n$(config-base)$$(currentTiddler)$\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C$draggable tiddler\u003C\u003CcurrentTiddler>>>\\n\u003C$checkbox tiddler\u003C\u003Cconfig-title>> field\\\text\\\ checked\\\show\\\ unchecked\\\hide\\\ default\\\show\\\/>\\n \\n\u003Cspan class\\\tc-icon-wrapper\\\>\u003C$transclude tiddler{{!!icon}}/>\u003C/span>\\n \\n\u003C$transclude field\\\caption\\\/>\\n -- \\n\u003Ci class\\\tc-muted\\\>\u003C$transclude field\\\description\\\/>\u003C/i>\\n\u003C/$draggable>\\n\},\$:/core/ui/ControlPanel/Toolbars/EditorToolbar\:{\title\:\$:/core/ui/ControlPanel/Toolbars/EditorToolbar\,\tags\:\$:/tags/ControlPanel/Toolbars\,\caption\:\{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\\n\\\\define config-base() $:/config/EditorToolbarButtons/Visibility/\\n\\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\\n\\n\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\\\$:/tags/EditorToolbar\\\ itemTemplate\\\$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\\\/>\\n\},\$:/core/ui/ControlPanel/Toolbars/ItemTemplate\:{\title\:\$:/core/ui/ControlPanel/Toolbars/ItemTemplate\,\text\:\\\\\define config-title()\\n$(config-base)$$(currentTiddler)$\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C$draggable tiddler\u003C\u003CcurrentTiddler>>>\\n\u003C$checkbox tiddler\u003C\u003Cconfig-title>> field\\\text\\\ checked\\\show\\\ unchecked\\\hide\\\ default\\\show\\\/>\\n \\n\u003Cspan class\\\tc-icon-wrapper\\\>\\n \\n\u003C$transclude field\\\caption\\\/>\\n \\n\u003Ci class\\\tc-muted\\\>\\n-- \\n\u003C$transclude field\\\description\\\/>\\n\u003C/i>\u003C/span>\\n\u003C/$draggable>\\n\},\$:/core/ui/ControlPanel/Toolbars/PageControls\:{\title\:\$:/core/ui/ControlPanel/Toolbars/PageControls\,\tags\:\$:/tags/ControlPanel/Toolbars\,\caption\:\{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\\n\\\\define config-base() $:/config/PageControlButtons/Visibility/\\n\\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\\n\\n\u003C$set name\\\tv-config-toolbar-icons\\\ value\\\yes\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-text\\\ value\\\yes\\\>\\n\\n\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\\\$:/tags/PageControls\\\ itemTemplate\\\$:/core/ui/ControlPanel/Toolbars/ItemTemplate\\\/>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\},\$:/core/ui/ControlPanel/Toolbars/ViewToolbar\:{\title\:\$:/core/ui/ControlPanel/Toolbars/ViewToolbar\,\tags\:\$:/tags/ControlPanel/Toolbars\,\caption\:\{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\\n\\\\define config-base() $:/config/ViewToolbarButtons/Visibility/\\n\\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\\n\\n\u003C$set name\\\tv-config-toolbar-icons\\\ value\\\yes\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-text\\\ value\\\yes\\\>\\n\\n\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\\\$:/tags/ViewToolbar\\\ itemTemplate\\\$:/core/ui/ControlPanel/Toolbars/ItemTemplate\\\/>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\},\$:/core/ui/ControlPanel/Toolbars\:{\title\:\$:/core/ui/ControlPanel/Toolbars\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ControlPanel/Toolbars/Caption}}\,\text\:\\\\\whitespace trim\\n{{$:/language/ControlPanel/Toolbars/Hint}}\\n\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel/Toolbars!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Toolbars/ViewToolbar\\\ class\\\tc-vertical\\\ explicitState\\\$:/state/tabs/controlpanel/toolbars-1345989671\\\/>\\n\u003C/div>\\n\},\$:/ControlPanel\:{\title\:\$:/ControlPanel\,\icon\:\$:/core/images/options-button\,\color\:\#bbb\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/ControlPanel!hasdraft.of\\\ default\\\$:/core/ui/ControlPanel/Info\\\ explicitState\\\$:/state/tab-1749438307\\\/>\\n\u003C/div>\\n\},\$:/core/ui/DefaultSearchResultList\:{\title\:\$:/core/ui/DefaultSearchResultList\,\tags\:\$:/tags/SearchResults\,\caption\:\{{$:/language/Search/DefaultResults/Caption}}\,\first-search-filter\:\!issystemsearch:title\u003CuserInput>sorttitlelimit250\,\second-search-filter\:\!issystemsearch\u003CuserInput>sorttitlelimit250\,\text\:\\\\\define searchResultList()\\n\\\\whitespace trim\\n//\u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>//\\n\\n\u003C$list filter\\\\u003CuserInput>minlength1\\\ variable\\\ignore\\\>\\n\u003C$list filter{{{ \u003CconfigTiddler>getfirst-search-filter }}} emptyMessage{{$:/language/Search/Matches/NoResult}}>\\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/span>\\n\u003C/$list>\\n\u003C/$list>\\n\\n//\u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>//\\n\\n\u003C$list filter\\\\u003CuserInput>minlength1\\\ variable\\\ignore\\\>\\n\u003C$list filter{{{ \u003CconfigTiddler>getsecond-search-filter }}} emptyMessage{{$:/language/Search/Matches/NoResult}}>\\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-secondaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/span>\\n\u003C/$list>\\n\u003C/$list>\\n\\n\\\\end\\n\u003C\u003CsearchResultList>>\\n\},\$:/core/ui/DownloadFullWiki\:{\title\:\$:/core/ui/DownloadFullWiki\,\text\:\\\\\whitespace trim\\n\\\\rules except wikilink\\n\\nTo download the standard single-file version of your wiki:\\n\\n\u003C$wikify name\\\site-title\\\ text{{$:/config/SaveWikiButton/Filename}}>\\n\u003C$let publishFilter\\\\\\\\\-$:/config/SaveWikiButton/Template -$:/plugins/tiddlywiki/filesystem -$:/plugins/tiddlywiki/tiddlyweb\\\\\\\\\>\\n\u003C$button tooltip\\\Download fully standalone wiki\\\ aria-label\\\download full wiki\\\ class\\\tc-btn-big-green\\\>\\n\u003C$action-sendmessage $message\\\tm-download-file\\\ $param\\\$:/core/save/all\\\ publishFilter\u003C\u003CpublishFilter>> filename\u003C\u003Csite-title>>/>\\n{{$:/core/images/download-button}}\\n\u003Cspan class\\\tc-tiny-gap-left\\\>\\nDownload full wiki\\n\u003C/span>\\n\u003C/$button>\\n\u003C/$let>\\n\u003C/$wikify>\},\$:/core/ui/EditTemplate/body/preview/diffs-current\:{\title\:\$:/core/ui/EditTemplate/body/preview/diffs-current\,\tags\:\$:/tags/EditPreview\,\caption\:\{{$:/language/EditTemplate/Body/Preview/Type/DiffCurrent}}\,\list-after\:\$:/core/ui/EditTemplate/body/preview/output\,\text\:\\u003C$list filter\\\\u003CcurrentTiddler>!isimage\\\ emptyMessage{{$:/core/ui/EditTemplate/body/preview/output}}>\\n\\n\u003C$macrocall $name\\\compareTiddlerText\\\ sourceTiddlerTitle{{!!draft.of}} destTiddlerTitle\u003C\u003CcurrentTiddler>>/>\\n\\n\u003C/$list>\\n\\n\},\$:/core/ui/EditTemplate/body/preview/diffs-shadow\:{\title\:\$:/core/ui/EditTemplate/body/preview/diffs-shadow\,\tags\:\$:/tags/EditPreview\,\caption\:\{{$:/language/EditTemplate/Body/Preview/Type/DiffShadow}}\,\list-after\:\$:/core/ui/EditTemplate/body/preview/output\,\text\:\\u003C$list filter\\\\u003CcurrentTiddler>!isimage\\\ emptyMessage{{$:/core/ui/EditTemplate/body/preview/output}}>\\n\\n\u003C$macrocall $name\\\compareTiddlerText\\\ sourceTiddlerTitle{{{ {!!draft.of}shadowsource }}} sourceSubTiddlerTitle{{!!draft.of}} destTiddlerTitle\u003C\u003CcurrentTiddler>>/>\\n\\n\u003C/$list>\\n\\n\},\$:/core/ui/EditTemplate/body/preview/output\:{\title\:\$:/core/ui/EditTemplate/body/preview/output\,\tags\:\$:/tags/EditPreview\,\caption\:\{{$:/language/EditTemplate/Body/Preview/Type/Output}}\,\text\:\\\\\import allshadows+tiddlerstag$:/tags/Macro/View!isdraft allshadows+tiddlerstag$:/tags/Macro/View/Body!isdraft allshadows+tiddlerstag$:/tags/Global/View!isdraft allshadows+tiddlerstag$:/tags/Global/View/Body!isdraft\\n\u003C$set name\\\tv-tiddler-preview\\\ value\\\yes\\\>\\n\\n\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/ViewTemplateBodyFilter!isdraftgettext :and!isblankelse$:/core/ui/ViewTemplate/body/default }}} />\\n\\n\u003C/$set>\\n\},\$:/state/showeditpreview\:{\title\:\$:/state/showeditpreview\,\text\:\no\},\$:/core/ui/EditTemplate/body/canonical-uri\:{\title\:\$:/core/ui/EditTemplate/body/canonical-uri\,\text\:\\\\\define lingo-base() $:/language/EditTemplate/Body/\\n\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n\u003C\u003Clingo External/Hint>>\\n\\n\u003Ca href{{!!_canonical_uri}}>\u003C$text text{{!!_canonical_uri}}/>\u003C/a>\\n\\n\u003C$edit-text field\\\_canonical_uri\\\ class\\\tc-edit-fields\\\ tabindex{{$:/config/EditTabIndex}} cancelPopups\\\yes\\\>\u003C/$edit-text>\\n\\n\u003C/div>\\n\},\$:/core/ui/EditTemplate/body/default\:{\title\:\$:/core/ui/EditTemplate/body/default\,\text\:\\\\\function edit-preview-state()\\n{$:/config/ShowEditPreview/PerTiddler}!matchyesthen$:/state/showeditpreview :else\u003Cqualified-preview-state> +gettext :elseno\\n\\\\end\\n\\n\\\\define config-visibility-title()\\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define importFileActions()\\n\u003C$action-popup $state\u003C\u003CimportState>> $coords\\\(0,0,0,0)\\\ $floating\\\yes\\\/>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003C$let\\n\\tqualified-preview-state\u003C\u003Cqualify \\\$:/state/showeditpreview\\\>>\\n\\teditPreviewStateTiddler{{{ {$:/config/ShowEditPreview/PerTiddler}!matchyesthen$:/state/showeditpreview :else\u003Cqualified-preview-state> }}}\\n\\timportTitle\u003C\u003Cqualify $:/ImportImage>>\\n\\timportState\u003C\u003Cqualify $:/state/ImportImage>> >\\n\u003C$dropzone importTitle\u003C\u003CimportTitle>> autoOpenOnImport\\\no\\\ contentTypesFilter{{$:/config/Editor/ImportContentTypesFilter}} class\\\tc-dropzone-editor\\\ enable{{{ {$:/config/DragAndDrop/Enable}matchno :elsesubfilter{$:/config/Editor/EnableImportFilter}thenyeselseno }}} filesOnly\\\yes\\\ actions\u003C\u003CimportFileActions>> >\\n\u003Cdiv>\\n\u003Cdiv class{{{ \u003Cedit-preview-state>matchyesthentc-tiddler-previewelsetc-tiddler-preview-hidden tc-tiddler-editor +join }}}>\\n\\n\u003C$transclude tiddler\\\$:/core/ui/EditTemplate/body/editor\\\ mode\\\inline\\\/>\\n\\n\u003C$list filter\\\\u003CeditPreviewStateTiddler>gettextmatchyes\\\ variable\\\ignore\\\>\\n\\n\u003Cdiv class\\\tc-tiddler-preview-preview\\\ data-tiddler-title{{!!draft.title}} data-tags{{!!tags}}>\\n\\n\u003C$transclude tiddler{{$:/state/editpreviewtype}} mode\\\inline\\\>\\n\\n\u003C$transclude tiddler\\\$:/core/ui/EditTemplate/body/preview/output\\\ mode\\\inline\\\/>\\n\\n\u003C/$transclude>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C/div>\\n\\n\u003C/div>\\n\\n\u003C/$dropzone>\\n\\n\u003C/$let>\\n\},\$:/core/ui/EditTemplate/body/editor\:{\title\:\$:/core/ui/EditTemplate/body/editor\,\text\:\\\\\whitespace trim\\n\\n\u003C$edit\\n\\n field\\\text\\\\\n class\\\tc-edit-texteditor tc-edit-texteditor-body\\\\\n placeholder{{$:/language/EditTemplate/Body/Placeholder}}\\n tabindex{{$:/config/EditTabIndex}}\\n focus{{{ {$:/config/AutoFocus}matchtextthentrue ~false }}}\\n cancelPopups\\\yes\\\\\n fileDrop{{{ {$:/config/DragAndDrop/Enable}matchno :elsesubfilter{$:/config/Editor/EnableImportFilter}thenyeselseno }}}\\n\\n>\u003C$set\\n\\n name\\\targetTiddler\\\\\n value\u003C\u003CcurrentTiddler>>\\n\\n>\u003C$list\\n\\n filter\\\allshadows+tiddlerstag$:/tags/EditorToolbar!hasdraft.of\\\\\n\\n>\u003C$reveal\\n\\n type\\\nomatch\\\\\n state\u003C\u003Cconfig-visibility-title>>\\n text\\\hide\\\\\n class\\\tc-text-editor-toolbar-item-wrapper\\\\\n\\n>\u003C$transclude\\n\\n tiddler\\\$:/core/ui/EditTemplate/body/toolbar/button\\\\\n mode\\\inline\\\\\n\\n/>\u003C/$reveal>\u003C/$list>\u003C$list\\n\\n filter\\\allshadows+tiddlerstag$:/tags/EditorTools!hasdraft.of\\\\\n\\n>\u003C$list\\n\\tfilter{{!!condition}}\\n\\tvariable\\\list-condition\\\\\n>\u003C$transclude/>\\n\u003C/$list>\u003C/$list>\u003C/$set>\u003C/$edit>\\n\},\$:/core/ui/EditTemplate/body/toolbar/button\:{\title\:\$:/core/ui/EditTemplate/body/toolbar/button\,\text\:\\\\\define toolbar-button-icon()\\n\u003C$list\\n\\n filter\\\allcurrent!hascustom-icon\\\\\n variable\\\no-custom-icon\\\\\n\\n>\u003C$transclude\\n\\n tiddler{{!!icon}}\\n\\n/>\u003C/$list>\\n\\\\end\\n\\n\\\\define toolbar-button-tooltip()\\n{{!!description}}\u003C$macrocall $name\\\displayshortcuts\\\ $output\\\text/plain\\\ shortcuts{{!!shortcuts}} prefix\\\` - \\\ separator\\\ \\\ suffix\\\`\\\/>\\n\\\\end\\n\\n\\\\define toolbar-button()\\n\u003C$list\\n\\n filter{{!!condition}}\\n variable\\\list-condition\\\\\n\\n>\u003C$wikify\\n\\n name\\\tooltip-text\\\\\n text\u003C\u003Ctoolbar-button-tooltip>>\\n mode\\\inline\\\\\n output\\\text\\\\\n\\n>\u003C$list\\n\\n filter\\\allcurrent!hasdropdown\\\\\n variable\\\no-dropdown\\\\\n\\n>\u003C$set namedisabled filter{{!!condition-disabled}}>\u003C$button\\n\\n class\\\tc-btn-invisible $(buttonClasses)$\\\\\n tooltip\u003C\u003Ctooltip-text>>\\n actions{{!!actions}}\\n disabled\u003C\u003Cdisabled>>\\n\\n>\u003Cspan\\n\\n data-tw-keyboard-shortcut{{{ \u003Cdisabled>matchyesthenelse{!!shortcuts} }}}\\n\\n/>\u003C\u003Ctoolbar-button-icon>>\u003C$transclude\\n\\n tiddler\u003C\u003CcurrentTiddler>>\\n field\\\text\\\\\n\\n/>\u003C/$button>\u003C/$set>\u003C/$list>\u003C$list\\n\\n filter\\\allcurrenthasdropdown\\\\\n variable\\\dropdown\\\\\n\\n>\u003C$set\\n\\n name\\\dropdown-state\\\\\n value\u003C\u003Cqualify \\\$:/state/EditorToolbarDropdown\\\>>\\n\\n>\u003C$set namedisabled filter{{!!condition-disabled}}>\u003C$button\\n\\n popup\u003C\u003Cdropdown-state>>\\n class\\\tc-popup-keep tc-btn-invisible $(buttonClasses)$\\\\\n selectedClass\\\tc-selected\\\\\n tooltip\u003C\u003Ctooltip-text>>\\n actions{{!!actions}}\\n disabled\u003C\u003Cdisabled>>\\n\\n>\u003Cspan\\n\\n data-tw-keyboard-shortcut{{{ \u003Cdisabled>matchyesthenelse{!!shortcuts} }}}\\n\\n/>\u003C\u003Ctoolbar-button-icon>>\u003C$transclude\\n\\n tiddler\u003C\u003CcurrentTiddler>>\\n field\\\text\\\\\n\\n/>\u003C/$button>\u003C/$set>\u003C$reveal\\n\\n state\u003C\u003Cdropdown-state>>\\n type\\\popup\\\\\n position\\\below\\\\\n animate\\\yes\\\\\n tag\\\span\\\\\n\\n>\u003Cdiv\\n\\n class\\\tc-drop-down tc-popup-keep\\\\\n\\n>\u003C$transclude\\n\\n tiddler{{!!dropdown}}\\n mode\\\block\\\\\n\\n/>\u003C/div>\u003C/$reveal>\u003C/$set>\u003C/$list>\u003C/$wikify>\u003C/$list>\\n\\\\end\\n\\n\\\\define toolbar-button-outer()\\n\u003C$set\\n\\n name\\\buttonClasses\\\\\n value{{!!button-classes}}\\n\\n>\u003C\u003Ctoolbar-button>>\u003C/$set>\\n\\\\end\\n\\n\u003C\u003Ctoolbar-button-outer>>\},\$:/core/ui/EditTemplate/body\:{\title\:\$:/core/ui/EditTemplate/body\,\tags\:\$:/tags/EditTemplate\,\text\:\\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/EditTemplateBodyFilter!isdraftgettext :and!isblankelse$:/core/ui/EditTemplate/body/default }}} />\\n\},\$:/core/ui/EditTemplate/controls\:{\title\:\$:/core/ui/EditTemplate/controls\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\define config-title() $:/config/EditToolbarButtons/Visibility/$(listItem)$\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-tiddler-title tc-tiddler-edit-title tc-clearfix\\\>\\n\\t\u003C$view field\\\title\\\/>\\n\\t\u003Cspan class\\\tc-tiddler-controls tc-titlebar\\\>\\n\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/EditToolbar!hasdraft.of\\\ variable\\\listItem\\\>\\n\\t\\t\\t\u003C$let tv-config-toolbar-class{{{ enlist\u003Ctv-config-toolbar-class> \u003ClistItem>encodeuricomponentaddprefixtc-btn- +join }}}>\\n\\t\\t\\t\\t\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cconfig-title>> text\\\hide\\\>\\n\\t\\t\\t\\t\\t\u003C$transclude $tiddler\u003C\u003ClistItem>>/>\\n\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/$list>\\n\\t\u003C/span>\\n\u003C/div>\\n\},\$:/core/ui/EditTemplate/fieldEditor/default\:{\title\:\$:/core/ui/EditTemplate/fieldEditor/default\,\text\:\\u003C$edit-text tiddler\u003C\u003CcurrentTiddler>> field\u003C\u003CcurrentField>> tag\\\input\\\ default\\\\\\ class\\\tc-edit-texteditor tc-edit-fieldeditor\\\ placeholder{{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex{{$:/config/EditTabIndex}} cancelPopups\\\yes\\\/>\},\$:/core/ui/EditTemplate/fields\:{\title\:\$:/core/ui/EditTemplate/fields\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\procedure lingo-base() $:/language/EditTemplate/\\n\\\\function tf.config-title() $:/config/EditTemplateFields/Visibility/addsuffix$(currentField)$substitutegettext\\n\\n\\\\function tf.config-filter() hide :excepttitle\u003Ctf.config-title>\\n\\n\u003C!-- Beware this is duplicated from EditTemplate.tid. For details see bug #7054 -->\\n\\\\procedure get-field-value-tiddler-filter() subfilter\u003Cget-field-editor-filter>sha25616addprefix/addprefix\u003CnewFieldValueTiddlerPrefix>\\n\\\\procedure get-field-editor-filter() \u003CnewFieldNameTiddler>gettextelse :cascadeallshadows+tiddlerstag$:/tags/FieldEditorFilter!isdraftgettext :and!isblankelse{$:/core/ui/EditTemplate/fieldEditor/default}\\n\\n\\\\procedure prefix.bracket() \\n\\\\procedure suffix.bracket() \\n\\n\\\\function tf.current-tiddler-new-field-selector() data-tiddler-titleaddprefix$(prefix.bracket)$substituteaddsuffix\u003CcurrentTiddlerCSSescaped>addsuffix$(suffix.bracket)$substitute .tc-edit-field-add-name-wrapper input :andjoin \\n\\n\\\\procedure new-field-actions()\\n\\\\whitespace trim\\n\u003C$action-sendmessage $message\\\tm-add-field\\\ $name{{{ \u003CnewFieldNameTiddler>gettext }}} $value{{{ \u003CnewFieldNameTiddler>gettext :mapsubfilter\u003Cget-field-value-tiddler-filter>gettext }}}/>\\n\u003C$set name\\\safeNewFieldValueTiddlerPrefix\\\ value\u003C\u003CnewFieldValueTiddlerPrefix>> emptyValue\u003C\u003Cqualify \\\$:/temp/NewFieldValue\\\>> >\\n\\t\u003C$action-deletetiddler $filter\\\\u003CnewFieldNameTiddler> prefix$:/temp/NewFieldValueprefix\u003CsafeNewFieldValueTiddlerPrefix> \u003CstoreTitle> \u003CsearchListState>\\\/>\\n\u003C/$set>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\u003C\u003Ctf.current-tiddler-new-field-selector>>/>\\n\\\\end\\n\\n\\\\procedure delete-state-tiddlers() \u003C$action-deletetiddler $filter\\\\u003CnewFieldNameTiddler> \u003CstoreTitle> \u003CsearchListState>\\\/>\\n\\n\\\\procedure cancel-search-actions-inner()\\n\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\\u003CstoreTitle>hastext \u003CnewFieldNameTiddler>hastext\\\\\n\\tvariable\\\ignore\\\\\n\\temptyMessage\\\\u003C\u003Ccancel-delete-tiddler-actions cancel>>\\\>\\n\u003C\u003Cdelete-state-tiddlers>>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions()\\n\\\\whitespace trim\\n\u003C$set name\\\userInput\\\ value{{{ \u003CstoreTitle>gettext }}}>\\n\u003C$list\\n\\tfilter\\\\u003CnewFieldNameTiddler>gettext!match\u003CuserInput>\\\\\n\\temptyMessage\\\\u003C\u003Ccancel-search-actions-inner>>\\\>\\n\u003C$action-setfield $tiddler\u003C\u003CnewFieldNameTiddler>> text\u003C\u003CuserInput>>/>\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\\n\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\procedure new-field()\\n\\\\whitespace trim\\n\u003C$vars name{{{ \u003CnewFieldNameTiddler>gettext }}}>\\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ default\u003C\u003Cname>>>\\n\u003C$button tooltip{{$:/language/EditTemplate/Fields/Add/Button/Hint}}>\\n\u003C$action-sendmessage $message\\\tm-add-field\\\\\n$name\u003C\u003Cname>>\\n$value{{{ subfilter\u003Cget-field-value-tiddler-filter>gettext }}}/>\\n\u003C$set name\\\safeNewFieldValueTiddlerPrefix\\\ value\u003C\u003CnewFieldValueTiddlerPrefix>> emptyValue\u003C\u003Cqualify \\\$:/temp/NewFieldValue\\\>> >\\n\\t\u003C$action-deletetiddler $filter\\\\u003CnewFieldNameTiddler> prefix$:/temp/NewFieldValueprefix\u003CsafeNewFieldValueTiddlerPrefix> \u003CstoreTitle> \u003CsearchListState>\\\/>\\n\u003C/$set>\\n\u003C\u003Clingo Fields/Add/Button>>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ default\u003C\u003Cname>>>\\n\u003C$button>\\n\u003C\u003Clingo Fields/Add/Button>>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$vars>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C$set name\\\newFieldValueTiddlerPrefix\\\ value\u003C\u003CnewFieldValueTiddlerPrefix>> emptyValue\u003C\u003Cqualify \\\$:/temp/NewFieldValue\\\>> >\\n\u003Cdiv class\\\tc-edit-fields\\\>\\n\u003Ctable class{{{ allcurrentfields :filterlookup$:/config/EditTemplateFields/Visibility/!matchhide :andcount!match0 :andthentc-edit-fields :elsetc-edit-fields tc-edit-fields-small }}}>\\n\u003Ctbody>\\n\u003C$list filter\\\allcurrentfields :andsorttitle\\\ variable\\\currentField\\\ storyview\\\pop\\\>\\n\u003C$list filter\u003C\u003Ctf.config-filter>> variable\\\temp\\\>\\n\u003Ctr class\\\tc-edit-field\\\>\\n\u003Ctd class\\\tc-edit-field-name\\\>\\n\u003C$text text\u003C\u003CcurrentField>>/>:\u003C/td>\\n\u003Ctd class\\\tc-edit-field-value\\\>\\n\u003C$keyboard key\\\((delete-field))\\\ actions\\\\\\\\\\u003C$action-deletefield $field\u003C\u003CcurrentField>>/>\u003C$set name\\\currentTiddlerCSSescaped\\\ value{{{ \u003CcurrentTiddler>escapecss }}}>\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\u003C\u003Ctf.current-tiddler-new-field-selector>>/>\u003C/$set>\\\\\\\\\>\\n\u003C$transclude tiddler{{{ \u003CcurrentField> :cascadeallshadows+tiddlerstag$:/tags/FieldEditorFilter!isdraftgettext :and!isblankelse{$:/core/ui/EditTemplate/fieldEditor/default} }}} />\\n\u003C/$keyboard>\\n\u003C/td>\\n\u003Ctd class\\\tc-edit-field-remove\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ tooltip{{$:/language/EditTemplate/Field/Remove/Hint}} aria-label{{$:/language/EditTemplate/Field/Remove/Caption}}>\\n\u003C$action-deletefield $field\u003C\u003CcurrentField>>/>\\n{{$:/core/images/delete-button}}\\n\u003C/$button>\\n\u003C/td>\\n\u003C/tr>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/tbody>\\n\u003C/table>\\n\u003C/div>\\n\\n\u003C$fieldmangler>\\n\u003Cdiv class\\\tc-edit-field-add\\\>\\n\u003Cem class\\\tc-edit tc-small-gap-right\\\>\\n\u003C\u003Clingo Fields/Add/Prompt>>\\n\u003C/em>\\n\u003C$vars refreshTitle\u003C\u003Cqualify \\\$:/temp/fieldname/refresh\\\>> storeTitle\u003C\u003CnewFieldNameInputTiddler>> searchListState\u003C\u003CnewFieldNameSelectionTiddler>>>\\n\u003Cdiv class\\\tc-edit-field-add-name-wrapper\\\>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\ tiddler\u003C\u003CnewFieldNameTiddler>> storeTitle\u003C\u003CstoreTitle>> refreshTitle\u003C\u003CrefreshTitle>>\\n\\t\\tselectionStateTitle\u003C\u003CsearchListState>> tag\\\input\\\ default\\\\\\ placeholder{{$:/language/EditTemplate/Fields/Add/Name/Placeholder}}\\n\\t\\tfocusPopup\u003C\u003Cqualify \\\$:/state/popup/field-dropdown\\\>> class\\\tc-edit-texteditor tc-popup-handle\\\ tabindex{{$:/config/EditTabIndex}}\\n\\t\\tfocus{{{ {$:/config/AutoFocus}matchfieldsthentrue :elsefalse }}} cancelPopups\\\yes\\\\\n\\t\\tconfigTiddlerFilter\\\$:/config/EditMode/fieldname-filter\\\ inputCancelActions\u003C\u003Ccancel-search-actions>> />\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/field-dropdown\\\>> class\\\tc-btn-invisible tc-btn-dropdown tc-small-gap\\\ tooltip{{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label{{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}\u003C/$button>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/field-dropdown\\\>> type\\\nomatch\\\ text\\\\\\ default\\\\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-edit-type-dropdown\\\>\\n\u003C$set name\\\tv-show-missing-links\\\ value\\\yes\\\>\\n\u003C$linkcatcher to\u003C\u003CnewFieldNameTiddler>>>\\n\u003Cdiv class\\\tc-dropdown-item\\\>\\n\u003C\u003Clingo Fields/Add/Dropdown/User>>\\n\u003C/div>\\n\u003C$set name\\\newFieldName\\\ value{{{ \u003CstoreTitle>gettext }}}>\\n\u003C$list filter\\\!isshadow!issystemfieldssearch:title\u003CnewFieldName>sort :exceptcreated :exceptcreator :exceptdraft.of :exceptdraft.title :exceptmodified :exceptmodifier :excepttags :excepttext :excepttitle :excepttype\\\ variable\\\currentField\\\>\\n\u003C$list filter\\\\u003CcurrentField>addsuffix-primaryList :except\u003CsearchListState>gettext\\\ emptyMessage\\\\\\\\\\u003C$link to\u003C\u003CcurrentField>> class\\\tc-list-item-selected\\\>\u003C$text text\u003C\u003CcurrentField>>/>\u003C/$link>\\\\\\\\\>\\n\u003C$link to\u003C\u003CcurrentField>>>\\n\u003C$text text\u003C\u003CcurrentField>>/>\\n\u003C/$link>\\n\u003C/$list>\\n\u003C/$list>\\n\u003Cdiv class\\\tc-dropdown-item\\\>\\n\u003C\u003Clingo Fields/Add/Dropdown/System>>\\n\u003C/div>\\n\u003C$list filter\\\fieldssearch:title\u003CnewFieldName>sort :except!isshadow!issystemfields\\\ variable\\\currentField\\\>\\n\u003C$list filter\\\\u003CcurrentField>addsuffix-secondaryList :except\u003CsearchListState>gettext\\\ emptyMessage\\\\\\\\\\u003C$link to\u003C\u003CcurrentField>> class\\\tc-list-item-selected\\\>\u003C$text text\u003C\u003CcurrentField>>/>\u003C/$link>\\\\\\\\\>\\n\u003C$link to\u003C\u003CcurrentField>>>\\n\u003C$text text\u003C\u003CcurrentField>>/>\\n\u003C/$link>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$linkcatcher>\\n\u003C/$set>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C$let currentTiddlerCSSescaped{{{ \u003CcurrentTiddler>escapecss }}} currentTiddler{{{ subfilter\u003Cget-field-value-tiddler-filter> }}} currentField\\\text\\\ currentFieldName{{{ \u003CnewFieldNameTiddler>gettext }}}>\\n\u003Cspan class\\\tc-edit-field-add-value tc-small-gap-right\\\>\\n\u003C$keyboard key\\\((add-field))\\\ actions\u003C\u003Cnew-field-actions>>>\\n\u003C$transclude tiddler{{{ subfilter\u003Cget-field-editor-filter> }}} />\\n\u003C/$keyboard>\\n\u003C/span>\\n\u003Cspan class\\\tc-edit-field-add-button\\\>\\n\u003C$transclude $variable\\\new-field\\\/>\\n\u003C/span>\\n\u003C/$let>\\n\u003C/$vars>\\n\u003C/div>\\n\u003C/$fieldmangler>\\n\u003C/$set>\},\$:/core/ui/EditTemplate/shadow\:{\title\:\$:/core/ui/EditTemplate/shadow\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\define lingo-base() $:/language/EditTemplate/Shadow/\\n\\\\define pluginLinkBody()\\n\\\\whitespace trim\\n\u003C$link to\\\\\\\\\$(pluginTitle)$\\\\\\\\\>\\n\u003C$text text\\\\\\\\\$(pluginTitle)$\\\\\\\\\/>\\n\u003C/$link>\\n\\\\end\\n\\\\whitespace trim\\n\u003C$list filter\\\allcurrentgetdraft.ofisshadow!istiddler\\\>\\n\\n\u003C$list filter\\\allcurrentshadowsource\\\ variable\\\pluginTitle\\\>\\n\\n\u003C$set name\\\pluginLink\\\ value\u003C\u003CpluginLinkBody>>>\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n\u003C\u003Clingo Warning>>\\n\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\allcurrentgetdraft.ofisshadowistiddler\\\>\\n\\n\u003C$list filter\\\allcurrentshadowsource\\\ variable\\\pluginTitle\\\>\\n\\n\u003C$set name\\\pluginLink\\\ value\u003C\u003CpluginLinkBody>>>\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n\u003C\u003Clingo OverriddenWarning>>\\n\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\\n\u003C/$list>\},\$:/core/ui/EditTemplate/tags\:{\title\:\$:/core/ui/EditTemplate/tags\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure lingo-base() $:/language/EditTemplate/\\n\\n\\\\procedure tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:\\\tags\\\)\\n\u003C$wikify name\\\foregroundColor\\\\\n\\ttext\\\\\\\\\\u003C$macrocall $name\\\contrastcolour\\\\\n\\t\\ttarget\u003C\u003Ccolour>>\\n\\t\\tfallbackTarget\u003C\u003CfallbackTarget>>\\n\\t\\tcolourA\u003C\u003CcolourA>>\\n\\t\\tcolourB\u003C\u003CcolourB>>/>\\n\\t\\\\\\\\\\\n>\\n\\t\u003C$let backgroundColor\u003C\u003Ccolour>> >\\n\\t\\t\u003Cspan class\\\tc-tag-label tc-tag-list-item tc-small-gap-right\\\\\n\\t\\t\\tdata-tag-title\u003C\u003CcurrentTiddler>>\\n\\t\\t\\tstyle`color:$(foregroundColor)$; fill:$(foregroundColor)$; background-color:$(backgroundColor)$;`\\n\\t\\t>\\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003Cicon>>/>\\n\\t\\t\\t\u003C$view field\\\title\\\ format\\\text\\\/>\\n\\t\\t\\t\u003C$button class\\\tc-btn-invisible tc-remove-tag-button\\\\\n\\t\\t\\t\\tstyle.fill\u003C\u003CforegroundColor>>\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter\\\-{!!title}\\\/>\\n\\t\\t\\t\\t{{$:/core/images/close-button}}\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\u003C/span>\\n\\t\u003C/$let>\\n\u003C/$wikify>\\n\\\\end\\n\\n\\\\procedure tag-body(colour,palette,icon,tagField:\\\tags\\\)\\n\u003C$macrocall $name\\\tag-body-inner\\\\\n\\tcolour`$(colour)$`\\n\\tcolourA{{{ \u003Cpalette>getindexforeground }}}\\n\\tcolourB{{{ \u003Cpalette>getindexbackground }}}\\n\\tfallbackTarget{{{ \u003Cpalette>getindextag-background }}}\\n\\ticon\u003C\u003Cicon>>\\n\\ttagField\u003C\u003CtagField>>\\n/>\\n\\\\end\\n\\n\\\\procedure edit-tags-template(tagField:\\\tags\\\)\\n\u003Cdiv class\\\tc-edit-tags\\\>\\n\\t\u003C$list filter\\\\u003CcurrentTiddler>get\u003CtagField>enlist-inputsorttitle\\\ storyview\\\pop\\\>\\n\\t\\t\u003C$macrocall $name\\\tag-body\\\\\n\\t\\t\\tcolour{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}\\n\\t\\t\\tpalette{{$:/palette}}\\n\\t\\t\\ticon{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext }}}\\n\\t\\t\\ttagField\u003C\u003CtagField>>\\n\\t\\t/>\\n\\t\u003C/$list>\\n\\t\u003C$let tabIndex{{$:/config/EditTabIndex}} cancelPopups\\\yes\\\>\\n\\t\\t\u003C$macrocall $name\\\tag-picker\\\ tagField\u003C\u003CtagField>>/>\\n\\t\u003C/$let>\\n\u003C/div>\\n\\\\end\\n\u003C$let saveTiddler\u003C\u003CcurrentTiddler>>>\\n\\t\u003C$macrocall $name\\\edit-tags-template\\\ tagField\u003C\u003CtagField>>/>\\n\u003C/$let>\\n\},\$:/core/ui/EditTemplate/title\:{\title\:\$:/core/ui/EditTemplate/title\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\whitespace trim\\n\u003C$edit-text field\\\draft.title\\\ class\\\tc-titlebar tc-edit-texteditor\\\ focus{{{ {$:/config/AutoFocus}matchtitlethentrue ~false }}} tabindex{{$:/config/EditTabIndex}} cancelPopups\\\yes\\\/>\\n\\n\u003C$vars pattern\\\\\\\\\\\\\|\\\\\\\\{}\\\\\\\\\ bad-chars\\\\\\\\\`| { }`\\\\\\\\\>\\n\\n\u003C$list filter\\\allcurrentregexp:draft.title\u003Cpattern>\\\ variable\\\listItem\\\>\\n\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C/$vars>\\n\\n\u003C$reveal state\\\!!draft.title\\\ type\\\nomatch\\\ text{{!!draft.of}} tag\\\div\\\>\\n\\n\u003C$list filter\\\{!!draft.title}!ismissing\\\ variable\\\listItem\\\>\\n\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}: \u003C$link to{{!!draft.title}} />\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\{!!draft.of}!ismissing\\\ variable\\\listItem\\\>\\n\\n\u003C$vars fromTitle{{!!draft.of}} toTitle{{!!draft.title}}>\\n\\n\u003C$checkbox tiddler\\\$:/config/RelinkOnRename\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\no\\\> {{$:/language/EditTemplate/Title/Relink/Prompt}}\u003C/$checkbox>\\n\\n\u003C$list filter\\\title\u003CfromTitle>backlinkslimit1\\\ variable\\\listItem\\\>\\n\\n\u003C$vars stateTiddler\u003C\u003Cqualify \\\$:/state/edit/references\\\>> >\\n\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$button set\u003C\u003CstateTiddler>> setTo\\\show\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/right-arrow}}\\n \\n\u003C\u003Clingo EditTemplate/Title/References/Prompt>>\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$button set\u003C\u003CstateTiddler>> setTo\\\hide\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/down-arrow}}\\n \\n\u003C\u003Clingo EditTemplate/Title/References/Prompt>>\u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$tiddler tiddler\u003C\u003CfromTitle>> >\\n\u003C$transclude tiddler\\\$:/core/ui/TiddlerInfo/References\\\/>\\n\u003C/$tiddler>\\n\u003C/$reveal>\\n\\n\u003C/$vars>\\n\\n\u003C/$list>\\n\\n\u003C/$vars>\\n\\n\u003C/$list>\\n\\n\u003C/$reveal>\\n\},\$:/core/ui/EditTemplate/type\:{\title\:\$:/core/ui/EditTemplate/type\,\tags\:\$:/tags/EditTemplate\,\first-search-filter\:\allshadows+tiddlersprefix$:/language/Docs/Types/sortdescriptionsortgroup-sortremoveprefix$:/language/Docs/Types/search\u003CuserInput>\,\text\:\\\\\procedure lingo-base() $:/language/EditTemplate/\\n\\\\procedure input-cancel-actions() \u003C$list filter\\\\u003CstoreTitle>gettext \u003CcurrentTiddler>gettype :andlimit1\\\ emptyMessage\\\\\\\\\\u003C\u003Ccancel-delete-tiddler-actions \\\cancel\\\>>\\\\\\\\\>\u003C$action-sendmessage $message\\\tm-remove-field\\\ $param\\\type\\\/>\u003C$action-deletetiddler $filter\\\\u003CtypeInputTiddler> \u003CrefreshTitle> \u003CtypeSelectionTiddler>\\\/>\u003C/$list>\\n\\\\whitespace trim\\n\u003C$set name\\\refreshTitle\\\ value\u003C\u003Cqualify \\\$:/temp/type-search/refresh\\\>>>\\n\u003Cdiv class\\\tc-edit-type-selector-wrapper\\\>\\n\u003Cem class\\\tc-edit tc-small-gap-right\\\>\u003C\u003Clingo Type/Prompt>>\u003C/em>\\n\u003Cdiv class\\\tc-type-selector-dropdown-wrapper\\\>\\n\u003Cdiv class\\\tc-type-selector\\\>\u003C$fieldmangler>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\ tiddler\u003C\u003CcurrentTiddler>> storeTitle\u003C\u003CtypeInputTiddler>> refreshTitle\u003C\u003CrefreshTitle>> selectionStateTitle\u003C\u003CtypeSelectionTiddler>> field\\\type\\\ tag\\\input\\\ default\\\\\\ placeholder{{$:/language/EditTemplate/Type/Placeholder}} focusPopup\u003C\u003Cqualify \\\$:/state/popup/type-dropdown\\\>> class\\\tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\\\ tabindex{{$:/config/EditTabIndex}} focus{{{ {$:/config/AutoFocus}matchtypethentrue :elsefalse }}} cancelPopups\\\yes\\\ configTiddlerFilter\\\$:/core/ui/EditTemplate/type\\\ inputCancelActions\u003C\u003Cinput-cancel-actions>>/>\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/type-dropdown\\\>> class\\\tc-btn-invisible tc-btn-dropdown tc-small-gap\\\ tooltip{{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label{{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}\u003C/$button>\u003C$button message\\\tm-remove-field\\\ param\\\type\\\ class\\\tc-btn-invisible tc-btn-icon\\\ tooltip{{$:/language/EditTemplate/Type/Delete/Hint}} aria-label{{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}\u003C$action-deletetiddler $filter\\\\u003CtypeInputTiddler> \u003CstoreTitle> \u003CrefreshTitle> \u003CselectionStateTitle>\\\/>\u003C/$button>\\n\u003C/$fieldmangler>\u003C/div>\\n\\n\u003Cdiv class\\\tc-block-dropdown-wrapper\\\>\\n\u003C$set name\\\tv-show-missing-links\\\ value\\\yes\\\>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/type-dropdown\\\>> type\\\nomatch\\\ text\\\\\\ default\\\\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-edit-type-dropdown\\\>\\n\u003C$linkcatcher to\\\!!type\\\>\\n\u003C$list filterallshadows+tiddlersprefix$:/language/Docs/Types/eachgroupsortgroup-sort>\\n\u003Cdiv class\\\tc-dropdown-item\\\>\\n\u003C$text text{{!!group}}/>\\n\u003C/div>\\n\u003C$set name\\\userInput\\\ value{{{ \u003CtypeInputTiddler>gettext }}}>\\n\u003C$list filter\\\allshadows+tiddlersprefix$:/language/Docs/Types/group{!!group} :andsortdescription :andremoveprefix$:/language/Docs/Types/ :andsearch\u003CuserInput>\\\>\u003Cspan class{{{ \u003CcurrentTiddler>addsuffix-primaryList :except\u003CtypeSelectionTiddler>gettext :andthenelsetc-list-item-selected }}}>\u003C$link to{{{ \u003CcurrentTiddler>addprefix$:/language/Docs/Types/getname }}}>\u003C$view tiddler{{{ \u003CcurrentTiddler>addprefix$:/language/Docs/Types/ }}} field\\\description\\\/>\u003C$text text\\\ \\\/>(\u003C$view tiddler{{{ \u003CcurrentTiddler>addprefix$:/language/Docs/Types/ }}} field\\\name\\\/>)\u003C/$link>\u003C/span>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/$linkcatcher>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/div>\\n\u003C/div>\\n\u003C/div>\\n\u003C/$set>\\n\},\$:/core/ui/EditTemplate\:{\title\:\$:/core/ui/EditTemplate\,\code-body\:\yes\,\text\:\\\\\define delete-edittemplate-state-tiddlers()\\n\u003C$set name\\\safeNewFieldValueTiddlerPrefix\\\ value\u003C\u003CnewFieldValueTiddlerPrefix>> emptyValue\u003C\u003Cqualify \\\$:/temp/NewFieldValue\\\>> >\\n\\t\u003C$action-deletetiddler $filter\\\\u003CnewFieldNameTiddler> prefix$:/temp/NewFieldValueprefix\u003CsafeNewFieldValueTiddlerPrefix> \u003CnewFieldNameInputTiddler> \u003CnewFieldNameSelectionTiddler> \u003CnewTagNameTiddler> \u003CnewTagNameInputTiddler> \u003CnewTagNameSelectionTiddler> \u003CtypeInputTiddler> \u003CtypeSelectionTiddler>\\\/>\\n\u003C/$set>\\n\\\\end\\n\\n\u003C!-- Beware this is duplicated from fields.tid. For details see bug #7054 -->\\n\\\\define get-field-value-tiddler-filter() subfilter\u003Cget-field-editor-filter>sha25616addprefix/addprefix\u003CnewFieldValueTiddlerPrefix>\\n\\\\define get-field-editor-filter() \u003CnewFieldNameTiddler>gettextelse :cascadeallshadows+tiddlerstag$:/tags/FieldEditorFilter!isdraftgettext :and!isblankelse{$:/core/ui/EditTemplate/fieldEditor/default}\\n\\n\\\\define save-tiddler-actions()\\n\\\\whitespace trim\\n\u003C$action-sendmessage $message\\\tm-add-tag\\\ $param{{{ \u003CnewTagNameTiddler>gettext }}}/>\\n\u003C$action-sendmessage $message\\\tm-add-field\\\ $name{{{ \u003CnewFieldNameTiddler>gettext }}} $value{{{ \u003CnewFieldNameTiddler>gettext :mapsubfilter\u003Cget-field-value-tiddler-filter>gettext }}}/>\\n\u003C\u003Cdelete-edittemplate-state-tiddlers>>\\n\u003C$action-sendmessage $message\\\tm-save-tiddler\\\/>\\n\\\\end\\n\\n\\\\define cancel-delete-tiddler-actions(message)\\n\\\\whitespace trim\\n\u003C\u003Cdelete-edittemplate-state-tiddlers>>\\n\u003C$action-sendmessage $message\\\tm-$message$-tiddler\\\/>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003Cdiv\\n\\tdata-tiddler-title\u003C\u003CcurrentTiddler>>\\n\\tdata-tags{{!!tags}}\\n\\tclass{{{ allshadows+tiddlerstag$:/tags/ClassFilters/TiddlerTemplate!isdraft :map:flatsubfilter{!!text} tc-tiddler-frame tc-tiddler-edit-frame \u003CcurrentTiddler>istiddlerthentc-tiddler-exists \u003CcurrentTiddler>ismissing!isshadowthentc-tiddler-missing \u003CcurrentTiddler>isshadowthentc-tiddler-exists tc-tiddler-shadow \u003CcurrentTiddler>issystemthentc-tiddler-system {!!class} \u003CcurrentTiddler>tagsencodeuricomponentaddprefixtc-tagged- +join }}}\\n\\trole\\\region\\\\\n\\taria-label{{$:/language/EditTemplate/Caption}}>\\n\u003C$fieldmangler>\\n\u003C$vars\\n\\tstoryTiddler\u003C\u003CcurrentTiddler>>\\n\\tnewTagNameTiddler\u003C\u003Cqualify \\\$:/temp/NewTagName\\\>>\\n\\tnewFieldNameTiddler\u003C\u003Cqualify \\\$:/temp/NewFieldName\\\>>\\n\\tnewFieldValueTiddlerPrefix\u003C\u003Cqualify \\\$:/temp/NewFieldValue\\\>>\\n\\tnewFieldNameInputTiddler\u003C\u003Cqualify \\\$:/temp/NewFieldName/input\\\>>\\n\\tnewFieldNameSelectionTiddler\u003C\u003Cqualify \\\$:/temp/NewFieldName/selected-item\\\>>\\n\\tnewTagNameInputTiddler\u003C\u003Cqualify \\\$:/temp/NewTagName/input\\\>>\\n\\tnewTagNameSelectionTiddler\u003C\u003Cqualify \\\$:/temp/NewTagName/selected-item\\\>>\\n\\ttypeInputTiddler\u003C\u003Cqualify \\\$:/temp/Type/input\\\>>\\n\\ttypeSelectionTiddler\u003C\u003Cqualify \\\$:/temp/Type/selected-item\\\>>>\\n\u003C$keyboard key\\\((cancel-edit-tiddler))\\\ actions\u003C\u003Ccancel-delete-tiddler-actions \\\cancel\\\>> tag\\\div\\\>\\n\u003C$keyboard key\\\((save-tiddler))\\\ actions\u003C\u003Csave-tiddler-actions>> tag\\\div\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/EditTemplate!hasdraft.of\\\ variable\\\listItem\\\>\\n\u003C$transclude tiddler\u003C\u003ClistItem>>/>\\n\u003C/$list>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$vars>\\n\u003C/$fieldmangler>\\n\u003C/div>\\n\},\$:/core/ui/Buttons/cancel\:{\title\:\$:/core/ui/Buttons/cancel\,\tags\:\$:/tags/EditToolbar\,\caption\:\{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}\,\description\:\{{$:/language/Buttons/Cancel/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button actions\u003C\u003Ccancel-delete-tiddler-actions \\\cancel\\\>>\\n\\ttooltip{{$:/language/Buttons/Cancel/Hint}}\\n\\taria-label{{$:/language/Buttons/Cancel/Hint}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/cancel-button}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Cancel/Caption}}/>\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/delete\:{\title\:\$:/core/ui/Buttons/delete\,\tags\:\$:/tags/EditToolbar $:/tags/ViewToolbar\,\caption\:\{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}\,\description\:\{{$:/language/Buttons/Delete/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button actions\u003C\u003Ccancel-delete-tiddler-actions \\\delete\\\>>\\n\\ttooltip{{$:/language/Buttons/Delete/Hint}}\\n\\taria-label{{$:/language/Buttons/Delete/Hint}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/delete-button}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Delete/Caption}}/>\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/save\:{\title\:\$:/core/ui/Buttons/save\,\tags\:\$:/tags/EditToolbar\,\caption\:\{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}\,\description\:\{{$:/language/Buttons/Save/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure save-tiddler-button()\\n\u003C$fieldmangler>\\n\\t\u003C$button\\n\\t\\ttooltip{{$:/language/Buttons/Save/Hint}}\\n\\t\\taria-label{{$:/language/Buttons/Save/Hint}}\\n\\t\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n\\t>\\n\\t\\t\u003C\u003Csave-tiddler-actions>>\\n\\t\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t\\t{{$:/core/images/done-button}}\\n\\t\\t\u003C%endif%>\\n\\t\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\\t\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Save/Caption}}/>\u003C/span>\\n\\t\\t\u003C%endif%>\\n\\t\u003C/$button>\\n\u003C/$fieldmangler>\\n\\\\end\\n\u003C\u003Csave-tiddler-button>>\\n\},\$:/core/ui/EditorToolbar/bold\:{\title\:\$:/core/ui/EditorToolbar/bold\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/bold\,\caption\:\{{$:/language/Buttons/Bold/Caption}}\,\description\:\{{$:/language/Buttons/Bold/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((bold))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\\\\\\n\\tsuffix\\\\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/clear-dropdown\:{\title\:\$:/core/ui/EditorToolbar/clear-dropdown\,\text\:\{{$:/language/Buttons/Clear/Hint}}\\n\\n\u003Cdiv class\\\tc-colour-chooser\\\>\\n\\n\u003C$macrocall $name\\\colour-picker\\\ actions\\\\\\\\\\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-bitmap-operation\\\\\n\\t$param\\\clear\\\\\n\\tcolour\u003C\u003Ccolour-picker-value>>\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\\\\\\\\\/>\\n\\n\u003C/div>\\n\},\$:/core/ui/EditorToolbar/clear\:{\title\:\$:/core/ui/EditorToolbar/clear\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/erase\,\caption\:\{{$:/language/Buttons/Clear/Caption}}\,\description\:\{{$:/language/Buttons/Clear/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\dropdown\:\$:/core/ui/EditorToolbar/clear-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/editor-height-dropdown\:{\title\:\$:/core/ui/EditorToolbar/editor-height-dropdown\,\text\:\\\\\define lingo-base() $:/language/Buttons/EditorHeight/\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$radio tiddler\\\$:/config/TextEditor/EditorHeight/Mode\\\ value\\\auto\\\> {{$:/core/images/auto-height}} \u003C\u003Clingo Caption/Auto>>\u003C/$radio>\\n\\n\u003C$radio tiddler\\\$:/config/TextEditor/EditorHeight/Mode\\\ value\\\fixed\\\> {{$:/core/images/fixed-height}} \u003C\u003Clingo Caption/Fixed>> \u003C$edit-text tag\\\input\\\ tiddler\\\$:/config/TextEditor/EditorHeight/Height\\\ default\\\100px\\\/>\u003C/$radio>\\n\},\$:/core/ui/EditorToolbar/editor-height\:{\title\:\$:/core/ui/EditorToolbar/editor-height\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/fixed-height\,\custom-icon\:\yes\,\caption\:\{{$:/language/Buttons/EditorHeight/Caption}}\,\description\:\{{$:/language/Buttons/EditorHeight/Hint}}\,\condition\:\\u003CtargetTiddler>type \u003CtargetTiddler>gettypeprefixtext/ \u003CtargetTiddler>gettypematchapplication/javascript \u003CtargetTiddler>gettypematchapplication/json \u003CtargetTiddler>gettypematchapplication/x-tiddler-dictionary \u003CtargetTiddler>gettypematchimage/svg+xml +first\,\dropdown\:\$:/core/ui/EditorToolbar/editor-height-dropdown\,\text\:\\\\\whitespace trim\\n\u003C$reveal tag\\\span\\\ state\\\$:/config/TextEditor/EditorHeight/Mode\\\ type\\\match\\\ text\\\fixed\\\>\\n{{$:/core/images/fixed-height}}\\n\u003C/$reveal>\\n\u003C$reveal tag\\\span\\\ state\\\$:/config/TextEditor/EditorHeight/Mode\\\ type\\\match\\\ text\\\auto\\\>\\n{{$:/core/images/auto-height}}\\n\u003C/$reveal>\\n\},\$:/core/ui/EditorToolbar/excise-dropdown\:{\title\:\$:/core/ui/EditorToolbar/excise-dropdown\,\text\:\\\\\define lingo-base() $:/language/Buttons/Excise/\\n\\n\\\\define body(config-title)\\n\\\\whitespace trim\\n\u003C\u003Clingo Hint>>\\n\\n\u003C\u003Clingo Caption/NewTitle>> \u003C$edit-text tag\\\input\\\ tiddler\\\$config-title$/new-title\\\ default\\\\\\ focus\\\true\\\/>\\n\\n\u003C$set name\\\new-title\\\ value{{$config-title$/new-title}}>\\n\u003C$list filter\\\\\\\\\\u003Cnew-title>istiddler\\\\\\\\\>\\n\u003Cdiv class\\\tc-error\\\>\\n\u003C\u003Clingo Caption/TiddlerExists>>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/$set>\\n\\n\u003C$checkbox tiddler\\\\\\\\\$config-title$/tagnew\\\\\\\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\false\\\> \u003C\u003Clingo Caption/Tag>>\u003C/$checkbox>\\n\\n\u003C\u003Clingo Caption/Replace>> \u003C$select tiddler\\\\\\\\\$config-title$/type\\\\\\\\\ default\\\transclude\\\>\\n\u003Coption value\\\link\\\>\u003C\u003Clingo Caption/Replace/Link>>\u003C/option>\\n\u003Coption value\\\transclude\\\>\u003C\u003Clingo Caption/Replace/Transclusion>>\u003C/option>\\n\u003Coption value\\\macro\\\>\u003C\u003Clingo Caption/Replace/Macro>>\u003C/option>\\n\u003C/$select>\\n\\n\u003C$reveal state\\\\\\\\\$config-title$/type\\\\\\\\\ type\\\match\\\ text\\\macro\\\>\\n\u003C\u003Clingo Caption/MacroName>> \u003C$edit-text tag\\\input\\\ tiddler\\\\\\\\\$config-title$/macro-title\\\\\\\\\ default\\\translink\\\/>\\n\u003C/$reveal>\\n\\n\u003C$button>\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\excise\\\\\n\\ttitle{{$config-title$/new-title}}\\n\\ttype{{$config-title$/type}}\\n\\tmacro{{$config-title$/macro-title}}\\n\\ttagnew{{$config-title$/tagnew}}\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\\\$config-title$/new-title\\\\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\u003C\u003Clingo Caption/Excise>>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$macrocall $name\\\body\\\ config-title\u003C\u003Cqualify \\\$:/state/Excise/\\\>>/>\\n\},\$:/core/ui/EditorToolbar/excise\:{\title\:\$:/core/ui/EditorToolbar/excise\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/excise\,\caption\:\{{$:/language/Buttons/Excise/Caption}}\,\description\:\{{$:/language/Buttons/Excise/Hint}}\,\condition\:\\u003CtargetTiddler>type \u003CtargetTiddler>typetext/vnd.tiddlywiki \u003CtargetTiddler>typetext/markdown \u003CtargetTiddler>typetext/x-markdown +first\,\shortcuts\:\((excise))\,\dropdown\:\$:/core/ui/EditorToolbar/excise-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/file-import\:{\title\:\$:/core/ui/EditorToolbar/file-import\,\tags\:\$:/tags/EditorTools\,\condition\:\\u003CtargetTiddler>filter{$:/config/Editor/EnableImportFilter}\,\text\:\\\\\procedure lingo-base() $:/language/Import/\\n\\n\\\\procedure closePopupActions()\\n\u003C$action-deletetiddler $filter\\\title\u003CimportState> title\u003CimportTitle>\\\/>\\n\\\\end closePopupActions\\n\\n\\\\procedure tw5-ImageTemplate() img$(currentTiddler)$\\n\\\\procedure tw5-FileTemplate() $(currentTiddler)$\\n\\n\u003C!-- The following characters must be escaped in markdown: \u003C>()\\\\ -->\\n\\\\function escape.title() search-replace:g:regexp\\\\(|\\\\)|\u003C|>|\\\\\\\\,\\\\$&\\n\\\\procedure markdown-ImageTemplate() !(\u003C#${ \u003CcurrentTiddler>escape.title }$>)\\n\\\\procedure markdown-FileTemplate() (\u003C#${ \u003CcurrentTiddler>escape.title }$>)\\n\\n\\\\function is.markdown.tiddler() alltypetext/x-markdown alltypetext/markdown\\n\\\\function is.image() gettypeprefiximage\\n\\\\function get.markdown.link() is.imagethen\u003Cmarkdown-ImageTemplate>else\u003Cmarkdown-FileTemplate>\\n\\\\function get.tw5.link() is.imagethen\u003Ctw5-ImageTemplate>else\u003Ctw5-FileTemplate> \\n\\\\function get.link.template() \u003CstoryTiddler>is.markdown.tiddlerthen\u003Cget.markdown.link>else\u003Cget.tw5.link>\\n\\n\\\\procedure postImportActions()\\n\\\\whitespace trim\\n\u003C$list filter\\\\u003CimportTitle>links :reduceget.link.templatesubstituteaddprefix\u003Caccumulator>\\\ variable\\\imageTitle\\\>\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\insert-text\\\\\n\\ttext\u003C\u003CimageTitle>>\\n/>\\n\u003C/$list>\\n\u003C\u003CclosePopupActions>>\\n\\\\end postImportActions\\n\\n\\\\procedure buttons()\\n\\\\whitespace trim\\n\u003C$button class\\\tc-btn-invisible\\\ actions\u003C\u003CclosePopupActions>> >\u003C\u003Clingo Listing/Cancel/Caption>>\u003C/$button>\\n \\n\u003C$button class\\\tc-btn-invisible\\\ message\\\tm-perform-import\\\ param\u003C\u003CimportTitle>> actions\u003C\u003CpostImportActions>> >\u003C\u003Clingo Listing/Import/Caption>>\u003C/$button>\\n\\\\end buttons\\n\\n\\\\whitespace trim\\n\u003C$reveal type\\\popup\\\ state\u003C\u003CimportState>> tag\\\div\\\ class\\\tc-editor-importpopup\\\>\\n\u003Cdiv class\\\tc-editor-import\\\>\\n\u003C$list filter\\\\u003CimportTitle>field:plugin-typeimport\\\>\\n\u003Ch2>\u003C\u003Clingo Editor/Import/Heading>>\u003C/h2>\\n\u003C$tiddler tiddler\u003C\u003CimportTitle>>>\\n{{||$:/core/ui/ImportListing}}\\n\u003C\u003Cbuttons>>\\n\u003C/$tiddler>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\},\$:/core/ui/EditorToolbar/heading-1\:{\title\:\$:/core/ui/EditorToolbar/heading-1\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-1\,\caption\:\{{$:/language/Buttons/Heading1/Caption}}\,\description\:\{{$:/language/Buttons/Heading1/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\button-classes\:\tc-text-editor-toolbar-item-start-group\,\shortcuts\:\((heading-1))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\1\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/heading-2\:{\title\:\$:/core/ui/EditorToolbar/heading-2\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-2\,\caption\:\{{$:/language/Buttons/Heading2/Caption}}\,\description\:\{{$:/language/Buttons/Heading2/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((heading-2))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\2\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/heading-3\:{\title\:\$:/core/ui/EditorToolbar/heading-3\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-3\,\caption\:\{{$:/language/Buttons/Heading3/Caption}}\,\description\:\{{$:/language/Buttons/Heading3/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((heading-3))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\3\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/heading-4\:{\title\:\$:/core/ui/EditorToolbar/heading-4\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-4\,\caption\:\{{$:/language/Buttons/Heading4/Caption}}\,\description\:\{{$:/language/Buttons/Heading4/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((heading-4))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\4\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/heading-5\:{\title\:\$:/core/ui/EditorToolbar/heading-5\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-5\,\caption\:\{{$:/language/Buttons/Heading5/Caption}}\,\description\:\{{$:/language/Buttons/Heading5/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((heading-5))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\5\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/heading-6\:{\title\:\$:/core/ui/EditorToolbar/heading-6\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/heading-6\,\caption\:\{{$:/language/Buttons/Heading6/Caption}}\,\description\:\{{$:/language/Buttons/Heading6/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((heading-6))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\!\\\\\n\\tcount\\\6\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/italic\:{\title\:\$:/core/ui/EditorToolbar/italic\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/italic\,\caption\:\{{$:/language/Buttons/Italic/Caption}}\,\description\:\{{$:/language/Buttons/Italic/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((italic))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\//\\\\\n\\tsuffix\\\//\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/line-width-dropdown\:{\title\:\$:/core/ui/EditorToolbar/line-width-dropdown\,\text\:\\\\\define lingo-base() $:/language/Buttons/LineWidth/\\n\\n\\\\define toolbar-line-width-inner()\\n\u003C$button tag\\\a\\\ tooltip\\\\\\\\\$(line-width)$\\\\\\\\\>\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\$:/config/BitmapEditor/LineWidth\\\\\n\\t$value\\\$(line-width)$\\\\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003Cdiv style\\\display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\\\/>\\n\\n\u003Cspan style\\\margin-left: 8px;\\\>\\n\\n\u003C$text text\\\\\\\\\$(line-width)$\\\\\\\\\/>\\n\\n\u003C$reveal state\\\$:/config/BitmapEditor/LineWidth\\\ type\\\match\\\ text\\\\\\\\\$(line-width)$\\\\\\\\\ tag\\\span\\\>\\n\\n\u003C$entity entity\\\ \\\/>\\n\\n\u003C$entity entity\\\✓\\\/>\\n\\n\u003C/$reveal>\\n\\n\u003C/span>\\n\\n\u003C/$button>\\n\\\\end\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$list filter{{$:/config/BitmapEditor/LineWidths}} variable\\\line-width\\\>\\n\\n\u003C\u003Ctoolbar-line-width-inner>>\\n\\n\u003C/$list>\\n\},\$:/core/ui/EditorToolbar/line-width\:{\title\:\$:/core/ui/EditorToolbar/line-width\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/line-width\,\caption\:\{{$:/language/Buttons/LineWidth/Caption}}\,\description\:\{{$:/language/Buttons/LineWidth/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\dropdown\:\$:/core/ui/EditorToolbar/line-width-dropdown\,\text\:\\u003C$text text{{$:/config/BitmapEditor/LineWidth}}/>\\n\},\$:/core/ui/EditorToolbar/link-dropdown\:{\title\:\$:/core/ui/EditorToolbar/link-dropdown\,\text\:\\\\\procedure lingo-base() $:/language/Buttons/Link/\\n\\n\\\\procedure add-link-actions()\\n\\\\whitespace trim\\n\u003C$action-sendmessage $message\\\tm-edit-text-operation\\\ $param\\\make-link\\\ text{{{ \u003ClinkTiddler>gettext }}} />\\n\u003C$action-deletetiddler $filter\\\\u003Cdropdown-state> \u003CsearchTiddler> \u003ClinkTiddler> \u003CstoreTitle> \u003CsearchListState>\\\/>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions-inner()\\n\u003C$let userInput{{{ \u003CstoreTitle>gettext }}}>\u003C$list filter\\\\u003CsearchTiddler>gettext!match\u003CuserInput>\\\ emptyMessage\\\\u003C$action-deletetiddler $filter\u003CsearchTiddler> \u003ClinkTiddler> \u003CstoreTitle> \u003CsearchListState>/>\\\>\u003C$action-setfield $tiddler\u003C\u003CsearchTiddler>> text\u003C\u003CuserInput>>/>\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\u003C/$list>\u003C/$let>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions() \u003C$list filter\\\\u003CstoreTitle>!hastext :and\u003CsearchTiddler>!hastext\\\ emptyMessage\\\\u003C\u003Ccancel-search-actions-inner>>\\\>\u003C$action-sendmessage $message\\\tm-edit-text-operation\\\ $param\\\focus-editor\\\/>\u003C/$list>\\n\\n\\\\procedure external-link()\\n\\\\whitespace trim\\n\u003C$button class\\\tc-btn-invisible tc-btn-mini\\\ style\\\width: auto; display: inline-block; background-colour: inherit;\\\ actions\u003C\u003Cadd-link-actions>>>\\n{{$:/core/images/chevron-right}}\\n\u003C/$button>\\n\\\\end\\n\\n\\\\procedure set-next-input-tab() \u003C$transclude $variable\\\change-input-tab-after\\\ stateTitle\\\$:/state/tab/search-results/sidebar\\\ tag\\\$:/tags/SearchResults\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\u003C$action-setfield $tiddler$:/state/search/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure set-previous-input-tab() \u003C$transclude $variable\\\change-input-tab-before\\\ stateTitle\\\$:/state/tab/search-results/sidebar\\\ tag\\\$:/tags/SearchResults\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\u003C$action-setfield $tiddler$:/state/search/currentTab text\u003C\u003CnextTab>>/>\\\/>\\n\\n\\\\procedure body(config-title)\\n\\\\whitespace trim\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$let searchTiddler`$(config-title)$/search` linkTiddler`$(config-title)$/link` linktext\\\\\\ searchListState\u003C\u003Cqualify \\\$:/temp/link-search/selected-item\\\>> refreshTitle\u003C\u003Cqualify \\\$:/temp/link-search/refresh\\\>> storeTitle\u003C\u003Cqualify \\\$:/temp/link-search/input\\\>>>\\n\\n\u003C$let linkTiddler\u003C\u003CsearchTiddler>>>\\n\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>>>\\n\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>> class\\\tc-create-wikitext-link\\\>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\ tiddler\u003C\u003CsearchTiddler>> storeTitle\u003C\u003CstoreTitle>>\\n\\t\\tselectionStateTitle\u003C\u003CsearchListState>> refreshTitle\u003C\u003CrefreshTitle>> type\\\search\\\ filterMinLength\\\1\\\\\n\\t\\ttag\\\input\\\ focus\\\true\\\ class\\\tc-popup-handle\\\ inputCancelActions\u003C\u003Ccancel-search-actions>>\\n\\t\\tinputAcceptActions\u003C\u003Cadd-link-actions>> placeholder{{$:/language/Search/Search}} default\\\\\\\\n\\t\\tconfigTiddlerFilter\\\$:/state/search/currentTab!ismissinggettext :else{$:/config/SearchResults/Default}\\\ />\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n \\n\u003C$reveal tag\\\span\\\ state\u003C\u003CstoreTitle>> type\\\nomatch\\\ text\\\\\\>\\n\u003C\u003Cexternal-link>>\\n \\n\u003C$button class\\\tc-btn-invisible tc-btn-mini\\\ style\\\width: auto; display: inline-block; background-colour: inherit;\\\>\\n\u003C\u003Ccancel-search-actions>>\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param`data-tiddler-title${\u003CstoryTiddler>escapecss}$ .tc-create-wikitext-link input`/>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$let>\\n\\n\u003C$reveal tag\\\div\\\ state\u003C\u003CstoreTitle>> type\\\nomatch\\\ text\\\\\\>\\n\\n\u003C$linkcatcher actions\u003C\u003Cadd-link-actions>> to\u003C\u003ClinkTiddler>>>\\n\\n\u003C$let userInput{{{ \u003CstoreTitle>gettext }}} configTiddler{{{ $:/state/search/currentTab!ismissinggettext :else{$:/config/SearchResults/Default} }}}>\\n\\n{{$:/core/ui/SearchResults}}\\n\\n\u003C/$let>\\n\\n\u003C/$linkcatcher>\\n\\n\u003C/$reveal>\\n\\n\u003C/$let>\\n\\n\\\\end\\n\\n\u003C$transclude $variable\\\body\\\ config-title\u003C\u003Cqualify \\\$:/state/Link/\\\>>/>\},\$:/core/ui/EditorToolbar/link\:{\title\:\$:/core/ui/EditorToolbar/link\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/link\,\caption\:\{{$:/language/Buttons/Link/Caption}}\,\description\:\{{$:/language/Buttons/Link/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\button-classes\:\tc-text-editor-toolbar-item-start-group\,\shortcuts\:\((link))\,\dropdown\:\$:/core/ui/EditorToolbar/link-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/linkify\:{\title\:\$:/core/ui/EditorToolbar/linkify\,\caption\:\{{$:/language/Buttons/Linkify/Caption}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\description\:\{{$:/language/Buttons/Linkify/Hint}}\,\icon\:\$:/core/images/linkify\,\list-before\:\$:/core/ui/EditorToolbar/mono-block\,\shortcuts\:\((linkify))\,\tags\:\$:/tags/EditorToolbar\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\\\\\\n\\tsuffix\\\\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/list-bullet\:{\title\:\$:/core/ui/EditorToolbar/list-bullet\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/list-bullet\,\caption\:\{{$:/language/Buttons/ListBullet/Caption}}\,\description\:\{{$:/language/Buttons/ListBullet/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((list-bullet))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\*\\\\\n\\tcount\\\1\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/list-number\:{\title\:\$:/core/ui/EditorToolbar/list-number\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/list-number\,\caption\:\{{$:/language/Buttons/ListNumber/Caption}}\,\description\:\{{$:/language/Buttons/ListNumber/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((list-number))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\prefix-lines\\\\\n\\tcharacter\\\#\\\\\n\\tcount\\\1\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/mono-block\:{\title\:\$:/core/ui/EditorToolbar/mono-block\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/mono-block\,\caption\:\{{$:/language/Buttons/MonoBlock/Caption}}\,\description\:\{{$:/language/Buttons/MonoBlock/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\button-classes\:\tc-text-editor-toolbar-item-start-group\,\shortcuts\:\((mono-block))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-lines\\\\\n\\tprefix\\\\\n```\\\\\n\\tsuffix\\\```\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/mono-line\:{\title\:\$:/core/ui/EditorToolbar/mono-line\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/mono-line\,\caption\:\{{$:/language/Buttons/MonoLine/Caption}}\,\description\:\{{$:/language/Buttons/MonoLine/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((mono-line))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\`\\\\\n\\tsuffix\\\`\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/more-dropdown\:{\title\:\$:/core/ui/EditorToolbar/more-dropdown\,\text\:\\\\\define config-title()\\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\\n\\\\end\\n\\n\\\\define conditional-button()\\n\\\\whitespace trim\\n\u003C$list filter{{$(toolbarItem)$!!condition}} variable\\\condition\\\>\\n\u003C$transclude tiddler\\\$:/core/ui/EditTemplate/body/toolbar/button\\\ mode\\\inline\\\/>\\n \\n\u003C$transclude tiddler\u003C\u003CtoolbarItem>> field\\\description\\\/>\\n\u003C/$list>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003Cdiv class\\\tc-text-editor-toolbar-more\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/EditorToolbar!hasdraft.of -$:/core/ui/EditorToolbar/more\\\>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cconfig-visibility-title>> text\\\hide\\\ tag\\\div\\\>\\n\u003C\u003Cconditional-button>>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/div>\\n\},\$:/core/ui/EditorToolbar/more\:{\title\:\$:/core/ui/EditorToolbar/more\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/down-arrow\,\caption\:\{{$:/language/Buttons/More/Caption}}\,\description\:\{{$:/language/Buttons/More/Hint}}\,\condition\:\\u003CtargetTiddler>\,\dropdown\:\$:/core/ui/EditorToolbar/more-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/opacity-dropdown\:{\title\:\$:/core/ui/EditorToolbar/opacity-dropdown\,\text\:\\\\\define lingo-base() $:/language/Buttons/Opacity/\\n\\n\\\\define toolbar-opacity-inner()\\n\u003C$button tag\\\a\\\ tooltip\\\\\\\\\$(opacity)$\\\\\\\\\>\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\$:/config/BitmapEditor/Opacity\\\\\n\\t$value\\\$(opacity)$\\\\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003Cdiv style\\\display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\\\/>\\n\\n\u003Cspan style\\\margin-left: 8px;\\\>\\n\\n\u003C$text text\\\\\\\\\$(opacity)$\\\\\\\\\/>\\n\\n\u003C$reveal state\\\$:/config/BitmapEditor/Opacity\\\ type\\\match\\\ text\\\\\\\\\$(opacity)$\\\\\\\\\ tag\\\span\\\>\\n\\n\u003C$entity entity\\\ \\\/>\\n\\n\u003C$entity entity\\\✓\\\/>\\n\\n\u003C/$reveal>\\n\\n\u003C/span>\\n\\n\u003C/$button>\\n\\\\end\\n\\n\\\\define toolbar-opacity()\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$list filter{{$:/config/BitmapEditor/Opacities}} variable\\\opacity\\\>\\n\\n\u003C\u003Ctoolbar-opacity-inner>>\\n\\n\u003C/$list>\\n\\\\end\\n\\n\u003C$set name\\\current-paint-colour\\\ value{{$:/config/BitmapEditor/Colour}}>\\n\\n\u003C$set name\\\current-opacity\\\ value{{$:/config/BitmapEditor/Opacity}}>\\n\\n\u003C\u003Ctoolbar-opacity>>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\},\$:/core/ui/EditorToolbar/opacity\:{\title\:\$:/core/ui/EditorToolbar/opacity\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/opacity\,\caption\:\{{$:/language/Buttons/Opacity/Caption}}\,\description\:\{{$:/language/Buttons/Opacity/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\dropdown\:\$:/core/ui/EditorToolbar/opacity-dropdown\,\text\:\\u003C$text text{{$:/config/BitmapEditor/Opacity}}/>\\n\},\$:/core/ui/EditorToolbar/paint-dropdown\:{\title\:\$:/core/ui/EditorToolbar/paint-dropdown\,\text\:\{{$:/language/Buttons/Paint/Hint}}\\n\\n\u003C$macrocall $name\\\colour-picker\\\ actions\\\\\\\\\\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\$:/config/BitmapEditor/Colour\\\\\n\\t$value\u003C\u003Ccolour-picker-value>>\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\\\\\\\\\/>\\n\},\$:/core/ui/EditorToolbar/paint\:{\title\:\$:/core/ui/EditorToolbar/paint\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/paint\,\caption\:\{{$:/language/Buttons/Paint/Caption}}\,\description\:\{{$:/language/Buttons/Paint/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\dropdown\:\$:/core/ui/EditorToolbar/paint-dropdown\,\text\:\\\\\define toolbar-paint()\\n\u003Cdiv style\\\display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\\\/>\\n\\\\end\\n\\\\whitespace trim\\n\u003C$set name\\\colour-picker-value\\\ value{{$:/config/BitmapEditor/Colour}}>\\n\u003C\u003Ctoolbar-paint>>\\n\u003C/$set>\\n\},\$:/core/ui/EditorToolbar/picture-dropdown\:{\title\:\$:/core/ui/EditorToolbar/picture-dropdown\,\text\:\\\\\define replacement-text()\\nimg$(imageTitle)$\\n\\\\end\\n\\n{{$:/language/Buttons/Picture/Hint}}\\n\\n\u003C$macrocall $name\\\image-picker\\\ actions\\\\\\\\\\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\replace-selection\\\\\n\\ttext\u003C\u003Creplacement-text>>\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\\\\\\\\\/>\\n\},\$:/core/ui/EditorToolbar/picture\:{\title\:\$:/core/ui/EditorToolbar/picture\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/picture\,\caption\:\{{$:/language/Buttons/Picture/Caption}}\,\description\:\{{$:/language/Buttons/Picture/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((picture))\,\dropdown\:\$:/core/ui/EditorToolbar/picture-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/preview-type-dropdown\:{\title\:\$:/core/ui/EditorToolbar/preview-type-dropdown\,\text\:\\\\\define preview-type-button()\\n\u003C$button tag\\\a\\\>\\n\\n\u003C$action-setfield $tiddler\\\$:/state/editpreviewtype\\\ $value\\\$(previewType)$\\\/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003C$transclude tiddler\u003C\u003CpreviewType>> field\\\caption\\\ mode\\\inline\\\>\\n\\n\u003C$view tiddler\u003C\u003CpreviewType>> field\\\title\\\ mode\\\inline\\\/>\\n\\n\u003C/$transclude> \\n\\n\u003C$reveal tag\\\span\\\ state\\\$:/state/editpreviewtype\\\ type\\\match\\\ text\u003C\u003CpreviewType>> default\\\$:/core/ui/EditTemplate/body/preview/output\\\>\\n\\n\u003C$entity entity\\\ \\\/>\\n\\n\u003C$entity entity\\\✓\\\/>\\n\\n\u003C/$reveal>\\n\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/EditPreview!hasdraft.of\\\ variable\\\previewType\\\>\\n\\n\u003C\u003Cpreview-type-button>>\\n\\n\u003C/$list>\\n\},\$:/core/ui/EditorToolbar/preview-type\:{\title\:\$:/core/ui/EditorToolbar/preview-type\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/chevron-down\,\caption\:\{{$:/language/Buttons/PreviewType/Caption}}\,\description\:\{{$:/language/Buttons/PreviewType/Hint}}\,\condition\:\allshadows+tiddlerstag$:/tags/EditPreview!hasdraft.ofbutfirstlimit1\,\button-classes\:\tc-text-editor-toolbar-item-adjunct\,\dropdown\:\$:/core/ui/EditorToolbar/preview-type-dropdown\},\$:/core/ui/EditorToolbar/preview\:{\title\:\$:/core/ui/EditorToolbar/preview\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/preview-open\,\custom-icon\:\yes\,\caption\:\{{$:/language/Buttons/Preview/Caption}}\,\description\:\{{$:/language/Buttons/Preview/Hint}}\,\condition\:\\u003CtargetTiddler>\,\button-classes\:\tc-text-editor-toolbar-item-start-group\,\shortcuts\:\((preview))\,\text\:\\\\\whitespace trim\\n\u003Cspan>\\n\\t\u003C$transclude $tiddler{{{ \u003Cedit-preview-state>matchyesthen$:/core/images/preview-openelse$:/core/images/preview-closed }}} />\\n\u003C/span>\\n\u003C$action-setfield $tiddler\u003C\u003CeditPreviewStateTiddler>> $value{{{ \u003CeditPreviewStateTiddler>gettexttoggleyes,no }}} />\\n\u003C$action-sendmessage $message\\\tm-edit-text-operation\\\ $param\\\focus-editor\\\/>\\n\},\$:/core/ui/EditorToolbar/quote\:{\title\:\$:/core/ui/EditorToolbar/quote\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/quote\,\caption\:\{{$:/language/Buttons/Quote/Caption}}\,\description\:\{{$:/language/Buttons/Quote/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((quote))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-lines\\\\\n\\tprefix\\\\\n\u003C\u003C\u003C\\\\\n\\tsuffix\\\\u003C\u003C\u003C\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/rotate-left\:{\title\:\$:/core/ui/EditorToolbar/rotate-left\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/rotate-left\,\caption\:\{{$:/language/Buttons/RotateLeft/Caption}}\,\description\:\{{$:/language/Buttons/RotateLeft/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-bitmap-operation\\\\\n\\t$param\\\rotate-left\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/size-dropdown\:{\title\:\$:/core/ui/EditorToolbar/size-dropdown\,\text\:\\\\\define lingo-base() $:/language/Buttons/Size/\\n\\n\\\\define toolbar-button-size-preset(config-title)\\n\u003C$set name\\\width\\\ filter\\\$(sizePair)$ +first\\\>\\n\\n\u003C$set name\\\height\\\ filter\\\$(sizePair)$ +last\\\>\\n\\n\u003C$button tag\\\a\\\>\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\\\\\\\$config-title$/new-width\\\\\\\\\\\n\\t$value\u003C\u003Cwidth>>\\n/>\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\\\\\\\$config-title$/new-height\\\\\\\\\\\n\\t$value\u003C\u003Cheight>>\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\\\\\\\\\$config-title$/presets-popup\\\\\\\\\\\n/>\\n\\n\u003C$text text\u003C\u003Cwidth>>/> × \u003C$text text\u003C\u003Cheight>>/>\\n\\n\u003C/$button>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define toolbar-button-size(config-title)\\n\\\\whitespace trim\\n{{$:/language/Buttons/Size/Hint}}\\n\\n\u003C\u003Clingo Caption/Width>> \u003C$edit-text tag\\\input\\\ tiddler\\\\\\\\\$config-title$/new-width\\\\\\\\\ default\u003C\u003Ctv-bitmap-editor-width>> focus\\\true\\\ size\\\8\\\/>\\n \\n\u003C\u003Clingo Caption/Height>> \u003C$edit-text tag\\\input\\\ tiddler\\\\\\\\\$config-title$/new-height\\\\\\\\\ default\u003C\u003Ctv-bitmap-editor-height>> size\\\8\\\/>\\n \\n\u003C$button popup\\\\\\\\\$config-title$/presets-popup\\\\\\\\\ class\\\tc-btn-invisible tc-popup-keep\\\ style\\\width: auto; display: inline-block; background-colour: inherit;\\\ selectedClass\\\tc-selected\\\>\\n{{$:/core/images/down-arrow}}\\n\u003C/$button>\\n\\n\u003C$reveal tag\\\span\\\ state\\\\\\\\\$config-title$/presets-popup\\\\\\\\\ type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\\n\u003Cdiv class\\\tc-drop-down tc-popup-keep\\\>\\n\\n\u003C$list filter{{$:/config/BitmapEditor/ImageSizes}} variable\\\sizePair\\\>\\n\\n\u003C$macrocall $name\\\toolbar-button-size-preset\\\ config-title\\\$config-title$\\\/>\\n\\n\u003C/$list>\\n\\n\u003C/div>\\n\\n\u003C/$reveal>\\n\\n\u003C$button>\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-bitmap-operation\\\\\n\\t$param\\\resize\\\\\n\\twidth{{$config-title$/new-width}}\\n\\theight{{$config-title$/new-height}}\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\\\\\\\\\$config-title$/new-width\\\\\\\\\\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\\\\\\\\\$config-title$/new-height\\\\\\\\\\\n/>\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\u003C\u003Clingo Caption/Resize>>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$macrocall $name\\\toolbar-button-size\\\ config-title\u003C\u003Cqualify \\\$:/state/Size/\\\>>/>\\n\},\$:/core/ui/EditorToolbar/size\:{\title\:\$:/core/ui/EditorToolbar/size\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/size\,\caption\:\{{$:/language/Buttons/Size/Caption}}\,\description\:\{{$:/language/Buttons/Size/Hint}}\,\condition\:\\u003CtargetTiddler>isimage -\u003CtargetTiddler>typeimage/svg+xml\,\dropdown\:\$:/core/ui/EditorToolbar/size-dropdown\,\text\:\\},\$:/core/ui/EditorToolbar/StampDropdown/ItemTemplate\:{\title\:\$:/core/ui/EditorToolbar/StampDropdown/ItemTemplate\,\text\:\\u003C$linkcatcher actions\\\\\\\\\\\n\\n\u003C$list filter\\\\u003Cmodifier>!matchctrl\\\ variable\\\ignore\\\>\\n\\n\u003C$list filter\\\\u003CcurrentTiddler>addsuffix/prefix!istiddler!isshadowremovesuffix/prefixaddsuffix/suffix!istiddler!isshadow\\\ variable\\\ignore\\\>\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\replace-selection\\\\\n\\ttext{{{ \u003CcurrentTiddler>gettext }}}\\n/>\\n\\n\u003C/$list>\\n\\n\\n\u003C$list filter\\\\u003CcurrentTiddler>addsuffix/prefix \u003CcurrentTiddler>addsuffix/suffix +isshadow :elseistiddler +limit1\\\ variable\\\ignore\\\>\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix{{{ \u003CcurrentTiddler>addsuffix/prefixgettext }}}\\n\\tsuffix{{{ \u003CcurrentTiddler>addsuffix/suffixgettext }}}\\n/>\\n\\n\u003C/$list>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\\u003Cmodifier>matchctrl\\\ variable\\\ignore\\\>\\n\\n\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\/>\\n\\n\u003C/$list>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\\\\\\\\\>\\n\\n\u003C$link tooltip{{{ \u003CcurrentTiddler>getdescription }}}>\\n\\n\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> field\\\caption\\\ mode\\\inline\\\>\\n\\n\u003C$view tiddler\u003C\u003CcurrentTiddler>> field\\\title\\\ />\\n\\n\u003C/$transclude>\\n\\n\u003C/$link>\\n\\n\u003C/$linkcatcher>\\n\},\$:/core/ui/EditorToolbar/stamp-dropdown\:{\title\:\$:/core/ui/EditorToolbar/stamp-dropdown\,\text\:\\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\\\$:/tags/TextEditor/Snippet\\\ subFilter\\\!isdraft\\\ itemTemplate\\\$:/core/ui/EditorToolbar/StampDropdown/ItemTemplate\\\/>\\n\\n----\\n\\n\u003C$button tag\\\a\\\>\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-new-tiddler\\\\\n\\ttags\\\$:/tags/TextEditor/Snippet\\\\\n\\tcaption{{$:/language/Buttons/Stamp/New/Title}}\\n\\ttext{{$:/language/Buttons/Stamp/New/Text}}\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003Cem>\\n\\n\u003C$text text{{$:/language/Buttons/Stamp/Caption/New}}/>\\n\\n\u003C/em>\\n\\n\u003C/$button>\\n\},\$:/core/ui/EditorToolbar/stamp\:{\title\:\$:/core/ui/EditorToolbar/stamp\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/stamp\,\caption\:\{{$:/language/Buttons/Stamp/Caption}}\,\description\:\{{$:/language/Buttons/Stamp/Hint}}\,\condition\:\\u003CtargetTiddler>type \u003CtargetTiddler>gettypeprefixtext/ \u003CtargetTiddler>gettypematchapplication/javascript \u003CtargetTiddler>gettypematchapplication/json \u003CtargetTiddler>gettypematchapplication/x-tiddler-dictionary \u003CtargetTiddler>gettypematchimage/svg+xml +first\,\shortcuts\:\((stamp))\,\dropdown\:\$:/core/ui/EditorToolbar/stamp-dropdown\,\button-classes\:\tc-editortoolbar-stamp-button\,\text\:\\},\$:/core/ui/EditorToolbar/strikethrough\:{\title\:\$:/core/ui/EditorToolbar/strikethrough\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/strikethrough\,\caption\:\{{$:/language/Buttons/Strikethrough/Caption}}\,\description\:\{{$:/language/Buttons/Strikethrough/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((strikethrough))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\~~\\\\\n\\tsuffix\\\~~\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/subscript\:{\title\:\$:/core/ui/EditorToolbar/subscript\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/subscript\,\caption\:\{{$:/language/Buttons/Subscript/Caption}}\,\description\:\{{$:/language/Buttons/Subscript/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((subscript))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\,,\\\\\n\\tsuffix\\\,,\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/superscript\:{\title\:\$:/core/ui/EditorToolbar/superscript\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/superscript\,\caption\:\{{$:/language/Buttons/Superscript/Caption}}\,\description\:\{{$:/language/Buttons/Superscript/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((superscript))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\^^\\\\\n\\tsuffix\\\^^\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/transcludify\:{\title\:\$:/core/ui/EditorToolbar/transcludify\,\caption\:\{{$:/language/Buttons/Transcludify/Caption}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\description\:\{{$:/language/Buttons/Transcludify/Hint}}\,\icon\:\$:/core/images/transcludify\,\list-before\:\$:/core/ui/EditorToolbar/mono-block\,\shortcuts\:\((transcludify))\,\tags\:\$:/tags/EditorToolbar\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\{{\\\\\n\\tsuffix\\\}}\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/EditorToolbar/underline\:{\title\:\$:/core/ui/EditorToolbar/underline\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/core/images/underline\,\caption\:\{{$:/language/Buttons/Underline/Caption}}\,\description\:\{{$:/language/Buttons/Underline/Hint}}\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>gettypeprefixtext/vnd.tiddlywiki\,\shortcuts\:\((underline))\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\wrap-selection\\\\\n\\tprefix\\\__\\\\\n\\tsuffix\\\__\\\\\n\\ttrimSelection\\\yes\\\\\n/>\\n\},\$:/core/ui/ExportTiddlyWikiCore\:{\title\:\$:/core/ui/ExportTiddlyWikiCore\,\text\:\\\\\define jsFileName() tiddlywikicore-$(version)$.js\\n\\\\define noExportMsg()\\nIt appears that you have a wiki with an external ~TiddlyWiki core. The export action cannot be performed.\\n\u003Cp>You will need to view the page source in your browser. Then go to the very bottom the the source, find the last `\u003Cscript>` \\nelement, and right-click its `src` URI. Save the link as $(jsFileName)$\u003C/p>\\n\\\\end\\n\\nFor advanced users\\n\\nExport the ~TiddlyWiki core ~JavaScript code for running with external ~JavaScript:\\n\\n\u003C$button tooltip\\\Export the ~TiddlyWiki core code for running with external ~JavaScript\\\ aria-label\\\export TiddlyWiki core\\\ class\\\tc-btn-big-green\\\>\\n\u003C$list filter\\\$:/boot/boot.jsismissing\\\ variable\\\ignore\\\ emptyMessage\\\\\\\\\\u003C$action-sendmessage $message\\\tm-download-file\\\ $param\\\$:/core/templates/tiddlywiki5.js\\\ filename\u003C\u003CjsFileName>> type\\\application/javascript\\\/>\\\\\\\\\ >\\n\u003C$action-setfield $tiddler\u003C\u003Cqualify \\\$:/temp/alert\\\>> text\u003C\u003CnoExportMsg>> subtitle\\\Export ~TiddllyWiki Core\\\/>\\n\u003C$action-sendmessage $message\\\tm-modal\\\ $param\u003C\u003Cqualify \\\$:/temp/alert\\\>>/>\\n\u003C/$list>\\n{{$:/core/images/download-button}} Download ~TiddlyWiki core\\n\u003C/$button>\\n\\nFurther information|https://tiddlywiki.com/#Using%20the%20external%20JavaScript%20template\\n\},\$:/core/Filters/AllTags\:{\title\:\$:/core/Filters/AllTags\,\tags\:\$:/tags/Filter\,\filter\:\tags!issystemsorttitle\,\description\:\{{$:/language/Filters/AllTags}}\,\text\:\\},\$:/core/Filters/AllTiddlers\:{\title\:\$:/core/Filters/AllTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\!issystemsorttitle\,\description\:\{{$:/language/Filters/AllTiddlers}}\,\text\:\\},\$:/core/Filters/Drafts\:{\title\:\$:/core/Filters/Drafts\,\tags\:\$:/tags/Filter\,\filter\:\hasdraft.ofsorttitle\,\description\:\{{$:/language/Filters/Drafts}}\,\text\:\\},\$:/core/Filters/Missing\:{\title\:\$:/core/Filters/Missing\,\tags\:\$:/tags/Filter\,\filter\:\allmissingsorttitle\,\description\:\{{$:/language/Filters/Missing}}\,\text\:\\},\$:/core/Filters/Orphans\:{\title\:\$:/core/Filters/Orphans\,\tags\:\$:/tags/Filter\,\filter\:\allorphanssorttitle\,\description\:\{{$:/language/Filters/Orphans}}\,\text\:\\},\$:/core/Filters/OverriddenShadowTiddlers\:{\title\:\$:/core/Filters/OverriddenShadowTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\isshadow\,\description\:\{{$:/language/Filters/OverriddenShadowTiddlers}}\,\text\:\\},\$:/core/Filters/RecentSystemTiddlers\:{\title\:\$:/core/Filters/RecentSystemTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\hasmodified!sortmodifiedlimit50\,\description\:\{{$:/language/Filters/RecentSystemTiddlers}}\,\text\:\\},\$:/core/Filters/RecentTiddlers\:{\title\:\$:/core/Filters/RecentTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\!issystemhasmodified!sortmodifiedlimit50\,\description\:\{{$:/language/Filters/RecentTiddlers}}\,\text\:\\},\$:/core/Filters/SessionTiddlers\:{\title\:\$:/core/Filters/SessionTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\haschanged\,\description\:\{{$:/language/Filters/SessionTiddlers}}\,\text\:\\},\$:/core/Filters/ShadowTiddlers\:{\title\:\$:/core/Filters/ShadowTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\allshadowssorttitle\,\description\:\{{$:/language/Filters/ShadowTiddlers}}\,\text\:\\},\$:/core/Filters/StoryList\:{\title\:\$:/core/Filters/StoryList\,\tags\:\$:/tags/Filter\,\filter\:\list$:/StoryList -$:/AdvancedSearch\,\description\:\{{$:/language/Filters/StoryList}}\,\text\:\\},\$:/core/Filters/SystemTags\:{\title\:\$:/core/Filters/SystemTags\,\tags\:\$:/tags/Filter\,\filter\:\allshadows+tiddlerstagsissystemsorttitle\,\description\:\{{$:/language/Filters/SystemTags}}\,\text\:\\},\$:/core/Filters/SystemTiddlers\:{\title\:\$:/core/Filters/SystemTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\issystemsorttitle\,\description\:\{{$:/language/Filters/SystemTiddlers}}\,\text\:\\},\$:/core/Filters/TypedTiddlers\:{\title\:\$:/core/Filters/TypedTiddlers\,\tags\:\$:/tags/Filter\,\filter\:\!issystemhastypeeachtypesorttype -typetext/vnd.tiddlywiki\,\description\:\{{$:/language/Filters/TypedTiddlers}}\,\text\:\\},\$:/core/ui/ImportListing\:{\title\:\$:/core/ui/ImportListing\,\text\:\\\\\define lingo-base() $:/language/Import/\\n\\n\\\\define messageField() message-$(payloadTiddler)$\\n\\n\\\\define payloadTitleFilter() \u003CcurrentTiddler>get\u003CrenameField>minlength1else\u003CpayloadTiddler>\\n\\n\\\\define overWriteWarning()\\n\\\\whitespace trim\\n\u003C$list filter\\\\u003CcurrentTiddler>!has\u003CsuppressedField>\\\>\\n\u003C$text text{{{subfilter\u003CpayloadTitleFilter>!istiddlerthen ~\u003Clingo-base>addsuffixListing/Rename/OverwriteWarninggettext}}}/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define selectionInfo()\\n\\\\whitespace trim\\n\u003C$set name\\\escUnselected\\\ value{{{{$:/language/Import/Upgrader/Tiddler/Unselected}escaperegexpaddprefix(?g)}}}>\\n\\t\u003C$list filter\\\allcurrentget\u003CmessageField>regexp\u003CescUnselected>\\\ variable\\\ignore\\\>\\n\\t\\t\u003C$text text{{{allcurrentget\u003CselectionField>matchcheckedthen{$:/language/Import/Upgrader/Tiddler/Selected}else}}}/>\\n\\t\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define libraryInfo()\\n\\\\whitespace trim\\n\u003C$set name\\\escUnselected\\\ value{{{{$:/language/Import/Upgrader/Tiddler/Unselected}escaperegexpaddprefix(?g)}}}>\\n\\t\u003C$list filter\\\allcurrentget\u003CmessageField>!regexp\u003CescUnselected>\\\ variable\\\ignore\\\>\\n\\t\\t\u003C$text text{{{allcurrentget\u003CmessageField>}}}/>\\n\\t\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define selectionField() selection-$(payloadTiddler)$\\n\\n\\\\define renameField() rename-$(payloadTiddler)$\\n\\n\\\\define suppressedField() suppressed-$(payloadTiddler)$\\n\\n\\\\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$\\n\\n\\\\define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$\\n\\n\\\\define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$\\n\\n\\\\define select-all-actions()\\n\\\\whitespace trim\\n\u003C$list filter\\\allcurrentplugintiddlerssorttitle\\\ variable\\\payloadTiddler\\\>\\n\u003C$action-setfield $field{{{ \u003CpayloadTiddler>addprefixselection- }}} $value{{$:/state/import/select-all}}/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-table-wrapper\\\>\\n\u003Ctable class\\\tc-import-table\\\>\\n\u003Ctbody>\\n\u003Ctr>\\n\u003Cth align\\\left\\\>\\n\u003C$checkbox tiddler\\\$:/state/import/select-all\\\ field\\\text\\\ checked\\\checked\\\ unchecked\\\unchecked\\\ default\\\checked\\\ actions\u003C\u003Cselect-all-actions>>>\\n \\n\u003C\u003Clingo Listing/Select/Caption>>\\n\u003C/$checkbox>\\n\u003C/th>\\n\u003Cth>\\n\u003C\u003Clingo Listing/Title/Caption>>\\n\u003C/th>\\n\u003Cth>\\n\u003C\u003Clingo Listing/Status/Caption>>\\n\u003C/th>\\n\u003C/tr>\\n\u003C$list filter\\\allcurrentplugintiddlerssorttitle\\\ variable\\\payloadTiddler\\\>\\n\u003Ctr class{{{\u003CcurrentTiddler>has\u003CsuppressedField>thentc-row-disabled ~subfilter\u003CpayloadTitleFilter>istiddlerthentc-row-warning }}}>\\n\u003Ctd>\\n\u003C$checkbox field\u003C\u003CselectionField>> checked\\\checked\\\ unchecked\\\unchecked\\\ default\\\checked\\\ disabled{{{\u003CcurrentTiddler>has\u003CsuppressedField>thenyeselseno}}}/>\\n\u003C/td>\\n\u003Ctd>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CrenameFieldState>> text\\\yes\\\ tag\\\div\\\>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CpreviewPopupState>> text\\\yes\\\ tag\\\div\\\ class\\\tc-flex\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown tc-flex-grow-1 tc-word-break\\\ set\u003C\u003CpreviewPopupState>> setTo\\\yes\\\ disabled{{{\u003CcurrentTiddler>has\u003CsuppressedField>thenyeselseno}}}>\\n\u003Cspan class\\\tc-small-gap-right\\\>{{$:/core/images/right-arrow}}\u003C/span>\u003C$text text{{{subfilter\u003CpayloadTitleFilter>}}}/>\\n\u003C/$button>\\n\u003C$list filter\\\\u003CcurrentTiddler>!has\u003CsuppressedField>\\\>\u003C$button class\\\tc-btn-invisible\\\ set\u003C\u003CrenameFieldState>> setTo\\\yes\\\ tooltip{{{\u003Clingo-base>addsuffixListing/Rename/Tooltipgettext}}}>{{$:/core/images/edit-button}}\u003C/$button>\u003C/$list>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CpreviewPopupState>> text\\\yes\\\ tag\\\div\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003CpreviewPopupState>> setTo\\\no\\\>\\n\u003Cspan class\\\tc-small-gap-right\\\>{{$:/core/images/down-arrow}}\u003C/span>\u003C$text text{{{subfilter\u003CpayloadTitleFilter>}}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CrenameFieldState>> text\\\yes\\\ tag\\\div\\\>\\n\u003C$text text{{{\u003Clingo-base>addsuffixListing/Rename/Promptgettext}}}/>\\n\u003C/$reveal>\\n\u003C/td>\\n\u003Ctd>\\n\u003C\u003CselectionInfo>>\\n \\n\u003C\u003ClibraryInfo>>\\n \\n\u003C\u003CoverWriteWarning>>\\n\u003C/td>\\n\u003C/tr>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CrenameFieldState>> text\\\yes\\\ tag\\\tr\\\>\\n\\t\u003Ctd colspan\\\3\\\>\\n\\t\\t\u003Cdiv class\\\tc-flex\\\>\\n\\t\\t\\t\u003C$edit-text tiddler\u003C\u003CnewImportTitleTiddler>> default{{{subfilter\u003CpayloadTitleFilter>}}} tag\\\input\\\ class\\\tc-import-rename tc-flex-grow-1\\\/>\\n\\t\\t\\t\u003Cspan class\\\tc-small-gap-left\\\>\\n\\t\\t\\t\\t\u003C$button class\\\tc-btn-invisible\\\ set\u003C\u003CrenameFieldState>> setTo\\\no\\\ tooltip{{{\u003Clingo-base>addsuffixListing/Rename/CancelRenamegettext}}}>\\n\\t\\t\\t\\t\\t{{$:/core/images/close-button}}\\n\\t\\t\\t\\t\\t\u003C$action-deletetiddler $tiddler\u003C\u003CnewImportTitleTiddler>>/>\\n\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-small-gap-right\\\/>\\n\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C$button class\\\tc-btn-invisible\\\ set\u003C\u003CrenameFieldState>> setTo\\\no\\\ tooltip{{{\u003Clingo-base>addsuffixListing/Rename/ConfirmRenamegettext}}}>\\n\\t\\t\\t\\t{{$:/core/images/done-button}}\\n\\t\\t\\t\\t\u003C$action-setfield $field\u003C\u003CrenameField>> $value{{{\u003CnewImportTitleTiddler>gettextminlength1else\u003CpayloadTiddler>}}} />\\n\\t\\t\\t\\t\u003C$action-deletetiddler $tiddler\u003C\u003CnewImportTitleTiddler>>/>\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\u003C/div>\\n\\t\u003C/td>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\yes\\\ state\u003C\u003CpreviewPopupState>> tag\\\tr\\\>\\n\u003Ctd colspan\\\3\\\>\\n\u003C$list filter\\\{$:/state/importpreviewtype}hastext\\\ variable\\\listItem\\\ emptyMessage{{$:/core/ui/ImportPreviews/Text}}>\\n\\t\u003Cdiv>\\n\\t\\t\u003C$transclude tiddler{{$:/state/importpreviewtype}}/>\\n\\t\u003C/div>\\n\u003C/$list>\\n\u003C/td>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/tbody>\\n\u003C/table>\\n\u003C/div>\\n\},\$:/core/ui/ImportPreviews/Diff\:{\title\:\$:/core/ui/ImportPreviews/Diff\,\tags\:\$:/tags/ImportPreview\,\caption\:\{{$:/language/Import/Listing/Preview/Diff}}\,\text\:\\u003C$macrocall $name\\\compareTiddlerText\\\ sourceTiddlerTitle\u003C\u003CpayloadTiddler>> destTiddlerTitle\u003C\u003CcurrentTiddler>> destSubTiddlerTitle\u003C\u003CpayloadTiddler>>/>\\n\},\$:/core/ui/ImportPreviews/DiffFields\:{\title\:\$:/core/ui/ImportPreviews/DiffFields\,\tags\:\$:/tags/ImportPreview\,\caption\:\{{$:/language/Import/Listing/Preview/DiffFields}}\,\text\:\\u003C$macrocall $name\\\compareTiddlers\\\ sourceTiddlerTitle\u003C\u003CpayloadTiddler>> destTiddlerTitle\u003C\u003CcurrentTiddler>> destSubTiddlerTitle\u003C\u003CpayloadTiddler>> exclude\\\text\\\/>\\n\},\$:/core/ui/ImportPreviews/Fields\:{\title\:\$:/core/ui/ImportPreviews/Fields\,\tags\:\$:/tags/ImportPreview\,\caption\:\{{$:/language/Import/Listing/Preview/Fields}}\,\text\:\\\\\whitespace trim\\n\u003Ctable class\\\tc-view-field-table\\\>\\n\u003Ctbody>\\n\u003C$list filter\\\\u003CpayloadTiddler>subtiddlerfields\u003CcurrentTiddler>sort -text\\\ variable\\\fieldName\\\>\\n\u003Ctr class\\\tc-view-field\\\>\\n\u003Ctd class\\\tc-view-field-name\\\>\\n\u003C$text text\u003C\u003CfieldName>>/>\\n\u003C/td>\\n\u003Ctd class\\\tc-view-field-value\\\>\\n\u003C$view field\u003C\u003CfieldName>> tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003CpayloadTiddler>>/>\\n\u003C/td>\\n\u003C/tr>\\n\u003C/$list>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/core/ui/ImportPreviews/Text\:{\title\:\$:/core/ui/ImportPreviews/Text\,\tags\:\$:/tags/ImportPreview\,\caption\:\{{$:/language/Import/Listing/Preview/Text}}\,\code-body\:\yes\,\text\:\\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003CpayloadTiddler>> mode\\\block\\\/>\\n\},\$:/core/ui/ImportPreviews/TextRaw\:{\title\:\$:/core/ui/ImportPreviews/TextRaw\,\tags\:\$:/tags/ImportPreview\,\caption\:\{{$:/language/Import/Listing/Preview/TextRaw}}\,\text\:\\u003Cpre>\u003Ccode>\u003C$view tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003CpayloadTiddler>> />\u003C/code>\u003C/pre>\},\$:/core/ui/KeyboardShortcuts/advanced-search\:{\title\:\$:/core/ui/KeyboardShortcuts/advanced-search\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((advanced-search))\,\text\:\\\\\whitespace trim\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\>\\n\u003C$action-navigate $to\\\$:/AdvancedSearch\\\ $scroll\\\yes\\\/>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\\\\\\\data-tiddler-title\\\$:/AdvancedSearch\\\ .tc-search input\\\\\\\\\ preventScroll\\\true\\\/>\\n\u003C/$navigator>\\n\},\$:/core/ui/KeyboardShortcuts/change-sidebar-layout\:{\title\:\$:/core/ui/KeyboardShortcuts/change-sidebar-layout\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((change-sidebar-layout))\,\text\:\\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}matchfixed-fluid\\\\\n\\temptyMessage\\\\u003C$action-setfield $tiddler$:/themes/tiddlywiki/vanilla/options/sidebarlayout textfixed-fluid/>\\\>\\n\u003C$action-setfield $tiddler\\\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\ text\\\fluid-fixed\\\/>\\n\u003C/$list>\\n\},\$:/core/ui/KeyboardShortcuts/new-image\:{\title\:\$:/core/ui/KeyboardShortcuts/new-image\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((new-image))\,\text\:\\\\\whitespace trim\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\ openLinkFromInsideRiver{{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver{{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename{{$:/config/RelinkOnRename}}>\\n{{$:/core/ui/Actions/new-image}}\\n\u003C/$navigator>\\n\},\$:/core/ui/KeyboardShortcuts/new-journal\:{\title\:\$:/core/ui/KeyboardShortcuts/new-journal\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((new-journal))\,\text\:\\\\\whitespace trim\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\ openLinkFromInsideRiver{{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver{{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename{{$:/config/RelinkOnRename}}>\\n{{$:/core/ui/Actions/new-journal}}\\n\u003C/$navigator>\\n\},\$:/core/ui/KeyboardShortcuts/new-tiddler\:{\title\:\$:/core/ui/KeyboardShortcuts/new-tiddler\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((new-tiddler))\,\text\:\\\\\whitespace trim\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\ openLinkFromInsideRiver{{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver{{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename{{$:/config/RelinkOnRename}}>\\n{{$:/core/ui/Actions/new-tiddler}}\\n\u003C/$navigator>\\n\},\$:/core/ui/KeyboardShortcuts/open-control-panel\:{\title\:\$:/core/ui/KeyboardShortcuts/open-control-panel\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((open-control-panel))\,\text\:\\\\\whitespace trim\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\>\\n\u003C$action-navigate $to\\\$:/ControlPanel\\\ $scroll\\\yes\\\/>\\n\u003C/$navigator>\\n\},\$:/core/ui/KeyboardShortcuts/refresh\:{\title\:\$:/core/ui/KeyboardShortcuts/refresh\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((refresh))\,\text\:\\u003C$action-sendmessage $message\\\tm-browser-refresh\\\/>\\n\},\$:/core/ui/KeyboardShortcuts/save-wiki\:{\title\:\$:/core/ui/KeyboardShortcuts/save-wiki\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((save-wiki))\,\text\:\\\\\whitespace trim\\n\u003C$wikify name\\\site-title\\\ text{{$:/config/SaveWikiButton/Filename}}>\\n\u003C$action-sendmessage $message\\\tm-save-wiki\\\ $param{{$:/config/SaveWikiButton/Template}} filename\u003C\u003Csite-title>>/>\\n\u003C/$wikify>\\n\},\$:/core/ui/KeyboardShortcuts/sidebar-search\:{\title\:\$:/core/ui/KeyboardShortcuts/sidebar-search\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((sidebar-search))\,\text\:\\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-search input\\\/>\\n\},\$:/core/ui/KeyboardShortcuts/switcher\:{\title\:\$:/core/ui/KeyboardShortcuts/switcher\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((layout-switcher))\,\text\:\\u003C$action-sendmessage $message\\\tm-show-switcher\\\ switch\\\layout\\\/>\},\$:/core/ui/KeyboardShortcuts/toggle-sidebar\:{\title\:\$:/core/ui/KeyboardShortcuts/toggle-sidebar\,\tags\:\$:/tags/KeyboardShortcut\,\key\:\((toggle-sidebar))\,\text\:\\\\\whitespace trim\\n\u003C$list\\n\\tfilter\\\$:/state/sidebarismissing {$:/state/sidebar}removeprefixyes\\\\\n\\temptyMessage\\\\u003C$action-setfield $tiddler$:/state/sidebar textyes/>\\\>\\n\u003C$action-setfield $tiddler\\\$:/state/sidebar\\\ text\\\no\\\/>\\n\u003C/$list>\\n\},\$:/snippets/LayoutSwitcher\:{\title\:\$:/snippets/LayoutSwitcher\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ControlPanel/LayoutSwitcher/Caption}}\,\text\:\\\\\whitespace trim\\n\u003C$linkcatcher to\\\$:/layout\\\>\\n\u003Cdiv class\\\tc-chooser\\\>\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/Layout $:/core/ui/PageTemplate +!isdraftsortname\\\>\\n\u003C$list\\n\\tfilter\\\{$:/layout}!hastext\\\\\n\\tvariable\\\ignore\\\\\n\\temptyMessage\\\\\\\\\\\\\whitespace trim\\n\\t\\t\u003C$set name\\\cls\\\ filter\\\allcurrentfield:title{$:/layout}\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\\n\\t\\t\u003Cdiv class\u003C\u003Ccls>>>\\n\\t\\t\u003C$link to{{!!title}}>\\n\\t\\t\u003C$transclude tiddler{{{ \u003CcurrentTiddler>geticon }}}/>\u003C$transclude field\\\name\\\/> - \u003C$transclude field\\\description\\\/>\\n\\t\\t\u003C/$link>\u003C/div>\u003C/$set>\\n\\\\\\\\\>\\n\u003C$set name\\\cls\\\ filter\\\allcurrentfield:title$:/core/ui/PageTemplate\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\\n\u003Cdiv class\u003C\u003Ccls>>>\\n\u003C$link to{{!!title}}>\\n\u003C$transclude tiddler{{{ \u003CcurrentTiddler>geticon }}}/>\u003C$transclude field\\\name\\\/> - \u003C$transclude field\\\description\\\/>\\n\u003C/$link>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$linkcatcher>\\n\},\$:/core/ui/ListItemTemplate\:{\title\:\$:/core/ui/ListItemTemplate\,\text\:\\u003Cdiv class\\\tc-menu-list-item\\\>\u003C$link />\u003C/div>\},\$:/snippets/ListTaggedCascade\:{\title\:\$:/snippets/ListTaggedCascade\,\text\:\\\\\whitespace trim\\n{{||$:/language/ControlPanel/Cascades/TagPrompt}}\\n\\n\u003Col>\\n\u003C$list filter\\\allshadows+tiddlerstag\u003CcurrentTiddler>\\\>\\n\u003Cli>\\n\u003Cdiv>\\n\u003C$link>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/$link>\\n\u003C/div>\\n\u003C$codeblock code{{!!text}}/>\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ol>\\n\},\$:/Manager/ItemMain/Fields\:{\title\:\$:/Manager/ItemMain/Fields\,\tags\:\$:/tags/Manager/ItemMain\,\caption\:\{{$:/language/Manager/Item/Fields}}\,\text\:\\\\\whitespace trim\\n\u003Ctable>\\n\u003Ctbody>\\n\u003C$list filter\\\allcurrentfieldssorttitle -text\\\ template\\\$:/core/ui/TiddlerFieldTemplate\\\ variable\\\listItem\\\/>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/Manager/ItemMain/RawText\:{\title\:\$:/Manager/ItemMain/RawText\,\tags\:\$:/tags/Manager/ItemMain\,\caption\:\{{$:/language/Manager/Item/RawText}}\,\text\:\\u003Cpre>\u003Ccode>\u003C$view/>\u003C/code>\u003C/pre>\\n\},\$:/Manager/ItemMain/WikifiedText\:{\title\:\$:/Manager/ItemMain/WikifiedText\,\tags\:\$:/tags/Manager/ItemMain\,\caption\:\{{$:/language/Manager/Item/WikifiedText}}\,\text\:\\u003C$transclude mode\\\block\\\/>\\n\},\$:/Manager/ItemSidebar/Colour\:{\title\:\$:/Manager/ItemSidebar/Colour\,\tags\:\$:/tags/Manager/ItemSidebar\,\caption\:\{{$:/language/Manager/Item/Colour}}\,\text\:\\\\\define swatch-styles()\\nheight: 1em;\\nbackground-color: $(colour)$\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003C$vars colour{{!!color}}>\\n\u003Cp style\u003C\u003Cswatch-styles>>/>\\n\u003C/$vars>\\n\u003Cp>\\n\u003C$edit-text field\\\color\\\ tag\\\input\\\ type\\\color\\\/>\\n / \\n\u003C$edit-text field\\\color\\\ tag\\\input\\\ type\\\text\\\ size\\\9\\\/>\\n\u003C/p>\\n\},\$:/Manager/ItemSidebar/Icon\:{\title\:\$:/Manager/ItemSidebar/Icon\,\tags\:\$:/tags/Manager/ItemSidebar\,\caption\:\{{$:/language/Manager/Item/Icon}}\,\text\:\\\\\whitespace trim\\n\u003Cp>\\n\u003Cdiv class\\\tc-manager-icon-editor\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/image-picker\\\>> class\\\tc-btn-invisible\\\>\\n\u003C$transclude tiddler{{!!icon}}>\\n{{$:/language/Manager/Item/Icon/None}}\\n\u003C/$transclude>\\n\u003C/$button>\\n\u003Cdiv class\\\tc-block-dropdown-wrapper\\\ style\\\position: static;\\\>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/image-picker\\\>> type\\\nomatch\\\ text\\\\\\ default\\\\\\ tag\\\div\\\ class\\\tc-popup\\\>\\n\u003Cdiv class\\\tc-block-dropdown tc-popup-keep\\\ style\\\width: 80%; left: 10%; right: 10%; padding: 0.5em;\\\>\\n\u003C$macrocall\\n\\t$name\\\image-picker-include-tagged-images\\\\\n\\tactions\\\\u003C$action-setfield $fieldicon $value\u003C\u003CimageTitle>>/>\u003C$action-deletetiddler $tiddler\u003C\u003Cqualify $:/state/popup/image-picker>>/>\\\/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C/div>\\n\u003C/p>\\n\},\$:/Manager/ItemSidebar/Tags\:{\title\:\$:/Manager/ItemSidebar/Tags\,\tags\:\$:/tags/Manager/ItemSidebar\,\caption\:\{{$:/language/Manager/Item/Tags}}\,\text\:\\\\\whitespace trim\\n\\\\define tag-checkbox-actions()\\n\u003C$action-listops\\n\\t$tiddler\\\$:/config/Manager/RecentTags\\\\\n\\t$subfilter\\\\u003Ctag> list$:/config/Manager/RecentTags +limit12\\\\\n/>\\n\\\\end\\n\\n\\\\define tag-picker-actions()\\n\u003C\u003Ctag-checkbox-actions>>\\n\\\\end\\n\\n\u003Cp>\\n\u003C$list filter\\\allcurrenttags list$:/config/Manager/RecentTags +sorttitle \\\ variable\\\tag\\\ storyview\\\pop\\\>\\n\u003Cdiv>\\n\u003C$checkbox tiddler\u003C\u003CcurrentTiddler>> tag\u003C\u003Ctag>> actions\u003C\u003Ctag-checkbox-actions>>>\\n\u003C$macrocall $name\\\tag-pill\\\ tag\u003C\u003Ctag>>/>\\n\u003C/$checkbox>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/p>\\n\u003Cp>\\n\u003C$fieldmangler>\\n\u003C$macrocall $name\\\tag-picker\\\ actions\u003C\u003Ctag-picker-actions>>/>\\n\u003C/$fieldmangler>\\n\u003C/p>\\n\},\$:/Manager/ItemSidebar/Tools\:{\title\:\$:/Manager/ItemSidebar/Tools\,\tags\:\$:/tags/Manager/ItemSidebar\,\caption\:\{{$:/language/Manager/Item/Tools}}\,\text\:\\\\\whitespace trim\\n\u003Cp>\\n\u003C$button to\u003C\u003CcurrentTiddler>>>\\n{{$:/core/images/link}} open\\n\u003C/$button>\\n\u003C/p>\\n\u003Cp>\\n\u003C$button message\\\tm-edit-tiddler\\\ param\u003C\u003CcurrentTiddler>>>\\n{{$:/core/images/edit-button}} edit\\n\u003C/$button>\\n\u003C/p>\\n\},\$:/Manager\:{\title\:\$:/Manager\,\icon\:\$:/core/images/list\,\color\:\#bbb\,\text\:\\\\\define lingo-base() $:/language/Manager/\\n\\n\\\\define list-item-content-item()\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-manager-list-item-content-item\\\>\\n\\t\u003C$vars state-title\\\\\\\\\$:/state/popup/manager/item/$(listItem)$\\\\\\\\\>\\n\\t\\t\u003C$reveal state\u003C\u003Cstate-title>> type\\\match\\\ text\\\show\\\ default\\\show\\\ tag\\\div\\\>\\n\\t\\t\\t\u003C$button set\u003C\u003Cstate-title>> setTo\\\hide\\\ class\\\tc-btn-invisible tc-manager-list-item-content-item-heading\\\>\\n\\t\\t\\t\\t{{$:/core/images/down-arrow}} \u003C$transclude tiddler\u003C\u003ClistItem>> field\\\caption\\\/>\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\u003C/$reveal>\\n\\t\\t\u003C$reveal state\u003C\u003Cstate-title>> type\\\nomatch\\\ text\\\show\\\ default\\\show\\\ tag\\\div\\\>\\n\\t\\t\\t\u003C$button set\u003C\u003Cstate-title>> setTo\\\show\\\ class\\\tc-btn-invisible tc-manager-list-item-content-item-heading\\\>\\n\\t\\t\\t\\t{{$:/core/images/right-arrow}} \u003C$transclude tiddler\u003C\u003ClistItem>> field\\\caption\\\/>\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\u003C/$reveal>\\n\\t\\t\u003C$reveal state\u003C\u003Cstate-title>> type\\\match\\\ text\\\show\\\ default\\\show\\\ tag\\\div\\\ class\\\tc-manager-list-item-content-item-body\\\>\\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>>/>\\n\\t\\t\u003C/$reveal>\\n\\t\u003C/$vars>\\n\u003C/div>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-manager-wrapper\\\>\\n\\t\u003Cdiv class\\\tc-manager-controls\\\>\\n\\t\\t\u003Cdiv class\\\tc-manager-control\\\>\\n\\t\\t\\t\u003C\u003Clingo Controls/Show/Prompt>> \u003C$select tiddler\\\$:/config/Manager/Show\\\ default\\\tiddlers\\\>\\n\\t\\t\\t\\t\u003Coption value\\\tiddlers\\\>\u003C\u003Clingo Controls/Show/Option/Tiddlers>>\u003C/option>\\n\\t\\t\\t\\t\u003Coption value\\\tags\\\>\u003C\u003Clingo Controls/Show/Option/Tags>>\u003C/option>\\n\\t\\t\\t\u003C/$select>\\n\\t\\t\u003C/div>\\n\\t\\t\u003Cdiv class\\\tc-manager-control\\\>\\n\\t\\t\\t\u003C\u003Clingo Controls/Search/Prompt>> \u003C$edit-text tiddler\\\$:/config/Manager/Filter\\\ tag\\\input\\\ default\\\\\\ placeholder{{$:/language/Manager/Controls/Search/Placeholder}}/>\\n\\t\\t\u003C/div>\\n\\t\\t\u003Cdiv class\\\tc-manager-control\\\>\\n\\t\\t\\t\u003C\u003Clingo Controls/FilterByTag/Prompt>> \u003C$select tiddler\\\$:/config/Manager/Tag\\\ default\\\\\\>\\n\\t\\t\\t\\t\u003Coption value\\\\\\>\u003C\u003Clingo Controls/FilterByTag/None>>\u003C/option>\\n\\t\\t\\t\\t\u003C$list filter\\\!is{$:/config/Manager/System}tags!issystemsorttitle\\\ variable\\\tag\\\>\\n\\t\\t\\t\\t\\t\u003Coption value\u003C\u003Ctag>>>\u003C$text text\u003C\u003Ctag>>/>\u003C/option>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$select>\\n\\t\\t\u003C/div>\\n\\t\\t\u003Cdiv class\\\tc-manager-control\\\>\\n\\t\\t\\t\u003C\u003Clingo Controls/Sort/Prompt>> \u003C$select tiddler\\\$:/config/Manager/Sort\\\ default\\\title\\\>\\n\\t\\t\\t\\t\u003Coptgroup label\\\Common\\\>\\n\\t\\t\\t\\t\\t\u003C$list filter\\\title modified modifier created creator created\\\ variable\\\field\\\>\\n\\t\\t\\t\\t\\t\\t\u003Coption value\u003C\u003Cfield>>>\u003C$text text\u003C\u003Cfield>>/>\u003C/option>\\n\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C/optgroup>\\n\\t\\t\\t\\t\u003Coptgroup label\\\All\\\>\\n\\t\\t\\t\\t\\t\u003C$list filter\\\all{$:/config/Manager/Show}!is{$:/config/Manager/System}fieldssorttitle -title -modified -modifier -created -creator -created\\\ variable\\\field\\\>\\n\\t\\t\\t\\t\\t\\t\u003Coption value\u003C\u003Cfield>>>\u003C$text text\u003C\u003Cfield>>/>\u003C/option>\\n\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C/optgroup>\\n\\t\\t\\t\u003C/$select>\\n\\t\\t\\t \\n\\t\\t\\t\u003C$checkbox tiddler\\\$:/config/Manager/Order\\\ field\\\text\\\ checked\\\reverse\\\ unchecked\\\forward\\\ default\\\forward\\\>\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t\u003C\u003Clingo Controls/Order/Prompt>>\\n\\t\\t\\t\u003C/$checkbox>\\n\\t\\t\u003C/div>\\n\\t\\t\u003Cdiv class\\\tc-manager-control\\\>\\n\\t\\t\\t\u003C$checkbox tiddler\\\$:/config/Manager/System\\\ field\\\text\\\ checked\\\\\\ unchecked\\\system\\\ default\\\system\\\>\\n\\t\\t\\t\\t \\n\\t\\t\\t\\t{{$:/language/SystemTiddlers/Include/Prompt}}\\n\\t\\t\\t\u003C/$checkbox>\\n\\t\\t\u003C/div>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tc-manager-list\\\>\\n\\t\\t\u003C$list filter\\\all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}\\\>\\n\\t\\t\\t\u003C$vars transclusion\u003C\u003CcurrentTiddler>>>\\n\\t\\t\\t\\t\u003Cdiv style\\\tc-manager-list-item\\\>\\n\\t\\t\\t\\t\\t\u003C$button popup\u003C\u003Cqualify \\\$:/state/manager/popup\\\>> class\\\tc-btn-invisible tc-manager-list-item-heading\\\ selectedClass\\\tc-manager-list-item-heading-selected\\\>\\n\\t\\t\\t\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\\t\u003C$reveal state\u003C\u003Cqualify \\\$:/state/manager/popup\\\>> type\\\nomatch\\\ text\\\\\\ default\\\\\\ tag\\\div\\\ class\\\tc-manager-list-item-content tc-popup-handle\\\>\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class\\\tc-manager-list-item-content-tiddler\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Manager/ItemMain!hasdraft.of\\\ variable\\\listItem\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C\u003Clist-item-content-item>>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\\t\\t\u003Cdiv class\\\tc-manager-list-item-content-sidebar\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Manager/ItemSidebar!hasdraft.of\\\ variable\\\listItem\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C\u003Clist-item-content-item>>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C/$vars>\\n\\t\\t\u003C/$list>\\n\\t\u003C/div>\\n\u003C/div>\\n\},\$:/core/ui/MissingTemplate\:{\title\:\$:/core/ui/MissingTemplate\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-tiddler-missing\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/missing\\\>> class\\\tc-btn-invisible tc-missing-tiddler-label\\\>\\n\u003C$view field\\\title\\\ format\\\text\\\ />\\n\u003C/$button>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/missing\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003Chr>\\n\u003C$list filter\\\allcurrentbacklinkssorttitle\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\},\$:/core/ui/MoreSideBar/All\:{\title\:\$:/core/ui/MoreSideBar/All\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/All/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/AllTiddlers!!filter}} template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/Drafts\:{\title\:\$:/core/ui/MoreSideBar/Drafts\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Drafts/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/Drafts!!filter}} template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/Explorer\:{\title\:\$:/core/ui/MoreSideBar/Explorer\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Explorer/Caption}}\,\text\:\\u003C\u003Ctree \\\$:/\\\>>\\n\},\$:/core/ui/MoreSideBar/Missing\:{\title\:\$:/core/ui/MoreSideBar/Missing\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Missing/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/Missing!!filter}} template\\\$:/core/ui/MissingTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/Orphans\:{\title\:\$:/core/ui/MoreSideBar/Orphans\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Orphans/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/Orphans!!filter}} template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/Plugins\:{\title\:\$:/core/ui/MoreSideBar/Plugins\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/ControlPanel/Plugins/Caption}}\,\text\:\\\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\\n\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/MoreSideBar/Plugins!hasdraft.of\\\ default\\\$:/core/ui/MoreSideBar/Plugins/Plugins\\\ explicitState\\\$:/state/tab-1163638994\\\/>\\n\},\$:/core/ui/MoreSideBar/Recent\:{\title\:\$:/core/ui/MoreSideBar/Recent\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Recent/Caption}}\,\text\:\\u003C$macrocall $name\\\timeline\\\ format{{$:/language/RecentChanges/DateFormat}}/>\\n\},\$:/core/ui/MoreSideBar/Shadows\:{\title\:\$:/core/ui/MoreSideBar/Shadows\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Shadows/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/ShadowTiddlers!!filter}} template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/System\:{\title\:\$:/core/ui/MoreSideBar/System\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/System/Caption}}\,\text\:\\u003C$list filter{{$:/core/Filters/SystemTiddlers!!filter}} template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/MoreSideBar/Tags\:{\title\:\$:/core/ui/MoreSideBar/Tags\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Tags/Caption}}\,\text\:\\\\\whitespace trim\\n\u003C$let tv-config-toolbar-icons\\\yes\\\ tv-config-toolbar-text\\\yes\\\ tv-config-toolbar-class\\\\\\>\\n\\t\u003Cdiv class\\\tc-tiny-v-gap-bottom\\\>\\n\\t\\t{{$:/core/ui/Buttons/tag-manager}}\\n\\t\u003C/div>\\n\u003C/$let>\\n\u003C$list filter{{$:/core/Filters/AllTags!!filter}}>\\n\\t\u003Cdiv class\\\tc-tiny-v-gap-bottom\\\>\\n\\t\\t\u003C$transclude tiddler\\\$:/core/ui/TagTemplate\\\/>\\n\\t\u003C/div>\\n\u003C/$list>\\n\u003Chr class\\\tc-untagged-separator\\\>\\n{{$:/core/ui/UntaggedTemplate}}\\n\},\$:/core/ui/MoreSideBar/Types\:{\title\:\$:/core/ui/MoreSideBar/Types\,\tags\:\$:/tags/MoreSideBar\,\caption\:\{{$:/language/SideBar/Types/Caption}}\,\text\:\\\\\whitespace trim\\n\u003C$list filter{{$:/core/Filters/TypedTiddlers!!filter}}>\\n\u003Cdiv class\\\tc-menu-list-item\\\>\\n\u003C$view field\\\type\\\/>\\n\u003C$list filter\\\type{!!type}!issystemsorttitle\\\>\\n\u003Cdiv class\\\tc-menu-list-subitem\\\>\\n\u003C$link to{{!!title}}>\u003C$view field\\\title\\\/>\u003C/$link>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$list>\\n\},\$:/core/ui/MoreSideBar/Plugins/Languages\:{\title\:\$:/core/ui/MoreSideBar/Plugins/Languages\,\tags\:\$:/tags/MoreSideBar/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Languages/Caption}}\,\text\:\\u003C$list filter\\\!hasdraft.ofplugin-typelanguagesortname\\\ template\\\$:/core/ui/PluginListItemTemplate\\\ emptyMessage{{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\\n\},\$:/core/ui/MoreSideBar/Plugins/Plugins\:{\title\:\$:/core/ui/MoreSideBar/Plugins/Plugins\,\tags\:\$:/tags/MoreSideBar/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Plugins/Caption}}\,\text\:\\u003C$list filter\\\!hasdraft.ofplugin-typepluginsortname\\\ template\\\$:/core/ui/PluginListItemTemplate\\\ emptyMessage{{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\\n\},\$:/core/ui/MoreSideBar/Plugins/Theme\:{\title\:\$:/core/ui/MoreSideBar/Plugins/Theme\,\tags\:\$:/tags/MoreSideBar/Plugins\,\caption\:\{{$:/language/ControlPanel/Plugins/Themes/Caption}}\,\text\:\\u003C$list filter\\\!hasdraft.ofplugin-typethemesortname\\\ template\\\$:/core/ui/PluginListItemTemplate\\\ emptyMessage{{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\\n\},\$:/core/ui/Buttons/advanced-search\:{\title\:\$:/core/ui/Buttons/advanced-search\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}\,\description\:\{{$:/language/Buttons/AdvancedSearch/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure advanced-search-button(class)\\n\\\\whitespace trim\\n\u003C$button to\\\$:/AdvancedSearch\\\ tooltip{{$:/language/Buttons/AdvancedSearch/Hint}} aria-label{{$:/language/Buttons/AdvancedSearch/Caption}} class`$(tv-config-toolbar-class)$ $(class)$`>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/advanced-search-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/AdvancedSearch/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\list$:/StoryList +field:title$:/AdvancedSearch\\\ emptyMessage\u003C\u003Cadvanced-search-button>>>\\n\u003C\u003Cadvanced-search-button \\\tc-selected\\\>>\\n\u003C/$list>\\n\},\$:/core/ui/Buttons/close-all\:{\title\:\$:/core/ui/Buttons/close-all\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}\,\description\:\{{$:/language/Buttons/CloseAll/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-close-all-tiddlers\\\ tooltip{{$:/language/Buttons/CloseAll/Hint}} aria-label{{$:/language/Buttons/CloseAll/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/close-all-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/CloseAll/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/control-panel\:{\title\:\$:/core/ui/Buttons/control-panel\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}\,\description\:\{{$:/language/Buttons/ControlPanel/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure control-panel-button(class)\\n\\\\whitespace trim\\n\u003C$button to\\\$:/ControlPanel\\\ tooltip{{$:/language/Buttons/ControlPanel/Hint}} aria-label{{$:/language/Buttons/ControlPanel/Caption}} class`$(tv-config-toolbar-class)$ $(class)$`>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/options-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/ControlPanel/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\list\u003Ctv-story-list> +field:title$:/ControlPanel\\\ emptyMessage\u003C\u003Ccontrol-panel-button>>>\\n\u003C\u003Ccontrol-panel-button \\\tc-selected\\\>>\\n\u003C/$list>\\n\},\$:/core/ui/Buttons/encryption\:{\title\:\$:/core/ui/Buttons/encryption\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}\,\description\:\{{$:/language/Buttons/Encryption/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$reveal type\\\match\\\ state\\\$:/isEncrypted\\\ text\\\yes\\\>\\n\u003C$button message\\\tm-clear-password\\\ tooltip{{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label{{$:/language/Buttons/Encryption/ClearPassword/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/locked-padlock}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Encryption/ClearPassword/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/isEncrypted\\\ text\\\yes\\\>\\n\u003C$button message\\\tm-set-password\\\ tooltip{{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label{{$:/language/Buttons/Encryption/SetPassword/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/unlocked-padlock}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Encryption/SetPassword/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/export-page\:{\title\:\$:/core/ui/Buttons/export-page\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}\,\description\:\{{$:/language/Buttons/ExportPage/Hint}}\,\text\:\\u003C$transclude $variable\\\exportButton\\\ exportFilter\\\!issystemsorttitle\\\ lingoBase\\\$:/language/Buttons/ExportPage/\\\/>\},\$:/core/ui/Buttons/fold-all\:{\title\:\$:/core/ui/Buttons/fold-all\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}\,\description\:\{{$:/language/Buttons/FoldAll/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/FoldAll/Hint}} aria-label{{$:/language/Buttons/FoldAll/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-fold-all-tiddlers\\\ $param\u003C\u003CcurrentTiddler>> foldedStatePrefix\\\$:/state/folded/\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/fold-all-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/FoldAll/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/full-screen\:{\title\:\$:/core/ui/Buttons/full-screen\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}\,\description\:\{{$:/language/Buttons/FullScreen/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-full-screen\\\ tooltip{{$:/language/Buttons/FullScreen/Hint}} aria-label{{$:/language/Buttons/FullScreen/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/full-screen-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/FullScreen/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/home\:{\title\:\$:/core/ui/Buttons/home\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}\,\description\:\{{$:/language/Buttons/Home/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-home\\\ tooltip{{$:/language/Buttons/Home/Hint}} aria-label{{$:/language/Buttons/Home/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/home-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Home/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/import\:{\title\:\$:/core/ui/Buttons/import\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}\,\description\:\{{$:/language/Buttons/Import/Hint}}\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-file-input-wrapper\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Import/Hint}} aria-label{{$:/language/Buttons/Import/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/import-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Import/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C$browse tooltip{{$:/language/Buttons/Import/Hint}}/>\\n\u003C/div>\\n\},\$:/core/ui/Buttons/language\:{\title\:\$:/core/ui/Buttons/language\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}\,\description\:\{{$:/language/Buttons/Language/Hint}}\,\text\:\\\\\whitespace trim\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/language\\\>> tooltip{{$:/language/Buttons/Language/Hint}} aria-label{{$:/language/Buttons/Language/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/language}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Language/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/span>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/language\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n{{$:/snippets/languageswitcher}}\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/layout\:{\title\:\$:/core/ui/Buttons/layout\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/layout-button}} {{$:/language/Buttons/LayoutSwitcher/Caption}}\,\description\:\{{$:/language/LayoutSwitcher/Description}}\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/LayoutSwitcher/Hint}} aria-label{{$:/language/Buttons/LayoutSwitcher/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-show-switcher\\\ switch\\\layout\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/layout-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/LayoutSwitcher/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/manager\:{\title\:\$:/core/ui/Buttons/manager\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}\,\description\:\{{$:/language/Buttons/Manager/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure manager-button(class)\\n\\\\whitespace trim\\n\u003C$button to\\\$:/Manager\\\ tooltip{{$:/language/Buttons/Manager/Hint}} aria-label{{$:/language/Buttons/Manager/Caption}} class`$(tv-config-toolbar-class)$ $(class)$`>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/list}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Manager/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\list$:/StoryList +field:title$:/Manager\\\ emptyMessage\u003C\u003Cmanager-button>>>\\n\u003C\u003Cmanager-button \\\tc-selected\\\>>\\n\u003C/$list>\\n\},\$:/core/ui/Buttons/more-page-actions\:{\title\:\$:/core/ui/Buttons/more-page-actions\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}\,\description\:\{{$:/language/Buttons/More/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\define config-title() $:/config/PageControlButtons/Visibility/$(listItem)$\\n\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/more\\\>>\\n\\ttooltip{{$:/language/Buttons/More/Hint}}\\n\\taria-label{{$:/language/Buttons/More/Caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n\\tselectedClass\\\tc-selected\\\\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/down-arrow}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text{{$:/language/Buttons/More/Caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/more\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\\t\u003Cdiv class\\\tc-drop-down\\\>\\n\\t\\t\u003C$let tv-config-toolbar-icons\\\yes\\\ tv-config-toolbar-text\\\yes\\\ tv-config-toolbar-class\\\tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/PageControls!hasdraft.of -$:/core/ui/Buttons/more-page-actions\\\\\n\\t\\t\\t\\tvariable\\\listItem\\\\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$reveal type\\\match\\\ state\u003C\u003Cconfig-title>> text\\\hide\\\>\\n\\t\\t\\t\\t\\t\u003C$set name\\\tv-config-toolbar-class\\\\\n\\t\\t\\t\\t\\t\\tfilter\\\\u003Ctv-config-toolbar-class> \u003ClistItem>encodeuricomponentaddprefixtc-btn-\\\\\n\\t\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\inline\\\/>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$let>\\n\\t\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/network-activity\:{\title\:\$:/core/ui/Buttons/network-activity\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/network-activity}} {{$:/language/Buttons/NetworkActivity/Caption}}\,\description\:\{{$:/language/Buttons/NetworkActivity/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-http-cancel-all-requests\\\ tooltip{{$:/language/Buttons/NetworkActivity/Hint}} aria-label{{$:/language/Buttons/NetworkActivity/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/network-activity}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NetworkActivity/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/new-image\:{\title\:\$:/core/ui/Buttons/new-image\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}\,\description\:\{{$:/language/Buttons/NewImage/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/NewImage/Hint}} aria-label{{$:/language/Buttons/NewImage/Caption}} class\u003C\u003Ctv-config-toolbar-class>> actions{{$:/core/ui/Actions/new-image}}>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/new-image-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NewImage/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/new-journal\:{\title\:\$:/core/ui/Buttons/new-journal\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}\,\description\:\{{$:/language/Buttons/NewJournal/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure journalButton()\\n\u003C$button tooltip{{$:/language/Buttons/NewJournal/Hint}} aria-label{{$:/language/Buttons/NewJournal/Caption}} class\u003C\u003Ctv-config-toolbar-class>> actions{{$:/core/ui/Actions/new-journal}}>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/new-journal-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NewJournal/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\u003C\u003CjournalButton>>\\n\},\$:/core/ui/Buttons/new-tiddler\:{\title\:\$:/core/ui/Buttons/new-tiddler\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}\,\description\:\{{$:/language/Buttons/NewTiddler/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button actions{{$:/core/ui/Actions/new-tiddler}} tooltip{{$:/language/Buttons/NewTiddler/Hint}} aria-label{{$:/language/Buttons/NewTiddler/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/new-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NewTiddler/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/palette\:{\title\:\$:/core/ui/Buttons/palette\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}\,\description\:\{{$:/language/Buttons/Palette/Hint}}\,\text\:\\\\\whitespace trim\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/palette\\\>> tooltip{{$:/language/Buttons/Palette/Hint}} aria-label{{$:/language/Buttons/Palette/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/palette}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Palette/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/span>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/palette\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\ style\\\font-size:0.7em;\\\>\\n{{$:/snippets/paletteswitcher}}\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/print\:{\title\:\$:/core/ui/Buttons/print\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}\,\description\:\{{$:/language/Buttons/Print/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-print\\\ tooltip{{$:/language/Buttons/Print/Hint}} aria-label{{$:/language/Buttons/Print/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/print-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Print/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/refresh\:{\title\:\$:/core/ui/Buttons/refresh\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}\,\description\:\{{$:/language/Buttons/Refresh/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-browser-refresh\\\ tooltip{{$:/language/Buttons/Refresh/Hint}} aria-label{{$:/language/Buttons/Refresh/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/refresh-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Refresh/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/save-wiki\:{\title\:\$:/core/ui/Buttons/save-wiki\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/save-button-dynamic}} {{$:/language/Buttons/SaveWiki/Caption}}\,\description\:\{{$:/language/Buttons/SaveWiki/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure saveActions()\\n\u003C$wikify name\\\site-title\\\ text{{$:/config/SaveWikiButton/Filename}}>\\n\\t\u003C$action-sendmessage $message\\\tm-save-wiki\\\ $param{{$:/config/SaveWikiButton/Template}} filename\u003C\u003Csite-title>>/>\\n\u003C/$wikify>\\n\\\\end\\n\\n\u003C$button actions\u003C\u003CsaveActions>>\\n\\ttooltip{{$:/language/Buttons/SaveWiki/Hint}}\\n\\taria-label{{$:/language/Buttons/SaveWiki/Caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\u003Cspan class\\\tc-dirty-indicator\\\>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/save-button-dynamic}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/SaveWiki/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/span>\\n\u003C/$button>\\n\},\$:/core/ui/Buttons/storyview\:{\title\:\$:/core/ui/Buttons/storyview\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}\,\description\:\{{$:/language/Buttons/StoryView/Hint}}\,\text\:\\\\\whitespace trim\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/storyview\\\>> tooltip{{$:/language/Buttons/StoryView/Hint}} aria-label{{$:/language/Buttons/StoryView/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\u003C$set name\\\storyview\\\ value{{$:/view}}>\\n\u003C$transclude tiddler`$:/core/images/storyview-$(storyview)$`/>\\n\u003C/$set>\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/StoryView/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/span>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/storyview\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n{{$:/snippets/viewswitcher}}\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/tag-manager\:{\title\:\$:/core/ui/Buttons/tag-manager\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}\,\description\:\{{$:/language/Buttons/TagManager/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure control-panel-button(class)\\n\\\\whitespace trim\\n\u003C$button to\\\$:/TagManager\\\ tooltip{{$:/language/Buttons/TagManager/Hint}} aria-label{{$:/language/Buttons/TagManager/Caption}} class`$(tv-config-toolbar-class)$ $(class)$`>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/tag-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/TagManager/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\list$:/StoryList +field:title$:/TagManager\\\ emptyMessage\u003C\u003Ccontrol-panel-button>>>\\n\u003C\u003Ccontrol-panel-button \\\tc-selected\\\>>\\n\u003C/$list>\\n\},\$:/core/ui/Buttons/theme\:{\title\:\$:/core/ui/Buttons/theme\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}\,\description\:\{{$:/language/Buttons/Theme/Hint}}\,\text\:\\\\\whitespace trim\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/theme\\\>> tooltip{{$:/language/Buttons/Theme/Hint}} aria-label{{$:/language/Buttons/Theme/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/theme-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text{{$:/language/Buttons/Theme/Caption}}/>\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/span>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/theme\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n\u003C$linkcatcher to\\\$:/theme\\\>\\n{{$:/snippets/themeswitcher}}\\n\u003C/$linkcatcher>\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/timestamp\:{\title\:\$:/core/ui/Buttons/timestamp\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}\,\description\:\{{$:/language/Buttons/Timestamp/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/config/TimestampDisable\\\ text\\\yes\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Timestamp/On/Hint}} aria-label{{$:/language/Buttons/Timestamp/On/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-setfield $tiddler\\\$:/config/TimestampDisable\\\ $value\\\yes\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/timestamp-on}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Timestamp/On/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/config/TimestampDisable\\\ text\\\yes\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Timestamp/Off/Hint}} aria-label{{$:/language/Buttons/Timestamp/Off/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-setfield $tiddler\\\$:/config/TimestampDisable\\\ $value\\\no\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/timestamp-off}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Timestamp/Off/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/unfold-all\:{\title\:\$:/core/ui/Buttons/unfold-all\,\tags\:\$:/tags/PageControls\,\caption\:\{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}\,\description\:\{{$:/language/Buttons/UnfoldAll/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/UnfoldAll/Hint}} aria-label{{$:/language/Buttons/UnfoldAll/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-unfold-all-tiddlers\\\ $param\u003C\u003CcurrentTiddler>> foldedStatePrefix\\\$:/state/folded/\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/unfold-all-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/UnfoldAll/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\},\$:/core/ui/PageTemplate/pagecontrols\:{\title\:\$:/core/ui/PageTemplate/pagecontrols\,\text\:\\\\\whitespace trim\\n\\\\function config-title() $:/config/PageControlButtons/Visibility/$(listItem)$substitute\\n\\n\u003Cdiv class\\\tc-page-controls\\\>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/PageControls!hasdraft.of\\\ variable\\\listItem\\\>\\n\\t\\t\u003C$list filter\\\\u003Cconfig-title>!texthide\\\ storyview\\\pop\\\ variable\\\ignore\\\>\\n\\t\\t\\t\u003C$let tv-config-toolbar-class{{{ enlist\u003Ctv-config-toolbar-class> \u003ClistItem>encodeuricomponentaddprefixtc-btn- +join }}}>\\n\\t\\t\\t\\t\u003C$transclude $tiddler\u003C\u003ClistItem>> $mode\\\inline\\\/>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list>\\n\u003C/div>\},\$:/core/ui/PageStylesheet\:{\title\:\$:/core/ui/PageStylesheet\,\code-body\:\yes\,\text\:\\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\\\whitespace trim\\n\\n\u003C$set name\\\currentTiddler\\\ value{{$:/language}}>\\n\\n\u003C$set name\\\languageTitle\\\ value{{!!name}}>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Stylesheet!hasdraft.of\\\>\\n\u003C$transclude mode\\\block\\\/>\\n\u003C/$list>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\},\$:/core/ui/PageTemplate/alerts\:{\title\:\$:/core/ui/PageTemplate/alerts\,\tags\:\$:/tags/PageTemplate\,\text\:\\u003Cdiv class\\\tc-alerts\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Alert!hasdraft.of\\\ template\\\$:/core/ui/AlertTemplate\\\ storyview\\\pop\\\/>\\n\\n\u003C/div>\\n\},\$:/core/ui/PageTemplate/drafts\:{\title\:\$:/core/ui/PageTemplate/drafts\,\tags\:\$:/tags/PageTemplate\,\text\:\\\\\whitespace trim\\n\u003C$reveal state\\\$:/status/IsReadOnly\\\ type\\\nomatch\\\ text\\\yes\\\ tag\\\div\\\ class\\\tc-drafts-list\\\>\\n\u003C$list filter\\\hasdraft.of!sortmodified -list$:/StoryList\\\>\\n\u003C$link>\\n{{$:/core/images/edit-button}} \u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\u003C/$link>\\n\u003C/$list>\\n\u003C/$reveal>\\n\},\$:/core/ui/PageTemplate/pluginreloadwarning\:{\title\:\$:/core/ui/PageTemplate/pluginreloadwarning\,\tags\:\$:/tags/PageTemplate\,\text\:\\\\\define lingo-base() $:/language/\\n\\n\u003C$list filter\\\{$:/status/RequireReloadDueToPluginChange}matchyes\\\>\\n\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/HidePluginWarning\\\ text\\\yes\\\>\\n\\n\u003Cdiv class\\\tc-plugin-reload-warning\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-class\\\ value\\\\\\>\\n\\n\u003C\u003Clingo PluginReloadWarning>> \u003C$button set\\\$:/temp/HidePluginWarning\\\ setTo\\\yes\\\ class\\\tc-btn-invisible\\\>{{$:/core/images/close-button}}\u003C/$button>\\n\\n\u003C/$set>\\n\\n\u003C/div>\\n\\n\u003C/$reveal>\\n\\n\u003C/$list>\\n\},\$:/core/ui/PageTemplate/sidebar\:{\title\:\$:/core/ui/PageTemplate/sidebar\,\tags\:\$:/tags/PageTemplate\,\text\:\\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\n\u003C$scrollable fallthrough\\\no\\\ class\\\tc-sidebar-scrollable\\\>\\n\\n\u003Cdiv class\\\tc-sidebar-header\\\>\\n\\n\u003C$reveal state\\\$:/state/sidebar\\\ type\\\match\\\ text\\\yes\\\ default\\\yes\\\ retain\\\yes\\\ animate\\\yes\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/SideBarSegment!hasdraft.of\\\ variable\\\listItem\\\>\\n\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cconfig-title>> text\\\hide\\\ tag\\\div\\\>\\n\\n\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\block\\\/>\\n\\n\u003C/$reveal>\\n\\n\u003C/$list>\\n\\n\u003C/$reveal>\\n\\n\u003C/div>\\n\\n\u003C/$scrollable>\\n\},\$:/core/ui/PageTemplate/story\:{\title\:\$:/core/ui/PageTemplate/story\,\tags\:\$:/tags/PageTemplate\,\text\:\\\\\whitespace trim\\n\u003Csection class\\\tc-story-river\\\ role\\\main\\\>\\n\\n\u003Csection class\\\story-backdrop\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/AboveStory!hasdraft.of\\\>\\n\\n\u003C$transclude/>\\n\\n\u003C/$list>\\n\\n\u003C/section>\\n\\n\u003C$list filter\\\list$:/StoryList\\\ history\\\$:/HistoryList\\\ template\\\$:/core/ui/StoryTiddlerTemplate\\\ storyview{{$:/view}} emptyMessage{{$:/config/EmptyStoryMessage}}/>\\n\\n\u003Csection class\\\story-frontdrop\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/BelowStory!hasdraft.of\\\>\\n\\n\u003C$transclude/>\\n\\n\u003C/$list>\\n\\n\u003C/section>\\n\\n\u003C/section>\\n\},\$:/core/ui/PageTemplate/topleftbar\:{\title\:\$:/core/ui/PageTemplate/topleftbar\,\tags\:\$:/tags/PageTemplate\,\text\:\\u003Cspan class\\\tc-topbar tc-topbar-left\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TopLeftBar!hasdraft.of\\\ variable\\\listItem\\\ storyview\\\pop\\\>\\n\\n\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\inline\\\/>\\n\\n\u003C/$list>\\n\\n\u003C/span>\\n\},\$:/core/ui/PageTemplate/toprightbar\:{\title\:\$:/core/ui/PageTemplate/toprightbar\,\tags\:\$:/tags/PageTemplate\,\text\:\\u003Cspan class\\\tc-topbar tc-topbar-right\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TopRightBar!hasdraft.of\\\ variable\\\listItem\\\ storyview\\\pop\\\>\\n\\n\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\inline\\\/>\\n\\n\u003C/$list>\\n\\n\u003C/span>\\n\},\$:/core/ui/PageTemplate\:{\title\:\$:/core/ui/PageTemplate\,\name\:\{{$:/language/PageTemplate/Name}}\,\description\:\{{$:/language/PageTemplate/Description}}\,\icon\:\$:/core/images/standard-layout\,\code-body\:\yes\,\text\:\\\\\whitespace trim\\n\\\\import subfilter{$:/core/config/GlobalImportFilter}\\n\\n\u003C$vars\\n\\ttv-config-toolbar-icons{{$:/config/Toolbar/Icons}}\\n\\ttv-config-toolbar-text{{$:/config/Toolbar/Text}}\\n\\ttv-config-toolbar-class{{$:/config/Toolbar/ButtonClass}}\\n\\ttv-enable-drag-and-drop{{$:/config/DragAndDrop/Enable}}\\n\\ttv-show-missing-links{{$:/config/MissingLinks}}\\n\\tstoryviewTitle{{$:/view}}\\n\\tlanguageTitle{{{ {$:/language}getname }}}>\\n\\n\u003Cdiv class{{{ allshadows+tiddlerstag$:/tags/ClassFilters/PageTemplate!isdraft :map:flatsubfilter{!!text} tc-page-container tc-page-view-addsuffix\u003CstoryviewTitle> tc-language-addsuffix\u003ClanguageTitle> :anduniquejoin }}} >\\n\\n\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\ openLinkFromInsideRiver{{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver{{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename{{$:/config/RelinkOnRename}}>\\n\\n\u003C$dropzone enable\u003C\u003Ctv-enable-drag-and-drop>> class\\\tc-dropzone tc-page-container-inner\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/PageTemplate!hasdraft.of\\\ variable\\\listItem\\\>\\n\\n\u003C$transclude tiddler\u003C\u003ClistItem>>/>\\n\\n\u003C/$list>\\n\\n\u003C/$dropzone>\\n\\n\u003C/$navigator>\\n\\n\u003C/div>\\n\\n\u003C/$vars>\\n\},\$:/PaletteManager\:{\title\:\$:/PaletteManager\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\\n\\\\define describePaletteColour(colour)\\n\u003C$transclude tiddler\\\$:/language/Docs/PaletteColours/$colour$\\\>\u003C$text text\\\$colour$\\\/>\u003C/$transclude>\\n\\\\end\\n\\\\define edit-colour-placeholder()\\n edit $(colourName)$\\n\\\\end\\n\\\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \\n\\n\\\\define resolve-colour(macrocall)\\n\\\\import $:/core/macros/utils\\n\\\\whitespace trim\\n\u003C$wikify name\\\name\\\ text\\\\\\\\\$macrocall$\\\\\\\\\>\\n\u003C\u003Cname>>\\n\u003C/$wikify>\\n\\\\end\\n\\n\\\\define delete-colour-index-actions() \u003C$action-setfield $index\u003C\u003CcolourName>>/>\\n\\\\define palette-manager-colour-row-segment()\\n\\\\whitespace trim\\n\u003C$edit-text index\u003C\u003CcolourName>> tag\\\input\\\ placeholder\u003C\u003Cedit-colour-placeholder>> default\\\\\\/>\\n\u003Cbr>\\n\u003C$edit-text index\u003C\u003CcolourName>> type\\\color\\\ tag\\\input\\\ class\\\tc-palette-manager-colour-input\\\/>\\n\u003C$list filter\\\\u003CcurrentTiddler>getindex\u003CcolourName>removeprefix\u003C\u003Cremovesuffix>> \u003CcurrentTiddler>getindex\u003CcolourName>removeprefix\u003C$removesuffix/>\\\ variable\\\ignore\\\>\\n\u003C$set name\\\state\\\ value{{{ $:/state/palettemanager/addsuffix\u003CcurrentTiddler>addsuffix/addsuffix\u003CcolourName> }}}>\\n\u003C$wikify name\\\newColourName\\\ text\\\\\\\\\\u003C$macrocall $name\\\resolve-colour\\\ macrocall{{{ \u003CcurrentTiddler>getindex\u003CcolourName> }}}/>\\\\\\\\\>\\n\u003C$reveal state\u003C\u003Cstate>> type\\\nomatch\\\ text\\\show\\\>\\n\u003C$button tooltip\u003C\u003Ccolour-tooltip show>> aria-label\u003C\u003Ccolour-tooltip show>> class\\\tc-btn-invisible\\\ set\u003C\u003Cstate>> setTo\\\show\\\>{{$:/core/images/down-arrow}}\u003C$text text\u003C\u003CnewColourName>> class\\\tc-small-gap-left\\\/>\u003C/$button>\u003Cbr>\\n\u003C/$reveal>\\n\u003C$reveal state\u003C\u003Cstate>> type\\\match\\\ text\\\show\\\>\\n\u003C$button tooltip\u003C\u003Ccolour-tooltip hide>> aria-label\u003C\u003Ccolour-tooltip show>> class\\\tc-btn-invisible\\\ actions\\\\\\\\\\u003C$action-deletetiddler $tiddler\u003C\u003Cstate>>/>\\\\\\\\\>{{$:/core/images/up-arrow}}\u003C$text text\u003C\u003CnewColourName>> class\\\tc-small-gap-left\\\/>\u003C/$button>\u003Cbr>\\n\u003C/$reveal>\\n\u003C$reveal state\u003C\u003Cstate>> type\\\match\\\ text\\\show\\\>\\n\u003C$set name\\\colourName\\\ value\u003C\u003CnewColourName>>>\\n\u003Cbr>\\n\u003C\u003Cpalette-manager-colour-row-segment>>\\n\u003Cbr>\u003Cbr>\\n\u003C/$set>\\n\u003C/$reveal>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define palette-manager-colour-row()\\n\\\\whitespace trim\\n\u003Ctr>\\n\u003Ctd>\\n\u003Cspan style\\\float:right;\\\>\\n\u003C$button tooltip{{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} aria-label{{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} class\\\tc-btn-invisible\\\ actions\u003C\u003Cdelete-colour-index-actions>>>\\n{{$:/core/images/delete-button}}\u003C/$button>\\n\u003C/span>\\n\u003C$macrocall $name\\\describePaletteColour\\\ colour\u003C\u003CcolourName>>/>\u003Cbr/>\\n\u003C$macrocall $name\\\colourName\\\ $output\\\text/plain\\\/>\\n\u003C/td>\\n\u003Ctd>\\n\u003C\u003Cpalette-manager-colour-row-segment>>\\n\u003C/td>\\n\u003C/tr>\\n\\\\end\\n\\n\\\\define palette-manager-table()\\n\\\\whitespace trim\\n\u003Ctable>\\n\u003Ctbody>\\n\u003C$set name\\\colorList\\\ filter\\\{$:/state/palettemanager/showexternal}matchyes\\\\\n value\\\allshadows+tiddlerstag$:/tags/Paletteindexes\\\ emptyValue\\\\u003CcurrentTiddler>indexes\\\>\\n\u003C$list filter\u003C\u003CcolorList>> variable\\\colourName\\\> \u003C\u003Cpalette-manager-colour-row>> \u003C/$list>\\n\u003C/$set>\\n\u003C/tbody>\\n\u003C/table>\\n\\\\end\\n\\\\whitespace trim\\n\u003C$set name\\\currentTiddler\\\ value{{$:/palette}}>\\n\\n\u003C\u003Clingo Prompt>> \u003C$link to{{$:/palette}}>\u003C$macrocall $name\\\currentTiddler\\\ $output\\\text/plain\\\/>\u003C/$link>\\n\\n\u003C$list filter\\\allcurrentisshadowistiddler\\\ variable\\\listItem\\\>\\n\u003C\u003Clingo Prompt/Modified>>\\n \\n\u003C$button message\\\tm-delete-tiddler\\\ param{{$:/palette}}>\u003C\u003Clingo Reset/Caption>>\u003C/$button>\\n\u003C/$list>\\n\\n\u003C$list filter\\\allcurrentisshadow!istiddler\\\ variable\\\listItem\\\>\\n\u003C\u003Clingo Clone/Prompt>>\\n\u003C/$list>\\n\\n\u003C$button message\\\tm-new-tiddler\\\ param{{$:/palette}}>\u003C\u003Clingo Clone/Caption>>\u003C/$button>\\n\\n\u003C$checkbox tiddler\\\$:/state/palettemanager/showexternal\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\>\u003Cspan class\\\tc-small-gap-left\\\>\u003C\u003Clingo Names/External/Show>>\u003C/span>\u003C/$checkbox>\\n\\n\u003C\u003Cpalette-manager-table>>\\n\},\$:/core/ui/PluginInfo\:{\title\:\$:/core/ui/PluginInfo\,\text\:\\\\\define localised-info-tiddler-title()\\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\\n\\\\end\\n\\\\define info-tiddler-title()\\n$(currentTiddler)$/$(currentTab)$\\n\\\\end\\n\\\\define default-tiddler-title()\\n$:/core/ui/PluginInfo/Default/$(currentTab)$\\n\\\\end\\n\\\\whitespace trim\\n\u003C$transclude tiddler\u003C\u003Clocalised-info-tiddler-title>> mode\\\block\\\>\\n\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003Clocalised-info-tiddler-title>> mode\\\block\\\>\\n\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> subtiddler\u003C\u003Cinfo-tiddler-title>> mode\\\block\\\>\\n\u003C$transclude tiddler\u003C\u003Cdefault-tiddler-title>> mode\\\block\\\>\\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\\n\u003C/$transclude>\\n\u003C/$transclude>\\n\u003C/$transclude>\\n\u003C/$transclude>\\n\},\$:/core/ui/PluginInfo/Default/contents\:{\title\:\$:/core/ui/PluginInfo/Default/contents\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\\n\\\\whitespace trim\\n\u003C\u003Clingo Hint>>\\n\u003Cul>\\n\u003C$list filter\\\allcurrentplugintiddlerssorttitle\\\ emptyMessage\u003C\u003Clingo Empty/Hint>>>\\n\u003Cli>\\n\u003C$link />\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\},\$:/core/ui/PluginListItemTemplate\:{\title\:\$:/core/ui/PluginListItemTemplate\,\text\:\\\\\whitespace trim\\n\u003C$link to{{!!title}} class\\\tc-plugin-info\\\>\\n\\t\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-icon\\\>\\n\\t\\t\u003C$transclude tiddler\u003C\u003CcurrentTiddler>> subtiddler{{{ \u003CcurrentTiddler>addsuffix/icon }}}>\\n\\t\\t\\t\u003C$transclude tiddler{{{ \u003CcurrentTiddler>getplugin-typeaddprefix$:/core/images/plugin-generic- }}}/>\\n\\t\\t\u003C/$transclude>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tc-plugin-info-chunk tc-plugin-info-description\\\>\\n\\t\\t\u003Ch1>\\n\\t\\t\\t\u003C$text text{{{ \u003CcurrentTiddler>getname ~\u003CcurrentTiddler>split/last1 }}}/>: \u003C$view field\\\description\\\>\u003C$view field\\\title\\\/>\u003C/$view>\\n\\t\\t\u003C/h1>\\n\\t\u003C/div>\\n\u003C/$link>\\n\},\$:/core/ui/RootTemplate\:{\title\:\$:/core/ui/RootTemplate\,\code-body\:\yes\,\text\:\\u003C$transclude tiddler{{{ {$:/layout}hastext ~$:/core/ui/PageTemplate }}} mode\\\inline\\\/>\\n\\n\},\$:/core/ui/SearchResults\:{\title\:\$:/core/ui/SearchResults\,\text\:\\u003Cdiv class\\\tc-search-results\\\>\\n\\n\u003C$list\\n\\tfilter\\\allshadows+tiddlerstag$:/tags/SearchResults!hasdraft.ofbutfirstlimit1\\\\\n\\temptyMessage\\\\u003C$list filterallshadows+tiddlerstag$:/tags/SearchResults!hasdraft.of>\u003C$transclude modeblock/>\u003C/$list>\\\>\\n\\n\u003C$macrocall $name\\\tabs\\\\\n\\ttabsList\\\allshadows+tiddlerstag$:/tags/SearchResults!hasdraft.of\\\\\n\\tdefault{{$:/config/SearchResults/Default}}\\n\\tactions\\\\u003C$action-setfield $tiddler$:/state/search/currentTab text\u003C\u003CcurrentTab>>/>\\\\\n\\texplicitState\\\$:/state/tab/search-results/sidebar\\\/>\\n\\n\u003C/$list>\\n\\n\u003C/div>\\n\},\$:/core/ui/SideBar/More\:{\title\:\$:/core/ui/SideBar/More\,\tags\:\$:/tags/SideBar\,\caption\:\{{$:/language/SideBar/More/Caption}}\,\text\:\\\\\whitespace trim\\n\u003Cdiv class{{{ {$:/config/ui/SideBar/More/horizontal}matchyesthentc-sidebar-tabselsetc-more-sidebar }}}>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/MoreSideBar!hasdraft.of\\\ default{{$:/config/DefaultMoreSidebarTab}} state\\\$:/state/tab/moresidebar\\\ class{{{ {$:/config/ui/SideBar/More/horizontal}matchyesthentc-sidebar-tabs-moreelsetc-vertical tc-sidebar-tabs-more }}} explicitState\\\$:/state/tab/moresidebar-1850697562\\\/>\\n\u003C/div>\\n\},\$:/core/ui/SideBar/Open\:{\title\:\$:/core/ui/SideBar/Open\,\tags\:\$:/tags/SideBar\,\caption\:\{{$:/language/SideBar/Open/Caption}}\,\text\:\\\\\whitespace trim\\n\\\\define lingo-base() $:/language/CloseAll/\\n\\n\\\\define drop-actions()\\n\u003C$action-listops $tiddler\u003C\u003Ctv-story-list>> $subfilter\\\+insertbefore\u003CactionTiddler>,\u003CcurrentTiddler>\\\/>\\n\\\\end\\n\\n\\\\define placeholder()\\n\u003Cdiv class\\\tc-droppable-placeholder\\\/>\\n\\\\end\\n\\n\\\\define droppable-item(button)\\n\\\\whitespace trim\\n\u003C$droppable actions\u003C\u003Cdrop-actions>> enable\u003C\u003Ctv-allow-drag-and-drop>> tag\\\div\\\>\\n\u003C\u003Cplaceholder>>\\n\u003Cdiv>\\n$button$\\n\u003C/div>\\n\u003C/$droppable>\\n\\\\end\\n\\n\u003Cdiv class\\\tc-sidebar-tab-open\\\>\\n\u003C$list filter\\\list\u003Ctv-story-list>\\\ history\u003C\u003Ctv-history-list>> storyview\\\pop\\\>\\n\u003Cdiv class\\\tc-sidebar-tab-open-item\\\>\\n\u003C$macrocall $name\\\droppable-item\\\ button\\\\u003C$button messagetm-close-tiddler tooltip{{$:/language/Buttons/Close/Hint}} aria-label{{$:/language/Buttons/Close/Caption}} classtc-btn-invisible tc-btn-mini tc-small-gap-right>{{$:/core/images/close-button}}\u003C/$button>\u003C$link/>\\\/>\\n\u003C/div>\\n\u003C/$list>\\n\u003C$tiddler tiddler\\\\\\>\\n\u003Cdiv>\\n\u003C$macrocall $name\\\droppable-item\\\ button\\\\u003C$button messagetm-close-all-tiddlers classtc-btn-invisible tc-btn-mini>\u003C\u003Clingo Button>>\u003C/$button>\\\/>\\n\u003C/div>\\n\u003C/$tiddler>\\n\u003C/div>\\n\},\$:/core/ui/SideBar/Recent\:{\title\:\$:/core/ui/SideBar/Recent\,\tags\:\$:/tags/SideBar\,\caption\:\{{$:/language/SideBar/Recent/Caption}}\,\text\:\\u003C$transclude $variable\\\timeline\\\ format{{$:/language/RecentChanges/DateFormat}} limit{{$:/config/RecentLimit}}/>\\n\},\$:/core/ui/SideBar/Tools\:{\title\:\$:/core/ui/SideBar/Tools\,\tags\:\$:/tags/SideBar\,\caption\:\{{$:/language/SideBar/Tools/Caption}}\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure lingo-base() $:/language/ControlPanel/\\n\\\\function config-title() $:/config/PageControlButtons/Visibility/$(listItem)$substitute\\n\\n\u003C\u003Clingo Basics/Version/Prompt>>\u003Cspan class\\\tc-tiny-gap-left\\\>\u003C\u003Cversion>>\u003C/span>\\n\\n\u003C$let tv-config-toolbar-icons\\\yes\\\\\n\\ttv-config-toolbar-text\\\yes\\\\\n\\ttv-config-toolbar-class\\\\\\\\n>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/PageControls!hasdraft.of\\\ variable\\\listItem\\\>\\n\\t\\t\u003Cdiv class{{{ \u003ClistItem>encodeuricomponentaddprefixtc-btn- tc-sidebar-tools-item +join }}}\\n\\t\\t\\tdata-title\u003C\u003ClistItem>>\\n\\t\\t>\\n\\t\\t\\t\u003C$checkbox tiddler\u003C\u003Cconfig-title>> field\\\text\\\ checked\\\show\\\ unchecked\\\hide\\\ default\\\show\\\ class\\\tc-tiny-gap-right\\\/>\\n\\t\\t\\t\\t\u003C$transclude $tiddler\u003C\u003ClistItem>>/>\\n\\t\\t\\t\\t\u003Ci class\\\tc-tiny-gap-left tc-muted\\\>\\n\\t\\t\\t\\t\\t\u003C$transclude $tiddler\u003C\u003ClistItem>> $field\\\description\\\/>\\n\\t\\t\\t\\t\u003C/i>\\n\\t\\t\u003C/div>\\n\\t\u003C/$list>\\n\u003C/$let>\\n\},\$:/core/ui/SideBarLists\:{\title\:\$:/core/ui/SideBarLists\,\text\:\\u003C$transclude tiddler\\\$:/core/ui/SideBarSegments/search\\\/>\\n\\n\u003C$transclude tiddler\\\$:/core/ui/SideBarSegments/tabs\\\/>\\n\\n\},\$:/core/ui/SideBarSegments/page-controls\:{\title\:\$:/core/ui/SideBarSegments/page-controls\,\tags\:\$:/tags/SideBarSegment\,\text\:\{{||$:/core/ui/PageTemplate/pagecontrols}}\\n\},\$:/core/ui/SideBarSegments/search\:{\title\:\$:/core/ui/SideBarSegments/search\,\tags\:\$:/tags/SideBarSegment\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure count-popup-button()\\n\\\\whitespace trim\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/search-dropdown\\\>> class\\\tc-btn-invisible\\\>\\n{{$:/core/images/down-arrow}}\\n\u003C$list filter\\\\u003CsearchTiddler>gettextminlength{$:/config/Search/MinLength}limit1\\\ variable\\\listItem\\\>\\n\u003C$vars userInput{{{ \u003CsearchTiddler>gettext }}} configTiddler{{{ $:/state/search/currentTab!ismissinggettext :else{$:/config/SearchResults/Default} }}} replaceRegexp\\\limit\\\\\\\\d+\\\\\\\>\\n\u003C$vars primaryListFilter{{{ \u003CconfigTiddler>getfirst-search-filtersearch-replace:g:regexp\u003CreplaceRegexp>, }}} secondaryListFilter{{{ \u003CconfigTiddler>getsecond-search-filtersearch-replace:g:regexp\u003CreplaceRegexp>, }}}>\\n\u003C$set name\\\resultCount\\\ value\\\\\\\\\\u003C$count filter\\\subfilter\u003CprimaryListFilter> subfilter\u003CsecondaryListFilter>\\\/>\\\\\\\\\>\\n{{$:/language/Search/Matches}}\\n\u003C/$set>\\n\u003C/$vars>\\n\u003C/$vars>\\n\u003C/$list>\\n\u003C/$button>\\n\\\\end\\n\\n\\\\procedure search-results-list()\\n\\\\whitespace trim\\n\u003C$vars userInput{{{ \u003CsearchTiddler>gettext }}} configTiddler{{{ $:/state/search/currentTab!ismissinggettext :else{$:/config/SearchResults/Default} }}}>\\n\u003C$list filter\\\\u003CuserInput>minlength{$:/config/Search/MinLength}limit1\\\ emptyMessage\\\\\\\\\\u003Cdiv class\\\tc-search-results\\\>{{$:/language/Search/Search/TooShort}}\u003C/div>\\\\\\\\\ variable\\\listItem\\\>\\n\\n\u003C$tiddler tiddler\u003C\u003CconfigTiddler>>>\\n\\n{{$:/core/ui/SearchResults}}\\n\\n\u003C/$tiddler>\\n\\n\u003C/$list>\\n\u003C/$vars>\\n\\\\end\\n\\n\\\\procedure cancel-search-actions() \u003C$list filter\\\\u003CsearchTiddler>gettext!match{$:/temp/search}\\\ emptyMessage\\\\\\\\\\u003C$action-deletetiddler $filter\\\$:/temp/search \u003CsearchTiddler> \u003CsearchListState>\\\/>\\\\\\\\\>\u003C$action-setfield $tiddler\\\$:/temp/search\\\ text{{{ \u003CsearchTiddler>gettext }}}/>\u003C$action-setfield $tiddler\\\$:/temp/search/refresh\\\ text\\\yes\\\/>\u003C/$list>\\n\\n\\\\procedure input-accept-actions() \u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\ emptyMessage\\\\\\\\\\u003C$list filter\\\\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow\\\>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\\\\\\\\>\u003C$action-navigate $to{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\\n\\n\\\\procedure input-accept-variant-actions() \u003C$list filter\\\{$:/config/Search/NavigateOnEnter/enable}matchyes\\\ emptyMessage\\\\\\\\\\u003C$list filter\\\\u003Ctiddler>gettext!ismissing :else\u003Ctiddler>gettextisshadow\\\>\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\\\\\\\\>\u003C$list filter\\\\u003Ctiddler>gettextminlength1\\\>\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param{{{ \u003Ctiddler>gettext }}}/>\u003C/$list>\u003C/$list>\\n\\n\\\\procedure set-next-input-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab/search-results/sidebar\\\ tag\\\$:/tags/SearchResults\\\ beforeafter\\\after\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\\\\\\\u003C$action-setfield $tiddler\\\$:/state/search/currentTab\\\ text\u003C\u003CnextTab>>/>\\\\\\\\\/>\\n\\n\\\\procedure set-previous-input-tab() \u003C$transclude $variable\\\change-input-tab\\\ stateTitle\\\$:/state/tab/search-results/sidebar\\\ tag\\\$:/tags/SearchResults\\\ beforeafter\\\before\\\ defaultState{{$:/config/SearchResults/Default}} actions\\\\\\\\\\u003C$action-setfield $tiddler\\\$:/state/search/currentTab\\\ text\u003C\u003CnextTab>>/>\\\\\\\\\/>\\n\\n\\\\procedure advanced-search-actions() \u003C$action-setfield $tiddler\\\$:/temp/advancedsearch\\\ text{{$:/temp/search/input}}/>\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ text{{$:/temp/search/input}}/>\u003C\u003Cdelete-state-tiddlers>>\u003C$action-navigate $to\\\$:/AdvancedSearch\\\/>\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\\\\\\\data-tiddler-title\\\$:/AdvancedSearch\\\ .tc-search input\\\\\\\\\ preventScroll\\\true\\\/>\u003C$action-deletetiddler $filter\\\$:/temp/search $:/temp/search/input $:/temp/search/refresh \u003CsearchListState>\\\/>\\n\\n\u003Cdiv class\\\tc-sidebar-lists tc-sidebar-search\\\>\\n\\n\u003C$vars editTiddler\\\$:/temp/search\\\ searchTiddler\\\$:/temp/search/input\\\ searchListState\u003C\u003Cqualify \\\$:/state/search-list/selected-item\\\>>>\\n\u003Cdiv class\\\tc-search\\\>\\n\u003C$keyboard key\\\((input-tab-right))\\\ actions\u003C\u003Cset-next-input-tab>>>\\n\u003C$keyboard key\\\((input-tab-left))\\\ actions\u003C\u003Cset-previous-input-tab>>>\\n\u003C$keyboard key\\\((advanced-search-sidebar))\\\ actions\u003C\u003Cadvanced-search-actions>>>\\n\u003Cform class\\\tc-form-inline\\\>\\n\u003C$transclude $variable\\\keyboard-driven-input\\\ tiddler\u003C\u003CeditTiddler>> storeTitle\u003C\u003CsearchTiddler>> \\n\\t\\tselectionStateTitle\u003C\u003CsearchListState>> refreshTitle\\\$:/temp/search/refresh\\\ type\\\search\\\ \\n\\t\\ttag\\\input\\\ focus{{$:/config/Search/AutoFocus}} focusPopup\u003C\u003Cqualify \\\$:/state/popup/search-dropdown\\\>> \\n\\t\\tclass\\\tc-tiny-gap-right tc-popup-handle\\\ filterMinLength{{$:/config/Search/MinLength}} inputCancelActions\u003C\u003Ccancel-search-actions>> \\n\\t\\tinputAcceptActions\u003C\u003Cinput-accept-actions>> inputAcceptVariantActions\u003C\u003Cinput-accept-variant-actions>> cancelPopups\\\yes\\\ \\n\\t\\tconfigTiddlerFilter\\\$:/state/search/currentTab!ismissinggettext :else{$:/config/SearchResults/Default}\\\/>\\n\u003C/form>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C$reveal state\u003C\u003CsearchTiddler>> type\\\nomatch\\\ text\\\\\\>\\n\u003C$button tooltip{{$:/language/Buttons/AdvancedSearch/Hint}} aria-label{{$:/language/Buttons/AdvancedSearch/Caption}} class\\\tc-btn-invisible\\\>\\n\u003C\u003Cadvanced-search-actions>>\\n{{$:/core/images/advanced-search-button}}\\n\u003C/$button>\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\u003C\u003Ccancel-search-actions>>\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-search input\\\/>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C\u003Ccount-popup-button>>\\n\u003C/$reveal>\\n\u003C$reveal state\u003C\u003CsearchTiddler>> type\\\match\\\ text\\\\\\>\\n\u003C$button to\\\$:/AdvancedSearch\\\ tooltip{{$:/language/Buttons/AdvancedSearch/Hint}} aria-label{{$:/language/Buttons/AdvancedSearch/Caption}} class\\\tc-btn-invisible\\\>\\n{{$:/core/images/advanced-search-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\\n\u003C$reveal tag\\\div\\\ class\\\tc-block-dropdown-wrapper\\\ state\u003C\u003CsearchTiddler>> type\\\nomatch\\\ text\\\\\\>\\n\\n\u003C$reveal tag\\\div\\\ class\\\tc-block-dropdown tc-search-drop-down tc-popup-handle\\\ state\u003C\u003Cqualify \\\$:/state/popup/search-dropdown\\\>> type\\\nomatch\\\ text\\\\\\ default\\\\\\>\\n\\n\u003C\u003Csearch-results-list>>\\n\\n\u003C/$reveal>\\n\\n\u003C/$reveal>\\n\\n\u003C/$vars>\\n\\n\u003C/div>\\n\},\$:/core/ui/SideBarSegments/site-subtitle\:{\title\:\$:/core/ui/SideBarSegments/site-subtitle\,\tags\:\$:/tags/SideBarSegment\,\text\:\\u003Cdiv class\\\tc-site-subtitle\\\>\\n\\n\u003C$transclude tiddler\\\$:/SiteSubtitle\\\ mode\\\inline\\\/>\\n\\n\u003C/div>\\n\},\$:/core/ui/SideBarSegments/site-title\:{\title\:\$:/core/ui/SideBarSegments/site-title\,\tags\:\$:/tags/SideBarSegment\,\text\:\\u003Ch1 class\\\tc-site-title\\\>\\n\\n\u003C$transclude tiddler\\\$:/SiteTitle\\\ mode\\\inline\\\/>\\n\\n\u003C/h1>\\n\},\$:/core/ui/SideBarSegments/tabs\:{\title\:\$:/core/ui/SideBarSegments/tabs\,\tags\:\$:/tags/SideBarSegment\,\text\:\\u003Cdiv class\\\tc-sidebar-lists tc-sidebar-tabs\\\ role\\\region\\\ aria-label{{$:/language/SideBar/Caption}}>\\n\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/SideBar!hasdraft.of\\\ default{{$:/config/DefaultSidebarTab}} state\\\$:/state/tab/sidebar\\\ class\\\tc-sidebar-tabs-main\\\ explicitState\\\$:/state/tab/sidebar--595412856\\\/>\\n\\n\u003C/div>\\n\},\$:/core/ui/StoryTiddlerTemplate\:{\title\:\$:/core/ui/StoryTiddlerTemplate\,\code-body\:\yes\,\text\:\\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/StoryTiddlerTemplateFilter!isdraftgettext :andhastitleelse$:/core/ui/ViewTemplate }}} />\\n\},\$:/core/ui/SwitcherModal\:{\title\:\$:/core/ui/SwitcherModal\,\subtitle\:\\u003C$text text{{{\u003Cswitch>lookup$:/language/Switcher/Subtitle/}}}/>\,\class\:\tc-modal-centered\,\mask-closable\:\yes\,\text\:\\u003C$tiddler tiddler{{{\u003Cswitch>lookup$:/config/SwitcherTargets/}}}>\\n\\n\\n\u003C$transclude/>\\n\\n\\n\u003C/$tiddler>\},\$:/TagManager\:{\title\:\$:/TagManager\,\icon\:\$:/core/images/tag-button\,\color\:\#bbb\,\text\:\\\\\define lingo-base() $:/language/TagManager/\\n\\n\\\\define iconEditorTab(type)\\n\\\\whitespace trim\\n\u003C$link to\\\\\\>\u003C\u003Clingo Icons/None>>\u003C/$link>\\n\u003C$list filter\\\allshadows+tiddlersisimage allshadows+tiddlerstag$:/tags/Image -typeapplication/pdf +sorttitle +$type$issystem\\\>\\n\\t\u003C$link to{{!!title}}>\\n\\t\\t\u003C$transclude/> \u003C$view field\\\title\\\/>\\n\\t\u003C/$link>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define iconEditor(title)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-drop-down-wrapper\\\>\\n\\t\u003C$button popupTitle{{{ $:/state/popup/icon/addsuffix\u003C__title__> }}} class\\\tc-btn-invisible tc-btn-dropdown\\\>\\n\\t\\t{{$:/core/images/down-arrow}}\\n\\t\u003C/$button>\\n\\t\u003C$reveal stateTitle{{{ $:/state/popup/icon/addsuffix\u003C__title__> }}} type\\\popup\\\ position\\\belowleft\\\ text\\\\\\ default\\\\\\>\\n\\t\\t\u003Cdiv class\\\tc-drop-down\\\>\\n\\t\\t\\t\u003C$linkcatcher actions\\\\\\\\\\u003C$action-setfield $tiddler\u003C\u003C__title__>> icon\u003C\u003CnavigateTo>>/>\\\\\\\\\>\\n\\t\\t\\t\\t\u003C\u003CiconEditorTab type:\\\!\\\>>\\n\\t\\t\\t\\t\u003Chr/>\\n\\t\\t\\t\\t\u003C\u003CiconEditorTab type:\\\\\\>>\\n\\t\\t\\t\u003C/$linkcatcher>\\n\\t\\t\u003C/div>\\n\\t\u003C/$reveal>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define toggleButton(state)\\n\\\\whitespace trim\\n\u003C$reveal stateTitle\u003C\u003C__state__>> type\\\match\\\ text\\\closed\\\ default\\\closed\\\>\\n\\t\u003C$button setTitle\u003C\u003C__state__>> setTo\\\open\\\ class\\\tc-btn-invisible tc-btn-dropdown\\\ selectedClass\\\tc-selected\\\>\\n\\t\\t{{$:/core/images/info-button}}\\n\\t\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal stateTitle\u003C\u003C__state__>> type\\\match\\\ text\\\open\\\ default\\\closed\\\>\\n\\t\u003C$button setTitle\u003C\u003C__state__>> setTo\\\closed\\\ class\\\tc-btn-invisible tc-btn-dropdown\\\ selectedClass\\\tc-selected\\\>\\n\\t\\t{{$:/core/images/info-button}}\\n\\t\u003C/$button>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\procedure color-picker-actions()\\n\\\\whitespace trim\\n\u003C$action-setfield $tiddler\u003C\u003CcurrentTiddler>> color\u003C\u003Ccolour-picker-value>>/>\\n\\\\end\\n\\n\\\\procedure color-picker-button()\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-drop-down-wrapper\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ popup{{{ $:/state/tag-manager/color/addsuffix\u003CcurrentTiddler> }}}>{{$:/core/images/palette}}\u003C/$button>\\n\u003C$reveal type\\\popup\\\ tag\\\div\\\ class\\\tc-drop-down tc-popup-keep\\\ state{{{ $:/state/tag-manager/color/addsuffix\u003CcurrentTiddler> }}}>\\n\u003C$transclude $variable\\\colour-picker\\\ actions\u003C\u003Ccolor-picker-actions>>/>\\n\u003C/$reveal>\\n\u003C/div>\\n\\\\end\\n\\n\\\\whitespace trim\\n\u003Ctable class\\\tc-tag-manager-table\\\>\\n\u003Ctbody>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>\u003C\u003Clingo Colour/Heading>>\u003C/th>\\n\\t\\t\u003Cth class\\\tc-tag-manager-tag\\\>\u003C\u003Clingo Tag/Heading>>\u003C/th>\\n\\t\\t\u003Cth>\u003C\u003Clingo Count/Heading>>\u003C/th>\\n\\t\\t\u003Cth>\u003C\u003Clingo Icon/Heading>>\u003C/th>\\n\\t\\t\u003Cth>\u003C\u003Clingo Info/Heading>>\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\tags!issystemsorttitle\\\>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Ctd>\u003C$transclude $variable\\\color-picker-button\\\/>\u003C/td>\\n\\t\\t\\t\u003Ctd>{{||$:/core/ui/TagTemplate}}\u003C/td>\\n\\t\\t\\t\u003Ctd>\u003C$count filter\\\allcurrenttagging\\\/>\u003C/td>\\n\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\u003C$macrocall $name\\\iconEditor\\\ title{{!!title}}/>\\n\\t\\t\\t\u003C/td>\\n\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\u003C$macrocall $name\\\toggleButton\\\ state{{{ $:/state/tag-manager/addsuffix\u003CcurrentTiddler> }}} />\\n\\t\\t\\t\u003C/td>\\n\\t\\t\u003C/tr>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Ctd>\u003C/td>\\n\\t\\t\\t\u003Ctd colspan\\\4\\\>\\n\\t\\t\\t\\t\u003C$reveal stateTitle{{{ $:/state/tag-manager/addsuffix\u003CcurrentTiddler> }}} type\\\match\\\ text\\\open\\\ default\\\\\\>\\n\\t\\t\\t\\t\\t\u003Ctable>\\n\\t\\t\\t\\t\\t\\t\u003Ctbody>\\n\\t\\t\\t\\t\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Ctd>\u003C\u003Clingo Colour/Heading>>\u003C/td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Ctd>\u003C$edit-text field\\\color\\\ tag\\\input\\\ type\\\text\\\ size\\\9\\\/>\u003C/td>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/tr>\\n\\t\\t\\t\\t\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Ctd>\u003C\u003Clingo Icon/Heading>>\u003C/td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Ctd>\u003C$edit-text field\\\icon\\\ tag\\\input\\\ size\\\45\\\/>\u003C/td>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/tr>\\n\\t\\t\\t\\t\\t\\t\u003C/tbody>\\n\\t\\t\\t\\t\\t\u003C/table>\\n\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\u003C/td>\\n\\t\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>\u003C/td>\\n\\t\\t\u003Ctd style\\\position:relative;\\\>\\n\\t\\t\\t{{$:/core/ui/UntaggedTemplate}}\\n\\t\\t\u003C/td>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003Csmall class\\\tc-menu-list-count\\\>\u003C$count filter\\\untagged!issystem -tags\\\/>\u003C/small>\\n\\t\\t\u003C/td>\\n\\t\\t\u003Ctd>\u003C/td>\\n\\t\\t\u003Ctd>\u003C/td>\\n\\t\u003C/tr>\\n\u003C/tbody>\\n\u003C/table>\},\$:/core/ui/TagPickerTagTemplate\:{\title\:\$:/core/ui/TagPickerTagTemplate\,\text\:\\\\\whitespace trim\\n\u003C$button class\u003C\u003Cbutton-classes>> tag\\\a\\\ tooltip{{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\\n\\t\u003C$list filter\\\\u003CsaveTiddler>minlength1\\\>\\n\\t\\t\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter\\\\u003Ctag>\\\/>\\n\\t\u003C/$list>\\n\\t\u003C$set name\\\currentTiddlerCSSEscaped\\\ value{{{ \u003CsaveTiddler>escapecss }}}>\\n\\t\\t\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\u003C\u003Cget-tagpicker-focus-selector>> preventScroll\\\true\\\/>\\n\\t\u003C/$set>\\n\\t\u003C\u003Cdelete-tag-state-tiddlers>>\\n\\t\u003C$list filter\\\\u003CrefreshTitle>minlength1\\\>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\\n\\t\u003C/$list>\\n\\t\u003C\u003Cactions>>\\n\\t\u003C$set name\\\backgroundColor\\\\\n\\t\\tvalue{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}\\n\\t>\\n\\t\\t\u003C$wikify name\\\foregroundColor\\\\\n\\t\\t\\ttext\\\\\\\\\\u003C$macrocall $name\\\contrastcolour\\\ target\u003C\u003CbackgroundColor>> fallbackTarget\u003C\u003CfallbackTarget>> colourA\u003C\u003CcolourA>> colourB\u003C\u003CcolourB>>/>\\\\\\\\\\\n\\t\\t>\\n\\t\\t\\t\u003Cspan class\\\tc-tag-label tc-btn-invisible\\\\\n\\t\\t\\t\\tstyle\u003C\u003Ctag-pill-styles>>\\n\\t\\t\\t\\tdata-tag-title\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t>\\n\\t\\t\\t\\t{{||$:/core/ui/TiddlerIcon}}\u003C$view field\\\title\\\ format\\\text\\\/>\\n\\t\\t\\t\u003C/span>\\n\\t\\t\u003C/$wikify>\\n\\t\u003C/$set>\\n\u003C/$button>\\n\},\$:/core/ui/TagTemplate\:{\title\:\$:/core/ui/TagTemplate\,\text\:\\\\\whitespace trim\\n\u003Cspan class\\\tc-tag-list-item\\\ data-tag-title\u003C\u003CcurrentTiddler>>>\\n\u003C$set name\\\transclusion\\\ value\u003C\u003CcurrentTiddler>>>\\n\\t\u003C$macrocall $name\\\tag-pill-body\\\\\n\\t\\ttag\u003C\u003CcurrentTiddler>>\\n\\t\\ticon{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext }}}\\n\\t\\tcolour{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}\\n\\t\\tpalette{{$:/palette}}\\n\\t\\telement-tag\\\$button\\\\\n\\t\\telement-attributes\\\\\\\\\popup\u003C\u003Cqualify \\\$:/state/popup/tag\\\>> dragFilter\\\subfilter{$:/core/config/TagPillDragFilter}\\\ tagspan\\\\\\\\\\\n\\t/>\\n\\t\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/tag\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\ class\\\tc-drop-down\\\>\\n\\t\\t\u003C$set name\\\tv-show-missing-links\\\ value\\\yes\\\>\\n\\t\\t\\t\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\\t\\t\u003C/$set>\\n\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TagDropdown!hasdraft.of\\\ variable\\\listItem\\\> \\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>>/> \\n\\t\\t\u003C/$list>\\n\\t\\t\u003Chr>\\n\\t\\t\u003C$macrocall $name\\\list-tagged-draggable\\\ tag\u003C\u003CcurrentTiddler>>/>\\n\\t\u003C/$reveal>\\n\u003C/$set>\\n\u003C/span>\\n\},\$:/core/ui/TestCaseTemplate\:{\title\:\$:/core/ui/TestCaseTemplate\,\text\:\\\\\parameters (hideIfPass:\\\no\\\)\\n\\\\whitespace trim\\n\u003C$let\\n\\tlinkTarget\\\yes\\\\\n\\tdisplayFormat{{!!display-format}}\\n\\ttestcaseTiddler\u003C\u003CcurrentTiddler>>\\n>\\n\\t\u003C$testcase\\n\\t\\ttestOutput\\\Output\\\\\n\\t\\ttestExpectedResult\\\ExpectedResult\\\\\n\\t\\ttestActions\\\Actions\\\\\n\\t\\ttestHideIfPass\u003C\u003ChideIfPass>>\\n\\t>\\n\\t\\t\u003C$data $filter{{!!import}}/>\\n\\t\\t\u003C$data $compound-filter{{!!import-compound}}/>\\n\\t\\t\u003C$data $compound-tiddler\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\u003C%if {!!description}!isblank %>\u003C$data title\\\Description\\\ text{{!!description}}/>\u003C%endif%>\\n\\t\u003C/$testcase>\\n\u003C/$let>\\n\},\$:/core/ui/testcases/DefaultTemplate\:{\title\:\$:/core/ui/testcases/DefaultTemplate\,\code-body\:\yes\,\text\:\\\\\whitespace trim\\n\\n\\\\function tf.state() \\\$:/state/testcase\\\\\n\\n\\\\procedure linkcatcherActions()\\n\u003C%if \u003CnavigateTo>hastitle %>\\n\\t\u003C$action-setfield $tiddler\u003C\u003Ctf.state>> text\u003C\u003CnavigateTo>>/>\\n\u003C%endif%>\\n\\\\end\\n\\n\\\\procedure testcase-header()\\n\u003Cdiv class\\\tc-test-case-header\\\>\\n\\t\u003Ch2>\\n\\t\\t\u003C$genesis $type{{{ \u003ClinkTarget>!matchthen$linkelsespan }}} to\u003C\u003CtestcaseTiddler>>>\\n\\t\\t\\t\u003C%if \u003CtestResult>!match %>\\n\\t\\t\\t\\t\u003Cspan class{{{ tc-test-case-result-icon\\n\\t\\t\\t\\t\\t\u003CtestResult>!matchfailthentc-test-case-result-icon-pass\\n\\t\\t\\t\\t\\t\u003CtestResult>matchfailthentc-test-case-result-icon-fail\\n\\t\\t\\t\\t\\t+join }}}\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003C%if \u003CtestResult>!matchfail %>\\n\\t\\t\\t\\t\\t\\t{{$:/core/images/done-button}}\\n\\t\\t\\t\\t\\t\u003C%else%>\\n\\t\\t\\t\\t\\t\\t{{$:/core/images/close-button}}\\n\\t\\t\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\u003C$view tiddler\\\Description\\\ mode\\\inline\\\/>\\n\\t\\t\u003C/$genesis>\\n\\t\\t\u003Cspan class\\\tc-test-case-toolbar\\\>\\n\\t\\t\\t\u003C\u003Ctestcase-toolbar>>\\n\\t\\t\u003C/span>\\n\\t\u003C/h2>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-toolbar()\\n\u003C$button popup`$(tf.state)$-more`\\n\\ttooltip{{$:/language/Buttons/More/Hint}}\\n\\taria-label{{$:/language/Buttons/More/Caption}}\\n\\tclass\\\tc-btn-invisible\\\\\n\\tselectedClass\\\tc-selected\\\\\n>\\n\\t{{$:/core/images/down-arrow}}\\n\u003C/$button>\\n\u003C$let\\n\\ttv-config-toolbar-icons\\\yes\\\\\n\\ttv-config-toolbar-text\\\yes\\\\\n\\ttv-config-toolbar-class\\\tc-btn-invisible\\\\\n>\\n\\t\u003C$reveal state`$(tf.state)$-more` type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\\t\\t\u003Cdiv class\\\tc-drop-down\\\>\\n\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TestCase/Actions!hasdraft.of\\\\\n\\t\\t\\t\\tvariable\\\listItem\\\\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$transclude $tiddler\u003C\u003ClistItem>> $mode\\\inline\\\/>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/div>\\n\\t\u003C/$reveal>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\procedure testcase-narrative()\\n\u003Cdiv class\\\tc-test-case-narrative\\\>\\n\\t\u003C$transclude $tiddler\\\Narrative\\\ $mode\\\block\\\/>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-fail()\\n\u003Cdiv class\\\tc-test-case-result-fail\\\>\\n\\t\u003Cdiv class\\\tc-test-case-result-fail-header\\\>\\n\\t\\tTEST FAILED\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tc-test-case-result-fail-body\\\>\\n\\t\\t\u003C$diff-text source\u003C\u003CexpectedHTML>> dest\u003C\u003CoutputHTML>>/>\\n\\t\u003C/div>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-output-wikified()\\n\u003C$linkcatcher actions\u003C\u003ClinkcatcherActions>>>\\n\\t\u003C$tiddler tiddler\\\Output\\\>\\n\\t\\t\u003C$transclude $tiddler\\\Output\\\ $mode\\\block\\\/>\\n\\t\u003C/$tiddler>\\n\u003C/$linkcatcher>\\n\\\\end\\n\\n\\\\procedure testcase-output()\\n\u003Cdiv class\\\tc-test-case-output\\\>\\n\\t\u003C%if \u003CdisplayFormat>!matchelsewikitextmatchplaintext %>\\n\\t\\t\u003Cpre>\u003C$view tiddler\\\Output\\\ format\\\plainwikified\\\ mode\\\block\\\/>\u003C/pre>\\n\\t\u003C%else%>\\n\\t\\t\u003C\u003Ctestcase-output-wikified>>\\n\\t\u003C%endif%>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-tabsList()\\nalltiddlerssort Output +putfirst\\n-Description\\n-Narrative\\n-$:/temp/testcase/draft-title\\n-hasplugin-type\\n-prefix\u003Ctf.state>\\n-prefix$:/state/popup/export\\n-prefix$:/HistoryList\\n-prefix$:/StoryList\\n\\\\end\\n\\n\\\\procedure testcase-source()\\n\u003Cdiv class\\\tc-test-case-source\\\>\\n\\t\u003C$macrocall $name\\\tabs\\\\\n\\t\\ttabsList\u003C\u003Ctestcase-tabsList>>\\n\\t\\texplicitState\u003C\u003Ctf.state>>\\n\\t\\tdefault\\\Output\\\\\n\\t\\ttemplate\\\$:/core/ui/testcases/DefaultTemplate/SourceTabs\\\\\n\\t/>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-panes()\\n\u003Cdiv class\\\tc-test-case-panes\\\>\\n\\t\u003C\u003Ctestcase-source>>\\n\\t\u003Cdiv class\\\tc-test-case-divider\\\>\u003C/div>\\n\\t\u003C\u003Ctestcase-output>>\\n\u003C/div>\\n\\\\end\\n\\n\\\\procedure testcase-body()\\n\u003Cdiv class\\\tc-test-case-wrapper\\\>\\n\\t\u003C\u003Ctestcase-header>>\\n\\t\u003C$let testcase-source-state \u003C\u003Ctf.state>>>\\n\\t\\t\u003C$navigator story\\\$:/StoryList\\\ history\\\$:/HistoryList\\\>\\n\\t\\t\\t\u003C%if Narrativeistiddler %>\\n\\t\\t\\t\\t\u003C\u003Ctestcase-narrative>>\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\u003C%if \u003CtestResult>matchfail %>\\n\\t\\t\\t\\t\u003C\u003Ctestcase-fail>>\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\u003C\u003Ctestcase-panes>>\\n\\t\\t\u003C/$navigator>\\n\\t\u003C/$let>\\n\u003C/div>\\n\\\\end\\n\\n\u003C\u003Ctestcase-body>>\},\$:/core/ui/testcases/DefaultTemplate/SourceTabs\:{\title\:\$:/core/ui/testcases/DefaultTemplate/SourceTabs\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure testcaseNewTitle() $:/temp/testcase/draft-title\\n\\n\\\\procedure saveActions()\\n\u003C$action-setfield $tiddler\u003C\u003CcurrentTab>> $field\\\draft.title\\\ $value\u003C\u003CnewTitle>>/>\\n\u003C$action-sendmessage $message\\\tm-save-tiddler\\\ $param\u003C\u003Ctitle>> />\\n\u003C$action-setfield $tiddler\u003C\u003Ctestcase-source-state>> text\u003C\u003CnewTitle>>/>\\n\u003C$action-deletetiddler $tiddler\u003C\u003CtestcaseNewTitle>>/>\\n\\\\end\\n\\n\\\\procedure saveButton(title, newTitle)\\n\u003C$button class\\\tc-btn-invisible tc-test-case-save-button tc-small-gap-left\\\ actions\u003C\u003CsaveActions>> disabled{{{ \u003CtestcaseNewTitle>!hastextthenyes }}}>\\n{{$:/core/images/done-button}}\\n\u003C/$button>\\n\\\\end\\n\\n\\\\procedure body()\\n\u003C$list filter\\\\u003CcurrentTab>fields -text +limit1\\\ variable\\\ignore\\\>\\n\\t\u003Ctable class\\\tc-field-table\\\>\\n\\t\\t\u003Ctbody>\\n\\t\\t\\t\u003C$list filter\\\\u003CcurrentTab>fieldssort -text -title title +putfirst\\\ variable\\\fieldName\\\>\\n\\t\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$text text\u003C\u003CfieldName>>/>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C%if \u003CfieldName>matchdraft.title %>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$edit-text class\\\tc-edit-texteditor tc-max-width-80\\\ tiddler\u003C\u003CtestcaseNewTitle>> focus\\\yes\\\ tag\\\input\\\/>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$macrocall $name\\\saveButton\\\ newTitle{{{ \u003CtestcaseNewTitle>gettext }}} title\u003C\u003CcurrentTab>>/>\\n\\t\\t\\t\\t\\t\\t\u003C%else%>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$view tiddler\u003C\u003CcurrentTab>> field\u003C\u003CfieldName>>/>\\n\\t\\t\\t\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\u003C/tr>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/tbody>\\n\\t\u003C/table>\\n\u003C/$list>\\n\u003C$edit class\\\tc-edit-texteditor\\\ tiddler\u003C\u003CcurrentTab>>/>\\n\u003Cdiv class\\\tc-test-case-footer-toolbar\\\>\\n\u003C$macrocall $name\\\copy-to-clipboard\\\ src{{{ \u003CcurrentTab>gettext }}}/>\\n\u003C/div>\\n\\\\end\\n\\n\u003C$transclude $variable\\\body\\\ $mode\\\inline\\\/>\\n\},\$:/core/ui/testcases/RawJSONTemplate\:{\title\:\$:/core/ui/testcases/RawJSONTemplate\,\text\:\\\\\whitespace trim\\n\u003C$text text\u003C\u003CpayloadTiddlers>>/>\\n\},\$:/core/ui/testcases/actions/Export\:{\title\:\$:/core/ui/testcases/actions/Export\,\tags\:\$:/tags/TestCase/Actions\,\text\:\\u003C$macrocall $name\\\exportButton\\\ exportFilter\\\alltiddlerssort -prefix$:/state/ -Description -Narrative -ExpectedResult -hasplugin-type\\\ lingoBase\\\$:/language/Buttons/ExportTiddlers/\\\/>\},\$:/core/ui/testcases/actions/Import\:{\title\:\$:/core/ui/testcases/actions/Import\,\tags\:\$:/tags/TestCase/Actions\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/TestCaseImport/Hint}} aria-label{{$:/language/Buttons/TestCaseImport/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-import-tiddlers\\\ $param\u003C\u003CpayloadTiddlers>>/>\\n{{$:/core/images/input-button}}\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/TestCaseImport/Caption}}/>\\n\u003C/span>\\n\u003C/$button>\\n\},\$:/core/ui/TiddlerFieldTemplate\:{\title\:\$:/core/ui/TiddlerFieldTemplate\,\text\:\\\\\whitespace trim\\n\u003Ctr class\\\tc-view-field\\\>\\n\u003Ctd class\\\tc-view-field-name\\\>\\n\u003C$text text\u003C\u003ClistItem>>/>\\n\u003C/td>\\n\u003Ctd class\\\tc-view-field-value\\\>\\n\u003C$view field\u003C\u003ClistItem>>/>\\n\u003C/td>\\n\u003C/tr>\},\$:/core/ui/TiddlerFields\:{\title\:\$:/core/ui/TiddlerFields\,\text\:\\\\\whitespace trim\\n\u003Ctable class\\\tc-view-field-table\\\>\\n\u003Ctbody>\\n\u003C$list filter\\\allcurrentfieldssorttitle -text\\\ template\\\$:/core/ui/TiddlerFieldTemplate\\\ variable\\\listItem\\\/>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/core/ui/TiddlerIcon\:{\title\:\$:/core/ui/TiddlerIcon\,\text\:\\\\\whitespace trim\\n\u003C$let tiddlerIcon{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext }}}>\\n\u003C$list filter\\\\u003CtiddlerIcon>!isblank\\\ variable\\\ignore\\\>\\n\u003C$transclude tiddler\u003C\u003CtiddlerIcon>>/>\\n\u003C/$list>\\n\u003C/$let>\\n\},\$:/core/ui/TiddlerInfo/Advanced/PluginInfo\:{\title\:\$:/core/ui/TiddlerInfo/Advanced/PluginInfo\,\tags\:\$:/tags/TiddlerInfo/Advanced\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\\n\\\\whitespace trim\\n\u003C$list filter\\\allcurrenthasplugin-type\\\>\\n\\n! \u003C\u003Clingo Heading>>\\n\\n\u003C\u003Clingo Hint>>\\n\u003Cul>\\n\u003C$list filter\\\allcurrentplugintiddlerssorttitle\\\ emptyMessage\u003C\u003Clingo Empty/Hint>>>\\n\u003Cli>\\n\u003C$link to{{!!title}}>\\n\u003C$view field\\\title\\\/>\\n\u003C/$link>\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\\n\u003C/$list>\\n\},\$:/core/ui/TiddlerInfo/Advanced/ShadowInfo\:{\title\:\$:/core/ui/TiddlerInfo/Advanced/ShadowInfo\,\tags\:\$:/tags/TiddlerInfo/Advanced\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\\n\u003C$set name\\\infoTiddler\\\ value\u003C\u003CcurrentTiddler>>>\\n\\n\u003C\u003Clingo Heading>>\\n\\n\u003C$list filter\\\allcurrent!isshadow\\\>\\n\\n\u003C\u003Clingo NotShadow/Hint>>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\allcurrentisshadow\\\>\\n\\n\u003C\u003Clingo Shadow/Hint>>\\n\\n\u003C$list filter\\\allcurrentshadowsource\\\>\\n\\n\u003C$set name\\\pluginTiddler\\\ value\u003C\u003CcurrentTiddler>>>\\n\\n\u003C\u003Clingo Shadow/Source>>\\n\u003C/$set>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\allcurrentisshadowistiddler\\\>\\n\\n\u003C\u003Clingo OverriddenShadow/Hint>>\\n\\n\u003C/$list>\\n\\n\\n\u003C/$list>\\n\u003C/$set>\\n\},\$:/core/ui/TiddlerInfo/Advanced\:{\title\:\$:/core/ui/TiddlerInfo/Advanced\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/Advanced/Caption}}\,\text\:\\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TiddlerInfo/Advanced!hasdraft.of\\\ variable\\\listItem\\\>\\n\\n\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\block\\\/>\\n\\n\u003C/$list>\\n\},\$:/core/ui/TiddlerInfo/Fields\:{\title\:\$:/core/ui/TiddlerInfo/Fields\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/Fields/Caption}}\,\text\:\\u003C$transclude tiddler\\\$:/core/ui/TiddlerFields\\\/>\\n\},\$:/core/ui/TiddlerInfo/List\:{\title\:\$:/core/ui/TiddlerInfo/List\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/List/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\u003C$list filter\\\list{!!title}\\\ emptyMessage\u003C\u003Clingo List/Empty>> template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/TiddlerInfo/Listed\:{\title\:\$:/core/ui/TiddlerInfo/Listed\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/Listed/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\u003C$list filter\\\allcurrentlisted!issystem\\\ emptyMessage\u003C\u003Clingo Listed/Empty>> template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/TiddlerInfo/References\:{\title\:\$:/core/ui/TiddlerInfo/References\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/References/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\u003C$list filter\\\allcurrentbacklinkssorttitle\\\ emptyMessage\u003C\u003Clingo References/Empty>> template\\\$:/core/ui/ListItemTemplate\\\>\\n\u003C/$list>\},\$:/core/ui/TiddlerInfo/Tagging\:{\title\:\$:/core/ui/TiddlerInfo/Tagging\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/Tagging/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\u003C$list filter\\\allcurrenttagging\\\ emptyMessage\u003C\u003Clingo Tagging/Empty>> template\\\$:/core/ui/ListItemTemplate\\\/>\\n\},\$:/core/ui/TiddlerInfo/Tools\:{\title\:\$:/core/ui/TiddlerInfo/Tools\,\tags\:\$:/tags/TiddlerInfo\,\caption\:\{{$:/language/TiddlerInfo/Tools/Caption}}\,\text\:\\\\\define lingo-base() $:/language/TiddlerInfo/\\n\\\\define config-title()\\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\\n\\\\end\\n\u003C$set name\\\tv-config-toolbar-icons\\\ value\\\yes\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-text\\\ value\\\yes\\\>\\n\\n\u003C$set name\\\tv-config-toolbar-class\\\ value\\\\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewToolbar!hasdraft.of\\\ variable\\\listItem\\\>\\n\\n\u003C$checkbox tiddler\u003C\u003Cconfig-title>> field\\\text\\\ checked\\\show\\\ unchecked\\\hide\\\ default\\\show\\\/> \u003C$transclude tiddler\u003C\u003ClistItem>>/> \u003Ci class\\\tc-muted\\\>\u003C$transclude tiddler\u003C\u003ClistItem>> field\\\description\\\/>\u003C/i>\\n\\n\u003C/$list>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\\n\u003C/$set>\\n\},\$:/core/ui/TiddlerInfo\:{\title\:\$:/core/ui/TiddlerInfo\,\text\:\\\\\whitespace trim\\n\u003Cdiv style\\\position:relative;\\\>\\n\u003Cdiv class\\\tc-tiddler-controls\\\ style\\\position:absolute;right:0;\\\>\\n\u003C$reveal state\\\$:/config/TiddlerInfo/Mode\\\ type\\\match\\\ text\\\sticky\\\>\\n\u003C$button set\u003C\u003CtiddlerInfoState>> setTo\\\\\\ tooltip{{$:/language/Buttons/Info/Hint}} aria-label{{$:/language/Buttons/Info/Caption}} class\\\tc-btn-invisible\\\>\\n{{$:/core/images/close-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C/div>\\n\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\allshadows+tiddlerstag$:/tags/TiddlerInfo!hasdraft.of\\\ default{{$:/config/TiddlerInfo/Default}}/>\\n\},\$:/core/ui/TopBar/menu\:{\title\:\$:/core/ui/TopBar/menu\,\tags\:\$:/tags/TopRightBar\,\text\:\\\\\whitespace trim\\n\u003C$list filter\\\$:/state/sidebargettext +elseyes!matchno\\\ variable\\\ignore\\\>\\n\u003C$button set\\\$:/state/sidebar\\\ setTo\\\no\\\ tooltip{{$:/language/Buttons/HideSideBar/Hint}} aria-label{{$:/language/Buttons/HideSideBar/Caption}} class\\\tc-btn-invisible tc-hide-sidebar-btn\\\>{{$:/core/images/chevron-right}}\u003C/$button>\\n\u003C/$list>\\n\u003C$list filter\\\$:/state/sidebargettext +elseyesmatchno\\\ variable\\\ignore\\\>\\n\u003C$button set\\\$:/state/sidebar\\\ setTo\\\yes\\\ tooltip{{$:/language/Buttons/ShowSideBar/Hint}} aria-label{{$:/language/Buttons/ShowSideBar/Caption}} class\\\tc-btn-invisible tc-show-sidebar-btn\\\>{{$:/core/images/chevron-left}}\u003C/$button>\\n\u003C/$list>\\n\},\$:/core/ui/UntaggedTemplate\:{\title\:\$:/core/ui/UntaggedTemplate\,\text\:\\\\\define lingo-base() $:/language/SideBar/\\n\\\\whitespace trim\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/tag\\\>> class\\\tc-btn-invisible tc-untagged-label tc-tag-label\\\>\\n\\t\u003C\u003Clingo Tags/Untagged/Caption>>\\n\u003C/$button>\\n\u003C$reveal class\\\tc-drop-down\\\ tag\\\div\\\ state\u003C\u003Cqualify \\\$:/state/popup/tag\\\>> type\\\popup\\\ position\\\below\\\>\\n\\t\u003C$list filter\\\untagged!issystem -tags +sorttitle\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003C/$reveal>\\n\},\$:/core/ui/ViewTemplate/body/blank\:{\title\:\$:/core/ui/ViewTemplate/body/blank\,\text\:\\u003C!-- Intentionally blank -->\\n\},\$:/core/ui/ViewTemplate/body/code\:{\title\:\$:/core/ui/ViewTemplate/body/code\,\text\:\\u003C%if \u003CcurrentTiddler>ismissing :and!isshadow %>\\n\u003C$transclude tiddler\\\$:/language/MissingTiddler/Hint\\\/>\\n\u003C%else%>\\n\u003C$transclude $variable\\\copy-to-clipboard-above-right\\\ src{{{ \u003CcurrentTiddler>gettext }}} />\\n\u003C$codeblock code{{{ \u003CcurrentTiddler>gettext }}} language{{{ \u003CcurrentTiddler>gettypeelsetext/vnd.tiddlywiki }}}/>\\n\u003C%endif%>\},\$:/core/ui/ViewTemplate/body/default\:{\title\:\$:/core/ui/ViewTemplate/body/default\,\code-body\:\yes\,\text\:\\u003C$transclude>\\n\\n\u003C$transclude tiddler\\\$:/language/MissingTiddler/Hint\\\/>\\n\\n\u003C/$transclude>\\n\},\$:/core/ui/ViewTemplate/body/import\:{\title\:\$:/core/ui/ViewTemplate/body/import\,\text\:\\\\\define lingo-base() $:/language/Import/\\n\\n\\\\define confirmCancel()\\n\\\\whitespace trim\\n\u003C$action-confirm $message{{$:/language/Import/Listing/Cancel/Warning}} >\\n\u003C$action-deletetiddler $tiddler\u003C\u003CcurrentTiddler>>/>\\n\u003C$action-deletetiddler $tiddler\\\$:/state/import/select-all\\\/>\\n\u003C$action-sendmessage $message\\\tm-close-tiddler\\\ title\u003C\u003CcurrentTiddler>>/>\\n\u003C/$action-confirm>\\n\\\\end\\n\\n\\\\define buttons()\\n\\\\whitespace trim\\n\u003C$button actions\u003C\u003CconfirmCancel>> >\u003C\u003Clingo Listing/Cancel/Caption>>\u003C/$button>\\n \\n\u003C$button message\\\tm-perform-import\\\ param\u003C\u003CcurrentTiddler>>>\u003C\u003Clingo Listing/Import/Caption>>\u003C/$button>\\n \\n\u003C\u003Clingo Listing/Preview>> \u003C$select tiddler\\\$:/state/importpreviewtype\\\ default\\\$:/core/ui/ImportPreviews/Text\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ImportPreview!hasdraft.of\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C$list filter\\\allcurrentfield:plugin-typeimport\\\>\\n\\n\u003Cdiv class\\\tc-import\\\>\\n\\n\u003C\u003Clingo Listing/Hint>>\\n\\n\u003C\u003Cbuttons>>\\n\\n{{||$:/core/ui/ImportListing}}\\n\\n\u003C\u003Cbuttons>>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\},\$:/core/ui/ViewTemplate/body/plugin\:{\title\:\$:/core/ui/ViewTemplate/body/plugin\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-tiddler-plugin-info\\\>\\n\u003C$let plugin-type{{!!plugin-type}}\\n\\tdefault-popup-state\\\yes\\\\\n\\tqualified-state\u003C\u003Cqualify \\\$:/state/plugin-info\\\>>\\n>\\n{{||$:/core/ui/Components/plugin-info}}\\n\u003C/$let>\\n\u003C/div>\},\$:/core/ui/ViewTemplate/body/rendered-plain-text\:{\title\:\$:/core/ui/ViewTemplate/body/rendered-plain-text\,\code-body\:\yes\,\text\:\\\\\whitespace trim\\n\\\\parameters (language:\\\css\\\)\\n\u003C$wikify name\\\text\\\ text{{!!text}} type{{!!type}}>\\n\u003C$codeblock code\u003C\u003Ctext>> language\u003C\u003Clanguage>>/>\\n\u003C/$wikify>\\n\},\$:/core/ui/ViewTemplate/body/rendered-plain-text/html\:{\title\:\$:/core/ui/ViewTemplate/body/rendered-plain-text/html\,\code-body\:\yes\,\text\:\{{||$:/core/ui/ViewTemplate/body/rendered-plain-text|html}}\},\$:/core/ui/ViewTemplate/body\:{\title\:\$:/core/ui/ViewTemplate/body\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\import allshadows+tiddlerstag$:/tags/Macro/View/Body!isdraft allshadows+tiddlerstag$:/tags/Global/View/Body!isdraft\\n\\n\u003C$reveal tag\\\div\\\ class\\\tc-tiddler-body tc-clearfix\\\ type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ retain\\\yes\\\ animate\\\yes\\\>\\n\\n\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/ViewTemplateBodyFilter!isdraftgettext :and!isblankelse$:/core/ui/ViewTemplate/body/default }}} />\\n\\n\u003C/$reveal>\\n\},\$:/core/ui/ViewTemplate/classic\:{\title\:\$:/core/ui/ViewTemplate/classic\,\tags\:\$:/tags/ViewTemplate $:/tags/EditTemplate\,\text\:\\\\\define lingo-base() $:/language/ClassicWarning/\\n\\\\whitespace trim\\n\u003C$list filter\\\allcurrenttypetext/x-tiddlywiki\\\>\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n\u003C\u003Clingo Hint>>\\n\\n\u003C$button set\\\!!type\\\ setTo\\\text/vnd.tiddlywiki\\\>\u003C\u003Clingo Upgrade/Caption>>\u003C/$button>\\n\\n\u003C/div>\\n\u003C/$list>\\n\},\$:/core/ui/ViewTemplate/lazy-loading\:{\title\:\$:/core/ui/ViewTemplate/lazy-loading\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\whitespace trim\\n\u003C%if \u003CcurrentTiddler>has:field_is_skinny %>\\n \u003C!-- Render the text to trigger lazy-loading -->\\n {{||$:/core/ui/ViewTemplate/body/default}}\\n \u003C!-- Indicator of loading state -->\\n \u003Cdiv class\\\tc-tiddler-lazy-loading\\\ />\\n\u003C%endif%>\\n\},\$:/core/ui/ViewTemplate/subtitle/default\:{\title\:\$:/core/ui/ViewTemplate/subtitle/default\,\text\:\\\\\whitespace trim\\n\u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ tag\\\div\\\ retain\\\yes\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-subtitle tc-clearfix\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewTemplate/Subtitle!hasdraft.of\\\ variable\\\subtitleTiddler\\\>\\n\u003C$transclude tiddler\u003C\u003CsubtitleTiddler>> mode\\\inline\\\/>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/ViewTemplate/subtitle/modified\:{\title\:\$:/core/ui/ViewTemplate/subtitle/modified\,\tags\:\$:/tags/ViewTemplate/Subtitle\,\text\:\\u003C$view field\\\modified\\\ format\\\date\\\ template{{$:/language/Tiddler/DateFormat}}/>\},\$:/core/ui/ViewTemplate/subtitle/modifier\:{\title\:\$:/core/ui/ViewTemplate/subtitle/modifier\,\tags\:\$:/tags/ViewTemplate/Subtitle\,\text\:\\u003C%if {!!modifier}!isblank %>\u003C$link to{{!!modifier}}/>\u003C%endif%>\},\$:/core/ui/ViewTemplate/subtitle\:{\title\:\$:/core/ui/ViewTemplate/subtitle\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\whitespace trim\\n\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/ViewTemplateSubtitleFilter!isdraftgettext :and!isblankelse$:/core/ui/ViewTemplate/subtitle/default }}} />\},\$:/core/ui/ViewTemplate/tags/default\:{\title\:\$:/core/ui/ViewTemplate/tags/default\,\text\:\\\\\whitespace trim\\n\u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ tag\\\div\\\ retain\\\yes\\\ animate\\\yes\\\>\\n \u003Cdiv class\\\tc-tags-wrapper\\\>\\n \u003C$list filter\\\allcurrenttagssorttitle\\\ template\\\$:/core/ui/TagTemplate\\\ storyview\\\pop\\\/>\\n \u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewTemplate/Tags!hasdraft.of\\\>\\n \u003C$transclude mode\\\inline\\\/>\\n \u003C/$list>\\n \u003C/div>\\n\u003C/$reveal>\\n\},\$:/core/ui/ViewTemplate/tags\:{\title\:\$:/core/ui/ViewTemplate/tags\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\whitespace trim\\n\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/ViewTemplateTagsFilter!isdraftgettext :and!isblankelse$:/core/ui/ViewTemplate/tags/default }}} />\},\$:/core/ui/ViewTemplate/title/default\:{\title\:\$:/core/ui/ViewTemplate/title/default\,\text\:\\\\\whitespace trim\\n\u003Ch2 class\\\tc-title\\\>\\n\u003C$view field\\\title\\\/>\\n\u003C/h2>\\n\},\$:/core/ui/ViewTemplate/title/system\:{\title\:\$:/core/ui/ViewTemplate/title/system\,\text\:\\\\\whitespace trim\\n\u003Ch2 class\\\tc-title\\\ title{{$:/language/SystemTiddler/Tooltip}}>\\n\u003Cspan class\\\tc-system-title-prefix\\\>$:/\u003C/span>\u003C$text text{{{ \u003CcurrentTiddler>removeprefix$:/ }}}/>\\n\u003C/h2>\},\$:/core/ui/ViewTemplate/title\:{\title\:\$:/core/ui/ViewTemplate/title\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\whitespace trim\\n\\\\define title-styles() fill:$(foregroundColor)$;\\n\\n\u003Cdiv class\\\tc-tiddler-title tc-clearfix\\\>\\n\\t\u003Cdiv class\\\tc-titlebar\\\>\\n\\t\\t\u003Cspan class\\\tc-tiddler-controls\\\>\\n\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewToolbar!hasdraft.of :filterlookup$:/config/ViewToolbarButtons/Visibility/!matchhide\\\\\n\\t\\t\\t\\tstoryview\\\pop\\\\\n\\t\\t\\t\\tvariable\\\listItem\\\\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$set name\\\tv-config-toolbar-class\\\ filter\\\\u003Ctv-config-toolbar-class> \u003ClistItem>encodeuricomponentaddprefixtc-btn-\\\>\\n\\t\\t\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>>/>\\n\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/span>\\n\\t\\t\u003C$set name\\\tv-wikilinks\\\ value{{$:/config/Tiddlers/TitleLinks}}>\\n\\t\\t\\t\u003C$link>\\n\\t\\t\\t\\t\u003C$list filter\\\\u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext +!isblank\\\\\n\\t\\t\\t\\t\\tvariable\\\ignore\\\\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003C$let foregroundColor{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}>\\n\\t\\t\\t\\t\\t\\t\u003Cspan class\\\tc-tiddler-title-icon\\\ style\u003C\u003Ctitle-styles>>>\\n\\t\\t\\t\\t\\t\\t\\t{{||$:/core/ui/TiddlerIcon}}\\n\\t\\t\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\\t\\t\u003C/$let>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C$transclude tiddler{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/ViewTemplateTitleFilter!isdraftgettext :and!isblankelse$:/core/ui/ViewTemplate/title/default }}} />\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/$set>\\n\\t\u003C/div>\\n\\t\u003C$reveal tag\\\div\\\ type\\\nomatch\\\ text\\\\\\ default\\\\\\ state\u003C\u003CtiddlerInfoState>> class\\\tc-tiddler-info tc-popup-handle\\\ animate\\\yes\\\ retain\\\yes\\\>\\n\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/TiddlerInfoSegment!hasdraft.of $:/core/ui/TiddlerInfo\\\ variable\\\listItem\\\>\\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\block\\\/>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$reveal>\\n\u003C/div>\\n\},\$:/core/ui/ViewTemplate/unfold\:{\title\:\$:/core/ui/ViewTemplate/unfold\,\tags\:\$:/tags/ViewTemplate\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-reveal\\\>\\n\u003C$list filter\\\{$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar}matchshow\\\ variable\\\ignore\\\>\\n\u003C$reveal tag\\\div\\\ type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ default\\\show\\\ retain\\\yes\\\ animate\\\yes\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Fold/Hint}} aria-label{{$:/language/Buttons/Fold/Caption}} class\\\tc-fold-banner\\\>\\n\u003C$action-sendmessage $message\\\tm-fold-tiddler\\\ $param\u003C\u003CcurrentTiddler>> foldedState\u003C\u003Cfolded-state>>/>\\n{{$:/core/images/chevron-up}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C$list filter\\\{$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar}matchshow :else\u003Cfolded-state>gettextmatchhide\\\ variable\\\ignore\\\>\\n\u003C$reveal tag\\\div\\\ type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\show\\\ default\\\show\\\ retain\\\yes\\\ animate\\\yes\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Unfold/Hint}} aria-label{{$:/language/Buttons/Unfold/Caption}} class\\\tc-unfold-banner\\\>\\n\u003C$action-sendmessage $message\\\tm-fold-tiddler\\\ $param\u003C\u003CcurrentTiddler>> foldedState\u003C\u003Cfolded-state>>/>\\n{{$:/core/images/chevron-down}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/div>\},\$:/core/ui/ViewTemplate\:{\title\:\$:/core/ui/ViewTemplate\,\code-body\:\yes\,\text\:\\\\\whitespace trim\\n\\\\define folded-state()\\n$:/state/folded/$(currentTiddler)$\\n\\\\end\\n\\\\define cancel-delete-tiddler-actions(message) \u003C$action-sendmessage $message\\\tm-$message$-tiddler\\\/>\\n\\\\import allshadows+tiddlerstag$:/tags/Macro/View!isdraft allshadows+tiddlerstag$:/tags/Global/View!isdraft\\n\u003C$vars storyTiddler\u003C\u003CcurrentTiddler>> tiddlerInfoState\u003C\u003Cqualify \\\$:/state/popup/tiddler-info\\\>>>\\n\u003Cdiv data-tiddler-title\u003C\u003CcurrentTiddler>> data-tags{{!!tags}} class{{{ allshadows+tiddlerstag$:/tags/ClassFilters/TiddlerTemplate!isdraft :map:flatsubfilter{!!text} tc-tiddler-frame tc-tiddler-view-frame \u003CcurrentTiddler>istiddlerthentc-tiddler-exists \u003CcurrentTiddler>ismissing!isshadowthentc-tiddler-missing \u003CcurrentTiddler>isshadowthentc-tiddler-exists tc-tiddler-shadow \u003CcurrentTiddler>isshadowistiddlerthentc-tiddler-overridden-shadow \u003CcurrentTiddler>issystemthentc-tiddler-system {!!class} \u003CcurrentTiddler>tagsencodeuricomponentaddprefixtc-tagged- +join }}} role\\\article\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewTemplate!isdraft\\\ variable\\\listItem\\\>\\n\u003C$transclude tiddler\u003C\u003ClistItem>>/>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$vars>\\n\},\$:/core/ui/Buttons/clone\:{\title\:\$:/core/ui/Buttons/clone\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}\,\description\:\{{$:/language/Buttons/Clone/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-new-tiddler\\\\\n\\tparam\u003C\u003CcurrentTiddler>>\\n\\ttooltip{{$:/language/Buttons/Clone/Hint}}\\n\\taria-label{{$:/language/Buttons/Clone/Hint}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/clone-button}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text{{$:/language/Buttons/Clone/Caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/close-others\:{\title\:\$:/core/ui/Buttons/close-others\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}\,\description\:\{{$:/language/Buttons/CloseOthers/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-close-other-tiddlers\\\ param\u003C\u003CcurrentTiddler>> tooltip{{$:/language/Buttons/CloseOthers/Hint}} aria-label{{$:/language/Buttons/CloseOthers/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/close-others-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/CloseOthers/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/close\:{\title\:\$:/core/ui/Buttons/close\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}\,\description\:\{{$:/language/Buttons/Close/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-close-tiddler\\\\\n\\ttooltip{{$:/language/Buttons/Close/Hint}}\\n\\taria-label{{$:/language/Buttons/Close/Caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/close-button}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text{{$:/language/Buttons/Close/Caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/edit\:{\title\:\$:/core/ui/Buttons/edit\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}\,\description\:\{{$:/language/Buttons/Edit/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-edit-tiddler\\\\\n\\ttooltip{{$:/language/Buttons/Edit/Hint}}\\n\\taria-label{{$:/language/Buttons/Edit/Hint}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/edit-button}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\u003C$text text{{$:/language/Buttons/Edit/Caption}}/>\\n\\t\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/export-tiddler\:{\title\:\$:/core/ui/Buttons/export-tiddler\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}\,\description\:\{{$:/language/Buttons/ExportTiddler/Hint}}\,\text\:\\u003C$transclude $variable\\\exportButton\\\ exportFilter`$(currentTiddler)$` lingoBase\\\$:/language/Buttons/ExportTiddler/\\\ baseFilename\u003C\u003CcurrentTiddler>>/>\},\$:/core/ui/Buttons/fold-bar\:{\title\:\$:/core/ui/Buttons/fold-bar\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}\,\description\:\{{$:/language/Buttons/Fold/FoldBar/Hint}}\,\text\:\\u003C!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->\},\$:/core/ui/Buttons/fold-others\:{\title\:\$:/core/ui/Buttons/fold-others\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}\,\description\:\{{$:/language/Buttons/FoldOthers/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip{{$:/language/Buttons/FoldOthers/Hint}} aria-label{{$:/language/Buttons/FoldOthers/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-fold-other-tiddlers\\\ $param\u003C\u003CcurrentTiddler>> foldedStatePrefix\\\$:/state/folded/\\\/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/fold-others-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/FoldOthers/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/fold\:{\title\:\$:/core/ui/Buttons/fold\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}\,\description\:\{{$:/language/Buttons/Fold/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ default\\\show\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Fold/Hint}} aria-label{{$:/language/Buttons/Fold/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-fold-tiddler\\\ $param\u003C\u003CcurrentTiddler>> foldedState\u003C\u003Cfolded-state>>/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/fold-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Fold/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ stateTitle\u003C\u003Cfolded-state>> text\\\hide\\\ default\\\show\\\>\\n\u003C$button tooltip{{$:/language/Buttons/Unfold/Hint}} aria-label{{$:/language/Buttons/Unfold/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$action-sendmessage $message\\\tm-fold-tiddler\\\ $param\u003C\u003CcurrentTiddler>> foldedState\u003C\u003Cfolded-state>>/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/unfold-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Unfold/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\u003C/$reveal>\\n\},\$:/core/ui/Buttons/info\:{\title\:\$:/core/ui/Buttons/info\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}\,\description\:\{{$:/language/Buttons/Info/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure button-content()\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/info-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Info/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\\\\end\\n\u003C$reveal state\\\$:/config/TiddlerInfo/Mode\\\ type\\\match\\\ text\\\popup\\\>\\n\u003C$button popup\u003C\u003CtiddlerInfoState>> tooltip{{$:/language/Buttons/Info/Hint}} aria-label{{$:/language/Buttons/Info/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C$transclude $variable\\\button-content\\\ $mode\\\inline\\\/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal state\\\$:/config/TiddlerInfo/Mode\\\ type\\\match\\\ text\\\sticky\\\>\\n\u003C$reveal state\u003C\u003CtiddlerInfoState>> type\\\match\\\ text\\\\\\ default\\\\\\>\\n\u003C$button set\u003C\u003CtiddlerInfoState>> setTo\\\yes\\\ tooltip{{$:/language/Buttons/Info/Hint}} aria-label{{$:/language/Buttons/Info/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C$transclude $variable\\\button-content\\\ $mode\\\inline\\\/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal state\u003C\u003CtiddlerInfoState>> type\\\nomatch\\\ text\\\\\\ default\\\\\\>\\n\u003C$button set\u003C\u003CtiddlerInfoState>> setTo\\\\\\ tooltip{{$:/language/Buttons/Info/Hint}} aria-label{{$:/language/Buttons/Info/Caption}} class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\\n\u003C$transclude $variable\\\button-content\\\ $mode\\\inline\\\/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\},\$:/core/ui/Buttons/more-tiddler-actions\:{\title\:\$:/core/ui/Buttons/more-tiddler-actions\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}\,\description\:\{{$:/language/Buttons/More/Hint}}\,\text\:\\\\\whitespace trim\\n\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/more\\\>>\\n\\ttooltip{{$:/language/Buttons/More/Hint}}\\n\\taria-label{{$:/language/Buttons/More/Caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n\\tselectedClass\\\tc-selected\\\\\n>\\n\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/down-arrow}}\\n\\t\u003C%endif%>\\n\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text{{$:/language/Buttons/More/Caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C%endif%>\\n\u003C/$button>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/more\\\>> type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\\t\u003Cdiv class\\\tc-drop-down\\\>\\n\\t\\t\u003C$let tv-config-toolbar-icons\\\yes\\\ tv-config-toolbar-text\\\yes\\\ tv-config-toolbar-class\\\tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ViewToolbar!hasdraft.of -$:/core/ui/Buttons/more-tiddler-actions\\\\\n\\t\\t\\t\\tvariable\\\listItem\\\\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$reveal type\\\match\\\ state`$:/config/ViewToolbarButtons/Visibility/$(listItem)$` text\\\hide\\\>\\n\\t\\t\\t\\t\\t\u003C$set name\\\tv-config-toolbar-class\\\\\n\\t\\t\\t\\t\\t\\tfilter\\\\u003Ctv-config-toolbar-class> \u003ClistItem>encodeuricomponentaddprefixtc-btn-\\\\\n\\t\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\\t\u003C$transclude tiddler\u003C\u003ClistItem>> mode\\\inline\\\/>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$let>\\n\\t\u003C/div>\\n\u003C/$reveal>\},\$:/core/ui/Buttons/new-here\:{\title\:\$:/core/ui/Buttons/new-here\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}\,\description\:\{{$:/language/Buttons/NewHere/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure newHereActions()\\n\u003C$set name\\\tags\\\ filter\\\\u003CcurrentTiddler> enlist{$:/config/NewTiddler/Tags}\\\>\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ tags\u003C\u003Ctags>>/>\\n\u003C/$set>\\n\\\\end\\n\\\\procedure newHereButton()\\n\u003C$button actions\u003C\u003CnewHereActions>> tooltip{{$:/language/Buttons/NewHere/Hint}} aria-label{{$:/language/Buttons/NewHere/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/new-here-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NewHere/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\\n\\\\end\\n\u003C\u003CnewHereButton>>\\n\},\$:/core/ui/Buttons/new-journal-here\:{\title\:\$:/core/ui/Buttons/new-journal-here\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}\,\description\:\{{$:/language/Buttons/NewJournalHere/Hint}}\,\text\:\\\\\whitespace trim\\n\\\\procedure journalButton()\\n\u003C$button tooltip{{$:/language/Buttons/NewJournalHere/Hint}} aria-label{{$:/language/Buttons/NewJournalHere/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$wikify name\\\journalTitle\\\ text\\\\\\\\\\u003C$transclude $variable\\\now\\\ format\u003C\u003CjournalTitleTemplate>>/>\\\\\\\\\>\\n\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ title\u003C\u003CjournalTitle>> tags`$(currentTiddlerTag)$ $(journalTags)$`/>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/new-journal-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/NewJournalHere/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$wikify>\\n\u003C/$button>\\n\\\\end\\n\u003C$let journalTitleTemplate{{$:/config/NewJournal/Title}} journalTags{{$:/config/NewJournal/Tags}} currentTiddlerTag\u003C\u003CcurrentTiddler>>>\\n\u003C\u003CjournalButton>>\\n\u003C/$let>\\n\},\$:/core/ui/Buttons/open-window\:{\title\:\$:/core/ui/Buttons/open-window\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}\,\description\:\{{$:/language/Buttons/OpenWindow/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-open-window\\\ tooltip{{$:/language/Buttons/OpenWindow/Hint}} aria-label{{$:/language/Buttons/OpenWindow/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/open-window}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/OpenWindow/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/permalink\:{\title\:\$:/core/ui/Buttons/permalink\,\tags\:\$:/tags/ViewToolbar\,\caption\:\{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}\,\description\:\{{$:/language/Buttons/Permalink/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-permalink\\\ tooltip{{$:/language/Buttons/Permalink/Hint}} aria-label{{$:/language/Buttons/Permalink/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/permalink-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Permalink/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/Buttons/permaview\:{\title\:\$:/core/ui/Buttons/permaview\,\tags\:\$:/tags/ViewToolbar $:/tags/PageControls\,\caption\:\{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}\,\description\:\{{$:/language/Buttons/Permaview/Hint}}\,\text\:\\\\\whitespace trim\\n\u003C$button message\\\tm-permaview\\\ tooltip{{$:/language/Buttons/Permaview/Hint}} aria-label{{$:/language/Buttons/Permaview/Caption}} class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n{{$:/core/images/permaview-button}}\\n\u003C%endif%>\\n\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text{{$:/language/Buttons/Permaview/Caption}}/>\\n\u003C/span>\\n\u003C%endif%>\\n\u003C/$button>\},\$:/core/ui/ControlPanel/WikiInformation\:{\title\:\$:/core/ui/ControlPanel/WikiInformation\,\tags\:\$:/tags/ControlPanel/Info\,\caption\:\\u003C%if $:/language/ControlPanel/WikiInformation/Captionisshadow %>{{$:/language/ControlPanel/WikiInformation/Caption}}\u003C%else%>Wiki Information\u003C%endif%>\,\subtitle\:\\u003C%if $:/language/ControlPanel/WikiInformation/Captionisshadow %>{{$:/language/ControlPanel/WikiInformation/Caption}}\u003C%else%>Wiki Information\u003C%endif%>\,\text\:\\\\\procedure lingo-base() $:/language/ControlPanel/WikiInformation/\\n\\n\u003C!--\\nA custom implementation of the lingo macro that works even if this tiddler has been copied to an earlier version of TiddlyWiki that doesnt include the necessary lingo tiddlers in the core.\\n-->\\n\\n\\\\procedure intrinsic-lingo-Hint()\\nThis page summarises high level information about the configuration of this ~TiddlyWiki. It is designed to enable users to quickly share relevant aspects of the configuration of their ~TiddlyWiki with others, for example when seeking help in one of the forums. No private or personal information is included, and nothing is shared without being explicitly copied and pasted elsewhere\\n\\\\end intrinsic-lingo-Hint\\n\\n\\\\procedure intrinsic-lingo-Drag/Caption()\\nDrag this link to copy this tool to another wiki\\n\\\\end intrinsic-lingo-Drag/Caption\\n\\n\\\\procedure lingo(title,mode:\\\inline\\\)\\n\u003C%if \u003Ctitle>addprefix\u003Clingo-base>isshadow %>\\n\\t\u003C$transclude $tiddler{{{ \u003Ctitle>addprefix\u003Clingo-base> }}} $mode\u003C\u003Cmode>>/>\\n\u003C%else%>\\n\\t\u003C$transclude $variable{{{ \u003Ctitle>addprefixintrinsic-lingo- }}} $mode\u003C\u003Cmode>>/>\\n\u003C%endif%>\\n\\\\end lingo\\n\\n\\\\whitespace trim\\n\\n\\\\procedure capture-item(label,value)\\n\u003C$action-setfield $tiddler\u003C\u003CtempWikiInfo>> text{{{ \u003CtempWikiInfo>gettextaddsuffix\u003Clabel>addsuffix: addsuffix\u003Cvalue>addsuffix\u003Ccrlf> }}}/>\\n\\\\end capture-item\\n\\n\\\\procedure capture-item-wikified(label,value)\\n\u003C$wikify name\\\text\\\ text\u003C\u003Cvalue>> mode\\\inline\\\>\\n\\t\u003C$transclude\\n\\t\\t$variable\\\capture-item\\\\\n\\t\\tlabel\u003C\u003Clabel>>\\n\\t\\tvalue\u003C\u003Ctext>>\\n\\t/>\\n\u003C/$wikify>\\n\\\\end capture-item-wikified\\n\\n\\\\procedure capture-wiki-info(tempWikiInfo)\\n\u003C$transclude $variable\\\capture-item-wikified\\\ label\\\TiddlyWiki Version\\\ value\\\\u003C\u003Cversion>>\\\/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Current palette\\\ value{{$:/palette}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Current theme\\\ value{{$:/theme}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Current layout\\\ value{{$:/layout}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Browser language setting\\\ value{{$:/info/browser/language}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Default type for missing tiddlers\\\ value{{$:/config/DefaultMissingType}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Auto save setting\\\ value{{$:/config/AutoSave}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Code wrapping setting\\\ value{{$:/themes/tiddlywiki/vanilla/options/codewrapping}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Sticky titles setting\\\ value{{$:/themes/tiddlywiki/vanilla/options/stickytitles}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Sidebar layout setting\\\ value{{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Auto focus field setting for new tiddlers\\\ value{{$:/config/AutoFocus}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Current storyview setting\\\ value{{$:/view}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Toolbar text setting\\\ value{{$:/config/Toolbar/Text}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Toolbar icon setting\\\ value{{$:/config/Toolbar/Icons}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Button class setting\\\ value{{$:/config/Toolbar/ButtonClass}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Navigation address bar setting\\\ value{{$:/config/Navigation/UpdateAddressBar}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Tiddler opening behaviour setting for navigations from outside the story river\\\ value{{$:/config/Navigation/openLinkFromOutsideRiver}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Tiddler opening behaviour setting for navigations from within the story river\\\ value{{$:/config/Navigation/openLinkFromInsideRiver}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\CamelCase linking setting\\\ value{{$:/config/WikiParserRules/Inline/wikilink}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Keyboard shortcuts that have been customised\\\ value{{{ alltiddlersprefix$:/config/shortcuts +join, }}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Disabled plugins\\\ value{{{ alltiddlersprefix$:/config/Plugins/Disabled/ :filter{!!text}matchyes :map\u003CcurrentTiddler>removeprefix$:/config/Plugins/Disabled/ +join, }}}/>\\n\u003C$transclude $variable\\\capture-item\\\ label\\\Plugins\\\ value{{{ hasplugin-typesort :filter\u003CcurrentTiddler>addprefix$:/config/Plugins/Disabled/gettextelseno!matchyes :map{!!version}addprefix - addprefix\u003CcurrentTiddler> +addprefix addprefix\u003Ccrlf>join }}}/>\\n\\\\end capture-wiki-info\\n\\n\\\\procedure template-header()\\n\u003Cdetails>\u003Csummary>Wiki Information\u003C/summary>\u003Cpre>\u003Ccode>\\n\\n\\\\end template-header\\n\\n\\\\procedure template-footer()\\n\\n\u003C/code>\u003C/pre>\u003C/details>\\n\\\\end template-footer\\n\\n\\\\procedure display-wiki-info-modal()\\n\u003C$let\\n\\ttempWikiInfo\\\$:/temp/wiki-info\\\\\n\\tcrlf{{{ charcode13,10 }}}\\n>\\n\\t\u003C$action-sendmessage\\n\\t\\t$message\\\tm-modal\\\\\n\\t\\t$param\\\$:/core/ui/ControlPanel/WikiInformation\\\\\n\\t\\tisModal\\\yes\\\\\n\\t\\ttempWikiInfo\u003C\u003CtempWikiInfo>>\\n\\t/>\\n\\t\u003C$action-deletetiddler $tiddler\u003C\u003CtempWikiInfo>>/>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CtempWikiInfo>> text\u003C\u003Ctemplate-header>>/>\\n\\t\u003C$transclude\\n\\t\\t$variable\\\capture-wiki-info\\\\\n\\t\\ttempWikiInfo\u003C\u003CtempWikiInfo>>\\n\\t/>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CtempWikiInfo>> text{{{ \u003CtempWikiInfo>gettextaddsuffix\u003Ctemplate-footer> }}}/>\\n\u003C/$let>\\n\\\\end display-wiki-info-modal\\n\\n\\\\procedure story-content()\\n\u003C\u003Clingo title:\\\Hint\\\ mode:\\\block\\\>>\\n\\n\u003C$button>\\n\u003C\u003Cdisplay-wiki-info-modal>>\\nClick to generate wiki information report\\n\u003C/$button>\\n\\n\u003C$link to\\\$:/core/ui/ControlPanel/WikiInformation\\\>\\n\u003C\u003Clingo title:\\\Drag/Caption\\\ mode:\\\inline\\\>>\\n\u003C/$link>\\n\\\\end story-content\\n\\n\\\\procedure modal-content()\\n\u003Cp>\\n\\t\u003C$transclude $variable\\\copy-to-clipboard\\\ src{{{ \u003CtempWikiInfo>gettext }}}/>\\n\u003C/p>\\n\u003Cp>\\n\\t\u003C$edit-text tiddler\u003C\u003CtempWikiInfo>> tag\\\textarea\\\ disabled\\\yes\\\ class\\\tc-max-width\\\/>\\n\u003C/p>\\n\\\\end modal-content\\n\\n\u003C$transclude $variable{{{ \u003CisModal>matchyesthenmodal-contentelsestory-content }}} $mode\\\block\\\/>\\n\},\$:/DefaultTiddlers\:{\title\:\$:/DefaultTiddlers\,\text\:\GettingStarted\\n\},\$:/temp/advancedsearch\:{\title\:\$:/temp/advancedsearch\,\text\:\\},\$:/snippets/allfields\:{\title\:\$:/snippets/allfields\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure lingo-base() $:/language/Docs/Fields/\\n\\n\\\\function tf.getLingoText() \u003Clingo-base> \u003Ctitle> +joingettext\\n\\n\\\\procedure renderfield(title)\\n\u003Ctr class\\\tc-view-field\\\>\\n\\t\u003Ctd class\\\tc-view-field-name\\\>\\n\\t\\t\u003C$text text\u003C\u003Ctitle>>/>:\\n\\t\u003C/td>\\n\\t\u003Ctd class\\\tc-view-field-value\\\>\\n\\t\\t//\u003C\u003Ctf.getLingoText>>//\\n\\t\u003C/td>\\n\\t\u003Ctd class\\\tc-view-field-list\\\>\\n\\t\\t\u003C$macrocall $name\\\show-filter-count\\\ filter`has$(title)$sort`>>\\n\\t\u003C/td>\\n\u003C/tr>\\n\\\\end\\n\\n\u003Ctable class\\\tc-view-field-table\\\>\\n\\t\u003Ctbody>\\n\\t\\t\u003C!-- \u003C\u003CrenderfieldHeader>> -->\\n\\t\\t\u003C$list filter\\\fieldssorttitle\\\ variable\\\listItem\\\>\\n\\t\\t\\t\u003C$macrocall $name\\\renderfield\\\ title\u003C\u003ClistItem>>/>\\n\\t\\t\u003C/$list>\\n\\t\u003C/tbody>\\n\u003C/table>\\n\},\$:/config/AnimationDuration\:{\title\:\$:/config/AnimationDuration\,\text\:\400\},\$:/config/AutoFocus\:{\title\:\$:/config/AutoFocus\,\text\:\title\},\$:/config/AutoSave\:{\title\:\$:/config/AutoSave\,\text\:\yes\},\$:/config/BitmapEditor/Colour\:{\title\:\$:/config/BitmapEditor/Colour\,\text\:\#444\},\$:/config/BitmapEditor/ImageSizes\:{\title\:\$:/config/BitmapEditor/ImageSizes\,\text\:\62px 100px 100px 62px 124px 200px 200px 124px 248px 400px 371px 600px 400px 248px 556px 900px 600px 371px 742px 1200px 900px 556px 1200px 742px\},\$:/config/BitmapEditor/LineWidth\:{\title\:\$:/config/BitmapEditor/LineWidth\,\text\:\3px\},\$:/config/BitmapEditor/LineWidths\:{\title\:\$:/config/BitmapEditor/LineWidths\,\text\:\0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px\},\$:/config/BitmapEditor/Opacities\:{\title\:\$:/config/BitmapEditor/Opacities\,\text\:\0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0\},\$:/config/BitmapEditor/Opacity\:{\title\:\$:/config/BitmapEditor/Opacity\,\text\:\1.0\},\$:/config/DefaultMoreSidebarTab\:{\title\:\$:/config/DefaultMoreSidebarTab\,\text\:\$:/core/ui/MoreSideBar/Tags\},\$:/config/DefaultSidebarTab\:{\title\:\$:/config/DefaultSidebarTab\,\text\:\$:/core/ui/SideBar/Open\},\$:/config/ControlPanel/Basics/DefaultTiddlers/RetainStory\:{\title\:\$:/config/ControlPanel/Basics/DefaultTiddlers/RetainStory\,\text\:\list$:/StoryList\},\$:/config/DownloadSaver/AutoSave\:{\title\:\$:/config/DownloadSaver/AutoSave\,\text\:\no\},\$:/config/Drafts/TypingTimeout\:{\title\:\$:/config/Drafts/TypingTimeout\,\text\:\400\},\$:/config/EditMode/fieldname-filter\:{\title\:\$:/config/EditMode/fieldname-filter\,\first-search-filter\:\!isshadow!issystemfieldssearch:title\u003CuserInput>sort -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\,\second-search-filter\:\fieldssearch:title\u003CuserInput>sort -!isshadow!issystemfields\},\$:/config/EditTabIndex\:{\title\:\$:/config/EditTabIndex\,\text\:\1\},\$:/config/EditTemplateBodyFilters/canonical-uri\:{\title\:\$:/config/EditTemplateBodyFilters/canonical-uri\,\tags\:\$:/tags/EditTemplateBodyFilter\,\text\:\has_canonical_urithen$:/core/ui/EditTemplate/body/canonical-uri\},\$:/config/EditTemplateBodyFilters/default\:{\title\:\$:/config/EditTemplateBodyFilters/default\,\tags\:\$:/tags/EditTemplateBodyFilter\,\text\:\$:/core/ui/EditTemplate/body/default\},\$:/config/EditTemplateFields/Visibility/title\:{\title\:\$:/config/EditTemplateFields/Visibility/title\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/tags\:{\title\:\$:/config/EditTemplateFields/Visibility/tags\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/text\:{\title\:\$:/config/EditTemplateFields/Visibility/text\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/creator\:{\title\:\$:/config/EditTemplateFields/Visibility/creator\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/created\:{\title\:\$:/config/EditTemplateFields/Visibility/created\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/modified\:{\title\:\$:/config/EditTemplateFields/Visibility/modified\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/modifier\:{\title\:\$:/config/EditTemplateFields/Visibility/modifier\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/type\:{\title\:\$:/config/EditTemplateFields/Visibility/type\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/draft.title\:{\title\:\$:/config/EditTemplateFields/Visibility/draft.title\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/draft.of\:{\title\:\$:/config/EditTemplateFields/Visibility/draft.of\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/revision\:{\title\:\$:/config/EditTemplateFields/Visibility/revision\,\text\:\hide\},\$:/config/EditTemplateFields/Visibility/bag\:{\title\:\$:/config/EditTemplateFields/Visibility/bag\,\text\:\hide\},\$:/config/Editor/EnableImportFilter\:{\title\:\$:/config/Editor/EnableImportFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\allcurrenttypetext/vnd.tiddlywiki allcurrent!hastype allcurrenttypetext/markdown allcurrenttypetext/x-markdown\},\$:/config/Editor/ImportContentTypesFilter\:{\title\:\$:/config/Editor/ImportContentTypesFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\prefiximage/\},\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4\:{\title\:\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4\,\text\:\hide\},\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5\:{\title\:\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5\,\text\:\hide\},\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6\:{\title\:\$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6\,\text\:\hide\},\$:/config/EditorTypeMappings/image/gif\:{\title\:\$:/config/EditorTypeMappings/image/gif\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/webp\:{\title\:\$:/config/EditorTypeMappings/image/webp\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/heic\:{\title\:\$:/config/EditorTypeMappings/image/heic\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/heif\:{\title\:\$:/config/EditorTypeMappings/image/heif\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/jpeg\:{\title\:\$:/config/EditorTypeMappings/image/jpeg\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/jpg\:{\title\:\$:/config/EditorTypeMappings/image/jpg\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/png\:{\title\:\$:/config/EditorTypeMappings/image/png\,\text\:\bitmap\},\$:/config/EditorTypeMappings/image/x-icon\:{\title\:\$:/config/EditorTypeMappings/image/x-icon\,\text\:\bitmap\},\$:/config/EditorTypeMappings/text/vnd.tiddlywiki\:{\title\:\$:/config/EditorTypeMappings/text/vnd.tiddlywiki\,\text\:\text\},\$:/config/FieldEditorFilters/default\:{\title\:\$:/config/FieldEditorFilters/default\,\tags\:\$:/tags/FieldEditorFilter\,\text\:\$:/core/ui/EditTemplate/fieldEditor/default\},\$:/core/config/GlobalImportFilter\:{\title\:\$:/core/config/GlobalImportFilter\,\text\:\$:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!isdraft allshadows+tiddlerstag$:/tags/Global!isdraft\},\$:/config/Manager/Show\:{\title\:\$:/config/Manager/Show\,\text\:\tiddlers\},\$:/config/Manager/Filter\:{\title\:\$:/config/Manager/Filter\,\text\:\\},\$:/config/Manager/Order\:{\title\:\$:/config/Manager/Order\,\text\:\forward\},\$:/config/Manager/Sort\:{\title\:\$:/config/Manager/Sort\,\text\:\title\},\$:/config/Manager/System\:{\title\:\$:/config/Manager/System\,\text\:\system\},\$:/config/Manager/Tag\:{\title\:\$:/config/Manager/Tag\,\text\:\\},\$:/state/popup/manager/item/$:/Manager/ItemMain/RawText\:{\title\:\$:/state/popup/manager/item/$:/Manager/ItemMain/RawText\,\text\:\hide\},\$:/config/MissingLinks\:{\title\:\$:/config/MissingLinks\,\text\:\yes\},\$:/config/Navigation/UpdateAddressBar\:{\title\:\$:/config/Navigation/UpdateAddressBar\,\text\:\no\},\$:/config/Navigation/UpdateHistory\:{\title\:\$:/config/Navigation/UpdateHistory\,\text\:\no\},\$:/config/NewImageType\:{\title\:\$:/config/NewImageType\,\text\:\jpeg\},\$:/config/OfficialPluginLibrary\:{\title\:\$:/config/OfficialPluginLibrary\,\tags\:\$:/tags/PluginLibrary\,\url\:\https://tiddlywiki.com/library/v5.3.8/index.html\,\caption\:\{{$:/language/OfficialPluginLibrary}}\,\text\:\{{$:/language/OfficialPluginLibrary/Hint}}\\n\},\$:/config/Navigation/openLinkFromInsideRiver\:{\title\:\$:/config/Navigation/openLinkFromInsideRiver\,\text\:\below\},\$:/config/Navigation/openLinkFromOutsideRiver\:{\title\:\$:/config/Navigation/openLinkFromOutsideRiver\,\text\:\top\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/network-activity\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/network-activity\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/layout\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/layout\,\text\:\hide\},\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all\:{\title\:\$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all\,\text\:\hide\},\$:/config/Performance/Instrumentation\:{\title\:\$:/config/Performance/Instrumentation\,\text\:\no\},\$:/config/RecentLimit\:{\title\:\$:/config/RecentLimit\,\text\:\100\},\$:/config/RegisterPluginType/plugin\:{\title\:\$:/config/RegisterPluginType/plugin\,\text\:\yes\},\$:/config/RegisterPluginType/theme\:{\title\:\$:/config/RegisterPluginType/theme\,\text\:\no\},\$:/config/RegisterPluginType/language\:{\title\:\$:/config/RegisterPluginType/language\,\text\:\no\},\$:/config/RegisterPluginType/info\:{\title\:\$:/config/RegisterPluginType/info\,\text\:\yes\},\$:/config/RegisterPluginType/import\:{\title\:\$:/config/RegisterPluginType/import\,\text\:\no\},\$:/config/SaveWikiButton/Template\:{\title\:\$:/config/SaveWikiButton/Template\,\text\:\$:/core/save/all\},\$:/config/SaverFilter\:{\title\:\$:/config/SaverFilter\,\text\:\all -prefix$:/HistoryList -prefix$:/StoryList -statuspendingplugin-typeimport -$:/isEncrypted -$:/UploadName -prefix$:/state/ -prefix$:/temp/\\n\},\$:/config/Search/AutoFocus\:{\title\:\$:/config/Search/AutoFocus\,\text\:\true\},\$:/config/Search/MinLength\:{\title\:\$:/config/Search/MinLength\,\text\:\3\},\$:/config/SearchResults/Default\:{\title\:\$:/config/SearchResults/Default\,\text\:\$:/core/ui/DefaultSearchResultList\},\$:/config/Server/ExternalFilters/alltiddlers!issystemsorttitle\:{\title\:\$:/config/Server/ExternalFilters/alltiddlers!issystemsorttitle\,\text\:\yes\},\$:/config/ShortcutInfo/add-field\:{\title\:\$:/config/ShortcutInfo/add-field\,\text\:\{{$:/language/EditTemplate/Fields/Add/Button/Hint}}\},\$:/config/ShortcutInfo/advanced-search\:{\title\:\$:/config/ShortcutInfo/advanced-search\,\text\:\{{$:/language/Buttons/AdvancedSearch/Hint}}\},\$:/config/ShortcutInfo/advanced-search-sidebar\:{\title\:\$:/config/ShortcutInfo/advanced-search-sidebar\,\text\:\{{$:/language/Shortcuts/Input/AdvancedSearch/Hint}}\},\$:/config/ShortcutInfo/bold\:{\title\:\$:/config/ShortcutInfo/bold\,\text\:\{{$:/language/Buttons/Bold/Hint}}\},\$:/config/ShortcutInfo/cancel-edit-tiddler\:{\title\:\$:/config/ShortcutInfo/cancel-edit-tiddler\,\text\:\{{$:/language/Buttons/Cancel/Hint}}\},\$:/config/ShortcutInfo/change-sidebar-layout\:{\title\:\$:/config/ShortcutInfo/change-sidebar-layout\,\text\:\{{$:/language/Shortcuts/SidebarLayout/Hint}}\},\$:/config/ShortcutInfo/delete-field\:{\title\:\$:/config/ShortcutInfo/delete-field\,\text\:\{{$:/language/EditTemplate/Field/Remove/Hint}}\},\$:/config/ShortcutInfo/excise\:{\title\:\$:/config/ShortcutInfo/excise\,\text\:\{{$:/language/Buttons/Excise/Hint}}\},\$:/config/ShortcutInfo/heading-1\:{\title\:\$:/config/ShortcutInfo/heading-1\,\text\:\{{$:/language/Buttons/Heading1/Hint}}\},\$:/config/ShortcutInfo/heading-2\:{\title\:\$:/config/ShortcutInfo/heading-2\,\text\:\{{$:/language/Buttons/Heading2/Hint}}\},\$:/config/ShortcutInfo/heading-3\:{\title\:\$:/config/ShortcutInfo/heading-3\,\text\:\{{$:/language/Buttons/Heading3/Hint}}\},\$:/config/ShortcutInfo/heading-4\:{\title\:\$:/config/ShortcutInfo/heading-4\,\text\:\{{$:/language/Buttons/Heading4/Hint}}\},\$:/config/ShortcutInfo/heading-5\:{\title\:\$:/config/ShortcutInfo/heading-5\,\text\:\{{$:/language/Buttons/Heading5/Hint}}\},\$:/config/ShortcutInfo/heading-6\:{\title\:\$:/config/ShortcutInfo/heading-6\,\text\:\{{$:/language/Buttons/Heading6/Hint}}\},\$:/config/ShortcutInfo/input-accept\:{\title\:\$:/config/ShortcutInfo/input-accept\,\text\:\{{$:/language/Shortcuts/Input/Accept/Hint}}\},\$:/config/ShortcutInfo/input-accept-variant\:{\title\:\$:/config/ShortcutInfo/input-accept-variant\,\text\:\{{$:/language/Shortcuts/Input/AcceptVariant/Hint}}\},\$:/config/ShortcutInfo/input-cancel\:{\title\:\$:/config/ShortcutInfo/input-cancel\,\text\:\{{$:/language/Shortcuts/Input/Cancel/Hint}}\},\$:/config/ShortcutInfo/input-down\:{\title\:\$:/config/ShortcutInfo/input-down\,\text\:\{{$:/language/Shortcuts/Input/Down/Hint}}\},\$:/config/ShortcutInfo/input-tab-left\:{\title\:\$:/config/ShortcutInfo/input-tab-left\,\text\:\{{$:/language/Shortcuts/Input/Tab-Left/Hint}}\},\$:/config/ShortcutInfo/input-tab-right\:{\title\:\$:/config/ShortcutInfo/input-tab-right\,\text\:\{{$:/language/Shortcuts/Input/Tab-Right/Hint}}\},\$:/config/ShortcutInfo/input-up\:{\title\:\$:/config/ShortcutInfo/input-up\,\text\:\{{$:/language/Shortcuts/Input/Up/Hint}}\},\$:/config/ShortcutInfo/italic\:{\title\:\$:/config/ShortcutInfo/italic\,\text\:\{{$:/language/Buttons/Italic/Hint}}\},\$:/config/ShortcutInfo/layout-switcher\:{\title\:\$:/config/ShortcutInfo/layout-switcher\,\text\:\{{$:/language/LayoutSwitcher/Description}}\},\$:/config/ShortcutInfo/link\:{\title\:\$:/config/ShortcutInfo/link\,\text\:\{{$:/language/Buttons/Link/Hint}}\},\$:/config/ShortcutInfo/linkify\:{\title\:\$:/config/ShortcutInfo/linkify\,\text\:\{{$:/language/Buttons/Linkify/Hint}}\},\$:/config/ShortcutInfo/list-bullet\:{\title\:\$:/config/ShortcutInfo/list-bullet\,\text\:\{{$:/language/Buttons/ListBullet/Hint}}\},\$:/config/ShortcutInfo/list-number\:{\title\:\$:/config/ShortcutInfo/list-number\,\text\:\{{$:/language/Buttons/ListNumber/Hint}}\},\$:/config/ShortcutInfo/mono-block\:{\title\:\$:/config/ShortcutInfo/mono-block\,\text\:\{{$:/language/Buttons/MonoBlock/Hint}}\},\$:/config/ShortcutInfo/mono-line\:{\title\:\$:/config/ShortcutInfo/mono-line\,\text\:\{{$:/language/Buttons/MonoLine/Hint}}\},\$:/config/ShortcutInfo/new-image\:{\title\:\$:/config/ShortcutInfo/new-image\,\text\:\{{$:/language/Buttons/NewImage/Hint}}\},\$:/config/ShortcutInfo/new-journal\:{\title\:\$:/config/ShortcutInfo/new-journal\,\text\:\{{$:/language/Buttons/NewJournal/Hint}}\},\$:/config/ShortcutInfo/new-tiddler\:{\title\:\$:/config/ShortcutInfo/new-tiddler\,\text\:\{{$:/language/Buttons/NewTiddler/Hint}}\},\$:/config/ShortcutInfo/open-control-panel\:{\title\:\$:/config/ShortcutInfo/open-control-panel\,\text\:\{{$:/language/Buttons/OpenControlPanel/Hint}}\},\$:/config/ShortcutInfo/picture\:{\title\:\$:/config/ShortcutInfo/picture\,\text\:\{{$:/language/Buttons/Picture/Hint}}\},\$:/config/ShortcutInfo/preview\:{\title\:\$:/config/ShortcutInfo/preview\,\text\:\{{$:/language/Buttons/Preview/Hint}}\},\$:/config/ShortcutInfo/quote\:{\title\:\$:/config/ShortcutInfo/quote\,\text\:\{{$:/language/Buttons/Quote/Hint}}\},\$:/config/ShortcutInfo/refresh\:{\title\:\$:/config/ShortcutInfo/refresh\,\text\:\{{$:/language/Buttons/Refresh/Hint}}\},\$:/config/ShortcutInfo/save-tiddler\:{\title\:\$:/config/ShortcutInfo/save-tiddler\,\text\:\{{$:/language/Buttons/Save/Hint}}\},\$:/config/ShortcutInfo/save-wiki\:{\title\:\$:/config/ShortcutInfo/save-wiki\,\text\:\{{$:/language/Buttons/SaveWiki/Hint}}\},\$:/config/ShortcutInfo/sidebar-search\:{\title\:\$:/config/ShortcutInfo/sidebar-search\,\text\:\{{$:/language/Buttons/SidebarSearch/Hint}}\},\$:/config/ShortcutInfo/stamp\:{\title\:\$:/config/ShortcutInfo/stamp\,\text\:\{{$:/language/Buttons/Stamp/Hint}}\},\$:/config/ShortcutInfo/strikethrough\:{\title\:\$:/config/ShortcutInfo/strikethrough\,\text\:\{{$:/language/Buttons/Strikethrough/Hint}}\},\$:/config/ShortcutInfo/subscript\:{\title\:\$:/config/ShortcutInfo/subscript\,\text\:\{{$:/language/Buttons/Subscript/Hint}}\},\$:/config/ShortcutInfo/superscript\:{\title\:\$:/config/ShortcutInfo/superscript\,\text\:\{{$:/language/Buttons/Superscript/Hint}}\},\$:/config/ShortcutInfo/toggle-sidebar\:{\title\:\$:/config/ShortcutInfo/toggle-sidebar\,\text\:\{{$:/language/Buttons/ToggleSidebar/Hint}}\},\$:/config/ShortcutInfo/transcludify\:{\title\:\$:/config/ShortcutInfo/transcludify\,\text\:\{{$:/language/Buttons/Transcludify/Hint}}\},\$:/config/ShortcutInfo/underline\:{\title\:\$:/config/ShortcutInfo/underline\,\text\:\{{$:/language/Buttons/Underline/Hint}}\},\$:/config/StoryTiddlerTemplateFilters/draft\:{\title\:\$:/config/StoryTiddlerTemplateFilters/draft\,\tags\:\$:/tags/StoryTiddlerTemplateFilter\,\text\:\isdraftthen{$:/config/ui/EditTemplate}\},\$:/config/StoryTiddlerTemplateFilters/default\:{\title\:\$:/config/StoryTiddlerTemplateFilters/default\,\tags\:\$:/tags/StoryTiddlerTemplateFilter\,\text\:\{$:/config/ui/ViewTemplate}\},\$:/config/SwitcherTargets/layout\:{\title\:\$:/config/SwitcherTargets/layout\,\text\:\$:/snippets/LayoutSwitcher\},\$:/config/SwitcherTargets/language\:{\title\:\$:/config/SwitcherTargets/language\,\text\:\$:/snippets/languageswitcher\},\$:/config/SwitcherTargets/palette\:{\title\:\$:/config/SwitcherTargets/palette\,\text\:\$:/core/ui/ControlPanel/Palette\},\$:/config/SwitcherTargets/theme\:{\title\:\$:/config/SwitcherTargets/theme\,\text\:\$:/core/ui/ControlPanel/Theme\},\$:/config/SyncFilter\:{\title\:\$:/config/SyncFilter\,\text\:\istiddler -$:/core -$:/library/sjcl.js -prefix$:/boot/ -prefix$:/HistoryList -statuspendingplugin-typeimport -$:/isEncrypted -prefix$:/status/ -prefix$:/state/ -prefix$:/temp/\\n\},\$:/config/SyncSystemTiddlersFromServer\:{\title\:\$:/config/SyncSystemTiddlersFromServer\,\text\:\no\},\$:/core/config/TagPillDragFilter\:{\title\:\$:/core/config/TagPillDragFilter\,\text\:\allcurrenttagging +!isdraft\},\$:/config/Tags/MinLength\:{\title\:\$:/config/Tags/MinLength\,\text\:\0\},\$:/config/TextEditor/EditorHeight/Height\:{\title\:\$:/config/TextEditor/EditorHeight/Height\,\text\:\400px\},\$:/config/TextEditor/EditorHeight/Mode\:{\title\:\$:/config/TextEditor/EditorHeight/Mode\,\text\:\auto\},\$:/config/TiddlerColourFilters/color-field\:{\title\:\$:/config/TiddlerColourFilters/color-field\,\tags\:\$:/tags/TiddlerColourFilter\,\text\:\hascolorthen{!!color}\},\$:/config/TiddlerColourFilters/default\:{\title\:\$:/config/TiddlerColourFilters/default\,\tags\:\$:/tags/TiddlerColourFilter\,\text\:\$:/config/DefaultTiddlerColourhastextgettexttrim\},\$:/config/TiddlerIconFilters/icon-field\:{\title\:\$:/config/TiddlerIconFilters/icon-field\,\tags\:\$:/tags/TiddlerIconFilter\,\text\:\hasiconthen{!!icon}\},\$:/config/TiddlerIconFilters/default\:{\title\:\$:/config/TiddlerIconFilters/default\,\tags\:\$:/tags/TiddlerIconFilter\,\text\:\{$:/config/DefaultTiddlerIcon}hastext\},\$:/config/TiddlerInfo/Default\:{\title\:\$:/config/TiddlerInfo/Default\,\text\:\$:/core/ui/TiddlerInfo/Fields\},\$:/config/TiddlerInfo/Mode\:{\title\:\$:/config/TiddlerInfo/Mode\,\text\:\popup\},\$:/config/Tiddlers/TitleLinks\:{\title\:\$:/config/Tiddlers/TitleLinks\,\text\:\no\},\$:/config/Toolbar/ButtonClass\:{\title\:\$:/config/Toolbar/ButtonClass\,\text\:\tc-btn-invisible\},\$:/config/Toolbar/Icons\:{\title\:\$:/config/Toolbar/Icons\,\text\:\yes\},\$:/config/Toolbar/Text\:{\title\:\$:/config/Toolbar/Text\,\text\:\no\},\$:/config/ViewTemplateBodyFilters/testcase\:{\title\:\$:/config/ViewTemplateBodyFilters/testcase\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\tag$:/tags/wiki-test-spectypetext/vnd.tiddlywiki-multiple tag$:/tags/wiki-test-spec-failingtypetext/vnd.tiddlywiki-multiple :then$:/core/ui/TestCaseTemplate\},\$:/config/ViewTemplateBodyFilters/stylesheet\:{\title\:\$:/config/ViewTemplateBodyFilters/stylesheet\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\tag$:/tags/Stylesheetthen$:/core/ui/ViewTemplate/body/rendered-plain-text\},\$:/config/ViewTemplateBodyFilters/html\:{\title\:\$:/config/ViewTemplateBodyFilters/html\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\tag$:/tags/RawMarkupWikified tag$:/tags/RawMarkupWikified/TopHead tag$:/tags/RawMarkupWikified/TopBody tag$:/tags/RawMarkupWikified/BottomBody :then$:/core/ui/ViewTemplate/body/rendered-plain-text/html\},\$:/config/ViewTemplateBodyFilters/core-ui-tags\:{\title\:\$:/config/ViewTemplateBodyFilters/core-ui-tags\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\tag$:/tags/PageTemplate tag$:/tags/EditTemplate tag$:/tags/ViewTemplate tag$:/tags/KeyboardShortcut tag$:/tags/ImportPreview tag$:/tags/EditPreview tag$:/tags/EditorToolbar tag$:/EditorTools tag$:/tags/Actions tag$:/tags/ToolbarButtonStyle :then$:/core/ui/ViewTemplate/body/code\},\$:/config/ViewTemplateBodyFilters/system\:{\title\:\$:/config/ViewTemplateBodyFilters/system\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\prefix$:/boot/ prefix$:/core/macros prefix$:/core/save/ prefix$:/core/templates/ prefix$:/config/ prefix$:/core/config/ prefix$:/info/ prefix$:/language/ prefix$:/languages/ prefix$:/snippets/ prefix$:/info/ prefix$:/state/ prefix$:/status/ prefix$:/temp/ :and!isimage :then$:/core/ui/ViewTemplate/body/code\},\$:/config/ViewTemplateBodyFilters/code-body\:{\title\:\$:/config/ViewTemplateBodyFilters/code-body\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\field:code-bodyyesthen$:/core/ui/ViewTemplate/body/code\},\$:/config/ViewTemplateBodyFilters/import\:{\title\:\$:/config/ViewTemplateBodyFilters/import\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\field:plugin-typeimportthen$:/core/ui/ViewTemplate/body/import\},\$:/config/ViewTemplateBodyFilters/plugin\:{\title\:\$:/config/ViewTemplateBodyFilters/plugin\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\hasplugin-typethen$:/core/ui/ViewTemplate/body/plugin\},\$:/config/ViewTemplateBodyFilters/hide-body\:{\title\:\$:/config/ViewTemplateBodyFilters/hide-body\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\field:hide-bodyyesthen$:/core/ui/ViewTemplate/body/blank\},\$:/config/ViewTemplateBodyFilters/default\:{\title\:\$:/config/ViewTemplateBodyFilters/default\,\tags\:\$:/tags/ViewTemplateBodyFilter\,\text\:\$:/core/ui/ViewTemplate/body/default\},\$:/config/ViewTemplateSubtitleFilters/default\:{\title\:\$:/config/ViewTemplateSubtitleFilters/default\,\tags\:\$:/tags/ViewTemplateSubtitleFilter\,\text\:\$:/core/ui/ViewTemplate/subtitle/default\},\$:/config/ViewTemplateTagsFilters/default\:{\title\:\$:/config/ViewTemplateTagsFilters/default\,\tags\:\$:/tags/ViewTemplateTagsFilter\,\text\:\$:/core/ui/ViewTemplate/tags/default\},\$:/config/ViewTemplateTitleFilters/system\:{\title\:\$:/config/ViewTemplateTitleFilters/system\,\tags\:\$:/tags/ViewTemplateTitleFilter\,\text\:\prefix$:/then$:/core/ui/ViewTemplate/title/system\},\$:/config/ViewTemplateTitleFilters/default\:{\title\:\$:/config/ViewTemplateTitleFilters/default\,\tags\:\$:/tags/ViewTemplateTitleFilter\,\text\:\$:/core/ui/ViewTemplate/title/default\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions\,\text\:\show\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\,\text\:\hide\},\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others\:{\title\:\$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others\,\text\:\hide\},\$:/config/shortcuts-mac/bold\:{\title\:\$:/config/shortcuts-mac/bold\,\text\:\meta-B\},\$:/config/shortcuts-mac/italic\:{\title\:\$:/config/shortcuts-mac/italic\,\text\:\meta-I\},\$:/config/shortcuts-mac/underline\:{\title\:\$:/config/shortcuts-mac/underline\,\text\:\meta-U\},\$:/config/shortcuts-mac/new-image\:{\title\:\$:/config/shortcuts-mac/new-image\,\text\:\ctrl-I\},\$:/config/shortcuts-mac/new-journal\:{\title\:\$:/config/shortcuts-mac/new-journal\,\text\:\ctrl-J\},\$:/config/shortcuts-mac/new-tiddler\:{\title\:\$:/config/shortcuts-mac/new-tiddler\,\text\:\ctrl-N\},\$:/config/shortcuts-mac/refresh\:{\title\:\$:/config/shortcuts-mac/refresh\,\text\:\meta-R\},\$:/config/shortcuts-mac/save-wiki\:{\title\:\$:/config/shortcuts-mac/save-wiki\,\text\:\meta-S\},\$:/config/shortcuts-not-mac/bold\:{\title\:\$:/config/shortcuts-not-mac/bold\,\text\:\ctrl-B\},\$:/config/shortcuts-not-mac/italic\:{\title\:\$:/config/shortcuts-not-mac/italic\,\text\:\ctrl-I\},\$:/config/shortcuts-not-mac/underline\:{\title\:\$:/config/shortcuts-not-mac/underline\,\text\:\ctrl-U\},\$:/config/shortcuts-not-mac/new-image\:{\title\:\$:/config/shortcuts-not-mac/new-image\,\text\:\alt-I\},\$:/config/shortcuts-not-mac/new-journal\:{\title\:\$:/config/shortcuts-not-mac/new-journal\,\text\:\alt-J\},\$:/config/shortcuts-not-mac/new-tiddler\:{\title\:\$:/config/shortcuts-not-mac/new-tiddler\,\text\:\alt-N\},\$:/config/shortcuts-not-mac/refresh\:{\title\:\$:/config/shortcuts-not-mac/refresh\,\text\:\ctrl-R\},\$:/config/shortcuts/add-field\:{\title\:\$:/config/shortcuts/add-field\,\text\:\enter\},\$:/config/shortcuts/advanced-search\:{\title\:\$:/config/shortcuts/advanced-search\,\text\:\ctrl-shift-A\},\$:/config/shortcuts/advanced-search-sidebar\:{\title\:\$:/config/shortcuts/advanced-search-sidebar\,\text\:\alt-Enter\},\$:/config/shortcuts/cancel-edit-tiddler\:{\title\:\$:/config/shortcuts/cancel-edit-tiddler\,\text\:\escape\},\$:/config/shortcuts/change-sidebar-layout\:{\title\:\$:/config/shortcuts/change-sidebar-layout\,\text\:\shift-alt-Down\},\$:/config/shortcuts/delete-field\:{\title\:\$:/config/shortcuts/delete-field\,\text\:\shift-alt-D\},\$:/config/shortcuts/excise\:{\title\:\$:/config/shortcuts/excise\,\text\:\ctrl-E\},\$:/config/shortcuts/sidebar-search\:{\title\:\$:/config/shortcuts/sidebar-search\,\text\:\ctrl-shift-F\},\$:/config/shortcuts/heading-1\:{\title\:\$:/config/shortcuts/heading-1\,\text\:\ctrl-1\},\$:/config/shortcuts/heading-2\:{\title\:\$:/config/shortcuts/heading-2\,\text\:\ctrl-2\},\$:/config/shortcuts/heading-3\:{\title\:\$:/config/shortcuts/heading-3\,\text\:\ctrl-3\},\$:/config/shortcuts/heading-4\:{\title\:\$:/config/shortcuts/heading-4\,\text\:\ctrl-4\},\$:/config/shortcuts/heading-5\:{\title\:\$:/config/shortcuts/heading-5\,\text\:\ctrl-5\},\$:/config/shortcuts/heading-6\:{\title\:\$:/config/shortcuts/heading-6\,\text\:\ctrl-6\},\$:/config/shortcuts/input-accept\:{\title\:\$:/config/shortcuts/input-accept\,\text\:\Enter\},\$:/config/shortcuts/input-accept-variant\:{\title\:\$:/config/shortcuts/input-accept-variant\,\text\:\ctrl-Enter\},\$:/config/shortcuts/input-cancel\:{\title\:\$:/config/shortcuts/input-cancel\,\text\:\Escape\},\$:/config/shortcuts/input-down\:{\title\:\$:/config/shortcuts/input-down\,\text\:\Down\},\$:/config/shortcuts/input-tab-left\:{\title\:\$:/config/shortcuts/input-tab-left\,\text\:\alt-ctrl-Left\},\$:/config/shortcuts/input-tab-right\:{\title\:\$:/config/shortcuts/input-tab-right\,\text\:\alt-ctrl-Right\},\$:/config/shortcuts/input-up\:{\title\:\$:/config/shortcuts/input-up\,\text\:\Up\},\$:/config/shortcuts/layout-switcher\:{\title\:\$:/config/shortcuts/layout-switcher\,\text\:\ctrl-shift-L\},\$:/config/shortcuts/link\:{\title\:\$:/config/shortcuts/link\,\text\:\ctrl-L\},\$:/config/shortcuts/linkify\:{\title\:\$:/config/shortcuts/linkify\,\text\:\alt-shift-L\},\$:/config/shortcuts/list-bullet\:{\title\:\$:/config/shortcuts/list-bullet\,\text\:\ctrl-shift-L\},\$:/config/shortcuts/list-number\:{\title\:\$:/config/shortcuts/list-number\,\text\:\ctrl-shift-N\},\$:/config/shortcuts/mono-block\:{\title\:\$:/config/shortcuts/mono-block\,\text\:\ctrl-shift-M\},\$:/config/shortcuts/mono-line\:{\title\:\$:/config/shortcuts/mono-line\,\text\:\ctrl-M\},\$:/config/shortcuts/open-control-panel\:{\title\:\$:/config/shortcuts/open-control-panel\,\text\:\ctrl-alt-C\},\$:/config/shortcuts/picture\:{\title\:\$:/config/shortcuts/picture\,\text\:\ctrl-shift-I\},\$:/config/shortcuts/preview\:{\title\:\$:/config/shortcuts/preview\,\text\:\alt-P\},\$:/config/shortcuts/quote\:{\title\:\$:/config/shortcuts/quote\,\text\:\ctrl-Q\},\$:/config/shortcuts/save-tiddler\:{\title\:\$:/config/shortcuts/save-tiddler\,\text\:\ctrl+enter\},\$:/config/shortcuts/save-wiki\:{\title\:\$:/config/shortcuts/save-wiki\,\text\:\ctrl-S\},\$:/config/shortcuts/stamp\:{\title\:\$:/config/shortcuts/stamp\,\text\:\ctrl-S\},\$:/config/shortcuts/strikethrough\:{\title\:\$:/config/shortcuts/strikethrough\,\text\:\ctrl-T\},\$:/config/shortcuts/subscript\:{\title\:\$:/config/shortcuts/subscript\,\text\:\ctrl-shift-B\},\$:/config/shortcuts/superscript\:{\title\:\$:/config/shortcuts/superscript\,\text\:\ctrl-shift-P\},\$:/config/shortcuts/toggle-sidebar\:{\title\:\$:/config/shortcuts/toggle-sidebar\,\text\:\alt-shift-S\},\$:/config/shortcuts/transcludify\:{\title\:\$:/config/shortcuts/transcludify\,\text\:\alt-shift-T\},\$:/config/ui/EditTemplate\:{\title\:\$:/config/ui/EditTemplate\,\text\:\$:/core/ui/EditTemplate\},\$:/config/ui/ViewTemplate\:{\title\:\$:/config/ui/ViewTemplate\,\text\:\$:/core/ui/ViewTemplate\},\$:/config/WikiParserRules/Inline/wikilink\:{\title\:\$:/config/WikiParserRules/Inline/wikilink\,\text\:\disable\},\$:/snippets/currpalettepreview\:{\title\:\$:/snippets/currpalettepreview\,\text\:\\\\\define resolve-colour(macrocall)\\n\\\\import $:/core/macros/utils\\n\\\\whitespace trim\\n\u003C$wikify name\\\name\\\ text\\\\\\\\\$macrocall$\\\\\\\\\>\\n\u003C\u003Cname>>\\n\u003C/$wikify>\\n\\\\end\\n\\\\define swatchStyle()\\nbackground-color: $(swatchColour)$;\\n\\\\end\\n\\\\define swatch-inner()\\n\\\\whitespace trim\\n\u003C$set name\\\swatchColour\\\ value{{##$(colourResolved)$}}>\\n\u003C$list filter\\\\u003CswatchColour>!prefix\u003C\u003Ccolour !suffix>>\\\ variable\\\ignore\\\>\\n\u003Cdiv class\\\tc-swatch\\\ style\u003C\u003CswatchStyle>> title\u003C\u003CswatchTitle>>/>\\n \\n\u003C/$list>\\n\u003C$list filter\\\\u003CswatchColour>prefix\u003C\u003Ccolour suffix>>\\\ variable\\\ignore\\\>\\n\u003C$wikify name\\\colourResolved\\\ text\\\\u003C$macrocall $nameresolve-colour macrocall\u003C\u003CswatchColour>>/>\\\>\\n\u003C\u003Cswatch-inner>>\\n\u003C/$wikify>\\n\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\\\define swatch()\\n\\\\whitespace trim\\n\u003C$set name\\\swatchColour\\\ value{{##$(colour)$}}>\\n\u003C$set name\\\swatchTitle\\\ value\u003C\u003Ccolour>>>\\n\u003C$list filter\\\\u003CswatchColour>!prefix\u003C\u003Ccolour !suffix>>\\\ variable\\\ignore\\\>\\n\u003Cdiv class\\\tc-swatch\\\ style\u003C\u003CswatchStyle>> title\u003C\u003CswatchTitle>>/>\\n \\n\u003C/$list>\\n\u003C$list filter\\\\u003CswatchColour>prefix\u003C\u003Ccolour suffix>>\\\ variable\\\ignore\\\>\\n\u003C$wikify name\\\colourResolved\\\ text\\\\u003C$macrocall $nameresolve-colour macrocall\u003C\u003CswatchColour>>/>\\\>\\n\u003C\u003Cswatch-inner>>\\n\u003C/$wikify>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$set>\\n\\\\end\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-swatches-horiz\\\>\u003C$list filter\\\\\nforeground\\nbackground\\nmuted-foreground\\nprimary\\npage-background\\ntab-background\\ntiddler-info-background\\n\\\ variable\\\colour\\\>\u003C\u003Cswatch>>\u003C/$list>\u003C/div>\\n\},\$:/snippets/DebugStylesheets\:{\title\:\$:/snippets/DebugStylesheets\,\text\:\\\\\whitespace trim\\n\u003Cstyle>test{list-style:❌}\u003C/style>\\n\u003Cul>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Stylesheethasmodified\\\ counter\\\n\\\>\\n\u003Cstyle>{{!!text}}test\\\\u003C\u003Cn>>\\\{list-style:disc;}\u003C/style>\\n\u003Cli test\u003C\u003Cn>>>\u003C$link/>\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\},\$:/snippets/download-wiki-button\:{\title\:\$:/snippets/download-wiki-button\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Tools/Download/\\n\\\\whitespace trim\\n\u003C$button class\\\tc-btn-big-green\\\>\\n\u003C$action-sendmessage $message\\\tm-download-file\\\ $param\\\$:/core/save/all\\\ filename\\\index.html\\\/>\\n\u003C\u003Clingo Full/Caption>> {{$:/core/images/save-button-dynamic}}\\n\u003C/$button>\},\$:/language\:{\title\:\$:/language\,\text\:\$:/languages/en-GB\},\$:/snippets/languageswitcher\:{\title\:\$:/snippets/languageswitcher\,\text\:\\\\\whitespace trim\\n\u003C$linkcatcher to\\\$:/language\\\>\\n\u003Cdiv class\\\tc-chooser tc-language-chooser\\\>\\n\u003C$list filter\\\$:/languages/en-GB plugin-typelanguagesortdescription\\\>\\n\u003C$set name\\\cls\\\ filter\\\allcurrentfield:title{$:/language}\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\\n\u003Cdiv class\u003C\u003Ccls>> lang{{!!name}}>\\n\u003C$link>\\n\u003C$view field\\\description\\\>\\n\u003C$view field\\\name\\\>\\n\u003C$view field\\\title\\\/>\\n\u003C/$view>\\n\u003C/$view>\\n\u003C/$link>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$linkcatcher>\},\$:/core/macros/CSS\:{\title\:\$:/core/macros/CSS\,\tags\:\$:/tags/Macro\,\text\:\\u003C!-- Needs to stay that way for backwards compatibility. See GH issue: #8326 -->\\n\\\\define colour(name)\\n\\\\whitespace trim\\n\u003C$transclude tiddler{{$:/palette}} index\\\$name$\\\>\\n\\t\u003C$transclude tiddler\\\$:/palettes/Vanilla\\\ index\\\$name$\\\>\\n\\t\\t\u003C$transclude tiddler\\\$:/config/DefaultColourMappings/$name$\\\/>\\n\\t\u003C/$transclude>\\n\u003C/$transclude>\\n\\\\end\\n\\n\\\\define color(name) \u003C\u003Ccolour $name$>>\\n\\n\\\\define box-shadow(shadow)\\n``\\n-webkit-box-shadow: $shadow$;\\n\\t-moz-box-shadow: $shadow$;\\n\\t\\tbox-shadow: $shadow$;\\n``\\n\\\\end\\n\\n\\\\define filter(filter)\\n``\\n-webkit-filter: $filter$;\\n\\t-moz-filter: $filter$;\\n\\t\\tfilter: $filter$;\\n``\\n\\\\end\\n\\n\\\\define transition(transition)\\n``\\n-webkit-transition: $transition$;\\n\\t-moz-transition: $transition$;\\n\\t\\ttransition: $transition$;\\n``\\n\\\\end\\n\\n\\\\define transform-origin(origin)\\n``\\n-webkit-transform-origin: $origin$;\\n\\t-moz-transform-origin: $origin$;\\n\\t\\ttransform-origin: $origin$;\\n``\\n\\\\end\\n\\n\\\\define background-linear-gradient(gradient)\\n``\\nbackground-image: linear-gradient($gradient$);\\nbackground-image: -o-linear-gradient($gradient$);\\nbackground-image: -moz-linear-gradient($gradient$);\\nbackground-image: -webkit-linear-gradient($gradient$);\\nbackground-image: -ms-linear-gradient($gradient$);\\n``\\n\\\\end\\n\\n\\\\define column-count(columns)\\n``\\n-moz-column-count: $columns$;\\n-webkit-column-count: $columns$;\\ncolumn-count: $columns$;\\n``\\n\\\\end\\n\\n\\\\procedure datauri(title)\\n\u003C$macrocall $name\\\makedatauri\\\ type{{{ \u003Ctitle>gettype }}} text{{{ \u003Ctitle>gettext }}} _canonical_uri{{{ \u003Ctitle>get_canonical_uri }}}/>\\n\\\\end\\n\\n\\\\procedure if-sidebar(text)\\n\u003C$reveal state\\\$:/state/sidebar\\\ type\\\match\\\ text\\\yes\\\ default\\\yes\\\>\u003C\u003Ctext>>\u003C/$reveal>\\n\\\\end\\n\\n\\\\procedure if-no-sidebar(text)\\n\u003C$reveal state\\\$:/state/sidebar\\\ type\\\nomatch\\\ text\\\yes\\\ default\\\yes\\\>\u003C\u003Ctext>>\u003C/$reveal>\\n\\\\end\\n\\n\\\\procedure if-background-attachment(text)\\n\u003C$reveal state\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\ type\\\nomatch\\\ text\\\\\\>\u003C\u003Ctext>>\u003C/$reveal>\\n\\\\end\\n\},\$:/core/macros/colour-picker\:{\title\:\$:/core/macros/colour-picker\,\tags\:\$:/tags/Macro\,\text\:\\\\\define colour-picker-update-recent()\\n\u003C$action-listops\\n\\t$tiddler\\\$:/config/ColourPicker/Recent\\\\\n\\t$subfilter\\\$(colour-picker-value)$ list$:/config/ColourPicker/Recentremove$(colour-picker-value)$ +limit8\\\\\n/>\\n\\\\end\\n\\n\\\\define colour-picker-inner(actions)\\n\u003C$button tag\\\a\\\ tooltip\\\\\\\\\$(colour-picker-value)$\\\\\\\\\>\\n$(colour-picker-update-recent)$\\n\u003C$transclude $variable\\\__actions__\\\/>\\n\\n\u003Cspan style\\\display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\\\/>\\n\\n\u003C/$button>\\n\\\\end\\n\\n\\\\define colour-picker-recent-inner(actions)\\n\\\\whitespace trim\\n\u003C$set name\\\colour-picker-value\\\ value\\\$(recentColour)$\\\>\\n\u003C$macrocall $name\\\colour-picker-inner\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define colour-picker-recent(actions)\\n\\\\whitespace trim\\n{{$:/language/ColourPicker/Recent}}\u003C$list filter\\\list$:/config/ColourPicker/Recent\\\ variable\\\recentColour\\\>\\n \\n\u003C$macrocall $name\\\colour-picker-recent-inner\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define colour-picker(actions)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-colour-chooser\\\>\\n\\n\u003C$macrocall $name\\\colour-picker-recent\\\ actions\u003C\u003C__actions__>>/>\\n\\n---\\n\\n\u003C$list filter\\\LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\\\ variable\\\colour-picker-value\\\>\\n \\n\u003C$macrocall $name\\\colour-picker-inner\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$list>\\n\\n---\\n\\n\u003C$edit-text tiddler\\\$:/config/ColourPicker/New\\\ tag\\\input\\\ default\\\\\\ placeholder\\\\\\/>\\n \\n\u003C$edit-text tiddler\\\$:/config/ColourPicker/New\\\ type\\\color\\\ tag\\\input\\\/>\\n\u003C$set name\\\colour-picker-value\\\ value{{$:/config/ColourPicker/New}}>\\n\u003C$macrocall $name\\\colour-picker-inner\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$set>\\n\\n\u003C/div>\\n\\n\\\\end\\n\},\$:/core/macros/copy-to-clipboard\:{\title\:\$:/core/macros/copy-to-clipboard\,\tags\:\$:/tags/Macro\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure copy-to-clipboard(src,class:\\\tc-btn-invisible\\\,style)\\n\u003C$button message\\\tm-copy-to-clipboard\\\\\n\\tparam\u003C\u003Csrc>>\\n\\tclass\u003C\u003Cclass>>\\n\\tstyle\u003C\u003Cstyle>>\\n\\ttooltip{{$:/language/Buttons/CopyToClipboard/Hint}}\\n>\\n\\t{{$:/core/images/copy-clipboard}}\\n\\t\u003Cspan class\\\tc-tiny-gap-left\\\>\\n\\t\\t\u003C$text text{{$:/language/Buttons/CopyToClipboard/Caption}}/>\\n\\t\u003C/span>\\n\u003C/$button>\\n\\\\end\\n\\n\\\\procedure copy-to-clipboard-above-right(src,class:\\\tc-btn-invisible\\\,style)\\n\u003Cdiv style\\\position: relative;\\\>\\n\\t\u003Cdiv style\\\position: absolute; bottom: 0; right: 0;\\\>\\n\\t\\t\u003C$macrocall $name\\\copy-to-clipboard\\\ src\u003C\u003Csrc>> class\u003C\u003Cclass>> style\u003C\u003Cstyle>>/>\\n\\t\u003C/div>\\n\u003C/div>\\n\\\\end\\n\},\$:/core/macros/diff\:{\title\:\$:/core/macros/diff\,\tags\:\$:/tags/Macro\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\\n\u003C$set name\\\source\\\ tiddler\u003C\u003CsourceTiddlerTitle>> subtiddler\u003C\u003CsourceSubTiddlerTitle>>>\\n\\t\u003C$set name\\\dest\\\ tiddler\u003C\u003CdestTiddlerTitle>> subtiddler\u003C\u003CdestSubTiddlerTitle>>>\\n\\t\\t\u003C$diff-text source\u003C\u003Csource>> dest\u003C\u003Cdest>>/>\\n\\t\u003C/$set>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\procedure compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\\n\u003Ctable class\\\tc-diff-tiddlers\\\>\\n\\t\u003Ctbody>\\n\\t\\t\u003C$set name\\\sourceFields\\\ filter\\\\u003CsourceTiddlerTitle>fieldssort\\\>\\n\\t\\t\\t\u003C$set name\\\destFields\\\ filter\\\\u003CdestSubTiddlerTitle>subtiddlerfields\u003CdestTiddlerTitle>sort\\\>\\n\\t\\t\\t\u003C$list filter\\\enlist\u003CsourceFields> enlist\u003CdestFields> -enlist\u003Cexclude> +sort\\\ variable\\\fieldName\\\>\\n\\t\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\\t\u003Cth>\\n\\t\\t\\t\\t\\t\\t\u003C$text text\u003C\u003CfieldName>>/>\\n\\t\\t\\t\\t\\t\u003C/th>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$set name\\\source\\\ tiddler\u003C\u003CsourceTiddlerTitle>> subtiddler\u003C\u003CsourceSubTiddlerTitle>> field\u003C\u003CfieldName>>>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$set name\\\dest\\\ tiddler\u003C\u003CdestTiddlerTitle>> subtiddler\u003C\u003CdestSubTiddlerTitle>> field\u003C\u003CfieldName>>>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C$diff-text source\u003C\u003Csource>> dest\u003C\u003Cdest>>> \u003C/$diff-text>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\u003C/tr>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$set>\\n\\t\\t\u003C/$set>\\n\\t\u003C/tbody>\\n\u003C/table>\\n\\\\end\\n\},\$:/core/macros/dumpvariables\:{\title\:\$:/core/macros/dumpvariables\,\tags\:\$:/tags/Macro\,\text\:\\\\\define dumpvariables()\\n\\\\whitespace trim\\n\u003Cul>\\n\u003C$list filter\\\variables\\\ variable\\\varname\\\>\\n\u003Cli>\\n\u003Cstrong>\u003Ccode>\u003C$text text\u003C\u003Cvarname>>/>\u003C/code>\u003C/strong>:\u003Cbr/>\\n\u003C$codeblock code{{{ \u003Cvarname>getvariable }}}/>\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\\\\end\\n\},\$:/core/macros/export\:{\title\:\$:/core/macros/export\,\tags\:\$:/tags/Macro\,\text\:\\\\\function exportButtonFilename(baseFilename)\\n\u003CbaseFilename> \u003Cextension> +join\\n\\\\end\\n\\n\\\\procedure exportButton(exportFilter:\\\!issystemsorttitle\\\,lingoBase,baseFilename:\\\tiddlers\\\)\\n\\\\whitespace trim\\n\u003C$let hint{{{ \u003ClingoBase>addsuffixHintgettext }}}\\n\\tcaption{{{ \u003ClingoBase>addsuffixCaptiongettext }}}\\n>\\n\\t\u003Cspan class\\\tc-popup-keep\\\>\\n\\t\\t\u003C$button popup\u003C\u003Cqualify \\\$:/state/popup/export\\\>>\\n\\t\\t\\ttooltip\u003C\u003Chint>>\\n\\t\\t\\taria-label\u003C\u003Ccaption>>\\n\\t\\t\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n\\t\\t\\tselectedClass\\\tc-selected\\\\\n\\t\\t\\tdragFilter\u003C\u003CexportFilter>>\\n\\t\\t>\\n\\t\\t\\t\u003C%if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t\\t\\t{{$:/core/images/export-button}}\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\\t\u003C%if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-btn-text\\\>\u003C$text text\u003C\u003Ccaption>>/>\u003C/span>\\n\\t\\t\\t\u003C%endif%>\\n\\t\\t\u003C/$button>\\n\\t\u003C/span>\\n\u003C/$let>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/popup/export\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\\t\u003Cdiv class\\\tc-drop-down\\\>\\n\\t\\t\u003C$set name\\\count\\\ value{{{ subfilter\u003CexportFilter>count }}}>\\n\\t\\t\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Exporter\\\>\\n\\t\\t\\t\\t\u003C$list filter\\\\u003CcurrentTiddler>hasconditionsubfilter{!!condition}limit1 ~\u003CcurrentTiddler>!hasconditionthentrue\\\\\n\\t\\t\\t\\t\\tvariable\\\ignore\\\\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003C$button class\\\tc-btn-invisible\\\>\\n\\t\\t\\t\\t\\t\\t\u003C$action-sendmessage $message\\\tm-download-file\\\\\n\\t\\t\\t\\t\\t\\t\\t$param\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t\\t\\t\\t\\texportFilter\u003C\u003CexportFilter>>\\n\\t\\t\\t\\t\\t\\t\\tfilename{{{ \u003CbaseFilename>addsuffix{!!extension} }}}\\n\\t\\t\\t\\t\\t\\t\\ttype{{!!file-type}}\\n\\t\\t\\t\\t\\t\\t/>\\n\\t\\t\\t\\t\\t\\t\u003C$action-deletetiddler $tiddler\u003C\u003Cqualify \\\$:/state/popup/export\\\>>/>\\n\\t\\t\\t\\t\\t\\t\u003C$transclude field\\\description\\\/>\\n\\t\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$set>\\n\\t\u003C/div>\\n\u003C/$reveal>\\n\\\\end\\n\},\$:/core/macros/image-picker\:{\title\:\$:/core/macros/image-picker\,\created\:\20170715180840889\,\modified\:\20170715180914005\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define image-picker-thumbnail(actions)\\n\u003C$button tag\\\a\\\ tooltip\\\\\\\\\$(imageTitle)$\\\\\\\\\>\u003C$transclude $variable\\\__actions__\\\/>\u003C$transclude tiddler\u003C\u003CimageTitle>>/>\u003C/$button>\\n\\\\end\\n\\n\\\\define image-picker-list(filter,actions)\\n\\\\whitespace trim\\n\u003C$list filter\\\\\\\\\$filter$\\\\\\\\\ variable\\\imageTitle\\\>\\n\u003C$macrocall $name\\\image-picker-thumbnail\\\ actions\u003C\u003C__actions__>>/>\\n \\n\u003C/$list>\\n\\\\end\\n\\n\\\\define image-picker(actions,filter:\\\allshadows+tiddlersisimage -typeapplication/pdf +!hasdraft.of$subfilter$sorttitle\\\,subfilter:\\\\\\)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-image-chooser\\\>\\n\u003C$vars state-system\u003C\u003Cqualify \\\$:/state/image-picker/system\\\>>>\\n\u003C$checkbox tiddler\u003C\u003Cstate-system>> field\\\text\\\ checked\\\show\\\ unchecked\\\hide\\\ default\\\hide\\\>\\n \\n{{$:/language/SystemTiddlers/Include/Prompt}}\\n\u003C/$checkbox>\\n\u003C$reveal state\u003C\u003Cstate-system>> type\\\match\\\ text\\\hide\\\ default\\\hide\\\ tag\\\div\\\>\\n\u003C$macrocall $name\\\image-picker-list\\\ filter\\\\\\\\\$filter$ +!issystem\\\\\\\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$reveal>\\n\u003C$reveal state\u003C\u003Cstate-system>> type\\\nomatch\\\ text\\\hide\\\ default\\\hide\\\ tag\\\div\\\>\\n\u003C$macrocall $name\\\image-picker-list\\\ filter\\\\\\\\\$filter$\\\\\\\\\ actions\u003C\u003C__actions__>>/>\\n\u003C/$reveal>\\n\u003C/$vars>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define image-picker-include-tagged-images(actions)\\n\u003C$macrocall $name\\\image-picker\\\ filter\\\allshadows+tiddlersisimage allshadows+tiddlerstag$:/tags/Image -typeapplication/pdf +!hasdraft.ofsorttitle\\\ actions\u003C\u003C__actions__>>/>\\n\\\\end\\n\},\$:/core/macros/keyboard-driven-input\:{\title\:\$:/core/macros/keyboard-driven-input\,\tags\:\$:/tags/Macro\,\text\:\\\\\procedure prefix.bracket() \\n\\\\procedure suffix.bracket() \\n\\n\\\\function tf.change-input-tab.next-tab() alladdprefix\u003Cprefix.bracket>addsuffix\u003Cprefix.bracket>addsuffixshadows+tiddlersaddsuffix\u003Csuffix.bracket>addsuffixtag\u003Ctag>!hasaddsuffix\u003Cprefix.bracket>addsuffixdraft.ofaddsuffix\u003Csuffix.bracket>addsuffix\u003Cbeforeafter>addsuffix\u003CcurrentState>addsuffix\u003Csuffix.bracket>addsuffix :elseaddsuffix\u003Cprefix.bracket>addsuffix\u003Cprefix.bracket>addsuffix\u003Cbeforeafter>addsuffix\u003Csuffix.bracket>addsuffixmatchaddsuffix\u003Cprefix.bracket>addsuffixafteraddsuffix\u003Csuffix.bracket>addsuffixthen\u003CfirstTab>addsuffix\u003Csuffix.bracket>addsuffix :elseaddsuffix\u003Cprefix.bracket>addsuffix\u003Cprefix.bracket>addsuffix\u003Cbeforeafter>addsuffix\u003Csuffix.bracket>addsuffixmatchaddsuffix\u003Cprefix.bracket>addsuffixbeforeaddsuffix\u003Csuffix.bracket>addsuffixthen\u003ClastTab>addsuffix\u003Csuffix.bracket>\\n\\n\\\\procedure change-input-tab(stateTitle,tag,beforeafter,defaultState,actions)\\n\\\\whitespace trim\\n\u003C$set name\\\tabsList\\\ filter\\\\u003CexplicitTabList>!isblankenlist-input :elseallshadows+tiddlerstag\u003Ctag>!hasdraft.of\\\>\\n\\t\u003C$let\\n\\t\\tcurrentState{{{ \u003CstateTitle>!ismissinggettext :else\u003CdefaultState> }}}\\n\\t\\tfirstTab{{{ enlist\u003CtabsList>nth1 }}}\\n\\t\\tlastTab{{{ enlist\u003CtabsList>last }}}\\n\\t\\tnextTabSubFilter\u003C\u003Ctf.change-input-tab.next-tab>>\\n\\t\\tnextTab{{{ subfilter\u003CnextTabSubFilter> }}}\\n\\t>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003CstateTitle>> text\u003C\u003CnextTab>>/>\\n\\t\\t\u003C\u003Cactions>>\\n\\t\u003C/$let>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\procedure keyboard-input-actions()\\n\\\\whitespace trim\\n\u003C%if \u003Cindex>match %>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CstoreTitle>> text{{{ \u003Ctiddler>get\u003Cfield> }}}/>\\n\u003C% endif %>\\n\u003C%if \u003Cindex>!match %>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CstoreTitle>> text{{{ \u003Ctiddler>getindex\u003Cindex> }}}/>\\n\u003C% endif %>\\n\\\\end\\n\\n\\\\procedure input-next-actions-inner()\\n\\\\whitespace trim\\n\u003C%if \u003CnextItem>minlength1 %>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CselectionStateTitle>> text\u003C\u003CnextItem>>/>\\n\\t\u003C%if \u003Cindex>match %>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003Ctiddler>> $field\u003C\u003Cfield>> $value{{{ \u003CnextItem> :andsplitregexp(?:.(?!-))+$ }}}/>\\n\\t\u003C% endif %>\\n\\t\u003C%if \u003Cindex>!match %>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003Ctiddler>> $index\u003C\u003Cindex>> $value{{{ \u003CnextItem> :andsplitregexp(?:.(?!-))+$ }}}/>\\n\\t\u003C% endif %>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\\n\u003C% endif %>\\n\\\\end\\n\\n\\\\procedure input-next-actions-after()\\n\\\\whitespace trim\\n\u003C%if \u003CstoreTitle>gettextminlength\u003CfilterMinLength> \u003CfilterMinLength>match0 %>\\n\\t\u003C$let\\n\\t\\tuserInput{{{ \u003CstoreTitle>gettext }}}\\n\\t\\tselectedItem{{{ \u003CselectionStateTitle>gettext }}}\\n\\t\\tconfigTiddler{{{ subfilter\u003CconfigTiddlerFilter> }}}\\n\\t\\tprimaryListFilter{{{ \u003CconfigTiddler>get\u003CfirstSearchFilterField> }}}\\n\\t\\tsecondaryListFilter{{{ \u003CconfigTiddler>get\u003CsecondSearchFilterField> }}}\\n\\t>\\n\\t\\t\u003C$set\\n\\t\\t\\tname\\\filteredList\\\\\n\\t\\t\\tfilter\\\subfilter\u003CprimaryListFilter>addsuffix-primaryList :allsubfilter\u003CsecondaryListFilter>addsuffix-secondaryList\\\\\n\\t\\t>\\n\\t\\t\\t\u003C$let\\n\\t\\t\\t\\tnextItem{{{ enlist\u003CfilteredList>after\u003CselectedItem> :elseenlist\u003CfilteredList>nth1 }}}\\n\\t\\t\\t\\tfirstItem{{{ enlist\u003CfilteredList>nth1 }}}\\n\\t\\t\\t\\tlastItem{{{ enlist\u003CfilteredList>last }}}\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C%if \u003CselectedItem>match\u003CfirstItem>!match\u003ClastItem> \u003CselectedItem>!match\u003CfirstItem>!match\u003ClastItem> %>\\n\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\u003C%elseif \u003CselectedItem>match\u003ClastItem>!match\u003CfirstItem> %>\\n\\t\\t\\t\\t\\t\u003C$set name\\\nextItem\\\ value{{{ \u003CuserInput>addsuffix-userInput }}}>\\n\\t\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C%elseif \u003CselectedItem>match\u003CfirstItem>match\u003ClastItem> %>\\n\\t\\t\\t\\t\\t\u003C$set name\\\nextItem\\\ value{{{ \u003CuserInput>addsuffix-userInput }}}>\\n\\t\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/$set>\\n\\t\u003C/$let>\\n\u003C% endif %>\\n\\\\end\\n\\n\\\\procedure input-next-actions-before()\\n\\\\whitespace trim\\n\u003C%if \u003CstoreTitle>gettextminlength\u003CfilterMinLength> \u003CfilterMinLength>match0 %>\\n\\t\u003C$let\\n\\t\\tuserInput{{{ \u003CstoreTitle>gettext }}}\\n\\t\\tselectedItem{{{ \u003CselectionStateTitle>gettext }}}\\n\\t\\tconfigTiddler{{{ subfilter\u003CconfigTiddlerFilter> }}}\\n\\t\\tprimaryListFilter{{{ \u003CconfigTiddler>get\u003CfirstSearchFilterField> }}}\\n\\t\\tsecondaryListFilter{{{ \u003CconfigTiddler>get\u003CsecondSearchFilterField> }}}\\n\\t>\\n\\t\\t\u003C$set\\n\\t\\t\\tname\\\filteredList\\\\\n\\t\\t\\tfilter\\\subfilter\u003CprimaryListFilter>addsuffix-primaryList :allsubfilter\u003CsecondaryListFilter>addsuffix-secondaryList\\\\\n\\t\\t>\\n\\t\\t\\t\u003C$let\\n\\t\\t\\t\\tnextItem{{{ enlist\u003CfilteredList>before\u003CselectedItem> :elseenlist\u003CfilteredList>reversenth1 }}}\\n\\t\\t\\t\\tfirstItem{{{ enlist\u003CfilteredList>nth1 }}}\\n\\t\\t\\t\\tlastItem{{{ enlist\u003CfilteredList>last }}}\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C%if \u003CselectedItem>match\u003CfirstItem>!match\u003ClastItem> %>\\n\\t\\t\\t\\t\\t\u003C$set name\\\nextItem\\\ value{{{ \u003CuserInput>addsuffix-userInput }}}>\\n\\t\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C%elseif \u003CselectedItem>match\u003ClastItem>!match\u003CfirstItem> \u003CselectedItem>!match\u003CfirstItem>!match\u003ClastItem> %>\\n\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\u003C%elseif \u003CselectedItem>match\u003CfirstItem>match\u003ClastItem> %>\\n\\t\\t\\t\\t\\t\u003C$set name\\\nextItem\\\ value{{{ \u003CuserInput>addsuffix-userInput }}}>\\n\\t\\t\\t\\t\\t\\t\u003C\u003Cinput-next-actions-inner>>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/$set>\\n\\t\u003C/$let>\\n\u003C% endif %>\\n\\\\end\\n\\n\\\\procedure keyboard-driven-input(tiddler,storeTitle,field:\\\text\\\,index:\\\\\\,tag:\\\input\\\,type,focus:\\\\\\,inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:\\\\\\,default:\\\\\\,class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:\\\0\\\,refreshTitle,selectionStateTitle,cancelPopups:\\\\\\,configTiddlerFilter,firstSearchFilterField:\\\first-search-filter\\\,secondSearchFilterField:\\\second-search-filter\\\)\\n\\\\whitespace trim\\n\u003C$keyboard key\\\((input-accept))\\\ actions\u003C\u003CinputAcceptActions>>>\\n\u003C$keyboard key\\\((input-accept-variant))\\\ actions\u003C\u003CinputAcceptVariantActions>>>\\n\u003C$keyboard key\\\((input-up))\\\ actions\u003C\u003Cinput-next-actions-before>>>\\n\u003C$keyboard key\\\((input-down))\\\ actions\u003C\u003Cinput-next-actions-after>>>\\n\u003C$keyboard key\\\((input-cancel))\\\ actions\u003C\u003CinputCancelActions>>>\\n\\t\u003C$edit-text\\n\\t\\ttiddler\u003C\u003Ctiddler>> field\u003C\u003Cfield>> index\u003C\u003Cindex>>\\n\\t\\tinputActions\u003C\u003Ckeyboard-input-actions>> tag\u003C\u003Ctag>> class\u003C\u003Cclass>>\\n\\t\\tplaceholder\u003C\u003Cplaceholder>> default\u003C\u003Cdefault>> focusPopup\u003C\u003CfocusPopup>>\\n\\t\\tfocus\u003C\u003Cfocus>> type\u003C\u003Ctype>> rows\u003C\u003Crows>> minHeight\u003C\u003CminHeight>>\\n\\t\\ttabindex\u003C\u003Ctabindex>> size\u003C\u003Csize>> autoHeight\u003C\u003CautoHeight>>\\n\\t\\trefreshTitle\u003C\u003CrefreshTitle>> cancelPopups\u003C\u003CcancelPopups>>\\n\\t/>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\u003C/$keyboard>\\n\\\\end\\n\},\$:/core/macros/lingo\:{\title\:\$:/core/macros/lingo\,\tags\:\$:/tags/Macro\,\text\:\\\\\define lingo-base()\\n$:/language/\\n\\\\end\\n\\n\\\\define lingo(title)\\n{{$(lingo-base)$$title$}}\\n\\\\end\\n\},\$:/core/macros/list\:{\title\:\$:/core/macros/list\,\tags\:\$:/tags/Macro\,\text\:\\\\\define list-links(filter,type:\\\ul\\\,subtype:\\\li\\\,class:\\\\\\,emptyMessage,field:\\\caption\\\)\\n\\\\whitespace trim\\n\u003C$genesis $type\u003C\u003C__type__>> class\u003C\u003C__class__>>>\\n\\t\u003C$list filter\u003C\u003C__filter__>> emptyMessage\u003C\u003C__emptyMessage__>>>\\n\\t\\t\u003C$genesis $type\u003C\u003C__subtype__>>>\\n\\t\\t\\t\u003C$link to{{!!title}}>\\n\\t\\t\\t\\t\u003C$let tv-wikilinks\\\no\\\>\\n\\t\\t\\t\\t\\t\u003C$transclude field\u003C\u003C__field__>>>\\n\\t\\t\\t\\t\\t\\t\u003C$view field\\\title\\\/>\\n\\t\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\\t\u003C/$let>\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/$genesis>\\n\\t\u003C/$list>\\n\u003C/$genesis>\\n\\\\end\\n\\n\\\\define list-links-draggable-drop-actions()\\n\u003C$action-listops $tiddler\u003C\u003CtargetTiddler>> $field\u003C\u003CtargetField>> $subfilter\\\+insertbefore\u003CactionTiddler>,\u003CcurrentTiddler>\\\/>\\n\\\\end\\n\\n\\\\define list-links-draggable(tiddler,field:\\\list\\\,emptyMessage,type:\\\ul\\\,subtype:\\\li\\\,class:\\\\\\,itemTemplate)\\n\\\\whitespace trim\\n\u003Cspan class\\\tc-links-draggable-list\\\>\\n\\t\u003C$vars targetTiddler\\\\\\\\\$tiddler$\\\\\\\\\ targetField\\\\\\\\\$field$\\\\\\\\\>\\n\\t\\t\u003C$genesis $type\u003C\u003C__type__>> class\\\$class$\\\>\\n\\t\\t\\t\u003C$list filter\\\list$tiddler$!!$field$\\\ emptyMessage\u003C\u003C__emptyMessage__>>>\\n\\t\\t\\t\\t\u003C$droppable\\n\\t\\t\\t\\t\\tactions\u003C\u003Clist-links-draggable-drop-actions>>\\n\\t\\t\\t\\t\\ttag\\\\\\\\\$subtype$\\\\\\\\\\\n\\t\\t\\t\\t\\tenable\u003C\u003Ctv-enable-drag-and-drop>>\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003Cdiv class\\\tc-droppable-placeholder\\\/>\\n\\t\\t\\t\\t\\t\u003Cdiv>\\n\\t\\t\\t\\t\\t\\t\u003C$transclude tiddler\\\\\\\\\$itemTemplate$\\\\\\\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$link to{{!!title}}>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C$let tv-wikilinks\\\no\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\u003C$transclude field\\\caption\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\u003C$view field\\\title\\\/>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C/$let>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$link>\\n\\t\\t\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\u003C/$droppable>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C$tiddler tiddler\\\\\\>\\n\\t\\t\\t\\t\u003C$droppable\\n\\t\\t\\t\\t\\tactions\u003C\u003Clist-links-draggable-drop-actions>> \\n\\t\\t\\t\\t\\ttag\\\div\\\\\n\\t\\t\\t\\t\\tenable\u003C\u003Ctv-enable-drag-and-drop>>\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003Cdiv class\\\tc-droppable-placeholder\\\>\\n\\t\\t\\t\\t\\t\\t{{$:/core/images/blank}}\\n\\t\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\\t\u003Cdiv style\\\height:0.5em;\\\/>\\n\\t\\t\\t\\t\u003C/$droppable>\\n\\t\\t\\t\u003C/$tiddler>\\n\\t\\t\u003C/$genesis>\\n\\t\u003C/$vars>\\n\u003C/span>\\n\\\\end\\n\\n\\\\define list-tagged-draggable-drop-actions(tag)\\n\\\\whitespace trim\\n\u003C!-- Save the current ordering of the tiddlers with this tag -->\\n\u003C$set name\\\order\\\ filter\\\\u003C__tag__>tagging\\\>\\n\\t\u003C!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\\n\\t\u003C$list filter\\\\u003C__tag__>tagging\\\>\\n\\t\\t\u003C$action-deletefield $field\\\list-before\\\/>\\n\\t\\t\u003C$action-deletefield $field\\\list-after\\\/>\\n\\t\u003C/$list>\\n\\t\u003C!-- Save the new order to the Tag Tiddler -->\\n\\t\u003C$action-listops $tiddler\u003C\u003C__tag__>> $field\\\list\\\ $filter\\\+enlist\u003Corder> +insertbefore\u003CactionTiddler>,\u003CcurrentTiddler>\\\/>\\n\\t\u003C!-- Make sure the newly added item has the right tag -->\\n\\t\u003C!-- Removing this line makes dragging tags within the dropdown work as intended -->\\n\\t\u003C!--\u003C$action-listops $tiddler\u003C\u003CactionTiddler>> $tags\u003C\u003C__tag__>>/>-->\\n\\t\u003C!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\\n\\t\u003C$list filter\\\\u003CactionTiddler>!contains:tags\u003C__tag__>\\\>\\n\\t\\t\u003C$fieldmangler tiddler\u003C\u003CactionTiddler>>>\\n\\t\\t\\t\u003C$action-sendmessage $message\\\tm-add-tag\\\ $param\u003C\u003C__tag__>>/>\\n\\t\\t\u003C/$fieldmangler>\\n\\t\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\\\div\\\,storyview:\\\\\\)\\n\\\\whitespace trim\\n\u003Cspan class\\\tc-tagged-draggable-list\\\>\\n\\t\u003C$set name\\\tag\\\ value\u003C\u003C__tag__>>>\\n\\t\\t\u003C$list\\n\\t\\t\\tfilter\\\\u003C__tag__>tagging$subFilter$\\\\\n\\t\\t\\temptyMessage\u003C\u003C__emptyMessage__>>\\n\\t\\t\\tstoryview\u003C\u003C__storyview__>>\\n\\t\\t>\\n\\t\\t\\t\u003C$genesis $type\u003C\u003C__elementTag__>> class\\\tc-menu-list-item\\\>\\n\\t\\t\\t\\t\u003C$droppable\\n\\t\\t\\t\\t\\tactions\\\\\\\\\\u003C$macrocall $name\\\list-tagged-draggable-drop-actions\\\ tag\u003C\u003C__tag__>>/>\\\\\\\\\\\n\\t\\t\\t\\t\\tenable\u003C\u003Ctv-enable-drag-and-drop>>\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003C$genesis $type\u003C\u003C__elementTag__>> class\\\tc-droppable-placeholder\\\/>\\n\\t\\t\\t\\t\\t\u003C$genesis $type\u003C\u003C__elementTag__>>>\\n\\t\\t\\t\\t\\t\\t\u003C$transclude tiddler\\\\\\\\\$itemTemplate$\\\\\\\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$link to{{!!title}}>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C$view field\\\title\\\/>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$link>\\n\\t\\t\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\\t\\t\u003C/$genesis>\\n\\t\\t\\t\\t\u003C/$droppable>\\n\\t\\t\\t\u003C/$genesis>\\n\\t\\t\u003C/$list>\\n\\t\\t\u003C$tiddler tiddler\\\\\\>\\n\\t\\t\\t\u003C$droppable\\n\\t\\t\\t\\tactions\\\\\\\\\\u003C$macrocall $name\\\list-tagged-draggable-drop-actions\\\ tag\u003C\u003C__tag__>>/>\\\\\\\\\\\n\\t\\t\\t\\tenable\u003C\u003Ctv-enable-drag-and-drop>>\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003C$genesis $type\u003C\u003C__elementTag__>> class\\\tc-droppable-placeholder\\\/>\\n\\t\\t\\t\\t\u003C$genesis $type\u003C\u003C__elementTag__>> style\\\height:0.5em;\\\/>\\n\\t\\t\\t\u003C/$droppable>\\n\\t\\t\u003C/$tiddler>\\n\\t\u003C/$set>\\n\u003C/span>\\n\\\\end\\n\},\$:/core/macros/show-filter-count\:{\title\:\$:/core/macros/show-filter-count\,\tags\:\$:/tags/Macro\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure show-filter-count(filter)\\n\u003C$button class\\\tc-btn-invisible\\\>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch\\\ $value\u003C\u003Cfilter>>/>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/input\\\ $value\u003C\u003Cfilter>>/>\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/advancedsearch/refresh\\\ text\\\yes\\\/>\\n\\t\u003C$action-setfield $tiddler\\\$:/state/tab--1498284803\\\ $value\\\$:/core/ui/AdvancedSearch/Filter\\\/>\\n\\t\u003C$action-navigate $to\\\$:/AdvancedSearch\\\/>\\n\\t\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\\\.tc-advanced-search input\\\/>\\n\\t\u003Cspan class\\\tc-small-gap-right\\\>\u003C$count filter\u003C\u003Cfilter>>/>\u003C/span>\\n\\t{{$:/core/images/advanced-search-button}}\\n\u003C/$button>\\n\\\\end\},\$:/core/macros/tabs\:{\title\:\$:/core/macros/tabs\,\tags\:\$:/tags/Macro\,\code-body\:\yes\,\text\:\\\\\define tabs-button()\\n\\\\whitespace trim\\n\u003C$button\\n\\tset\u003C\u003CtabsState>>\\n\\tsetTo\u003C\u003CcurrentTab>>\\n\\tdefault\u003C\u003C__default__>>\\n\\tselectedClass\\\tc-tab-selected\\\\\n\\ttooltip{{!!tooltip}}\\n\\trole\\\switch\\\\\n\\tdata-tab-title\u003C\u003CcurrentTab>>\\n>\\n\\t\u003C$tiddler tiddler\u003C\u003Csave-currentTiddler>>>\\n\\t\\t\u003C$set name\\\tv-wikilinks\\\ value\\\no\\\>\\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003C__buttonTemplate__>> mode\\\inline\\\>\\n\\t\\t\\t\\t\u003C$transclude tiddler\u003C\u003CcurrentTab>> field\\\caption\\\>\\n\\t\\t\\t\\t\\t\u003C$macrocall $name\\\currentTab\\\ $type\\\text/plain\\\ $output\\\text/plain\\\/>\\n\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\u003C/$transclude>\\n\\t\\t\u003C/$set>\\n\\t\u003C/$tiddler>\\n\\t\u003C\u003C__actions__>>\\n\u003C/$button>\\n\\\\end\\n\\n\\\\define tabs-tab()\\n\\\\whitespace trim\\n\u003C$set name\\\save-currentTiddler\\\ value\u003C\u003CcurrentTiddler>>>\\n\\t\u003C$tiddler tiddler\u003C\u003CcurrentTab>>>\\n\\t\\t\u003C\u003Ctabs-button>>\\n\\t\u003C/$tiddler>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define tabs-tab-list()\\n\\\\whitespace trim\\n\u003C$list filter\u003C\u003C__tabsList__>> variable\\\currentTab\\\ storyview\\\pop\\\>\\n\\t\u003C\u003Ctabs-tab>>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define tabs-tab-body()\\n\\\\whitespace trim\\n\u003C$list filter\u003C\u003C__tabsList__>> variable\\\currentTab\\\>\\n\\t\u003C$reveal type\\\match\\\ state\u003C\u003CtabsState>> text\u003C\u003CcurrentTab>> default\u003C\u003C__default__>> retain\u003C\u003C__retain__>> tag\\\div\\\>\\n\\t\\t\u003C$transclude tiddler\u003C\u003C__template__>> mode\\\block\\\>\\n\\t\\t\\t\u003C$transclude tiddler\u003C\u003CcurrentTab>> mode\\\block\\\/>\\n\\t\\t\u003C/$transclude>\\n\\t\u003C/$reveal>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define tabs(tabsList,default,state:\\\$:/state/tab\\\,class,template,buttonTemplate,retain,actions,explicitState)\\n\\\\whitespace trim\\n\u003C$qualify title\u003C\u003C__state__>> name\\\qualifiedState\\\>\\n\\t\u003C$let tabsState{{{ \u003C__explicitState__>minlength1 ~\u003CqualifiedState> }}}>\\n\\t\\t\u003Cdiv class{{{ tc-tab-setaddsuffix addsuffix\u003C__class__> }}}>\\n\\t\\t\\t\u003Cdiv class{{{ tc-tab-buttonsaddsuffix addsuffix\u003C__class__> }}}>\\n\\t\\t\\t\\t\u003C\u003Ctabs-tab-list>>\\n\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003Cdiv class{{{ tc-tab-divideraddsuffix addsuffix\u003C__class__> }}}/>\\n\\t\\t\\t\u003Cdiv class{{{ tc-tab-contentaddsuffix addsuffix\u003C__class__> }}}>\\n\\t\\t\\t\\t\u003C\u003Ctabs-tab-body>>\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C/$let>\\n\u003C/$qualify>\\n\\\\end\},\$:/core/macros/tag-picker\:{\title\:\$:/core/macros/tag-picker\,\tags\:\$:/tags/Macro\,\first-search-filter\:\subfilter\u003CtagListFilter>!issystemsearch:title\u003CuserInput>\,\second-search-filter\:\subfilter\u003CtagListFilter>issystemsearch:title\u003CuserInput>\,\text\:\\u003C!--\\n\\tFields: \\\first-search-filter\\\, \\\second-search-filter\\\ are assigned to the keyboard-driven input macro with parameter: \\\configTiddlerFilter\\\\\n\\tThey __need to be the same__ as used for variables: \\\nonSystemTagsFilter\\\ and \\\systemTagsFilter\\\. See code below!\\n-->\\n\\n\\\\whitespace trim\\n\\n\u003C!-- tf.tagpicker-dropdown-id is needed if several tap-pickers are shown in one tiddler -->\\n\\\\function tf.tagpicker-dropdown-id()\\n\\t\u003Cqualify $:/state/popup/tags-auto-complete>\\n\\t$(saveTiddler)$-$(tagField)$-$(tagListFilter)$substitutesha256 :andjoin/\\n\\\\end\\n\\n\\\\function tf.tagpicker-dropdown-class() \u003Ctf.tagpicker-dropdown-id>sha256addprefixtc-\\n\\\\function tf.get-tagpicker-focus-selector() \u003Ctf.tagpicker-dropdown-class>addprefix. .tc-popup-handle :andjoin \\n\\n\u003C!-- clean up temporary tiddlers, so the next \\\pick\\\ starts with a clean input -->\\n\u003C!-- This could probably be optimized / removed if we would use different temp-tiddlers\\n\\t(future improvement because keeping track is comlex for humans)\\n-->\\n\\\\procedure delete-tag-state-tiddlers()\\n\u003C$action-deletetiddler $filter\\\\u003CnewTagNameTiddler> \u003CstoreTitle> \u003CtagSelectionState>\\\/>\\n\\\\end\\n\\n\u003C!-- trigger __toggle tag__ by keyboard -->\\n\\\\procedure add-tag-actions()\\n\u003C$let tag\u003C\u003C_tf.getTag>> >\\n\\t\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter:andtoggle\u003Ctag>trim/>\\n\\t\u003C%if \u003Ctag> :intersection\u003CsaveTiddler>get\u003CtagField>enlist-input %>\\n\\t\\t\u003C!-- tag has been removed - do nothing -->\\n\\t\u003C%else%>\\n\\t\\t\u003C\u003Cactions>>\\n\\t\u003C%endif%>\\n\\t\u003C\u003Cdelete-tag-state-tiddlers>>\\n\\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\\n\u003C/$let>\\n\\\\end\\n\u003C!-- \u003C$action-log /> -->\\n\\n\u003C!-- ESC key removes the text from the input\\nThe second ESC tries to close the \\\draft tiddler\\\\\n-->\\n\\\\procedure clear-tags-actions-inner()\\n\u003C%if \u003CstoreTitle>hastext :else\u003CnewTagNameTiddler>hastext %>\\n\\t\u003C\u003Cdelete-tag-state-tiddlers>>\\n\u003C%else%>\\n\\t\\t\u003C\u003Ccancel-delete-tiddler-actions \\\cancel\\\>>\\n\u003C%endif%>\\n\\\\end\\n\\n\u003C!-- triggered by keyboard only -->\\n\\\\procedure clear-tags-actions()\\n\u003C$let userInput\u003C\u003C_tf.getUserInput>> >\\n\\t\u003C!-- this list __cannot__ be transformed to conditional IF. The list variable is used! -->\\n\\t\u003C$list filter\\\\u003CnewTagNameTiddler>gettext!match\u003CuserInput>\\\ >\\n\\t\\t\u003C$list-empty>\\n\\t\\t\\t\u003C\u003Cclear-tags-actions-inner>>\\n\\t\\t\u003C/$list-empty>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003CnewTagNameTiddler>> text\u003C\u003CuserInput>>/>\\n\\t\\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\\\yes\\\/>\\n\\t\u003C/$list>\\n\u003C/$let>\\n\\\\end\\n\\n\u003C!-- similar to add-tag-actions __but__ add-only -->\\n\\\\procedure add-button-actions()\\n\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter\\\\u003Ctag>trim\\\/>\\n\u003C\u003Cactions>>\\n\u003C\u003Cdelete-tag-state-tiddlers>>\\n\u003C$action-sendmessage $message\\\tm-focus-selector\\\ $param\u003C\u003Ctf.get-tagpicker-focus-selector>>/>\\n\\\\end\\n\u003C!-- \u003C$action-log /> -->\\n\\n\u003C!-- create dropdown list -->\\n\\\\procedure tag-picker-listTags(filter, suffix, empty)\\n\u003C$let userInput\u003C\u003C_tf.getUserInput>> >\\n\\t\u003C$list filter\\\\u003CuserInput>minlength{$:/config/Tags/MinLength}limit1\\\\\n\\t\\temptyMessage\\\\u003Cdiv classtc-search-results>{{$:/language/Search/Search/TooShort}}\u003C/div>\\\ variable\\\listItem\\\\\n\\t>\\n\\t\\t\u003C$list filter\u003C\u003Cfilter>> variable\\\tag\\\>\\n\\t\\t\\t\u003C$list-empty>\\n\\t\\t\\t\\t\u003Cspan class\\\tc-small-gap-left\\\>\u003C\u003Cempty>>\u003C/span>\\n\\t\\t\\t\u003C/$list-empty>\\n\\t\\t\\t\u003C!-- The buttonClasses filter is used to define tc-tag-button-selected state -->\\n\\t\\t\\t\u003C!-- tf.get-tagpicker-focus-selector has to be resolved for $:/core/ui/TagPickerTagTemplate,\\n\\t\\t\\t\\tothwerwise qualify in tf.tagpicker-dropdown-id causes problems -->\\n\\t\\t\\t\u003C$let currentTiddler\u003C\u003Ctag>>\\n\\t\\t\\t\\tbutton-classes`tc-btn-invisible ${\u003Ctag>addsuffix\u003Csuffix> :except\u003CtagSelectionState>gettext :then ~tc-tag-button-selected }$`\\n\\t\\t\\t\\tget-tagpicker-focus-selector`${\u003Ctf.get-tagpicker-focus-selector>}$`\\n\\t\\t\\t>\\n\\t\\t\\t\\t{{||$:/core/ui/TagPickerTagTemplate}}\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list>\\n\u003C/$let>\\n\\\\end\\n\\n\u003C!-- tag-picker-inner is the main function -->\\n\\\\procedure tag-picker-inner()\\n\u003Cdiv class{{{ tc-edit-add-tag \u003Ctf.tagpicker-dropdown-class> :andjoin }}}>\\n\\t\u003Cdiv class\\\tc-edit-add-tag-ui\\\>\\n\\t\\t\u003Cspan class\\\tc-add-tag-name tc-small-gap-right\\\>\\n\\t\\t\\t\u003C$transclude $variable\\\keyboard-driven-input\\\\\n\\t\\t\\t\\ttiddler\u003C\u003CnewTagNameTiddler>>\\n\\t\\t\\t\\tstoreTitle\u003C\u003CstoreTitle>>\\n\\t\\t\\t\\trefreshTitle\u003C\u003CrefreshTitle>>\\n\\t\\t\\t\\tselectionStateTitle\u003C\u003CtagSelectionState>>\\n\\t\\t\\t\\tinputAcceptActions\u003C\u003Cadd-tag-actions>>\\n\\t\\t\\t\\tinputCancelActions\u003C\u003Cclear-tags-actions>>\\n\\t\\t\\t\\ttag\\\input\\\\\n\\t\\t\\t\\tplaceholder{{$:/language/EditTemplate/Tags/Add/Placeholder}}\\n\\t\\t\\t\\tfocusPopup\u003C\u003Ctf.tagpicker-dropdown-id>>\\n\\t\\t\\t\\tclass\\\tc-edit-texteditor tc-popup-handle\\\\\n\\t\\t\\t\\ttabindex\u003C\u003CtabIndex>>\\n\\t\\t\\t\\tfocus{{{ {$:/config/AutoFocus}matchtagsthentrue :elsefalse }}}\\n\\t\\t\\t\\tfilterMinLength{{$:/config/Tags/MinLength}}\\n\\t\\t\\t\\tcancelPopups\u003C\u003CcancelPopups>>\\n\\t\\t\\t\\tconfigTiddlerFilter\\\$:/core/macros/tag-picker\\\\\n\\t\\t\\t/>\\n\\t\\t\u003C/span>\\n\\t\\t\u003C$button popup\u003C\u003Ctf.tagpicker-dropdown-id>> class\\\tc-btn-invisible tc-btn-dropdown\\\\\n\\t\\t\\ttooltip{{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label{{$:/language/EditTemplate/Tags/Dropdown/Caption}}\\n\\t\\t>\\n\\t\\t\\t{{$:/core/images/down-arrow}}\\n\\t\\t\u003C/$button>\\n\\t\\t\u003C%if \u003CstoreTitle>hastext %>\\n\\t\\t\\t\u003C$button actions\u003C\u003Cdelete-tag-state-tiddlers>> class\\\tc-btn-invisible tc-small-gap tc-btn-dropdown\\\\\n\\t\\t\\t\\ttooltip{{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label{{$:/language/EditTemplate/Tags/ClearInput/Caption}}\\n\\t\\t\\t>\\n\\t\\t\\t\\t{{$:/core/images/close-button}}\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\u003C%endif%>\\n\\t\\t\u003Cspan class\\\tc-add-tag-button tc-small-gap-left\\\>\\n\\t\\t\\t\u003C$let tag\u003C\u003C_tf.getTag>>>\\n\\t\\t\\t\\t\u003C$button set\u003C\u003CnewTagNameTiddler>> actions\u003C\u003Cadd-button-actions>> >\\n\\t\\t\\t\\t\\t{{$:/language/EditTemplate/Tags/Add/Button}}\\n\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C/span>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tc-block-dropdown-wrapper\\\>\\n\\t\\t\u003C%if \u003Ctf.tagpicker-dropdown-id>hastext %>\\n\\t\\t\\t\u003Cdiv class\\\tc-block-dropdown tc-block-tags-dropdown\\\>\\n\\t\\t\\t\\t\u003C$transclude $variable\\\tag-picker-listTags\\\ filter\u003C\u003CnonSystemTagsFilter>> suffix\\\-primaryList\\\ empty{{$:/language/EditTemplate/Tags/EmptyMessage}}/>\\n\\t\\t\\t\\t\u003Chr>\\n\\t\\t\\t\\t\u003C$transclude $variable\\\tag-picker-listTags\\\ filter\u003C\u003CsystemTagsFilter>> suffix\\\-secondaryList\\\ empty{{$:/language/EditTemplate/Tags/EmptyMessage/System}}/>\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C%endif%>\\n\\t\u003C/div>\\n\u003C/div>\\n\\\\end\\n\\n\u003C!-- prepare all variables for tag-picker keyboard handling -->\\n\\\\procedure tag-picker(actions, tagField:\\\tags\\\, tiddler, tagListFilter:\\\tagssort\\\)\\n\\n\\\\function _tf.getUserInput() \u003CstoreTitle>gettext\\n\\\\function _tf.getTag() \u003CnewTagNameTiddler>gettext\\n\u003C!-- Use this function if tag-picker is a stand alone macro. Otherwise use \\\newTagNameTiddler\\\ defined for fieldmangler in EditTemplate -->\\n\\\\function _tf.makeTagNameTiddler() $:/temp/NewTagName \u003CtagField>!matchtags :andjoin/ \u003Cqualify> :andjoin\\n\\n\u003C!-- keep those variables because they may \\\bleed\\\ into macros using old syntax -->\\n\u003C!-- \\\nonSystemTagsFilter\\\, \\\systemTagsFilter\\\ __need to be the same__ as fields: \\\first-search-filter\\\, \\\second-search-filter\\\ -->\\n\u003C$let\\n\\tpalette{{$:/palette}}\\n\\tcolourA{{{ \u003Cpalette>getindexforeground }}}\\n\\tcolourB{{{ \u003Cpalette>getindexbackground }}}\\n\\tfallbackTarget{{{ \u003Cpalette>getindextag-background }}}\\n\\n\\tsaveTiddler{{{ \u003Ctiddler>isblankthen\u003CcurrentTiddler>else\u003Ctiddler> }}}\\n\\n\\tnewTagNameTiddler{{{ newTagNameTiddlerisvariablethen\u003CnewTagNameTiddler> :else\u003C_tf.makeTagNameTiddler> }}}\\n\\tstoreTitle{{{ $:/temp/NewTagName/input \u003CtagField>!matchtags :andjoin/ \u003Cqualify> :andjoin }}}\\n\\n\\tnewTagNameSelectionTiddlerQualified\u003C\u003Cqualify \\\$:/temp/NewTagName/selected-item\\\>>\\n\\ttagSelectionState{{{ \u003CnewTagNameSelectionTiddler>!match :else\u003CnewTagNameSelectionTiddlerQualified> }}}\\n\\n\\trefreshTitle\u003C\u003Cqualify \\\$:/temp/NewTagName/refresh\\\>>\\n\\n\\tnonSystemTagsFilter\\\subfilter\u003CtagListFilter>!issystemsearch:title\u003CuserInput>\\\\\n\\tsystemTagsFilter\\\subfilter\u003CtagListFilter>issystemsearch:title\u003CuserInput>\\\\\n\\n\\tcancelPopups\\\yes\\\\\n>\\n\\t\u003C$transclude $variable\\\tag-picker-inner\\\/>\\n\u003C/$let>\\n\\\\end\\n\},\$:/core/macros/tag\:{\title\:\$:/core/macros/tag\,\tags\:\$:/tags/Macro\,\text\:\\\\\define tag-pill-styles()\\nbackground-color:$(backgroundColor)$;\\nfill:$(foregroundColor)$;\\ncolor:$(foregroundColor)$;\\n\\\\end\\n\\n\u003C!-- This has no whitespace trim to avoid modifying $actions$ -->\\n\\\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\\n\\\\whitespace trim\\n\u003C$let\\n\\tforegroundColor\u003C\u003Ccontrastcolour target:\\\\\\\\\$colour$\\\\\\\\\ fallbackTarget:\\\\\\\\\$fallbackTarget$\\\\\\\\\ colourA:\\\\\\\\\$colourA$\\\\\\\\\ colourB:\\\\\\\\\$colourB$\\\\\\\\\>>\\n\\tbackgroundColor\u003C\u003C__colour__>>\\n>\\n\u003C$element-tag$\\n\\t$element-attributes$\\n\\tclass\\\tc-tag-label tc-btn-invisible\\\\\n\\tstyle\u003C\u003Ctag-pill-styles>>\\n>\\n\\t\u003C\u003C__actions__>>\\n\\t\u003C$transclude tiddler\u003C\u003C__icon__>>/>\\n\\t\u003Cspan class{{{ \u003C__tag__>ismissingthentc-tag-missingelsetc-tag-exists }}}>\\n\\t\\t\u003C$view tiddler\u003C\u003C__tag__>> field\\\title\\\ format\\\text\\\ />\\n\\t\u003C/span>\\n\u003C/$element-tag$>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\\n\\\\whitespace trim\\n\u003C$macrocall $name\\\tag-pill-inner\\\\\n\\ttag\u003C\u003C__tag__>>\\n\\ticon\u003C\u003C__icon__>>\\n\\tcolour\u003C\u003C__colour__>>\\n\\tfallbackTarget{{$palette$##tag-background}}\\n\\tcolourA{{$palette$##foreground}}\\n\\tcolourB{{$palette$##background}}\\n\\telement-tag\u003C\u003C__element-tag__>>\\n\\telement-attributes\u003C\u003C__element-attributes__>>\\n\\tactions\u003C\u003C__actions__>>\\n/>\\n\\\\end\\n\\n\\\\define tag-pill(tag,element-tag:\\\span\\\,element-attributes:\\\\\\,actions:\\\\\\)\\n\\\\whitespace trim\\n\u003Cspan class\\\tc-tag-list-item\\\ data-tag-title\u003C\u003C__tag__>>>\\n\\t\u003C$let currentTiddler\u003C\u003C__tag__>>>\\n\\t\\t\u003C$macrocall $name\\\tag-pill-body\\\\\n\\t\\t\\ttag\u003C\u003C__tag__>>\\n\\t\\t\\ticon{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext }}}\\n\\t\\t\\tcolour{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerColourFilter!isdraftgettext }}}\\n\\t\\t\\tpalette{{$:/palette}}\\n\\t\\t\\telement-tag\u003C\u003C__element-tag__>>\\n\\t\\t\\telement-attributes\u003C\u003C__element-attributes__>>\\n\\t\\t\\tactions\u003C\u003C__actions__>>/>\\n\\t\u003C/$let>\\n\u003C/span>\\n\\\\end\\n\\n\\\\define tag(tag)\\n{{$tag$||$:/core/ui/TagTemplate}}\\n\\\\end\\n\},\$:/core/macros/testcase\:{\title\:\$:/core/macros/testcase\,\tags\:\$:/tags/Macro\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure testcase(tiddler)\\n\u003C$tiddler tiddler\u003C\u003Ctiddler>>>\\n\u003C$transclude $tiddler\\\$:/core/ui/TestCaseTemplate\\\>\\n\u003C/$tiddler>\\n\\\\end\\n\},\$:/core/macros/thumbnails\:{\title\:\$:/core/macros/thumbnails\,\tags\:\$:/tags/Macro\,\text\:\\u003C!-- This macro does not use \\\\whitespace trim because it could affect the caption -->\\n\\\\define thumbnail(link,icon,color,background-color,image,caption,width:\\\280\\\,height:\\\157\\\)\\n\u003C$link to\\\\\\\\\$link$\\\\\\\\\>\u003Cdiv class\\\tc-thumbnail-wrapper\\\\\n>\u003Cdiv\\n\\tclass\\\tc-thumbnail-image\\\\\n\\tstyle\\\width:$width$px;height:$height$px;\\\>\u003C$reveal\\n\\ttype\\\nomatch\\\\\n\\ttext\\\\\\\\n\\tdefault\\\\\\\\\$image$\\\\\\\\\\\n\\ttag\\\div\\\\\n\\tstyle\\\width:$width$px;height:$height$px;\\\\\n>img$image$\u003C/$reveal>\u003C$reveal\\n\\ttype\\\match\\\\\n\\ttext\\\\\\\\n\\tdefault\\\\\\\\\$image$\\\\\\\\\\\n\\ttag\\\div\\\\\n\\tclass\\\tc-thumbnail-background\\\\\n\\tstyle\\\width:$width$px;height:$height$px;background-color:$background-color$;\\\\\n>\u003C/$reveal>\u003C/div>\u003Cdiv\\n\\tclass\\\tc-thumbnail-icon\\\\\n\\tstyle\\\fill:$color$;color:$color$;\\\\\n>$icon$\u003C/div>\u003Cdiv class\\\tc-thumbnail-caption\\\>$caption$\u003C/div>\u003C/div>\u003C/$link>\\n\\\\end\\n\\n\\\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\\\280\\\,height:\\\157\\\)\\n\u003Cdiv class\\\tc-thumbnail-right-wrapper\\\>\u003C\u003Cthumbnail \\\\\\\\\$link$\\\\\\\\\ \\\\\\\\\$icon$\\\\\\\\\ \\\\\\\\\$color$\\\\\\\\\ \\\\\\\\\$background-color$\\\\\\\\\ \\\\\\\\\$image$\\\\\\\\\ \\\\\\\\\$caption$\\\\\\\\\ \\\\\\\\\$width$\\\\\\\\\ \\\\\\\\\$height$\\\\\\\\\>>\u003C/div>\\n\\\\end\\n\\n\\\\define list-thumbnails(filter,width:\\\280\\\,height:\\\157\\\)\\n\u003C$list filter\\\\\\\\\$filter$\\\\\\\\\>\u003C$macrocall $name\\\thumbnail\\\ link{{!!link}} icon{{!!icon}} color{{!!color}} background-color{{!!background-color}} image{{!!image}} caption{{!!caption}} width\\\\\\\\\$width$\\\\\\\\\ height\\\\\\\\\$height$\\\\\\\\\/>\u003C/$list>\\n\\\\end\\n\},\$:/core/macros/timeline\:{\title\:\$:/core/macros/timeline\,\tags\:\$:/tags/Macro\,\text\:\\u003C!-- Override one or both of the following two macros with a global or local macro of the same name \\nif you need to change how titles are displayed on a timeline -->\\n\\n\\\\procedure timeline-title() \u003C$view field\\\title\\\/>\\n\\\\procedure timeline-link() \u003C$link to{{!!title}}>\u003C\u003Ctimeline-title>>\u003C/$link>\\n\\\\procedure timeline(limit:\\\100\\\,format:\\\DDth MMM YYYY\\\,subfilter:\\\\\\,dateField:\\\modified\\\)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-timeline\\\>\\n\u003C$set name\\\tv-tids\\\ filter`!issystem$(subfilter)$has\u003CdateField>!sort\u003CdateField>limit\u003Climit>`>\\n\u003C$list filter\\\enlist\u003Ctv-tids>eachday\u003CdateField>\\\>\\n\u003Cdiv class\\\tc-menu-list-item\\\>\\n\u003C$view field\u003C\u003CdateField>> format\\\date\\\ template\u003C\u003Cformat>>/>\\n\u003C$list filter`enlist\u003Ctv-tids>sameday:$(dateField)${!!$(dateField)$}`>\\n\u003Cdiv class\\\tc-menu-list-subitem\\\>\\n\u003C\u003Ctimeline-link>>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/div>\\n\\\\end\\n\},\$:/core/macros/toc\:{\title\:\$:/core/macros/toc\,\tags\:\$:/tags/Macro\,\text\:\\\\\define toc-open-icon() $:/core/images/down-arrow\\n\\\\define toc-closed-icon() $:/core/images/right-arrow\\n\\n\\\\define toc-caption()\\n\\\\whitespace trim\\n\u003Cspan class\\\tc-toc-caption tc-tiny-gap-left\\\>\\n\u003C$set name\\\tv-wikilinks\\\ value\\\no\\\>\\n \u003C$transclude field\\\caption\\\>\\n \u003C$view field\\\title\\\/>\\n \u003C/$transclude>\\n\u003C/$set>\\n\u003C/span>\\n\\\\end\\n\\n\\\\define toc-body(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003Col class\\\tc-toc\\\>\\n \u003C$list filter\\\\\\\\\allshadows+tiddlerstag\u003C__tag__>!hasdraft.of$sort$ -\u003C__tag__> -subfilter\u003C__exclude__>\\\\\\\\\>\\n \u003C$let item\u003C\u003CcurrentTiddler>> path{{{ \u003C__path__>addsuffix/addsuffix\u003C__tag__> }}}>\\n \u003C$set name\\\excluded\\\ filter\\\subfilter\u003C__exclude__> \u003C__tag__>\\\>\\n \u003C$set name\\\toc-item-class\\\ filter\u003C\u003C__itemClassFilter__>> emptyValue\\\toc-item-selected\\\ value\\\toc-item\\\>\\n \u003Cli class\u003C\u003Ctoc-item-class>>>\\n \u003C$list filter\\\allcurrenttoc-linkno\\\ emptyMessage\\\\u003C$link to{{{ \u003CcurrentTiddler>gettargetelse\u003CcurrentTiddler> }}}>\u003C\u003Ctoc-caption>>\u003C/$link>\\\>\\n \u003C\u003Ctoc-caption>>\\n \u003C/$list>\\n \u003C$macrocall $name\\\toc-body\\\ tag\u003C\u003Citem>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003Cexcluded>> path\u003C\u003Cpath>>/>\\n \u003C/li>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$let>\\n \u003C/$list>\\n\u003C/ol>\\n\\\\end\\n\\n\\\\define toc(tag,sort:\\\\\\,itemClassFilter:\\\\\\, exclude)\\n\\\\whitespace trim\\n\u003C$let __tag__{{{ \u003C__tag__>isblankthen\u003CcurrentTiddler>else\u003C__tag__> }}} >\\n \u003C$macrocall $name\\\toc-body\\\ tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003C__exclude__>>/>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\define toc-linked-expandable-body(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003C!-- helper function -->\\n\u003C$qualify name\\\toc-state\\\ title{{{ $:/state/tocaddsuffix\u003C__path__>addsuffix-addsuffix\u003CcurrentTiddler> }}}>\\n \u003C$set name\\\toc-item-class\\\ filter\u003C\u003C__itemClassFilter__>> emptyValue\\\toc-item-selected\\\ value\\\toc-item\\\>\\n \u003Cli class\u003C\u003Ctoc-item-class>>>\\n \u003C$link to{{{ \u003CcurrentTiddler>gettargetelse\u003CcurrentTiddler> }}}>\\n \u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\open\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-closed-icon>> />\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\close\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-open-icon>> />\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C\u003Ctoc-caption>>\\n \u003C/$link>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$macrocall $name\\\toc-expandable\\\ tag\u003C\u003CcurrentTiddler>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003C__exclude__>> path\u003C\u003C__path__>>/>\\n \u003C/$reveal>\\n \u003C/li>\\n \u003C/$set>\\n\u003C/$qualify>\\n\\\\end\\n\\n\\\\define toc-unlinked-expandable-body(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003C!-- helper function -->\\n\u003C$qualify name\\\toc-state\\\ title{{{ $:/state/tocaddsuffix\u003C__path__>addsuffix-addsuffix\u003CcurrentTiddler> }}}>\\n \u003C$set name\\\toc-item-class\\\ filter\u003C\u003C__itemClassFilter__>> emptyValue\\\toc-item-selected\\\ value\\\toc-item\\\>\\n \u003Cli class\u003C\u003Ctoc-item-class>>>\\n \u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\open\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-closed-icon>> />\\n \u003C\u003Ctoc-caption>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\close\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-open-icon>> />\\n \u003C\u003Ctoc-caption>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$macrocall $name\\\toc-expandable\\\ tag\u003C\u003CcurrentTiddler>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003C__exclude__>> path\u003C\u003C__path__>>/>\\n \u003C/$reveal>\\n \u003C/li>\\n \u003C/$set>\\n\u003C/$qualify>\\n\\\\end\\n\\n\\\\define toc-expandable-empty-message()\\n\u003C$macrocall $name\\\toc-linked-expandable-body\\\ tag\u003C\u003Ctag>> sort\u003C\u003Csort>> itemClassFilter\u003C\u003CitemClassFilter>> exclude\u003C\u003Cexcluded>> path\u003C\u003Cpath>>/>\\n\\\\end\\n\\n\\\\define toc-expandable(tag,sort:\\\\\\,itemClassFilter:\\\\\\,exclude,path)\\n\\\\whitespace trim\\n\u003C$let __tag__{{{ \u003C__tag__>isblankthen\u003CcurrentTiddler>else\u003C__tag__> }}} tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> path{{{ \u003C__path__>addsuffix/addsuffix\u003C__tag__> }}}>\\n \u003C$set name\\\excluded\\\ filter\\\subfilter\u003C__exclude__> \u003C__tag__>\\\>\\n \u003Col class\\\tc-toc toc-expandable\\\>\\n \u003C$list filter\\\\\\\\\allshadows+tiddlerstag\u003C__tag__>!hasdraft.of$sort$ -\u003C__tag__> -subfilter\u003C__exclude__>\\\\\\\\\>\\n \u003C$list filter\\\allcurrenttoc-linkno\\\ emptyMessage\u003C\u003Ctoc-expandable-empty-message>> >\\n \u003C$macrocall $name\\\toc-unlinked-expandable-body\\\ tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\\\\\\\\\itemClassFilter\\\\\\\\\ exclude\u003C\u003Cexcluded>> path\u003C\u003Cpath>> />\\n \u003C/$list>\\n \u003C/$list>\\n \u003C/ol>\\n \u003C/$set>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\define toc-linked-selective-expandable-body(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003C$qualify name\\\toc-state\\\ title{{{ $:/state/tocaddsuffix\u003C__path__>addsuffix-addsuffix\u003CcurrentTiddler> }}}>\\n \u003C$set name\\\toc-item-class\\\ filter\u003C\u003C__itemClassFilter__>> emptyValue\\\toc-item-selected\\\ value\\\toc-item\\\ >\\n \u003Cli class\u003C\u003Ctoc-item-class>>>\\n \u003C$link to{{{ \u003CcurrentTiddler>gettargetelse\u003CcurrentTiddler> }}}>\\n \u003C$list filter\\\allcurrenttagging$sort$ -subfilter\u003C__exclude__> +limit1\\\ variable\\\ignore\\\ emptyMessage\\\\u003C$button classtc-btn-invisible>{{$:/core/images/blank}}\u003C/$button>\\\>\\n \u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\open\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-closed-icon>> />\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\close\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-open-icon>> />\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003C\u003Ctoc-caption>>\\n \u003C/$link>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$macrocall $name\\\toc-selective-expandable\\\ tag\u003C\u003CcurrentTiddler>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003C__exclude__>> path\u003C\u003C__path__>>/>\\n \u003C/$reveal>\\n \u003C/li>\\n \u003C/$set>\\n\u003C/$qualify>\\n\\\\end\\n\\n\\\\define toc-unlinked-selective-expandable-body(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003C$qualify name\\\toc-state\\\ title{{{ $:/state/tocaddsuffix\u003C__path__>addsuffix-addsuffix\u003CcurrentTiddler> }}}>\\n \u003C$set name\\\toc-item-class\\\ filter\u003C\u003C__itemClassFilter__>> emptyValue\\\toc-item-selected\\\ value\\\toc-item\\\>\\n \u003Cli class\u003C\u003Ctoc-item-class>>>\\n \u003C$list filter\\\allcurrenttagging$sort$ -subfilter\u003C__exclude__> +limit1\\\ variable\\\ignore\\\ emptyMessage\\\\\\\\\\u003C$button class\\\tc-btn-invisible\\\>{{$:/core/images/blank}}\u003C/$button>\u003Cspan class\\\toc-item-muted\\\>\u003C\u003Ctoc-caption>>\u003C/span>\\\\\\\\\>\\n \u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\open\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-closed-icon>> />\\n \u003C\u003Ctoc-caption>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$button setTitle\u003C\u003Ctoc-state>> setTo\\\close\\\ class\\\tc-btn-invisible tc-popup-keep\\\>\\n \u003C$transclude tiddler\u003C\u003Ctoc-open-icon>> />\\n \u003C\u003Ctoc-caption>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003C$reveal type\\\match\\\ stateTitle\u003C\u003Ctoc-state>> text\\\open\\\>\\n \u003C$macrocall $name\\\toc-selective-expandable\\\ tag\u003C\u003CcurrentTiddler>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003C__exclude__>> path\u003C\u003C__path__>>/>\\n \u003C/$reveal>\\n \u003C/li>\\n \u003C/$set>\\n\u003C/$qualify>\\n\\\\end\\n\\n\\\\define toc-selective-expandable-empty-message()\\n\u003C$macrocall $name\\\toc-linked-selective-expandable-body\\\ tag\u003C\u003Ctag>> sort\u003C\u003Csort>> itemClassFilter\u003C\u003CitemClassFilter>> exclude\u003C\u003Cexcluded>> path\u003C\u003Cpath>>/>\\n\\\\end\\n\\n\\\\define toc-selective-expandable(tag,sort:\\\\\\,itemClassFilter,exclude,path)\\n\\\\whitespace trim\\n\u003C$let __tag__{{{ \u003C__tag__>isblankthen\u003CcurrentTiddler>else\u003C__tag__> }}} tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> path{{{ \u003C__path__>addsuffix/addsuffix\u003C__tag__> }}}>\\n \u003C$set name\\\excluded\\\ filter\\\subfilter\u003C__exclude__> \u003C__tag__>\\\>\\n \u003Col class\\\tc-toc toc-selective-expandable\\\>\\n \u003C$list filter\\\\\\\\\allshadows+tiddlerstag\u003C__tag__>!hasdraft.of$sort$ -\u003C__tag__> -subfilter\u003C__exclude__>\\\\\\\\\>\\n \u003C$list filter\\\allcurrenttoc-linkno\\\ variable\\\ignore\\\ emptyMessage\u003C\u003Ctoc-selective-expandable-empty-message>> >\\n \u003C$macrocall $name\\\toc-unlinked-selective-expandable-body\\\ tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\u003C\u003C__itemClassFilter__>> exclude\u003C\u003Cexcluded>> path\u003C\u003Cpath>>/>\\n \u003C/$list>\\n \u003C/$list>\\n \u003C/ol>\\n \u003C/$set>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\define toc-tabbed-external-nav(tag,sort:\\\\\\,selectedTiddler:\\\$:/temp/toc/selectedTiddler\\\,unselectedText,missingText,template:\\\\\\,exclude)\\n\\\\whitespace trim\\n\u003C$let __tag__{{{ \u003C__tag__>isblankthen\u003CcurrentTiddler>else\u003C__tag__> }}}>\\n \u003C$tiddler tiddler{{{ \u003C__selectedTiddler__>gettext }}}>\\n \u003Cdiv class\\\tc-tabbed-table-of-contents\\\>\\n \u003C$linkcatcher to\u003C\u003C__selectedTiddler__>>>\\n \u003Cdiv class\\\tc-table-of-contents\\\>\\n \u003C$macrocall $name\\\toc-selective-expandable\\\ tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> itemClassFilter\\\allcurrent -\u003C__selectedTiddler__>gettext\\\ exclude\u003C\u003C__exclude__>>/>\\n \u003C/div>\\n \u003C/$linkcatcher>\\n \u003Cdiv class\\\tc-tabbed-table-of-contents-content\\\>\\n \u003C$reveal stateTitle\u003C\u003C__selectedTiddler__>> type\\\nomatch\\\ text\\\\\\>\\n \u003C$transclude mode\\\block\\\ tiddler\u003C\u003C__template__>>>\\n \u003Ch1>\u003C\u003Ctoc-caption>>\u003C/h1>\\n \u003C$transclude mode\\\block\\\>$missingText$\u003C/$transclude>\\n \u003C/$transclude>\\n \u003C/$reveal>\\n \u003C$reveal stateTitle\u003C\u003C__selectedTiddler__>> type\\\match\\\ text\\\\\\>\\n $unselectedText$\\n \u003C/$reveal>\\n \u003C/div>\\n \u003C/div>\\n \u003C/$tiddler>\\n\u003C/$let>\\n\\\\end\\n\\n\\\\define toc-tabbed-internal-nav(tag,sort:\\\\\\,selectedTiddler:\\\$:/temp/toc/selectedTiddler\\\,unselectedText,missingText,template:\\\\\\,exclude)\\n\\\\whitespace trim\\n\u003C$let __tag__{{{ \u003C__tag__>isblankthen\u003CcurrentTiddler>else\u003C__tag__> }}}>\\n \u003C$linkcatcher to\u003C\u003C__selectedTiddler__>>>\\n \u003C$macrocall $name\\\toc-tabbed-external-nav\\\ tag\u003C\u003C__tag__>> sort\u003C\u003C__sort__>> selectedTiddler\u003C\u003C__selectedTiddler__>> unselectedText\u003C\u003C__unselectedText__>> missingText\u003C\u003C__missingText__>> template\u003C\u003C__template__>> exclude\u003C\u003C__exclude__>> />\\n \u003C/$linkcatcher>\\n\u003C/$let>\\n\\\\end\\n\},\$:/core/macros/translink\:{\title\:\$:/core/macros/translink\,\tags\:\$:/tags/Macro\,\text\:\\\\\define translink(title,mode:\\\block\\\)\\n\\\\whitespace trim\\n\u003C$list filter\\\\u003C__mode__>matchblock\\\>\\n\u003Cdiv class\\\tc-translink\\\>\\n\u003Cdiv>\\n\u003C$link to\\\\\\\\\$title$\\\\\\\\\>\\n\u003Ch1>\u003C$text text\\\\\\\\\$title$\\\\\\\\\/>\u003C/h1>\\n\u003C/$link>\\n\u003C$transclude tiddler\\\\\\\\\$title$\\\\\\\\\ mode\\\block\\\>\\n\u003C$set name\\\currentTiddler\\\ value\\\\\\\\\$title$\\\\\\\\\>\u003C$transclude tiddler\\\$:/language/MissingTiddler/Hint\\\/>\u003C/$set>\\n\u003C/$transclude>\\n\u003C/div>\\n\u003C/div>\\n\u003C/$list>\\n\u003C$list filter\\\\u003C__mode__>matchinline\\\>\\n\u003Cspan class\\\tc-translink\\\>\\n\u003C$link to\\\\\\\\\$title$\\\\\\\\\>\\n\u003C$text text\\\\\\\\\$title$\\\\\\\\\/>\\n\u003C/$link>\\n (\u003C$transclude tiddler\\\\\\\\\$title$\\\\\\\\\ mode\\\inline\\\>\\n\u003C$set name\\\currentTiddler\\\ value\\\\\\\\\$title$\\\\\\\\\>\u003C$transclude tiddler\\\$:/language/MissingTiddler/Hint\\\/>\u003C/$set>\\n\u003C/$transclude>)\\n\u003C/span>\\n\u003C/$list>\\n\\\\end\\n\},\$:/core/macros/tree\:{\title\:\$:/core/macros/tree\,\tags\:\$:/tags/Macro\,\text\:\\\\\define leaf-link(full-title,chunk,separator: \\\/\\\)\\n\u003C$link to\u003C\u003C__full-title__>>>\u003C$text text\u003C\u003C__chunk__>>/>\u003C/$link>\\n\\\\end\\n\\n\\\\define leaf-node(prefix,chunk)\\n\\\\whitespace trim\\n\u003Cli>\\n\u003C$list filter\\\\u003C__prefix__>addsuffix\u003C__chunk__>isshadow \u003C__prefix__>addsuffix\u003C__chunk__>istiddler\\\ variable\\\full-title\\\>\\n\u003C$list filter\\\\u003Cfull-title>removeprefix\u003C__prefix__>\\\ variable\\\chunk\\\>\\n\u003Cspan>{{$:/core/images/file}}\u003C/span> \u003C$macrocall $name\\\leaf-link\\\ full-title\u003C\u003Cfull-title>> chunk\u003C\u003Cchunk>>/>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/li>\\n\\\\end\\n\\n\\\\define branch-node(prefix,chunk,separator: \\\/\\\)\\n\\\\whitespace trim\\n\u003Cli>\\n\u003C$set name\\\reveal-state\\\ value{{{ $:/state/tree/addsuffix\u003C__prefix__>addsuffix\u003C__chunk__> }}}>\\n\u003C$reveal type\\\nomatch\\\ stateTitle\u003C\u003Creveal-state>> text\\\show\\\>\\n\u003C$button setTitle\u003C\u003Creveal-state>> setTo\\\show\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/folder}} \u003C$text text\u003C\u003C__chunk__>>/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ stateTitle\u003C\u003Creveal-state>> text\\\show\\\>\\n\u003C$button setTitle\u003C\u003Creveal-state>> setTo\\\hide\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/folder}} \u003C$text text\u003C\u003C__chunk__>>/>\\n\u003C/$button>\\n\u003C/$reveal>\\n \\n\u003Cspan>(\u003C$count filter\\\allshadows+tiddlersremoveprefix\u003C__prefix__>removeprefix\u003C__chunk__> -\u003C__prefix__>addsuffix\u003C__chunk__>\\\/>)\u003C/span>\\n\u003C$reveal type\\\match\\\ stateTitle\u003C\u003Creveal-state>> text\\\show\\\>\\n\u003C$macrocall $name\\\tree-node\\\ prefix{{{ \u003C__prefix__>addsuffix\u003C__chunk__> }}} separator\u003C\u003C__separator__>>/>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/li>\\n\\\\end\\n\\n\\\\define tree-node(prefix,separator: \\\/\\\)\\n\\\\whitespace trim\\n\u003Col>\\n\u003C$list filter\\\allshadows+tiddlersremoveprefix\u003C__prefix__>splitbefore\u003C__separator__>sort!suffix\u003C__separator__>\\\ variable\\\chunk\\\>\\n\u003C$macrocall $name\\\leaf-node\\\ prefix\u003C\u003C__prefix__>> chunk\u003C\u003Cchunk>> separator\u003C\u003C__separator__>>/>\\n\u003C/$list>\\n\u003C$list filter\\\allshadows+tiddlersremoveprefix\u003C__prefix__>splitbefore\u003C__separator__>sortsuffix\u003C__separator__>\\\ variable\\\chunk\\\>\\n\u003C$macrocall $name\\\branch-node\\\ prefix\u003C\u003C__prefix__>> chunk\u003C\u003Cchunk>> separator\u003C\u003C__separator__>>/>\\n\u003C/$list>\\n\u003C/ol>\\n\\\\end\\n\\n\\\\define tree(prefix: \\\$:/\\\,separator: \\\/\\\)\\n\\\\whitespace trim\\n\u003Cdiv class\\\tc-tree\\\>\\n\u003Cspan>\u003C$text text\u003C\u003C__prefix__>>/>\u003C/span>\\n\u003Cdiv>\\n\u003C$macrocall $name\\\tree-node\\\ prefix\u003C\u003C__prefix__>> separator\u003C\u003C__separator__>>/>\\n\u003C/div>\\n\u003C/div>\\n\\\\end\\n\},\$:/core/macros/utils\:{\title\:\$:/core/macros/utils\,\text\:\\\\\define colour(colour)\\n$colour$\\n\\\\end\\n\},\$:/snippets/minifocusswitcher\:{\title\:\$:/snippets/minifocusswitcher\,\text\:\\\\\whitespace trim\\n\u003C$select tiddler\\\$:/config/AutoFocus\\\>\\n\u003C$list filter\\\title tags text type fields\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C\u003CcurrentTiddler>>\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n\},\$:/snippets/minilanguageswitcher\:{\title\:\$:/snippets/minilanguageswitcher\,\text\:\\\\\whitespace trim\\n\u003C$select tiddler\\\$:/language\\\>\\n\u003C$list filter\\\$:/languages/en-GB plugin-typelanguagesorttitle\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$view field\\\description\\\>\u003C$view field\\\name\\\>\u003C$view field\\\title\\\/>\u003C/$view>\u003C/$view>\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\},\$:/snippets/minithemeswitcher\:{\title\:\$:/snippets/minithemeswitcher\,\text\:\\\\\define lingo-base() $:/language/ControlPanel/Theme/\\n\\\\whitespace trim\\n\u003C\u003Clingo Prompt>> \u003C$select tiddler\\\$:/theme\\\>\\n\u003C$list filter\\\plugin-typethemesorttitle\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$view field\\\name\\\>\u003C$view field\\\title\\\/>\u003C/$view>\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\},\$:/snippets/modules\:{\title\:\$:/snippets/modules\,\text\:\\\\\define describeModuleType(type)\\n{{$:/language/Docs/ModuleTypes/$type$}}\\n\\\\end\\n\\\\whitespace trim\\n\u003C$list filter\\\moduletypes\\\>\\n\\n!! \u003C$macrocall $name\\\currentTiddler\\\ $type\\\text/plain\\\ $output\\\text/plain\\\/>\\n\\n\u003C$macrocall $name\\\describeModuleType\\\ type\u003C\u003CcurrentTiddler>>/>\\n\\n\u003Cul>\u003C$list filter\\\allcurrentmodules\\\>\u003Cli>\u003C$link>\u003C\u003CcurrentTiddler>>\u003C/$link>\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\u003C/$list>\\n\},\$:/palette\:{\title\:\$:/palette\,\text\:\$:/palettes/Vanilla\},\$:/snippets/paletteeditor\:{\title\:\$:/snippets/paletteeditor\,\text\:\\u003C$transclude tiddler\\\$:/PaletteManager\\\/>\\n\},\$:/snippets/palettepreview\:{\title\:\$:/snippets/palettepreview\,\text\:\\\\\whitespace trim\\n\u003C$set name\\\currentTiddler\\\ value{{$:/palette}}>\\n{{||$:/snippets/currpalettepreview}}\\n\u003C/$set>\\n\},\$:/snippets/paletteswitcher\:{\title\:\$:/snippets/paletteswitcher\,\text\:\\\\\whitespace trim\\n\u003C$linkcatcher to\\\$:/palette\\\>\\n\u003Cdiv class\\\tc-chooser\\\>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Palette!isdraftsortname\\\>\\n\u003C$set name\\\cls\\\ filter\\\allcurrentprefix{$:/palette}\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\\n\u003Cdiv class\u003C\u003Ccls>>>\\n\u003C$link to{{!!title}}>\\n\u003C$view field\\\name\\\ format\\\text\\\/>\\n - \\n\u003C$view field\\\description\\\ format\\\text\\\/>\\n{{||$:/snippets/currpalettepreview}}\\n\u003C/$link>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$linkcatcher>\\n\},\$:/snippets/peek-stylesheets\:{\title\:\$:/snippets/peek-stylesheets\,\text\:\\\\\define expandable-stylesheets-list()\\n\\\\whitespace trim\\n\u003Col>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Stylesheet!hasdraft.of\\\>\\n\u003C$vars state\u003C\u003Cqualify \\\$:/state/peek-stylesheets/open/\\\>>>\\n\u003C$set name\\\state\\\ value{{{ \u003Cstate>addsuffix\u003CcurrentTiddler> }}}>\\n\u003Cli>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\yes\\\ tag\\\span\\\>\\n\u003C$button set\u003C\u003Cstate>> setTo\\\no\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/down-arrow}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003Cstate>> text\\\yes\\\ tag\\\span\\\>\\n\u003C$button set\u003C\u003Cstate>> setTo\\\yes\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/right-arrow}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$link>\\n\u003C$view field\\\title\\\/>\\n\u003C/$link>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\yes\\\ tag\\\div\\\>\\n\u003C$set name\\\source\\\ tiddler\u003C\u003CcurrentTiddler>>>\\n\u003C$wikify name\\\styles\\\ text\u003C\u003Csource>>>\\n\u003C$codeblock code\u003C\u003Cstyles>> language\\\css\\\/>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$reveal>\\n\u003C/li>\\n\u003C/$set>\\n\u003C/$vars>\\n\u003C/$list>\\n\u003C/ol>\\n\\\\end\\n\\n\\\\define stylesheets-list()\\n\\\\whitespace trim\\n\u003Col>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Stylesheet!hasdraft.of\\\>\\n\u003Cli>\\n\u003C$link>\\n\u003C$view field\\\title\\\/>\\n\u003C/$link>\\n\u003C$set name\\\source\\\ tiddler\u003C\u003CcurrentTiddler>>>\\n\u003C$wikify name\\\styles\\\ text\u003C\u003Csource>>>\\n\u003Cpre>\\n\u003Ccode>\\n\u003C$text text\u003C\u003Cstyles>>/>\\n\u003C/code>\\n\u003C/pre>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/li>\\n\u003C/$list>\\n\u003C/ol>\\n\\\\end\\n\\\\whitespace trim\\n\\n\u003C$vars modeState\u003C\u003Cqualify \\\$:/state/peek-stylesheets/mode/\\\>>>\\n\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CmodeState>> text\\\expanded\\\ tag\\\div\\\>\\n\u003C$button set\u003C\u003CmodeState>> setTo\\\expanded\\\ class\\\tc-btn-invisible\\\>{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CmodeState>> text\\\expanded\\\ tag\\\div\\\>\\n\u003C$button set\u003C\u003CmodeState>> setTo\\\restored\\\ class\\\tc-btn-invisible\\\>{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}\u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CmodeState>> text\\\expanded\\\ tag\\\div\\\>\\n\u003C\u003Cexpandable-stylesheets-list>>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CmodeState>> text\\\expanded\\\ tag\\\div\\\>\\n\u003C\u003Cstylesheets-list>>\\n\u003C/$reveal>\\n\\n\u003C/$vars>\\n\},\$:/temp/search\:{\title\:\$:/temp/search\,\text\:\\},\$:/tags/AdvancedSearch\:{\title\:\$:/tags/AdvancedSearch\,\list\:\$:/core/ui/AdvancedSearch/Standard $:/core/ui/AdvancedSearch/System $:/core/ui/AdvancedSearch/Shadows $:/core/ui/AdvancedSearch/Filter\},\$:/tags/AdvancedSearch/FilterButton\:{\title\:\$:/tags/AdvancedSearch/FilterButton\,\list\:\$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete\},\$:/tags/ControlPanel\:{\title\:\$:/tags/ControlPanel\,\list\:\$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals\},\$:/tags/ControlPanel/Info\:{\title\:\$:/tags/ControlPanel/Info\,\list\:\$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced\},\$:/tags/ControlPanel/Plugins\:{\title\:\$:/tags/ControlPanel/Plugins\,\list\:\$:/core/ui/ControlPanel/Plugins/Installed/Plugins $:/core/ui/ControlPanel/Plugins/Installed/Themes $:/core/ui/ControlPanel/Plugins/Installed/Languages\},\$:/tags/EditTemplate\:{\title\:\$:/tags/EditTemplate\,\list\:\$:/core/ui/EditTemplate/controls $:/core/ui/EditTemplate/title $:/core/ui/EditTemplate/tags $:/core/ui/EditTemplate/shadow $:/core/ui/ViewTemplate/classic $:/core/ui/EditTemplate/body $:/core/ui/EditTemplate/type $:/core/ui/EditTemplate/fields\},\$:/tags/EditTemplateBodyFilter\:{\title\:\$:/tags/EditTemplateBodyFilter\,\list\:\$:/config/EditTemplateBodyFilters/canonical-uri $:/config/EditTemplateBodyFilters/default\},\$:/tags/EditToolbar\:{\title\:\$:/tags/EditToolbar\,\list\:\$:/core/ui/Buttons/delete $:/core/ui/Buttons/cancel $:/core/ui/Buttons/save\},\$:/tags/EditorToolbar\:{\title\:\$:/tags/EditorToolbar\,\list\:\$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type\},\$:/tags/Manager/ItemMain\:{\title\:\$:/tags/Manager/ItemMain\,\list\:\$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields\},\$:/tags/Manager/ItemSidebar\:{\title\:\$:/tags/Manager/ItemSidebar\,\list\:\$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools\},\$:/tags/MoreSideBar\:{\title\:\$:/tags/MoreSideBar\,\list\:\$:/core/ui/MoreSideBar/All $:/core/ui/MoreSideBar/Recent $:/core/ui/MoreSideBar/Tags $:/core/ui/MoreSideBar/Missing $:/core/ui/MoreSideBar/Drafts $:/core/ui/MoreSideBar/Orphans $:/core/ui/MoreSideBar/Types $:/core/ui/MoreSideBar/System $:/core/ui/MoreSideBar/Shadows $:/core/ui/MoreSideBar/Explorer $:/core/ui/MoreSideBar/Plugins\,\text\:\\},\$:/tags/PageControls\:{\title\:\$:/tags/PageControls\,\list\:\$:/core/ui/Buttons/home $:/core/ui/Buttons/close-all $:/core/ui/Buttons/fold-all $:/core/ui/Buttons/unfold-all $:/core/ui/Buttons/permaview $:/core/ui/Buttons/new-tiddler $:/core/ui/Buttons/new-journal $:/core/ui/Buttons/new-image $:/core/ui/Buttons/import $:/core/ui/Buttons/export-page $:/core/ui/Buttons/control-panel $:/core/ui/Buttons/advanced-search $:/core/ui/Buttons/manager $:/core/ui/Buttons/tag-manager $:/core/ui/Buttons/language $:/core/ui/Buttons/palette $:/core/ui/Buttons/theme $:/core/ui/Buttons/layout $:/core/ui/Buttons/storyview $:/core/ui/Buttons/encryption $:/core/ui/Buttons/timestamp $:/core/ui/Buttons/full-screen $:/core/ui/Buttons/print $:/core/ui/Buttons/save-wiki $:/core/ui/Buttons/refresh $:/core/ui/Buttons/network-activity $:/core/ui/Buttons/more-page-actions\},\$:/tags/PageTemplate\:{\title\:\$:/tags/PageTemplate\,\list\:\$:/core/ui/PageTemplate/topleftbar $:/core/ui/PageTemplate/toprightbar $:/core/ui/PageTemplate/sidebar $:/core/ui/PageTemplate/story $:/core/ui/PageTemplate/alerts\,\text\:\\},\$:/tags/PluginLibrary\:{\title\:\$:/tags/PluginLibrary\,\list\:\$:/config/OfficialPluginLibrary\},\$:/tags/SideBar\:{\title\:\$:/tags/SideBar\,\list\:\$:/core/ui/SideBar/Open $:/core/ui/SideBar/Recent $:/core/ui/SideBar/Tools $:/core/ui/SideBar/More\,\text\:\\},\$:/tags/SideBarSegment\:{\title\:\$:/tags/SideBarSegment\,\list\:\$:/core/ui/SideBarSegments/site-title $:/core/ui/SideBarSegments/site-subtitle $:/core/ui/SideBarSegments/page-controls $:/core/ui/SideBarSegments/search $:/core/ui/SideBarSegments/tabs\},\$:/tags/StoryTiddlerTemplateFilter\:{\title\:\$:/tags/StoryTiddlerTemplateFilter\,\list\:\$:/config/StoryTiddlerTemplateFilters/draft $:/config/StoryTiddlerTemplateFilters/default\},\$:/tags/TestCase/Actions\:{\title\:\$:/tags/TestCase/Actions\,\list\:\\},\$:/tags/TextEditor/Snippet\:{\title\:\$:/tags/TextEditor/Snippet\,\list\:\$:/language/Snippets/ProcedureDefinition $:/language/Snippets/FunctionDefinition $:/language/Snippets/ListByTag $:/language/Snippets/Table4x3 $:/language/Snippets/TableOfContents $:/language/Snippets/MacroDefinition\},\$:/tags/TiddlerColourFilter\:{\title\:\$:/tags/TiddlerColourFilter\,\list\:\$:/config/TiddlerColourFilters/color-field $:/config/TiddlerColourFilters/default\,\text\:\\},\$:/tags/TiddlerIconFilter\:{\title\:\$:/tags/TiddlerIconFilter\,\list\:\$:/config/TiddlerIconFilters/icon-field $:/config/TiddlerIconFilters/default\,\text\:\\},\$:/tags/TiddlerInfo\:{\title\:\$:/tags/TiddlerInfo\,\list\:\$:/core/ui/TiddlerInfo/Tools $:/core/ui/TiddlerInfo/References $:/core/ui/TiddlerInfo/Tagging $:/core/ui/TiddlerInfo/List $:/core/ui/TiddlerInfo/Listed $:/core/ui/TiddlerInfo/Fields\,\text\:\\},\$:/tags/TiddlerInfo/Advanced\:{\title\:\$:/tags/TiddlerInfo/Advanced\,\list\:\$:/core/ui/TiddlerInfo/Advanced/ShadowInfo $:/core/ui/TiddlerInfo/Advanced/PluginInfo\},\$:/tags/ViewTemplate\:{\title\:\$:/tags/ViewTemplate\,\list\:\$:/core/ui/ViewTemplate/title $:/core/ui/ViewTemplate/unfold $:/core/ui/ViewTemplate/subtitle $:/core/ui/ViewTemplate/tags $:/core/ui/ViewTemplate/classic $:/core/ui/ViewTemplate/body $:/core/ui/ViewTemplate/lazy-loading\},\$:/tags/ViewTemplateBodyFilter\:{\title\:\$:/tags/ViewTemplateBodyFilter\,\list\:\$:/config/ViewTemplateBodyFilters/testcase $:/config/ViewTemplateBodyFilters/hide-body $:/config/ViewTemplateBodyFilters/code-body $:/config/ViewTemplateBodyFilters/stylesheet $:/config/ViewTemplateBodyFilters/core-ui-advanced-search $:/config/ViewTemplateBodyFilters/core-ui-tags $:/config/ViewTemplateBodyFilters/import $:/config/ViewTemplateBodyFilters/plugin $:/config/ViewTemplateBodyFilters/html $:/config/ViewTemplateBodyFilters/system $:/config/ViewTemplateBodyFilters/default\},\$:/tags/ViewTemplate/Subtitle\:{\title\:\$:/tags/ViewTemplate/Subtitle\,\list\:\$:/core/ui/ViewTemplate/subtitle/modifier $:/core/ui/ViewTemplate/subtitle/modified\},\$:/tags/ViewTemplateTitleFilter\:{\title\:\$:/tags/ViewTemplateTitleFilter\,\list\:\$:/config/ViewTemplateTitleFilters/system $:/config/ViewTemplateTitleFilters/default\,\text\:\\},\$:/tags/ViewToolbar\:{\title\:\$:/tags/ViewToolbar\,\list\:\$:/core/ui/Buttons/more-tiddler-actions $:/core/ui/Buttons/info $:/core/ui/Buttons/new-here $:/core/ui/Buttons/new-journal-here $:/core/ui/Buttons/clone $:/core/ui/Buttons/export-tiddler $:/core/ui/Buttons/edit $:/core/ui/Buttons/delete $:/core/ui/Buttons/permalink $:/core/ui/Buttons/permaview $:/core/ui/Buttons/open-window $:/core/ui/Buttons/close-others $:/core/ui/Buttons/close $:/core/ui/Buttons/fold-others $:/core/ui/Buttons/fold\},\$:/snippets/themeswitcher\:{\title\:\$:/snippets/themeswitcher\,\text\:\\\\\whitespace trim\\n\u003C$linkcatcher to\\\$:/theme\\\>\\n\u003Cdiv class\\\tc-chooser\\\>\\n\u003C$list filter\\\plugin-typethemesorttitle\\\>\\n\u003C$set name\\\cls\\\ filter\\\allcurrentfield:title{$:/theme} $:/theme!hastextaddsuffixs/tiddlywiki/vanillafield:title\u003CcurrentTiddler> +limit1\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\\n\u003Cdiv class\u003C\u003Ccls>>>\u003C$link to{{!!title}}>\\n\u003C$view field\\\name\\\ format\\\text\\\/>\\n \\n\u003C$view field\\\description\\\ format\\\text\\\/>\\n\u003C/$link>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$linkcatcher>\},\$:/core/wiki/title\:{\title\:\$:/core/wiki/title\,\text\:\\\\\whitespace trim\\n{{$:/SiteTitle}}\\n\u003C$list filter\\\{$:/SiteSubtitle}trimminlength1\\\ variable\\\ignore\\\>\\n --- {{$:/SiteSubtitle}}\\n\u003C/$list>\},\$:/view\:{\title\:\$:/view\,\text\:\classic\},\$:/snippets/viewswitcher\:{\title\:\$:/snippets/viewswitcher\,\text\:\\\\\define icon()\\n$:/core/images/storyview-$(storyview)$\\n\\\\end\\n\\\\whitespace trim\\n\u003C$linkcatcher to\\\$:/view\\\>\\n\u003Cdiv class\\\tc-chooser tc-viewswitcher\\\>\\n\u003C$list filter\\\storyviews\\\ variable\\\storyview\\\>\\n\u003C$set name\\\cls\\\ filter\\\\u003Cstoryview>prefix{$:/view}\\\ value\\\tc-chooser-item tc-chosen\\\ emptyValue\\\tc-chooser-item\\\>\u003Cdiv class\u003C\u003Ccls>>>\\n\u003C$button tag\\\a\\\ class\\\tc-tiddlylink tc-btn-invisible\\\ to\u003C\u003Cstoryview>>>\u003C$transclude tiddler\u003C\u003Cicon>>/>\u003C$text text\u003C\u003Cstoryview>>/>\u003C/$button>\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$linkcatcher>\\n\}}}},{title:$:/core/Filters/AllTags,created:20200329173823386,description:{{$:/language/Filters/AllTags}},filter:tags!issystemsorttitlesortcolor,modified:20210414230511254,tags:$:/tags/Filter,type:text/vnd.tiddlywiki},{title:$:/core/macros/tag-picker,created:20250211045109879,creator:soren,first-search-filter:subfilter\u003CtagListFilter>!issystemsearch:title\u003CuserInput>sortsortcolor,modified:20250211045342498,modifier:soren,second-search-filter:subfilter\u003CtagListFilter>issystemsearch:title\u003CuserInput>,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\u003C!--\n\tFields: \first-search-filter\, \second-search-filter\ are assigned to the keyboard-driven input macro with parameter: \configTiddlerFilter\\n\tThey __need to be the same__ as used for variables: \nonSystemTagsFilter\ and \systemTagsFilter\. See code below!\n-->\n\n\\whitespace trim\n\n\u003C!-- tf.tagpicker-dropdown-id is needed if several tap-pickers are shown in one tiddler -->\n\\function tf.tagpicker-dropdown-id()\n\t\u003Cqualify $:/state/popup/tags-auto-complete>\n\t$(saveTiddler)$-$(tagField)$-$(tagListFilter)$substitutesha256 :andjoin/\n\\end\n\n\\function tf.tagpicker-dropdown-class() \u003Ctf.tagpicker-dropdown-id>sha256addprefixtc-\n\\function tf.get-tagpicker-focus-selector() \u003Ctf.tagpicker-dropdown-class>addprefix. .tc-popup-handle :andjoin \n\n\u003C!-- clean up temporary tiddlers, so the next \pick\ starts with a clean input -->\n\u003C!-- This could probably be optimized / removed if we would use different temp-tiddlers\n\t(future improvement because keeping track is comlex for humans)\n-->\n\\procedure delete-tag-state-tiddlers()\n\u003C$action-deletetiddler $filter\\u003CnewTagNameTiddler> \u003CstoreTitle> \u003CtagSelectionState>\/>\n\\end\n\n\u003C!-- trigger __toggle tag__ by keyboard -->\n\\procedure add-tag-actions()\n\u003C$let tag\u003C\u003C_tf.getTag>> >\n\t\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter:andtoggle\u003Ctag>trim/>\n\t\u003C%if \u003Ctag> :intersection\u003CsaveTiddler>get\u003CtagField>enlist-input %>\n\t\t\u003C!-- tag has been removed - do nothing -->\n\t\u003C%else%>\n\t\t\u003C\u003Cactions>>\n\t\u003C%endif%>\n\t\u003C\u003Cdelete-tag-state-tiddlers>>\n\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\yes\/>\n\u003C/$let>\n\\end\n\u003C!-- \u003C$action-log /> -->\n\n\u003C!-- ESC key removes the text from the input\nThe second ESC tries to close the \draft tiddler\\n-->\n\\procedure clear-tags-actions-inner()\n\u003C%if \u003CstoreTitle>hastext :else\u003CnewTagNameTiddler>hastext %>\n\t\u003C\u003Cdelete-tag-state-tiddlers>>\n\u003C%else%>\n\t\t\u003C\u003Ccancel-delete-tiddler-actions \cancel\>>\n\u003C%endif%>\n\\end\n\n\u003C!-- triggered by keyboard only -->\n\\procedure clear-tags-actions()\n\u003C$let userInput\u003C\u003C_tf.getUserInput>> >\n\t\u003C!-- this list __cannot__ be transformed to conditional IF. The list variable is used! -->\n\t\u003C$list filter\\u003CnewTagNameTiddler>gettext!match\u003CuserInput>\ >\n\t\t\u003C$list-empty>\n\t\t\t\u003C\u003Cclear-tags-actions-inner>>\n\t\t\u003C/$list-empty>\n\t\t\u003C$action-setfield $tiddler\u003C\u003CnewTagNameTiddler>> text\u003C\u003CuserInput>>/>\n\t\t\u003C$action-setfield $tiddler\u003C\u003CrefreshTitle>> text\yes\/>\n\t\u003C/$list>\n\u003C/$let>\n\\end\n\n\u003C!-- similar to add-tag-actions __but__ add-only -->\n\\procedure add-button-actions()\n\u003C$action-listops $tiddler\u003C\u003CsaveTiddler>> $field\u003C\u003CtagField>> $subfilter\\u003Ctag>trim\/>\n\u003C\u003Cactions>>\n\u003C\u003Cdelete-tag-state-tiddlers>>\n\u003C$action-sendmessage $message\tm-focus-selector\ $param\u003C\u003Ctf.get-tagpicker-focus-selector>>/>\n\\end\n\u003C!-- \u003C$action-log /> -->\n\n\u003C!-- create dropdown list -->\n\\procedure tag-picker-listTags(filter, suffix, empty)\n\u003C$let userInput\u003C\u003C_tf.getUserInput>> >\n\t\u003C$list filter\\u003CuserInput>minlength{$:/config/Tags/MinLength}limit1\\n\t\temptyMessage\\u003Cdiv classtc-search-results>{{$:/language/Search/Search/TooShort}}\u003C/div>\ variable\listItem\\n\t>\n\t\t\u003C$list filter\u003C\u003Cfilter>> variable\tag\>\n\t\t\t\u003C$list-empty>\n\t\t\t\t\u003Cspan class\tc-small-gap-left\>\u003C\u003Cempty>>\u003C/span>\n\t\t\t\u003C/$list-empty>\n\t\t\t\u003C!-- The buttonClasses filter is used to define tc-tag-button-selected state -->\n\t\t\t\u003C!-- tf.get-tagpicker-focus-selector has to be resolved for $:/core/ui/TagPickerTagTemplate,\n\t\t\t\tothwerwise qualify in tf.tagpicker-dropdown-id causes problems -->\n\t\t\t\u003C$let currentTiddler\u003C\u003Ctag>>\n\t\t\t\tbutton-classes`tc-btn-invisible ${\u003Ctag>addsuffix\u003Csuffix> :except\u003CtagSelectionState>gettext :then ~tc-tag-button-selected }$`\n\t\t\t\tget-tagpicker-focus-selector`${\u003Ctf.get-tagpicker-focus-selector>}$`\n\t\t\t>\n\t\t\t\t{{||$:/core/ui/TagPickerTagTemplate}}\n\t\t\t\u003C/$let>\n\t\t\u003C/$list>\n\t\u003C/$list>\n\u003C/$let>\n\\end\n\n\u003C!-- tag-picker-inner is the main function -->\n\\procedure tag-picker-inner()\n\u003Cdiv class{{{ tc-edit-add-tag \u003Ctf.tagpicker-dropdown-class> :andjoin }}}>\n\t\u003Cdiv class\tc-edit-add-tag-ui\>\n\t\t\u003Cspan class\tc-add-tag-name tc-small-gap-right\>\n\t\t\t\u003C$transclude $variable\keyboard-driven-input\\n\t\t\t\ttiddler\u003C\u003CnewTagNameTiddler>>\n\t\t\t\tstoreTitle\u003C\u003CstoreTitle>>\n\t\t\t\trefreshTitle\u003C\u003CrefreshTitle>>\n\t\t\t\tselectionStateTitle\u003C\u003CtagSelectionState>>\n\t\t\t\tinputAcceptActions\u003C\u003Cadd-tag-actions>>\n\t\t\t\tinputCancelActions\u003C\u003Cclear-tags-actions>>\n\t\t\t\ttag\input\\n\t\t\t\tplaceholder{{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\t\t\tfocusPopup\u003C\u003Ctf.tagpicker-dropdown-id>>\n\t\t\t\tclass\tc-edit-texteditor tc-popup-handle\\n\t\t\t\ttabindex\u003C\u003CtabIndex>>\n\t\t\t\tfocus{{{ {$:/config/AutoFocus}matchtagsthentrue :elsefalse }}}\n\t\t\t\tfilterMinLength{{$:/config/Tags/MinLength}}\n\t\t\t\tcancelPopups\u003C\u003CcancelPopups>>\n\t\t\t\tconfigTiddlerFilter\$:/core/macros/tag-picker\\n\t\t\t/>\n\t\t\u003C/span>\n\t\t\u003C$button popup\u003C\u003Ctf.tagpicker-dropdown-id>> class\tc-btn-invisible tc-btn-dropdown\\n\t\t\ttooltip{{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label{{$:/language/EditTemplate/Tags/Dropdown/Caption}}\n\t\t>\n\t\t\t{{$:/core/images/down-arrow}}\n\t\t\u003C/$button>\n\t\t\u003C%if \u003CstoreTitle>hastext %>\n\t\t\t\u003C$button actions\u003C\u003Cdelete-tag-state-tiddlers>> class\tc-btn-invisible tc-small-gap tc-btn-dropdown\\n\t\t\t\ttooltip{{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label{{$:/language/EditTemplate/Tags/ClearInput/Caption}}\n\t\t\t>\n\t\t\t\t{{$:/core/images/close-button}}\n\t\t\t\u003C/$button>\n\t\t\u003C%endif%>\n\t\t\u003Cspan class\tc-add-tag-button tc-small-gap-left\>\n\t\t\t\u003C$let tag\u003C\u003C_tf.getTag>>>\n\t\t\t\t\u003C$button set\u003C\u003CnewTagNameTiddler>> actions\u003C\u003Cadd-button-actions>> >\n\t\t\t\t\t{{$:/language/EditTemplate/Tags/Add/Button}}\n\t\t\t\t\u003C/$button>\n\t\t\t\u003C/$let>\n\t\t\u003C/span>\n\t\u003C/div>\n\t\u003Cdiv class\tc-block-dropdown-wrapper\>\n\t\t\u003C%if \u003Ctf.tagpicker-dropdown-id>hastext %>\n\t\t\t\u003Cdiv class\tc-block-dropdown tc-block-tags-dropdown fourcolumns\>\n\t\t\t\t\u003C$transclude $variable\tag-picker-listTags\ filter\u003C\u003CnonSystemTagsFilter>> suffix\-primaryList\ empty{{$:/language/EditTemplate/Tags/EmptyMessage}}/>\n\t\t\t\t\u003Chr>\n\t\t\t\t\u003C$transclude $variable\tag-picker-listTags\ filter\u003C\u003CsystemTagsFilter>> suffix\-secondaryList\ empty\\/>\n\t\t\t\u003C/div>\n\t\t\u003C%endif%>\n\t\u003C/div>\n\u003C/div>\n\\end\n\n\u003C!-- prepare all variables for tag-picker keyboard handling -->\n\\procedure tag-picker(actions, tagField:\tags\, tiddler, tagListFilter:\tagssortsortcolor\)\n\n\\function _tf.getUserInput() \u003CstoreTitle>gettext\n\\function _tf.getTag() \u003CnewTagNameTiddler>gettext\n\u003C!-- Use this function if tag-picker is a stand alone macro. Otherwise use \newTagNameTiddler\ defined for fieldmangler in EditTemplate -->\n\\function _tf.makeTagNameTiddler() $:/temp/NewTagName \u003CtagField>!matchtags :andjoin/ \u003Cqualify> :andjoin\n\n\u003C!-- keep those variables because they may \bleed\ into macros using old syntax -->\n\u003C!-- \nonSystemTagsFilter\, \systemTagsFilter\ __need to be the same__ as fields: \first-search-filter\, \second-search-filter\ -->\n\u003C$let\n\tpalette{{$:/palette}}\n\tcolourA{{{ \u003Cpalette>getindexforeground }}}\n\tcolourB{{{ \u003Cpalette>getindexbackground }}}\n\tfallbackTarget{{{ \u003Cpalette>getindextag-background }}}\n\n\tsaveTiddler{{{ \u003Ctiddler>isblankthen\u003CcurrentTiddler>else\u003Ctiddler> }}}\n\n\tnewTagNameTiddler{{{ newTagNameTiddlerisvariablethen\u003CnewTagNameTiddler> :else\u003C_tf.makeTagNameTiddler> }}}\n\tstoreTitle{{{ $:/temp/NewTagName/input \u003CtagField>!matchtags :andjoin/ \u003Cqualify> :andjoin }}}\n\n\tnewTagNameSelectionTiddlerQualified\u003C\u003Cqualify \$:/temp/NewTagName/selected-item\>>\n\ttagSelectionState{{{ \u003CnewTagNameSelectionTiddler>!match :else\u003CnewTagNameSelectionTiddlerQualified> }}}\n\n\trefreshTitle\u003C\u003Cqualify \$:/temp/NewTagName/refresh\>>\n\n\tnonSystemTagsFilter\subfilter\u003CtagListFilter>!issystemsearch:title\u003CuserInput>\\n\tsystemTagsFilter\subfilter\u003CtagListFilter>issystemsearch:title\u003CuserInput>\\n\n\tcancelPopups\yes\\n>\n\t\u003C$transclude $variable\tag-picker-inner\/>\n\u003C/$let>\n\\end\n},{title:$:/core/modules/editor-operations/text/fancyquotes.js,text:/*\\\ntitle: $:/core/modules/editor-operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\use strict\;\n\nexports\fancyquotes\ function(event,operation) {\nvar listtextoperation.selection;\n\n// ellipsis\n listtext listtext.replace(/\\.\\.\\./gm,…);\n// opening quotes\n listtext listtext.replace(/(\\\\n \\(\\t)\\\/gm,$1“);\n listtext listtext.replace(/(\\\\n \\(\\t)\\/gm,$1‘);\n//substitute prime and double prime if following numbers\n listtext listtext.replace(/(0-9)/gm,$1′);\n listtext listtext.replace(/(0-9)\/gm,$1″);\n//rearrange \. to .\\n// remove this one because it is only Americans who insist on this.\n// listtext listtext.replace(/\(.!?)/gm,$1”);\n// closing quote\n listtext listtext.replace(/(?!.,)\(\\n \\t\\))/gm,$1”$2);\n listtext listtext.replace(/\(!?., \\n \\t\\))/gm,”$1);\n listtext listtext.replace(/(\\n \\t)/gm,’$1);\n listtext listtext.replace(/(!?.)/gm,’$1);\n//apostrophes\n listtext listtext.replace(/(a-zA-Z)(a-zA-Z)/gm,$1’$2);\n//convert post sentence double space to single\n listtext listtext.replace(/(\\.?! ) /gm,$1);\n//convert x to × when between numbers\n// SIB: this broke URLs for me\n// listtext listtext.replace(/(0-9)x(0-9)/gm,$1×$2);\n//convert superscript small o to °\n listtext listtext.replace(/\\^\\^o\\^\\^/gm,°);\n//convert ens and ems\n// listtext listtext.replace(/--/gm,–);\n// listtext listtext.replace(/---/gm,—);\n\n\noperation.replacementlisttext;\n\toperation.cutStart operation.selStart;\n\toperation.cutEnd operation.selEnd;\n\toperation.newSelStart operation.selStart;\n\toperation.newSelEnd operation.selStart + operation.replacement.length;\n};\n\n})();\n,type:application/javascript,module-type:texteditoroperation,created:20160328022859019,modified:20201211141928688,tags:},{title:$:/core/templates/canonical-uri-external-image,created:20201031142744332,modified:20201031142744139,type:text/vnd.tiddlywiki,text:\u003C!--\n\nThis template is used to assign the _canonical_uri field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./extimage/\u003C$view field\title\ format\doubleurlencoded\/>},{title:$:/core/ui/DefaultSearchResultList,caption:{{$:/language/Search/DefaultResults/Caption}},created:20240406235423298,creator:soren,first-search-filter:!issystemsearch:title\u003CuserInput>sorttitlelimit250,modified:20240407000244129,modifier:soren,second-search-filter:!issystemsearch\u003CuserInput>sorttitlelimit250,tags:$:/tags/SearchResults,type:text/vnd.tiddlywiki,text:\\define plus-pao() +tagPAO\n\n\\define searchResultList()\n\\whitespace trim\n\n\u003C$list filter\\u003CuserInput>minlength1regexp(?i)^(Mr|Ms|Mx|The)\ variable_>\n//\u003Csmall>Name results:\u003C/small>//\n\t\u003C$list filter\\u003CuserInput>minlength1\ variable\ignore\>\n\t\u003C$list filter{{{ \u003CconfigTiddler>getfirst-search-filteraddsuffix\u003Cplus-pao> }}}>\n\t\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\n\t\u003C$transclude tiddler\$:/core/ui/ListItemTemplate\/>\n\t\u003C/span>\n\t\u003C/$list>\n\t\u003C/$list>\n\u003C/$list>\n\n\n//\u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>//\n\n\u003C$list filter\\u003CuserInput>minlength1\ variable\ignore\>\n\u003C$list filter{{{ \u003CconfigTiddler>getfirst-search-filter }}}>\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\n\u003C$transclude tiddler\$:/core/ui/ListItemTemplate\/>\n\u003C/span>\n\u003C/$list>\n\u003C/$list>\n\n//\u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>//\n\n\u003C$list filter\\u003CuserInput>minlength1\ variable\ignore\>\n\u003C$list filter{{{ \u003CconfigTiddler>getsecond-search-filter }}}>\n\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-secondaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\n\u003C$transclude tiddler\$:/core/ui/ListItemTemplate\/>\n\u003C/span>\n\u003C/$list>\n\u003C/$list>\n\n\\end\n\u003C\u003CsearchResultList>>\n},{title:$:/core/ui/EditorToolbar/linkify,caption:{{$:/language/Buttons/Linkify/Caption}},condition:\u003CtargetTiddler>!hastype \u003CtargetTiddler>typetext/vnd.tiddlywiki,created:20210928031136147,creator:soren,description:{{$:/language/Buttons/Linkify/Hint}},icon:$:/core/images/linkify,modified:20210928031136215,modifier:soren,shortcuts:((linkify)),tags:$:/tags/EditorToolbar,type:text/vnd.tiddlywiki,text:\u003C$action-sendmessage\n\t$message\tm-edit-text-operation\\n\t$param\wrap-selection\\n\tprefix\\\n\tsuffix\\\n/>\n},{title:$:/core/ui/EditorToolbar/transcludify,caption:{{$:/language/Buttons/Transcludify/Caption}},condition:\u003CtargetTiddler>!hastype \u003CtargetTiddler>typetext/vnd.tiddlywiki,created:20210928031136147,creator:soren,description:{{$:/language/Buttons/Transcludify/Hint}},icon:$:/core/images/transcludify,modified:20210928031136239,modifier:soren,shortcuts:((transcludify)),tags:$:/tags/EditorToolbar,type:text/vnd.tiddlywiki,text:\u003C$action-sendmessage\n\t$message\tm-edit-text-operation\\n\t$param\wrap-selection\\n\tprefix\{{\\n\tsuffix\}}\\n/>\n},{title:$:/core/ui/MoreSideBar/Recent,caption:{{$:/language/SideBar/Recent/Caption}},created:20221201233103301,creator:soren,modified:20240601154652772,modifier:soren,tags:$:/tags/MoreSideBar,type:text/vnd.tiddlywiki,text:\\define ifEmpty() \u003Cspan class\sib-recent-pane-svg-height-override\>{{$:/core/images/locked-padlock}}\u003C/span>\n\u003C!-- emptyMessage\u003C\u003CifEmpty>> -->\n\n\\define timeline-link() \u003C$link to{{!!title}}>\u003C\u003Ctimeline-title>>\u003C/$link> \u003C% if allcurrenttagPublic %>\u003Cspan class\sib-recent-pane-svg-height-override\>{{$:/core/images/globe}}\u003C/span>\u003C% endif %>\n\nFor a table of recently created and updated ideas and their summaries, visit RecentIdeas.\n\n---\n\n\u003C$macrocall $name\timeline\ format{{$:/language/RecentChanges/DateFormat}}/>\n\n\u003Cstyle>\n.sib-recent-pane-svg-height-override svg {\n\theight: 12px;\n\twidth: 12px;\n\tpadding: 0;\n\tmargin-bottom: -1px;\n}\n\u003C/style>},{title:$:/core/ui/SideBar/Open,caption:{{$:/language/SideBar/Open/Caption}},created:20201126152706945,modified:20251011165009905,modifier:soren,tags:$:/tags/SideBar,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n\u003C$action-listops $tiddler\u003C\u003Ctv-story-list>> $subfilter\+insertbefore:currentTiddler\u003CactionTiddler>\/>\n\\end\n\n\\define placeholder()\n\u003Cdiv class\tc-droppable-placeholder\/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n\u003C$droppable actions\u003C\u003Cdrop-actions>> enable\u003C\u003Ctv-allow-drag-and-drop>>>\n\u003C\u003Cplaceholder>>\n\u003Cdiv>\n$button$\n\u003C/div>\n\u003C/$droppable>\n\\end\n\n\u003Cdiv class\tc-sidebar-tab-open\>\n\u003C$list filter\list\u003Ctv-story-list>\ history\u003C\u003Ctv-history-list>> storyview\pop\>\n\u003Cdiv class\tc-sidebar-tab-open-item\>\n\u003C$macrocall $name\droppable-item\ button\\\\u003C$button message\tm-close-tiddler\ tooltip{{$:/language/Buttons/Close/Hint}} aria-label{{$:/language/Buttons/Close/Caption}} class\tc-btn-invisible tc-btn-mini\>{{$:/core/images/close-button}}\u003C/$button> \u003C$link to{{!!title}}>\u003C$view field\title\/>\u003C/$link>\\\/>\n\u003C/div>\n\u003C/$list>\n\u003C$tiddler tiddler\\>\n\u003Cdiv>\n\u003C$macrocall $name\droppable-item\ button\\\\u003C$button message\tm-close-all-tiddlers\ class\tc-btn-invisible tc-btn-mini\>\u003C\u003Clingo Button>>\u003C/$button>\\\/>\n\u003C/div>\n\u003C/$tiddler>\n\u003C/div>\n\n{{$:/tzk/StorySaver/Saver}}},{title:$:/core/ui/SideBar/Recent,caption:{{$:/language/SideBar/Recent/Caption}},created:20240601154527220,creator:soren,modified:20240601154615810,modifier:soren,tags:$:/tags/SideBar,type:text/vnd.tiddlywiki,text:{{$:/core/ui/MoreSideBar/Recent}}\n\n\u003C!--\n\u003C$macrocall $name\timeline\ format{{$:/language/RecentChanges/DateFormat}}/>\n-->\n},{title:$:/core/ui/SideBarSegments/tabs,created:20210731164211393,creator:soren,modified:20251011162725689,modifier:soren,tags:$:/tags/SideBarSegment,type:text/vnd.tiddlywiki,text:\\define isEnabled() addprefix$:/config/zettelkasten/SideBar/Visibility/get{$:/config/sib/CurrentEditionPublicity} -no\n\\define lacksDefinedValue() addprefix$:/config/zettelkasten/SideBar/Visibility/!istiddler\n\n\u003Cdiv class\tc-sidebar-lists tc-sidebar-tabs\>\n\n\u003C$list filter\allshadows+tiddlerstag$:/tags/SideBar!hasdraft.offilter\u003ClacksDefinedValue>\>\nThe tiddler \u003C\u003CcurrentTiddler>> is tagged $:/tags/SideBar, but lacks a visibility tiddler. Please navigate to $:/tzk/gui/SidebarTabSelector and select private and/or public visibility. (If you want to keep this tiddler in your wiki without showing it in your sidebar in either edition, navigate there and check, then uncheck a box. This will create the visibility tiddler while leaving visibility off.)\n\u003C/$list>\n\n\u003C$macrocall $name\tabs\ tabsList\allshadows+tiddlerstag$:/tags/SideBar!hasdraft.offilter\u003CisEnabled>\ default{{$:/config/DefaultSidebarTab}} state\$:/state/tab/sidebar\ class\tc-sidebar-tabs-main\ explicitState\$:/state/tab/sidebar--595412856\/>\n\n\u003C/div>\n},{title:$:/core/ui/TiddlerIcon,created:20240829024845326,creator:soren,modified:20240927111256290,modifier:soren,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\u003C$let tiddlerIcon{{{ \u003CcurrentTiddler> :cascadeallshadows+tiddlerstag$:/tags/TiddlerIconFilter!isdraftgettext }}}>\n\u003C$list filter\\u003CtiddlerIcon>!isblank\ variable\ignore\>\n\t\u003C% if allcurrentregexp^fas %>\n\t\t\u003C$transclude $tiddler\$:/Templates/Automatic/TiddlerTypeIconFa\ faspec\u003C\u003CtiddlerIcon>>/>\n\t\u003C% else %>\n\t\t\u003C$transclude tiddler\u003C\u003CtiddlerIcon>>/>\n\t\u003C% endif %>\n\u003C/$list>\n\u003C/$let>\n},{title:$:/core/ui/ViewTemplate/subtitle,created:20210611015734693,creator:soren,modified:20251011164603410,modifier:soren,tags:$:/tags/ViewTemplate,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\n\u003C$reveal type\nomatch\ stateTitle\u003C\u003Cfolded-state>> text\hide\ tag\div\ retain\yes\ animate\yes\>\n\u003Cdiv class\tc-subtitle\>\n\u003Cdiv>\n\u003Ci class\fa fa-history\/> Created \u003C$view field\created\ format\date\ template{{$:/language/Tiddler/DateFormat}} />\n\u003C/div>\n\u003Cdiv>\n\u003Ci class\fa fa-clock\/> Updated \u003C$view field\modified\ format\date\ template{{$:/language/Tiddler/DateFormat}} />\n\u003C$transclude tiddler\$:/tzk/Templates/Automatic/UpdateStatus\/>\n\u003C/div>\n\u003C$list filter\allcurrenthasdescription\>\n\t\u003Cdiv>\n\t\u003Ci class\fa fa-gem\/> {{!!description}}\n\t\u003C/div>\n\u003C/$list>\n\u003C% if allcurrenthaspronouns %>\n\t\u003Cdiv>\n\t\t\u003Ci class\fas fa-transgender\/> {{!!pronouns}}\n\t\u003C/div>\n\u003C% endif %>\n\u003C% if m2.ffMicrolinkMetadataLine %>\n\u003C% if allcurrenthasmicrolink %>\n\t\u003Cdiv>\n\t\t\u003Ci class\fas fa-hashtag\/> /{{!!microlink}}\n\t\u003C/div>\n\u003C% endif %>\n\u003C% endif %>\n\u003C/div>\n\u003C/$reveal>},{title:$:/core/ui/ViewTemplate/title/default,created:20240829023801296,creator:soren,modified:20240829023809441,modifier:soren,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\u003Ch2 class\tc-title\>\n\t\u003C$macrocall $name\camel-wrap\ humpytext{{!!title}}/>\n\u003C/h2>\n},{title:$:/DefaultTiddlers,created:20200118003419923,creator:soren,modified:20200804182428572,modifier:soren,type:text/vnd.tiddlywiki,text:PublicHomepage},{title:$:/favicon.ico,type:image/vnd.microsoft.icon,created:20240819213032594,creator:soren,modified:20240819213034074,modifier:soren,_canonical_uri:./extimage/%2524%253A%252Ffavicon.ico},{title:$:/Import,modified:20260103153637674,modifier:soren,status:complete,type:text/vnd.tiddlywiki,text:The following tiddlers were imported:\n\n# slow-down.png},{title:$:/inmysocks/macros/day-diff.js,text:/*\\\ntitle: $:/inmysocks/macros/day-diff.js\ntype: application/javascript\nmodule-type: macro\n\nTakes two dates and returns their difference in days\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\use strict\;\n\n/*\nInformation about this macro\n*/\n\nexports.name \day-diff\;\n\nexports.params \n\t{name: \year1\},\n\t{name: \month1\},\n\t{name: \day1\},\n\t{name: \year2\},\n\t{name: \month2\},\n\t{name: \day2\}\n;\n\n/*\nRun the macro\n*/\nexports.run function(year1, month1, day1, year2, month2, day2) {\n\t//Make each date object.\n\tvar date1 new Date(year1, Number(month1)+Number(1), day1);\n\tvar date2 new Date(year2, Number(month2)+Number(1), day2);\n\n\t//Find difference in milliseconds.\n\tvar elapsed date2.getTime()-date1.getTime();\n\n\t//Number of milliseconds in a day.\n\tvar dayMS 86400000; \n\n\t//Convert milliseconds to year months and days\n\tvar days_diff Math.floor(elapsed/dayMS);\n\t\n\tvar result days_diff;\n\n\treturn result;\n};\n\n})();\n,type:application/javascript,module-type:macro,created:20150225185218583,modified:20211204021739668,tags:},{title:$:/isEncrypted,text:no},{title:$:/language/Snippets/FunctionDefinition,caption:Function definition,created:20250211045905441,creator:soren,modified:20250211045906722,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\\function f.name(param1,param2:\default value\) \u003Cparam1>!isblankelse\u003Cparam2>\n\n\u003C\u003Cf.name>>\n},{title:$:/language/Snippets/ListByTag,caption:List of tiddlers by tag,created:20250211045913225,creator:soren,modified:20250211045914224,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C\u003Clist-links \tagtasksorttitle\>>\n},{title:$:/language/Snippets/MacroDefinition,caption:Macro definition,created:20250211045936664,creator:soren,modified:20250211045937621,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\\define macroName(param1:\default value\,param2)\nText of the macro\n\\end\n},{title:$:/language/Snippets/ProcedureDefinition,caption:Procedure definition,created:20250211045857620,creator:soren,modified:20250211045859189,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\\procedure procName(param1:\default value\,param2)\nYour text comes here.\n\\end\n},{title:$:/language/Snippets/Table4x3,caption:Table with 4 columns by 3 rows,created:20250211045922334,creator:soren,modified:20250211045923475,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n},{title:$:/language/Snippets/TableOfContents,caption:Table of Contents,created:20250211045957885,creator:soren,modified:20250211045958892,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003Cdiv class\tc-table-of-contents\>\n\n\u003C\u003Ctoc-selective-expandable TableOfContents>>\n\n\u003C/div>},{title:$:/layout,created:20210615031007914,modified:20210615030805720,type:text/vnd.tiddlywiki,text:$:/core/ui/PageTemplate},{title:$:/palette,created:20200118025758811,creator:soren,modified:20240306033854531,modifier:soren,type:text/vnd.tiddlywiki,text:$:/palettes/BlueZettel},{title:$:/palettes/BlueZettel,text:alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: \u003C\u003Ccolour foreground>>\ndragger-background: \u003C\u003Ccolour foreground>>\ndragger-foreground: \u003C\u003Ccolour background>>\ndropdown-background: \u003C\u003Ccolour background>>\ndropdown-border: \u003C\u003Ccolour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nfootnote-number: #ff5500\nhighlight-background: #ffff00\nhighlight-foreground: #000000\nmenubar-background: \u003C\u003Ccolour tab-background>>;\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: \u003C\u003Ccolour foreground>>\nmodal-background: \u003C\u003Ccolour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: \u003C\u003Ccolour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.7)\nsidebar-foreground: #555555\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: \u003C\u003Ccolour page-background>>\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: \u003C\u003Ccolour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: \u003C\u003Ccolour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: \u003C\u003Ccolour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: \u003C\u003Ccolour background>>\ntiddler-border: \u003C\u003Ccolour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: \u003C\u003Ccolour background>>\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888,type:application/x-tiddler-dictionary,color-scheme:light,created:20240305032822932,creator:soren,description:Sorens test theme,modified:20240305040719772,modifier:soren,name:BlueZettel,tags:$:/tags/Palette},{author:Alan Aldrich,core-version:5.1.16,created:20170212060612535,dependents:,description:TiddlyTables,list:readme,modified:20200322003951511,plugin-type:plugin,title:$:/plugins/aaldrich/tables,version:0.6.21,type:application/json,text:{\tiddlers\:{\$:/plugins/aaldrich/tables/button/image\:{\title\:\$:/plugins/aaldrich/tables/button/image\,\created\:\20190725080524516\,\modified\:\20190727005459045\,\tags\:\ $:/tags/Image\,\text\:\\u003Csvg class\\\tc-image-button\\\ viewBox\\\0 0 128 128\\\ width\\\22pt\\\ height\\\22pt\\\>\\n \u003Crect x\\\0\\\ y\\\0\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\20\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\40\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\60\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\80\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\100\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\120\\\ width\\\128\\\ height\\\8\\\>\u003C/rect>\\n \u003Crect x\\\0\\\ y\\\0\\\ width\\\8\\\ height\\\128\\\>\u003C/rect>\\n \u003Crect x\\\40\\\ y\\\0\\\ width\\\8\\\ height\\\128\\\>\u003C/rect>\\n \u003Crect x\\\80\\\ y\\\0\\\ width\\\8\\\ height\\\128\\\>\u003C/rect>\\n \u003Crect x\\\120\\\ y\\\0\\\ width\\\8\\\ height\\\128\\\>\u003C/rect>\\n\u003C/svg>\},\$:/plugins/aaldrich/tables/button\:{\title\:\$:/plugins/aaldrich/tables/button\,\caption\:\{{$:/plugins/aaldrich/tables/button/image}} new table\,\created\:\20170205062652787\,\description\:\Create a new table\,\modified\:\20191212071246997\,\tags\:\$:/tags/PageControls\,\text\:\\\\\define newTableText()\\n\u003C\u003Ctable \\\$(newTableTitle)$\\\>>\\n\\\\end\\n\\n\\\\define makeNewTable()\\n\\n\u003C$set name\\\newTableTitle\\\ value{{$:/temp/tables/button/generate-new-table-name}} >\\n\u003C$action-setfield $tiddler{{$:/temp/tables/button/generate-new-table-name}} text\u003C\u003CnewTableText>>/>\\n\u003C/$set>\\n\u003C$action-navigate $to{{$:/temp/tables/button/generate-new-table-name}}/>\\n\u003C$action-deletetiddler $tiddler\\\$:/temp/tables/button/generate-new-table-name\\\/>\\n\\\\end\\n\\n\u003C$button class\u003C\u003Ctv-config-toolbar-class>> tooltip\\\Create new table\\\ aria-label{{$:/plugins/aaldrich/tables/button!!caption}} actions\u003C\u003CmakeNewTable>>>\\n\u003C$list filter\\\\u003Ctv-config-toolbar-icons>prefixyes\\\>\\n{{$:/plugins/aaldrich/tables/button/image}}\\n\u003C/$list>\\n\u003C$list filter\\\\u003Ctv-config-toolbar-text>prefixyes\\\>\\n\u003Cspan class\\\tc-btn-text\\\>\u003C$text text\\\new table\\\/>\u003C/span>\\n\u003C/$list>\\n\u003C$action-createtiddler $basetitle{{$:/plugins/aaldrich/tables/defaults!!tbl-default-title}}\\n$savetitle\\\$:/temp/tables/button/generate-new-table-name\\\\\ntbl-add-records{{$:/plugins/aaldrich/tables/defaults!!tbl-add-records}}\\ntbl-anything{{$:/plugins/aaldrich/tables/defaults!!tbl-anything}}\\ntbl-button-actions{{$:/plugins/aaldrich/tables/defaults!!tbl-button-actions}}\\ntbl-button-icon{{$:/plugins/aaldrich/tables/defaults!!tbl-button-icon}}\\ntbl-button-tip{{$:/plugins/aaldrich/tables/defaults!!tbl-button-tip}}\\ntbl-caption{{$:/plugins/aaldrich/tables/defaults!!tbl-caption}}\\ntbl-checkbox-actions-selected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-selected}}\\ntbl-checkbox-actions-unselected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-unselected}}\\ntbl-checkbox-field{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-field}}\\ntbl-checkbox-tag{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tag}}\\ntbl-checkbox-tip{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tip}}\\ntbl-checkbox-value-selected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-selected}}\\ntbl-checkbox-value-unselected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-unselected}}\\ntbl-class{{$:/plugins/aaldrich/tables/defaults!!tbl-class}}\\ntbl-columns{{$:/plugins/aaldrich/tables/defaults!!tbl-columns}}\\ntbl-expand{{$:/plugins/aaldrich/tables/defaults!!tbl-expand}}\\ntbl-filter{{$:/plugins/aaldrich/tables/defaults!!tbl-filter}}\\ntbl-show-caption{{$:/plugins/aaldrich/tables/defaults!!tbl-show-caption}}\\ntbl-show-colgroup{{$:/plugins/aaldrich/tables/defaults!!tbl-show-colgroup}}\\ntbl-show-edit{{$:/plugins/aaldrich/tables/defaults!!tbl-show-edit}}\\ntbl-show-footer{{$:/plugins/aaldrich/tables/defaults!!tbl-show-footer}}\\ntbl-show-header{{$:/plugins/aaldrich/tables/defaults!!tbl-show-header}}\\ntbl-show-mode{{$:/plugins/aaldrich/tables/defaults!!tbl-show-mode}}\\ntbl-show-pagination{{$:/plugins/aaldrich/tables/defaults!!tbl-show-pagination}}\\ntbl-limit{{$:/plugins/aaldrich/tables/defaults!!tbl-limit}}\\ntbl-mode{{$:/plugins/aaldrich/tables/defaults!!tbl-mode}}\\ntbl-page-marker{{$:/plugins/aaldrich/tables/defaults!!tbl-page-marker}}\\ntbl-sort-by{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-by}}\\ntbl-sort-negate{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-negate}}\\ntbl-sort-type{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-type}}\\ntbl-style-colgroup{{$:/plugins/aaldrich/tables/defaults!!tbl-style-colgroup}}\\ntbl-style-container{{$:/plugins/aaldrich/tables/defaults!!tbl-style-container}}\\ntbl-style-table{{$:/plugins/aaldrich/tables/defaults!!tbl-style-table}}\\n/>\\n\u003C/$button>\},\$:/plugins/aaldrich/tables/defaults\:{\title\:\$:/plugins/aaldrich/tables/defaults\,\text\:\all of a fundamental category: alltiddlers+shadows+tags+orphans+missing+current\\nbacklinks to input: backlinks\\ncontains - list field //contains// value ``!``: contains:listENTER VALUE HERE\\ndays in past/future ``!``: days:modifiedENTER + OR - NUMBER OF DAYS HERE\\nfield has value ``!``: field:titleENTER VALUE HERE\\nfields of input: fields\\nget value of field: getENTER FIELD HERE\\ngetindex value of property: getindexENTER PROPERTY HERE\\nhas field ``!``: hasENTER FIELD HERE\\nindexes of input: indexes\\nis a fundamental category ``!``: iscurrent OR image OR missing OR orphan OR shadow OR tag OR tiddler OR variable OR blank\\nlinks of input: links\\nlist titles of list field ``!``: listENTER TIDDLER!!FIELD REFERENCE HERE\\nlisted on field of input: listedENTER OPTIONAL FIELD HERE\\nprefix on input titles ``!``: prefixENTER TITLE PREFIX HERE\\nrange of numbers ``!``: range1, 25, 5\\nregexp pattern ``!``: regexpENTER REG EXP HERE\\nreverse order of input: reverse\\nsameday as field: sameday:modifiedENTER YYYYMMDD HERE\\nsearch ``!``: search:tags, text, title:literal,whitespace,regexp,words,casesensitive,anchoredENTER SEARCH TEXT HERE\\nsubfilter ``!``: subfilter\u003CENTER VARIABLE OR REFERENCE HERE>\\nsuffix on input titles ``!``: suffixENTER TITLE SUFFIX HERE\\ntag found on input ``!``: tagENTER TAG NAME HERE\\ntagging matches input: tagging\\ntags of input: tags\\nuntagged titles of input ``!``: untagged\,\type\:\application/x-tiddler-dictionary\,\created\:\20170207075434434\,\modified\:\20191214043748895\,\tags\:\\,\tbl-add-records\:\\,\tbl-anything\:\\,\tbl-button-actions\:\\,\tbl-button-icon\:\{{$:/core/images/menu-button}}\,\tbl-button-tip\:\\,\tbl-caption\:\{{!!title}}\,\tbl-caption-mode\:\inline\,\tbl-checkbox-actions-selected\:\\,\tbl-checkbox-actions-unselected\:\\,\tbl-checkbox-field\:\\,\tbl-checkbox-tag\:\\,\tbl-checkbox-tip\:\\,\tbl-checkbox-value-selected\:\\,\tbl-checkbox-value-unselected\:\\,\tbl-class\:\tbl-style-default\,\tbl-columns\:\title modified tags\,\tbl-default-date-format\:\0MM/0DD/YY hh12:0mmAM\,\tbl-default-title\:\New Table\,\tbl-expand\:\\,\tbl-filter\:\!issystemsearch\,\tbl-limit\:\10\,\tbl-limit-choices\:\5 10 15 20 25 30 40 50\,\tbl-mode\:\normal\,\tbl-page-marker\:\\,\tbl-show-caption\:\true\,\tbl-show-colgroup\:\false\,\tbl-show-edit\:\true\,\tbl-show-footer\:\false\,\tbl-show-header\:\true\,\tbl-show-mode\:\true\,\tbl-show-pagination\:\auto\,\tbl-sort-by\:\title\,\tbl-sort-negate\:\false\,\tbl-sort-type\:\nsort\,\tbl-style-colgroup\:\\,\tbl-style-container\:\\,\tbl-style-table\:\width:100%;\,\tbl-temp-default-body\:\$:/plugins/aaldrich/tables/template/body/default\,\tbl-temp-default-body-edit\:\$:/plugins/aaldrich/tables/template/body/edit-input\,\tbl-temp-default-expand\:\$:/plugins/aaldrich/tables/template/expand/transclude\,\tbl-temp-default-foot\:\$:/plugins/aaldrich/tables/template/footer/default\,\tbl-temp-default-head\:\$:/plugins/aaldrich/tables/template/header/default\,\tbl-title-type-code\:\\u003C$list filter\\\\u003CcurrentRecord>isshadow\\\>^^s^^\u003C/$list>\u003C$list filter\\\\u003CcurrentRecord>istiddlerisshadow\\\>^^*^^\u003C/$list>\,\tbl-title-type-show\:\true\},\$:/plugins/aaldrich/tables/editor/navigation\:{\title\:\$:/plugins/aaldrich/tables/editor/navigation\,\created\:\20190727082624393\,\modified\:\20191208103316562\,\tags\:\\,\text\:\\u003C$select tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ field\\\tbl-edit-page\\\>\\n\u003Coptgroup label\\\Data\\\>\\n\u003Coption>Records\u003C/option>\\n\u003Coption>Columns\u003C/option>\\n\u003Coption>Sorting\u003C/option>\\n\u003Coption value\\\Limit\\\>Limit/Pagination\u003C/option>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Style\\\>\\n\u003Coption value\\\Theme\\\>Theme (Stylesheet)\u003C/option>\\n\u003Coption value\\\Override\\\>Override (Inline Styles)\u003C/option>\\n\u003Coption value\\\Colgroups\\\>Column Groups\u003C/option>\\n\u003Coption>Advanced Styles\u003C/option>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Features\\\>\\n\u003Coption>Header/Footer\u003C/option>\\n\u003Coption>Caption\u003C/option>\\n\u003Coption value\\\Edit\\\>Editor/Mode\u003C/option>\\n\u003Coption>Defaults\u003C/option>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Special Columns\\\>\\n\u003Coption>Expand\u003C/option>\\n\u003Coption>Button\u003C/option>\\n\u003Coption>Checkbox\u003C/option>\\n\u003Coption>Anything\u003C/option>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Help\\\>\\n\u003Coption>Getting Started\u003C/option>\\n\u003Coption>About\u003C/option>\\n\u003C/optgroup>\\n\u003C/$select>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ style\\\padding:0 0 0 6px;\\\>\\n \u003C$action-sendmessage $message\\\tm-close-tiddler\\\ />\\n \u003C$action-deletetiddler $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\/> Close\\n\u003C/$button>\},\$:/plugins/aaldrich/tables/editor/open\:{\title\:\$:/plugins/aaldrich/tables/editor/open\,\created\:\20190726023217378\,\modified\:\20191215055334115\,\tags\:\\,\text\:\\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-target\\\ text{{!!title}} >\\n\u003C$reveal type\\\match\\\ state\\\!!tbl-show-edit\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\table options\\\>\\n \u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-edit-target{{!!title}} />\\n \u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-edit-page\\\Records\\\ />\\n \u003C$action-sendmessage $message\\\tm-modal\\\ $param\\\$:/plugins/aaldrich/tables/editor/view\\\ />\\n{{$:/core/images/options-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\!!tbl-show-mode\\\ text\\\true\\\>\\n\u003C$reveal type\\\nomatch\\\ state\\\!!tbl-mode\\\ text\\\edit\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\edit mode\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-mode\\\edit\\\ />\\n{{$:/core/images/edit-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\!!tbl-mode\\\ text\\\edit\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\normal mode\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-mode\\\normal\\\ />\\n{{$:/core/images/done-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\u003C/$reveal>\},\$:/plugins/aaldrich/tables/editor/templates\:{\title\:\$:/plugins/aaldrich/tables/editor/templates\,\created\:\20191205205444801\,\modified\:\20191208062747162\,\tbl-add-records\:\\,\tbl-anything\:\\,\tbl-button-actions\:\\u003C$action-sendmessage $message\\\tm-new-tiddler\\\ $param\u003C\u003CcurrentRecord>>/>\,\tbl-button-icon\:\{{$:/core/images/clone-button}}\,\tbl-button-tip\:\clone template\,\tbl-caption\:\Column Templates\,\tbl-checkbox-actions-selected\:\\,\tbl-checkbox-actions-unselected\:\\,\tbl-checkbox-field\:\\,\tbl-checkbox-tag\:\\,\tbl-checkbox-tip\:\\,\tbl-checkbox-value-selected\:\\,\tbl-checkbox-value-unselected\:\\,\tbl-class\:\tbl-style-tight\,\tbl-columns\:\tbl-expand title tbl-column-list tbl-noedit\,\tbl-expand\:\$:/plugins/aaldrich/tables/template/expand/edit\,\tbl-filter\:\allshadows+tiddlerstag$:/tags/table/BodyTemplateallshadows+tiddlerstag$:/tags/table/HeaderTemplateallshadows+tiddlerstag$:/tags/table/FooterTemplate-$:/plugins/aaldrich/tables/template/body/default-$:/plugins/aaldrich/tables/template/header/default-$:/plugins/aaldrich/tables/template/footer/default\,\tbl-limit\:\9999999\,\tbl-mode\:\edit\,\tbl-page-marker\:\\,\tbl-show-caption\:\false\,\tbl-show-colgroup\:\false\,\tbl-show-edit\:\false\,\tbl-show-footer\:\false\,\tbl-show-header\:\true\,\tbl-show-pagination\:\auto\,\tbl-sort-by\:\title\,\tbl-sort-negate\:\false\,\tbl-sort-type\:\nsort\,\tbl-style-colgroup\:\\,\tbl-style-container\:\\,\tbl-style-table\:\width:100%;\,\text\:\\u003C\u003Ctable>>\},\$:/plugins/aaldrich/tables/editor/view\:{\title\:\$:/plugins/aaldrich/tables/editor/view\,\created\:\20190722221724072\,\footer\:\\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ style\\\padding:0 0 0 6px;\\\> \u003C$action-sendmessage $message\\\tm-close-tiddler\\\ /> \u003C$action-deletetiddler $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\/> Close \u003C/$button>\,\modified\:\20191212071106904\,\revision\:\0\,\subtitle\:\\u003Ch2>\u003C$text text{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}}/>\u003C/h2>{{||$:/plugins/aaldrich/tables/editor/navigation}}\,\tags\:\\,\text\:\\u003C$keyboard actions\\\\\\\\\\u003C$action-sendmessage $message\\\tm-close-tiddler\\\ />\u003C$action-deletetiddler $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\/>\\\\\\\\\ key\\\ctrl-enter\\\>\\n\u003Cspan class\\\tbl-edit-menu\\\>\\n\u003C$set name\\\currentTable\\\ value{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} >\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Records\\\>\\n\\nQuery Records (tbl-filter) - filter syntax\u003Cbr>\\n\u003C$edit-text class\\\tbl-edit-wide\\\ tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-filter\\\/>\\n\u003Cspan class\\\tc-popup-keep\\\>\\n\u003C$button popup\\\$:/state/tables/filter/preset-dropdown\\\ class\\\tc-btn-invisible\\\>\\n {{$:/core/images/down-arrow}}\\n\u003C/$button>\u003Cbr>\\n\u003C/span>\\n\u003C$reveal class\\\tc-block-dropdown\\\ state\\\$:/state/tables/filter/preset-dropdown\\\ type\\\popup\\\ position\\\belowleft\\\ animate\\\yes\\\>\\n\u003C$list filter\\\$:/plugins/aaldrich/tables/defaultsindexes\\\ variable\\\filterList\\\>\\n\u003C$list filter\\\$:/plugins/aaldrich/tables/defaultsgetindex\u003CfilterList>\\\ variable\\\filterValues\\\ >\\n\u003C$set name\\\existingTableFilter\\\ filter\\\{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}gettbl-filter\\\>\\n\u003C$set name\\\existingTableFilterPrefix\\\ filter\\\{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}gettbl-filter\\\ value\\\+\\\ emptyValue\\\\\\>\\n\u003Ca style\\\margin:0 0 0 0;padding:0 0 0 0;\\\ >\u003C$button style\\\display:block;width:100%;text-align:left;margin:0 0 0 0;padding:4px 4px 4px 4px;\\\ actions\\\\\\\\\\u003C$action-setfield $tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} tbl-filter\u003C\u003CtableFilterPick>> />\\\\\\\\\ class\\\tc-btn-invisible\\\>\u003C\u003CfilterList>>\u003C/$button>\u003C/a>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/$reveal>\u003Cbr>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-presets\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-presets\\\ setTotrue >edit presets\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-presets\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-presets\\\ setTofalse>close\\n\u003C/$button>\u003Cbr>\\n\u003C$edit-text tiddler\\\$:/plugins/aaldrich/tables/defaults\\\ field\\\text\\\/>\\n\u003C/$reveal>\u003Cbr>\u003Cbr>\\nEnter Records Manually (tbl-add-records) - filter syntax\u003Cbr>\\n\u003C$edit-text tagtextarea tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-add-records\\\/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Columns\\\>\\n\\nColumns to Display (tbl-columns) - filter syntax\u003Cbr>\\n\u003C$edit-text class\\\tbl-edit-wide\\\ tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-columns\\\/>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-columns\\\ text\\\true\\\>\\n\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-columns\\\ setTo\\\false\\\ >close\u003C/$button>\\n\\n!!Assign/Modify Column Templates\\n\\nUse the table below to assign fields/indexes to column templates by adding the field/index name to tbl-column-list. \\n\\nUnassigned fields/indexes will inherit one of three default templates:\\n\\n*~$:/plugins/aaldrich/tables/template/header/default\u003Cbr>\\n*~$:/plugins/aaldrich/tables/template/body/default\u003Cbr>\\n*~$:/plugins/aaldrich/tables/template/footer/default\u003Cbr>\\n\\n(Optional) Restrict a field/index from edit mode by adding the field/index name to tbl-noedit.\\n\\n{{$:/plugins/aaldrich/tables/editor/templates}}\\n\\nNote: Ensure each field/index name is only assigned to one of each template type - header, body and footer.\u003Cbr>\u003Cbr>\\n\\n!!Create New Column Template\u003Cbr>\\n\\n__Create Blank Template__\u003Cbr>\\n\\n\u003C$edit-text tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ field\\\tbl-new-template-name\\\ placeholder\\\Template name (no spaces)...\\\ size\\\30\\\/>\\n\u003C$set name\\\newTemplateTitle\\\ filter\\\{$:/temp/tables/editor/settings-page-vars!!tbl-new-template-name}+addprefix/+addprefix{$:/temp/tables/editor/settings-page-vars!!tbl-new-template-type}+addprefix$:/plugins/aaldrich/tables/template/\\\ value\u003C\u003CnewTemplateTitle>> noValue\\\\\\ >\\n\u003C$select tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ field\\\tbl-new-template-type\\\ >\\n\u003Coption>header\u003C/option>\\n\u003Coption>body\u003C/option>\\n\u003Coption>footer\u003C/option>\\n\u003C/$select>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-new-template-name\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ >\\n\u003C$action-setfield $tiddler\u003C\u003CnewTemplateTitle>> tags\\\$:/tags/table/BodyTemplate\\\ tbl-column-list\\\\\\ tbl-noedit\\\\\\/>\\n\u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-new-template-name\\\\\\/> create\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$set>\\n\\n__Create Template Manually__\u003Cbr>\\n\\n(Tip) One way to create a new template is to clone and modify an existing one.\u003Cbr>\\n\\nRequired Tags:\u003Cbr>\\n\\n*Header Templates - must be tagged with //~$:/tags/table/HeaderTemplate//\u003Cbr>\\n*Body Templates - must be tagged with //~$:/tags/table/BodyTemplate//\u003Cbr>\\n*Footer Templates - must be tagged with //~$:/tags/table/FooterTemplate//\u003Cbr>\\n\\nRequired Fields:\u003Cbr>\\n\\n*//tbl-column-list// - used to assign fields/indexes to a column template\\n*//tbl-noedit// - used to restrict fields/indexes from entering //edit mode// \\n*//text// - template code (wikitext) - see below for useful macro parameters\\n\\nUseful Macro Parameters\\n\\n//Can be used anywhere inside the table container://\\n\\n*current table: `\u003C\u003CcurrentTable>>`\\n*input filter: `\u003C\u003CinputFilter>>`\\n*processed filter: `\u003C\u003CtableFilter>>`\\n*temporary table tiddler: `\u003C\u003CtempTable>>`\\n\\n//Can only be used in //Header//, //Footer// or //Body// Templates://\\n\\n*current column: `\u003C\u003CcurrentColumn>>`\\n\\n//Can only be used in //Body// Templates://\\n\\n*current record: `\u003C\u003CcurrentRecord>>`\\n*temporary record tiddler: `\u003C\u003CtempRecord>>`\\n*numerical record index (filter): `\u003C\u003CgetIndex>>`\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-columns\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-columns\\\ setTo\\\true\\\>manage column templates\\n\u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-new-template-type\\\body\\\/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Sorting\\\>\\n\\nSort Type (tbl-sort-type)\u003Cbr>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-sort-type\\\>\\n\u003Coption>sort\u003C/option>\\n\u003Coption>nsort\u003C/option>\\n\u003Coption>sortcs\u003C/option>\\n\u003Coption>nsortcs\u003C/option>\\n\u003Coption>sortan\u003C/option>\\n\u003Coption>sortby\u003C/option>\\n\u003C/$select>\\n\\nSort By (tbl-sort-by)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-sort-by\\\ size22/>\\n\\nSort Negate (Invert Order) (tbl-sort-negate) \u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-sort-negate\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-sort-negate\\\ mode\\\inline\\\/>\u003C/$checkbox> \\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Limit\\\>\\n\\nLimit (tbl-limit)\u003Cbr>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-limit\\\ >\\n\u003C$set name\\\limitFilter\\\ value{{$:/plugins/aaldrich/tables/defaults!!tbl-limit-choices}} >\\n\u003C$list filter\u003C\u003ClimitFilter>>>\\n\u003Coption value{{!!title}}>Limit {{!!title}}\u003C/option>\\n\u003C/$list>\\n\u003C/$set>\\n\u003Coption value9999999>Show All\u003C/option>\\n\u003C/$select>\\n\\nShow Pagination (tbl-show-pagination)\u003Cbr>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-pagination\\\ actions\\\\\\\\\\u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-page-marker\\\\\\/>\u003C$list filter\\\\u003CcurrentTable>tbl-show-paginationfalse\\\ >\u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-limit\\\9999999\\\/>\u003C/$list>\\\\\\\\\>\\n\u003Coption>true\u003C/option>\\n\u003Coption>false\u003C/option>\\n\u003Coption>auto\u003C/option>\\n\u003C/$select>\\n\\nPagination Marker (tbl-page-marker)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-page-marker\\\ size50/>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ >\\n\u003C$action-setfield $tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} $field\\\tbl-page-marker\\\ $value\\\\\\ />clear\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Theme\\\>\\n\\nStylesheet (tbl-class)\u003Cbr>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-class\\\>\\n\u003Coptgroup label\\\Parent Themes\\\>\\n\u003C$list filter\\\alltiddlers+shadowshastbl-class-namecontains:tbl-class-typeparentsorttitle\\\>\\n\u003Coption>{{!!tbl-class-name}}\u003C/option>\\n\u003C/$list>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Child Themes\\\>\\n\u003C$list filter\\\alltiddlers+shadowshastbl-class-namecontains:tbl-class-typechildsorttitle\\\>\\n\u003Coption>{{!!tbl-class-name}}\u003C/option>\\n\u003C/$list>\\n\u003C/optgroup>\\n\u003Coptgroup label\\\Other\\\>\\n\u003C$list filter\\\alltiddlers+shadowshastbl-class-name!contains:tbl-class-typechild!contains:tbl-class-typeparentsorttitle\\\>\\n\u003Coption>{{!!tbl-class-name}}\u003C/option>\\n\u003C/$list>\\n\u003Coption value\\\\\\ >inherit\u003C/option>\\n\u003C/optgroup>\\n\u003C/$select>\\n\u003C$set name\\\currentThemeClass\\\ filter\\\{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}gettbl-class\\\ value\u003C\u003CcurrentThemeClass>> emptyValue\\\\\\ >\\n\u003C$set name\\\currentThemeTitle\\\ filter\\\alltiddlers+shadowscontains:tbl-class-name\u003CcurrentThemeClass>limit1\\\ value\u003C\u003CcurrentThemeTitle>> emptyValue\\\Inheriting style from {{$:/theme}}.\\\ >\\n\u003Ch2>\u003C\u003CcurrentThemeTitle>> \\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-style-settings\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-style-settings\\\ setTo\\\true\\\> {{$:/core/images/edit-button}} \u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-style-settings\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-style-settings\\\ setTo\\\false\\\ >{{$:/core/images/done-button}}\u003C/$button>\\n\u003C/$reveal>\u003C/h2>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-style-settings\\\ text\\\true\\\>\\n\u003Ctable style\\\width:100%;border-collapse: collapse; border: none;vertical-align:top;\\\>\\n \u003Ctr style\\\border: none;vertical-align:top;\\\>\\n \u003Ctd style\\\border: none;\\\>\\n\\n!!Body\\n\\nAll Rows Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-all\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-all\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nEven Rows Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-even\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-even\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nOdd Rows Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-odd\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-odd\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nRow Hover Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-hover\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-row-hover\\\ tag\\\input\\\ size\\\8\\\/>\\n \u003C/td>\\n \u003Ctd style\\\border: none;\\\>\\n\\n!!Header/Footer\\n\\nHeader Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-header\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-header\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nFooter Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-footer\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-footer\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\n\\n!!Caption\\n\\nCaption Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-caption\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-caption\\\ tag\\\input\\\ size\\\8\\\/>\\n \u003C/td>\\n \u003Ctd style\\\border: none;\\\>\\n\\n!!Padding\\n\\n__Header/Footer__\\n\\nPadding Top/Bottom:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-pad-tb-headfoot\\\ tag\\\input\\\ size\\\16\\\/>\\n\\n__Body__\\n\\nLeft/Right:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-pad-lr\\\ tag\\\input\\\ size\\\16\\\/>\u003Cbr>\u003Cbr>\\nTop/Bottom:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-pad-tb-body\\\ tag\\\input\\\ size\\\16\\\/>\\n \u003C/td>\\n \u003Ctd style\\\border: none;\\\>\\n\\n!!Text/Icons\\n\\nText Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-text\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-text\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nText Hover Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-text-hover\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-text-hover\\\ tag\\\input\\\ size\\\8\\\/>\u003Cbr>\u003Cbr>\\nFont Size:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-size-font\\\ tag\\\input\\\ size\\\16\\\/>\u003Cbr>\u003Cbr>\\nIcon Size:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-size-icons\\\ tag\\\input\\\ size\\\16\\\/>\\n \u003C/td>\\n \u003Ctd style\\\border: none;\\\>\\n\\n!!Border\\n\\nBorder Width:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-width-border\\\ tag\\\input\\\ size\\\16\\\/>\u003Cbr>\u003Cbr>\\nBorder Color:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-border\\\ tag\\\input\\\ type\\\color\\\/>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-color-border\\\ tag\\\input\\\ size\\\8\\\ />\u003Cbr>\u003Cbr>\\n\\n!!Other\\n\\nLine Height:\u003Cbr>\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\tbl-size-height\\\ tag\\\input\\\ size\\\16\\\/>\\n \u003C/td>\\n \u003C/tr>\\n\u003C/table>\\n\u003Ch2>Stylesheet: \\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-stylesheet\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-stylesheet\\\ setTo\\\true\\\>{{$:/core/images/edit-button}}\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-stylesheet\\\ text\\\true\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-stylesheet\\\ setTo\\\false\\\ >{{$:/core/images/done-button}}\u003C/$button>\\n\u003C/$reveal>\u003C/h2>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-stylesheet\\\ text\\\true\\\>\\n\u003C$edit-text tiddler\u003C\u003CcurrentThemeTitle>> field\\\text\\\ tag\\\textarea\\\/>\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-theme-delete-confirm\\\ text\u003C\u003CcurrentThemeTitle>>>\\n\u003C$button style\\\color:red;fill:red;\\\ class\\\tc-btn-invisible\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-theme-delete-confirm\\\ setTo\u003C\u003CcurrentThemeTitle>> >{{$:/core/images/delete-button}} delete theme\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-theme-delete-confirm\\\ text\u003C\u003CcurrentThemeTitle>>>\\n delete this theme? \u003C$button class\\\tc-btn-invisible\\\>\u003C$action-deletetiddler $tiddler\u003C\u003CcurrentThemeTitle>>/>\u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-theme-delete-confirm\\\\\\ /> yes \u003C/$button> / \u003C$button class\\\tc-btn-invisible\\\>\u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-theme-delete-confirm\\\\\\ /> no \u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-styles\\\ text\\\true\\\>\\n\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-styles\\\ setTo\\\false\\\ >close\u003C/$button>\u003Cbr>\\n\\n!!Create New Theme\\n\\n__Clone Current Theme__\\n\\n\u003C$edit-text tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ field\\\tbl-new-theme-class\\\ placeholder\\\Enter a class name (no spaces)...\\\ size\\\30\\\/>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-new-theme-class\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ >\\n\u003C$set name\\\newThemeTitle\\\ filter\\\{$:/temp/tables/editor/settings-page-vars!!tbl-new-theme-class}+addprefix$:/plugins/aaldrich/tables/style/\\\ value\u003C\u003CnewThemeTitle>> noValue\\\\\\ >\\n\u003C$action-setfield $tiddler\u003C\u003CnewThemeTitle>> title\u003C\u003CnewThemeTitle>> />\\n\u003C$list variable\\\themeFields\\\ filter\\\\u003CcurrentThemeTitle>fields-title-modified-created-tbl-class-type-text\\\>\\n\u003C$set name\\\themeFieldValues\\\ filter\\\\u003CcurrentThemeTitle>get\u003CthemeFields>\\\ value\u003C\u003CthemeFieldValues>> noValue\\\\\\>\\n\u003C$action-setfield $tiddler\u003C\u003CnewThemeTitle>> $field\u003C\u003CthemeFields>> $value\u003C\u003CthemeFieldValues>> />\\n\u003C/$set>\\n\u003C/$list>\\n\u003C$action-setfield $tiddler\u003C\u003CnewThemeTitle>> tbl-class-name{{$:/temp/tables/editor/settings-page-vars!!tbl-new-theme-class}} tbl-class-type\\\child\\\ text\\\{{||$:/plugins/aaldrich/tables/style/default}}\\\/>\\n\u003C$action-setfield $tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} tbl-class{{$:/temp/tables/editor/settings-page-vars!!tbl-new-theme-class}} />\\n\u003C$action-setfield $tiddler\\\$:/temp/tables/editor/settings-page-vars\\\ tbl-new-theme-class\\\\\\ />\\n\u003C/$set>\\n clone\u003C/$button>\\n\u003C/$reveal>\\n\\n__Create Theme Manually__\\n\\nRequired Tags:\\n\\n*//~$:/tags/Stylesheet//\\n\\nRequired Fields:\\n\\n*//tbl-class-name// - css class name (no spaces)\\n*//tbl-class-type// - parent or child (child themes inherit their css from a parent)\\n*//text// - stylesheet (wikitext)\\n**//parent theme// - uses css code\\n**//child theme// - uses a parent themes code\\n\u003C/$reveal>\\n\u003C$reveal type\\\nomatch\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-styles\\\ text\\\true\\\>\\n\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ set\\\$:/temp/tables/editor/settings-page-vars!!tbl-show-styles\\\ setTo\\\true\\\>more themes\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Override\\\>\\n\\nContainer (tbl-style-container) - css properties for the ``\u003Cdiv>`` element containing the table\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-style-container\\\ tag\\\textarea\\\/>\\n\\nTable (tbl-style-table) - css properties for the ``\u003Ctable>`` element\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-style-table\\\ tag\\\textarea\\\/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Colgroups\\\>\\n\\nShow Colgroup (tbl-show-colgroup)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-colgroup\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-colgroup\\\ mode\\\inline\\\/>\u003C/$checkbox>\\n\\nColgroup Elements (tbl-style-colgroup) - series of ``\u003Ccol>`` elements to be included in the ``\u003Ccolgroup>`` element\u003Cbr> \\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-style-colgroup\\\ tag\\\textarea\\\/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Advanced Styles\\\>\\n\\n!!Row Styling\u003Cbr>\\n\\nStyle can be applied to individual records using a button or checkbox. CSS properties should be stored in tiddler: ``\u003C\u003CtempTableStyle>>`` in the index: ``\u003C\u003CcurrentRecord>>``.\\n\\nFor example, add the tbl-checkbox column to a table and set the check actions to:\\n\\n`\u003C$action-setfield $tiddler\u003C\u003CtempTableStyle>> $index\u003C\u003CcurrentRecord>> $value\\\background-color:green;\\\/>`\\n\\nThen set the uncheck actions to:\\n\\n`\u003C$action-setfield $tiddler\u003C\u003CtempTableStyle>> $index\u003C\u003CcurrentRecord>> $value\\\\\\/>`\\n\\nThis will cause the rows background to change to green when the checkbox is checked.\\n\\n!!Column Styling\u003Cbr>\\n\\nUse the Column Group options page to specify styles for individual columns using `\u003Ccol>` elements.\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Header/Footer\\\>\\n\\nShow Header (tbl-show-header)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-header\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-header\\\ mode\\\inline\\\/>\u003C/$checkbox>\\n\\nShow Footer (tbl-show-footer)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-footer\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-footer\\\ mode\\\inline\\\/>\u003C/$checkbox>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Caption\\\>\\n\\nShow Caption (tbl-show-caption)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-caption\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-caption\\\ mode\\\inline\\\/>\u003C/$checkbox>\\n\\nCaption (tbl-caption) - wikitext ({{$:/plugins/aaldrich/tables/defaults!!tbl-caption-mode}})\u003Cbr>\\n\u003C$edit-text tagtextarea tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-caption\\\/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Edit\\\>\\n\\nShow Editor Button (tbl-show-edit)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-edit\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-edit\\\ mode\\\inline\\\/>\u003C/$checkbox>\u003Cbr>\\nAttention: This will hide the {{$:/core/images/options-button}} button. To restore, manually set field tbl-show-edit to true.\u003Cbr>\u003Cbr>\\n\\nShow Mode Button (tbl-show-mode)\u003Cbr>\\n\u003C$checkbox tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-mode\\\ checked\\\true\\\ unchecked\\\false\\\>\\n\u003C$transclude tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-show-mode\\\ mode\\\inline\\\/>\u003C/$checkbox>\u003Cbr>\u003Cbr>\\n\\nMode (tbl-mode)\u003Cbr>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-mode\\\ >\\n\u003Coption>normal\u003C/option>\\n\u003Coption>edit\u003C/option>\\n\u003C/$select>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Defaults\\\>\\n\\n!!Modify Table/Global Defaults\\nDefault settings are stored here: ~$:/plugins/aaldrich/tables/defaults\u003Cbr>\\n\\n__Table defaults:__\\n\\n*All default table parameters can be modified.\\n\\n__Global defaults:__\\n\\n*tbl-caption-mode - set caption to //inline// or //block// mode.\u003Cbr>\\n*tbl-default-date-format - set default date format.\u003Cbr>\\n*tbl-default-title - set default new table name.\u003Cbr>\\n*tbl-temp-default-expand - set default expand column template.\u003Cbr>\\n*tbl-limit-choices - set drop-down values for //limit// control.\u003Cbr>\\n*tbl-temp-default-body - set the default body template for non-custom columns.\u003Cbr>\\n*tbl-temp-default-body-edit - set the default body template for edit mode.\u003Cbr>\\n*tbl-temp-default-foot - set the default footer template for non-custom columns.\u003Cbr>\\n*tbl-temp-default-head - set the default header template for non-custom columns.\u003Cbr>\\n*tbl-title-type-code - code to indicate the tiddler //type// in the title column.\u003Cbr>\\n*tbl-title-type-show - show the tiddler //type// in the title column (true/false).\u003Cbr>\\n*text - filter presets (data dictionary format)\u003Cbr>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Expand\\\>\\n\\nTo use: Add column: tbl-expand or tbl-expand-one to expand one row at a time.\u003Cbr>\\nAdd column: tbl-expand-many to expand multiple rows at a time.\\n\\nExpand Target (tbl-expand) - text reference (spaces allowed, no quotes)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-expand\\\ size50/>\\n\u003C$select tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-expand\\\>\\n\u003Coption value\\\\\\>default\u003C/option>\\n\u003Coption value\\\$:/plugins/aaldrich/tables/template/expand/transclude\\\>transclude text\u003C/option>\\n\u003Coption value\\\$:/plugins/aaldrich/tables/template/expand/edit\\\>edit text\u003C/option>\\n\u003C/$select>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Button\\\>\\n\\nTo use: Add column: tbl-button \\n\\nButton Icon (tbl-button-icon) - wikitext\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-button-icon\\\ size50/> \u003Ch3>\u003C$list filter\\\title\u003CcurrentTable>gettbl-button-icon\\\>{{!!title}}\u003C/$list>\u003C/h3>\\n\\n\u003C$list variable\\\iconPickTitle\\\ filter\\\allshadowsprefix$:/core/images/\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ actions\\\\\\\\\\u003C$action-setfield $tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} tbl-button-icon\u003C\u003CbuttonIconPick>>/>\\\\\\\\\ >\u003C\u003CbuttonIconPick>>\u003C/$button>\\n\u003C/$list>\\n\\nButton Actions (tbl-button-actions) - series of action widgets\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-button-actions\\\ tag\\\textarea\\\/>\\n\\nButton Tooltip (tbl-button-tip) - plain text\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-button-tip\\\ size50/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Checkbox\\\>\\n\\nTo use: Add column: tbl-checkbox \\n\\nAdd/Remove Tag (tbl-checkbox-tag)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-tag\\\ size22/>\\n\\nTarget Field (tbl-checkbox-field)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-field\\\ size22/>\\n\\nSelect Value (tbl-checkbox-value-selected)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-value-selected\\\ size22/>\\n\\nUnselect Value (tbl-checkbox-value-unselected)\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-value-unselected\\\ size22/>\\n\\nSelect Actions (tbl-checkbox-actions-selected) - series of action widgets\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-actions-selected\\\ tag\\\textarea\\\/>\\n\\nUnselect Actions (tbl-checkbox-actions-unselected) - series of action widgets\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-actions-unselected\\\ tag\\\textarea\\\/>\\n\\nCheckbox Tooltip (tbl-checkbox-tip) - plain text\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-checkbox-tip\\\ size50/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Anything\\\>\\n\\nTo use: Add column: tbl-anything \\n\\nCode (tbl-anything) - wikitext\u003Cbr>\\n\u003C$edit-text tiddler{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}} field\\\tbl-anything\\\ tag\\\textarea\\\/>\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\Getting Started\\\>\\n\\n{{$:/plugins/aaldrich/tables/readme}}\\n\u003C/$reveal>\\n\\n\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/settings-page-vars!!tbl-edit-page\\\ text\\\About\\\>\\n\\n!~TiddlyTables\\n!!Version {{$:/plugins/aaldrich/tables!!version}}\\n!!!created by {{$:/plugins/aaldrich/tables!!author}}\\nlast modified {{$:/plugins/aaldrich/tables!!modified}}\\n\\n__TiddlyWiki version {{$:/plugins/aaldrich/tables!!core-version}} or greater required.__\\n\\n//This plugin is free to use, modify and share. \\nWith special thanks to Jeremy Ruston and the entire ~TiddlyWiki community.//\\n\u003C/$reveal>\\n\\n\u003Cbr>\\nShow Preview\u003Cbr>\\n\u003C$checkbox tiddler\\\$:/temp/tables/editor/persist-vars\\\ field\\\tbl-show-preview\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\false\\\>\\n\u003C$transclude tiddler\\\$:/temp/tables/editor/persist-vars\\\ field\\\tbl-show-preview\\\ mode\\\inline\\\/>\u003C/$checkbox>\u003Cbr>\u003Cbr>\\n\u003C$reveal type\\\match\\\ state\\\$:/temp/tables/editor/persist-vars!!tbl-show-preview\\\ text\\\true\\\>\\n\u003C$set nameeditorTarget value{{$:/temp/tables/editor/settings-page-vars!!tbl-edit-target}}>\\n\u003C\u003CeditorPreview>>\\n\u003C/$set>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/span>\\n\u003C/$keyboard>\},\$:/plugins/aaldrich/tables/macro\:{\title\:\$:/plugins/aaldrich/tables/macro\,\created\:\20170205053213873\,\modified\:\20200103011234341\,\revision\:\0\,\tags\:\$:/tags/Macro\,\tbl-false\:\false\,\tbl-true\:\true\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define table(title:)\\n\u003C$set name\\\currentTable\\\ value\u003C\u003C__title__>> emptyValue{{!!title}}>\\n\u003C$tiddler tiddler\u003C\u003CcurrentTable>>>\\n\u003C!-- assign vars -->\\n\u003C$vars buttonAction{{!!tbl-button-actions}} buttonIcon{{!!tbl-button-icon}} anythingCode{{!!tbl-anything}} pageMarker{{!!tbl-page-marker}} enteredFilter{{!!tbl-filter}} enteredTitles{{!!tbl-add-records}} recordLimit{{!!tbl-limit}} sortBy{{!!tbl-sort-by}} sortType{{!!tbl-sort-type}} checkTag{{!!tbl-checkbox-tag}} checkSel{{!!tbl-checkbox-value-selected}} checkUnsel{{!!tbl-checkbox-value-unselected}} checkActions{{!!tbl-checkbox-actions-selected}} checkUnactions{{!!tbl-checkbox-actions-unselected}} >\\n\u003C$set name\\\tableExpand\\\ filter\\\\u003CcurrentTable>gettbl-expand\\\ emptyValue{{$:/plugins/aaldrich/tables/defaults!!tbl-temp-default-expand}} value{{!!tbl-expand}}>\\n\u003C$set name\\\checkField\\\ filter\\\\u003CcurrentTable>gettbl-checkbox-field\\\ emptyValue\\\modified\\\ value{{!!tbl-checkbox-field}}>\\n\u003C$set name\\\sortNeg\\\ filter\\\\u003CcurrentTable>field:tbl-sort-negatetrue\\\ emptyValue\\\\\\ value\\\!\\\>\\n\u003C$set name\\\pageFilter\\\ filter\u003C\u003CnextFirst>> emptyValue\\\+allafter{!!tbl-page-marker}+{!!tbl-page-marker}\\\ value\\\+allafter:including{!!tbl-page-marker}\\\ >\\n\u003C$set name\\\includePage\\\ filter\\\\u003CcurrentTable>gettbl-page-marker\\\ emptyValue\\\\\\ value\u003C\u003CpageFilter>> >\\n\u003C!-- check if table can be rendered properly -->\\n\u003C$set name\\\hideTable\\\ filter\u003C\u003CcurrentTiddler>> value\u003C\u003CcurrentTiddler>> emptyValue\\\$:/plugins/aaldrich/tables/template/expand/transclude\\\ >\\n\u003C$set name\\\hideTable\\\ filter\\\\u003ChideTable>-$:/plugins/aaldrich/tables/template/expand/transclude-field+limit1\\\ value\\\false\\\ emptyValue\\\true\\\>\\n\u003C$reveal type\\\match\\\ state\\\$:/plugins/aaldrich/tables/macro!!tbl-true\\\ text\u003C\u003ChideTable>>>\\nTable transclusion error: use //title// parameter: `\u003C\u003Ctable \\\My Table\\\>>`.\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C$list filter\\\\u003ChideTable>-$:/plugins/aaldrich/tables/template/expand/transclude-field+limit1\\\ variable\\\showTable\\\>\\n\u003C!-- reveal refresh table button that adds req fields to a table using default values -->\\n\u003C$reveal type\\\match\\\ state\\\!!tbl-columns\\\ text\\\\\\>\\n\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ >{{$:/core/images/refresh-button}} Reset Table\u003C$action-setfield \\ntbl-add-records{{$:/plugins/aaldrich/tables/defaults!!tbl-add-records}}\\ntbl-anything{{$:/plugins/aaldrich/tables/defaults!!tbl-anything}}\\ntbl-button-actions{{$:/plugins/aaldrich/tables/defaults!!tbl-button-actions}}\\ntbl-button-icon{{$:/plugins/aaldrich/tables/defaults!!tbl-button-icon}}\\ntbl-button-tip{{$:/plugins/aaldrich/tables/defaults!!tbl-button-tip}}\\ntbl-caption{{$:/plugins/aaldrich/tables/defaults!!tbl-caption}}\\ntbl-checkbox-actions-selected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-selected}}\\ntbl-checkbox-actions-unselected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-actions-unselected}}\\ntbl-checkbox-field{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-field}}\\ntbl-checkbox-tag{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tag}}\\ntbl-checkbox-tip{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-tip}}\\ntbl-checkbox-value-selected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-selected}}\\ntbl-checkbox-value-unselected{{$:/plugins/aaldrich/tables/defaults!!tbl-checkbox-value-unselected}}\\ntbl-class{{$:/plugins/aaldrich/tables/defaults!!tbl-class}}\\ntbl-columns{{$:/plugins/aaldrich/tables/defaults!!tbl-columns}}\\ntbl-expand{{$:/plugins/aaldrich/tables/defaults!!tbl-expand}}\\ntbl-filter{{$:/plugins/aaldrich/tables/defaults!!tbl-filter}}\\ntbl-show-caption{{$:/plugins/aaldrich/tables/defaults!!tbl-show-caption}}\\ntbl-show-colgroup{{$:/plugins/aaldrich/tables/defaults!!tbl-show-colgroup}}\\ntbl-show-edit{{$:/plugins/aaldrich/tables/defaults!!tbl-show-edit}}\\ntbl-show-footer{{$:/plugins/aaldrich/tables/defaults!!tbl-show-footer}}\\ntbl-show-header{{$:/plugins/aaldrich/tables/defaults!!tbl-show-header}}\\ntbl-show-mode{{$:/plugins/aaldrich/tables/defaults!!tbl-show-mode}}\\ntbl-show-pagination{{$:/plugins/aaldrich/tables/defaults!!tbl-show-pagination}}\\ntbl-limit{{$:/plugins/aaldrich/tables/defaults!!tbl-limit}}\\ntbl-mode{{$:/plugins/aaldrich/tables/defaults!!tbl-mode}}\\ntbl-page-marker{{$:/plugins/aaldrich/tables/defaults!!tbl-page-marker}}\\ntbl-sort-by{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-by}}\\ntbl-sort-negate{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-negate}}\\ntbl-sort-type{{$:/plugins/aaldrich/tables/defaults!!tbl-sort-type}}\\ntbl-style-colgroup{{$:/plugins/aaldrich/tables/defaults!!tbl-style-colgroup}}\\ntbl-style-container{{$:/plugins/aaldrich/tables/defaults!!tbl-style-container}}\\ntbl-style-table{{$:/plugins/aaldrich/tables/defaults!!tbl-style-table}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C!-- reveal table if req field (tbl-columns) exists -->\\n\u003C$reveal type\\\nomatch\\\ state\\\!!tbl-columns\\\ text\\\\\\ tag\\\div\\\ style{{!!tbl-style-container}} class{{!!tbl-class}}>\\n{{||$:/plugins/aaldrich/tables/view}}\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$vars>\\n\u003C/$tiddler>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define inputFilter()\\n$(enteredFilter)$list$(currentTable)$!!tbl-add-records\\n\\\\end\\n\\n\\\\define resetPagination()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+first\\n\\\\end\\n\\n\\\\define veryFirst()\\n$(inputFilter)$+$(sortType)$title$(sortType)$$(currentColumn)$+first\\n\\\\end\\n\\n\\\\define veryLast()\\n$(inputFilter)$+!$(sortType)$title$(sortType)$$(currentColumn)$+last\\n\\\\end\\n\\n\\\\define previousFirst()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+allbefore$(pageMarker)$+last$(recordLimit)$+first\\n\\\\end\\n\\n\\\\define nextFirst()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+allafter$(pageMarker)$+limit$(recordLimit)$+last\\n\\\\end\\n\\n\\\\define lastRec()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+allafter:including$(pageMarker)$+limit$(recordLimit)$+last\\n\\\\end\\n\\n\\\\define getFirst()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+allbefore$(pageMarker)$+prepend1\\n\\\\end\\n\\n\\\\define getLast()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$+allbefore:including$(lastRecord)$\\n\\\\end\\n\\n\\\\define tableFilter()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$$(includePage)$+limit$(recordLimit)$\\n\\\\end\\n\\n\\\\define showDeleteConfirm()\\n$(tableFilter)$+limit1\\n\\\\end\\n\\n\\\\define checkboxFilter()\\n$(inputFilter)$+$(sortType)$title$(sortNeg)$$(sortType)$$(sortBy)$$(includePage)$+limit$(recordLimit)$!tag$(checkTag)$!$(checkField)$$(checkSel)$\\n\\\\end\\n\\n\\\\define checkboxTest()\\n$(currentRecord)$!tag$(checkTag)$!$(checkField)$$(checkSel)$\\n\\\\end\\n\\n\\\\define overLimit()\\n$(inputFilter)$+limit$(recordLimit)$+nth$(totalCount)$addprefixzzz$(currentTable)$gettbl-show-pagination+removeautoreverserange$(filteredCount)$+butlast$(totalCount)$\\n\\\\end\\n\\n\\\\define tempTable()\\n$:/temp/tables/$(currentTable)$\\n\\\\end\\n\\n\\\\define tempTableExpand()\\n$:/temp/tables/expand/$(currentTable)$\\n\\\\end\\n\\n\\\\define tempTableStyle()\\n$:/temp/tables/style/$(currentTable)$\\n\\\\end\\n\\n\\\\define tempTagPopup()\\n$(tempTable)$/$(currentRecord)$/$(currentTiddler)$\\n\\\\end\\n\\n\\\\define tempRecord()\\n$(tempTable)$/$(currentRecord)$\\n\\\\end\\n\\n\\\\define tempPath()\\n$(tempTable)$##$(currentRecord)$\\n\\\\end\\n\\n\\\\define tempPathExpand()\\n$(tempTableExpand)$##$(currentRecord)$\\n\\\\end\\n\\n\\\\define tableExpandRender()\\n{{$(tableExpand)$}}\\n\\\\end\\n\\n\\\\define buttonIconPick()\\n{{$(iconPickTitle)$}}\\n\\\\end\\n\\n\\\\define expandClassFilter()\\ntitle$(childTable)$gettbl-columns\\n\\\\end\\n\\n\\\\define expandResetNested()\\ntitle$(childTable)$gettbl-page-marker\\n\\\\end\\n\\n\\\\define editorPreview()\\n{{$(editorTarget)$}}\\n\\\\end\\n\\n\\\\define tableFilterPick()\\n$(existingTableFilter)$$(existingTableFilterPrefix)$$(filterValues)$\\n\\\\end\\n\\n\\\\define getIndex()\\n$(inputFilter)$+$(sortType)$title+allbefore:including$(currentRecord)$count\\n\\\\end\},\$:/plugins/aaldrich/tables/pagination\:{\title\:\$:/plugins/aaldrich/tables/pagination\,\created\:\20170212033753546\,\modified\:\20191208103301563\,\tags\:\\,\text\:\\u003C$vars filteredCount\\\\\\\\\\u003C$count filter\u003C\u003CtableFilter>>/>\\\\\\\\\ totalCount\\\\\\\\\\u003C$count filter\u003C\u003CinputFilter>>/>\\\\\\\\\ firstCount\\\\\\\\\\u003C$count filter\u003C\u003CgetFirst>>/>\\\\\\\\\ lastCount\\\\\\\\\\u003C$count filter\u003C\u003CgetLast>>/>\\\\\\\\\ pageSetting{{!!tbl-show-pagination}} >\\n\u003C$wikify name\\\totalCount\\\ text\u003C\u003CtotalCount>> mode\\\inline\\\>\\n\u003C$wikify name\\\filteredCount\\\ text\u003C\u003CfilteredCount>> mode\\\inline\\\>\\n\u003C$set name\\\pageReq\\\ filter\u003C\u003CoverLimit>> value\u003C\u003CpageSetting>> emptyValue\\\true\\\ >\\n\u003C$wikify name\\\pageReq\\\ text\u003C\u003CpageReq>> mode\\\inline\\\>\\n\u003C$reveal type\\\match\\\ state\\\$:/plugins/aaldrich/tables/macro!!tbl-true\\\ text\u003C\u003CpageReq>> tag\\\div\\\ >\\n\u003C$set name\\\lastRecord\\\ filter\u003C\u003ClastRec>> value\u003C\u003ClastRecord>> emptyValue{{!!tbl-page-marker}} >\\n\u003C$wikify name\\\lastRecord\\\ text\u003C\u003ClastRecord>> mode\\\inline\\\>\\n\u003C$set name\\\firstRecord\\\ filter\u003C\u003CresetPagination>> value\u003C\u003CfirstRecord>> >\\n\u003C$wikify name\\\firstRecord\\\ text\u003C\u003CfirstRecord>> mode\\\inline\\\>\\n\u003C$wikify name\\\recordCount\\\ text\\\\\\\\\\u003C$count filter\u003C\u003CtableFilter>>/>\\\\\\\\\ mode\\\inline\\\>\\n\u003C$set name\\\previousPage\\\ filter\u003C\u003CpreviousFirst>> value\u003C\u003CpreviousPage>> emptyValue\u003C\u003CfirstRecord>>>\\n\u003C$wikify name\\\previousPage\\\ text\u003C\u003CpreviousPage>> mode\\\inline\\\>\\n\u003C$set name\\\nextPage\\\ filter\u003C\u003CnextFirst>> value\u003C\u003CnextPage>> emptyValue{{!!tbl-page-marker}} >\\n\u003C$wikify name\\\nextPage\\\ text\u003C\u003CnextPage>> mode\\\inline\\\>\\n{{||$:/plugins/aaldrich/tables/template/pagination/default}}\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$wikify>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$wikify>\\n\u003C/$set>\\n\u003C/$reveal> \\n\u003C/$wikify>\\n\u003C/$set> \\n\u003C/$wikify>\\n\u003C/$wikify>\\n\u003C/$vars>\},\$:/plugins/aaldrich/tables/readme\:{\title\:\$:/plugins/aaldrich/tables/readme\,\created\:\20170207092135594\,\modified\:\20191210033829409\,\tags\:\\,\text\:\!!~TiddlyTables is a plugin for ~TiddlyWiki to create advanced sortable tables.\\n\\nPut simply, a filter is used to return a list of tiddler titles, or records. and a list of field/index names determines what columns to display. \\n\\nThe best way to explore the many features of ~TiddlyTables is to create a new table and start editing.\\n\\n#Install - Drag this link into your ~TiddlyWiki: $:/plugins/aaldrich/tables\\n#Create - There are two ways to create a ~TiddlyTable.\\n##Click the New Table button in the //Page Toolbar//: \u003Ch2>{{$:/plugins/aaldrich/tables/button/image}}\u003C/h2>\\n##Manual method\\n###Add ``\u003C\u003Ctable \\\My New Table\\\>>`` to the text field of a new or existing tiddler. \\n###Save tiddler. A button is rendered on the tiddler.\\n###Click Reset Table button. This creates the required //tbl// fields and renders the table.\\n###//Note: `\u003C\u003Ctable>>` with no title parameter will store its fields in the current tiddler.//\\n#Edit - There are two ways to edit the table.\\n##Graphically (recommended)\\n###Click the {{$:/core/images/options-button}} Button above the table to edit Table Options.\\n###Click the {{$:/core/images/edit-button}} Button above the table to toggle Edit Mode.\\n##Manually - Edit the tiddler and modify //tbl// fields.\\n#Customize - ~TiddlyTables are highly customizable.\\n##Defaults - $:/plugins/aaldrich/tables/defaults\\n\\n##Themes (Stylesheet) - prefix ~$:/plugins/aaldrich/tables/style...\\n###Tagged ~$:/tags/Stylesheet (required)\\n###Field tbl-class-name (required)\\n###Global default setting - tbl-class field\\n\\n##Column Templates - determine how columns are rendered.\\n\\n###Each column has three template types:\\n####Header - prefix ~$:/plugins/aaldrich/tables/template/header...\\n#####Tagged ~$:/tags/table/HeaderTemplate (required)\\n#####Global default setting - tbl-temp-default-header field\\n\\n####Body - prefix ~$:/plugins/aaldrich/tables/template/body...\\n#####Tagged ~$:/tags/table/BodyTemplate (required)\\n#####Global default setting - tbl-temp-default-body field\\n\\n####Footer - prefix ~$:/plugins/aaldrich/tables/template/footer...\\n#####Tagged ~$:/tags/table/FooterTemplate (required)\\n#####Global default setting - tbl-temp-default-footer field\\n\\n###Add fields/index names to the field tbl-column-list of a template to assign them.\\n###If a field/index is not assigned to a template of a particular type, the default template for that type is used.\\n###New templates can be created or cloned from an existing one.\\n\\n##Expand Templates - prefix ~$:/plugins/aaldrich/tables/template/expand...\\n###Tagged ~$:/tags/table/ExpandTemplate (required)\\n###Default setting - tbl-temp-default-expand field\\n\\n##Pagination Template - ~$:/plugins/aaldrich/tables/template/pagination/default\\n###No mechanism to change on per-table basis. No tag required.\\n###No default setting\\n###To modify, edit the default pagination template.\},\$:/plugins/aaldrich/tables/style/dark\:{\title\:\$:/plugins/aaldrich/tables/style/dark\,\created\:\20190723034929272\,\modified\:\20191205031607095\,\tags\:\$:/tags/Stylesheet\,\tbl-class-name\:\tbl-style-dark\,\tbl-class-type\:\child\,\tbl-color-border\:\#999999\,\tbl-color-caption\:\#3D3D3D\,\tbl-color-footer\:\#595959\,\tbl-color-header\:\#595959\,\tbl-color-row-all\:\#686868\,\tbl-color-row-even\:\#737373\,\tbl-color-row-hover\:\#46486B\,\tbl-color-row-odd\:\#7A7A7A\,\tbl-color-text\:\#FFFFFF\,\tbl-color-text-hover\:\#FFFEE2\,\tbl-pad-lr\:\7px\,\tbl-pad-tb-body\:\1px\,\tbl-pad-tb-headfoot\:\2px\,\tbl-size-font\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-size-height\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}}\,\tbl-size-icons\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-width-border\:\1px\,\text\:\{{||$:/plugins/aaldrich/tables/style/default}}\},\$:/plugins/aaldrich/tables/style/default\:{\title\:\$:/plugins/aaldrich/tables/style/default\,\created\:\20190723034442800\,\modified\:\20191215064245416\,\tags\:\$:/tags/Stylesheet\,\tbl-class-name\:\tbl-style-default\,\tbl-class-type\:\parent\,\tbl-color-border\:\#DDDDDD\,\tbl-color-caption\:\#DDDDDD\,\tbl-color-footer\:\#F0F0F0\,\tbl-color-header\:\#F0F0F0\,\tbl-color-row-all\:\#FFFFFF\,\tbl-color-row-even\:\#FCFCFC\,\tbl-color-row-hover\:\#FFFEE2\,\tbl-color-row-odd\:\#FFFFFF\,\tbl-color-text\:\#000000\,\tbl-color-text-hover\:\#001177\,\tbl-pad-lr\:\7px\,\tbl-pad-tb-body\:\2px\,\tbl-pad-tb-headfoot\:\4px\,\tbl-size-font\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-size-height\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}}\,\tbl-size-icons\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-width-border\:\1px\,\text\:\\u003C!-- CONTAINER/TABLE-->\\n.{{!!tbl-class-name}} { \\n text-shadow: none;\\n width:100%;\\n overflow:visible;\\n}\\n\\n.{{!!tbl-class-name}} > table{ \\n text-shadow: none;\\n border-collapse: collapse;\\n caption-side: top;\\n table-layout:auto;\\n width:100%;\\n margin: 0 0 0 0;\\n border-top: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n}\\n\\n\u003C!--CAPTION-->\\n.{{!!tbl-class-name}} > table > caption {\\n margin: 0 0 0 0;\\n padding: {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}} {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}};\\n text-shadow: none;\\n color:{{!!tbl-color-text}};\\n background-color:{{!!tbl-color-caption}};\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n border-top: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: 0px solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n text-align:center;\\n}\\n\\n.{{!!tbl-class-name}} > table > caption *,\\n.{{!!tbl-class-name}} > table > caption > div *{\\n margin: 0 0 0 0;\\n padding: 0 0 0 0;\\n text-shadow: none;\\n color:{{!!tbl-color-text}};\\n fill:{{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > table > caption > div > .tbl-hidden-edit{\\n background: transparent !important;\\n border: none;\\n color:{{!!tbl-color-text}}!important;\\n}\\n\\n.{{!!tbl-class-name}} > table > caption > div > .tbl-hidden-edit-wide{\\n width: 100%;\\n background: transparent !important;\\n border: none;\\n color:{{!!tbl-color-text}}!important;\\n}\\n\\n\u003C!--HEADER-->\\n .{{!!tbl-class-name}} > table > thead {\\n text-shadow: none;\\n}\\n\\n.{{!!tbl-class-name}} > table > thead > tr {\\n text-shadow: none;\\n background: {{!!tbl-color-header}};\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n}\\n\\n.{{!!tbl-class-name}} > table > thead > tr > th {\\n text-shadow: none;\\n color:{{!!tbl-color-text}};\\n background: transparent;\\n margin: 0 0 0 0;\\n padding: {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}} {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}};\\n border-top: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n text-align: left;\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n white-space: nowrap;\\n}\\n\\n.{{!!tbl-class-name}} > table > thead> tr > th p, \\n.{{!!tbl-class-name}} > table > thead> tr > th a,\\n.{{!!tbl-class-name}} > table > thead> tr > th button,\\n.{{!!tbl-class-name}} > table > thead> tr > th .tc-tiddlylink {\\n text-shadow: none;\\n margin: 0 0 0 0;\\n padding: 0 0 0 0;\\n color:{{!!tbl-color-text}};\\n font-weight: bold;\\n}\\n\\n.{{!!tbl-class-name}} > table > thead> tr > th > button > svg,\\n.{{!!tbl-class-name}} > table > thead> tr > th > span > button > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n height:{{!!tbl-size-icons}};\\n padding:0 0 2px 0;\\n}\\n\\n.{{!!tbl-class-name}} > table > thead> tr > th > button.tbl-sort-svg > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n height:10px;\\n padding:0 0 2px 0;\\n}\\n\\n\u003C!--FOOTER-->\\n.{{!!tbl-class-name}} > table > tfoot {\\n text-shadow: none;\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot > tr {\\n text-shadow: none;\\n background: {{!!tbl-color-footer}};\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot > tr > th {\\n text-shadow: none;\\n color:{{!!tbl-color-text}};\\n background: transparent;\\n margin: 0 0 0 0;\\n padding: {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}} {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}};\\n border-top: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n text-align: left;\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n white-space: nowrap;\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot> tr > th p, \\n.{{!!tbl-class-name}} > table > tfoot> tr > th a,\\n.{{!!tbl-class-name}} > table > tfoot> tr > th button,\\n.{{!!tbl-class-name}} > table > tfoot> tr > th .tc-tiddlylink {\\n text-shadow: none;\\n margin: 0 0 0 0;\\n padding: 0 0 0 0;\\n color:{{!!tbl-color-text}};\\n font-weight: bold;\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot> tr > th > button > svg,\\n.{{!!tbl-class-name}} > table > tfoot> tr > th > span > button > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n height:{{!!tbl-size-icons}};\\n padding:0 0 2px 0;\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot> tr > th > button.tbl-sort-svg > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n height:10px;\\n padding:0 0 2px 0;\\n}\\n\\n\u003C!--BODY-->\\n.{{!!tbl-class-name}} > table > tbody {\\n text-shadow: none;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr {\\n text-shadow: none;\\n background: {{!!tbl-color-row-all}};\\n vertical-align: middle;\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr > td {\\n text-shadow: none;\\n color:{{!!tbl-color-text}};\\n background: transparent;\\n margin: 0 0 0 0;\\n padding: {{!!tbl-pad-tb-body}} {{!!tbl-pad-lr}} {{!!tbl-pad-tb-body}} {{!!tbl-pad-lr}};\\n border-top: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n text-align: left;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr > td.tbl-tag-template > div > div.tc-tags-wrapper {\\nmargin:0 0 0 0;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > p > svg{\\n vertical-align: middle;\\n fill:{{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > a > sup{\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -khtml-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > p,\\n.{{!!tbl-class-name}} > table > tbody> tr > td > p > a, \\n.{{!!tbl-class-name}} > table > tbody> tr > td > a,\\n.{{!!tbl-class-name}} > table > tbody> tr > td > a > a,\\n.{{!!tbl-class-name}} > table > tbody> tr > td > button, \\n.{{!!tbl-class-name}} > table > tbody> tr > td > .tc-tiddlylink,\\n.{{!!tbl-class-name}} > table > tbody> tr > td > a > a.tc-tiddlylink{\\n text-shadow: none;\\n margin:0 0 0 0;\\n color:{{!!tbl-color-text}};\\n background-color:transparent;\\n font-weight: normal;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > button > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n height:{{!!tbl-size-icons}};\\n padding:0 0 2px 0;\\n align:center;\\n}\\n\\n\\n\u003C!-- EVEN/ODD & ROW HIGHLIGHT -->\\n.{{!!tbl-class-name}} > table > tbody > tr.tbl-record-row:nth-child(odd) {\\n background-color: {{!!tbl-color-row-odd}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr.tbl-record-row:nth-child(even) {\\n background-color: {{!!tbl-color-row-even}};\\n}\\n\\n\u003C!--ROW HOVER-->\\n.{{!!tbl-class-name}} > table > tbody > tr.tbl-record-row:hover {\\n background-color: {{!!tbl-color-row-hover}};\\n}\\n\\n\u003C!--LINK HOVER-->\\n.{{!!tbl-class-name}} > table > caption a:hover,\\n.{{!!tbl-class-name}} > table > caption > .tc-tiddlylink:hover {\\n color:{{!!tbl-color-text-hover}};\\n text-decoration: none;\\n font-weight: normal;\\n}\\n\\n.{{!!tbl-class-name}} > table > thead > tr > th a:hover, \\n.{{!!tbl-class-name}} > table > thead > tr > th button:hover,\\n.{{!!tbl-class-name}} > table > thead> tr > th > .tc-tiddlylink:hover {\\n color: {{!!tbl-color-text}};\\n text-decoration: none;\\n font-weight: bold;\\n}\\n\\n.{{!!tbl-class-name}} > table > tfoot > tr > th a:hover,\\n.{{!!tbl-class-name}} > table > tfoot > tr > th button:hover,\\n.{{!!tbl-class-name}} > table > tfoot> tr > th > .tc-tiddlylink:hover {\\n color: {{!!tbl-color-text}};\\n text-decoration: none;\\n font-weight: bold;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr > td a:hover,\\n.{{!!tbl-class-name}} > table > tbody > tr > td > a > a:hover,\\n.{{!!tbl-class-name}} > table > tbody > tr > td > .tc-tiddlylink:hover, \\n.{{!!tbl-class-name}} > table > tbody > tr > td > a > .tc-tiddlylink:hover{\\n color:{{!!tbl-color-text-hover}};\\n text-decoration: none;\\n font-weight: normal;\\n}\\n\\n.{{!!tbl-class-name}} > div a:hover,\\n.{{!!tbl-class-name}} > div .tc-tiddlylink:hover {\\n color: {{!!tbl-color-text-hover}};\\n text-decoration: none;\\n font-weight: normal;\\n}\\n\\n\u003C!--INPUTS-->\\n.{{!!tbl-class-name}} > table > tbody> tr > .tbl-inpt-edit > inputtype\\\text\\\,\\n.{{!!tbl-class-name}} > table > tbody> tr > .tbl-inpt-edit > textarea {\\n width: 100%;\\n background-color: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody > tr > .tbl-inpt-check > span > button > label > inputtype\\\checkbox\\\,\\n.{{!!tbl-class-name}} > table > thead > tr > .tbl-inpt-check > span > button > label > inputtype\\\checkbox\\\{\\n vertical-align: middle;\\n margin: 0px 0px 2px 0px;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > select {\\n background: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > select > option {\\n background: {{!!tbl-color-row-all}};\\n border: none;\\n color: {{!!tbl-color-text}};\\n}\\n\\n\u003C!--EXPAND-->\\n.{{!!tbl-class-name}} > table > tbody> tr > td.tbl-expand-pad,\\n.{{!!tbl-class-name}} > table > tbody> tr > td.tbl-expand-pad > p > pre {\\n background-color: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n padding: 5px 8px 5px 8px;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td.tbl-expand-nopad,\\n.{{!!tbl-class-name}} > table > tbody> tr > td.tbl-expand-nopad > p,\\n.{{!!tbl-class-name}} > table > tbody> tr > td.tbl-expand-nopad > p > pre {\\n background-color: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n margin: 0 0 0 0;\\n padding: 0 0 0 0;\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > p > .tbl-inpt-edit {\\n width: 100%;\\n background-color: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > table > tbody> tr > td > canvas {\\n width: 100%;\\n background-color: transparent;\\n border: none;\\n color: ;\\n padding: 0 0 0 0;\\n margin: 0 0 0 0;\\n}\\n\\n\u003C!--PAGINATION-->\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer,\\n.{{!!tbl-class-name}} > div > span > div.tbl-page-refresh {\\n text-align: center;\\n margin: 0 0 0 0;\\n padding: {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}} {{!!tbl-pad-tb-headfoot}} {{!!tbl-pad-lr}};\\n color:{{!!tbl-color-text}};\\n background-color:{{!!tbl-color-caption}};\\n font-size: {{!!tbl-size-font}};\\n line-height: {{!!tbl-size-height}};\\n border-top: 0px solid {{!!tbl-color-border}};\\n border-right: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-bottom: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n border-left: {{!!tbl-width-border}} solid {{!!tbl-color-border}};\\n}\\n\\n.{{!!tbl-class-name}} > div > span > div.tbl-page-refresh > button,\\n.{{!!tbl-class-name}} > div > span > div.tbl-page-refresh > .tc-tiddlylink{\\n padding: 0 0 0 0;\\n margin: 0 0 0 0;\\n color:{{!!tbl-color-text}};\\n font-weight: normal;\\n font-size: {{!!tbl-size-font}};\\n}\\n\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-prev > button,\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-prev > .tc-tiddlylink{\\n padding: 0 0 0 0;\\n margin: 2px 0 0 0;\\n color:{{!!tbl-color-text}};\\n font-weight: normal;\\n font-size: {{!!tbl-size-font}};\\n float:left;\\n}\\n\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-next > button,\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-next > .tc-tiddlylink{\\n padding: 0 0 0 0;\\n margin: 2px 0 0 0;\\n color:{{!!tbl-color-text}};\\n font-weight: normal;\\n font-size: {{!!tbl-size-font}};\\n float:right;\\n}\\n\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > select {\\n padding: 0 0 0 0;\\n margin: 0 0 0 0;\\n background: transparent;\\n border: none;\\n color: {{!!tbl-color-text}};\\n}\\n\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-prev > button > svg,\\n.{{!!tbl-class-name}} > div > div.tbl-page-footer > div.tbl-page-next > button > svg {\\n text-shadow: none;\\n fill:{{!!tbl-color-text}};\\n padding:0 0 3px 0;\\n}\\n\\n\u003C!--DELETE CONFIRMATION-->\\n.tbl-delete-confirm {\\n color: white;\\n background-color:red;\\n padding: 8px;\\n margin: 0px;\\n text-align:center;\\n}\\n\\n.tbl-delete-confirm > button {\\n color: white;\\n fill: white;\\n}\\n\\n\u003C!--EDIT MENU-->\\n.tbl-edit-menu textarea{\\n width:100%;\\n}\\n.tbl-edit-wide{\\n width:94%;\\n}\},\$:/plugins/aaldrich/tables/style/invisible\:{\title\:\$:/plugins/aaldrich/tables/style/invisible\,\created\:\20190723040014559\,\modified\:\20191205031632668\,\tags\:\$:/tags/Stylesheet\,\tbl-class-name\:\tbl-style-invisible\,\tbl-class-type\:\child\,\tbl-color-border\:\#000000\,\tbl-color-caption\:\transparent\,\tbl-color-footer\:\transparent\,\tbl-color-header\:\transparent\,\tbl-color-row-all\:\transparent\,\tbl-color-row-even\:\transparent\,\tbl-color-row-hover\:\transparent\,\tbl-color-row-odd\:\transparent\,\tbl-color-text\:\#000000\,\tbl-color-text-hover\:\#001177\,\tbl-pad-lr\:\7px\,\tbl-pad-tb-body\:\1px\,\tbl-pad-tb-headfoot\:\2px\,\tbl-size-font\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-size-height\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}}\,\tbl-size-icons\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-width-border\:\0px\,\text\:\{{||$:/plugins/aaldrich/tables/style/default}}\},\$:/plugins/aaldrich/tables/style/standard\:{\title\:\$:/plugins/aaldrich/tables/style/standard\,\created\:\20190723034800933\,\modified\:\20191205031639271\,\tags\:\$:/tags/Stylesheet\,\tbl-class-name\:\tbl-style-standard\,\tbl-class-type\:\child\,\tbl-color-border\:\#a5a5a5\,\tbl-color-caption\:\#c6c6c6\,\tbl-color-footer\:\#E0E0E0\,\tbl-color-header\:\#E0E0E0\,\tbl-color-row-all\:\#FFFFFF\,\tbl-color-row-even\:\#FFFFFF\,\tbl-color-row-hover\:\#f2f6ff\,\tbl-color-row-odd\:\#FFFFFF\,\tbl-color-text\:\#000000\,\tbl-color-text-hover\:\#001177\,\tbl-pad-lr\:\7px\,\tbl-pad-tb-body\:\3px\,\tbl-pad-tb-headfoot\:\5px\,\tbl-size-font\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-size-height\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}}\,\tbl-size-icons\:\{{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}}\,\tbl-width-border\:\1px\,\text\:\{{||$:/plugins/aaldrich/tables/style/default}}\},\$:/plugins/aaldrich/tables/style/tight\:{\title\:\$:/plugins/aaldrich/tables/style/tight\,\created\:\20190726060145636\,\modified\:\20191215061001950\,\tags\:\$:/tags/Stylesheet\,\tbl-class-name\:\tbl-style-tight\,\tbl-class-type\:\child\,\tbl-color-border\:\#DDDDDD\,\tbl-color-caption\:\#DDDDDD\,\tbl-color-footer\:\#F0F0F0\,\tbl-color-header\:\#F0F0F0\,\tbl-color-row-all\:\#FFFFFF\,\tbl-color-row-even\:\#FCFCFC\,\tbl-color-row-hover\:\#FFFEE2\,\tbl-color-row-odd\:\#FFFFFF\,\tbl-color-text\:\#000000\,\tbl-color-text-hover\:\#001177\,\tbl-pad-lr\:\7px\,\tbl-pad-tb-body\:\1px\,\tbl-pad-tb-headfoot\:\1px\,\tbl-size-font\:\10pt\,\tbl-size-height\:\20px\,\tbl-size-icons\:\10pt\,\tbl-width-border\:\1px\,\text\:\{{||$:/plugins/aaldrich/tables/style/default}}\},\$:/plugins/aaldrich/tables/template/body/anything\:{\title\:\$:/plugins/aaldrich/tables/template/body/anything\,\created\:\20170206022244360\,\modified\:\20191215042443693\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-anything\,\tbl-noedit\:\tbl-anything\,\text\:\\u003Ctd style\\\width:1.4ch;\\\>\\n \u003C\u003CanythingCode>>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/button\:{\title\:\$:/plugins/aaldrich/tables/template/body/button\,\created\:\20170206022244360\,\modified\:\20191215041903621\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-button\,\tbl-noedit\:\tbl-button\,\text\:\\u003Ctd style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-button-tip}} style\\\min-width:1.4ch\\\>\\n \u003C\u003CbuttonIcon>>\\n \u003C\u003CbuttonAction>>\\n \u003C/$button>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/checkbox\:{\title\:\$:/plugins/aaldrich/tables/template/body/checkbox\,\created\:\20170206082424723\,\modified\:\20200103012208099\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-checkbox\,\tbl-noedit\:\tbl-checkbox\,\text\:\\u003Ctd style\\\width:1.4ch;text-align:center;\\\ class\\\tbl-inpt-check\\\>\\n \u003C$set name\\\recordSelected\\\ filter\u003C\u003CcheckboxTest>> value\\\$:/plugins/aaldrich/tables/macro!!tbl-false\\\ emptyValue\\\$:/plugins/aaldrich/tables/macro!!tbl-true\\\>\\n \u003C$reveal type\\\match\\\ state\u003C\u003CrecordSelected>> text\\\false\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-checkbox-tip}}>\\n \u003C$checkbox field\\\tbl-selall\\\ unchecked\\\closed\\\ default\\\closed\\\/>\\n \u003C$action-listops $tiddler\u003C\u003CcurrentRecord>> $tags\\\+append\u003CcheckTag>\\\ />\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentRecord>> $field\u003C\u003CcheckField>> $value\u003C\u003CcheckSel>>/>\\n \u003C\u003CcheckActions>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ state\u003C\u003CrecordSelected>> text\\\true\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-checkbox-tip}}>\\n \u003C$checkbox field\\\tbl-selall\\\ checked\\\open\\\ default\\\open\\\/>\\n \u003C$action-listops $tiddler\u003C\u003CcurrentRecord>> $tags\\\+remove\u003CcheckTag>\\\ />\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentRecord>> $field\u003C\u003CcheckField>> $value\u003C\u003CcheckUnsel>>/>\\n \u003C\u003CcheckUnactions>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C/$set>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/date\:{\title\:\$:/plugins/aaldrich/tables/template/body/date\,\created\:\20170128100657312\,\modified\:\20191207211809915\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\created modified\,\tbl-noedit\:\created modified\,\text\:\\u003Ctd>\\n \u003C$list filter\\\\u003CfieldOrIndex>-index\\\>\\n \u003C$view tiddler\u003C\u003CcurrentRecord>> field\u003C\u003CcurrentColumn>> format\\\date\\\ template{{$:/plugins/aaldrich/tables/defaults!!tbl-default-date-format}}/>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CfieldOrIndex>-field\\\>\\n \u003C$view tiddler\u003C\u003CcurrentRecord>> index\u003C\u003CcurrentColumn>> format\\\date\\\ template{{$:/plugins/aaldrich/tables/defaults!!tbl-default-date-format}}/>\\n \u003C/$list>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/default\:{\title\:\$:/plugins/aaldrich/tables/template/body/default\,\created\:\20170128100543507\,\modified\:\20191206025142239\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\text\:\\u003Ctd>\\n \u003C$list filter\\\\u003CfieldOrIndex>-index\\\>\\n \u003C$transclude tiddler\u003C\u003CcurrentRecord>> field\u003C\u003CcurrentColumn>> mode\\\block\\\ />\\n \u003C/$list>\\n \u003C$list filter\\\\u003CfieldOrIndex>-field\\\>\\n \u003C$transclude tiddler\u003C\u003CcurrentRecord>> index\u003C\u003CcurrentColumn>> mode\\\block\\\ />\\n \u003C/$list>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/delete\:{\title\:\$:/plugins/aaldrich/tables/template/body/delete\,\created\:\20170212101814663\,\modified\:\20191215041952847\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-delete\,\tbl-noedit\:\tbl-delete\,\text\:\\u003Ctd style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip\\\delete\\\ style\\\min-width:1.4ch\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableStyle>> $index\u003C\u003CcurrentRecord>> $value\\\\\\/>\\n \u003C$action-sendmessage $message\\\tm-delete-tiddler\\\ $param\u003C\u003CcurrentRecord>>/>\\n {{$:/core/images/delete-button}}\\n \u003C/$button>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/edit-input\:{\title\:\$:/plugins/aaldrich/tables/template/body/edit-input\,\created\:\20191205063124704\,\modified\:\20191206021441510\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-edit-input\,\tbl-noedit\:\tbl-edit-input\,\text\:\\u003Ctd class\\\tbl-inpt-edit\\\>\\n \u003C$list filter\\\\u003CfieldOrIndex>-index\\\>\\n \u003C$edit-text tiddler\u003C\u003CcurrentRecord>> field\u003C\u003CcurrentColumn>> tag\\\input\\\ type\\\text\\\/>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CfieldOrIndex>-field\\\>\\n \u003C$edit-text tiddler\u003C\u003CcurrentRecord>> index\u003C\u003CcurrentColumn>> tag\\\input\\\ type\\\text\\\/>\\n \u003C/$list>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/edit-textarea\:{\title\:\$:/plugins/aaldrich/tables/template/body/edit-textarea\,\created\:\20170209052300022\,\modified\:\20191206021427822\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-edit-textarea\,\tbl-noedit\:\tbl-edit-textarea\,\text\:\\u003Ctd class\\\tbl-inpt-edit\\\>\\n \u003C$list filter\\\\u003CfieldOrIndex>-index\\\>\\n \u003C$edit-text tiddler\u003C\u003CcurrentRecord>> field\u003C\u003CcurrentColumn>> tag\\\textarea\\\ minHeight10px rows1/>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CfieldOrIndex>-field\\\>\\n \u003C$edit-text tiddler\u003C\u003CcurrentRecord>> index\u003C\u003CcurrentColumn>> tag\\\textarea\\\ minHeight10px rows1/>\\n \u003C/$list>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/edit\:{\title\:\$:/plugins/aaldrich/tables/template/body/edit\,\created\:\20170209052300022\,\modified\:\20191206021611931\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-edit\,\tbl-noedit\:\tbl-edit\,\text\:\\u003Ctd class\\\tbl-inpt-edit\\\>\\n \u003C$list filter\\\\u003CfieldOrIndex>-index\\\>\\n \u003C$edit tiddler\u003C\u003CcurrentRecord>> field\u003C\u003CcurrentColumn>> />\\n \u003C/$list>\\n \u003C$list filter\\\\u003CfieldOrIndex>-field\\\>\\n \u003C$edit tiddler\u003C\u003CcurrentRecord>> index\u003C\u003CcurrentColumn>> />\\n \u003C/$list>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/expand-many\:{\title\:\$:/plugins/aaldrich/tables/template/body/expand-many\,\created\:\20170206022244360\,\modified\:\20191215041922693\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-expand-many\,\tbl-noedit\:\tbl-expand-many\,\text\:\\u003C$reveal type\\\nomatch\\\ state\u003C\u003CtempPathExpand>> text\\\show\\\ tag\\\td\\\ style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\expand\\\ style\\\min-width:1.4ch\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> $index\u003C\u003CcurrentRecord>> $value\\\show\\\ />\\n \u003C$set name\\\childTable\\\ filter\\\alltiddlers+shadowstitle\u003CcurrentTable>gettbl-expand\\\ >\\n \u003C$list filter\u003C\u003CexpandResetNested>>>\\n \u003C$action-setfield $tiddler\u003C\u003CtableExpand>> $field\\\tbl-page-marker\\\ $value\\\\\\/>\\n \u003C/$list>\\n \u003C/$set>\\n {{$:/core/images/right-arrow}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CtempPathExpand>> text\\\show\\\ tag\\\td\\\ style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\collapse\\\ style\\\min-width:1.4ch\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> $index\u003C\u003CcurrentRecord>>/>\\n {{$:/core/images/down-arrow}}\\n \u003C/$button>\\n\u003C/$reveal>\},\$:/plugins/aaldrich/tables/template/body/expand-one\:{\title\:\$:/plugins/aaldrich/tables/template/body/expand-one\,\created\:\20170206022244360\,\modified\:\20191215041940295\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-expand tbl-expand-one\,\tbl-noedit\:\tbl-expand tbl-expand-one\,\text\:\\u003C$reveal type\\\nomatch\\\ state\u003C\u003CtempPathExpand>> text\\\show\\\ tag\\\td\\\ style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\expand\\\ style\\\min-width:1.4ch\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> $field\\\text\\\ $value\\\\\\/>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> $index\u003C\u003CcurrentRecord>> $value\\\show\\\ />\\n \u003C$set name\\\childTable\\\ filter\\\alltiddlers+shadowstitle\u003CcurrentTable>gettbl-expand\\\ >\\n \u003C$list filter\u003C\u003CexpandResetNested>>>\\n \u003C$action-setfield $tiddler\u003C\u003CtableExpand>> $field\\\tbl-page-marker\\\ $value\\\\\\/>\\n \u003C/$list>\\n \u003C/$set>\\n {{$:/core/images/right-arrow}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CtempPathExpand>> text\\\show\\\ tag\\\td\\\ style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ tooltip\\\collapse\\\ style\\\min-width:1.4ch\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> $field\\\text\\\ $value\\\\\\/>\\n {{$:/core/images/down-arrow}}\\n \u003C/$button>\\n\u003C/$reveal>\},\$:/plugins/aaldrich/tables/template/body/index\:{\title\:\$:/plugins/aaldrich/tables/template/body/index\,\created\:\20190714050106704\,\modified\:\20191215045925271\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\ID id tbl-index\,\tbl-noedit\:\ID id tbl-index\,\type\:\\,\text\:\\u003Ctd style\\\width:1.4ch;\\\>\\n\u003C$set name\\\currentIndex\\\ filter\u003C\u003CgetIndex>> >\\n\u003C\u003CcurrentIndex>>\\n\u003C/$set>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/radio\:{\title\:\$:/plugins/aaldrich/tables/template/body/radio\,\created\:\20170206022244360\,\modified\:\20191215045742495\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tbl-radio\,\tbl-noedit\:\tbl-radio\,\text\:\\u003Ctd style\\\width:1.4ch;text-align:center;\\\>\\n\u003C$radio tiddler\u003C\u003CcurrentTable>> field\\\tbl-selected-record\\\ value\u003C\u003CcurrentRecord>>>\u003C/$radio>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/tags\:{\title\:\$:/plugins/aaldrich/tables/template/body/tags\,\created\:\20170128104241598\,\modified\:\20191213071802838\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\tags\,\tbl-noedit\:\\,\text\:\\u003Ctd class\\\tbl-tag-template\\\>\\n\u003C$tiddler tiddler\u003C\u003CcurrentRecord>>>{{||$:/core/ui/ViewTemplate/tags}}\u003C/$tiddler>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/body/title\:{\title\:\$:/plugins/aaldrich/tables/template/body/title\,\created\:\20170128100357203\,\modified\:\20191205205435926\,\revision\:\0\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\title\,\tbl-noedit\:\title\,\text\:\\u003Ctd>\\n\u003C$link to\u003C\u003CcurrentRecord>>>\\n\u003C$view tiddler\u003C\u003CcurrentRecord>> field\\\title\\\/>\u003C$list filter\\\$:/plugins/aaldrich/tables/defaultsgettbl-title-type-show-false\\\>{{$:/plugins/aaldrich/tables/defaults!!tbl-title-type-code}}\u003C/$list>\\n\u003C/$link>\\n\u003C/td>\},\$:/plugins/aaldrich/tables/template/expand/edit\:{\title\:\$:/plugins/aaldrich/tables/template/expand/edit\,\created\:\20190714035903654\,\modified\:\20190816062006055\,\tags\:\$:/tags/table/ExpandTemplate\,\tbl-template-name\:\edit\,\text\:\\u003C$edit class\\\tbl-inpt-edit\\\ tiddler\u003C\u003CcurrentRecord>> fieldtext tagtextarea/>\},\$:/plugins/aaldrich/tables/template/expand/transclude\:{\title\:\$:/plugins/aaldrich/tables/template/expand/transclude\,\created\:\20190714035903654\,\modified\:\20191210184939804\,\tags\:\$:/tags/table/ExpandTemplate\,\tbl-template-name\:\view\,\text\:\\u003C$tiddler tiddler\u003C\u003CcurrentRecord>>>\\n\u003C$transclude tiddler\u003C\u003CcurrentRecord>> field\\\text\\\ mode\\\block\\\ />\\n\u003C/$tiddler>\},\$:/plugins/aaldrich/tables/template/footer/default\:{\title\:\$:/plugins/aaldrich/tables/template/footer/default\,\created\:\20170205234154520\,\modified\:\20191208103208588\,\revision\:\0\,\tags\:\$:/tags/table/FooterTemplate\,\text\:\\u003C$list filter\\\\u003CcurrentTable>!contains:tbl-sort-by\u003CcurrentColumn>\\\ >\\n\u003Cth>\\n \u003C$button set\\\!!tbl-sort-by\\\ setTo\u003C\u003CcurrentColumn>> class\\\tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-sort-negate\\\ $value\\\false\\\/>\\n \u003C\u003CcurrentColumn>>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\firstRecord\\\ filter\u003C\u003CveryFirst>> value\u003C\u003CfirstRecord>> >\\n \u003C$wikify name\\\firstRecord\\\ text\u003C\u003CfirstRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003CfirstRecord>> />\\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n\u003C/th>\\n\u003C/$list>\\n\u003C$list filter\\\\u003CcurrentTable>contains:tbl-sort-by\u003CcurrentColumn>\\\ >\\n\u003Cth>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-sort-negateremovetrue\\\ variable\\\hasNegate\\\>\\n \u003C$button set\\\!!tbl-sort-negate\\\ setTo\\\true\\\ class\\\tbl-sort-svg tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C\u003CcurrentColumn>> {{$:/core/images/down-arrow}}\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\lastRecord\\\ filter\u003C\u003CveryLast>> value\u003C\u003ClastRecord>> >\\n \u003C$wikify name\\\lastRecord\\\ text\u003C\u003ClastRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003ClastRecord>> /> \\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-sort-negateremovefalse\\\ variable\\\hasNegate\\\>\\n \u003C$button set\\\!!tbl-sort-negate\\\ setTo\\\false\\\ class\\\tbl-sort-svg tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C\u003CcurrentColumn>> {{$:/core/images/up-arrow}}\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\firstRecord\\\ filter\u003C\u003CveryFirst>> value\u003C\u003CfirstRecord>> >\\n \u003C$wikify name\\\firstRecord\\\ text\u003C\u003CfirstRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003CfirstRecord>> />\\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$list>\\n\u003C/th>\\n\u003C/$list>\},\$:/plugins/aaldrich/tables/template/footer/disabled\:{\title\:\$:/plugins/aaldrich/tables/template/footer/disabled\,\created\:\20170205234107408\,\modified\:\20191205210029064\,\revision\:\0\,\tags\:\$:/tags/table/FooterTemplate\,\tbl-column-list\:\ID id\,\text\:\\u003Cth>\\n\u003C\u003CcurrentColumn>>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/footer/empty\:{\title\:\$:/plugins/aaldrich/tables/template/footer/empty\,\created\:\20170206022519162\,\modified\:\20191214044407597\,\revision\:\0\,\tags\:\$:/tags/table/FooterTemplate\,\tbl-column-list\:\tbl-expand tbl-expand-one tbl-expand-many tbl-anything tbl-index tbl-delete tbl-button tbl-checkbox tbl-radio\,\text\:\\u003Cth>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/button\:{\title\:\$:/plugins/aaldrich/tables/template/header/button\,\created\:\20170206022431198\,\modified\:\20191215042023298\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\tbl-button\,\text\:\\u003Cth style\\\width:1.4ch;text-align:center;\\\>\\n \u003Cspan>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-button-tip}} style\\\min-width:1.4ch\\\>\\n \u003C\u003CbuttonIcon>>\\n \u003C$list filter\u003C\u003CtableFilter>> variable\\\currentRecord\\\>\\n \u003C\u003CbuttonAction>>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/span>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/checkbox\:{\title\:\$:/plugins/aaldrich/tables/template/header/checkbox\,\created\:\20170206022431198\,\modified\:\20191215042449992\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\tbl-checkbox\,\text\:\\u003Cth style\\\width:1.4ch;text-align:center;\\\ class\\\tbl-inpt-check\\\>\\n \u003C$set name\\\allSelected\\\ filter\u003C\u003CcheckboxFilter>> value\\\$:/plugins/aaldrich/tables/macro!!tbl-false\\\ emptyValue\\\$:/plugins/aaldrich/tables/macro!!tbl-true\\\>\\n \u003C$reveal type\\\match\\\ state\u003C\u003CallSelected>> text\\\false\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-checkbox-tip}}>\\n \u003C$checkbox field\\\tbl-selall\\\ unchecked\\\closed\\\ default\\\closed\\\/>\\n \u003C$list filter\u003C\u003CtableFilter>>variable\\\currentRecord\\\>\\n \u003C$action-listops $tiddler\u003C\u003CcurrentRecord>> $tags\\\+append\u003CcheckTag>\\\ />\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentRecord>> $field\u003C\u003CcheckField>> $value\u003C\u003CcheckSel>>/>\\n \u003C\u003CcheckActions>>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ state\u003C\u003CallSelected>> text\\\true\\\>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip{{!!tbl-checkbox-tip}}>\\n \u003C$checkbox \u003C$checkbox field\\\tbl-selall\\\ checked\\\open\\\ default\\\open\\\/>\\n \u003C$list filter\u003C\u003CtableFilter>>variable\\\currentRecord\\\>\\n \u003C$action-listops $tiddler\u003C\u003CcurrentRecord>> $tags\\\+remove\u003CcheckTag>\\\ />\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentRecord>> $field\u003C\u003CcheckField>> $value\u003C\u003CcheckUnsel>>/>\\n \u003C\u003CcheckUnactions>>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C/$set>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/default\:{\title\:\$:/plugins/aaldrich/tables/template/header/default\,\created\:\20170205223914688\,\modified\:\20191208103157722\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\text\:\\u003C$list filter\\\\u003CcurrentTable>!contains:tbl-sort-by\u003CcurrentColumn>\\\ >\\n\u003Cth>\\n \u003C$button set\\\!!tbl-sort-by\\\ setTo\u003C\u003CcurrentColumn>> class\\\tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-sort-negate\\\ $value\\\false\\\/>\\n \u003C\u003CcurrentColumn>>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\firstRecord\\\ filter\u003C\u003CveryFirst>> value\u003C\u003CfirstRecord>> >\\n \u003C$wikify name\\\firstRecord\\\ text\u003C\u003CfirstRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003CfirstRecord>> />\\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n\u003C/th>\\n\u003C/$list>\\n\u003C$list filter\\\\u003CcurrentTable>contains:tbl-sort-by\u003CcurrentColumn>\\\ >\\n\u003Cth>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-sort-negateremovetrue\\\ variable\\\hasNegate\\\>\\n \u003C$button set\\\!!tbl-sort-negate\\\ setTo\\\true\\\ class\\\tbl-sort-svg tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C\u003CcurrentColumn>> {{$:/core/images/down-arrow}}\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\lastRecord\\\ filter\u003C\u003CveryLast>> value\u003C\u003ClastRecord>> >\\n \u003C$wikify name\\\lastRecord\\\ text\u003C\u003ClastRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003ClastRecord>> /> \\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-sort-negateremovefalse\\\ variable\\\hasNegate\\\>\\n \u003C$button set\\\!!tbl-sort-negate\\\ setTo\\\false\\\ class\\\tbl-sort-svg tc-btn-invisible tc-tiddlylink\\\ >\\n \u003C\u003CcurrentColumn>> {{$:/core/images/up-arrow}}\\n \u003C$list filter\\\\u003CcurrentTable>gettbl-page-marker\\\ variable\\\hasMarker\\\>\\n \u003C$set name\\\firstRecord\\\ filter\u003C\u003CveryFirst>> value\u003C\u003CfirstRecord>> >\\n \u003C$wikify name\\\firstRecord\\\ text\u003C\u003CfirstRecord>> mode\\\inline\\\>\\n \u003C$action-setfield $tiddler{{!!title}} $field\\\tbl-page-marker\\\ $value\u003C\u003CfirstRecord>> />\\n \u003C/$wikify>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$button>\\n \u003C/$list>\\n\u003C/th>\\n\u003C/$list>\},\$:/plugins/aaldrich/tables/template/header/delete\:{\title\:\$:/plugins/aaldrich/tables/template/header/delete\,\created\:\20170212102107998\,\modified\:\20191215042010684\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\tbl-delete\,\text\:\\u003Cth style\\\width:1.4ch;text-align:center;\\\>\\n \u003Cspan>\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip\\\delete all\\\ style\\\min-width:1.4ch\\\>\\n\u003C$list filter\u003C\u003CshowDeleteConfirm>>>\\n \u003C$action-setfield $tiddler\\\$:/temp/tables/delete-all\\\ text\u003C\u003CcurrentTable>>/>\\n\u003C/$list>\\n {{$:/core/images/delete-button}}\\n \u003C/$button>\\n \u003C/span>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/disabled\:{\title\:\$:/plugins/aaldrich/tables/template/header/disabled\,\created\:\20170205233518589\,\modified\:\20191205210234858\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\ID id\,\text\:\\u003Cth>\\n\u003C\u003CcurrentColumn>>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/empty\:{\title\:\$:/plugins/aaldrich/tables/template/header/empty\,\created\:\20190714062216671\,\modified\:\20191214044612648\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\tbl-anything tbl-index tbl-radio\,\text\:\\u003Cth>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/header/expand\:{\title\:\$:/plugins/aaldrich/tables/template/header/expand\,\created\:\20170206022431198\,\modified\:\20191215042036015\,\revision\:\0\,\tags\:\$:/tags/table/HeaderTemplate\,\tbl-column-list\:\tbl-expand tbl-expand-one tbl-expand-many\,\text\:\\u003Cth style\\\width:1.4ch;text-align:center;\\\>\\n \u003C$set name\\\isExpanded\\\ filter\\\\u003CtempTableExpand>indexeslimit1\\\ value\\\true\\\ emptyValue\\\false\\\>\\n \u003C$list variable\\\showColAll\\\ filter\\\\u003CisExpanded>-false\\\ >\\n \u003C$button class\\\tc-btn-invisible\\\ tooltip\\\collapse all\\\ style\\\min-width:1.4ch\\\>{{$:/core/images/fold-button}}\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableExpand>> text\\\\\\/>\\n \u003C/$button>\\n \u003C/$list>\\n\u003C!--this is done so the column stays visible if the table is squished out of tiddler margin -->\\n \u003C$list variable\\\hideColAll\\\ filter\\\\u003CisExpanded>-true\\\ >\\n \u003C$button class\\\tc-btn-invisible\\\ style\\\cursor:default;min-width:1.4ch\\\>{{$:/core/images/blank}}\\n \u003C/$button>\\n \u003C/$list>\\n \u003C/$set>\\n\u003C/th>\},\$:/plugins/aaldrich/tables/template/pagination/default\:{\title\:\$:/plugins/aaldrich/tables/template/pagination/default\,\created\:\20190715072523828\,\modified\:\20191208103154143\,\tags\:\\,\text\:\\u003C$reveal type\\\nomatch\\\ style\\\text-align:center;\\\ state\\\!!tbl-page-marker\\\ text\\\\\\ tag\\\div\\\ class\\\tbl-page-footer\\\>\\n \u003C$reveal type\\\nomatch\\\ style\\\float:left;\\\ state\\\!!tbl-page-marker\\\ text\u003C\u003CpreviousPage>> tag\\\div\\\ class\\\tbl-page-prev\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003C$action-setfield tbl-page-marker\u003C\u003CpreviousPage>>/>{{$:/core/images/chevron-left}} Prev\u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ style\\\float:right;\\\ state\\\!!tbl-limit\\\ text\u003C\u003CrecordCount>> tag\\\div\\\ class\\\tbl-page-next\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003C$action-setfield tbl-page-marker\u003C\u003CnextPage>>/>Next {{$:/core/images/chevron-right}}\u003C/$button>\\n \u003C/$reveal>\\nDisplaying \u003C\u003CfirstCount>> through \u003C\u003ClastCount>> of \u003C\u003CtotalCount>> Results |\\n\u003C$select tiddler\u003C\u003CcurrentTable>> field\\\tbl-limit\\\ actions\\\\\\\\\\u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-page-marker\u003C\u003CfirstRecord>>/>\\\\\\\\\>\\n\u003C$set name\\\limitFilter\\\ value{{$:/plugins/aaldrich/tables/defaults!!tbl-limit-choices}} >\\n\u003C$list filter\u003C\u003ClimitFilter>>>\\n\u003Coption value{{!!title}}>Limit {{!!title}}\u003C/option>\\n\u003C/$list>\\n\u003C/$set>\\n\u003Coption value9999999>Show All\u003C/option>\\n\u003C/$select>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\\\!!tbl-page-marker\\\ text\\\\\\ >\\n \u003C$list filter\u003C\u003CveryFirst>> >\\n \u003Cdiv class\\\tbl-page-refresh\\\>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CcurrentTable>> tbl-page-marker\u003C\u003CfirstRecord>>/>Click to Enable Pagination\u003C/$button>\\n \u003C/div>\\n \u003C/$list>\\n\u003C/$reveal>\},\$:/plugins/aaldrich/tables/view\:{\title\:\$:/plugins/aaldrich/tables/view\,\created\:\20170205062652787\,\modified\:\20191215053651054\,\tags\:\\,\text\:\\u003C!-- reveals Edit Buttons-->\\n{{||$:/plugins/aaldrich/tables/editor/open}}\\n\u003C!-- reveals deletion confirmation -->\\n \u003C$reveal class\\\tbl-delete-confirm\\\ type\\\match\\\ state\\\$:/temp/tables/delete-all!!text\\\ text\u003C\u003CcurrentTable>> tag\\\div\\\>\\n Delete all displayed records? \\n \u003C$button class\\\tc-btn-invisible\\\>\\n \u003C$action-deletetiddler $tiddler\\\$:/temp/tables/delete-all\\\/>\\n \u003C$list filter\u003C\u003CtableFilter>> variable\\\currentRecord\\\>\\n \u003C$action-setfield $tiddler\u003C\u003CtempTableStyle>> $index\u003C\u003CcurrentRecord>> $value\\\\\\/>\\n \u003C$action-deletetiddler $tiddler\u003C\u003CcurrentRecord>>/>\\n \u003C/$list>\\n {{$:/core/images/delete-button}} yes \\n \u003C/$button> or \\n \u003C$button class\\\tc-btn-invisible\\\>\\n \u003C$action-deletetiddler $tiddler\\\$:/temp/tables/delete-all\\\/>\\n {{$:/core/images/close-button}} no \\n \u003C/$button>\\n \u003C/$reveal>\\n\u003Ctable style{{!!tbl-style-table}}>\\n\u003C!-- reveals table caption -->\\n \u003C$reveal type\\\match\\\ state\\\!!tbl-show-caption\\\ text\\\true\\\ tag\\\caption\\\>\\n \u003C$transclude tiddler\u003C\u003CcurrentTable>> field\\\tbl-caption\\\ mode{{$:/plugins/aaldrich/tables/defaults!!tbl-caption-mode}}/>\\n \u003C/$reveal>\\n\u003C!-- reveals column groups -->\\n \u003C$reveal type\\\match\\\ state\\\!!tbl-show-colgroup\\\ text\\\true\\\ tag\\\colgroup\\\>\\n {{!!tbl-style-colgroup}}\\n \u003C/$reveal>\\n\u003C!-- reveal header -->\\n \u003C$reveal type\\\match\\\ state\\\!!tbl-show-header\\\ text\\\true\\\ tag\\\thead\\\>\\n \u003Ctr>\\n \u003C$list filter{{!!tbl-columns}} variable\\\currentColumn\\\>\\n \u003C$set name\\\headerLookup\\\ filter\\\alltiddlers+shadowstag$:/tags/table/HeaderTemplatetag\u003CcurrentColumn>alltiddlers+shadowstag$:/tags/table/HeaderTemplatecontains:tbl-column-list\u003CcurrentColumn>+limit1gettitle\\\ value\u003C\u003CheaderLookup>> emptyValue{{$:/plugins/aaldrich/tables/defaults!!tbl-temp-default-head}}>\\n \u003C$transclude tiddler\u003C\u003CheaderLookup>> field\\\text\\\ mode\\\inline\\\/>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/tr>\\n \u003C/$reveal>\\n\u003C!-- reveal footer -->\\n \u003C$reveal type\\\match\\\ state\\\!!tbl-show-footer\\\ text\\\true\\\ tag\\\tfoot\\\>\\n \u003Ctr>\\n \u003C$list filter{{!!tbl-columns}} variable\\\currentColumn\\\>\\n \u003C$set name\\\footerLookup\\\ filter\\\alltiddlers+shadowstag$:/tags/table/FooterTemplatetag\u003CcurrentColumn>alltiddlers+shadowstag$:/tags/table/FooterTemplatecontains:tbl-column-list\u003CcurrentColumn>+limit1gettitle\\\ value\u003C\u003CfooterLookup>> emptyValue{{$:/plugins/aaldrich/tables/defaults!!tbl-temp-default-foot}}>\\n \u003C$transclude tiddler\u003C\u003CfooterLookup>> field\\\text\\\ mode\\\inline\\\/>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/tr>\\n \u003C/$reveal>\\n\u003C!-- generate records -->\\n \u003Ctbody>\\n \u003C$list filter\u003C\u003CtableFilter>> variable\\\currentRecord\\\>\\n \u003C$wikify name\\\rowStyle\\\ text\\\\\\\\\\u003C$transclude tiddler\u003C\u003CtempTableStyle>> index\u003C\u003CcurrentRecord>> />\\\\\\\\\ mode\\\inline\\\>\\n \u003C$list filter\\\\u003CcurrentTable>contains:tbl-modeedit\\\ variable\\\tableModeEdit\\\>\\n \u003Ctr class\\\tbl-record-row\\\ style\u003C\u003CrowStyle>>>\\n \u003C$list filter{{!!tbl-columns}} variable\\\currentColumn\\\>\\n \u003C$set name\\\hasIndex\\\ filter\\\\u003CcurrentRecord>indexes-\u003CcurrentColumn>+count-\u003CcurrentRecord>indexescount\\\ valueindex emptyValue\\\field\\\>\\n \u003C$set name\\\fieldOrIndex\\\ filter\\\\u003CcurrentRecord>fields-\u003CcurrentColumn>+count-\u003CcurrentRecord>fieldscount\\\ value\\\field\\\ emptyValue\u003C\u003ChasIndex>>>\\n \u003C$set name\\\bodyLookup\\\ filter\\\alltiddlers+shadowstag$:/tags/table/BodyTemplatecontains:tbl-noedit\u003CcurrentColumn>limit1gettitle\\\ value\u003C\u003CbodyLookup>> emptyValue{{$:/plugins/aaldrich/tables/defaults!!tbl-temp-default-body-edit}}>\\n \u003C$transclude tiddler\u003C\u003CbodyLookup>> field\\\text\\\ mode\\\inline\\\/>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/tr>\\n \u003C/$list>\\n \u003C$list filter\\\\u003CcurrentTable>!contains:tbl-modeedit\\\ variable\\\tableModeNormal\\\>\\n \u003Ctr class\\\tbl-record-row\\\ style\u003C\u003CrowStyle>>>\\n \u003C$list filter{{!!tbl-columns}} variable\\\currentColumn\\\>\\n \u003C$set name\\\hasIndex\\\ filter\\\\u003CcurrentRecord>indexes-\u003CcurrentColumn>+count-\u003CcurrentRecord>indexescount\\\ valueindex emptyValue\\\field\\\>\\n \u003C$set name\\\fieldOrIndex\\\ filter\\\\u003CcurrentRecord>fields-\u003CcurrentColumn>+count-\u003CcurrentRecord>fieldscount\\\ value\\\field\\\ emptyValue\u003C\u003ChasIndex>>>\\n \u003C$set name\\\bodyLookup\\\ filter\\\alltiddlers+shadowstag$:/tags/table/BodyTemplatetag\u003CcurrentColumn>alltiddlers+shadowstag$:/tags/table/BodyTemplatecontains:tbl-column-list\u003CcurrentColumn>+limit1gettitle\\\ value\u003C\u003CbodyLookup>> emptyValue{{$:/plugins/aaldrich/tables/defaults!!tbl-temp-default-body}}>\\n \u003C$transclude tiddler\u003C\u003CbodyLookup>> field\\\text\\\ mode\\\inline\\\/>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/tr>\\n \u003C/$list>\\n\u003C!-- reveal expanded record-->\\n \u003C$list variable\\\isExpanded\\\ filter\\\\u003CtempTableExpand>getindex\u003CcurrentRecord>limit1\\\>\\n \u003Ctr class\\\tbl-record-expand\\\ >\\n \u003C$set name\\\childTable\\\ filter\\\alltiddlers+shadowstitle\u003CcurrentTable>gettbl-expand\\\ >\\n \u003C$set name\\\expandClass\\\ filter\u003C\u003CexpandClassFilter>> value\\\tbl-expand-nopad\\\ emptyValue\\\tbl-expand-pad\\\>\\n \u003Ctd colspan\\\999\\\ class\u003C\u003CexpandClass>> >\\n\\n \u003C\u003CtableExpandRender>>\\n\\n \u003C/td>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/tr>\\n \u003C/$list>\\n \u003C/$wikify>\\n \u003C/$list>\\n \u003C/tbody>\\n\u003C/table>\\n{{||$:/plugins/aaldrich/tables/pagination}}\}}}},{created:20210327052508762,dependents:$:/plugins/tiddlywiki/codemirror,description:A better editor for TW5 - built on the Official CodeMirror Plugin,modified:20210510224047195,name:CMPlus,plugin-type:plugin,tags:,title:$:/plugins/adithyab/cmplus,version:0.2.1,type:application/json,text:{\tiddlers\:{\$:/config/codemirror/autocomplete\:{\title\:\$:/config/codemirror/autocomplete\,\text\:\{\\n\\t\\\Ctrl-Space\\\: \\\autocomplete\\\\\n}\,\type\:\json\,\created\:\20210328004023360\,\extend\:\extraKeys\,\modified\:\20210328004023360\},\$:/plugins/adithyab/cmplus/macros\:{\title\:\$:/plugins/adithyab/cmplus/macros\,\created\:\20210328020051916\,\modified\:\20210328053732117\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define cmcolour(name)\\n{{$:/plugins/adithyab/cmplus/settings##$name$}}\\n\\\\end\},\$:/plugins/adithyab/cmplus/readme\:{\title\:\$:/plugins/adithyab/cmplus/readme\,\created\:\20210328060842133\,\modified\:\20210328060929665\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\!! TW5 CodeMirrorPlus\\nTowards making a better editor for TiddlyWiki5.\\n\},\$:/plugins/adithyab/cmplus/settings\:{\title\:\$:/plugins/adithyab/cmplus/settings\,\text\:\monospace-font:monospace,\\\Courier New\\\\\nselected:rgba(100,100,100,0.3)\\nlinenumber:\u003C\u003Ccolour primary>>\\nkeyword:\u003C\u003Ccolour code-foreground>>\\nmacro:\u003C\u003Ccolour code-foreground>>\\nquote:\u003C\u003Ccolour primary>>\\npre:\u003C\u003Ccolour foreground>>\\nexternallink:\u003C\u003Ccolour external-link-foreground>>\\ninternallink:\u003C\u003Ccolour tiddler-title-foreground>>\\nlink:\u003C\u003Ccolour tiddler-title-foreground>>\\ntransclude:\u003C\u003Ccolour tiddler-title-foreground>>\\nmonospace:\u003C\u003Ccolour foreground>>\\nlist1:\u003C\u003Ccolour primary>>\\nlist2:\u003C\u003Ccolour primary>>\\nlist3:\u003C\u003Ccolour primary>>\\nlist4:\u003C\u003Ccolour primary>>\\nlist5:\u003C\u003Ccolour primary>>\\nlist6:\u003C\u003Ccolour primary>>\\nh1:\u003C\u003Ccolour primary>>\\nh2:\u003C\u003Ccolour primary>>\\nh3:\u003C\u003Ccolour primary>>\\nh4:\u003C\u003Ccolour primary>>\\nh5:\u003C\u003Ccolour primary>>\\nh6:\u003C\u003Ccolour primary>>\\nhr:\u003C\u003Ccolour primary>>\,\type\:\application/x-tiddler-dictionary\,\created\:\20210328015904035\,\modified\:\20210328054754059\,\tags\:\\},\$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\:{\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\,\text\:\// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n\\n(function (mod) {\\n\\tif (typeof exports \\\object\\\ && typeof module \\\object\\\) // CommonJS\\n\\t\\tmod(require(\\\../../lib/codemirror\\\));\\n\\telse if (typeof define \\\function\\\ && define.amd) // AMD\\n\\t\\tdefine(\\\../../lib/codemirror\\\, mod);\\n\\telse // Plain browser env\\n\\t\\tmod(CodeMirror);\\n})(function (CodeMirror) {\\n\\t\\\use strict\\\;\\n\\n\\tCodeMirror.registerHelper(hint, anyword, function (editor) {\\n\\t\\tvar cur editor.getCursor();\\n\\t\\tvar curLine editor.getLine(cur.line);\\n\\t\\tvar start cur.ch;\\n\\t\\tvar end start;\\n\\t\\tvar max_length 30\\n\\t\\twhile (start) {\\n\\t\\t\\tif (end - start > max_length) {\\n\\t\\t\\t\\treturn null;\\n\\t\\t\\t}\\n\\t\\t\\tvar ch curLine.charAt(start - 1)\\n\\t\\t\\tif (!(ch || ch { || ch \\\|\\\)) {\\n\\t\\t\\t\\tstart--;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar curWord start ! end && curLine.slice(start, end);\\n\\t\\tif (curLine.charAt(start) $) {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlist: $tw.wiki.filterTiddlers(`alltiddlerssearch:title:literal${curWord}!prefix$:/state`),\\n\\t\\t\\t\\tfrom: CodeMirror.Pos(cur.line, start),\\n\\t\\t\\t\\tto: CodeMirror.Pos(cur.line, end)\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\treturn {\\n\\t\\t\\t\\tlist: $tw.wiki.filterTiddlers(`alltiddlers!issystem!isshadowsearch:title:literal${curWord}!prefix$:/state`),\\n\\t\\t\\t\\tfrom: CodeMirror.Pos(cur.line, start),\\n\\t\\t\\t\\tto: CodeMirror.Pos(cur.line, end)\\n\\t\\t\\t}\\n\\t\\t}\\n\\t})\\n});\,\created\:\20210328004232522\,\modified\:\20210328010801763\,\module-type\:\codemirror\,\type\:\application/javascript\},\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\:{\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\,\text\:\.CodeMirror-hints {\\n position: absolute;\\n z-index: 10;\\n overflow: hidden;\\n list-style: none;\\n\\n margin: 0;\\n padding: 2px;\\n\\n -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\n border-radius: 3px;\\n border: 1px solid silver;\\n\\n background: white;\\n font-size: 90%;\\n font-family: monospace;\\n\\n max-height: 20em;\\n overflow-y: auto;\\n}\\n\\n.CodeMirror-hint {\\n margin: 0;\\n padding: 0 4px;\\n border-radius: 2px;\\n white-space: pre;\\n color: black;\\n cursor: pointer;\\n}\\n\\nli.CodeMirror-hint-active {\\n background: #08f;\\n color: white;\\n}\\n\,\created\:\20210328012141944\,\modified\:\20210328012141944\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\:{\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\,\text\:\// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function(W){\\\use strict\\\;var I\\\CodeMirror-hint-active\\\;function o(t,i){this.cmt,this.optionsi,this.widgetnull,this.debounce0,this.tick0,this.startPosthis.cm.getCursor(\\\start\\\),this.startLenthis.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var ethis;t.on(\\\cursorActivity\\\,this.activityFuncfunction(){e.cursorActivity()})}W.showHintfunction(t,i,e){if(!i)return t.showHint(e);e&&e.async&&(i.async!0);var n{hint:i};if(e)for(var o in e)noeo;return t.showHint(n)},W.defineExtension(\\\showHint\\\,function(t){tfunction(t,i,e){var nt.options.hintOptions,o{};for(var s in l)osls;if(n)for(var s in n)void 0!ns&&(osns);if(e)for(var s in e)void 0!es&&(oses);o.hint.resolve&&(o.hinto.hint.resolve(t,i));return o}(this,this.getCursor(\\\start\\\),t);var ithis.listSelections();if(!(1\u003Ci.length)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var e0;e\u003Ci.length;e++)if(ie.head.line!ie.anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var nthis.state.completionActivenew o(this,t);n.options.hint&&(W.signal(this,\\\startCompletion\\\,this),n.update(!0))}}),W.defineExtension(\\\closeHint\\\,function(){this.state.completionActive&&this.state.completionActive.close()});var swindow.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cwindow.cancelAnimationFrame||clearTimeout;function B(t){return\\\string\\\typeof t?t:t.text}function K(t,i){for(;i&&i!t;){if(\\\LI\\\i.nodeName.toUpperCase()&&i.parentNodet)return i;ii.parentNode}}function n(o,t){this.completiono,this.datat,this.picked!1;var ethis,so.cm,cs.getInputField().ownerDocument,rc.defaultView||c.parentWindow,lthis.hintsc.createElement(\\\ul\\\),io.cm.options.theme;l.className\\\CodeMirror-hints \\\+i,this.selectedHintt.selectedHint||0;for(var nt.list,h0;h\u003Cn.length;++h){var al.appendChild(c.createElement(\\\li\\\)),unh,f\\\CodeMirror-hint\\\+(h!this.selectedHint?\\\\\\:\\\ \\\+I);null!u.className&&(fu.className+\\\ \\\+f),a.classNamef,u.render?u.render(a,t,u):a.appendChild(c.createTextNode(u.displayText||B(u))),a.hintIdh}var p,d,m,go.options.container||c.body,vs.cursorCoords(o.options.alignWithWord?t.from:null),yv.left,wv.bottom,H!0,C0,b0;g!c.body&&(d(p-1!\\\absolute\\\,\\\relative\\\,\\\fixed\\\.indexOf(r.getComputedStyle(g).position)?g:g.offsetParent).getBoundingClientRect(),mc.body.getBoundingClientRect(),Cd.left-m.left-p.scrollLeft,bd.top-m.top-p.scrollTop),l.style.lefty-C+\\\px\\\,l.style.topw-b+\\\px\\\;var kr.innerWidth||Math.max(c.body.offsetWidth,c.documentElement.offsetWidth),Ar.innerHeight||Math.max(c.body.offsetHeight,c.documentElement.offsetHeight);g.appendChild(l);var x,T,Sl.getBoundingClientRect(),MS.bottom-A,Nl.scrollHeight>l.clientHeight+1,Fs.getScrollInfo();0\u003CM&&(xS.bottom-S.top,0\u003Cv.top-(v.bottom-S.top)-x?(l.style.top(wv.top-x-b)+\\\px\\\,H!1):A\u003Cx&&(l.style.heightA-5+\\\px\\\,l.style.top(wv.bottom-S.top-b)+\\\px\\\,Ts.getCursor(),t.from.ch!T.ch&&(vs.cursorCoords(T),l.style.left(yv.left-C)+\\\px\\\,Sl.getBoundingClientRect())));var E,OS.right-k;if(0\u003CO&&(S.right-S.left>k&&(l.style.widthk-5+\\\px\\\,O-S.right-S.left-k),l.style.left(yv.left-O-C)+\\\px\\\),N)for(var Pl.firstChild;P;PP.nextSibling)P.style.paddingRights.display.nativeBarWidth+\\\px\\\;return s.addKeyMap(this.keyMapfunction(t,n){var o{Up:function(){n.moveFocus(-1)},Down:function(){n.moveFocus(1)},PageUp:function(){n.moveFocus(1-n.menuSize(),!0)},PageDown:function(){n.moveFocus(n.menuSize()-1,!0)},Home:function(){n.setFocus(0)},End:function(){n.setFocus(n.length-1)},Enter:n.pick,Tab:n.pick,Esc:n.close};/Mac/.test(navigator.platform)&&(o\\\Ctrl-P\\\function(){n.moveFocus(-1)},o\\\Ctrl-N\\\function(){n.moveFocus(1)});var it.options.customKeys,si?{}:o;function e(t,i){var e\\\string\\\!typeof i?function(t){return i(t,n)}:o.hasOwnProperty(i)?oi:i;ste}if(i)for(var c in i)i.hasOwnProperty(c)&&e(c,ic);var rt.options.extraKeys;if(r)for(var c in r)r.hasOwnProperty(c)&&e(c,rc);return s}(o,{moveFocus:function(t,i){e.changeActive(e.selectedHint+t,i)},setFocus:function(t){e.changeActive(t)},menuSize:function(){return e.screenAmount()},length:n.length,close:function(){o.close()},pick:function(){e.pick()},data:t})),o.options.closeOnUnfocus&&(s.on(\\\blur\\\,this.onBlurfunction(){EsetTimeout(function(){o.close()},100)}),s.on(\\\focus\\\,this.onFocusfunction(){clearTimeout(E)})),s.on(\\\scroll\\\,this.onScrollfunction(){var ts.getScrollInfo(),is.getWrapperElement().getBoundingClientRect(),ew+F.top-t.top,ne-(r.pageYOffset||(c.documentElement||c.body).scrollTop);if(H||(n+l.offsetHeight),n\u003Ci.top||n>i.bottom)return o.close();l.style.tope+\\\px\\\,l.style.lefty+F.left-t.left+\\\px\\\}),W.on(l,\\\dblclick\\\,function(t){var iK(l,t.target||t.srcElement);i&&null!i.hintId&&(e.changeActive(i.hintId),e.pick())}),W.on(l,\\\click\\\,function(t){var iK(l,t.target||t.srcElement);i&&null!i.hintId&&(e.changeActive(i.hintId),o.options.completeOnSingleClick&&e.pick())}),W.on(l,\\\mousedown\\\,function(){setTimeout(function(){s.focus()},20)}),this.scrollToActive(),W.signal(t,\\\select\\\,nthis.selectedHint,l.childNodesthis.selectedHint),!0}function r(t,i,e,n){var o;t.async?t(i,n,e):(ot(i,e))&&o.then?o.then(n):n(o)}o.prototype{close:function(){this.active()&&(this.cm.state.completionActivenull,this.ticknull,this.cm.off(\\\cursorActivity\\\,this.activityFunc),this.widget&&this.data&&W.signal(this.data,\\\close\\\),this.widget&&this.widget.close(),W.signal(this.cm,\\\endCompletion\\\,this.cm))},active:function(){return this.cm.state.completionActivethis},pick:function(t,i){var et.listi,nthis;this.cm.operation(function(){e.hint?e.hint(n.cm,t,e):n.cm.replaceRange(B(e),e.from||t.from,e.to||t.to,\\\complete\\\),W.signal(t,\\\pick\\\,e),n.cm.scrollIntoView()}),this.close()},cursorActivity:function(){this.debounce&&(c(this.debounce),this.debounce0);var tthis.startPos;this.data&&(tthis.data.from);var i,ethis.cm.getCursor(),nthis.cm.getLine(e.line);e.line!this.startPos.line||n.length-e.ch!this.startLen-this.startPos.ch||e.ch\u003Ct.ch||this.cm.somethingSelected()||!e.ch||this.options.closeCharacters.test(n.charAt(e.ch-1))?this.close():((ithis).debounces(function(){i.update()}),this.widget&&this.widget.disable())},update:function(i){var e,n;null!this.tick&&(n++(ethis).tick,r(this.options.hint,this.cm,this.options,function(t){e.tickn&&e.finishUpdate(t,i)}))},finishUpdate:function(t,i){this.data&&W.signal(this.data,\\\update\\\);var ethis.widget&&this.widget.picked||i&&this.options.completeSingle;this.widget&&this.widget.close(),(this.datat)&&t.list.length&&(e&&1t.list.length?this.pick(t,0):(this.widgetnew n(this,t),W.signal(t,\\\shown\\\)))}},n.prototype{close:function(){var t;this.completion.widgetthis&&(this.completion.widgetnull,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap),tthis.completion.cm,this.completion.options.closeOnUnfocus&&(t.off(\\\blur\\\,this.onBlur),t.off(\\\focus\\\,this.onFocus)),t.off(\\\scroll\\\,this.onScroll))},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var tthis;this.keyMap{Enter:function(){t.picked!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(t,i){var e;t>this.data.list.length?ti?this.data.list.length-1:0:t\u003C0&&(ti?0:this.data.list.length-1),this.selectedHint!t&&((ethis.hints.childNodesthis.selectedHint)&&(e.classNamee.className.replace(\\\ \\\+I,\\\\\\)),(ethis.hints.childNodesthis.selectedHintt).className+\\\ \\\+I,this.scrollToActive(),W.signal(this.data,\\\select\\\,this.data.listthis.selectedHint,e))},scrollToActive:function(){var tthis.completion.options.scrollMargin||0,ithis.hints.childNodesMath.max(0,this.selectedHint-t),ethis.hints.childNodesMath.min(this.data.list.length-1,this.selectedHint+t),nthis.hints.firstChild;i.offsetTop\u003Cthis.hints.scrollTop?this.hints.scrollTopi.offsetTop-n.offsetTop:e.offsetTop+e.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTope.offsetTop+e.offsetHeight-this.hints.clientHeight+n.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},W.registerHelper(\\\hint\\\,\\\auto\\\,{resolve:function(t,i){var e,ct.getHelpers(i,\\\hint\\\);if(c.length){var nfunction(t,n,o){var sfunction(t,i){if(!t.somethingSelected())return i;for(var e,n0;n\u003Ci.length;n++)in.supportsSelection&&e.push(in);return e}(t,c);!function i(e){if(es.length)return n(null);r(se,t,o,function(t){t&&0\u003Ct.list.length?n(t):i(e+1)})}(0)};return n.async!0,n.supportsSelection!0,n}return(et.getHelper(t.getCursor(),\\\hintWords\\\))?function(t){return W.hint.fromList(t,{words:e})}:W.hint.anyword?function(t,i){return W.hint.anyword(t,i)}:function(){}}}),W.registerHelper(\\\hint\\\,\\\fromList\\\,function(t,i){var e,nt.getCursor(),ot.getTokenAt(n),sW.Pos(n.line,o.start),cn;o.start\u003Cn.ch&&/\\\\w/.test(o.string.charAt(n.ch-o.start-1))?eo.string.substr(0,n.ch-o.start):(e\\\\\\,sn);for(var r,l0;l\u003Ci.words.length;l++){var hi.wordsl;h.slice(0,e.length)e&&r.push(h)}if(r.length)return{list:r,from:s,to:c}}),W.commands.autocompleteW.showHint;var l{hint:W.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/\\\\s()\\\\\\\\{};:>,/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};W.defineOption(\\\hintOptions\\\,null)});\\n\,\created\:\20210328012150088\,\modified\:\20210328012150088\,\module-type\:\codemirror\,\type\:\application/javascript\},\$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\:{\title\:\$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\,\created\:\20200815103937889\,\modified\:\20210328054714579\,\module-type\:\codemirror-theme\,\name\:\cmplus\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\```\\n/*\\nTiddlywiki Metadata\\n----\\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\\n\\nAdditional Fields - \\nmodule-type: codemirror-theme\\nname: cmplus\\n*/\\n```\\n\\n.cm-s-cmplus{\\n line-height: 1.5em;\\n background: \u003C\u003Ccolour tiddler-editor-background>> !important;\\n color: \u003C\u003Ccolour foreground>> !important;\\n}\\n\\n.cm-s-cmplus .CodeMirror-lines {\\n padding: 8px 0;\\n}\\n\\n.cm-s-cmplus .CodeMirror-linenumber {\\n color: \u003C\u003Ccmcolour linenumber>>;\\n}\\n\\n.cm-s-cmplus .CodeMirror-gutters {\\n background-color: \u003C\u003Ccolour page-background>>;\\n padding-right: 10px;\\n z-index: 3;\\n border: none;\\n}\\n\\n.cm-s-cmplus div.CodeMirror-cursor {\\n border-left: 3px solid \u003C\u003Ccolour very-muted-foreground>>;\\n}\\n\\n.cm-s-cmplus .CodeMirror-activeline-background {\\n background: \u003C\u003Ccolour tiddler-editor-fields-even>>;\\n}\\n\\n.cm-s-cmplus .CodeMirror-selected {\\n background: \u003C\u003Ccmcolour selected>> !important;\\n}\\n\\n.cm-s-cmplus .cm-comment {\\n font-style: italic;\\n color: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.cm-s-cmplus .CodeMirror-matchingbracket {\\n text-decoration: underline;\\n color: \u003C\u003Ccmcolour matching-bracket>> !important;\\n}\\n\\n.cm-s-cmplus .cm-strikethrough {\\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>; \\n}\\n\\n.cm-s-cmplus .cm-underlined {\\n text-decoration-line: underline;\\n text-decoration-style: solid;\\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>;\\n}\\n\\n.cm-s-cmplus .cm-superscript {\\n vertical-align: super;\\n font-size: 0.7em;\\n line-height: 0.1em;\\n}\\n\\n.cm-s-cmplus .cm-subscript {\\n font-size: 0.7em;\\n line-height: 0.5;\\n}\\n\\n.cm-s-cmplus .cm-macro {\\n color: \u003C\u003Ccmcolour macro>>;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\n.cm-s-cmplus .cm-keyword {\\n color: \u003C\u003Ccmcolour keyword>>;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n font-weight: 600;\\n}\\n\\n.cm-s-cmplus .cm-quote {\\n font-style: italic;\\n padding-left: 0.6em;\\n border-left: \u003C\u003Ccmcolour quote>> solid 0.2em;\\n}\\n\\n.cm-s-cmplus .cm-hr {\\n color: \u003C\u003Ccmcolour hr>>;\\n}\\n\\n.cm-s-cmplus .cm-h1 {\\n color: \u003C\u003Ccmcolour h1>>;\\n font-weight: 700;\\n font-size: 1.383em;\\n line-height: 1.802em;\\n}\\n\\n.cm-s-cmplus .cm-h2 {\\n color: \u003C\u003Ccmcolour h2>>;\\n font-weight: 600;\\n font-size: 1.296em;\\n line-height: 1.602em;\\n}\\n\\n.cm-s-cmplus .cm-h3 {\\n color: \u003C\u003Ccmcolour h3>>;\\n font-weight: 500;\\n font-size: 1.215em;\\n line-height: 1.424em;\\n}\\n\\n.cm-s-cmplus .cm-h4 {\\n color: \u003C\u003Ccmcolour h4>>;\\n font-weight: 400;\\n font-size: 1.138em;\\n line-height: 1.266em;\\n}\\n\\n.cm-s-cmplus .cm-h5 {\\n color: \u003C\u003Ccmcolour h5>>;\\n font-weight: 400;\\n font-size: 1.067em;\\n line-height: 1.125em;\\n}\\n\\n.cm-s-cmplus .cm-h6 {\\n color: \u003C\u003Ccmcolour h6>>;\\n font-weight: 400;\\n}\\n\\n.cm-s-cmplus .cm-link {\\n color: \u003C\u003Ccmcolour link>>;\\n text-decoration: none;\\n font-weight: 600;\\n}\\n\\n.cm-s-cmplus .cm-internallink {\\n color: \u003C\u003Ccmcolour internallink>>;\\n font-weight:600;\\n}\\n\\n.cm-s-cmplus .cm-externallink {\\n color: \u003C\u003Ccmcolour externallink>>;\\n text-decoration: underline;\\n}\\n\\n.cm-s-cmplus .cm-transclude {\\n color: \u003C\u003Ccmcolour transclude>>;\\n}\\n\\n.cm-s-cmplus .cm-pre {\\n color: \u003C\u003Ccmcolour pre>>;\\t\\t\\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\\n}\\n\\n.cm-s-cmplus .cm-monospace {\\n color: \u003C\u003Ccmcolour monospace>>;\\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\\n}\\n\\n.cm-s-cmplus .cm-list1 {\\n color: \u003C\u003Ccmcolour list1>>;\\n padding-left: 1em;\\n padding-right: 0.5em;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\n.cm-s-cmplus .cm-list2 {\\n color: \u003C\u003Ccmcolour list2>>;\\n padding-left: 2em;\\n padding-right: 0.5em;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\n.cm-s-cmplus .cm-list3 {\\n color: \u003C\u003Ccmcolour list3>>;\\n padding-left: 3em;\\n padding-right: 0.5em;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\n.cm-s-cmplus .cm-list4 {\\n color: \u003C\u003Ccmcolour list4>>;\\n padding-left: 4em;\\n padding-right: 0.5em;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\n.cm-s-cmplus .cm-list5 {\\n color: \u003C\u003Ccmcolour list5>>;\\n padding-left: 5em;\\n padding-right: 0.5em;\\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\},\$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js\:{\title\:\$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js\,\text\:\// CodeMirror, copyright (c) by Marijn Haverbeke and others\\n// Distributed under an MIT license: https://codemirror.net/LICENSE\\n\\n/***\\n\\n|Name|tw5.js|\\n|Description|Enables TiddlyWikiy syntax highlighting using CodeMirror|\\n|Original Contributor|PMario|\\n|Author|adithya-badidey|https://github.com/adithya-badidey|\\n|Version|0.1.8|\\n|Status|stable|\\n|Source|GitHub|https://github.com/adithya-badidey/TW5-codemirror-plus|\\n|Documentation|https://codemirror.tiddlyspace.com/|\\n|License|MIT License|http://www.opensource.org/licenses/mit-license.php|\\n|Requires|codemirror.js|\\n|Keywords|syntax highlighting color code mirror codemirror|\\n\\n!! Tiddlywiki Metadata\\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js\\nType: application/javascript\\nAdditional Field:\\nmodule-type: codemirror\\n \\nInfo: CoreVersion parameter is needed for TiddlyWiki only!\\n\\n***/\\n\\n(function (mod) {\\n if (typeof exports \\\object\\\ && typeof module \\\object\\\) // CommonJS\\n mod(require(\\\../../lib/codemirror\\\));\\n else if (typeof define \\\function\\\ && define.amd) // AMD\\n define(\\\../../lib/codemirror\\\, mod);\\n else // Plain browser env\\n mod(CodeMirror);\\n})(function (CodeMirror) {\\n \\\use strict\\\;\\n\\n CodeMirror.defineMode(\\\tiddlywiki5\\\, function () {\\n // Tokenizer\\n var textwords {};\\n\\n var keywords {\\n \\\changecount\\\: true, \\\colour\\\: true,\\n \\\colour-picker\\\: true, \\\contrastcolour\\\: true,\\n \\\copy-to-clipboard\\\: true, \\\csvtiddlers\\\: true,\\n \\\datauri\\\: true, \\\dumpvariables\\\: true,\\n \\\image-picker\\\: true, \\\jsontiddler\\\: true,\\n \\\jsontiddlers\\\: true, \\\lingo\\\: true,\\n \\\list-links\\\: true, \\\list-links-draggable\\\: true,\\n \\\list-tagged-draggable\\\: true, \\\list-thumbnails\\\: true,\\n \\\makedatauri\\\: true, \\\now\\\: true,\\n \\\qualify\\\: true, \\\resolvepath\\\: true,\\n \\\box-shadow\\\: true, \\\filter\\\: true,\\n \\\transition\\\: true, \\\background-linear-gradient\\\: true,\\n \\\transform-origin\\\: true, \\\toc\\\: true,\\n \\\toc-expandable\\\: true, \\\toc-selective-expandable\\\: true,\\n \\\toc-tabbed-internal-nav\\\: true, \\\toc-tabbed-external-nav\\\: true,\\n \\\tabs\\\: true, \\\tag\\\: true,\\n \\\tag-picker\\\: true, \\\tag-pill\\\: true,\\n \\\thumbnail\\\: true, \\\timeline\\\: true,\\n \\\tree\\\: true, \\\unusedtitle\\\: true,\\n \\\version\\\: true\\n };\\n\\n var isSpaceName /\\\\w_\\\\-/i,\\n reHR /^\\\\-\\\\-\\\\-\\\\-+$/, // \u003Chr>\\n reBlockQuote /^\u003C\u003C\u003C/,\\n rePreStart /^```$/;\\n\\n function chain(stream, state, f) {\\n state.tokenize f;\\n return f(stream, state);\\n }\\n\\n function tokenBase(stream, state) {\\n var sol stream.sol(), // sol() -> Returns true only if the stream is at the start of the line.\\n ch stream.peek(); // Returns the next character in the stream without advancing it. Will return a null at the end of the line.\\n\\n // check start of blocks\\n if (sol && /\u003C\\\\/\\\\*{}\\\\-`/.test(ch)) { //is at the start of a line and the next char is not\\n if (stream.match(reBlockQuote)) {\\n return chain(stream, state, twTokenQuote);\\n }\\n \\n if (stream.match(reHR))\\n return hr;\\n\\n if (stream.match(rePreStart))\\n return chain(stream, state, twTokenPre);\\n }\\n\\n stream.next();\\n if (sol && /\\\\/\\\\*!#;:>|/.test(ch)) {\\n if (ch \\\!\\\) { // tw header\\n var count 1;\\n while (stream.eat(!))\\n count++;\\n stream.skipToEnd();\\n return \\\h\\\ + count;\\n }\\n\\n if (ch \\\*\\\ || ch \\\#\\\) { // tw list\\n var count 1;\\n while (stream.eat(*) || stream.eat(#))\\n count++;\\n return \\\list\\\ + count;\\n }\\n if (ch \\\;\\\) { // definition list, term\\n stream.eatWhile(;);\\n return \\\list1\\\;\\n }\\n if (ch \\\:\\\) { // definition list, description\\n stream.eatWhile(:);\\n return \\\list2\\\;\\n }\\n if (ch \\\>\\\) { // single line quote\\n stream.eatWhile(\\\>\\\);\\n return \\\quote\\\;\\n }\\n if (ch |)\\n return header;\\n }\\n\\n // rudimentary html:// file:// link matching. TW knows much more ...\\n if (/hf/i.test(ch) &&\\n /ti/i.test(stream.peek()) &&\\n stream.match(/\\\\b(ttps?|tp|ile):\\\\/\\\\/\\\\-A-Z0-9+&@#\\\\/%?~_|$!:,.;*A-Z0-9+&@#\\\\/%~_|$/i, true))\\n return \\\externallink\\\;\\n\\n if (ch `) { //\\n return chain(stream, state, twTokenMonospace);\\n }\\n\\n if (ch \\\/\\\ && stream.eat(\\\/\\\)) { //\\n return chain(stream, state, twTokenEm);\\n }\\n\\n if (ch \\\{\\\ && stream.eat(\\\{\\\)) \\n return chain(stream, state, twTranslclude);\\n\\n if (ch \\\\\\ && stream.eat(\\\\\\)) // tw InternalLink\\n return chain(stream, state, twInternalLink);\\n\\n if (ch \\\_\\\ && stream.eat(\\\_\\\)) // tw underline\\n return chain(stream, state, twTokenUnderline);\\n\\n if (ch \\\^\\\ && stream.eat(\\\^\\\))\\n return chain(stream, state, twSuperscript);\\n\\n if (ch \\\,\\\ && stream.eat(\\\,\\\)) // tw underline\\n return chain(stream, state, twSubscript);\\n\\n // tw strikethrough\\n if (ch \\\~\\\ && stream.eat(\\\~\\\)) {\\n return chain(stream, state, twTokenStrike);\\n }\\n\\n if (ch \\\\\\ && stream.eat(\\\\\\)) // tw bold\\n return chain(stream, state, twTokenStrong);\\n\\n if (ch \\\\u003C\\\ && stream.eat(\\\\u003C\\\)) // tw macro\\n return chain(stream, state, twTokenMacro);\\n\\n return null\\n }\\n\\n // // tw invisible comment\\n // function twTokenComment(stream, state) {\\n // var maybeEnd false, ch;\\n // while (ch stream.next()) {\\n // if (ch \\\/\\\ && maybeEnd) {\\n // state.tokenize tokenBase;\\n // break;\\n // }\\n // maybeEnd (ch \\\%\\\);\\n // }\\n // return \\\comment\\\;\\n // }\\n\\n // tw strong / bold\\n function twTokenStrong(stream, state) {\\n var maybeEnd false,\\n ch;\\n while (ch stream.next()) {\\n if (ch \\\\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\\\\);\\n }\\n return \\\strong\\\;\\n }\\n\\n function twTokenMonospace(stream, state) {\\n var ch;\\n while (ch stream.next()) {\\n if (ch \\\`\\\) {\\n state.tokenize tokenBase;\\n break;\\n }\\n }\\n return \\\monospace\\\;\\n }\\n\\n // tw em / italic\\n function twTokenEm(stream, state) {\\n var maybeEnd false,\\n ch;\\n while (ch stream.next()) {\\n if (ch \\\/\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\/\\\);\\n }\\n return \\\em\\\;\\n }\\n\\n // tw transclusions\\n function twTranslclude(stream, state) {\\n var maybeEnd false,\\n ch;\\n while (ch stream.next()) {\\n if (ch \\\}\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\}\\\);\\n }\\n return \\\transclude\\\;\\n }\\n\\n // tw internal links\\n function twInternalLink(stream, state) {\\n if (stream.current() ) {\\n state.pastDivider false;\\n // console.log(\\\Start of link\\\);\\n return link;\\n }\\n if (stream.peek() ) {\\n stream.next()\\n if(stream.next() ) {\\n state.tokenize tokenBase;\\n // console.log(\\\End of link\\\);\\n return link;\\n }\\n }\\n var pastDivider state.pastDivider,\\n ch;\\n while (ch stream.peek()) {\\n // console.log(\\\Peeking :\\\ + ch);\\n if (!pastDivider && ch|) {\\n stream.next();\\n state.pastDivider true;\\n // console.log(\\\Past the divider\\\);\\n return link;\\n }\\n if (ch \\\\\\ && stream.peek() \\\\\\) {\\n // console.log(\\\Found end of link\\\);\\n return \\\internallink\\\;\\n }\\n ch stream.next();\\n if (/hf/i.test(ch) &&\\n /ti/i.test(stream.peek()) &&\\n stream.match(/\\\\b(ttps?|tp|ile):\\\\/\\\\/\\\\-A-Z0-9+&@#\\\\/%?~_|$!:,.;*A-Z0-9+&@#\\\\/%~_|$/i, true)) {\\n // console.log(\\\Found external link\\\);\\n return \\\externallink\\\;\\n }\\n stream.eatWhile(/^|\\\\/);\\n }\\n return null;\\n }\\n\\n // tw underlined text\\n function twTokenUnderline(stream, state) {\\n var maybeEnd false,\\n ch;\\n while (ch stream.next()) {\\n if (ch \\\_\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\_\\\);\\n }\\n return \\\underlined\\\;\\n }\\n\\n function twSubscript(stream, state) {\\n var maybeEnd false, ch;\\n\\n while (ch stream.next()) {\\n if (ch \\\,\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\,\\\);\\n }\\n return \\\subscript\\\;\\n }\\n\\n function twSuperscript(stream, state) {\\n var maybeEnd false, ch;\\n\\n while (ch stream.next()) {\\n if (ch \\\^\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\^\\\);\\n }\\n return \\\superscript\\\;\\n }\\n\\n function twTokenStrike(stream, state) {\\n var maybeEnd false, ch;\\n\\n while (ch stream.next()) {\\n if (ch \\\~\\\ && maybeEnd) {\\n state.tokenize tokenBase;\\n break;\\n }\\n maybeEnd (ch \\\~\\\);\\n }\\n return \\\strikethrough\\\;\\n }\\n\\n function twTokenPre(stream, state) {\\n var sol stream.sol(), maybeEnd false, surelyend false, ch;\\n while (ch stream.next()) {\\n if (ch ` && surelyend && stream.eol()) {\\n stream.next();\\n state.tokenize tokenBase;\\n return \\\pre\\\;\\n }\\n surelyend (maybeEnd && (ch `));\\n maybeEnd (sol && ch `);\\n sol stream.sol();\\n }\\n return \\\pre\\\;\\n }\\n\\n function twTokenQuote(stream, state) {\\n var sol stream.sol(), maybeEnd false, surelyend false, ch;\\n while (ch stream.next()) {\\n if (ch \u003C && surelyend) {\\n stream.skipToEnd();\\n state.tokenize tokenBase;\\n return \\\quote\\\;\\n }\\n surelyend (maybeEnd && (ch \u003C));\\n maybeEnd (sol && ch \u003C);\\n sol stream.sol();\\n }\\n return \\\quote\\\;\\n }\\n\\n\\n function twTokenMacro(stream, state) {\\n if (stream.current() \u003C\u003C) {\\n return macro;\\n }\\n\\n var ch stream.next();\\n if (!ch) {\\n state.tokenize tokenBase;\\n return null;\\n }\\n if (ch \\\>\\\) {\\n if (stream.peek() >) {\\n stream.next();\\n state.tokenize tokenBase;\\n return \\\macro\\\;\\n }\\n }\\n\\n stream.eatWhile(/\\\\w\\\\$_/);\\n return keywords.propertyIsEnumerable(stream.current()) ? \\\keyword\\\ : \\\macro\\\\\n }\\n\\n // Interface\\n return {\\n startState: function () {\\n return { tokenize: tokenBase };\\n },\\n\\n token: function (stream, state) {\\n if (stream.eatSpace()) return null;\\n var style state.tokenize(stream, state);\\n return style;\\n }\\n };\\n });\\n\\n CodeMirror.defineMIME(\\\text/vnd.tiddlywiki\\\, \\\tiddlywiki5\\\);\\n});\,\created\:\20200818164318584\,\modified\:\20210327052450347\,\module-type\:\codemirror\,\revision\:\1\,\type\:\application/javascript\}}}},{title:$:/plugins/bimlas/locator,description:Locator: Discover and search by context,author:bimlas,version:2.0.1,core-version:>5.1.18,source:https://github.com/bimlas/tw5-locator,plugin-type:plugin,list:README/README README/macros README/TIPS README/CHANGELOG README/LICENSE,dependents:,type:application/json,text:{\tiddlers\:{\$:/config/bimlas/locator/fields/LINKS-IN-TEXT\:{\title\:\$:/config/bimlas/locator/fields/LINKS-IN-TEXT\,\field-direction\:\from\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/link\},\$:/config/bimlas/locator/fields/bag\:{\title\:\$:/config/bimlas/locator/fields/bag\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/caption\:{\title\:\$:/config/bimlas/locator/fields/caption\,\hide-in-nested-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/color\:{\title\:\$:/config/bimlas/locator/fields/color\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/color\},\$:/config/bimlas/locator/fields/created\:{\title\:\$:/config/bimlas/locator/fields/created\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/draft.of\:{\title\:\$:/config/bimlas/locator/fields/draft.of\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/draft.title\:{\title\:\$:/config/bimlas/locator/fields/draft.title\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/icon\:{\title\:\$:/config/bimlas/locator/fields/icon\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/icon\},\$:/config/bimlas/locator/fields/list-after\:{\title\:\$:/config/bimlas/locator/fields/list-after\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/link\},\$:/config/bimlas/locator/fields/list-before\:{\title\:\$:/config/bimlas/locator/fields/list-before\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/link\},\$:/config/bimlas/locator/fields/list\:{\title\:\$:/config/bimlas/locator/fields/list\,\field-type\:\list\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/link\},\$:/config/bimlas/locator/fields/modified\:{\title\:\$:/config/bimlas/locator/fields/modified\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/revision\:{\title\:\$:/config/bimlas/locator/fields/revision\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/tags\:{\title\:\$:/config/bimlas/locator/fields/tags\,\field-direction\:\to\,\field-type\:\list\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/tag\},\$:/config/bimlas/locator/fields/text\:{\title\:\$:/config/bimlas/locator/fields/text\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/bimlas/locator/fields/title\:{\title\:\$:/config/bimlas/locator/fields/title\,\hide-in-nested-fields-filter\:\yes\,\hide-in-regular-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\$:/plugins/bimlas/locator/field-templates/link\},\$:/config/bimlas/locator/fields/type\:{\title\:\$:/config/bimlas/locator/fields/type\,\hide-in-nested-fields-filter\:\yes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/bimlas/locator/README/CHANGELOG\:{\title\:\$:/plugins/bimlas/locator/README/CHANGELOG\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\!! 2.0.1\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v2.0.0...v2.0.1\\n\\n* Add MIT license\\n\\n!! 2.0.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.5.0...v2.0.0\\n\\nALMOST COMPLETE REWRITING, BACKWARDS INCOMPATIBLE CHANGES ARE INTRODUCED\\n\\n* It does not require the `kin` filter operator at all\\n* You can filter to any field besides the tags\\n* You can use the standard search from any `locator-view`\\n* You can use any field to link tiddlers (as \\\tags\\\)\\n* You can also navigate through tiddler links\\n* You can use arbitrary templates to display context items and field values\\n* INCOMPATIBLE CHANGES\u003Cbr />//Before upgrading to the new version, make a backup (as before upgrading any plugin) and make the following changes.//\\n** Renamed `locator-tags` to `locator-fields`\u003Cbr />//Change the macro call in your tiddlers//\\n** `locator-view` does not supporting `finalFilter` and `tagFilter`\u003Cbr />//Remove them from your macrocalls//\\n** Removed `filter-grandchildren` filter\u003Cbr />//Because it can no longer be passed through parameters.//\\n** The \\\Open in Locator sidebar\\\ toolbar button is moved from `$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar` to `$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar` and its code is changed as well\u003Cbr />//Compare the old tiddler with the shadow and note the changes if any. Transfer them to the new tiddler and delete the old tiddler.//\\n\\n!! 1.5.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.4.0...v1.5.0\\n\\n* Move tiddler from current context to higher- or subtopic by drag-n-dropping in the Locator sidebar\\n* Assign any tiddler to any of the titles in the Locator sidebar by drag-n-dropping\\n* Show the (top-level) base tag to be able to move the tiddler titles there\\n* Add button to open search results in advanced search\\n* Show buttons using the Kin filter only when the filter operator is available\\n* Fix related tag issue (not all of them were listed)\\n* Fix whitespace issue\\n* Refactor the code\\n* Add tutorial to the demo\\n\\n!! 1.4.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.3.1...v1.4.0\\n\\n* When there was a space in the search string and \\\new tiddler\\\ button is used from search, the tiddler title was encapsulated (`title with spaces`)\\n* When there was a space in any of the breadcrumbs in sidebar and \\\new tiddler\\\ button is used from it, the tiddler got all of the breadcrumb tags, the title with spaces was encapsulated (literally `title with spaces` tag)\\n* Add more tips to $:/plugins/bimlas/locator/README/TIPS\\n* Add descriptive tooltip to buttons\\n\\n!! 1.3.1\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.3.0...v1.3.1\\n\\n* Add base tag if there is no breadcrumbs when creating new tiddler in current context\\n* Reword documentation\\n\\n!! 1.3.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.2.0...v1.3.0\\n\\n* Create new tiddler from search text\\n\\n!! 1.2.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.1.0...v1.2.0\\n\\n* Add button to create new tiddler in current context\\n* Ability to use additional filter on tags\\n\\n!! 1.1.0\\n\\nSee GitHub for detailed change history of this release|https://github.com/bimlas/tw5-locator/compare/v1.0.0...v1.1.0\\n\\n* I realized that most functions work without the `kin` filter\\n* Use the same \\\style\\\ for breadcrumb- and list items\\n* Show real tags instead of tag pills\\n* Turn off filter of direct tag in the breadcrumbs by its tag icon\\n* Ancestor tags in breadcrumbs of search are operating like direct labels, they can be removed one by one\\n\\n!! 1.0.0\\n\\n* First public release\\n\},\$:/plugins/bimlas/locator/README/LICENSE\:{\title\:\$:/plugins/bimlas/locator/README/LICENSE\,\text\:\MIT License\\n\\nCopyright (c) since 2020 BimbaLaszlo \u003Cbimbalaszlo@gmail.com> (https://bimlas.github.io/)\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\Software\\\), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\nSOFTWARE.\\n\},\$:/plugins/bimlas/locator/README/README\:{\title\:\$:/plugins/bimlas/locator/README/README\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\! Locator\\n\\nLocator provides a universal interface for navigating between your tiddlers and searching, filtering them without the need to write filter expressions|https://tiddlywiki.com/#Filters. The plugin contains a table of contents widget and an enhanced search engine that contains a visual filter builder to filter results by tags and field values. You can organize the tiddlers to any number of trees, even by custom fields or links in text. Unlike classic Table of Contents|https://tiddlywiki.com/#Table-of-Contents%20Macros%20(Examples), standard search|$:/core/ui/AdvancedSearch/Standard, filter search|$:/core/ui/AdvancedSearch/Filter and list of tags|$:/core/ui/MoreSideBar/Tags, this plugin handles these functions organically.\\n\\n* https://bimlas.github.io/tw5-locator (demo + install)\\n* https://github.com/bimlas/tw5-locator (please star if you like the plugin)\\n\\n! Benefits compared to built-in solutions\\n\\n* Shows field values\u003Cbr/>You can mark a tiddler with multiple tags and field values, but in the classic ToC you dont see them while browsing, in Locator you can apply them as filters.\\n* Easy way to search for field values\u003Cbr/>Find tags, field values in the standard search based on part of their name or view the all fields of the search results at a glance.\\n* Limit the scope of search\u003Cbr/>You dont have to store your recipes and family tree in a separate wiki just to make them easier to find: you can define the scope of your search with some clicks (without the need to write filters in $:/AdvancedSearch).\\n* Reorder the hierarchy with drag-n-drop\u003Cbr />You can easily move tiddlers between topics by drag-n-dropping them.\\n* Create mindmaps\u003Cbr />You can associate tiddlers with any field other than the tag, so you can create complex graphs that you can browse through text only user interface.\\n* There is no need to include a table of contents in the main tiddler of each topic\u003Cbr/>Just press the \\\Locator sidebar\\\ button on the tiddlers toolbar and you can browse its children, links right away in the sidebar.\\n* Create new tiddler in current scope\u003Cbr />The \\\new tiddler\\\ button in Locator creates a new tiddler pre-filled with the currently selected field values and named by the search query (like a special \\\new here\\\ button).\\n* Phone friendlier\u003Cbr/>The width of the classic ToC is increasing and the size of the text is decrasing as we move down in the context, while Locator remains readable.\\n\\n! Usage\\n\\nSee the demo|https://bimlas.github.io/tw5-locator for a complete tutorial\\n\\n! Installation instructions\\n\\nThe plugin consists of separate parts, each of them can be used on its own, so it is possible to use only the parts you like, but they can be used most effectively together because they interact with each other.\\n\\nTo add the plugin to your own ~TiddlyWiki5, just drag this link to the browser window and create or drag the required tiddlers from the demo:\\n\\n$:/plugins/bimlas/locator\\n\\nFor other installation options see the links above.\\n\\n//Select the next tab to continue.//\\n\},\$:/plugins/bimlas/locator/README/TIPS\:{\title\:\$:/plugins/bimlas/locator/README/TIPS\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\! Tips\\n\\n!! Organic navigation\\n\\n* In `locator-fields`, look for a tag and apply it recursively; the `locator-search` only affects tiddlers associated with it at any depth\\n* Click on the tag in `locator-fields` and open its tiddler, then click on the \\\locator sidebar\\\ button; the `locator-view` sidebar will show its hierarchy\\n* Navigate in the hierarchy in `locator-view` sidebar then search for a term in `locator-search`; pressing the \\\search in context\\\ button restricting the search to the context of `locator-view` sidebar\\n* If you cannot find what you are searching for, then you may want to create a new tiddler, use the \\\new tiddler\\\ button in one of the Locator macros\\n\\n!! Taking good habits\\n\\nTo get the least chance of writing the same note you wrote earlier, look for a new tiddler before creating a note. To force yourself, hide the \\\new tiddler\\\ button inside the Page Toolbar and use the \\\new tiddler\\\ button inside the Locator search, so if you want to create a new tiddler you must first look for it. If you are absolutely sure that there is no tiddler yet and you need to create a new tiddler, this solution is also useful because search text defines the default name of the new tiddler.\\n\\n!! Let the \\\Locator sidebar\\\ button automatically focus to the Locator sidebar\\n\\nFor example, the More -> Tags sidebar is currently open when we use the \\\Locator sidebar\\\ toolbar button on one of the tiddlers, but we do not see the effect because the Locator sidebar is not visible, thus we need to modify to let button automatically open the corresponding sidebar.\\n\\n* If we dont know exactly, look for the sidebar tiddlers title (used as `text` parameter in the code below)\\n** Open the Advanced Search -> Filter and look for the sidebar name in the `caption` field, for example `captionLocator` will result Locator view\\n* Find the state tiddler that contains the sidebar tiddlers title (used as `$tiddler` parameter in the code below)\\n** Open the Advanced Search -> Filter and look for `textLocator view` for example\\n** Switch between Locator sidebar and another sidebar to see which state tiddler is changing, this is what we are looking for ($:/state/tab/sidebar--595412856 for example)\\n* Use the name of the state tiddler and the title of the sidebar in the code below and add this line to $:/plugins/bimlas/locator/viewtemplate/open-in-sidebar tiddler\\n\\n```\\n\u003C!-- Original code of the button... -->\\n...\\n\u003C$button tooltip\\\Browse hierarchy of tag in Locator sidebar\\\ aria-label\\\locator sidebar\\\ class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C!-- ADD THIS LINE -->\\n\u003C$action-setfield $tiddler\\\$:/state/tab/sidebar--595412856\\\ text\\\Locator view\\\/>\\n```\\n\\nIf you rename the sidebar, you must also update this change! See this thread on Google Groups|https://groups.google.com/d/msg/tiddlywiki/xAe_fvhzoCY/UoKZc7ZZDQAJ for details.\\n\\n!! Speed up (on phones)\\n\\n!!! Conditional view\\n\\nBecause we dont look at the table of contents and search results at the same time, we can hide the Locator while we are using the standard search.\\n\\nTo achieve this, place the Locator view in the following condition:\\n\\n```\\n\u003C$reveal type\\\match\\\ default\\\\\\ text{{{ prefix$:/state/popup/search-dropdown }}}>\\n \u003C\u003Clocator-view baseTitle:\\\TableOfContents\\\>>\\n\u003C/$reveal>\\n```\\n\\nWhen you open TiddlyWiki, the search entry is in focus by default, so the Locator sidebar is not visible. To fix this, change the text of $:/config/Search/AutoFocus hidden setting|https://tiddlywiki.com/#Hidden%20Setting%3A%20Search%20AutoFocus to `false`.\\n\\n//Select the next tab to continue.//\\n\},\$:/plugins/bimlas/locator/README/macros\:{\title\:\$:/plugins/bimlas/locator/README/macros\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\! Usage of the macros\\n\\n!! `locator-view`\\n\\nThis is a Table of Contents macro|https://tiddlywiki.com/#Table-of-Contents%20Macros%20(Examples) that lets you navigate the wiki just as you would with a file manager on the file system. The macro can be placed anywhere you want, for example put it in the sidebar.\\n\\n* Create a new tiddler\\n* Add the $:/tags/SideBar tag\\n* Add the `caption` field to change the title of the tab (\\\Contents\\\ for example)\\n* Call the macro by placing this text in the tiddler:\\n\\n```\\n\u003C\u003Clocator-view baseTitle:\\\TableOfContents\\\>>\\n```\\n\\nOptional parameters:\\n\\n; `fieldOfRelationship` (`tags` by default)\\n: The default field which the tree is based on.\\n\\n; `templateOfContextItems` (`$:/plugins/bimlas/locator/field-templates/link` by default)\\n: The default template to display the context items with.\\n\\n!! `locator-search` and `locator-fields`\\n\\nThe `locator-search` macro can be used in the same way as standard search, but you can narrow the scope of the search to the context by the fields filter, in `locator-fields` you can `search for field values`.\\n\\n* Create a new tiddler\\n* Add the $:/tags/SearchResults tag\\n* Add the `caption` field to change the title of the tab (\\\Locator\\\ for example)\\n* Call the macro by placing this text in the tiddler:\\n\\n```\\n\u003C\u003Clocator-search>>\\n```\\n\\nDo the same with `\u003C\u003Clocator-fields>>` macro.\\n\\nIf you want to use `locator-fields` in the sidebar (like the sidebar -> More -> Tags tab) insted of standard search, you should also define the `searchTiddler` variable before the macro call:\\n\\n* Create a new tiddler\\n* Add the $:/tags/SideBar tag\\n* Add the `caption` field to change the title of the tab (\\\Fields\\\ for example)\\n* Call the macro by placing this text in the tiddler:\\n\\n```\\n\u003C$vars searchTiddler\\\ \\\>\\n \u003C\u003Clocator-fields>>\\n\u003C/$vars>\\n```\\n\\n//Select the next tab to continue.//\\n\},\$:/plugins/bimlas/locator/actions/add-field-value\:{\title\:\$:/plugins/bimlas/locator/actions/add-field-value\,\tags\:\$:/tags/Actions\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define assign-value()\\n \u003C$action-setfield $tiddler\u003C\u003CactionTiddler>> $field\u003C\u003CcurrentField>> $value\u003C\u003CcurrentTiddler>>/>\\n\\\\end\\n\\n\\\\define assign-list-item()\\n \u003C$action-listops $tiddler\u003C\u003CactionTiddler>> $field\u003C\u003CcurrentField>> $subfilter\\\allcurrent\\\/>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CcurrentField>subfilter\u003Cfilter-field-is-list>\\\ emptyMessage\u003C\u003Cassign-value>> variable\\\null\\\>\\n \u003C\u003Cassign-list-item>>\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/actions/add-to-history\:{\title\:\$:/plugins/bimlas/locator/actions/add-to-history\,\tags\:\$:/tags/Actions\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\history\\\ $subfilter\\\allcurrent\\\/>\\n{{$:/plugins/bimlas/locator/actions/remove-filters}}\\n\},\$:/plugins/bimlas/locator/actions/move-to-another-context\:{\title\:\$:/plugins/bimlas/locator/actions/move-to-another-context\,\tags\:\$:/tags/Actions\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define add-action-tiddler-to-current-tiddler()\\n \u003C$tiddler tiddler{{{ subfilter\u003Cfilter-history>last }}}>\\n {{||$:/plugins/bimlas/locator/actions/remove-field-value}}\\n \u003C/$tiddler>\\n {{||$:/plugins/bimlas/locator/actions/add-field-value}}\\n\\\\end\\n\\n\\\\define add-current-tiddler-to-action-tiddler()\\n \u003C$vars originalCurrentTiddler\u003C\u003CcurrentTiddler>>>\\n \u003C$tiddler tiddler\u003C\u003CactionTiddler>>>\\n \u003C$vars actionTiddler{{{ subfilter\u003Cfilter-history>last }}}>\\n {{||$:/plugins/bimlas/locator/actions/remove-field-value}}\\n \u003C/$vars>\\n \u003C$vars actionTiddler\u003C\u003CoriginalCurrentTiddler>>>\\n {{||$:/plugins/bimlas/locator/actions/add-field-value}}\\n \u003C/$vars>\\n \u003C/$tiddler>\\n \u003C/$vars>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CcontextState>locator-direction-of-traverse\u003CcurrentField>regexpto\\\ emptyMessage\u003C\u003Cadd-current-tiddler-to-action-tiddler>> variable\\\null\\\>\\n \u003C\u003Cadd-action-tiddler-to-current-tiddler>>\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/actions/remove-field-value\:{\title\:\$:/plugins/bimlas/locator/actions/remove-field-value\,\tags\:\$:/tags/Actions\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define remove-value()\\n \u003C$action-setfield $tiddler\u003C\u003CactionTiddler>> $field\u003C\u003CcurrentField>> $value\\\\\\/>\\n\\\\end\\n\\n\\\\define remove-list-item()\\n \u003C$action-listops $tiddler\u003C\u003CactionTiddler>> $field\u003C\u003CcurrentField>> $subfilter\\\-allcurrent\\\/>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CcurrentField>subfilter\u003Cfilter-field-is-list>\\\ emptyMessage\u003C\u003Cremove-value>> variable\\\null\\\>\\n \u003C\u003Cremove-list-item>>\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/actions/remove-filters\:{\title\:\$:/plugins/bimlas/locator/actions/remove-filters\,\tags\:\$:/tags/Actions\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$action-deletetiddler $tiddler\u003C\u003CintersectionState>>/>\\n\u003C$action-deletetiddler $tiddler\u003C\u003CdifferenceState>>/>\\n\u003C$action-setfield $tiddler\u003C\u003CcontextState>> opened-fields-filters\\\\\\/>\},\$:/plugins/bimlas/locator/buttons/clear-search-input\:{\title\:\$:/plugins/bimlas/locator/buttons/clear-search-input\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$button tooltip\\\Clear search text, show all results\\\ class\u003C\u003Clink-button-class>>>\\n \u003C$action-setfield $tiddler\\\$:/temp/search\\\ text\\\ \\\/>\\n {{$:/core/images/preview-open}}\\n\u003C/$button>\\n\},\$:/plugins/bimlas/locator/buttons/collapse-history\:{\title\:\$:/plugins/bimlas/locator/buttons/collapse-history\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$button tooltip\\\Collapse history\\\ class\u003C\u003Clink-button-class>>>\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\history\\\ $filter\\\title\u003CcontextState>each:list-itemhistorylast\\\/>\\n {{$:/core/images/fold-button}}\\n\u003C/$button>\\n\},\$:/plugins/bimlas/locator/buttons/context-arrow\:{\title\:\$:/plugins/bimlas/locator/buttons/context-arrow\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\title\u003CcontextState>field:invert-directionyes\\\ emptyMessage{{$:/core/images/right-arrow}}>\\n {{$:/core/images/left-arrow}}\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search\:{\title\:\$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!--\\nSince the search term may contain characters that affect the filter, I\\ndo not copy the search term, I just refer to the tiddler.\\n-->\\n\u003C$wikify name\\\filter\\\ text\\\\u003C\u003Cfilter-search-context>> +search{\u003C\u003CsearchTiddler>>}\\\>\\n \u003C$button tooltip\\\Continue filtering in advanced search\\\ class\u003C\u003Clink-button-class>>>\\n \u003C$action-setfield $tiddler\\\$:/temp/advancedsearch\\\ text\u003C\u003Cfilter>>/>\\n \u003C$action-setfield $tiddler\\\$:/state/tab--1498284803\\\ text\\\$:/core/ui/AdvancedSearch/Filter\\\/>\\n \u003C$action-navigate $to\\\$:/AdvancedSearch\\\/>\\n {{$:/core/images/advanced-search-button}}\\n \u003C/$button>\\n\u003C/$wikify>\\n\},\$:/plugins/bimlas/locator/buttons/create-new-tiddler\:{\title\:\$:/plugins/bimlas/locator/buttons/create-new-tiddler\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define add-as-list()\\n \u003C$action-listops $tiddler\\\$:/temp/bimlas/locator/new-tiddler\\\ $field\u003C\u003Cfield>> $subfilter\u003C\u003C__valueAsFilter__>>/>\\n\\\\end\\n\\n\\\\define add-as-value()\\n \u003C$action-setfield $tiddler\\\$:/temp/bimlas/locator/new-tiddler\\\ $field\u003C\u003Cfield>> $value{{{ subfilter\u003C__valueAsFilter__> }}}/>\\n\\\\end\\n\\n\\\\define add-field-value(valueAsFilter)\\n \u003C$list filter\\\title\u003Cfield>subfilter\u003Cfilter-field-is-list>\\\ emptyMessage\u003C\u003Cadd-as-value>>>\\n \u003C\u003Cadd-as-list>>\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define add-filters-as-field-values()\\n \u003C$list filter\\\title\u003CintersectionState>indexes\\\ variable\\\field\\\>\\n \u003C$list filter\\\title\u003CintersectionState>locator-selected-field-values\u003Cfield>first\\\>\\n \u003C\u003Cadd-field-value \\\title\u003CintersectionState>locator-selected-field-values\u003Cfield>\\\>>\\n \u003C/$list>\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define add-to-current-context()\\n \u003C$set name\\\field\\\ filter\u003C\u003Cfilter-field-of-relationship>>>\\n \u003C\u003Cadd-field-value \\\subfilter\u003Cfilter-history>last\\\>>\\n \u003C/$set>\\n\\\\end\\n\\n\u003C$button tooltip\\\Create new tiddler in the current context\\\ class\u003C\u003Clink-button-class>>>\\n \u003C\u003Cadd-filters-as-field-values>>\\n \u003C\u003Cadd-to-current-context>>\\n \u003C$action-sendmessage $message\\\tm-new-tiddler\\\ $param\\\$:/temp/bimlas/locator/new-tiddler\\\ title{{{ title\u003CtitleOfNewTiddler> title{$:/language/DefaultNewTiddlerTitle} - +first }}}/>\\n \u003C$action-deletetiddler $tiddler\\\$:/temp/bimlas/locator/new-tiddler\\\/>\\n {{$:/core/images/new-button}}\\n\u003C/$button>\\n\},\$:/plugins/bimlas/locator/buttons/go-down-to-context\:{\title\:\$:/plugins/bimlas/locator/buttons/go-down-to-context\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define node()\\n \u003C$button tooltip\\\Go to context, show chidlren of this tiddler\\\ class\u003C\u003Clink-button-class>> actions{{$:/plugins/bimlas/locator/actions/add-to-history}}>\\n {{$:/plugins/bimlas/locator/buttons/context-arrow}}\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define leaf()\\n \u003C$button class\u003C\u003Clink-button-class>>>\\n {{$:/core/images/blank}}\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define go-down-to-context()\\n \u003C!-- I have to use macro to use $(...)$ in filter expression -->\\n \u003C$list filter\\\allcurrentlocator-enlist-children:$(currentField)$\u003CcontextState> title\u003CcontextState>field:allow-to-open-leavesyes +first\\\ emptyMessage\u003C\u003Cleaf>> variable\\\null\\\>\u003C\u003Cnode>>\u003C/$list>\\n\\\\end\\n\\n\u003C\u003Cgo-down-to-context>>\\n\},\$:/plugins/bimlas/locator/buttons/go-up-to-context\:{\title\:\$:/plugins/bimlas/locator/buttons/go-up-to-context\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define actions()\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\history\\\ $filter\\\subfilter\u003Cfilter-history>allbefore\u003CcurrentTiddler> allcurrent\\\/>\\n {{$:/plugins/bimlas/locator/actions/remove-filters}}\\n\\\\end\\n\\n\u003C$button tooltip\\\Go to context, show chidlren of this tiddler\\\ class\u003C\u003Clink-button-class>> actions\u003C\u003Cactions>>>\\n {{$:/plugins/bimlas/locator/buttons/context-arrow}}\\n\u003C/$button>\\n\},\$:/plugins/bimlas/locator/buttons/open-field-settings\:{\title\:\$:/plugins/bimlas/locator/buttons/open-field-settings\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$button\\n to\\\$:/plugins/bimlas/locator/settings/settings\\\\\n tooltip\\\Open field settings\\\\\n class\u003C\u003Clink-button-class>>\\n>\\n {{$:/core/images/options-button}}\u003C$list filter\\\title\u003CcontextState>!regexp^\\\\$:/state/bimlas/locator/search/\\\ variable\\\null\\\> Open field settings\u003C/$list>\\n\u003C/$button>\},\$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field\:{\title\:\$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define actions()\\n \u003C$action-setfield $tiddler\u003C\u003CintersectionState>> $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C$action-setfield $tiddler\u003C\u003CdifferenceState>> $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\opened-fields-filters\\\ $subfilter\\\-\u003CcurrentField>\\\/>\\n \u003C$list filter\\\\u003CrecursiveFilteringOfCurrentFieldAvailable>regexpyes\\\ variable\\\null\\\>\\n \u003C$action-setfield $tiddler\\\$:/state/bimlas/locator/search/recursive-filters/\\\ $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C/$list>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CintersectionState> title\u003CdifferenceState> +locator-selected-field-values\u003CcurrentField>first\\\ variable\\\null\\\>\\n \u003C$button tooltip\\\Remove field filters\\\ class\u003C\u003Clink-button-class>> actions\u003C\u003Cactions>>>\\n {{$:/core/images/cancel-button}}\\n \u003C/$button>\\n\u003C/$list>\},\$:/plugins/bimlas/locator/buttons/remove-filters\:{\title\:\$:/plugins/bimlas/locator/buttons/remove-filters\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\title\u003CintersectionState> title\u003CdifferenceState> +locator-selected-field-valuesfirst\\\ variable\\\null\\\>\\n \u003C$button tooltip\\\Remove field filters\\\ class\u003C\u003Clink-button-class>> actions{{$:/plugins/bimlas/locator/actions/remove-filters}}>\\n {{$:/core/images/cancel-button}}\\n \u003C/$button>\\n\u003C/$list>\},\$:/plugins/bimlas/locator/buttons/search-in-context\:{\title\:\$:/plugins/bimlas/locator/buttons/search-in-context\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define copy-field(sourceTiddler destinationTiddler field)\\n \u003C$set name\\\value\\\ tiddler\u003C\u003C__sourceTiddler__>> field\u003C\u003C__field__>>>\\n \u003C$action-setfield $tiddler\u003C\u003C__destinationTiddler__>> $field\u003C\u003C__field__>> $value\u003C\u003Cvalue>>/>\\n \u003C/$set>\\n\\\\end\\n\\n\\\\define clear-data-tiddler(tiddler)\\n \u003C$action-deletetiddler $tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$action-setfield $tiddler\u003C\u003C__tiddler__>> type\\\application/json\\\/>\\n\\\\end\\n\\n\\\\define search-in-current-context()\\n \u003C$action-listops $tiddler\\\$:/state/bimlas/locator/search/intersection/\\\ $index{{{ subfilter\u003Cfilter-field-of-relationship> }}} $subfilter\\\subfilter\u003Cfilter-history>last\\\/>\\n \u003C$action-listops $tiddler\\\$:/state/bimlas/locator/search/recursive-filters/\\\ $index{{{ subfilter\u003Cfilter-field-of-relationship> }}} $filter\\\subfilter\u003Cfilter-history>last\\\/>\\n\\\\end\\n\\n\\\\define copy-filters()\\n \u003C$macrocall $name\\\copy-field\\\ sourceTiddler\u003C\u003CintersectionState>> destinationTiddler\\\$:/state/bimlas/locator/search/intersection/\\\ field\\\text\\\/>\\n \u003C$macrocall $name\\\copy-field\\\ sourceTiddler\u003C\u003CdifferenceState>> destinationTiddler\\\$:/state/bimlas/locator/search/difference/\\\ field\\\text\\\/>\\n\\\\end\\n\\n\\\\define reset-search-context()\\n \u003C$action-deletetiddler $tiddler\\\$:/state/bimlas/locator/search/context/\\\/>\\n \u003C$list filter\\\\u003CrecursiveFilteringAvailable>regexpyes\\\ variable\\\null\\\>\\n \u003C$macrocall $name\\\clear-data-tiddler\\\ tiddler\\\$:/state/bimlas/locator/search/recursive-filters/\\\/>\\n \u003C/$list>\\n \u003C$macrocall $name\\\clear-data-tiddler\\\ tiddler\\\$:/state/bimlas/locator/search/intersection/\\\/>\\n \u003C$macrocall $name\\\clear-data-tiddler\\\ tiddler\\\$:/state/bimlas/locator/search/difference/\\\/>\\n\\\\end\\n\\n\u003C$button tooltip\\\Restrict search to this context (in full depth)\\\ class\u003C\u003Clink-button-class>>>\\n \u003C\u003Creset-search-context>>\\n \u003C\u003Ccopy-filters>>\\n \u003C\u003Csearch-in-current-context>>\\n {{$:/core/images/advanced-search-button}}\\n\u003C/$button>\\n\},\$:/plugins/bimlas/locator/buttons/toggle-context-settings\:{\title\:\$:/plugins/bimlas/locator/buttons/toggle-context-settings\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define opened()\\n \u003C$button tooltip\\\Toggle context settings\\\ class\u003C\u003Clink-button-class additionalClasses:\\\active\\\>>>\\n \u003C$action-setfield $tiddler\u003C\u003CcontextState>> $field\\\context-settings-opened\\\ $value\\\\\\/>\\n {{$:/core/images/options-button}}\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define closed()\\n \u003C$button tooltip\\\Toggle context settings\\\ class\u003C\u003Clink-button-class>>>\\n \u003C$action-setfield $tiddler\u003C\u003CcontextState>> $field\\\context-settings-opened\\\ $value\\\yes\\\/>\\n {{$:/core/images/options-button}}\\n \u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CcontextState>field:context-settings-openedyes\\\ emptyMessage\u003C\u003Cclosed>>>\u003C\u003Copened>>\u003C/$list>\},\$:/plugins/bimlas/locator/edit-template/locator-references\:{\title\:\$:/plugins/bimlas/locator/edit-template/locator-references\,\list-after\:\$:/core/ui/EditTemplate/title\,\tags\:\$:/tags/EditTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define prompt()\\n The following references to this tiddler in //\u003C\u003C__field__>>// Locator field|$:/plugins/bimlas/locator/settings/settings will not be automatically updated:\\n\\\\end\\n\\n\\\\define children-by-field(field)\\n \u003C$list filter\\\title{!!draft.of}locator-enlist-children:$field$first\\\ variable\\\null\\\>\\n \u003C$vars stateTiddler\u003C\u003Cqualify \\\$:/state/bimlas/locator/edit/references/$field$\\\>> >\\n\\n \u003C$reveal type\\\nomatch\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n \u003C$button set\u003C\u003CstateTiddler>> setTo\\\show\\\ class\\\tc-btn-invisible\\\>\\n {{$:/core/images/right-arrow}}\\n \u003C\u003Cprompt>>\\n \u003C/$button>\\n \u003C/$reveal>\\n \u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n \u003C$button set\u003C\u003CstateTiddler>> setTo\\\hide\\\ class\\\tc-btn-invisible\\\>\\n {{$:/core/images/down-arrow}}\\n \u003C\u003Cprompt>>\\n \u003C/$button>\\n \u003C/$reveal>\\n\\n \u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n \u003C$list filter\\\title{!!draft.of}locator-enlist-children:$field$\\\ template\\\$:/core/ui/ListItemTemplate\\\>\\n \u003C$link/>\\n \u003C/$list>\\n \u003C/$reveal>\\n\\n \u003C/$vars>\\n \u003C/$list>\\n\\\\end\\n\\n\u003C$reveal state\\\!!draft.title\\\ type\\\nomatch\\\ text{{!!draft.of}} tag\\\div\\\>\\n \u003C$list filter\\\locator-enlist-relationship-fields -tags -list -LINKS-IN-TEXT\\\ variable\\\currentField\\\>\\n \u003C$macrocall $name\\\children-by-field\\\ field\u003C\u003CcurrentField>>/>\\n \u003C/$list>\\n\u003C/$reveal>\},\$:/plugins/bimlas/locator/field-templates/color\:{\title\:\$:/plugins/bimlas/locator/field-templates/color\,\caption\:\Color\,\tags\:\$:/tags/bimlas/locator/field-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cinput type\\\color\\\ name\\\favcolor\\\ value\u003C\u003CcurrentTiddler>> disabled> \u003C$view field\\\title\\\/>\},\$:/plugins/bimlas/locator/field-templates/edit-fields-plus-transclusion\:{\title\:\$:/plugins/bimlas/locator/field-templates/edit-fields-plus-transclusion\,\caption\:\Edit fields + Transclusion\,\tags\:\$:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define frame-classes() tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\\n\\n{{||$:/plugins/bimlas/locator/field-templates/link}}\\n\u003Cdiv class\u003C\u003Cframe-classes>> data-tiddler-title\u003C\u003CcurrentTiddler>>>\\n \u003C$fieldmangler>\\n {{||$:/core/ui/EditTemplate/tags}}\\n {{||$:/core/ui/EditTemplate/fields}}\\n \u003C/$fieldmangler>\\n\u003C/div>\\n\u003C$transclude mode\\\block\\\/>\\n\u003Chr style\\\border-top: double\\\/>\},\$:/plugins/bimlas/locator/field-templates/edit-fields\:{\title\:\$:/plugins/bimlas/locator/field-templates/edit-fields\,\caption\:\Edit fields\,\tags\:\$:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define frame-classes() tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\\n\\n{{||$:/plugins/bimlas/locator/field-templates/link}}\\n\u003Cdiv class\u003C\u003Cframe-classes>> data-tiddler-title\u003C\u003CcurrentTiddler>>>\\n \u003C$fieldmangler>\\n {{||$:/core/ui/EditTemplate/tags}}\\n {{||$:/core/ui/EditTemplate/fields}}\\n \u003C/$fieldmangler>\\n\u003C/div>\\n\u003Chr style\\\border-top: double\\\/>\},\$:/plugins/bimlas/locator/field-templates/fields-plus-transclusion\:{\title\:\$:/plugins/bimlas/locator/field-templates/fields-plus-transclusion\,\caption\:\Fields + Transclusion\,\tags\:\$:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\{{||$:/plugins/bimlas/locator/field-templates/link}}\\n{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\\n\u003C$transclude mode\\\block\\\/>\\n\u003Chr style\\\border-top: double\\\/>\},\$:/plugins/bimlas/locator/field-templates/fields\:{\title\:\$:/plugins/bimlas/locator/field-templates/fields\,\caption\:\Fields\,\tags\:\$:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\{{||$:/plugins/bimlas/locator/field-templates/link}}\\n{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\\n\u003Chr style\\\border-top: double\\\/>\},\$:/plugins/bimlas/locator/field-templates/icon\:{\title\:\$:/plugins/bimlas/locator/field-templates/icon\,\caption\:\Icon\,\tags\:\$:/tags/bimlas/locator/field-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cbutton class\\\tc-btn-invisible\\\ disabled>\u003C$transclude>\u003C\u003CcurrentTiddler>>\u003C/$transclude>\u003C/button> {{||$:/plugins/bimlas/locator/field-templates/link}}\},\$:/plugins/bimlas/locator/field-templates/link\:{\title\:\$:/plugins/bimlas/locator/field-templates/link\,\caption\:\Link\,\tags\:\$:/tags/bimlas/locator/field-templates $:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$link to\u003C\u003CcurrentTiddler>>>\\n \u003C$transclude field\\\caption\\\>\u003C$view field\\\title\\\/>\u003C/$transclude>\\n\u003C/$link>\},\$:/plugins/bimlas/locator/field-templates/tag\:{\title\:\$:/plugins/bimlas/locator/field-templates/tag\,\caption\:\Tag\,\tags\:\$:/tags/bimlas/locator/field-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C\u003Ctag>>\},\$:/plugins/bimlas/locator/field-templates/text\:{\title\:\$:/plugins/bimlas/locator/field-templates/text\,\caption\:\Text\,\tags\:\$:/tags/bimlas/locator/field-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$view field\\\title\\\/>\},\$:/plugins/bimlas/locator/field-templates/transclusion\:{\title\:\$:/plugins/bimlas/locator/field-templates/transclusion\,\caption\:\Transclusion\,\tags\:\$:/tags/bimlas/locator/context-item-templates\,\type\:\text/vnd.tiddlywiki\,\text\:\{{||$:/plugins/bimlas/locator/field-templates/link}}\\n\u003Cbr/>\\n\u003C$transclude mode\\\block\\\/>\\n\u003Chr style\\\border-top: double\\\/>\},\$:/plugins/bimlas/locator/macros/css-classes\:{\title\:\$:/plugins/bimlas/locator/macros/css-classes\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define link-button-class(additionalClasses) tc-btn-invisible tc-tiddlylink bimlas-locator $additionalClasses$\\n\\\\define menu-list-item-class() tc-menu-list-item bimlas-locator\},\$:/plugins/bimlas/locator/macros/filters\:{\title\:\$:/plugins/bimlas/locator/macros/filters\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define filter-history() \u003C__baseTitle__> title\u003CcontextState>each:list-itemhistory -\\n\\\\define filter-selected-field-values() title\u003CintersectionState> title\u003CdifferenceState> +locator-selected-field-values\u003CcurrentField>\\n\\\\define filter-field-is-list() addprefix$:/config/bimlas/locator/fields/field:field-typelist\\n\\\\define filter-unfiltered-view-context-items() subfilter\u003Cfilter-history>lastlocator-enlist-children:$(currentField)$\u003CcontextState>!hasdraft.of\\n\\\\define filter-view-context() subfilter\u003Cfilter-history>lastlocator-enlist-children:$(currentField)$\u003CcontextState>!hasdraft.oflocator-fields-filter\u003CintersectionState>!locator-fields-filter\u003CdifferenceState>\\n\\\\define filter-search-context() !issystemlocator-fields-filter:recursive$(intersectionState)$!locator-fields-filter:recursive$(differenceState)$\\n\\\\define filter-field-of-relationship() title\u003CcontextState>getfield-of-relationship \u003CdefaultFieldOfRelationship> +first\\n\\n\u003C!--\\n I know that `filter-view-context` uses a code duplication of\\n `filter-unfiltered-view-context-items`, but I have to do this way, becuse\\n $(variable)$ works only with variables defined in direct parent macro, thus\\n I cannot add another level to call chain\\n-->\},\$:/plugins/bimlas/locator/macros/javascript-filters.js\:{\title\:\$:/plugins/bimlas/locator/macros/javascript-filters.js\,\text\:\/*\\\\\\ntitle: $:/plugins/bimlas/locator/macros/javascript-filters.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\nSpecial filters used by Locator\\n\\n\\\\*/\\n(function() {\\n\\n\\t/*jslint node: true, browser: true */\\n\\t/*global $tw: true */\\n\\t\\\use strict\\\;\\n\\n\\tfunction getFieldDefinition(options,field) {\\n\\t\\tvar fieldOptionsTiddler \\\$:/config/bimlas/locator/fields/\\\ + field;\\n\\n\\t\\treturn options.wiki.getCacheForTiddler(fieldOptionsTiddler,\\\fieldListingOperator\\\,function() {\\n\\t\\t\\tvar fieldOptions options.wiki.getTiddler(fieldOptionsTiddler) || {fields: {}};\\n\\t\\t\\tvar filterOperators options.wiki.getFilterOperators();\\n\\t\\t\\tvar fieldDefinitions {\\n\\t\\t\\t\\t\\\value\\\: {\\n\\t\\t\\t\\t\\tfieldType: \\\value\\\,\\n\\t\\t\\t\\t\\tdirection: fieldOptions.fields\\\field-direction\\\,\\n\\t\\t\\t\\t\\tenlistChildren: {\\n\\t\\t\\t\\t\\t\\t\\\to\\\: function(title,input,prefix) {\\n\\t\\t\\t\\t\\t\\t\\treturn filterOperators\\\field\\\(input,{operand: title,prefix: prefix,suffix: field},options);\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\\from\\\: function(title,unusedInput,unusedPrefix) {\\n\\t\\t\\t\\t\\t\\t\\treturn (options.wiki.getTiddler(title) || {fields: {}}).fieldsfield || \\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\\list\\\: {\\n\\t\\t\\t\\t\\tfieldType: \\\list\\\,\\n\\t\\t\\t\\t\\tdirection: fieldOptions.fields\\\field-direction\\\,\\n\\t\\t\\t\\t\\tenlistChildren: {\\n\\t\\t\\t\\t\\t\\t\\\to\\\: function(title,input,prefix) {\\n\\t\\t\\t\\t\\t\\t\\treturn filterOperators\\\contains\\\(input,{operand: title,prefix: prefix,suffix: field},options);\\n\\t\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\t\\\from\\\: function(title,unusedInput,unusedPrefix) {\\n\\t\\t\\t\\t\\t\\t\\treturn options.wiki.getTiddlerList(title,field) || ;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\t\\tvar linksInTextDefinition {\\n\\t\\t\\t\\tfieldType: \\\value\\\,\\n\\t\\t\\t\\tdirection: fieldOptions.fields\\\field-direction\\\,\\n\\t\\t\\t\\tenlistChildren: {\\n\\t\\t\\t\\t\\t\\\to\\\: function(title,unusedInput,unusedPrefix) {\\n\\t\\t\\t\\t\\t\\treturn options.wiki.getTiddlerBacklinks(title);\\n\\t\\t\\t\\t\\t},\\n\\t\\t\\t\\t\\t\\\from\\\: function(title,unusedInput,unusedPrefix) {\\n\\t\\t\\t\\t\\t\\treturn options.wiki.getTiddlerLinks(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\n\\t\\t\\treturn field \\\LINKS-IN-TEXT\\\\\n\\t\\t\\t\\t? linksInTextDefinition\\n\\t\\t\\t\\t: fieldDefinitionsfieldOptions.fields\\\field-type\\\ || \\\value\\\;\\n\\t\\t});\\n\\t}\\n\\n\\tfunction getActiveFilters(options,filterState) {\\n\\t\\treturn options.wiki.getCacheForTiddler(filterState,\\\activeFilters\\\,function() {\\n\\t\\t\\tvar filteredFields options.wiki.getTiddlerDataCached(filterState,{});\\n\\t\\t\\tvar results {};\\n\\n\\t\\t\\t$tw.utils.each(filteredFields,function(valuesAsString,field) {\\n\\t\\t\\t\\tvar values $tw.utils.parseStringArray(valuesAsString) || ;\\n\\t\\t\\t\\tif(values.length) {\\n\\t\\t\\t\\t\\tresultsfield values;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\n\\t\\t\\treturn results;\\n\\t\\t});\\n\\t}\\n\\n\\tfunction applyFieldsFilters(source,options,filterState,filterFunc,prefix) {\\n\\t\\tvar activeFilters getActiveFilters(options,filterState);\\n\\t\\tvar results source;\\n\\n\\t\\tif(!Object.keys(activeFilters).length) return results;\\n\\n\\t\\t$tw.utils.each(activeFilters,function(values,field) {\\n\\t\\t\\t$tw.utils.each(values,function(value) {\\n\\t\\t\\t\\tif(value \\\ANY-VALUE\\\) {\\n\\t\\t\\t\\t\\tvar filterOperators options.wiki.getFilterOperators();\\n\\t\\t\\t\\t\\tresults filterOperators\\\has\\\(results,{operand: field,prefix: prefix},options);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tresults filterFunc(results,field,value,prefix);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tresults options.wiki.makeTiddlerIterator(results);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\treturn results;\\n\\t}\\n\\n\\tfunction getDirectionOfTraverse(options,contextState,fieldOfRelationship) {\\n\\t\\tvar direction getFieldDefinition(options,fieldOfRelationship).direction;\\n\\n\\t\\tif(isDirectionInverted(options,contextState)) {\\n\\t\\t\\tdirection invertDirection(direction);\\n\\t\\t}\\n\\n\\t\\treturn direction;\\n\\t}\\n\\n\\tfunction isDirectionInverted(options,contextState) {\\n\\t\\tvar contextStateTiddler options.wiki.getTiddler(contextState) || {fields: };\\n\\t\\treturn contextStateTiddler.fields\\\invert-direction\\\ \\\yes\\\\\n\\t}\\n\\n\\tfunction invertDirection(direction) {\\n\\t\\treturn \\\from\\\,\\\to\\\(direction \\\from\\\) + 0;\\n\\t}\\n\\n\\tfunction enlistChildren(options,parentTitle,fieldOfRelationship,directionOfTraverse) {\\n\\t\\treturn options.wiki.getGlobalCache(\\\bimlas-locator-enlist-children-\\\ + parentTitle + \\\-\\\ + fieldOfRelationship + \\\-\\\ + directionOfTraverse, function() {\\n\\t\\t\\tvar fieldDefinition getFieldDefinition(options, fieldOfRelationship);\\n\\t\\t\\tvar allTiddlers options.wiki.makeTiddlerIterator(options.wiki.getTiddlers());\\n\\t\\t\\treturn fieldDefinition.enlistChildrendirectionOfTraverse(parentTitle,allTiddlers);\\n\\t\\t});\\n\\t}\\n\\n\\t/*\\n\\tFilter titles matching to Locator fields filter\\n\\n\\tInput: list of tiddlers\\n\\tParam: filterState\\n\\tPrefix: \\\!\\\ to exclude matching tiddlers\\n\\tSuffix: \\\recusive\\\ enables recursive filtering\\n\\t*/\\n\\texports\\\locator-fields-filter\\\ function(source,operator,options) {\\n\\t\\tvar results source;\\n\\t\\tvar activeRecursiveFilters getActiveFilters(options,\\\$:/state/bimlas/locator/search/recursive-filters/\\\);\\n\\n\\t\\tif(operator.suffix \\\recursive\\\) {\\n\\t\\t\\tresults applyFieldsFilters(results,options,operator.operand,recursiveFilterFunc,operator.prefix);\\n\\t\\t} else {\\n\\t\\t\\tresults applyFieldsFilters(results,options,operator.operand,directFilterFunc,operator.prefix);\\n\\t\\t}\\n\\n\\t\\treturn results;\\n\\n\\t\\tfunction directFilterFunc(input,field,value,prefix) {\\n\\t\\t\\tvar fieldDefinition getFieldDefinition(options,field);\\n\\t\\t\\treturn fieldDefinition.enlistChildren\\\to\\\(value,input,prefix);\\n\\t\\t}\\n\\n\\t\\tfunction recursiveFilterFunc(input,field,fieldValue,prefix) {\\n\\t\\t\\tvar isRecursiveFilteringActive $tw.utils.hop(activeRecursiveFilters,field) && (activeRecursiveFiltersfield.indexOf(fieldValue) > 0);\\n\\t\\t\\tif(!isRecursiveFilteringActive) {\\n\\t\\t\\t\\treturn directFilterFunc(input,field,fieldValue,prefix);\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar fieldDirection getFieldDefinition(options,field).direction;\\n\\t\\t\\tvar children ;\\n\\t\\t\\tcollectChildrenRecursively(fieldValue);\\n\\t\\t\\tvar compareFunc (prefix ! \\\!\\\)\\n\\t\\t\\t\\t? function(index) { return index > 0 }\\n\\t\\t\\t\\t: function(index) { return index \u003C 0 };\\n\\t\\t\\tvar results ;\\n\\n\\t\\t\\tinput(function(tiddler,title) {\\n\\t\\t\\t\\tif(compareFunc(children.indexOf(title))) {\\n\\t\\t\\t\\t\\tresults $tw.utils.pushTop(results, title);\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\n\\t\\t\\treturn results;\\n\\n\\t\\t\\tfunction collectChildrenRecursively(parent) {\\n\\t\\t\\t\\t$tw.utils.each(enlistChildren(options,parent,field,fieldDirection),function(child) {\\n\\t\\t\\t\\t\\tif(children.indexOf(child) \u003C 0) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.pushTop(children, child);\\n\\t\\t\\t\\t\\t\\t$tw.utils.pushTop(children, collectChildrenRecursively(child));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\n\\t/*\\n\\tFilter fields that are not disabled in Locator field options\\n\\n\\tInput: list of fields\\n\\tParam (optional): if called from toggleable fields filter (`locator-view` and `locator-search`), set to \\\nested\\\\\n\\t*/\\n\\texports\\\locator-enabled-fields\\\ function(source,operator,options) {\\n\\t\\tvar typeOfFieldsFilter operator.operand || \\\regular\\\;\\n\\t\\tvar excludedFields options.wiki.filterTiddlers(\\\alltiddlers+shadowsfield:hide-in-\\\ + typeOfFieldsFilter + \\\-fields-filteryesremoveprefix$:/config/bimlas/locator/fields/\\\) || ;\\n\\t\\tvar results ;\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(excludedFields.indexOf(title) \u003C 0) {\\n\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t}\\n\\t\\t});\\n\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tList fields which can be used to build tree (\\\tags\\\ for example)\\n\\n\\tInput: none\\n\\tParam (optional): field to check if its a relationship field\\n\\t*/\\n\\texports\\\locator-enlist-relationship-fields\\\ function(source,operator,options) {\\n\\t\\tvar relationshipFields options.wiki.getGlobalCache(\\\bimlas-locator-enlist-relationship-fields\\\,function() {\\n\\t\\t\\treturn options.wiki.filterTiddlers(\\\alltiddlers+shadowsprefix$:/config/bimlas/locator/fields/hasfield-directionremoveprefix$:/config/bimlas/locator/fields/\\\);\\n\\t\\t});\\n\\n\\t\\tif(operator.operand) {\\n\\t\\t\\treturn relationshipFields.indexOf(operator.operand) > 0\\n\\t\\t\\t\\t? operator.operand\\n\\t\\t\\t\\t: ;\\n\\t\\t}\\n\\n\\t\\treturn relationshipFields;\\n\\t};\\n\\n\\t/*\\n\\tList field values according to Locator field settings\\n\\n\\tInput: list of tiddlers\\n\\tParam: field\\n\\t*/\\n\\texports\\\locator-enlist-field-values\\\ function(source,operator,options) {\\n\\t\\tvar fieldDefinition getFieldDefinition(options,operator.operand);\\n\\t\\tvar results ;\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tif(!tiddler) return;\\n\\n\\t\\t\\tvar value fieldDefinition.enlistChildren\\\from\\\(title);\\n\\n\\t\\t\\tif(!value) return;\\n\\n\\t\\t\\tresults $tw.utils.pushTop(results,value);\\n\\t\\t});\\n\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tList of active field filters\\n\\n\\tInput: filterState\\n\\tParam (optional): field\\n\\t*/\\n\\texports\\\locator-selected-field-values\\\ function(source,operator,options) {\\n\\t\\tvar activeFilters {};\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\t$tw.utils.each(getActiveFilters(options,title),function(value,key) {\\n\\t\\t\\t\\tactiveFilterskey $tw.utils.pushTop(activeFilterskey || ,value);\\n\\t\\t\\t});\\n\\t\\t});\\n\\n\\t\\tif(!Object.keys(activeFilters).length) return ;\\n\\n\\t\\treturn operator.operand\\n\\t\\t\\t? activeFiltersoperator.operand || \\n\\t\\t\\t: \\\TODO: Join active filter values (array of arrays)\\\;\\n\\t};\\n\\n\\t/*\\n\\tList of active field names\\n\\n\\tInput: filterState\\n\\tParam (optional): none\\n\\t*/\\n\\texports\\\locator-selected-field-names\\\ function(source,operator,options) {\\n\\t\\tvar fieldNames ;\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tfieldNames $tw.utils.pushTop(fieldNames,Object.keys(getActiveFilters(options,title)));\\n\\t\\t});\\n\\n\\t\\treturn fieldNames;\\n\\t};\\n\\n\\t/*\\n\\tList children of input elements based on selected relationship field\\n\\n\\tInput: parent tiddlers\\n\\tParam (optional): contextState\\n\\tSuffix: field of relationship\\n\\t*/\\n\\texports\\\locator-enlist-children\\\ function(source,operator,options) {\\n\\t\\tvar fieldOfRelationship operator.suffix;\\n\\t\\tvar directionOfTraverse getDirectionOfTraverse(options,operator.operand,fieldOfRelationship);\\n\\t\\tvar results ;\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults $tw.utils.pushTop(results, enlistChildren(options,title,fieldOfRelationship,directionOfTraverse));\\n\\t\\t\\tresults options.wiki.sortByList(results,title);\\n\\t\\t});\\n\\n\\t\\treturn results;\\n\\t};\\n\\n\\t/*\\n\\tGet direction of traverse: field direction + optional invert direction\\n\\n\\tInput: contextState\\n\\tParam: field of relationship\\n\\t*/\\n\\texports\\\locator-direction-of-traverse\\\ function(source,operator,options) {\\n\\t\\tvar results ;\\n\\n\\t\\tsource(function(tiddler,title) {\\n\\t\\t\\tresults getDirectionOfTraverse(options,title,operator.operand);\\n\\t\\t});\\n\\n\\t\\treturn results;\\n\\t};\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/plugins/bimlas/locator/macros/locator-fields\:{\title\:\$:/plugins/bimlas/locator/macros/locator-fields\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define locator-fields()\\n \u003C!-- Hide internal macros, do not make them globally available -->\\n \u003C$importvariables filter\\\alltiddlers+shadowsprefix$:/plugins/bimlas/locator/macros/\\\>\\n \u003C$vars\\n contextState\\\$:/state/bimlas/locator/search/context/\\\\\n intersectionState\\\$:/state/bimlas/locator/search/intersection/\\\\\n differenceState\\\$:/state/bimlas/locator/search/difference/\\\\\n recursiveFilteringAvailable\\\yes\\\\\n >\\n\\n {{$:/plugins/bimlas/locator/templates/search-toolbar}} {{$:/plugins/bimlas/locator/buttons/remove-filters}}\\n\\n \u003Cp>\u003C$checkbox tiddler\u003C\u003CcontextState>> field\\\limit-to-fields-of-filtered-tiddlers\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\> Limit to fields of filtered tiddlers\u003C/$checkbox>\u003C/p>\\n\\n \u003C$list filter\\\subfilter\u003Cfilter-selected-field-values>first\\\ emptyMessage\\\\\\\\\\u003C$list filter\\\0\\\ variable\\\resultCount\\\ template\\\$:/language/Search/Matches\\\/>\\\\\\\\\>\\n \u003C$list filter\\\subfilter\u003Cfilter-search-context>count\\\ variable\\\resultCount\\\ template\\\$:/language/Search/Matches\\\/>\\n \u003C/$list>\\n\\n \u003C!-- searchTiddler variable does not available in transcluded tiddlers by default -->\\n \u003C$set name\\\filterContextItems\\\ filter\\\\u003CcontextState>field:limit-to-fields-of-filtered-tiddlersno\\\ value\\\!issystem\\\ emptyValue\u003C\u003Cfilter-search-context>>>\\n \u003C$vars searchedFieldValue{{$(searchTiddler)$}}>\\n {{$:/plugins/bimlas/locator/templates/field-names}}\\n \u003C/$vars>\\n \u003C/$set>\\n\\n \u003C$list filter\\\subfilter\u003Cfilter-selected-field-values>first\\\>\\n \u003C$list filter\\\subfilter\u003Cfilter-search-context>limit250\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n \u003C/$list>\\n\\n \u003C/$vars>\\n \u003C/$importvariables>\\n\\\\end\\n\},\$:/plugins/bimlas/locator/macros/locator-search\:{\title\:\$:/plugins/bimlas/locator/macros/locator-search\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define locator-search()\\n \u003C!-- Hide internal macros, do not make them globally available -->\\n \u003C$importvariables filter\\\alltiddlers+shadowsprefix$:/plugins/bimlas/locator/macros/\\\>\\n \u003C$vars\\n contextState\\\$:/state/bimlas/locator/search/context/\\\\\n intersectionState\\\$:/state/bimlas/locator/search/intersection/\\\\\n differenceState\\\$:/state/bimlas/locator/search/difference/\\\\\n filterContextItems\\\subfilter\u003Cfilter-search-context>search{$(searchTiddler)$}\\\\\n recursiveFilteringAvailable\\\yes\\\\\n >\\n\\n {{$:/plugins/bimlas/locator/templates/search-toolbar}}\\n\\n \u003C$list filter\\\subfilter\u003CfilterContextItems>count\\\ variable\\\resultCount\\\ template\\\$:/language/Search/Matches\\\/>\\n\\n {{$:/plugins/bimlas/locator/templates/fields-filter}}\\n\\n //\u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>//\\n\\n \u003C$list filter\\\subfilter\u003CfilterContextItems>search:title{$(searchTiddler)$}limit250\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n\\n //\u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>//\\n\\n \u003C$list filter\\\subfilter\u003CfilterContextItems>limit250\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n\\n \u003C/$vars>\\n \u003C/$importvariables>\\n\\\\end\\n\},\$:/plugins/bimlas/locator/macros/locator-view\:{\title\:\$:/plugins/bimlas/locator/macros/locator-view\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define locator-view(baseTitle fieldOfRelationship:\\\tags\\\ templateOfContextItems:\\\$:/plugins/bimlas/locator/field-templates/link\\\)\\n \u003C!-- Hide internal macros, do not make them globally available -->\\n \u003C$importvariables filter\\\alltiddlers+shadowsprefix$:/plugins/bimlas/locator/macros/\\\>\\n \u003C$vars\\n contextState\\\$:/state/bimlas/locator/view/context/$(currentTiddler)$\\\\\n intersectionState\\\$:/state/bimlas/locator/view/intersection/$(currentTiddler)$\\\\\n differenceState\\\$:/state/bimlas/locator/view/difference/$(currentTiddler)$\\\\\n defaultFieldOfRelationship\u003C\u003C__fieldOfRelationship__>>\\n >\\n \u003C!-- I have to create them nested because internal variables use external ones -->\\n \u003C$vars currentField{{{ subfilter\u003Cfilter-field-of-relationship> }}}>\\n \u003C$vars filterContextItems\u003C\u003Cfilter-view-context>>>\\n \u003Cdiv class\\\tc-table-of-contents\\\>\\n\\n {{$:/plugins/bimlas/locator/templates/history}}\\n\\n ---\\n\\n {{$:/plugins/bimlas/locator/templates/context-settings}}\\n \u003Cdiv class\\\bimlas-locator right\\\>\\n {{||$:/plugins/bimlas/locator/templates/view-toolbar}}\\n \u003C/div>\\n {{$:/plugins/bimlas/locator/templates/fields-filter}}\\n \u003Col class\\\bimlas-locator\\\>\\n \u003C$list filter\\\subfilter\u003Cfilter-field-of-relationship>regexp^LINKS-IN-TEXT$\\\ emptyMessage{{$:/plugins/bimlas/locator/templates/list-of-context-items}}>\\n {{||$:/plugins/bimlas/locator/templates/list-of-links-in-text}}\\n \u003C/$list>\\n \u003C/ol>\\n\\n \u003C/div>\\n \u003C/$vars>\\n \u003C/$vars>\\n \u003C/$vars>\\n \u003C/$importvariables>\\n\\\\end\\n\},\$:/plugins/bimlas/locator/macros/template-macros\:{\title\:\$:/plugins/bimlas/locator/macros/template-macros\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define droppable-menu-list-item(content actions)\\n \u003C$droppable actions\u003C\u003C__actions__>>>\\n \u003Cdiv class\\\tc-droppable-placeholder\\\ style\\\display: block\\\>\\n \u003C\u003C__content__>>\\n \u003C/div>\\n \u003C/$droppable>\\n\\\\end\},\$:/plugins/bimlas/locator/settings/settings\:{\title\:\$:/plugins/bimlas/locator/settings/settings\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define show-in-fields()\\n \u003C$select field\\\hide-in-nested-fields-filter\\\ default\\\\\\>\\n \u003Coption value\\\\\\>Show\u003C/option>\\n \u003Coption value\\\yes\\\>Hide\u003C/option>\\n \u003C/$select> in nested filter (`locator-view`, `locator-search`)\u003Cbr/>\\n \u003C$select field\\\hide-in-regular-fields-filter\\\ default\\\\\\>\\n \u003Coption value\\\\\\>Show\u003C/option>\\n \u003Coption value\\\yes\\\>Hide\u003C/option>\\n \u003C/$select> in regular filter (`locator-fields` and tiddler info)\\n\\\\end\\n\\n\\\\define field-type()\\n \u003C$select field\\\field-type\\\ default\\\\\\>\\n \u003Coption value\\\\\\>Value\u003C/option>\\n \u003Coption value\\\list\\\>List\u003C/option>\\n \u003C/$select>\\n\\\\end\\n\\n\\\\define field-direction()\\n \u003C$select field\\\field-direction\\\ default\\\\\\>\\n \u003Coption value\\\\\\>No\u003C/option>\\n \u003Coption value\\\to\\\>Yes\u003C/option>\\n \u003C!--\\n I blocked it because a tree with children on top is difficult to handle:\\n\\n For example, there is a tiddler named \\\Father\\\ which has \\\Kid\\\ in the \\\children\\\ field\\n\\n If you want to filter tiddlers by field values (for example, in the fields filter),\\n \\\Father\\\ will be listed among those tiddlers that have \\\Kid\\\ in the \\\children\\\ field.\\n In fact, we wanted to children of \\\Kid\\\.\\n\\n Filtering \\\Kid\\\ in the \\\Fields\\\ search tab will list the tiddlers that have \\\Kid\\\ in\\n their \\\children\\\ field (for example, \\\Father\\\). If you turn on recursive filtering,\\n it will list all tiddlers starting with \\\Kid\\\ (so \\\Father\\\ will not be listed).\\n\\n The \\\Create tiddler in context\\\ button also has to be aware of the direction of the\\n field, which also complicates the code.\\n\\n If you do make this option available, remember to tell the user that when renaming a\\n tiddler, he must rewrite the field values that refer to the current tiddler. If you\\n want to rewrite it automatically, make sure it works properly with the Relink plugin\\n (does not adding the new name more than once to the field).\\n -->\\n \u003C!-- \u003Coption value\\\from\\\>From\u003C/option> -->\\n \u003C/$select>\\n\\\\end\\n\\n\\\\define template()\\n \u003C$select field\\\text\\\ default\\\$:/plugins/bimlas/locator/field-templates/text\\\>\\n \u003C$list filter\\\alltiddlers+shadowstag$:/tags/bimlas/locator/field-templates\\\>\\n \u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$transclude field\\\caption\\\>\u003C$view field\\\title\\\/>\u003C/$transclude>\u003C/option>\\n \u003C/$list>\\n \u003C/$select>\\n \u003C$transclude/>\\n\\\\end\\n\\n\\\\define settings(field)\\n \u003C$importvariables filter\\\alltiddlers+shadowsprefix$:/plugins/bimlas/locator/macros/\\\>\\n\\n \u003Ch3>\u003C$link to\\\$:/config/bimlas/locator/fields/$field$\\\>\u003C$text text\u003C\u003C__field__>>/>\u003C/$link>\u003C/h3>\\n\\n \u003Cdiv class\\\tc-control-panel\\\>\\n \u003Ctable>\\n \u003Ctbody>\\n \u003Ctr>\\n \u003Ctd>Description\u003C/td>\\n \u003Ctd>//{{$:/language/Docs/Fields/$field$}}//\u003C/td>\\n \u003C/tr>\\n \u003Ctr>\\n \u003Ctd>Show in fields filter\u003C/td>\\n \u003Ctd>\\n \u003C\u003Cshow-in-fields>>\\n \u003C/td>\\n \u003C/tr>\\n \u003Ctr>\\n \u003Ctd>Field type\u003C/td>\\n \u003Ctd>\\n \u003C\u003Cfield-type>>\\n \u003Cp>//Does the field contain a single value (for example `Franz Kafka`) or a list of values (`Franz Kafka Dostojevskij`)?//\u003C/p>\\n \u003C/td>\\n \u003C/tr>\\n \u003Ctr>\\n \u003Ctd>Does the field represent a tree?\u003C/td>\\n \u003Ctd>\\n \u003C\u003Cfield-direction>>\\n \u003Cp>//If the field contains the title(s) of other tiddler(s) (like \\\tags\\\), set it to \\\Yes\\\.//\u003C/p>\\n \u003C/td>\\n \u003C/tr>\\n \u003Ctr>\\n \u003Ctd>Template\u003C/td>\\n \u003Ctd>\\n \u003C\u003Ctemplate>>\\n \u003Cp>//The template to display in the field filter.//\u003C/p>\\n \u003Cp>//You can create your own field template tiddlers by adding the// \u003C\u003Ctag \\\$:/tags/bimlas/locator/field-templates\\\>> //tag to them (click on this tag pill for examples).//\u003C/p>\\n \u003C/td>\\n \u003C/tr>\\n \u003C/tbody>\\n \u003C/table>\\n \u003C/div>\\n\\n \u003C/$importvariables>\\n\\\\end\\n\\n\\\\define option()\\n \u003Coption value\u003C\u003CcurrentTiddler>>>\\n \u003C$view field\\\title\\\/>\\n \u003C$list filter\\\subfilter\u003CsettingsTiddler>istiddler subfilter\u003CsettingsTiddler>isshadow +first\\\>~\u003C/$list>\\n \u003C$list filter\\\subfilter\u003CsettingsTiddler>istiddler\\\>*\u003C/$list>\\n \u003C/option>\\n\\\\end\\n\\n\\\\define settingsTiddler() title\u003CcurrentTiddler>addprefix$:/config/bimlas/locator/fields/\\n\\nSelect field to edit its settings:\\n\u003C$select tiddler\\\$:/temp/bimlas/locator/settings-of-field\\\>\\n \u003Coptgroup label\\\Fields of regular tiddlers\\\>\\n \u003C$list filter\\\!issystemfieldssort\\\>\\n \u003C\u003Coption>>\\n \u003C/$list>\\n \u003C/optgroup>\\n \u003Coptgroup label\\\Fields of system tiddlers\\\>\\n \u003C$list filter\\\alltiddlers+shadowsissystemfields -!issystemfields +sort\\\>\\n \u003C\u003Coption>>\\n \u003C/$list>\\n \u003C/optgroup>\\n\u003C/$select>\\n\\n* //`~`: Has custom settings//\\n* //`*`: Settings modified by user//\\n\\nTo set up a new field, first add it to at least one tiddler.\\n\\n\u003Cp>//You can create your own context item template tiddlers by adding the// \u003C\u003Ctag \\\$:/tags/bimlas/locator/context-item-templates\\\>> //tag to them (click on this tag pill for examples).//\u003C/p>\\n\\n\u003C$list filter\\\title{$:/temp/bimlas/locator/settings-of-field} -\\\>\\n \u003C$list filter\u003C\u003CsettingsTiddler>>>\\n \u003C$macrocall $name\\\settings\\\ field{{$:/temp/bimlas/locator/settings-of-field}}/>\\n \u003C/$list>\\n\u003C/$list>\},\$:/plugins/bimlas/locator/stylesheet\:{\title\:\$:/plugins/bimlas/locator/stylesheet\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\.tc-tiddler-frame.bimlas-locator-explanation {\\n max-width: 400px;\\n}\\n.bimlas-locator-explanation svg {\\n width: 1rem;\\n height: 1rem;\\n}\\n.tc-drop-down button.bimlas-locator {\\n width: auto;\\n padding: 0;\\n display: inline-block;\\n background-color: inherit;\\n}\\nol.bimlas-locator {\\n list-style-type: none;\\n margin: 0;\\n padding-left: 0;\\n}\\nol.bimlas-locator ol {\\n margin-left: 0.75em;\\n padding-left: 0.3em;\\n border-left: 1px dashed;\\n}\\nli.toc-item.bimlas-locator, .tc-menu-list-item.bimlas-locator {\\n margin-top: 3px;\\n margin-bottom: 0;\\n}\\n.tc-menu-list-item.bimlas-locator > .tc-droppable {\\n display: inline-block;\\n}\\n.tc-block-dropdown.tc-search-drop-down .bimlas-locator a {\\n padding: 0;\\n}\\n.tc-block-dropdown.tc-search-drop-down .bimlas-locator a:hover {\\n background-color: initial;\\n}\\nbutton.bimlas-locator svg {\\n margin: 0 0.25em;\\n}\\nbutton.bimlas-locator.active svg {\\n fill: \u003C\u003Ccolour dirty-indicator>>;\\n}\\n.bimlas-locator.right {\\n float: right;\\n margin-right: 1em;\\n}\\n.bimlas-locator.context-settings {\\n border-width: 1px;\\n border-style: dashed;\\n padding: 0.5em;\\n}\},\$:/plugins/bimlas/locator/templates/context-item\:{\title\:\$:/plugins/bimlas/locator/templates/context-item\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cli class\\\toc-item\\\>\\n {{||$:/plugins/bimlas/locator/buttons/go-down-to-context}}\\n \u003C$list filter\\\title\u003CcontextState>gettemplate-of-context-items title\u003C__templateOfContextItems__> - +first\\\ variable\\\template\\\>\\n \u003C$transclude tiddler\u003C\u003Ctemplate>>/>\\n \u003C/$list>\\n\u003C/li>\},\$:/plugins/bimlas/locator/templates/context-settings\:{\title\:\$:/plugins/bimlas/locator/templates/context-settings\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define field-of-relationship()\\n Tree is based on field:\u003Cbr/>\\n \u003C$select tiddler\u003C\u003CcontextState>> field\\\field-of-relationship\\\ default\u003C\u003CdefaultFieldOfRelationship>>>\\n \u003C$list filter\\\locator-enlist-relationship-fields\\\ variable\\\currentField\\\>\\n \u003Coption value\u003C\u003CcurrentField>>>\\n \u003C$list filter\\\subfilter\u003Cfilter-unfiltered-view-context-items>count\\\ variable\\\count\\\>\\n (\u003C\u003Ccount>>) \u003C\u003CcurrentField>>\\n \u003C/$list>\\n \u003C/option>\\n \u003C/$list>\\n \u003C/$select>\\n\\\\end\\n\\n\\\\define template-of-context-items()\\n Template of context items:\u003Cbr/>\\n \u003C$select tiddler\u003C\u003CcontextState>> field\\\template-of-context-items\\\ default\u003C\u003C__templateOfContextItems__>>>\\n \u003C$list filter\\\alltiddlers+shadowstag$:/tags/bimlas/locator/context-item-templates\\\>\\n \u003Coption value\u003C\u003CcurrentTiddler>>>\\n \u003C$transclude field\\\caption\\\>\u003C$view field\\\title\\\/>\u003C/$transclude>\\n \u003C/option>\\n \u003C/$list>\\n \u003C/$select>\\n\\\\end\\n\\n\u003C$list filter\\\title\u003CcontextState>field:context-settings-openedyes\\\>\\n \u003Cdiv class\\\bimlas-locator context-settings\\\>\\n \u003C\u003Cfield-of-relationship>>\u003Cbr/>\\n \u003C\u003Ctemplate-of-context-items>>\u003Cbr/>\\n \u003C$checkbox\\n tiddler\u003C\u003CcontextState>>\\n field\\\invert-direction\\\\\n checked\\\yes\\\\\n unchecked\\\no\\\\\n default\\\no\\\\\n >\\n Invert direction\\n \u003C/$checkbox>\u003Cbr/>\\n \u003C$checkbox\\n tiddler\u003C\u003CcontextState>>\\n field\\\allow-to-open-leaves\\\\\n checked\\\yes\\\\\n unchecked\\\no\\\\\n default\\\no\\\\\n >\\n Allow to open leaves\\n \u003C/$checkbox>\u003Cbr/>\\n {{$:/plugins/bimlas/locator/buttons/open-field-settings}}\\n \u003C/div>\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/templates/field-names\:{\title\:\$:/plugins/bimlas/locator/templates/field-names\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define close-actions()\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\opened-fields-filters\\\ $subfilter\\\-\u003CcurrentField>\\\/>\\n\\\\end\\n\\n\\\\define open-actions()\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\opened-fields-filters\\\ $subfilter\\\\u003CcurrentField>\\\/>\\n\\\\end\\n\\n\\\\define closed()\\n \u003C$button class\u003C\u003CfieldButtonClass>> actions\u003C\u003Copen-actions>>>\\n {{$:/core/images/down-arrow}} \u003C\u003CcurrentField>>\\n \u003C/$button>\\n {{$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field}}\\n\\\\end\\n\\n\\\\define opened()\\n \u003C$button class\u003C\u003CfieldButtonClass>> actions\u003C\u003Cclose-actions>>>\\n {{$:/core/images/up-arrow}} \u003C\u003CcurrentField>>\\n \u003C/$button>\\n {{$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field}}\\n {{$:/plugins/bimlas/locator/templates/field-values}}\\n\\\\end\\n\\n\\\\define field-names() title\u003CintersectionState> title\u003CdifferenceState> +locator-selected-field-names subfilter\u003CfilterContextItems>fieldslocator-enabled-fields\u003CtypeOfFieldsFilter> +sort\\n\\\\define has-field-value-to-list() subfilter\u003CfilterContextItems>has\u003CcurrentField>search:$(currentField)$\u003CsearchedFieldValue> subfilter\u003Cfilter-selected-field-values> +first\\n\\n\u003Col class\\\bimlas-locator\\\>\\n \u003C$list filter\u003C\u003Cfield-names>> variable\\\currentField\\\>\\n \u003C$list filter\u003C\u003Chas-field-value-to-list>> variable\\\null\\\>\\n \u003C$set name\\\recursiveFilteringOfCurrentFieldAvailable\\\ filter\\\\u003CrecursiveFilteringAvailable>regexpyes locator-enlist-relationship-fields\u003CcurrentField> +countregexp2\\\ value\\\yes\\\ emptyValue\\\no\\\>\\n \u003C$set name\\\fieldButtonClass\\\ filter\\\subfilter\u003Cfilter-selected-field-values>first\\\ value\u003C\u003Clink-button-class additionalClasses:\\\active\\\>> emptyValue\u003C\u003Clink-button-class>>>\\n \u003Cli class\u003C\u003Cmenu-list-item-class>>>\\n \u003C$list filter\\\title\u003CcontextState>contains:opened-fields-filters\u003CcurrentField>\\\ emptyMessage\u003C\u003Cclosed>>>\u003C\u003Copened>>\u003C/$list>\\n \u003C/li>\\n \u003C/$set>\\n \u003C/$set>\\n \u003C/$list>\\n \u003C/$list>\\n\u003C/ol>\},\$:/plugins/bimlas/locator/templates/field-value-template\:{\title\:\$:/plugins/bimlas/locator/templates/field-value-template\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\$:/config/bimlas/locator/fields/addsuffix\u003CcurrentField>gettext\\\ emptyMessage{{$:/plugins/bimlas/locator/field-templates/text}} variable\\\template\\\>\\n \u003C$transclude tiddler\u003C\u003Ctemplate>>/>\\n\u003C/$list>\},\$:/plugins/bimlas/locator/templates/field-values\:{\title\:\$:/plugins/bimlas/locator/templates/field-values\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define remove-filtering-of-current-field()\\n \u003C$action-setfield $tiddler\u003C\u003CintersectionState>> $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C$action-setfield $tiddler\u003C\u003CdifferenceState>> $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C$list filter\\\\u003CrecursiveFilteringOfCurrentFieldAvailable>regexpyes\\\ variable\\\null\\\>\\n \u003C$action-setfield $tiddler\\\$:/state/bimlas/locator/search/recursive-filters/\\\ $index\u003C\u003CcurrentField>> $value\\\\\\/>\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define remove-from-intersection-state()\\n \u003C$action-listops $tiddler\u003C\u003CintersectionState>> $index\u003C\u003CcurrentField>> $subfilter\\\-allcurrent\\\/>\\n\\\\end\\n\\n\\\\define remove-from-difference-state()\\n \u003C$action-listops $tiddler\u003C\u003CdifferenceState>> $index\u003C\u003CcurrentField>> $subfilter\\\-allcurrent\\\/>\\n\\\\end\\n\\n\\\\define activate-actions()\\n \u003C\u003C__beforeActivateActions__>>\\n \u003C$action-listops $tiddler\u003C\u003C__filterState__>> $index\u003C\u003CcurrentField>> $subfilter\\\allcurrent\\\/>\\n\\\\end\\n\\n\\\\define inactivate-actions()\\n \u003C$action-listops $tiddler\u003C\u003C__filterState__>> $index\u003C\u003CcurrentField>> $subfilter\\\-allcurrent\\\/>\\n \u003C$list filter\\\\u003CrecursiveFilteringOfCurrentFieldAvailable>regexpyes\\\ variable\\\null\\\>\\n \u003C$action-listops $tiddler\\\$:/state/bimlas/locator/search/recursive-filters/\\\ $index\u003C\u003CcurrentField>> $subfilter\\\-allcurrent\\\/>\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define button-inactive()\\n \u003C$button tooltip\u003C\u003C__tooltip__>> class\u003C\u003Clink-button-class>> actions\u003C\u003Cactivate-actions>>>\\n \u003C\u003C__icon__>>\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define button-active()\\n \u003C$button tooltip\u003C\u003C__tooltip__>> class\u003C\u003Clink-button-class additionalClasses:\\\active\\\>> actions\u003C\u003Cinactivate-actions>>>\\n \u003C\u003C__icon__>>\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define toggle-button(filterState icon beforeActivateActions tooltip)\\n \u003C$list filter\\\title\u003C__filterState__>locator-selected-field-values\u003CcurrentField>iscurrent\\\ emptyMessage\u003C\u003Cbutton-inactive>>>\\n \u003C\u003Cbutton-active>>\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define field-values-of-context-items() subfilter\u003CfilterContextItems>locator-enlist-field-values\u003CcurrentField>search:title\u003CsearchedFieldValue> subfilter\u003Cfilter-selected-field-values> +sort\\n\\n\u003Col class\\\bimlas-locator\\\>\\n \u003Cli class\u003C\u003Cmenu-list-item-class>>>\\n \u003C$tiddler tiddler\\\ANY-VALUE\\\>\\n \u003C$macrocall\\n $name\\\toggle-button\\\\\n filterState\u003C\u003CintersectionState>>\\n icon{{$:/core/images/new-button}}\\n beforeActivateActions\u003C\u003Cremove-filtering-of-current-field>>\\n tooltip\\\Toggle filtering to any value\\\\\n />\\n \u003C$macrocall\\n $name\\\toggle-button\\\\\n filterState\u003C\u003CdifferenceState>>\\n icon{{$:/core/images/close-button}}\\n beforeActivateActions\u003C\u003Cremove-filtering-of-current-field>>\\n tooltip\\\Toggle filtering to any value\\\\\n />\\n __Any value__\\n \u003C/$tiddler>\\n \u003C/li>\\n \u003C$list filter\\\subfilter\u003Cfield-values-of-context-items>regexp^ANY-VALUE$count -1\\\ variable\\\null\\\>\\n \u003C$list filter\u003C\u003Cfield-values-of-context-items>>>\\n \u003Cli class\u003C\u003Cmenu-list-item-class>>>\\n \u003C$macrocall\\n $name\\\toggle-button\\\\\n filterState\u003C\u003CintersectionState>>\\n icon{{$:/core/images/new-button}}\\n beforeActivateActions\u003C\u003Cremove-from-difference-state>>\\n tooltip\\\Toggle filtering to this value\\\\\n />\\n \u003C$macrocall\\n $name\\\toggle-button\\\\\n filterState\u003C\u003CdifferenceState>>\\n icon{{$:/core/images/close-button}}\\n beforeActivateActions\u003C\u003Cremove-from-intersection-state>>\\n tooltip\\\Toggle filtering to this value\\\\\n />\\n \u003C$list filter\\\\u003CrecursiveFilteringOfCurrentFieldAvailable>regexpyes\\\ variable\\\null\\\>\\n \u003C$macrocall\\n $name\\\toggle-button\\\\\n filterState\\\$:/state/bimlas/locator/search/recursive-filters/\\\\\n icon{{$:/core/images/link}}\\n tooltip\\\Toggle recursive filtering to this value\\\\\n />\\n \u003C/$list>\\n \u003C$macrocall\\n $name\\\droppable-menu-list-item\\\\\n content{{$:/plugins/bimlas/locator/templates/field-value-template}}\\n actions{{$:/plugins/bimlas/locator/actions/add-field-value}}\\n />\\n \u003C/li>\\n \u003C/$list>\\n \u003C/$list>\\n\u003C/ol>\\n\},\$:/plugins/bimlas/locator/templates/fields-filter\:{\title\:\$:/plugins/bimlas/locator/templates/fields-filter\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define open-actions()\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\opened-fields-filters\\\ $subfilter\\\FIELDS-FILTER\\\/>\\n\\\\end\\n\\n\\\\define close-actions()\\n \u003C$action-listops $tiddler\u003C\u003CcontextState>> $field\\\opened-fields-filters\\\ $subfilter\\\-FIELDS-FILTER\\\/>\\n\\\\end\\n\\n\\\\define opened()\\n \u003C$button class\u003C\u003CfieldsFilterButtonClass>> actions\u003C\u003Cclose-actions>>>\\n {{$:/core/images/up-arrow}} __Filter by fields__\\n \u003C/$button>\\n {{$:/plugins/bimlas/locator/buttons/remove-filters}}\\n \u003Col class\\\bimlas-locator\\\>\\n {{$:/plugins/bimlas/locator/templates/field-names}}\\n \u003C/ol>\\n\\\\end\\n\\n\\\\define closed()\\n \u003C$button class\u003C\u003CfieldsFilterButtonClass>> actions\u003C\u003Copen-actions>>>\\n {{$:/core/images/down-arrow}} __Filter by fields__\\n \u003C/$button>\\n {{$:/plugins/bimlas/locator/buttons/remove-filters}}\\n\\\\end\\n\\n\u003C$set name\\\fieldsFilterButtonClass\\\ filter\\\subfilter\u003Cfilter-selected-field-values>first\\\ value\u003C\u003Clink-button-class additionalClasses:\\\active\\\>> emptyValue\u003C\u003Clink-button-class>>>\\n \u003C$vars typeOfFieldsFilter\\\nested\\\>\\n \u003C$list filter\\\title\u003CcontextState>contains:opened-fields-filtersFIELDS-FILTER\\\ emptyMessage\u003C\u003Cclosed>>>\u003C\u003Copened>>\u003C/$list>\\n \u003C/$vars>\\n\u003C/$set>\},\$:/plugins/bimlas/locator/templates/history-item\:{\title\:\$:/plugins/bimlas/locator/templates/history-item\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{||$:/plugins/bimlas/locator/buttons/go-up-to-context}}\\n{{||$:/plugins/bimlas/locator/field-templates/link}}\},\$:/plugins/bimlas/locator/templates/history\:{\title\:\$:/plugins/bimlas/locator/templates/history\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\u003C\u003Cfilter-history>>>\\n \u003C$macrocall $name\\\droppable-menu-list-item\\\ content{{$:/plugins/bimlas/locator/templates/history-item}} actions{{$:/plugins/bimlas/locator/actions/move-to-another-context}}/>\\n\u003C/$list>\\n\},\$:/plugins/bimlas/locator/templates/list-of-context-items\:{\title\:\$:/plugins/bimlas/locator/templates/list-of-context-items\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\u003C\u003CfilterContextItems>>>\\n \u003C$macrocall\\n $name\\\droppable-menu-list-item\\\\\n content{{$:/plugins/bimlas/locator/templates/context-item}}\\n actions{{$:/plugins/bimlas/locator/actions/move-to-another-context}}\\n />\\n\u003C/$list>\},\$:/plugins/bimlas/locator/templates/list-of-links-in-text\:{\title\:\$:/plugins/bimlas/locator/templates/list-of-links-in-text\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\subfilter\u003CfilterContextItems>sort\\\>\\n {{||$:/plugins/bimlas/locator/templates/context-item}}\\n\u003C/$list>\},\$:/plugins/bimlas/locator/templates/search-toolbar\:{\title\:\$:/plugins/bimlas/locator/templates/search-toolbar\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$vars\\n titleOfNewTiddler{{$:/temp/search}}\\n>\\n {{$:/plugins/bimlas/locator/buttons/clear-search-input}}\\n {{$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search}}\\n {{$:/plugins/bimlas/locator/buttons/create-new-tiddler}}\\n {{$:/plugins/bimlas/locator/buttons/open-field-settings}}\\n\u003C/$vars>\\n\},\$:/plugins/bimlas/locator/templates/view-toolbar\:{\title\:\$:/plugins/bimlas/locator/templates/view-toolbar\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\title\u003CcontextState>!field:invert-directionyes\\\ variable\\\null\\\>\\n \u003C$list filter\\\subfilter\u003Cfilter-field-of-relationship>!regexp^LINKS-IN-TEXT$\\\>\\n {{||$:/plugins/bimlas/locator/buttons/create-new-tiddler}}\\n \u003C/$list>\\n {{$:/plugins/bimlas/locator/buttons/search-in-context}}\\n\u003C/$list>\\n{{$:/plugins/bimlas/locator/buttons/collapse-history}}\\n{{$:/plugins/bimlas/locator/buttons/toggle-context-settings}}\},\$:/plugins/bimlas/locator/viewtemplate/field-list\:{\title\:\$:/plugins/bimlas/locator/viewtemplate/field-list\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Ctable class\\\tc-view-field-table\\\>\\n \u003Ctbody>\\n \u003C$list filter\\\allcurrentfieldslocator-enabled-fieldssorttitle -text\\\ variable\\\currentField\\\>\\n \u003Ctr class\\\tc-view-field\\\>\\n \u003Ctd class\\\tc-view-field-name\\\>\\n \u003C$text text\u003C\u003CcurrentField>>/>\\n \u003C/td>\\n \u003Ctd class\\\tc-view-field-value\\\>\\n \u003C$list filter\\\allcurrentlocator-enlist-field-values\u003CcurrentField>\\\>\\n {{||$:/plugins/bimlas/locator/templates/field-value-template}}\\n \u003C/$list>\\n \u003C/td>\\n \u003C/tr>\\n \u003C/$list>\\n \u003C/tbody>\\n\u003C/table>\},\$:/plugins/bimlas/locator/viewtemplate/fields-info\:{\title\:\$:/plugins/bimlas/locator/viewtemplate/fields-info\,\caption\:\{{$:/language/TiddlerInfo/Fields/Caption}} (Locator)\,\list-after\:\$:/core/ui/TiddlerInfo/Fields\,\tags\:\$:/tags/TiddlerInfo\,\type\:\text/vnd.tiddlywiki\,\text\:\{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\\n\\n{{$:/plugins/bimlas/locator/buttons/open-field-settings}}\},\$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar\:{\title\:\$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar\,\caption\:\{{$:/core/images/chevron-right}} locator sidebar\,\description\:\Browse hierarchy of tag in Locator sidebar\,\list-before\:\$:/core/ui/Buttons/open-window\,\tags\:\$:/tags/ViewToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\u003C$button tooltip\\\Browse hierarchy of tag in Locator sidebar\\\ aria-label\\\locator sidebar\\\ class\u003C\u003Ctv-config-toolbar-class>>>\\n\u003C$vars\\n contextState\\\$:/state/bimlas/locator/view/context/\\\\\n intersectionState\\\$:/state/bimlas/locator/view/intersection/\\\\\n differenceState\\\$:/state/bimlas/locator/view/difference/\\\\\n>\\n {{||$:/plugins/bimlas/locator/actions/add-to-history}}\\n\u003C/$vars>\\n\u003C$list filter\\\\u003Ctv-config-toolbar-icons>prefixyes\\\ variable\\\listItem\\\>\\n{{$:/core/images/chevron-right}}\\n\u003C/$list>\\n\u003C$list filter\\\\u003Ctv-config-toolbar-text>prefixyes\\\>\\n\u003Cspan class\\\tc-btn-text\\\>\\n\u003C$text text\\\ \\\/>\\n\u003C$text text\\\locator sidebar\\\/>\\n\u003C/span>\\n\u003C/$list>\\n\u003C/$button>\\n\}}}},{author:JeffreyWilkinson,core-version:>5.1.11,dependents:,description:calendar with date formatter addons,list:readme license,plugin-type:plugin,source:https://github.com/buggyj/TW5-tools,title:$:/plugins/bj/Calendar,version:1.11.0,type:application/json,text:{\tiddlers\:{\$:/config/bj/Calendar.json\:{\text\:\\\n{\\n\\t\\\journals\\\:{\\n\\t\\t\\\lastDayOfWeek\\\:\\\0\\\,\\n\\t\\t\\\formatter\\\:\\\$:/macros/bj/Calendar/journalfmt.js\\\,\\n\\t\\t\\\titlebold\\\:\\\no\\\,\\n\\t\\t\\\highlightThisDay\\\:\\\no\\\,\\n\\t\\t\\\highlightThisDate\\\:\\\yes\\\\\n\\t},\\n\\t\\\default\\\:{\\n\\t\\t\\\lastDayOfWeek\\\:\\\0\\\,\\n\\t\\t\\\formatter\\\:\\\$:/macros/bj/Calendar/journalslinked.js\\\,\\n\\t\\t\\\titlebold\\\:\\\yes\\\,\\n\\t\\t\\\highlightThisDay\\\:\\\no\\\,\\n\\t\\t\\\highlightLinks\\\:\\\yes\\\\\n\\t},\\n\\t\\\diary\\\:{\\n\\t\\t\\\lastDayOfWeek\\\:\\\0\\\,\\n\\t\\t\\\formatter\\\:\\\$:/macros/bj/Calendar/diary.js\\\,\\n\\t\\t\\\titlebold\\\:\\\yes\\\,\\n\\t\\t\\\highlightThisDay\\\:\\\no\\\,\\n\\t\\t\\\highlightLinks\\\:\\\yes\\\\\n\\t},\\n\\t\\\plain\\\:{\\n\\t\\t\\\lastDayOfWeek\\\:\\\0\\\,\\n\\t\\t\\\formatter\\\:\\\\\\,\\n\\t\\t\\\titlebold\\\:\\\yes\\\,\\n\\t\\t\\\highlightThisDay\\\:\\\yes\\\,\\n\\t\\t\\\highlightThisDate\\\:\\\no\\\\\n\\t}\\n}\\n\,\type\:\application/json\,\module-type\:\library\,\title\:\$:/config/bj/Calendar.json\},\$:/core/modules/widgets/macrorefresh.js\:{\title\:\$:/core/modules/widgets/macrorefresh.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/widgets/macrorefresh.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nMacrocall widget\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar MacroCallWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nMacroCallWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nMacroCallWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nMacroCallWidget.prototype.execute function() {\\n\\tvar self this;\\n\\t// Get the parse type if specified\\n\\tthis.parseType this.getAttribute(\\\$type\\\,\\\text/vnd.tiddlywiki\\\);\\n\\tthis.renderOutput this.getAttribute(\\\$output\\\,\\\text/html\\\);\\n\\t// Merge together the parameters specified in the parse tree with the specified attributes\\n\\tthis.params this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : ;\\n\\t$tw.utils.each(this.attributes,function(attribute,name) {\\n\\t\\tif(name.charAt(0) ! \\\$\\\) {\\n\\t\\t\\tself.params.push({name: name, value: attribute});\\t\\t\\t\\n\\t\\t}\\n\\t});\\n\\t// Get the macro value\\n\\tvar text this.getVariable(this.parseTreeNode.name || this.getAttribute(\\\$name\\\),{params: this.params}),\\n\\t\\tparseTreeNodes;\\n\\t// Are we rendering to HTML?\\n\\tif(this.renderOutput \\\text/html\\\) {\\n\\t\\t// If so well return the parsed macro\\n\\t\\tvar parser this.wiki.parseText(this.parseType,text,\\n\\t\\t\\t\\t\\t\\t\\t{parseAsInline: !this.parseTreeNode.isBlock});\\n\\t\\tparseTreeNodes parser ? parser.tree : ;\\n\\t} else {\\n\\t\\t// Otherwise, well render the text\\n\\t\\tvar plainText this.wiki.renderText(\\\text/plain\\\,this.parseType,text,{parentWidget: this});\\n\\t\\tparseTreeNodes {type: \\\text\\\, text: plainText};\\n\\t}\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets(parseTreeNodes);\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nMacroCallWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif($tw.utils.count(changedAttributes) > 0) {\\n\\t\\t// Rerender ourselves\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} \\n\\t//else \\n\\tif (this.getAttribute(\\\$refresh\\\)) {\\n\\t\\tvar params this.params.slice(0);\\n\\t\\tparams.push({name: \\\changedTiddlers\\\, value: changedTiddlers});\\n\\t\\tif (this.getVariable(this.getAttribute(\\\$refresh\\\),{params: params})) {\\n\\t\\t\\t\\t\\t// Rerender ourselves\\n\\t\\t\\tthis.refreshSelf();\\n\\t\\t\\treturn true;\\n\\t\\t} \\n\\t//else \\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n\\n};\\n\\nexports.macrorefresh MacroCallWidget;\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/macros/bj/Calendar/diary.js\:{\title\:\$:/macros/bj/Calendar/diary.js\,\text\:\/*\\\\\\ntitle: $:/macros/bj/Calendar/diary.js\\ntype: application/javascript\\nmodule-type: global\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\ncalendar demo\\n*/\\nvar Calendarnew Date();\\nvar createMonth function(mnth,year,options){\\n\\tvar month;\\n\\tfor (var i1;i \u003C 1+daysInMonth(mnth,year);i++) monthi createDate(i,mnth,year,options);\\n\\treturn month;\\n}\\nfunction createDate(i,mnth,year,options){\\n\\tvar strong,tiddlerDate,format $tw.wiki.getTiddlerText(\\\$:/config/NewJournal/Title\\\) || \\\YYYY MM DD\\\;\\n\\tvar date(new Date(year, mnth-1, i));\\n\\tif (options.highlightLinks\\\yes\\\) strong !;\\n\\t\\n\\ttiddlerDate $tw.utils.formatDateString(date,format);\\n \\n\\tif ($tw.wiki.getTiddler(tiddlerDate))return centre(strong++i+|+tiddlerDate+);\\n\\treturn centre(+i+|+tiddlerDate+);\\n}\\nfunction daysInMonth(iMonth, iYear){\\n\\t\\treturn 32 - new Date(iYear, iMonth-1, 32).getDate();\\n\\t}\\nfunction centre (x){ return +x+ ;}\\nexports.createMonth createMonth;\\n})();\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/macros/bj/Calendar/journalfmt.js\:{\title\:\$:/macros/bj/Calendar/journalfmt.js\,\text\:\/*\\\\\\ntitle: $:/macros/bj/Calendar/journalfmt.js\\ntype: application/javascript\\nmodule-type: global\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\ncalendar demo\\n*/\\nvar Calendarnew Date();\\nvar createMonth function(mnth,year,options){\\n\\tvar month;\\n\\tfor (var i1;i \u003C 1+daysInMonth(mnth,year);i++) monthi createDate(i,mnth,year,options);\\n\\treturn month;\\n}\\nfunction createDate(i,mnth,year,options){\\n\\tvar strong,tiddlerDate;\\n\\tvar date(new Date(year, mnth, i));\\n\\tif (date.toDateString()Calendar.toDateString()&&options.highlightThisDate\\\yes\\\) strong !;\\n\\ttiddlerDatedate.getDate()+\\n\\t +$tw.language.getString(\\\Date/Long/Month/\\\ + (date.getMonth()))+ +date.getFullYear();\\n \\n\\tif ($tw.wiki.getTiddler(tiddlerDate)!undefined) strong !;\\n\\treturn centre(strong++i+|+tiddlerDate+);\\n}\\nfunction daysInMonth(iMonth, iYear){\\n\\t\\treturn 32 - new Date(iYear, iMonth, 32).getDate();\\n\\t}\\nfunction centre (x){ return +x+ ;}\\nexports.createMonth createMonth;\\n})();\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/macros/bj/Calendar/journalslinked.js\:{\title\:\$:/macros/bj/Calendar/journalslinked.js\,\text\:\/*\\\\\\ntitle: $:/macros/bj/Calendar/journalslinked.js\\ntype: application/javascript\\nmodule-type: global\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\ncalendar demo\\n*/\\nvar Calendarnew Date();\\nvar createMonth function(mnth,year,options){\\n\\tvar month;\\n\\tfor (var i1;i \u003C 1+daysInMonth(mnth,year);i++) monthi createDate(i,mnth,year,options);\\n\\treturn month;\\n}\\nfunction createDate(i,mnth,year,options){\\n\\tvar strong,tiddlerDate,format $tw.wiki.getTiddlerText(\\\$:/config/NewJournal/Title\\\) || \\\YYYY MM DD\\\;\\n\\tvar date(new Date(year, mnth-1, i));\\n\\tif (options.highlightLinks\\\yes\\\) strong !;\\n\\t\\n\\ttiddlerDate $tw.utils.formatDateString(date,format);\\n \\n\\tif ($tw.wiki.getTiddler(tiddlerDate))return centre(strong++i+|+tiddlerDate+);\\n\\treturn i;\\n}\\nfunction daysInMonth(iMonth, iYear){\\n\\t\\treturn 32 - new Date(iYear, iMonth-1, 32).getDate();\\n\\t}\\nfunction centre (x){ return +x+ ;}\\nexports.createMonth createMonth;\\n})();\\n\,\type\:\application/javascript\,\module-type\:\global\},\$:/macros/buggyj/Calendar/base.js\:{\title\:\$:/macros/buggyj/Calendar/base.js\,\text\:\/*\\\\\\ntitle: $:/macros/buggyj/Calendar/base.js\\ntype: application/javascript\\nmodule-type: macro\\n\\n\u003C\u003Cdiary year month>>\\n\u003C\u003Cdiary year>> - year calendar\\n\u003C\u003Cdiary>> - this month\\n\\nOptions:$:/macros/diary/options.json\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\nCAL demo\\n*/\\n\\nexports.name \\\calendarbase\\\;\\n\\nexports.params \\n\\t{ name: \\\year\\\ },{ name: \\\month\\\ },{ name: \\\opts\\\ }\\n;\\n/*\\nRun the macro\\n*/\\n\\nexports.run function(year, month,opts) {\\nif (!opts) opts\\\default\\\;\\nvar options $tw.wiki.getTiddlerData(\\\$:/config/bj/Calendar.json\\\)opts||\\n\\t\\t\\t\\t{lastDayOfWeek:\\\6\\\,formatter:\\\\\\,titlebold:\\\\\\,highlightThisDay:\\\\\\,highlightThisDate:\\\\\\};\\nvar createMonth;\\ntry {\\n\\tcreateMonth require(options.formatter).createMonth;\\n} catch (e) {\\n\\tcreateMonth function(mnth,year){\\n\\t\\tvar month;\\n\\t\\tfor (var i1;i \u003C 1+daysInMonth(mnth,year);i++) monthi i;\\n\\t\\treturn month;\\n\\t}\\n} \\nvar boldtitle(options.titleboldyes)?!:;\\nvar day_of_week (function () { \\n\\tvar days ;\\n\\tfor (var i 0; i \u003C 7; i++) {daysi $tw.language.getString(\\\Date/Short/Day/\\\ + i); } \\n\\treturn days;\\n})();\\nvar month_of_year (function () { \\n\\tvar months ;\\n\\tfor (var i 1; i \u003C 13; i++) {monthsi $tw.language.getString(\\\Date/Long/Month/\\\ + i); } \\n\\treturn months;\\n})(); \\nvar Calendar new Date();\\nvar thisyear Calendar.getFullYear(); // year (xxxx)\\nvar thismonth Calendar.getMonth()+1;\\t// month (0-11)\\nvar thisday Calendar.getDay(); // day (0-6)\\nvar WEEKFIN parseInt(options.lastDayOfWeek); \\nvar MONTHS_IN_YEAR12;\\t\\t\\t\\t\\t\\n \\nvar lf \\\\n;\\nvar cal\u003Cdiv>+lf+lf; \\nvar ayearthisyear;\\nif (!!month) {\\n\\tif (!!year) {\\n\\t\\tcal+calendar (month,year,options);\\n\\t} else {\\n\\t\\tcal+calendar (month,thisyear,options);\\n\\t}\\n} else {\\n\\tif (!!year) {\\n\\t\\t\\tcal+titleOfYear(year); \\n\\t\\toptions.seperateYearHeading yes;\\n\\t\\tayearyear; \\n\\t\\tfor(var i0; i\u003CMONTHS_IN_YEAR; i+2)\\n\\t\\t\\tcal+splicetable(calendar (i+1,ayear,options),calendar (i+2,ayear,options));\\n\\t}\\n\\telse {\\n\\t\\t\\tcal+calendar (thismonth,thisyear,options);\\t\\n\\t}\\n}\\nreturn cal+lf+lf+\u003C/div>;\\n\\nfunction calendar (mnth,year,options){\\n var month \\tcreateMonth(mnth,year,options);\\n var blankdays (firstDayInMonth(mnth,year)+13-WEEKFIN)%7;\\n\\treturn titleOfMonth(mnth,year)+createWeekHeading()+\\n\\t formatAsMonth(month,blankdays);\\n}\\nfunction titleOfMonth(mth,year) {\\n\\tif (!!options.seperateYearHeading ) {\\n\\t\\treturn |>|>|>|+ centre(boldtitle+ month_of_yearmth) +|\u003C|\u003C|\u003C|+lf;\\n\\t} else {\\n\\t\\treturn |>|>|>|+ centre(boldtitle+ month_of_yearmth + + year) +|\u003C|\u003C|\u003C|+lf;\\n\\t}\\n}\\n\\nfunction titleOfYear(year) {\\n\\t\\treturn |>|>|>|>|>|>|>|+ centre(!+year) +|\u003C|\u003C|\u003C|\u003C|\u003C|\u003C|\u003C|+lf;\\n}\\nfunction centre (x){ return +x+ ;}\\n\\nfunction formatAsMonth(month,blankdays){\\t\\n\\tvar theday,blank,|,||,|||,||||,|||||,||||||,|||||||;\\t\\n\\tvar calblankblankdays;//pad out before first day of month\\n\\tfor(var i1; i \u003C month.length;i++){//first 0 month element is not used\\n\\t\\tcal+|+monthi;\\n\\t\\ttheday(i+blankdays-1)%7;\\n\\t\\tif (theday 6) cal + | + lf; \\n\\t}\\n\\tif (theday ! 6) cal + blank7 - theday + lf;//pad out rest of week, if needed\\n\\treturn cal ;\\n}\\nfunction createWeekHeading(){\\n\\t\\tvar daystitle,weekdays day_of_week.slice(0);\\n\\t\\t// highlight todays day of week\\n\\t\\tif (options.highlightThisDayyes)weekdaysthisday !+weekdaysthisday;\\n\\t\\tfor (var i0;i \u003C weekdays.length; i++) daystitlei centre(weekdays(i+1+WEEKFIN)%7);\\n\\t\\treturn |+daystitle.join(|)+|+lf; \\n}\\nfunction daysInMonth(iMonth, iYear){\\n\\t\\treturn 32 - new Date(iYear, iMonth-1, 32).getDate();\\n\\t}\\nfunction firstDayInMonth(iMonth, iYear){\\n\\t\\treturn new Date(iYear, iMonth-1, 1).getDay();\\n\\t} \\nfunction splicetable (a,b) {\\n\\tvar i,cal,taba a.split(\\\\n),tabbb.split(|\\\\n);\\n\\tvar limit(taba.length\u003Ctabb.length)?taba.length:tabb.length;//shortest\\n\\tfor (i0;i\u003Climit-1;i++) \\t\\tcal+tabai+tabbi+|+lf;\\t \\n\\tfor (;i \u003C taba.length-1;i++) \\tcal+tabai+\\\||||||||\\\+lf;\\n\\tfor (;i \u003C tabb.length-1;i++) \\tcal+\\\||||||||\\\+tabbi+lf;\\n\\treturn cal;\\n}\\t\\t \\n} \\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/macros/buggyj/Calendar/entry.js\:{\title\:\$:/macros/buggyj/Calendar/entry.js\,\text\:\/*\\\\\\ntitle: $:/macros/buggyj/Calendar/entry.js\\ntype: application/javascript\\nmodule-type: macro\\n\\n\u003C\u003Ccalendar year month>>\\n\u003C\u003Ccalendar year>> - year calendar\\n\u003C\u003Ccalendar>> - this month\\n\\nOptions:$:/macros/diary/options.json\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\nCAL demo\\n*/\\n\\nexports.name \\\calendar\\\;\\n\\nexports.params \\n\\t{ name: \\\year\\\ },{ name: \\\month\\\ },{ name: \\\opts\\\ }\\n;\\n/*\\nRun the macro\\n*/\\n\\nexports.run function(year, month,opts) {\\nreturn \u003C$macrorefresh $name\\\calendarbase\\\ year\\\+year+\\\ month\\\+month+\\\ opts\\\+opts+\\\ $refresh\\\calendarrefresh\\\/>;\\n}\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/macros/buggyj/Calendar/entry2.js\:{\title\:\$:/macros/buggyj/Calendar/entry2.js\,\text\:\/*\\\\\\ntitle: $:/macros/buggyj/Calendar/entry2.js\\ntype: application/javascript\\nmodule-type: macro\\n\\n\u003C\u003Cdiary year month>>\\n\u003C\u003Cdiary year>> - year calendar\\n\u003C\u003Cdiary>> - this month\\n\\nOptions:$:/macros/diary/options.json\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\nCAL demo\\n*/\\n\\nexports.name \\\diary\\\;\\n\\nexports.params \\n\\t{ name: \\\year\\\ },{ name: \\\month\\\ },{ name: \\\opts\\\ }\\n;\\n/*\\nRun the macro\\n*/\\n\\nexports.run function(year, month,opts) {\\n\\tvar tags $tw.wiki.getTiddlerText(\\\$:/config/NewJournal/Tags\\\);\\n\\tif (!opts) opts \\\diary\\\;\\n\\treturn \u003C$ifnew fields\\\\\\\\\{\\\tags\\\:\\\+tags+\\\}\\\\\\\\\> +\\n\\t\u003C$macrorefresh $name\\\calendarbase\\\ year\\\+year+\\\ month\\\+month+\\\ opts\\\+opts+\\\ $refresh\\\calendarrefresh\\\/>+ \u003C/$ifnew>;\\n}\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/macros/buggyj/Calendar/ifnew.js\:{\title\:\$:/macros/buggyj/Calendar/ifnew.js\,\text\:\/*\\\\\\ntitle: $:/macros/buggyj/Calendar/ifnew.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nLinkcatcher widget\\n\\nToDo - add message param to listen for other mssg and action to set other actions (link just create)\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar IfNewWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\tm-navigate\\\, handler: \\\handleNavigateEvent\\\}\\n\\t);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nIfNewWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nIfNewWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\tthis.renderChildren(parent,nextSibling);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nIfNewWidget.prototype.execute function() {\\n\\t// Get our parameters\\n\\tthis.fields this.getAttribute(\\\fields\\\);\\n\\tthis.catchMessage this.getAttribute(\\\message\\\);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nIfNewWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.fields || changedAttributes.message ) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn this.refreshChildren(changedTiddlers);\\t\\t\\n\\t}\\n};\\n\\n/*\\nHandle a tm-navigate event\\n*/\\nIfNewWidget.prototype.handleNavigateEvent function(event) {\\n\\tvar tiddler this.wiki.getTiddler(event.navigateTo),fds;\\n\\tif(tiddler) return true;\\n\\ttry {\\n\\t\\tfdsJSON.parse(this.fields);\\n\\t} catch(e) {\\n\\t\\tfds{};\\n\\t}\\n\\tfds.title event.navigateTo;\\n\\tif(this.parentWidget) {\\n\\t\\tthis.parentWidget.dispatchEvent({\\n\\t\\t\\ttype: \\\tm-new-tiddler\\\,\\n\\t\\t\\tparam: fds\\n\\t\\t});\\n\\t}\\n\\treturn false;\\n};\\n\\nexports.ifnew IfNewWidget;\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/macros/buggyj/Calendar/refresh.js\:{\title\:\$:/macros/buggyj/Calendar/refresh.js\,\text\:\/*\\\\\\ntitle: $:/macros/buggyj/Calendar/refresh.js\\ntype: application/javascript\\nmodule-type: macro\\n\\n\u003C\u003Cdiary year month>>\\n\u003C\u003Cdiary year>> - year calendar\\n\u003C\u003Cdiary>> - this month\\n\\nOptions:$:/macros/diary/options.json\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\nCAL demo\\n*/\\n\\nexports.name \\\calendarrefresh\\\;\\n\\nexports.params \\n\\t{ name: \\\year\\\ },{ name: \\\month\\\ },{ name: \\\opts\\\ },{name:\\\changedTiddlers\\\}\\n;\\n \\n// Source: http://stackoverflow.com/questions/497790\\nvar dates {\\n convert:function(d) {\\n // Converts the date in d to a date-object. The input can be:\\n // a date object: returned without modification\\n // an array : Interpreted as year,month,day. NOTE: month is 0-11.\\n // a number : Interpreted as number of milliseconds\\n // since 1 Jan 1970 (a timestamp) \\n // a string : Any format supported by the javascript engine, like\\n // \\\YYYY/MM/DD\\\, \\\MM/DD/YYYY\\\, \\\Jan 31 2009\\\ etc.\\n // an object : Interpreted as an object with year, month and date\\n // attributes. **NOTE** month is 0-11.\\n return (\\n d.constructor Date ? d :\\n d.constructor Array ? new Date(d0,d1,d2) :\\n d.constructor Number ? new Date(d) :\\n d.constructor String ? new Date(d) :\\n typeof d \\\object\\\ ? new Date(d.year,d.month,d.date) :\\n NaN\\n );\\n },\\n compare:function(a,b) {\\n // Compare two dates (could be of any type supported by the convert\\n // function above) and returns:\\n // -1 : if a \u003C b\\n // 0 : if a b\\n // 1 : if a > b\\n // NaN : if a or b is an illegal date\\n // NOTE: The code inside isFinite does an assignment ().\\n return (\\n isFinite(athis.convert(a).valueOf()) &&\\n isFinite(bthis.convert(b).valueOf()) ?\\n (a>b)-(a\u003Cb) :\\n NaN\\n );\\n },\\n inRange:function(d,start,end) {\\n // Checks if date in d is between dates in start and end.\\n // Returns a boolean or NaN:\\n // true : if d is between start and end (inclusive)\\n // false : if d is before start or after end\\n // NaN : if one or more of the dates is illegal.\\n // NOTE: The code inside isFinite does an assignment ().\\n return (\\n isFinite(dthis.convert(d).valueOf()) &&\\n isFinite(startthis.convert(start).valueOf()) &&\\n isFinite(endthis.convert(end).valueOf()) ?\\n start \u003C d && d \u003C end :\\n NaN\\n );\\n }\\n}\\n/*\\nRun the macro\\n*/\\n\\nexports.run function(year, month,opts,changedTiddlers) {\\n\\n\\tvar found false;\\n\\tvar journaltag \\\Journal\\\;\\n\\t\\n\\t$tw.utils.each(changedTiddlers,function(attribute,name) {\\n\\t\\tif (attribute.deleted) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tvar tiddler $tw.wiki.getTiddler(name);\\n\\t\\tvar tags (tiddler.fields.tags || ).slice(0);\\n\\t\\t\\n\\t\\tif(tags.indexOf(journaltag) ! -1) {\\n\\t\\t\\tfound true;\\t\\n\\t\\t}\\n\\t});\\n\\tif (found) return \\\found\\\;\\n\\treturn \\\\\\; \\n} \\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\macro\},\$:/plugins/bj/Calendar/license\:{\title\:\$:/plugins/bj/Calendar/license\,\text\:\The MIT License (MIT)\\n\\nCopyright (c) 2014 Jeffrey Wikinson aka buggyj\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of\\nthis software and associated documentation files (the \\\Software\\\), to deal in\\nthe Software without restriction, including without limitation the rights to\\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\\nthe Software, and to permit persons to whom the Software is furnished to do so,\\nsubject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\},\$:/plugins/bj/Calendar/readme\:{\title\:\$:/plugins/bj/Calendar/readme\,\text\:\For documentation see the project home at\\nhttp://bjtools.tiddlyspot.com#ExtendableCalendar\\n\},\$:/plugins/bj/calendar/sidbar\:{\title\:\$:/plugins/bj/calendar/sidbar\,\caption\:\Calendar\,\tags\:\$:/tags/SideBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$reveal state\\\$:/temp/plugins/bj/Calendar\\\ text\\\Year\\\ type\\\nomatch\\\>\\n \u003C$button set\\\$:/temp/plugins/bj/Calendar\\\ setTo\\\Year\\\>Year\u003C/$button>\\n \u003C\u003Ccalendar \\\\\\ \\\\\\>>\\n\u003C/$reveal>\\n\u003C$reveal state\\\$:/temp/plugins/bj/Calendar\\\ text\\\Year\\\ type\\\match\\\>\\n \u003C$button set\\\$:/temp/plugins/bj/Calendar\\\ setTo\\\Month\\\>Month\u003C/$button>\\n\u003C\u003Ccalendar 2014 \\\\\\>>\\n\u003C/$reveal>\\n\}}}},{name:Relink,title:$:/plugins/flibbles/relink,description:Flexibility when relinking renamed tiddlers,author:Flibbles,version:2.5.2,core-version:>5.1.22,stability:STABILITY_2_STABLE,source:https://github.com/flibbles/tw5-relink,demo:http://flibbles.github.io/tw5-relink/,list:readme configuration license,dependents:,plugin-type:plugin,type:application/json,text:{\tiddlers\:{\$:/config/DefaultColourMappings/relink-impossible\:{\title\:\$:/config/DefaultColourMappings/relink-impossible\,\text\:\\u003C\u003Ccolour dirty-indicator>>\},\$:/config/flibbles/relink/PluginLibrary\:{\title\:\$:/config/flibbles/relink/PluginLibrary\,\caption\:\//Relink// Library\,\tags\:\$:/tags/PluginLibrary\,\url\:\https://flibbles.github.io/tw5-relink/library/index.html\,\text\:\The //Relink// library contains //Relink// as well as its supplemental plugins. It is maintained by Flibbles. See the github page|https://github.com/flibbles/tw5-relink for more information.\\n\},\$:/config/flibbles/relink/attributes/$action-deletefield/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$action-deletefield/$tiddler\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-deletetiddler/$filter\:{\title\:\$:/config/flibbles/relink/attributes/$action-deletetiddler/$filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-deletetiddler/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$action-deletetiddler/$tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-listops/$filter\:{\title\:\$:/config/flibbles/relink/attributes/$action-listops/$filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-listops/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$action-listops/$tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-log/$$filter\:{\title\:\$:/config/flibbles/relink/attributes/$action-log/$$filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-navigate/$to\:{\title\:\$:/config/flibbles/relink/attributes/$action-navigate/$to\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-popup/$state\:{\title\:\$:/config/flibbles/relink/attributes/$action-popup/$state\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-sendmessage/$names\:{\title\:\$:/config/flibbles/relink/attributes/$action-sendmessage/$names\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-sendmessage/$values\:{\title\:\$:/config/flibbles/relink/attributes/$action-sendmessage/$values\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-setfield/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$action-setfield/$tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$fields\:{\title\:\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$fields\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$indexes\:{\title\:\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$indexes\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$values\:{\title\:\$:/config/flibbles/relink/attributes/$action-setmultiplefields/$values\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$button/actions\:{\title\:\$:/config/flibbles/relink/attributes/$button/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$button/set\:{\title\:\$:/config/flibbles/relink/attributes/$button/set\,\text\:\reference\},\$:/config/flibbles/relink/attributes/$button/setTo\:{\title\:\$:/config/flibbles/relink/attributes/$button/setTo\,\text\:\title\},\$:/config/flibbles/relink/attributes/$button/to\:{\title\:\$:/config/flibbles/relink/attributes/$button/to\,\text\:\title\},\$:/config/flibbles/relink/attributes/$checkbox/actions\:{\title\:\$:/config/flibbles/relink/attributes/$checkbox/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$checkbox/checkactions\:{\title\:\$:/config/flibbles/relink/attributes/$checkbox/checkactions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$checkbox/tag\:{\title\:\$:/config/flibbles/relink/attributes/$checkbox/tag\,\text\:\title\},\$:/config/flibbles/relink/attributes/$checkbox/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$checkbox/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$checkbox/uncheckactions\:{\title\:\$:/config/flibbles/relink/attributes/$checkbox/uncheckactions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$count/filter\:{\title\:\$:/config/flibbles/relink/attributes/$count/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$draggable/filter\:{\title\:\$:/config/flibbles/relink/attributes/$draggable/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$draggable/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$draggable/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$droppable/actions\:{\title\:\$:/config/flibbles/relink/attributes/$droppable/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$dropzone/actions\:{\title\:\$:/config/flibbles/relink/attributes/$dropzone/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$edit/inputActions\:{\title\:\$:/config/flibbles/relink/attributes/$edit/inputActions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$edit/refreshTitle\:{\title\:\$:/config/flibbles/relink/attributes/$edit/refreshTitle\,\text\:\title\},\$:/config/flibbles/relink/attributes/$edit/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$edit/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$edit-text/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$edit-text/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$encrypt/filter\:{\title\:\$:/config/flibbles/relink/attributes/$encrypt/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$fieldmangler/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$fieldmangler/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$fields/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$fields/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$genesis/$names\:{\title\:\$:/config/flibbles/relink/attributes/$genesis/$names\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$genesis/$values\:{\title\:\$:/config/flibbles/relink/attributes/$genesis/$values\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$image/source\:{\title\:\$:/config/flibbles/relink/attributes/$image/source\,\text\:\title\},\$:/config/flibbles/relink/attributes/$importvariables/filter\:{\title\:\$:/config/flibbles/relink/attributes/$importvariables/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$jsontiddler/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$jsontiddler/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$keyboard/actions\:{\title\:\$:/config/flibbles/relink/attributes/$keyboard/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$link/to\:{\title\:\$:/config/flibbles/relink/attributes/$link/to\,\text\:\title\},\$:/config/flibbles/relink/attributes/$link/tooltip\:{\title\:\$:/config/flibbles/relink/attributes/$link/tooltip\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$linkcatcher/actions\:{\title\:\$:/config/flibbles/relink/attributes/$linkcatcher/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$linkcatcher/set\:{\title\:\$:/config/flibbles/relink/attributes/$linkcatcher/set\,\text\:\title\},\$:/config/flibbles/relink/attributes/$linkcatcher/to\:{\title\:\$:/config/flibbles/relink/attributes/$linkcatcher/to\,\text\:\title\},\$:/config/flibbles/relink/attributes/$list/editTemplate\:{\title\:\$:/config/flibbles/relink/attributes/$list/editTemplate\,\text\:\title\},\$:/config/flibbles/relink/attributes/$list/emptyMessage\:{\title\:\$:/config/flibbles/relink/attributes/$list/emptyMessage\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$list/filter\:{\title\:\$:/config/flibbles/relink/attributes/$list/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$list/history\:{\title\:\$:/config/flibbles/relink/attributes/$list/history\,\text\:\title\},\$:/config/flibbles/relink/attributes/$list/join\:{\title\:\$:/config/flibbles/relink/attributes/$list/join\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$list/template\:{\title\:\$:/config/flibbles/relink/attributes/$list/template\,\text\:\title\},\$:/config/flibbles/relink/attributes/$log/$$filter\:{\title\:\$:/config/flibbles/relink/attributes/$log/$$filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$messagecatcher/actions\:{\title\:\$:/config/flibbles/relink/attributes/$messagecatcher/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$navigator/history\:{\title\:\$:/config/flibbles/relink/attributes/$navigator/history\,\text\:\title\},\$:/config/flibbles/relink/attributes/$navigator/story\:{\title\:\$:/config/flibbles/relink/attributes/$navigator/story\,\text\:\title\},\$:/config/flibbles/relink/attributes/$radio/actions\:{\title\:\$:/config/flibbles/relink/attributes/$radio/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$radio/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$radio/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$range/actions\:{\title\:\$:/config/flibbles/relink/attributes/$range/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$range/actionsStart\:{\title\:\$:/config/flibbles/relink/attributes/$range/actionsStart\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$range/actionsStop\:{\title\:\$:/config/flibbles/relink/attributes/$range/actionsStop\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$range/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$range/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$reveal/state\:{\title\:\$:/config/flibbles/relink/attributes/$reveal/state\,\text\:\reference\},\$:/config/flibbles/relink/attributes/$reveal/stateTitle\:{\title\:\$:/config/flibbles/relink/attributes/$reveal/stateTitle\,\text\:\title\},\$:/config/flibbles/relink/attributes/$select/actions\:{\title\:\$:/config/flibbles/relink/attributes/$select/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/attributes/$select/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$select/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$set/filter\:{\title\:\$:/config/flibbles/relink/attributes/$set/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$set/subtiddler\:{\title\:\$:/config/flibbles/relink/attributes/$set/subtiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$set/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$set/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$setmultiplevariables/$names\:{\title\:\$:/config/flibbles/relink/attributes/$setmultiplevariables/$names\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$setmultiplevariables/$values\:{\title\:\$:/config/flibbles/relink/attributes/$setmultiplevariables/$values\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$setvariable/filter\:{\title\:\$:/config/flibbles/relink/attributes/$setvariable/filter\,\text\:\filter\},\$:/config/flibbles/relink/attributes/$setvariable/subtiddler\:{\title\:\$:/config/flibbles/relink/attributes/$setvariable/subtiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$setvariable/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$setvariable/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$tiddler/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$tiddler/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$transclude/$subtiddler\:{\title\:\$:/config/flibbles/relink/attributes/$transclude/$subtiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$transclude/$tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$transclude/$tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$transclude/subtiddler\:{\title\:\$:/config/flibbles/relink/attributes/$transclude/subtiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$transclude/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$transclude/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$view/subtiddler\:{\title\:\$:/config/flibbles/relink/attributes/$view/subtiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$view/tiddler\:{\title\:\$:/config/flibbles/relink/attributes/$view/tiddler\,\text\:\title\},\$:/config/flibbles/relink/attributes/$wikify/text\:{\title\:\$:/config/flibbles/relink/attributes/$wikify/text\,\text\:\wikitext\},\$:/config/flibbles/relink/exceptions/$:/DefaultTiddlers\:{\title\:\$:/config/flibbles/relink/exceptions/$:/DefaultTiddlers\,\text\:\application/x-tiddler-filter\},\$:/config/flibbles/relink/exceptions/$:/config/FileSystemExtensions\:{\title\:\$:/config/flibbles/relink/exceptions/$:/config/FileSystemExtensions\,\text\:\application/x-tiddler-filter\},\$:/config/flibbles/relink/exceptions/$:/config/FileSystemPaths\:{\title\:\$:/config/flibbles/relink/exceptions/$:/config/FileSystemPaths\,\text\:\application/x-tiddler-filter\},\$:/config/flibbles/relink/fieldattributes/$action-createtiddler\:{\title\:\$:/config/flibbles/relink/fieldattributes/$action-createtiddler\,\text\:\(^$.*)\},\$:/config/flibbles/relink/fieldattributes/$action-deletefield\:{\title\:\$:/config/flibbles/relink/fieldattributes/$action-deletefield\,\text\:\(^$.*)\},\$:/config/flibbles/relink/fieldattributes/$action-setfield\:{\title\:\$:/config/flibbles/relink/fieldattributes/$action-setfield\,\text\:\(^$.*)\},\$:/config/flibbles/relink/fieldattributes/$jsontiddler\:{\title\:\$:/config/flibbles/relink/fieldattributes/$jsontiddler\,\text\:\\\\\$(.*)\},\$:/config/flibbles/relink/fields/caption\:{\title\:\$:/config/flibbles/relink/fields/caption\,\text\:\wikitext\},\$:/config/flibbles/relink/fields/filter\:{\title\:\$:/config/flibbles/relink/fields/filter\,\text\:\filter\},\$:/config/flibbles/relink/fields/list-after\:{\title\:\$:/config/flibbles/relink/fields/list-after\,\text\:\title\},\$:/config/flibbles/relink/fields/list-before\:{\title\:\$:/config/flibbles/relink/fields/list-before\,\text\:\title\},\$:/config/flibbles/relink/fields/list\:{\title\:\$:/config/flibbles/relink/fields/list\,\text\:\list\},\$:/config/flibbles/relink/fields/tags\:{\title\:\$:/config/flibbles/relink/fields/tags\,\text\:\list\},\$:/config/flibbles/relink/macros/colour-picker/actions\:{\title\:\$:/config/flibbles/relink/macros/colour-picker/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/csvtiddlers/filter\:{\title\:\$:/config/flibbles/relink/macros/csvtiddlers/filter\,\text\:\filter\},\$:/config/flibbles/relink/macros/datauri/title\:{\title\:\$:/config/flibbles/relink/macros/datauri/title\,\text\:\title\},\$:/config/flibbles/relink/macros/image-picker/actions\:{\title\:\$:/config/flibbles/relink/macros/image-picker/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/jsontiddler/title\:{\title\:\$:/config/flibbles/relink/macros/jsontiddler/title\,\text\:\title\},\$:/config/flibbles/relink/macros/jsontiddlers/filter\:{\title\:\$:/config/flibbles/relink/macros/jsontiddlers/filter\,\text\:\filter\},\$:/config/flibbles/relink/macros/keyboard-driven-input/configTiddlerFilter\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/configTiddlerFilter\,\text\:\filter\},\$:/config/flibbles/relink/macros/keyboard-driven-input/inputAcceptActions\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/inputAcceptActions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/keyboard-driven-input/inputAcceptVariantActions\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/inputAcceptVariantActions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/keyboard-driven-input/inputCancelActions\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/inputCancelActions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/keyboard-driven-input/selectionStateTitle\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/selectionStateTitle\,\text\:\title\},\$:/config/flibbles/relink/macros/keyboard-driven-input/storeTitle\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/storeTitle\,\text\:\title\},\$:/config/flibbles/relink/macros/keyboard-driven-input/tiddler\:{\title\:\$:/config/flibbles/relink/macros/keyboard-driven-input/tiddler\,\text\:\title\},\$:/config/flibbles/relink/macros/list-links/emptyMessage\:{\title\:\$:/config/flibbles/relink/macros/list-links/emptyMessage\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/list-links/filter\:{\title\:\$:/config/flibbles/relink/macros/list-links/filter\,\text\:\filter\},\$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate\:{\title\:\$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate\,\text\:\title\},\$:/config/flibbles/relink/macros/list-links-draggable/tiddler\:{\title\:\$:/config/flibbles/relink/macros/list-links-draggable/tiddler\,\text\:\title\},\$:/config/flibbles/relink/macros/list-tagged-draggable/emptyMessage\:{\title\:\$:/config/flibbles/relink/macros/list-tagged-draggable/emptyMessage\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate\:{\title\:\$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate\,\text\:\title\},\$:/config/flibbles/relink/macros/list-tagged-draggable/tag\:{\title\:\$:/config/flibbles/relink/macros/list-tagged-draggable/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/list-thumbnails/filter\:{\title\:\$:/config/flibbles/relink/macros/list-thumbnails/filter\,\text\:\filter\},\$:/config/flibbles/relink/macros/tabs/actions\:{\title\:\$:/config/flibbles/relink/macros/tabs/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/tabs/buttonTemplate\:{\title\:\$:/config/flibbles/relink/macros/tabs/buttonTemplate\,\text\:\title\},\$:/config/flibbles/relink/macros/tabs/default\:{\title\:\$:/config/flibbles/relink/macros/tabs/default\,\text\:\title\},\$:/config/flibbles/relink/macros/tabs/tabsList\:{\title\:\$:/config/flibbles/relink/macros/tabs/tabsList\,\text\:\filter\},\$:/config/flibbles/relink/macros/tabs/template\:{\title\:\$:/config/flibbles/relink/macros/tabs/template\,\text\:\title\},\$:/config/flibbles/relink/macros/tag/tag\:{\title\:\$:/config/flibbles/relink/macros/tag/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/tag-picker/actions\:{\title\:\$:/config/flibbles/relink/macros/tag-picker/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/tag-pill/actions\:{\title\:\$:/config/flibbles/relink/macros/tag-pill/actions\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/tag-pill/tag\:{\title\:\$:/config/flibbles/relink/macros/tag-pill/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc/itemClassFilter\:{\title\:\$:/config/flibbles/relink/macros/toc/itemClassFilter\,\text\:\filter\},\$:/config/flibbles/relink/macros/toc/tag\:{\title\:\$:/config/flibbles/relink/macros/toc/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-expandable/exclude\:{\title\:\$:/config/flibbles/relink/macros/toc-expandable/exclude\,\text\:\list\},\$:/config/flibbles/relink/macros/toc-expandable/itemClassFilter\:{\title\:\$:/config/flibbles/relink/macros/toc-expandable/itemClassFilter\,\text\:\filter\},\$:/config/flibbles/relink/macros/toc-expandable/tag\:{\title\:\$:/config/flibbles/relink/macros/toc-expandable/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-selective-expandable/exclude\:{\title\:\$:/config/flibbles/relink/macros/toc-selective-expandable/exclude\,\text\:\list\},\$:/config/flibbles/relink/macros/toc-selective-expandable/itemClassFilter\:{\title\:\$:/config/flibbles/relink/macros/toc-selective-expandable/itemClassFilter\,\text\:\filter\},\$:/config/flibbles/relink/macros/toc-selective-expandable/tag\:{\title\:\$:/config/flibbles/relink/macros/toc-selective-expandable/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/missingText\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/missingText\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/selectedTiddler\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/selectedTiddler\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/tag\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/template\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/template\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/unselectedText\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-external-nav/unselectedText\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/missingText\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/missingText\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/selectedTiddler\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/selectedTiddler\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/tag\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/tag\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/template\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/template\,\text\:\title\},\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/unselectedText\:{\title\:\$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/unselectedText\,\text\:\wikitext\},\$:/config/flibbles/relink/macros/translink/title\:{\title\:\$:/config/flibbles/relink/macros/translink/title\,\text\:\title\},\$:/config/flibbles/relink/messages/tm-new-tiddler\:{\title\:\$:/config/flibbles/relink/messages/tm-new-tiddler\,\text\:\(.*)\},\$:/config/flibbles/relink/operators/field:title\:{\title\:\$:/config/flibbles/relink/operators/field:title\,\text\:\title\},\$:/config/flibbles/relink/operators/filter\:{\title\:\$:/config/flibbles/relink/operators/filter\,\text\:\filter\},\$:/config/flibbles/relink/operators/list\:{\title\:\$:/config/flibbles/relink/operators/list\,\text\:\reference\},\$:/config/flibbles/relink/operators/relink:report\:{\title\:\$:/config/flibbles/relink/operators/relink:report\,\text\:\title\},\$:/config/flibbles/relink/operators/subfilter\:{\title\:\$:/config/flibbles/relink/operators/subfilter\,\text\:\filter\},\$:/config/flibbles/relink/operators/tag\:{\title\:\$:/config/flibbles/relink/operators/tag\,\text\:\title\},\$:/config/flibbles/relink/operators/title\:{\title\:\$:/config/flibbles/relink/operators/title\,\text\:\title\},\$:/config/flibbles/relink/settings/default-type\:{\title\:\$:/config/flibbles/relink/settings/default-type\,\text\:\title\},\$:/config/flibbles/relink/touch-modify\:{\title\:\$:/config/flibbles/relink/touch-modify\,\text\:\yes\},\$:/core/ui/EditTemplate/title\:{\title\:\$:/core/ui/EditTemplate/title\,\tags\:\$:/tags/EditTemplate\,\text\:\\\\\whitespace trim\\n\u003C$edit-text field\\\draft.title\\\ class\\\tc-titlebar tc-edit-texteditor\\\ focus{{{ {$:/config/AutoFocus}matchtitlethentrue ~false }}} tabindex{{$:/config/EditTabIndex}} cancelPopups\\\yes\\\ dir{{$:/config/DefaultTextDirection}}/>\\n\\n\u003C$vars pattern\\\\\\\\\\\\\|\\\\\\\\{}\\\\\\\\\ bad-chars\\\\\\\\\`| { }`\\\\\\\\\>\\n\\n\u003C$list filter\\\allcurrentregexp:draft.title\u003Cpattern>\\\ variable\\\listItem\\\>\\n\\n\u003Cdiv class\\\tc-message-box\\\ dir{{$:/config/DefaultTextDirection}}>\\n\\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C/$vars>\\n\\n\u003C$reveal state\\\!!draft.title\\\ type\\\nomatch\\\ text{{!!draft.of}} tag\\\div\\\ dir{{$:/config/DefaultTextDirection}}>\\n\\n\u003C$list filter\\\{!!draft.title}!ismissing\\\ variable\\\listItem\\\>\\n\\n\u003Cdiv class\\\tc-message-box\\\>\\n\\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}: \u003C$link to{{!!draft.title}} />\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C$list filter\\\{!!draft.of}!ismissing\\\ variable\\\listItem\\\>\\n\\n\u003C$vars fromTitle{{!!draft.of}} toTitle{{!!draft.title}}>\\n\\n\u003C$checkbox tiddler\\\$:/config/RelinkOnRename\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\no\\\> {{$:/language/EditTemplate/Title/Relink/Prompt}}\u003C/$checkbox>\\n\\n\u003C$tiddler tiddler\u003C\u003CfromTitle>> >\\n\\n\u003C$list filter\\\relink:wouldchange\u003CtoTitle>limit1\\\ variable\\\listItem\\\>\\n\\n\u003C$vars stateTiddler\u003C\u003Cqualify \\\$:/state/edit/references\\\>> >\\n\\n\u003C$set\\n\\tname\\\prompt\\\\\n\\tfilter\\\relink:wouldchange\u003CtoTitle>relink:impossible\u003CtoTitle>\\\\\n\\tvalue\\\EditTemplate/Title/Impossibles/Prompt\\\\\n\\temptyValue\\\EditTemplate/Title/References/Prompt\\\ >\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$button set\u003C\u003CstateTiddler>> setTo\\\show\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/right-arrow}}\\n \\n\u003C$macrocall $namelingo title\u003C\u003Cprompt>> />\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$button set\u003C\u003CstateTiddler>> setTo\\\hide\\\ class\\\tc-btn-invisible\\\>\\n{{$:/core/images/down-arrow}}\\n \\n\u003C$macrocall $namelingo title\u003C\u003Cprompt>> />\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$set>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003CstateTiddler>> text\\\show\\\>\\n\u003C$list variable\\\listItem\\\ filter\\\relink:wouldchange\u003CtoTitle>!title$:/StoryListsorttitle\\\ template\\\$:/plugins/flibbles/relink/ui/ListItemTemplate\\\>\\n\u003C/$list>\\n\u003C/$reveal>\\n\\n\u003C/$vars>\\n\\n\u003C/$list>\\n\\n\u003C/$tiddler>\\n\\n\u003C/$vars>\\n\\n\u003C/$list>\\n\\n\u003C/$reveal>\\n\},\$:/language/Docs/PaletteColours/relink-impossible\:{\title\:\$:/language/Docs/PaletteColours/relink-impossible\,\text\:\Relink link impossible\},\$:/language/EditTemplate/Title/Impossibles/Prompt\:{\title\:\$:/language/EditTemplate/Title/Impossibles/Prompt\,\text\:\Warning: Not all references in the following tiddlers can be updated by //Relink// due to the complexity of the new title:\},\$:/language/EditTemplate/Title/References/Prompt\:{\title\:\$:/language/EditTemplate/Title/References/Prompt\,\text\:\The following tiddlers will be updated if relinking:\},\$:/language/EditTemplate/Title/Relink/Prompt\:{\title\:\$:/language/EditTemplate/Title/Relink/Prompt\,\text\:\Use //Relink// to update \u003C$text text\u003C\u003CfromTitle>>/> to \u003C$text text\u003C\u003CtoTitle>>/> across all other tiddlers\},\$:/plugins/flibbles/relink/Filters/Missing\:{\title\:\$:/plugins/flibbles/relink/Filters/Missing\,\description\:\{{$:/plugins/flibbles/relink/language/Filters/Missing}}\,\filter\:\all!issystemrelink:references:hard!istiddler!isshadow!prefix$:/tags/sorttitle -\,\tags\:\$:/tags/Filter\},\$:/plugins/flibbles/relink/Filters/Orphans\:{\title\:\$:/plugins/flibbles/relink/Filters/Orphans\,\description\:\{{$:/plugins/flibbles/relink/language/Filters/Orphans}}\,\filter\:\relink:orphans!issystemsorttitle\,\tags\:\$:/tags/Filter\},\$:/plugins/flibbles/relink/configuration\:{\title\:\$:/plugins/flibbles/relink/configuration\,\caption\:\Relink\,\tags\:\$:/tags/ControlPanel/SettingsTab\,\text\:\\\\\whitespace trim\\n\u003Cdiv class\\\tc-control-panel\\\>\\n\u003C\u003Ctabs \\\allshadows+tiddlerstag$:/tags/flibbles/relink/Configuration!hasdraft.of\\\ \\\$:/plugins/flibbles/relink/ui/configuration/Fields\\\>>\\n\u003C/div>\\n\},\$:/plugins/flibbles/relink/js/bulkops.js\:{\title\:\$:/plugins/flibbles/relink/js/bulkops.js\,\text\:\/*\\\\\\nmodule-type: startup\\n\\nReplaces the relinkTiddler defined in $:/core/modules/wiki-bulkops.js\\n\\nThis is a startup instead of a wikimethods module-type because its the only\\nway to ensure this runs after the old relinkTiddler method is applied.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar language require($:/plugins/flibbles/relink/js/language.js);\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils.js\\\);\\n\\nexports.name \\\redefine-relinkTiddler\\\;\\nexports.synchronous true;\\n// load-modules is when wikimethods are applied in\\n// ``$:/core/modules/startup/load-modules.js``\\nexports.after load-modules;\\n// We come before commands because they may do renaming, or jasmine testing\\nexports.before commands;\\n\\nexports.startup function() {\\n\\t$tw.Wiki.prototype.relinkTiddler relinkTiddler;\\n};\\n\\n/** Walks through all relinkable tiddlers and relinks them.\\n * This replaces the existing function in core Tiddlywiki.\\n */\\nfunction relinkTiddler(fromTitle, toTitle, options) {\\n\\toptions options || {};\\n\\tvar failures ;\\n\\tvar indexer utils.getIndexer(this);\\n\\tvar records indexer.relinkLookup(fromTitle, toTitle, options);\\n\\tvar changedTitles Object.create(null);\\n\\tfor (var title in records) {\\n\\t\\tvar entries recordstitle,\\n\\t\\t\\tchanges Object.create(null),\\n\\t\\t\\tupdate false,\\n\\t\\t\\tfails false;\\n\\t\\tfor (var field in entries) {\\n\\t\\t\\tvar entry entriesfield;\\n\\t\\t\\tfails fails || entry.impossible;\\n\\t\\t\\tif (entry.output ! undefined) {\\n\\t\\t\\t\\tchangesfield entry.output;\\n\\t\\t\\t\\tupdate true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (fails) {\\n\\t\\t\\tfailures.push(title);\\n\\t\\t}\\n\\t\\t// If any fields changed, update tiddler\\n\\t\\tif (update) {\\n\\t\\t\\tconsole.log(\\\Renaming \\\+fromTitle+\\\ to \\\+toTitle+\\\ in \\\ + title + \\\\\\);\\n\\n\\t\\t\\tvar tiddler this.getTiddler(title);\\n\\t\\t\\tvar modifyField utils.touchModifyField(this) ? this.getModificationFields() : undefined;\\n\\t\\t\\tvar newTiddler new $tw.Tiddler(tiddler,changes,modifyField)\\n\\t\\t\\tnewTiddler $tw.hooks.invokeHook(\\\th-relinking-tiddler\\\,newTiddler,tiddler);\\n\\t\\t\\tthis.addTiddler(newTiddler);\\n\\t\\t\\t// If the title changed, we need to perform a nested rename\\n\\t\\t\\tif (newTiddler.fields.title ! title) {\\n\\t\\t\\t\\tchangedTitlestitle newTiddler.fields.title;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n\\t// Now that the rename is complete, we must now rename any tiddlers that\\n\\t// changed their titles, and thus repeat the process.\\n\\tfor (var title in changedTitles) {\\n\\t\\tthis.deleteTiddler(title);\\n\\t\\tthis.relinkTiddler(title, changedTitlestitle, options);\\n\\t}\\n\\tif (failures.length > 0) {\\n\\t\\tvar options $tw.utils.extend(\\n\\t\\t\\t{ variables: {to: toTitle, from: fromTitle},\\n\\t\\t\\t wiki: this},\\n\\t\\t\\toptions );\\n\\t\\tlanguage.reportFailures(failures, options);\\n\\t}\\n};\\n\\n})();\\n\,\module-type\:\startup\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/context.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/context.js\,\text\:\/*\\\\\\n\\nBase class for relink contexts.\\n\\n\\\\*/\\n\\nfunction Context() {\\n};\\n\\nexports.context Context;\\n\\n// This class does no special handling of fields, operators, or attributes.\\n// we pass it along to the parent.\\nContext.prototype.getFields function() {\\n\\treturn this.parent.getFields();\\n};\\n\\nContext.prototype.getOperator function(name, index) {\\n\\treturn this.parent.getOperator(name, index);\\n};\\n\\nContext.prototype.getOperators function() {\\n\\treturn this.parent.getOperators();\\n};\\n\\nContext.prototype.getAttribute function(elementName) {\\n\\treturn this.parent.getAttribute(elementName);\\n};\\n\\nContext.prototype.getAttributes function() {\\n\\treturn this.parent.getAttributes();\\n};\\n\\nContext.prototype.getConfig function(category) {\\n\\treturn this.parent.getConfig(category);\\n};\\n\\nContext.prototype.getMacro function(macroName) {\\n\\treturn this.parent.getMacro(macroName);\\n};\\n\\nContext.prototype.getMacros function() {\\n\\treturn this.parent.getMacros();\\n};\\n\\n/* Exceptions are tiddlers that have text/vnd.tiddlywiki type, but should\\n * not be treated as such.\\n */\\nContext.prototype.getException function(tiddlerTitle) {\\n\\treturn this.parent.getException(tiddlerTitle);\\n};\\n\\nContext.prototype.allowPrettylinks function() {\\n\\treturn this.parent.allowPrettylinks();\\n};\\n\\nContext.prototype.allowWidgets function() {\\n\\treturn this.parent.allowWidgets();\\n};\\n\\nContext.prototype.hasImports function(value) {\\n\\treturn this.parent.hasImports(value);\\n};\\n\\nContext.prototype.getFocus function() {\\n\\tif (this.parent) {\\n\\t\\treturn this.parent.getFocus();\\n\\t}\\n};\\n\\nContext.prototype.getPlaceholderList function() {\\n\\tif (this.parent) {\\n\\t\\treturn this.parent.getPlaceholderList();\\n\\t}\\n\\treturn null;\\n};\\n\\nContext.prototype.addParameter function(parameter) {\\n\\tif(this.parent) {\\n\\t\\treturn this.parent.addParameter(parameter);\\n\\t}\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/import.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/import.js\,\text\:\/*\\\\\\n\\nThis handles the fetching and distribution of relink settings.\\n\\n\\\\*/\\n\\nvar WidgetContext require(./widget).widget;\\n\\nfunction ImportContext(wiki, parent, filter) {\\n\\tthis.parent parent;\\n\\tthis.wiki wiki;\\n\\tvar importWidget createImportWidget(filter, this.wiki, this.parent.widget);\\n\\tthis._compileList(importWidget.tiddlerList, importWidget.variables);\\n\\t// this.widget is where we ask for macro definitions.\\n\\t// This only works if only one filter is imported\\n\\tthis.widget this.getBottom(importWidget);\\n\\t// We keep this one because its where we need to test for changes from.\\n\\tthis.importWidget importWidget\\n\\t// Trickle this up, so that any containing tiddlercontext knows that this\\n\\t// tiddler does some importing, and must be checked regularly.\\n\\tparent.hasImports(true);\\n};\\n\\nexports.import ImportContext;\\n\\nImportContext.prototype new WidgetContext();\\n\\nImportContext.prototype.changed function(changes) {\\n\\treturn this.importWidget && this.importWidget.refresh(changes)\\n};\\n\\nfunction createImportWidget(filter, wiki, parent) {\\n\\tvar widget wiki.makeWidget( { tree: {\\n\\t\\ttype: \\\importvariables\\\,\\n\\t\\tattributes: {\\n\\t\\t\\t\\\filter\\\: {\\n\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\tvalue: filter\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} }, { parentWidget: parent} );\\n\\tif (parent) {\\n\\t\\tparent.children.push(widget);\\n\\t}\\n\\twidget.execute();\\n\\twidget.renderChildren();\\n\\tvar importWidget widget.children0;\\n\\treturn importWidget;\\n};\\n\\nImportContext.prototype._compileList function(titleList, variables) {\\n\\tfor (var i 0; i \u003C titleList.length; i++) {\\n\\t\\tvar parser this.wiki.parseTiddler(titleListi);\\n\\t\\tif (parser) {\\n\\t\\t\\tvar parseTreeNode parser.tree0;\\n\\t\\t\\twhile (parseTreeNode && parseTreeNode.type \\\set\\\) {\\n\\t\\t\\t\\tvar variable variablesparseTreeNode.attributes.name.value;\\n\\t\\t\\t\\tif(variable) {\\n\\t\\t\\t\\t\\tvariable.tiddler titleListi;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (parseTreeNode.relink) {\\n\\t\\t\\t\\t\\tfor (var macroName in parseTreeNode.relink) {\\n\\t\\t\\t\\t\\t\\tvar parameters parseTreeNode.relinkmacroName;\\n\\t\\t\\t\\t\\t\\tfor (var paramName in parameters) {\\n\\t\\t\\t\\t\\t\\t\\tthis.addSetting(this.wiki, macroName, paramName, parametersparamName, titleListi);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tparseTreeNode parseTreeNode.children && parseTreeNode.children0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/tiddler.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/tiddler.js\,\text\:\/*\\\\\\n\\nContext for a tiddler. Defines nothing but makes an entry point to test if\\na tiddler must be refreshed.\\n\\n\\\\*/\\n\\nvar WidgetContext require(./widget.js).widget;\\n\\nfunction TiddlerContext(wiki, parentContext, title) {\\n\\tthis.title title;\\n\\tthis.parent parentContext;\\n\\tvar globalWidget parentContext && parentContext.widget;\\n\\tvar parentWidget wiki.makeWidget(null, {parentWidget: globalWidget});\\n\\tparentWidget.setVariable(currentTiddler, title);\\n\\tthis.widget wiki.makeWidget(null, {parentWidget: parentWidget});\\n};\\n\\nexports.tiddler TiddlerContext;\\n\\nTiddlerContext.prototype new WidgetContext();\\n\\nTiddlerContext.prototype.getFocus function() {\\n\\t// Tiddler Contexts are the last possible focus when not embedded in contexts.\\n\\treturn this;\\n};\\n\\nTiddlerContext.prototype.changed function(changes) {\\n\\treturn this.widget && this.widget.refresh(changes);\\n};\\n\\n// By default, a tiddler context does not use imports, unless an import\\n// statement is later discovered somewhere in the fields.\\nTiddlerContext.prototype.hasImports function(value) {\\n\\treturn this._hasImports || (this._hasImports value);\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/variable.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/variable.js\,\text\:\/*\\\\\\n\\nThis handles the context for variables. Either from $set, $vars, or \\\\define\\n\\n\\\\*/\\n\\nvar WidgetContext require(./widget).widget;\\n\\nfunction VariableContext(parent, setParseTreeNode) {\\n\\tvar name setParseTreeNode.attributes.name.value;\\n\\tthis.parent parent;\\n\\t// Now create a new widget and attach it.\\n\\tvar attachPoint parent.widget;\\n\\tthis.setWidget attachPoint.makeChildWidget(setParseTreeNode);\\n\\tattachPoint.children.push(this.setWidget);\\n\\tthis.setWidget.computeAttributes();\\n\\tthis.setWidget.execute();\\n\\t// We get the title of our current parameter focus\\n\\t// (i.e. what \\\\param would affect)\\n\\t// If its another definition, then title will be null.\\n\\tthis.setWidget.variablesname.tiddler parent.getFocus().title;\\n\\t// point our widget to bottom, where any other contexts would attach to\\n\\tthis.widget this.getBottom(this.setWidget);\\n\\tthis.parameterFocus true;\\n\\tif (setParseTreeNode.isMacroDefinition) {\\n\\t\\tthis.placeholderList Object.create(parent.getPlaceholderList());\\n\\t\\tfor (var i 0; i \u003C setParseTreeNode.params.length; i++) {\\n\\t\\t\\tthis.placeholderListsetParseTreeNode.paramsi.name true;\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.variable VariableContext;\\n\\nVariableContext.prototype new WidgetContext();\\n\\nVariableContext.prototype.getFocus function() {\\n\\tif(this.parameterFocus) {\\n\\t\\treturn this;\\n\\t} else {\\n\\t\\treturn this.parent.getFocus();\\n\\t}\\n};\\n\\nVariableContext.prototype.getPlaceholderList function() {\\n\\tif (this.placeholderList ! undefined) {\\n\\t\\treturn this.placeholderList;\\n\\t} else {\\n\\t\\treturn this.parent.getPlaceholderList();\\n\\t}\\n};\\n\\nVariableContext.prototype.addParameter function(parameter) {\\n\\tif(this.parameterFocus) {\\n\\t\\tvar name this.setWidget.setName;\\n\\t\\tvar data this.setWidget.variablesname;\\n\\t\\tdata.params.push({name: parameter});\\n\\t} else if (this.parent) {\\n\\t\\tthis.parent.addParameter(parameter);\\n\\t}\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/whitelist.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/whitelist.js\,\text\:\/*\\\\\\n\\nThis top-level context manages settings inside the whitelist. It never has\\na parent.\\n\\n\\\\*/\\n\\nvar utils require(../utils);\\nvar Context require(./context).context;\\n\\nvar prefix \\\$:/config/flibbles/relink/\\\;\\n\\n/**Factories define methods that create settings given config tiddlers.\\n * for factory method example, it will be called once for each:\\n * \\\$:/config/flibbles/relink/example/...\\\ tiddler that exists.\\n * the argument \\\key\\\ will be set to the contents of \\\...\\\\\n *\\n * The reason I build relink settings in this convoluted way is to minimize\\n * the number of times tiddlywiki has to run through EVERY tiddler looking\\n * for relink config tiddlers.\\n */\\nvar settingsGenerators utils.getModulesByTypeAsHashmap(relinksetting, name);\\n\\nfunction WhitelistContext(wiki) {\\n\\tbuild(this, wiki);\\n};\\n\\nexports.whitelist WhitelistContext;\\n\\nWhitelistContext.prototype new Context();\\n\\n/**Hot directories are directories for which if anything changes inside them,\\n * then Relink must completely rebuild its index.\\n * By default, this includes the whitelist settings, but relink-titles also\\n * includes its rules disabling directory.\\n * This is the FIRST solution I came up with to this problem. If youre\\n * looking at this, please make a github issue so I have a chance to understand\\n * your needs. This is currently a HACK solution.\\n */\\nWhitelistContext.hotDirectories prefix;\\n\\nWhitelistContext.prototype.getAttribute function(elementName) {\\n\\treturn this.attributeselementName;\\n};\\n\\nWhitelistContext.prototype.getAttributes function() {\\n\\treturn flatten(this.attributes);\\n};\\n\\nWhitelistContext.prototype.getFields function() {\\n\\treturn this.fields;\\n};\\n\\nWhitelistContext.prototype.getConfig function(category) {\\n\\treturn thiscategory;\\n};\\n\\nWhitelistContext.prototype.getOperator function(operatorName, operandIndex) {\\n\\tvar op this.operatorsoperatorName;\\n\\treturn op && opoperandIndex || 1;\\n};\\n\\nWhitelistContext.prototype.getOperators function() {\\n\\tvar signatures Object.create(null);\\n\\tfor (var op in this.operators) {\\n\\t\\tvar operandSet this.operatorsop;\\n\\t\\tfor (var index in operandSet) {\\n\\t\\t\\tvar entry operandSetindex;\\n\\t\\t\\tsignaturesentry.key entry;\\n\\t\\t}\\n\\t}\\n\\treturn signatures;\\n};\\n\\nWhitelistContext.prototype.getMacro function(macroName) {\\n\\treturn this.macrosmacroName;\\n};\\n\\nWhitelistContext.prototype.getMacros function() {\\n\\treturn flatten(this.macros);\\n};\\n\\nWhitelistContext.prototype.getException function(tiddlerTitle) {\\n\\treturn this.exceptionstiddlerTitle;\\n};\\n\\nWhitelistContext.prototype.changed function(changedTiddlers) {\\n\\tfor (var i 0; i \u003C WhitelistContext.hotDirectories.length; i++) {\\n\\t\\tvar dir WhitelistContext.hotDirectoriesi;\\n\\t\\tfor (var title in changedTiddlers) {\\n\\t\\t\\tif (utils.startsWith(title, dir)) {\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\nWhitelistContext.prototype.hasImports function(value) {\\n\\t// We dont care if imports are used. This is the global level.\\n\\treturn false;\\n};\\n\\nfunction build(settings, wiki) {\\n\\tfor (var name in settingsGenerators) {\\n\\t\\tsettingsname Object.create(null);\\n\\t}\\n\\twiki.eachShadowPlusTiddlers(function(tiddler, title) {\\n\\t\\tif (utils.startsWith(title, prefix)) {\\n\\t\\t\\tvar remainder title.substr(prefix.length);\\n\\t\\t\\tvar category root(remainder);\\n\\t\\t\\tvar factory settingsGeneratorscategory;\\n\\t\\t\\tif (factory) {\\n\\t\\t\\t\\tvar name remainder.substr(category.length+1);\\n\\t\\t\\t\\tfactory.generate(settingscategory, tiddler, name, wiki);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\\n/* Returns first bit of a path. path/to/tiddler -> path\\n */\\nfunction root(string) {\\n\\tvar index string.indexOf(/);\\n\\tif (index > 0) {\\n\\t\\treturn string.substr(0, index);\\n\\t}\\n};\\n\\n/* Turns {dir: {file1: value1, file2: value2}}\\n * into {dir/file1: value1, dir/file2: value2}\\n */\\nfunction flatten(set) {\\n\\tvar signatures Object.create(null);\\n\\tfor (var outerName in set) {\\n\\t\\tvar setItem setouterName;\\n\\t\\tfor (var innerName in setItem) {\\n\\t\\t\\tsignaturesouterName + \\\/\\\ + innerName setIteminnerName;\\n\\t\\t}\\n\\t}\\n\\treturn signatures;\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/widget.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/widget.js\,\text\:\/*\\\\\\n\\nThis is a virtual subclass of context for contexts that exist within widgets\\nof a specific tiddler.\\n\\nAll widget contexts must have a widget member.\\n\\n\\\\*/\\n\\nvar Context require(./context.js).context;\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nfunction WidgetContext() {};\\n\\nexports.widget WidgetContext;\\n\\nWidgetContext.prototype new Context();\\n\\nWidgetContext.prototype.getMacroDefinition function(variableName) {\\n\\t// widget.variables is prototyped, so it looks up into all its parents too\\n\\tvar def this.widget.variablesvariableName;\\n\\tif (!def) {\\n\\t\\t// It might be a javascript macro\\n\\t\\tdef $tw.macrosvariableName;\\n\\t\\tif (def && !def.tiddler) {\\n\\t\\t\\t// We havent assigned associated tiddlers to these macros yet.\\n\\t\\t\\t// That may be important for some installed supplemental plugins.\\n\\t\\t\\t$tw.modules.forEachModuleOfType(macro, function(title, module) {\\n\\t\\t\\t\\tif (module.name) {\\n\\t\\t\\t\\t\\t// For now, we just attach it directly to the definition\\n\\t\\t\\t\\t\\t// Its easier, albeit a little sloppy.\\n\\t\\t\\t\\t\\t$tw.macrosmodule.name.tiddler title;\\n\\t\\t\\t\\t}\\n\\t\\t\\t});\\n\\t\\t}\\n\\t}\\n\\treturn def;\\n};\\n\\nWidgetContext.prototype.addSetting function(wiki, macroName, parameter, type, sourceTitle) {\\n\\tthis.macros this.macros || Object.create(null);\\n\\tvar macro this.macrosmacroName;\\n\\ttype type || utils.getDefaultType(wiki);\\n\\tif (macro undefined) {\\n\\t\\tmacro this.macrosmacroName Object.create(null);\\n\\t}\\n\\tvar handler utils.getType(type);\\n\\tif (handler) {\\n\\t\\thandler.source sourceTitle;\\n\\t\\tmacroparameter handler;\\n\\t}\\n};\\n\\nWidgetContext.prototype.getMacros function() {\\n\\tvar signatures this.parent.getMacros();\\n\\tif (this.macros) {\\n\\t\\tfor (var macroName in this.macros) {\\n\\t\\t\\tvar macro this.macrosmacroName;\\n\\t\\t\\tfor (var param in macro) {\\n\\t\\t\\t\\tsignaturesmacroName + \\\/\\\ + param macroparam;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn signatures;\\n};\\n\\n/**This does strange handling because its possible for a macro to have\\n * its individual parameters whitelisted in separate places.\\n * Dont know WHY someone would do this, but it can happen.\\n */\\nWidgetContext.prototype.getMacro function(macroName) {\\n\\tvar theseSettings this.macros && this.macrosmacroName;\\n\\tvar parentSettings;\\n\\tif (this.parent) {\\n\\t\\tparentSettings this.parent.getMacro(macroName);\\n\\t}\\n\\tif (theseSettings && parentSettings) {\\n\\t\\t// gotta merge them without changing either. This is expensive,\\n\\t\\t// but itll happen rarely.\\n\\t\\tvar rtnSettings $tw.utils.extend(Object.create(null), theseSettings, parentSettings);\\n\\t\\treturn rtnSettings;\\n\\t}\\n\\treturn theseSettings || parentSettings;\\n};\\n\\nWidgetContext.prototype.getAttribute function(elementName) {\\n\\tif (elementName.charAt(0) $ && elementName.indexOf(.) > 0) {\\n\\t\\t// This is potentially a \\\\widget, look in macros for it.\\n\\t\\tvar macroSettings this.getMacro(elementName);\\n\\t\\tif (macroSettings) {\\n\\t\\t\\t// Make sure that its actually a widget definition\\n\\t\\t\\tvar def this.getMacroDefinition(elementName);\\n\\t\\t\\tif (def) {\\n\\t\\t\\t\\t// We found a definition, but if its not a widget, abort all.\\n\\t\\t\\t\\treturn (def.isWidgetDefinition)? macroSettings: undefined;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn this.parent.getAttribute(elementName);\\n};\\n\\nWidgetContext.prototype.getOperator function(name, index) {\\n\\tif (name.indexOf(.) > 0) {\\n\\t\\t// This is potentially a \\\\function, look in macros for it.\\n\\t\\tvar macroSettings this.getMacro(name);\\n\\t\\tif (macroSettings) {\\n\\t\\t\\t//Make sure that its actually a macro definition\\n\\t\\t\\tvar def this.getMacroDefinition(name);\\n\\t\\t\\tif (def) {\\n\\t\\t\\t\\tif (def.isFunctionDefinition) {\\n\\t\\t\\t\\t\\t// Minus one because operator indices are 1 indexed,\\n\\t\\t\\t\\t\\t// but parameters as we store them are not.\\n\\t\\t\\t\\t\\tvar param def.paramsindex - 1;\\n\\t\\t\\t\\t\\treturn param && macroSettingsparam.name;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// If its not a filter, abort all.\\n\\t\\t\\t\\treturn undefined;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn this.parent.getOperator(name, index);\\n};\\n\\n/**Returns the deepest descendant of the given widget.\\n */\\nWidgetContext.prototype.getBottom function(widget) {\\n\\twhile (widget.children.length > 0) {\\n\\t\\twidget widget.children0;\\n\\t}\\n\\treturn widget;\\n};\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/contexts/wikitext.js\:{\title\:\$:/plugins/flibbles/relink/js/contexts/wikitext.js\,\text\:\/*\\\\\\n\\nContext for wikitext. It can contain rules about whats allowed in this\\ncurrent layer of wikitext.\\n\\n\\\\*/\\n\\nvar WidgetContext require(./widget.js).widget;\\n\\nfunction WikitextContext(parentContext) {\\n\\tthis.parent parentContext;\\n\\tthis.widget parentContext.widget;\\n};\\n\\nexports.wikitext WikitextContext;\\n\\nWikitextContext.prototype new WidgetContext();\\n\\n// Unless this specific context has rules about it, widgets and prettyLInks are allowed.\\nWikitextContext.prototype.allowWidgets enabled;\\nWikitextContext.prototype.allowPrettylinks enabled;\\n\\nfunction enabled() { return true; };\\n\,\module-type\:\relinkcontext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/filter/function.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/filter/function.js\,\text\:\/*\\\\\\n\\nHandles reporting of function operators.\\n\\n\\\\*/\\n\\nexports.name \\\function\\\;\\n\\nexports.report function(filterParseTree, callback, options) {\\n\\tforEachOperand(filterParseTree, options, function(name, operand, handler, index) {\\n\\t\\thandler.report(operand.text, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, function + name + + ,.repeat(index) + + (blurb || ) + , style);\\n\\t\\t}, options);\\n\\t});\\n};\\n\\nexports.relink function(filterParseTree, fromTitle, toTitle, options) {\\n\\tvar output {};\\n\\tforEachOperand(filterParseTree, options, function(name, operand, handler, index) {\\n\\t\\tvar entry handler.relink(operand.text, fromTitle, toTitle, options);\\n\\t\\tif (entry) {\\n\\t\\t\\tif (entry.output) {\\n\\t\\t\\t\\toutput.changed true;\\n\\t\\t\\t\\toperand.text entry.output;\\n\\t\\t\\t}\\n\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\toutput.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn output;\\n};\\n\\n// Calls the callback for every applicable operand of a function operator\\nfunction forEachOperand(filterParseTree, options, callback) {\\n\\tfor (var i 0; i \u003C filterParseTree.length; i++) {\\n\\t\\tvar run filterParseTreei;\\n\\t\\tfor (var j 0; j \u003C run.operators.length; j++) {\\n\\t\\t\\tvar operator run.operatorsj;\\n\\t\\t\\tvar titleOp operator.operands0;\\n\\t\\t\\tif (operator.operator \\\function\\\\\n\\t\\t\\t&& !titleOp.variable && !titleOp.indirect\\n\\t\\t\\t&& titleOp.text) {\\n\\t\\t\\t\\tvar funcName titleOp.text;\\n\\t\\t\\t\\tvar managedMacro options.settings.getMacro(funcName);\\n\\t\\t\\t\\tif (managedMacro) {\\n\\t\\t\\t\\t\\tvar def options.settings.getMacroDefinition(funcName);\\n\\t\\t\\t\\t\\tif (def && def.isFunctionDefinition) {\\n\\t\\t\\t\\t\\t\\tfor (var index 1; index \u003C operator.operands.length; index++) {\\n\\t\\t\\t\\t\\t\\t\\tvar operand operator.operandsindex;\\n\\t\\t\\t\\t\\t\\t\\tif (!operand.variable && !operand.indirect\\n\\t\\t\\t\\t\\t\\t\\t&& def.params.length > index) {\\n\\t\\t\\t\\t\\t\\t\\t\\tvar paramName def.paramsindex-1.name;\\n\\t\\t\\t\\t\\t\\t\\t\\tvar handler managedMacroparamName;\\n\\t\\t\\t\\t\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tcallback(funcName, operand, handler, index);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\,\module-type\:\relinkfilter\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/filter/operators.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/filter/operators.js\,\text\:\/*\\\\\\n\\nHandles reporting of filter operators.\\n\\n\\\\*/\\n\\nvar refHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/reference\\\);\\nvar titleHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/title\\\);\\nvar macrocall require(\\\$:/plugins/flibbles/relink/js/utils/macrocall.js\\\);\\n\\nexports.name \\\operators\\\;\\n\\nexports.report function(filterParseTree, callback, options) {\\n\\tfor (var i 0; i \u003C filterParseTree.length; i++) {\\n\\t\\tvar run filterParseTreei;\\n\\t\\tfor (var j 0; j \u003C run.operators.length; j++) {\\n\\t\\t\\tvar operator run.operatorsj;\\n\\t\\t\\tfor (var index 1; index \u003C operator.operands.length; index++) {\\n\\t\\t\\t\\tvar operand operator.operandsindex-1;\\n\\t\\t\\t\\tvar display makeDisplay(operator);\\n\\t\\t\\t\\t// Now add any commas if this is a later operand\\n\\t\\t\\t\\tfor (var x 1; x \u003C index; x++) {\\n\\t\\t\\t\\t\\tdisplay + ,;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (operand.indirect) {\\n\\t\\t\\t\\t\\trefHandler.report(operand.text, function(title, blurb, style) {\\n\\t\\t\\t\\t\\t\\tcallback(title, (run.prefix || ) + + display + { + (blurb || ) + }, style);\\n\\t\\t\\t\\t\\t}, options);\\n\\t\\t\\t\\t} else if (operand.variable) {\\n\\t\\t\\t\\t\\tvar macro $tw.utils.parseMacroInvocation(\\\\u003C\u003C\\\+operand.text+\\\>>\\\, 0);\\n\\t\\t\\t\\t\\tif (macro) {\\n\\t\\t\\t\\t\\t\\tmacrocall.report(options.settings, macro, function(title, blurb, style) {\\n\\t\\t\\t\\t\\t\\t\\tcallback(title, (run.prefix || ) + + display + \u003C + blurb + >, style);\\n\\t\\t\\t\\t\\t\\t}, options);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t} else if (operand.text) {\\n\\t\\t\\t\\t\\tvar handler fieldType(options.settings, operator, index, options)\\n\\t\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\t\\thandler.report(operand.text, function(title, blurb, style) {\\n\\t\\t\\t\\t\\t\\t\\tif (!isTitleRun(operator) || blurb) {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(title, (run.prefix || ) + + display + + (blurb || ) + , style);\\n\\t\\t\\t\\t\\t\\t\\t} else if (j run.operators.length-1) {\\n\\t\\t\\t\\t\\t\\t\\t\\t// index will always be 1, meaning single operator run,\\n\\t\\t\\t\\t\\t\\t\\t\\t// unless the user is weird. title ignores\\n\\t\\t\\t\\t\\t\\t\\t\\t// input, so why would it ever not be 1?\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(title, run.prefix, style);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t// Special case: Its a title operator thats\\n\\t\\t\\t\\t\\t\\t\\t\\t// leading a run\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(title, (run.prefix || ) + + makeDisplay(run.operatorsj+1) + ..., style);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}, options);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.relink function(filterParseTree, fromTitle, toTitle, options) {\\n\\tvar output {};\\n\\tfor (var i 0; i \u003C filterParseTree.length; i++) {\\n\\t\\tvar run filterParseTreei;\\n\\t\\tfor (var j 0; j \u003C run.operators.length; j++) {\\n\\t\\t\\tvar operator run.operatorsj;\\n\\t\\t\\tfor (var index 1; index \u003C operator.operands.length; index++) {\\n\\t\\t\\t\\tvar operand operator.operandsindex-1,\\n\\t\\t\\t\\t\\tentry undefined;\\n\\t\\t\\t\\tif (operand.indirect) {\\n\\t\\t\\t\\t\\tentry refHandler.relinkInBraces(operand.text, fromTitle, toTitle, options);\\n\\t\\t\\t\\t} else if (operand.variable) {\\n\\t\\t\\t\\t\\tentry relinkMacro(options.settings, operand.text, fromTitle, toTitle, options);\\n\\t\\t\\t\\t} else if (operand.text) {\\n\\t\\t\\t\\t\\tvar handler fieldType(options.settings, operator, index, options)\\n\\t\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\t\\tentry handler.relink(operand.text, fromTitle, toTitle, options);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (entry) {\\n\\t\\t\\t\\t\\tif (entry.output) {\\n\\t\\t\\t\\t\\t\\toutput.changed true;\\n\\t\\t\\t\\t\\t\\toperand.text entry.output;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\t\\t\\toutput.impossible true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn output;\\n};\\n\\n// Returns the relinker needed for a given operator, or returns undefined.\\n// This method should really be broken into three modules called relinkfilteroperator\\nfunction fieldType(context, operator, index, options) {\\n\\tvar op operator.operator,\\n\\t\\tsuffix operator.suffix,\\n\\t\\trtn (suffix && context.getOperator(op + : + suffix, index))\\n\\t\\t || context.getOperator(op, index);\\n\\tif (!rtn && op contains && index 1) {\\n\\t\\t// The contains operator gets special handling\\n\\t\\tsuffix suffix || list;\\n\\t\\tvar handler context.getFields()suffix;\\n\\t\\tif (handler && (handler.name list || handler.name filter)) {\\n\\t\\t\\t// Contains uses the title handler, but only if its\\n\\t\\t\\t// searching a list or filter field.\\n\\t\\t\\treturn titleHandler;\\n\\t\\t}\\n\\n\\t}\\n\\tif (!rtn && index 1) {\\n\\t\\t// maybe its a field operator?\\n\\t\\trtn (op field && context.getFields()suffix)\\n\\t\\t || (!suffix && !options.wiki.getFilterOperators()op && context.getFields()op);\\n\\t}\\n\\treturn rtn;\\n};\\n\\nfunction makeDisplay(operator) {\\n\\treturn (operator.prefix || ) + (operator.operator title? : operator.operator) + (operator.suffix? : + operator.suffix: );\\n};\\n\\nfunction isTitleRun(operator) {\\n\\treturn operator.operator title\\n\\t\\t&& !operator.prefix\\n\\t\\t&& !operator.suffix;\\n};\\n\\n// Takes care of relinking a macro, as well as putting it back together.\\nfunction relinkMacro(context, text, fromTitle, toTitle, options) {\\n\\ttext \\\\u003C\u003C\\\ + text + \\\>>\\\;\\n\\tvar macro $tw.utils.parseMacroInvocation(text, 0);\\n\\tvar entry;\\n\\tif (macro) {\\n\\t\\tentry macrocall.relink(context, macro, text, fromTitle, toTitle, false, options);\\n\\t}\\n\\tif (entry && entry.output) {\\n\\t\\tvar string macrocall.reassemble(entry, text, options);\\n\\t\\tif (string ! undefined) {\\n\\t\\t\\t// We remove the surrounding brackets.\\n\\t\\t\\tstring string.substring(2, string.length-2);\\n\\t\\t\\t// And we make sure that no brackets remain\\n\\t\\t\\tif (string.indexOf(\\\>\\\) \u003C 0) {\\n\\t\\t\\t\\tentry.output string;\\n\\t\\t\\t\\treturn entry;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tdelete entry.output;\\n\\t\\tentry.impossible true;\\n\\t}\\n\\treturn entry;\\n};\\n\,\module-type\:\relinkfilter\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/filter.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/filter.js\,\text\:\/*\\\\\\n\\nThis specifies logic for updating filters to reflect title changes.\\n\\n\\\\*/\\n\\nvar refHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/reference\\\);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar filterRelinkers utils.getModulesByTypeAsHashmap(relinkfilter, name);\\n\\nexports.name \\\filter\\\;\\n\\nexports.report function(filter, callback, options) {\\n\\tif (filter) {\\n\\t\\ttry {\\n\\t\\t\\tvar parseTree options.wiki.parseFilter(filter);\\n\\t\\t} catch (e) {\\n\\t\\t\\t// It must have been malformed. Return without doing anything.\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tfor (var module in filterRelinkers) {\\n\\t\\t\\tfilterRelinkersmodule.report(parseTree, callback, options);\\n\\t\\t}\\n\\t}\\n};\\n\\n/**Returns undefined if no change was made.\\n */\\nexports.relink function(filter, fromTitle, toTitle, options) {\\n\\tvar changed false;\\n\\tvar results {};\\n\\tvar parseTree;\\n\\tif (filter) {\\n\\t\\ttry {\\n\\t\\t\\tparseTree options.wiki.parseFilter(filter);\\n\\t\\t} catch (e) {\\n\\t\\t\\t// It must have been malformed. Return without doing anything.\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tfor (var module in filterRelinkers) {\\n\\t\\t\\tvar entry filterRelinkersmodule.relink(parseTree, fromTitle, toTitle, options);\\n\\t\\t\\tif (entry) {\\n\\t\\t\\t\\tif (entry.changed) {\\n\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\t\\tresults.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif (changed) {\\n\\t\\tvar builder assembleFilterString(parseTree, filter, options);\\n\\t\\tresults.output builder.results();\\n\\t\\tresults.impossible results.impossible || builder.impossible;\\n\\t\\treturn results;\\n\\t}\\n\\tif (results.impossible) {\\n\\t\\treturn results;\\n\\t}\\n\\treturn undefined\\n};\\n\\nfunction assembleFilterString(parseTree, oldFilter, options) {\\n\\tvar relinker new Rebuilder(oldFilter),\\n\\t\\twordBarrierRequired false,\\n\\t\\tp 0;\\n\\tfor (var i 0; i \u003C parseTree.length; i++) {\\n\\t\\tvar start $tw.utils.skipWhiteSpace(oldFilter, p);\\n\\t\\tif (start ! p) {\\n\\t\\t\\t// Theres some breathing room between this run and the last.\\n\\t\\t\\t// Well never need to insert space.\\n\\t\\t\\twordBarrierRequired false;\\n\\t\\t\\tp start;\\n\\t\\t}\\n\\t\\tvar run parseTreei;\\n\\t\\tif (run.prefix) {\\n\\t\\t\\tif (wordBarrierRequired) {\\n\\t\\t\\t\\trelinker.add( , p, p);\\n\\t\\t\\t\\twordBarrierRequired false;\\n\\t\\t\\t}\\n\\t\\t\\tp + run.prefix.length;\\n\\t\\t}\\n\\t\\tif (oldFilterp ! \\n\\t\\t|| (oldFilterp+1 && run.operators.length 1)) {\\n\\t\\t\\t// Its a string title\\n\\t\\t\\tvar text run.operators0.operands0.text,\\n\\t\\t\\t\\tend,\\n\\t\\t\\t\\told;\\n\\t\\t\\tswitch (oldFilterp) {\\n\\t\\t\\tcase \\\\\\:\\n\\t\\t\\tcase \\\:\\n\\t\\t\\t\\t// p + 1 to skip the first quote\\n\\t\\t\\t\\t// indexOf() + 1 to skip the last\\n\\t\\t\\t\\tend oldFilter.indexOf(oldFilterp, p+1) + 1;\\n\\t\\t\\t\\told oldFilter.substring(p+1, end-1);\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase :\\n\\t\\t\\t\\tend oldFilter.indexOf(, p);\\n\\t\\t\\t\\told oldFilter.substring(p+2, end);\\n\\t\\t\\t\\t// +2 to get past the \\n\\t\\t\\t\\tend + 2;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tdefault:\\n\\t\\t\\t\\tend skipWord(oldFilter, p);\\n\\t\\t\\t\\told oldFilter.substring(p, end);\\n\\t\\t\\t}\\n\\t\\t\\tif (old ! text) {\\n\\t\\t\\t\\tvar wrapped wrapTitle(text, oldFilterp ! \\\\\\ ? oldFilterp : , options);\\n\\t\\t\\t\\tif (wrapped ! undefined) {\\n\\t\\t\\t\\t\\t// This is a no-quote title. If breathing room is required,\\n\\t\\t\\t\\t\\t// add it. Also, we may need breathing room after it.\\n\\t\\t\\t\\t\\tif (wordBarrierRequired && wrapped0 ! \\\\\\) {\\n\\t\\t\\t\\t\\t\\trelinker.add( , p, p);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\trelinker.add(wrapped, p, end);\\n\\t\\t\\t\\t\\twordBarrierRequired wrapped text;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\trelinker.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif (wordBarrierRequired && oldFilterp ! \\\\\\) {\\n\\t\\t\\t\\t\\trelinker.add( , p, p);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\twordBarrierRequired oldFilter.indexOf(text) p;\\n\\t\\t\\t}\\n\\t\\t\\tp end;\\n\\t\\t} else {\\n\\t\\t\\twordBarrierRequired false;\\n\\t\\t\\tp++;\\n\\t\\t\\tfor (var j 0; j \u003C run.operators.length; j++) {\\n\\t\\t\\t\\tvar operator run.operatorsj;\\n\\t\\t\\t\\tvar start p;\\n\\t\\t\\t\\tfor (var index 0; index \u003C operator.operands.length; index++) {\\n\\t\\t\\t\\t\\tvar operand operator.operandsindex,\\n\\t\\t\\t\\t\\t\\tskip false;\\n\\t\\t\\t\\t\\t\\tend,\\n\\t\\t\\t\\t\\t\\twrapped;\\n\\t\\t\\t\\t\\tif (operand.indirect) {\\n\\t\\t\\t\\t\\t\\tp oldFilter.indexOf({, p);\\n\\t\\t\\t\\t\\t\\tend oldFilter.indexOf(}, p+1);\\n\\t\\t\\t\\t\\t\\twrapped { + operand.text + };\\n\\t\\t\\t\\t\\t} else if (operand.variable) {\\n\\t\\t\\t\\t\\t\\tp oldFilter.indexOf(\u003C, p);\\n\\t\\t\\t\\t\\t\\tend oldFilter.indexOf(>, p+1);\\n\\t\\t\\t\\t\\t\\twrapped \u003C + operand.text + >;\\n\\t\\t\\t\\t\\t} else if (operator.regexp) {\\n\\t\\t\\t\\t\\t\\tp oldFilter.indexOf(/, p);\\n\\t\\t\\t\\t\\t\\tend oldFilter.indexOf(/, p+1);\\n\\t\\t\\t\\t\\t\\tskip true;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tp oldFilter.indexOf(, p);\\n\\t\\t\\t\\t\\t\\tend oldFilter.indexOf(, p+1);\\n\\t\\t\\t\\t\\t\\tif (!canBePrettyOperand(operand.text) || (options.inBraces && operand.text.indexOf(}}}) > 0)) {\\n\\t\\t\\t\\t\\t\\t\\tskip true;\\n\\t\\t\\t\\t\\t\\t\\trelinker.impossible true;\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\twrapped + operand.text + ;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tend++; // skip the closing brace\\n\\t\\t\\t\\t\\tif (index 0) {\\n\\t\\t\\t\\t\\t\\t// If this is the first operand, lets first recreate the operator signature in case it was changed at all.\\n\\t\\t\\t\\t\\t\\trelinker.add(operatorSignature(operator, oldFilter, start), start, p);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (!skip) {\\n\\t\\t\\t\\t\\t\\trelinker.add(wrapped, p, end);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tp end;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tp++; // Skip the closing brace;\\n\\t\\t}\\n\\t}\\n\\treturn relinker;\\n};\\n\\nfunction operatorSignature(operator, oldText, start) {\\n\\t// If its a title operand, try to determine if it was a shorthand.\\n\\tvar prefix operator.prefix || ;\\n\\tvar signature prefix + ((operator.operator title && oldTextstart + prefix.length ! t)? : operator.operator);\\n\\tif (operator.suffix) {\\n\\t\\tsignature + : + operator.suffix;\\n\\t}\\n\\treturn signature;\\n}\\n\\nfunction skipWord(source,pos) {\\n\\tvar c;\\n\\twhile(true) {\\n\\t\\tc source.charAt(pos);\\n\\t\\tif((c ! \\\\\\) && (c ! \\\ \\\) && (c ! \\\\\\\f\\\) && (c ! \\\\\\\n\\\)\\n\\t\\t&& (c ! \\\\\\\r\\\) && (c ! \\\\\\\t\\\)\\n\\t\\t&& (c ! \\\\\\\v\\\)&& (c ! \\\\\\\u00a0\\\) // Ignores obscure unicode spaces\\n\\t\\t&& (c ! \\\\\\) && (c ! \\\\\\)) { // Ignore brackets\\n\\t\\t\\tpos++;\\n\\t\\t} else {\\n\\t\\t\\treturn pos;\\n\\t\\t}\\n\\t}\\n};\\n\\n/* Same as this.relink, except this has the added constraint that the return\\n * value must be able to be wrapped in curly braces. (i.e. {{{...}}})\\n */\\nexports.relinkInBraces function(filter, fromTitle, toTitle, options) {\\n\\tvar braceOptions $tw.utils.extend({inBraces: true}, options);\\n\\tvar entry this.relink(filter, fromTitle, toTitle, braceOptions);\\n\\tif (entry && entry.output && !canBeInBraces(entry.output)) {\\n\\t\\t// It was possible, but it wont fit in braces, so we must give up\\n\\t\\tdelete entry.output;\\n\\t\\tentry.impossible true;\\n\\t}\\n\\treturn entry;\\n};\\n\\nfunction wrapTitle(value, preference, options) {\\n\\tvar choices {\\n\\t\\t\\\\\\: function(v) {return /^^\\\\s\\\\\\\\\\\\}\\\\+\\\\-\\\\~\\\\\\\\:^\\\\s\\\\\\\\*^\\\\s\\\\\\\\\\\\}$/.test(v); },\\n\\t\\t\\\\\\: canBePrettyOperand,\\n\\t\\t\\\\\\: function(v) {return v.indexOf(\\\\\\) \u003C 0; },\\n\\t\\t\\\: function(v) {return v.indexOf(\\\) \u003C 0; }\\n\\t};\\n\\tvar wrappers {\\n\\t\\t\\\\\\: function(v) {return v; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; },\\n\\t\\t\\\: function(v) {return \\\+v+\\\; }\\n\\t};\\n\\tif (options.inBraces && value.indexOf(}}}) > 0) {\\n\\t\\t// In this particular case, it cant be wrapped in this filter,\\n\\t\\t// even if it would have worked within the context of the filter itself\\n\\t\\treturn undefined;\\n\\t}\\n\\tif (!choicespreference) {\\n\\t\\tpreference ;\\n\\t}\\n\\tif (choicespreference(value)) {\\n\\t\\treturn wrapperspreference(value);\\n\\t}\\n\\tfor (var quote in choices) {\\n\\t\\tif (choicesquote(value)) {\\n\\t\\t\\treturn wrappersquote(value);\\n\\t\\t}\\n\\t}\\n\\t// No quotes will work on this\\n\\treturn undefined;\\n}\\n\\nfunction canBePrettyOperand(value) {\\n\\treturn value.indexOf() \u003C 0;\\n};\\n\\nfunction canBeInBraces(value) {\\n\\treturn value.indexOf(\\\}}}\\\) \u003C 0 && value.substr(value.length-2) ! }};\\n};\\n\,\module-type\:\relinkfieldtype\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/list.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/list.js\,\text\:\/*\\\\\\nThis manages replacing titles that occur within stringLists, like,\\n\\nTiddlerA Tiddler with spaces Another Title\\n\\\\*/\\n\\nvar titleRelinker require(./title.js);\\n\\nexports.name \\\list\\\;\\n\\nexports.report function(value, callback, options) {\\n\\tvar list $tw.utils.parseStringArray(value);\\n\\tfor (var i 0; i \u003C list.length; i++) {\\n\\t\\ttitleRelinker.report(listi, callback, options);\\n\\t}\\n};\\n\\n/**Returns undefined if no change was made.\\n * Parameter: value can literally be a list. This can happen for builtin\\n * types list and tag. In those cases, we also return list.\\n */\\nexports.relink function(value, fromTitle, toTitle, options) {\\n\\tvar isModified false,\\n\\t\\timpossible false,\\n\\t\\tactualList false,\\n\\t\\tentry,\\n\\t\\tlist;\\n\\tif (typeof value ! \\\string\\\) {\\n\\t\\t// Not a string. Must be a list.\\n\\t\\t// clone it, since we may make changes to this possibly\\n\\t\\t// frozen list.\\n\\t\\tlist (value || ).slice(0);\\n\\t\\tactualList true;\\n\\t} else {\\n\\t\\tlist $tw.utils.parseStringArray(value || \\\\\\);\\n\\t}\\n\\t$tw.utils.each(list,function (title,index) {\\n\\t\\tvar titleEntry titleRelinker.relink(title, fromTitle, toTitle, options);\\n\\t\\tif (titleEntry) {\\n\\t\\t\\tif (titleEntry.output) {\\n\\t\\t\\t\\tlistindex titleEntry.output;\\n\\t\\t\\t\\tisModified true;\\n\\t\\t\\t}\\n\\t\\t\\tif (titleEntry.impossible) {\\n\\t\\t\\t\\timpossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\tif (isModified || impossible) {\\n\\t\\tentry {name: \\\list\\\, impossible: impossible};\\n\\t\\t// It doesnt parse correctly alone, it wont\\n\\t\\t// parse correctly in any list.\\n\\t\\tif (!canBeListItem(toTitle)) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t} else if (actualList) {\\n\\t\\t\\tentry.output list;\\n\\t\\t} else if (isModified) {\\n\\t\\t\\tentry.output $tw.utils.stringifyList(list);\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nfunction canBeListItem(value) {\\n\\tvar regexp /\\\\\\\\^\\\\S\\\\xA0/m;\\n\\treturn !regexp.test(value);\\n};\\n\,\module-type\:\relinkfieldtype\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/reference/title.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/reference/title.js\,\text\:\/*\\\\\\n\\nThis handles the title inside of references.\\n\\n\\\\*/\\n\\nvar titleRelinker require(../title.js);\\n\\nexports.name title;\\n\\nexports.report function(reference, callback, options) {\\n\\tvar title reference.title;\\n\\ttitleRelinker.report(reference.title, function(title, blurb, style) {\\n\\t\\tif (reference.field) {\\n\\t\\t\\tcallback(title, !! + reference.field);\\n\\t\\t} else if (reference.index) {\\n\\t\\t\\tcallback(title, ## + reference.index);\\n\\t\\t} else {\\n\\t\\t\\tcallback(title);\\n\\t\\t}\\n\\t}, options);\\n};\\n\\nexports.relink function(reference, fromTitle, toTitle, options) {\\n\\tvar entry titleRelinker.relink($tw.utils.trim(reference.title), fromTitle, toTitle, options);\\n\\tif (entry && entry.output) {\\n\\t\\t// preserve users whitespace\\n\\t\\treference.title reference.title.replace(fromTitle, entry.output);\\n\\t\\tentry.output reference;\\n\\t}\\n\\treturn entry;\\n};\\n\,\module-type\:\relinkreference\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/reference.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/reference.js\,\text\:\/*\\\\\\nThis manages replacing titles that occur inside text references,\\n\\ntiddlerTitle\\ntiddlerTitle!!field\\n!!field\\ntiddlerTitle##propertyIndex\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar referenceOperators utils.getModulesByTypeAsHashmap(relinkreference, name);\\n\\nexports.name \\\reference\\\;\\n\\nexports.report function(value, callback, options) {\\n\\tif (value) {\\n\\t\\tvar reference $tw.utils.parseTextReference(value);\\n\\t\\tfor (var operator in referenceOperators) {\\n\\t\\t\\treferenceOperatorsoperator.report(reference, callback, options);\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.relink function(value, fromTitle, toTitle, options) {\\n\\tvar entry;\\n\\tif (value) {\\n\\t\\tvar impossible false;\\n\\t\\tvar modified false;\\n\\t\\tvar reference $tw.utils.parseTextReference(value);\\n\\t\\tfor (var operator in referenceOperators) {\\n\\t\\t\\tvar result referenceOperatorsoperator.relink(reference, fromTitle, toTitle, options);\\n\\t\\t\\tif (result) {\\n\\t\\t\\t\\tif (result.impossible) {\\n\\t\\t\\t\\t\\timpossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (result.output) {\\n\\t\\t\\t\\t\\tmodified true;\\n\\t\\t\\t\\t\\treference result.output;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (modified) {\\n\\t\\t\\tif (exports.canBePretty(reference.title)) {\\n\\t\\t\\t\\tentry {output: exports.toString(reference)};\\n\\t\\t\\t} else {\\n\\t\\t\\t\\timpossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (impossible) {\\n\\t\\t\\tentry entry || {};\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\n/* Same as this.relink, except this has the added constraint that the return\\n * value must be able to be wrapped in curly braces.\\n */\\nexports.relinkInBraces function(value, fromTitle, toTitle, options) {\\n\\tvar log this.relink(value, fromTitle, toTitle, options);\\n\\tif (log && log.output && log.output.indexOf(\\\}\\\) > 0) {\\n\\t\\tdelete log.output;\\n\\t\\tlog.impossible true;\\n\\t}\\n\\treturn log;\\n};\\n\\nexports.toString function(textReference) {\\n\\tvar title textReference.title || ;\\n\\tif (textReference.field) {\\n\\t\\treturn title + \\\!!\\\ + textReference.field;\\n\\t} else if (textReference.index) {\\n\\t\\treturn title + \\\##\\\ + textReference.index;\\n\\t}\\n\\treturn title;\\n};\\n\\nexports.canBePretty function(title) {\\n\\treturn !title || (title.indexOf(\\\!!\\\) \u003C 0 && title.indexOf(\\\##\\\) \u003C 0);\\n};\\n\,\module-type\:\relinkfieldtype\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/title.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/title.js\,\text\:\/*\\\\\\nThis specifies logic for replacing a single-tiddler field. This is the\\nsimplest kind of field type. One title swaps out for the other.\\n\\\\*/\\n\\n// NOTE TO MODDERS: If youre making your own field types, the name must be\\n// alpha characters only.\\nexports.name title;\\n\\nexports.report function(value, callback, options) {\\n\\tif (value && !containsPlaceholder(value, options)) {\\n\\t\\tcallback(value);\\n\\t}\\n};\\n\\n/**Returns undefined if no change was made.\\n */\\nexports.relink function(value, fromTitle, toTitle, options) {\\n\\tif (value ! fromTitle || containsPlaceholder(value, options)) {\\n\\t\\treturn undefined;\\n\\t} else if (containsPlaceholder(toTitle, options)) {\\n\\t\\treturn {impossible: true};\\n\\t} else {\\n\\t\\treturn {output: toTitle};\\n\\t}\\n};\\n\\nfunction containsPlaceholder(value, options) {\\n\\tvar dollar value.indexOf($);\\n\\t// Quick test. If no dollar signs. No placeholders.\\n\\tif (dollar > 0 && value.indexOf($, dollar+1)) {\\n\\t\\t// We potentially have a placeholder\\n\\t\\tvar placeholders options.settings.getPlaceholderList();\\n\\t\\tif (placeholders) {\\n\\t\\t\\tif (value.search(/\\\\$\\\\(^$\\\\)+\\\\)\\\\$/) > 0) {\\n\\t\\t\\t\\t// A global placeholder exists\\n\\t\\t\\t\\treturn true;\\n\\t\\t\\t}\\n\\t\\t\\tfor (var name in placeholders) {\\n\\t\\t\\t\\tif (value.indexOf($ + name + $) > 0) {\\n\\t\\t\\t\\t\\t// Oops. This contains a placeholder.\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn false;\\n};\\n\\n// This is legacy support for when title was known as field\\nexports.aliases field, yes;\\n\,\module-type\:\relinkfieldtype\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/fieldtypes/wikitext.js\:{\title\:\$:/plugins/flibbles/relink/js/fieldtypes/wikitext.js\,\text\:\/*\\\\\\nThis specifies logic for updating filters to reflect title changes.\\n\\\\*/\\n\\nexports.name \\\wikitext\\\;\\n\\nvar type text/vnd.tiddlywiki;\\n\\nvar WikiParser require(\\\$:/core/modules/parsers/wikiparser/wikiparser.js\\\)type;\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder.js\\\);\\nvar utils require($:/plugins/flibbles/relink/js/utils);\\nvar WikitextContext utils.getContext(wikitext);\\n\\nfunction collectRules() {\\n\\tvar rules Object.create(null);\\n\\t$tw.modules.forEachModuleOfType(\\\relinkwikitextrule\\\, function(title, exports) {\\n\\t\\tvar names exports.name;\\n\\t\\tif (typeof names \\\string\\\) {\\n\\t\\t\\tnames names;\\n\\t\\t}\\n\\t\\tif (names ! undefined) {\\n\\t\\t\\tfor (var i 0; i \u003C names.length; i++) {\\n\\t\\t\\t\\trulesnamesi exports;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\treturn rules;\\n}\\n\\nfunction WikiWalker(type, text, options) {\\n\\tthis.options options;\\n\\tif (!this.relinkMethodsInjected) {\\n\\t\\tvar rules collectRules();\\n\\t\\t$tw.utils.each(this.pragmaRuleClasses, this.blockRuleClasses, this.inlineRuleClasses, function(classList) {\\n\\t\\t\\tfor (var name in classList) {\\n\\t\\t\\t\\tif (rulesname) {\\n\\t\\t\\t\\t\\tdelete rulesname.name;\\n\\t\\t\\t\\t\\t$tw.utils.extend(classListname.prototype, rulesname);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tWikiWalker.prototype.relinkMethodsInjected true;\\n\\t}\\n\\tthis.context new WikitextContext(options.settings);\\n\\tWikiParser.call(this, type, text, options);\\n};\\n\\nWikiWalker.prototype Object.create(WikiParser.prototype);\\n\\nWikiWalker.prototype.parsePragmas function() {\\n\\tvar entries this.tree;\\n\\twhile (true) {\\n\\t\\tthis.skipWhitespace();\\n\\t\\tif (this.pos > this.sourceLength) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tvar nextMatch this.findNextMatch(this.pragmaRules, this.pos);\\n\\t\\tif (!nextMatch || nextMatch.matchIndex ! this.pos) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tentries.push.apply(entries, this.handleRule(nextMatch));\\n\\t}\\n\\treturn entries;\\n};\\n\\nWikiWalker.prototype.parseInlineRunUnterminated function(options) {\\n\\tvar entries ;\\n\\tvar nextMatch this.findNextMatch(this.inlineRules, this.pos);\\n\\twhile (this.pos \u003C this.sourceLength && nextMatch) {\\n\\t\\tif (nextMatch.matchIndex > this.pos) {\\n\\t\\t\\tthis.pos nextMatch.matchIndex;\\n\\t\\t}\\n\\t\\tentries.push.apply(entries, this.handleRule(nextMatch));\\n\\t\\tnextMatch this.findNextMatch(this.inlineRules, this.pos);\\n\\t}\\n\\tthis.pos this.sourceLength;\\n\\treturn entries;\\n};\\n\\nWikiWalker.prototype.parseInlineRunTerminated function(terminatorRegExp,options) {\\n return this.parseInlineRunTerminatedExtended(terminatorRegExp,options).tree;\\n};\\n\\nWikiWalker.prototype.parseInlineRunTerminatedExtended function(terminatorRegExp,options) {\\n\\tvar entries ;\\n\\toptions options || {};\\n\\tterminatorRegExp.lastIndex this.pos;\\n\\tvar terminatorMatch terminatorRegExp.exec(this.source);\\n\\tvar inlineRuleMatch this.findNextMatch(this.inlineRules,this.pos);\\n\\twhile(this.pos \u003C this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\\n\\t\\tif (terminatorMatch) {\\n\\t\\t\\tif (!inlineRuleMatch || inlineRuleMatch.matchIndex > terminatorMatch.index) {\\n\\t\\t\\t\\tthis.pos terminatorMatch.index;\\n\\t\\t\\t\\tif (options.eatTerminator) {\\n\\t\\t\\t\\t\\tthis.pos + terminatorMatch0.length;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn {\\n\\t\\t\\t\\t\\tmatch: terminatorMatch,\\n\\t\\t\\t\\t\\ttree: entries\\n\\t\\t\\t\\t};\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (inlineRuleMatch) {\\n\\t\\t\\tif (inlineRuleMatch.matchIndex > this.pos) {\\n\\t\\t\\t\\tthis.pos inlineRuleMatch.matchIndex;\\n\\t\\t\\t}\\n\\t\\t\\tentries.push.apply(entries, this.handleRule(inlineRuleMatch));\\n\\t\\t\\tinlineRuleMatch this.findNextMatch(this.inlineRules, this.pos);\\n\\t\\t\\tterminatorRegExp.lastIndex this.pos;\\n\\t\\t\\tterminatorMatch terminatorRegExp.exec(this.source);\\n\\t\\t}\\n\\t}\\n\\tthis.pos this.sourceLength;\\n\\treturn {tree: entries};\\n\\n};\\n\\nWikiWalker.prototype.parseBlock function(terminatorRegExpString) {\\n\\tvar terminatorRegExp terminatorRegExpString ? new RegExp(\\\(\\\ + terminatorRegExpString + \\\|\\\\\\\\r?\\\\\\\\n\\\\\\\\r?\\\\\\\\n)\\\,\\\mg\\\) : /(\\\\r?\\\\n\\\\r?\\\\n)/mg;\\n\\tthis.skipWhitespace();\\n\\tif (this.pos > this.sourceLength) {\\n\\t\\treturn ;\\n\\t}\\n\\tvar nextMatch this.findNextMatch(this.blockRules, this.pos);\\n\\tif(nextMatch && nextMatch.matchIndex this.pos) {\\n\\t\\treturn this.handleRule(nextMatch);\\n\\t}\\n\\treturn this.parseInlineRun(terminatorRegExp);\\n};\\n\\nWikiWalker.prototype.amendRules function(type, names) {\\n\\tvar only;\\n\\tWikiParser.prototype.amendRules.call(this, type, names);\\n\\tif (type \\\only\\\) {\\n\\t\\tonly true;\\n\\t} else if (type \\\except\\\) {\\n\\t\\tonly false;\\n\\t} else {\\n\\t\\treturn;\\n\\t}\\n\\tif (only ! (names.indexOf(\\\html\\\) > 0)) {\\n\\t\\tthis.context.allowWidgets disabled;\\n\\t}\\n\\tif (only ! (names.indexOf(\\\prettylink\\\) > 0)) {\\n\\t\\tthis.context.allowPrettylinks disabled;\\n\\t}\\n};\\n\\nfunction disabled() { return false; };\\n\\n/// Reporter\\n\\nfunction WikiReporter(type, text, callback, options) {\\n\\tthis.callback callback;\\n\\tWikiWalker.call(this, type, text, options);\\n};\\n\\nWikiReporter.prototype Object.create(WikiWalker.prototype);\\n\\nWikiReporter.prototype.handleRule function(ruleInfo) {\\n\\tif (ruleInfo.rule.report) {\\n\\t\\truleInfo.rule.report(this.source, this.callback, this.options);\\n\\t} else {\\n\\t\\tif (ruleInfo.rule.matchRegExp ! undefined) {\\n\\t\\t\\tthis.pos ruleInfo.rule.matchRegExp.lastIndex;\\n\\t\\t} else {\\n\\t\\t\\t// We cant easily determine the end of this\\n\\t\\t\\t// rule match. Well \\\parse\\\ it so that\\n\\t\\t\\t// parser.pos gets updated, but we throw away\\n\\t\\t\\t// the results.\\n\\t\\t\\truleInfo.rule.parse();\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.report function(wikitext, callback, options) {\\n\\t// Unfortunately its the side-effect of creating this that reports.\\n\\tnew WikiReporter(options.type, wikitext, callback, options);\\n};\\n\\n/// Relinker\\n\\nfunction WikiRelinker(type, text, fromTitle, toTitle, options) {\\n\\tthis.fromTitle fromTitle;\\n\\tthis.toTitle toTitle;\\n\\tWikiWalker.call(this, type, text, options);\\n};\\n\\nWikiRelinker.prototype Object.create(WikiWalker.prototype);\\n\\nWikiRelinker.prototype.handleRule function(ruleInfo) {\\n\\tif (ruleInfo.rule.relink) {\\n\\t\\tvar start ruleInfo.matchIndex;\\n\\t\\tvar newEntry ruleInfo.rule.relink(this.source, this.fromTitle, this.toTitle, this.options);\\n\\t\\tif (newEntry ! undefined) {\\n\\t\\t\\tif (newEntry.output) {\\n\\t\\t\\t\\tnewEntry.start start;\\n\\t\\t\\t\\tnewEntry.end this.pos;\\n\\t\\t\\t}\\n\\t\\t\\treturn newEntry;\\n\\t\\t}\\n\\t} else {\\n\\t\\tif (ruleInfo.rule.matchRegExp ! undefined) {\\n\\t\\t\\tthis.pos ruleInfo.rule.matchRegExp.lastIndex;\\n\\t\\t} else {\\n\\t\\t\\t// We cant easily determine the end of this\\n\\t\\t\\t// rule match. Well \\\parse\\\ it so that\\n\\t\\t\\t// parser.pos gets updated, but we throw away\\n\\t\\t\\t// the results.\\n\\t\\t\\truleInfo.rule.parse();\\n\\t\\t}\\n\\t}\\n\\treturn ;\\n};\\n\\nexports.relink function(wikitext, fromTitle, toTitle, options) {\\n\\tvar parser new WikiRelinker(options.type, wikitext, fromTitle, toTitle, options),\\n\\t\\twikiEntry undefined;\\n\\t// Now that we have an array of entries, lets produce the wikiText entry\\n\\t// containing them all.\\n\\tif (parser.tree.length > 0) {\\n\\t\\tvar builder new Rebuilder(wikitext);\\n\\t\\twikiEntry {};\\n\\t\\tfor (var i 0; i \u003C parser.tree.length; i++) {\\n\\t\\t\\tvar entry parser.treei;\\n\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\twikiEntry.impossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (entry.output) {\\n\\t\\t\\t\\tbuilder.add(entry.output, entry.start, entry.end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\twikiEntry.output builder.results();\\n\\t}\\n\\treturn wikiEntry;\\n};\\n\,\module-type\:\relinkfieldtype\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/all_relinkable.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/all_relinkable.js\,\text\:\/*\\\\\\nmodule-type: allfilteroperator\\n\\nFilter function for allrelinkable.\\nReturns all tiddlers subject to relinking.\\n\\n\\\\*/\\n\\n(function() {\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nexports.relinkable function(source,prefix,options) {\\n\\treturn options.wiki.getRelinkableTitles();\\n};\\n\\n})();\\n\,\module-type\:\allfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/orphans.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/orphans.js\,\text\:\/*\\\\\\nmodule-type: relinkfilteroperator\\n\\nFilter function for relink:orphans.\\nReturns all tiddlers which are not referenced in any way\\n\\n\\\\*/\\n\\n(function() {\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nexports.orphans function(source,prefix,options) {\\n\\treturn options.wiki.getRelinkOrphans({ignore: $:/StoryList});\\n};\\n\\n})();\\n\,\module-type\:\relinkfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/references.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/references.js\,\text\:\/*\\\\\\nmodule-type: relinkfilteroperator\\n\\nGiven a title as an operand, returns all non-shadow tiddlers that have any\\nsort of updatable reference to it.\\n\\n`relink:backreferences`\\n`relink:references`\\n\\nReturns all tiddlers that reference `fromTiddler` somewhere inside them.\\n\\nInput is ignored. Maybe it shouldnt do this.\\n\\\\*/\\n\\nvar LinkedList $tw.utils.LinkedList;\\n\\nif (!LinkedList) {\\n\\t/* If the linked list isnt available, make a quick crappy version. */\\n\\tLinkedList function() {this.array;};\\n\\n\\tLinkedList.prototype.pushTop function(array) {\\n\\t\\t$tw.utils.pushTop(this.array, array);\\n\\t};\\n\\n\\tLinkedList.prototype.toArray function() {\\n\\t\\treturn this.array;\\n\\t};\\n};\\n\\nexports.backreferences function(source,operator,options) {\\n\\tvar results new LinkedList();\\n\\tsource(function(tiddler,title) {\\n\\t\\tresults.pushTop(Object.keys(options.wiki.getTiddlerRelinkBackreferences(title,options)));\\n\\t});\\n\\treturn results.toArray();\\n};\\n\\nexports.references function(source,operator,options) {\\n\\tvar results new LinkedList();\\n\\tif (operator.suffix hard) {\\n\\t\\toptions Object.create(options);\\n\\t\\toptions.hard true;\\n\\t}\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar refs options.wiki.getTiddlerRelinkReferences(title,options);\\n\\t\\tif (refs) {\\n\\t\\t\\tresults.pushTop(Object.keys(refs));\\n\\t\\t}\\n\\t});\\n\\treturn results.toArray();\\n};\\n\,\module-type\:\relinkfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/relink.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/relink.js\,\text\:\/*\\\\\\nmodule-type: filteroperator\\n\\nThis filter acts as a namespace for several small, simple filters, such as\\n\\n`relink:impossible`\\n\\n\\\\*/\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar language require($:/plugins/flibbles/relink/js/language.js);\\n\\nvar relinkFilterOperators;\\n\\nfunction getRelinkFilterOperators() {\\n\\tif(!relinkFilterOperators) {\\n\\t\\trelinkFilterOperators {};\\n\\t\\t$tw.modules.applyMethods(\\\relinkfilteroperator\\\,\\n\\t\\t relinkFilterOperators);\\n\\t}\\n\\treturn relinkFilterOperators;\\n}\\n\\nexports.relink function(source,operator,options) {\\n\\tvar suffixPair parseSuffix(operator.suffix);\\n\\tvar relinkFilterOperator getRelinkFilterOperators()suffixPair0;\\n\\tif (relinkFilterOperator) {\\n\\t\\tvar newOperator $tw.utils.extend({}, operator);\\n\\t\\tnewOperator.suffix suffixPair1;\\n\\t\\treturn relinkFilterOperator(source, newOperator, options);\\n\\t} else {\\n\\t\\treturn language.getString(\\\text/plain\\\, \\\Error/RelinkFilterOperator\\\, options);\\n\\t}\\n};\\n\\nfunction parseSuffix(suffix) {\\n\\tvar index suffix? suffix.indexOf(\\\:\\\): -1;\\n\\tif (index > 0) {\\n\\t\\treturn suffix.substr(0, index), suffix.substr(index+1);\\n\\t} else {\\n\\t\\treturn suffix;\\n\\t}\\n}\\n\,\module-type\:\filteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/report.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/report.js\,\text\:\/*\\\\\\nmodule-type: relinkfilteroperator\\n\\nGiven a title as an operand, returns a string for each occurrence of that title\\nwithin each input title.\\n\\ntitle +relink:reportfromTiddler`\\n\\nReturns string representation of fromTiddler occurrences in title.\\n\\\\*/\\n\\nexports.report function(source,operator,options) {\\n\\tvar fromTitle operator.operand,\\n\\t\\tresults ;\\n\\tif (fromTitle) {\\n\\t\\tvar blurbs options.wiki.getTiddlerRelinkBackreferences(fromTitle);\\n\\t\\tsource(function(tiddler, title) {\\n\\t\\t\\tif (blurbstitle) {\\n\\t\\t\\t\\tresults results.concat(blurbstitle);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\module-type\:\relinkfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/signatures.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/signatures.js\,\text\:\/*\\\\\\nmodule-type: relinkfilteroperator\\n\\nThis filter returns all input tiddlers which are a source of\\nrelink configuration.\\n\\n`alltiddlers+systemrelink:sourcemacros`\\n\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nexports.signatures function(source,operator,options) {\\n\\tvar plugin operator.operand || null;\\n\\tvar set getSet(options);\\n\\tif (plugin \\\$:/core\\\) {\\n\\t\\t// Core doesnt actually have any settings. We mean Relink\\n\\t\\tplugin \\\$:/plugins/flibbles/relink\\\;\\n\\t}\\n\\tvar signatures ;\\n\\tfor (var signature in set) {\\n\\t\\tvar source setsignature.source;\\n\\t\\tif (options.wiki.getShadowSource(source) plugin) {\\n\\t\\t\\tsignatures.push(signature);\\n\\t\\t}\\n\\t}\\n\\treturn signatures;\\n};\\n\\nexports.type function(source,operator,options) {\\n\\tvar results ;\\n\\tvar set getSet(options);\\n\\tsource(function(tiddler, signature) {\\n\\t\\tif (setsignature) {\\n\\t\\t\\tresults.push(setsignature.name);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nexports.types function(source,operator,options) {\\n\\tvar def utils.getDefaultType(options.wiki);\\n\\tvar types Object.keys(utils.getTypes());\\n\\ttypes.sort();\\n\\t// move default to front\\n\\ttypes.sort(function(x,y) { return x def ? -1 : y def ? 1 : 0; });\\n\\treturn types;\\n};\\n\\nexports.source function(source,operator,options) {\\n\\tvar results ;\\n\\tvar category operator.suffix;\\n\\tvar set getSet(options);\\n\\tsource(function(tiddler, signature) {\\n\\t\\tif (setsignature) {\\n\\t\\t\\tresults.push(setsignature.source);\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\nfunction getSet(options) {\\n\\treturn options.wiki.getGlobalCache(\\\relink-signatures\\\, function() {\\n\\t\\tvar config utils.getWikiContext(options.wiki);\\n\\t\\tvar set Object.create(null);\\n\\t\\tvar categories {\\n\\t\\t\\tattributes: config.getAttributes(),\\n\\t\\t\\tfields: config.getFields(),\\n\\t\\t\\tmacros: config.getMacros(),\\n\\t\\t\\toperators: config.getOperators()};\\n\\t\\t$tw.utils.each(categories, function(list, category) {\\n\\t\\t\\t$tw.utils.each(list, function(item, key) {\\n\\t\\t\\t\\tsetcategory + \\\/\\\ + key item;\\n\\t\\t\\t});\\n\\t\\t});\\n\\t\\treturn set;\\n\\t});\\n};\\n\,\module-type\:\relinkfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/filteroperators/splitafter.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/splitafter.js\,\text\:\/*\\\\\\ntitle: $:/core/modules/filters/splitbefore.js\\ntype: application/javascript\\nmodule-type: relinkfilteroperator\\n\\nFilter operator that splits each result on the last occurance of the specified separator and returns the last bit.\\n\\nWhat does this have to do with relink? Nothing. I need this so I can render\\nthe configuration menu. I //could// use splitregexp, but then Id be\\nlimited to Tiddlywiki v5.1.20 or later.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nExport our filter function\\n*/\\nexports.splitafter function(source,operator,options) {\\n\\tvar results ;\\n\\tsource(function(tiddler,title) {\\n\\t\\tvar index title.lastIndexOf(operator.operand);\\n\\t\\tif(index \u003C 0) {\\n\\t\\t\\t$tw.utils.pushTop(results,title);\\n\\t\\t} else {\\n\\t\\t\\t$tw.utils.pushTop(results,title.substr(index+1));\\n\\t\\t}\\n\\t});\\n\\treturn results;\\n};\\n\\n})();\\n\\n\,\type\:\application/javascript\,\module-type\:\relinkfilteroperator\},\$:/plugins/flibbles/relink/js/filteroperators/wouldchange.js\:{\title\:\$:/plugins/flibbles/relink/js/filteroperators/wouldchange.js\,\text\:\/*\\\\\\nmodule-type: relinkfilteroperator\\n\\nwouldchange: Generator.\\n\\nGiven each input title, it returns all the tiddlers that would be changed if the currentTiddler were to be renamed to the operand.\\n\\nimpossible: filters all source titles for ones that encounter errors on failure.\\n\\nTHESE ARE INTERNAL FILTER OPERATOR AND ARE NOT INTENDED TO BE USED BY USERS.\\n\\n\\\\*/\\n\\nvar language require(\\\$:/plugins/flibbles/relink/js/language.js\\\);\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils.js\\\);\\n\\nexports.wouldchange function(source,operator,options) {\\n\\tvar from options.widget && options.widget.getVariable(\\\currentTiddler\\\),\\n\\t\\tto operator.operand,\\n\\t\\tindexer utils.getIndexer(options.wiki);\\n\\tif (to && from ! to) {\\n\\t\\tvar records indexer.relinkLookup(from, to, options);\\n\\t\\treturn Object.keys(records);\\n\\t} else {\\n\\t\\treturn ;\\n\\t}\\n};\\n\\nexports.impossible function(source,operator,options) {\\n\\tvar from options.widget && options.widget.getVariable(\\\currentTiddler\\\),\\n\\t\\tto operator.operand,\\n\\t\\tresults ;\\n\\tif (to && from ! to) {\\n\\t\\tvar indexer utils.getIndexer(options.wiki),\\n\\t\\t\\trecords indexer.relinkLookup(from, to, options);\\n\\t\\tsource(function(tiddler, title) {\\n\\t\\t\\tvar fields recordstitle;\\n\\t\\t\\tif (fields) {\\n\\t\\t\\t\\tfor (var field in fields) {\\n\\t\\t\\t\\t\\tif (fieldsfield.impossible) {\\n\\t\\t\\t\\t\\t\\tresults.push(title);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn results;\\n};\\n\,\module-type\:\relinkfilteroperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/indexer.js\:{\title\:\$:/plugins/flibbles/relink/js/indexer.js\,\text\:\/*\\\\\\nmodule-type: indexer\\n\\nIndexes results from tiddler reference reports so we dont have to call them\\nso much.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar utils require(\\\./utils.js\\\);\\nvar TiddlerContext utils.getContext(tiddler);\\n\\nfunction Indexer(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nIndexer.prototype.init function() {\\n\\tthis.rebuild();\\n};\\n\\nIndexer.prototype.rebuild function() {\\n\\tthis.index null;\\n\\tthis.backIndex null;\\n\\tthis.contexts Object.create(null);\\n\\tthis.changedTiddlers undefined;\\n\\tthis.lastRelinks Object.create(null);\\n};\\n\\nIndexer.prototype.update function(updateDescriptor) {\\n\\tif (!this.index) {\\n\\t\\treturn;\\n\\t}\\n\\tvar title;\\n\\tif (!this.changedTiddlers) {\\n\\t\\tthis.changedTiddlers Object.create(null);\\n\\t}\\n\\tif (updateDescriptor.old.exists) {\\n\\t\\ttitle updateDescriptor.old.tiddler.fields.title;\\n\\t\\tthis.changedTiddlerstitle {deleted: true};\\n\\t\\tthis._purge(title);\\n\\t}\\n\\tif (updateDescriptornew.exists) {\\n\\t\\t// If its the same tiddler as old, this overrides the deleted entry\\n\\t\\ttitle updateDescriptornew.tiddler.fields.title;\\n\\t\\tthis.changedTiddlerstitle {modified: true};\\n\\t}\\n};\\n\\nIndexer.prototype.lookup function(title) {\\n\\tthis._upkeep();\\n\\treturn this.indextitle;\\n};\\n\\nIndexer.prototype.reverseLookup function(title) {\\n\\tthis._upkeep();\\n\\treturn this.backIndextitle || Object.create(null);\\n};\\n\\nIndexer.prototype.relinkLookup function(fromTitle, toTitle, options) {\\n\\tthis._upkeep();\\n\\tvar shortlist undefined;\\n\\tvar lastRelink this.lastRelinksfromTitle;\\n\\tif (lastRelink) {\\n\\t\\tif (lastRelink.to toTitle) {\\n\\t\\t\\t// We need to reintroduce the relink cache, where temporary info\\n\\t\\t\\t// was stored.\\n\\t\\t\\toptions.cache lastRelink.cache;\\n\\t\\t\\treturn lastRelink.results;\\n\\t\\t}\\n\\t\\tshortlist buildShortlist(lastRelink);\\n\\t}\\n\\tvar results utils.getRelinkResults(this.wiki, fromTitle, toTitle, this.context, shortlist, options);\\n\\tif (Object.keys(this.lastRelinks).length > 3) {\\n\\t\\t// The cache got a little large. wipe it clean.\\n\\t\\tthis.lastRelinks Object.create(null);\\n\\t}\\n\\tthis.lastRelinksfromTitle {\\n\\t\\tfrom: fromTitle,\\n\\t\\tresults: results,\\n\\t\\tto: toTitle,\\n\\t\\tcache: options.cache,\\n\\t\\tmaybeRelevant: Object.create(null)};\\n\\treturn results;\\n};\\n\\n// Returns all tiddlers that dont have anything referencing it.\\nIndexer.prototype.orphans function(options) {\\n\\tthis._upkeep();\\n\\tvar results ;\\n\\tvar ignoreList (options && options.ignore) || ;\\n\\tvar ignoreMap Object.create(null);\\n\\tfor (var i 0; i \u003C ignoreList.length; i++) {\\n\\t\\tignoreMapignoreListi true;\\n\\t}\\n\\tfor (var title in this.index) {\\n\\t\\tvar index this.backIndextitle;\\n\\t\\tvar owned false;\\n\\t\\tif (index) {\\n\\t\\t\\tfor (var key in index) {\\n\\t\\t\\t\\tif (!ignoreMapkey) {\\n\\t\\t\\t\\t\\towned true;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (!owned) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\nIndexer.prototype._upkeep function() {\\n\\tvar title;\\n\\tif (this.changedTiddlers && (this.context.changed(this.changedTiddlers) || this.context.parent.changed(this.changedTiddlers))) {\\n\\t\\t// If global macro context or whitelist context changed, wipe all\\n\\t\\tthis.rebuild();\\n\\t}\\n\\tif (!this.index) {\\n\\t\\tthis.index Object.create(null);\\n\\t\\tthis.backIndex Object.create(null);\\n\\t\\tthis.context utils.getWikiContext(this.wiki);\\n\\t\\tvar titles this.wiki.getRelinkableTitles();\\n\\t\\tfor (var i 0; i \u003C titles.length; i++) {\\n\\t\\t\\tthis._populate(titlesi);\\n\\t\\t};\\n\\t} else if (this.changedTiddlers) {\\n\\t\\t// If there are cached changes, we apply them now.\\n\\t\\tfor (title in this.contexts) {\\n\\t\\t\\tvar tiddlerContext this.contextstitle;\\n\\t\\t\\tif (tiddlerContext.changed(this.changedTiddlers)) {\\n\\t\\t\\t\\tthis._purge(title);\\n\\t\\t\\t\\tthis._populate(title);\\n\\t\\t\\t\\tthis._decacheRelink(title);\\n\\t\\t\\t\\t// Wipe this change, so we dont risk updating it twice.\\n\\t\\t\\t\\tthis.changedTiddlerstitle undefined;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tfor (title in this.changedTiddlers) {\\n\\t\\t\\tvar change this.changedTiddlerstitle;\\n\\t\\t\\tif (change && change.modified) {\\n\\t\\t\\t\\tthis._purge(title);\\n\\t\\t\\t\\tthis._populate(title);\\n\\t\\t\\t\\tthis._decacheRelink(title);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tthis.changedTiddlers undefined;\\n\\t}\\n};\\n\\nIndexer.prototype._purge function(title) {\\n\\tfor (var entry in this.indextitle) {\\n\\t\\tdelete this.backIndexentrytitle;\\n\\t}\\n\\tdelete this.contextstitle;\\n\\tdelete this.indextitle;\\n};\\n\\n// This drops the cached relink results if unsanctioned tiddlers were changed\\nIndexer.prototype._decacheRelink function(title) {\\n\\tvar tiddler this.wiki.getTiddler(title);\\n\\tfor (var from in this.lastRelinks) {\\n\\t\\tvar lastRelink this.lastRelinksfrom;\\n\\t\\tif (title ! from\\n\\t\\t&& title ! lastRelink.to\\n\\t\\t&& (!tiddler\\n\\t\\t|| !$tw.utils.hop(tiddler.fields, draft.of) // is a draft\\n\\t\\t|| tiddler.fieldsdraft.of ! from// draft of target\\n\\t\\t|| references(this.indextitle, from))) { // draft references target\\n\\t\\t\\t// This is not the draft of the last relinked title,\\n\\t\\t\\t// so our cached results should be wiped.\\n\\t\\t\\tlastRelink.maybeRelevanttitle true;\\n\\t\\t\\t// Force this cached relink to partially refresh when it comes time\\n\\t\\t\\tlastRelink.to undefined;\\n\\t\\t}\\n\\t}\\n};\\n\\nfunction references(list, item) {\\n\\treturn list ! undefined && listitem;\\n};\\n\\n// Compiles a short list of tiddlers we need to check for a rename.\\n// This list will be much faster to relink again.\\nfunction buildShortlist(lastRelink) {\\n\\tvar shortlist Object.keys(lastRelink.results);\\n\\tfor (var title in lastRelink.maybeRelevant) {\\n\\t\\tif (lastRelink.resultstitle undefined) {\\n\\t\\t\\tshortlist.push(title);\\n\\t\\t}\\n\\t}\\n\\treturn shortlist;\\n};\\n\\nIndexer.prototype._populate function(title) {\\n\\t// Fetch the report for a title, and populate the indexes with result\\n\\tvar tiddlerContext new TiddlerContext(this.wiki, this.context, title);\\n\\tvar references utils.getTiddlerRelinkReferences(this.wiki, title, tiddlerContext);\\n\\tthis.indextitle references;\\n\\tif (tiddlerContext.hasImports()) {\\n\\t\\tthis.contextstitle tiddlerContext;\\n\\t}\\n\\tfor (var ref in references) {\\n\\t\\tthis.backIndexref this.backIndexref || Object.create(null);\\n\\t\\tthis.backIndexreftitle referencesref;\\n\\t}\\n};\\n\\nexports.RelinkIndexer Indexer;\\n\,\module-type\:\indexer\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/language.js\:{\title\:\$:/plugins/flibbles/relink/js/language.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nThis handles all logging and alerts Relink emits.\\n\\n\\\\*/\\n\\nexports.getString function(outputType, title, options) {\\n\\ttitle \\\$:/plugins/flibbles/relink/language/\\\ + title;\\n\\treturn options.wiki.renderTiddler(outputType, title, options);\\n};\\n\\nvar logger;\\n\\nexports.warn function(string, options) {\\n\\tif (!logger) {\\n\\t\\tlogger new $tw.utils.Logger(\\\Relinker\\\);\\n\\t}\\n\\tlogger.alert(string);\\n};\\n\\nexports.reportFailures function(failureList, options) {\\n\\tvar alertString this.getString(\\\text/html\\\, \\\Error/ReportFailedRelinks\\\, options)\\n\\tvar alreadyReported Object.create(null);\\n\\tvar reportList ;\\n\\t$tw.utils.each(failureList, function(f) {\\n\\t\\tif (!alreadyReportedf) {\\n\\t\\t\\tif ($tw.browser) {\\n\\t\\t\\t\\t// This might not make the link if the title is complicated.\\n\\t\\t\\t\\t// Whatever.\\n\\t\\t\\t\\treportList.push(\\\\\\\n* \\\ + f + \\\\\\);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treportList.push(\\\\\\\n* \\\ + f);\\n\\t\\t\\t}\\n\\t\\t\\talreadyReportedf true;\\n\\t\\t}\\n\\t});\\n\\tthis.warn(alertString + \\\\\\\n\\\ + reportList.join(\\\\\\));\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/mangler.js\:{\title\:\$:/plugins/flibbles/relink/js/mangler.js\,\text\:\/*\\\\\\nmodule-type: widget\\n\\nCreates a mangler widget for field validation. This isnt meant to be used\\nby the user. Its only used in Relink configuration.\\n\\n\\\\*/\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\nvar language require($:/plugins/flibbles/relink/js/language.js);\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nvar RelinkManglerWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n\\tthis.addEventListeners(\\n\\t\\t{type: \\\relink-add-field\\\, handler: \\\handleAddFieldEvent\\\},\\n\\t\\t{type: \\\relink-add-operator\\\, handler: \\\handleAddOperatorEvent\\\},\\n\\t\\t{type: \\\relink-add-parameter\\\, handler: \\\handleAddParameterEvent\\\},\\n\\t\\t{type: \\\relink-add-attribute\\\, handler: \\\handleAddAttributeEvent\\\}\\n\\t);\\n};\\n\\nexports.relinkmangler RelinkManglerWidget;\\n\\nRelinkManglerWidget.prototype new Widget();\\n\\n// This wraps alert so it can be monkeypatched during testing.\\nRelinkManglerWidget.prototype.alert function(message) {\\n\\talert(message);\\n};\\n\\nRelinkManglerWidget.prototype.handleAddFieldEvent function(event) {\\n\\tvar param event.paramObject;\\n\\tif (typeof param ! \\\object\\\ || !param.field) {\\n\\t\\t// Cant handle it.\\n\\t\\treturn true;\\n\\t}\\n\\tvar trimmedName param.field.trim();\\n\\tif (!trimmedName) {\\n\\t\\t// Still cant handle it, but dont warn.\\n\\t\\treturn true;\\n\\t}\\n\\tif(!$tw.utils.isValidFieldName(trimmedName)) {\\n\\t\\tthis.alert($tw.language.getString(\\n\\t\\t\\t\\\InvalidFieldName\\\,\\n\\t\\t\\t{variables:\\n\\t\\t\\t\\t{fieldName: trimmedName}\\n\\t\\t\\t}\\n\\t\\t));\\n\\t} else {\\n\\t\\tadd(this.wiki, \\\fields\\\, trimmedName);\\n\\t}\\n\\treturn true;\\n};\\n\\n/**Not much validation, even though there are definitely illegal\\n * operator names. If you input on, Relink wont relink it, but it\\n * wont choke on it either. Tiddlywiki will...\\n */\\nRelinkManglerWidget.prototype.handleAddOperatorEvent function(event) {\\n\\tvar param event.paramObject;\\n\\tif (param) {\\n\\t\\tadd(this.wiki, \\\operators\\\, param.operator);\\n\\t}\\n\\treturn true;\\n};\\n\\nRelinkManglerWidget.prototype.handleAddParameterEvent function(event) {\\n\\tvar param event.paramObject;\\n\\tif (param && param.macro && param.parameter) {\\n\\t\\tif (/\\\\s/.test(param.macro.trim())) {\\n\\t\\t\\tthis.alert(language.getString(\\n\\t\\t\\t\\t\\\text/plain\\\,\\n\\t\\t\\t\\t\\\Error/InvalidMacroName\\\,\\n\\t\\t\\t\\t{ variables: {macroName: param.macro},\\n\\t\\t\\t\\t wiki: this.wiki\\n\\t\\t\\t\\t}\\n\\t\\t\\t));\\n\\t\\t} else if (/ \\\\//.test(param.parameter.trim())) {\\n\\t\\t\\tthis.alert(language.getString(\\n\\t\\t\\t\\t\\\text/plain\\\,\\n\\t\\t\\t\\t\\\Error/InvalidParameterName\\\,\\n\\t\\t\\t\\t{ variables: {parameterName: param.parameter},\\n\\t\\t\\t\\t wiki: this.wiki\\n\\t\\t\\t\\t}\\n\\t\\t\\t));\\n\\t\\t} else {\\n\\t\\t\\tadd(this.wiki, \\\macros\\\, param.macro, param.parameter);\\n\\t\\t}\\n\\t}\\n\\treturn true;\\n};\\n\\nRelinkManglerWidget.prototype.handleAddAttributeEvent function(event) {\\n\\tvar param event.paramObject;\\n\\tif (param && param.element && param.attribute) {\\n\\t\\tif (/ \\\\//.test(param.element.trim())) {\\n\\t\\t\\tthis.alert(language.getString(\\n\\t\\t\\t\\t\\\text/plain\\\,\\n\\t\\t\\t\\t\\\Error/InvalidElementName\\\,\\n\\t\\t\\t\\t{ variables: {elementName: param.element},\\n\\t\\t\\t\\t wiki: this.wiki\\n\\t\\t\\t\\t}\\n\\t\\t\\t));\\n\\t\\t} else if (/ \\\\//.test(param.attribute.trim())) {\\n\\t\\t\\tthis.alert(language.getString(\\n\\t\\t\\t\\t\\\text/plain\\\,\\n\\t\\t\\t\\t\\\Error/InvalidAttributeName\\\,\\n\\t\\t\\t\\t{ variables: {attributeName: param.attribute},\\n\\t\\t\\t\\t wiki: this.wiki\\n\\t\\t\\t\\t}\\n\\t\\t\\t));\\n\\t\\t} else {\\n\\t\\t\\tadd(this.wiki, \\\attributes\\\, param.element, param.attribute);\\n\\t\\t}\\n\\t}\\n\\treturn true;\\n};\\n\\nfunction add(wiki, category/*, path parts*/) {\\n\\tvar path \\\$:/config/flibbles/relink/\\\ + category;\\n\\tfor (var x 2; x \u003C arguments.length; x++) {\\n\\t\\tvar part argumentsx;\\n\\t\\t// Abort if its falsy, or only whitespace. Also, trim spaces\\n\\t\\tif (!part || !(part part.trim())) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tpath path + \\\/\\\ + part;\\n\\t}\\n\\tvar def utils.getDefaultType(wiki);\\n\\twiki.addTiddler({title: path, text: def});\\n};\\n\,\module-type\:\widget\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/fields.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/fields.js\,\text\:\/*\\\\\\n\\nHandles all fields specified in the plugin configuration. Currently, this\\nonly supports single-value fields.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nexports.name fields;\\n\\nexports.report function(tiddler, callback, options) {\\n\\tvar fields options.settings.getFields();\\n\\t$tw.utils.each(fields, function(handler, field) {\\n\\t\\tvar input tiddler.fieldsfield;\\n\\t\\tif (input) {\\n\\t\\t\\tif (field list && tiddler.fieldsplugin-type) {\\n\\t\\t\\t\\t// We have a built-in exception here. plugins use their list\\n\\t\\t\\t\\t// field differently. Theres a whole mechanism for what\\n\\t\\t\\t\\t// they actually point to, but lets not bother with that now\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\thandler.report(input, function(title, blurb, style) {\\n\\t\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\t\\tcallback(title, field + : + blurb, style);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tcallback(title, field, style);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}, options);\\n\\t\\t}\\n\\t});\\n};\\n\\nexports.relink function(tiddler, fromTitle, toTitle, changes, options) {\\n\\tvar fields options.settings.getFields();\\n\\t$tw.utils.each(fields, function(handler, field) {\\n\\t\\tvar input tiddler.fieldsfield;\\n\\t\\tif (input) {\\n\\t\\t\\tif (field list && tiddler.fieldsplugin-type) {\\n\\t\\t\\t\\t// Same deal as above. Skip.\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\tvar entry handler.relink(input, fromTitle, toTitle, options);\\n\\t\\t\\tif (entry ! undefined) {\\n\\t\\t\\t\\tchangesfield entry;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n};\\n\,\module-type\:\relinkoperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/prefix.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/prefix.js\,\text\:\/*\\\\\\n\\nProvides a means for modules to relink tiddlers based on their prefix\\nin a way thats clean and efficient. All modules must have a prefix\\nvalue, and all tiddlers which start with that prefix will be passed to that\\nmodule.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar prefixOperators utils.getModulesByTypeAsHashmap(relinkprefix, prefix);\\nvar startsWith utils.startsWith;\\n\\n// We only need to register this if there exist any modules.\\n// The core relink doesnt have any of its own.\\nif ($tw.utils.count(prefixOperators) > 0) {\\n\\nexports.name prefix;\\n\\nexports.report function(tiddler, callback, options) {\\n\\tvar title tiddler.fields.title;\\n\\tfor (var prefix in prefixOperators) {\\n\\t\\tif (startsWith(title, prefix)) {\\n\\t\\t\\tprefixOperatorsprefix.report(tiddler, callback, options);\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.relink function(tiddler, fromTitle, toTitle, changes, options) {\\n\\tvar title tiddler.fields.title;\\n\\tfor (var prefix in prefixOperators) {\\n\\t\\tif (startsWith(title, prefix)) {\\n\\t\\t\\tprefixOperatorsprefix.relink(tiddler, fromTitle, toTitle, changes, options);\\n\\t\\t}\\n\\t}\\n};\\n\\n}\\n\,\module-type\:\relinkoperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/filtertext.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/filtertext.js\,\text\:\/*\\\\\\n\\nThis relinks tiddlers which contain filters in their body, as oppose to\\nwikitext.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar filterHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(filter);\\n\\nexports.type application/x-tiddler-filter;\\n\\nexports.aliases text/x-tiddler-filter;\\n\\nexports.report filterHandler.report;\\nexports.relink filterHandler.relink;\\n\,\module-type\:\relinktext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/listtext.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/listtext.js\,\text\:\/*\\\\\\n\\nThis relinks tiddlers which contain a tiddler list as their body.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar listHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(list);\\n\\nexports.type application/x-tiddler-list;\\n\\nexports.aliases text/x-tiddler-list;\\n\\nexports.report listHandler.report;\\nexports.relink listHandler.relink;\\n\,\module-type\:\relinktext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/referencetext.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/referencetext.js\,\text\:\/*\\\\\\n\\nThis relinks tiddlers which contain a tiddler reference as their body.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar refHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(reference);\\n\\nexports.type application/x-tiddler-reference;\\n\\nexports.aliases text/x-tiddler-reference;\\n\\nexports.report refHandler.report;\\nexports.relink refHandler.relink;\\n\,\module-type\:\relinktext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/titletext.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/titletext.js\,\text\:\/*\\\\\\n\\nThis relinks tiddlers which contain a single title as their body.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar titleHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(title);\\n\\nexports.type application/x-tiddler-title;\\n\\nexports.aliases text/x-tiddler-title;\\n\\nexports.report titleHandler.report;\\nexports.relink titleHandler.relink;\\n\,\module-type\:\relinktext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/code.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/code.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles code blocks. Or rather //doesnt// handle them, since we should\\nignore their contents.\\n\\n\\\`` Renamed Title ``\\\ will remain unchanged.\\n\\n\\\\*/\\n\\nexports.name \\\codeinline\\\, \\\codeblock\\\;\\n\\nexports.relink function(text) {\\n\\tvar reEnd;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Im lazy. This relink method works for both codeblock and codeinline\\n\\tif (this.match0.length > 2) {\\n\\t\\t// Must be a codeblock\\n\\t\\treEnd /\\\\r?\\\\n```$/mg;\\n\\t} else {\\n\\t\\t// Must be a codeinline\\n\\t\\treEnd new RegExp(this.match1, \\\mg\\\);\\n\\t}\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(text);\\n\\tif (match) {\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\treturn undefined;\\n};\\n\\n// Same thing. Just skip the pos ahead.\\nexports.report exports.relink;\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles comment blocks. Or rather //doesnt// handle them, since we should\\nignore their contents.\\n\\n\\\\u003C!-- Renamed Title -->\\\ will remain unchanged.\\n\\n\\\\*/\\n\\nexports.name \\\commentinline\\\, \\\commentblock\\\;\\n\\nexports.relink function(text) {\\n\\tthis.parser.pos this.endMatchRegExp.lastIndex;\\n\\treturn undefined;\\n};\\n\\nexports.report exports.relink;\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/conditional.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/conditional.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement of conditionals\\n\\n\u003C%if Tiddler %>\\n\\n\u003C%elseif TiddlerB %>\\n\\n\\\\*/\\n\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils.js\\\);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar filterRelinker utils.getType(filter);\\n\\nexports.name \\\conditional\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar match this.match;\\n\\tvar keyword \u003C%if ;\\n\\tvar reEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(else)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(elseif)\\\\\\\\s+(\\\\\\\\s\\\\\\\\S+?)\\\\\\\\%\\\\\\\\>\\\;\\n\\tthis.parser.pos this.terminateIfMatch.index + this.terminateIfMatch0.length;\\n\\tvar ex;\\n\\tvar filter this.parser.source.substring(match.index + match0.length, this.terminateIfMatch.index);\\n\\twhile (true) {\\n\\t\\tif (filter) {\\n\\t\\t\\tfilterRelinker.report(filter, function(title, blurb, style) {\\n\\t\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\t\\tblurb keyword + blurb + %>;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tblurb keyword + %>;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tcallback(title, blurb, style);\\n\\t\\t\\t}, options);\\n\\t\\t}\\n\\t\\tvar hasLineBreak doubleLineBreakAtPos(this.parser);\\n\\t\\t// Parse the body looking for else or endif\\n\\t\\tif (hasLineBreak) {\\n\\t\\t\\tex this.parser.parseBlocksTerminatedExtended(reEndString);\\n\\t\\t} else {\\n\\t\\t\\tvar reEnd new RegExp(reEndString,\\\mg\\\);\\n\\t\\t\\tex this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true});\\n\\t\\t}\\n\\t\\tif (ex.match) {\\n\\t\\t\\tmatch ex.match;\\n\\t\\t\\tif (ex.match3 \\\elseif\\\) {\\n\\t\\t\\t\\tkeyword \u003C%elseif ;\\n\\t\\t\\t\\tfilter ex.match4;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t} else if (ex.match2 \\\else\\\) {\\n\\t\\t\\t\\treEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>\\\;\\n\\t\\t\\t\\tfilter null;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tbreak;\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar conditionEntry undefined;\\n\\tvar builder new Rebuilder(text, this.match.index);\\n\\tvar reEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(else)\\\\\\\\s*\\\\\\\\%\\\\\\\\>|\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(elseif)\\\\\\\\s+(\\\\\\\\s\\\\\\\\S+?)\\\\\\\\%\\\\\\\\>\\\;\\n\\tthis.parser.pos this.terminateIfMatch.index + this.terminateIfMatch0.length;\\n\\tvar ex;\\n\\tvar filter this.parser.source.substring(this.match.index + this.match0.length, this.terminateIfMatch.index);\\n\\tvar endOfFilter this.terminateIfMatch.index;\\n\\twhile (true) {\\n\\t\\tif (filter) {\\n\\t\\t\\tvar entry filterRelinker.relink(filter, fromTitle, toTitle, options);\\n\\t\\t\\tif (entry) {\\n\\t\\t\\t\\tif (entry.output) {\\n\\t\\t\\t\\t\\tif (entry.output.indexOf(%>) > 0) {\\n\\t\\t\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tbuilder.add(entry.output, endOfFilter - filter.length, endOfFilter);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar hasLineBreak doubleLineBreakAtPos(this.parser);\\n\\t\\t// Parse the body looking for else or endif\\n\\t\\tif (hasLineBreak) {\\n\\t\\t\\tex this.parser.parseBlocksTerminatedExtended(reEndString);\\n\\t\\t} else {\\n\\t\\t\\tvar reEnd new RegExp(reEndString,\\\mg\\\);\\n\\t\\t\\tex this.parser.parseInlineRunTerminatedExtended(reEnd,{eatTerminator: true});\\n\\t\\t}\\n\\t\\tfor (var i 0; i \u003C ex.tree.length; i++) {\\n\\t\\t\\tvar child ex.treei;\\n\\t\\t\\tif (child.output) {\\n\\t\\t\\t\\tbuilder.add(child.output, child.start, child.end);\\n\\t\\t\\t}\\n\\t\\t\\tif (child.impossible) {\\n\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (ex.match) {\\n\\t\\t\\tif (ex.match3 \\\elseif\\\) {\\n\\t\\t\\t\\tfilter ex.match4;\\n\\t\\t\\t\\tendOfFilter ex.match.index + ex.match0.length - 2;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t} else if (ex.match2 \\\else\\\) {\\n\\t\\t\\t\\tfilter null;\\n\\t\\t\\t\\treEndString \\\\\\\\\\\\u003C\\\\\\\\%\\\\\\\\s*(endif)\\\\\\\\s*\\\\\\\\%\\\\\\\\>\\\;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tbreak;\\n\\t}\\n\\tif (builder.changed() || builder.impossible) {\\n\\t\\tconditionEntry {\\n\\t\\t\\toutput: builder.results(this.parser.pos),\\n\\t\\t\\timpossible: builder.impossible };\\n\\t}\\n\\treturn conditionEntry;\\n};\\n\\nfunction doubleLineBreakAtPos(parser) {\\n\\treturn !!$tw.utils.parseTokenRegExp(parser.source, parser.pos, /(^\\\\S\\\\n\\\\r*\\\\r?\\\\n(?:^\\\\S\\\\n\\\\r*\\\\r?\\\\n|$))/g);\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def/body.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def/body.js\,\text\:\/*\\\\\\n\\nTakes care of relinking the bodies of definitions.\\n\\n\\\\*/\\n\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils\\\);\\n\\nexports.name \\\body\\\;\\n\\nexports.report function(definition, callback, options) {\\n\\tvar handler getHandler(definition.type, definition.name);\\n\\tif (handler) {\\n\\t\\tvar newOptions Object.create(options);\\n\\t\\tvar entry handler.report(definition.body, function(title, blurb, style) {\\n\\t\\t\\tvar macroStr \\\\\\\\ + definition.type + + definition.name + ();\\n\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\tmacroStr + + blurb;\\n\\t\\t\\t}\\n\\t\\t\\tcallback(title, macroStr, style);\\n\\t\\t}, newOptions);\\n\\t}\\n};\\n\\nexports.relink function(definition, fromTitle, toTitle, options) {\\n\\tvar handler getHandler(definition.type, definition.name);\\n\\tvar results;\\n\\tif (handler) {\\n\\t\\tvar newOptions Object.create(options);\\n\\t\\tresults handler.relink(definition.body, fromTitle, toTitle, newOptions);\\n\\t\\tif (results && results.output) {\\n\\t\\t\\tdefinition.body results.output;\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\nfunction getHandler(macroType, macroName) {\\n\\tvar type;\\n\\tswitch (macroType) {\\n\\tcase \\\function\\\:\\n\\t\\ttype \\\filter\\\;\\n\\t\\tbreak;\\n\\tcase \\\define\\\:\\n\\t\\t/**This returns the handler to use for a macro\\n\\t\\t * By default, we treat them like wikitext, but Relink used to make\\n\\t\\t * little macros as placeholders. If we find one, we must return\\n\\t\\t * the correct handler for what that placeholder represented.\\n\\t\\t */\\n\\t\\tvar placeholder /^relink-(?:(\\\\w+)-)?\\\\d+$/.exec(macroName);\\n\\t\\t// normal macro or special placeholder?\\n\\t\\tif (placeholder) {\\n\\t\\t\\ttype placeholder1 || title;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\tdefault:\\n\\t\\ttype wikitext;\\n\\t}\\n\\treturn utils.getType(type);\\n};\\n\,\module-type\:\relinkdef\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def/substitution.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def/substitution.js\,\text\:\exports.name substitution;\\nvar subHandler require(\\\$:/plugins/flibbles/relink/js/utils/substitution.js\\\);\\n\\nexports.report function(definition, callback, options) {\\n\\tif (definition.type define) {\\n\\t\\tvar options Object.create(options);\\n\\t\\toptions.noFilterSubstitution true;\\n\\t\\tsubHandler.report(definition.body, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, \\\\\\\\define + definition.name + () + (blurb || ), style);\\n\\t\\t}, options);\\n\\t}\\n};\\n\\nexports.relink function(definition, fromTitle, toTitle, options) {\\n\\tvar results;\\n\\tif (definition.type \\\define\\\) {\\n\\t\\tvar options Object.create(options);\\n\\t\\toptions.noFilterSubstitution true;\\n\\t\\tresults subHandler.relink(definition.body, fromTitle, toTitle, options);\\n\\t\\tif (results && results.output) {\\n\\t\\t\\tdefinition.body results.output;\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\,\module-type\:\relinkdef\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/def.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nThis is a generic def rule that manages both fnprocdef and macrodef.\\n\\n\\\\*/\\n\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils\\\);\\nvar VariableContext utils.getContext(variable);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar defOperators utils.getModulesByTypeAsHashmap(relinkdef, name);\\n\\nexports.report function(text, callback, options) {\\n\\t// fnprocdef and macrodef have their own implementations of createDefinition\\n\\t// They create a modifiable object from the respective rule matches.\\n\\tvar definition this.createDefinition();\\n\\tvar setParseTreeNode this.parse();\\n\\tvar context this.parser.context new VariableContext(this.parser.context, setParseTreeNode0);\\n\\t// Parse set the pos pointer, but we dont want to skip the macro body.\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar endMatch getBodyMatch(this.parser.source, this.parser.pos, definition);\\n\\tif (endMatch) {\\n\\t\\tdefinition.body endMatch2;\\n\\t\\toptions.settings context\\n\\t\\tfor (var operator in defOperators) {\\n\\t\\t\\tdefOperatorsoperator.report(definition, callback, options);\\n\\t\\t}\\n\\t\\tthis.parser.pos endMatch.index + endMatch0.length;\\n\\t}\\n\\tcontext.parameterFocus false;\\n\\tcontext.placeholderList undefined;\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\t// fnprocdef and macrodef have their own implementations of createDefinition\\n\\t// They create a modifiable object from the respective rule matches.\\n\\tvar definition this.createDefinition();\\n\\tvar setParseTreeNode this.parse(),\\n\\t\\tentry,\\n\\t\\tcontext this.parser.context new VariableContext(this.parser.context, setParseTreeNode0);\\n\\t// Parse set the pos pointer, but we dont want to skip the macro body.\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar endMatch getBodyMatch(this.parser.source, this.parser.pos, definition);\\n\\tif (endMatch) {\\n\\t\\tdefinition.body endMatch2;\\n\\t\\toptions.settings context;\\n\\t\\tfor (var operator in defOperators) {\\n\\t\\t\\tvar result defOperatorsoperator.relink(definition, fromTitle, toTitle, options);\\n\\t\\t\\tif (result) {\\n\\t\\t\\t\\tentry entry || {};\\n\\t\\t\\t\\tif (result.output) {\\n\\t\\t\\t\\t\\tentry.output true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (result.impossible) {\\n\\t\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tthis.parser.pos endMatch.index + endMatch0.length;\\n\\t\\tif (entry && entry.output) {\\n\\t\\t\\tentry.output reassembleSignature(definition, this.match0) + endMatch1 + definition.body + endMatch0;\\n\\t\\t}\\n\\t}\\n\\tcontext.parameterFocus false;\\n\\tcontext.placeholderList undefined;\\n\\treturn entry;\\n};\\n\\nfunction reassembleSignature(definition, text) {\\n\\t// Reconstruct the definition. Might be tricky because we need to preserve whitespace within the parameters.\\n\\tvar builder new Rebuilder(text);\\n\\tbuilder.add(definition.type, 1, text.search(/^\\\\w\\\\\\\\/));\\n\\tvar pos builder.index;\\n\\tbuilder.add(definition.name, skipWhitespace(text, pos), text.indexOf((, pos));\\n\\tpos builder.index;\\n\\tif (definition.parameters) {\\n\\t\\tbuilder.add(definition.parameters, skipWhitespace(text, pos+1), text.indexOf()));\\n\\t}\\n\\treturn builder.results();\\n};\\n\\nfunction skipWhitespace(text, pos) {\\n\\treturn text.substr(pos).search(/\\\\S/)+pos;\\n};\\n\\n// Return another match for the body, but tooled uniquely\\n// m1 whitespace before body\\n// m2 body\\n// m.index + m0.length -> end of match\\nfunction getBodyMatch(text, pos, definition) {\\n\\tvar whitespace,\\n\\t\\tvalueRegExp;\\n\\tif (definition.multiline) {\\n\\t\\tvalueRegExp new RegExp(\\\\\\\\\\\r?\\\\\\\\n^\\\\\\\\S\\\\\\\\n\\\\\\\\r*\\\\\\\\\\\\\\\\end^\\\\\\\\S\\\\\\\\n\\\\\\\\r*(?:\\\ + $tw.utils.escapeRegExp(definition.name) + \\\)?(?:\\\\\\\\r?\\\\\\\\n|$)\\\, \\\mg\\\);\\n\\t\\twhitespace ;\\n\\t} else {\\n\\t\\tvalueRegExp /(?:\\\\r?\\\\n|$)/mg;\\n\\t\\tvar newPos $tw.utils.skipWhiteSpace(text, pos);\\n\\t\\twhitespace text.substring(pos, newPos);\\n\\t\\tpos newPos;\\n\\t}\\n\\tvalueRegExp.lastIndex pos;\\n\\tvar match valueRegExp.exec(text);\\n\\tif (match) {\\n\\t\\tmatch1 whitespace;\\n\\t\\tmatch2 text.substring(pos, match.index);\\n\\t}\\n\\treturn match;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement of filtered transclusions in wiki text like,\\n\\n{{{ tagdocs }}}\\n{{{ tagdocs |tooltip}}}\\n{{{ tagdocs ||TemplateTitle}}}\\n{{{ tagdocs |tooltip||TemplateTitle}}}\\n{{{ tagdocs }}width:40;height:50;}.class.class\\n\\nThis renames both the list and the template field.\\n\\n\\\\*/\\n\\nexports.name filteredtranscludeinline, filteredtranscludeblock;\\n\\nvar filterHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(filter);\\nvar utils require(\\\./utils.js\\\);\\n\\nexports.report function(text, callback, options) {\\n\\tvar m this.match,\\n\\t\\tfilter m1,\\n\\t\\ttemplate $tw.utils.trim(m3),\\n\\t\\tappend template ? || + template + }}} : }}};\\n\\tvar nestedOptions Object.create(options);\\n\\tnestedOptions.settings this.parser.context;\\n\\tfilterHandler.report(filter, function(title, blurb, style) {\\n\\t\\tcallback(title, {{{ + blurb + append, style);\\n\\t}, nestedOptions);\\n\\tif (template) {\\n\\t\\tcallback(template, {{{ + $tw.utils.trim(filter).replace(/\\\\r?\\\\n/mg, ) + ||}}});\\n\\t}\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar m this.match,\\n\\t\\tfilter m1,\\n\\t\\ttooltip m2,\\n\\t\\ttemplate m3,\\n\\t\\tstyle m4,\\n\\t\\tclasses m5,\\n\\t\\tparser this.parser,\\n\\t\\tentry {};\\n\\tparser.pos this.matchRegExp.lastIndex;\\n\\tvar modified false;\\n\\tvar nestedOptions Object.create(options);\\n\\tnestedOptions.settings this.parser.context;\\n\\tvar filterEntry filterHandler.relink(filter, fromTitle, toTitle, nestedOptions);\\n\\tif (filterEntry ! undefined) {\\n\\t\\tif (filterEntry.output) {\\n\\t\\t\\tfilter filterEntry.output;\\n\\t\\t\\tmodified true;\\n\\t\\t}\\n\\t\\tif (filterEntry.impossible) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\n\\tif ($tw.utils.trim(template) fromTitle) {\\n\\t\\t// preserves user-inputted whitespace\\n\\t\\ttemplate template.replace(fromTitle, toTitle);\\n\\t\\tmodified true;\\n\\t}\\n\\tif (!modified) {\\n\\t\\tif (!entry.impossible) {\\n\\t\\t\\treturn undefined;\\n\\t\\t}\\n\\t} else {\\n\\t\\tvar output this.makeFilteredtransclude(this.parser, filter, tooltip, template, style, classes);\\n\\t\\tif (output undefined) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t} else {\\n\\t\\t\\t// By copying over the ending newline of the original\\n\\t\\t\\t// text if present, thisrelink method thus works for\\n\\t\\t\\t// both the inline and block rule\\n\\t\\t\\tentry.output output + utils.getEndingNewline(m0);\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nexports.makeFilteredtransclude function(parser, filter, tooltip, template, style, classes) {\\n\\tif (canBePretty(filter) && canBePrettyTemplate(template)) {\\n\\t\\treturn prettyList(filter, tooltip, template, style, classes);\\n\\t}\\n\\tif (classes ! undefined) {\\n\\t\\tclasses classes.split(.).join( );\\n\\t}\\n\\treturn utils.makeWidget(parser, $list, {\\n\\t\\tfilter: filter,\\n\\t\\ttooltip: tooltip,\\n\\t\\ttemplate: template,\\n\\t\\tstyle: style || undefined,\\n\\t\\titemClass: classes});\\n};\\n\\nfunction prettyList(filter, tooltip, template, style, classes) {\\n\\tif (tooltip undefined) {\\n\\t\\ttooltip ;\\n\\t} else {\\n\\t\\ttooltip \\\|\\\ + tooltip;\\n\\t}\\n\\tif (template undefined) {\\n\\t\\ttemplate ;\\n\\t} else {\\n\\t\\ttemplate \\\||\\\ + template;\\n\\t}\\n\\tif (classes undefined) {\\n\\t\\tclasses ;\\n\\t} else {\\n\\t\\tclasses \\\.\\\ + classes;\\n\\t}\\n\\tstyle style || ;\\n\\treturn \\\{{{\\\+filter+tooltip+template+\\\}}\\\+style+\\\}\\\+classes;\\n};\\n\\nfunction canBePretty(filter) {\\n\\treturn filter.indexOf(|) \u003C 0 && filter.indexOf(}}) \u003C 0;\\n};\\n\\nfunction canBePrettyTemplate(template) {\\n\\treturn !template || (\\n\\t\\ttemplate.indexOf(|) \u003C 0\\n\\t\\t&& template.indexOf({) \u003C 0\\n\\t\\t&& template.indexOf(}) \u003C 0);\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/fnprocdef.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/fnprocdef.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles pragma function/procedure/widget definitions.\\n\\n\\\\*/\\n\\n// We inherit from DefRule\\nvar DefRule require(./def.js);\\n$tw.utils.extend(exports, DefRule);\\n\\nexports.name \\\fnprocdef\\\;\\n\\nexports.createDefinition function() {\\n\\tvar m this.match;\\n\\treturn {\\n\\t\\ttype: m1,\\n\\t\\tname: m2,\\n\\t\\tparameters: m4,\\n\\t\\tmultiline: m5};\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/fields.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/fields.js\,\text\:\/*\\\\ \\nHandles replacement in widgets which allow arbitrary attributes that\\ncorrespond to tiddler fields.\\n\\n\\\\*/\\n\\nexports.name \\\fields\\\;\\n\\nexports.getHandler function(element, attribute, options) {\\n\\tvar regexp options.settings.getConfig(\\\fieldattributes\\\)element.tag;\\n\\tif (regexp) {\\n\\t\\tvar results regexp.exec(attribute.name);\\n\\t\\tif (results && results0 attribute.name) {\\n\\t\\t\\treturn options.settings.getFields()results1;\\n\\t\\t}\\n\\t}\\n};\\n\,\module-type\:\relinkhtmlattributes\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/macrocall.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/macrocall.js\,\text\:\/*\\\\\\n\\nHandles replacement in $macrocall widgets\\n\\n\\\\*/\\n\\nexports.name \\\macrocall\\\;\\n\\nexports.getHandler function(element, attribute, options) {\\n\\tif (element.tag \\\$macrocall\\\) {\\n\\t\\tvar nameAttr element.attributes\\\$name\\\;\\n\\t\\tif (nameAttr) {\\n\\t\\t\\tvar setting options.settings.getMacro(nameAttr.value);\\n\\t\\t\\treturn setting && settingattribute.name;\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.formBlurb function(element, attribute, blurb, options) {\\n\\tvar nameAttr element.attributes\\\$name\\\;\\n\\tvar newBlurb \u003C + nameAttr.value + + attribute.name;\\n\\tif (blurb) {\\n\\t\\tnewBlurb + + blurb;\\n\\t}\\n\\treturn newBlurb;\\n};\\n\,\module-type\:\relinkhtmlattributes\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/sendmessage.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/sendmessage.js\,\text\:\/*\\\\ \\nHandles replacement in $action-sendmessage widgets\\n\\n\\\\*/\\n\\nexports.name \\\sendmessage\\\;\\n\\nexports.getHandler function(element, attribute, options) {\\n\\tif (element.tag \\\$action-sendmessage\\\\\n\\t&& attribute.name0 ! \\\$\\\) {\\n\\t\\tvar messageAttr element.attributes$message;\\n\\t\\tif (messageAttr) {\\n\\t\\t\\tvar regexp options.settings.getConfig(\\\messages\\\)messageAttr.value;\\n\\t\\t\\tif (regexp) {\\n\\t\\t\\t\\tvar results regexp.exec(attribute.name);\\n\\t\\t\\t\\tif (results && results0 attribute.name) {\\n\\t\\t\\t\\t\\treturn options.settings.getFields()results1;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.formBlurb function(element, attribute, blurb, options) {\\n\\tvar messageAttr element.attributes$message;\\n\\tvar newBlurb $action-sendmessage + messageAttr.value + + attribute.name;\\n\\tif (blurb) {\\n\\t\\tnewBlurb + + blurb;\\n\\t}\\n\\treturn newBlurb;\\n};\\n\,\module-type\:\relinkhtmlattributes\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/transclude.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/transclude.js\,\text\:\/*\\\\\\n\\nHandles replacement in $transclude widgets\\n\\n\\\\*/\\n\\nexports.name \\\transclude\\\;\\n\\nexports.getHandler function(element, attribute, options) {\\n\\tif (element.tag \\\$transclude\\\) {\\n\\t\\tvar name attribute.name;\\n\\t\\tif (name0 $) {\\n\\t\\t\\tif (name1 $) {\\n\\t\\t\\t\\tname name.substr(1);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// This is a reserved attribute\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar nameAttr element.attributes\\\$variable\\\;\\n\\t\\tif (nameAttr) {\\n\\t\\t\\tvar setting options.settings.getMacro(nameAttr.oldValue || nameAttr.value);\\n\\t\\t\\treturn setting && settingname;\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.formBlurb function(element, attribute, blurb, options) {\\n\\tvar nameAttr element.attributes\\\$variable\\\;\\n\\tvar name attribute.name;\\n\\tif (name0 $) {\\n\\t\\tname name.substr(1);\\n\\t}\\n\\tvar newBlurb \u003C + nameAttr.value + + name;\\n\\tif (blurb) {\\n\\t\\tnewBlurb + + blurb;\\n\\t}\\n\\treturn newBlurb;\\n};\\n\,\module-type\:\relinkhtmlattributes\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/whitelist.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes/whitelist.js\,\text\:\/*\\\\ \\n\\nHandles replacement of widget attributes that are specified in the whitelist.\\n\\n\\\\*/\\n\\nexports.name \\\whitelist\\\;\\n\\nexports.getHandler function(element, attribute, options) {\\n\\tvar setting options.settings.getAttribute(element.tag);\\n\\treturn setting && settingattribute.name;\\n};\\n\,\module-type\:\relinkhtmlattributes\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/attributes.js\,\text\:\/*\\\\\\n\\nHandles all element attribute values. Most widget relinking happens here.\\n\\n\\\\*/\\n\\nuse strict;\\n\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\nvar utils require(../utils.js);\\nvar refHandler relinkUtils.getType(reference);\\nvar filterHandler relinkUtils.getType(filter);\\nvar macrocall require(\\\$:/plugins/flibbles/relink/js/utils/macrocall.js\\\);\\nvar substitution require(\\\$:/plugins/flibbles/relink/js/utils/substitution.js\\\);\\nvar attributeOperators relinkUtils.getModulesByTypeAsHashmap(relinkhtmlattributes, name);\\n\\nexports.name \\\attributes\\\;\\n\\nexports.report function(element, parser, callback, options) {\\n\\tfor (var attributeName in element.attributes) {\\n\\t\\tvar attr element.attributesattributeName;\\n\\t\\tvar nextEql parser.source.indexOf(, attr.start);\\n\\t\\t// This is the rare case of changing tiddler\\n\\t\\t// \\\true\\\ to something else when \\\true\\\ is\\n\\t\\t// implicit, like \u003C$link to /> We ignore those.\\n\\t\\tif (nextEql \u003C 0 || nextEql > attr.end) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tswitch (attr.type) {\\n\\t\\tcase \\\string\\\:\\n\\t\\t\\tfor (var operatorName in attributeOperators) {\\n\\t\\t\\t\\tvar operator attributeOperatorsoperatorName;\\n\\t\\t\\t\\tvar handler operator.getHandler(element, attr, options);\\n\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\thandler.report(attr.value, function(title, blurb, style) {\\n\\t\\t\\t\\t\\t\\tif (operator.formBlurb) {\\n\\t\\t\\t\\t\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\t\\t\\t\\t\\tblurb \\\ + blurb + \\\;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\tcallback(title, operator.formBlurb(element, attr, blurb, options), style);\\n\\t\\t\\t\\t\\t\\t} else if (blurb) {\\n\\t\\t\\t\\t\\t\\t\\tcallback(title, element.tag + + attributeName + \\\ + blurb + \\\, style);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tcallback(title, element.tag + + attributeName, style);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}, options);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\indirect\\\:\\n\\t\\t\\trefHandler.report(attr.textReference, function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, element.tag + + attributeName + {{ + (blurb || ) + }}, style);\\n\\t\\t\\t}, options);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\filtered\\\:\\n\\t\\t\\tfilterHandler.report(attr.filter, function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, element.tag + + attributeName + {{{ + blurb + }}}, style);\\n\\t\\t\\t}, options);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\macro\\\:\\n\\t\\t\\tvar macro attr.value;\\n\\t\\t\\tmacrocall.report(options.settings, macro, function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, element.tag + + attributeName + \u003C\u003C + blurb + >>, style);\\n\\t\\t\\t}, options);\\n\\t\\t\\tbreak;\\n\\t\\tcase \\\substituted\\\:\\n\\t\\t\\tsubstitution.report(attr.rawValue, function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, element.tag + + attributeName + ` + blurb + `, style);\\n\\t\\t\\t}, options);\\n\\t\\t\\tfor (var operatorName in attributeOperators) {\\n\\t\\t\\t\\tvar operator attributeOperatorsoperatorName;\\n\\t\\t\\t\\tvar handler operator.getHandler(element, attr, options);\\n\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\thandler.report(attr.rawValue, function(title, blurb, style) {\\n\\t\\t\\t\\t\\t\\t// Only consider titles without substitutions.\\n\\t\\t\\t\\t\\t\\tif (!utils.containsPlaceholders(title)) {\\n\\t\\t\\t\\t\\t\\t\\tblurb (utils.containsPlaceholders(attr.rawValue) || blurb)? ` + blurb + `: ;\\n\\t\\t\\t\\t\\t\\t\\tif (operator.formBlurb) {\\n\\t\\t\\t\\t\\t\\t\\t\\tblurb operator.formBlurb(element, attr, blurb, options);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tblurb + blurb;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\tblurb element.tag + + attributeName + blurb;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\tcallback(title, blurb, style);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}, options);\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.relink function(element, parser, fromTitle, toTitle, options) {\\n\\tvar changed undefined, impossible undefined;\\n\\tfor (var attributeName in element.attributes) {\\n\\t\\tvar attr element.attributesattributeName;\\n\\t\\tvar nextEql parser.source.indexOf(, attr.start);\\n\\t\\t// This is the rare case of changing tiddler\\n\\t\\t// \\\true\\\ to something else when \\\true\\\ is\\n\\t\\t// implicit, like \u003C$link to /> We ignore those.\\n\\t\\tif (nextEql \u003C 0 || nextEql > attr.end) {\\n\\t\\t\\tattr.valueless true;\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tvar entry undefined;\\n\\t\\tswitch (attr.type) {\\n\\t\\tcase substituted:\\n\\t\\t\\tif (utils.containsPlaceholders(attr.rawValue)) {\\n\\t\\t\\t\\tvar subEntry substitution.relink(attr.rawValue, fromTitle, toTitle, options);\\n\\t\\t\\t\\tif (subEntry) {\\n\\t\\t\\t\\t\\tif (subEntry.output) {\\n\\t\\t\\t\\t\\t\\tattr.rawValue subEntry.output;\\n\\t\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (subEntry.impossible) {\\n\\t\\t\\t\\t\\t\\timpossible true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (!utils.containsPlaceholders(fromTitle)) {\\n\\t\\t\\t\\t\\tfor (var operatorName in attributeOperators) {\\n\\t\\t\\t\\t\\t\\tvar operator attributeOperatorsoperatorName;\\n\\t\\t\\t\\t\\t\\tvar handler operator.getHandler(element, attr, options);\\n\\t\\t\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\t\\t\\tentry handler.relink(attr.rawValue, fromTitle, toTitle, options);\\n\\t\\t\\t\\t\\t\\t\\tif (entry && entry.output) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif (utils.containsPlaceholders(toTitle)) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// If we relinked, but the toTitle cant be in\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t// a substitution, then we must fail instead.\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tattr.rawValue entry.output;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tattr.handler handler.name;\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\t// no break. turn it into a string and try to work with it\\n\\t\\t\\tattr.value attr.rawValue;\\n\\t\\tcase string:\\n\\t\\t\\tfor (var operatorName in attributeOperators) {\\n\\t\\t\\t\\tvar operator attributeOperatorsoperatorName;\\n\\t\\t\\t\\tvar handler operator.getHandler(element, attr, options);\\n\\t\\t\\t\\tif (handler) {\\n\\t\\t\\t\\t\\tentry handler.relink(attr.value, fromTitle, toTitle, options);\\n\\t\\t\\t\\t\\tif (entry && entry.output) {\\n\\t\\t\\t\\t\\t\\tattr.oldValue attr.value;\\n\\t\\t\\t\\t\\t\\tattr.value entry.output;\\n\\t\\t\\t\\t\\t\\tattr.handler handler.name;\\n\\t\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t\\t\\t// Change it into a string if this was a substitution that had no substitutions\\n\\t\\t\\t\\t\\t\\tattr.type string;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase indirect:\\n\\t\\t\\tentry refHandler.relinkInBraces(attr.textReference, fromTitle, toTitle, options);\\n\\t\\t\\tif (entry && entry.output) {\\n\\t\\t\\t\\tattr.textReference entry.output;\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase filtered:\\n\\t\\t\\tentry filterHandler.relinkInBraces(attr.filter, fromTitle, toTitle, options);\\n\\t\\t\\tif (entry && entry.output) {\\n\\t\\t\\t\\tattr.filter entry.output;\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\tcase macro:\\n\\t\\t\\tvar macro attr.value;\\n\\t\\t\\tentry macrocall.relink(options.settings, macro, parser.source, fromTitle, toTitle, false, options);\\n\\t\\t\\tif (entry && entry.output) {\\n\\t\\t\\t\\tattr.output macrocall.reassemble(entry, parser.source, options);\\n\\t\\t\\t\\tattr.value entry.output;\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tif (entry && entry.impossible) {\\n\\t\\t\\timpossible true;\\n\\t\\t}\\n\\t}\\n\\tif (changed || impossible) {\\n\\t\\treturn {output: changed, impossible: impossible};\\n\\t}\\n};\\n\,\module-type\:\relinkhtml\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/importvariables.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/importvariables.js\,\text\:\/*\\\\\\n\\nHandles state updating required for $importvariables widgets\\n\\n\\\\*/\\n\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\nvar ImportContext relinkUtils.getContext(import);\\n\\nexports.name \\\importvariables\\\;\\n\\nexports.report function(element, parser, callback, options) {\\n\\tif (element.tag \\\$importvariables\\\) {\\n\\t\\tprocessImport(element, parser, options);\\n\\t}\\n};\\n\\nexports.relink function(element, parser, fromTitle, toTitle, options) {\\n\\tif (element.tag \\\$importvariables\\\) {\\n\\t\\tprocessImport(element, parser, options);\\n\\t}\\n};\\n\\nfunction processImport(element, parser, options) {\\n\\tvar importFilterAttr element.attributes.filter;\\n\\tif (importFilterAttr) {\\n\\t\\tprocessImportFilter(parser, importFilterAttr, options);\\n\\t}\\n};\\n\\n// This processes a \u003C$importvariables> filter attribute and adds any new\\n// variables to our parser.\\nfunction processImportFilter(parser, importAttribute, options) {\\n\\tif (typeof importAttribute \\\string\\\) {\\n\\t\\t// It was changed. Reparse it. Itll be a quoted\\n\\t\\t// attribute value. Add a dummy attribute name.\\n\\t\\timportAttribute $tw.utils.parseAttribute(\\\p\\\+importAttribute, 0)\\n\\t}\\n\\tvar context parser.context;\\n\\tvar importFilter computeAttribute(context, importAttribute, options);\\n\\tparser.context new ImportContext(options.wiki, context, importFilter);\\n};\\n\\nfunction computeAttribute(context, attribute, options) {\\n\\tvar value;\\n\\tif(attribute.type \\\filtered\\\) {\\n\\t\\tvar parentWidget context.widget;\\n\\t\\tvalue options.wiki.filterTiddlers(attribute.filter,parentWidget)0 || \\\\\\;\\n\\t} else if(attribute.type \\\indirect\\\) {\\n\\t\\tvar parentWidget context.widget;\\n\\t\\tvalue options.wiki.getTextReference(attribute.textReference,\\\\\\,parentWidget.variables.currentTiddler.value);\\n\\t} else if(attribute.type \\\macro\\\) {\\n\\t\\tvar parentWidget context.widget;\\n\\t\\tvalue parentWidget.getVariable(attribute.value.name,{params: attribute.value.params});\\n\\t} else { // String attribute\\n\\t\\tvalue attribute.value;\\n\\t}\\n\\treturn value;\\n};\\n\,\module-type\:\relinkhtml\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/parameters.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html/parameters.js\,\text\:\/*\\\\\\n\\nHandles replacement in $macrocall widgets\\n\\n\\\\*/\\n\\nexports.name \\\parameters\\\;\\n\\nexports.report function(element, parser, callback, options) {\\n\\tif (element.tag \\\$parameters\\\) {\\n\\t\\tprocessParameters(element, parser, options);\\n\\t}\\n};\\n\\nexports.relink function(element, parser, fromTitle, toTitle, options) {\\n\\tif (element.tag \\\$parameters\\\) {\\n\\t\\tprocessParameters(element, parser, options);\\n\\t}\\n};\\n\\nfunction processParameters(element, parser, options) {\\n\\tvar attributes element.orderedAttributes;\\n\\tvar index 0;\\n\\tfor (var i 0; i \u003C attributes.length; i++) {\\n\\t\\tvar attribute attributesi.name;\\n\\t\\tif (attribute0 $) {\\n\\t\\t\\tif (attribute1 $) {\\n\\t\\t\\t\\tattribute attribute.substr(1);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tparser.context.addParameter(attribute);\\n\\t\\t++index;\\n\\t}\\n};\\n\,\module-type\:\relinkhtml\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement in attributes of widgets and html elements\\nThis is configurable to select exactly which attributes of which elements\\nshould be changed.\\n\\n\u003C$link to\\\TiddlerTitle\\\ />\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\nvar htmlOperators relinkUtils.getModulesByTypeAsHashmap(relinkhtml, name);\\n\\nexports.name \\\html\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar element this.nextTag.tag;\\n\\tvar nestedOptions Object.create(options);\\n\\tnestedOptions.settings this.parser.context;\\n\\tfor (var operator in htmlOperators) {\\n\\t\\thtmlOperatorsoperator.report(this.nextTag, this.parser, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, \u003C + blurb + />, style);\\n\\t\\t}, nestedOptions);\\n\\t}\\n\\tthis.parse();\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar widgetEntry {};\\n\\twidgetEntry.attributes Object.create(null);\\n\\twidgetEntry.element this.nextTag.tag;\\n\\tvar elem this.nextTag;\\n\\tvar originalTag elem.tag;\\n\\tvar changed false;\\n\\tvar nestedOptions Object.create(options);\\n\\tnestedOptions.settings this.parser.context;\\n\\tfor (var operator in htmlOperators) {\\n\\t\\tvar entry htmlOperatorsoperator.relink(elem, this.parser, fromTitle, toTitle, nestedOptions);\\n\\t\\tif (entry) {\\n\\t\\t\\tif (entry.output) {\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t\\tif (entry.impossible) {\\n\\t\\t\\t\\twidgetEntry.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t// We swap in the original tag in case it changed. We need the old tag\\n\\t// to find the proper closing tag. Parsing must come after the htmlmodules\\n\\t// because those might change the context for the inner body.\\n\\tvar newTag elem.tag;\\n\\telem.tag originalTag;\\n\\tvar tag this.parse()0;\\n\\tif (tag.children) {\\n\\t\\tfor (var i 0; i \u003C tag.children.length; i++) {\\n\\t\\t\\tvar child tag.childreni;\\n\\t\\t\\tif (child.output) {\\n\\t\\t\\t\\tchanged true;\\n\\t\\t\\t}\\n\\t\\t\\tif (child.impossible) {\\n\\t\\t\\t\\twidgetEntry.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tif (changed) {\\n\\t\\tvar builder new Rebuilder(text, elem.start);\\n\\t\\tbuilder.add(newTag, elem.start+1, getEndOfTag(elem, text));\\n\\t\\tfor (var attributeName in elem.attributes) {\\n\\t\\t\\tvar attr elem.attributesattributeName;\\n\\t\\t\\tvar quotedValue;\\n\\t\\t\\tswitch (attr.type) {\\n\\t\\t\\tcase string:\\n\\t\\t\\t\\tif (attr.valueless) {\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tvar quote relinkUtils.determineQuote(text, attr);\\n\\t\\t\\t\\tquotedValue utils.wrapAttributeValue(attr.value, quote)\\n\\t\\t\\t\\tif (quotedValue undefined) {\\n\\t\\t\\t\\t\\twidgetEntry.impossible true;\\n\\t\\t\\t\\t\\tcontinue;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase indirect:\\n\\t\\t\\t\\tquotedValue \\\{{\\\ + attr.textReference + \\\}}\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase filtered:\\n\\t\\t\\t\\tquotedValue \\\{{{\\\ + attr.filter + \\\}}}\\\;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase macro:\\n\\t\\t\\t\\tif (attr.output) {\\n\\t\\t\\t\\t\\tquotedValue attr.output;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tquotedValue undefined;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// Else If output isnt set, this wasnt ever changed\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\tcase substituted:\\n\\t\\t\\t\\tvar ticIndex attr.rawValue.lastIndexOf(\\\`\\\);\\n\\t\\t\\t\\tif (ticIndex \u003C 0) {\\n\\t\\t\\t\\t\\tquotedValue \\\`\\\ + attr.rawValue + \\\`\\\;\\n\\t\\t\\t\\t} else if (ticIndex \u003C attr.rawValue.length-1\\n\\t\\t\\t\\t\\t\\t&& attr.rawValue.indexOf(\\\```\\\) \u003C 0) {\\n\\t\\t\\t\\t\\tquotedValue \\\```\\\ + attr.rawValue + \\\```\\\;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t// We cant have a tic at the end; cant have triple tic.\\n\\t\\t\\t\\t\\twidgetEntry.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t\\tvar ptr attr.start;\\n\\t\\t\\tptr $tw.utils.skipWhiteSpace(text, ptr);\\n\\t\\t\\tif (attributeName ! attr.name) {\\n\\t\\t\\t\\t// Ooh, the attribute name changed\\n\\t\\t\\t\\tbuilder.add(attr.name, ptr, ptr + attributeName.length);\\n\\t\\t\\t}\\n\\t\\t\\tif (quotedValue) {\\n\\t\\t\\t\\t// We have a new attribute value\\n\\t\\t\\t\\tptr + attributeName.length;\\n\\t\\t\\t\\tptr $tw.utils.skipWhiteSpace(text, ptr);\\n\\t\\t\\t\\tptr++; // For the equals\\n\\t\\t\\t\\tptr $tw.utils.skipWhiteSpace(text, ptr);\\n\\t\\t\\t\\tbuilder.add(quotedValue, ptr, attr.end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (tag.children) {\\n\\t\\t\\tfor (var i 0; i \u003C tag.children.length; i++) {\\n\\t\\t\\t\\tvar child tag.childreni;\\n\\t\\t\\t\\tif (child.output) {\\n\\t\\t\\t\\t\\tbuilder.add(child.output, child.start, child.end);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tvar closingTag \u003C/ + elem.tag + >;\\n\\t\\tvar startClosingTag this.parser.pos - closingTag.length;\\n\\t\\tif (text.substring(startClosingTag, this.parser.pos) closingTag) {\\n\\t\\t\\t// Replace the closing tag in case the tag changed.\\n\\t\\t\\tbuilder.add(newTag, startClosingTag + 2, this.parser.pos-1);\\n\\t\\t}\\n\\t\\twidgetEntry.output builder.results(this.parser.pos);\\n\\t}\\n\\tif (widgetEntry.output || widgetEntry.impossible) {\\n\\t\\treturn widgetEntry;\\n\\t}\\n\\treturn undefined;\\n};\\n\\nfunction getEndOfTag(element, text) {\\n\\tvar regExp /^a-zA-Z\\\\-\\\\$\\\\./g;\\n\\tregExp.lastIndex element.start+1;\\n\\tvar match regExp.exec(text);\\n\\treturn match.index;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/image.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/image.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement in wiki text inline rules, like,\\n\\nimgtiddler.jpg\\n\\nimg width23 height24 Description|tiddler.jpg\\n\\n\\\\*/\\n\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar refHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/reference\\\);\\nvar filterHandler require(\\\$:/plugins/flibbles/relink/js/utils\\\).getType(filter);\\nvar macrocall require(\\\./macrocall.js\\\);\\nvar utils require(\\\./utils.js\\\);\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nexports.name \\\image\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar ptr this.nextImage.start + 4; //img\\n\\tvar inSource false;\\n\\tfor (var attributeName in this.nextImage.attributes) {\\n\\t\\tvar attr this.nextImage.attributesattributeName;\\n\\t\\tif (attributeName \\\source\\\ || attributeName \\\tooltip\\\) {\\n\\t\\t\\tif (inSource) {\\n\\t\\t\\t\\tptr text.indexOf(|, ptr);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tptr text.indexOf(, ptr);\\n\\t\\t\\t\\tinSource true;\\n\\t\\t\\t}\\n\\t\\t\\tptr + 1;\\n\\t\\t}\\n\\t\\tif (attributeName \\\source\\\) {\\n\\t\\t\\tvar tooltip this.nextImage.attributes.tooltip;\\n\\t\\t\\tvar blurb img + (tooltip ? tooltip.value : ) + ;\\n\\t\\t\\tcallback(attr.value, blurb);\\n\\t\\t\\tptr text.indexOf(attr.value, ptr);\\n\\t\\t\\tptr text.indexOf(, ptr) + 2;\\n\\t\\t} else if (attributeName ! \\\tooltip\\\) {\\n\\t\\t\\tptr reportAttribute(this.parser, attr, callback, options);\\n\\t\\t}\\n\\t}\\n\\tthis.parser.pos ptr;\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar ptr this.nextImage.start,\\n\\t\\tbuilder new Rebuilder(text, ptr),\\n\\t\\tmakeWidget false,\\n\\t\\tskipSource false,\\n\\t\\timageEntry;\\n\\tif (this.nextImage.attributes.source.value fromTitle && !canBePretty(toTitle, this.nextImage.attributes.tooltip)) {\\n\\t\\tif (this.parser.context.allowWidgets() && utils.wrapAttributeValue(toTitle)) {\\n\\t\\t\\tmakeWidget true;\\n\\t\\t\\tbuilder.add(\\\\u003C$image\\\, ptr, ptr+4);\\n\\t\\t} else {\\n\\t\\t\\t// We wont be able to make a wdget to replace\\n\\t\\t\\t// the source attribute. We check now so we dont\\n\\t\\t\\t// prematurely convert into a widget.\\n\\t\\t\\t// Keep going in case other attributes need replacing.\\n\\t\\t\\tskipSource true;\\n\\t\\t}\\n\\t}\\n\\tptr + 4; //img\\n\\tvar inSource false;\\n\\tfor (var attributeName in this.nextImage.attributes) {\\n\\t\\tvar attr this.nextImage.attributesattributeName;\\n\\t\\tif (attributeName \\\source\\\ || attributeName \\\tooltip\\\) {\\n\\t\\t\\tif (inSource) {\\n\\t\\t\\t\\tptr text.indexOf(|, ptr);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tptr text.indexOf(, ptr);\\n\\t\\t\\t\\tinSource true;\\n\\t\\t\\t}\\n\\t\\t\\tif (makeWidget) {\\n\\t\\t\\t\\tif (\\\ \\\\t\\\\n\\\.indexOf(textptr-1) > 0) {\\n\\t\\t\\t\\t\\tbuilder.add(, ptr, ptr+1);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tbuilder.add( , ptr, ptr+1);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tptr + 1;\\n\\t\\t}\\n\\t\\tif (attributeName \\\source\\\) {\\n\\t\\t\\tptr text.indexOf(attr.value, ptr);\\n\\t\\t\\tif (attr.value fromTitle) {\\n\\t\\t\\t\\tif (makeWidget) {\\n\\t\\t\\t\\t\\tvar quotedValue utils.wrapAttributeValue(toTitle);\\n\\t\\t\\t\\t\\tif (quotedValue undefined) {\\n\\t\\t\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tbuilder.add(\\\source\\\+quotedValue, ptr, ptr+fromTitle.length);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else if (!skipSource) {\\n\\t\\t\\t\\t\\tbuilder.add(toTitle, ptr, ptr+fromTitle.length);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tptr text.indexOf(, ptr);\\n\\t\\t\\tif (makeWidget) {\\n\\t\\t\\t\\tbuilder.add(\\\/>\\\, ptr, ptr+2);\\n\\t\\t\\t}\\n\\t\\t\\tptr + 2;\\n\\t\\t} else if (attributeName \\\tooltip\\\) {\\n\\t\\t\\tif (makeWidget) {\\n\\t\\t\\t\\tptr text.indexOf(attr.value, ptr);\\n\\t\\t\\t\\tvar quotedValue utils.wrapAttributeValue(attr.value);\\n\\t\\t\\t\\tbuilder.add(\\\tooltip\\\+quotedValue, ptr, ptr+attr.value.length);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tptr relinkAttribute(this.parser, attr, builder, fromTitle, toTitle, options);\\n\\t\\t}\\n\\t}\\n\\tthis.parser.pos ptr;\\n\\tif (builder.changed() || builder.impossible) {\\n\\t\\timageEntry {\\n\\t\\t\\toutput: builder.results(ptr),\\n\\t\\t\\timpossible: builder.impossible };\\n\\t}\\n\\treturn imageEntry;\\n};\\n\\nfunction reportAttribute(parser, attribute, callback, options) {\\n\\tvar text parser.source;\\n\\tvar ptr text.indexOf(attribute.name, attribute.start);\\n\\tvar end;\\n\\tptr + attribute.name.length;\\n\\tptr text.indexOf(, ptr);\\n\\tif (attribute.type \\\string\\\) {\\n\\t\\tptr text.indexOf(attribute.value, ptr)\\n\\t\\tvar quote relinkUtils.determineQuote(text, attribute);\\n\\t\\t// ignore first quote. We already passed it\\n\\t\\tend ptr + quote.length + attribute.value.length;\\n\\t} else if (attribute.type \\\indirect\\\) {\\n\\t\\tptr text.indexOf({{, ptr);\\n\\t\\tvar end ptr + attribute.textReference.length + 4;\\n\\t\\trefHandler.report(attribute.textReference, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, img + attribute.name + {{ + (blurb || ) + }}, style);\\n\\t\\t}, options);\\n\\t} else if (attribute.type \\\filtered\\\) {\\n\\t\\tptr text.indexOf({{{, ptr);\\n\\t\\tvar end ptr + attribute.filter.length + 6;\\n\\t\\tfilterHandler.report(attribute.filter, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, img + attribute.name + {{{ + blurb + }}}, style);\\n\\t\\t}, options);\\n\\t} else if (attribute.type \\\macro\\\) {\\n\\t\\tptr text.indexOf(\\\\u003C\u003C\\\, ptr);\\n\\t\\tvar end attribute.value.end;\\n\\t\\tvar macro attribute.value;\\n\\t\\tvar oldValue attribute.value;\\n\\t\\tmacrocall.reportAttribute(parser, macro, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, img + attribute.name + + blurb + , style);\\n\\t\\t}, options);\\n\\t}\\n\\treturn end;\\n};\\n\\nfunction relinkAttribute(parser, attribute, builder, fromTitle, toTitle, options) {\\n\\tvar text builder.text;\\n\\tvar ptr text.indexOf(attribute.name, attribute.start);\\n\\tvar end;\\n\\tptr + attribute.name.length;\\n\\tptr text.indexOf(, ptr);\\n\\tif (attribute.type \\\string\\\) {\\n\\t\\tptr text.indexOf(attribute.value, ptr)\\n\\t\\tvar quote relinkUtils.determineQuote(text, attribute);\\n\\t\\t// ignore first quote. We already passed it\\n\\t\\tend ptr + quote.length + attribute.value.length;\\n\\t} else if (attribute.type \\\indirect\\\) {\\n\\t\\tptr text.indexOf({{, ptr);\\n\\t\\tvar end ptr + attribute.textReference.length + 4;\\n\\t\\tvar ref refHandler.relinkInBraces(attribute.textReference, fromTitle, toTitle, options);\\n\\t\\tif (ref) {\\n\\t\\t\\tif (ref.impossible) {\\n\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (ref.output) {\\n\\t\\t\\t\\tbuilder.add(\\\{{\\\+ref.output+\\\}}\\\, ptr, end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else if (attribute.type \\\filtered\\\) {\\n\\t\\tptr text.indexOf({{{, ptr);\\n\\t\\tvar end ptr + attribute.filter.length + 6;\\n\\t\\tvar filter filterHandler.relinkInBraces(attribute.filter, fromTitle, toTitle, options);\\n\\t\\tif (filter ! undefined) {\\n\\t\\t\\tif (filter.impossible) {\\n\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (filter.output) {\\n\\t\\t\\t\\tvar quoted \\\{{{\\\+filter.output+\\\}}}\\\;\\n\\t\\t\\t\\tbuilder.add(quoted, ptr, end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t} else if (attribute.type \\\macro\\\) {\\n\\t\\tptr text.indexOf(\\\\u003C\u003C\\\, ptr);\\n\\t\\tvar end attribute.value.end;\\n\\t\\tvar macro attribute.value;\\n\\t\\tvar oldValue attribute.value;\\n\\t\\tvar macroEntry macrocall.relinkAttribute(parser, macro, text, fromTitle, toTitle, options);\\n\\t\\tif (macroEntry ! undefined) {\\n\\t\\t\\tif (macroEntry.impossible) {\\n\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (macroEntry.output) {\\n\\t\\t\\t\\tbuilder.add(macroEntry.output, ptr, end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn end;\\n};\\n\\nfunction canBePretty(title, tooltip) {\\n\\treturn title.indexOf() \u003C 0 && (tooltip || title.indexOf(|) \u003C 0);\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles import pragmas\\n\\n\\\\import tagMyTiddler\\n\\\\*/\\n\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils.js\\\);\\nvar filterRelinker utils.getType(filter);\\nvar ImportContext utils.getContext(import);\\n\\nexports.name \\\import\\\;\\n\\nexports.report function(text, callback, options) {\\n\\t// This moves the pos for us\\n\\tvar parseTree this.parse();\\n\\tvar filter parseTree0.attributes.filter.value || ;\\n\\tfilterRelinker.report(filter, function(title, blurb, style) {\\n\\t\\tif (blurb) {\\n\\t\\t\\tblurb \\\\\\\\import + blurb;\\n\\t\\t} else {\\n\\t\\t\\tblurb \\\\\\\\import;\\n\\t\\t}\\n\\t\\tcallback(title, blurb, style);\\n\\t}, options);\\n\\t// Before we go, we need to actually import the variables\\n\\t// its calling for, and any /relink pragma\\n\\toptions.settings this.parser.context new ImportContext(options.wiki, this.parser.context, filter);\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\t// In this one case, Ill let the parser parse out the filter and move\\n\\t// the ptr.\\n\\tvar start this.matchRegExp.lastIndex,\\n\\t\\tparseTree this.parse(),\\n\\t\\tfilter parseTree0.attributes.filter.value || ,\\n\\t\\tentry filterRelinker.relink(filter, fromTitle, toTitle, options);\\n\\tif (entry ! undefined && entry.output) {\\n\\t\\tvar newline text.substring(start+filter.length, this.parser.pos);\\n\\t\\tfilter entry.output;\\n\\t\\tentry.output \\\\\\\\\\\import \\\ + filter + newline;\\n\\t}\\n\\n\\t// Before we go, we need to actually import the variables\\n\\t// its calling for, and any /relink pragma\\n\\toptions.settings this.parser.context new ImportContext(options.wiki, this.parser.context, filter);\\n\\n\\treturn entry;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles macro calls.\\n\\n\u003C\u003CmyMacro MyFilter myTitle>>\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\nvar macrocall require($:/plugins/flibbles/relink/js/utils/macrocall.js);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar EntryNode require($:/plugins/flibbles/relink/js/utils/entry);\\n\\nexports.name \\\macrocallinline\\\, \\\macrocallblock\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar macroInfo getInfoFromRule(this);\\n\\tthis.parser.pos macroInfo.end;\\n\\tthis.reportAttribute(this.parser, macroInfo, callback, options);\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar macroInfo getInfoFromRule(this);\\n\\tthis.parser.pos macroInfo.end;\\n\\tvar mayBeWidget this.parser.context.allowWidgets();\\n\\tvar names getParamNames(this.parser, macroInfo.name, macroInfo.params, options);\\n\\tif (names undefined) {\\n\\t\\t// Needed the definition, and couldnt find it. So if a single\\n\\t\\t// parameter doesnt work, just fail.\\n\\t\\tmayBeWidget false;\\n\\t}\\n\\tvar entry macrocall.relink(this.parser.context, macroInfo, text, fromTitle, toTitle, mayBeWidget, options);\\n\\tif (entry && entry.output) {\\n\\t\\tentry.output macroToString(entry, text, names, this.parser, options);\\n\\t\\tif (entry.output undefined) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\n/** Relinks macros that occur as attributes, like \u003C$element attr\u003C\u003C...>> />\\n * Processes the same, except it cant downgrade into a widget if the title\\n * is complicated.\\n * Kept for backward compatibility reasons\\n */\\nexports.relinkAttribute function(parser, macro, text, fromTitle, toTitle, options) {\\n\\tvar entry macrocall.relink(parser.context, macro, text, fromTitle, toTitle, false, options);\\n\\tif (entry && entry.output) {\\n\\t\\tentry.output macrocall.reassemble(entry, text, options);\\n\\t}\\n\\treturn entry;\\n};\\n\\n/** As in, report a macrocall invocation that is an html attribute.\\n * Kept for backward compatibility reasons\\n */\\nexports.reportAttribute function(parser, macro, callback, options) {\\n\\tmacrocall.report(parser.context, macro, function(title, blurb, style) {\\n\\t\\tcallback(title, \\\\u003C\u003C\\\ + blurb + \\\>>\\\, style);\\n\\t}, options);\\n};\\n\\nfunction getInfoFromRule(rule) {\\n\\t// Get all the details of the match\\n\\tvar macroInfo rule.nextCall;\\n\\tif (!macroInfo) {\\n\\t\\t// rule.match is used \u003Cv5.1.24\\n\\t\\tvar match rule.match,\\n\\t\\t\\toffset $tw.utils.skipWhiteSpace(match0, match1.length+2);\\n\\t\\tmacroInfo {\\n\\t\\t\\tname: match1,\\n\\t\\t\\tstart: rule.matchRegExp.lastIndex - match0.length,\\n\\t\\t\\tend: rule.matchRegExp.lastIndex,\\n\\t\\t};\\n\\t\\tmacroInfo.params parseParams(match2, offset+macroInfo.start);\\n\\t}\\n\\t// post v5.3.0 changed it so name and param arent used, but we still use\\n\\t// them. Maybe I should migrate so that I dont either, and that its\\n\\t// orderedAttributes and $variable that I use.\\n\\tif (macroInfo.name undefined) {\\n\\t\\tmacroInfo.name macroInfo.attributes\\\$variable\\\.value;\\n\\t\\tmacroInfo.params macroInfo.orderedAttributes.slice(1);\\n\\t\\tvar index 0;\\n\\t\\tfor (var i 0; i \u003C macroInfo.params.length; i++) {\\n\\t\\t\\tvar param macroInfo.paramsi;\\n\\t\\t\\tif (param.name index.toString()) {\\n\\t\\t\\t\\t// Swap out the param with one that doesnt have a name.\\n\\t\\t\\t\\tmacroInfo.paramsi {\\n\\t\\t\\t\\t\\tstart: param.start,\\n\\t\\t\\t\\t\\tend: param.end,\\n\\t\\t\\t\\t\\ttype: param.type,\\n\\t\\t\\t\\t\\tvalue: param.value\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\tindex++;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn macroInfo;\\n};\\n\\nfunction mustBeAWidget(macro) {\\n\\tfor (var i 0; i \u003C macro.params.length; i++) {\\n\\t\\tif (macrocall.wrapParameterValue(macro.paramsi.value) undefined) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t}\\n\\treturn false\\n};\\n\\n/**Given a macro object ({name:, params:, start: end:}), and the text where\\n * it was parsed from, returns a new macro that maintains any syntactic\\n * structuring.\\n */\\nfunction macroToString(entry, text, names, parser, options) {\\n\\tvar macro entry.output;\\n\\tif (mustBeAWidget(macro) && parser.context.allowWidgets()) {\\n\\t\\tvar widgetString macroToWidgetString(macro, names);\\n\\t\\tif (widgetString) {\\n\\t\\t\\t// It worked! return it.\\n\\t\\t\\treturn widgetString;\\n\\t\\t}\\n\\t\\tentry.impossible true;\\n\\t\\t// Otherwise continue on and try macrocall anyways, despite failutes.\\n\\t}\\n\\treturn macrocall.reassemble(entry, text, options);\\n};\\n\\nfunction macroToWidgetString(macro, names) {\\n\\tvar attrs ;\\n\\tfor (var i 0; i \u003C macro.params.length; i++) {\\n\\t\\tvar p macro.paramsi;\\n\\t\\tvar val;\\n\\t\\tif (p.newValue) {\\n\\t\\t\\tval p.newValue;\\n\\t\\t} else {\\n\\t\\t\\tval utils.wrapAttributeValue(p.value);\\n\\t\\t}\\n\\t\\tif (val ! undefined) {\\n\\t\\t\\tvar name p.name;\\n\\t\\t\\tif (name undefined) {\\n\\t\\t\\t\\tif (names undefined) {\\n\\t\\t\\t\\t\\t// Oops. Weve got to give up here. We cant resolve\\n\\t\\t\\t\\t\\t// the name of one of the parameters.\\n\\t\\t\\t\\t\\treturn undefined;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tname namesi;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tattrs.push(\\\ \\\+name+\\\\\\+val);\\n\\t\\t} else {\\n\\t\\t\\t// Oops. Theres an attribute that cant be quoted. We need\\n\\t\\t\\t// to abort.\\n\\t\\t\\treturn undefined;\\n\\t\\t}\\n\\t}\\n\\treturn \\\\u003C$macrocall $name\\\+utils.wrapAttributeValue(macro.name)+attrs.join()+\\\/>\\\;\\n};\\n\\nfunction getParamNames(parser, macroName, params, options) {\\n\\tvar used Object.create(null);\\n\\tvar rtn new Array(params.length);\\n\\tvar anonsExist false;\\n\\tvar i;\\n\\tfor (i 0; i \u003C params.length; i++) {\\n\\t\\tvar name paramsi.name;\\n\\t\\tif (name) {\\n\\t\\t\\trtni name;\\n\\t\\t\\tusedname true;\\n\\t\\t} else {\\n\\t\\t\\tanonsExist true;\\n\\t\\t}\\n\\t}\\n\\tif (anonsExist) {\\n\\t\\tvar def parser.context.getMacroDefinition(macroName);\\n\\t\\tif (def undefined) {\\n\\t\\t\\t// If there are anonymous parameters, and we cant\\n\\t\\t\\t// find the definition, then we cant hope to create\\n\\t\\t\\t// a widget.\\n\\t\\t\\treturn undefined;\\n\\t\\t}\\n\\t\\tvar defParams def.params || ;\\n\\t\\tvar defPtr 0;\\n\\t\\tfor (i 0; i \u003C params.length; i++) {\\n\\t\\t\\tif (rtni undefined) {\\n\\t\\t\\t\\twhile(defPtr \u003C defParams.length && useddefParamsdefPtr.name) {\\n\\t\\t\\t\\t\\tdefPtr++;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (defPtr > defParams.length) {\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\trtni defParamsdefPtr.name;\\n\\t\\t\\t\\tuseddefParamsdefPtr.name true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn rtn;\\n};\\n\\nfunction parseParams(paramString, pos) {\\n\\tvar params ,\\n\\t\\treParam /\\\\s*(?:(A-Za-z0-9\\\\-_+)\\\\s*:)?(?:\\\\s*(?:\\\\\\\\\(\\\\s\\\\S*?)\\\\\\\\\|\\\(^\\\*)\\\|(^*)|\\\\\\\\(^\\\\*)\\\\\\\\|(^\\\\\\\s+)))/mg,\\n\\t\\tparamMatch reParam.exec(paramString);\\n\\twhile(paramMatch) {\\n\\t\\t// Process this parameter\\n\\t\\tvar paramInfo { };\\n\\t\\t// We need to find the group match that isnt undefined.\\n\\t\\tfor (var i 2; i \u003C 6; i++) {\\n\\t\\t\\tif (paramMatchi ! undefined) {\\n\\t\\t\\t\\tparamInfo.value paramMatchi;\\n\\t\\t\\t\\tbreak;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif(paramMatch1) {\\n\\t\\t\\tparamInfo.name paramMatch1;\\n\\t\\t}\\n\\t\\t//paramInfo.start pos;\\n\\t\\tparamInfo.end reParam.lastIndex + pos;\\n\\t\\tparams.push(paramInfo);\\n\\t\\t// Find the next match\\n\\t\\tparamMatch reParam.exec(paramString);\\n\\t}\\n\\treturn params;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles pragma macro definitions.\\nWe may also update placeholder macros that we may have previously installed.\\n\\n\\\\define relink-?() Tough title\\n\\n\\\\*/\\n\\n// We inherit from DefRule\\nvar DefRule require(./def.js);\\n$tw.utils.extend(exports, DefRule);\\n\\nexports.name \\\macrodef\\\;\\n\\nexports.createDefinition function() {\\n\\tvar m this.match;\\n\\treturn {\\n\\t\\ttype: \\\define\\\,\\n\\t\\tname: m1,\\n\\t\\tparameters: m2,\\n\\t\\tmultiline: m3};\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/parameters.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/parameters.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles parameters pragma.\\n\\n\\\\parameters(...)\\n\\n\\\\*/\\n\\nexports.name \\\parameters\\\;\\n\\nexports.report function(text, callback, options) {\\n\\toperate(this, options);\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\toperate(this, options);\\n};\\n\\nfunction operate(rule, options) {\\n\\tvar parser rule.parser;\\n\\tvar parseTreeNode rule.parse();\\n\\tvar attributes parseTreeNode0.orderedAttributes;\\n\\tfor (var i 0; i \u003C attributes.length; i++) {\\n\\t\\tvar attribute attributesi.name;\\n\\t\\tparser.context.addParameter(attribute);\\n\\t}\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement in wiki text inline rules, like,\\n\\nIntroduction\\n\\nlink description|TiddlerTitle\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nexports.name \\\prettylink\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar text this.match1,\\n\\t\\tlink this.match2 || text;\\n\\tif (!$tw.utils.isLinkExternal(link)) {\\n\\t\\tvar type relinkUtils.getType(title);\\n\\t\\ttype.report(link, function(title) {\\n\\t\\t\\tcallback(title, + text + );\\n\\t\\t}, options);\\n\\t}\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar type relinkUtils.getType(title),\\n\\t\\tcaption this.match1,\\n\\t\\tlink this.match2 || caption,\\n\\t\\tentry type.relink(link, fromTitle, toTitle, options);\\n\\tif (entry && !entry.impossible) {\\n\\t\\tentry.output utils.makePrettylink(this.parser, entry.output, this.match2 && caption);\\n\\t\\tif (entry.output undefined) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\treturn entry;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/quoteblock.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/quoteblock.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles the quote blocks, as in:\\n\\n\u003C\u003C\u003C\\n...\\n\u003C\u003C\u003C\\n\\n\\\\*/\\n\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\n\\nexports.name \\\quoteblock\\\;\\n\\nexports.type {block: true};\\n\\nexports.report function(text, callback, options) {\\n\\tvar reEndString \\\^\\\ + this.match1 + \\\(?!\u003C)\\\;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\tthis.parser.parseClasses();\\n\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\n\\t// Parse the optional cite\\n\\treportCite(this.parser, this.match1);\\n\\t// Now parse the body of the quote\\n\\tthis.parser.parseBlocks(reEndString);\\n\\tif (this.match) {\\n\\t\\t// Now parse the closing cite\\n\\t\\treportCite(this.parser, this.match1);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar reEndString \\\^\\\ + this.match1 + \\\(?!\u003C)\\\;\\n\\tvar builder new Rebuilder(text, this.parser.pos);\\n\\tvar entry;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\n\\tthis.parser.parseClasses();\\n\\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\\n\\n\\t// Parse the optional cite\\n\\tmergeRelinks(builder, this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg));\\n\\t// Now parse the body of the quote\\n\\tmergeRelinks(builder, this.parser.parseBlocks(reEndString));\\n\\t// Now parse the closing cite\\n\\tmergeRelinks(builder, this.parser.parseInlineRun(/(\\\\r?\\\\n)/mg));\\n\\n\\tif (builder.changed() || builder.impossible) {\\n\\t\\tentry {};\\n\\t\\tentry.output builder.results(this.parser.pos);\\n\\t\\tif (builder.impossible) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nfunction reportCite(parser, delimeter) {\\n\\tvar callback parser.callback;\\n\\ttry {\\n\\t\\tparser.callback function(title, blurb, style) {\\n\\t\\t\\treturn callback(title, delimeter + \\\ \\\ + blurb, style);\\n\\t\\t};\\n\\t\\tparser.parseInlineRun(/(\\\\r?\\\\n)/mg);\\n\\t} finally {\\n\\t\\tparser.callback callback;\\n\\t}\\n};\\n\\nfunction mergeRelinks(builder, output) {\\n\\tif (output.length > 0) {\\n\\t\\tfor (var i 0; i \u003C output.length; i++) {\\n\\t\\t\\tvar o outputi;\\n\\t\\t\\tif (o.output) {\\n\\t\\t\\t\\tbuilder.add(o.output, o.start, o.end);\\n\\t\\t\\t}\\n\\t\\t\\tif (o.impossible) {\\n\\t\\t\\t\\tbuilder.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/relink.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/relink.js\,\text\:\/*\\\\\\nmodule-type: wikirule\\n\\nThis defines the \\\\relink inline pragma used to locally declare\\nrelink rules for macros.\\n\\nIt takes care of providing its own relink and report rules.\\n\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar language require($:/plugins/flibbles/relink/js/language.js);\\nvar pragmaOperators utils.getModulesByTypeAsHashmap(relinkpragma, name);\\n\\nexports.name \\\relink\\\;\\nexports.types {pragma: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\tthis.matchRegExp /^\\\\\\\\relink^\\\\S\\\\r\\\\n+(^(\\\\s+)(^\\\\r\\\\n*)(\\\\r?\\\\n)?/mg;\\n};\\n\\n/**This makes the widget that the macro library will later parse to determine\\n * new macro relink state.\\n *\\n * Its a \u003C$set> widget so it can appear BEFORE \\\\define pragma and not\\n * prevent that pragma from being scooped up by importvariables.\\n * (importvariables stops scooping as soon as it sees something besides $set) */\\nexports.parse function() {\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar macroName;\\n\\tvar macroParams Object.create(null);\\n\\tvar error undefined;\\n\\tvar rtn ;\\n\\tvar self this;\\n\\tinterpretSettings(this, function(macro, parameter, type) {\\n\\t\\tmacroName macro;\\n\\t\\tif (type && !utils.getType(type)) {\\n\\t\\t\\terror language.getString(\\\text/plain\\\, \\\Error/UnrecognizedType\\\,\\n\\t\\t\\t\\t{variables: {type: type}, wiki: self.parser.wiki});\\n\\t\\t}\\n\\t\\tmacroParamsparameter type;\\n\\t});\\n\\t// If no macroname. Return nothing, this rule will be ignored by parsers\\n\\tif (macroName) {\\n\\t\\tvar relink Object.create(null);\\n\\t\\trelinkmacroName macroParams;\\n\\t\\trtn.push({\\n\\t\\t\\ttype: \\\set\\\,\\n\\t\\t\\tattributes: {\\n\\t\\t\\t\\tname: {type: \\\string\\\, value: \\\\\\}\\n\\t\\t\\t},\\n\\t\\t\\tchildren: ,\\n\\t\\t\\tisRelinkDefinition: true,\\n\\t\\t\\tisMacroDefinition: true,\\n\\t\\t\\trelink: relink});\\n\\t}\\n\\tif (error) {\\n\\t\\trtn.push({\\n\\t\\t\\ttype: \\\element\\\, tag: \\\span\\\, attributes: {\\n\\t\\t\\t\\t\\\class\\\: {\\n\\t\\t\\t\\t\\ttype: \\\string\\\,\\n\\t\\t\\t\\t\\tvalue: \\\tc-error tc-relink-error\\\\\n\\t\\t\\t\\t}\\n\\t\\t\\t}, children: \\n\\t\\t\\t\\t{type: \\\text\\\, text: error}\\n\\t\\t\\t});\\n\\t}\\n\\treturn rtn;\\n};\\n\\nexports.report function(text, callback, options) {\\n\\toperate(this, options);\\n\\tfor (var operator in pragmaOperators) {\\n\\t\\tpragmaOperatorsoperator.report(this, callback, options);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\toperate(this, options);\\n\\tvar entry;\\n\\tfor (var operator in pragmaOperators) {\\n\\t\\t// Yes, this only handles one thing for now. I havent bothered\\n\\t\\t// breaking up \\\\relink into a modifiable type.\\n\\t\\tentry pragmaOperatorsoperator.relink(this, fromTitle, toTitle, options);\\n\\t}\\n\\treturn entry;\\n};\\n\\nfunction operate(rule, options) {\\n\\tvar parser rule.parser;\\n\\tvar currentTiddler parser.context.widget.variables.currentTiddler.value;\\n\\tparser.pos rule.matchRegExp.lastIndex;\\n\\tinterpretSettings(rule, function(macro, parameter, type) {\\n\\t\\toptions.settings.addSetting(parser.wiki, macro, parameter, type, currentTiddler);\\n\\t});\\n\\t// Return nothing, because this rule is ignored by the parser\\n\\treturn undefined;\\n};\\n\\nfunction interpretSettings(rule, block) {\\n\\tvar paramString rule.match2;\\n\\tif (paramString ! \\\\\\) {\\n\\t\\tvar macro rule.match1;\\n\\t\\tvar reParam /\\\\s*($A-Za-z0-9\\\\-_+)(?:\\\\s*:\\\\s*(^\\\\s+))?/mg;\\n\\t\\tvar paramMatch reParam.exec(paramString);\\n\\t\\twhile (paramMatch) {\\n\\t\\t\\tvar parameter paramMatch1;\\n\\t\\t\\tvar type paramMatch2;\\n\\t\\t\\tblock(macro, parameter, type);\\n\\t\\t\\tparamMatch reParam.exec(paramString);\\n\\t\\t}\\n\\t}\\n};\\n\,\module-type\:\wikirule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nParses and acknowledges any pragma rules a tiddler has.\\n\\n\\\\rules except html wikilink\\n\\n\\\\*/\\n\\nexports.name \\\rules\\\;\\n\\n/**This is all we have to do. The rules rule doesnt parse. It just amends\\n * the rules, which is exactly what I want it to do too.\\n * It also takes care of moving the pos pointer forward.\\n */\\nexports.relink function() {\\n\\tthis.parse();\\n\\treturn undefined;\\n};\\n\\n// Same deal\\nexports.report exports.relink;\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/syslink.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/syslink.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles sys links\\n\\n$:/sys/link\\n\\nbut not:\\n\\n~$:/sys/link\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\n\\nexports.name \\\syslink\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar title this.match0;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tif (title0 ! \\\~\\\) {\\n\\t\\tcallback(title, ~ + title);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar entry undefined;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tif (this.match0 fromTitle && this.match00 ! \\\~\\\) {\\n\\t\\tentry {output: this.makeSyslink(toTitle, options)};\\n\\t\\tif (entry.output undefined) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nexports.makeSyslink function(title, options) {\\n\\tvar match title.match(this.matchRegExp);\\n\\tif (match && match0 title && title0 ! \\\~\\\) {\\n\\t\\treturn title;\\n\\t} else {\\n\\t\\treturn utils.makePrettylink(this.parser, title);\\n\\t}\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/table.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/table.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles tables. Or rather handles the cells inside the tables, since tables\\nthemselves arent relinked.\\n\\n\\\\*/\\n\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\n\\nexports.name \\\table\\\;\\n\\nexports.types {block: true};\\n\\nexports.report function(text, callback, options) {\\n\\tvar rowRegExp /^\\\\|(^\\\\n*)\\\\|(fhck?)\\\\r?(?:\\\\n|$)/mg,\\n\\t\\trowTermRegExp /(\\\\|(?:fhck?)\\\\r?(?:\\\\n|$))/mg;\\n\\t// Match the row\\n\\trowRegExp.lastIndex this.parser.pos;\\n\\tvar rowMatch rowRegExp.exec(this.parser.source);\\n\\twhile(rowMatch && rowMatch.index this.parser.pos) {\\n\\t\\tvar rowType rowMatch2;\\n\\t\\t// Check if it is a class assignment\\n\\t\\tif(rowType \\\k\\\) {\\n\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t} else if(rowType \\\c\\\) {\\n\\t\\t\\t// Is this a caption row?\\n\\t\\t\\t// If so, move past the opening `|` of the row\\n\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t// Parse the caption\\n\\t\\t\\tvar oldCallback this.parser.callback;\\n\\t\\t\\tthis.parser.callback function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, | + blurb + |c, style);\\n\\t\\t\\t};\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tthis.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\tthis.parser.callback oldCallback;\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\t// Process the row\\n\\t\\t\\tprocessRow.call(this, rowType, callback);\\n\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t}\\n\\t\\trowMatch rowRegExp.exec(this.parser.source);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar rowRegExp /^\\\\|(^\\\\n*)\\\\|(fhck?)\\\\r?(?:\\\\n|$)/mg,\\n\\t\\trowTermRegExp /(\\\\|(?:fhck?)\\\\r?(?:\\\\n|$))/mg,\\n\\t\\tbuilder new Rebuilder(text, this.parser.pos),\\n\\t\\timpossible false,\\n\\t\\toutput,\\n\\t\\tentry;\\n\\t// Match the row\\n\\trowRegExp.lastIndex this.parser.pos;\\n\\tvar rowMatch rowRegExp.exec(this.parser.source);\\n\\twhile(rowMatch && rowMatch.index this.parser.pos) {\\n\\t\\tvar rowType rowMatch2;\\n\\t\\t// Check if it is a class assignment\\n\\t\\tif(rowType \\\k\\\) {\\n\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t} else {\\n\\t\\t\\t// Is this a caption row?\\n\\t\\t\\tif(rowType \\\c\\\) {\\n\\t\\t\\t\\t// If so, move past the opening `|` of the row\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\t// Parse the caption\\n\\t\\t\\t\\toutput this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t// Process the row\\n\\t\\t\\t\\toutput processRow.call(this);\\n\\t\\t\\t\\tthis.parser.pos rowMatch.index + rowMatch0.length;\\n\\t\\t\\t}\\n\\t\\t\\tif (output.length > 0) {\\n\\t\\t\\t\\tfor (var i 0; i \u003C output.length; i++) {\\n\\t\\t\\t\\t\\tvar o outputi;\\n\\t\\t\\t\\t\\tif (o.output) {\\n\\t\\t\\t\\t\\t\\tbuilder.add(o.output, o.start, o.end);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (o.impossible) {\\n\\t\\t\\t\\t\\t\\timpossible true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\trowMatch rowRegExp.exec(this.parser.source);\\n\\t}\\n\\tif (builder.changed() || impossible) {\\n\\t\\tentry {}\\n\\t\\tentry.output builder.results(this.parser.pos);\\n\\t\\tif (impossible) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nvar processRow function(rowType, callback) {\\n\\tvar cellRegExp /(?:\\\\|(^\\\\n\\\\|*)\\\\|)|(\\\\|fhck?\\\\r?(?:\\\\n|$))/mg,\\n\\t\\tcellTermRegExp /((?:\\\\x20*)\\\\|)/mg,\\n\\t\\tchildren ;\\n\\t// Match a single cell\\n\\tcellRegExp.lastIndex this.parser.pos;\\n\\tvar cellMatch cellRegExp.exec(this.parser.source);\\n\\twhile(cellMatch && cellMatch.index this.parser.pos) {\\n\\t\\tif(cellMatch2) {\\n\\t\\t\\t// End of row\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tswitch (cellMatch1) {\\n\\t\\tcase ~:\\n\\t\\tcase >:\\n\\t\\tcase \u003C:\\n\\t\\t\\t// Move to just before the `|` terminating the cell\\n\\t\\t\\tthis.parser.pos cellRegExp.lastIndex - 1;\\n\\t\\t\\tbreak;\\n\\t\\tdefault:\\n\\t\\t\\t// For ordinary cells, step beyond the opening `|`\\n\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t// Look for a space at the start of the cell\\n\\t\\t\\tvar spaceLeft false;\\n\\t\\t\\tvar prefix |;\\n\\t\\t\\tvar suffix |;\\n\\t\\t\\tif(this.parser.source.substr(this.parser.pos).search(/^\\\\^(^\\\\^|\\\\^\\\\^)/) 0) {\\n\\t\\t\\t\\tprefix + ^;\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t} else if(this.parser.source.substr(this.parser.pos).search(/^,(^,|,,)/) 0) {\\n\\t\\t\\t\\tprefix + ,;\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t}\\n\\t\\t\\tvar chr this.parser.source.substr(this.parser.pos,1);\\n\\t\\t\\twhile(chr \\\ \\\) {\\n\\t\\t\\t\\tspaceLeft true;\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\tchr this.parser.source.substr(this.parser.pos,1);\\n\\t\\t\\t}\\n\\t\\t\\tif (spaceLeft) {\\n\\t\\t\\t\\tprefix + ;\\n\\t\\t\\t}\\n\\t\\t\\t// Check whether this is a heading cell\\n\\t\\t\\tif(chr \\\!\\\) {\\n\\t\\t\\t\\tthis.parser.pos++;\\n\\t\\t\\t\\tprefix + !;\\n\\t\\t\\t}\\n\\t\\t\\t// Parse the cell\\n\\t\\t\\tvar oldCallback this.parser.callback;\\n\\t\\t\\tvar reports ;\\n\\t\\t\\tthis.parser.callback function(title, blurb, style) {\\n\\t\\t\\t\\treports.push(title, blurb, style);\\n\\t\\t\\t};\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tvar output this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\\n\\t\\t\\t\\tif (output.length > 0) {\\n\\t\\t\\t\\t\\tchildren.push(output0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif(this.parser.source.substr(this.parser.pos - 2,1) \\\ \\\) { // spaceRight\\n\\t\\t\\t\\t\\tsuffix |;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tfor (var i 0; i \u003C reports.length; i + 3) {\\n\\t\\t\\t\\t\\tcallback(reportsi, prefix + reportsi+1 + suffix + rowType, reportsi+2);\\n\\t\\t\\t\\t}\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\tthis.parser.callback oldCallback;\\n\\t\\t\\t}\\n\\t\\t\\t// Move back to the closing `|`\\n\\t\\t\\tthis.parser.pos--;\\n\\t\\t}\\n\\t\\tcellRegExp.lastIndex this.parser.pos;\\n\\t\\tcellMatch cellRegExp.exec(this.parser.source);\\n\\t}\\n\\treturn children;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles replacement of transclusions in wiki text like,\\n\\n{{RenamedTiddler}}\\n{{RenamedTiddler||TemplateTitle}}\\n\\nThis renames both the tiddler and the template field.\\n\\n\\\\*/\\n\\nvar refHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/reference\\\);\\nvar titleHandler require(\\\$:/plugins/flibbles/relink/js/fieldtypes/title\\\);\\nvar utils require(\\\./utils.js\\\);\\nvar relinkUtils require($:/plugins/flibbles/relink/js/utils.js);\\nvar referenceOperators relinkUtils.getModulesByTypeAsHashmap(relinkreference, name);\\n\\nexports.name transcludeinline, transcludeblock;\\n\\nexports.report function(text, callback, options) {\\n\\tvar m this.match,\\n\\t\\trefString $tw.utils.trim(m1),\\n\\t\\tref parseTextReference(refString),\\n\\t\\ttemplate $tw.utils.trim(m2),\\n\\t\\tparams m3;\\n\\tfor (var operator in referenceOperators) {\\n\\t\\treferenceOperatorsoperator.report(ref, function(title, blurb, style) {\\n\\t\\t\\tblurb blurb || \\\\\\;\\n\\t\\t\\tif (template) {\\n\\t\\t\\t\\tblurb + || + template;\\n\\t\\t\\t}\\n\\t\\t\\tif (params) {\\n\\t\\t\\t\\tblurb + | + params;\\n\\t\\t\\t}\\n\\t\\t\\tcallback(title, \\\{{\\\ + blurb + \\\}}\\\, style);\\n\\t\\t}, options);\\n\\t}\\n\\ttitleHandler.report(template, function(title, blurb, style) {\\n\\t\\tvar templateBlurb refString + ||;\\n\\t\\tif (params) {\\n\\t\\t\\ttemplateBlurb + | + params;\\n\\t\\t}\\n\\t\\tcallback(template, {{ + templateBlurb + }}, style);\\n\\t}, options);\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar m this.match,\\n\\t\\treference parseTextReference(m1),\\n\\t\\ttemplate m2,\\n\\t\\tparams m3,\\n\\t\\tentry undefined,\\n\\t\\timpossible false,\\n\\t\\tmodified false;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tfor (var operator in referenceOperators) {\\n\\t\\tvar result referenceOperatorsoperator.relink(reference, fromTitle, toTitle, options);\\n\\t\\tif (result ! undefined) {\\n\\t\\t\\tif (result.impossible) {\\n\\t\\t\\t\\timpossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (result.output) {\\n\\t\\t\\t\\treference result.output;\\n\\t\\t\\t\\tmodified true\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\tvar templateEntry titleHandler.relink($tw.utils.trim(template), fromTitle, toTitle, options);\\n\\tif (templateEntry) {\\n\\t\\tif (templateEntry.impossible) {\\n\\t\\t\\timpossible true;\\n\\t\\t}\\n\\t\\tif (templateEntry.output) {\\n\\t\\t\\ttemplate template.replace(fromTitle, toTitle);\\n\\t\\t\\tmodified true;\\n\\t\\t}\\n\\t}\\n\\tif (modified) {\\n\\t\\tvar output this.makeTransclude(this.parser, reference, template, params);\\n\\t\\tif (output) {\\n\\t\\t\\t// Adding any newline that might have existed is\\n\\t\\t\\t// what allows this relink method to work for both\\n\\t\\t\\t// the block and inline filter wikitext rule.\\n\\t\\t\\tentry {output: output + utils.getEndingNewline(m0)};\\n\\t\\t} else {\\n\\t\\t\\timpossible true;\\n\\t\\t}\\n\\t}\\n\\tif (impossible) {\\n\\t\\tentry entry || {};\\n\\t\\tentry.impossible true;\\n\\t}\\n\\treturn entry;\\n};\\n\\n// I have my own because the core one is deficient for my needs.\\nfunction parseTextReference(textRef) {\\n\\t// Separate out the title, field name and/or JSON indices\\n\\tvar reTextRef /^(\\\\w\\\\W*?)(?:!!(\\\\S\\\\w\\\\W*)|##(\\\\S\\\\w\\\\W*))?$/g,\\n\\t\\tmatch reTextRef.exec(textRef),\\n\\t\\tresult {};\\n\\tif(match) {\\n\\t\\t// Return the parts\\n\\t\\tresult.title match1;\\n\\t\\tresult.field match2;\\n\\t\\tresult.index match3;\\n\\t} else {\\n\\t\\t// If we couldnt parse it\\n\\t\\tresult.title textRef\\n\\t}\\n\\treturn result;\\n};\\n\\n/** This converts a reference and a template into a string representation\\n * of a transclude.\\n */\\nexports.makeTransclude function(parser, reference, template, params) {\\n\\tvar rtn;\\n\\tif (!canBePrettyTemplate(template)) {\\n\\t\\tvar widget utils.makeWidget(parser, $transclude, {\\n\\t\\t\\ttiddler: $tw.utils.trim(template),\\n\\t\\t\\tfield: reference.field,\\n\\t\\t\\tindex: reference.index});\\n\\t\\tif (reference.title && widget ! undefined) {\\n\\t\\t\\trtn utils.makeWidget(parser, $tiddler, {tiddler: $tw.utils.trim(reference.title)}, widget);\\n\\t\\t} else {\\n\\t\\t\\trtn widget;\\n\\t\\t}\\n\\t} else if (!canBePrettyTitle(reference.title) || !canBePrettyField(reference.field)) {\\n\\t\\t// This block and the next account for the 1%...\\n\\t\\tvar transclude;\\n\\t\\tif (canBePrettyField(reference.field)) {\\n\\t\\t\\tvar reducedRef {field: reference.field, index: reference.index};\\n\\t\\t\\ttransclude prettyTransclude(reducedRef, template, params);\\n\\t\\t} else {\\n\\t\\t\\ttransclude utils.makeWidget(parser, \\\$transclude\\\, {tiddler: $tw.utils.trim(reference.title), field: reference.field});\\n\\t\\t}\\n\\t\\trtn utils.makeWidget(parser, $tiddler, {tiddler: $tw.utils.trim(reference.title)}, transclude);\\n\\t} else {\\n\\t\\t// This block takes care of 99% of all cases\\n\\t\\trtn prettyTransclude(reference, template, params);\\n\\t}\\n\\treturn rtn;\\n};\\n\\nfunction canBePrettyTitle(value) {\\n\\treturn refHandler.canBePretty(value) && canBePrettyTemplate(value);\\n};\\n\\nfunction canBePrettyField(value) {\\n\\treturn !/\\\\|\\\\}\\\\{/.test(value);\\n};\\n\\nfunction canBePrettyTemplate(value) {\\n\\treturn !value || (value.indexOf(}) \u003C 0 && value.indexOf({) \u003C 0 && value.indexOf(|) \u003C 0);\\n};\\n\\nfunction prettyTransclude(textReference, template, params) {\\n\\tif (typeof textReference ! \\\string\\\) {\\n\\t\\ttextReference refHandler.toString(textReference);\\n\\t}\\n\\tif (!textReference) {\\n\\t\\ttextReference ;\\n\\t}\\n\\tif (template ! undefined) {\\n\\t\\ttextReference + \\\||\\\ + template;\\n\\t}\\n\\tif (params) {\\n\\t\\ttextReference + \\\|\\\ + params;\\n\\t}\\n\\treturn \\\{{\\\+textReference+\\\}}\\\;\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/typedblock.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/typedblock.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles the typeed blocks, as in:\\n\\n$$$text/vnd.tiddlywiki>text/html\\n...\\n$$$\\n\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar language require($:/plugins/flibbles/relink/js/language.js);\\n\\nexports.name \\\typedblock\\\;\\n\\nexports.types {block: true};\\n\\nvar textOperators;\\nvar oldTextOperators;\\n\\nfunction getTextOperator(type, options) {\\n\\tvar operator;\\n\\tif (textOperators undefined) {\\n\\t\\ttextOperators utils.getModulesByTypeAsHashmap(relinktext, type);\\n\\t\\toldTextOperators utils.getModulesByTypeAsHashmap(relinktextoperator, type);\\n\\t}\\n\\toperator textOperatorstype;\\n\\tif (operator) {\\n\\t\\treturn operator;\\n\\t}\\n\\tvar info $tw.utils.getFileExtensionInfo(type);\\n\\tif (info && textOperatorsinfo.type) {\\n\\t\\treturn textOperatorsinfo.type;\\n\\t}\\n\\tvar old oldTextOperatorstype || (info && oldTextOperatorsinfo.type);\\n\\tif (old) {\\n\\t\\tvar vars Object.create(options);\\n\\t\\tvars.variables {type: old.type, keyword: type};\\n\\t\\tvar warnString language.getString(\\\text/html\\\, \\\Warning/OldRelinkTextOperator\\\, vars)\\n\\t\\tlanguage.warn(warnString);\\n\\t\\toldTextOperatorstype undefined;\\n\\t}\\n};\\n\\nfunction getText() {\\n\\tvar reEnd /\\\\r?\\\\n\\\\$\\\\$\\\\$\\\\r?(?:\\\\n|$)/mg;\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\t// Look for the end of the block\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(this.parser.source),\\n\\t\\ttext;\\n\\t// Process the block\\n\\tif(match) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\ttext this.parser.source.substr(this.parser.pos);\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\treturn text;\\n};\\n\\nexports.report function(text, callback, options) {\\n\\tvar innerText getText.call(this),\\n\\t\\toperator getTextOperator(this.match1, options);\\n\\tif (operator) {\\n\\t\\treturn operator.report(innerText, callback, options);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar start this.parser.pos,\\n\\t\\tinnerStart this.matchRegExp.lastIndex,\\n\\t\\tinnerText getText.call(this),\\n\\t\\toperator getTextOperator(this.match1, options);\\n\\tif (operator) {\\n\\t\\tvar innerOptions Object.create(options);\\n\\t\\tinnerOptions.settings this.parser.context;\\n\\t\\tvar results operator.relink(innerText, fromTitle, toTitle, innerOptions);\\n\\t\\tif (results && results.output) {\\n\\t\\t\\tvar builder new Rebuilder(text, start);\\n\\t\\t\\tbuilder.add(results.output, innerStart, innerStart + innerText.length);\\n\\t\\t\\tresults.output builder.results(this.parser.pos);\\n\\t\\t}\\n\\t\\treturn results;\\n\\t}\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nUtility methods for the wikitext relink rules.\\n\\n\\\\*/\\n\\nexports.makeWidget function(parser, tag, attributes, body) {\\n\\tif (!parser.context.allowWidgets()) {\\n\\t\\treturn undefined;\\n\\t}\\n\\tvar string \u003C + tag;\\n\\tfor (var attr in attributes) {\\n\\t\\tvar value attributesattr;\\n\\t\\tif (value ! undefined) {\\n\\t\\t\\tvar quoted exports.wrapAttributeValue(value);\\n\\t\\t\\tif (!quoted) {\\n\\t\\t\\t\\t// Its not possible to make this widget\\n\\t\\t\\t\\treturn undefined;\\n\\t\\t\\t}\\n\\t\\t\\tstring + + attr + + quoted;\\n\\t\\t}\\n\\t}\\n\\tif (body ! undefined) {\\n\\t\\tstring + > + body + \u003C/ + tag + >;\\n\\t} else {\\n\\t\\tstring + />;\\n\\t}\\n\\treturn string;\\n};\\n\\nexports.makePrettylink function(parser, title, caption) {\\n\\tvar output;\\n\\tif (parser.context.allowPrettylinks() && canBePrettylink(title, caption)) {\\n\\t\\tif (caption ! undefined) {\\n\\t\\t\\toutput \\\\\\ + caption + \\\|\\\ + title + \\\\\\;\\n\\t\\t} else {\\n\\t\\t\\toutput \\\\\\ + title + \\\\\\;\\n\\t\\t}\\n\\t} else if (caption ! undefined) {\\n\\t\\tvar safeCaption sanitizeCaption(parser, caption);\\n\\t\\tif (safeCaption ! undefined) {\\n\\t\\t\\toutput exports.makeWidget(parser, $link, {to: title}, safeCaption);\\n\\t\\t}\\n\\t} else if (exports.shorthandPrettylinksSupported(parser.wiki)) {\\n\\t\\toutput exports.makeWidget(parser, $link, {to: title});\\n\\t}\\n\\treturn output;\\n};\\n\\n/**In version 5.1.20, Tiddlywiki made it so \u003C$link to\\\something\\\ /> would\\n * use \\\something\\\ as a caption. This is preferable. However, Relink works\\n * going back to 5.1.14, so we need to have different handling for both\\n * cases.\\n */\\nvar _supported;\\nexports.shorthandPrettylinksSupported function(wiki) {\\n\\tif (_supported undefined) {\\n\\t\\tvar test wiki.renderText(\\\text/plain\\\, \\\text/vnd.tiddlywiki\\\, \\\\u003C$link totest/>\\\);\\n\\t\\t_supported (test \\\test\\\);\\n\\t}\\n\\treturn _supported;\\n};\\n\\n/**Return true if value can be used inside a prettylink.\\n */\\nfunction canBePrettylink(value, customCaption) {\\n\\treturn value.indexOf(\\\\\\) \u003C 0 && valuevalue.length-1 ! && (customCaption ! undefined || value.indexOf(|) \u003C 0);\\n};\\n\\nfunction sanitizeCaption(parser, caption) {\\n\\tvar plaintext parser.wiki.renderText(\\\text/plain\\\, \\\text/vnd.tiddlywiki\\\, caption);\\n\\tif (plaintext caption && caption.indexOf(\\\\u003C/$link>\\\) \u003C 0) {\\n\\t\\treturn caption;\\n\\t} else {\\n\\t\\treturn exports.makeWidget(parser, $text, {text: caption});\\n\\t}\\n};\\n\\nexports.containsPlaceholders function(string) {\\n\\t// Does it contain a variable placeholder?\\n\\tif (/\\\\$\\\\((^\\\\)\\\\$+)\\\\)\\\\$/.test(string)) {\\n\\t\\treturn true;\\n\\t}\\n\\t// Does it contain a filter placeholder?\\n\\tvar filterStart string.indexOf(\\\${\\\);\\n\\tif (filterStart > 0 && string.indexOf(\\\}$\\\, filterStart+3) > 0) {\\n\\t\\treturn true;\\n\\t}\\n\\t// If no, then its just a string.\\n\\treturn false;\\n};\\n\\nvar whitelist \\\\\\, \\\\\\, \\\, \\\\\\\\\;\\nvar choices {\\n\\t\\\\\\: function(v) {return !/(\\\\/\\\\s\u003C>\\\`)/.test(v) && v.length > 0; },\\n\\t\\\\\\: function(v) {return v.indexOf(\\\\\\) \u003C 0; },\\n\\t\\\: function(v) {return v.indexOf(\\\) \u003C 0; },\\n\\t\\\\\\\\\: function(v) {return v.indexOf(\\\\\\\\\) \u003C 0 && vv.length-1 ! \\\;},\\n};\\nvar _backticksSupported;\\n\\n/**Finds an appropriate quote mark for a given value.\\n *\\n *Tiddlywiki doesnt have escape characters for attribute values. Instead,\\n * we just have to find the type of quotes thatll work for the given title.\\n * There exist titles that simply cant be quoted.\\n * If it can stick with the preference, it will.\\n *\\n * return: Returns the wrapped value, or undefined if its impossible to wrap\\n */\\nexports.wrapAttributeValue function(value, preference) {\\n\\tif (_backticksSupported undefined) {\\n\\t\\tvar test $tw.wiki.renderText(\\\text/plain\\\, \\\text/vnd.tiddlywiki\\\, \\\\u003C$link to`test`/>\\\);\\n\\t\\t_backticksSupported (test \\\test\\\);\\n\\t\\tif (_backticksSupported) {\\n\\t\\t\\t// add in support for the backtick to the lists\\n\\t\\t\\twhitelist.push(`, ```);\\n\\t\\t\\tchoices` function(v) {return v.indexOf(`) \u003C 0 && !exports.containsPlaceholders(v); };\\n\\t\\t\\tchoices``` function(v) {return v.indexOf(```) \u003C 0 && vv.length-1 ! ` && !exports.containsPlaceholders(v);};\\n\\t\\t}\\n\\t}\\n\\tif (choicespreference && choicespreference(value)) {\\n\\t\\treturn wrap(value, preference);\\n\\t}\\n\\tfor (var i 0; i \u003C whitelist.length; i++) {\\n\\t\\tvar quote whitelisti;\\n\\t\\tif (choicesquote(value)) {\\n\\t\\t\\treturn wrap(value, quote);\\n\\t\\t}\\n\\t}\\n\\t// No quotes will work on this\\n\\treturn undefined;\\n};\\n\\nfunction wrap(value, wrapper) {\\n\\tvar wrappers {\\n\\t\\t\\\\\\: function(v) {return v; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; },\\n\\t\\t\\\: function(v) {return \\\+v+\\\; },\\n\\t\\t\\\\\\\\\: function(v) {return \\\\\\\\\+v+\\\\\\\\\; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; },\\n\\t\\t\\\`\\\: function(v) {return `+v+`; },\\n\\t\\t```: function(v) {return ```+v+```; }\\n\\t};\\n\\tvar chosen wrapperswrapper;\\n\\tif (chosen) {\\n\\t\\treturn chosen(value);\\n\\t} else {\\n\\t\\treturn undefined;\\n\\t}\\n};\\n\\nfunction canBePrettyOperand(value) {\\n\\treturn value.indexOf() \u003C 0;\\n};\\n\\n// Finds the newline at the end of a string and returns it. Empty string if\\n// none exists.\\nexports.getEndingNewline function(string) {\\n\\tvar l string.length;\\n\\tif (stringl-1 \\\\n) {\\n\\t\\treturn (stringl-2 \\\\r) ? \\\\\\\r\\\\n\\\ : \\\\\\\n\\\;\\n\\t}\\n\\treturn \\\\\\;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/whitespace.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/whitespace.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles whitespace pragma\\n\\n\\\\*/\\n\\nexports.name \\\whitespace\\\;\\n\\n// We dont actually do anything, but we cant rely on\\n// the default behavior of moving to parser.pos.\\n// we have to forward past all the whitespace tokens.\\nexports.relink exports.report function() { this.parse(); }\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js\,\text\:\/*\\\\\\nmodule-type: relinkwikitextrule\\n\\nHandles CamelCase links\\n\\nWikiLink\\n\\nbut not:\\n\\n~WikiLink\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\n\\nexports.name \\\wikilink\\\;\\n\\nexports.report function(text, callback, options) {\\n\\tvar title this.match0,\\n\\t\\tunlink $tw.config.textPrimitives.unWikiLink;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tif (title0 ! unlink) {\\n\\t\\tcallback(title, unlink + title);\\n\\t}\\n};\\n\\nexports.relink function(text, fromTitle, toTitle, options) {\\n\\tvar entry undefined,\\n\\t\\ttitle this.match0;\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tif (title fromTitle && title0 ! $tw.config.textPrimitives.unWikiLink) {\\n\\t\\tentry { output: this.makeWikilink(toTitle, options) };\\n\\t\\tif (entry.output undefined) {\\n\\t\\t\\tentry.impossible true;\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\nexports.makeWikilink function(title, options) {\\n\\tif (title.match(this.matchRegExp) && title0 ! $tw.config.textPrimitives.unWikiLink) {\\n\\t\\treturn title;\\n\\t} else {\\n\\t\\treturn utils.makePrettylink(this.parser, title);\\n\\t}\\n};\\n\,\module-type\:\relinkwikitextrule\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js\,\text\:\/*\\\\\\n\\nChecks for fromTitle in text. If found, sees if its relevant,\\nand tries to swap it out if it is.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar wikitextHandler require($:/plugins/flibbles/relink/js/utils.js).getType(wikitext);\\n\\nexports.type text/vnd.tiddlywiki;\\n\\nexports.report wikitextHandler.report;\\nexports.relink wikitextHandler.relink;\\n\,\module-type\:\relinktext\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/relinkoperations/text.js\:{\title\:\$:/plugins/flibbles/relink/js/relinkoperations/text.js\,\text\:\/*\\\\\\n\\nDepending on the tiddler type, this will apply textOperators which may\\nrelink titles within the body.\\n\\n\\\\*/\\n\\n/*jslint node: false, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nexports.name text;\\n\\nvar textOperators utils.getModulesByTypeAsHashmap(relinktext, type);\\n\\n// Set up any aliases, mostly for backward-compatibility\\n$tw.utils.each(Object.keys(textOperators), function(type) {\\n\\tvar operator textOperatorstype;\\n\\tif(operator.aliases) {\\n\\t\\tfor(var index 0; index \u003C operator.aliases.length; index++) {\\n\\t\\t\\ttextOperatorsoperator.aliasesindex operator;\\n\\t\\t}\\n\\t}\\n});\\n\\n// These are deprecated. Dont use them.\\nvar oldTextOperators utils.getModulesByTypeAsHashmap(relinktextoperator, type);\\n\\nexports.report function(tiddler, callback, options) {\\n\\tif (tiddler.fields.text) {\\n\\t\\tvar type getType(tiddler, options);\\n\\t\\tif (textOperatorstype) {\\n\\t\\t\\ttextOperatorstype.report(tiddler.fields.text, callback, options);\\n\\t\\t} else if (oldTextOperatorstype) {\\n\\t\\t\\t// For the deprecated text operators\\n\\t\\t\\toldTextOperatorstype.report(tiddler, callback, options);\\n\\t\\t}\\n\\t}\\n};\\n\\nexports.relink function(tiddler, fromTitle, toTitle, changes, options) {\\n\\tif (tiddler.fields.text) {\\n\\t\\tvar type getType(tiddler, options),\\n\\t\\t\\tentry;\\n\\t\\tif (textOperatorstype) {\\n\\t\\t\\tentry textOperatorstype.relink(tiddler.fields.text, fromTitle, toTitle, options);\\n\\t\\t} else if (oldTextOperatorstype) {\\n\\t\\t\\t// For the deprecated text operators\\n\\t\\t\\tentry oldTextOperatorstype.relink(tiddler, fromTitle, toTitle, options);\\n\\t\\t}\\n\\t\\tif (entry) {\\n\\t\\t\\tchanges.text entry;\\n\\t\\t}\\n\\t}\\n};\\n\\n/* The type of the tiddler is determined based on:\\n * 1. Whether theres an exception specified on it.\\n * 2. The type the tiddler says it is.\\n * 3. Or the default vnd.tiddlywiki type if not specified.\\n */\\nfunction getType(tiddler, options) {\\n\\treturn options.settings.getException(tiddler.fields.title)\\n\\t\\t|| tiddler.fields.type\\n\\t\\t|| \\\text/vnd.tiddlywiki\\\;\\n};\\n\,\module-type\:\relinkoperator\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/attributes.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/attributes.js\,\text\:\/*\\\\\\n\\nFactory method for creating the attributes whitelist cache.\\n\\n\\\\*/\\n\\nvar utils require(../utils);\\n\\nexports.name \\\attributes\\\;\\n\\nexports.generate function(attributes, tiddler, key) {\\n\\tvar data utils.getType(tiddler.fields.text.trim());\\n\\tif (data) {\\n\\t\\tdata.source tiddler.fields.title;\\n\\t\\tvar elem root(key);\\n\\t\\tvar attr key.substr(elem.length+1);\\n\\t\\tattributeselem attributeselem || Object.create(null);\\n\\t\\tattributeselemattr data;\\n\\t}\\n};\\n\\n/* Returns first bit of a path. path/to/tiddler -> path\\n */\\nfunction root(string) {\\n\\tvar index string.indexOf(/);\\n\\tif (index > 0) {\\n\\t\\treturn string.substr(0, index);\\n\\t}\\n};\\n\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/exceptions.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/exceptions.js\,\text\:\/*\\\\\\n\\nFactory method for specifying system tiddlers which should not be treated\\nas text/vnd.tiddlywiki types, but for whatever reason, they dont specify\\nthe type they really are. Sort of like how $:/DefaultTiddlers is actually\\na filter.\\n\\n\\\\*/\\n\\nexports.name \\\exceptions\\\;\\n\\nexports.generate function(exceptions, tiddler, title) {\\n\\tvar tiddlerType tiddler.fields.text.trim();\\n\\tif (tiddlerType) {\\n\\t\\texceptionstitle tiddlerType;\\n\\t}\\n};\\n\,\the type they really are. Sort of like how $\:\/DefaultTiddlers is actually\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/fields.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/fields.js\,\text\:\/*\\\\\\n\\nFactory method for creating the fields whitelist cache.\\n\\n\\\\*/\\n\\nvar utils require(../utils);\\n\\nexports.name \\\fields\\\;\\n\\nexports.generate function(fields, tiddler, name) {\\n\\tvar data utils.getType(tiddler.fields.text.trim());\\n\\tif (data) {\\n\\t\\tdata.source tiddler.fields.title;\\n\\t\\tfieldsname data;\\n\\t}\\n};\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/fieldwidgets.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/fieldwidgets.js\,\text\:\/*\\\\\\n\\nFactory method for creating the fieldattributes regexp cache.\\n\\n\\\\*/\\n\\nexports.name \\\fieldattributes\\\;\\n\\nexports.generate function(fieldattributes, tiddler, key) {\\n\\tfieldattributeskey new RegExp(tiddler.fields.text.trim());\\n};\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/macros.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/macros.js\,\text\:\/*\\\\\\n\\nFactory method for creating the macros whitelist cache.\\n\\n\\\\*/\\n\\nvar utils require(../utils);\\n\\nexports.name \\\macros\\\;\\n\\nexports.generate function(macros, tiddler, key) {\\n\\tvar data utils.getType(tiddler.fields.text.trim());\\n\\tif (data) {\\n\\t\\tdata.source tiddler.fields.title;\\n\\t\\t// We take the last index, not the first, because macro\\n\\t\\t// parameters cant have slashes, but macroNames can.\\n\\t\\tvar name dir(key);\\n\\t\\tvar arg key.substr(name.length+1);\\n\\t\\tmacrosname macrosname || Object.create(null);\\n\\t\\tmacrosnamearg data;\\n\\t}\\n};\\n\\n/* Returns all but the last bit of a path. path/to/tiddler -> path/to\\n */\\nfunction dir(string) {\\n\\tvar index string.lastIndexOf(/);\\n\\tif (index > 0) {\\n\\t\\treturn string.substr(0, index);\\n\\t}\\n}\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/messages.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/messages.js\,\text\:\/*\\\\\\n\\nFactory method for creating the message regexp cache.\\n\\n\\\\*/\\n\\nexports.name \\\messages\\\;\\n\\nexports.generate function(messages, tiddler, key) {\\n\\tmessageskey new RegExp(tiddler.fields.text.trim());\\n};\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings/operators.js\:{\title\:\$:/plugins/flibbles/relink/js/settings/operators.js\,\text\:\/*\\\\\\n\\nFactory method for creating the operators whitelist cache.\\n\\n\\\\*/\\n\\nvar utils require(../utils);\\n\\nexports.name \\\operators\\\;\\n\\nexports.generate function(operators, tiddler, key) {\\n\\tvar data utils.getType(tiddler.fields.text.trim());\\n\\tif (data) {\\n\\t\\tdata.source tiddler.fields.title;\\n\\t\\tvar pair key.split(/);\\n\\t\\tvar name pair0;\\n\\t\\tdata.key key;\\n\\t\\toperatorsname operatorsname || Object.create(null);\\n\\t\\toperatorsnamepair1 || 1 data;\\n\\t}\\n};\\n\,\module-type\:\relinksetting\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/settings.js\:{\title\:\$:/plugins/flibbles/relink/js/settings.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nThis handles the fetching and distribution of relink settings.\\n\\n\\\\*/\\n\\nvar utils require(./utils);\\n\\n///// Legacy. You used to be able to access the type from utils.\\nexports.getType utils.getType;\\n/////\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/backupIndexer.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/backupIndexer.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nThis is a backup indexer Relink uses if the real one is disabled, or were\\n\u003CV5.1.23. Its not nearly as good, but it caches some.\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar utils require(\\\$:/plugins/flibbles/relink/js/utils.js\\\);\\nvar TiddlerContext utils.getContext(tiddler);\\n\\n// This is the indexer we use if the current wiki doesnt support indexers.\\nfunction BackupIndexer(wiki) {\\n\\tthis.wiki wiki;\\n};\\n\\nmodule.exports BackupIndexer;\\n\\nBackupIndexer.prototype.lookup function(title) {\\n\\treturn getCache(this.wiki).lookuptitle;\\n};\\n\\nBackupIndexer.prototype.reverseLookup function(title) {\\n\\tvar index getCache(this.wiki);\\n\\tif (!index.reversetitle) {\\n\\t\\tvar record Object.create(null);\\n\\t\\tfor (var other in index.lookup) {\\n\\t\\t\\tif (index.lookupothertitle) {\\n\\t\\t\\t\\trecordother index.lookupothertitle;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tindex.reversetitle record;\\n\\t}\\n\\treturn index.reversetitle;\\n};\\n\\n/* The backup indexer doesnt bother caching relink reports. It would always\\n * be called after a draft tiddler had changed, which would defeat the point.\\n */\\nBackupIndexer.prototype.relinkLookup function(fromTitle, toTitle, options) {\\n\\tvar cache getCache(this.wiki);\\n\\tif (cache.lastRelinkFrom fromTitle && cache.lastRelinkTo toTitle) {\\n\\t\\toptions.cache cache.lastRelinkCache;\\n\\t\\treturn cache.lastRelink;\\n\\t}\\n\\tcache.lastRelink utils.getRelinkResults(this.wiki, fromTitle, toTitle, cache.context, undefined, options);\\n\\tcache.lastRelinkFrom fromTitle;\\n\\tcache.lastRelinkTo toTitle;\\n\\tcache.lastRelinkCache options.cache;\\n\\treturn cache.lastRelink;\\n};\\n\\nBackupIndexer.prototype.orphans function() {\\n\\tvar index getCache(this.wiki).lookup;\\n\\tvar results ;\\n\\tfor (var title in index) {\\n\\t\\tvar found false;\\n\\t\\tfor (var anything in this.reverseLookup(title)) {\\n\\t\\t\\tfound true;\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t\\tif (!found) {\\n\\t\\t\\tresults.push(title);\\n\\t\\t}\\n\\t}\\n\\treturn results;\\n};\\n\\nfunction getCache(wiki) {\\n\\treturn wiki.getGlobalCache(relink, function() {\\n\\t\\tvar tiddlerList wiki.getRelinkableTitles();\\n\\t\\tvar index Object.create(null);\\n\\t\\tvar wikiContext utils.getWikiContext(wiki);\\n\\t\\tfor (var i 0; i \u003C tiddlerList.length; i++) {\\n\\t\\t\\tvar title tiddlerListi;\\n\\t\\t\\tvar tiddler wiki.getTiddler(title);\\n\\t\\t\\tif (tiddler && !tiddler.fields\\\plugin-type\\\) {\\n\\t\\t\\t\\tvar context new TiddlerContext(wiki, wikiContext, title);\\n\\t\\t\\t\\tindextitle utils.getTiddlerRelinkReferences(wiki, title, context);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn {\\n\\t\\t\\tlookup: index,\\n\\t\\t\\treverse: Object.create(null),\\n\\t\\t\\tcontext: wikiContext};\\n\\t});\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/entry.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/entry.js\,\text\:\/*\\\\\\n\\nEntries are deprecated. Dont use them. These classes are here just so that\\nany 3rd party modules built for Relink V1 dont break.\\n\\nJust return an object like, {output: \\\string\\\, impossible: true|undefined}\\n\\n\\\\*/\\n\\nfunction EntryNode() {\\n\\tthis.children ;\\n};\\n\\nmodule.exports EntryNode;\\n\\n/** PURE VIRTUAL\\n * EntryNode.prototype.report function() -> \\\string\\\, ...\\n */\\n\\nEntryNode.newType function() {\\n\\treturn EntryNode;\\n};\\n\\nEntryNode.prototype.add function(entry) {\\n\\tthis.children.push(entry);\\n};\\n\\nfunction EntryCollection() {\\n\\tthis.children Object.create(null);\\n\\tthis.types Object.create(null);\\n};\\n\\nEntryNode.newCollection function(name) {\\n\\treturn EntryCollection;\\n};\\n\\n// Again. I reiterate. Dont use this. All this is just legacy support.\\nObject.defineProperty(EntryCollection, impossible, {\\n\\tget: function() {\\n\\t\\tvar imp this._impossible;\\n\\t\\tthis.eachChild(function(child) { imp imp || child.impossible; });\\n\\t\\treturn imp;\\n\\t},\\n\\tset: function(impossible) {\\n\\t\\tthis._impossible true;\\n\\t}\\n});\\n\\nEntryCollection.prototype.eachChild function(method) {\\n\\tfor (var child in this.children) {\\n\\t\\tmethod(this.childrenchild);\\n\\t}\\n};\\n\\nEntryCollection.prototype.addChild function(child, name, type) {\\n\\tthis.childrenname child;\\n\\tthis.typesname type;\\n};\\n\\nEntryCollection.prototype.hasChildren function() {\\n\\treturn Object.keys(this.children).length > 0;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/macrocall/parameters.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/macrocall/parameters.js\,\text\:\var utils require($:/plugins/flibbles/relink/js/utils.js);\\n\\nexports.name \\\parameters\\\;\\n\\n// Error thrown when a macros definition is needed, but cant be found.\\nfunction CannotFindMacroDef() {};\\nCannotFindMacroDef.prototype.impossible true;\\nCannotFindMacroDef.prototype.name \\\macroparam\\\;\\n// Failed relinks due to missing definitions arent reported for now.\\n// I may want to do something special later on.\\nCannotFindMacroDef.prototype.report function() { return ; };\\n\\nexports.report function(context, macro, callback, options) {\\n\\tvar managedMacro context.getMacro(macro.name);\\n\\tif (!managedMacro) {\\n\\t\\t// We dont manage this macro. Bye.\\n\\t\\treturn undefined;\\n\\t}\\n\\tfor (var managedArg in managedMacro) {\\n\\t\\tvar index;\\n\\t\\ttry {\\n\\t\\t\\tindex getParamIndexWithinMacrocall(context, macro.name, managedArg, macro.params, options);\\n\\t\\t} catch (e) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tif (index \u003C 0) {\\n\\t\\t\\t// The argument was not supplied. Move on to next.\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tvar param macro.paramsindex;\\n\\t\\tvar handler managedMacromanagedArg;\\n\\t\\tvar nestedOptions Object.create(options);\\n\\t\\tnestedOptions.settings context;\\n\\t\\tvar entry handler.report(param.value, function(title, blurb, style) {\\n\\t\\t\\tvar rtn managedArg;\\n\\t\\t\\tif (blurb) {\\n\\t\\t\\t\\trtn + : \\\ + blurb + \\\;\\n\\t\\t\\t}\\n\\t\\t\\tcallback(title, macro.name + + rtn, style);\\n\\t\\t}, nestedOptions);\\n\\t}\\n};\\n\\nexports.relink function(context, macro, text, fromTitle, toTitle, options) {\\n\\tvar managedMacro context.getMacro(macro.name);\\n\\tvar modified false;\\n\\tif (!managedMacro) {\\n\\t\\t// We dont manage this macro. Bye.\\n\\t\\treturn undefined;\\n\\t}\\n\\tvar outMacro $tw.utils.extend({}, macro);\\n\\tvar macroEntry {};\\n\\toutMacro.params macro.params.slice();\\n\\tfor (var managedArg in managedMacro) {\\n\\t\\tvar index;\\n\\t\\ttry {\\n\\t\\t\\tindex getParamIndexWithinMacrocall(context, macro.name, managedArg, macro.params, options);\\n\\t\\t} catch (e) {\\n\\t\\t\\tif (e instanceof CannotFindMacroDef) {\\n\\t\\t\\t\\tmacroEntry.impossible true;\\n\\t\\t\\t\\tcontinue;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (index \u003C 0) {\\n\\t\\t\\t// this arg either was not supplied, or we cant find\\n\\t\\t\\t// the definition, so we cant tie it to an anonymous\\n\\t\\t\\t// argument. Either way, move on to the next.\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tvar param macro.paramsindex;\\n\\t\\tvar handler managedMacromanagedArg;\\n\\t\\tvar nestedOptions Object.create(options);\\n\\t\\tnestedOptions.settings context;\\n\\t\\tvar entry handler.relink(param.value, fromTitle, toTitle, nestedOptions);\\n\\t\\tif (entry undefined) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\t// Macro parameters can only be string parameters, not\\n\\t\\t// indirect, or macro, or filtered\\n\\t\\tif (entry.impossible) {\\n\\t\\t\\tmacroEntry.impossible true;\\n\\t\\t}\\n\\t\\tif (!entry.output) {\\n\\t\\t\\tcontinue;\\n\\t\\t}\\n\\t\\tvar quote utils.determineQuote(text, param);\\n\\t\\tvar newParam $tw.utils.extend({}, param);\\n\\t\\tnewParam.start newParam.end - (newParam.value.length + (quote.length*2));\\n\\t\\tnewParam.value entry.output;\\n\\t\\tnewParam.quote quote;\\n\\t\\tnewParam.modified true;\\n\\t\\toutMacro.paramsindex newParam;\\n\\t\\tmodified true;\\n\\t}\\n\\tif (modified || macroEntry.impossible) {\\n\\t\\tif (modified) {\\n\\t\\t\\tmacroEntry.output outMacro;\\n\\t\\t}\\n\\t\\treturn macroEntry;\\n\\t}\\n\\treturn undefined;\\n};\\n\\n/** Returns -1 if param definitely isnt in macrocall.\\n */\\nfunction getParamIndexWithinMacrocall(context, macroName, param, params, options) {\\n\\tvar index, i, anonsExist false;\\n\\tfor (i 0; i \u003C params.length; i++) {\\n\\t\\tvar name paramsi.name;\\n\\t\\tif (name param) {\\n\\t\\t\\treturn i;\\n\\t\\t}\\n\\t\\tif (name undefined) {\\n\\t\\t\\tanonsExist true;\\n\\t\\t}\\n\\t}\\n\\tif (!anonsExist) {\\n\\t\\t// If no anonymous parameters are present, and we didnt find\\n\\t\\t// it among the named ones, it must not be there.\\n\\t\\treturn -1;\\n\\t}\\n\\tvar expectedIndex indexOfParameterDef(context, macroName, param, options);\\n\\t// Weve got to skip over all the named parameter instances.\\n\\tif (expectedIndex > 0) {\\n\\t\\tvar anonI 0;\\n\\t\\tfor (i 0; i \u003C params.length; i++) {\\n\\t\\t\\tif (paramsi.name undefined) {\\n\\t\\t\\t\\tif (anonI expectedIndex) {\\n\\t\\t\\t\\t\\treturn i;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tanonI++;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar indexOfOther indexOfParameterDef(context, macroName, paramsi.name, options);\\n\\t\\t\\t\\tif (indexOfOther \u003C expectedIndex) {\\n\\t\\t\\t\\t\\tanonI++;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn -1;\\n};\\n\\n// Looks up the definition of a macro, and figures out what the expected index\\n// is for the given parameter.\\nfunction indexOfParameterDef(context, macroName, paramName, options) {\\n\\tvar def context.getMacroDefinition(macroName);\\n\\tif (def undefined) {\\n\\t\\tthrow new CannotFindMacroDef();\\n\\t}\\n\\tvar params def.params || ;\\n\\tfor (var i 0; i \u003C params.length; i++) {\\n\\t\\tif (paramsi.name paramName) {\\n\\t\\t\\treturn i;\\n\\t\\t}\\n\\t}\\n\\treturn -1;\\n};\\n\\n\,\module-type\:\relinkmacrocall\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/macrocall.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/macrocall.js\,\text\:\/*\\\\\\n\\nMethods for reporting and relinking macros. Behaves much like a fieldtype, except that its not.\\n\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar Rebuilder require(\\\$:/plugins/flibbles/relink/js/utils/rebuilder\\\);\\nvar macrocallOperators utils.getModulesByTypeAsHashmap(relinkmacrocall, name);\\n\\n/** As in, report a macrocall invocation that is an html attribute.\\n * macro: must be a macro object.*/\\nexports.report function(context, macro, callback, options) {\\n\\tfor (var operator in macrocallOperators) {\\n\\t\\tmacrocallOperatorsoperator.report(context, macro, callback, options);\\n\\t}\\n};\\n\\n/**Processes the given macro,\\n * macro: {name:, params:, start:, end:}\\n * each parameters: {name:, end:, value:}\\n * Macro invocation returned is the same, but relinked, and may have new keys:\\n * parameters: {type: macro, start:, newValue: (quoted replacement value)}\\n * Output of the returned entry isnt a string, but a macro object. It needs\\n * to be converted.\\n */\\nexports.relink function(context, macro, text, fromTitle, toTitle, mayBeWidget, options) {\\n\\tvar entry;\\n\\tfor (var operator in macrocallOperators) {\\n\\t\\tvar results macrocallOperatorsoperator.relink(context, macro, text, fromTitle, toTitle, options);\\n\\t\\tif (results) {\\n\\t\\t\\tentry entry || {};\\n\\t\\t\\tif (results.impossible) {\\n\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t}\\n\\t\\t\\tif (results.output) {\\n\\t\\t\\t\\tmacro results.output;\\n\\t\\t\\t\\tentry.output macro;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn entry;\\n};\\n\\n/**Converts the macro object into a string, includes the \u003C\u003C..>>.\\n * The text is the old text the macro was formed from. Its used to preserve\\n * whitespace.\\n */\\nexports.reassemble function(entry, text, options) {\\n\\tvar macro entry.output;\\n\\tvar builder new Rebuilder(text, macro.start);\\n\\tvar varAttribute macro.attributes && macro.attributes$variable;\\n\\tif (varAttribute && varAttribute.value ! macro.name) {\\n\\t\\t// The name of the macro changed. Update it.\\n\\t\\tbuilder.add(varAttribute.value, macro.start + 2, macro.start + 2 + macro.name.length);\\n\\t}\\n\\tfor (var i 0; i \u003C macro.params.length; i++) {\\n\\t\\tvar param macro.paramsi;\\n\\t\\tif (param.modified) {\\n\\t\\t\\tvar newValue exports.wrapParameterValue(param.value, param.quote);\\n\\t\\t\\tif (newValue undefined) {\\n\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tbuilder.add(newValue, param.start, param.end);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn builder.results(macro.end);\\n};\\n\\n\\n/**Like wrapAttribute value, except for macro parameters, not attributes.\\n *\\n * These are more permissive. Allows brackets,\\n * and slashes and \u003C in unquoted values.\\n */\\nexports.wrapParameterValue function(value, preference) {\\n\\tvar whitelist \\\\\\, \\\\\\, \\\, , \\\\\\\\\;\\n\\tvar choices {\\n\\t\\t\\\\\\: function(v) {return !/(\\\\s>\\\:)/.test(v); },\\n\\t\\t\\\\\\: function(v) {return v.indexOf(\\\\\\) \u003C 0; },\\n\\t\\t\\\: function(v) {return v.indexOf(\\\) \u003C 0; },\\n\\t\\t\\\\\\: canBePrettyOperand,\\n\\t\\t\\\\\\\\\: function(v) {return v.indexOf(\\\\\\\\\) \u003C 0 && vv.length-1 ! \\\;}\\n\\t};\\n\\tif (choicespreference && choicespreference(value)) {\\n\\t\\treturn wrap(value, preference);\\n\\t}\\n\\tfor (var i 0; i \u003C whitelist.length; i++) {\\n\\t\\tvar quote whitelisti;\\n\\t\\tif (choicesquote(value)) {\\n\\t\\t\\treturn wrap(value, quote);\\n\\t\\t}\\n\\t}\\n\\t// No quotes will work on this\\n\\treturn undefined;\\n};\\n\\nfunction canBePrettyOperand(value) {\\n\\treturn value.indexOf() \u003C 0;\\n};\\n\\n\\nfunction wrap(value, wrapper) {\\n\\tvar wrappers {\\n\\t\\t\\\\\\: function(v) {return v; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; },\\n\\t\\t\\\: function(v) {return \\\+v+\\\; },\\n\\t\\t\\\\\\\\\: function(v) {return \\\\\\\\\+v+\\\\\\\\\; },\\n\\t\\t\\\\\\: function(v) {return \\\\\\+v+\\\\\\; }\\n\\t};\\n\\tvar chosen wrapperswrapper;\\n\\tif (chosen) {\\n\\t\\treturn chosen(value);\\n\\t} else {\\n\\t\\treturn undefined;\\n\\t}\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/rebuilder.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/rebuilder.js\,\text\:\/*\\\\\\n\\nThis helper class aids in reconstructing an existing string with new parts.\\n\\n\\\\*/\\n\\nfunction Rebuilder(text, start) {\\n\\tthis.text text;\\n\\tthis.index start || 0;\\n\\tthis.pieces ;\\n};\\n\\nmodule.exports Rebuilder;\\n\\n/**Pieces must be added consecutively.\\n * Start and end are the indices in the old string specifying where to graft\\n * in the new piece.\\n */\\nRebuilder.prototype.add function(value, start, end) {\\n\\tthis.pieces.push(this.text.substring(this.index, start), value);\\n\\tthis.index end;\\n};\\n\\nRebuilder.prototype.changed function() {\\n\\treturn this.pieces.length > 0;\\n};\\n\\nRebuilder.prototype.results function(end) {\\n\\tif (this.changed()) {\\n\\t\\tthis.pieces.push(this.text.substring(this.index, end));\\n\\t\\treturn this.pieces.join();\\n\\t}\\n\\treturn undefined;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils/substitution.js\:{\title\:\$:/plugins/flibbles/relink/js/utils/substitution.js\,\text\:\/*\\\\\\n\\nHandles relinking substitution text, like strings containing $(this)$.\\n\\n\\\\*/\\n\\nvar utils require($:/plugins/flibbles/relink/js/utils.js);\\nvar filterHandler utils.getType(filter);\\nvar macrocallHandler require(\\\./macrocall.js\\\);\\n\\nexports.report function(string, callback, options) {\\n\\tif (!options.noFilterSubstitution) {\\n\\t\\tvar filterRegex /\\\\$\\\\{(\\\\S\\\\s+?)\\\\}\\\\$/g, filter;\\n\\t\\twhile (filter filterRegex.exec(string)) {\\n\\t\\t\\tfilterHandler.report(filter1, function(title, blurb, style) {\\n\\t\\t\\t\\tcallback(title, ${ + blurb + }$, style);\\n\\t\\t\\t}, options);\\n\\t\\t}\\n\\t}\\n\\tvar varRegex /\\\\$\\\\((^\\\\)\\\\$+)\\\\)\\\\$/g, varMatch;\\n\\twhile (varMatch varRegex.exec(string)) {\\n\\t\\tmacrocallHandler.report(options.settings, {name: varMatch1, params: }, function(title, blurb, style) {\\n\\t\\t\\tcallback(title, $( + blurb + )$, style);\\n\\t\\t}, options);\\n\\t}\\n};\\n\\nexports.relink function(string, fromTitle, toTitle, options) {\\n\\tvar entry;\\n\\tvar changed false;\\n\\tvar newValue string;\\n\\tif (!options.noFilterSubstitution) {\\n\\t\\tnewValue newValue.replace(/\\\\$\\\\{(\\\\S\\\\s+?)\\\\}\\\\$/g, function(match, filter) {\\n\\t\\t\\tvar filterEntry filterHandler.relink(filter, fromTitle, toTitle, options);\\n\\t\\t\\tif (filterEntry) {\\n\\t\\t\\t\\tentry entry || {};\\n\\t\\t\\t\\tif (filterEntry.output) {\\n\\t\\t\\t\\t\\t// The only }$ should be the one at the very end\\n\\t\\t\\t\\t\\tif (filterEntry.output.indexOf(\\\}$\\\) \u003C 0) {\\n\\t\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t\\t\\tmatch ${ + filterEntry.output + }$;\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (filterEntry.impossible) {\\n\\t\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn match;\\n\\t\\t});\\n\\t}\\n\\tnewValue newValue.replace(/\\\\$\\\\((^\\\\)\\\\$+)\\\\)\\\\$/g, function(match, varname) {\\n\\t\\tvar macroEntry macrocallHandler.relink(options.settings, {name: varname, params: }, string, fromTitle, toTitle, false, options);\\n\\t\\tif (macroEntry) {\\n\\t\\t\\tentry entry || {};\\n\\t\\t\\tif (macroEntry.output) {\\n\\t\\t\\t\\tvar newTitle macroEntry.output.attributes.$variable.value;\\n\\t\\t\\t\\tif (newTitle.indexOf($) > 0 || newTitle.indexOf()) > 0) {\\n\\t\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tchanged true;\\n\\t\\t\\t\\t\\tmatch $( + newTitle + )$;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif (macroEntry.impossible) {\\n\\t\\t\\t\\tentry.impossible true;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn match;\\n\\t});\\n\\tif (changed) {\\n\\t\\tentry.output newValue;\\n\\t}\\n\\treturn entry;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/utils.js\:{\title\:\$:/plugins/flibbles/relink/js/utils.js\,\text\:\/*\\\\\\nmodule-type: library\\n\\nUtility methods for relink.\\n\\n\\\\*/\\n\\nvar macroFilter \\\$:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of allshadows+tiddlerstag$:/tags/Global!hasdraft.of\\\;\\n\\n/**This works nearly identically to $tw.modules.getModulesByTypeAsHashmap\\n * except that this also takes care of migrating V1 relink modules.\\n */\\nexports.getModulesByTypeAsHashmap function(moduleType, nameField) {\\n\\tvar results Object.create(null);\\n\\t$tw.modules.forEachModuleOfType(moduleType, function(title, module) {\\n\\t\\tvar key modulenameField;\\n\\t\\tif (key ! undefined) {\\n\\t\\t\\tresultskey module;\\n\\t\\t} else {\\n\\t\\t\\tfor (var entry in module) {\\n\\t\\t\\t\\tresultsentry {\\n\\t\\t\\t\\t\\trelink: moduleentry,\\n\\t\\t\\t\\t\\treport: function() {}};\\n\\t\\t\\t\\tresultsentrynameField entry;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t});\\n\\t// Weve got to sort these so that behavior is consistent across different\\n\\t// versions of TiddlyMap, whose module return order depends on version...\\n\\treturn sortModules(results);\\n};\\n\\nfunction sortModules(moduleMap) {\\n\\tvar keys Object.keys(moduleMap);\\n\\tvar sortedResults Object.create(null);\\n\\tkeys.sort();\\n\\tfor (var i 0; i \u003C keys.length; i++) {\\n\\t\\tvar key keysi;\\n\\t\\tif (moduleMapkey.after\\n\\t\\t&& moduleMapkey.after.some(function(requirement) { return !sortedResultsrequirement})) {\\n\\t\\t\\t// Not all requirements have been met yet.\\n\\t\\t\\t$tw.utils.pushTop(keys, key);\\n\\t\\t\\ti--;\\n\\t\\t} else {\\n\\t\\t\\tsortedResultskey moduleMapkey;\\n\\t\\t}\\n\\t}\\n\\treturn sortedResults;\\n};\\n\\nexports.getTiddlerRelinkReferences function(wiki, title, context) {\\n\\tvar tiddler wiki.getTiddler(title),\\n\\t\\treferences Object.create(null),\\n\\t\\toptions {settings: context, wiki: wiki};\\n\\tif (tiddler) {\\n\\t\\ttry {\\n\\t\\t\\tfor (var relinker in getRelinkOperators()) {\\n\\t\\t\\t\\tgetRelinkOperators()relinker.report(tiddler, function(title, blurb, style) {\\n\\t\\t\\t\\t\\treferencestitle referencestitle || ;\\n\\t\\t\\t\\t\\treferencestitle.push($tw.utils.extend({blurb: blurb || }, style));\\n\\t\\t\\t\\t}, options);\\n\\t\\t\\t}\\n\\t\\t} catch (e) {\\n\\t\\t\\tif (e.message) {\\n\\t\\t\\t\\te.message e.message + \\\\\\\nWhen reporting \\\ + title + \\\ Relink references\\\;\\n\\t\\t\\t}\\n\\t\\t\\tthrow e;\\n\\t\\t}\\n\\t}\\n\\treturn references;\\n};\\n\\n/** Returns a pair like this,\\n * { title: {field: entry, ... }, ... }\\n */\\nexports.getRelinkResults function(wiki, fromTitle, toTitle, context, tiddlerList, options) {\\n\\toptions options || {};\\n\\toptions.wiki options.wiki || wiki;\\n\\tfromTitle (fromTitle || \\\\\\).trim();\\n\\ttoTitle (toTitle || \\\\\\).trim();\\n\\tvar changeList Object.create(null);\\n\\tif(fromTitle && toTitle ! undefined) {\\n\\t\\tif (tiddlerList undefined) {\\n\\t\\t\\ttiddlerList wiki.getRelinkableTitles();\\n\\t\\t}\\n\\t\\tfor (var i 0; i \u003C tiddlerList.length; i++) {\\n\\t\\t\\tvar title tiddlerListi;\\n\\t\\t\\tvar tiddler wiki.getTiddler(title);\\n\\t\\t\\tif(tiddler) {\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\tvar entries Object.create(null),\\n\\t\\t\\t\\t\\t\\toperators getRelinkOperators();\\n\\t\\t\\t\\t\\toptions.settings new Contexts.tiddler(wiki, context, title);\\n\\t\\t\\t\\t\\tfor (var operation in operators) {\\n\\t\\t\\t\\t\\t\\toperatorsoperation.relink(tiddler, fromTitle, toTitle, entries, options);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tfor (var field in entries) {\\n\\t\\t\\t\\t\\t\\t// So long as there is one key,\\n\\t\\t\\t\\t\\t\\t// add it to the change list.\\n\\t\\t\\t\\t\\t\\tif (tiddler.fields\\\plugin-type\\\) {\\n\\t\\t\\t\\t\\t\\t\\t// We never change plugins, even if they have links\\n\\t\\t\\t\\t\\t\\t\\tchangeListtitle {};\\n\\t\\t\\t\\t\\t\\t\\tchangeListtitlefield {impossible: true};\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\tchangeListtitle entries;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\t\\t// Should we test for instanceof Error instead?: yes\\n\\t\\t\\t\\t\\t// Does that work in the testing environment?: no\\n\\t\\t\\t\\t\\tif (e.message) {\\n\\t\\t\\t\\t\\t\\te.message e.message + \\\\\\\nWhen relinking \\\ + title + \\\\\\;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tthrow e;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn changeList;\\n};\\n\\nvar Contexts $tw.modules.applyMethods(relinkcontext);\\n\\nexports.getContext function(name) {\\n\\treturn Contextsname;\\n};\\n\\nexports.getWikiContext function(wiki) {\\n\\t// This gives a fresh context every time. It is up to the indexer or\\n\\t// the cache to preserve those contexts for as long as needed.\\n\\tvar whitelist new Contexts.whitelist(wiki);\\n\\treturn new Contexts.import(wiki, whitelist, macroFilter);\\n};\\n\\n/** Returns the Relink indexer, or a dummy object which pretends to be one.\\n */\\nexports.getIndexer function(wiki) {\\n\\tif (!wiki._relink_indexer) {\\n\\t\\twiki._relink_indexer (wiki.getIndexer && wiki.getIndexer(\\\RelinkIndexer\\\)) || new (require($:/plugins/flibbles/relink/js/utils/backupIndexer.js))(wiki);\\n\\t}\\n\\treturn wiki._relink_indexer;\\n};\\n\\n/**Relinking supports a cache that persists throughout a whole relink op.\\n * This is because the Tiddlywiki caches may get wiped multiple times\\n * throughout the course of a relink.\\n */\\nexports.getCacheForRun function(options, cacheName, initializer) {\\n\\toptions.cache options.cache || Object.create(null);\\n\\tif (!$tw.utils.hop(options.cache, cacheName)) {\\n\\t\\toptions.cachecacheName initializer();\\n\\t}\\n\\treturn options.cachecacheName;\\n};\\n\\n/**Returns a specific relinker.\\n * This is useful for wikitext rules which need to parse a filter or a list\\n */\\nexports.getType function(name) {\\n\\tvar Handler getFieldTypes()name;\\n\\treturn Handler ? new Handler() : undefined;\\n};\\n\\nexports.getTypes function() {\\n\\t// We dont return fieldTypes, because we dont want it modified,\\n\\t// and we need to filter out legacy names.\\n\\tvar rtn Object.create(null);\\n\\tfor (var type in getFieldTypes()) {\\n\\t\\tvar typeObject getFieldTypes()type;\\n\\t\\trtntypeObject.typeName typeObject;\\n\\t}\\n\\treturn rtn;\\n};\\n\\nexports.getDefaultType function(wiki) {\\n\\tvar tiddler wiki.getTiddler(\\\$:/config/flibbles/relink/settings/default-type\\\);\\n\\tvar defaultType tiddler && tiddler.fields.text;\\n\\t// make sure the default actually exists, otherwise default\\n\\treturn fieldTypesdefaultType ? defaultType : \\\title\\\;\\n};\\n\\nexports.abridgeString function(string, maxLength, truncLength) {\\n\\tif (typeof string \\\string\\\) {\\n\\t\\tmaxLength maxLength || 3;\\n\\t\\tif (truncLength undefined) {\\n\\t\\t\\ttruncLength maxLength-3;\\n\\t\\t}\\n\\t\\tstring string.replace(/\\\\s+/g, \\\ \\\).trim();\\n\\t\\treturn (string.length > maxLength)? string.substr(0, truncLength) + \\\...\\\ : string;\\n\\t}\\n\\treturn string;\\n};\\n\\nexports.touchModifyField function(wiki) {\\n\\tvar tiddler wiki.getTiddler(\\\$:/config/flibbles/relink/touch-modify\\\);\\n\\treturn tiddler && tiddler.fields.text.trim() \\\yes\\\;\\n};\\n\\n/**Given some text, and a param or attribute within that text, this returns\\n * what type of quotation that attribute is using.\\n *\\n * param: An object in the form {end:, ...}\\n */\\nexports.determineQuote function(text, param) {\\n\\tvar pos param.end-1;\\n\\tif (textpos \\\\\\) {\\n\\t\\treturn \\\\\\;\\n\\t}\\n\\tif (textpos \\\) {\\n\\t\\tif (text.substr(pos-2, 3) \\\\\\\\\) {\\n\\t\\t\\treturn \\\\\\\\\;\\n\\t\\t} else {\\n\\t\\t\\treturn \\\;\\n\\t\\t}\\n\\t}\\n\\tif (text.substr(pos-1,2) && text.substr((pos-param.value.length)-3, 2) ) {\\n\\t\\treturn \\\\\\;\\n\\t}\\n\\treturn ;\\n};\\n\\n/**We use this startsWith instead of the core utils one, because this one\\n * uses native code if it can.\\n */\\nexports.startsWith (String.prototype.startsWith)?\\n\\tfunction(str, search) {\\n\\t\\treturn str.startsWith(search);\\n\\t}:\\n\\tfunction(str, search) {\\n\\t\\treturn str.substring(0, search.length) search;\\n\\t};\\n\\nvar fieldTypes;\\n\\nfunction getFieldTypes() {\\n\\tif (!fieldTypes) {\\n\\t\\tfieldTypes Object.create(null);\\n\\t\\t$tw.modules.forEachModuleOfType(\\\relinkfieldtype\\\, function(title, exports) {\\n\\t\\t\\tfunction NewType() {};\\n\\t\\t\\tNewType.prototype exports;\\n\\t\\t\\tNewType.typeName exports.name;\\n\\t\\t\\tfieldTypesexports.name NewType;\\n\\t\\t\\t// For legacy, if the NewType doesnt have a report method, we add one\\n\\t\\t\\tif (!exports.report) {\\n\\t\\t\\t\\texports.report function() {};\\n\\t\\t\\t}\\n\\t\\t\\t// Also for legacy, some of the field types can go by other names\\n\\t\\t\\tif (exports.aliases) {\\n\\t\\t\\t\\t$tw.utils.each(exports.aliases, function(alias) {\\n\\t\\t\\t\\t\\tfieldTypesalias NewType;\\n\\t\\t\\t\\t});\\n\\t\\t\\t}\\n\\t\\t});\\n\\t}\\n\\treturn fieldTypes;\\n}\\n\\nvar relinkOperators;\\n\\nfunction getRelinkOperators() {\\n\\tif (!relinkOperators) {\\n\\t\\trelinkOperators exports.getModulesByTypeAsHashmap(relinkoperator, name);\\n\\t}\\n\\treturn relinkOperators;\\n};\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/js/wikimethods.js\:{\title\:\$:/plugins/flibbles/relink/js/wikimethods.js\,\text\:\/*\\\\\\nmodule-type: wikimethod\\n\\nIntroduces some utility methods used by Relink.\\n\\n\\\\*/\\n\\nvar utils require(\\\./utils.js\\\);\\n\\nexports.getTiddlerRelinkReferences function(title, options) {\\n\\tvar refs utils.getIndexer(this).lookup(title);\\n\\treturn refs && blurbs(refs, options && options.hard);\\n};\\n\\nexports.getTiddlerRelinkBackreferences function(title) {\\n\\tvar refs utils.getIndexer(this).reverseLookup(title);\\n\\t// For now, I dont have the equivalent \\\hard\\\ option because Im not\\n\\t// sure it has any value. May change this later.\\n\\treturn blurbs(refs);\\n};\\n\\nexports.getRelinkableTitles function() {\\n\\tvar toUpdate \\\$:/config/flibbles/relink/to-update\\\;\\n\\tvar wiki this;\\n\\treturn this.getCacheForTiddler(toUpdate, \\\relink-toUpdate\\\, function() {\\n\\t\\tvar tiddler wiki.getTiddler(toUpdate);\\n\\t\\tif (tiddler) {\\n\\t\\t\\treturn wiki.compileFilter(tiddler.fields.text);\\n\\t\\t} else {\\n\\t\\t\\treturn wiki.allTitles;\\n\\t\\t}\\n\\t})();\\n};\\n\\nexports.getRelinkOrphans function(options) {\\n\\treturn utils.getIndexer(this).orphans(options);\\n};\\n\\nfunction blurbs(refs, hardOnly) {\\n\\tvar blurbsOnly Object.create(null);\\n\\tfor (var title in refs) {\\n\\t\\tfor (var i 0; i \u003C refstitle.length; i++) {\\n\\t\\t\\tvar record refstitlei;\\n\\t\\t\\tif (!hardOnly || !record.soft) {\\n\\t\\t\\t\\tblurbsOnlytitle blurbsOnlytitle || ;\\n\\t\\t\\t\\tblurbsOnlytitle.push(record.blurb);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn blurbsOnly;\\n};\\n\,\module-type\:\wikimethod\,\type\:\application/javascript\},\$:/plugins/flibbles/relink/language/Buttons/Delete/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/Delete/Hint\,\text\:\delete\},\$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint\,\text\:\go to defining tiddler\},\$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption\,\text\:\add\},\$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint\,\text\:\Specify a new widget/element attribute to be updated whenever a tiddler is renamed\},\$:/plugins/flibbles/relink/language/Buttons/NewField/Caption\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewField/Caption\,\text\:\add\},\$:/plugins/flibbles/relink/language/Buttons/NewField/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewField/Hint\,\text\:\Specify a new field to be updated whenever a tiddler is renamed\},\$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption\,\text\:\add\},\$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint\,\text\:\Specify a new filter operator to be considered whenever a tiddler is renamed\},\$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption\,\text\:\add\},\$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint\:{\title\:\$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint\,\text\:\Specify a new macro parameter to be updated whenever a tiddler is renamed\},\$:/plugins/flibbles/relink/language/Error/InvalidAttributeName\:{\title\:\$:/plugins/flibbles/relink/language/Error/InvalidAttributeName\,\text\:\Illegal characters in attribute name \\\\u003C$text text\u003C\u003CattributeName>>/>\\\. Attributes cannot contain slashes (/), closing angle or square brackets (> or ), quotes or apostrophes (\\\ or \\\\\\), equals (), or whitespace\},\$:/plugins/flibbles/relink/language/Error/InvalidElementName\:{\title\:\$:/plugins/flibbles/relink/language/Error/InvalidElementName\,\text\:\Illegal characters in element/widget name \\\\u003C$text text\u003C\u003CelementName>>/>\\\. Element tags can only contain letters and the characters hyphen (`-`) and dollar sign (`$`)\},\$:/plugins/flibbles/relink/language/Error/InvalidMacroName\:{\title\:\$:/plugins/flibbles/relink/language/Error/InvalidMacroName\,\text\:\Illegal characters in macro name \\\\u003C$text text\u003C\u003CmacroName>>/>\\\. Macros cannot contain whitespace\},\$:/plugins/flibbles/relink/language/Error/InvalidParameterName\:{\title\:\$:/plugins/flibbles/relink/language/Error/InvalidParameterName\,\text\:\Illegal characters in parameter name \\\\u003C$text text\u003C\u003CparameterName>>/>\\\. Parameters can only contain letters, digits, and the characters underscore (`_`) and hyphen (`-`)\},\$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator\:{\title\:\$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator\,\text\:\Filter Error: Unknown suffix for the relink filter operator\},\$:/plugins/flibbles/relink/language/Error/ReportFailedRelinks\:{\title\:\$:/plugins/flibbles/relink/language/Error/ReportFailedRelinks\,\text\:\Relink could not update \u003C\u003Cfrom>> to \u003C\u003Cto>> inside the following tiddlers:\},\$:/plugins/flibbles/relink/language/Error/UnrecognizedType\:{\title\:\$:/plugins/flibbles/relink/language/Error/UnrecognizedType\,\text\:\Relink parse error: Unrecognized field type \u003C\u003Ctype>>\},\$:/plugins/flibbles/relink/language/Filters/Missing\:{\title\:\$:/plugins/flibbles/relink/language/Filters/Missing\,\text\:\//Relink// Missing tiddlers\},\$:/plugins/flibbles/relink/language/Filters/Orphans\:{\title\:\$:/plugins/flibbles/relink/language/Filters/Orphans\,\text\:\//Relink// Orphans tiddlers\},\$:/plugins/flibbles/relink/language/Help/Attributes\:{\title\:\$:/plugins/flibbles/relink/language/Help/Attributes\,\text\:\See the \u003Ca href{{{{$:/plugins/flibbles/relink!!demo}addsuffix#Attributes}}} class\\\tc-tiddlylink-external\\\>Attributes documentation page\u003C/a> for details.\},\$:/plugins/flibbles/relink/language/Help/Fields\:{\title\:\$:/plugins/flibbles/relink/language/Help/Fields\,\text\:\See the \u003Ca href{{{{$:/plugins/flibbles/relink!!demo}addsuffix#Fields}}} class\\\tc-tiddlylink-external\\\>Fields documentation page\u003C/a> for details.\},\$:/plugins/flibbles/relink/language/Help/Macros\:{\title\:\$:/plugins/flibbles/relink/language/Help/Macros\,\text\:\See the \u003Ca href{{{{$:/plugins/flibbles/relink!!demo}addsuffix#Macros}}} class\\\tc-tiddlylink-external\\\>Macros documentation page\u003C/a> for details.\},\$:/plugins/flibbles/relink/language/Help/Operators\:{\title\:\$:/plugins/flibbles/relink/language/Help/Operators\,\text\:\See the \u003Ca href{{{{$:/plugins/flibbles/relink!!demo}addsuffix#Operators}}} class\\\tc-tiddlylink-external\\\>Operators documentation page\u003C/a> for details.\},\$:/plugins/flibbles/relink/language/SideBar/Missing/Caption\:{\title\:\$:/plugins/flibbles/relink/language/SideBar/Missing/Caption\,\text\:\//Relink//\u003Cbr>Missing\},\$:/plugins/flibbles/relink/language/SideBar/Orphans/Caption\:{\title\:\$:/plugins/flibbles/relink/language/SideBar/Orphans/Caption\,\text\:\//Relink//\u003Cbr>Orphans\},\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption\:{\title\:\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption\,\text\:\//Relink// References\},\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description\:{\title\:\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description\,\text\:\The following tiddlers contain fields, links, macros, transclusions, or widgets referencing this one:\},\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty\:{\title\:\$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty\,\text\:\No tiddlers contain any fields, links, macros, transclusions, or widgets referencing this one\},\$:/plugins/flibbles/relink/language/Warning/OldRelinkTextOperator\:{\title\:\$:/plugins/flibbles/relink/language/Warning/OldRelinkTextOperator\,\text\:\Relink cannot parse your \u003Ccode>$$$\u003C\u003Ckeyword>>\u003C/code> wikitext until you migrate your \\\\u003C\u003Ctype>>\\\ relink module from the deprecated relinktextoperator module-type to relinktext.\u003Cbr>\u003Cbr>See \u003Ca href{{{ Versions/2.1.0addprefix#addprefix{$:/plugins/flibbles/relink!!demo}encodeuri }}} class\\\tc-tiddlylink-external\\\>the online documentation\u003C/a> for details.\},\$:/plugins/flibbles/relink/language/ui/Attributes/Caption\:{\title\:\$:/plugins/flibbles/relink/language/ui/Attributes/Caption\,\text\:\Attributes\},\$:/plugins/flibbles/relink/language/ui/Fields/Caption\:{\title\:\$:/plugins/flibbles/relink/language/ui/Fields/Caption\,\text\:\Fields\},\$:/plugins/flibbles/relink/language/ui/Macros/Caption\:{\title\:\$:/plugins/flibbles/relink/language/ui/Macros/Caption\,\text\:\Macros\},\$:/plugins/flibbles/relink/language/ui/Operators/Caption\:{\title\:\$:/plugins/flibbles/relink/language/ui/Operators/Caption\,\text\:\Operators\},\$:/plugins/flibbles/relink/license\:{\title\:\$:/plugins/flibbles/relink/license\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Ca href{{$:/plugins/flibbles/relink!!demo}} class\\\tc-tiddlylink-external\\\>Relink Plugin\u003C/a> Copyright (c) 2019-\u003C\u003Cnow YYYY>> Cameron Fischer\\n\\nBSD 3-Clause License|https://raw.githubusercontent.com/flibbles/tw5-relink/master/LICENSE\\n\},\$:/plugins/flibbles/relink/readme\:{\title\:\$:/plugins/flibbles/relink/readme\,\type\:\text/vnd.tiddlywiki\,\text\:\When renaming a tiddler, Relink can update the fields, filters, and widgets\\nof all other tiddlers. However, it works through whitelisting.\\n\\nIts already configured to update tiddler titles for all core widgets, filters,\\nand fields, but the whitelists can be customized for each of this in the\\nconfiguration panel.\\n\\nSee \u003Ca href{{$:/plugins/flibbles/relink!!source}} class\\\tc-tiddlylink-external\\\>the tw5-relink website\u003C/a> for more details and examples.\\n\},\$:/plugins/flibbles/relink/ui/ListItemTemplate\:{\title\:\$:/plugins/flibbles/relink/ui/ListItemTemplate\,\text\:\\\\\whitespace trim\\n\u003C$set\\n\\tname\\\classes\\\\\n\\tfilter\\\\u003ClistItem>relink:impossible\u003CtoTitle>\\\\\n\\tvalue\\\tc-menu-list-item tc-relink-impossible\\\\\n\\temptyValue\\\tc-menu-list-item\\\>\\n\u003Cdiv class\u003C\u003Cclasses>>>\\n\u003C$link to\u003C\u003ClistItem>>>\u003C$text text\u003C\u003ClistItem>> />\u003C/$link>\\n\u003C/div>\\n\u003C/$set>\\n\},\$:/plugins/flibbles/relink/ui/ListItemWithBlurbTemplate\:{\title\:\$:/plugins/flibbles/relink/ui/ListItemWithBlurbTemplate\,\text\:\\u003Cdiv class\\\tc-menu-list-item\\\>\u003C$link />\u003C/div>\\n\u003C$list variableblurb filter\\\\u003CcurrentTiddler>relink:report\u003CmissingTiddler>\\\>\u003Cdiv class\\\tc-relink-menu-missing-blurb\\\>\u003C$text text\u003C\u003Cblurb>> />\u003C/div>\\n\},\$:/plugins/flibbles/relink/ui/MissingTemplate\:{\title\:\$:/plugins/flibbles/relink/ui/MissingTemplate\,\text\:\\\\\whitespace trim\\n\u003C$set name\\\missingTiddler\\\ value\u003C\u003CcurrentTiddler>> >\\n\u003Cdiv class\\\tc-tiddler-missing\\\>\\n\u003C$button popup\u003C\u003Cqualify \\\$:/state/relink/popup/missing\\\>> class\\\tc-btn-invisible tc-missing-tiddler-label\\\>\\n\u003C$view field\\\title\\\ format\\\text\\\ />\\n\u003C/$button>\\n\u003C$reveal state\u003C\u003Cqualify \\\$:/state/relink/popup/missing\\\>> type\\\popup\\\ position\\\below\\\ animate\\\yes\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n\u003C$transclude tiddler\\\$:/core/ui/ListItemTemplate\\\/>\\n\u003Chr>\\n\u003C$list filter\\\allcurrentrelink:backreferencessorttitle\\\ template\\\$:/plugins/flibbles/relink/ui/ListItemWithBlurbTemplate\\\/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C/$set>\\n\},\$:/plugins/flibbles/relink/ui/MoreSideBar/Missing\:{\title\:\$:/plugins/flibbles/relink/ui/MoreSideBar/Missing\,\caption\:\{{$:/plugins/flibbles/relink/language/SideBar/Missing/Caption}}\,\tags\:\$:/tags/MoreSideBar\,\text\:\\u003C$list filter{{$:/plugins/flibbles/relink/Filters/Missing!!filter}} template\\\$:/plugins/flibbles/relink/ui/MissingTemplate\\\ />\\n\},\$:/plugins/flibbles/relink/ui/MoreSideBar/Orphans\:{\title\:\$:/plugins/flibbles/relink/ui/MoreSideBar/Orphans\,\caption\:\{{$:/plugins/flibbles/relink/language/SideBar/Orphans/Caption}}\,\tags\:\$:/tags/MoreSideBar\,\text\:\\u003C$list filter{{$:/plugins/flibbles/relink/Filters/Orphans!!filter}} template\\\$:/core/ui/ListItemTemplate\\\ />\\n\},\$:/plugins/flibbles/relink/ui/TiddlerInfo/References\:{\title\:\$:/plugins/flibbles/relink/ui/TiddlerInfo/References\,\caption\:\{{$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption}}\,\tags\:\$:/tags/TiddlerInfo\,\text\:\\\\\define lingo-base() $:/plugins/flibbles/relink/language/TiddlerInfo/\\n\\\\define filter() allcurrentrelink:backreferences!title$:/StoryList!prefix$:/temp/sorttitle\\n\\\\whitespace trim\\n\u003C$list filter\\\subfilter\u003Cfilter>first\\\>\\n\u003C\u003Clingo References/Description>>\\n\u003C/$list>\\n\u003Ctable class\\\tc-relink-references-table\\\>\\n\u003Ctbody>\\n\u003C$vars toTitle >\\n\u003C$list filter\u003C\u003Cfilter>> emptyMessage\u003C\u003Clingo References/Empty>> variable\\\listItem\\\ template\\\$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate\\\ />\\n\u003C/$vars>\\n\u003C/tbody>\\n\u003C/table>\\n\},\$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate\:{\title\:\$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate\,\text\:\\\\\whitespace trim\\n\u003Ctr class\\\tc-relink-references\\\>\\n\u003Ctd class{{{ tc-relink-references-title \u003CtoTitle>!matchthen\u003ClistItem>relink:impossible\u003CtoTitle>thentc-relink-impossible +join }}} >\\n\\t\u003C$list\\n\\t\\tvariablewhitelist\\n\\t\\tfilter\\\\u003ClistItem>removeprefix$:/config/flibbles/relink/split/firsttitlecaseaddprefix$:/plugins/flibbles/relink/ui/configuration/\\\\\n\\t\\temptyMessage\\\\u003C$link to\u003C\u003ClistItem>>/>\\\ >\\n\\t\\t\u003C$link to\u003C\u003Cwhitelist>>>\\n\\t\\t\\t//Relink// whitelist\\n\\t\\t\u003C/$link>\\n\\t\u003C/$list>\\n\u003C/td>\\n\u003Ctd class\\\tc-relink-references-report\\\>\\n\\t\u003C$list filter\\\\u003ClistItem>relink:report\u003CcurrentTiddler>\\\>\\n\\n\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>> />\\n\\t\u003C/$list>\\n\u003C/td>\u003C/tr>\\n\},\$:/plugins/flibbles/relink/ui/components/button-delete\:{\title\:\$:/plugins/flibbles/relink/ui/components/button-delete\,\text\:\\\\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\\n\\\\define prefix() $:/config/flibbles/relink/\\n\\\\whitespace trim\\n\\n\u003C$list\\n\\tfilter\\\allcurrentprefix\u003Cprefix>\\\\\n\\temptyMessage\\\\u003C$link>\u003C$button classtc-btn-invisible tooltip{{$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint}}>{{$:/core/images/link}}\u003C/$button>\u003C/$link>\\\>\\n\u003C$button class\\\tc-btn-invisible\\\ tooltip{{$:/plugins/flibbles/relink/language/Buttons/Delete/Hint}}>\u003C$list filter\\\allcurrentistiddler\\\>\\n\u003C$action-deletetiddler $tiddler\u003C\u003CcurrentTiddler>> />\\n\u003C/$list>\u003C$list filter\\\allcurrentisshadow\\\>\\n\u003C$action-setfield $tiddler\u003C\u003CtiddlerName>> text\\\\\\ />\\n\u003C/$list>\\n{{$:/core/images/delete-button}}\\n\u003C/$button>\\n\u003C/$list>\\n\},\$:/plugins/flibbles/relink/ui/components/select-fieldtype\:{\title\:\$:/plugins/flibbles/relink/ui/components/select-fieldtype\,\text\:\\\\\define prefix() $:/config/flibbles/relink/\\n\\\\whitespace trim\\n\\n\u003C$vars type{{{ \u003Csignature>relink:type }}} >\\n\u003C$list filter\\\allcurrentprefix\u003Cprefix>\\\ >\\n\u003C$select tiddler\u003C\u003CcurrentTiddler>> >\\n\u003C$list variable\\\option\\\ filter\\\relink:types\\\>\\n\u003Coption>\u003C$text text\u003C\u003Coption>> />\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n\u003C/$list>\u003C$list filter\\\allcurrent!prefix\u003Cprefix>\\\>\\n\u003C$text text\u003C\u003Ctype>> />\\n\u003C/$list>\\n\u003C/$vars>\\n\},\$:/plugins/flibbles/relink/ui/components/tables\:{\title\:\$:/plugins/flibbles/relink/ui/components/tables\,\text\:\\\\\define .make-table(title, plugin, default-table-state:yes)\\n\\\\whitespace trim\\n\\n\u003C$list variable\\\render\\\ filter\\\relink:signatures\u003C__plugin__>prefix\u003C__category__>first\\\>\\n\u003C$vars table-state\u003C\u003Cqualify \\\\\\\\\$:/state/flibbles/relink/tables/$plugin$\\\\\\\\\>>>\\n\u003Ctr>\u003Cth class\\\tc-relink-header-plugin\\\ colspan\u003C\u003Ccolumn-count>> >\\n\u003C$reveal type\\\nomatch\\\ state\u003C\u003Ctable-state>> text\\\yes\\\ default\\\\\\\\\$default-table-state$\\\\\\\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Ctable-state>> setTo\\\yes\\\>\\n{{$:/core/images/right-arrow}} $title$\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Ctable-state>> text\\\yes\\\ default\\\\\\\\\$default-table-state$\\\\\\\\\>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\ set\u003C\u003Ctable-state>> setTo\\\no\\\>\\n{{$:/core/images/down-arrow}} $title$\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/th>\u003C/tr>\\n\u003C$list\\n\\tvariable\\\signature\\\\\n\\tfilter\\\relink:signatures\u003C__plugin__>prefix\u003C__category__>sort\\\>\\n\u003C$vars key{{{ \u003Csignature>removeprefix\u003C__category__>removeprefix/ }}} >\\n\u003C$tiddler tiddler{{{\u003Csignature>relink:source}}} >\\n\u003C$reveal tag\\\tr\\\ type\\\match\\\ state\u003C\u003Ctable-state>> text\\\yes\\\ default\\\\\\\\\$default-table-state$\\\\\\\\\>\\n\u003C$macrocall $name\u003C\u003C__list-row-macro__>> signature\u003C\u003Csignature>> />\\n\u003Ctd class\\\tc-relink-column-type\\\>{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}\u003C/td>\\n\u003Ctd class\\\tc-relink-column-delete\\\>{{||$:/plugins/flibbles/relink/ui/components/button-delete}}\u003C/td>\\n\u003C/$reveal>\\n\u003C/$tiddler>\\n\u003C/$vars>\\n\u003C/$list>\\n\u003C/$vars>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define tables(category, list-row-macro, header-list)\\n\\\\whitespace trim\\n\u003C$vars\\n\\tcolumn-count{{{enlist\u003C__header-list__> DeleteColumn +count}}}>\\n\u003Ctable class\\\tc-relink-whitelist\\\>\u003Ctbody>\\n\u003Ctr>\\n\u003C$list variable\\\header\\\ filter\\\enlist\u003C__header-list__>butlast\\\>\u003Cth>\u003C\u003Cheader>>\u003C/th>\u003C/$list>\\n\u003C!-- We have the last column extend into the delete/link column, which is unlabeled. -->\\n\u003Cth colspan2>\u003C$text text{{{ enlist\u003C__header-list__>last }}} />\u003C/th>\\n\u003C/tr>\\n\u003C\u003C.make-table Custom \\\\\\ yes>>\\n\\n\u003C$list\\n\\tfilter\\\plugin-typeplugin!$:/core!$:/plugins/flibbles/relink\\\>\\n\u003C$set name\\\subtitle\\\\\n\\tfilter\\\allcurrenthasdescription\\\\\n\\tvalue\\\{{!!name}}: \u003C$text text{{!!description}}/>\\\\\n\\temptyValue\\\{{!!name}}\\\ >\\n\u003C$macrocall $name\\\.make-table\\\ title\u003C\u003Csubtitle>> plugin\u003C\u003CcurrentTiddler>> />\\n\u003C/$set>\\n\u003C/$list>\\n\u003C\u003C.make-table Core \\\$:/plugins/flibbles/relink\\\>>\\n\\n\u003C/tbody>\u003C/table>\\n\u003C/$vars>\\n\\\\end\\n\},\$:/plugins/flibbles/relink/ui/configuration/Attributes\:{\title\:\$:/plugins/flibbles/relink/ui/configuration/Attributes\,\caption\:\{{$:/plugins/flibbles/relink/language/ui/Attributes/Caption}}\,\tags\:\$:/tags/flibbles/relink/Configuration\,\text\:\\\\\import $:/plugins/flibbles/relink/ui/components/tables\\n\\\\define prefix-attr() $:/config/flibbles/relink/attributes/\\n\\\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\\n\\\\define element-name-tiddler() $:/state/flibbles/relink/element-name\\n\\\\define attribute-name-tiddler() $:/state/flibbles/relink/attribute-name\\n\\n\\\\define row()\\n\\\\whitespace trim\\n\u003C$set nameelement\\n value{{{\u003Ckey>splitbefore/removesuffix/}}}>\\n\u003C$set name\\\attribute\\\\\n value{{{\u003Ckey>removeprefix\u003Celement>removeprefix/}}}>\\n\u003Ctd>\u003C$text text\u003C\u003Celement>> />\u003C/td>\\n\u003Ctd>\u003C$text text\u003C\u003Cattribute>> />\u003C/td>\\n\u003C/$set>\u003C/$set>\\n\\\\end\\n\\\\define body()\\n\\\\whitespace trim\\n\\n\u003Cem class\\\tc-edit\\\>Add a new attribute:\u003C/em>\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Celement-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\widget/element\\\ />\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Cattribute-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\attribute\\\ />\\n \\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Celement-name-tiddler>> >\\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Cattribute-name-tiddler>> >\\n\u003C$relinkmangler>\\n\u003C$button\\n\\ttooltip{{$(lingo-base)$NewAttribute/Hint}}\\n\\taria-label{{$(lingo-base)$NewAttribute/Caption}}>\\n\u003C$action-sendmessage\\n\\t$message\\\relink-add-attribute\\\\\n\\telement{{$(element-name-tiddler)$}}\\n\\tattribute{{$(attribute-name-tiddler)$}} />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Cattribute-name-tiddler>> />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Celement-name-tiddler>> />\\n\u003C$text text{{$(lingo-base)$NewAttribute/Caption}}/>\\n\u003C/$button>\\n\u003C/$relinkmangler>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Cattribute-name-tiddler>> >\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewAttribute/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Celement-name-tiddler>> >\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewAttribute/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n@@.tc-control-panel\\n\u003C$macrocall\\n\\t$nametables\\n\\tcategory\\\attributes\\\\\n\\theader-list\\\Widget/HTML Element Attribute Type\\\\\n\\tlist-row-macro\\\row\\\ />\\n@@\\n\\\\end\\n\\n{{$:/plugins/flibbles/relink/language/Help/Attributes}}\\n\\n\u003C\u003Cbody>>\\n\},\$:/plugins/flibbles/relink/ui/configuration/Fields\:{\title\:\$:/plugins/flibbles/relink/ui/configuration/Fields\,\caption\:\{{$:/plugins/flibbles/relink/language/ui/Fields/Caption}}\,\tags\:\$:/tags/flibbles/relink/Configuration\,\text\:\\\\\import $:/plugins/flibbles/relink/ui/components/tables\\n\\\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\\n\\\\define field-name-tiddler() $:/state/flibbles/relink/field-name\\n\\n\\\\define row()\\n\u003Ctd>\u003C$text text\u003C\u003Ckey>> />\u003C/td>\\n\\\\end\\n\\n\\\\define body()\\n\\\\whitespace trim\\n\\n\u003Cem classtc-edit>Add a new field:\u003C/em>\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Cfield-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\field name\\\ />\\n \\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Cfield-name-tiddler>> >\\n\u003C$relinkmangler>\\n\u003C$button\\n\\ttooltip{{$(lingo-base)$NewField/Hint}}\\n\\taria-label{{$(lingo-base)$NewField/Caption}}>\\n\u003C$action-sendmessage\\n\\t$message\\\relink-add-field\\\\\n\\tfield{{$(field-name-tiddler)$}} />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Cfield-name-tiddler>> />\\n\u003C$text text{{$(lingo-base)$NewField/Caption}}/>\\n\u003C/$button>\\n\u003C/$relinkmangler>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Cfield-name-tiddler>> >\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewField/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n@@.tc-control-panel\\n\u003C$macrocall\\n\\t$nametables\\n\\tcategory\\\fields\\\\\n\\theader-list\\\Field Name Field Type\\\\\n\\tlist-row-macro\\\row\\\ />\\n@@\\n\\\\end\\n\\n{{$:/plugins/flibbles/relink/language/Help/Fields}}\\n\\n\u003C\u003Cbody>>\\n\},\$:/plugins/flibbles/relink/ui/configuration/Macros\:{\title\:\$:/plugins/flibbles/relink/ui/configuration/Macros\,\caption\:\{{$:/plugins/flibbles/relink/language/ui/Macros/Caption}}\,\tags\:\$:/tags/flibbles/relink/Configuration\,\text\:\\\\\import $:/plugins/flibbles/relink/ui/components/tables\\n\\\\define prefix-macro() $:/config/flibbles/relink/macros/\\n\\\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\\n\\\\define macro-name-tiddler() $:/state/flibbles/relink/macro-name\\n\\\\define parameter-name-tiddler() $:/state/flibbles/relink/parameter-name\\n\\n\\\\define row()\\n\\\\whitespace trim\\n\u003C$set name\\\parameter\\\\\n value{{{\u003Ckey>relink:splitafter/}}}>\\n\u003C$set namemacro\\n value{{{\u003Ckey>removesuffix\u003Cparameter>removesuffix/}}}>\\n\u003Ctd>\u003C$text text\u003C\u003Cmacro>> />\u003C/td>\\n\u003Ctd>\u003C$text text\u003C\u003Cparameter>> />\u003C/td>\\n\u003C/$set>\u003C/$set>\\n\\\\end\\n\\n\\\\define body()\\n\\\\whitespace trim\\n\\n\u003Cem class\\\tc-edit\\\>Add a new macro parameter:\u003C/em>\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Cmacro-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\macro\\\ />\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Cparameter-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\parameter\\\ />\\n \\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Cmacro-name-tiddler>> >\\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Cparameter-name-tiddler>> >\\n\u003C$relinkmangler>\\n\u003C$button\\n\\ttooltip{{$(lingo-base)$NewParameter/Hint}}\\n\\taria-label{{$(lingo-base)$NewParameter/Caption}}>\\n\u003C$action-sendmessage\\n\\t$message\\\relink-add-parameter\\\\\n\\tmacro{{$(macro-name-tiddler)$}}\\n\\tparameter{{$(parameter-name-tiddler)$}} />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Cparameter-name-tiddler>> />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Cmacro-name-tiddler>> />\\n\u003C$text text{{$(lingo-base)$NewParameter/Caption}}/>\\n\u003C/$button>\\n\u003C/$relinkmangler>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Cparameter-name-tiddler>> >\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewParameter/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Cmacro-name-tiddler>> >\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewParameter/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n@@.tc-control-panel\\n\u003C$macrocall\\n\\t$nametables\\n\\tcategory\\\macros\\\\\n\\theader-list\\\Macro Parameter Type\\\\\n\\tlist-row-macro\\\row\\\ />\\n@@\\n\\\\end\\n\\n{{$:/plugins/flibbles/relink/language/Help/Macros}}\\n\\n\u003C\u003Cbody>>\\n\},\$:/plugins/flibbles/relink/ui/configuration/Operators\:{\title\:\$:/plugins/flibbles/relink/ui/configuration/Operators\,\caption\:\{{$:/plugins/flibbles/relink/language/ui/Operators/Caption}}\,\tags\:\$:/tags/flibbles/relink/Configuration\,\text\:\\\\\import $:/plugins/flibbles/relink/ui/components/tables\\n\\\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\\n\\\\define operator-name-tiddler() $:/state/flibbles/relink/operator-name\\n\\n\\\\define row()\\n\u003Ctd>\u003C$text text\u003C\u003Ckey>> />\u003C/td>\\n\\\\end\\n\\n\\\\define body()\\n\\\\whitespace trim\\n\\n\u003Cem classtc-edit>Add a new filter operator:\u003C/em>\\n \\n\u003C$edit-text\\n\\ttiddler\u003C\u003Coperator-name-tiddler>>\\n\\ttag\\\input\\\\\n\\tdefault\\\\\\\\n\\tplaceholder\\\operator name\\\ />\\n \\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\u003C\u003Coperator-name-tiddler>>>\\n\u003C$relinkmangler>\\n\u003C$button\\n\\ttooltip{{$(lingo-base)$NewOperator/Hint}}\\n\\taria-label{{$(lingo-base)$NewOperator/Caption}}>\\n\u003C$action-sendmessage\\n\\t$message\\\relink-add-operator\\\\\n\\toperator{{$(operator-name-tiddler)$}} />\\n\u003C$action-deletetiddler $tiddler\u003C\u003Coperator-name-tiddler>> />\\n\u003C$text text{{$(lingo-base)$NewOperator/Caption}}/>\\n\u003C/$button>\\n\u003C/$relinkmangler>\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ text\\\\\\ state\u003C\u003Coperator-name-tiddler>>>\\n\u003C$button>\\n\u003C$text text{{$(lingo-base)$NewOperator/Caption}}/>\\n\u003C/$button>\\n\u003C/$reveal>\\n\\n@@.tc-control-panel\\n\u003C$macrocall\\n\\t$nametables\\n\\tcategory\\\operators\\\\\n\\theader-list\\\Filter Operator Operand Type\\\\\n\\tlist-row-macro\\\row\\\ />\\n@@\\n\\\\end\\n\\n{{$:/plugins/flibbles/relink/language/Help/Operators}}\\n\\n\u003C\u003Cbody>>\\n\},\$:/plugins/flibbles/relink/ui/stylesheet.css\:{\title\:\$:/plugins/flibbles/relink/ui/stylesheet.css\,\tags\:\$:/tags/Stylesheet\,\text\:\.tc-relink-references {\\n}\\n\\n.tc-relink-references-table {\\n\\twidth: 100%;\\n\\tborder: none;\\n}\\n\\n.tc-relink-references-table td {\\n\\tborder-left: none;\\n}\\n\\n.tc-relink-references-table tr:first-child td {\\n\\tborder-top: none;\\n}\\n\\n.tc-relink-references-title {\\n\\ttext-align: left;\\n\\tvertical-align: top;\\n\\tpadding-top: 3px;\\n\\tpadding-bottom: 3px;\\n}\\n\\n.tc-relink-references-occurrence {\\n\\tfont-style: italic;\\n\\ttext-align: left;\\n\\tfont-weight: 200;\\n\\tpadding-left: 25px;\\n\\tvertical-align: top;\\n}\\n\\n.tc-relink-header-plugin {\\n\\ttext-align: left;\\n}\\n\\n.tc-relink-header-plugin button {\\n\\twidth: 100%\\n}\\n\\n.tc-relink-column-type {\\n\\twidth: 8em;\\n}\\n\\n.tc-relink-column-type select {\\n\\twidth: 100%;\\n}\\n\\n.tc-relink-column-delete {\\n\\tborder-left: none;\\n\\ttext-align: left;\\n}\\n\\n.tc-relink-column-delete button {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-relink-impossible a.tc-tiddlylink {\\n\\tcolor: \u003C\u003Ccolour relink-impossible>>;\\n}\\n\\n.tc-relink-menu-missing-blurb {\\n\\tmargin-left: 30pt;\\n}\\n\}}}},{text:{\n \startingDay\: \0\,\n \days\: \S\, \M\, \T\, \W\, \R\, \F\, \A\,\n\t\months\: \Jan\, \Feb\, \Mar\, \Apr\, \May\, \Jun\, \Jul\, \Aug\, \Sep\, \Oct\, \Nov\, \Dec\,\n\t\buttons\: \yes\,\n\t\buttonsImages\: \{{$:/core/images/chevron-left}}\, \{{$:/core/images/left-arrow}}\, \{{$:/core/images/right-arrow}}\, \{{$:/core/images/chevron-right}}\,\n\t\cellContent\: \sc_linkNavigateToOrCreateEditModeJournal\,\n\t\format\: \YYYY-0MM-0DD ddd\\n},type:application/json,created:20160829124345776,modified:20200517133628092,tags:,title:$:/plugins/frd/simplecalendar/CalendarConfigDefault},{author:hoelzro,core-version:>5.1.15,dependents:,description:Full text search,list:readme license history,plugin-type:plugin,source:https://github.com/hoelzro/tw-full-text-search,title:$:/plugins/hoelzro/full-text-search,version:1.1.0-4-g954307a,type:application/json,text:{\tiddlers\:{\$:/plugins/hoelzro/full-text-search/cache.js\:{\title\:\$:/plugins/hoelzro/full-text-search/cache.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/cache.js\\ntype: application/javascript\\nmodule-type: library\\n\\n\\\\*/\\nvar __awaiter (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator\\\throw\\\(value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator generator.apply(thisArg, _arguments || )).next());\\n });\\n};\\nvar __generator (this && this.__generator) || function (thisArg, body) {\\n var _ { label: 0, sent: function() { if (t0 & 1) throw t1; return t1; }, trys: , ops: }, f, y, t, g;\\n return g { next: verb(0), \\\throw\\\: verb(1), \\\return\\\: verb(2) }, typeof Symbol \\\function\\\ && (gSymbol.iterator function() { return this; }), g;\\n function verb(n) { return function (v) { return step(n, v); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\Generator is already executing.\\\);\\n while (_) try {\\n if (f 1, y && (t op0 & 2 ? y\\\return\\\ : op0 ? y\\\throw\\\ || ((t y\\\return\\\) && t.call(y), 0) : y.next) && !(t t.call(y, op1)).done) return t;\\n if (y 0, t) op op0 & 2, t.value;\\n switch (op0) {\\n case 0: case 1: t op; break;\\n case 4: _.label++; return { value: op1, done: false };\\n case 5: _.label++; y op1; op 0; continue;\\n case 7: op _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t _.trys, t t.length > 0 && tt.length - 1) && (op0 6 || op0 2)) { _ 0; continue; }\\n if (op0 3 && (!t || (op1 > t0 && op1 \u003C t3))) { _.label op1; break; }\\n if (op0 6 && _.label \u003C t1) { _.label t1; t op; break; }\\n if (t && _.label \u003C t2) { _.label t2; _.ops.push(op); break; }\\n if (t2) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op body.call(thisArg, _);\\n } catch (e) { op 6, e; y 0; } finally { f t 0; }\\n if (op0 & 5) throw op1; return { value: op0 ? op1 : void 0, done: true };\\n }\\n};\\nvar localForage require($:/plugins/hoelzro/full-text-search/localforage.min.js);\\nvar FTSCache;\\n(function (FTSCache) {\\n var RELATED_TERMS_TIDDLER $:/plugins/hoelzro/full-text-search/RelatedTerms.json;\\n function hasFunctionalCache() {\\n return localForage.driver() ! null;\\n }\\n function currentPluginVersion() {\\n var pluginTiddler $tw.wiki.getTiddler($:/plugins/hoelzro/full-text-search);\\n return pluginTiddler.fields.version;\\n }\\n function relatedTermsModified() {\\n var relatedTerms $tw.wiki.getTiddler(RELATED_TERMS_TIDDLER);\\n if (!relatedTerms || !relatedTerms.fields.modified) {\\n return 0;\\n }\\n return relatedTerms.fields.modified.getTime();\\n }\\n function getCacheMetadata() {\\n return __awaiter(this, void 0, void 0, function () {\\n var metaKey, cacheMeta, cacheRelatedTermsModified, relatedTerms, ourRelatedTermsModified;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!hasFunctionalCache()) {\\n return 2 /*return*/;\\n }\\n metaKey tw-fts-index.meta. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n return 4 /*yield*/, localForage.getItem(metaKey);\\n case 1:\\n cacheMeta _a.sent();\\n if (cacheMeta null) {\\n return 2 /*return*/;\\n }\\n if (!(ftsPluginVersion in cacheMeta) || cacheMeta.ftsPluginVersion ! currentPluginVersion()) {\\n return 2 /*return*/;\\n }\\n cacheRelatedTermsModified (relatedTermsModified in cacheMeta) ? cacheMeta.relatedTermsModified : 0;\\n relatedTerms $tw.wiki.getTiddler(RELATED_TERMS_TIDDLER);\\n ourRelatedTermsModified relatedTermsModified();\\n if (cacheRelatedTermsModified ! ourRelatedTermsModified) {\\n return 2 /*return*/;\\n }\\n return 2 /*return*/, cacheMeta;\\n }\\n });\\n });\\n }\\n // XXX what about migrating between lunr versions? what about invalid data under the key?\\n function getCacheData() {\\n return __awaiter(this, void 0, void 0, function () {\\n var metaData, dataKey, cacheData;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!hasFunctionalCache()) {\\n return 2 /*return*/;\\n }\\n return 4 /*yield*/, getCacheMetadata();\\n case 1:\\n metaData _a.sent();\\n if (metaData null) {\\n return 2 /*return*/, null;\\n }\\n dataKey tw-fts-index.data. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n return 4 /*yield*/, localForage.getItem(dataKey);\\n case 2:\\n cacheData _a.sent();\\n if (cacheData null) {\\n return 2 /*return*/, null;\\n }\\n return 2 /*return*/, JSON.parse(cacheData);\\n }\\n });\\n });\\n }\\n function getAge() {\\n return __awaiter(this, void 0, void 0, function () {\\n var cacheMeta;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!hasFunctionalCache()) {\\n return 2 /*return*/, 0;\\n }\\n return 4 /*yield*/, getCacheMetadata();\\n case 1:\\n cacheMeta _a.sent();\\n if (!cacheMeta) {\\n return 2 /*return*/, 0;\\n }\\n return 2 /*return*/, cacheMeta.age;\\n }\\n });\\n });\\n }\\n FTSCache.getAge getAge;\\n function load() {\\n if (!hasFunctionalCache()) {\\n return null;\\n }\\n var cacheData getCacheData();\\n if (!cacheData) {\\n return;\\n }\\n return cacheData;\\n }\\n FTSCache.load load;\\n function save(age, data) {\\n return __awaiter(this, void 0, void 0, function () {\\n var dataKey, metaKey, dataPromise, metaPromise;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!hasFunctionalCache()) {\\n return 2 /*return*/;\\n }\\n dataKey tw-fts-index.data. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n metaKey tw-fts-index.meta. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n dataPromise localForage.setItem(dataKey, JSON.stringify(data));\\n metaPromise localForage.setItem(metaKey, { age: age, ftsPluginVersion: currentPluginVersion(), relatedTermsModified: relatedTermsModified() });\\n return 4 /*yield*/, Promise.all(dataPromise, metaPromise);\\n case 1:\\n _a.sent();\\n return 2 /*return*/;\\n }\\n });\\n });\\n }\\n FTSCache.save save;\\n function invalidate() {\\n return __awaiter(this, void 0, void 0, function () {\\n var dataKey, metaKey, dataPromise, metaPromise;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!hasFunctionalCache()) {\\n return 2 /*return*/;\\n }\\n dataKey tw-fts-index.data. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n metaKey tw-fts-index.meta. + $tw.wiki.getTiddler($:/SiteTitle).fields.text;\\n dataPromise localForage.removeItem(dataKey);\\n metaPromise localForage.removeItem(metaKey);\\n return 4 /*yield*/, Promise.all(dataPromise, metaPromise);\\n case 1:\\n _a.sent();\\n return 2 /*return*/;\\n }\\n });\\n });\\n }\\n FTSCache.invalidate invalidate;\\n})(FTSCache || (FTSCache {}));\\nmodule.exports FTSCache;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/hoelzro/full-text-search/control-panel\:{\title\:\$:/plugins/hoelzro/full-text-search/control-panel\,\caption\:\Full Text Configuration\,\tags\:\$:/tags/ControlPanel\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$set name\\\state\\\ value\\\$:/temp/FTS-state\\\>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\uninitialized\\\>\\n\\nIn order to use full text search, youll need to generate an index.\\n\\n\u003C$button>\\n Click here to generate the index\\n \u003C$fts-action-generate-index />\\n\u003C/$button>\\n\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\initializing\\\>\\nGenerating index...\\n\\n\u003C$hoelzro-progressbar current{{$:/temp/FTS-state!!progressCurrent}} total{{$:/temp/FTS-state!!progressTotal}} />\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\initialized\\\>\\n\\nIndex generated. Happy searching!\\n\\n\u003C$button>\\n Click here to rebuild the index\\n \u003C$fts-action-generate-index rebuild\\\true\\\ />\\n\u003C/$button>\\n\\n\u003C/$reveal>\\n\\n! Auto Indexing\\n\\n\u003C$list variable\\\fiveSixteenOrBetter\\\ filter\\\5.1.16 title\u003Cversion> +sortfirst +prefix5.1.16\\\ emptyMessage\\\Sorry, you need TiddlyWiki 5.1.16 or greater to enable auto-indexing.\\\>\\n\\n\u003C$set name\\\autoIndexTiddler\\\ value\\\$:/plugins/hoelzro/full-text-search/auto-index\\\>\\n\\nAutomatic indexing refers to a feature where your wiki is automatically indexed in the background after its been loaded.\\n\\n\u003C$list filter\\\title\u003CautoIndexTiddler>gettitle\\\ emptyMessage\\\\\\\\\\u003C$button>\u003C$action-createtiddler $basetitle\u003C\u003CautoIndexTiddler>> text\\\\u003C$fts-action-generate-index />\\\ tags\\\$:/tags/StartupAction/Browser\\\ />Click here to enable automatic indexing\u003C/$button>\\\\\\\\\>\\n\u003C$button>\\n \u003C$action-deletetiddler $tiddler\u003C\u003CautoIndexTiddler>> />\\n Click here to disable automatic indexing\\n\u003C/$button>\\n\u003C/$list>\\n\\n\u003C/$set>\\n\u003C/$list>\\n\\n! Wildcard/Fuzzy Searching (experimental)\\n\\nWildcard searches allow you to use wildcards to do things like use `format*ing` to match both \\\formating\\\ and \\\formatting\\\.\\nPlease consult the lunr documentation|https://lunrjs.com/guides/searching.html#wildcards for more information.\\n\\nFuzzy searches allow you to compensate for spelling mistakes by specifying an //edit distance// - for example, if you want\\nto tolerate being off by one character, youd searching for `formattign~1`. For performance, its recommended to keep\\nthe distance below 3. You can read more about fuzzy searching in the lunr documentation|https://lunrjs.com/guides/searching.html#fuzzy-matches.\\n\\nNote that you dont need wildcards to have the search system treat \\\format\\\, \\\formatting\\\, and \\\formatted\\\ as the same -\\nthe default setup is smart enough to handle this!\\n\\nEnabling wildcard and fuzzy searches takes more computing power, memory, and storage space, but does prove useful for various users. If\\nyoud like to try wildcard searches, you can enable them here:\\n\\n\u003C$checkbox tiddler\\\$:/plugins/hoelzro/full-text-search/EnableFuzzySearching\\\ field\\\text\\\ checked\\\yes\\\ unchecked\\\\\\ default\\\\\\>\\nEnable wildcard/fuzzy searches? (this will require an index rebuild)\\n\u003C/$checkbox>\\n\\n\u003C/$set>\\n\},\$:/plugins/hoelzro/full-text-search/fts-action-generate-index.js\:{\title\:\$:/plugins/hoelzro/full-text-search/fts-action-generate-index.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/fts-action-generate-index.js\\ntype: application/javascript\\nmodule-type: widget\\n\\n\\\\*/\\nvar __extends (this && this.__extends) || (function () {\\n var extendStatics function (d, b) {\\n extendStatics Object.setPrototypeOf ||\\n ({ __proto__: } instanceof Array && function (d, b) { d.__proto__ b; }) ||\\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) dp bp; };\\n return extendStatics(d, b);\\n }\\n return function (d, b) {\\n extendStatics(d, b);\\n function __() { this.constructor d; }\\n d.prototype b null ? Object.create(b) : (__.prototype b.prototype, new __());\\n };\\n})();\\nvar __awaiter (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator\\\throw\\\(value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator generator.apply(thisArg, _arguments || )).next());\\n });\\n};\\nvar __generator (this && this.__generator) || function (thisArg, body) {\\n var _ { label: 0, sent: function() { if (t0 & 1) throw t1; return t1; }, trys: , ops: }, f, y, t, g;\\n return g { next: verb(0), \\\throw\\\: verb(1), \\\return\\\: verb(2) }, typeof Symbol \\\function\\\ && (gSymbol.iterator function() { return this; }), g;\\n function verb(n) { return function (v) { return step(n, v); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\Generator is already executing.\\\);\\n while (_) try {\\n if (f 1, y && (t op0 & 2 ? y\\\return\\\ : op0 ? y\\\throw\\\ || ((t y\\\return\\\) && t.call(y), 0) : y.next) && !(t t.call(y, op1)).done) return t;\\n if (y 0, t) op op0 & 2, t.value;\\n switch (op0) {\\n case 0: case 1: t op; break;\\n case 4: _.label++; return { value: op1, done: false };\\n case 5: _.label++; y op1; op 0; continue;\\n case 7: op _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t _.trys, t t.length > 0 && tt.length - 1) && (op0 6 || op0 2)) { _ 0; continue; }\\n if (op0 3 && (!t || (op1 > t0 && op1 \u003C t3))) { _.label op1; break; }\\n if (op0 6 && _.label \u003C t1) { _.label t1; t op; break; }\\n if (t && _.label \u003C t2) { _.label t2; _.ops.push(op); break; }\\n if (t2) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op body.call(thisArg, _);\\n } catch (e) { op 6, e; y 0; } finally { f t 0; }\\n if (op0 & 5) throw op1; return { value: op0 ? op1 : void 0, done: true };\\n }\\n};\\nexports.__esModule true;\\nvar widgetModule require($:/core/modules/widgets/widget.js);\\nvar Widget widgetModule.widget;\\nvar sharedIndex require($:/plugins/hoelzro/full-text-search/shared-index.js);\\nvar cache require($:/plugins/hoelzro/full-text-search/cache.js);\\nvar generateQueryExpander require($:/plugins/hoelzro/full-text-search/query-expander.js).generateQueryExpander;\\nvar FTSActionGenerateIndex;\\n(function (FTSActionGenerateIndex) {\\n var RELATED_TERMS_TIDDLER $:/plugins/hoelzro/full-text-search/RelatedTerms.json;\\n var USE_CACHE_TIDDLER $:/plugins/hoelzro/full-text-search/use-cache;\\n var STATE_TIDDLER $:/temp/FTS-state;\\n var UPDATE_FREQUENCY 10;\\n var FTSActionGenerateIndexWidget /** @class */ (function (_super) {\\n __extends(FTSActionGenerateIndexWidget, _super);\\n function FTSActionGenerateIndexWidget(parseTreeNode, options) {\\n var _this _super.call(this) || this;\\n _this.initialise(parseTreeNode, options);\\n return _this;\\n }\\n FTSActionGenerateIndexWidget.prototype.render function (parent, nextSibling) {\\n this.computeAttributes();\\n this.execute();\\n };\\n FTSActionGenerateIndexWidget.prototype.execute function () {\\n };\\n FTSActionGenerateIndexWidget.prototype.refresh function (changedTiddlers) {\\n return this.refreshChildren(changedTiddlers);\\n };\\n FTSActionGenerateIndexWidget.prototype.asyncInvokeAction function () {\\n return __awaiter(this, void 0, void 0, function () {\\n var shouldSuppressCache, rebuilding, filter, tiddlers, isFresh, cacheData, _a, cacheAge, titles, i, title, tiddler, modified, i, title, tiddler, relatedTerms, lunr_1, expandQuery, age, stateTiddler, fields, self, lastUpdate;\\n return __generator(this, function (_b) {\\n switch (_b.label) {\\n case 0:\\n shouldSuppressCache this.wiki.getTiddlerText(USE_CACHE_TIDDLER) no;\\n rebuilding this.getAttribute(rebuild) true;\\n filter !issystem;\\n if (!(rebuilding || shouldSuppressCache)) return 3 /*break*/, 1;\\n _a null;\\n return 3 /*break*/, 3;\\n case 1: return 4 /*yield*/, cache.load();\\n case 2:\\n _a _b.sent();\\n _b.label 3;\\n case 3:\\n cacheData _a;\\n if (!cacheData) return 3 /*break*/, 5;\\n return 4 /*yield*/, cache.getAge();\\n case 4:\\n cacheAge _b.sent();\\n filter + +nsortmodified;\\n titles this.wiki.filterTiddlers(filter);\\n tiddlers ;\\n for (i titles.length - 1; i > 0; i--) {\\n title titlesi;\\n tiddler this.wiki.getTiddler(title);\\n if (!(modified in tiddler.fields)) {\\n break;\\n }\\n modified $tw.utils.stringifyDate(tiddler.fields.modified);\\n if (modified \u003C cacheAge) {\\n break;\\n }\\n tiddlers.push(title);\\n }\\n for (i 0; i \u003C titles.length; i++) {\\n title titlesi;\\n tiddler this.wiki.getTiddler(title);\\n if (modified in tiddler.fields) {\\n break;\\n }\\n tiddlers.push(title);\\n }\\n relatedTerms $tw.wiki.getTiddlerDataCached(RELATED_TERMS_TIDDLER, );\\n relatedTerms relatedTerms.map($tw.utils.parseStringArray);\\n lunr_1 require($:/plugins/hoelzro/full-text-search/lunr.min.js);\\n expandQuery generateQueryExpander(lunr_1, relatedTerms);\\n sharedIndex.load(cacheData);\\n isFresh false;\\n return 3 /*break*/, 6;\\n case 5:\\n tiddlers this.wiki.filterTiddlers(filter);\\n isFresh true;\\n _b.label 6;\\n case 6:\\n age this.wiki.filterTiddlers(filter + +nsortmodifiedlastgetmodified)0;\\n age age null ? 0 : age;\\n stateTiddler this.wiki.getTiddler(STATE_TIDDLER);\\n if (!(tiddlers.length > 0)) return 3 /*break*/, 8;\\n fields {\\n text: initializing,\\n progressCurrent: 0,\\n progressTotal: tiddlers.length\\n };\\n this.wiki.addTiddler(new $tw.Tiddler(stateTiddler, fields, this.wiki.getModificationFields()));\\n self this;\\n lastUpdate 0;\\n return 4 /*yield*/, sharedIndex.buildIndex(this.wiki, tiddlers, isFresh, function (progressCurrent) {\\n return __awaiter(this, void 0, void 0, function () {\\n var stateTiddler, e_1, stateTiddler;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if ((progressCurrent - lastUpdate) > UPDATE_FREQUENCY) {\\n stateTiddler self.wiki.getTiddler(STATE_TIDDLER);\\n self.wiki.addTiddler(new $tw.Tiddler(stateTiddler, { progressCurrent: progressCurrent }, self.wiki.getModificationFields()));\\n lastUpdate progressCurrent;\\n }\\n if (!(progressCurrent tiddlers.length)) return 3 /*break*/, 6;\\n _a.label 1;\\n case 1:\\n _a.trys.push(1, 4, , 5);\\n if (!!shouldSuppressCache) return 3 /*break*/, 3;\\n return 4 /*yield*/, cache.save(age, sharedIndex.getIndex().toJSON());\\n case 2:\\n _a.sent();\\n _a.label 3;\\n case 3: return 3 /*break*/, 5;\\n case 4:\\n e_1 _a.sent();\\n return 3 /*break*/, 5;\\n case 5:\\n stateTiddler self.wiki.getTiddler(STATE_TIDDLER);\\n self.wiki.addTiddler(new $tw.Tiddler(stateTiddler, { text: initialized, progressCurrent: progressCurrent }, self.wiki.getModificationFields()));\\n _a.label 6;\\n case 6: return 2 /*return*/;\\n }\\n });\\n });\\n });\\n case 7:\\n _b.sent();\\n return 3 /*break*/, 9;\\n case 8:\\n this.wiki.addTiddler(new $tw.Tiddler(stateTiddler, { text: initialized, progressCurrent: 1, progressTotal: 1 }, this.wiki.getModificationFields()));\\n _b.label 9;\\n case 9: return 2 /*return*/;\\n }\\n });\\n });\\n };\\n FTSActionGenerateIndexWidget.prototype.invokeAction function (triggeringWidget, event) {\\n this.asyncInvokeAction().then(function () {\\n }, function (err) {\\n console.log(err);\\n });\\n };\\n return FTSActionGenerateIndexWidget;\\n }(Widget));\\n exportsfts-action-generate-index FTSActionGenerateIndexWidget;\\n})(FTSActionGenerateIndex || (FTSActionGenerateIndex {}));\\n// vim:sts4:sw4\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/hoelzro/full-text-search/ftsearch.js\:{\title\:\$:/plugins/hoelzro/full-text-search/ftsearch.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/ftsearch.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\n\\\\*/\\nvar FTSearch;\\n(function (FTSearch) {\\n var FUZZY_SEARCH_TIDDLER $:/plugins/hoelzro/full-text-search/EnableFuzzySearching;\\n var lunr require($:/plugins/hoelzro/full-text-search/lunr.min.js);\\n var getIndex require($:/plugins/hoelzro/full-text-search/shared-index.js).getIndex;\\n function ftsearch(source, operator, options) {\\n var sourceLookup Object.create(null);\\n source(function (tiddler, title) {\\n sourceLookuptitle tiddler;\\n });\\n var index getIndex();\\n if (!index) {\\n return ;\\n }\\n return function (callback) {\\n var results;\\n try {\\n var fuzzySearchesEnabled options.wiki.getTiddlerText(FUZZY_SEARCH_TIDDLER, ) yes;\\n if (!fuzzySearchesEnabled) {\\n var qp new lunr.QueryParser(operator.operand, new lunr.Query(title, tags, text));\\n var query qp.parse();\\n for (var _i 0, _a query.clauses; _i \u003C _a.length; _i++) {\\n var clause _a_i;\\n if (!clause.usePipeline) {\\n // were using a wildcard, but the index isnt prepared for\\n // fuzzy searches - so pass information on this down the pipeline\\n return callback(null, null, \\\It looks like youre trying to perform a wildcard search; youll need to enable wildcard/fuzzy searching in the FTS settings\\\);\\n }\\n if (editDistance in clause) {\\n // were using a fuzzy search, but the index isnt prepared for\\n // fuzzy searches - so pass information on this down the pipeline\\n return callback(null, null, \\\It looks like youre trying to perform a fuzzy search; youll need to enable wildcard/fuzzy searching in the FTS settings\\\);\\n }\\n }\\n }\\n results index.search(operator.operand);\\n }\\n catch (e) {\\n if (e instanceof lunr.QueryParseError) {\\n results ;\\n }\\n else {\\n throw e;\\n }\\n }\\n for (var _b 0, results_1 results; _b \u003C results_1.length; _b++) {\\n var match results_1_b;\\n if (match.ref in sourceLookup) {\\n callback(sourceLookupmatch.ref, match.ref);\\n }\\n }\\n };\\n }\\n FTSearch.ftsearch ftsearch;\\n ;\\n})(FTSearch || (FTSearch {}));\\nmodule.exports FTSearch;\\n// vim:sts4:sw4\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/plugins/hoelzro/full-text-search/ftsfeedback.js\:{\title\:\$:/plugins/hoelzro/full-text-search/ftsfeedback.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/ftsfeedback.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\n\\\\*/\\nvar FTSFeedback;\\n(function (FTSFeedback) {\\n function ftsfeedback(source, operator, options) {\\n return function (callback) {\\n var targetTiddler operator.operand;\\n var listOfFeedback ;\\n source(function (tiddler, title, feedback) {\\n if (tiddler null && title null) {\\n listOfFeedback.push(feedback);\\n }\\n else {\\n callback(tiddler, title);\\n }\\n });\\n options.wiki.setTiddlerData(targetTiddler, listOfFeedback);\\n };\\n }\\n FTSFeedback.ftsfeedback ftsfeedback;\\n})(FTSFeedback || (FTSFeedback {}));\\nmodule.exports FTSFeedback;\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\},\$:/plugins/hoelzro/full-text-search/history\:{\title\:\$:/plugins/hoelzro/full-text-search/history\,\type\:\text/vnd.tiddlywiki\,\text\:\! Release History\\n\\n!! 1.1.0 (2018-11-24)\\n\\n!!! Bug Fixes\\n\\n * The plugin no longer indexes draft tiddlers\\n * Refresh query results when embedding ftsearch directly (GH #24|https://github.com/hoelzro/tw-full-text-search/issues/24)\\n * Fixed a bug where wikis with `__proto__` in them would fail to load from cache\\n * Fix some query relevance issues\\n * Fix a bug where indexing didnt work on non-Node installations on Chrome\\n\\n!!! User-facing changes\\n\\n * ~TiddlyWiki 5.1.15 is now required!\\n * Added the ability to automatically index your wiki on startup (~TiddlyWiki 5.1.16 is required for this)\\n * Added lots of examples\\n * Improved indexing for wildcards/fuzzy searches, but these are now hidden behind a configuration flag due the overhead incurred\\n * Alert the user if changing their FTS settings requires an index rebuild\\n\\n!!! Developer changes\\n\\n * Updated to lunr 2.3.5\\n * Tests now use Jasmine 3\\n\\n!! 1.0.3 (2018-10-07)\\n\\n!!! User-facing changes\\n\\n * Fixed advanced search result listing (GH #8)\\n\\n!!! Developer changes\\n\\n * Allow wikis to disable the cache, primarily for the demo wiki that lives on hoelz.ro (GH #11)\\n\\n!! 1.0.2 (2018-08-02)\\n\\n!!! User-facing changes\\n\\n * Upgraded to lunr.js 2.3.1, which includes new features like additional query operators.\\n\\n!! 1.0.1 (2018-06-29)\\n\\n!!! Bug Fixes\\n\\n * Fixed a bug where incomplete lunr.js queries would throw red boxes in the users face. Thanks to Diego Mesa for reporting!\\n\\n!! 1.0.0 (2017-11-29)\\n\\n!!! User-facing changes\\n\\n * Enabled index creation using web workers, resulting in a 10x speedup\\n * Fixed a bug causing images and other non-text data to get indexed\\n * Fixed a bug causing tags to be improperly indexed\\n\\n!!! Developer changes\\n\\n * Upgraded the FTS plugin to lunr.js 2.1.4, plus some modifications of my own to enable mutable indexes\\n * Added tests\\n * Added an experimental feature called \\\query expansion\\\ - I dont know if itll stay around or how well it works, so theres no UI around it at the moment\\n\\n!! 0.0.4 (2017-06-11)\\n\\nFix bug where deleted content from a tiddler would still affect search results if a\\npartial index is loaded from the web storage cache.\\n\\n!! 0.0.3 (2017-06-06)\\n\\nFix bug with web storage index serialization/deserialization.\\n\\n!! 0.0.2 (2017-06-02)\\n\\nAdded stashing away current index in web storage to avoid repeated index creation/cut down on index creation time.\\n\\n!! 0.0.1 (2017-02-27)\\n\\nBasic full-text search functionality.\\n\},\$:/plugins/hoelzro/full-text-search/hooks.js\:{\title\:\$:/plugins/hoelzro/full-text-search/hooks.js\,\module-type\:\startup\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/hooks.js\\ntype: text/vnd.tiddlywiki\\nmodule-type: startup\\n\\n\\\\*/\\nvar SaveTiddlerHook;\\n(function (SaveTiddlerHook) {\\n var RELATED_TERMS_TIDDLER $:/plugins/hoelzro/full-text-search/RelatedTerms.json;\\n var FUZZY_SEARCH_TIDDLER $:/plugins/hoelzro/full-text-search/EnableFuzzySearching;\\n var STATE_TIDDLER $:/temp/FTS-state;\\n function startup() {\\n var _a require($:/plugins/hoelzro/full-text-search/shared-index.js), updateTiddler _a.updateTiddler, getIndex _a.getIndex, clearIndex _a.clearIndex;\\n var cache require($:/plugins/hoelzro/full-text-search/cache.js);\\n var logger new $tw.utils.Logger(full-text-search);\\n $tw.wiki.addEventListener(change, function (changes) {\\n var index getIndex();\\n var isIndexDirty false;\\n for (var title in changes) {\\n if (title RELATED_TERMS_TIDDLER || title FUZZY_SEARCH_TIDDLER) {\\n clearIndex();\\n var stateTiddler $tw.wiki.getTiddler(STATE_TIDDLER);\\n if (stateTiddler && stateTiddler.fields.text ! uninitialized) {\\n logger.alert(A configuration change occurred that has invalidated your FTS index; please rebuild the index from the control panel in order to use full text search);\\n }\\n $tw.wiki.addTiddler(new $tw.Tiddler(stateTiddler, { text: uninitialized }, $tw.wiki.getModificationFields()));\\n cache.invalidate();\\n }\\n if (!index) {\\n continue;\\n }\\n if ($tw.wiki.isSystemTiddler(title)) {\\n continue;\\n }\\n var change changestitle;\\n if (change.modified) {\\n var tiddler $tw.wiki.getTiddler(title);\\n if (tiddler ! undefined) {\\n var type tiddler.fields.type || text/vnd.tiddlywiki;\\n if (!type.startsWith(text/)) {\\n continue;\\n }\\n if (draft.of in tiddler.fields) {\\n continue;\\n }\\n isIndexDirty true;\\n updateTiddler(index, tiddler);\\n }\\n }\\n else { // change.deleted\\n isIndexDirty true;\\n index.remove({ title: title });\\n }\\n }\\n // Since actual changes are happening to lunr data structures outside of\\n // TiddlyWiki, we need to tell TiddlyWiki to rerender the page and any\\n // tiddlers whose contents may have changed due to the change in the index\\n if (isIndexDirty) {\\n var stateTiddler $tw.wiki.getTiddler(STATE_TIDDLER);\\n $tw.wiki.addTiddler(stateTiddler);\\n }\\n });\\n }\\n SaveTiddlerHook.startup startup;\\n})(SaveTiddlerHook || (SaveTiddlerHook {}));\\nmodule.exports SaveTiddlerHook;\\n// vim:sts4:sw4\\n\},\$:/plugins/hoelzro/full-text-search/index-worker.js\:{\title\:\$:/plugins/hoelzro/full-text-search/index-worker.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/index-worker.js\\ntype: application/javascript\\nmodule-type: library\\n\\n\\\\*/\\nvar __awaiter (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator\\\throw\\\(value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator generator.apply(thisArg, _arguments || )).next());\\n });\\n};\\nvar __generator (this && this.__generator) || function (thisArg, body) {\\n var _ { label: 0, sent: function() { if (t0 & 1) throw t1; return t1; }, trys: , ops: }, f, y, t, g;\\n return g { next: verb(0), \\\throw\\\: verb(1), \\\return\\\: verb(2) }, typeof Symbol \\\function\\\ && (gSymbol.iterator function() { return this; }), g;\\n function verb(n) { return function (v) { return step(n, v); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\Generator is already executing.\\\);\\n while (_) try {\\n if (f 1, y && (t op0 & 2 ? y\\\return\\\ : op0 ? y\\\throw\\\ || ((t y\\\return\\\) && t.call(y), 0) : y.next) && !(t t.call(y, op1)).done) return t;\\n if (y 0, t) op op0 & 2, t.value;\\n switch (op0) {\\n case 0: case 1: t op; break;\\n case 4: _.label++; return { value: op1, done: false };\\n case 5: _.label++; y op1; op 0; continue;\\n case 7: op _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t _.trys, t t.length > 0 && tt.length - 1) && (op0 6 || op0 2)) { _ 0; continue; }\\n if (op0 3 && (!t || (op1 > t0 && op1 \u003C t3))) { _.label op1; break; }\\n if (op0 6 && _.label \u003C t1) { _.label t1; t op; break; }\\n if (t && _.label \u003C t2) { _.label t2; _.ops.push(op); break; }\\n if (t2) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op body.call(thisArg, _);\\n } catch (e) { op 6, e; y 0; } finally { f t 0; }\\n if (op0 & 5) throw op1; return { value: op0 ? op1 : void 0, done: true };\\n }\\n};\\nvar __await (this && this.__await) || function (v) { return this instanceof __await ? (this.v v, this) : new __await(v); }\\nvar __asyncGenerator (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\\n if (!Symbol.asyncIterator) throw new TypeError(\\\Symbol.asyncIterator is not defined.\\\);\\n var g generator.apply(thisArg, _arguments || ), i, q ;\\n return i {}, verb(\\\next\\\), verb(\\\throw\\\), verb(\\\return\\\), iSymbol.asyncIterator function () { return this; }, i;\\n function verb(n) { if (gn) in function (v) { return new Promise(function (a, b) { q.push(n, v, a, b) > 1 || resume(n, v); }); }; }\\n function resume(n, v) { try { step(gn(v)); } catch (e) { settle(q03, e); } }\\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q02, r); }\\n function fulfill(value) { resume(\\\next\\\, value); }\\n function reject(value) { resume(\\\throw\\\, value); }\\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q00, q01); }\\n};\\nvar __asyncValues (this && this.__asyncValues) || function (o) {\\n if (!Symbol.asyncIterator) throw new TypeError(\\\Symbol.asyncIterator is not defined.\\\);\\n var m oSymbol.asyncIterator, i;\\n return m ? m.call(o) : (o typeof __values \\\function\\\ ? __values(o) : oSymbol.iterator(), i {}, verb(\\\next\\\), verb(\\\throw\\\), verb(\\\return\\\), iSymbol.asyncIterator function () { return this; }, i);\\n function verb(n) { in on && function (v) { return new Promise(function (resolve, reject) { v on(v), settle(resolve, reject, v.done, v.value); }); }; }\\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\\n};\\n(function () {\\n return __awaiter(this, void 0, void 0, function () {\\n function getNextMessage() {\\n return __awaiter(this, void 0, void 0, function () {\\n return __generator(this, function (_a) {\\n return 2 /*return*/, new Promise(function (resolve, reject) {\\n onmessage function (msg) {\\n onmessage function () { };\\n resolve(msg.data);\\n };\\n });\\n });\\n });\\n }\\n function requireFromPage(name, sandbox) {\\n return __awaiter(this, void 0, void 0, function () {\\n return __generator(this, function (_a) {\\n postMessage({\\n type: require,\\n name: name\\n });\\n return 2 /*return*/, getNextMessage().then(function (msg) {\\n var mod { exports: {} };\\n selfmodule mod;\\n selfexports mod.exports;\\n if (sandbox ! null) {\\n for (var k in sandbox) {\\n if (sandbox.hasOwnProperty(k)) {\\n selfk sandboxk;\\n }\\n }\\n }\\n importScripts(msg);\\n if (sandbox ! null) {\\n for (var k in sandbox) {\\n if (sandbox.hasOwnProperty(k)) {\\n delete selfk;\\n }\\n }\\n }\\n delete selfmodule;\\n delete selfexports;\\n return mod.exports;\\n });\\n });\\n });\\n }\\n function getRelatedTerms() {\\n return __awaiter(this, void 0, void 0, function () {\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n postMessage({\\n type: getRelatedTerms\\n });\\n return 4 /*yield*/, getNextMessage();\\n case 1: return 2 /*return*/, _a.sent();\\n }\\n });\\n });\\n }\\n function getFuzzySetting() {\\n return __awaiter(this, void 0, void 0, function () {\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n postMessage({\\n type: getFuzzySetting\\n });\\n return 4 /*yield*/, getNextMessage();\\n case 1: return 2 /*return*/, _a.sent();\\n }\\n });\\n });\\n }\\n function readTiddlers() {\\n return __asyncGenerator(this, arguments, function readTiddlers_1() {\\n var msg;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n postMessage({ type: sendTiddlers });\\n return 4 /*yield*/, __await(getNextMessage());\\n case 1:\\n msg _a.sent();\\n _a.label 2;\\n case 2:\\n if (!(msg ! null)) return 3 /*break*/, 6;\\n return 4 /*yield*/, __await(JSON.parse(msg));\\n case 3: return 4 /*yield*/, _a.sent();\\n case 4:\\n _a.sent();\\n return 4 /*yield*/, __await(getNextMessage());\\n case 5:\\n msg _a.sent();\\n return 3 /*break*/, 2;\\n case 6: return 2 /*return*/;\\n }\\n });\\n });\\n }\\n var e_1, _a, lunr, lunrMutable, generateQueryExpander, relatedTerms, fuzzySetting, expandQuery, builder, stemmer, count, previousUpdate, _b, _c, tiddlerFields, fields, now, e_1_1;\\n return __generator(this, function (_d) {\\n switch (_d.label) {\\n case 0: return 4 /*yield*/, requireFromPage($:/plugins/hoelzro/full-text-search/lunr.min.js);\\n case 1:\\n lunr _d.sent();\\n return 4 /*yield*/, requireFromPage($:/plugins/hoelzro/full-text-search/lunr-mutable.js, {\\n require: function (modName) {\\n if (modName ! $:/plugins/hoelzro/full-text-search/lunr.min.js) {\\n throw new Error(\\\Invalid module name for lunr-mutable!\\\);\\n }\\n return lunr;\\n }\\n });\\n case 2:\\n lunrMutable _d.sent();\\n return 4 /*yield*/, requireFromPage($:/plugins/hoelzro/full-text-search/query-expander.js);\\n case 3:\\n generateQueryExpander (_d.sent()).generateQueryExpander;\\n return 4 /*yield*/, getRelatedTerms();\\n case 4:\\n relatedTerms _d.sent();\\n return 4 /*yield*/, getFuzzySetting();\\n case 5:\\n fuzzySetting _d.sent();\\n expandQuery generateQueryExpander(lunr, relatedTerms);\\n builder new lunrMutable.Builder();\\n if (fuzzySetting yes) {\\n stemmer function (unstemmedToken) {\\n var stemmedToken lunr.stemmer(unstemmedToken.clone());\\n return unstemmedToken, stemmedToken;\\n };\\n lunr.Pipeline.registerFunction(stemmer, stemmedAndUnstemmed);\\n }\\n else {\\n stemmer lunr.stemmer;\\n }\\n builder.pipeline.add(lunr.trimmer, lunr.stopWordFilter, expandQuery, stemmer);\\n builder.searchPipeline.add(lunr.stemmer);\\n count 0;\\n previousUpdate new Date();\\n // XXX configurable fields?\\n builder.field(title);\\n builder.field(tags);\\n builder.field(text);\\n builder.ref(title);\\n _d.label 6;\\n case 6:\\n _d.trys.push(6, 11, 12, 17);\\n _b __asyncValues(readTiddlers());\\n _d.label 7;\\n case 7: return 4 /*yield*/, _b.next();\\n case 8:\\n if (!(_c _d.sent(), !_c.done)) return 3 /*break*/, 10;\\n tiddlerFields _c.value;\\n fields {\\n title: tiddlerFields.title\\n };\\n if (text in tiddlerFields) {\\n fields.text tiddlerFields.text;\\n }\\n if (tags in tiddlerFields) {\\n fields.tags tiddlerFields.tags.join( );\\n }\\n builder.add(fields);\\n count++;\\n now new Date();\\n if ((now.getTime() - previousUpdate.getTime()) > 200) {\\n previousUpdate now;\\n postMessage({ type: progress, count: count });\\n }\\n _d.label 9;\\n case 9: return 3 /*break*/, 7;\\n case 10: return 3 /*break*/, 17;\\n case 11:\\n e_1_1 _d.sent();\\n e_1 { error: e_1_1 };\\n return 3 /*break*/, 17;\\n case 12:\\n _d.trys.push(12, , 15, 16);\\n if (!(_c && !_c.done && (_a _b\\\return\\\))) return 3 /*break*/, 14;\\n return 4 /*yield*/, _a.call(_b);\\n case 13:\\n _d.sent();\\n _d.label 14;\\n case 14: return 3 /*break*/, 16;\\n case 15:\\n if (e_1) throw e_1.error;\\n return 7 /*endfinally*/;\\n case 16: return 7 /*endfinally*/;\\n case 17:\\n postMessage({ type: index, index: JSON.stringify(builder.build()) });\\n close();\\n return 2 /*return*/;\\n }\\n });\\n });\\n})()\\\catch\\\(function (err) {\\n postMessage({ type: error, error: err.toString() });\\n});\\n// vim:sts4:sw4\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/hoelzro/full-text-search/license\:{\title\:\$:/plugins/hoelzro/full-text-search/license\,\type\:\text/vnd.tiddlywiki\,\text\:\```\\nCopyright 2017-2018 Rob Hoelz\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of\\nthis software and associated documentation files (the \\\Software\\\), to deal in\\nthe Software without restriction, including without limitation the rights to\\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\\nof the Software, and to permit persons to whom the Software is furnished to do\\nso, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\nSOFTWARE.\\n```\\n\},\$:/plugins/hoelzro/full-text-search/localforage.min.js\:{\title\:\$:/plugins/hoelzro/full-text-search/localforage.min.js\,\text\:\/*!\\n localForage -- Offline Storage, Improved\\n Version 1.5.0\\n https://localforage.github.io/localForage\\n (c) 2013-2017 Mozilla, Apache License 2.0\\n*/\\n!function(a){if(\\\object\\\typeof exports&&\\\undefined\\\!typeof module)module.exportsa();else if(\\\function\\\typeof define&&define.amd)define(,a);else{var b;b\\\undefined\\\!typeof window?window:\\\undefined\\\!typeof global?global:\\\undefined\\\!typeof self?self:this,b.localforagea()}}(function(){return function a(b,c,d){function e(g,h){if(!cg){if(!bg){var i\\\function\\\typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var jnew Error(\\\Cannot find module \\\+g+\\\\\\);throw j.code\\\MODULE_NOT_FOUND\\\,j}var kcg{exports:{}};bg0.call(k.exports,function(a){var cbg1a;return e(c?c:a)},k,k.exports,a,b,c,d)}return cg.exports}for(var f\\\function\\\typeof require&&require,g0;g\u003Cd.length;g++)e(dg);return e}({1:function(a,b,c){(function(a){\\\use strict\\\;function c(){k!0;for(var a,b,cl.length;c;){for(bl,l,a-1;++a\u003Cc;)ba();cl.length}k!1}function d(a){1!l.push(a)||k||e()}var e,fa.MutationObserver||a.WebKitMutationObserver;if(f){var g0,hnew f(c),ia.document.createTextNode(\\\\\\);h.observe(i,{characterData:!0}),efunction(){i.datag++g%2}}else if(a.setImmediate||\\\undefined\\\typeof a.MessageChannel)e\\\document\\\in a&&\\\onreadystatechange\\\in a.document.createElement(\\\script\\\)?function(){var ba.document.createElement(\\\script\\\);b.onreadystatechangefunction(){c(),b.onreadystatechangenull,b.parentNode.removeChild(b),bnull},a.document.documentElement.appendChild(b)}:function(){setTimeout(c,0)};else{var jnew a.MessageChannel;j.port1.onmessagec,efunction(){j.port2.postMessage(0)}}var k,l;b.exportsd}).call(this,\\\undefined\\\!typeof global?global:\\\undefined\\\!typeof self?self:\\\undefined\\\!typeof window?window:{})},{},2:function(a,b,c){\\\use strict\\\;function d(){}function e(a){if(\\\function\\\!typeof a)throw new TypeError(\\\resolver must be a function\\\);this.states,this.queue,this.outcomevoid 0,a!d&&i(this,a)}function f(a,b,c){this.promisea,\\\function\\\typeof b&&(this.onFulfilledb,this.callFulfilledthis.otherCallFulfilled),\\\function\\\typeof c&&(this.onRejectedc,this.callRejectedthis.otherCallRejected)}function g(a,b,c){o(function(){var d;try{db(c)}catch(b){return p.reject(a,b)}da?p.reject(a,new TypeError(\\\Cannot resolve promise with itself\\\)):p.resolve(a,d)})}function h(a){var ba&&a.then;if(a&&\\\object\\\typeof a&&\\\function\\\typeof b)return function(){b.apply(a,arguments)}}function i(a,b){function c(b){f||(f!0,p.reject(a,b))}function d(b){f||(f!0,p.resolve(a,b))}function e(){b(d,c)}var f!1,gj(e);\\\error\\\g.status&&c(g.value)}function j(a,b){var c{};try{c.valuea(b),c.status\\\success\\\}catch(a){c.status\\\error\\\,c.valuea}return c}function k(a){return a instanceof this?a:p.resolve(new this(d),a)}function l(a){var bnew this(d);return p.reject(b,a)}function m(a){function b(a,b){function d(a){gba,++h!e||f||(f!0,p.resolve(j,g))}c.resolve(a).then(d,function(a){f||(f!0,p.reject(j,a))})}var cthis;if(\\\object Array\\\!Object.prototype.toString.call(a))return this.reject(new TypeError(\\\must be an array\\\));var ea.length,f!1;if(!e)return this.resolve();for(var gnew Array(e),h0,i-1,jnew this(d);++i\u003Ce;)b(ai,i);return j}function n(a){function b(a){c.resolve(a).then(function(a){f||(f!0,p.resolve(h,a))},function(a){f||(f!0,p.reject(h,a))})}var cthis;if(\\\object Array\\\!Object.prototype.toString.call(a))return this.reject(new TypeError(\\\must be an array\\\));var ea.length,f!1;if(!e)return this.resolve();for(var g-1,hnew this(d);++g\u003Ce;)b(ag);return h}var oa(1),p{},q\\\REJECTED\\\,r\\\FULFILLED\\\,s\\\PENDING\\\;b.exportsce,e.prototype.catchfunction(a){return this.then(null,a)},e.prototype.thenfunction(a,b){if(\\\function\\\!typeof a&&this.stater||\\\function\\\!typeof b&&this.stateq)return this;var cnew this.constructor(d);if(this.state!s){var ethis.stater?a:b;g(c,e,this.outcome)}else this.queue.push(new f(c,a,b));return c},f.prototype.callFulfilledfunction(a){p.resolve(this.promise,a)},f.prototype.otherCallFulfilledfunction(a){g(this.promise,this.onFulfilled,a)},f.prototype.callRejectedfunction(a){p.reject(this.promise,a)},f.prototype.otherCallRejectedfunction(a){g(this.promise,this.onRejected,a)},p.resolvefunction(a,b){var cj(h,b);if(\\\error\\\c.status)return p.reject(a,c.value);var dc.value;if(d)i(a,d);else{a.stater,a.outcomeb;for(var e-1,fa.queue.length;++e\u003Cf;)a.queuee.callFulfilled(b)}return a},p.rejectfunction(a,b){a.stateq,a.outcomeb;for(var c-1,da.queue.length;++c\u003Cd;)a.queuec.callRejected(b);return a},c.resolvek,c.rejectl,c.allm,c.racen},{1:1},3:function(a,b,c){(function(b){\\\use strict\\\;\\\function\\\!typeof b.Promise&&(b.Promisea(2))}).call(this,\\\undefined\\\!typeof global?global:\\\undefined\\\!typeof self?self:\\\undefined\\\!typeof window?window:{})},{2:2},4:function(a,b,c){\\\use strict\\\;function d(a,b){if(!(a instanceof b))throw new TypeError(\\\Cannot call a class as a function\\\)}function e(){try{if(\\\undefined\\\!typeof indexedDB)return indexedDB;if(\\\undefined\\\!typeof webkitIndexedDB)return webkitIndexedDB;if(\\\undefined\\\!typeof mozIndexedDB)return mozIndexedDB;if(\\\undefined\\\!typeof OIndexedDB)return OIndexedDB;if(\\\undefined\\\!typeof msIndexedDB)return msIndexedDB}catch(a){}}function f(){try{if(!ga)return!1;var a\\\undefined\\\!typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),b\\\function\\\typeof fetch&&fetch.toString().indexOf(\\\native code\\\)!-1;return(!a||b)&&\\\undefined\\\!typeof indexedDB&&\\\undefined\\\!typeof IDBKeyRange}catch(a){return!1}}function g(){return\\\function\\\typeof openDatabase}function h(){try{return\\\undefined\\\!typeof localStorage&&\\\setItem\\\in localStorage&&localStorage.setItem}catch(a){return!1}}function i(a,b){aa||,bb||{};try{return new Blob(a,b)}catch(f){if(\\\TypeError\\\!f.name)throw f;for(var c\\\undefined\\\!typeof BlobBuilder?BlobBuilder:\\\undefined\\\!typeof MSBlobBuilder?MSBlobBuilder:\\\undefined\\\!typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder,dnew c,e0;e\u003Ca.length;e+1)d.append(ae);return d.getBlob(b.type)}}function j(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}function k(a,b,c){\\\function\\\typeof b&&a.then(b),\\\function\\\typeof c&&a.catch(c)}function l(a){for(var ba.length,cnew ArrayBuffer(b),dnew Uint8Array(c),e0;e\u003Cb;e++)dea.charCodeAt(e);return c}function m(a){return new ja(function(b){var ca.transaction(ka,\\\readwrite\\\),di(\\\\\\);c.objectStore(ka).put(d,\\\key\\\),c.onabortfunction(a){a.preventDefault(),a.stopPropagation(),b(!1)},c.oncompletefunction(){var anavigator.userAgent.match(/Chrome\\\\/(\\\\d+)/),cnavigator.userAgent.match(/Edge\\\\//);b(c||!a||parseInt(a1,10)>43)}}).catch(function(){return!1})}function n(a){return\\\boolean\\\typeof ha?ja.resolve(ha):m(a).then(function(a){return haa})}function o(a){var biaa.name,c{};c.promisenew ja(function(a){c.resolvea}),b.deferredOperations.push(c),b.dbReady?b.dbReadyb.dbReady.then(function(){return c.promise}):b.dbReadyc.promise}function p(a){var biaa.name,cb.deferredOperations.pop();c&&c.resolve()}function q(a,b){return new ja(function(c,d){if(a.db){if(!b)return c(a.db);o(a),a.db.close()}var ea.name;b&&e.push(a.version);var fga.open.apply(ga,e);b&&(f.onupgradeneededfunction(b){var cf.result;try{c.createObjectStore(a.storeName),b.oldVersion\u003C1&&c.createObjectStore(ka)}catch(c){if(\\\ConstraintError\\\!c.name)throw c;console.warn(The database \\\+a.name+\\\ has been upgraded from version +b.oldVersion+\\\ to version \\\+b.newVersion+, but the storage \\\+a.storeName+\\\ already exists.)}}),f.onerrorfunction(a){a.preventDefault(),d(f.error)},f.onsuccessfunction(){c(f.result),p(a)}})}function r(a){return q(a,!1)}function s(a){return q(a,!0)}function t(a,b){if(!a.db)return!0;var c!a.db.objectStoreNames.contains(a.storeName),da.version\u003Ca.db.version,ea.version>a.db.version;if(d&&(a.version!b&&console.warn(The database \\\+a.name+\\\\\\\\\\ cant be downgraded from version \\\+a.db.version+\\\ to version \\\+a.version+\\\.\\\),a.versiona.db.version),e||c){if(c){var fa.db.version+1;f>a.version&&(a.versionf)}return!0}return!1}function u(a){return new ja(function(b,c){var dnew FileReader;d.onerrorc,d.onloadendfunction(c){var dbtoa(c.target.result||\\\\\\);b({__local_forage_encoded_blob:!0,data:d,type:a.type})},d.readAsBinaryString(a)})}function v(a){var bl(atob(a.data));return i(b,{type:a.type})}function w(a){return a&&a.__local_forage_encoded_blob}function x(a){var bthis,cb._initReady().then(function(){var aiab._dbInfo.name;if(a&&a.dbReady)return a.dbReady});return k(c,a,a),c}function y(a){function b(){return ja.resolve()}var cthis,d{db:null};if(a)for(var e in a)deae;ia||(ia{});var fiad.name;f||(f{forages:,db:null,dbReady:null,deferredOperations:},iad.namef),f.forages.push(c),c._initReady||(c._initReadyc.ready,c.readyx);for(var g,h0;h\u003Cf.forages.length;h++){var if.foragesh;i!c&&g.push(i._initReady().catch(b))}var jf.forages.slice(0);return ja.all(g).then(function(){return d.dbf.db,r(d)}).then(function(a){return d.dba,t(d,c._defaultConfig.version)?s(d):a}).then(function(a){d.dbf.dba,c._dbInfod;for(var b0;b\u003Cj.length;b++){var ejb;e!c&&(e._dbInfo.dbd.db,e._dbInfo.versiond.version)}})}function z(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo,fe.db.transaction(e.storeName,\\\readonly\\\).objectStore(e.storeName),gf.get(a);g.onsuccessfunction(){var ag.result;void 0a&&(anull),w(a)&&(av(a)),b(a)},g.onerrorfunction(){d(g.error)}}).catch(d)});return j(d,b),d}function A(a,b){var cthis,dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo,fe.db.transaction(e.storeName,\\\readonly\\\).objectStore(e.storeName),gf.openCursor(),h1;g.onsuccessfunction(){var cg.result;if(c){var dc.value;w(d)&&(dv(d));var ea(d,c.key,h++);void 0!e?b(e):c.continue()}else b()},g.onerrorfunction(){d(g.error)}}).catch(d)});return j(d,b),d}function B(a,b,c){var dthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var enew ja(function(c,e){var f;d.ready().then(function(){return fd._dbInfo,\\\object Blob\\\la.call(b)?n(f.db).then(function(a){return a?b:u(b)}):b}).then(function(b){var df.db.transaction(f.storeName,\\\readwrite\\\),gd.objectStore(f.storeName),hg.put(b,a);nullb&&(bvoid 0),d.oncompletefunction(){void 0b&&(bnull),c(b)},d.onabortd.onerrorfunction(){var ah.error?h.error:h.transaction.error;e(a)}}).catch(e)});return j(e,c),e}function C(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo,fe.db.transaction(e.storeName,\\\readwrite\\\),gf.objectStore(e.storeName),hg.delete(a);f.oncompletefunction(){b()},f.onerrorfunction(){d(h.error)},f.onabortfunction(){var ah.error?h.error:h.transaction.error;d(a)}}).catch(d)});return j(d,b),d}function D(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo,ed.db.transaction(d.storeName,\\\readwrite\\\),fe.objectStore(d.storeName),gf.clear();e.oncompletefunction(){a()},e.onaborte.onerrorfunction(){var ag.error?g.error:g.transaction.error;c(a)}}).catch(c)});return j(c,a),c}function E(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo,ed.db.transaction(d.storeName,\\\readonly\\\).objectStore(d.storeName),fe.count();f.onsuccessfunction(){a(f.result)},f.onerrorfunction(){c(f.error)}}).catch(c)});return j(c,a),c}function F(a,b){var cthis,dnew ja(function(b,d){return a\u003C0?void b(null):void c.ready().then(function(){var ec._dbInfo,fe.db.transaction(e.storeName,\\\readonly\\\).objectStore(e.storeName),g!1,hf.openCursor();h.onsuccessfunction(){var ch.result;return c?void(0a?b(c.key):g?b(c.key):(g!0,c.advance(a))):void b(null)},h.onerrorfunction(){d(h.error)}}).catch(d)});return j(d,b),d}function G(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo,ed.db.transaction(d.storeName,\\\readonly\\\).objectStore(d.storeName),fe.openCursor(),g;f.onsuccessfunction(){var bf.result;return b?(g.push(b.key),void b.continue()):void a(g)},f.onerrorfunction(){c(f.error)}}).catch(c)});return j(c,a),c}function H(a){var b,c,d,e,f,g.75*a.length,ha.length,i0;\\\\\\aa.length-1&&(g--,\\\\\\aa.length-2&&g--);var jnew ArrayBuffer(g),knew Uint8Array(j);for(b0;b\u003Ch;b+4)cna.indexOf(ab),dna.indexOf(ab+1),ena.indexOf(ab+2),fna.indexOf(ab+3),ki++c\u003C\u003C2|d>>4,ki++(15&d)\u003C\u003C4|e>>2,ki++(3&e)\u003C\u003C6|63&f;return j}function I(a){var b,cnew Uint8Array(a),d\\\\\\;for(b0;b\u003Cc.length;b+3)d+nacb>>2,d+na(3&cb)\u003C\u003C4|cb+1>>4,d+na(15&cb+1)\u003C\u003C2|cb+2>>6,d+na63&cb+2;return c.length%32?dd.substring(0,d.length-1)+\\\\\\:c.length%31&&(dd.substring(0,d.length-2)+\\\\\\),d}function J(a,b){var c\\\\\\;if(a&&(cEa.call(a)),a&&(\\\object ArrayBuffer\\\c||a.buffer&&\\\object ArrayBuffer\\\Ea.call(a.buffer))){var d,eqa;a instanceof ArrayBuffer?(da,e+sa):(da.buffer,\\\object Int8Array\\\c?e+ua:\\\object Uint8Array\\\c?e+va:\\\object Uint8ClampedArray\\\c?e+wa:\\\object Int16Array\\\c?e+xa:\\\object Uint16Array\\\c?e+za:\\\object Int32Array\\\c?e+ya:\\\object Uint32Array\\\c?e+Aa:\\\object Float32Array\\\c?e+Ba:\\\object Float64Array\\\c?e+Ca:b(new Error(\\\Failed to get type for BinaryArray\\\))),b(e+I(d))}else if(\\\object Blob\\\c){var fnew FileReader;f.onloadfunction(){var coa+a.type+\\\~\\\+I(this.result);b(qa+ta+c)},f.readAsArrayBuffer(a)}else try{b(JSON.stringify(a))}catch(c){console.error(\\\Couldnt convert value into a JSON string: \\\,a),b(null,c)}}function K(a){if(a.substring(0,ra)!qa)return JSON.parse(a);var b,ca.substring(Da),da.substring(ra,Da);if(dta&&pa.test(c)){var ec.match(pa);be1,cc.substring(e0.length)}var fH(c);switch(d){case sa:return f;case ta:return i(f,{type:b});case ua:return new Int8Array(f);case va:return new Uint8Array(f);case wa:return new Uint8ClampedArray(f);case xa:return new Int16Array(f);case za:return new Uint16Array(f);case ya:return new Int32Array(f);case Aa:return new Uint32Array(f);case Ba:return new Float32Array(f);case Ca:return new Float64Array(f);default:throw new Error(\\\Unkown type: \\\+d)}}function L(a){var bthis,c{db:null};if(a)for(var d in a)cd\\\string\\\!typeof ad?ad.toString():ad;var enew ja(function(a,d){try{c.dbopenDatabase(c.name,String(c.version),c.description,c.size)}catch(a){return d(a)}c.db.transaction(function(e){e.executeSql(\\\CREATE TABLE IF NOT EXISTS \\\+c.storeName+\\\ (id INTEGER PRIMARY KEY, key unique, value)\\\,,function(){b._dbInfoc,a()},function(a,b){d(b)})})});return c.serializerFa,e}function M(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo;e.db.transaction(function(c){c.executeSql(\\\SELECT * FROM \\\+e.storeName+\\\ WHERE key ? LIMIT 1\\\,a,function(a,c){var dc.rows.length?c.rows.item(0).value:null;d&&(de.serializer.deserialize(d)),b(d)},function(a,b){d(b)})})}).catch(d)});return j(d,b),d}function N(a,b){var cthis,dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo;e.db.transaction(function(c){c.executeSql(\\\SELECT * FROM \\\+e.storeName,,function(c,d){for(var fd.rows,gf.length,h0;h\u003Cg;h++){var if.item(h),ji.value;if(j&&(je.serializer.deserialize(j)),ja(j,i.key,h+1),void 0!j)return void b(j)}b()},function(a,b){d(b)})})}).catch(d)});return j(d,b),d}function O(a,b,c,d){var ethis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var fnew ja(function(f,g){e.ready().then(function(){void 0b&&(bnull);var hb,ie._dbInfo;i.serializer.serialize(b,function(b,j){j?g(j):i.db.transaction(function(c){c.executeSql(\\\INSERT OR REPLACE INTO \\\+i.storeName+\\\ (key, value) VALUES (?, ?)\\\,a,b,function(){f(h)},function(a,b){g(b)})},function(b){if(b.codeb.QUOTA_ERR){if(d>0)return void f(O.apply(e,a,h,c,d-1));g(b)}})})}).catch(g)});return j(f,c),f}function P(a,b,c){return O.apply(this,a,b,c,1)}function Q(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo;e.db.transaction(function(c){c.executeSql(\\\DELETE FROM \\\+e.storeName+\\\ WHERE key ?\\\,a,function(){b()},function(a,b){d(b)})})}).catch(d)});return j(d,b),d}function R(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo;d.db.transaction(function(b){b.executeSql(\\\DELETE FROM \\\+d.storeName,,function(){a()},function(a,b){c(b)})})}).catch(c)});return j(c,a),c}function S(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo;d.db.transaction(function(b){b.executeSql(\\\SELECT COUNT(key) as c FROM \\\+d.storeName,,function(b,c){var dc.rows.item(0).c;a(d)},function(a,b){c(b)})})}).catch(c)});return j(c,a),c}function T(a,b){var cthis,dnew ja(function(b,d){c.ready().then(function(){var ec._dbInfo;e.db.transaction(function(c){c.executeSql(\\\SELECT key FROM \\\+e.storeName+\\\ WHERE id ? LIMIT 1\\\,a+1,function(a,c){var dc.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})}).catch(d)});return j(d,b),d}function U(a){var bthis,cnew ja(function(a,c){b.ready().then(function(){var db._dbInfo;d.db.transaction(function(b){b.executeSql(\\\SELECT key FROM \\\+d.storeName,,function(b,c){for(var d,e0;e\u003Cc.rows.length;e++)d.push(c.rows.item(e).key);a(d)},function(a,b){c(b)})})}).catch(c)});return j(c,a),c}function V(a){var bthis,c{};if(a)for(var d in a)cdad;return c.keyPrefixc.name+\\\/\\\,c.storeName!b._defaultConfig.storeName&&(c.keyPrefix+c.storeName+\\\/\\\),b._dbInfoc,c.serializerFa,ja.resolve()}function W(a){var bthis,cb.ready().then(function(){for(var ab._dbInfo.keyPrefix,clocalStorage.length-1;c>0;c--){var dlocalStorage.key(c);0d.indexOf(a)&&localStorage.removeItem(d)}});return j(c,a),c}function X(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dc.ready().then(function(){var bc._dbInfo,dlocalStorage.getItem(b.keyPrefix+a);return d&&(db.serializer.deserialize(d)),d});return j(d,b),d}function Y(a,b){var cthis,dc.ready().then(function(){for(var bc._dbInfo,db.keyPrefix,ed.length,flocalStorage.length,g1,h0;h\u003Cf;h++){var ilocalStorage.key(h);if(0i.indexOf(d)){var jlocalStorage.getItem(i);if(j&&(jb.serializer.deserialize(j)),ja(j,i.substring(e),g++),void 0!j)return j}}});return j(d,b),d}function Z(a,b){var cthis,dc.ready().then(function(){var b,dc._dbInfo;try{blocalStorage.key(a)}catch(a){bnull}return b&&(bb.substring(d.keyPrefix.length)),b});return j(d,b),d}function $(a){var bthis,cb.ready().then(function(){for(var ab._dbInfo,clocalStorage.length,d,e0;e\u003Cc;e++)0localStorage.key(e).indexOf(a.keyPrefix)&&d.push(localStorage.key(e).substring(a.keyPrefix.length));return d});return j(c,a),c}function _(a){var bthis,cb.keys().then(function(a){return a.length});return j(c,a),c}function aa(a,b){var cthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var dc.ready().then(function(){var bc._dbInfo;localStorage.removeItem(b.keyPrefix+a)});return j(d,b),d}function ba(a,b,c){var dthis;\\\string\\\!typeof a&&(console.warn(a+\\\ used as a key, but it is not a string.\\\),aString(a));var ed.ready().then(function(){void 0b&&(bnull);var cb;return new ja(function(e,f){var gd._dbInfo;g.serializer.serialize(b,function(b,d){if(d)f(d);else try{localStorage.setItem(g.keyPrefix+a,b),e(c)}catch(a){\\\QuotaExceededError\\\!a.name&&\\\NS_ERROR_DOM_QUOTA_REACHED\\\!a.name||f(a),f(a)}})})});return j(e,c),e}function ca(a,b){abfunction(){var carguments;return a.ready().then(function(){return ab.apply(a,c)})}}function da(){for(var a1;a\u003Carguments.length;a++){var bargumentsa;if(b)for(var c in b)b.hasOwnProperty(c)&&(Oa(bc)?arguments0cbc.slice():arguments0cbc)}return arguments0}function ea(a){for(var b in Ja)if(Ja.hasOwnProperty(b)&&Jaba)return!0;return!1}var fa\\\function\\\typeof Symbol&&\\\symbol\\\typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\\\function\\\typeof Symbol&&a.constructorSymbol&&a!Symbol.prototype?\\\symbol\\\:typeof a},gae();\\\undefined\\\typeof Promise&&a(3);var ha,ia,jaPromise,ka\\\local-forage-detect-blob-support\\\,laObject.prototype.toString,ma{_driver:\\\asyncStorage\\\,_initStorage:y,iterate:A,getItem:z,setItem:B,removeItem:C,clear:D,length:E,key:F,keys:G},na\\\ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\,oa\\\~~local_forage_type~\\\,pa/^~~local_forage_type~(^~+)~/,qa\\\__lfsc__:\\\,raqa.length,sa\\\arbf\\\,ta\\\blob\\\,ua\\\si08\\\,va\\\ui08\\\,wa\\\uic8\\\,xa\\\si16\\\,ya\\\si32\\\,za\\\ur16\\\,Aa\\\ui32\\\,Ba\\\fl32\\\,Ca\\\fl64\\\,Dara+sa.length,EaObject.prototype.toString,Fa{serialize:J,deserialize:K,stringToBuffer:H,bufferToString:I},Ga{_driver:\\\webSQLStorage\\\,_initStorage:L,iterate:N,getItem:M,setItem:P,removeItem:Q,clear:R,length:S,key:T,keys:U},Ha{_driver:\\\localStorageWrapper\\\,_initStorage:V,iterate:Y,getItem:X,setItem:ba,removeItem:aa,clear:W,length:_,key:Z,keys:$},Ia{},Ja{INDEXEDDB:\\\asyncStorage\\\,LOCALSTORAGE:\\\localStorageWrapper\\\,WEBSQL:\\\webSQLStorage\\\},KaJa.INDEXEDDB,Ja.WEBSQL,Ja.LOCALSTORAGE,La\\\clear\\\,\\\getItem\\\,\\\iterate\\\,\\\key\\\,\\\keys\\\,\\\length\\\,\\\removeItem\\\,\\\setItem\\\,Ma{description:\\\\\\,driver:Ka.slice(),name:\\\localforage\\\,size:4980736,storeName:\\\keyvaluepairs\\\,version:1},Na{};NaJa.INDEXEDDBf(),NaJa.WEBSQLg(),NaJa.LOCALSTORAGEh();var OaArray.isArray||function(a){return\\\object Array\\\Object.prototype.toString.call(a)},Pafunction(){function a(b){d(this,a),this.INDEXEDDBJa.INDEXEDDB,this.LOCALSTORAGEJa.LOCALSTORAGE,this.WEBSQLJa.WEBSQL,this._defaultConfigda({},Ma),this._configda({},this._defaultConfig,b),this._driverSetnull,this._initDrivernull,this._ready!1,this._dbInfonull,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return a.prototype.configfunction(a){if(\\\object\\\(\\\undefined\\\typeof a?\\\undefined\\\:fa(a))){if(this._ready)return new Error(\\\Cant call config() after localforage has been used.\\\);for(var b in a){if(\\\storeName\\\b&&(abab.replace(/\\\\W/g,\\\_\\\)),\\\version\\\b&&\\\number\\\!typeof ab)return new Error(\\\Database version must be a number.\\\);this._configbab}return!(\\\driver\\\in a&&a.driver)||this.setDriver(this._config.driver)}return\\\string\\\typeof a?this._configa:this._config},a.prototype.defineDriverfunction(a,b,c){var dnew ja(function(b,c){try{var da._driver,enew Error(\\\Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver\\\),fnew Error(\\\Custom driver name already in use: \\\+a._driver);if(!a._driver)return void c(e);if(ea(a._driver))return void c(f);for(var gLa.concat(\\\_initStorage\\\),h0;h\u003Cg.length;h++){var igh;if(!i||!ai||\\\function\\\!typeof ai)return void c(e)}var jja.resolve(!0);\\\_support\\\in a&&(ja._support&&\\\function\\\typeof a._support?a._support():ja.resolve(!!a._support)),j.then(function(c){Nadc,Iada,b()},c)}catch(a){c(a)}});return k(d,b,c),d},a.prototype.driverfunction(){return this._driver||null},a.prototype.getDriverfunction(a,b,c){var dthis,eja.resolve().then(function(){if(!ea(a)){if(Iaa)return Iaa;throw new Error(\\\Driver not found.\\\)}switch(a){case d.INDEXEDDB:return ma;case d.LOCALSTORAGE:return Ha;case d.WEBSQL:return Ga}});return k(e,b,c),e},a.prototype.getSerializerfunction(a){var bja.resolve(Fa);return k(b,a),b},a.prototype.readyfunction(a){var bthis,cb._driverSet.then(function(){return nullb._ready&&(b._readyb._initDriver()),b._ready});return k(c,a,a),c},a.prototype.setDriverfunction(a,b,c){function d(){g._config.driverg.driver()}function e(a){return g._extend(a),d(),g._readyg._initStorage(g._config),g._ready}function f(a){return function(){function b(){for(;c\u003Ca.length;){var fac;return c++,g._dbInfonull,g._readynull,g.getDriver(f).then(e).catch(b)}d();var hnew Error(\\\No available storage method found.\\\);return g._driverSetja.reject(h),g._driverSet}var c0;return b()}}var gthis;Oa(a)||(aa);var hthis._getSupportedDrivers(a),inull!this._driverSet?this._driverSet.catch(function(){return ja.resolve()}):ja.resolve();return this._driverSeti.then(function(){var ah0;return g._dbInfonull,g._readynull,g.getDriver(a).then(function(a){g._drivera._driver,d(),g._wrapLibraryMethodsWithReady(),g._initDriverf(h)})}).catch(function(){d();var anew Error(\\\No available storage method found.\\\);return g._driverSetja.reject(a),g._driverSet}),k(this._driverSet,b,c),this._driverSet},a.prototype.supportsfunction(a){return!!Naa},a.prototype._extendfunction(a){da(this,a)},a.prototype._getSupportedDriversfunction(a){for(var b,c0,da.length;c\u003Cd;c++){var eac;this.supports(e)&&b.push(e)}return b},a.prototype._wrapLibraryMethodsWithReadyfunction(){for(var a0;a\u003CLa.length;a++)ca(this,Laa)},a.prototype.createInstancefunction(b){return new a(b)},a}(),Qanew Pa;b.exportsQa},{3:3}},{},4)(4)});\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/hoelzro/full-text-search/lunr-mutable.js\:{\title\:\$:/plugins/hoelzro/full-text-search/lunr-mutable.js\,\text\:\(function() {\\n\\nvar lunr require($:/plugins/hoelzro/full-text-search/lunr.min.js);\\n/*\\n * Copyright 2018 Rob Hoelz \u003Crob AT hoelz.ro>\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\Software\\\), to\\n * deal in the Software without restriction, including without limitation the\\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n * sell copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n * IN THE SOFTWARE.\\n */\\n\\nvar MutableBuilder function () {\\n lunr.Builder.call(this)\\n}\\n\\nMutableBuilder.prototype new lunr.Builder()\\n\\nMutableBuilder.prototype.build function build () {\\n this.calculateAverageFieldLengths()\\n this.createFieldVectors()\\n this.createTokenSet()\\n\\n return new MutableIndex({\\n invertedIndex: this.invertedIndex,\\n fieldVectors: this.fieldVectors,\\n tokenSet: this.tokenSet,\\n fields: Object.keys(this._fields),\\n pipeline: this.searchPipeline,\\n builder: this\\n })\\n}\\n\\nMutableBuilder.prototype.remove function remove (doc) {\\n var docRef docthis._ref\\n var fields Object.keys(this._fields)\\n\\n var isDirty false\\n\\n for (var i 0; i \u003C fields.length; i++) {\\n var fieldName fieldsi,\\n fieldRef new lunr.FieldRef (docRef, fieldName)\\n\\n if (fieldRef in this.fieldTermFrequencies || fieldRef in this.fieldLengths) {\\n isDirty true\\n }\\n\\n delete this.fieldTermFrequenciesfieldRef\\n delete this.fieldLengthsfieldRef\\n }\\n\\n if (!isDirty) {\\n return\\n }\\n\\n this.documentCount - 1\\n\\n // XXX what if a term disappears from the index?\\n for (var term in this.invertedIndex) {\\n for (var fieldName in this.invertedIndexterm) { // XXX what about \\\_index\\\?\\n delete this.invertedIndextermfieldNamedocRef\\n }\\n }\\n}\\n\\nMutableBuilder.prototype.toJSON function toJSON () {\\n var fieldRefs \\n var fieldTermFrequencies \\n var fieldLengths \\n\\n for (var fieldRef in this.fieldTermFrequencies) {\\n if (this.fieldTermFrequencies.hasOwnProperty(fieldRef)) {\\n fieldRefs.push(fieldRef)\\n fieldTermFrequencies.push(this.fieldTermFrequenciesfieldRef)\\n fieldLengths.push(this.fieldLengthsfieldRef)\\n }\\n }\\n\\n // XXX omit tokenizer for now\\n // some properties (invertedIndex, searchPipeline) are omitted\\n // from here because theyre on the index, and serializing them twice\\n // would be redundant\\n return {\\n _ref: this._ref,\\n _fields: this._fields,\\n _documents: this._documents,\\n fieldRefs: fieldRefs,\\n fieldTermFrequencies: fieldTermFrequencies,\\n fieldLengths: fieldLengths,\\n pipeline: this.pipeline.toJSON(),\\n documentCount: this.documentCount,\\n _b: this._b, // XXX special (due to precision)?\\n _k1: this._k1, // XXX special (due to precision)?\\n termIndex: this.termIndex,\\n metadataWhitelist: this.metadataWhitelist\\n }\\n}\\n\\nMutableBuilder.load function load (serializedBuilder) {\\n var builder new MutableBuilder()\\n\\n for (var k in serializedBuilder) {\\n if (serializedBuilder.hasOwnProperty(k)) {\\n builderk serializedBuilderk\\n if(k _fields || k _documents) {\\n var noProtoObject Object.create(null)\\n for(var innerK in builderk) {\\n noProtoObjectinnerK builderkinnerK\\n }\\n builderk noProtoObject\\n }\\n }\\n }\\n\\n var fieldRefs builder.fieldRefs\\n var fieldTermFrequencies builder.fieldTermFrequencies\\n var fieldLengths builder.fieldLengths\\n delete builder.fieldRefs\\n\\n builder.fieldTermFrequencies {}\\n builder.fieldLengths {}\\n\\n for (var i 0; i \u003C fieldRefs.length; i++) {\\n var fieldRef fieldRefsi\\n builder.fieldTermFrequenciesfieldRef fieldTermFrequenciesi\\n builder.fieldLengthsfieldRef fieldLengthsi\\n }\\n\\n // builder.tokenizer is initialized to the default by the MutableBuilder\\n // constructor\\n builder.pipeline lunr.Pipeline.load(builder.pipeline)\\n\\n return builder\\n}\\n/*\\n * Copyright 2018 Rob Hoelz \u003Crob AT hoelz.ro>\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\Software\\\), to\\n * deal in the Software without restriction, including without limitation the\\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n * sell copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n * IN THE SOFTWARE.\\n */\\n\\nvar MutableIndex function (attrs) {\\n lunr.Index.call(this, attrs)\\n this.builder attrs.builder\\n this._dirty false\\n}\\n\\nMutableIndex.prototype new lunr.Index({})\\n\\nMutableIndex.prototype.add function add (doc) {\\n this.builder.add(doc)\\n this._dirty true\\n}\\n\\nMutableIndex.prototype.update function update (doc) {\\n this.remove(doc)\\n this.add(doc)\\n}\\n\\nMutableIndex.prototype.remove function remove (doc) {\\n this.builder.remove(doc)\\n this._dirty true\\n}\\n\\n// XXX rebuilds the entire index (\\n// XXX refreshing this from newIndex is kinda wonky (\\nMutableIndex.prototype.checkDirty function checkDirty () {\\n if (this._dirty) {\\n this._dirty false\\n var newIndex this.builder.build()\\n for (var k in newIndex) {\\n if (newIndex.hasOwnProperty(k)) {\\n thisk newIndexk\\n }\\n }\\n }\\n}\\n\\nMutableIndex.prototype.toJSON function toJSON () {\\n this.checkDirty()\\n\\n // XXX do you need to serialize things that we could calculate post-load via builder.build?\\n var json lunr.Index.prototype.toJSON.call(this)\\n json.builder this.builder.toJSON()\\n return json\\n}\\n\\nMutableIndex.load function load (serializedIndex) {\\n var index lunr.Index.load(serializedIndex)\\n var mutableIndex new MutableIndex({})\\n\\n for (var k in index) {\\n if (index.hasOwnProperty(k)) {\\n mutableIndexk indexk\\n }\\n }\\n\\n mutableIndex.builder MutableBuilder.load(serializedIndex.builder)\\n mutableIndex.builder.invertedIndex mutableIndex.invertedIndex\\n mutableIndex.builder.searchPipeline mutableIndex.pipeline\\n mutableIndex.dirty false\\n\\n return mutableIndex\\n}\\n\\nMutableIndex.prototype.query function query (fn) {\\n this.checkDirty()\\n\\n return lunr.Index.prototype.query.call(this, fn)\\n}\\n/*\\n * Copyright 2018 Rob Hoelz \u003Crob AT hoelz.ro>\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a copy\\n * of this software and associated documentation files (the \\\Software\\\), to\\n * deal in the Software without restriction, including without limitation the\\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n * sell copies of the Software, and to permit persons to whom the Software is\\n * furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n *\\n * THE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n * IN THE SOFTWARE.\\n */\\n\\n/**\\n * A convenience function for configuring and constructing\\n * a new mutable lunr Index.\\n *\\n * A lunr.MutableBuilder instance is created and the pipeline setup\\n * with a trimmer, stop word filter and stemmer.\\n *\\n * This mutable builder object is yielded to the configuration function\\n * that is passed as a parameter, allowing the list of fields\\n * and other builder parameters to be customised.\\n *\\n * All documents _must_ be added within the passed config function, but\\n * you can always update the index later. ;)\\n *\\n * @example\\n * var idx lunrMutable(function () {\\n * this.field(title)\\n * this.field(body)\\n * this.ref(id)\\n *\\n * documents.forEach(function (doc) {\\n * this.add(doc)\\n * }, this)\\n * })\\n *\\n * index.add({\\n * \\\title\\\: \\\new title\\\,\\n * \\\body\\\: \\\new body\\\,\\n * \\\id\\\: \\\2\\\\\n * })\\n *\\n * index.remove({ id: \\\1\\\ });\\n *\\n * index.update({\\n * \\\body\\\: \\\change\\\,\\n * \\\id\\\: \\\2\\\\\n * })\\n */\\n\\nvar lunrMutable function (config) {\\n var builder new MutableBuilder();\\n\\n builder.pipeline.add(\\n lunr.trimmer,\\n lunr.stopWordFilter,\\n lunr.stemmer\\n )\\n\\n builder.searchPipeline.add(\\n lunr.stemmer\\n )\\n\\n config.call(builder, builder)\\n return builder.build()\\n}\\n\\nlunrMutable.version \\\2.3.2\\\\\n\\nlunrMutable.Builder MutableBuilder\\nlunrMutable.Index MutableIndex\\n /**\\n * export the module via AMD, CommonJS or as a browser global\\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\\n */\\n ;(function (root, factory) {\\n if (typeof define function && define.amd) {\\n // AMD. Register as an anonymous module.\\n define(factory)\\n } else if (typeof exports object) {\\n /**\\n * Node. Does not work with strict CommonJS, but\\n * only CommonJS-like enviroments that support module.exports,\\n * like Node.\\n */\\n module.exports factory()\\n } else {\\n // Browser globals (root is window)\\n root.lunr factory()\\n }\\n }(this, function () {\\n /**\\n * Just return a value to define the module export.\\n * This example returns an object, but the module\\n * can return a function as the exported value.\\n */\\n return lunrMutable\\n }))\\n})();\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/hoelzro/full-text-search/lunr.min.js\:{\title\:\$:/plugins/hoelzro/full-text-search/lunr.min.js\,\text\:\/**\\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.5\\n * Copyright (C) 2018 Oliver Nightingale\\n * @license MIT\\n */\\n!function(){var t,l,c,e,r,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,b,P,T,O,I,i,n,s,zfunction(e){var tnew z.Builder;return t.pipeline.add(z.trimmer,z.stopWordFilter,z.stemmer),t.searchPipeline.add(z.stemmer),e.call(t,t),t.build()};z.version\\\2.3.5\\\,z.utils{},z.utils.warn(tthis,function(e){t.console&&console.warn&&console.warn(e)}),z.utils.asStringfunction(e){return nulle?\\\\\\:e.toString()},z.utils.clonefunction(e){if(nulle)return e;for(var tObject.create(null),rObject.keys(e),i0;i\u003Cr.length;i++){var nri,sen;if(Array.isArray(s))tns.slice();else{if(\\\string\\\!typeof s&&\\\number\\\!typeof s&&\\\boolean\\\!typeof s)throw new TypeError(\\\clone is not deep and does not support nested objects\\\);tns}}return t},z.FieldReffunction(e,t,r){this.docRefe,this.fieldNamet,this._stringValuer},z.FieldRef.joiner\\\/\\\,z.FieldRef.fromStringfunction(e){var te.indexOf(z.FieldRef.joiner);if(-1t)throw\\\malformed field ref string\\\;var re.slice(0,t),ie.slice(t+1);return new z.FieldRef(i,r,e)},z.FieldRef.prototype.toStringfunction(){return nullthis._stringValue&&(this._stringValuethis.fieldName+z.FieldRef.joiner+this.docRef),this._stringValue},z.Setfunction(e){if(this.elementsObject.create(null),e){this.lengthe.length;for(var t0;t\u003Cthis.length;t++)this.elementset!0}else this.length0},z.Set.complete{intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},z.Set.empty{intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},z.Set.prototype.containsfunction(e){return!!this.elementse},z.Set.prototype.intersectfunction(e){var t,r,i,n;if(ez.Set.complete)return this;if(ez.Set.empty)return e;rthis.length\u003Ce.length?(tthis,e):(te,this),iObject.keys(t.elements);for(var s0;s\u003Ci.length;s++){var ois;o in r.elements&&n.push(o)}return new z.Set(n)},z.Set.prototype.unionfunction(e){return ez.Set.complete?z.Set.complete:ez.Set.empty?this:new z.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},z.idffunction(e,t){var r0;for(var i in e)\\\_index\\\!i&&(r+Object.keys(ei).length);var n(t-r+.5)/(r+.5);return Math.log(1+Math.abs(n))},z.Tokenfunction(e,t){this.stre||\\\\\\,this.metadatat||{}},z.Token.prototype.toStringfunction(){return this.str},z.Token.prototype.updatefunction(e){return this.stre(this.str,this.metadata),this},z.Token.prototype.clonefunction(e){return ee||function(e){return e},new z.Token(e(this.str,this.metadata),this.metadata)},z.tokenizerfunction(e,t){if(nulle||nulle)return;if(Array.isArray(e))return e.map(function(e){return new z.Token(z.utils.asString(e).toLowerCase(),z.utils.clone(t))});for(var re.toString().trim().toLowerCase(),ir.length,n,s0,o0;s\u003Ci;s++){var as-o;if(r.charAt(s).match(z.tokenizer.separator)||si){if(0\u003Ca){var uz.utils.clone(t)||{};u.positiono,a,u.indexn.length,n.push(new z.Token(r.slice(o,s),u))}os+1}}return n},z.tokenizer.separator/\\\\s\\\\-+/,z.Pipelinefunction(){this._stack},z.Pipeline.registeredFunctionsObject.create(null),z.Pipeline.registerFunctionfunction(e,t){t in this.registeredFunctions&&z.utils.warn(\\\Overwriting existing registered function: \\\+t),e.labelt,z.Pipeline.registeredFunctionse.labele},z.Pipeline.warnIfFunctionNotRegisteredfunction(e){e.label&&e.label in this.registeredFunctions||z.utils.warn(\\\Function is not registered with pipeline. This may cause problems when serialising the index.\\\\n\\\,e)},z.Pipeline.loadfunction(e){var rnew z.Pipeline;return e.forEach(function(e){var tz.Pipeline.registeredFunctionse;if(!t)throw new Error(\\\Cannot load unregistered function: \\\+e);r.add(t)}),r},z.Pipeline.prototype.addfunction(){Array.prototype.slice.call(arguments).forEach(function(e){z.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},z.Pipeline.prototype.afterfunction(e,t){z.Pipeline.warnIfFunctionNotRegistered(t);var rthis._stack.indexOf(e);if(-1r)throw new Error(\\\Cannot find existingFn\\\);r+1,this._stack.splice(r,0,t)},z.Pipeline.prototype.beforefunction(e,t){z.Pipeline.warnIfFunctionNotRegistered(t);var rthis._stack.indexOf(e);if(-1r)throw new Error(\\\Cannot find existingFn\\\);this._stack.splice(r,0,t)},z.Pipeline.prototype.removefunction(e){var tthis._stack.indexOf(e);-1!t&&this._stack.splice(t,1)},z.Pipeline.prototype.runfunction(e){for(var tthis._stack.length,r0;r\u003Ct;r++){for(var ithis._stackr,n,s0;s\u003Ce.length;s++){var oi(es,s,e);if(void 0!o&&\\\\\\!o)if(Array.isArray(o))for(var a0;a\u003Co.length;a++)n.push(oa);else n.push(o)}en}return e},z.Pipeline.prototype.runStringfunction(e,t){var rnew z.Token(e,t);return this.run(r).map(function(e){return e.toString()})},z.Pipeline.prototype.resetfunction(){this._stack},z.Pipeline.prototype.toJSONfunction(){return this._stack.map(function(e){return z.Pipeline.warnIfFunctionNotRegistered(e),e.label})},z.Vectorfunction(e){this._magnitude0,this.elementse||},z.Vector.prototype.positionForIndexfunction(e){if(0this.elements.length)return 0;for(var t0,rthis.elements.length/2,ir-t,nMath.floor(i/2),sthis.elements2*n;1\u003Ci&&(s\u003Ce&&(tn),e\u003Cs&&(rn),s!e);)ir-t,nt+Math.floor(i/2),sthis.elements2*n;return se?2*n:e\u003Cs?2*n:s\u003Ce?2*(n+1):void 0},z.Vector.prototype.insertfunction(e,t){this.upsert(e,t,function(){throw\\\duplicate index\\\})},z.Vector.prototype.upsertfunction(e,t,r){this._magnitude0;var ithis.positionForIndex(e);this.elementsie?this.elementsi+1r(this.elementsi+1,t):this.elements.splice(i,0,e,t)},z.Vector.prototype.magnitudefunction(){if(this._magnitude)return this._magnitude;for(var e0,tthis.elements.length,r1;r\u003Ct;r+2){var ithis.elementsr;e+i*i}return this._magnitudeMath.sqrt(e)},z.Vector.prototype.dotfunction(e){for(var t0,rthis.elements,ie.elements,nr.length,si.length,o0,a0,u0,l0;u\u003Cn&&l\u003Cs;)(oru)\u003C(ail)?u+2:a\u003Co?l+2:oa&&(t+ru+1*il+1,u+2,l+2);return t},z.Vector.prototype.similarityfunction(e){return this.dot(e)/this.magnitude()||0},z.Vector.prototype.toArrayfunction(){for(var enew Array(this.elements.length/2),t1,r0;t\u003Cthis.elements.length;t+2,r++)erthis.elementst;return e},z.Vector.prototype.toJSONfunction(){return this.elements},z.stemmer(l{ational:\\\ate\\\,tional:\\\tion\\\,enci:\\\ence\\\,anci:\\\ance\\\,izer:\\\ize\\\,bli:\\\ble\\\,alli:\\\al\\\,entli:\\\ent\\\,eli:\\\e\\\,ousli:\\\ous\\\,ization:\\\ize\\\,ation:\\\ate\\\,ator:\\\ate\\\,alism:\\\al\\\,iveness:\\\ive\\\,fulness:\\\ful\\\,ousness:\\\ous\\\,aliti:\\\al\\\,iviti:\\\ive\\\,biliti:\\\ble\\\,logi:\\\log\\\},c{icate:\\\ic\\\,ative:\\\\\\,alize:\\\al\\\,iciti:\\\ic\\\,ical:\\\ic\\\,ful:\\\\\\,ness:\\\\\\},e\\\aeiouy\\\,r\\\^aeiou^aeiouy*\\\,hnew RegExp(\\\^(^aeiou^aeiouy*)?aeiouyaeiou*^aeiou^aeiouy*\\\),dnew RegExp(\\\^(^aeiou^aeiouy*)?aeiouyaeiou*^aeiou^aeiouy*aeiouyaeiou*^aeiou^aeiouy*\\\),fnew RegExp(\\\^(^aeiou^aeiouy*)?aeiouyaeiou*^aeiou^aeiouy*(aeiouyaeiou*)?$\\\),pnew RegExp(\\\^(^aeiou^aeiouy*)?aeiouy\\\),y/^(.+?)(ss|i)es$/,m/^(.+?)(^s)s$/,g/^(.+?)eed$/,x/^(.+?)(ed|ing)$/,v/.$/,w/(at|bl|iz)$/,Qnew RegExp(\\\(^aeiouylsz)\\\\\\\\1$\\\),knew RegExp(\\\^\\\+r+e+\\\^aeiouwxy$\\\),S/^(.+?^aeiou)y$/,E/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,L/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,b/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,P/^(.+?)(s|t)(ion)$/,T/^(.+?)e$/,O/ll$/,Inew RegExp(\\\^\\\+r+e+\\\^aeiouwxy$\\\),ifunction(e){var t,r,i,n,s,o,a;if(e.length\u003C3)return e;if(\\\y\\\(ie.substr(0,1))&&(ei.toUpperCase()+e.substr(1)),sm,(ny).test(e)?ee.replace(n,\\\$1$2\\\):s.test(e)&&(ee.replace(s,\\\$1$2\\\)),sx,(ng).test(e)){var un.exec(e);(nh).test(u1)&&(nv,ee.replace(n,\\\\\\))}else if(s.test(e)){t(us.exec(e))1,(sp).test(t)&&(oQ,ak,(sw).test(et)?e+\\\e\\\:o.test(e)?(nv,ee.replace(n,\\\\\\)):a.test(e)&&(e+\\\e\\\))}(nS).test(e)&&(e(t(un.exec(e))1)+\\\i\\\);(nE).test(e)&&(t(un.exec(e))1,ru2,(nh).test(t)&&(et+lr));(nL).test(e)&&(t(un.exec(e))1,ru2,(nh).test(t)&&(et+cr));if(sP,(nb).test(e))t(un.exec(e))1,(nd).test(t)&&(et);else if(s.test(e)){t(us.exec(e))1+u2,(sd).test(t)&&(et)}(nT).test(e)&&(t(un.exec(e))1,sf,oI,((nd).test(t)||s.test(t)&&!o.test(t))&&(et));return sd,(nO).test(e)&&s.test(e)&&(nv,ee.replace(n,\\\\\\)),\\\y\\\i&&(ei.toLowerCase()+e.substr(1)),e},function(e){return e.update(i)}),z.Pipeline.registerFunction(z.stemmer,\\\stemmer\\\),z.generateStopWordFilterfunction(e){var te.reduce(function(e,t){return ett,e},{});return function(e){if(e&&te.toString()!e.toString())return e}},z.stopWordFilterz.generateStopWordFilter(\\\a\\\,\\\able\\\,\\\about\\\,\\\across\\\,\\\after\\\,\\\all\\\,\\\almost\\\,\\\also\\\,\\\am\\\,\\\among\\\,\\\an\\\,\\\and\\\,\\\any\\\,\\\are\\\,\\\as\\\,\\\at\\\,\\\be\\\,\\\because\\\,\\\been\\\,\\\but\\\,\\\by\\\,\\\can\\\,\\\cannot\\\,\\\could\\\,\\\dear\\\,\\\did\\\,\\\do\\\,\\\does\\\,\\\either\\\,\\\else\\\,\\\ever\\\,\\\every\\\,\\\for\\\,\\\from\\\,\\\get\\\,\\\got\\\,\\\had\\\,\\\has\\\,\\\have\\\,\\\he\\\,\\\her\\\,\\\hers\\\,\\\him\\\,\\\his\\\,\\\how\\\,\\\however\\\,\\\i\\\,\\\if\\\,\\\in\\\,\\\into\\\,\\\is\\\,\\\it\\\,\\\its\\\,\\\just\\\,\\\least\\\,\\\let\\\,\\\like\\\,\\\likely\\\,\\\may\\\,\\\me\\\,\\\might\\\,\\\most\\\,\\\must\\\,\\\my\\\,\\\neither\\\,\\\no\\\,\\\nor\\\,\\\not\\\,\\\of\\\,\\\off\\\,\\\often\\\,\\\on\\\,\\\only\\\,\\\or\\\,\\\other\\\,\\\our\\\,\\\own\\\,\\\rather\\\,\\\said\\\,\\\say\\\,\\\says\\\,\\\she\\\,\\\should\\\,\\\since\\\,\\\so\\\,\\\some\\\,\\\than\\\,\\\that\\\,\\\the\\\,\\\their\\\,\\\them\\\,\\\then\\\,\\\there\\\,\\\these\\\,\\\they\\\,\\\this\\\,\\\tis\\\,\\\to\\\,\\\too\\\,\\\twas\\\,\\\us\\\,\\\wants\\\,\\\was\\\,\\\we\\\,\\\were\\\,\\\what\\\,\\\when\\\,\\\where\\\,\\\which\\\,\\\while\\\,\\\who\\\,\\\whom\\\,\\\why\\\,\\\will\\\,\\\with\\\,\\\would\\\,\\\yet\\\,\\\you\\\,\\\your\\\),z.Pipeline.registerFunction(z.stopWordFilter,\\\stopWordFilter\\\),z.trimmerfunction(e){return e.update(function(e){return e.replace(/^\\\\W+/,\\\\\\).replace(/\\\\W+$/,\\\\\\)})},z.Pipeline.registerFunction(z.trimmer,\\\trimmer\\\),z.TokenSetfunction(){this.final!1,this.edges{},this.idz.TokenSet._nextId,z.TokenSet._nextId+1},z.TokenSet._nextId1,z.TokenSet.fromArrayfunction(e){for(var tnew z.TokenSet.Builder,r0,ie.length;r\u003Ci;r++)t.insert(er);return t.finish(),t.root},z.TokenSet.fromClausefunction(e){return\\\editDistance\\\in e?z.TokenSet.fromFuzzyString(e.term,e.editDistance):z.TokenSet.fromString(e.term)},z.TokenSet.fromFuzzyStringfunction(e,t){for(var rnew z.TokenSet,i{node:r,editsRemaining:t,str:e};i.length;){var n,s,o,ai.pop();if(0\u003Ca.str.length)(sa.str.charAt(0))in a.node.edges?na.node.edgess:(nnew z.TokenSet,a.node.edgessn),1a.str.length&&(n.final!0),i.push({node:n,editsRemaining:a.editsRemaining,str:a.str.slice(1)});if(0\u003Ca.editsRemaining&&1\u003Ca.str.length)(sa.str.charAt(1))in a.node.edges?oa.node.edgess:(onew z.TokenSet,a.node.edgesso),a.str.length\u003C2?o.final!0:i.push({node:o,editsRemaining:a.editsRemaining-1,str:a.str.slice(2)});if(0\u003Ca.editsRemaining&&1a.str.length&&(a.node.final!0),0\u003Ca.editsRemaining&&1\u003Ca.str.length){if(\\\*\\\in a.node.edges)var ua.node.edges\\\*\\\;else{unew z.TokenSet;a.node.edges\\\*\\\u}1a.str.length?u.final!0:i.push({node:u,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(0\u003Ca.editsRemaining){if(\\\*\\\in a.node.edges)var la.node.edges\\\*\\\;else{lnew z.TokenSet;a.node.edges\\\*\\\l}0a.str.length?l.final!0:i.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str})}if(0\u003Ca.editsRemaining&&1\u003Ca.str.length){var c,ha.str.charAt(0),da.str.charAt(1);d in a.node.edges?ca.node.edgesd:(cnew z.TokenSet,a.node.edgesdc),1a.str.length?c.final!0:i.push({node:c,editsRemaining:a.editsRemaining-1,str:h+a.str.slice(2)})}}return r},z.TokenSet.fromStringfunction(e){for(var tnew z.TokenSet,rt,i0,ne.length;i\u003Cn;i++){var sei,oin-1;if(\\\*\\\s)(t.edgesst).finalo;else{var anew z.TokenSet;a.finalo,t.edgessa,ta}}return r},z.TokenSet.prototype.toArrayfunction(){for(var e,t{prefix:\\\\\\,node:this};t.length;){var rt.pop(),iObject.keys(r.node.edges),ni.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s0;s\u003Cn;s++){var ois;t.push({prefix:r.prefix.concat(o),node:r.node.edgeso})}}return e},z.TokenSet.prototype.toStringfunction(){if(this._str)return this._str;for(var ethis.final?\\\1\\\:\\\0\\\,tObject.keys(this.edges).sort(),rt.length,i0;i\u003Cr;i++){var nti;ee+n+this.edgesn.id}return e},z.TokenSet.prototype.intersectfunction(e){for(var tnew z.TokenSet,rvoid 0,i{qNode:e,output:t,node:this};i.length;){ri.pop();for(var nObject.keys(r.qNode.edges),sn.length,oObject.keys(r.node.edges),ao.length,u0;u\u003Cs;u++)for(var lnu,c0;c\u003Ca;c++){var hoc;if(hl||\\\*\\\l){var dr.node.edgesh,fr.qNode.edgesl,pd.final&&f.final,yvoid 0;h in r.output.edges?(yr.output.edgesh).finaly.final||p:((ynew z.TokenSet).finalp,r.output.edgeshy),i.push({qNode:f,output:y,node:d})}}}return t},z.TokenSet.Builderfunction(){this.previousWord\\\\\\,this.rootnew z.TokenSet,this.uncheckedNodes,this.minimizedNodes{}},z.TokenSet.Builder.prototype.insertfunction(e){var t,r0;if(e\u003Cthis.previousWord)throw new Error(\\\Out of order word insertion\\\);for(var i0;i\u003Ce.length&&i\u003Cthis.previousWord.length&&eithis.previousWordi;i++)r++;this.minimize(r),t0this.uncheckedNodes.length?this.root:this.uncheckedNodesthis.uncheckedNodes.length-1.child;for(ir;i\u003Ce.length;i++){var nnew z.TokenSet,sei;t.edgessn,this.uncheckedNodes.push({parent:t,char:s,child:n}),tn}t.final!0,this.previousWorde},z.TokenSet.Builder.prototype.finishfunction(){this.minimize(0)},z.TokenSet.Builder.prototype.minimizefunction(e){for(var tthis.uncheckedNodes.length-1;e\u003Ct;t--){var rthis.uncheckedNodest,ir.child.toString();i in this.minimizedNodes?r.parent.edgesr.charthis.minimizedNodesi:(r.child._stri,this.minimizedNodesir.child),this.uncheckedNodes.pop()}},z.Indexfunction(e){this.invertedIndexe.invertedIndex,this.fieldVectorse.fieldVectors,this.tokenSete.tokenSet,this.fieldse.fields,this.pipelinee.pipeline},z.Index.prototype.searchfunction(t){return this.query(function(e){new z.QueryParser(t,e).parse()})},z.Index.prototype.queryfunction(e){for(var tnew z.Query(this.fields),rObject.create(null),iObject.create(null),nObject.create(null),sObject.create(null),oObject.create(null),a0;a\u003Cthis.fields.length;a++)ithis.fieldsanew z.Vector;e.call(t,t);for(a0;a\u003Ct.clauses.length;a++){var ut.clausesa,lnull,cz.Set.complete;lu.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):u.term;for(var h0;h\u003Cl.length;h++){var dlh;u.termd;var fz.TokenSet.fromClause(u),pthis.tokenSet.intersect(f).toArray();if(0p.length&&u.presencez.Query.presence.REQUIRED){for(var y0;y\u003Cu.fields.length;y++){sRu.fieldsyz.Set.empty}break}for(var m0;m\u003Cp.length;m++){var gpm,xthis.invertedIndexg,vx._index;for(y0;y\u003Cu.fields.length;y++){var wxRu.fieldsy,QObject.keys(w),kg+\\\/\\\+R,Snew z.Set(Q);if(u.presencez.Query.presence.REQUIRED&&(cc.union(S),void 0sR&&(sRz.Set.complete)),u.presence!z.Query.presence.PROHIBITED){if(iR.upsert(v,u.boost,function(e,t){return e+t}),!nk){for(var E0;E\u003CQ.length;E++){var L,bQE,Pnew z.FieldRef(b,R),Twb;void 0(LrP)?rPnew z.MatchData(g,R,T):L.add(g,R,T)}nk!0}}else void 0oR&&(oRz.Set.empty),oRoR.union(S)}}}if(u.presencez.Query.presence.REQUIRED)for(y0;y\u003Cu.fields.length;y++){sRu.fieldsysR.intersect(c)}}var Oz.Set.complete,Iz.Set.empty;for(a0;a\u003Cthis.fields.length;a++){var R;sRthis.fieldsa&&(OO.intersect(sR)),oR&&(II.union(oR))}var FObject.keys(r),C,NObject.create(null);if(t.isNegated()){FObject.keys(this.fieldVectors);for(a0;a\u003CF.length;a++){PFa;var jz.FieldRef.fromString(P);rPnew z.MatchData}}for(a0;a\u003CF.length;a++){var _(jz.FieldRef.fromString(Fa)).docRef;if(O.contains(_)&&!I.contains(_)){var D,Athis.fieldVectorsj,Bij.fieldName.similarity(A);if(void 0!(DN_))D.score+B,D.matchData.combine(rj);else{var V{ref:_,score:B,matchData:rj};N_V,C.push(V)}}}return C.sort(function(e,t){return t.score-e.score})},z.Index.prototype.toJSONfunction(){var eObject.keys(this.invertedIndex).sort().map(function(e){returne,this.invertedIndexe},this),tObject.keys(this.fieldVectors).map(function(e){returne,this.fieldVectorse.toJSON()},this);return{version:z.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},z.Index.loadfunction(e){var t{},r{},ie.fieldVectors,nObject.create(null),se.invertedIndex,onew z.TokenSet.Builder,az.Pipeline.load(e.pipeline);e.version!z.version&&z.utils.warn(\\\Version mismatch when loading serialised index. Current version of lunr \\\+z.version+\\\ does not match serialized index \\\+e.version+\\\\\\);for(var u0;u\u003Ci.length;u++){var l(hiu)0,ch1;rlnew z.Vector(c)}for(u0;u\u003Cs.length;u++){var h,d(hsu)0,fh1;o.insert(d),ndf}return o.finish(),t.fieldse.fields,t.fieldVectorsr,t.invertedIndexn,t.tokenSeto.root,t.pipelinea,new z.Index(t)},z.Builderfunction(){this._ref\\\id\\\,this._fieldsObject.create(null),this._documentsObject.create(null),this.invertedIndexObject.create(null),this.fieldTermFrequencies{},this.fieldLengths{},this.tokenizerz.tokenizer,this.pipelinenew z.Pipeline,this.searchPipelinenew z.Pipeline,this.documentCount0,this._b.75,this._k11.2,this.termIndex0,this.metadataWhitelist},z.Builder.prototype.reffunction(e){this._refe},z.Builder.prototype.fieldfunction(e,t){if(/\\\\//.test(e))throw new RangeError(\\\Field \\\+e+\\\ contains illegal character /\\\);this._fieldset||{}},z.Builder.prototype.bfunction(e){this._be\u003C0?0:1\u003Ce?1:e},z.Builder.prototype.k1function(e){this._k1e},z.Builder.prototype.addfunction(e,t){var rethis._ref,iObject.keys(this._fields);this._documentsrt||{},this.documentCount+1;for(var n0;n\u003Ci.length;n++){var sin,othis._fieldss.extractor,ao?o(e):es,uthis.tokenizer(a,{fields:s}),lthis.pipeline.run(u),cnew z.FieldRef(r,s),hObject.create(null);this.fieldTermFrequenciesch,this.fieldLengthsc0,this.fieldLengthsc+l.length;for(var d0;d\u003Cl.length;d++){var fld;if(nullhf&&(hf0),hf+1,nullthis.invertedIndexf){var pObject.create(null);p._indexthis.termIndex,this.termIndex+1;for(var y0;y\u003Ci.length;y++)piyObject.create(null);this.invertedIndexfp}nullthis.invertedIndexfsr&&(this.invertedIndexfsrObject.create(null));for(var m0;m\u003Cthis.metadataWhitelist.length;m++){var gthis.metadataWhitelistm,xf.metadatag;nullthis.invertedIndexfsrg&&(this.invertedIndexfsrg),this.invertedIndexfsrg.push(x)}}}},z.Builder.prototype.calculateAverageFieldLengthsfunction(){for(var eObject.keys(this.fieldLengths),te.length,r{},i{},n0;n\u003Ct;n++){var sz.FieldRef.fromString(en),os.fieldName;io||(io0),io+1,ro||(ro0),ro+this.fieldLengthss}var aObject.keys(this._fields);for(n0;n\u003Ca.length;n++){var uan;ruru/iu}this.averageFieldLengthr},z.Builder.prototype.createFieldVectorsfunction(){for(var e{},tObject.keys(this.fieldTermFrequencies),rt.length,iObject.create(null),n0;n\u003Cr;n++){for(var sz.FieldRef.fromString(tn),os.fieldName,athis.fieldLengthss,unew z.Vector,lthis.fieldTermFrequenciess,cObject.keys(l),hc.length,dthis._fieldso.boost||1,fthis._documentss.docRef.boost||1,p0;p\u003Ch;p++){var y,m,g,xcp,vlx,wthis.invertedIndexx._index;void 0ix?(yz.idf(this.invertedIndexx,this.documentCount),ixy):yix,my*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLengtho))+v),m*d,m*f,gMath.round(1e3*m)/1e3,u.insert(w,g)}esu}this.fieldVectorse},z.Builder.prototype.createTokenSetfunction(){this.tokenSetz.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},z.Builder.prototype.buildfunction(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new z.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},z.Builder.prototype.usefunction(e){var tArray.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},z.MatchDatafunction(e,t,r){for(var iObject.create(null),nObject.keys(r||{}),s0;s\u003Cn.length;s++){var ons;ioro.slice()}this.metadataObject.create(null),void 0!e&&(this.metadataeObject.create(null),this.metadataeti)},z.MatchData.prototype.combinefunction(e){for(var tObject.keys(e.metadata),r0;r\u003Ct.length;r++){var itr,nObject.keys(e.metadatai);nullthis.metadatai&&(this.metadataiObject.create(null));for(var s0;s\u003Cn.length;s++){var ons,aObject.keys(e.metadataio);nullthis.metadataio&&(this.metadataioObject.create(null));for(var u0;u\u003Ca.length;u++){var lau;nullthis.metadataiol?this.metadataiole.metadataiol:this.metadataiolthis.metadataiol.concat(e.metadataiol)}}}},z.MatchData.prototype.addfunction(e,t,r){if(!(e in this.metadata))return this.metadataeObject.create(null),void(this.metadataetr);if(t in this.metadatae)for(var iObject.keys(r),n0;n\u003Ci.length;n++){var sin;s in this.metadataet?this.metadataetsthis.metadataets.concat(rs):this.metadataetsrs}else this.metadataetr},z.Queryfunction(e){this.clauses,this.allFieldse},z.Query.wildcardnew String(\\\*\\\),z.Query.wildcard.NONE0,z.Query.wildcard.LEADING1,z.Query.wildcard.TRAILING2,z.Query.presence{OPTIONAL:1,REQUIRED:2,PROHIBITED:3},z.Query.prototype.clausefunction(e){return\\\fields\\\in e||(e.fieldsthis.allFields),\\\boost\\\in e||(e.boost1),\\\usePipeline\\\in e||(e.usePipeline!0),\\\wildcard\\\in e||(e.wildcardz.Query.wildcard.NONE),e.wildcard&z.Query.wildcard.LEADING&&e.term.charAt(0)!z.Query.wildcard&&(e.term\\\*\\\+e.term),e.wildcard&z.Query.wildcard.TRAILING&&e.term.slice(-1)!z.Query.wildcard&&(e.terme.term+\\\*\\\),\\\presence\\\in e||(e.presencez.Query.presence.OPTIONAL),this.clauses.push(e),this},z.Query.prototype.isNegatedfunction(){for(var e0;e\u003Cthis.clauses.length;e++)if(this.clausese.presence!z.Query.presence.PROHIBITED)return!1;return!0},z.Query.prototype.termfunction(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,z.utils.clone(t))},this),this;var rt||{};return r.terme.toString(),this.clause(r),this},z.QueryParseErrorfunction(e,t,r){this.name\\\QueryParseError\\\,this.messagee,this.startt,this.endr},z.QueryParseError.prototypenew Error,z.QueryLexerfunction(e){this.lexemes,this.stre,this.lengthe.length,this.pos0,this.start0,this.escapeCharPositions},z.QueryLexer.prototype.runfunction(){for(var ez.QueryLexer.lexText;e;)ee(this)},z.QueryLexer.prototype.sliceStringfunction(){for(var e,tthis.start,rthis.pos,i0;i\u003Cthis.escapeCharPositions.length;i++)rthis.escapeCharPositionsi,e.push(this.str.slice(t,r)),tr+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length0,e.join(\\\\\\)},z.QueryLexer.prototype.emitfunction(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.startthis.pos},z.QueryLexer.prototype.escapeCharacterfunction(){this.escapeCharPositions.push(this.pos-1),this.pos+1},z.QueryLexer.prototype.nextfunction(){if(this.pos>this.length)return z.QueryLexer.EOS;var ethis.str.charAt(this.pos);return this.pos+1,e},z.QueryLexer.prototype.widthfunction(){return this.pos-this.start},z.QueryLexer.prototype.ignorefunction(){this.startthis.pos&&(this.pos+1),this.startthis.pos},z.QueryLexer.prototype.backupfunction(){this.pos-1},z.QueryLexer.prototype.acceptDigitRunfunction(){for(var e,t;47\u003C(t(ethis.next()).charCodeAt(0))&&t\u003C58;);e!z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.morefunction(){return this.pos\u003Cthis.length},z.QueryLexer.EOS\\\EOS\\\,z.QueryLexer.FIELD\\\FIELD\\\,z.QueryLexer.TERM\\\TERM\\\,z.QueryLexer.EDIT_DISTANCE\\\EDIT_DISTANCE\\\,z.QueryLexer.BOOST\\\BOOST\\\,z.QueryLexer.PRESENCE\\\PRESENCE\\\,z.QueryLexer.lexFieldfunction(e){return e.backup(),e.emit(z.QueryLexer.FIELD),e.ignore(),z.QueryLexer.lexText},z.QueryLexer.lexTermfunction(e){if(1\u003Ce.width()&&(e.backup(),e.emit(z.QueryLexer.TERM)),e.ignore(),e.more())return z.QueryLexer.lexText},z.QueryLexer.lexEditDistancefunction(e){return e.ignore(),e.acceptDigitRun(),e.emit(z.QueryLexer.EDIT_DISTANCE),z.QueryLexer.lexText},z.QueryLexer.lexBoostfunction(e){return e.ignore(),e.acceptDigitRun(),e.emit(z.QueryLexer.BOOST),z.QueryLexer.lexText},z.QueryLexer.lexEOSfunction(e){0\u003Ce.width()&&e.emit(z.QueryLexer.TERM)},z.QueryLexer.termSeparatorz.tokenizer.separator,z.QueryLexer.lexTextfunction(e){for(;;){var te.next();if(tz.QueryLexer.EOS)return z.QueryLexer.lexEOS;if(92!t.charCodeAt(0)){if(\\\:\\\t)return z.QueryLexer.lexField;if(\\\~\\\t)return e.backup(),0\u003Ce.width()&&e.emit(z.QueryLexer.TERM),z.QueryLexer.lexEditDistance;if(\\\^\\\t)return e.backup(),0\u003Ce.width()&&e.emit(z.QueryLexer.TERM),z.QueryLexer.lexBoost;if(\\\+\\\t&&1e.width())return e.emit(z.QueryLexer.PRESENCE),z.QueryLexer.lexText;if(\\\-\\\t&&1e.width())return e.emit(z.QueryLexer.PRESENCE),z.QueryLexer.lexText;if(t.match(z.QueryLexer.termSeparator))return z.QueryLexer.lexTerm}else e.escapeCharacter()}},z.QueryParserfunction(e,t){this.lexernew z.QueryLexer(e),this.queryt,this.currentClause{},this.lexemeIdx0},z.QueryParser.prototype.parsefunction(){this.lexer.run(),this.lexemesthis.lexer.lexemes;for(var ez.QueryParser.parseClause;e;)ee(this);return this.query},z.QueryParser.prototype.peekLexemefunction(){return this.lexemesthis.lexemeIdx},z.QueryParser.prototype.consumeLexemefunction(){var ethis.peekLexeme();return this.lexemeIdx+1,e},z.QueryParser.prototype.nextClausefunction(){var ethis.currentClause;this.query.clause(e),this.currentClause{}},z.QueryParser.parseClausefunction(e){var te.peekLexeme();if(null!t)switch(t.type){case z.QueryLexer.PRESENCE:return z.QueryParser.parsePresence;case z.QueryLexer.FIELD:return z.QueryParser.parseField;case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:var r\\\expected either a field or a term, found \\\+t.type;throw 1\u003Ct.str.length&&(r+\\\ with value \\\+t.str+\\\\\\),new z.QueryParseError(r,t.start,t.end)}},z.QueryParser.parsePresencefunction(e){var te.consumeLexeme();if(null!t){switch(t.str){case\\\-\\\:e.currentClause.presencez.Query.presence.PROHIBITED;break;case\\\+\\\:e.currentClause.presencez.Query.presence.REQUIRED;break;default:var r\\\unrecognised presence operator\\\+t.str+\\\\\\;throw new z.QueryParseError(r,t.start,t.end)}var ie.peekLexeme();if(nulli){r\\\expecting term or field, found nothing\\\;throw new z.QueryParseError(r,t.start,t.end)}switch(i.type){case z.QueryLexer.FIELD:return z.QueryParser.parseField;case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:r\\\expecting term or field, found \\\+i.type+\\\\\\;throw new z.QueryParseError(r,i.start,i.end)}}},z.QueryParser.parseFieldfunction(e){var te.consumeLexeme();if(null!t){if(-1e.query.allFields.indexOf(t.str)){var re.query.allFields.map(function(e){return\\\\\\+e+\\\\\\}).join(\\\, \\\),i\\\unrecognised field \\\+t.str+\\\, possible fields: \\\+r;throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.fieldst.str;var ne.peekLexeme();if(nulln){i\\\expecting term, found nothing\\\;throw new z.QueryParseError(i,t.start,t.end)}switch(n.type){case z.QueryLexer.TERM:return z.QueryParser.parseTerm;default:i\\\expecting term, found \\\+n.type+\\\\\\;throw new z.QueryParseError(i,n.start,n.end)}}},z.QueryParser.parseTermfunction(e){var te.consumeLexeme();if(null!t){e.currentClause.termt.str.toLowerCase(),-1!t.str.indexOf(\\\*\\\)&&(e.currentClause.usePipeline!1);var re.peekLexeme();if(null!r)switch(r.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:var i\\\Unexpected lexeme type \\\+r.type+\\\\\\;throw new z.QueryParseError(i,r.start,r.end)}else e.nextClause()}},z.QueryParser.parseEditDistancefunction(e){var te.consumeLexeme();if(null!t){var rparseInt(t.str,10);if(isNaN(r)){var i\\\edit distance must be numeric\\\;throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.editDistancer;var ne.peekLexeme();if(null!n)switch(n.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:i\\\Unexpected lexeme type \\\+n.type+\\\\\\;throw new z.QueryParseError(i,n.start,n.end)}else e.nextClause()}},z.QueryParser.parseBoostfunction(e){var te.consumeLexeme();if(null!t){var rparseInt(t.str,10);if(isNaN(r)){var i\\\boost must be numeric\\\;throw new z.QueryParseError(i,t.start,t.end)}e.currentClause.boostr;var ne.peekLexeme();if(null!n)switch(n.type){case z.QueryLexer.TERM:return e.nextClause(),z.QueryParser.parseTerm;case z.QueryLexer.FIELD:return e.nextClause(),z.QueryParser.parseField;case z.QueryLexer.EDIT_DISTANCE:return z.QueryParser.parseEditDistance;case z.QueryLexer.BOOST:return z.QueryParser.parseBoost;case z.QueryLexer.PRESENCE:return e.nextClause(),z.QueryParser.parsePresence;default:i\\\Unexpected lexeme type \\\+n.type+\\\\\\;throw new z.QueryParseError(i,n.start,n.end)}else e.nextClause()}},nthis,sfunction(){return z},\\\function\\\typeof define&&define.amd?define(s):\\\object\\\typeof exports?module.exportss():n.lunrs()}();\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/hoelzro/full-text-search/query-expander.js\:{\title\:\$:/plugins/hoelzro/full-text-search/query-expander.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/query-expander.js\\ntype: application/javascript\\nmodule-type: library\\n\\n\\\\*/\\nvar QueryExpander;\\n(function (QueryExpander) {\\n if (!(asyncIterator in Symbol)) {\\n Symbol.asyncIterator Symbol\\\for\\\(Symbol.asyncIterator);\\n }\\n function buildAliasTree(lunr, listOfAliases) {\\n var topTree {};\\n for (var _i 0, listOfAliases_1 listOfAliases; _i \u003C listOfAliases_1.length; _i++) {\\n var aliases listOfAliases_1_i;\\n for (var i 0; i \u003C aliases.length; i++) {\\n // XXX do you want to run the full pipeline? what if we tweak the tokenizer?\\n var iTokens lunr.tokenizer(aliasesi).map(function (token) { return token.toString(); });\\n for (var j 0; j \u003C aliases.length; j++) {\\n if (i j) {\\n continue;\\n }\\n var jTokens lunr.tokenizer(aliasesj).map(function (token) { return token.toString(); });\\n var tree topTree;\\n for (var _a 0, jTokens_1 jTokens; _a \u003C jTokens_1.length; _a++) {\\n var token jTokens_1_a;\\n if (!(token in tree)) {\\n treetoken {};\\n }\\n tree treetoken;\\n }\\n if (!(.expansion in tree)) {\\n tree.expansion ;\\n }\\n for (var _b 0, iTokens_1 iTokens; _b \u003C iTokens_1.length; _b++) {\\n var token iTokens_1_b;\\n tree.expansion.push(token);\\n }\\n }\\n }\\n }\\n return topTree;\\n }\\n function generateQueryExpander(lunr, relatedTerms) {\\n var treeTop buildAliasTree(lunr, relatedTerms);\\n var currentTree treeTop;\\n var expandQuery function expandQuery(token) {\\n if (token.metadata.index 0) {\\n currentTree treeTop;\\n }\\n var tokenStr token.toString();\\n if (currentTree.hasOwnProperty(tokenStr)) {\\n currentTree currentTreetokenStr;\\n if (.expansion in currentTree) {\\n var originalToken token;\\n var tokens originalToken;\\n var _loop_1 function (token_1) {\\n tokens.push(originalToken.clone(function (str, meta) {\\n return token_1;\\n }));\\n };\\n for (var _i 0, _a currentTree.expansion; _i \u003C _a.length; _i++) {\\n var token_1 _a_i;\\n _loop_1(token_1);\\n }\\n return tokens;\\n }\\n }\\n else {\\n currentTree treeTop;\\n }\\n return token;\\n };\\n lunr.Pipeline.registerFunction(expandQuery, expandQuery);\\n return expandQuery;\\n }\\n QueryExpander.generateQueryExpander generateQueryExpander;\\n})(QueryExpander || (QueryExpander {}));\\nmodule.exports QueryExpander;\\n// vim:sts4:sw4\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/hoelzro/full-text-search/readme\:{\title\:\$:/plugins/hoelzro/full-text-search/readme\,\type\:\text/vnd.tiddlywiki\,\text\:\! Purpose\\n\\nProvides an alternative search result list that orders results by search relevance and ignores differences in word forms (ex. //tag// vs //tags//).\\n\\nOn my personal wiki, I have the problem that there are terms I use across a lot of tiddlers, and sometimes Ill use different forms (such as the aforementioned //tag// vs //tags//). I wanted a plugin to allow me to find the tiddler Im looking for quickly and didnt require me to worry about how I declined a noun or inflected a verb - so I wrote this plugin, which provides an alternative search list powered by lunr.js|https://lunrjs.com/.\\n\\nI use it pretty much every day, but theres definitely room for improvement. Please let me know|https://github.com/hoelzro/tw-full-text-search/issues if there are any bugs!\\n\\n! Demo\\n\\nPlease check out the examples|https://hoelz.ro/files/fts.html#Query Examples on the demo wiki.\\n\\n! Usage\\n\\nEach time you start a new ~TiddlyWiki session, youll need to build the FTS index. You can do this from a tab in the $:/ControlPanel. Older versions of the index are retained in web storage, so it should be pretty quick after the first time! After you build the index, you can just search as you would normally.\\n\\n! Source Code/Reporting Bugs\\n\\nIf you want to help out, you can report bugs or check out the source for this plugin (or its dependency, the progress bar plugin) on ~GitHub:\\n\\nhttps://github.com/hoelzro/tw-full-text-search/\\n\\nhttps://github.com/hoelzro/tw-progress-bar\\n\\nRequires $:/plugins/hoelzro/progress-bar to display progress when generating the index.\\n\},\$:/plugins/hoelzro/full-text-search/search-results\:{\title\:\$:/plugins/hoelzro/full-text-search/search-results\,\caption\:\Full Text Results\,\tags\:\$:/tags/SearchResults\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define searchResults()\\n\u003C$set name\\\resultCount\\\ value\\\\\\\\\\u003C$count filter\\\ftsearch{$(searchTiddler)$}ftsfeedback\u003CftsFeedback>\\\/>\\\\\\\\\>\\n{{$:/language/Search/Matches}}\\n\u003C/$set>\\n\\n\u003C$list filter\\\ftsearch{$(searchTiddler)$}ftsfeedback\u003CftsFeedback>\\\ template\\\$:/core/ui/ListItemTemplate\\\/>\\n\\\\end\\n\\n\u003C$set name\\\state\\\ value\\\$:/temp/FTS-state\\\>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\initialized\\\>\\n\u003C$set name\\\ftsFeedback\\\ value\u003C\u003Cqualify \\\$:/temp/fts-feedback\\\>> >\\n\u003C\u003CsearchResults>>\\n\\n\u003C$list variable\\\index\\\ filter\\\title\u003CftsFeedback>indexes\\\>\\n\\n\u003C$set name\\\message\\\ tiddler\u003C\u003CftsFeedback>> index\u003C\u003Cindex>> >\\n\u003Cstrong style\\\white-space: normal\\\>\u003C\u003Cmessage>>\u003C/strong>\\n\u003C/$set>\\n\u003C/$list>\\n\u003C/$set>\\n\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\uninitialized\\\>\\nSearch index not initialized; please \u003C$button>\\n Click here to generate the index\\n \u003C$fts-action-generate-index />\\n\u003C/$button>\\n\\n\u003C/$reveal>\\n\u003C$reveal type\\\match\\\ state\u003C\u003Cstate>> text\\\initializing\\\>\\nGenerating index...\\n\\n\u003C$hoelzro-progressbar current{{$:/temp/FTS-state!!progressCurrent}} total{{$:/temp/FTS-state!!progressTotal}} />\\n\u003C/$reveal>\\n\u003C/$set>\\n\},\$:/plugins/hoelzro/full-text-search/shared-index.js\:{\title\:\$:/plugins/hoelzro/full-text-search/shared-index.js\,\text\:\\\\use strict\\\;\\n/*\\\\\\ntitle: $:/plugins/hoelzro/full-text-search/shared-index.js\\ntype: application/javascript\\nmodule-type: library\\n\\n\\\\*/\\nvar __awaiter (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator\\\throw\\\(value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator generator.apply(thisArg, _arguments || )).next());\\n });\\n};\\nvar __generator (this && this.__generator) || function (thisArg, body) {\\n var _ { label: 0, sent: function() { if (t0 & 1) throw t1; return t1; }, trys: , ops: }, f, y, t, g;\\n return g { next: verb(0), \\\throw\\\: verb(1), \\\return\\\: verb(2) }, typeof Symbol \\\function\\\ && (gSymbol.iterator function() { return this; }), g;\\n function verb(n) { return function (v) { return step(n, v); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\Generator is already executing.\\\);\\n while (_) try {\\n if (f 1, y && (t op0 & 2 ? y\\\return\\\ : op0 ? y\\\throw\\\ || ((t y\\\return\\\) && t.call(y), 0) : y.next) && !(t t.call(y, op1)).done) return t;\\n if (y 0, t) op op0 & 2, t.value;\\n switch (op0) {\\n case 0: case 1: t op; break;\\n case 4: _.label++; return { value: op1, done: false };\\n case 5: _.label++; y op1; op 0; continue;\\n case 7: op _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t _.trys, t t.length > 0 && tt.length - 1) && (op0 6 || op0 2)) { _ 0; continue; }\\n if (op0 3 && (!t || (op1 > t0 && op1 \u003C t3))) { _.label op1; break; }\\n if (op0 6 && _.label \u003C t1) { _.label t1; t op; break; }\\n if (t && _.label \u003C t2) { _.label t2; _.ops.push(op); break; }\\n if (t2) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op body.call(thisArg, _);\\n } catch (e) { op 6, e; y 0; } finally { f t 0; }\\n if (op0 & 5) throw op1; return { value: op0 ? op1 : void 0, done: true };\\n }\\n};\\nvar SharedIndex;\\n(function (SharedIndex) {\\n var RELATED_TERMS_TIDDLER $:/plugins/hoelzro/full-text-search/RelatedTerms.json;\\n var FUZZY_SEARCH_TIDDLER $:/plugins/hoelzro/full-text-search/EnableFuzzySearching;\\n var lunr require($:/plugins/hoelzro/full-text-search/lunr.min.js);\\n var lunrMutable require($:/plugins/hoelzro/full-text-search/lunr-mutable.js);\\n // XXX import?\\n var generateQueryExpander require($:/plugins/hoelzro/full-text-search/query-expander.js).generateQueryExpander;\\n lunr.utils.warn function () { };\\n var index null;\\n function tick() {\\n return __awaiter(this, void 0, void 0, function () {\\n return __generator(this, function (_a) {\\n return 2 /*return*/, new Promise(function (resolve) {\\n $tw.utils.nextTick(resolve);\\n });\\n });\\n });\\n }\\n function buildIndexIncremental(wiki, tiddlers, rebuilding, progressCallback) {\\n return __awaiter(this, void 0, void 0, function () {\\n var builder, relatedTerms, expandQuery, stemmer, i, _i, tiddlers_1, title, tiddler, type;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n builder null;\\n if (rebuilding || !index) {\\n relatedTerms $tw.wiki.getTiddlerDataCached(RELATED_TERMS_TIDDLER, );\\n relatedTerms relatedTerms.map($tw.utils.parseStringArray);\\n expandQuery generateQueryExpander(lunr, relatedTerms);\\n builder new lunrMutable.Builder();\\n stemmer void 0;\\n if (wiki.getTiddlerText(FUZZY_SEARCH_TIDDLER, ) yes) {\\n stemmer function (unstemmedToken) {\\n var stemmedToken lunr.stemmer(unstemmedToken.clone());\\n return unstemmedToken, stemmedToken;\\n };\\n lunr.Pipeline.registerFunction(stemmer, stemmedAndUnstemmed);\\n }\\n else {\\n stemmer lunr.stemmer;\\n }\\n builder.pipeline.add(lunr.trimmer, lunr.stopWordFilter, expandQuery, stemmer);\\n builder.searchPipeline.add(lunr.stemmer);\\n // XXX configurable fields?\\n builder.field(title);\\n builder.field(tags);\\n builder.field(text);\\n builder.ref(title);\\n }\\n else {\\n builder index.builder;\\n }\\n i 0;\\n _i 0, tiddlers_1 tiddlers;\\n _a.label 1;\\n case 1:\\n if (!(_i \u003C tiddlers_1.length)) return 3 /*break*/, 5;\\n title tiddlers_1_i;\\n tiddler wiki.getTiddler(title);\\n i++;\\n if (tiddler undefined) { // avoid drafts that were open when we started\\n return 3 /*break*/, 4;\\n }\\n type tiddler.fields.type || text/vnd.tiddlywiki;\\n if (!type.startsWith(text/)) {\\n return 3 /*break*/, 4;\\n }\\n if (draft.of in tiddler.fields) {\\n return 3 /*break*/, 4;\\n }\\n updateTiddler(builder, tiddler);\\n return 4 /*yield*/, progressCallback(i);\\n case 2:\\n _a.sent();\\n return 4 /*yield*/, tick();\\n case 3:\\n _a.sent();\\n _a.label 4;\\n case 4:\\n _i++;\\n return 3 /*break*/, 1;\\n case 5:\\n index builder.build();\\n return 4 /*yield*/, progressCallback(tiddlers.length);\\n case 6:\\n _a.sent();\\n return 2 /*return*/;\\n }\\n });\\n });\\n }\\n function buildIndexWorker(wiki, tiddlers, progressCallback) {\\n return __awaiter(this, void 0, void 0, function () {\\n var workerSource, worker, relatedTerms, expandQuery, stemmer, workerFinished;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n workerSource wiki.getTiddlerText($:/plugins/hoelzro/full-text-search/index-worker.js);\\n worker new Worker(URL.createObjectURL(new Blob(workerSource)));\\n relatedTerms $tw.wiki.getTiddlerDataCached(RELATED_TERMS_TIDDLER, );\\n relatedTerms relatedTerms.map($tw.utils.parseStringArray);\\n expandQuery generateQueryExpander(lunr, relatedTerms);\\n stemmer function (unstemmedToken) {\\n var stemmedToken lunr.stemmer(unstemmedToken.clone());\\n return unstemmedToken, stemmedToken;\\n };\\n lunr.Pipeline.registerFunction(stemmer, stemmedAndUnstemmed);\\n workerFinished new Promise(function (resolve, reject) {\\n worker.onmessage function (msg) {\\n var payload msg.data;\\n if (payload.type require) {\\n var moduleName payload.name;\\n var moduleSource wiki.getTiddlerText(moduleName);\\n worker.postMessage(URL.createObjectURL(new Blob(moduleSource)));\\n }\\n else if (payload.type index) {\\n index lunrMutable.Index.load(JSON.parse(payload.index));\\n resolve();\\n }\\n else if (payload.type sendTiddlers) {\\n for (var _i 0, tiddlers_2 tiddlers; _i \u003C tiddlers_2.length; _i++) {\\n var title tiddlers_2_i;\\n var tiddler wiki.getTiddler(title);\\n if (tiddler undefined) { // avoid drafts that were open when we started\\n continue;\\n }\\n var type tiddler.fields.type || text/vnd.tiddlywiki;\\n if (!type.startsWith(text/)) {\\n continue;\\n }\\n worker.postMessage(JSON.stringify(tiddler.fields));\\n }\\n worker.postMessage(null);\\n }\\n else if (payload.type progress) {\\n progressCallback(payload.count);\\n }\\n else if (payload.type getRelatedTerms) {\\n worker.postMessage(relatedTerms);\\n }\\n else if (payload.type getFuzzySetting) {\\n var fuzzySetting wiki.getTiddlerText(FUZZY_SEARCH_TIDDLER, );\\n worker.postMessage(fuzzySetting);\\n }\\n else if (payload.type error) {\\n reject(payload.error);\\n }\\n };\\n });\\n return 4 /*yield*/, workerFinished;\\n case 1:\\n _a.sent();\\n return 4 /*yield*/, progressCallback(tiddlers.length);\\n case 2:\\n _a.sent();\\n return 2 /*return*/;\\n }\\n });\\n });\\n }\\n function buildIndex(wiki, tiddlers, isFresh, progressCallback) {\\n return __awaiter(this, void 0, void 0, function () {\\n var e_1;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n if (!($tw.browser && isFresh)) return 3 /*break*/, 4;\\n _a.label 1;\\n case 1:\\n _a.trys.push(1, 3, , 4);\\n return 4 /*yield*/, buildIndexWorker(wiki, tiddlers, progressCallback);\\n case 2: return 2 /*return*/, _a.sent();\\n case 3:\\n e_1 _a.sent();\\n console.log(e_1);\\n console.log(falling back to incremental indexing...);\\n return 3 /*break*/, 4;\\n case 4: return 4 /*yield*/, buildIndexIncremental(wiki, tiddlers, isFresh, progressCallback);\\n case 5: return 2 /*return*/, _a.sent();\\n }\\n });\\n });\\n }\\n SharedIndex.buildIndex buildIndex;\\n function updateTiddler(builder, tiddler) {\\n var fields {\\n title: tiddler.fields.title\\n };\\n if (text in tiddler.fields) {\\n fields.text tiddler.fields.text;\\n }\\n if (tags in tiddler.fields) {\\n fields.tags tiddler.fields.tags.join( );\\n }\\n builder.remove(fields);\\n builder.add(fields);\\n }\\n SharedIndex.updateTiddler updateTiddler;\\n function getIndex() {\\n return index;\\n }\\n SharedIndex.getIndex getIndex;\\n ;\\n function clearIndex() {\\n index null;\\n }\\n SharedIndex.clearIndex clearIndex;\\n function load(data) {\\n index lunrMutable.Index.load(data);\\n }\\n SharedIndex.load load;\\n})(SharedIndex || (SharedIndex {}));\\nmodule.exports SharedIndex;\\n// vim:sts4:sw4\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/temp/FTS-state\:{\title\:\$:/temp/FTS-state\,\type\:\text/vnd.tiddlywiki\,\text\:\uninitialized\}}}},{author:RobHoelz,core-version:>5.1.13,dependents:,description:Progress Bar Widget,list:readme license history,plugin-type:plugin,source:https://github.com/hoelzro/tw-progress-bar,title:$:/plugins/hoelzro/progress-bar,version:0.0.1,type:application/json,text:{\tiddlers\:{\$:/plugins/hoelzro/progress-bar/history\:{\title\:\$:/plugins/hoelzro/progress-bar/history\,\type\:\text/vnd.tiddlywiki\,\text\:\! Release History\\n\\n!! 0.0.1\\n\\nBasic progressbar widget.\\n\},\$:/plugins/hoelzro/progress-bar/license\:{\title\:\$:/plugins/hoelzro/progress-bar/license\,\type\:\text/vnd.tiddlywiki\,\text\:\```\\nCopyright 2017 Rob Hoelz\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of\\nthis software and associated documentation files (the \\\Software\\\), to deal in\\nthe Software without restriction, including without limitation the rights to\\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\\nof the Software, and to permit persons to whom the Software is furnished to do\\nso, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\nSOFTWARE.\\n```\\n\},\$:/plugins/hoelzro/progress-bar/progress-bar.js\:{\title\:\$:/plugins/hoelzro/progress-bar/progress-bar.js\,\text\:\/*\\\\\\ntitle: $:/plugins/hoelzro/progress-bar/progress-bar.js\\ntype: application/javascript\\nmodule-type: widget\\n\\n\\\\*/\\n(function() {\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar Widget require($:/core/modules/widgets/widget.js).widget;\\n\\nvar ProgressBarWidget function ProgressBarWidget(parseTreeNode, options) {\\n this.initialise(parseTreeNode, options);\\n};\\n\\nProgressBarWidget.prototype new Widget();\\n\\nProgressBarWidget.prototype.render function render(parent, nextSibling) {\\n this.parentDomNode parent;\\n this.computeAttributes();\\n this.execute();\\n\\n var node this.document.createElement(div);\\n node.style.border thin solid black;\\n var filledIn this.document.createElement(div);\\n filledIn.style.height 10px;\\n filledIn.style.backgroundColor green;\\n filledIn.style.width Math.round(100 * this.current / this.total) + %;\\n node.appendChild(filledIn);\\n parent.insertBefore(node, nextSibling);\\n this.renderChildren(node, null);\\n this.domNodes.push(node);\\n};\\n\\nProgressBarWidget.prototype.execute function execute() {\\n this.current this.getAttribute(current);\\n this.total this.getAttribute(total);\\n this.makeChildWidgets();\\n};\\n\\nProgressBarWidget.prototype.refresh function refresh(changedTiddlers) {\\n var changedAttributes this.computeAttributes();\\n if(changedAttributes.current || changedAttributes.total) {\\n this.refreshSelf();\\n return true;\\n }\\n return this.refreshChildren(changedTiddlers);\\n};\\n\\nexportshoelzro-progressbar ProgressBarWidget;\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/hoelzro/progress-bar/readme\:{\title\:\$:/plugins/hoelzro/progress-bar/readme\,\type\:\text/vnd.tiddlywiki\,\text\:\This plugin provides a simple progress bar widget.\\n\\n! Parameters\\n\\n* `current` - the current progress of the progressbar.\\n* `total` - the total value that represents completion for this progressbar.\\n\\n! Example\\n\\n```\\n\u003C$hoelzro-progressbar current{{!!current}} total{{!!total}} />\\n```\\n\\n! Potential Future Enhancements\\n\\nThe coloration and size are currently hardcoded, and the progressbar\\ndoesnt support animation. Contributions adding these are most welcome!\\n\}}}},{author:ihm4u,core-version:>5.1.9,created:20210301193448094,dependents:,description:Tidgraph - Easy tiddler graphs for TW5,list:readme changelog documentation,modified:20210301193448094,plugin-type:plugin,source:https://ihm4u.github.io/tw5plugs,title:$:/plugins/ihm/tidgraph,version:0.9.6,type:application/json,text:{\tiddlers\:{\$:/plugins/ihm/templates/collapse\:{\title\:\$:/plugins/ihm/templates/collapse\,\created\:\20151120174133063\,\modified\:\20151120180705805\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg version\\\1.1\\\ xmlns\\\http://www.w3.org/2000/svg\\\ x\\\0px\\\\\n\\t y\\\0px\\\ width\\\14px\\\ height\\\14px\\\ >\\n\u003Ccircle cx\\\7\\\ cy\\\7\\\ r\\\6\\\ stroke\\\#aeb0b5\\\ stroke-width\\\1\\\ fill\\\#aeb0b5\\\/>\\n\u003Cpolyline points\\\4,7 10,7\\\ fill\\\none\\\ stroke\\\white\\\/>\\n\u003C/svg>\\n\},\$:/plugins/ihm/templates/expand\:{\title\:\$:/plugins/ihm/templates/expand\,\created\:\20151120174133063\,\modified\:\20151120180705805\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg version\\\1.1\\\ xmlns\\\http://www.w3.org/2000/svg\\\ x\\\0px\\\\\n\\t y\\\0px\\\ width\\\14px\\\ height\\\14px\\\ >\\n\u003Ccircle cx\\\7\\\ cy\\\7\\\ r\\\6\\\ stroke\\\#aeb0b5\\\ stroke-width\\\1\\\ fill\\\#aeb0b5\\\/>\\n\u003Cpolyline points\\\4,7 10,7 7,7 7,10 7,4\\\ fill\\\none\\\ stroke\\\white\\\/>\\n\u003C/svg>\\n\},\$:/plugins/ihm/tidgraph/changelog\:{\title\:\$:/plugins/ihm/tidgraph/changelog\,\created\:\20151024161547099\,\creator\:\ihm4u\,\modified\:\20151031061347109\,\modifier\:\ihm4u\,\tags\:\\,\text\:\For the complete changelog see\\n\\nhttps://ihm4u.github.io/tw5plugs/#Tidgraph%20-%20Changelog\\n\},\$:/plugins/ihm/tidgraph/documentation\:{\title\:\$:/plugins/ihm/tidgraph/documentation\,\text\:\!!Example\\nThe following example shows a tiddler which tags 7 children:\\n\\n``\u003C$tidgraph start\\\Virtues\\\ />``\\n\\nlooks like this:\\n\\n{{$:/plugins/ihm/tidgraph/tidgraph.png}}\\n\\n!!Usage\\nSimple usage:\\n\\n``\u003C$tidgraph start\\\MyRootTiddler\\\ />``\\n\\nThe map will start with MyRootTiddler on the left, and show all its children recursively. The default maximum depth is 10 levels, it can be changed with the `maxdepth` attribute.\\n\\nAll options:\\n\\n|!Attribute |!Description|!Default |\\n|`start` |Initial tiddler that starts the map | none |\\n|`startat` |First level to display. 0 is the root tiddler named in the `start` attribute. 1 is the next level, etc. | 0 |\\n|`maxdepth` |Maximum depth to display.| 10 |\\n|`mode` |//tagging// or //linking// or custom. This is how to identify the children of a node. With //tagging// Tiddlers that tag other tiddlers become their parent. With //linking// tiddlers that link to other tiddlers become their parent. A custom mode can be specified by a `$:/config/tidgraph/modes/MyMode` tiddler where `MyMode` is the name of the mode. The subfilter can be also specified directly; e.g. `mode\\\fields\\\`. See Custom Mode Demo|https://ihm4u.github.io/tw5plugs/#Custom%20Mode%20Demo for an example | //tagging// |\\n|`nodetitle` |Field to use as title for the node. | //title// (or //caption// if present) |\\n|`tooltip` |List of fields to use for node tooltip. The first field with a non empty value is used. | //summary// |\\n|`filter` |Only tiddlers matching filter will be used | none |\\n|`nocollapse` |Disable ability to collapse nodes. The graph allows node collapsing by default. | false |\\n|`nodetemplate` |One or mode node templates to make node look like you want. See the Node Templates Demo|https://ihm4u.github.io/tw5plugs/#Node%20Templates%20Demo for examples of how to use them. | none |\\n|`layout` |`E` for East (Vertical) or `S` for south (Horizontal) layout. | E |\\n\\n!CSS classes\\nYou can also change colors, and other styles with the following CSS classes.\\n\\n|!Class |!Description |\\n|tgr-node |Style for each node. If you want to change the color of the links inside the node use the `.tgr-node a` selector. |\\n|tgr-edge |Style for the SVG path that connects the nodes. The old name was tgr-link. |\\n|tgr-arrow |Style for the SVG polyline that draws the arrow at the end of the link |\\n\},\$:/plugins/ihm/tidgraph/readme\:{\title\:\$:/plugins/ihm/tidgraph/readme\,\created\:\20151024054526558\,\modified\:\20151024065317719\,\tags\:\\,\text\:\!!How\\nSimply put this in your tiddler:\\n\\n``\u003C$tidgraph start\\\MyRootTiddler\\\ />``\\n\\nThere are other options covered in the documentation|$:/plugins/ihm/tidgraph/documentation.\\n\\n!!Features\\n* No third-party libraries\\n* Light weight\\n* Rendering of map/graph with HTML5 and SVG (no heavy png or jpg images)\\n* Automatic map/graph creation, no need for dragging/connecting/etc\\n* Figures out tree-graph by means of tags or links, or custom modes \\n* Collapse/expand nodes\\n* User defined Node Templates!!\\n\\n!!Limitations\\n* Layout is horizontal from left to right, if needed a vertical layout will be added later\\n\},\$:/plugins/ihm/tidgraph/stylesheet\:{\title\:\$:/plugins/ihm/tidgraph/stylesheet\,\text\:\/*Eliminate border in table and cells*/\\n.ihm-tgr-table {\\n border-collapse: collapse;\\n border: none;\\n background-color: transparent;\\n padding: 0;\\n margin: 0;\\n}\\n\\n.ihm-tgr-tablediv {\\n /* We need this margin to prevent spurius vertical scroll\\n * in tgr-container. It needs to have the SAME pixel value\\n * as top and left in tgr-svg-int class so that the SVG\\n * arrows match properly (this assures same origin coordinates\\n * for table and svg)\\n */\\n margin: 10px; \\n}\\n\\n.tgr-container table td {\\n border: none;\\n background-color: transparent;\\n}\\n\\n/*nice round box around tiddlers*/\\n.tgr-container td a {\\n \\n}\\n\\n.tgr-container {\\n position:relative; \\n left:0px; \\n top:0px; \\n background-color: transparent;\\n overflow: auto; /* This is needed to scroll on big maps */\\n z-index:1;\\n}\\n.tgr-svg-int { \\n\\tz-index: -1;\\n\\tposition:absolute;\\n\\tbackground-color:transparent;\\n\\topacity: 1;\\n left: 10px;\\n top: 10px;\\n}\\n\\n/* SVG arrows */\\n.ihm-tgr-link {\\n fill: none;\\n stroke-width: 2;\\n stroke: #aeb0b5;\\n}\\n\\n.tgr-edge-weak {\\n stroke-dasharray: 3,5;\\n}\\n\\n.tgr-arrow {\\n fill: #aeb0b5;\\n stroke-width: 0;\\n}\\n\\n.ihm-tgr-node-container {\\n position: relative;\\n}\\n\\n.ihm-tgr-node-container-east {\\n margin: 6px 10px;\\n}\\n\\n.ihm-tgr-node-container-south {\\n margin: 16px 4px;\\n display: inline-block; /*FIXME*/\\n}\\n\\n.ihm-tgr-node-container p {\\n margin-top: 0px;\\n margin-bottom: 0px;\\n}\\n\\n.ihm-tgr-node {\\n background-color: #dce4ef;\\n border-radius: 15px;\\n padding: 0.1em 0.4em;\\n /* border: 0px dashed #cd2026; */\\n box-shadow: 4px 4px 5px #888888;\\n text-align: center;\\n vertical-align: middle;\\n font-size: 1em;\\n color: #0071bc;\\n}\\n\\n/* Collapse feature */\\n.ihm-tgr-collapse {\\n position: absolute;\\n cursor: pointer;\\n width: 14px;\\n height: 14px;\\n right: -14px;\\n}\\n\\n.ihm-tgr-collapse-east {\\n top: 50%;\\n transform: translateY(-50%);\\n -ms-transform: translateY(-50%);\\n -webkit-transform: translateY(-50%);\\n}\\n\\n.ihm-tgr-collapse-south {\\n left: 50%;\\n transform: translateX(-50%);\\n -ms-transform: translateX(-50%);\\n -webkit-transform: translateX(-50%);\\n}\\n\\na.ihm-tgr-collapse:hover {\\n text-decoration: none;\\n background: #999999;\\n}\\n\\n/* Vertical layout divs */\\n.ihm-tgr-divtable {\\n display: table;\\n}\\n\\n.ihm-tgr-node-group {\\n display: table-row;\\n}\\n\\n.ihm-tgr-node-cell {\\n display: table-cell;\\n vertical-align: top;\\n text-align: center;\\n}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/ihm/tidgraph/tidgraph.png\:{\title\:\$:/plugins/ihm/tidgraph/tidgraph.png\,\text\:\iVBORw0KGgoAAAANSUhEUgAAAKIAAADPCAMAAABBRvqtAAAC/VBMVEWBoPCHiYaIioeKjImLjYqMjouNj4ySlJGVk5eUlpOTmJp1mPR+l/V1m/F9mfCWm52FmPF/m/KYnZ+AnPN5n/WcnpuJm/SAn++CnvWdn5yRmvWboKKJnvCXmvF6o/KfoZ6DofKKn/JzpvN8pPOEovOSnvJ9pfSho6CFo/SDpe58p++bnvSOovWmo6iVofWcn/WFp/CNpfCkpqOGqPGlp6SVpPF/q/J4rfSjqKujofKWpfOdo/OHq+6JqvSCrfWRqfWfpfWBr/Cpq6iCsPGQrPCyovClpvB8tPOurLCEsvOtpvK0pPOMsPOarfOhq/O1pfSwrrKLs++pqvWwqPWjrPWEtvCxr7Ovr7mssbO7p/B+ufKysLSzsbWOtvKwrPGHufO3q/KGu+61s7e/q/Wutr6zr/Wxtrm0trO3tbm4sPC1t7S2uLXAsPK3uba7svK7uL21ur28s/O2u77CsvSZv+6Swe+5u7iLxPC6vLm4t/W9u7+7vbqiv/CLx+ywvPC8vru/vcHKtfLEt/K6v8KWxfLBvsONyu+VyO/GufS6wsqPzPHMu/CYy/LFwsemx/G/xMbCxMHAxcjDxcKXzu3Iv/PExsPPvvTJwPTDwvPCx8qZ0O/Ixsqa0fHEyczJxPDKyMzRxPKh0+3FyPLMx/Ow0O2q0u7EzdXTxvWj1e/OzNDJztDSyfDQzdHKz9HI0NjHzvHO0MzNzfHUy/Ku1/LP0c651e3PzvPT0NXQ0s/WzfSt2u/K0fTO09bR09DH0+7XzvXV0O/S1NHcz/DT1dLQ0/C92fHX0vHU1tO43PLC2uzY0/PS1fLP2ODS2Nq93e3W2NXZ1PTc1O7Q2eHa2NzX1+/S2uLY2ta/4PDH3/HF4ezb2vLO3vHe2+DY3eDb3drW3uff2+3c3tvM4e3I5O/b3+/e4N3c4PDQ5PDZ4uri4OTc4uTR5fHa4+vY5PPb5Ozd5e7j5eHk5uPn5enf5/Dp5uvj6Ovm6OXk6ezn6ebo6ufi6/Pp6+jj7PTm7O7k7fWGi86GAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQffChgGLRopZLysAAAAHWlUWHRDb21tZW50AAAAAABDcmVhdGVkIHdpdGggR0lNUGQuZQcAAAr0SURBVHja7Z0PcBRXGcA3/ROsQeVakFTqNAhJz0SBoBNtaFGSgprA9GrJMyUJ0rOGaqkXUQumVi5cGyp4hpQibZg2tNrCHKWlYWyHemi96IlTj5lOW5CSAF6Ou3rJLUzwD5Yu4+57e7nb3bd72cu+69fxvmGG3J95+c292337/fK9bzkuH/nIRz7ykY98/J/Ee2d503H2vdzxXeKzjvO5ITzPTyBG/gWdkOff+fsFRmCDFswyib/2n2OD6EX7yA/03xucbCsubkjgn3ffJv4f+HRMj/HxQ+cYISICqYNYEk57FKkeMkDsur//AitECfJdI8TTSyrtLbFdtSuLlv521vKZ845T3/t8zSMnGRDGmxGJkQyfYnTuK7tqX5s9FLAd5hf3UN97atrq/dZ/jCF0NyH08QbfxR9Flld+acoegihO9B3b6IiTarafsZpQQHE80T7OeKJ3LBqOzs2I+Gzh/A1HrUbs9kvfRR+X6XB5uCFxcDJGDBsg3nXFDev/bPWH6BQPFx/HZUR8s9Te8p15j9VGKha+oI84gwGiz2/d4sLzPytgMNFI8WhkYoRvFV5m/eESdyke/uedCRF+rOBK6086inkW4+RbE5jlwoIrrqrZavWpu21U+fhC/+Ndz58yj3fq2btmFFx25VWft34BROonzh1aXzNtUuHlBabj8sJJ02ru/4PVlxFxt+apc/1bV9fMv/7aaSbj2uvn16x+xPqLMb9P+9yFk/u3b7jv3nu+ayruufe+Ddv3n7R+ffaGaM/++8zR/kP7Tcah/qNnWFyHIUHvlYv/NRkXGaUECHzGLMBHDHnBI/p6wSPSD2hQwqRtELww0Z5zwAkTDSI4YZI85wAWJqNoPMJESl2iNz41PkarhUnIOR5hYgrRamGSPHMbC5Mk4vfs9q/FArOWzaw6zv9Y/DmcC2HiI4iDxsIkONlmsxU91SdmpvWbAx89zNc/cPCmGL+qMxfChOTPHtRsKEzkT7FjRUJM918VQR9u2PiRysrKB3MhTPDi4nFzxsJEg9jRsFG2jeyFSauI6HNyGYSJjChNdJ040Uf42zsPTg/zq/bkQpigEDl7GwuT5OHyfbv9tlhg+rLPVIWlw6UllgthIuL53OYWFwNBy0SYiIgobk6YGCNaLkwEJMSdHGhhIiL2qpNUYMJEvIpojXOghckooqRXsIRJCPldHGxhEkJeii8BJUxCqHWQgy1MQm59XwJEmPgeAi8jvGvhI94N3pd4neB9ibeZ6ksgCRMvoiDCEiYeyjkHmDBBFisdBsIEJc85cIXJGKK+MHm92mZrCasvtXGZSU6EiSOFqCNMIhWbEtG6TdpsIFI9lBNh4nByGYRJXxlmC+CKElJiEpy9pPxJqcykbpv0whBbYeIgV4v+7iY9YbKlFs/oWEVJdO4rwSnP8LhAYu+8GL/mAcbCBCP6EfK69IRJEhEXGpASEymrxojRigOR0mOMhYmE+ITkIXSFSd+sWAqRlJgEZw8RRH5Lw6+03sRiYSIi+nEerStMIhXrEtFvbyKIpMQkiRjm3y6tPsBamDh2CmQJ1Bcmry+wFbfIRS+kxOR3GDFSsTDMf6s8xlqYIJ/bNYHFJVrXw1qYCGgnUqfRJipMtlz3w2HWwkRA7U71c8CEiYCatDkqLGEiIM08QxMmQiMtuwIlTP6JmmlPQxImA6id+jwgYTLQ6NZ5BYwwGUA7DV4FIUyMEUHEG+g56Igvo5fziKZdh9pp6CIyFCaXzDkNOiJTYXLepNNwoWwHyVaYnDfrNFobLSbMJEwumXYajU1cboWJ9IY6XAuwt+xpfaGRchou1MvpC5NA0dRrqlT7RW7tmViFSUoe1G02lhpd66VLum7UlCYaNcIkIKant68zj2ggTN4l+1H28HzwuuO7aiWtsbJo6Yvlw9LAuB7k9HK7/eZj2GlsXdvViBpHFYgqYSIhbmyQhiFjRL9uXzpHHilQhnfkPGq33/Q3da2JgTA5O2YP1twp5blTnuHFjPf3eHhSD7J7UYJ/8TfYaXx4xhcbv4G0MaJAjNzYKdkRMsbesljkE/JIUpXJ4p6gmEr/4M6XVLUmBsKEIJ4uPSz+kxBLwinEDlwP8vacm3/yF+I0PnT1Z7+K2kNjQREmgaLikpaYZEfkMVYk+Hp5JJJW/xLLlA5VrYmBMJHnaM26XYuGZaEhI4oDy17jjz/9+M+TTqPXgTzKiVYKkwBWJZJ6kMcgiHgkBaLKmRgJE7nUwr5A/DomEcPiLzotTg+uB9n7a/GLIA0oOw3UmI6oFiYpRDLG7rLUSAQxOPUYv+UrL6lqTYyEifyW+k/FkoiRioUnlpTc8uUeUg/yZrW98nN/SjmNN1KpC0WYpBCjeIxoXcktC7aRkeRNQ4/OnFl1RF1rYiRMxr0ujDmNpkarF5dMwmScriPlNGhrNNstOeNzHWlOowuNZjlI1sJkPK4j3WlQL8bYCpNMrkPtNKiIjIVJZtehcBr0S1rGwiST61A6DZ3EgLEwMXYdKqcxgJ54X4SJoetQOg39VJ+9MLk4PqcxgLrhC5N26Kn+P5ALOqKAEHxEhwAfEXqFiYCcnhwLE/OIXpRbYZIFYq/Tl0thks2fKZ/zkzIYwBUmHs7l0REmyb+WzilSK4jd47ExliG6xMn2cMZbcpRdNnQrSxhVmODVxYn2CUZbchb3kFyf+JaVRUufrE1QVQmTChOyAPqowkSDSHyLmLVKwoimSphUmCTXaGGtwZacJCLxLRhxB1WVMKkwQQ59YaJCrO8hviUdkbotx+IKk3REeoXJqk2RTx4gxoT4ltdmh8WJpqoSJhUmKUS9CpNXS23fHCbGhPiWSMXCx8TDhaZK2FSYOCze72n9lpxm7cUYtB4mXkc8x8IkC8RQjoWJeUSnP9fCxDyiN+fCxCyiqy33wsQkYjt6P4SJmQjpbSYBtCWnjeJpQQkTLoTcIeCJdAj1Qt/wMoji0JWJgAz66YBBpH4ZAW3JEZDg94AWJtL+aM2mVGg9TMRvossHWphIW8zjraCFCW4n4NqnI0zSW73SXQmtnMPqHibS8TyKBunCRNnqVXYlCmFCQ7S6hwlubRFH+9w0YSIj4s4lcsEK3oqjrThh2cPEi9e/uJMqTAgi6VwSJAUruFpAW3HCsodJshOMmyZMSKtX0hZELlhJQ0yvOGHZwyTkMRAm5FOUEUnByhiisuKEZQ+TQWQgTFITXbc5SApWSMdXTcUJyx4mybWFKkzkwwV3LgmSghXc8fWEpuKEZQ8Ta5c/Jj1MtNdi8Jq+anIXeE1ftT3vwDV99fqBCxNq/0VoTV/jbcCFiU6jTWBNXxFwYSKGKw5bmIjRC92YfCBaqgqt4BE/AO19Oe8gaGGCv4y9sIUJZaYh3iVHeWYEeZecwW74d8lxCkphsqp4ctHUqliWjEzukhNqUwsT8lf77ILNXXLcnoeUwkRCxCakb96ya35RPfVIeqdXyZ2cwN1MqDtzGN0lx60SJiIiMSF908Md5bE7OtM7vUruhHQzoe7MYXOXHI0wERGJCekrT+xoSKzpDKR1epXSa9LNhLozh8ldcrTCRELEJqTvC4kdK2TEZKdXKesn3UyoO3OY3CVHK0ykicYmZAwxrdOrhEi6mVB35rC4Sw5FmMiHS0tsDDGt06uESLqZvEDbmTODEWKmxSVDp1emwkQTIxNDZHKXHPDCRBsA75IDXphQAtxdcjjwwoQ+17CECQdfmOgHGGGSj3zkIx/5yAct/gfhibVPlKNM1wAAAABJRU5ErkJggg\,\type\:\image/png\,\created\:\20151024064703806\,\modified\:\20151024064720670\},\$:/plugins/ihm/tidgraph/utils.js\:{\title\:\$:/plugins/ihm/tidgraph/utils.js\,\text\:\/*\\\\\\ntitle: $:/plugins/ihm/tidgraph/utils.js\\ntype: application/javascript\\nmodule-type: library\\n\\nInternal utility functions for tidgraph plugin.\\n\\n\\\\*/\\n(function(){function u(a){var ca.getBoundingClientRect(),bdocument.body,edocument.documentElement,gc.top-(a.scrollTop||window.pageYOffset||e.scrollTop||b.scrollTop)-(e.clientTop||b.clientTop||0);ac.left-(a.scrollLeft||window.pageXOffset||e.scrollLeft||b.scrollLeft)-(e.clientLeft||b.clientLeft||0);return{top:g,left:a,width:c.width,height:c.height,right:a+c.width,bottom:g+c.height}}function q(a,c,b){bb||function(a,b,c){if(a)return!0};a$tw.utils.parseStringArray(a);for(var ea.length,gc.length,\\nf0;f\u003Cg;f++)for(var h0;h\u003Ce;h++){var d$tw.wiki.getTiddler(cf);if(d&&(dd.getFieldString(ah),b(d,ah,cf)))return d}return\\\\\\}function x(a){var c!1;return(aq(\\\_tgr_node_class _tgr_node_class_add\\\,a.id,a.template,function(a,e,g){if(a)return c\\\_tgr_node_class_add\\\e?!0:!1,!0}))&&\\\tgr-default\\\!a?c?\\\ihm-tgr-node tgr-node \\\+a:a:\\\ihm-tgr-node tgr-node\\\}function w(a,c,b){var e;au(a);if(\\\string\\\typeof b){if(edocument.querySelector(b),nulle)return null}else b instanceof HTMLElement&&(e\\nb);var gu(e);bg.bottom-a.top;eg.left-a.left;var fg.right-a.left;ag.top-a.top;g\\\\\\;switch(c.toUpperCase()){case \\\L\\\:gMath.round(e),Math.round(b/2+a/2);break;case \\\R\\\:gMath.round(f),Math.round(b/2+a/2);break;case \\\T\\\:gMath.round(f/2+e/2),Math.round(a);break;case \\\B\\\:gMath.round(f/2+e/2),Math.round(b)}return g}function y(a,c,b,e,g){var f;a:{var hu(c),du(b);fh.left+h.width/2;var hh.top+h.height/2,nd.left+d.width/2,dd.top+d.height/2;switch(e){case \\\E\\\:f4>n-f?\\\R\\\,\\\R\\\:\\\R\\\,\\\L\\\;\\nbreak a;case \\\S\\\:f4>d-h?\\\B\\\,\\\B\\\:\\\B\\\,\\\T\\\;break a}fvoid 0}dw(a,f0,c);aw(a,f1,b);var m,l,h10,n\\\\\\;g&&(n class\\\tgr-edge-weak\\\);if(nullc||nullb)return error(\\\cant connect null element\\\);if(nulld)return error(\\\port not found for \\\+c.tagName+\\\ - \\\+c.innerHTML);if(nulla)return error(\\\port not found for \\\+b.tagName+\\\ - \\\+b.innerHTML);cMath.abs(a1-d1);bMath.abs(a0-d0);switch(e){case \\\E\\\:return a1>d1&&(mc/2),a1\u003Cd1&&(m-c/2),5>c&&(m0),\\\L\\\f1&&(l-10),\\\R\\\f1&&\\n(l10,h20),\u003Cpath d\\\M+d0+\\\,\\\+d1+\\\ Q\\\+(d0+h)+\\\,\\\+d1+\\\ \\\+(d0+h)+\\\,\\\+(d1+m)+\\\ Q\\\+(d0+h)+\\\,\\\+a1+\\\ \\\+(a0+l)+\\\,\\\+a1+\\\+n+ marker-end\\\url(#tgr-arrow)\\\/>;case \\\S\\\:return a0>d0&&(lb/2),a0\u003Cd0&&(l-b/2),5>b&&(l0),\\\T\\\f1&&(m-10,h10),\\\B\\\f1&&(m10,h20),\u003Cpath d\\\M+d0+\\\,\\\+d1+\\\ Q\\\+d0+\\\,\\\+(d1+h)+\\\ \\\+(d0+l)+\\\,\\\+(d1+h)+\\\ Q\\\+a0+\\\,\\\+(d1+h)+\\\ \\\+a0+\\\,\\\+(a1+m)+\\\+n+ marker-end\\\url(#tgr-arrow)\\\/>}}function v(a,c){var b;switch(c.mode){case \\\tagging\\\:b\\n\\\\\\+a+\\\tagging+\\\+c.filter;break;case \\\linking\\\:b\\\\\\+a+\\\links!ismissing+\\\+c.filter;break;default:b\\\\\\+a+\\\\\\+c.mode+\\\+\\\+c.filter}return $tw.wiki.filterTiddlers(b)}function z(a,c,b){switch(b.mode.toLowerCase()){case \\\tagging\\\:return(b$tw.wiki.getTiddler(a))?b.hasTag(c):!1;default:return bv(c,b),-1!b.indexOf(a)}}function A(a,c){function b(b,l,k){hl;db;nencodeURIComponent(h);mencodeURIComponent(d);gdocument.getElementById(c.id+\\\-\\\+n);fdocument.getElementById(c.id+\\\-\\\+m);g&&f&&\\ne.push(y(a,g,f,c.layout,k))}var e,g,f,h,d,n,m;p(c.root,function(a,c,d){(ca.parent)&&b(a.id,c.id)},{},{skipvisited:!0});for(var lc.outliers.length,k0;k\u003Cl;k++)b(c.outliersk0,c.outliersk1,!0);return e.join(\\\ \\\)}function p(a,c,b,e){ee||{};var ge.done||,fe.getCh||function(a){return a.collapse?:a.children},he.lvl||0,dvoid 0e.skipvisited?!0:e.skipvisited;e.leavee.leave||!1;if(d&&-1!g.indexOf(a))return b;g.push(a);ff(a);df.length;bb||{};e.lvlh+1;e.doneg;if(!1c(a,b,h))return e.leave\\n!0,b;for(a0;a\u003Cd;a++)if(bp(fa,c,b,e),e.leave)return b;e.lvl--;return b}function B(a,c,b,e){ee||{};var ge.getCh||function(a){return a.collapse?:a.children},fe.getId||function(a){return a.id},hvoid 0e.skipvisited?!0:e.skipvisited,de.maxdepth||Number.MAX_VALUE;bb||{};var n,m,l,k0;n.push(a);lf(a)void 0;do{an.length;for(var q0;q\u003Ca;q++){var rn.shift(),p;ph?-1m.indexOf(r)?!1:!0:!1;if(!p&&!1c(r,lf(r),b,k))return b;m.push(r);pg(r);nn.concat(p);p&&p.forEach(function(a){var b\\nlf(a);b?f(b)!f(r)&&e.outlier&&e.outlier(a,r):lf(a)r})}k++}while(0!n.length&&k\u003Cd);return b}function C(a,c){return p(a,function(a,c){c.cnt++;return!0},{cnt:0},{skipvisited:c}).cnt-1}function D(a,c,b){function e(a,b){if(-1!$tw.utils.parseStringArray(b).indexOf(c.toString()))return!0}b$tw.utils.parseStringArray(b);var gq(\\\_tgr_node_template\\\,a),f;$tw.utils.each(b,function(b){var c$tw.wiki.getTiddler(b),cc?c.getFieldString(\\\_tgr_node_filter\\\):\\\\\\,d$tw.wiki.filterTiddlers(c);c&&-1\\nd.indexOf(a)&&f.push(b)});0\u003Cf.length&&$tw.utils.removeArrayEntries(b,f);g||q(\\\_tgr_node_filter\\\,b,function(b,c,d){c$tw.wiki.filterTiddlers(b);if(b&&-1!c.indexOf(a))if(b$tw.wiki.getTiddler(d).getFieldString(\\\_tgr_node_level\\\)){if(e(d,b))return gd,!0}else return gd,!0});g||q(\\\_tgr_node_level\\\,b,function(a,b,c){if(e(c,a))return gc,!0});if(!g)for(var hb.length,d0;d\u003Ch;d++){var n$tw.wiki.getTiddler(bd);if(n&&!n.hasField(\\\_tgr_node_level\\\)&&!n.hasField(\\\_tgr_node_filter\\\)){gbd;break}}g||(g\\n\\\tgr-default\\\);return g}function t(a,c,b,e){if(!(this instanceof t))throw\\\Error: call new tnode(id\\\+c+\\\)\\\;this.parenta;this.idc;this.children;this.collapse!1;this.widgete;this.templatevoid 0;aD(c,b,e.nodetemplate);\\\tgr-default\\\!a&&(this.transcluderb\\\$:/temp/tidgraph/\\\+e.tidtree.id+\\\/\\\+c,this.templatea,$tw.wiki.addTiddler(new $tw.Tiddler({title:b,text:\\\{{\\\+c+\\\||\\\+a+\\\}}\\\})),-1e.templatesInUse.indexOf(a)&&e.templatesInUse.push(a))}exports.buildTablefunction(a,c){function b(a,b){return $tw.utils.domMaker(a,\\n$tw.utils.extend(b,{document:c.document}))}function e(a){var dencodeURIComponent(a.id),e;var fa.id;e$tw.wiki.tiddlerExists(f)?c.nodetitle?q(c.nodetitle,f):q(\\\caption title\\\,f):f;var g$tw.wiki.tiddlerExists(a.id)?\\\tc-tiddlylink-resolves\\\:\\\tc-tiddlylink-missing\\\,g\\\tc-tiddlylink \\\+g,fx(a);a.template?ab(\\\div\\\,{\\\class\\\:f,innerHTML:$tw.wiki.renderTiddler(\\\text/html\\\,a.transcluder)}):(ab(\\\a\\\,{\\\class\\\:g,text:e,attributes:{href:\\\#\\\+d}}),ab(\\\div\\\,{\\\class\\\:f,children:a}));return a}function g(a,\\nd){var e1+C(a,!0),fencodeURIComponent(a.id),gq(c.tooltip,a.id),k;!1c.nocollapse&&a.children&&0\u003Ca.children.length?(k$tw.wiki.renderTiddler(\\\text/html\\\,\\\$:/plugins/ihm/templates/\\\+(a.collapse?\\\expand\\\:\\\collapse\\\)).replace(/^\u003Cp>/,\\\\u003Cspan>\\\).replace(/\u003C\\\\/p>$/,\\\\u003C/span>\\\),kb(\\\span\\\,{\\\class\\\:\\\ihm-tgr-collapse \\\+(\\\E\\\a.widget.tidtree.layout?\\\ihm-tgr-collapse-east\\\:\\\ihm-tgr-collapse-south\\\)+\\\ tc-tiddlylink\\\,innerHTML:k}),$tw.utils.addEventListeners(k,{name:\\\click\\\,handlerObject:a,handlerMethod:\\\collapseClickEvent\\\}),\\nkd,k):kd;fb(\\\div\\\,{\\\class\\\:\\\ihm-tgr-node-container \\\+(\\\E\\\a.widget.tidtree.layout?\\\ihm-tgr-node-container-east\\\:\\\ihm-tgr-node-container-south\\\),children:k,attributes:{id:c.id+\\\-\\\+f,title:g}});return\\\E\\\c.layout?b(\\\td\\\,{attributes:{rowspan:e},children:f}):b(\\\div\\\,{attributes:{\\\class\\\:\\\ihm-tgr-node-cell\\\},children:f})}var f;f\\\E\\\c.layout?b(\\\table\\\,{\\\class\\\:\\\ihm-tgr-table\\\,attributes:{id:c.id+\\\-table\\\}}):b(\\\div\\\,{\\\class\\\:\\\ihm-tgr-divtable\\\,attributes:{id:c.id+\\\-table\\\}});(function(a){switch(c.layout){case \\\E\\\:p(c.root,\\nfunction(d,f,m){m>c.startat&&(fe(d),dg(d,f),db(\\\tr\\\,{children:d}),a.appendChild(d));return!0},{},{skipvisited:!0});break;case \\\S\\\:p(c.root,function(d,f,m){if(m>c.startat){var le(d),lg(d,l),kf.nodegroupf.nodegroup.length-1;k?m>f.lastdepth?k.appendChild(l):m\u003Cf.lastdepth&&(f.nodegroup.pop(),kf.nodegroupf.nodegroup.length-1,k.appendChild(l)):a.appendChild(l);!d.collapse&&0\u003Cd.children.length&&(db(\\\div\\\,{\\\class\\\:\\\ihm-tgr-node-group\\\}),f.nodegroup.push(d),l.appendChild(d))}f.lastdepthm;\\nreturn!0},{nodegroup:,lastdepth:-1},{skipvisited:!0})}})(f);return f};exports.errorfunction(a){return\u003Cspan style\\\color:green; font-size:1.5em\\\>\\\\u26a0 Tidgraph: \u003C/span>\u003Cspan style\\\color:red\\\>+a+\\\\u003C/span>\\\};exports.buildSVGfunction(a,c){var bdocument.getElementById(c.id+\\\-table\\\);if(b)return getComputedStyle(b),\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ height\\\+a.offsetHeight+px\\\ width\\\+a.offsetWidth+px\\\ style\\\overflow: visible\\\>\u003Cg class\\\ihm-tgr-link tgr-link tgr-edge\\\ style\\\overflow: visible\\\> \u003Cdefs> \u003Cmarker id\\\tgr-arrow\\\ viewBox\\\0 0 10 10\\\ refX\\\1\\\ refY\\\5\\\ markerUnits\\\strokeWidth\\\ orient\\\auto\\\ markerWidth\\\8\\\ markerHeight\\\6\\\> \u003Cpolyline class\\\ihm-tgr-arrow tgr-arrow\\\ points\\\0,0 10,5 0,10 0,5\\\ style\\\opacity:1;\\\ />\u003C/marker>\u003C/defs> +\\nA(a,c)+\\\\u003C/g> \u003C/svg>\\\};exports.isDescendantfunction(a,c,b){if(z(a,c,b))return!0;var e!1;p(c,function(b,c,h){if(ba)return e!0,!1},{},{skipvisited:!0,getCh:function(a){return v(a,b)}});return e};exports.makeTidTreefunction(a,c,b){bb||{};var e!1;c.outliers;var gnew t(void 0,a,0,b.widget);B(a,function(a,c,d,e){if(c){a:{for(var gd.visited,lg.length,k0;k\u003Cl;k++)if(gk.idc){cgk;break a}cvoid 0}ac.addChild(a,e,b.widget);d.visited.push(a)}return!0},{visited:g},{getId:function(a){return a},\\ngetCh:function(a){return v(a,c)},maxdepth:c.maxdepth,skipvisited:!0,outlier:function(a,b){e!1;$tw.utils.each(c.outliers,function(c){c0a&&c1b&&(e!0)});e||c.outliers.push(a,b)}});return g};t.prototype.addChildfunction(a,c,b){anew t(this,a,c,b);this.children.push(a);return a};t.prototype.toStringfunction(){return\\\tnode(id\\\+this.id+\\\)\\\};t.prototype.collapseClickEventfunction(a){this.collapse!this.collapse;this.widget.paint()}})();\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/ihm/widgets/tidgraph.js\:{\title\:\$:/plugins/ihm/widgets/tidgraph.js\,\text\:\/*\\\\\\ntitle: $:/plugins/ihm/widgets/tidgraph.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nTidgraph widget to render HTML5/SVG graph of tiddlers\\n\\n\\\\*/\\n(function(){var erequire(\\\$:/core/modules/widgets/widget.js\\\).widget,cfunction(b,f){this.initialise(b,f)},drequire(\\\$:/plugins/ihm/tidgraph/utils.js\\\);c.prototypenew e;c.prototype.renderfunction(b,f){this.tidtree&&this.delTempTiddlers();this.parentDomNodeb;this.nextSiblingDomNodef;this.computeAttributes();this.execute();-1\\\tagging\\\,\\\linking\\\.indexOf(this.mode)&&(this.mode$tw.wiki.getTiddlerText(\\\$:/config/tidgraph/modes/\\\+this.mode)||this.mode);this.tidtree;this.tidtree.modethis.mode;\\nthis.tidtree.maxdepththis.maxdepth;this.tidtree.startatthis.startat;this.tidtree.nodetitlethis.nodetitle;this.tidtree.tooltipthis.tooltip;this.tidtree.filterthis.filter;this.tidtree.nocollapsethis.nocollapse;this.tidtree.documentthis.document;this.tidtree.nodetemplatethis.nodetemplate;this.tidtree.layoutthis.layout;this.templatesInUse$tw.utils.parseStringArray(this.nodetemplate);this.tidtree.id(new Date).valueOf();if($tw.wiki.getTiddler(this.startTid)){this.divthis.document.createElement(\\\div\\\);\\nthis.div.className\\\tgr-container tgr\\\;this.tabledivthis.document.createElement(\\\div\\\);this.tablediv.className\\\ihm-tgr-tablediv\\\;this.tablevoid 0;this.div.appendChild(this.tablediv);this.svgdivthis.document.createElement(\\\div\\\);this.svgdiv.className\\\tgr-svg-int\\\;this.div.appendChild(this.svgdiv);this.parentDomNode.insertBefore(this.div,this.nextSiblingDomNode);this.domNodes.push(this.div);this.tidtree.rootd.makeTidTree(this.startTid,this.tidtree,{widget:this});this.paint();var athis,cfunction(){a.svgdiv.innerHTML\\nd.buildSVG(a.tablediv,a.tidtree);a.oldresize&&a.oldresize()},efunction(){a.svgdiv.innerHTMLd.buildSVG(a.tablediv,a.tidtree)};this.div.onscrollfunction(){a.scroll_to||clearTimeout(a.scroll_to);a.scroll_tosetTimeout(e,100)};this.onresize_updated||(window.onresize&&void 0this.oldresize&&(this.oldresizewindow.onresize),window.onresizefunction(){a.resize_to||clearTimeout(a.resize_to);a.resize_tosetTimeout(c,100)},this.onresize_updated!0)}};c.prototype.delTempTiddlersfunction(){var b$tw.wiki.filterTiddlers(\\\prefix$:/temp/tidgraph/\\\+\\nthis.tidtree.id+\\\\\\);$tw.utils.each(b,function(b){$tw.wiki.deleteTiddler(b)})};c.prototype.paintfunction(){this.sidebar$tw.wiki.getTiddlerText(\\\$:/state/sidebar\\\);var bd.buildTable(this.startTid,this.tidtree);this.table?this.tablediv.replaceChild(b,this.table):this.tablediv.appendChild(b);this.svgdiv.innerHTMLd.buildSVG(this.tablediv,this.tidtree);this.tableb};c.prototype.executefunction(){this.startTidthis.getAttribute(\\\start\\\);this.modethis.getAttribute(\\\mode\\\,\\\tagging\\\);this.maxdepth\\nparseInt(this.getAttribute(\\\maxdepth\\\,\\\10\\\));this.startatthis.getAttribute(\\\startat\\\,\\\0\\\);this.nodetitlethis.getAttribute(\\\nodetitle\\\);this.tooltipthis.getAttribute(\\\tooltip\\\,\\\summary\\\);this.filterthis.getAttribute(\\\filter\\\,\\\!issystem\\\);this.nocollapsethis.hasAttribute(\\\nocollapse\\\);this.nodetemplatethis.getAttribute(\\\nodetemplate\\\,\\\\\\);this.layoutthis.getAttribute(\\\layout\\\,\\\E\\\);-1\\\E\\\,\\\S\\\.indexOf(this.layout)&&(this.layout\\\E\\\)};c.prototype.refreshfunction(b){var c!1,a;this.computeAttributes();\\nthis.execute();for(a in b)if((bdocument.getElementById(this.tidtree.id+\\\-\\\+encodeURIComponent(a))||d.isDescendant(a,this.startTid,this.tidtree)||-1!this.templatesInUse.indexOf(a))||(b(b$tw.wiki.getTiddler(a))&&b.hasTag(\\\$:/tags/Stylesheet\\\)?!0:!1),b||-1!a.indexOf(\\\$:/config/tidgraph/modes\\\)){c!0;break}$tw.wiki.getTiddlerText(\\\$:/state/sidebar\\\)!this.sidebar&&(c!0);return c?(this.refreshSelf(),!0):!1};exports.tidgraphc})();\\n\,\type\:\application/javascript\,\module-type\:\widget\}}}},{author:kixam,core-version:>5.1.8,created:20210303231904987,dependents:,description:datepicker plugin for TiddlyWiki5, based on Pikaday version 1.6.1,list:readme license usage,modified:20210303231904987,plugin-type:plugin,source:https://github.com/kixam/TW5-datepicker,title:$:/plugins/kixam/datepicker,version:0.5.2,type:application/json,text:{\tiddlers\:{\$:/plugins/kixam/datepicker/icon\:{\title\:\$:/plugins/kixam/datepicker/icon\,\tags\:\$:/tags/Image\,\text\:\\u003Csvg height\\\22pt\\\ width\\\22pt\\\ viewBox\\\0 0 128 128\\\>\\n\u003Cpath d\\\M 13.775391 0 L 2.0664062 6.8671875 L 2.0664062 20.599609 L 13.775391 27.464844 L 25.484375 20.599609 L 25.484375 6.8671875 L 13.775391 0 z M 9.6582031 3.6230469 L 10.292969 3.6230469 C 10.728856 3.6230469 11.101705 3.7794391 11.412109 4.0898438 C 11.722514 4.4002483 11.876953 4.7730982 11.876953 5.2089844 L 11.876953 6.1601562 L 15.681641 6.1601562 L 15.681641 5.2089844 C 15.681641 4.7730982 15.83608 4.4002483 16.146484 4.0898438 C 16.456889 3.7794391 16.829738 3.6230469 17.265625 3.6230469 L 17.900391 3.6230469 C 18.336278 3.6230469 18.709127 3.7794391 19.019531 4.0898438 C 19.329936 4.4002483 19.484375 4.7730982 19.484375 5.2089844 L 19.484375 6.1601562 L 20.753906 6.1601562 C 21.097333 6.1601562 21.393566 6.284192 21.644531 6.5351562 C 21.895499 6.7861224 22.021484 7.0843085 22.021484 7.4277344 L 22.021484 20.107422 C 22.021484 20.450848 21.895499 20.749034 21.644531 21 C 21.393566 21.250966 21.097333 21.375 20.753906 21.375 L 6.8046875 21.375 C 6.4612605 21.375 6.1650274 21.250966 5.9140625 21 C 5.6630976 20.749034 5.5371094 20.450848 5.5371094 20.107422 L 5.5371094 7.4277344 C 5.5371094 7.0843085 5.6630976 6.7861224 5.9140625 6.5351562 C 6.1650274 6.284192 6.4612605 6.1601563 6.8046875 6.1601562 L 8.0722656 6.1601562 L 8.0722656 5.2089844 C 8.0722656 4.7730982 8.2286584 4.4002483 8.5390625 4.0898438 C 8.8494667 3.7794391 9.2223157 3.6230469 9.6582031 3.6230469 z M 9.6582031 4.890625 C 9.5723471 4.890625 9.4982891 4.923586 9.4355469 4.9863281 C 9.3728059 5.0490687 9.3417969 5.1231279 9.3417969 5.2089844 L 9.3417969 8.0605469 C 9.3417969 8.1464033 9.3728059 8.222414 9.4355469 8.2851562 C 9.4982891 8.3478969 9.5723471 8.3789062 9.6582031 8.3789062 L 10.292969 8.3789062 C 10.378825 8.3789062 10.452884 8.3478969 10.515625 8.2851562 C 10.578367 8.222414 10.609375 8.1464033 10.609375 8.0605469 L 10.609375 5.2089844 C 10.609375 5.1231279 10.578367 5.0490687 10.515625 4.9863281 C 10.452884 4.923586 10.378825 4.890625 10.292969 4.890625 L 9.6582031 4.890625 z M 17.265625 4.890625 C 17.179769 4.890625 17.105711 4.923586 17.042969 4.9863281 C 16.980227 5.0490687 16.949219 5.1231279 16.949219 5.2089844 L 16.949219 8.0605469 C 16.949219 8.1464033 16.980227 8.222414 17.042969 8.2851562 C 17.105711 8.3478969 17.179769 8.3789062 17.265625 8.3789062 L 17.900391 8.3789062 C 17.986247 8.3789062 18.060305 8.3478969 18.123047 8.2851562 C 18.185788 8.222414 18.216797 8.1464033 18.216797 8.0605469 L 18.216797 5.2089844 C 18.216797 5.1231279 18.185788 5.0490687 18.123047 4.9863281 C 18.060305 4.923586 17.986247 4.890625 17.900391 4.890625 L 17.265625 4.890625 z M 6.8046875 9.9628906 L 6.8046875 12.816406 L 9.6582031 12.816406 L 9.6582031 9.9628906 L 6.8046875 9.9628906 z M 10.292969 9.9628906 L 10.292969 12.816406 L 13.462891 12.816406 L 13.462891 9.9628906 L 10.292969 9.9628906 z M 14.095703 9.9628906 L 14.095703 12.816406 L 17.265625 12.816406 L 17.265625 9.9628906 L 14.095703 9.9628906 z M 17.900391 9.9628906 L 17.900391 12.816406 L 20.753906 12.816406 L 20.753906 9.9628906 L 17.900391 9.9628906 z M 6.8046875 13.451172 L 6.8046875 16.621094 L 9.6582031 16.621094 L 9.6582031 13.451172 L 6.8046875 13.451172 z M 10.292969 13.451172 L 10.292969 16.621094 L 13.462891 16.621094 L 13.462891 13.451172 L 10.292969 13.451172 z M 14.095703 13.451172 L 14.095703 16.621094 L 17.265625 16.621094 L 17.265625 13.451172 L 14.095703 13.451172 z M 17.900391 13.451172 L 17.900391 16.621094 L 20.753906 16.621094 L 20.753906 13.451172 L 17.900391 13.451172 z M 6.8046875 17.253906 L 6.8046875 20.107422 L 9.6582031 20.107422 L 9.6582031 17.253906 L 6.8046875 17.253906 z M 10.292969 17.253906 L 10.292969 20.107422 L 13.462891 20.107422 L 13.462891 17.253906 L 10.292969 17.253906 z M 14.095703 17.253906 L 14.095703 20.107422 L 17.265625 20.107422 L 17.265625 17.253906 L 14.095703 17.253906 z M 17.900391 17.253906 L 17.900391 20.107422 L 20.753906 20.107422 L 20.753906 17.253906 L 17.900391 17.253906 z\\\ transform\\\scale(4.6545455,4.6545455)\\\ />\\n\u003C/svg>\\n\},\$:/plugins/kixam/datepicker/license\:{\title\:\$:/plugins/kixam/datepicker/license\,\text\:\!! Pikaday licence: BSD 2-clause simplified license|http://www.freebsd.org/copyright/freebsd-license.html and MIT|http://mit-license.org/\\n```\\nCopyright (c) 2014 David Bushell BSD & MIT license\\n\\nThe MIT License (MIT)\\n\\nCopyright (c) 2014 David Bushell\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\Software\\\), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in\\nall copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\\nTHE SOFTWARE.\\n\\nThe BSD License\\n\\nCopyright (c) 2014 David Bushell\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\\n\\n2. 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.\\n\\nTHIS 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 HOLDER 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.\\n```\\n\\n!! Plugin license: BSD 2-clause simplified license|http://www.freebsd.org/copyright/freebsd-license.html\\n```\\nCopyright (c) 2015, kixam\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this\\n list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice,\\n this list of conditions and the following disclaimer in the documentation\\n and/or other materials provided with the distribution.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\AS IS\\\\\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n```\\n\},\$:/plugins/kixam/datepicker/pikaday.css\:{\title\:\$:/plugins/kixam/datepicker/pikaday.css\,\text\:\@charset \\\UTF-8\\\;/*!\\n * Pikaday\\n * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/\\n */.pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:\\\Helvetica Neue\\\,Helvetica,Arial,sans-serif}.pika-single:before,.pika-single:after{content:\\\ \\\;display:table}.pika-single:after{clear:both}.pika-single{*zoom:1}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;*display:inline;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:bold;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity0);opacity:0}.pika-prev,.pika-next{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;color:rgba(0,0,0,0);white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5;*position:absolute;*top:0}.pika-prev:hover,.pika-next:hover{opacity:1}.pika-prev,.is-rtl .pika-next{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg);*left:0}.pika-next,.is-rtl .pika-prev{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII);*right:0}.pika-prev.is-disabled,.pika-next.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block;*display:inline}.pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.pika-table th,.pika-table td{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:bold;text-align:center}.pika-button{cursor:pointer;display:block;box-sizing:border-box;-moz-box-sizing:border-box;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.pika-week{font-size:11px;color:#999}.is-today .pika-button{color:#3af;font-weight:bold}.is-selected .pika-button,.has-event .pika-button{color:#fff;font-weight:bold;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.has-event .pika-button{background:#005da9;box-shadow:inset 0 1px 3px #0076c9}.is-disabled .pika-button,.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{color:#fff;background:#6cb31d;box-shadow:none;border-radius:3px}.is-endrange .pika-button{color:#fff;background:#3af;box-shadow:none;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-selection-disabled{pointer-events:none;cursor:default}.pika-button:hover,.pika-row.pick-whole-week:hover .pika-button{color:#fff;background:#ff8000;box-shadow:none;border-radius:3px}.pika-table abbr{border-bottom:0;cursor:help}.pika-time-container{clear:both}.pika-time{margin:7px auto 7px}.pika-time .pika-time-label{font-weight:bold;font-size:11px;color:#666;padding-right:.33em}\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/kixam/datepicker/pikaday.js\:{\title\:\$:/plugins/kixam/datepicker/pikaday.js\,\text\:\/*\\\\\\ntitle: $:/plugins/kixam/datepicker/pikaday.js\\ntype: application/javascript\\nmodule-type: library\\n\\n@preserve\\n\\\\*/\\n\\n(function(root,factory){\\\use strict\\\;var moment;if(typeof exports\\\object\\\){try{momentrequire(\\\$:/plugins/kixam/moment/moment.js\\\)}catch(e){}module.exportsfactory(moment)}else if(typeof define\\\function\\\&&define.amd){define(function(req){var id\\\moment\\\;try{momentreq(id)}catch(e){}return factory(moment)})}else{root.Pikadayfactory(root.moment)}})(this,function(moment){\\\use strict\\\;var hasMomenttypeof moment\\\function\\\,addEventfunction(el,e,callback,capture){if(!!window.addEventListener){el.addEventListener(e,callback,!!capture)}else{el.attachEvent(\\\on\\\+e,callback)}},removeEventfunction(el,e,callback,capture){if(!!window.addEventListener){el.removeEventListener(e,callback,!!capture)}else{el.detachEvent(\\\on\\\+e,callback)}},trimfunction(str){return str.trim?str.trim():str.replace(/^\\\\s+|\\\\s+$/g,\\\\\\)},hasClassfunction(el,cn){return(\\\ \\\+el.className+\\\ \\\).indexOf(\\\ \\\+cn+\\\ \\\)!-1},addClassfunction(el,cn){if(!hasClass(el,cn)){el.classNameel.className\\\\\\?cn:el.className+\\\ \\\+cn}},removeClassfunction(el,cn){el.classNametrim((\\\ \\\+el.className+\\\ \\\).replace(\\\ \\\+cn+\\\ \\\,\\\ \\\))},isArrayfunction(obj){return/Array/.test(Object.prototype.toString.call(obj))},isDatefunction(obj){return/Date/.test(Object.prototype.toString.call(obj))&&!isNaN(obj.getTime())},isWeekendfunction(date){var daydate.getDay();return day0||day6},isLeapYearfunction(year){return year%40&&year%100!0||year%4000},getDaysInMonthfunction(year,month){return31,isLeapYear(year)?29:28,31,30,31,30,31,31,30,31,30,31month},setToStartOfDayfunction(date){if(isDate(date))date.setHours(0,0,0,0)},compareDatesfunction(a,b){var _anew Date(a.getTime());var _bnew Date(b.getTime());setToStartOfDay(_a);setToStartOfDay(_b);return _a.getTime()_b.getTime()},extendfunction(to,from,overwrite){var prop,hasProp;for(prop in from){hasProptoprop!undefined;if(hasProp&&typeof fromprop\\\object\\\&&fromprop!null&&fromprop.nodeNameundefined){if(isDate(fromprop)){if(overwrite){topropnew Date(fromprop.getTime())}}else if(isArray(fromprop)){if(overwrite){topropfromprop.slice(0)}}else{topropextend({},fromprop,overwrite)}}else if(overwrite||!hasProp){topropfromprop}}return to},fireEventfunction(el,eventName,data){var ev;if(document.createEvent){evwindow.document.createEvent(\\\HTMLEvents\\\);ev.initEvent(eventName,true,false);evextend(ev,data);el.dispatchEvent(ev)}else if(document.createEventObject){evwindow.document.createEventObject();evextend(ev,data);el.fireEvent(\\\on\\\+eventName,ev)}},adjustCalendarfunction(calendar){if(calendar.month\u003C0){calendar.year-Math.ceil(Math.abs(calendar.month)/12);calendar.month+12}if(calendar.month>11){calendar.year+Math.floor(Math.abs(calendar.month)/12);calendar.month-12}return calendar},defaults{field:null,bound:undefined,ariaLabel:\\\Use the arrow keys to pick a date\\\,position:\\\bottom left\\\,reposition:true,format:null,inputFormats:null,toString:null,parse:null,defaultDate:null,setDefaultDate:false,firstDay:0,formatStrict:false,minDate:null,maxDate:null,yearRange:10,showWeekNumber:false,pickWholeWeek:false,minYear:0,maxYear:9999,minMonth:undefined,maxMonth:undefined,startRange:null,endRange:null,isRTL:false,yearSuffix:\\\\\\,showMonthAfterYear:false,showDaysInNextAndPreviousMonths:false,enableSelectionDaysInNextAndPreviousMonths:false,numberOfMonths:1,showTime:true,showMinutes:true,showSeconds:false,use24hour:false,incrementHourBy:1,incrementMinuteBy:1,incrementSecondBy:1,timeLabel:null,autoClose:true,mainCalendar:\\\left\\\,container:undefined,blurFieldOnSelect:true,i18n:{previousMonth:\\\Previous Month\\\,nextMonth:\\\Next Month\\\,months:\\\January\\\,\\\February\\\,\\\March\\\,\\\April\\\,\\\May\\\,\\\June\\\,\\\July\\\,\\\August\\\,\\\September\\\,\\\October\\\,\\\November\\\,\\\December\\\,weekdays:\\\Sunday\\\,\\\Monday\\\,\\\Tuesday\\\,\\\Wednesday\\\,\\\Thursday\\\,\\\Friday\\\,\\\Saturday\\\,weekdaysShort:\\\Sun\\\,\\\Mon\\\,\\\Tue\\\,\\\Wed\\\,\\\Thu\\\,\\\Fri\\\,\\\Sat\\\,midnight:\\\Midnight\\\,noon:\\\Noon\\\},theme:null,events:,onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:true},renderDayNamefunction(opts,day,abbr){day+opts.firstDay;while(day>7){day-7}return abbr?opts.i18n.weekdaysShortday:opts.i18n.weekdaysday},renderDayfunction(opts){var arr;var ariaSelected\\\false\\\;if(opts.isEmpty){if(opts.showDaysInNextAndPreviousMonths){arr.push(\\\is-outside-current-month\\\);if(!opts.enableSelectionDaysInNextAndPreviousMonths){arr.push(\\\is-selection-disabled\\\)}}else{return\u003Ctd class\\\is-empty\\\>\u003C/td>}}if(opts.isDisabled){arr.push(\\\is-disabled\\\)}if(opts.isToday){arr.push(\\\is-today\\\)}if(opts.isSelected){arr.push(\\\is-selected\\\);ariaSelected\\\true\\\}if(opts.hasEvent){arr.push(\\\has-event\\\)}if(opts.isInRange){arr.push(\\\is-inrange\\\)}if(opts.isStartRange){arr.push(\\\is-startrange\\\)}if(opts.isEndRange){arr.push(\\\is-endrange\\\)}return\u003Ctd data-day\\\+opts.day+\\\ class\\\+arr.join(\\\ \\\)+\\\ aria-selected\\\+ariaSelected+\\\>+\u003Cbutton class\\\pika-button pika-day\\\ type\\\button\\\ +data-pika-year\\\+opts.year+\\\ data-pika-month\\\+opts.month+\\\ data-pika-day\\\+opts.day+\\\>+opts.day+\\\\u003C/button>\\\+\\\\u003C/td>\\\},renderWeekfunction(d,m,y){var onejannew Date(y,0,1),weekNumMath.ceil(((new Date(y,m,d)-onejan)/864e5+onejan.getDay()+1)/7);return\u003Ctd class\\\pika-week\\\>+weekNum+\\\\u003C/td>\\\},renderRowfunction(days,isRTL,pickWholeWeek,isRowSelected){return\u003Ctr class\\\pika-row+(pickWholeWeek?\\\ pick-whole-week\\\:\\\\\\)+(isRowSelected?\\\ is-selected\\\:\\\\\\)+\\\>+(isRTL?days.reverse():days).join(\\\\\\)+\\\\u003C/tr>\\\},renderBodyfunction(rows){return\\\\u003Ctbody>\\\+rows.join(\\\\\\)+\\\\u003C/tbody>\\\},renderHeadfunction(opts){var i,arr;if(opts.showWeekNumber){arr.push(\\\\u003Cth>\u003C/th>\\\)}for(i0;i\u003C7;i++){arr.push(\u003Cth scope\\\col\\\>\u003Cabbr title\\\+renderDayName(opts,i)+\\\>+renderDayName(opts,i,true)+\\\\u003C/abbr>\u003C/th>\\\)}return\\\\u003Cthead>\u003Ctr>\\\+(opts.isRTL?arr.reverse():arr).join(\\\\\\)+\\\\u003C/tr>\u003C/thead>\\\},renderTitlefunction(instance,c,year,month,refYear,randId){var i,j,arr,optsinstance._o,isMinYearyearopts.minYear,isMaxYearyearopts.maxYear,html\u003Cdiv id\\\+randId+\\\ class\\\pika-title\\\ role\\\heading\\\ aria-live\\\assertive\\\>,monthHtml,yearHtml,prevtrue,nexttrue;for(arr,i0;i\u003C12;i++){arr.push(\u003Coption value\\\+(yearrefYear?i-c:12+i-c)+\\\+(imonth? selected\\\selected\\\:\\\\\\)+(isMinYear&&i\u003Copts.minMonth||isMaxYear&&i>opts.maxMonth?disabled\\\disabled\\\:\\\\\\)+\\\>\\\+opts.i18n.monthsi+\\\\u003C/option>\\\)}monthHtml\u003Cdiv class\\\pika-label\\\>+opts.i18n.monthsmonth+\u003Cselect class\\\pika-select pika-select-month\\\ tabindex\\\-1\\\>+arr.join(\\\\\\)+\\\\u003C/select>\u003C/div>\\\;if(isArray(opts.yearRange)){iopts.yearRange0;jopts.yearRange1+1}else{iyear-opts.yearRange;j1+year+opts.yearRange}for(arr;i\u003Cj&&i\u003Copts.maxYear;i++){if(i>opts.minYear){arr.push(\u003Coption value\\\+i+\\\+(iyear? selected\\\selected\\\:\\\\\\)+\\\>\\\+i+\\\\u003C/option>\\\)}}yearHtml\u003Cdiv class\\\pika-label\\\>+year+opts.yearSuffix+\u003Cselect class\\\pika-select pika-select-year\\\ tabindex\\\-1\\\>+arr.join(\\\\\\)+\\\\u003C/select>\u003C/div>\\\;if(opts.showMonthAfterYear){html+yearHtml+monthHtml}else{html+monthHtml+yearHtml}if(isMinYear&&(month0||opts.minMonth>month)){prevfalse}if(isMaxYear&&(month11||opts.maxMonth\u003Cmonth)){nextfalse}if(c0){html+\u003Cbutton class\\\pika-prev+(prev?\\\\\\:\\\ is-disabled\\\)+\\\ type\\\button\\\>+opts.i18n.previousMonth+\\\\u003C/button>\\\}if(cinstance._o.numberOfMonths-1){html+\u003Cbutton class\\\pika-next+(next?\\\\\\:\\\ is-disabled\\\)+\\\ type\\\button\\\>+opts.i18n.nextMonth+\\\\u003C/button>\\\}return html+\\\\u003C/div>\\\},renderTablefunction(opts,data,randId){return\u003Ctable cellpadding\\\0\\\ cellspacing\\\0\\\ class\\\pika-table\\\ role\\\grid\\\ aria-labelledby\\\+randId+\\\>+renderHead(opts)+renderBody(data)+\\\\u003C/table>\\\},renderTimePickerfunction(num_options,selected_val,select_class,display_func,increment_by){increment_byincrement_by||1;var to_return\u003Ctd>\u003Cselect class\\\pika-select +select_class+\\\>;for(var i0;i\u003Cnum_options;i+increment_by){to_return+\u003Coption value\\\+i+\\\ +(iselected_val?\\\selected\\\:\\\\\\)+\\\>\\\+display_func(i)+\\\\u003C/option>\\\}to_return+\\\\u003C/select>\u003C/td>\\\;return to_return},renderTimefunction(hh,mm,ss,opts){var to_return\u003Ctable cellpadding\\\0\\\ cellspacing\\\0\\\ class\\\pika-time\\\>\u003Ctbody>\u003Ctr>+(opts.timeLabel!null?\u003Ctd class\\\pika-time-label\\\>+opts.timeLabel+\\\\u003C/td>\\\:\\\\\\)+renderTimePicker(24,hh,\\\pika-select-hour\\\,function(i){if(opts.use24hour){return i}else{var to_returni%12+(i\u003C12?\\\ AM\\\:\\\ PM\\\);if(to_return\\\0 AM\\\){return opts.i18n.midnight}else if(to_return\\\0 PM\\\){return opts.i18n.noon}else{return to_return}}},opts.incrementHourBy);if(opts.showMinutes){to_return+\\\\u003Ctd>:\u003C/td>\\\+renderTimePicker(60,mm,\\\pika-select-minute\\\,function(i){if(i\u003C10)return\\\0\\\+i;return i},opts.incrementMinuteBy)}if(opts.showSeconds){to_return+\\\\u003Ctd>:\u003C/td>\\\+renderTimePicker(60,ss,\\\pika-select-second\\\,function(i){if(i\u003C10)return\\\0\\\+i;return i},opts.incrementSecondBy)}return to_return+\\\\u003C/tr>\u003C/tbody>\u003C/table>\\\},Pikadayfunction(options){var selfthis,optsself.config(options);self._onMouseDownfunction(e){if(!self._v){return}ee||window.event;var targete.target||e.srcElement;if(!target){return}if(!hasClass(target,\\\is-disabled\\\)){if(hasClass(target,\\\pika-button\\\)&&!hasClass(target,\\\is-empty\\\)&&!hasClass(target.parentNode,\\\is-disabled\\\)){var newDatenew Date(target.getAttribute(\\\data-pika-year\\\),target.getAttribute(\\\data-pika-month\\\),target.getAttribute(\\\data-pika-day\\\));var prevDateself._d||opts.defaultDate;if(prevDate&&isDate(prevDate)&&opts.showTime){newDate.setHours(prevDate.getHours());newDate.setMinutes(prevDate.getMinutes());if(opts.showSeconds){newDate.setSeconds(prevDate.getSeconds())}}self.setDate(newDate);if(opts.bound){window.setTimeout(function(){if(opts.autoClose){self.hide()}if(opts.blurFieldOnSelect&&opts.field){opts.field.blur()}},100)}}else if(hasClass(target,\\\pika-prev\\\)){self.prevMonth()}else if(hasClass(target,\\\pika-next\\\)){self.nextMonth()}}if(!hasClass(target,\\\pika-select\\\)){if(e.preventDefault){e.preventDefault()}else{e.returnValuefalse;return false}}else{self._ctrue}};self._onChangefunction(e){ee||window.event;var targete.target||e.srcElement;if(!target){return}if(hasClass(target,\\\pika-select-month\\\)){self.gotoMonth(target.value)}else if(hasClass(target,\\\pika-select-year\\\)){self.gotoYear(target.value)}else if(hasClass(target,\\\pika-select-hour\\\)){self.setTime(target.value)}else if(hasClass(target,\\\pika-select-minute\\\)){self.setTime(null,target.value)}else if(hasClass(target,\\\pika-select-second\\\)){self.setTime(null,null,target.value)}};self._onKeyChangefunction(e){ee||window.event;if(self.isVisible()){switch(e.keyCode){case 13:case 27:if(opts.field){opts.field.blur()}break;case 37:e.preventDefault();self.adjustDate(\\\subtract\\\,1);break;case 38:self.adjustDate(\\\subtract\\\,7);break;case 39:self.adjustDate(\\\add\\\,1);break;case 40:self.adjustDate(\\\add\\\,7);break}}};self._onInputChangefunction(e){var date;if(e.firedByself){return}if(opts.parse){dateopts.parse(opts.field.value,opts.format||opts.inputFormats)}else if(hasMoment){datemoment(opts.field.value,opts.inputFormats,opts.formatStrict);datedate&&date.isValid()?date.toDate():null}else{datenew Date(Date.parse(opts.field.value))}if(isDate(date)){self.setDate(date)}if(!self._v){self.show()}};self._onInputFocusfunction(){self.show()};self._onInputClickfunction(){self.show()};self._onInputBlurfunction(){var pElwindow.document.activeElement;do{if(hasClass(pEl,\\\pika-single\\\)){return}}while(pElpEl.parentNode);if(opts.autoClose&&!self._c){self._bwindow.setTimeout(function(){self.hide()},50)}self._cfalse};self._onClickfunction(e){ee||window.event;var targete.target||e.srcElement,pEltarget;if(!target){return}if(!!!window.addEventListener&&hasClass(target,\\\pika-select\\\)){if(!target.onchange){target.setAttribute(\\\onchange\\\,\\\return;\\\);addEvent(target,\\\change\\\,self._onChange)}}do{if(hasClass(pEl,\\\pika-single\\\)||pElopts.trigger||opts.showTime&&hasClass(pEl,\\\pika-time-container\\\)){return}}while(pElpEl.parentNode);if(self._v&&target!opts.trigger&&pEl!opts.trigger){self.hide()}};self.elwindow.document.createElement(\\\div\\\);self.el.className\\\pika-single\\\+(opts.isRTL?\\\ is-rtl\\\:\\\\\\)+(opts.theme?\\\ \\\+opts.theme:\\\\\\);addEvent(self.el,\\\mousedown\\\,self._onMouseDown,true);addEvent(self.el,\\\touchend\\\,self._onMouseDown,true);addEvent(self.el,\\\change\\\,self._onChange);if(opts.keyboardInput){addEvent(document,\\\keydown\\\,self._onKeyChange)}if(opts.field){if(opts.container){opts.container.appendChild(self.el)}else if(opts.bound){window.document.body.appendChild(self.el)}else{opts.field.parentNode.insertBefore(self.el,opts.field.nextSibling)}addEvent(opts.field,\\\change\\\,self._onInputChange);if(!opts.defaultDate){if(hasMoment&&opts.field.value){opts.defaultDatemoment(opts.field.value,opts.inputFormats).toDate()}else{opts.defaultDatenew Date(Date.parse(opts.field.value))}opts.setDefaultDatetrue}}var defDateopts.defaultDate;if(isDate(defDate)){if(opts.setDefaultDate){self.setDate(defDate,true)}else{self.gotoDate(defDate)}}else{self.gotoDate(new Date)}if(opts.bound){this.hide();self.el.className+\\\ is-bound\\\;addEvent(opts.trigger,\\\click\\\,self._onInputClick);addEvent(opts.trigger,\\\focus\\\,self._onInputFocus);addEvent(opts.trigger,\\\blur\\\,self._onInputBlur)}else{this.show()}};Pikaday.prototype{config:function(options){if(!this._o){this._oextend({},defaults,true)}var optsextend(this._o,options,true);opts.isRTL!!opts.isRTL;opts.autoClose!!opts.autoClose;opts.fieldopts.field&&opts.field.nodeName?opts.field:null;opts.themetypeof opts.theme\\\string\\\&&opts.theme?opts.theme:null;opts.bound!!(opts.bound!undefined?opts.field&&opts.bound:opts.field);opts.triggeropts.trigger&&opts.trigger.nodeName?opts.trigger:opts.field;opts.disableWeekends!!opts.disableWeekends;opts.disableDayFntypeof opts.disableDayFn\\\function\\\?opts.disableDayFn:null;var nomparseInt(opts.numberOfMonths,10)||1;opts.numberOfMonthsnom>4?4:nom;if(!isDate(opts.minDate)){opts.minDatefalse}if(!isDate(opts.maxDate)){opts.maxDatefalse}if(opts.minDate&&opts.maxDate&&opts.maxDate\u003Copts.minDate){opts.maxDateopts.minDatefalse}if(opts.minDate){this.setMinDate(opts.minDate)}if(opts.maxDate){this.setMaxDate(opts.maxDate)}if(isArray(opts.yearRange)){var fallback(new Date).getFullYear()-10;opts.yearRange0parseInt(opts.yearRange0,10)||fallback;opts.yearRange1parseInt(opts.yearRange1,10)||fallback}else{opts.yearRangeMath.abs(parseInt(opts.yearRange,10))||defaults.yearRange;if(opts.yearRange>100){opts.yearRange100}}if(opts.formatnull){opts.format\\\YYYY-MM-DD\\\;if(opts.showTime){opts.format+\\\ HH:mm:ss\\\}}if(!opts.inputFormats){opts.inputFormatsopts.format}return opts},toString:function(format){formatformat||this._o.format;if(!isDate(this._d)){return\\\\\\}if(this._o.toString){return this._o.toString(this._d,format)}if(hasMoment){return moment(this._d).format(format)}if(this._o.showTime){return this._d.toString()}return this._d.toDateString()},getMoment:function(){return hasMoment?moment(this._d):null},setMoment:function(date,preventOnSelect){if(hasMoment&&moment.isMoment(date)){this.setDate(date.toDate(),preventOnSelect)}},getDate:function(){return isDate(this._d)?new Date(this._d.getTime()):null},setTime:function(hours,minutes,seconds){if(!this._d){this._dnew Date;this._d.setHours(0,0,0,0)}if(hours){this._d.setHours(hours)}if(minutes){this._d.setMinutes(minutes)}if(seconds){this._d.setSeconds(seconds)}this.setDate(this._d)},setDate:function(date,preventOnSelect){if(!date){this._dnull;if(this._o.field){this._o.field.value\\\\\\;fireEvent(this._o.field,\\\change\\\,{firedBy:this})}return this.draw()}if(typeof date\\\string\\\){datenew Date(Date.parse(date))}if(!isDate(date)){return}var minthis._o.minDate,maxthis._o.maxDate;if(isDate(min)&&date\u003Cmin){datemin}else if(isDate(max)&&date>max){datemax}this._dnew Date(date.getTime());if(this._o.showTime&&!this._o.showSeconds){this._d.setSeconds(0)}else if(!this._o.showTime){setToStartOfDay(this._d)}this.gotoDate(this._d);if(this._o.field){this._o.field.valuethis.toString();fireEvent(this._o.field,\\\change\\\,{firedBy:this})}if(!preventOnSelect&&typeof this._o.onSelect\\\function\\\){this._o.onSelect.call(this,this.getDate())}},gotoDate:function(date){var newCalendartrue;if(!isDate(date)){return}if(this.calendars){var firstVisibleDatenew Date(this.calendars0.year,this.calendars0.month,1),lastVisibleDatenew Date(this.calendarsthis.calendars.length-1.year,this.calendarsthis.calendars.length-1.month,1),visibleDatedate.getTime();lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);lastVisibleDate.setDate(lastVisibleDate.getDate()-1);newCalendarvisibleDate\u003CfirstVisibleDate.getTime()||lastVisibleDate.getTime()\u003CvisibleDate}if(newCalendar){this.calendars{month:date.getMonth(),year:date.getFullYear(),hour:date.getHours(),minute:date.getMinutes(),second:date.getSeconds()};if(this._o.mainCalendar\\\right\\\){this.calendars0.month+1-this._o.numberOfMonths}}this.adjustCalendars()},adjustDate:function(sign,days){var daythis.getDate()||new Date;var differenceparseInt(days)*24*60*60*1e3;var newDay;if(sign\\\add\\\){newDaynew Date(day.valueOf()+difference)}else if(sign\\\subtract\\\){newDaynew Date(day.valueOf()-difference)}this.setDate(newDay)},adjustCalendars:function(){this.calendars0adjustCalendar(this.calendars0);for(var c1;c\u003Cthis._o.numberOfMonths;c++){this.calendarscadjustCalendar({month:this.calendars0.month+c,year:this.calendars0.year})}this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(month){if(!isNaN(month)){this.calendars0.monthparseInt(month,10);this.adjustCalendars()}},nextMonth:function(){this.calendars0.month++;this.adjustCalendars()},prevMonth:function(){this.calendars0.month--;this.adjustCalendars()},gotoYear:function(year){if(!isNaN(year)){this.calendars0.yearparseInt(year,10);this.adjustCalendars()}},setMinDate:function(value){if(value instanceof Date){if(!this._o.showTime)setToStartOfDay(value);this._o.minDatevalue;this._o.minYearvalue.getFullYear();this._o.minMonthvalue.getMonth()}else{this._o.minDatedefaults.minDate;this._o.minYeardefaults.minYear;this._o.minMonthdefaults.minMonth;this._o.startRangedefaults.startRange}this.draw()},setMaxDate:function(value){if(value instanceof Date){if(!this._o.showTime)setToStartOfDay(value);this._o.maxDatevalue;this._o.maxYearvalue.getFullYear();this._o.maxMonthvalue.getMonth()}else{this._o.maxDatedefaults.maxDate;this._o.maxYeardefaults.maxYear;this._o.maxMonthdefaults.maxMonth;this._o.endRangedefaults.endRange}this.draw()},setStartRange:function(value){this._o.startRangevalue},setEndRange:function(value){this._o.endRangevalue},draw:function(force){if(!this._v&&!force){return}var optsthis._o,minYearopts.minYear,maxYearopts.maxYear,minMonthopts.minMonth,maxMonthopts.maxMonth,html\\\\\\,randId;if(this._y\u003CminYear){this._yminYear;if(!isNaN(minMonth)&&this._m\u003CminMonth){this._mminMonth}}if(this._y>maxYear){this._ymaxYear;if(!isNaN(maxMonth)&&this._m>maxMonth){this._mmaxMonth}}randId\\\pika-title-\\\+Math.random().toString(36).replace(/^a-z+/g,\\\\\\).substr(0,2);for(var c0;c\u003Copts.numberOfMonths;c++){html+\u003Cdiv class\\\pika-lendar\\\>+renderTitle(this,c,this.calendarsc.year,this.calendarsc.month,this.calendars0.year,randId)+this.render(this.calendarsc.year,this.calendarsc.month,randId)+\\\\u003C/div>\\\}if(opts.showTime){var prevDatethis._d||this._o.defaultDate;html+\u003Cdiv class\\\pika-time-container\\\>+renderTime(prevDate&&isDate(prevDate)?prevDate.getHours():0,prevDate&&isDate(prevDate)?prevDate.getMinutes():0,prevDate&&isDate(prevDate)?prevDate.getSeconds():0,opts)+\\\\u003C/div>\\\}this.el.innerHTMLhtml;if(opts.bound){if(opts.field.type!\\\hidden\\\){window.setTimeout(function(){opts.trigger.focus()},1)}}if(typeof this._o.onDraw\\\function\\\){this._o.onDraw(this)}if(opts.bound){opts.field.setAttribute(\\\aria-label\\\,opts.ariaLabel)}},adjustPosition:function(){var field,pEl,width,height,viewportWidth,viewportHeight,scrollTop,left,top,clientRect;if(this._o.container)return;this.el.style.position\\\absolute\\\;fieldthis._o.trigger;pElfield;widththis.el.offsetWidth;heightthis.el.offsetHeight;viewportWidthwindow.innerWidth||window.document.documentElement.clientWidth;viewportHeightwindow.innerHeight||window.document.documentElement.clientHeight;scrollTopwindow.pageYOffset||document.body.scrollTop||window.document.documentElement.scrollTop;if(typeof field.getBoundingClientRect\\\function\\\){clientRectfield.getBoundingClientRect();leftclientRect.left+window.pageXOffset;topclientRect.bottom+window.pageYOffset}else{leftpEl.offsetLeft;toppEl.offsetTop+pEl.offsetHeight;while(pElpEl.offsetParent){left+pEl.offsetLeft;top+pEl.offsetTop}}if(this._o.reposition&&left+width>viewportWidth||this._o.position.indexOf(\\\right\\\)>-1&&left-width+field.offsetWidth>0){leftleft-width+field.offsetWidth}if(this._o.reposition&&top+height>viewportHeight+scrollTop||this._o.position.indexOf(\\\top\\\)>-1&&top-height-field.offsetHeight>0){toptop-height-field.offsetHeight}this.el.style.leftleft+\\\px\\\;this.el.style.toptop+\\\px\\\},render:function(year,month,randId){var optsthis._o,nownew Date,daysgetDaysInMonth(year,month),beforenew Date(year,month,1).getDay(),data,row;if(!opts.showTime)setToStartOfDay(now);if(opts.firstDay>0){before-opts.firstDay;if(before\u003C0){before+7}}var previousMonthmonth0?11:month-1,nextMonthmonth11?0:month+1,yearOfPreviousMonthmonth0?year-1:year,yearOfNextMonthmonth11?year+1:year,daysInPreviousMonthgetDaysInMonth(yearOfPreviousMonth,previousMonth);var cellsdays+before,aftercells;while(after>7){after-7}cells+7-after;var minDate_dateopts.minDate?new Date(opts.minDate.getFullYear(),opts.minDate.getMonth(),opts.minDate.getDate()):null;var maxDate_dateopts.maxDate?new Date(opts.maxDate.getFullYear(),opts.maxDate.getMonth(),opts.maxDate.getDate()):null;var isWeekSelectedfalse;for(var i0,r0;i\u003Ccells;i++){var daynew Date(year,month,1+(i-before)),isSelectedisDate(this._d)?compareDates(day,this._d):false,isTodaycompareDates(day,now),hasEventopts.events.indexOf(day.toDateString())!-1?true:false,isEmptyi\u003Cbefore||i>days+before,dayNumber1+(i-before),monthNumbermonth,yearNumberyear,isStartRangeopts.startRange&&compareDates(opts.startRange,day),isEndRangeopts.endRange&&compareDates(opts.endRange,day),isInRangeopts.startRange&&opts.endRange&&opts.startRange\u003Cday&&day\u003Copts.endRange,isDisabledminDate_date&&day\u003CminDate_date||maxDate_date&&day>maxDate_date||opts.disableWeekends&&isWeekend(day)||opts.disableDayFn&&opts.disableDayFn(day);if(isEmpty){if(i\u003Cbefore){dayNumberdaysInPreviousMonth+dayNumber;monthNumberpreviousMonth;yearNumberyearOfPreviousMonth}else{dayNumberdayNumber-days;monthNumbernextMonth;yearNumberyearOfNextMonth}}var dayConfig{day:dayNumber,month:monthNumber,year:yearNumber,hasEvent:hasEvent,isSelected:isSelected,isToday:isToday,isDisabled:isDisabled,isEmpty:isEmpty,isStartRange:isStartRange,isEndRange:isEndRange,isInRange:isInRange,showDaysInNextAndPreviousMonths:opts.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:opts.enableSelectionDaysInNextAndPreviousMonths};if(opts.pickWholeWeek&&isSelected){isWeekSelectedtrue}row.push(renderDay(dayConfig));if(++r7){if(opts.showWeekNumber){row.unshift(renderWeek(i-before,month,year))}data.push(renderRow(row,opts.isRTL,opts.pickWholeWeek,isWeekSelected));row;r0;isWeekSelectedfalse}}return renderTable(opts,data,randId)},isVisible:function(){return this._v},show:function(){if(!this.isVisible()){this._vtrue;this.draw();removeClass(this.el,\\\is-hidden\\\);if(this._o.bound){addEvent(document,\\\click\\\,this._onClick);this.adjustPosition()}if(typeof this._o.onOpen\\\function\\\){this._o.onOpen.call(this)}}},hide:function(){var vthis._v;if(v!false){if(this._o.bound){removeEvent(document,\\\click\\\,this._onClick)}this.el.style.position\\\static\\\;this.el.style.left\\\auto\\\;this.el.style.top\\\auto\\\;addClass(this.el,\\\is-hidden\\\);this._vfalse;if(v!undefined&&typeof this._o.onClose\\\function\\\){this._o.onClose.call(this)}}},destroy:function(){var optsthis._o;this.hide();removeEvent(this.el,\\\mousedown\\\,this._onMouseDown,true);removeEvent(this.el,\\\touchend\\\,this._onMouseDown,true);removeEvent(this.el,\\\change\\\,this._onChange);if(opts.keyboardInput){removeEvent(document,\\\keydown\\\,this._onKeyChange)}if(opts.field){removeEvent(opts.field,\\\change\\\,this._onInputChange);if(opts.bound){removeEvent(opts.trigger,\\\click\\\,this._onInputClick);removeEvent(opts.trigger,\\\focus\\\,this._onInputFocus);removeEvent(opts.trigger,\\\blur\\\,this._onInputBlur)}}if(this.el.parentNode){this.el.parentNode.removeChild(this.el)}}};return Pikaday});\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/kixam/datepicker/readme\:{\title\:\$:/plugins/kixam/datepicker/readme\,\text\:\! ~DatePicker\\n\\nA plugin for TiddlyWiki|http://tiddlywiki.com 5, that provides Pikaday|https://github.com/dbushell/Pikaday.\\n\},\$:/plugins/kixam/datepicker/usage\:{\title\:\$:/plugins/kixam/datepicker/usage\,\text\:\`\u003C$edit-date>`\\n\\nThis plugin can pick days and times.\\n\\n!! attributes\\nAll attributes are optional.\\n\\n|!Attribute|!Purpose|!Default value|\\n|`tiddler`|Edited tiddler|//current tiddler//|\\n|`field`|Edited field|`created`|\\n|`format`|Date format as it is shown in input control, in moment.js|http://momentjs.coms parse+string format|http://momentjs.com/docs/#/parsing/string-format/|`YYYY-MM-DD`|\\n|`firstDay`|First day of the week (0: Sunday, 1: Monday, etc.)|`0`|\\n|`fieldFormat`|Date format used to save into the field, in moment.js|http://momentjs.coms parse+string format|http://momentjs.com/docs/#/parsing/string-format/|`YYYYMMDDHHmmssSSS`|\\n|`placeholder`|Placeholder|//empty//|\\n|`tag`|HTML tag to render the editor|`input`|\\n|`index`|The index to edit|//empty//|\\n|`class`|A CSS class to be assigned to the generated HTML editing element|\\n|`attributes`|JSON Tiddler|http://tiddlywiki.com/#JSONTiddlers containing HTML attributes attached to the HTML object used to render the editor, typically `style`|//empty//|\\n|`icon`|Image tiddler or URL to an image that will be rendered next to the `tag`. When clicked, it will trigger the date picker|//empty//|\\n|`showTime`|Show time as well as date|//not set//|\\n|`showSeconds`|If `showTime` is set, shows seconds as well|//not set//|\\n|`use24hour`|If `showTime` is set, use 24-hour format|//not set//|\\n\},\$:/plugins/kixam/datepicker/widget.datepicker.js\:{\title\:\$:/plugins/kixam/datepicker/widget.datepicker.js\,\text\:\/*\\\\\\ntitle: $:/plugins/kixam/datepicker/widget.datepicker.js\\ntype: application/javascript\\nmodule-type: widget\\n\\n A widget for displaying date pickers using Pikaday at https://github.com/owenmead/Pikaday\\n\\n For full help see $:/plugins/kixam/datepicker/usage\\n\\n TODO: use HTML5 \\\date\\\ (and not \\\datetime-local\\\) input types if available\\n TODO: set field type/flag to \\\date\\\ to make TW5 render {{!!ourField}} as expected, i.e. like it renders e.g. {{!!created}}\\n TODO: use our widget for system date fields (created, modified, ...)\\n\\\\*/\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\n(function() {\\n use strict;\\n\\n var Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n var moment require(\\\$:/plugins/kixam/moment/moment.js\\\);\\n var pikaday require(\\\$:/plugins/kixam/datepicker/pikaday.js\\\); // this is a modified version of pikaday.js, see build.sh\\n var image require(\\\$:/core/modules/widgets/image.js\\\).image;\\n\\n var DatePickerWidget function(parseTreeNode, options) {\\n Widget.call(this);\\n this.initialise(parseTreeNode, options);\\n this.options options;\\n };\\n\\n DatePickerWidget.prototype new Widget();\\n\\n DatePickerWidget.prototype.render function(parent,nextSibling) {\\n this.computeAttributes();\\n this.renderChildren(parent,nextSibling);\\n this.execute();\\n this.parentDomNode parent;\\n\\n // set HTML tag\\n if(!this.editTag || $tw.config.htmlUnsafeElements.indexOf(this.editTag) ! -1) {\\n this.editTag \\\input\\\;\\n }\\n\\n // set HTML item attributes\\n if(this.editAttributesTiddlerName) {\\n this.editAttributes $tw.wiki.getTiddlerData(this.editAttributesTiddlerName, {});\\n }\\n\\n // create HTML item\\n this.editor $tw.utils.domMaker(this.editTag, {attributes: this.editAttributes});\\n\\n if(this.editPlaceholder) {\\n this.editor.setAttribute(\\\placeholder\\\,this.editPlaceholder);\\n }\\n\\n if(this.editClass) {\\n this.editor.setAttribute(\\\class\\\,this.editClass);\\n }\\n\\n // render HTML item\\n parent.insertBefore(this.editor, nextSibling);\\n this.domNodes.push(this.editor);\\n\\n // render icon\\n if(this.iconPath) {\\n var tiddler this.wiki.getTiddler(this.iconPath);\\n if(tiddler && tiddler.hasTag(\\\$:/tags/Image\\\)) {\\n // this is a system icon tiddler: just transclude the tiddler\\n this.icon $tw.utils.domMaker(\\\span\\\, {innerHTML: tiddler.fields.text});\\n parent.insertBefore(this.icon, this.editor);\\n this.domNodes.push(this.icon);\\n } else {\\n // this is something else: render it using \u003C$image> widget\\n var ptn this.parseTreeNode;\\n ptn.attributes {source: {name: \\\source\\\, type: \\\string\\\, value: this.iconPath} };\\n this.icon new image(ptn, this.options);\\n this.icon.render(this.parentDomNode, this.editor);\\n }\\n }\\n\\n this.onPickerDateSelect this.onPickerDateSelect.bind(this);\\n\\n var langprefix \\\$:/languages/\\\.length,\\n lang $tw.wiki.getTiddlerText(\\\$:/language\\\).substring(langprefix, langprefix + 2);\\n if(lang \\\zh\\\) {\\n // TW5 does not use standard codes for Chinese\\n var suffix $tw.wiki.getTiddlerText(\\\$:/language\\\);\\n suffix suffix.substring(suffix.length-1);\\n if(suffix \\\s\\\) {\\n lang \\\zh-cn\\\; //simplified\\n } else {\\n lang \\\zh-tw\\\; //traditional\\n }\\n }\\n\\n var locale moment.localeData(moment.locale(lang, \\\en\\\)),\\n i18n {\\n previousMonth : \\\Previous Month\\\,\\n nextMonth : \\\Next Month\\\,\\n months : locale._months,\\n monthsShort : locale._monthsShort,\\n weekdays : locale._weekdays,\\n weekdaysShort : locale._weekdaysShort,\\n };\\n\\n this.picker new pikaday({\\n field: this.editor,\\n trigger: this.icon || this.editor,\\n format: this.editFormat,\\n firstDay: this.firstDay,\\n onSelect: this.onPickerDateSelect,\\n showTime: this.showTime,\\n showSeconds: this.showSeconds,\\n use24hour: this.use24hour,\\n i18n: i18n,\\n });\\n\\n this.refreshSelf();\\n };\\n\\n DatePickerWidget.prototype.execute function() {\\n // Get our parameters\\n this.showTime this.getAttribute(\\\showTime\\\);\\n this.showSeconds this.getAttribute(\\\showSeconds\\\);\\n this.use24hour this.getAttribute(\\\use24hour\\\);\\n\\n var defaultFormat \\\YYYY-MM-DD\\\;\\n if(this.showTime) {\\n if(this.use24hour) defaultFormat + \\\ HH\\\;\\n else defaultFormat + \\\ hh\\\;\\n defaultFormat + \\\:mm\\\;\\n if(this.showSeconds) defaultFormat + \\\:ss\\\;\\n }\\n this.editFormat this.getAttribute(\\\format\\\, defaultFormat);\\n this.firstDay parseInt(this.getAttribute(\\\firstDay\\\, \\\0\\\));\\n this.saveFormat this.getAttribute(\\\fieldFormat\\\, \\\YYYYMMDDHHmmssSSS\\\);\\n this.editTitle this.getAttribute(\\\tiddler\\\, this.getVariable(\\\currentTiddler\\\));\\n this.editField this.getAttribute(\\\field\\\,\\\created\\\);\\n this.editIndex this.getAttribute(\\\index\\\);\\n this.editClass this.getAttribute(\\\class\\\);\\n this.editPlaceholder this.getAttribute(\\\placeholder\\\);\\n this.editTag this.getAttribute(\\\tag\\\);\\n this.editAttributesTiddlerName this.getAttribute(\\\attributes\\\);\\n this.iconPath this.getAttribute(\\\icon\\\);\\n };\\n\\n // Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n DatePickerWidget.prototype.refresh function(changedTiddlers) {\\n var changedAttributes this.computeAttributes();\\n // Refresh if an attribute has changed, or the type associated with the target tiddler has changed\\n if(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlersthis.editTitle) {\\n this.refreshSelf();\\n return true;\\n } else {\\n return this.refreshChildren(changedTiddlers);\\n }\\n };\\n\\n DatePickerWidget.prototype.refreshSelf function() {\\n var val moment.utc(this.getEditInfo().value, this.saveFormat);\\n if(val.isValid()) {\\n this.editor.value val.format(this.editFormat);\\n this.picker.setMoment(val, true);\\n }\\n }\\n\\n DatePickerWidget.prototype.onPickerDateSelect function() {\\n var val this.picker.getMoment();\\n if(this.showTime) val val.utc();\\n this.saveChanges(val.format(this.saveFormat));\\n $tw.rootWidget.dispatchEvent({type: \\\tm-auto-save-wiki\\\});\\n };\\n\\n// ---------------------------------------------------------- //\\n// --- inspired from $:/core/modules/widgets/edit-text.js --- //\\n// ---------------------------------------------------------- //\\n\\n DatePickerWidget.prototype.saveChanges function(text) {\\n var editInfo this.getEditInfo();\\n if(text ! editInfo.value) {\\n editInfo.update(text);\\n }\\n };\\n\\n DatePickerWidget.prototype.getEditInfo function() {\\n // Get the edit value\\n var self this,\\n value,\\n update;\\n if(this.editIndex) {\\n value this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\\n update function(value) {\\n var data self.wiki.getTiddlerData(self.editTitle,{});\\n if(dataself.editIndex ! value) {\\n dataself.editIndex value;\\n self.wiki.setTiddlerData(self.editTitle,data);\\n }\\n };\\n } else {\\n // Get the current tiddler and the field name\\n var tiddler this.wiki.getTiddler(this.editTitle);\\n if(tiddler) {\\n // If weve got a tiddler, the value to display is the field string value\\n value tiddler.getFieldString(this.editField);\\n } else {\\n // Otherwise, we need to construct a default value for the editor\\n switch(this.editField) {\\n case \\\text\\\:\\n value \\\Type the text for the tiddler \\\ + this.editTitle + \\\\\\;\\n break;\\n case \\\title\\\:\\n value this.editTitle;\\n break;\\n default:\\n value \\\\\\;\\n break;\\n }\\n if(this.editDefault ! undefined) {\\n value this.editDefault;\\n }\\n }\\n update function(value) {\\n var tiddler self.wiki.getTiddler(self.editTitle),\\n updateFields {\\n title: self.editTitle\\n };\\n updateFieldsself.editField value;\\n self.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\\n };\\n }\\n return {value: value, update: update};\\n };\\n\\n// ---------------------------------------------------------- //\\n// ---------------------------------------------------------- //\\n// ---------------------------------------------------------- //\\n\\n exports\\\edit-date\\\ DatePickerWidget;\\n}\\n());\\n\,\type\:\application/javascript\,\module-type\:\widget\}}}},{author:kixam,core-version:>5.1.8,created:20210307161555733,dependents:,description:moment.js plugin for TiddlyWiki5,list:readme license,modified:20210307161555734,plugin-type:plugin,source:https://github.com/kixam/TW5-moment.js,title:$:/plugins/kixam/moment,version:2.24.0,type:application/json,text:{\tiddlers\:{\$:/plugins/kixam/moment/icon\:{\title\:\$:/plugins/kixam/moment/icon\,\tags\:\$:/tags/Image\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg height\\\22pt\\\ width\\\22pt\\\ viewBox\\\0 0 128 128\\\>\\n\u003Cpath d\\\m 64.116816,0 -54.4965957,31.959746 0.00139,63.919491 54.4965967,31.959743 54.496603,-31.959743 0,-63.919491 L 64.118211,0 Z M 63.842544,28.318892 A 35.326327,35.326327 0 0 1 99.17259,63.645219 35.326327,35.326327 0 0 1 63.842544,98.975265 35.326327,35.326327 0 0 1 28.516216,63.645219 35.326327,35.326327 0 0 1 63.842544,28.318892 Z m 0,4.775599 c -16.870097,0 -30.550728,13.680631 -30.550728,30.550728 0,16.874746 13.680631,30.555841 30.550728,30.555841 16.874745,0 30.555841,-13.681095 30.555841,-30.555841 0,-16.870097 -13.681096,-30.550728 -30.555841,-30.550728 z m 0,1.906893 c 1.06455,0 1.910611,0.860008 1.910611,1.915725 l 0,28.638722 -17.190856,0 c -1.027361,0 -1.905499,-0.85536 -1.905499,-1.910612 0,-1.059902 0.854895,-1.905963 1.905499,-1.905963 l 13.374282,0 0,-24.81285 c 0,-1.06362 0.855359,-1.925022 1.905963,-1.925022 z\\\/>\\n\u003C/svg>\\n\},\$:/plugins/kixam/moment/license\:{\title\:\$:/plugins/kixam/moment/license\,\text\:\!! moment.js licence: MIT|http://mit-license.org/\\n```\\nCopyright (c) 2011-2015 Tim Wood, Iskren Chernev, Moment.js contributors\\n\\nPermission is hereby granted, free of charge, to any person\\nobtaining a copy of this software and associated documentation\\nfiles (the \\\Software\\\), to deal in the Software without\\nrestriction, including without limitation the rights to use,\\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the\\nSoftware is furnished to do so, subject to the following\\nconditions:\\n\\nThe above copyright notice and this permission notice shall be\\nincluded in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND,\\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\\nOTHER DEALINGS IN THE SOFTWARE.\\n```\\n\\n!! Plugin license: BSD 2-clause simplified license|http://www.freebsd.org/copyright/freebsd-license.html\\n```\\nCopyright (c) 2015, kixam\\nAll rights reserved.\\n\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are met:\\n\\n1. Redistributions of source code must retain the above copyright notice, this\\n list of conditions and the following disclaimer.\\n\\n2. Redistributions in binary form must reproduce the above copyright notice,\\n this list of conditions and the following disclaimer in the documentation\\n and/or other materials provided with the distribution.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \\\AS IS\\\\\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n```\\n\},\$:/plugins/kixam/moment/moment.js\:{\title\:\$:/plugins/kixam/moment/moment.js\,\text\:\!function(e,a){\\\object\\\typeof exports&&\\\undefined\\\!typeof module?module.exportsa():\\\function\\\typeof define&&define.amd?define(a):e.momenta()}(this,function(){\\\use strict\\\;var e,n;function l(){return e.apply(null,arguments)}function _(e){return e instanceof Array||\\\object Array\\\Object.prototype.toString.call(e)}function i(e){return null!e&&\\\object Object\\\Object.prototype.toString.call(e)}function o(e){return void 0e}function m(e){return\\\number\\\typeof e||\\\object Number\\\Object.prototype.toString.call(e)}function u(e){return e instanceof Date||\\\object Date\\\Object.prototype.toString.call(e)}function M(e,a){var t,s;for(t0;t\u003Ce.length;++t)s.push(a(et,t));return s}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function L(e,a){for(var t in a)h(a,t)&&(etat);return h(a,\\\toString\\\)&&(e.toStringa.toString),h(a,\\\valueOf\\\)&&(e.valueOfa.valueOf),e}function c(e,a,t,s){return Sa(e,a,t,s,!0).utc()}function Y(e){return nulle._pf&&(e._pf{empty:!1,unusedTokens:,unusedInput:,overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function y(e){if(nulle._isValid){var aY(e),tn.call(a.parsedDateParts,function(e){return null!e}),s!isNaN(e._d.getTime())&&a.overflow\u003C0&&!a.empty&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(ss&&0a.charsLeftOver&&0a.unusedTokens.length&&void 0a.bigHour),null!Object.isFrozen&&Object.isFrozen(e))return s;e._isValids}return e._isValid}function f(e){var ac(NaN);return null!e?L(Y(a),e):Y(a).userInvalidated!0,a}nArray.prototype.some?Array.prototype.some:function(e){for(var aObject(this),ta.length>>>0,s0;s\u003Ct;s++)if(s in a&&e.call(this,as,s,a))return!0;return!1};var dl.momentProperties;function k(e,a){var t,s,n;if(o(a._isAMomentObject)||(e._isAMomentObjecta._isAMomentObject),o(a._i)||(e._ia._i),o(a._f)||(e._fa._f),o(a._l)||(e._la._l),o(a._strict)||(e._stricta._strict),o(a._tzm)||(e._tzma._tzm),o(a._isUTC)||(e._isUTCa._isUTC),o(a._offset)||(e._offseta._offset),o(a._pf)||(e._pfY(a)),o(a._locale)||(e._localea._locale),0\u003Cd.length)for(t0;t\u003Cd.length;t++)o(nasdt)||(esn);return e}var a!1;function p(e){k(this,e),this._dnew Date(null!e._d?e._d.getTime():NaN),this.isValid()||(this._dnew Date(NaN)),!1a&&(a!0,l.updateOffset(this),a!1)}function D(e){return e instanceof p||null!e&&null!e._isAMomentObject}function T(e){return e\u003C0?Math.ceil(e)||0:Math.floor(e)}function g(e){var a+e,t0;return 0!a&&isFinite(a)&&(tT(a)),t}function r(e,a,t){var s,nMath.min(e.length,a.length),dMath.abs(e.length-a.length),r0;for(s0;s\u003Cn;s++)(t&&es!as||!t&&g(es)!g(as))&&r++;return r+d}function w(e){!1l.suppressDeprecationWarnings&&\\\undefined\\\!typeof console&&console.warn&&console.warn(\\\Deprecation warning: \\\+e)}function t(n,d){var r!0;return L(function(){if(null!l.deprecationHandler&&l.deprecationHandler(null,n),r){for(var e,a,t0;t\u003Carguments.length;t++){if(e\\\\\\,\\\object\\\typeof argumentst){for(var s in e+\\\\\\\n\\\+t+\\\ \\\,arguments0)e+s+\\\: \\\+arguments0s+\\\, \\\;ee.slice(0,-2)}else eargumentst;a.push(e)}w(n+\\\\\\\nArguments: \\\+Array.prototype.slice.call(a).join(\\\\\\)+\\\\\\\n\\\+(new Error).stack),r!1}return d.apply(this,arguments)},d)}var s,v{};function S(e,a){null!l.deprecationHandler&&l.deprecationHandler(e,a),ve||(w(a),ve!0)}function H(e){return e instanceof Function||\\\object Function\\\Object.prototype.toString.call(e)}function b(e,a){var t,sL({},e);for(t in a)h(a,t)&&(i(et)&&i(at)?(st{},L(st,et),L(st,at)):null!at?stat:delete st);for(t in e)h(e,t)&&!h(a,t)&&i(et)&&(stL({},st));return s}function j(e){null!e&&this.set(e)}l.suppressDeprecationWarnings!1,l.deprecationHandlernull,sObject.keys?Object.keys:function(e){var a,t;for(a in e)h(e,a)&&t.push(a);return t};var x{};function O(e,a){var te.toLowerCase();xtxt+\\\s\\\xae}function P(e){return\\\string\\\typeof e?xe||xe.toLowerCase():void 0}function W(e){var a,t,s{};for(t in e)h(e,t)&&(aP(t))&&(saet);return s}var A{};function E(e,a){Aea}function F(e,a,t){var s\\\\\\+Math.abs(e),na-s.length;return(0\u003Ce?t?\\\+\\\:\\\\\\:\\\-\\\)+Math.pow(10,Math.max(0,n)).toString().substr(1)+s}var z/(\\\\^\\\\*\\\\)|(\\\\\\\\)?(Hhmm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|wo|w?|Wo|W?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,J/(\\\\^\\\\*\\\\)|(\\\\\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,N{},R{};function C(e,a,t,s){var ns;\\\string\\\typeof s&&(nfunction(){return thiss()}),e&&(Ren),a&&(Ra0function(){return F(n.apply(this,arguments),a1,a2)}),t&&(Rtfunction(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function I(e,a){return e.isValid()?(aU(a,e.localeData()),NaNa||function(s){var e,n,a,ds.match(z);for(e0,nd.length;e\u003Cn;e++)Rde?deRde:de(ade).match(/\\\\\\\\s\\\\S/)?a.replace(/^\\\\|\\\\$/g,\\\\\\):a.replace(/\\\\\\\\/g,\\\\\\);return function(e){var a,t\\\\\\;for(a0;a\u003Cn;a++)t+H(da)?da.call(e,s):da;return t}}(a),Na(e)):e.localeData().invalidDate()}function U(e,a){var t5;function s(e){return a.longDateFormat(e)||e}for(J.lastIndex0;0\u003Ct&&J.test(e);)ee.replace(J,s),J.lastIndex0,t-1;return e}var G/\\\\d/,V/\\\\d\\\\d/,K/\\\\d{3}/,Z/\\\\d{4}/,$/+-?\\\\d{6}/,B/\\\\d\\\\d?/,q/\\\\d\\\\d\\\\d\\\\d?/,Q/\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d?/,X/\\\\d{1,3}/,ee/\\\\d{1,4}/,ae/+-?\\\\d{1,6}/,te/\\\\d+/,se/+-?\\\\d+/,ne/Z|+-\\\\d\\\\d:?\\\\d\\\\d/gi,de/Z|+-\\\\d\\\\d(?::?\\\\d\\\\d)?/gi,re/0-9{0,256}a-z\\\\u00A0-\\\\u05FF\\\\u0700-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFF07\\\\uFF10-\\\\uFFEF{1,256}|\\\\u0600-\\\\u06FF\\\\/{1,256}(\\\\s*?\\\\u0600-\\\\u06FF{1,256}){1,2}/i,_e{};function ie(e,t,s){_eeH(t)?t:function(e,a){return e&&s?s:t}}function oe(e,a){return h(_e,e)?_ee(a._strict,a._locale):new RegExp(me(e.replace(\\\\\\\\\\\\\\,\\\\\\).replace(/\\\\\\\\(\\\\)|\\\\\\\\(\\\\)|\\\\(^\\\\\\\\*)\\\\|\\\\\\\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function me(e){return e.replace(/-\\\\/\\\\\\\\^$*+?.()|\\\\{}/g,\\\\\\\\\\\$&\\\)}var ue{};function le(e,t){var a,st;for(\\\string\\\typeof e&&(ee),m(t)&&(sfunction(e,a){atg(e)}),a0;a\u003Ce.length;a++)ueeas}function Me(e,n){le(e,function(e,a,t,s){t._wt._w||{},n(e,t._w,t,s)})}var he0,Le1,ce2,Ye3,ye4,fe5,ke6,pe7,De8;function Te(e){return ge(e)?366:365}function ge(e){return e%40&&e%100!0||e%4000}C(\\\Y\\\,0,0,function(){var ethis.year();return e\u003C9999?\\\\\\+e:\\\+\\\+e}),C(0,\\\YY\\\,2,0,function(){return this.year()%100}),C(0,\\\YYYY\\\,4,0,\\\year\\\),C(0,\\\YYYYY\\\,5,0,\\\year\\\),C(0,\\\YYYYYY\\\,6,!0,0,\\\year\\\),O(\\\year\\\,\\\y\\\),E(\\\year\\\,1),ie(\\\Y\\\,se),ie(\\\YY\\\,B,V),ie(\\\YYYY\\\,ee,Z),ie(\\\YYYYY\\\,ae,$),ie(\\\YYYYYY\\\,ae,$),le(\\\YYYYY\\\,\\\YYYYYY\\\,he),le(\\\YYYY\\\,function(e,a){ahe2e.length?l.parseTwoDigitYear(e):g(e)}),le(\\\YY\\\,function(e,a){ahel.parseTwoDigitYear(e)}),le(\\\Y\\\,function(e,a){aheparseInt(e,10)}),l.parseTwoDigitYearfunction(e){return g(e)+(68\u003Cg(e)?1900:2e3)};var we,veSe(\\\FullYear\\\,!0);function Se(a,t){return function(e){return null!e?(be(this,a,e),l.updateOffset(this,t),this):He(this,a)}}function He(e,a){return e.isValid()?e._d\\\get\\\+(e._isUTC?\\\UTC\\\:\\\\\\)+a():NaN}function be(e,a,t){e.isValid()&&!isNaN(t)&&(\\\FullYear\\\a&&ge(e.year())&&1e.month()&&29e.date()?e._d\\\set\\\+(e._isUTC?\\\UTC\\\:\\\\\\)+a(t,e.month(),je(t,e.month())):e._d\\\set\\\+(e._isUTC?\\\UTC\\\:\\\\\\)+a(t))}function je(e,a){if(isNaN(e)||isNaN(a))return NaN;var t,s(a%(t12)+t)%t;return e+(a-s)/12,1s?ge(e)?29:28:31-s%7%2}weArray.prototype.indexOf?Array.prototype.indexOf:function(e){var a;for(a0;a\u003Cthis.length;++a)if(thisae)return a;return-1},C(\\\M\\\,\\\MM\\\,2,\\\Mo\\\,function(){return this.month()+1}),C(\\\MMM\\\,0,0,function(e){return this.localeData().monthsShort(this,e)}),C(\\\MMMM\\\,0,0,function(e){return this.localeData().months(this,e)}),O(\\\month\\\,\\\M\\\),E(\\\month\\\,8),ie(\\\M\\\,B),ie(\\\MM\\\,B,V),ie(\\\MMM\\\,function(e,a){return a.monthsShortRegex(e)}),ie(\\\MMMM\\\,function(e,a){return a.monthsRegex(e)}),le(\\\M\\\,\\\MM\\\,function(e,a){aLeg(e)-1}),le(\\\MMM\\\,\\\MMMM\\\,function(e,a,t,s){var nt._locale.monthsParse(e,s,t._strict);null!n?aLen:Y(t).invalidMonthe});var xe/DoD?(\\\\^\\\\\\\\*\\\\|\\\\s)+MMMM?/,Oe\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\);var Pe\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\);function We(e,a){var t;if(!e.isValid())return e;if(\\\string\\\typeof a)if(/^\\\\d+$/.test(a))ag(a);else if(!m(ae.localeData().monthsParse(a)))return e;return tMath.min(e.date(),je(e.year(),a)),e._d\\\set\\\+(e._isUTC?\\\UTC\\\:\\\\\\)+\\\Month\\\(a,t),e}function Ae(e){return null!e?(We(this,e),l.updateOffset(this,!0),this):He(this,\\\Month\\\)}var Eere;var Fere;function ze(){function e(e,a){return a.length-e.length}var a,t,s,n,d;for(a0;a\u003C12;a++)tc(2e3,a),s.push(this.monthsShort(t,\\\\\\)),n.push(this.months(t,\\\\\\)),d.push(this.months(t,\\\\\\)),d.push(this.monthsShort(t,\\\\\\));for(s.sort(e),n.sort(e),d.sort(e),a0;a\u003C12;a++)same(sa),name(na);for(a0;a\u003C24;a++)dame(da);this._monthsRegexnew RegExp(\\\^(\\\+d.join(\\\|\\\)+\\\)\\\,\\\i\\\),this._monthsShortRegexthis._monthsRegex,this._monthsStrictRegexnew RegExp(\\\^(\\\+n.join(\\\|\\\)+\\\)\\\,\\\i\\\),this._monthsShortStrictRegexnew RegExp(\\\^(\\\+s.join(\\\|\\\)+\\\)\\\,\\\i\\\)}function Je(e){var a;if(e\u003C100&&0\u003Ce){var tArray.prototype.slice.call(arguments);t0e+400,anew Date(Date.UTC.apply(null,t)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e)}else anew Date(Date.UTC.apply(null,arguments));return a}function Ne(e,a,t){var s7+a-t;return-((7+Je(e,0,s).getUTCDay()-a)%7)+s-1}function Re(e,a,t,s,n){var d,r,_1+7*(a-1)+(7+t-s)%7+Ne(e,s,n);return r_\u003C0?Te(de-1)+_:_>Te(e)?(de+1,_-Te(e)):(de,_),{year:d,dayOfYear:r}}function Ce(e,a,t){var s,n,dNe(e.year(),a,t),rMath.floor((e.dayOfYear()-d-1)/7)+1;return r\u003C1?sr+Ie(ne.year()-1,a,t):r>Ie(e.year(),a,t)?(sr-Ie(e.year(),a,t),ne.year()+1):(ne.year(),sr),{week:s,year:n}}function Ie(e,a,t){var sNe(e,a,t),nNe(e+1,a,t);return(Te(e)-s+n)/7}C(\\\w\\\,\\\ww\\\,2,\\\wo\\\,\\\week\\\),C(\\\W\\\,\\\WW\\\,2,\\\Wo\\\,\\\isoWeek\\\),O(\\\week\\\,\\\w\\\),O(\\\isoWeek\\\,\\\W\\\),E(\\\week\\\,5),E(\\\isoWeek\\\,5),ie(\\\w\\\,B),ie(\\\ww\\\,B,V),ie(\\\W\\\,B),ie(\\\WW\\\,B,V),Me(\\\w\\\,\\\ww\\\,\\\W\\\,\\\WW\\\,function(e,a,t,s){as.substr(0,1)g(e)});function Ue(e,a){return e.slice(a,7).concat(e.slice(0,a))}C(\\\d\\\,0,\\\do\\\,\\\day\\\),C(\\\dd\\\,0,0,function(e){return this.localeData().weekdaysMin(this,e)}),C(\\\ddd\\\,0,0,function(e){return this.localeData().weekdaysShort(this,e)}),C(\\\dddd\\\,0,0,function(e){return this.localeData().weekdays(this,e)}),C(\\\e\\\,0,0,\\\weekday\\\),C(\\\E\\\,0,0,\\\isoWeekday\\\),O(\\\day\\\,\\\d\\\),O(\\\weekday\\\,\\\e\\\),O(\\\isoWeekday\\\,\\\E\\\),E(\\\day\\\,11),E(\\\weekday\\\,11),E(\\\isoWeekday\\\,11),ie(\\\d\\\,B),ie(\\\e\\\,B),ie(\\\E\\\,B),ie(\\\dd\\\,function(e,a){return a.weekdaysMinRegex(e)}),ie(\\\ddd\\\,function(e,a){return a.weekdaysShortRegex(e)}),ie(\\\dddd\\\,function(e,a){return a.weekdaysRegex(e)}),Me(\\\dd\\\,\\\ddd\\\,\\\dddd\\\,function(e,a,t,s){var nt._locale.weekdaysParse(e,s,t._strict);null!n?a.dn:Y(t).invalidWeekdaye}),Me(\\\d\\\,\\\e\\\,\\\E\\\,function(e,a,t,s){asg(e)});var Ge\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\);var Ve\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\);var Ke\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\);var Zere;var $ere;var Bere;function qe(){function e(e,a){return a.length-e.length}var a,t,s,n,d,r,_,i,o;for(a0;a\u003C7;a++)tc(2e3,1).day(a),sthis.weekdaysMin(t,\\\\\\),nthis.weekdaysShort(t,\\\\\\),dthis.weekdays(t,\\\\\\),r.push(s),_.push(n),i.push(d),o.push(s),o.push(n),o.push(d);for(r.sort(e),_.sort(e),i.sort(e),o.sort(e),a0;a\u003C7;a++)_ame(_a),iame(ia),oame(oa);this._weekdaysRegexnew RegExp(\\\^(\\\+o.join(\\\|\\\)+\\\)\\\,\\\i\\\),this._weekdaysShortRegexthis._weekdaysRegex,this._weekdaysMinRegexthis._weekdaysRegex,this._weekdaysStrictRegexnew RegExp(\\\^(\\\+i.join(\\\|\\\)+\\\)\\\,\\\i\\\),this._weekdaysShortStrictRegexnew RegExp(\\\^(\\\+_.join(\\\|\\\)+\\\)\\\,\\\i\\\),this._weekdaysMinStrictRegexnew RegExp(\\\^(\\\+r.join(\\\|\\\)+\\\)\\\,\\\i\\\)}function Qe(){return this.hours()%12||12}function Xe(e,a){C(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function ea(e,a){return a._meridiemParse}C(\\\H\\\,\\\HH\\\,2,0,\\\hour\\\),C(\\\h\\\,\\\hh\\\,2,0,Qe),C(\\\k\\\,\\\kk\\\,2,0,function(){return this.hours()||24}),C(\\\hmm\\\,0,0,function(){return\\\\\\+Qe.apply(this)+F(this.minutes(),2)}),C(\\\hmmss\\\,0,0,function(){return\\\\\\+Qe.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)}),C(\\\Hmm\\\,0,0,function(){return\\\\\\+this.hours()+F(this.minutes(),2)}),C(\\\Hmmss\\\,0,0,function(){return\\\\\\+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)}),Xe(\\\a\\\,!0),Xe(\\\A\\\,!1),O(\\\hour\\\,\\\h\\\),E(\\\hour\\\,13),ie(\\\a\\\,ea),ie(\\\A\\\,ea),ie(\\\H\\\,B),ie(\\\h\\\,B),ie(\\\k\\\,B),ie(\\\HH\\\,B,V),ie(\\\hh\\\,B,V),ie(\\\kk\\\,B,V),ie(\\\hmm\\\,q),ie(\\\hmmss\\\,Q),ie(\\\Hmm\\\,q),ie(\\\Hmmss\\\,Q),le(\\\H\\\,\\\HH\\\,Ye),le(\\\k\\\,\\\kk\\\,function(e,a,t){var sg(e);aYe24s?0:s}),le(\\\a\\\,\\\A\\\,function(e,a,t){t._isPmt._locale.isPM(e),t._meridieme}),le(\\\h\\\,\\\hh\\\,function(e,a,t){aYeg(e),Y(t).bigHour!0}),le(\\\hmm\\\,function(e,a,t){var se.length-2;aYeg(e.substr(0,s)),ayeg(e.substr(s)),Y(t).bigHour!0}),le(\\\hmmss\\\,function(e,a,t){var se.length-4,ne.length-2;aYeg(e.substr(0,s)),ayeg(e.substr(s,2)),afeg(e.substr(n)),Y(t).bigHour!0}),le(\\\Hmm\\\,function(e,a,t){var se.length-2;aYeg(e.substr(0,s)),ayeg(e.substr(s))}),le(\\\Hmmss\\\,function(e,a,t){var se.length-4,ne.length-2;aYeg(e.substr(0,s)),ayeg(e.substr(s,2)),afeg(e.substr(n))});var aa,taSe(\\\Hours\\\,!0),sa{calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},longDateFormat:{LTS:\\\h:mm:ss A\\\,LT:\\\h:mm A\\\,L:\\\MM/DD/YYYY\\\,LL:\\\MMMM D, YYYY\\\,LLL:\\\MMMM D, YYYY h:mm A\\\,LLLL:\\\dddd, MMMM D, YYYY h:mm A\\\},invalidDate:\\\Invalid date\\\,ordinal:\\\%d\\\,dayOfMonthOrdinalParse:/\\\\d{1,2}/,relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},months:Oe,monthsShort:Pe,week:{dow:0,doy:6},weekdays:Ge,weekdaysMin:Ke,weekdaysShort:Ve,meridiemParse:/ap\\\\.?m?\\\\.?/i},na{},da{};function ra(e){return e?e.toLowerCase().replace(\\\_\\\,\\\-\\\):e}function _a(e){var anull;if(!nae&&\\\undefined\\\!typeof module&&module&&module.exports)try{aaa._abbr,require(\\\./locale/\\\+e),ia(a)}catch(e){}return nae}function ia(e,a){var t;return e&&((to(a)?ma(e):oa(e,a))?aat:\\\undefined\\\!typeof console&&console.warn&&console.warn(\\\Locale \\\+e+\\\ not found. Did you forget to load it?\\\)),aa._abbr}function oa(e,a){if(nulla)return delete nae,null;var t,ssa;if(a.abbre,null!nae)S(\\\defineLocaleOverride\\\,\\\use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\\\),snae._config;else if(null!a.parentLocale)if(null!naa.parentLocale)snaa.parentLocale._config;else{if(null(t_a(a.parentLocale)))return daa.parentLocale||(daa.parentLocale),daa.parentLocale.push({name:e,config:a}),null;st._config}return naenew j(b(s,a)),dae&&dae.forEach(function(e){oa(e.name,e.config)}),ia(e),nae}function ma(e){var a;if(e&&e._locale&&e._locale._abbr&&(ee._locale._abbr),!e)return aa;if(!_(e)){if(a_a(e))return a;ee}return function(e){for(var a,t,s,n,d0;d\u003Ce.length;){for(a(nra(ed).split(\\\-\\\)).length,t(tra(ed+1))?t.split(\\\-\\\):null;0\u003Ca;){if(s_a(n.slice(0,a).join(\\\-\\\)))return s;if(t&&t.length>a&&r(n,t,!0)>a-1)break;a--}d++}return aa}(e)}function ua(e){var a,te._a;return t&&-2Y(e).overflow&&(atLe\u003C0||11\u003CtLe?Le:tce\u003C1||tce>je(the,tLe)?ce:tYe\u003C0||24\u003CtYe||24tYe&&(0!tye||0!tfe||0!tke)?Ye:tye\u003C0||59\u003Ctye?ye:tfe\u003C0||59\u003Ctfe?fe:tke\u003C0||999\u003Ctke?ke:-1,Y(e)._overflowDayOfYear&&(a\u003Che||ce\u003Ca)&&(ace),Y(e)._overflowWeeks&&-1a&&(ape),Y(e)._overflowWeekday&&-1a&&(aDe),Y(e).overflowa),e}function la(e,a,t){return null!e?e:null!a?a:t}function Ma(e){var a,t,s,n,d,r;if(!e._d){var _,i;for(_e,inew Date(l.now()),s_._useUTC?i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate():i.getFullYear(),i.getMonth(),i.getDate(),e._w&&nulle._ace&&nulle._aLe&&function(e){var a,t,s,n,d,r,_,i;if(null!(ae._w).GG||null!a.W||null!a.E)d1,r4,tla(a.GG,e._ahe,Ce(Ha(),1,4).year),sla(a.W,1),((nla(a.E,1))\u003C1||7\u003Cn)&&(i!0);else{de._locale._week.dow,re._locale._week.doy;var oCe(Ha(),d,r);tla(a.gg,e._ahe,o.year),sla(a.w,o.week),null!a.d?((na.d)\u003C0||6\u003Cn)&&(i!0):null!a.e?(na.e+d,(a.e\u003C0||6\u003Ca.e)&&(i!0)):nd}s\u003C1||s>Ie(t,d,r)?Y(e)._overflowWeeks!0:null!i?Y(e)._overflowWeekday!0:(_Re(t,s,n,d,r),e._ahe_.year,e._dayOfYear_.dayOfYear)}(e),null!e._dayOfYear&&(dla(e._ahe,she),(e._dayOfYear>Te(d)||0e._dayOfYear)&&(Y(e)._overflowDayOfYear!0),tJe(d,0,e._dayOfYear),e._aLet.getUTCMonth(),e._acet.getUTCDate()),a0;a\u003C3&&nulle._aa;++a)e._aarasa;for(;a\u003C7;a++)e._aaranulle._aa?2a?1:0:e._aa;24e._aYe&&0e._aye&&0e._afe&&0e._ake&&(e._nextDay!0,e._aYe0),e._d(e._useUTC?Je:function(e,a,t,s,n,d,r){var _;return e\u003C100&&0\u003Ce?(_new Date(e+400,a,t,s,n,d,r),isFinite(_.getFullYear())&&_.setFullYear(e)):_new Date(e,a,t,s,n,d,r),_}).apply(null,r),ne._useUTC?e._d.getUTCDay():e._d.getDay(),null!e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._aYe24),e._w&&void 0!e._w.d&&e._w.d!n&&(Y(e).weekdayMismatch!0)}}var ha/^\\\\s*((?:+-\\\\d{6}|\\\\d{4})-(?:\\\\d\\\\d-\\\\d\\\\d|W\\\\d\\\\d-\\\\d|W\\\\d\\\\d|\\\\d\\\\d\\\\d|\\\\d\\\\d))(?:(T| )(\\\\d\\\\d(?::\\\\d\\\\d(?::\\\\d\\\\d(?:.,\\\\d+)?)?)?)(\\\\+\\\\-\\\\d\\\\d(?::?\\\\d\\\\d)?|\\\\s*Z)?)?$/,La/^\\\\s*((?:+-\\\\d{6}|\\\\d{4})(?:\\\\d\\\\d\\\\d\\\\d|W\\\\d\\\\d\\\\d|W\\\\d\\\\d|\\\\d\\\\d\\\\d|\\\\d\\\\d))(?:(T| )(\\\\d\\\\d(?:\\\\d\\\\d(?:\\\\d\\\\d(?:.,\\\\d+)?)?)?)(\\\\+\\\\-\\\\d\\\\d(?::?\\\\d\\\\d)?|\\\\s*Z)?)?$/,ca/Z|+-\\\\d\\\\d(?::?\\\\d\\\\d)?/,Ya\\\YYYYYY-MM-DD\\\,/+-\\\\d{6}-\\\\d\\\\d-\\\\d\\\\d/,\\\YYYY-MM-DD\\\,/\\\\d{4}-\\\\d\\\\d-\\\\d\\\\d/,\\\GGGG-WWW-E\\\,/\\\\d{4}-W\\\\d\\\\d-\\\\d/,\\\GGGG-WWW\\\,/\\\\d{4}-W\\\\d\\\\d/,!1,\\\YYYY-DDD\\\,/\\\\d{4}-\\\\d{3}/,\\\YYYY-MM\\\,/\\\\d{4}-\\\\d\\\\d/,!1,\\\YYYYYYMMDD\\\,/+-\\\\d{10}/,\\\YYYYMMDD\\\,/\\\\d{8}/,\\\GGGGWWWE\\\,/\\\\d{4}W\\\\d{3}/,\\\GGGGWWW\\\,/\\\\d{4}W\\\\d{2}/,!1,\\\YYYYDDD\\\,/\\\\d{7}/,ya\\\HH:mm:ss.SSSS\\\,/\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d\\\\.\\\\d+/,\\\HH:mm:ss,SSSS\\\,/\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d,\\\\d+/,\\\HH:mm:ss\\\,/\\\\d\\\\d:\\\\d\\\\d:\\\\d\\\\d/,\\\HH:mm\\\,/\\\\d\\\\d:\\\\d\\\\d/,\\\HHmmss.SSSS\\\,/\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d\\\\.\\\\d+/,\\\HHmmss,SSSS\\\,/\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d,\\\\d+/,\\\HHmmss\\\,/\\\\d\\\\d\\\\d\\\\d\\\\d\\\\d/,\\\HHmm\\\,/\\\\d\\\\d\\\\d\\\\d/,\\\HH\\\,/\\\\d\\\\d/,fa/^\\\\/?Date\\\\((\\\\-?\\\\d+)/i;function ka(e){var a,t,s,n,d,r,_e._i,iha.exec(_)||La.exec(_);if(i){for(Y(e).iso!0,a0,tYa.length;a\u003Ct;a++)if(Yaa1.exec(i1)){nYaa0,s!1!Yaa2;break}if(nulln)return void(e._isValid!1);if(i3){for(a0,tya.length;a\u003Ct;a++)if(yaa1.exec(i3)){d(i2||\\\ \\\)+yaa0;break}if(nulld)return void(e._isValid!1)}if(!s&&null!d)return void(e._isValid!1);if(i4){if(!ca.exec(i4))return void(e._isValid!1);r\\\Z\\\}e._fn+(d||\\\\\\)+(r||\\\\\\),wa(e)}else e._isValid!1}var pa/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\\\s)?(\\\\d{1,2})\\\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\\\s(\\\\d{2,4})\\\\s(\\\\d\\\\d):(\\\\d\\\\d)(?::(\\\\d\\\\d))?\\\\s(?:(UT|GMT|ECMPSDT)|(Zz)|(+-\\\\d{4}))$/;function Da(e,a,t,s,n,d){var rfunction(e){var aparseInt(e,10);{if(a\u003C49)return 2e3+a;if(a\u003C999)return 1900+a}return a}(e),Pe.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10);return d&&r.push(parseInt(d,10)),r}var Ta{UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ga(e){var a,t,s,npa.exec(e._i.replace(/\\\\(^)*\\\\)|\\\\n\\\\t/g,\\\ \\\).replace(/(\\\\s\\\\s+)/g,\\\ \\\).replace(/^\\\\s\\\\s*/,\\\\\\).replace(/\\\\s\\\\s*$/,\\\\\\));if(n){var dDa(n4,n3,n2,n5,n6,n7);if(an1,td,se,a&&Ve.indexOf(a)!new Date(t0,t1,t2).getDay()&&(Y(s).weekdayMismatch!0,!(s._isValid!1)))return;e._ad,e._tzmfunction(e,a,t){if(e)return Tae;if(a)return 0;var sparseInt(t,10),ns%100;return(s-n)/100*60+n}(n8,n9,n10),e._dJe.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),Y(e).rfc2822!0}else e._isValid!1}function wa(e){if(e._f!l.ISO_8601)if(e._f!l.RFC_2822){e._a,Y(e).empty!0;var a,t,s,n,d,r,_,i,o\\\\\\+e._i,mo.length,u0;for(sU(e._f,e._locale).match(z)||,a0;a\u003Cs.length;a++)nsa,(t(o.match(oe(n,e))||)0)&&(0\u003C(do.substr(0,o.indexOf(t))).length&&Y(e).unusedInput.push(d),oo.slice(o.indexOf(t)+t.length),u+t.length),Rn?(t?Y(e).empty!1:Y(e).unusedTokens.push(n),rn,ie,null!(_t)&&h(ue,r)&&uer(_,i._a,i,r)):e._strict&&!t&&Y(e).unusedTokens.push(n);Y(e).charsLeftOverm-u,0\u003Co.length&&Y(e).unusedInput.push(o),e._aYe\u003C12&&!0Y(e).bigHour&&0\u003Ce._aYe&&(Y(e).bigHourvoid 0),Y(e).parsedDatePartse._a.slice(0),Y(e).meridieme._meridiem,e._aYefunction(e,a,t){var s;if(nullt)return a;return null!e.meridiemHour?e.meridiemHour(a,t):(null!e.isPM&&((se.isPM(t))&&a\u003C12&&(a+12),s||12!a||(a0)),a)}(e._locale,e._aYe,e._meridiem),Ma(e),ua(e)}else ga(e);else ka(e)}function va(e){var a,t,s,n,de._i,re._f;return e._localee._locale||ma(e._l),nulld||void 0r&&\\\\\\d?f({nullInput:!0}):(\\\string\\\typeof d&&(e._ide._locale.preparse(d)),D(d)?new p(ua(d)):(u(d)?e._dd:_(r)?function(e){var a,t,s,n,d;if(0e._f.length)return Y(e).invalidFormat!0,e._dnew Date(NaN);for(n0;n\u003Ce._f.length;n++)d0,ak({},e),null!e._useUTC&&(a._useUTCe._useUTC),a._fe._fn,wa(a),y(a)&&(d+Y(a).charsLeftOver,d+10*Y(a).unusedTokens.length,Y(a).scored,(nulls||d\u003Cs)&&(sd,ta));L(e,t||a)}(e):r?wa(e):o(t(ae)._i)?a._dnew Date(l.now()):u(t)?a._dnew Date(t.valueOf()):\\\string\\\typeof t?(sa,null(nfa.exec(s._i))?(ka(s),!1s._isValid&&(delete s._isValid,ga(s),!1s._isValid&&(delete s._isValid,l.createFromInputFallback(s)))):s._dnew Date(+n1)):_(t)?(a._aM(t.slice(0),function(e){return parseInt(e,10)}),Ma(a)):i(t)?function(e){if(!e._d){var aW(e._i);e._aM(a.year,a.month,a.day||a.date,a.hour,a.minute,a.second,a.millisecond,function(e){return e&&parseInt(e,10)}),Ma(e)}}(a):m(t)?a._dnew Date(t):l.createFromInputFallback(a),y(e)||(e._dnull),e))}function Sa(e,a,t,s,n){var d,r{};return!0!t&&!1!t||(st,tvoid 0),(i(e)&&function(e){if(Object.getOwnPropertyNames)return 0Object.getOwnPropertyNames(e).length;var a;for(a in e)if(e.hasOwnProperty(a))return!1;return!0}(e)||_(e)&&0e.length)&&(evoid 0),r._isAMomentObject!0,r._useUTCr._isUTCn,r._lt,r._ie,r._fa,r._stricts,(dnew p(ua(va(r))))._nextDay&&(d.add(1,\\\d\\\),d._nextDayvoid 0),d}function Ha(e,a,t,s){return Sa(e,a,t,s,!1)}l.createFromInputFallbackt(\\\value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\\\,function(e){e._dnew Date(e._i+(e._useUTC?\\\ UTC\\\:\\\\\\))}),l.ISO_8601function(){},l.RFC_2822function(){};var bat(\\\moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\\\,function(){var eHa.apply(null,arguments);return this.isValid()&&e.isValid()?e\u003Cthis?this:e:f()}),jat(\\\moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\\\,function(){var eHa.apply(null,arguments);return this.isValid()&&e.isValid()?this\u003Ce?this:e:f()});function xa(e,a){var t,s;if(1a.length&&_(a0)&&(aa0),!a.length)return Ha();for(ta0,s1;s\u003Ca.length;++s)as.isValid()&&!ase(t)||(tas);return t}var Oa\\\year\\\,\\\quarter\\\,\\\month\\\,\\\week\\\,\\\day\\\,\\\hour\\\,\\\minute\\\,\\\second\\\,\\\millisecond\\\;function Pa(e){var aW(e),ta.year||0,sa.quarter||0,na.month||0,da.week||a.isoWeek||0,ra.day||0,_a.hour||0,ia.minute||0,oa.second||0,ma.millisecond||0;this._isValidfunction(e){for(var a in e)if(-1we.call(Oa,a)||null!ea&&isNaN(ea))return!1;for(var t!1,s0;s\u003COa.length;++s)if(eOas){if(t)return!1;parseFloat(eOas)!g(eOas)&&(t!0)}return!0}(a),this._milliseconds+m+1e3*o+6e4*i+1e3*_*60*60,this._days+r+7*d,this._months+n+3*s+12*t,this._data{},this._localema(),this._bubble()}function Wa(e){return e instanceof Pa}function Aa(e){return e\u003C0?-1*Math.round(-1*e):Math.round(e)}function Ea(e,t){C(e,0,0,function(){var ethis.utcOffset(),a\\\+\\\;return e\u003C0&&(e-e,a\\\-\\\),a+F(~~(e/60),2)+t+F(~~e%60,2)})}Ea(\\\Z\\\,\\\:\\\),Ea(\\\ZZ\\\,\\\\\\),ie(\\\Z\\\,de),ie(\\\ZZ\\\,de),le(\\\Z\\\,\\\ZZ\\\,function(e,a,t){t._useUTC!0,t._tzmza(de,e)});var Fa/(\\\\+\\\\-|\\\\d\\\\d)/gi;function za(e,a){var t(a||\\\\\\).match(e);if(nullt)return null;var s((tt.length-1||)+\\\\\\).match(Fa)||\\\-\\\,0,0,n60*s1+g(s2);return 0n?0:\\\+\\\s0?n:-n}function Ja(e,a){var t,s;return a._isUTC?(ta.clone(),s(D(e)||u(e)?e.valueOf():Ha(e).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+s),l.updateOffset(t,!1),t):Ha(e).local()}function Na(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Ra(){return!!this.isValid()&&(this._isUTC&&0this._offset)}l.updateOffsetfunction(){};var Ca/^(\\\\-|\\\\+)?(?:(\\\\d*). )?(\\\\d+)\\\\:(\\\\d+)(?:\\\\:(\\\\d+)(\\\\.\\\\d*)?)?$/,Ia/^(-|\\\\+)?P(?:(-+?0-9,.*)Y)?(?:(-+?0-9,.*)M)?(?:(-+?0-9,.*)W)?(?:(-+?0-9,.*)D)?(?:T(?:(-+?0-9,.*)H)?(?:(-+?0-9,.*)M)?(?:(-+?0-9,.*)S)?)?$/;function Ua(e,a){var t,s,n,de,rnull;return Wa(e)?d{ms:e._milliseconds,d:e._days,M:e._months}:m(e)?(d{},a?dae:d.millisecondse):(rCa.exec(e))?(t\\\-\\\r1?-1:1,d{y:0,d:g(rce)*t,h:g(rYe)*t,m:g(rye)*t,s:g(rfe)*t,ms:g(Aa(1e3*rke))*t}):(rIa.exec(e))?(t\\\-\\\r1?-1:1,d{y:Ga(r2,t),M:Ga(r3,t),w:Ga(r4,t),d:Ga(r5,t),h:Ga(r6,t),m:Ga(r7,t),s:Ga(r8,t)}):nulld?d{}:\\\object\\\typeof d&&(\\\from\\\in d||\\\to\\\in d)&&(nfunction(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};aJa(a,e),e.isBefore(a)?tVa(e,a):((tVa(a,e)).milliseconds-t.milliseconds,t.months-t.months);return t}(Ha(d.from),Ha(d.to)),(d{}).msn.milliseconds,d.Mn.months),snew Pa(d),Wa(e)&&h(e,\\\_locale\\\)&&(s._localee._locale),s}function Ga(e,a){var te&&parseFloat(e.replace(\\\,\\\,\\\.\\\));return(isNaN(t)?0:t)*a}function Va(e,a){var t{};return t.monthsa.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,\\\M\\\).isAfter(a)&&--t.months,t.milliseconds+a-+e.clone().add(t.months,\\\M\\\),t}function Ka(s,n){return function(e,a){var t;return nulla||isNaN(+a)||(S(n,\\\moment().\\\+n+\\\(period, number) is deprecated. Please use moment().\\\+n+\\\(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\\\),te,ea,at),Za(this,Ua(e\\\string\\\typeof e?+e:e,a),s),this}}function Za(e,a,t,s){var na._milliseconds,dAa(a._days),rAa(a._months);e.isValid()&&(snulls||s,r&&We(e,He(e,\\\Month\\\)+r*t),d&&be(e,\\\Date\\\,He(e,\\\Date\\\)+d*t),n&&e._d.setTime(e._d.valueOf()+n*t),s&&l.updateOffset(e,d||r))}Ua.fnPa.prototype,Ua.invalidfunction(){return Ua(NaN)};var $aKa(1,\\\add\\\),BaKa(-1,\\\subtract\\\);function qa(e,a){var t12*(a.year()-e.year())+(a.month()-e.month()),se.clone().add(t,\\\months\\\);return-(t+(a-s\u003C0?(a-s)/(s-e.clone().add(t-1,\\\months\\\)):(a-s)/(e.clone().add(t+1,\\\months\\\)-s)))||0}function Qa(e){var a;return void 0e?this._locale._abbr:(null!(ama(e))&&(this._localea),this)}l.defaultFormat\\\YYYY-MM-DDTHH:mm:ssZ\\\,l.defaultFormatUtc\\\YYYY-MM-DDTHH:mm:ssZ\\\;var Xat(\\\moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\\\,function(e){return void 0e?this.localeData():this.locale(e)});function et(){return this._locale}var at126227808e5;function tt(e,a){return(e%a+a)%a}function st(e,a,t){return e\u003C100&&0\u003Ce?new Date(e+400,a,t)-at:new Date(e,a,t).valueOf()}function nt(e,a,t){return e\u003C100&&0\u003Ce?Date.UTC(e+400,a,t)-at:Date.UTC(e,a,t)}function dt(e,a){C(0,e,e.length,0,a)}function rt(e,a,t,s,n){var d;return nulle?Ce(this,s,n).year:((dIe(e,s,n))\u003Ca&&(ad),function(e,a,t,s,n){var dRe(e,a,t,s,n),rJe(d.year,0,d.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}.call(this,e,a,t,s,n))}C(0,\\\gg\\\,2,0,function(){return this.weekYear()%100}),C(0,\\\GG\\\,2,0,function(){return this.isoWeekYear()%100}),dt(\\\gggg\\\,\\\weekYear\\\),dt(\\\ggggg\\\,\\\weekYear\\\),dt(\\\GGGG\\\,\\\isoWeekYear\\\),dt(\\\GGGGG\\\,\\\isoWeekYear\\\),O(\\\weekYear\\\,\\\gg\\\),O(\\\isoWeekYear\\\,\\\GG\\\),E(\\\weekYear\\\,1),E(\\\isoWeekYear\\\,1),ie(\\\G\\\,se),ie(\\\g\\\,se),ie(\\\GG\\\,B,V),ie(\\\gg\\\,B,V),ie(\\\GGGG\\\,ee,Z),ie(\\\gggg\\\,ee,Z),ie(\\\GGGGG\\\,ae,$),ie(\\\ggggg\\\,ae,$),Me(\\\gggg\\\,\\\ggggg\\\,\\\GGGG\\\,\\\GGGGG\\\,function(e,a,t,s){as.substr(0,2)g(e)}),Me(\\\gg\\\,\\\GG\\\,function(e,a,t,s){asl.parseTwoDigitYear(e)}),C(\\\Q\\\,0,\\\Qo\\\,\\\quarter\\\),O(\\\quarter\\\,\\\Q\\\),E(\\\quarter\\\,7),ie(\\\Q\\\,G),le(\\\Q\\\,function(e,a){aLe3*(g(e)-1)}),C(\\\D\\\,\\\DD\\\,2,\\\Do\\\,\\\date\\\),O(\\\date\\\,\\\D\\\),E(\\\date\\\,9),ie(\\\D\\\,B),ie(\\\DD\\\,B,V),ie(\\\Do\\\,function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),le(\\\D\\\,\\\DD\\\,ce),le(\\\Do\\\,function(e,a){aceg(e.match(B)0)});var _tSe(\\\Date\\\,!0);C(\\\DDD\\\,\\\DDDD\\\,3,\\\DDDo\\\,\\\dayOfYear\\\),O(\\\dayOfYear\\\,\\\DDD\\\),E(\\\dayOfYear\\\,4),ie(\\\DDD\\\,X),ie(\\\DDDD\\\,K),le(\\\DDD\\\,\\\DDDD\\\,function(e,a,t){t._dayOfYearg(e)}),C(\\\m\\\,\\\mm\\\,2,0,\\\minute\\\),O(\\\minute\\\,\\\m\\\),E(\\\minute\\\,14),ie(\\\m\\\,B),ie(\\\mm\\\,B,V),le(\\\m\\\,\\\mm\\\,ye);var itSe(\\\Minutes\\\,!1);C(\\\s\\\,\\\ss\\\,2,0,\\\second\\\),O(\\\second\\\,\\\s\\\),E(\\\second\\\,15),ie(\\\s\\\,B),ie(\\\ss\\\,B,V),le(\\\s\\\,\\\ss\\\,fe);var ot,mtSe(\\\Seconds\\\,!1);for(C(\\\S\\\,0,0,function(){return~~(this.millisecond()/100)}),C(0,\\\SS\\\,2,0,function(){return~~(this.millisecond()/10)}),C(0,\\\SSS\\\,3,0,\\\millisecond\\\),C(0,\\\SSSS\\\,4,0,function(){return 10*this.millisecond()}),C(0,\\\SSSSS\\\,5,0,function(){return 100*this.millisecond()}),C(0,\\\SSSSSS\\\,6,0,function(){return 1e3*this.millisecond()}),C(0,\\\SSSSSSS\\\,7,0,function(){return 1e4*this.millisecond()}),C(0,\\\SSSSSSSS\\\,8,0,function(){return 1e5*this.millisecond()}),C(0,\\\SSSSSSSSS\\\,9,0,function(){return 1e6*this.millisecond()}),O(\\\millisecond\\\,\\\ms\\\),E(\\\millisecond\\\,16),ie(\\\S\\\,X,G),ie(\\\SS\\\,X,V),ie(\\\SSS\\\,X,K),ot\\\SSSS\\\;ot.length\u003C9;ot+\\\S\\\)ie(ot,te);function ut(e,a){akeg(1e3*(\\\0.\\\+e))}for(ot\\\S\\\;ot.length\u003C9;ot+\\\S\\\)le(ot,ut);var ltSe(\\\Milliseconds\\\,!1);C(\\\z\\\,0,0,\\\zoneAbbr\\\),C(\\\zz\\\,0,0,\\\zoneName\\\);var Mtp.prototype;function ht(e){return e}Mt.add$a,Mt.calendarfunction(e,a){var te||Ha(),sJa(t,this).startOf(\\\day\\\),nl.calendarFormat(this,s)||\\\sameElse\\\,da&&(H(an)?an.call(this,t):an);return this.format(d||this.localeData().calendar(n,this,Ha(t)))},Mt.clonefunction(){return new p(this)},Mt.difffunction(e,a,t){var s,n,d;if(!this.isValid())return NaN;if(!(sJa(e,this)).isValid())return NaN;switch(n6e4*(s.utcOffset()-this.utcOffset()),aP(a)){case\\\year\\\:dqa(this,s)/12;break;case\\\month\\\:dqa(this,s);break;case\\\quarter\\\:dqa(this,s)/3;break;case\\\second\\\:d(this-s)/1e3;break;case\\\minute\\\:d(this-s)/6e4;break;case\\\hour\\\:d(this-s)/36e5;break;case\\\day\\\:d(this-s-n)/864e5;break;case\\\week\\\:d(this-s-n)/6048e5;break;default:dthis-s}return t?d:T(d)},Mt.endOffunction(e){var a;if(void 0(eP(e))||\\\millisecond\\\e||!this.isValid())return this;var tthis._isUTC?nt:st;switch(e){case\\\year\\\:at(this.year()+1,0,1)-1;break;case\\\quarter\\\:at(this.year(),this.month()-this.month()%3+3,1)-1;break;case\\\month\\\:at(this.year(),this.month()+1,1)-1;break;case\\\week\\\:at(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case\\\isoWeek\\\:at(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case\\\day\\\:case\\\date\\\:at(this.year(),this.month(),this.date()+1)-1;break;case\\\hour\\\:athis._d.valueOf(),a+36e5-tt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case\\\minute\\\:athis._d.valueOf(),a+6e4-tt(a,6e4)-1;break;case\\\second\\\:athis._d.valueOf(),a+1e3-tt(a,1e3)-1;break}return this._d.setTime(a),l.updateOffset(this,!0),this},Mt.formatfunction(e){e||(ethis.isUtc()?l.defaultFormatUtc:l.defaultFormat);var aI(this,e);return this.localeData().postformat(a)},Mt.fromfunction(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ua({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},Mt.fromNowfunction(e){return this.from(Ha(),e)},Mt.tofunction(e,a){return this.isValid()&&(D(e)&&e.isValid()||Ha(e).isValid())?Ua({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},Mt.toNowfunction(e){return this.to(Ha(),e)},Mt.getfunction(e){return H(thiseP(e))?thise():this},Mt.invalidAtfunction(){return Y(this).overflow},Mt.isAfterfunction(e,a){var tD(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&(\\\millisecond\\\(aP(a)||\\\millisecond\\\)?this.valueOf()>t.valueOf():t.valueOf()\u003Cthis.clone().startOf(a).valueOf())},Mt.isBeforefunction(e,a){var tD(e)?e:Ha(e);return!(!this.isValid()||!t.isValid())&&(\\\millisecond\\\(aP(a)||\\\millisecond\\\)?this.valueOf()\u003Ct.valueOf():this.clone().endOf(a).valueOf()\u003Ct.valueOf())},Mt.isBetweenfunction(e,a,t,s){var nD(e)?e:Ha(e),dD(a)?a:Ha(a);return!!(this.isValid()&&n.isValid()&&d.isValid())&&(\\\(\\\(ss||\\\()\\\)0?this.isAfter(n,t):!this.isBefore(n,t))&&(\\\)\\\s1?this.isBefore(d,t):!this.isAfter(d,t))},Mt.isSamefunction(e,a){var t,sD(e)?e:Ha(e);return!(!this.isValid()||!s.isValid())&&(\\\millisecond\\\(aP(a)||\\\millisecond\\\)?this.valueOf()s.valueOf():(ts.valueOf(),this.clone().startOf(a).valueOf()\u003Ct&&t\u003Cthis.clone().endOf(a).valueOf()))},Mt.isSameOrAfterfunction(e,a){return this.isSame(e,a)||this.isAfter(e,a)},Mt.isSameOrBeforefunction(e,a){return this.isSame(e,a)||this.isBefore(e,a)},Mt.isValidfunction(){return y(this)},Mt.langXa,Mt.localeQa,Mt.localeDataet,Mt.maxja,Mt.minba,Mt.parsingFlagsfunction(){return L({},Y(this))},Mt.setfunction(e,a){if(\\\object\\\typeof e)for(var tfunction(e){var a;for(var t in e)a.push({unit:t,priority:At});return a.sort(function(e,a){return e.priority-a.priority}),a}(eW(e)),s0;s\u003Ct.length;s++)thists.unit(ets.unit);else if(H(thiseP(e)))return thise(a);return this},Mt.startOffunction(e){var a;if(void 0(eP(e))||\\\millisecond\\\e||!this.isValid())return this;var tthis._isUTC?nt:st;switch(e){case\\\year\\\:at(this.year(),0,1);break;case\\\quarter\\\:at(this.year(),this.month()-this.month()%3,1);break;case\\\month\\\:at(this.year(),this.month(),1);break;case\\\week\\\:at(this.year(),this.month(),this.date()-this.weekday());break;case\\\isoWeek\\\:at(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case\\\day\\\:case\\\date\\\:at(this.year(),this.month(),this.date());break;case\\\hour\\\:athis._d.valueOf(),a-tt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case\\\minute\\\:athis._d.valueOf(),a-tt(a,6e4);break;case\\\second\\\:athis._d.valueOf(),a-tt(a,1e3);break}return this._d.setTime(a),l.updateOffset(this,!0),this},Mt.subtractBa,Mt.toArrayfunction(){var ethis;returne.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()},Mt.toObjectfunction(){var ethis;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},Mt.toDatefunction(){return new Date(this.valueOf())},Mt.toISOStringfunction(e){if(!this.isValid())return null;var a!0!e,ta?this.clone().utc():this;return t.year()\u003C0||9999\u003Ct.year()?I(t,a?\\\YYYYYY-MM-DDTHH:mm:ss.SSSZ\\\:\\\YYYYYY-MM-DDTHH:mm:ss.SSSZ\\\):H(Date.prototype.toISOString)?a?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace(\\\Z\\\,I(t,\\\Z\\\)):I(t,a?\\\YYYY-MM-DDTHH:mm:ss.SSSZ\\\:\\\YYYY-MM-DDTHH:mm:ss.SSSZ\\\)},Mt.inspectfunction(){if(!this.isValid())return\\\moment.invalid(/* \\\+this._i+\\\ */)\\\;var e\\\moment\\\,a\\\\\\;this.isLocal()||(e0this.utcOffset()?\\\moment.utc\\\:\\\moment.parseZone\\\,a\\\Z\\\);var t\\\\\\+e+(\\\,s0\u003Cthis.year()&&this.year()\u003C9999?\\\YYYY\\\:\\\YYYYYY\\\,na+\\\);return this.format(t+s+\\\-MM-DDTHH:mm:ss.SSS\\\+n)},Mt.toJSONfunction(){return this.isValid()?this.toISOString():null},Mt.toStringfunction(){return this.clone().locale(\\\en\\\).format(\\\ddd MMM DD YYYY HH:mm:ss GMTZZ\\\)},Mt.unixfunction(){return Math.floor(this.valueOf()/1e3)},Mt.valueOffunction(){return this._d.valueOf()-6e4*(this._offset||0)},Mt.creationDatafunction(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Mt.yearve,Mt.isLeapYearfunction(){return ge(this.year())},Mt.weekYearfunction(e){return rt.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Mt.isoWeekYearfunction(e){return rt.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},Mt.quarterMt.quartersfunction(e){return nulle?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},Mt.monthAe,Mt.daysInMonthfunction(){return je(this.year(),this.month())},Mt.weekMt.weeksfunction(e){var athis.localeData().week(this);return nulle?a:this.add(7*(e-a),\\\d\\\)},Mt.isoWeekMt.isoWeeksfunction(e){var aCe(this,1,4).week;return nulle?a:this.add(7*(e-a),\\\d\\\)},Mt.weeksInYearfunction(){var ethis.localeData()._week;return Ie(this.year(),e.dow,e.doy)},Mt.isoWeeksInYearfunction(){return Ie(this.year(),1,4)},Mt.date_t,Mt.dayMt.daysfunction(e){if(!this.isValid())return null!e?this:NaN;var a,t,sthis._isUTC?this._d.getUTCDay():this._d.getDay();return null!e?(ae,tthis.localeData(),e\\\string\\\!typeof a?a:isNaN(a)?\\\number\\\typeof(at.weekdaysParse(a))?a:null:parseInt(a,10),this.add(e-s,\\\d\\\)):s},Mt.weekdayfunction(e){if(!this.isValid())return null!e?this:NaN;var a(this.day()+7-this.localeData()._week.dow)%7;return nulle?a:this.add(e-a,\\\d\\\)},Mt.isoWeekdayfunction(e){if(!this.isValid())return null!e?this:NaN;if(nulle)return this.day()||7;var a,t,s(ae,tthis.localeData(),\\\string\\\typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a);return this.day(this.day()%7?s:s-7)},Mt.dayOfYearfunction(e){var aMath.round((this.clone().startOf(\\\day\\\)-this.clone().startOf(\\\year\\\))/864e5)+1;return nulle?a:this.add(e-a,\\\d\\\)},Mt.hourMt.hoursta,Mt.minuteMt.minutesit,Mt.secondMt.secondsmt,Mt.millisecondMt.millisecondslt,Mt.utcOffsetfunction(e,a,t){var s,nthis._offset||0;if(!this.isValid())return null!e?this:NaN;if(nulle)return this._isUTC?n:Na(this);if(\\\string\\\typeof e){if(null(eza(de,e)))return this}else Math.abs(e)\u003C16&&!t&&(e*60);return!this._isUTC&&a&&(sNa(this)),this._offsete,this._isUTC!0,null!s&&this.add(s,\\\m\\\),n!e&&(!a||this._changeInProgress?Za(this,Ua(e-n,\\\m\\\),1,!1):this._changeInProgress||(this._changeInProgress!0,l.updateOffset(this,!0),this._changeInProgressnull)),this},Mt.utcfunction(e){return this.utcOffset(0,e)},Mt.localfunction(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC!1,e&&this.subtract(Na(this),\\\m\\\)),this},Mt.parseZonefunction(){if(null!this._tzm)this.utcOffset(this._tzm,!1,!0);else if(\\\string\\\typeof this._i){var eza(ne,this._i);null!e?this.utcOffset(e):this.utcOffset(0,!0)}return this},Mt.hasAlignedHourOffsetfunction(e){return!!this.isValid()&&(ee?Ha(e).utcOffset():0,(this.utcOffset()-e)%600)},Mt.isDSTfunction(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Mt.isLocalfunction(){return!!this.isValid()&&!this._isUTC},Mt.isUtcOffsetfunction(){return!!this.isValid()&&this._isUTC},Mt.isUtcRa,Mt.isUTCRa,Mt.zoneAbbrfunction(){return this._isUTC?\\\UTC\\\:\\\\\\},Mt.zoneNamefunction(){return this._isUTC?\\\Coordinated Universal Time\\\:\\\\\\},Mt.datest(\\\dates accessor is deprecated. Use date instead.\\\,_t),Mt.monthst(\\\months accessor is deprecated. Use month instead\\\,Ae),Mt.yearst(\\\years accessor is deprecated. Use year instead\\\,ve),Mt.zonet(\\\moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\\\,function(e,a){return null!e?(\\\string\\\!typeof e&&(e-e),this.utcOffset(e,a),this):-this.utcOffset()}),Mt.isDSTShiftedt(\\\isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\\\,function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e{};if(k(e,this),(eva(e))._a){var ae._isUTC?c(e._a):Ha(e._a);this._isDSTShiftedthis.isValid()&&0\u003Cr(e._a,a.toArray())}else this._isDSTShifted!1;return this._isDSTShifted});var Ltj.prototype;function ct(e,a,t,s){var nma(),dc().set(s,a);return nt(d,e)}function Yt(e,a,t){if(m(e)&&(ae,evoid 0),ee||\\\\\\,null!a)return ct(e,a,t,\\\month\\\);var s,n;for(s0;s\u003C12;s++)nsct(e,s,t,\\\month\\\);return n}function yt(e,a,t,s){a(\\\boolean\\\typeof e?m(a)&&(ta,avoid 0):(ae,e!1,m(ta)&&(ta,avoid 0)),a||\\\\\\);var n,dma(),re?d._week.dow:0;if(null!t)return ct(a,(t+r)%7,s,\\\day\\\);var _;for(n0;n\u003C7;n++)_nct(a,(n+r)%7,s,\\\day\\\);return _}Lt.calendarfunction(e,a,t){var sthis._calendare||this._calendar.sameElse;return H(s)?s.call(a,t):s},Lt.longDateFormatfunction(e){var athis._longDateFormate,tthis._longDateFormate.toUpperCase();return a||!t?a:(this._longDateFormatet.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormate)},Lt.invalidDatefunction(){return this._invalidDate},Lt.ordinalfunction(e){return this._ordinal.replace(\\\%d\\\,e)},Lt.preparseht,Lt.postformatht,Lt.relativeTimefunction(e,a,t,s){var nthis._relativeTimet;return H(n)?n(e,a,t,s):n.replace(/%d/i,e)},Lt.pastFuturefunction(e,a){var tthis._relativeTime0\u003Ce?\\\future\\\:\\\past\\\;return H(t)?t(a):t.replace(/%s/i,a)},Lt.setfunction(e){var a,t;for(t in e)H(aet)?thista:this\\\_\\\+ta;this._confige,this._dayOfMonthOrdinalParseLenientnew RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+\\\|\\\+/\\\\d{1,2}/.source)},Lt.monthsfunction(e,a){return e?_(this._months)?this._monthse.month():this._months(this._months.isFormat||xe).test(a)?\\\format\\\:\\\standalone\\\e.month():_(this._months)?this._months:this._months.standalone},Lt.monthsShortfunction(e,a){return e?_(this._monthsShort)?this._monthsShorte.month():this._monthsShortxe.test(a)?\\\format\\\:\\\standalone\\\e.month():_(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Lt.monthsParsefunction(e,a,t){var s,n,d;if(this._monthsParseExact)return function(e,a,t){var s,n,d,re.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse,this._longMonthsParse,this._shortMonthsParse,s0;s\u003C12;++s)dc(2e3,s),this._shortMonthsParsesthis.monthsShort(d,\\\\\\).toLocaleLowerCase(),this._longMonthsParsesthis.months(d,\\\\\\).toLocaleLowerCase();return t?\\\MMM\\\a?-1!(nwe.call(this._shortMonthsParse,r))?n:null:-1!(nwe.call(this._longMonthsParse,r))?n:null:\\\MMM\\\a?-1!(nwe.call(this._shortMonthsParse,r))?n:-1!(nwe.call(this._longMonthsParse,r))?n:null:-1!(nwe.call(this._longMonthsParse,r))?n:-1!(nwe.call(this._shortMonthsParse,r))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse,this._longMonthsParse,this._shortMonthsParse),s0;s\u003C12;s++){if(nc(2e3,s),t&&!this._longMonthsParses&&(this._longMonthsParsesnew RegExp(\\\^\\\+this.months(n,\\\\\\).replace(\\\.\\\,\\\\\\)+\\\$\\\,\\\i\\\),this._shortMonthsParsesnew RegExp(\\\^\\\+this.monthsShort(n,\\\\\\).replace(\\\.\\\,\\\\\\)+\\\$\\\,\\\i\\\)),t||this._monthsParses||(d\\\^\\\+this.months(n,\\\\\\)+\\\|^\\\+this.monthsShort(n,\\\\\\),this._monthsParsesnew RegExp(d.replace(\\\.\\\,\\\\\\),\\\i\\\)),t&&\\\MMMM\\\a&&this._longMonthsParses.test(e))return s;if(t&&\\\MMM\\\a&&this._shortMonthsParses.test(e))return s;if(!t&&this._monthsParses.test(e))return s}},Lt.monthsRegexfunction(e){return this._monthsParseExact?(h(this,\\\_monthsRegex\\\)||ze.call(this),e?this._monthsStrictRegex:this._monthsRegex):(h(this,\\\_monthsRegex\\\)||(this._monthsRegexFe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},Lt.monthsShortRegexfunction(e){return this._monthsParseExact?(h(this,\\\_monthsRegex\\\)||ze.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,\\\_monthsShortRegex\\\)||(this._monthsShortRegexEe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},Lt.weekfunction(e){return Ce(e,this._week.dow,this._week.doy).week},Lt.firstDayOfYearfunction(){return this._week.doy},Lt.firstDayOfWeekfunction(){return this._week.dow},Lt.weekdaysfunction(e,a){var t_(this._weekdays)?this._weekdays:this._weekdayse&&!0!e&&this._weekdays.isFormat.test(a)?\\\format\\\:\\\standalone\\\;return!0e?Ue(t,this._week.dow):e?te.day():t},Lt.weekdaysMinfunction(e){return!0e?Ue(this._weekdaysMin,this._week.dow):e?this._weekdaysMine.day():this._weekdaysMin},Lt.weekdaysShortfunction(e){return!0e?Ue(this._weekdaysShort,this._week.dow):e?this._weekdaysShorte.day():this._weekdaysShort},Lt.weekdaysParsefunction(e,a,t){var s,n,d;if(this._weekdaysParseExact)return function(e,a,t){var s,n,d,re.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse,this._shortWeekdaysParse,this._minWeekdaysParse,s0;s\u003C7;++s)dc(2e3,1).day(s),this._minWeekdaysParsesthis.weekdaysMin(d,\\\\\\).toLocaleLowerCase(),this._shortWeekdaysParsesthis.weekdaysShort(d,\\\\\\).toLocaleLowerCase(),this._weekdaysParsesthis.weekdays(d,\\\\\\).toLocaleLowerCase();return t?\\\dddd\\\a?-1!(nwe.call(this._weekdaysParse,r))?n:null:\\\ddd\\\a?-1!(nwe.call(this._shortWeekdaysParse,r))?n:null:-1!(nwe.call(this._minWeekdaysParse,r))?n:null:\\\dddd\\\a?-1!(nwe.call(this._weekdaysParse,r))?n:-1!(nwe.call(this._shortWeekdaysParse,r))?n:-1!(nwe.call(this._minWeekdaysParse,r))?n:null:\\\ddd\\\a?-1!(nwe.call(this._shortWeekdaysParse,r))?n:-1!(nwe.call(this._weekdaysParse,r))?n:-1!(nwe.call(this._minWeekdaysParse,r))?n:null:-1!(nwe.call(this._minWeekdaysParse,r))?n:-1!(nwe.call(this._weekdaysParse,r))?n:-1!(nwe.call(this._shortWeekdaysParse,r))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse,this._minWeekdaysParse,this._shortWeekdaysParse,this._fullWeekdaysParse),s0;s\u003C7;s++){if(nc(2e3,1).day(s),t&&!this._fullWeekdaysParses&&(this._fullWeekdaysParsesnew RegExp(\\\^\\\+this.weekdays(n,\\\\\\).replace(\\\.\\\,\\\\\\\\\\\.?\\\)+\\\$\\\,\\\i\\\),this._shortWeekdaysParsesnew RegExp(\\\^\\\+this.weekdaysShort(n,\\\\\\).replace(\\\.\\\,\\\\\\\\\\\.?\\\)+\\\$\\\,\\\i\\\),this._minWeekdaysParsesnew RegExp(\\\^\\\+this.weekdaysMin(n,\\\\\\).replace(\\\.\\\,\\\\\\\\\\\.?\\\)+\\\$\\\,\\\i\\\)),this._weekdaysParses||(d\\\^\\\+this.weekdays(n,\\\\\\)+\\\|^\\\+this.weekdaysShort(n,\\\\\\)+\\\|^\\\+this.weekdaysMin(n,\\\\\\),this._weekdaysParsesnew RegExp(d.replace(\\\.\\\,\\\\\\),\\\i\\\)),t&&\\\dddd\\\a&&this._fullWeekdaysParses.test(e))return s;if(t&&\\\ddd\\\a&&this._shortWeekdaysParses.test(e))return s;if(t&&\\\dd\\\a&&this._minWeekdaysParses.test(e))return s;if(!t&&this._weekdaysParses.test(e))return s}},Lt.weekdaysRegexfunction(e){return this._weekdaysParseExact?(h(this,\\\_weekdaysRegex\\\)||qe.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,\\\_weekdaysRegex\\\)||(this._weekdaysRegexZe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},Lt.weekdaysShortRegexfunction(e){return this._weekdaysParseExact?(h(this,\\\_weekdaysRegex\\\)||qe.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,\\\_weekdaysShortRegex\\\)||(this._weekdaysShortRegex$e),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Lt.weekdaysMinRegexfunction(e){return this._weekdaysParseExact?(h(this,\\\_weekdaysRegex\\\)||qe.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,\\\_weekdaysMinRegex\\\)||(this._weekdaysMinRegexBe),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Lt.isPMfunction(e){return\\\p\\\(e+\\\\\\).toLowerCase().charAt(0)},Lt.meridiemfunction(e,a,t){return 11\u003Ce?t?\\\pm\\\:\\\PM\\\:t?\\\am\\\:\\\AM\\\},ia(\\\en\\\,{dayOfMonthOrdinalParse:/\\\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var ae%10;return e+(1g(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)}}),l.langt(\\\moment.lang is deprecated. Use moment.locale instead.\\\,ia),l.langDatat(\\\moment.langData is deprecated. Use moment.localeData instead.\\\,ma);var ftMath.abs;function kt(e,a,t,s){var nUa(a,t);return e._milliseconds+s*n._milliseconds,e._days+s*n._days,e._months+s*n._months,e._bubble()}function pt(e){return e\u003C0?Math.floor(e):Math.ceil(e)}function Dt(e){return 4800*e/146097}function Tt(e){return 146097*e/4800}function gt(e){return function(){return this.as(e)}}var wtgt(\\\ms\\\),vtgt(\\\s\\\),Stgt(\\\m\\\),Htgt(\\\h\\\),btgt(\\\d\\\),jtgt(\\\w\\\),xtgt(\\\M\\\),Otgt(\\\Q\\\),Ptgt(\\\y\\\);function Wt(e){return function(){return this.isValid()?this._datae:NaN}}var AtWt(\\\milliseconds\\\),EtWt(\\\seconds\\\),FtWt(\\\minutes\\\),ztWt(\\\hours\\\),JtWt(\\\days\\\),NtWt(\\\months\\\),RtWt(\\\years\\\);var CtMath.round,It{ss:44,s:45,m:45,h:22,d:26,M:11};var UtMath.abs;function Gt(e){return(0\u003Ce)-(e\u003C0)||+e}function Vt(){if(!this.isValid())return this.localeData().invalidDate();var e,a,tUt(this._milliseconds)/1e3,sUt(this._days),nUt(this._months);aT((eT(t/60))/60),t%60,e%60;var dT(n/12),rn%12,_s,ia,oe,mt?t.toFixed(3).replace(/\\\\.?0+$/,\\\\\\):\\\\\\,uthis.asSeconds();if(!u)return\\\P0D\\\;var lu\u003C0?\\\-\\\:\\\\\\,MGt(this._months)!Gt(u)?\\\-\\\:\\\\\\,hGt(this._days)!Gt(u)?\\\-\\\:\\\\\\,LGt(this._milliseconds)!Gt(u)?\\\-\\\:\\\\\\;return l+\\\P\\\+(d?M+d+\\\Y\\\:\\\\\\)+(r?M+r+\\\M\\\:\\\\\\)+(_?h+_+\\\D\\\:\\\\\\)+(i||o||m?\\\T\\\:\\\\\\)+(i?L+i+\\\H\\\:\\\\\\)+(o?L+o+\\\M\\\:\\\\\\)+(m?L+m+\\\S\\\:\\\\\\)}var KtPa.prototype;Kt.isValidfunction(){return this._isValid},Kt.absfunction(){var ethis._data;return this._millisecondsft(this._milliseconds),this._daysft(this._days),this._monthsft(this._months),e.millisecondsft(e.milliseconds),e.secondsft(e.seconds),e.minutesft(e.minutes),e.hoursft(e.hours),e.monthsft(e.months),e.yearsft(e.years),this},Kt.addfunction(e,a){return kt(this,e,a,1)},Kt.subtractfunction(e,a){return kt(this,e,a,-1)},Kt.asfunction(e){if(!this.isValid())return NaN;var a,t,sthis._milliseconds;if(\\\month\\\(eP(e))||\\\quarter\\\e||\\\year\\\e)switch(athis._days+s/864e5,tthis._months+Dt(a),e){case\\\month\\\:return t;case\\\quarter\\\:return t/3;case\\\year\\\:return t/12}else switch(athis._days+Math.round(Tt(this._months)),e){case\\\week\\\:return a/7+s/6048e5;case\\\day\\\:return a+s/864e5;case\\\hour\\\:return 24*a+s/36e5;case\\\minute\\\:return 1440*a+s/6e4;case\\\second\\\:return 86400*a+s/1e3;case\\\millisecond\\\:return Math.floor(864e5*a)+s;default:throw new Error(\\\Unknown unit \\\+e)}},Kt.asMillisecondswt,Kt.asSecondsvt,Kt.asMinutesSt,Kt.asHoursHt,Kt.asDaysbt,Kt.asWeeksjt,Kt.asMonthsxt,Kt.asQuartersOt,Kt.asYearsPt,Kt.valueOffunction(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},Kt._bubblefunction(){var e,a,t,s,n,dthis._milliseconds,rthis._days,_this._months,ithis._data;return 0\u003Cd&&0\u003Cr&&0\u003C_||d\u003C0&&r\u003C0&&_\u003C0||(d+864e5*pt(Tt(_)+r),_r0),i.millisecondsd%1e3,eT(d/1e3),i.secondse%60,aT(e/60),i.minutesa%60,tT(a/60),i.hourst%24,_+nT(Dt(r+T(t/24))),r-pt(Tt(n)),sT(_/12),_%12,i.daysr,i.months_,i.yearss,this},Kt.clonefunction(){return Ua(this)},Kt.getfunction(e){return eP(e),this.isValid()?thise+\\\s\\\():NaN},Kt.millisecondsAt,Kt.secondsEt,Kt.minutesFt,Kt.hourszt,Kt.daysJt,Kt.weeksfunction(){return T(this.days()/7)},Kt.monthsNt,Kt.yearsRt,Kt.humanizefunction(e){if(!this.isValid())return this.localeData().invalidDate();var a,t,s,n,d,r,_,i,o,m,u,lthis.localeData(),M(t!e,sl,nUa(athis).abs(),dCt(n.as(\\\s\\\)),rCt(n.as(\\\m\\\)),_Ct(n.as(\\\h\\\)),iCt(n.as(\\\d\\\)),oCt(n.as(\\\M\\\)),mCt(n.as(\\\y\\\)),(ud\u003CIt.ss&&\\\s\\\,d||d\u003CIt.s&&\\\ss\\\,d||r\u003C1&&\\\m\\\||r\u003CIt.m&&\\\mm\\\,r||_\u003C1&&\\\h\\\||_\u003CIt.h&&\\\hh\\\,_||i\u003C1&&\\\d\\\||i\u003CIt.d&&\\\dd\\\,i||o\u003C1&&\\\M\\\||o\u003CIt.M&&\\\MM\\\,o||m\u003C1&&\\\y\\\||\\\yy\\\,m)2t,u30\u003C+a,u4s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,u));return e&&(Ml.pastFuture(+this,M)),l.postformat(M)},Kt.toISOStringVt,Kt.toStringVt,Kt.toJSONVt,Kt.localeQa,Kt.localeDataet,Kt.toIsoStringt(\\\toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\\\,Vt),Kt.langXa,C(\\\X\\\,0,0,\\\unix\\\),C(\\\x\\\,0,0,\\\valueOf\\\),ie(\\\x\\\,se),ie(\\\X\\\,/+-?\\\\d+(\\\\.\\\\d{1,3})?/),le(\\\X\\\,function(e,a,t){t._dnew Date(1e3*parseFloat(e,10))}),le(\\\x\\\,function(e,a,t){t._dnew Date(g(e))}),l.version\\\2.24.0\\\,eHa,l.fnMt,l.minfunction(){return xa(\\\isBefore\\\,.slice.call(arguments,0))},l.maxfunction(){return xa(\\\isAfter\\\,.slice.call(arguments,0))},l.nowfunction(){return Date.now?Date.now():+new Date},l.utcc,l.unixfunction(e){return Ha(1e3*e)},l.monthsfunction(e,a){return Yt(e,a,\\\months\\\)},l.isDateu,l.localeia,l.invalidf,l.durationUa,l.isMomentD,l.weekdaysfunction(e,a,t){return yt(e,a,t,\\\weekdays\\\)},l.parseZonefunction(){return Ha.apply(null,arguments).parseZone()},l.localeDatama,l.isDurationWa,l.monthsShortfunction(e,a){return Yt(e,a,\\\monthsShort\\\)},l.weekdaysMinfunction(e,a,t){return yt(e,a,t,\\\weekdaysMin\\\)},l.defineLocaleoa,l.updateLocalefunction(e,a){if(null!a){var t,s,nsa;null!(s_a(e))&&(ns._config),(tnew j(ab(n,a))).parentLocalenae,naet,ia(e)}else null!nae&&(null!nae.parentLocale?naenae.parentLocale:null!nae&&delete nae);return nae},l.localesfunction(){return s(na)},l.weekdaysShortfunction(e,a,t){return yt(e,a,t,\\\weekdaysShort\\\)},l.normalizeUnitsP,l.relativeTimeRoundingfunction(e){return void 0e?Ct:\\\function\\\typeof e&&(Cte,!0)},l.relativeTimeThresholdfunction(e,a){return void 0!Ite&&(void 0a?Ite:(Itea,\\\s\\\e&&(It.ssa-1),!0))},l.calendarFormatfunction(e,a){var te.diff(a,\\\days\\\,!0);return t\u003C-6?\\\sameElse\\\:t\u003C-1?\\\lastWeek\\\:t\u003C0?\\\lastDay\\\:t\u003C1?\\\sameDay\\\:t\u003C2?\\\nextDay\\\:t\u003C7?\\\nextWeek\\\:\\\sameElse\\\},l.prototypeMt,l.HTML5_FMT{DATETIME_LOCAL:\\\YYYY-MM-DDTHH:mm\\\,DATETIME_LOCAL_SECONDS:\\\YYYY-MM-DDTHH:mm:ss\\\,DATETIME_LOCAL_MS:\\\YYYY-MM-DDTHH:mm:ss.SSS\\\,DATE:\\\YYYY-MM-DD\\\,TIME:\\\HH:mm\\\,TIME_SECONDS:\\\HH:mm:ss\\\,TIME_MS:\\\HH:mm:ss.SSS\\\,WEEK:\\\GGGG-WWW\\\,MONTH:\\\YYYY-MM\\\},l.defineLocale(\\\af\\\,{months:\\\Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\\\.split(\\\_\\\),weekdays:\\\Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\\\.split(\\\_\\\),weekdaysShort:\\\Son_Maa_Din_Woe_Don_Vry_Sat\\\.split(\\\_\\\),weekdaysMin:\\\So_Ma_Di_Wo_Do_Vr_Sa\\\.split(\\\_\\\),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e\u003C12?t?\\\vm\\\:\\\VM\\\:t?\\\nm\\\:\\\NM\\\},longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Vandag om LT\\\,nextDay:\\\M\\\\xf4re om LT\\\,nextWeek:\\\dddd om LT\\\,lastDay:\\\Gister om LT\\\,lastWeek:\\\Laas dddd om LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\oor %s\\\,past:\\\%s gelede\\\,s:\\\n paar sekondes\\\,ss:\\\%d sekondes\\\,m:\\\n minuut\\\,mm:\\\%d minute\\\,h:\\\n uur\\\,hh:\\\%d ure\\\,d:\\\n dag\\\,dd:\\\%d dae\\\,M:\\\n maand\\\,MM:\\\%d maande\\\,y:\\\n jaar\\\,yy:\\\%d jaar\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1e||8e||20\u003Ce?\\\ste\\\:\\\de\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\ar-dz\\\,{months:\\\\\\\u062c\\\\u0627\\\\u0646\\\\u0641\\\\u064a_\\\\u0641\\\\u064a\\\\u0641\\\\u0631\\\\u064a_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0641\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u062c\\\\u0648\\\\u0627\\\\u0646_\\\\u062c\\\\u0648\\\\u064a\\\\u0644\\\\u064a\\\\u0629_\\\\u0623\\\\u0648\\\\u062a_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u062c\\\\u0627\\\\u0646\\\\u0641\\\\u064a_\\\\u0641\\\\u064a\\\\u0641\\\\u0631\\\\u064a_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0641\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u062c\\\\u0648\\\\u0627\\\\u0646_\\\\u062c\\\\u0648\\\\u064a\\\\u0644\\\\u064a\\\\u0629_\\\\u0623\\\\u0648\\\\u062a_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0627\\\\u062d\\\\u062f_\\\\u0627\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0623\\\\u062d_\\\\u0625\\\\u062b_\\\\u062b\\\\u0644\\\\u0627_\\\\u0623\\\\u0631_\\\\u062e\\\\u0645_\\\\u062c\\\\u0645_\\\\u0633\\\\u0628\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u0627 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0641\\\\u064a %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:\\\\\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,ss:\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,h:\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,d:\\\\\\\u064a\\\\u0648\\\\u0645\\\,dd:\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,M:\\\\\\\u0634\\\\u0647\\\\u0631\\\,MM:\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0633\\\\u0646\\\\u0629\\\,yy:\\\%d \\\\u0633\\\\u0646\\\\u0648\\\\u0627\\\\u062a\\\},week:{dow:0,doy:4}}),l.defineLocale(\\\ar-kw\\\,{months:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\\u0632_\\\\u063a\\\\u0634\\\\u062a_\\\\u0634\\\\u062a\\\\u0646\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0646\\\\u0628\\\\u0631_\\\\u062f\\\\u062c\\\\u0646\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\\u0632_\\\\u063a\\\\u0634\\\\u062a_\\\\u0634\\\\u062a\\\\u0646\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0646\\\\u0628\\\\u0631_\\\\u062f\\\\u062c\\\\u0646\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062a\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0627\\\\u062d\\\\u062f_\\\\u0627\\\\u062a\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u0627 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0641\\\\u064a %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:\\\\\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,ss:\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,h:\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,d:\\\\\\\u064a\\\\u0648\\\\u0645\\\,dd:\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,M:\\\\\\\u0634\\\\u0647\\\\u0631\\\,MM:\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0633\\\\u0646\\\\u0629\\\,yy:\\\%d \\\\u0633\\\\u0646\\\\u0648\\\\u0627\\\\u062a\\\},week:{dow:0,doy:12}});var Zt{1:\\\1\\\,2:\\\2\\\,3:\\\3\\\,4:\\\4\\\,5:\\\5\\\,6:\\\6\\\,7:\\\7\\\,8:\\\8\\\,9:\\\9\\\,0:\\\0\\\},$tfunction(e){return 0e?0:1e?1:2e?2:3\u003Ce%100&&e%100\u003C10?3:11\u003Ce%100?4:5},Bt{s:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,\\\%d \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,\\\%d \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,h:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,d:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u064a\\\\u0648\\\\u0645\\\,\\\\\\\u064a\\\\u0648\\\\u0645 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u064a\\\\u0648\\\\u0645\\\\u0627\\\\u0646\\\,\\\\\\\u064a\\\\u0648\\\\u0645\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,\\\%d \\\\u064a\\\\u0648\\\\u0645\\\\u064b\\\\u0627\\\,\\\%d \\\\u064a\\\\u0648\\\\u0645\\\,M:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0634\\\\u0647\\\\u0631\\\,\\\\\\\u0634\\\\u0647\\\\u0631 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u0634\\\\u0647\\\\u0631\\\\u0627\\\\u0646\\\,\\\\\\\u0634\\\\u0647\\\\u0631\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,\\\%d \\\\u0634\\\\u0647\\\\u0631\\\\u0627\\\,\\\%d \\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0639\\\\u0627\\\\u0645\\\,\\\\\\\u0639\\\\u0627\\\\u0645 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u0639\\\\u0627\\\\u0645\\\\u0627\\\\u0646\\\,\\\\\\\u0639\\\\u0627\\\\u0645\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u0639\\\\u0648\\\\u0627\\\\u0645\\\,\\\%d \\\\u0639\\\\u0627\\\\u0645\\\\u064b\\\\u0627\\\,\\\%d \\\\u0639\\\\u0627\\\\u0645\\\},qtfunction(r){return function(e,a,t,s){var n$t(e),dBtr$t(e);return 2n&&(dda?0:1),d.replace(/%d/i,e)}},Qt\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631\\\,\\\\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631\\\,\\\\\\\u0645\\\\u0627\\\\u0631\\\\u0633\\\,\\\\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644\\\,\\\\\\\u0645\\\\u0627\\\\u064a\\\\u0648\\\,\\\\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648\\\,\\\\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\,\\\\\\\u0623\\\\u063a\\\\u0633\\\\u0637\\\\u0633\\\,\\\\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631\\\,\\\\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\;l.defineLocale(\\\ar-ly\\\,{months:Qt,monthsShort:Qt,weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0623\\\\u062d\\\\u062f_\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\D/\\\\u200fM/\\\\u200fYYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0635|\\\\u0645/,isPM:function(e){return\\\\\\\u0645\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0635\\\:\\\\\\\u0645\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u064b\\\\u0627 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0628\\\\u0639\\\\u062f %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:qt(\\\s\\\),ss:qt(\\\s\\\),m:qt(\\\m\\\),mm:qt(\\\m\\\),h:qt(\\\h\\\),hh:qt(\\\h\\\),d:qt(\\\d\\\),dd:qt(\\\d\\\),M:qt(\\\M\\\),MM:qt(\\\M\\\),y:qt(\\\y\\\),yy:qt(\\\y\\\)},preparse:function(e){return e.replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/\\\\d/g,function(e){return Zte}).replace(/,/g,\\\\\\\u060c\\\)},week:{dow:6,doy:12}}),l.defineLocale(\\\ar-ma\\\,{months:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\\u0632_\\\\u063a\\\\u0634\\\\u062a_\\\\u0634\\\\u062a\\\\u0646\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0646\\\\u0628\\\\u0631_\\\\u062f\\\\u062c\\\\u0646\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\\u0632_\\\\u063a\\\\u0634\\\\u062a_\\\\u0634\\\\u062a\\\\u0646\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0646\\\\u0628\\\\u0631_\\\\u062f\\\\u062c\\\\u0646\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062a\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0627\\\\u062d\\\\u062f_\\\\u0627\\\\u062a\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u0627 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0641\\\\u064a %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:\\\\\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,ss:\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,h:\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,d:\\\\\\\u064a\\\\u0648\\\\u0645\\\,dd:\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,M:\\\\\\\u0634\\\\u0647\\\\u0631\\\,MM:\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0633\\\\u0646\\\\u0629\\\,yy:\\\%d \\\\u0633\\\\u0646\\\\u0648\\\\u0627\\\\u062a\\\},week:{dow:6,doy:12}});var Xt{1:\\\\\\\u0661\\\,2:\\\\\\\u0662\\\,3:\\\\\\\u0663\\\,4:\\\\\\\u0664\\\,5:\\\\\\\u0665\\\,6:\\\\\\\u0666\\\,7:\\\\\\\u0667\\\,8:\\\\\\\u0668\\\,9:\\\\\\\u0669\\\,0:\\\\\\\u0660\\\},es{\\\\\\\u0661\\\:\\\1\\\,\\\\\\\u0662\\\:\\\2\\\,\\\\\\\u0663\\\:\\\3\\\,\\\\\\\u0664\\\:\\\4\\\,\\\\\\\u0665\\\:\\\5\\\,\\\\\\\u0666\\\:\\\6\\\,\\\\\\\u0667\\\:\\\7\\\,\\\\\\\u0668\\\:\\\8\\\,\\\\\\\u0669\\\:\\\9\\\,\\\\\\\u0660\\\:\\\0\\\};l.defineLocale(\\\ar-sa\\\,{months:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648_\\\\u0623\\\\u063a\\\\u0633\\\\u0637\\\\u0633_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631_\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648_\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648_\\\\u0623\\\\u063a\\\\u0633\\\\u0637\\\\u0633_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0623\\\\u062d\\\\u062f_\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0635|\\\\u0645/,isPM:function(e){return\\\\\\\u0645\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0635\\\:\\\\\\\u0645\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u0627 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0641\\\\u064a %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:\\\\\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,ss:\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,h:\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,d:\\\\\\\u064a\\\\u0648\\\\u0645\\\,dd:\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,M:\\\\\\\u0634\\\\u0647\\\\u0631\\\,MM:\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0633\\\\u0646\\\\u0629\\\,yy:\\\%d \\\\u0633\\\\u0646\\\\u0648\\\\u0627\\\\u062a\\\},preparse:function(e){return e.replace(/\\\\u0661\\\\u0662\\\\u0663\\\\u0664\\\\u0665\\\\u0666\\\\u0667\\\\u0668\\\\u0669\\\\u0660/g,function(e){return ese}).replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/\\\\d/g,function(e){return Xte}).replace(/,/g,\\\\\\\u060c\\\)},week:{dow:0,doy:6}}),l.defineLocale(\\\ar-tn\\\,{months:\\\\\\\u062c\\\\u0627\\\\u0646\\\\u0641\\\\u064a_\\\\u0641\\\\u064a\\\\u0641\\\\u0631\\\\u064a_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0641\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u062c\\\\u0648\\\\u0627\\\\u0646_\\\\u062c\\\\u0648\\\\u064a\\\\u0644\\\\u064a\\\\u0629_\\\\u0623\\\\u0648\\\\u062a_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u062c\\\\u0627\\\\u0646\\\\u0641\\\\u064a_\\\\u0641\\\\u064a\\\\u0641\\\\u0631\\\\u064a_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0623\\\\u0641\\\\u0631\\\\u064a\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u062c\\\\u0648\\\\u0627\\\\u0646_\\\\u062c\\\\u0648\\\\u064a\\\\u0644\\\\u064a\\\\u0629_\\\\u0623\\\\u0648\\\\u062a_\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631_\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0623\\\\u062d\\\\u062f_\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u0627 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0644\\\\u0649 \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0641\\\\u064a %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:\\\\\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,ss:\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,h:\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,d:\\\\\\\u064a\\\\u0648\\\\u0645\\\,dd:\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,M:\\\\\\\u0634\\\\u0647\\\\u0631\\\,MM:\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0633\\\\u0646\\\\u0629\\\,yy:\\\%d \\\\u0633\\\\u0646\\\\u0648\\\\u0627\\\\u062a\\\},week:{dow:1,doy:4}});var as{1:\\\\\\\u0661\\\,2:\\\\\\\u0662\\\,3:\\\\\\\u0663\\\,4:\\\\\\\u0664\\\,5:\\\\\\\u0665\\\,6:\\\\\\\u0666\\\,7:\\\\\\\u0667\\\,8:\\\\\\\u0668\\\,9:\\\\\\\u0669\\\,0:\\\\\\\u0660\\\},ts{\\\\\\\u0661\\\:\\\1\\\,\\\\\\\u0662\\\:\\\2\\\,\\\\\\\u0663\\\:\\\3\\\,\\\\\\\u0664\\\:\\\4\\\,\\\\\\\u0665\\\:\\\5\\\,\\\\\\\u0666\\\:\\\6\\\,\\\\\\\u0667\\\:\\\7\\\,\\\\\\\u0668\\\:\\\8\\\,\\\\\\\u0669\\\:\\\9\\\,\\\\\\\u0660\\\:\\\0\\\},ssfunction(e){return 0e?0:1e?1:2e?2:3\u003Ce%100&&e%100\u003C10?3:11\u003Ce%100?4:5},ns{s:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u062b\\\\u0648\\\\u0627\\\\u0646\\\,\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,\\\%d \\\\u062b\\\\u0627\\\\u0646\\\\u064a\\\\u0629\\\,m:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u062f\\\\u0642\\\\u0627\\\\u0626\\\\u0642\\\,\\\%d \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,\\\%d \\\\u062f\\\\u0642\\\\u064a\\\\u0642\\\\u0629\\\,h:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u0629 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\\u0629\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\\u0627\\\\u0646\\\,\\\\\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\\u064a\\\\u0646\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0627\\\\u062a\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u0629\\\,d:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u064a\\\\u0648\\\\u0645\\\,\\\\\\\u064a\\\\u0648\\\\u0645 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u064a\\\\u0648\\\\u0645\\\\u0627\\\\u0646\\\,\\\\\\\u064a\\\\u0648\\\\u0645\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u064a\\\\u0627\\\\u0645\\\,\\\%d \\\\u064a\\\\u0648\\\\u0645\\\\u064b\\\\u0627\\\,\\\%d \\\\u064a\\\\u0648\\\\u0645\\\,M:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0634\\\\u0647\\\\u0631\\\,\\\\\\\u0634\\\\u0647\\\\u0631 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u0634\\\\u0647\\\\u0631\\\\u0627\\\\u0646\\\,\\\\\\\u0634\\\\u0647\\\\u0631\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u0634\\\\u0647\\\\u0631\\\,\\\%d \\\\u0634\\\\u0647\\\\u0631\\\\u0627\\\,\\\%d \\\\u0634\\\\u0647\\\\u0631\\\,y:\\\\\\\u0623\\\\u0642\\\\u0644 \\\\u0645\\\\u0646 \\\\u0639\\\\u0627\\\\u0645\\\,\\\\\\\u0639\\\\u0627\\\\u0645 \\\\u0648\\\\u0627\\\\u062d\\\\u062f\\\,\\\\\\\u0639\\\\u0627\\\\u0645\\\\u0627\\\\u0646\\\,\\\\\\\u0639\\\\u0627\\\\u0645\\\\u064a\\\\u0646\\\,\\\%d \\\\u0623\\\\u0639\\\\u0648\\\\u0627\\\\u0645\\\,\\\%d \\\\u0639\\\\u0627\\\\u0645\\\\u064b\\\\u0627\\\,\\\%d \\\\u0639\\\\u0627\\\\u0645\\\},dsfunction(r){return function(e,a,t,s){var nss(e),dnsrss(e);return 2n&&(dda?0:1),d.replace(/%d/i,e)}},rs\\\\\\\u064a\\\\u0646\\\\u0627\\\\u064a\\\\u0631\\\,\\\\\\\u0641\\\\u0628\\\\u0631\\\\u0627\\\\u064a\\\\u0631\\\,\\\\\\\u0645\\\\u0627\\\\u0631\\\\u0633\\\,\\\\\\\u0623\\\\u0628\\\\u0631\\\\u064a\\\\u0644\\\,\\\\\\\u0645\\\\u0627\\\\u064a\\\\u0648\\\,\\\\\\\u064a\\\\u0648\\\\u0646\\\\u064a\\\\u0648\\\,\\\\\\\u064a\\\\u0648\\\\u0644\\\\u064a\\\\u0648\\\,\\\\\\\u0623\\\\u063a\\\\u0633\\\\u0637\\\\u0633\\\,\\\\\\\u0633\\\\u0628\\\\u062a\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u0623\\\\u0643\\\\u062a\\\\u0648\\\\u0628\\\\u0631\\\,\\\\\\\u0646\\\\u0648\\\\u0641\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u062f\\\\u064a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\;l.defineLocale(\\\ar\\\,{months:rs,monthsShort:rs,weekdays:\\\\\\\u0627\\\\u0644\\\\u0623\\\\u062d\\\\u062f_\\\\u0627\\\\u0644\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u0627\\\\u0644\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u0627\\\\u0644\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u0627\\\\u0644\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0627\\\\u0644\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0623\\\\u062d\\\\u062f_\\\\u0625\\\\u062b\\\\u0646\\\\u064a\\\\u0646_\\\\u062b\\\\u0644\\\\u0627\\\\u062b\\\\u0627\\\\u0621_\\\\u0623\\\\u0631\\\\u0628\\\\u0639\\\\u0627\\\\u0621_\\\\u062e\\\\u0645\\\\u064a\\\\u0633_\\\\u062c\\\\u0645\\\\u0639\\\\u0629_\\\\u0633\\\\u0628\\\\u062a\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u062d_\\\\u0646_\\\\u062b_\\\\u0631_\\\\u062e_\\\\u062c_\\\\u0633\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\D/\\\\u200fM/\\\\u200fYYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0635|\\\\u0645/,isPM:function(e){return\\\\\\\u0645\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0635\\\:\\\\\\\u0645\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0644\\\\u064a\\\\u0648\\\\u0645 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextDay:\\\\\\\u063a\\\\u062f\\\\u064b\\\\u0627 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,nextWeek:\\\dddd \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastDay:\\\\\\\u0623\\\\u0645\\\\u0633 \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,lastWeek:\\\dddd \\\\u0639\\\\u0646\\\\u062f \\\\u0627\\\\u0644\\\\u0633\\\\u0627\\\\u0639\\\\u0629 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0628\\\\u0639\\\\u062f %s\\\,past:\\\\\\\u0645\\\\u0646\\\\u0630 %s\\\,s:ds(\\\s\\\),ss:ds(\\\s\\\),m:ds(\\\m\\\),mm:ds(\\\m\\\),h:ds(\\\h\\\),hh:ds(\\\h\\\),d:ds(\\\d\\\),dd:ds(\\\d\\\),M:ds(\\\M\\\),MM:ds(\\\M\\\),y:ds(\\\y\\\),yy:ds(\\\y\\\)},preparse:function(e){return e.replace(/\\\\u0661\\\\u0662\\\\u0663\\\\u0664\\\\u0665\\\\u0666\\\\u0667\\\\u0668\\\\u0669\\\\u0660/g,function(e){return tse}).replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/\\\\d/g,function(e){return ase}).replace(/,/g,\\\\\\\u060c\\\)},week:{dow:6,doy:12}});var _s{1:\\\-inci\\\,5:\\\-inci\\\,8:\\\-inci\\\,70:\\\-inci\\\,80:\\\-inci\\\,2:\\\-nci\\\,7:\\\-nci\\\,20:\\\-nci\\\,50:\\\-nci\\\,3:\\\-\\\\xfcnc\\\\xfc\\\,4:\\\-\\\\xfcnc\\\\xfc\\\,100:\\\-\\\\xfcnc\\\\xfc\\\,6:\\\-nc\\\\u0131\\\,9:\\\-uncu\\\,10:\\\-uncu\\\,30:\\\-uncu\\\,60:\\\-\\\\u0131nc\\\\u0131\\\,90:\\\-\\\\u0131nc\\\\u0131\\\};function is(e,a,t){var s,n;return\\\m\\\t?a?\\\\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u0430\\\:\\\\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u0443\\\:\\\h\\\t?a?\\\\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u0430\\\:\\\\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u0443\\\:e+\\\ \\\+(s+e,n{ss:a?\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0430_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\:\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0443_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,mm:a?\\\\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u0430_\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u044b_\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\:\\\\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u0443_\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\\u044b_\\\\u0445\\\\u0432\\\\u0456\\\\u043b\\\\u0456\\\\u043d\\\,hh:a?\\\\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u0430_\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u044b_\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\:\\\\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u0443_\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\\u044b_\\\\u0433\\\\u0430\\\\u0434\\\\u0437\\\\u0456\\\\u043d\\\,dd:\\\\\\\u0434\\\\u0437\\\\u0435\\\\u043d\\\\u044c_\\\\u0434\\\\u043d\\\\u0456_\\\\u0434\\\\u0437\\\\u0451\\\\u043d\\\,MM:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446_\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\\u044b_\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\\u0430\\\\u045e\\\,yy:\\\\\\\u0433\\\\u043e\\\\u0434_\\\\u0433\\\\u0430\\\\u0434\\\\u044b_\\\\u0433\\\\u0430\\\\u0434\\\\u043e\\\\u045e\\\}t.split(\\\_\\\),s%101&&s%100!11?n0:2\u003Cs%10&&s%10\u003C4&&(s%100\u003C10||20\u003Cs%100)?n1:n2)}l.defineLocale(\\\az\\\,{months:\\\yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr\\\.split(\\\_\\\),monthsShort:\\\yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek\\\.split(\\\_\\\),weekdays:\\\Bazar_Bazar ert\\\\u0259si_\\\\xc7\\\\u0259r\\\\u015f\\\\u0259nb\\\\u0259 ax\\\\u015fam\\\\u0131_\\\\xc7\\\\u0259r\\\\u015f\\\\u0259nb\\\\u0259_C\\\\xfcm\\\\u0259 ax\\\\u015fam\\\\u0131_C\\\\xfcm\\\\u0259_\\\\u015e\\\\u0259nb\\\\u0259\\\.split(\\\_\\\),weekdaysShort:\\\Baz_BzE_\\\\xc7Ax_\\\\xc7\\\\u0259r_CAx_C\\\\xfcm_\\\\u015e\\\\u0259n\\\.split(\\\_\\\),weekdaysMin:\\\Bz_BE_\\\\xc7A_\\\\xc7\\\\u0259_CA_C\\\\xfc_\\\\u015e\\\\u0259\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\bug\\\\xfcn saat LT\\\,nextDay:\\\sabah saat LT\\\,nextWeek:\\\g\\\\u0259l\\\\u0259n h\\\\u0259ft\\\\u0259 dddd saat LT\\\,lastDay:\\\d\\\\xfcn\\\\u0259n LT\\\,lastWeek:\\\ke\\\\xe7\\\\u0259n h\\\\u0259ft\\\\u0259 dddd saat LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s sonra\\\,past:\\\%s \\\\u0259vv\\\\u0259l\\\,s:\\\birne\\\\xe7\\\\u0259 saniy\\\\u0259\\\,ss:\\\%d saniy\\\\u0259\\\,m:\\\bir d\\\\u0259qiq\\\\u0259\\\,mm:\\\%d d\\\\u0259qiq\\\\u0259\\\,h:\\\bir saat\\\,hh:\\\%d saat\\\,d:\\\bir g\\\\xfcn\\\,dd:\\\%d g\\\\xfcn\\\,M:\\\bir ay\\\,MM:\\\%d ay\\\,y:\\\bir il\\\,yy:\\\%d il\\\},meridiemParse:/gec\\\\u0259|s\\\\u0259h\\\\u0259r|g\\\\xfcnd\\\\xfcz|ax\\\\u015fam/,isPM:function(e){return/^(g\\\\xfcnd\\\\xfcz|ax\\\\u015fam)$/.test(e)},meridiem:function(e,a,t){return e\u003C4?\\\gec\\\\u0259\\\:e\u003C12?\\\s\\\\u0259h\\\\u0259r\\\:e\u003C17?\\\g\\\\xfcnd\\\\xfcz\\\:\\\ax\\\\u015fam\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0131nc\\\\u0131|inci|nci|\\\\xfcnc\\\\xfc|nc\\\\u0131|uncu)/,ordinal:function(e){if(0e)return e+\\\-\\\\u0131nc\\\\u0131\\\;var ae%10;return e+(_sa||_se%100-a||_s100\u003Ce?100:null)},week:{dow:1,doy:7}}),l.defineLocale(\\\be\\\,{months:{format:\\\\\\\u0441\\\\u0442\\\\u0443\\\\u0434\\\\u0437\\\\u0435\\\\u043d\\\\u044f_\\\\u043b\\\\u044e\\\\u0442\\\\u0430\\\\u0433\\\\u0430_\\\\u0441\\\\u0430\\\\u043a\\\\u0430\\\\u0432\\\\u0456\\\\u043a\\\\u0430_\\\\u043a\\\\u0440\\\\u0430\\\\u0441\\\\u0430\\\\u0432\\\\u0456\\\\u043a\\\\u0430_\\\\u0442\\\\u0440\\\\u0430\\\\u045e\\\\u043d\\\\u044f_\\\\u0447\\\\u044d\\\\u0440\\\\u0432\\\\u0435\\\\u043d\\\\u044f_\\\\u043b\\\\u0456\\\\u043f\\\\u0435\\\\u043d\\\\u044f_\\\\u0436\\\\u043d\\\\u0456\\\\u045e\\\\u043d\\\\u044f_\\\\u0432\\\\u0435\\\\u0440\\\\u0430\\\\u0441\\\\u043d\\\\u044f_\\\\u043a\\\\u0430\\\\u0441\\\\u0442\\\\u0440\\\\u044b\\\\u0447\\\\u043d\\\\u0456\\\\u043a\\\\u0430_\\\\u043b\\\\u0456\\\\u0441\\\\u0442\\\\u0430\\\\u043f\\\\u0430\\\\u0434\\\\u0430_\\\\u0441\\\\u043d\\\\u0435\\\\u0436\\\\u043d\\\\u044f\\\.split(\\\_\\\),standalone:\\\\\\\u0441\\\\u0442\\\\u0443\\\\u0434\\\\u0437\\\\u0435\\\\u043d\\\\u044c_\\\\u043b\\\\u044e\\\\u0442\\\\u044b_\\\\u0441\\\\u0430\\\\u043a\\\\u0430\\\\u0432\\\\u0456\\\\u043a_\\\\u043a\\\\u0440\\\\u0430\\\\u0441\\\\u0430\\\\u0432\\\\u0456\\\\u043a_\\\\u0442\\\\u0440\\\\u0430\\\\u0432\\\\u0435\\\\u043d\\\\u044c_\\\\u0447\\\\u044d\\\\u0440\\\\u0432\\\\u0435\\\\u043d\\\\u044c_\\\\u043b\\\\u0456\\\\u043f\\\\u0435\\\\u043d\\\\u044c_\\\\u0436\\\\u043d\\\\u0456\\\\u0432\\\\u0435\\\\u043d\\\\u044c_\\\\u0432\\\\u0435\\\\u0440\\\\u0430\\\\u0441\\\\u0435\\\\u043d\\\\u044c_\\\\u043a\\\\u0430\\\\u0441\\\\u0442\\\\u0440\\\\u044b\\\\u0447\\\\u043d\\\\u0456\\\\u043a_\\\\u043b\\\\u0456\\\\u0441\\\\u0442\\\\u0430\\\\u043f\\\\u0430\\\\u0434_\\\\u0441\\\\u043d\\\\u0435\\\\u0436\\\\u0430\\\\u043d\\\\u044c\\\.split(\\\_\\\)},monthsShort:\\\\\\\u0441\\\\u0442\\\\u0443\\\\u0434_\\\\u043b\\\\u044e\\\\u0442_\\\\u0441\\\\u0430\\\\u043a_\\\\u043a\\\\u0440\\\\u0430\\\\u0441_\\\\u0442\\\\u0440\\\\u0430\\\\u0432_\\\\u0447\\\\u044d\\\\u0440\\\\u0432_\\\\u043b\\\\u0456\\\\u043f_\\\\u0436\\\\u043d\\\\u0456\\\\u0432_\\\\u0432\\\\u0435\\\\u0440_\\\\u043a\\\\u0430\\\\u0441\\\\u0442_\\\\u043b\\\\u0456\\\\u0441\\\\u0442_\\\\u0441\\\\u043d\\\\u0435\\\\u0436\\\.split(\\\_\\\),weekdays:{format:\\\\\\\u043d\\\\u044f\\\\u0434\\\\u0437\\\\u0435\\\\u043b\\\\u044e_\\\\u043f\\\\u0430\\\\u043d\\\\u044f\\\\u0434\\\\u0437\\\\u0435\\\\u043b\\\\u0430\\\\u043a_\\\\u0430\\\\u045e\\\\u0442\\\\u043e\\\\u0440\\\\u0430\\\\u043a_\\\\u0441\\\\u0435\\\\u0440\\\\u0430\\\\u0434\\\\u0443_\\\\u0447\\\\u0430\\\\u0446\\\\u0432\\\\u0435\\\\u0440_\\\\u043f\\\\u044f\\\\u0442\\\\u043d\\\\u0456\\\\u0446\\\\u0443_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0443\\\.split(\\\_\\\),standalone:\\\\\\\u043d\\\\u044f\\\\u0434\\\\u0437\\\\u0435\\\\u043b\\\\u044f_\\\\u043f\\\\u0430\\\\u043d\\\\u044f\\\\u0434\\\\u0437\\\\u0435\\\\u043b\\\\u0430\\\\u043a_\\\\u0430\\\\u045e\\\\u0442\\\\u043e\\\\u0440\\\\u0430\\\\u043a_\\\\u0441\\\\u0435\\\\u0440\\\\u0430\\\\u0434\\\\u0430_\\\\u0447\\\\u0430\\\\u0446\\\\u0432\\\\u0435\\\\u0440_\\\\u043f\\\\u044f\\\\u0442\\\\u043d\\\\u0456\\\\u0446\\\\u0430_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),isFormat:/\\\\ ?\\\\u0423\\\\u0443\\\\u045e ?(?:\\\\u043c\\\\u0456\\\\u043d\\\\u0443\\\\u043b\\\\u0443\\\\u044e|\\\\u043d\\\\u0430\\\\u0441\\\\u0442\\\\u0443\\\\u043f\\\\u043d\\\\u0443\\\\u044e)? ?\\\\ ?dddd/},weekdaysShort:\\\\\\\u043d\\\\u0434_\\\\u043f\\\\u043d_\\\\u0430\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0446_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u043d\\\\u0434_\\\\u043f\\\\u043d_\\\\u0430\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0446_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY \\\\u0433.\\\,LLL:\\\D MMMM YYYY \\\\u0433., HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY \\\\u0433., HH:mm\\\},calendar:{sameDay:\\\\\\\u0421\\\\u0451\\\\u043d\\\\u043d\\\\u044f \\\\u045e LT\\\,nextDay:\\\\\\\u0417\\\\u0430\\\\u045e\\\\u0442\\\\u0440\\\\u0430 \\\\u045e LT\\\,lastDay:\\\\\\\u0423\\\\u0447\\\\u043e\\\\u0440\\\\u0430 \\\\u045e LT\\\,nextWeek:function(){return\\\\\\\u0423 dddd \\\\u045e LT\\\},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return\\\\\\\u0423 \\\\u043c\\\\u0456\\\\u043d\\\\u0443\\\\u043b\\\\u0443\\\\u044e dddd \\\\u045e LT\\\;case 1:case 2:case 4:return\\\\\\\u0423 \\\\u043c\\\\u0456\\\\u043d\\\\u0443\\\\u043b\\\\u044b dddd \\\\u045e LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u043f\\\\u0440\\\\u0430\\\\u0437 %s\\\,past:\\\%s \\\\u0442\\\\u0430\\\\u043c\\\\u0443\\\,s:\\\\\\\u043d\\\\u0435\\\\u043a\\\\u0430\\\\u043b\\\\u044c\\\\u043a\\\\u0456 \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,m:is,mm:is,h:is,hh:is,d:\\\\\\\u0434\\\\u0437\\\\u0435\\\\u043d\\\\u044c\\\,dd:is,M:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\,MM:is,y:\\\\\\\u0433\\\\u043e\\\\u0434\\\,yy:is},meridiemParse:/\\\\u043d\\\\u043e\\\\u0447\\\\u044b|\\\\u0440\\\\u0430\\\\u043d\\\\u0456\\\\u0446\\\\u044b|\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0440\\\\u0430/,isPM:function(e){return/^(\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0440\\\\u0430)$/.test(e)},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u043d\\\\u043e\\\\u0447\\\\u044b\\\:e\u003C12?\\\\\\\u0440\\\\u0430\\\\u043d\\\\u0456\\\\u0446\\\\u044b\\\:e\u003C17?\\\\\\\u0434\\\\u043d\\\\u044f\\\:\\\\\\\u0432\\\\u0435\\\\u0447\\\\u0430\\\\u0440\\\\u0430\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0456|\\\\u044b|\\\\u0433\\\\u0430)/,ordinal:function(e,a){switch(a){case\\\M\\\:case\\\d\\\:case\\\DDD\\\:case\\\w\\\:case\\\W\\\:return e%10!2&&e%10!3||e%10012||e%10013?e+\\\-\\\\u044b\\\:e+\\\-\\\\u0456\\\;case\\\D\\\:return e+\\\-\\\\u0433\\\\u0430\\\;default:return e}},week:{dow:1,doy:7}}),l.defineLocale(\\\bg\\\,{months:\\\\\\\u044f\\\\u043d\\\\u0443\\\\u0430\\\\u0440\\\\u0438_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0443\\\\u0430\\\\u0440\\\\u0438_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0438\\\\u043b_\\\\u043c\\\\u0430\\\\u0439_\\\\u044e\\\\u043d\\\\u0438_\\\\u044e\\\\u043b\\\\u0438_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043f\\\\u0442\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u043e\\\\u043a\\\\u0442\\\\u043e\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u043d\\\\u043e\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u0434\\\\u0435\\\\u043a\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438\\\.split(\\\_\\\),monthsShort:\\\\\\\u044f\\\\u043d\\\\u0440_\\\\u0444\\\\u0435\\\\u0432_\\\\u043c\\\\u0430\\\\u0440_\\\\u0430\\\\u043f\\\\u0440_\\\\u043c\\\\u0430\\\\u0439_\\\\u044e\\\\u043d\\\\u0438_\\\\u044e\\\\u043b\\\\u0438_\\\\u0430\\\\u0432\\\\u0433_\\\\u0441\\\\u0435\\\\u043f_\\\\u043e\\\\u043a\\\\u0442_\\\\u043d\\\\u043e\\\\u0435_\\\\u0434\\\\u0435\\\\u043a\\\.split(\\\_\\\),weekdays:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u044f_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u043d\\\\u0438\\\\u043a_\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043d\\\\u0438\\\\u043a_\\\\u0441\\\\u0440\\\\u044f\\\\u0434\\\\u0430_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u044a\\\\u0440\\\\u0442\\\\u044a\\\\u043a_\\\\u043f\\\\u0435\\\\u0442\\\\u044a\\\\u043a_\\\\u0441\\\\u044a\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u043d\\\\u0435\\\\u0434_\\\\u043f\\\\u043e\\\\u043d_\\\\u0432\\\\u0442\\\\u043e_\\\\u0441\\\\u0440\\\\u044f_\\\\u0447\\\\u0435\\\\u0442_\\\\u043f\\\\u0435\\\\u0442_\\\\u0441\\\\u044a\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u043d\\\\u0434_\\\\u043f\\\\u043d_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0442_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\D.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY H:mm\\\,LLLL:\\\dddd, D MMMM YYYY H:mm\\\},calendar:{sameDay:\\\\\\\u0414\\\\u043d\\\\u0435\\\\u0441 \\\\u0432 LT\\\,nextDay:\\\\\\\u0423\\\\u0442\\\\u0440\\\\u0435 \\\\u0432 LT\\\,nextWeek:\\\dddd \\\\u0432 LT\\\,lastDay:\\\\\\\u0412\\\\u0447\\\\u0435\\\\u0440\\\\u0430 \\\\u0432 LT\\\,lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\\\\\\\u0412 \\\\u0438\\\\u0437\\\\u043c\\\\u0438\\\\u043d\\\\u0430\\\\u043b\\\\u0430\\\\u0442\\\\u0430 dddd \\\\u0432 LT\\\;case 1:case 2:case 4:case 5:return\\\\\\\u0412 \\\\u0438\\\\u0437\\\\u043c\\\\u0438\\\\u043d\\\\u0430\\\\u043b\\\\u0438\\\\u044f dddd \\\\u0432 LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0441\\\\u043b\\\\u0435\\\\u0434 %s\\\,past:\\\\\\\u043f\\\\u0440\\\\u0435\\\\u0434\\\\u0438 %s\\\,s:\\\\\\\u043d\\\\u044f\\\\u043a\\\\u043e\\\\u043b\\\\u043a\\\\u043e \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,ss:\\\%d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,m:\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430\\\,mm:\\\%d \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0438\\\,h:\\\\\\\u0447\\\\u0430\\\\u0441\\\,hh:\\\%d \\\\u0447\\\\u0430\\\\u0441\\\\u0430\\\,d:\\\\\\\u0434\\\\u0435\\\\u043d\\\,dd:\\\%d \\\\u0434\\\\u043d\\\\u0438\\\,M:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\,MM:\\\%d \\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\\u0430\\\,y:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\,yy:\\\%d \\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0438\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0435\\\\u0432|\\\\u0435\\\\u043d|\\\\u0442\\\\u0438|\\\\u0432\\\\u0438|\\\\u0440\\\\u0438|\\\\u043c\\\\u0438)/,ordinal:function(e){var ae%10,te%100;return 0e?e+\\\-\\\\u0435\\\\u0432\\\:0t?e+\\\-\\\\u0435\\\\u043d\\\:10\u003Ct&&t\u003C20?e+\\\-\\\\u0442\\\\u0438\\\:1a?e+\\\-\\\\u0432\\\\u0438\\\:2a?e+\\\-\\\\u0440\\\\u0438\\\:7a||8a?e+\\\-\\\\u043c\\\\u0438\\\:e+\\\-\\\\u0442\\\\u0438\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\bm\\\,{months:\\\Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\\\\u025bkalo_Zuw\\\\u025bnkalo_Zuluyekalo_Utikalo_S\\\\u025btanburukalo_\\\\u0254kut\\\\u0254burukalo_Nowanburukalo_Desanburukalo\\\.split(\\\_\\\),monthsShort:\\\Zan_Few_Mar_Awi_M\\\\u025b_Zuw_Zul_Uti_S\\\\u025bt_\\\\u0254ku_Now_Des\\\.split(\\\_\\\),weekdays:\\\Kari_Nt\\\\u025bn\\\\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri\\\.split(\\\_\\\),weekdaysShort:\\\Kar_Nt\\\\u025b_Tar_Ara_Ala_Jum_Sib\\\.split(\\\_\\\),weekdaysMin:\\\Ka_Nt_Ta_Ar_Al_Ju_Si\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\MMMM tile D san YYYY\\\,LLL:\\\MMMM tile D san YYYY l\\\\u025br\\\\u025b HH:mm\\\,LLLL:\\\dddd MMMM tile D san YYYY l\\\\u025br\\\\u025b HH:mm\\\},calendar:{sameDay:\\\Bi l\\\\u025br\\\\u025b LT\\\,nextDay:\\\Sini l\\\\u025br\\\\u025b LT\\\,nextWeek:\\\dddd don l\\\\u025br\\\\u025b LT\\\,lastDay:\\\Kunu l\\\\u025br\\\\u025b LT\\\,lastWeek:\\\dddd t\\\\u025bm\\\\u025bnen l\\\\u025br\\\\u025b LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s k\\\\u0254n\\\\u0254\\\,past:\\\a b\\\\u025b %s b\\\\u0254\\\,s:\\\sanga dama dama\\\,ss:\\\sekondi %d\\\,m:\\\miniti kelen\\\,mm:\\\miniti %d\\\,h:\\\l\\\\u025br\\\\u025b kelen\\\,hh:\\\l\\\\u025br\\\\u025b %d\\\,d:\\\tile kelen\\\,dd:\\\tile %d\\\,M:\\\kalo kelen\\\,MM:\\\kalo %d\\\,y:\\\san kelen\\\,yy:\\\san %d\\\},week:{dow:1,doy:4}});var os{1:\\\\\\\u09e7\\\,2:\\\\\\\u09e8\\\,3:\\\\\\\u09e9\\\,4:\\\\\\\u09ea\\\,5:\\\\\\\u09eb\\\,6:\\\\\\\u09ec\\\,7:\\\\\\\u09ed\\\,8:\\\\\\\u09ee\\\,9:\\\\\\\u09ef\\\,0:\\\\\\\u09e6\\\},ms{\\\\\\\u09e7\\\:\\\1\\\,\\\\\\\u09e8\\\:\\\2\\\,\\\\\\\u09e9\\\:\\\3\\\,\\\\\\\u09ea\\\:\\\4\\\,\\\\\\\u09eb\\\:\\\5\\\,\\\\\\\u09ec\\\:\\\6\\\,\\\\\\\u09ed\\\:\\\7\\\,\\\\\\\u09ee\\\:\\\8\\\,\\\\\\\u09ef\\\:\\\9\\\,\\\\\\\u09e6\\\:\\\0\\\};l.defineLocale(\\\bn\\\,{months:\\\\\\\u099c\\\\u09be\\\\u09a8\\\\u09c1\\\\u09df\\\\u09be\\\\u09b0\\\\u09c0_\\\\u09ab\\\\u09c7\\\\u09ac\\\\u09cd\\\\u09b0\\\\u09c1\\\\u09df\\\\u09be\\\\u09b0\\\\u09bf_\\\\u09ae\\\\u09be\\\\u09b0\\\\u09cd\\\\u099a_\\\\u098f\\\\u09aa\\\\u09cd\\\\u09b0\\\\u09bf\\\\u09b2_\\\\u09ae\\\\u09c7_\\\\u099c\\\\u09c1\\\\u09a8_\\\\u099c\\\\u09c1\\\\u09b2\\\\u09be\\\\u0987_\\\\u0986\\\\u0997\\\\u09b8\\\\u09cd\\\\u099f_\\\\u09b8\\\\u09c7\\\\u09aa\\\\u09cd\\\\u099f\\\\u09c7\\\\u09ae\\\\u09cd\\\\u09ac\\\\u09b0_\\\\u0985\\\\u0995\\\\u09cd\\\\u099f\\\\u09cb\\\\u09ac\\\\u09b0_\\\\u09a8\\\\u09ad\\\\u09c7\\\\u09ae\\\\u09cd\\\\u09ac\\\\u09b0_\\\\u09a1\\\\u09bf\\\\u09b8\\\\u09c7\\\\u09ae\\\\u09cd\\\\u09ac\\\\u09b0\\\.split(\\\_\\\),monthsShort:\\\\\\\u099c\\\\u09be\\\\u09a8\\\\u09c1_\\\\u09ab\\\\u09c7\\\\u09ac_\\\\u09ae\\\\u09be\\\\u09b0\\\\u09cd\\\\u099a_\\\\u098f\\\\u09aa\\\\u09cd\\\\u09b0_\\\\u09ae\\\\u09c7_\\\\u099c\\\\u09c1\\\\u09a8_\\\\u099c\\\\u09c1\\\\u09b2_\\\\u0986\\\\u0997_\\\\u09b8\\\\u09c7\\\\u09aa\\\\u09cd\\\\u099f_\\\\u0985\\\\u0995\\\\u09cd\\\\u099f\\\\u09cb_\\\\u09a8\\\\u09ad\\\\u09c7_\\\\u09a1\\\\u09bf\\\\u09b8\\\\u09c7\\\.split(\\\_\\\),weekdays:\\\\\\\u09b0\\\\u09ac\\\\u09bf\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09b8\\\\u09cb\\\\u09ae\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09ae\\\\u0999\\\\u09cd\\\\u0997\\\\u09b2\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09ac\\\\u09c1\\\\u09a7\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09ac\\\\u09c3\\\\u09b9\\\\u09b8\\\\u09cd\\\\u09aa\\\\u09a4\\\\u09bf\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09b6\\\\u09c1\\\\u0995\\\\u09cd\\\\u09b0\\\\u09ac\\\\u09be\\\\u09b0_\\\\u09b6\\\\u09a8\\\\u09bf\\\\u09ac\\\\u09be\\\\u09b0\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u09b0\\\\u09ac\\\\u09bf_\\\\u09b8\\\\u09cb\\\\u09ae_\\\\u09ae\\\\u0999\\\\u09cd\\\\u0997\\\\u09b2_\\\\u09ac\\\\u09c1\\\\u09a7_\\\\u09ac\\\\u09c3\\\\u09b9\\\\u09b8\\\\u09cd\\\\u09aa\\\\u09a4\\\\u09bf_\\\\u09b6\\\\u09c1\\\\u0995\\\\u09cd\\\\u09b0_\\\\u09b6\\\\u09a8\\\\u09bf\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u09b0\\\\u09ac\\\\u09bf_\\\\u09b8\\\\u09cb\\\\u09ae_\\\\u09ae\\\\u0999\\\\u09cd\\\\u0997_\\\\u09ac\\\\u09c1\\\\u09a7_\\\\u09ac\\\\u09c3\\\\u09b9\\\\u0983_\\\\u09b6\\\\u09c1\\\\u0995\\\\u09cd\\\\u09b0_\\\\u09b6\\\\u09a8\\\\u09bf\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm \\\\u09b8\\\\u09ae\\\\u09df\\\,LTS:\\\A h:mm:ss \\\\u09b8\\\\u09ae\\\\u09df\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm \\\\u09b8\\\\u09ae\\\\u09df\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm \\\\u09b8\\\\u09ae\\\\u09df\\\},calendar:{sameDay:\\\\\\\u0986\\\\u099c LT\\\,nextDay:\\\\\\\u0986\\\\u0997\\\\u09be\\\\u09ae\\\\u09c0\\\\u0995\\\\u09be\\\\u09b2 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0997\\\\u09a4\\\\u0995\\\\u09be\\\\u09b2 LT\\\,lastWeek:\\\\\\\u0997\\\\u09a4 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u09aa\\\\u09b0\\\\u09c7\\\,past:\\\%s \\\\u0986\\\\u0997\\\\u09c7\\\,s:\\\\\\\u0995\\\\u09df\\\\u09c7\\\\u0995 \\\\u09b8\\\\u09c7\\\\u0995\\\\u09c7\\\\u09a8\\\\u09cd\\\\u09a1\\\,ss:\\\%d \\\\u09b8\\\\u09c7\\\\u0995\\\\u09c7\\\\u09a8\\\\u09cd\\\\u09a1\\\,m:\\\\\\\u098f\\\\u0995 \\\\u09ae\\\\u09bf\\\\u09a8\\\\u09bf\\\\u099f\\\,mm:\\\%d \\\\u09ae\\\\u09bf\\\\u09a8\\\\u09bf\\\\u099f\\\,h:\\\\\\\u098f\\\\u0995 \\\\u0998\\\\u09a8\\\\u09cd\\\\u099f\\\\u09be\\\,hh:\\\%d \\\\u0998\\\\u09a8\\\\u09cd\\\\u099f\\\\u09be\\\,d:\\\\\\\u098f\\\\u0995 \\\\u09a6\\\\u09bf\\\\u09a8\\\,dd:\\\%d \\\\u09a6\\\\u09bf\\\\u09a8\\\,M:\\\\\\\u098f\\\\u0995 \\\\u09ae\\\\u09be\\\\u09b8\\\,MM:\\\%d \\\\u09ae\\\\u09be\\\\u09b8\\\,y:\\\\\\\u098f\\\\u0995 \\\\u09ac\\\\u099b\\\\u09b0\\\,yy:\\\%d \\\\u09ac\\\\u099b\\\\u09b0\\\},preparse:function(e){return e.replace(/\\\\u09e7\\\\u09e8\\\\u09e9\\\\u09ea\\\\u09eb\\\\u09ec\\\\u09ed\\\\u09ee\\\\u09ef\\\\u09e6/g,function(e){return mse})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return ose})},meridiemParse:/\\\\u09b0\\\\u09be\\\\u09a4|\\\\u09b8\\\\u0995\\\\u09be\\\\u09b2|\\\\u09a6\\\\u09c1\\\\u09aa\\\\u09c1\\\\u09b0|\\\\u09ac\\\\u09bf\\\\u0995\\\\u09be\\\\u09b2|\\\\u09b0\\\\u09be\\\\u09a4/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u09b0\\\\u09be\\\\u09a4\\\a&&4\u003Ce||\\\\\\\u09a6\\\\u09c1\\\\u09aa\\\\u09c1\\\\u09b0\\\a&&e\u003C5||\\\\\\\u09ac\\\\u09bf\\\\u0995\\\\u09be\\\\u09b2\\\a?e+12:e},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u09b0\\\\u09be\\\\u09a4\\\:e\u003C10?\\\\\\\u09b8\\\\u0995\\\\u09be\\\\u09b2\\\:e\u003C17?\\\\\\\u09a6\\\\u09c1\\\\u09aa\\\\u09c1\\\\u09b0\\\:e\u003C20?\\\\\\\u09ac\\\\u09bf\\\\u0995\\\\u09be\\\\u09b2\\\:\\\\\\\u09b0\\\\u09be\\\\u09a4\\\},week:{dow:0,doy:6}});var us{1:\\\\\\\u0f21\\\,2:\\\\\\\u0f22\\\,3:\\\\\\\u0f23\\\,4:\\\\\\\u0f24\\\,5:\\\\\\\u0f25\\\,6:\\\\\\\u0f26\\\,7:\\\\\\\u0f27\\\,8:\\\\\\\u0f28\\\,9:\\\\\\\u0f29\\\,0:\\\\\\\u0f20\\\},ls{\\\\\\\u0f21\\\:\\\1\\\,\\\\\\\u0f22\\\:\\\2\\\,\\\\\\\u0f23\\\:\\\3\\\,\\\\\\\u0f24\\\:\\\4\\\,\\\\\\\u0f25\\\:\\\5\\\,\\\\\\\u0f26\\\:\\\6\\\,\\\\\\\u0f27\\\:\\\7\\\,\\\\\\\u0f28\\\:\\\8\\\,\\\\\\\u0f29\\\:\\\9\\\,\\\\\\\u0f20\\\:\\\0\\\};function Ms(e,a,t){var s,n,d;return e+\\\ \\\+(s{mm:\\\munutenn\\\,MM:\\\miz\\\,dd:\\\devezh\\\}t,2!e?s:void 0!(d{m:\\\v\\\,b:\\\v\\\,d:\\\z\\\})(ns).charAt(0)?dn.charAt(0)+n.substring(1):n)}function hs(e,a,t){var se+\\\ \\\;switch(t){case\\\ss\\\:return s+1e?\\\sekunda\\\:2e||3e||4e?\\\sekunde\\\:\\\sekundi\\\;case\\\m\\\:return a?\\\jedna minuta\\\:\\\jedne minute\\\;case\\\mm\\\:return s+1e?\\\minuta\\\:2e||3e||4e?\\\minute\\\:\\\minuta\\\;case\\\h\\\:return a?\\\jedan sat\\\:\\\jednog sata\\\;case\\\hh\\\:return s+1e?\\\sat\\\:2e||3e||4e?\\\sata\\\:\\\sati\\\;case\\\dd\\\:return s+1e?\\\dan\\\:\\\dana\\\;case\\\MM\\\:return s+1e?\\\mjesec\\\:2e||3e||4e?\\\mjeseca\\\:\\\mjeseci\\\;case\\\yy\\\:return s+1e?\\\godina\\\:2e||3e||4e?\\\godine\\\:\\\godina\\\}}l.defineLocale(\\\bo\\\,{months:\\\\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0f44\\\\u0f0b\\\\u0f54\\\\u0f7c_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f42\\\\u0f49\\\\u0f72\\\\u0f66\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f42\\\\u0f66\\\\u0f74\\\\u0f58\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f5e\\\\u0f72\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f63\\\\u0f94\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0fb2\\\\u0f74\\\\u0f42\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f51\\\\u0f74\\\\u0f53\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f62\\\\u0f92\\\\u0fb1\\\\u0f51\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0f42\\\\u0f74\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f42\\\\u0f49\\\\u0f72\\\\u0f66\\\\u0f0b\\\\u0f54\\\.split(\\\_\\\),monthsShort:\\\\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0f44\\\\u0f0b\\\\u0f54\\\\u0f7c_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f42\\\\u0f49\\\\u0f72\\\\u0f66\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f42\\\\u0f66\\\\u0f74\\\\u0f58\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f5e\\\\u0f72\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f63\\\\u0f94\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0fb2\\\\u0f74\\\\u0f42\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f51\\\\u0f74\\\\u0f53\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f62\\\\u0f92\\\\u0fb1\\\\u0f51\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f51\\\\u0f42\\\\u0f74\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\\u0f0b\\\\u0f54_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f56\\\\u0f45\\\\u0f74\\\\u0f0b\\\\u0f42\\\\u0f49\\\\u0f72\\\\u0f66\\\\u0f0b\\\\u0f54\\\.split(\\\_\\\),weekdays:\\\\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f49\\\\u0f72\\\\u0f0b\\\\u0f58\\\\u0f0b_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f58\\\\u0f72\\\\u0f42\\\\u0f0b\\\\u0f51\\\\u0f58\\\\u0f62\\\\u0f0b_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f63\\\\u0fb7\\\\u0f42\\\\u0f0b\\\\u0f54\\\\u0f0b_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f55\\\\u0f74\\\\u0f62\\\\u0f0b\\\\u0f56\\\\u0f74_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f54\\\\u0f0b\\\\u0f66\\\\u0f44\\\\u0f66\\\\u0f0b_\\\\u0f42\\\\u0f5f\\\\u0f60\\\\u0f0b\\\\u0f66\\\\u0fa4\\\\u0f7a\\\\u0f53\\\\u0f0b\\\\u0f54\\\\u0f0b\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0f49\\\\u0f72\\\\u0f0b\\\\u0f58\\\\u0f0b_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b_\\\\u0f58\\\\u0f72\\\\u0f42\\\\u0f0b\\\\u0f51\\\\u0f58\\\\u0f62\\\\u0f0b_\\\\u0f63\\\\u0fb7\\\\u0f42\\\\u0f0b\\\\u0f54\\\\u0f0b_\\\\u0f55\\\\u0f74\\\\u0f62\\\\u0f0b\\\\u0f56\\\\u0f74_\\\\u0f54\\\\u0f0b\\\\u0f66\\\\u0f44\\\\u0f66\\\\u0f0b_\\\\u0f66\\\\u0fa4\\\\u0f7a\\\\u0f53\\\\u0f0b\\\\u0f54\\\\u0f0b\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0f49\\\\u0f72\\\\u0f0b\\\\u0f58\\\\u0f0b_\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b_\\\\u0f58\\\\u0f72\\\\u0f42\\\\u0f0b\\\\u0f51\\\\u0f58\\\\u0f62\\\\u0f0b_\\\\u0f63\\\\u0fb7\\\\u0f42\\\\u0f0b\\\\u0f54\\\\u0f0b_\\\\u0f55\\\\u0f74\\\\u0f62\\\\u0f0b\\\\u0f56\\\\u0f74_\\\\u0f54\\\\u0f0b\\\\u0f66\\\\u0f44\\\\u0f66\\\\u0f0b_\\\\u0f66\\\\u0fa4\\\\u0f7a\\\\u0f53\\\\u0f0b\\\\u0f54\\\\u0f0b\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm\\\,LTS:\\\A h:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm\\\},calendar:{sameDay:\\\\\\\u0f51\\\\u0f72\\\\u0f0b\\\\u0f62\\\\u0f72\\\\u0f44 LT\\\,nextDay:\\\\\\\u0f66\\\\u0f44\\\\u0f0b\\\\u0f49\\\\u0f72\\\\u0f53 LT\\\,nextWeek:\\\\\\\u0f56\\\\u0f51\\\\u0f74\\\\u0f53\\\\u0f0b\\\\u0f55\\\\u0fb2\\\\u0f42\\\\u0f0b\\\\u0f62\\\\u0f97\\\\u0f7a\\\\u0f66\\\\u0f0b\\\\u0f58, LT\\\,lastDay:\\\\\\\u0f41\\\\u0f0b\\\\u0f66\\\\u0f44 LT\\\,lastWeek:\\\\\\\u0f56\\\\u0f51\\\\u0f74\\\\u0f53\\\\u0f0b\\\\u0f55\\\\u0fb2\\\\u0f42\\\\u0f0b\\\\u0f58\\\\u0f50\\\\u0f60\\\\u0f0b\\\\u0f58 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0f63\\\\u0f0b\\\,past:\\\%s \\\\u0f66\\\\u0f94\\\\u0f53\\\\u0f0b\\\\u0f63\\\,s:\\\\\\\u0f63\\\\u0f58\\\\u0f0b\\\\u0f66\\\\u0f44\\\,ss:\\\%d \\\\u0f66\\\\u0f90\\\\u0f62\\\\u0f0b\\\\u0f46\\\\u0f0d\\\,m:\\\\\\\u0f66\\\\u0f90\\\\u0f62\\\\u0f0b\\\\u0f58\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\,mm:\\\%d \\\\u0f66\\\\u0f90\\\\u0f62\\\\u0f0b\\\\u0f58\\\,h:\\\\\\\u0f46\\\\u0f74\\\\u0f0b\\\\u0f5a\\\\u0f7c\\\\u0f51\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\,hh:\\\%d \\\\u0f46\\\\u0f74\\\\u0f0b\\\\u0f5a\\\\u0f7c\\\\u0f51\\\,d:\\\\\\\u0f49\\\\u0f72\\\\u0f53\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\,dd:\\\%d \\\\u0f49\\\\u0f72\\\\u0f53\\\\u0f0b\\\,M:\\\\\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\,MM:\\\%d \\\\u0f5f\\\\u0fb3\\\\u0f0b\\\\u0f56\\\,y:\\\\\\\u0f63\\\\u0f7c\\\\u0f0b\\\\u0f42\\\\u0f45\\\\u0f72\\\\u0f42\\\,yy:\\\%d \\\\u0f63\\\\u0f7c\\\},preparse:function(e){return e.replace(/\\\\u0f21\\\\u0f22\\\\u0f23\\\\u0f24\\\\u0f25\\\\u0f26\\\\u0f27\\\\u0f28\\\\u0f29\\\\u0f20/g,function(e){return lse})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return use})},meridiemParse:/\\\\u0f58\\\\u0f5a\\\\u0f53\\\\u0f0b\\\\u0f58\\\\u0f7c|\\\\u0f5e\\\\u0f7c\\\\u0f42\\\\u0f66\\\\u0f0b\\\\u0f40\\\\u0f66|\\\\u0f49\\\\u0f72\\\\u0f53\\\\u0f0b\\\\u0f42\\\\u0f74\\\\u0f44|\\\\u0f51\\\\u0f42\\\\u0f7c\\\\u0f44\\\\u0f0b\\\\u0f51\\\\u0f42|\\\\u0f58\\\\u0f5a\\\\u0f53\\\\u0f0b\\\\u0f58\\\\u0f7c/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0f58\\\\u0f5a\\\\u0f53\\\\u0f0b\\\\u0f58\\\\u0f7c\\\a&&4\u003Ce||\\\\\\\u0f49\\\\u0f72\\\\u0f53\\\\u0f0b\\\\u0f42\\\\u0f74\\\\u0f44\\\a&&e\u003C5||\\\\\\\u0f51\\\\u0f42\\\\u0f7c\\\\u0f44\\\\u0f0b\\\\u0f51\\\\u0f42\\\a?e+12:e},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0f58\\\\u0f5a\\\\u0f53\\\\u0f0b\\\\u0f58\\\\u0f7c\\\:e\u003C10?\\\\\\\u0f5e\\\\u0f7c\\\\u0f42\\\\u0f66\\\\u0f0b\\\\u0f40\\\\u0f66\\\:e\u003C17?\\\\\\\u0f49\\\\u0f72\\\\u0f53\\\\u0f0b\\\\u0f42\\\\u0f74\\\\u0f44\\\:e\u003C20?\\\\\\\u0f51\\\\u0f42\\\\u0f7c\\\\u0f44\\\\u0f0b\\\\u0f51\\\\u0f42\\\:\\\\\\\u0f58\\\\u0f5a\\\\u0f53\\\\u0f0b\\\\u0f58\\\\u0f7c\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\br\\\,{months:\\\Genver_Chwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu\\\.split(\\\_\\\),monthsShort:\\\Gen_Chwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker\\\.split(\\\_\\\),weekdays:\\\Sul_Lun_Meurzh_Mercher_Yaou_Gwener_Sadorn\\\.split(\\\_\\\),weekdaysShort:\\\Sul_Lun_Meu_Mer_Yao_Gwe_Sad\\\.split(\\\_\\\),weekdaysMin:\\\Su_Lu_Me_Mer_Ya_Gw_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\hemm A\\\,LTS:\\\hemm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D a viz MMMM YYYY\\\,LLL:\\\D a viz MMMM YYYY hemm A\\\,LLLL:\\\dddd, D a viz MMMM YYYY hemm A\\\},calendar:{sameDay:\\\Hiziv da LT\\\,nextDay:\\\Warchoazh da LT\\\,nextWeek:\\\dddd da LT\\\,lastDay:\\\Dech da LT\\\,lastWeek:\\\dddd paset da LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\a-benn %s\\\,past:\\\%s zo\\\,s:\\\un nebeud segondenno\\\\xf9\\\,ss:\\\%d eilenn\\\,m:\\\ur vunutenn\\\,mm:Ms,h:\\\un eur\\\,hh:\\\%d eur\\\,d:\\\un devezh\\\,dd:Ms,M:\\\ur miz\\\,MM:Ms,y:\\\ur bloaz\\\,yy:function(e){switch(function e(a){return 9\u003Ca?e(a%10):a}(e)){case 1:case 3:case 4:case 5:case 9:return e+\\\ bloaz\\\;default:return e+\\\ vloaz\\\}}},dayOfMonthOrdinalParse:/\\\\d{1,2}(a\\\\xf1|vet)/,ordinal:function(e){return e+(1e?\\\a\\\\xf1\\\:\\\vet\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\bs\\\,{months:\\\januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\\\.split(\\\_\\\),monthsShort:\\\jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\nedjelja_ponedjeljak_utorak_srijeda_\\\\u010detvrtak_petak_subota\\\.split(\\\_\\\),weekdaysShort:\\\ned._pon._uto._sri._\\\\u010det._pet._sub.\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_ut_sr_\\\\u010de_pe_su\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\danas u LT\\\,nextDay:\\\sutra u LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\u nedjelju u LT\\\;case 3:return\\\u srijedu u LT\\\;case 6:return\\\u subotu u LT\\\;case 1:case 2:case 4:case 5:return\\\u dddd u LT\\\}},lastDay:\\\ju\\\\u010der u LT\\\,lastWeek:function(){switch(this.day()){case 0:case 3:return\\\pro\\\\u0161lu dddd u LT\\\;case 6:return\\\pro\\\\u0161le subote u LT\\\;case 1:case 2:case 4:case 5:return\\\pro\\\\u0161li dddd u LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\prije %s\\\,s:\\\par sekundi\\\,ss:hs,m:hs,mm:hs,h:hs,hh:hs,d:\\\dan\\\,dd:hs,M:\\\mjesec\\\,MM:hs,y:\\\godinu\\\,yy:hs},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}}),l.defineLocale(\\\ca\\\,{months:{standalone:\\\gener_febrer_mar\\\\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\\\.split(\\\_\\\),format:\\\de gener_de febrer_de mar\\\\xe7_dabril_de maig_de juny_de juliol_dagost_de setembre_doctubre_de novembre_de desembre\\\.split(\\\_\\\),isFormat:/DoD?(\\\\s)+MMMM/},monthsShort:\\\gen._febr._mar\\\\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\\\.split(\\\_\\\),weekdaysShort:\\\dg._dl._dt._dc._dj._dv._ds.\\\.split(\\\_\\\),weekdaysMin:\\\dg_dl_dt_dc_dj_dv_ds\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM de YYYY\\\,ll:\\\D MMM YYYY\\\,LLL:\\\D MMMM de YYYY a les H:mm\\\,lll:\\\D MMM YYYY, H:mm\\\,LLLL:\\\dddd D MMMM de YYYY a les H:mm\\\,llll:\\\ddd D MMM YYYY, H:mm\\\},calendar:{sameDay:function(){return\\\avui a \\\+(1!this.hours()?\\\les\\\:\\\la\\\)+\\\ LT\\\},nextDay:function(){return\\\dem\\\\xe0 a \\\+(1!this.hours()?\\\les\\\:\\\la\\\)+\\\ LT\\\},nextWeek:function(){return\\\dddd a \\\+(1!this.hours()?\\\les\\\:\\\la\\\)+\\\ LT\\\},lastDay:function(){return\\\ahir a \\\+(1!this.hours()?\\\les\\\:\\\la\\\)+\\\ LT\\\},lastWeek:function(){return\\\el dddd passat a \\\+(1!this.hours()?\\\les\\\:\\\la\\\)+\\\ LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\daqu\\\\xed %s\\\,past:\\\fa %s\\\,s:\\\uns segons\\\,ss:\\\%d segons\\\,m:\\\un minut\\\,mm:\\\%d minuts\\\,h:\\\una hora\\\,hh:\\\%d hores\\\,d:\\\un dia\\\,dd:\\\%d dies\\\,M:\\\un mes\\\,MM:\\\%d mesos\\\,y:\\\un any\\\,yy:\\\%d anys\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(r|n|t|\\\\xe8|a)/,ordinal:function(e,a){var t1e?\\\r\\\:2e?\\\n\\\:3e?\\\r\\\:4e?\\\t\\\:\\\\\\\xe8\\\;return\\\w\\\!a&&\\\W\\\!a||(t\\\a\\\),e+t},week:{dow:1,doy:4}});var Ls\\\leden_\\\\xfanor_b\\\\u0159ezen_duben_kv\\\\u011bten_\\\\u010derven_\\\\u010dervenec_srpen_z\\\\xe1\\\\u0159\\\\xed_\\\\u0159\\\\xedjen_listopad_prosinec\\\.split(\\\_\\\),cs\\\led_\\\\xfano_b\\\\u0159e_dub_kv\\\\u011b_\\\\u010dvn_\\\\u010dvc_srp_z\\\\xe1\\\\u0159_\\\\u0159\\\\xedj_lis_pro\\\.split(\\\_\\\),Ys/^led/i,/^\\\\xfano/i,/^b\\\\u0159e/i,/^dub/i,/^kv\\\\u011b/i,/^(\\\\u010dvn|\\\\u010derven$|\\\\u010dervna)/i,/^(\\\\u010dvc|\\\\u010dervenec|\\\\u010dervence)/i,/^srp/i,/^z\\\\xe1\\\\u0159/i,/^\\\\u0159\\\\xedj/i,/^lis/i,/^pro/i,ys/^(leden|\\\\xfanor|b\\\\u0159ezen|duben|kv\\\\u011bten|\\\\u010dervenec|\\\\u010dervence|\\\\u010derven|\\\\u010dervna|srpen|z\\\\xe1\\\\u0159\\\\xed|\\\\u0159\\\\xedjen|listopad|prosinec|led|\\\\xfano|b\\\\u0159e|dub|kv\\\\u011b|\\\\u010dvn|\\\\u010dvc|srp|z\\\\xe1\\\\u0159|\\\\u0159\\\\xedj|lis|pro)/i;function fs(e){return 1\u003Ce&&e\u003C5&&1!~~(e/10)}function ks(e,a,t,s){var ne+\\\ \\\;switch(t){case\\\s\\\:return a||s?\\\p\\\\xe1r sekund\\\:\\\p\\\\xe1r sekundami\\\;case\\\ss\\\:return a||s?n+(fs(e)?\\\sekundy\\\:\\\sekund\\\):n+\\\sekundami\\\;break;case\\\m\\\:return a?\\\minuta\\\:s?\\\minutu\\\:\\\minutou\\\;case\\\mm\\\:return a||s?n+(fs(e)?\\\minuty\\\:\\\minut\\\):n+\\\minutami\\\;break;case\\\h\\\:return a?\\\hodina\\\:s?\\\hodinu\\\:\\\hodinou\\\;case\\\hh\\\:return a||s?n+(fs(e)?\\\hodiny\\\:\\\hodin\\\):n+\\\hodinami\\\;break;case\\\d\\\:return a||s?\\\den\\\:\\\dnem\\\;case\\\dd\\\:return a||s?n+(fs(e)?\\\dny\\\:\\\dn\\\\xed\\\):n+\\\dny\\\;break;case\\\M\\\:return a||s?\\\m\\\\u011bs\\\\xedc\\\:\\\m\\\\u011bs\\\\xedcem\\\;case\\\MM\\\:return a||s?n+(fs(e)?\\\m\\\\u011bs\\\\xedce\\\:\\\m\\\\u011bs\\\\xedc\\\\u016f\\\):n+\\\m\\\\u011bs\\\\xedci\\\;break;case\\\y\\\:return a||s?\\\rok\\\:\\\rokem\\\;case\\\yy\\\:return a||s?n+(fs(e)?\\\roky\\\:\\\let\\\):n+\\\lety\\\;break}}function ps(e,a,t,s){var n{m:\\\eine Minute\\\,\\\einer Minute\\\,h:\\\eine Stunde\\\,\\\einer Stunde\\\,d:\\\ein Tag\\\,\\\einem Tag\\\,dd:e+\\\ Tage\\\,e+\\\ Tagen\\\,M:\\\ein Monat\\\,\\\einem Monat\\\,MM:e+\\\ Monate\\\,e+\\\ Monaten\\\,y:\\\ein Jahr\\\,\\\einem Jahr\\\,yy:e+\\\ Jahre\\\,e+\\\ Jahren\\\};return a?nt0:nt1}function Ds(e,a,t,s){var n{m:\\\eine Minute\\\,\\\einer Minute\\\,h:\\\eine Stunde\\\,\\\einer Stunde\\\,d:\\\ein Tag\\\,\\\einem Tag\\\,dd:e+\\\ Tage\\\,e+\\\ Tagen\\\,M:\\\ein Monat\\\,\\\einem Monat\\\,MM:e+\\\ Monate\\\,e+\\\ Monaten\\\,y:\\\ein Jahr\\\,\\\einem Jahr\\\,yy:e+\\\ Jahre\\\,e+\\\ Jahren\\\};return a?nt0:nt1}function Ts(e,a,t,s){var n{m:\\\eine Minute\\\,\\\einer Minute\\\,h:\\\eine Stunde\\\,\\\einer Stunde\\\,d:\\\ein Tag\\\,\\\einem Tag\\\,dd:e+\\\ Tage\\\,e+\\\ Tagen\\\,M:\\\ein Monat\\\,\\\einem Monat\\\,MM:e+\\\ Monate\\\,e+\\\ Monaten\\\,y:\\\ein Jahr\\\,\\\einem Jahr\\\,yy:e+\\\ Jahre\\\,e+\\\ Jahren\\\};return a?nt0:nt1}l.defineLocale(\\\cs\\\,{months:Ls,monthsShort:cs,monthsRegex:ys,monthsShortRegex:ys,monthsStrictRegex:/^(leden|ledna|\\\\xfanora|\\\\xfanor|b\\\\u0159ezen|b\\\\u0159ezna|duben|dubna|kv\\\\u011bten|kv\\\\u011btna|\\\\u010dervenec|\\\\u010dervence|\\\\u010derven|\\\\u010dervna|srpen|srpna|z\\\\xe1\\\\u0159\\\\xed|\\\\u0159\\\\xedjen|\\\\u0159\\\\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\\\\xfano|b\\\\u0159e|dub|kv\\\\u011b|\\\\u010dvn|\\\\u010dvc|srp|z\\\\xe1\\\\u0159|\\\\u0159\\\\xedj|lis|pro)/i,monthsParse:Ys,longMonthsParse:Ys,shortMonthsParse:Ys,weekdays:\\\ned\\\\u011ble_pond\\\\u011bl\\\\xed_\\\\xfater\\\\xfd_st\\\\u0159eda_\\\\u010dtvrtek_p\\\\xe1tek_sobota\\\.split(\\\_\\\),weekdaysShort:\\\ne_po_\\\\xfat_st_\\\\u010dt_p\\\\xe1_so\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_\\\\xfat_st_\\\\u010dt_p\\\\xe1_so\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd D. MMMM YYYY H:mm\\\,l:\\\D. M. YYYY\\\},calendar:{sameDay:\\\dnes v LT\\\,nextDay:\\\z\\\\xedtra v LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\v ned\\\\u011bli v LT\\\;case 1:case 2:return\\\v dddd v LT\\\;case 3:return\\\ve st\\\\u0159edu v LT\\\;case 4:return\\\ve \\\\u010dtvrtek v LT\\\;case 5:return\\\v p\\\\xe1tek v LT\\\;case 6:return\\\v sobotu v LT\\\}},lastDay:\\\v\\\\u010dera v LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\minulou ned\\\\u011bli v LT\\\;case 1:case 2:return\\\minul\\\\xe9 dddd v LT\\\;case 3:return\\\minulou st\\\\u0159edu v LT\\\;case 4:case 5:return\\\minul\\\\xfd dddd v LT\\\;case 6:return\\\minulou sobotu v LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\p\\\\u0159ed %s\\\,s:ks,ss:ks,m:ks,mm:ks,h:ks,hh:ks,d:ks,dd:ks,M:ks,MM:ks,y:ks,yy:ks},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\cv\\\,{months:\\\\\\\u043a\\\\u04d1\\\\u0440\\\\u043b\\\\u0430\\\\u0447_\\\\u043d\\\\u0430\\\\u0440\\\\u04d1\\\\u0441_\\\\u043f\\\\u0443\\\\u0448_\\\\u0430\\\\u043a\\\\u0430_\\\\u043c\\\\u0430\\\\u0439_\\\\u04ab\\\\u04d7\\\\u0440\\\\u0442\\\\u043c\\\\u0435_\\\\u0443\\\\u0442\\\\u04d1_\\\\u04ab\\\\u0443\\\\u0440\\\\u043b\\\\u0430_\\\\u0430\\\\u0432\\\\u04d1\\\\u043d_\\\\u044e\\\\u043f\\\\u0430_\\\\u0447\\\\u04f3\\\\u043a_\\\\u0440\\\\u0430\\\\u0448\\\\u0442\\\\u0430\\\\u0432\\\.split(\\\_\\\),monthsShort:\\\\\\\u043a\\\\u04d1\\\\u0440_\\\\u043d\\\\u0430\\\\u0440_\\\\u043f\\\\u0443\\\\u0448_\\\\u0430\\\\u043a\\\\u0430_\\\\u043c\\\\u0430\\\\u0439_\\\\u04ab\\\\u04d7\\\\u0440_\\\\u0443\\\\u0442\\\\u04d1_\\\\u04ab\\\\u0443\\\\u0440_\\\\u0430\\\\u0432\\\\u043d_\\\\u044e\\\\u043f\\\\u0430_\\\\u0447\\\\u04f3\\\\u043a_\\\\u0440\\\\u0430\\\\u0448\\\.split(\\\_\\\),weekdays:\\\\\\\u0432\\\\u044b\\\\u0440\\\\u0441\\\\u0430\\\\u0440\\\\u043d\\\\u0438\\\\u043a\\\\u0443\\\\u043d_\\\\u0442\\\\u0443\\\\u043d\\\\u0442\\\\u0438\\\\u043a\\\\u0443\\\\u043d_\\\\u044b\\\\u0442\\\\u043b\\\\u0430\\\\u0440\\\\u0438\\\\u043a\\\\u0443\\\\u043d_\\\\u044e\\\\u043d\\\\u043a\\\\u0443\\\\u043d_\\\\u043a\\\\u04d7\\\\u04ab\\\\u043d\\\\u0435\\\\u0440\\\\u043d\\\\u0438\\\\u043a\\\\u0443\\\\u043d_\\\\u044d\\\\u0440\\\\u043d\\\\u0435\\\\u043a\\\\u0443\\\\u043d_\\\\u0448\\\\u04d1\\\\u043c\\\\u0430\\\\u0442\\\\u043a\\\\u0443\\\\u043d\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0432\\\\u044b\\\\u0440_\\\\u0442\\\\u0443\\\\u043d_\\\\u044b\\\\u0442\\\\u043b_\\\\u044e\\\\u043d_\\\\u043a\\\\u04d7\\\\u04ab_\\\\u044d\\\\u0440\\\\u043d_\\\\u0448\\\\u04d1\\\\u043c\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0432\\\\u0440_\\\\u0442\\\\u043d_\\\\u044b\\\\u0442_\\\\u044e\\\\u043d_\\\\u043a\\\\u04ab_\\\\u044d\\\\u0440_\\\\u0448\\\\u043c\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD-MM-YYYY\\\,LL:\\\YYYY \\\\u04ab\\\\u0443\\\\u043b\\\\u0445\\\\u0438 MMMM \\\\u0443\\\\u0439\\\\u04d1\\\\u0445\\\\u04d7\\\\u043d D-\\\\u043c\\\\u04d7\\\\u0448\\\\u04d7\\\,LLL:\\\YYYY \\\\u04ab\\\\u0443\\\\u043b\\\\u0445\\\\u0438 MMMM \\\\u0443\\\\u0439\\\\u04d1\\\\u0445\\\\u04d7\\\\u043d D-\\\\u043c\\\\u04d7\\\\u0448\\\\u04d7, HH:mm\\\,LLLL:\\\dddd, YYYY \\\\u04ab\\\\u0443\\\\u043b\\\\u0445\\\\u0438 MMMM \\\\u0443\\\\u0439\\\\u04d1\\\\u0445\\\\u04d7\\\\u043d D-\\\\u043c\\\\u04d7\\\\u0448\\\\u04d7, HH:mm\\\},calendar:{sameDay:\\\\\\\u041f\\\\u0430\\\\u044f\\\\u043d LT \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\\u0440\\\\u0435\\\,nextDay:\\\\\\\u042b\\\\u0440\\\\u0430\\\\u043d LT \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\\u0440\\\\u0435\\\,lastDay:\\\\\\\u04d6\\\\u043d\\\\u0435\\\\u0440 LT \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\\u0440\\\\u0435\\\,nextWeek:\\\\\\\u04aa\\\\u0438\\\\u0442\\\\u0435\\\\u0441 dddd LT \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\\u0440\\\\u0435\\\,lastWeek:\\\\\\\u0418\\\\u0440\\\\u0442\\\\u043d\\\\u04d7 dddd LT \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\\u0440\\\\u0435\\\,sameElse:\\\L\\\},relativeTime:{future:function(e){return e+(/\\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442$/i.exec(e)?\\\\\\\u0440\\\\u0435\\\\u043d\\\:/\\\\u04ab\\\\u0443\\\\u043b$/i.exec(e)?\\\\\\\u0442\\\\u0430\\\\u043d\\\:\\\\\\\u0440\\\\u0430\\\\u043d\\\)},past:\\\%s \\\\u043a\\\\u0430\\\\u044f\\\\u043b\\\\u043b\\\\u0430\\\,s:\\\\\\\u043f\\\\u04d7\\\\u0440-\\\\u0438\\\\u043a \\\\u04ab\\\\u0435\\\\u043a\\\\u043a\\\\u0443\\\\u043d\\\\u0442\\\,ss:\\\%d \\\\u04ab\\\\u0435\\\\u043a\\\\u043a\\\\u0443\\\\u043d\\\\u0442\\\,m:\\\\\\\u043f\\\\u04d7\\\\u0440 \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,mm:\\\%d \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,h:\\\\\\\u043f\\\\u04d7\\\\u0440 \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\,hh:\\\%d \\\\u0441\\\\u0435\\\\u0445\\\\u0435\\\\u0442\\\,d:\\\\\\\u043f\\\\u04d7\\\\u0440 \\\\u043a\\\\u0443\\\\u043d\\\,dd:\\\%d \\\\u043a\\\\u0443\\\\u043d\\\,M:\\\\\\\u043f\\\\u04d7\\\\u0440 \\\\u0443\\\\u0439\\\\u04d1\\\\u0445\\\,MM:\\\%d \\\\u0443\\\\u0439\\\\u04d1\\\\u0445\\\,y:\\\\\\\u043f\\\\u04d7\\\\u0440 \\\\u04ab\\\\u0443\\\\u043b\\\,yy:\\\%d \\\\u04ab\\\\u0443\\\\u043b\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-\\\\u043c\\\\u04d7\\\\u0448/,ordinal:\\\%d-\\\\u043c\\\\u04d7\\\\u0448\\\,week:{dow:1,doy:7}}),l.defineLocale(\\\cy\\\,{months:\\\Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr\\\.split(\\\_\\\),monthsShort:\\\Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag\\\.split(\\\_\\\),weekdays:\\\Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn\\\.split(\\\_\\\),weekdaysShort:\\\Sul_Llun_Maw_Mer_Iau_Gwe_Sad\\\.split(\\\_\\\),weekdaysMin:\\\Su_Ll_Ma_Me_Ia_Gw_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Heddiw am LT\\\,nextDay:\\\Yfory am LT\\\,nextWeek:\\\dddd am LT\\\,lastDay:\\\Ddoe am LT\\\,lastWeek:\\\dddd diwethaf am LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\mewn %s\\\,past:\\\%s yn \\\\xf4l\\\,s:\\\ychydig eiliadau\\\,ss:\\\%d eiliad\\\,m:\\\munud\\\,mm:\\\%d munud\\\,h:\\\awr\\\,hh:\\\%d awr\\\,d:\\\diwrnod\\\,dd:\\\%d diwrnod\\\,M:\\\mis\\\,MM:\\\%d mis\\\,y:\\\blwyddyn\\\,yy:\\\%d flynedd\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a\\\\\\;return 20\u003Ce?a40e||50e||60e||80e||100e?\\\fed\\\:\\\ain\\\:0\u003Ce&&(a\\\\\\,\\\af\\\,\\\il\\\,\\\ydd\\\,\\\ydd\\\,\\\ed\\\,\\\ed\\\,\\\ed\\\,\\\fed\\\,\\\fed\\\,\\\fed\\\,\\\eg\\\,\\\fed\\\,\\\eg\\\,\\\eg\\\,\\\fed\\\,\\\eg\\\,\\\eg\\\,\\\fed\\\,\\\eg\\\,\\\fed\\\e),e+a},week:{dow:1,doy:4}}),l.defineLocale(\\\da\\\,{months:\\\januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\\\.split(\\\_\\\),weekdays:\\\s\\\\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\\\xf8rdag\\\.split(\\\_\\\),weekdaysShort:\\\s\\\\xf8n_man_tir_ons_tor_fre_l\\\\xf8r\\\.split(\\\_\\\),weekdaysMin:\\\s\\\\xf8_ma_ti_on_to_fr_l\\\\xf8\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY HH:mm\\\,LLLL:\\\dddd d. D. MMMM YYYY kl. HH:mm\\\},calendar:{sameDay:\\\i dag kl. LT\\\,nextDay:\\\i morgen kl. LT\\\,nextWeek:\\\p\\\\xe5 dddd kl. LT\\\,lastDay:\\\i g\\\\xe5r kl. LT\\\,lastWeek:\\\i dddds kl. LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\om %s\\\,past:\\\%s siden\\\,s:\\\f\\\\xe5 sekunder\\\,ss:\\\%d sekunder\\\,m:\\\et minut\\\,mm:\\\%d minutter\\\,h:\\\en time\\\,hh:\\\%d timer\\\,d:\\\en dag\\\,dd:\\\%d dage\\\,M:\\\en m\\\\xe5ned\\\,MM:\\\%d m\\\\xe5neder\\\,y:\\\et \\\\xe5r\\\,yy:\\\%d \\\\xe5r\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\de-at\\\,{months:\\\J\\\\xe4nner_Februar_M\\\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\\\.split(\\\_\\\),monthsShort:\\\J\\\\xe4n._Feb._M\\\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\\\.split(\\\_\\\),weekdaysShort:\\\So._Mo._Di._Mi._Do._Fr._Sa.\\\.split(\\\_\\\),weekdaysMin:\\\So_Mo_Di_Mi_Do_Fr_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D. MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\heute um LT Uhr\\\,sameElse:\\\L\\\,nextDay:\\\morgen um LT Uhr\\\,nextWeek:\\\dddd um LT Uhr\\\,lastDay:\\\gestern um LT Uhr\\\,lastWeek:\\\letzten dddd um LT Uhr\\\},relativeTime:{future:\\\in %s\\\,past:\\\vor %s\\\,s:\\\ein paar Sekunden\\\,ss:\\\%d Sekunden\\\,m:ps,mm:\\\%d Minuten\\\,h:ps,hh:\\\%d Stunden\\\,d:ps,dd:ps,M:ps,MM:ps,y:ps,yy:ps},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\de-ch\\\,{months:\\\Januar_Februar_M\\\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\\\.split(\\\_\\\),monthsShort:\\\Jan._Feb._M\\\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\\\.split(\\\_\\\),weekdaysShort:\\\So_Mo_Di_Mi_Do_Fr_Sa\\\.split(\\\_\\\),weekdaysMin:\\\So_Mo_Di_Mi_Do_Fr_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D. MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\heute um LT Uhr\\\,sameElse:\\\L\\\,nextDay:\\\morgen um LT Uhr\\\,nextWeek:\\\dddd um LT Uhr\\\,lastDay:\\\gestern um LT Uhr\\\,lastWeek:\\\letzten dddd um LT Uhr\\\},relativeTime:{future:\\\in %s\\\,past:\\\vor %s\\\,s:\\\ein paar Sekunden\\\,ss:\\\%d Sekunden\\\,m:Ds,mm:\\\%d Minuten\\\,h:Ds,hh:\\\%d Stunden\\\,d:Ds,dd:Ds,M:Ds,MM:Ds,y:Ds,yy:Ds},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\de\\\,{months:\\\Januar_Februar_M\\\\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\\\.split(\\\_\\\),monthsShort:\\\Jan._Feb._M\\\\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\\\.split(\\\_\\\),weekdaysShort:\\\So._Mo._Di._Mi._Do._Fr._Sa.\\\.split(\\\_\\\),weekdaysMin:\\\So_Mo_Di_Mi_Do_Fr_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D. MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\heute um LT Uhr\\\,sameElse:\\\L\\\,nextDay:\\\morgen um LT Uhr\\\,nextWeek:\\\dddd um LT Uhr\\\,lastDay:\\\gestern um LT Uhr\\\,lastWeek:\\\letzten dddd um LT Uhr\\\},relativeTime:{future:\\\in %s\\\,past:\\\vor %s\\\,s:\\\ein paar Sekunden\\\,ss:\\\%d Sekunden\\\,m:Ts,mm:\\\%d Minuten\\\,h:Ts,hh:\\\%d Stunden\\\,d:Ts,dd:Ts,M:Ts,MM:Ts,y:Ts,yy:Ts},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var gs\\\\\\\u0796\\\\u07ac\\\\u0782\\\\u07aa\\\\u0787\\\\u07a6\\\\u0783\\\\u07a9\\\,\\\\\\\u078a\\\\u07ac\\\\u0784\\\\u07b0\\\\u0783\\\\u07aa\\\\u0787\\\\u07a6\\\\u0783\\\\u07a9\\\,\\\\\\\u0789\\\\u07a7\\\\u0783\\\\u07a8\\\\u0797\\\\u07aa\\\,\\\\\\\u0787\\\\u07ad\\\\u0795\\\\u07b0\\\\u0783\\\\u07a9\\\\u078d\\\\u07aa\\\,\\\\\\\u0789\\\\u07ad\\\,\\\\\\\u0796\\\\u07ab\\\\u0782\\\\u07b0\\\,\\\\\\\u0796\\\\u07aa\\\\u078d\\\\u07a6\\\\u0787\\\\u07a8\\\,\\\\\\\u0787\\\\u07af\\\\u078e\\\\u07a6\\\\u0790\\\\u07b0\\\\u0793\\\\u07aa\\\,\\\\\\\u0790\\\\u07ac\\\\u0795\\\\u07b0\\\\u0793\\\\u07ac\\\\u0789\\\\u07b0\\\\u0784\\\\u07a6\\\\u0783\\\\u07aa\\\,\\\\\\\u0787\\\\u07ae\\\\u0786\\\\u07b0\\\\u0793\\\\u07af\\\\u0784\\\\u07a6\\\\u0783\\\\u07aa\\\,\\\\\\\u0782\\\\u07ae\\\\u0788\\\\u07ac\\\\u0789\\\\u07b0\\\\u0784\\\\u07a6\\\\u0783\\\\u07aa\\\,\\\\\\\u0791\\\\u07a8\\\\u0790\\\\u07ac\\\\u0789\\\\u07b0\\\\u0784\\\\u07a6\\\\u0783\\\\u07aa\\\,ws\\\\\\\u0787\\\\u07a7\\\\u078b\\\\u07a8\\\\u0787\\\\u07b0\\\\u078c\\\\u07a6\\\,\\\\\\\u0780\\\\u07af\\\\u0789\\\\u07a6\\\,\\\\\\\u0787\\\\u07a6\\\\u0782\\\\u07b0\\\\u078e\\\\u07a7\\\\u0783\\\\u07a6\\\,\\\\\\\u0784\\\\u07aa\\\\u078b\\\\u07a6\\\,\\\\\\\u0784\\\\u07aa\\\\u0783\\\\u07a7\\\\u0790\\\\u07b0\\\\u078a\\\\u07a6\\\\u078c\\\\u07a8\\\,\\\\\\\u0780\\\\u07aa\\\\u0786\\\\u07aa\\\\u0783\\\\u07aa\\\,\\\\\\\u0780\\\\u07ae\\\\u0782\\\\u07a8\\\\u0780\\\\u07a8\\\\u0783\\\\u07aa\\\;l.defineLocale(\\\dv\\\,{months:gs,monthsShort:gs,weekdays:ws,weekdaysShort:ws,weekdaysMin:\\\\\\\u0787\\\\u07a7\\\\u078b\\\\u07a8_\\\\u0780\\\\u07af\\\\u0789\\\\u07a6_\\\\u0787\\\\u07a6\\\\u0782\\\\u07b0_\\\\u0784\\\\u07aa\\\\u078b\\\\u07a6_\\\\u0784\\\\u07aa\\\\u0783\\\\u07a7_\\\\u0780\\\\u07aa\\\\u0786\\\\u07aa_\\\\u0780\\\\u07ae\\\\u0782\\\\u07a8\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\D/M/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0789\\\\u0786|\\\\u0789\\\\u078a/,isPM:function(e){return\\\\\\\u0789\\\\u078a\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0789\\\\u0786\\\:\\\\\\\u0789\\\\u078a\\\},calendar:{sameDay:\\\\\\\u0789\\\\u07a8\\\\u0787\\\\u07a6\\\\u078b\\\\u07aa LT\\\,nextDay:\\\\\\\u0789\\\\u07a7\\\\u078b\\\\u07a6\\\\u0789\\\\u07a7 LT\\\,nextWeek:\\\dddd LT\\\,lastDay:\\\\\\\u0787\\\\u07a8\\\\u0787\\\\u07b0\\\\u0794\\\\u07ac LT\\\,lastWeek:\\\\\\\u078a\\\\u07a7\\\\u0787\\\\u07a8\\\\u078c\\\\u07aa\\\\u0788\\\\u07a8 dddd LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u078c\\\\u07ac\\\\u0783\\\\u07ad\\\\u078e\\\\u07a6\\\\u0787\\\\u07a8 %s\\\,past:\\\\\\\u0786\\\\u07aa\\\\u0783\\\\u07a8\\\\u0782\\\\u07b0 %s\\\,s:\\\\\\\u0790\\\\u07a8\\\\u0786\\\\u07aa\\\\u0782\\\\u07b0\\\\u078c\\\\u07aa\\\\u0786\\\\u07ae\\\\u0785\\\\u07ac\\\\u0787\\\\u07b0\\\,ss:\\\d% \\\\u0790\\\\u07a8\\\\u0786\\\\u07aa\\\\u0782\\\\u07b0\\\\u078c\\\\u07aa\\\,m:\\\\\\\u0789\\\\u07a8\\\\u0782\\\\u07a8\\\\u0793\\\\u07ac\\\\u0787\\\\u07b0\\\,mm:\\\\\\\u0789\\\\u07a8\\\\u0782\\\\u07a8\\\\u0793\\\\u07aa %d\\\,h:\\\\\\\u078e\\\\u07a6\\\\u0791\\\\u07a8\\\\u0787\\\\u07a8\\\\u0783\\\\u07ac\\\\u0787\\\\u07b0\\\,hh:\\\\\\\u078e\\\\u07a6\\\\u0791\\\\u07a8\\\\u0787\\\\u07a8\\\\u0783\\\\u07aa %d\\\,d:\\\\\\\u078b\\\\u07aa\\\\u0788\\\\u07a6\\\\u0780\\\\u07ac\\\\u0787\\\\u07b0\\\,dd:\\\\\\\u078b\\\\u07aa\\\\u0788\\\\u07a6\\\\u0790\\\\u07b0 %d\\\,M:\\\\\\\u0789\\\\u07a6\\\\u0780\\\\u07ac\\\\u0787\\\\u07b0\\\,MM:\\\\\\\u0789\\\\u07a6\\\\u0790\\\\u07b0 %d\\\,y:\\\\\\\u0787\\\\u07a6\\\\u0780\\\\u07a6\\\\u0783\\\\u07ac\\\\u0787\\\\u07b0\\\,yy:\\\\\\\u0787\\\\u07a6\\\\u0780\\\\u07a6\\\\u0783\\\\u07aa %d\\\},preparse:function(e){return e.replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/,/g,\\\\\\\u060c\\\)},week:{dow:7,doy:12}}),l.defineLocale(\\\el\\\,{monthsNominativeEl:\\\\\\\u0399\\\\u03b1\\\\u03bd\\\\u03bf\\\\u03c5\\\\u03ac\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u03a6\\\\u03b5\\\\u03b2\\\\u03c1\\\\u03bf\\\\u03c5\\\\u03ac\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u039c\\\\u03ac\\\\u03c1\\\\u03c4\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u0391\\\\u03c0\\\\u03c1\\\\u03af\\\\u03bb\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u039c\\\\u03ac\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u0399\\\\u03bf\\\\u03cd\\\\u03bd\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u0399\\\\u03bf\\\\u03cd\\\\u03bb\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u0391\\\\u03cd\\\\u03b3\\\\u03bf\\\\u03c5\\\\u03c3\\\\u03c4\\\\u03bf\\\\u03c2_\\\\u03a3\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03ad\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u039f\\\\u03ba\\\\u03c4\\\\u03ce\\\\u03b2\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u039d\\\\u03bf\\\\u03ad\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2_\\\\u0394\\\\u03b5\\\\u03ba\\\\u03ad\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03b9\\\\u03bf\\\\u03c2\\\.split(\\\_\\\),monthsGenitiveEl:\\\\\\\u0399\\\\u03b1\\\\u03bd\\\\u03bf\\\\u03c5\\\\u03b1\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5_\\\\u03a6\\\\u03b5\\\\u03b2\\\\u03c1\\\\u03bf\\\\u03c5\\\\u03b1\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5_\\\\u039c\\\\u03b1\\\\u03c1\\\\u03c4\\\\u03af\\\\u03bf\\\\u03c5_\\\\u0391\\\\u03c0\\\\u03c1\\\\u03b9\\\\u03bb\\\\u03af\\\\u03bf\\\\u03c5_\\\\u039c\\\\u03b1\\\\u0390\\\\u03bf\\\\u03c5_\\\\u0399\\\\u03bf\\\\u03c5\\\\u03bd\\\\u03af\\\\u03bf\\\\u03c5_\\\\u0399\\\\u03bf\\\\u03c5\\\\u03bb\\\\u03af\\\\u03bf\\\\u03c5_\\\\u0391\\\\u03c5\\\\u03b3\\\\u03bf\\\\u03cd\\\\u03c3\\\\u03c4\\\\u03bf\\\\u03c5_\\\\u03a3\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03b5\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5_\\\\u039f\\\\u03ba\\\\u03c4\\\\u03c9\\\\u03b2\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5_\\\\u039d\\\\u03bf\\\\u03b5\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5_\\\\u0394\\\\u03b5\\\\u03ba\\\\u03b5\\\\u03bc\\\\u03b2\\\\u03c1\\\\u03af\\\\u03bf\\\\u03c5\\\.split(\\\_\\\),months:function(e,a){return e?\\\string\\\typeof a&&/D/.test(a.substring(0,a.indexOf(\\\MMMM\\\)))?this._monthsGenitiveEle.month():this._monthsNominativeEle.month():this._monthsNominativeEl},monthsShort:\\\\\\\u0399\\\\u03b1\\\\u03bd_\\\\u03a6\\\\u03b5\\\\u03b2_\\\\u039c\\\\u03b1\\\\u03c1_\\\\u0391\\\\u03c0\\\\u03c1_\\\\u039c\\\\u03b1\\\\u03ca_\\\\u0399\\\\u03bf\\\\u03c5\\\\u03bd_\\\\u0399\\\\u03bf\\\\u03c5\\\\u03bb_\\\\u0391\\\\u03c5\\\\u03b3_\\\\u03a3\\\\u03b5\\\\u03c0_\\\\u039f\\\\u03ba\\\\u03c4_\\\\u039d\\\\u03bf\\\\u03b5_\\\\u0394\\\\u03b5\\\\u03ba\\\.split(\\\_\\\),weekdays:\\\\\\\u039a\\\\u03c5\\\\u03c1\\\\u03b9\\\\u03b1\\\\u03ba\\\\u03ae_\\\\u0394\\\\u03b5\\\\u03c5\\\\u03c4\\\\u03ad\\\\u03c1\\\\u03b1_\\\\u03a4\\\\u03c1\\\\u03af\\\\u03c4\\\\u03b7_\\\\u03a4\\\\u03b5\\\\u03c4\\\\u03ac\\\\u03c1\\\\u03c4\\\\u03b7_\\\\u03a0\\\\u03ad\\\\u03bc\\\\u03c0\\\\u03c4\\\\u03b7_\\\\u03a0\\\\u03b1\\\\u03c1\\\\u03b1\\\\u03c3\\\\u03ba\\\\u03b5\\\\u03c5\\\\u03ae_\\\\u03a3\\\\u03ac\\\\u03b2\\\\u03b2\\\\u03b1\\\\u03c4\\\\u03bf\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u039a\\\\u03c5\\\\u03c1_\\\\u0394\\\\u03b5\\\\u03c5_\\\\u03a4\\\\u03c1\\\\u03b9_\\\\u03a4\\\\u03b5\\\\u03c4_\\\\u03a0\\\\u03b5\\\\u03bc_\\\\u03a0\\\\u03b1\\\\u03c1_\\\\u03a3\\\\u03b1\\\\u03b2\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u039a\\\\u03c5_\\\\u0394\\\\u03b5_\\\\u03a4\\\\u03c1_\\\\u03a4\\\\u03b5_\\\\u03a0\\\\u03b5_\\\\u03a0\\\\u03b1_\\\\u03a3\\\\u03b1\\\.split(\\\_\\\),meridiem:function(e,a,t){return 11\u003Ce?t?\\\\\\\u03bc\\\\u03bc\\\:\\\\\\\u039c\\\\u039c\\\:t?\\\\\\\u03c0\\\\u03bc\\\:\\\\\\\u03a0\\\\u039c\\\},isPM:function(e){return\\\\\\\u03bc\\\(e+\\\\\\).toLowerCase()0},meridiemParse:/\\\\u03a0\\\\u039c\\\\.?\\\\u039c?\\\\.?/i,longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendarEl:{sameDay:\\\\\\\u03a3\\\\u03ae\\\\u03bc\\\\u03b5\\\\u03c1\\\\u03b1 {} LT\\\,nextDay:\\\\\\\u0391\\\\u03cd\\\\u03c1\\\\u03b9\\\\u03bf {} LT\\\,nextWeek:\\\dddd {} LT\\\,lastDay:\\\\\\\u03a7\\\\u03b8\\\\u03b5\\\\u03c2 {} LT\\\,lastWeek:function(){switch(this.day()){case 6:return\\\\\\\u03c4\\\\u03bf \\\\u03c0\\\\u03c1\\\\u03bf\\\\u03b7\\\\u03b3\\\\u03bf\\\\u03cd\\\\u03bc\\\\u03b5\\\\u03bd\\\\u03bf dddd {} LT\\\;default:return\\\\\\\u03c4\\\\u03b7\\\\u03bd \\\\u03c0\\\\u03c1\\\\u03bf\\\\u03b7\\\\u03b3\\\\u03bf\\\\u03cd\\\\u03bc\\\\u03b5\\\\u03bd\\\\u03b7 dddd {} LT\\\}},sameElse:\\\L\\\},calendar:function(e,a){var tthis._calendarEle,sa&&a.hours();return H(t)&&(tt.apply(a)),t.replace(\\\{}\\\,s%121?\\\\\\\u03c3\\\\u03c4\\\\u03b7\\\:\\\\\\\u03c3\\\\u03c4\\\\u03b9\\\\u03c2\\\)},relativeTime:{future:\\\\\\\u03c3\\\\u03b5 %s\\\,past:\\\%s \\\\u03c0\\\\u03c1\\\\u03b9\\\\u03bd\\\,s:\\\\\\\u03bb\\\\u03af\\\\u03b3\\\\u03b1 \\\\u03b4\\\\u03b5\\\\u03c5\\\\u03c4\\\\u03b5\\\\u03c1\\\\u03cc\\\\u03bb\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03b1\\\,ss:\\\%d \\\\u03b4\\\\u03b5\\\\u03c5\\\\u03c4\\\\u03b5\\\\u03c1\\\\u03cc\\\\u03bb\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03b1\\\,m:\\\\\\\u03ad\\\\u03bd\\\\u03b1 \\\\u03bb\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03cc\\\,mm:\\\%d \\\\u03bb\\\\u03b5\\\\u03c0\\\\u03c4\\\\u03ac\\\,h:\\\\\\\u03bc\\\\u03af\\\\u03b1 \\\\u03ce\\\\u03c1\\\\u03b1\\\,hh:\\\%d \\\\u03ce\\\\u03c1\\\\u03b5\\\\u03c2\\\,d:\\\\\\\u03bc\\\\u03af\\\\u03b1 \\\\u03bc\\\\u03ad\\\\u03c1\\\\u03b1\\\,dd:\\\%d \\\\u03bc\\\\u03ad\\\\u03c1\\\\u03b5\\\\u03c2\\\,M:\\\\\\\u03ad\\\\u03bd\\\\u03b1\\\\u03c2 \\\\u03bc\\\\u03ae\\\\u03bd\\\\u03b1\\\\u03c2\\\,MM:\\\%d \\\\u03bc\\\\u03ae\\\\u03bd\\\\u03b5\\\\u03c2\\\,y:\\\\\\\u03ad\\\\u03bd\\\\u03b1\\\\u03c2 \\\\u03c7\\\\u03c1\\\\u03cc\\\\u03bd\\\\u03bf\\\\u03c2\\\,yy:\\\%d \\\\u03c7\\\\u03c1\\\\u03cc\\\\u03bd\\\\u03b9\\\\u03b1\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\u03b7/,ordinal:\\\%d\\\\u03b7\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\en-SG\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\en-au\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\en-ca\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\YYYY-MM-DD\\\,LL:\\\MMMM D, YYYY\\\,LLL:\\\MMMM D, YYYY h:mm A\\\,LLLL:\\\dddd, MMMM D, YYYY h:mm A\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)}}),l.defineLocale(\\\en-gb\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\en-ie\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\en-il\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)}}),l.defineLocale(\\\en-nz\\\,{months:\\\January_February_March_April_May_June_July_August_September_October_November_December\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\\\.split(\\\_\\\),weekdays:\\\Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\\\.split(\\\_\\\),weekdaysShort:\\\Sun_Mon_Tue_Wed_Thu_Fri_Sat\\\.split(\\\_\\\),weekdaysMin:\\\Su_Mo_Tu_We_Th_Fr_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendar:{sameDay:\\\Today at LT\\\,nextDay:\\\Tomorrow at LT\\\,nextWeek:\\\dddd at LT\\\,lastDay:\\\Yesterday at LT\\\,lastWeek:\\\Last dddd at LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\in %s\\\,past:\\\%s ago\\\,s:\\\a few seconds\\\,ss:\\\%d seconds\\\,m:\\\a minute\\\,mm:\\\%d minutes\\\,h:\\\an hour\\\,hh:\\\%d hours\\\,d:\\\a day\\\,dd:\\\%d days\\\,M:\\\a month\\\,MM:\\\%d months\\\,y:\\\a year\\\,yy:\\\%d years\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\eo\\\,{months:\\\januaro_februaro_marto_aprilo_majo_junio_julio_a\\\\u016dgusto_septembro_oktobro_novembro_decembro\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_maj_jun_jul_a\\\\u016dg_sep_okt_nov_dec\\\.split(\\\_\\\),weekdays:\\\diman\\\\u0109o_lundo_mardo_merkredo_\\\\u0135a\\\\u016ddo_vendredo_sabato\\\.split(\\\_\\\),weekdaysShort:\\\dim_lun_mard_merk_\\\\u0135a\\\\u016d_ven_sab\\\.split(\\\_\\\),weekdaysMin:\\\di_lu_ma_me_\\\\u0135a_ve_sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\D-a de MMMM, YYYY\\\,LLL:\\\D-a de MMMM, YYYY HH:mm\\\,LLLL:\\\dddd, la D-a de MMMM, YYYY HH:mm\\\},meridiemParse:/ap\\\\.t\\\\.m/i,isPM:function(e){return\\\p\\\e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11\u003Ce?t?\\\p.t.m.\\\:\\\P.T.M.\\\:t?\\\a.t.m.\\\:\\\A.T.M.\\\},calendar:{sameDay:\\\Hodia\\\\u016d je LT\\\,nextDay:\\\Morga\\\\u016d je LT\\\,nextWeek:\\\dddd je LT\\\,lastDay:\\\Hiera\\\\u016d je LT\\\,lastWeek:\\\pasinta dddd je LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\post %s\\\,past:\\\anta\\\\u016d %s\\\,s:\\\sekundoj\\\,ss:\\\%d sekundoj\\\,m:\\\minuto\\\,mm:\\\%d minutoj\\\,h:\\\horo\\\,hh:\\\%d horoj\\\,d:\\\tago\\\,dd:\\\%d tagoj\\\,M:\\\monato\\\,MM:\\\%d monatoj\\\,y:\\\jaro\\\,yy:\\\%d jaroj\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}a/,ordinal:\\\%da\\\,week:{dow:1,doy:7}});var vs\\\ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\\\.split(\\\_\\\),Ss\\\ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\\\.split(\\\_\\\),Hs/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i,bs/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i;l.defineLocale(\\\es-do\\\,{months:\\\enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Sse.month():vse.month():vs},monthsRegex:bs,monthsShortRegex:bs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i,monthsParse:Hs,longMonthsParse:Hs,shortMonthsParse:Hs,weekdays:\\\domingo_lunes_martes_mi\\\\xe9rcoles_jueves_viernes_s\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\dom._lun._mar._mi\\\\xe9._jue._vie._s\\\\xe1b.\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_mi_ju_vi_s\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY h:mm A\\\,LLLL:\\\dddd, D de MMMM de YYYY h:mm A\\\},calendar:{sameDay:function(){return\\\hoy a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextDay:function(){return\\\ma\\\\xf1ana a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextWeek:function(){return\\\dddd a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastDay:function(){return\\\ayer a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastWeek:function(){return\\\el dddd pasado a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\en %s\\\,past:\\\hace %s\\\,s:\\\unos segundos\\\,ss:\\\%d segundos\\\,m:\\\un minuto\\\,mm:\\\%d minutos\\\,h:\\\una hora\\\,hh:\\\%d horas\\\,d:\\\un d\\\\xeda\\\,dd:\\\%d d\\\\xedas\\\,M:\\\un mes\\\,MM:\\\%d meses\\\,y:\\\un a\\\\xf1o\\\,yy:\\\%d a\\\\xf1os\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}});var js\\\ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\\\.split(\\\_\\\),xs\\\ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\\\.split(\\\_\\\),Os/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i,Ps/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i;l.defineLocale(\\\es-us\\\,{months:\\\enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?xse.month():jse.month():js},monthsRegex:Ps,monthsShortRegex:Ps,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i,monthsParse:Os,longMonthsParse:Os,shortMonthsParse:Os,weekdays:\\\domingo_lunes_martes_mi\\\\xe9rcoles_jueves_viernes_s\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\dom._lun._mar._mi\\\\xe9._jue._vie._s\\\\xe1b.\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_mi_ju_vi_s\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\MM/DD/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY h:mm A\\\,LLLL:\\\dddd, D de MMMM de YYYY h:mm A\\\},calendar:{sameDay:function(){return\\\hoy a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextDay:function(){return\\\ma\\\\xf1ana a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextWeek:function(){return\\\dddd a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastDay:function(){return\\\ayer a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastWeek:function(){return\\\el dddd pasado a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\en %s\\\,past:\\\hace %s\\\,s:\\\unos segundos\\\,ss:\\\%d segundos\\\,m:\\\un minuto\\\,mm:\\\%d minutos\\\,h:\\\una hora\\\,hh:\\\%d horas\\\,d:\\\un d\\\\xeda\\\,dd:\\\%d d\\\\xedas\\\,M:\\\un mes\\\,MM:\\\%d meses\\\,y:\\\un a\\\\xf1o\\\,yy:\\\%d a\\\\xf1os\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:0,doy:6}});var Ws\\\ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\\\.split(\\\_\\\),As\\\ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\\\.split(\\\_\\\),Es/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i,Fs/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i;function zs(e,a,t,s){var n{s:\\\m\\\\xf5ne sekundi\\\,\\\m\\\\xf5ni sekund\\\,\\\paar sekundit\\\,ss:e+\\\sekundi\\\,e+\\\sekundit\\\,m:\\\\\\\xfche minuti\\\,\\\\\\\xfcks minut\\\,mm:e+\\\ minuti\\\,e+\\\ minutit\\\,h:\\\\\\\xfche tunni\\\,\\\tund aega\\\,\\\\\\\xfcks tund\\\,hh:e+\\\ tunni\\\,e+\\\ tundi\\\,d:\\\\\\\xfche p\\\\xe4eva\\\,\\\\\\\xfcks p\\\\xe4ev\\\,M:\\\kuu aja\\\,\\\kuu aega\\\,\\\\\\\xfcks kuu\\\,MM:e+\\\ kuu\\\,e+\\\ kuud\\\,y:\\\\\\\xfche aasta\\\,\\\aasta\\\,\\\\\\\xfcks aasta\\\,yy:e+\\\ aasta\\\,e+\\\ aastat\\\};return a?nt2?nt2:nt1:s?nt0:nt1}l.defineLocale(\\\es\\\,{months:\\\enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Ase.month():Wse.month():Ws},monthsRegex:Fs,monthsShortRegex:Fs,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\\\.?|feb\\\\.?|mar\\\\.?|abr\\\\.?|may\\\\.?|jun\\\\.?|jul\\\\.?|ago\\\\.?|sep\\\\.?|oct\\\\.?|nov\\\\.?|dic\\\\.?)/i,monthsParse:Es,longMonthsParse:Es,shortMonthsParse:Es,weekdays:\\\domingo_lunes_martes_mi\\\\xe9rcoles_jueves_viernes_s\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\dom._lun._mar._mi\\\\xe9._jue._vie._s\\\\xe1b.\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_mi_ju_vi_s\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY H:mm\\\,LLLL:\\\dddd, D de MMMM de YYYY H:mm\\\},calendar:{sameDay:function(){return\\\hoy a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextDay:function(){return\\\ma\\\\xf1ana a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},nextWeek:function(){return\\\dddd a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastDay:function(){return\\\ayer a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},lastWeek:function(){return\\\el dddd pasado a la\\\+(1!this.hours()?\\\s\\\:\\\\\\)+\\\ LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\en %s\\\,past:\\\hace %s\\\,s:\\\unos segundos\\\,ss:\\\%d segundos\\\,m:\\\un minuto\\\,mm:\\\%d minutos\\\,h:\\\una hora\\\,hh:\\\%d horas\\\,d:\\\un d\\\\xeda\\\,dd:\\\%d d\\\\xedas\\\,M:\\\un mes\\\,MM:\\\%d meses\\\,y:\\\un a\\\\xf1o\\\,yy:\\\%d a\\\\xf1os\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\et\\\,{months:\\\jaanuar_veebruar_m\\\\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\\\.split(\\\_\\\),monthsShort:\\\jaan_veebr_m\\\\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\\\.split(\\\_\\\),weekdays:\\\p\\\\xfchap\\\\xe4ev_esmasp\\\\xe4ev_teisip\\\\xe4ev_kolmap\\\\xe4ev_neljap\\\\xe4ev_reede_laup\\\\xe4ev\\\.split(\\\_\\\),weekdaysShort:\\\P_E_T_K_N_R_L\\\.split(\\\_\\\),weekdaysMin:\\\P_E_T_K_N_R_L\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\T\\\\xe4na, LT\\\,nextDay:\\\Homme, LT\\\,nextWeek:\\\J\\\\xe4rgmine dddd LT\\\,lastDay:\\\Eile, LT\\\,lastWeek:\\\Eelmine dddd LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s p\\\\xe4rast\\\,past:\\\%s tagasi\\\,s:zs,ss:zs,m:zs,mm:zs,h:zs,hh:zs,d:zs,dd:\\\%d p\\\\xe4eva\\\,M:zs,MM:zs,y:zs,yy:zs},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\eu\\\,{months:\\\urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\\\.split(\\\_\\\),monthsShort:\\\urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\\\.split(\\\_\\\),weekdaysShort:\\\ig._al._ar._az._og._ol._lr.\\\.split(\\\_\\\),weekdaysMin:\\\ig_al_ar_az_og_ol_lr\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\YYYYko MMMMren Da\\\,LLL:\\\YYYYko MMMMren Da HH:mm\\\,LLLL:\\\dddd, YYYYko MMMMren Da HH:mm\\\,l:\\\YYYY-M-D\\\,ll:\\\YYYYko MMM Da\\\,lll:\\\YYYYko MMM Da HH:mm\\\,llll:\\\ddd, YYYYko MMM Da HH:mm\\\},calendar:{sameDay:\\\gaur LTetan\\\,nextDay:\\\bihar LTetan\\\,nextWeek:\\\dddd LTetan\\\,lastDay:\\\atzo LTetan\\\,lastWeek:\\\aurreko dddd LTetan\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s barru\\\,past:\\\duela %s\\\,s:\\\segundo batzuk\\\,ss:\\\%d segundo\\\,m:\\\minutu bat\\\,mm:\\\%d minutu\\\,h:\\\ordu bat\\\,hh:\\\%d ordu\\\,d:\\\egun bat\\\,dd:\\\%d egun\\\,M:\\\hilabete bat\\\,MM:\\\%d hilabete\\\,y:\\\urte bat\\\,yy:\\\%d urte\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}});var Js{1:\\\\\\\u06f1\\\,2:\\\\\\\u06f2\\\,3:\\\\\\\u06f3\\\,4:\\\\\\\u06f4\\\,5:\\\\\\\u06f5\\\,6:\\\\\\\u06f6\\\,7:\\\\\\\u06f7\\\,8:\\\\\\\u06f8\\\,9:\\\\\\\u06f9\\\,0:\\\\\\\u06f0\\\},Ns{\\\\\\\u06f1\\\:\\\1\\\,\\\\\\\u06f2\\\:\\\2\\\,\\\\\\\u06f3\\\:\\\3\\\,\\\\\\\u06f4\\\:\\\4\\\,\\\\\\\u06f5\\\:\\\5\\\,\\\\\\\u06f6\\\:\\\6\\\,\\\\\\\u06f7\\\:\\\7\\\,\\\\\\\u06f8\\\:\\\8\\\,\\\\\\\u06f9\\\:\\\9\\\,\\\\\\\u06f0\\\:\\\0\\\};l.defineLocale(\\\fa\\\,{months:\\\\\\\u0698\\\\u0627\\\\u0646\\\\u0648\\\\u06cc\\\\u0647_\\\\u0641\\\\u0648\\\\u0631\\\\u06cc\\\\u0647_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0622\\\\u0648\\\\u0631\\\\u06cc\\\\u0644_\\\\u0645\\\\u0647_\\\\u0698\\\\u0648\\\\u0626\\\\u0646_\\\\u0698\\\\u0648\\\\u0626\\\\u06cc\\\\u0647_\\\\u0627\\\\u0648\\\\u062a_\\\\u0633\\\\u067e\\\\u062a\\\\u0627\\\\u0645\\\\u0628\\\\u0631_\\\\u0627\\\\u06a9\\\\u062a\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0627\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u0633\\\\u0627\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u0698\\\\u0627\\\\u0646\\\\u0648\\\\u06cc\\\\u0647_\\\\u0641\\\\u0648\\\\u0631\\\\u06cc\\\\u0647_\\\\u0645\\\\u0627\\\\u0631\\\\u0633_\\\\u0622\\\\u0648\\\\u0631\\\\u06cc\\\\u0644_\\\\u0645\\\\u0647_\\\\u0698\\\\u0648\\\\u0626\\\\u0646_\\\\u0698\\\\u0648\\\\u0626\\\\u06cc\\\\u0647_\\\\u0627\\\\u0648\\\\u062a_\\\\u0633\\\\u067e\\\\u062a\\\\u0627\\\\u0645\\\\u0628\\\\u0631_\\\\u0627\\\\u06a9\\\\u062a\\\\u0628\\\\u0631_\\\\u0646\\\\u0648\\\\u0627\\\\u0645\\\\u0628\\\\u0631_\\\\u062f\\\\u0633\\\\u0627\\\\u0645\\\\u0628\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u06cc\\\\u06a9\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u062f\\\\u0648\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u0633\\\\u0647\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u0686\\\\u0647\\\\u0627\\\\u0631\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u067e\\\\u0646\\\\u062c\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u062c\\\\u0645\\\\u0639\\\\u0647_\\\\u0634\\\\u0646\\\\u0628\\\\u0647\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u06cc\\\\u06a9\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u062f\\\\u0648\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u0633\\\\u0647\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u0686\\\\u0647\\\\u0627\\\\u0631\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u067e\\\\u0646\\\\u062c\\\\u200c\\\\u0634\\\\u0646\\\\u0628\\\\u0647_\\\\u062c\\\\u0645\\\\u0639\\\\u0647_\\\\u0634\\\\u0646\\\\u0628\\\\u0647\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u06cc_\\\\u062f_\\\\u0633_\\\\u0686_\\\\u067e_\\\\u062c_\\\\u0634\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0642\\\\u0628\\\\u0644 \\\\u0627\\\\u0632 \\\\u0638\\\\u0647\\\\u0631|\\\\u0628\\\\u0639\\\\u062f \\\\u0627\\\\u0632 \\\\u0638\\\\u0647\\\\u0631/,isPM:function(e){return/\\\\u0628\\\\u0639\\\\u062f \\\\u0627\\\\u0632 \\\\u0638\\\\u0647\\\\u0631/.test(e)},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0642\\\\u0628\\\\u0644 \\\\u0627\\\\u0632 \\\\u0638\\\\u0647\\\\u0631\\\:\\\\\\\u0628\\\\u0639\\\\u062f \\\\u0627\\\\u0632 \\\\u0638\\\\u0647\\\\u0631\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0645\\\\u0631\\\\u0648\\\\u0632 \\\\u0633\\\\u0627\\\\u0639\\\\u062a LT\\\,nextDay:\\\\\\\u0641\\\\u0631\\\\u062f\\\\u0627 \\\\u0633\\\\u0627\\\\u0639\\\\u062a LT\\\,nextWeek:\\\dddd \\\\u0633\\\\u0627\\\\u0639\\\\u062a LT\\\,lastDay:\\\\\\\u062f\\\\u06cc\\\\u0631\\\\u0648\\\\u0632 \\\\u0633\\\\u0627\\\\u0639\\\\u062a LT\\\,lastWeek:\\\dddd \\\\u067e\\\\u06cc\\\\u0634 \\\\u0633\\\\u0627\\\\u0639\\\\u062a LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u062f\\\\u0631 %s\\\,past:\\\%s \\\\u067e\\\\u06cc\\\\u0634\\\,s:\\\\\\\u0686\\\\u0646\\\\u062f \\\\u062b\\\\u0627\\\\u0646\\\\u06cc\\\\u0647\\\,ss:\\\\\\\u062b\\\\u0627\\\\u0646\\\\u06cc\\\\u0647 d%\\\,m:\\\\\\\u06cc\\\\u06a9 \\\\u062f\\\\u0642\\\\u06cc\\\\u0642\\\\u0647\\\,mm:\\\%d \\\\u062f\\\\u0642\\\\u06cc\\\\u0642\\\\u0647\\\,h:\\\\\\\u06cc\\\\u06a9 \\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0639\\\\u062a\\\,d:\\\\\\\u06cc\\\\u06a9 \\\\u0631\\\\u0648\\\\u0632\\\,dd:\\\%d \\\\u0631\\\\u0648\\\\u0632\\\,M:\\\\\\\u06cc\\\\u06a9 \\\\u0645\\\\u0627\\\\u0647\\\,MM:\\\%d \\\\u0645\\\\u0627\\\\u0647\\\,y:\\\\\\\u06cc\\\\u06a9 \\\\u0633\\\\u0627\\\\u0644\\\,yy:\\\%d \\\\u0633\\\\u0627\\\\u0644\\\},preparse:function(e){return e.replace(/\\\\u06f0-\\\\u06f9/g,function(e){return Nse}).replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/\\\\d/g,function(e){return Jse}).replace(/,/g,\\\\\\\u060c\\\)},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\u0645/,ordinal:\\\%d\\\\u0645\\\,week:{dow:6,doy:12}});var Rs\\\nolla yksi kaksi kolme nelj\\\\xe4 viisi kuusi seitsem\\\\xe4n kahdeksan yhdeks\\\\xe4n\\\.split(\\\ \\\),Cs\\\nolla\\\,\\\yhden\\\,\\\kahden\\\,\\\kolmen\\\,\\\nelj\\\\xe4n\\\,\\\viiden\\\,\\\kuuden\\\,Rs7,Rs8,Rs9;function Is(e,a,t,s){var n,d,r\\\\\\;switch(t){case\\\s\\\:return s?\\\muutaman sekunnin\\\:\\\muutama sekunti\\\;case\\\ss\\\:return s?\\\sekunnin\\\:\\\sekuntia\\\;case\\\m\\\:return s?\\\minuutin\\\:\\\minuutti\\\;case\\\mm\\\:rs?\\\minuutin\\\:\\\minuuttia\\\;break;case\\\h\\\:return s?\\\tunnin\\\:\\\tunti\\\;case\\\hh\\\:rs?\\\tunnin\\\:\\\tuntia\\\;break;case\\\d\\\:return s?\\\p\\\\xe4iv\\\\xe4n\\\:\\\p\\\\xe4iv\\\\xe4\\\;case\\\dd\\\:rs?\\\p\\\\xe4iv\\\\xe4n\\\:\\\p\\\\xe4iv\\\\xe4\\\\xe4\\\;break;case\\\M\\\:return s?\\\kuukauden\\\:\\\kuukausi\\\;case\\\MM\\\:rs?\\\kuukauden\\\:\\\kuukautta\\\;break;case\\\y\\\:return s?\\\vuoden\\\:\\\vuosi\\\;case\\\yy\\\:rs?\\\vuoden\\\:\\\vuotta\\\;break}return ds,r((ne)\u003C10?d?Csn:Rsn:n)+\\\ \\\+r}l.defineLocale(\\\fi\\\,{months:\\\tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\\\\xe4kuu_hein\\\\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\\\.split(\\\_\\\),monthsShort:\\\tammi_helmi_maalis_huhti_touko_kes\\\\xe4_hein\\\\xe4_elo_syys_loka_marras_joulu\\\.split(\\\_\\\),weekdays:\\\sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\\\.split(\\\_\\\),weekdaysShort:\\\su_ma_ti_ke_to_pe_la\\\.split(\\\_\\\),weekdaysMin:\\\su_ma_ti_ke_to_pe_la\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\Do MMMMta YYYY\\\,LLL:\\\Do MMMMta YYYY, klo HH.mm\\\,LLLL:\\\dddd, Do MMMMta YYYY, klo HH.mm\\\,l:\\\D.M.YYYY\\\,ll:\\\Do MMM YYYY\\\,lll:\\\Do MMM YYYY, klo HH.mm\\\,llll:\\\ddd, Do MMM YYYY, klo HH.mm\\\},calendar:{sameDay:\\\t\\\\xe4n\\\\xe4\\\\xe4n klo LT\\\,nextDay:\\\huomenna klo LT\\\,nextWeek:\\\dddd klo LT\\\,lastDay:\\\eilen klo LT\\\,lastWeek:\\\viime ddddna klo LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s p\\\\xe4\\\\xe4st\\\\xe4\\\,past:\\\%s sitten\\\,s:Is,ss:Is,m:Is,mm:Is,h:Is,hh:Is,d:Is,dd:Is,M:Is,MM:Is,y:Is,yy:Is},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\fo\\\,{months:\\\januar_februar_mars_apr\\\\xedl_mai_juni_juli_august_september_oktober_november_desember\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\\\.split(\\\_\\\),weekdays:\\\sunnudagur_m\\\\xe1nadagur_t\\\\xfdsdagur_mikudagur_h\\\\xf3sdagur_fr\\\\xedggjadagur_leygardagur\\\.split(\\\_\\\),weekdaysShort:\\\sun_m\\\\xe1n_t\\\\xfds_mik_h\\\\xf3s_fr\\\\xed_ley\\\.split(\\\_\\\),weekdaysMin:\\\su_m\\\\xe1_t\\\\xfd_mi_h\\\\xf3_fr_le\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D. MMMM, YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\xcd dag kl. LT\\\,nextDay:\\\\\\\xcd morgin kl. LT\\\,nextWeek:\\\dddd kl. LT\\\,lastDay:\\\\\\\xcd gj\\\\xe1r kl. LT\\\,lastWeek:\\\s\\\\xed\\\\xf0stu dddd kl LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\um %s\\\,past:\\\%s s\\\\xed\\\\xf0ani\\\,s:\\\f\\\\xe1 sekund\\\,ss:\\\%d sekundir\\\,m:\\\ein minuttur\\\,mm:\\\%d minuttir\\\,h:\\\ein t\\\\xedmi\\\,hh:\\\%d t\\\\xedmar\\\,d:\\\ein dagur\\\,dd:\\\%d dagar\\\,M:\\\ein m\\\\xe1na\\\\xf0ur\\\,MM:\\\%d m\\\\xe1na\\\\xf0ir\\\,y:\\\eitt \\\\xe1r\\\,yy:\\\%d \\\\xe1r\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\fr-ca\\\,{months:\\\janvier_f\\\\xe9vrier_mars_avril_mai_juin_juillet_ao\\\\xfbt_septembre_octobre_novembre_d\\\\xe9cembre\\\.split(\\\_\\\),monthsShort:\\\janv._f\\\\xe9vr._mars_avr._mai_juin_juil._ao\\\\xfbt_sept._oct._nov._d\\\\xe9c.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\\\.split(\\\_\\\),weekdaysShort:\\\dim._lun._mar._mer._jeu._ven._sam.\\\.split(\\\_\\\),weekdaysMin:\\\di_lu_ma_me_je_ve_sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Aujourd\\\\u2019hui \\\\xe0 LT\\\,nextDay:\\\Demain \\\\xe0 LT\\\,nextWeek:\\\dddd \\\\xe0 LT\\\,lastDay:\\\Hier \\\\xe0 LT\\\,lastWeek:\\\dddd dernier \\\\xe0 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dans %s\\\,past:\\\il y a %s\\\,s:\\\quelques secondes\\\,ss:\\\%d secondes\\\,m:\\\une minute\\\,mm:\\\%d minutes\\\,h:\\\une heure\\\,hh:\\\%d heures\\\,d:\\\un jour\\\,dd:\\\%d jours\\\,M:\\\un mois\\\,MM:\\\%d mois\\\,y:\\\un an\\\,yy:\\\%d ans\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\\\M\\\:case\\\Q\\\:case\\\D\\\:case\\\DDD\\\:case\\\d\\\:return e+(1e?\\\er\\\:\\\e\\\);case\\\w\\\:case\\\W\\\:return e+(1e?\\\re\\\:\\\e\\\)}}}),l.defineLocale(\\\fr-ch\\\,{months:\\\janvier_f\\\\xe9vrier_mars_avril_mai_juin_juillet_ao\\\\xfbt_septembre_octobre_novembre_d\\\\xe9cembre\\\.split(\\\_\\\),monthsShort:\\\janv._f\\\\xe9vr._mars_avr._mai_juin_juil._ao\\\\xfbt_sept._oct._nov._d\\\\xe9c.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\\\.split(\\\_\\\),weekdaysShort:\\\dim._lun._mar._mer._jeu._ven._sam.\\\.split(\\\_\\\),weekdaysMin:\\\di_lu_ma_me_je_ve_sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Aujourd\\\\u2019hui \\\\xe0 LT\\\,nextDay:\\\Demain \\\\xe0 LT\\\,nextWeek:\\\dddd \\\\xe0 LT\\\,lastDay:\\\Hier \\\\xe0 LT\\\,lastWeek:\\\dddd dernier \\\\xe0 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dans %s\\\,past:\\\il y a %s\\\,s:\\\quelques secondes\\\,ss:\\\%d secondes\\\,m:\\\une minute\\\,mm:\\\%d minutes\\\,h:\\\une heure\\\,hh:\\\%d heures\\\,d:\\\un jour\\\,dd:\\\%d jours\\\,M:\\\un mois\\\,MM:\\\%d mois\\\,y:\\\un an\\\,yy:\\\%d ans\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\\\M\\\:case\\\Q\\\:case\\\D\\\:case\\\DDD\\\:case\\\d\\\:return e+(1e?\\\er\\\:\\\e\\\);case\\\w\\\:case\\\W\\\:return e+(1e?\\\re\\\:\\\e\\\)}},week:{dow:1,doy:4}}),l.defineLocale(\\\fr\\\,{months:\\\janvier_f\\\\xe9vrier_mars_avril_mai_juin_juillet_ao\\\\xfbt_septembre_octobre_novembre_d\\\\xe9cembre\\\.split(\\\_\\\),monthsShort:\\\janv._f\\\\xe9vr._mars_avr._mai_juin_juil._ao\\\\xfbt_sept._oct._nov._d\\\\xe9c.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\\\.split(\\\_\\\),weekdaysShort:\\\dim._lun._mar._mer._jeu._ven._sam.\\\.split(\\\_\\\),weekdaysMin:\\\di_lu_ma_me_je_ve_sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Aujourd\\\\u2019hui \\\\xe0 LT\\\,nextDay:\\\Demain \\\\xe0 LT\\\,nextWeek:\\\dddd \\\\xe0 LT\\\,lastDay:\\\Hier \\\\xe0 LT\\\,lastWeek:\\\dddd dernier \\\\xe0 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dans %s\\\,past:\\\il y a %s\\\,s:\\\quelques secondes\\\,ss:\\\%d secondes\\\,m:\\\une minute\\\,mm:\\\%d minutes\\\,h:\\\une heure\\\,hh:\\\%d heures\\\,d:\\\un jour\\\,dd:\\\%d jours\\\,M:\\\un mois\\\,MM:\\\%d mois\\\,y:\\\un an\\\,yy:\\\%d ans\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case\\\D\\\:return e+(1e?\\\er\\\:\\\\\\);default:case\\\M\\\:case\\\Q\\\:case\\\DDD\\\:case\\\d\\\:return e+(1e?\\\er\\\:\\\e\\\);case\\\w\\\:case\\\W\\\:return e+(1e?\\\re\\\:\\\e\\\)}},week:{dow:1,doy:4}});var Us\\\jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.\\\.split(\\\_\\\),Gs\\\jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des\\\.split(\\\_\\\);l.defineLocale(\\\fy\\\,{months:\\\jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Gse.month():Use.month():Us},monthsParseExact:!0,weekdays:\\\snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon\\\.split(\\\_\\\),weekdaysShort:\\\si._mo._ti._wo._to._fr._so.\\\.split(\\\_\\\),weekdaysMin:\\\Si_Mo_Ti_Wo_To_Fr_So\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD-MM-YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\hjoed om LT\\\,nextDay:\\\moarn om LT\\\,nextWeek:\\\dddd om LT\\\,lastDay:\\\juster om LT\\\,lastWeek:\\\\\\\xf4fr\\\\xfbne dddd om LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\oer %s\\\,past:\\\%s lyn\\\,s:\\\in pear sekonden\\\,ss:\\\%d sekonden\\\,m:\\\ien min\\\\xfat\\\,mm:\\\%d minuten\\\,h:\\\ien oere\\\,hh:\\\%d oeren\\\,d:\\\ien dei\\\,dd:\\\%d dagen\\\,M:\\\ien moanne\\\,MM:\\\%d moannen\\\,y:\\\ien jier\\\,yy:\\\%d jierren\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1e||8e||20\u003Ce?\\\ste\\\:\\\de\\\)},week:{dow:1,doy:4}});l.defineLocale(\\\ga\\\,{months:\\\Ean\\\\xe1ir\\\,\\\Feabhra\\\,\\\M\\\\xe1rta\\\,\\\Aibre\\\\xe1n\\\,\\\Bealtaine\\\,\\\M\\\\xe9itheamh\\\,\\\I\\\\xfail\\\,\\\L\\\\xfanasa\\\,\\\Me\\\\xe1n F\\\\xf3mhair\\\,\\\Deaireadh F\\\\xf3mhair\\\,\\\Samhain\\\,\\\Nollaig\\\,monthsShort:\\\Ean\\\\xe1\\\,\\\Feab\\\,\\\M\\\\xe1rt\\\,\\\Aibr\\\,\\\Beal\\\,\\\M\\\\xe9it\\\,\\\I\\\\xfail\\\,\\\L\\\\xfana\\\,\\\Me\\\\xe1n\\\,\\\Deai\\\,\\\Samh\\\,\\\Noll\\\,monthsParseExact:!0,weekdays:\\\D\\\\xe9 Domhnaigh\\\,\\\D\\\\xe9 Luain\\\,\\\D\\\\xe9 M\\\\xe1irt\\\,\\\D\\\\xe9 C\\\\xe9adaoin\\\,\\\D\\\\xe9ardaoin\\\,\\\D\\\\xe9 hAoine\\\,\\\D\\\\xe9 Satharn\\\,weekdaysShort:\\\Dom\\\,\\\Lua\\\,\\\M\\\\xe1i\\\,\\\C\\\\xe9a\\\,\\\D\\\\xe9a\\\,\\\hAo\\\,\\\Sat\\\,weekdaysMin:\\\Do\\\,\\\Lu\\\,\\\M\\\\xe1\\\,\\\Ce\\\,\\\D\\\\xe9\\\,\\\hA\\\,\\\Sa\\\,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Inniu ag LT\\\,nextDay:\\\Am\\\\xe1rach ag LT\\\,nextWeek:\\\dddd ag LT\\\,lastDay:\\\Inn\\\\xe9 aig LT\\\,lastWeek:\\\dddd seo caite ag LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\i %s\\\,past:\\\%s \\\\xf3 shin\\\,s:\\\c\\\\xfapla soicind\\\,ss:\\\%d soicind\\\,m:\\\n\\\\xf3im\\\\xe9ad\\\,mm:\\\%d n\\\\xf3im\\\\xe9ad\\\,h:\\\uair an chloig\\\,hh:\\\%d uair an chloig\\\,d:\\\l\\\\xe1\\\,dd:\\\%d l\\\\xe1\\\,M:\\\m\\\\xed\\\,MM:\\\%d m\\\\xed\\\,y:\\\bliain\\\,yy:\\\%d bliain\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1e?\\\d\\\:e%102?\\\na\\\:\\\mh\\\)},week:{dow:1,doy:4}});function Vs(e,a,t,s){var n{s:\\\thodde secondanim\\\,\\\thodde second\\\,ss:e+\\\ secondanim\\\,e+\\\ second\\\,m:\\\eka mintan\\\,\\\ek minute\\\,mm:e+\\\ mintanim\\\,e+\\\ mintam\\\,h:\\\eka voran\\\,\\\ek vor\\\,hh:e+\\\ voranim\\\,e+\\\ voram\\\,d:\\\eka disan\\\,\\\ek dis\\\,dd:e+\\\ disanim\\\,e+\\\ dis\\\,M:\\\eka mhoinean\\\,\\\ek mhoino\\\,MM:e+\\\ mhoineanim\\\,e+\\\ mhoine\\\,y:\\\eka vorsan\\\,\\\ek voros\\\,yy:e+\\\ vorsanim\\\,e+\\\ vorsam\\\};return a?nt0:nt1}l.defineLocale(\\\gd\\\,{months:\\\Am Faoilleach\\\,\\\An Gearran\\\,\\\Am M\\\\xe0rt\\\,\\\An Giblean\\\,\\\An C\\\\xe8itean\\\,\\\An t-\\\\xd2gmhios\\\,\\\An t-Iuchar\\\,\\\An L\\\\xf9nastal\\\,\\\An t-Sultain\\\,\\\An D\\\\xe0mhair\\\,\\\An t-Samhain\\\,\\\An D\\\\xf9bhlachd\\\,monthsShort:\\\Faoi\\\,\\\Gear\\\,\\\M\\\\xe0rt\\\,\\\Gibl\\\,\\\C\\\\xe8it\\\,\\\\\\\xd2gmh\\\,\\\Iuch\\\,\\\L\\\\xf9n\\\,\\\Sult\\\,\\\D\\\\xe0mh\\\,\\\Samh\\\,\\\D\\\\xf9bh\\\,monthsParseExact:!0,weekdays:\\\Did\\\\xf2mhnaich\\\,\\\Diluain\\\,\\\Dim\\\\xe0irt\\\,\\\Diciadain\\\,\\\Diardaoin\\\,\\\Dihaoine\\\,\\\Disathairne\\\,weekdaysShort:\\\Did\\\,\\\Dil\\\,\\\Dim\\\,\\\Dic\\\,\\\Dia\\\,\\\Dih\\\,\\\Dis\\\,weekdaysMin:\\\D\\\\xf2\\\,\\\Lu\\\,\\\M\\\\xe0\\\,\\\Ci\\\,\\\Ar\\\,\\\Ha\\\,\\\Sa\\\,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\An-diugh aig LT\\\,nextDay:\\\A-m\\\\xe0ireach aig LT\\\,nextWeek:\\\dddd aig LT\\\,lastDay:\\\An-d\\\\xe8 aig LT\\\,lastWeek:\\\dddd seo chaidh aig LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\ann an %s\\\,past:\\\bho chionn %s\\\,s:\\\beagan diogan\\\,ss:\\\%d diogan\\\,m:\\\mionaid\\\,mm:\\\%d mionaidean\\\,h:\\\uair\\\,hh:\\\%d uairean\\\,d:\\\latha\\\,dd:\\\%d latha\\\,M:\\\m\\\\xecos\\\,MM:\\\%d m\\\\xecosan\\\,y:\\\bliadhna\\\,yy:\\\%d bliadhna\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1e?\\\d\\\:e%102?\\\na\\\:\\\mh\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\gl\\\,{months:\\\xaneiro_febreiro_marzo_abril_maio_xu\\\\xf1o_xullo_agosto_setembro_outubro_novembro_decembro\\\.split(\\\_\\\),monthsShort:\\\xan._feb._mar._abr._mai._xu\\\\xf1._xul._ago._set._out._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\domingo_luns_martes_m\\\\xe9rcores_xoves_venres_s\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\dom._lun._mar._m\\\\xe9r._xov._ven._s\\\\xe1b.\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_m\\\\xe9_xo_ve_s\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY H:mm\\\,LLLL:\\\dddd, D de MMMM de YYYY H:mm\\\},calendar:{sameDay:function(){return\\\hoxe \\\+(1!this.hours()?\\\\\\\xe1s\\\:\\\\\\\xe1\\\)+\\\ LT\\\},nextDay:function(){return\\\ma\\\\xf1\\\\xe1 \\\+(1!this.hours()?\\\\\\\xe1s\\\:\\\\\\\xe1\\\)+\\\ LT\\\},nextWeek:function(){return\\\dddd \\\+(1!this.hours()?\\\\\\\xe1s\\\:\\\a\\\)+\\\ LT\\\},lastDay:function(){return\\\onte \\\+(1!this.hours()?\\\\\\\xe1\\\:\\\a\\\)+\\\ LT\\\},lastWeek:function(){return\\\o dddd pasado \\\+(1!this.hours()?\\\\\\\xe1s\\\:\\\a\\\)+\\\ LT\\\},sameElse:\\\L\\\},relativeTime:{future:function(e){return 0e.indexOf(\\\un\\\)?\\\n\\\+e:\\\en \\\+e},past:\\\hai %s\\\,s:\\\uns segundos\\\,ss:\\\%d segundos\\\,m:\\\un minuto\\\,mm:\\\%d minutos\\\,h:\\\unha hora\\\,hh:\\\%d horas\\\,d:\\\un d\\\\xeda\\\,dd:\\\%d d\\\\xedas\\\,M:\\\un mes\\\,MM:\\\%d meses\\\,y:\\\un ano\\\,yy:\\\%d anos\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\gom-latn\\\,{months:\\\Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr\\\.split(\\\_\\\),monthsShort:\\\Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Sonvar\\\.split(\\\_\\\),weekdaysShort:\\\Ait._Som._Mon._Bud._Bre._Suk._Son.\\\.split(\\\_\\\),weekdaysMin:\\\Ai_Sm_Mo_Bu_Br_Su_Sn\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\A h:mm vazta\\\,LTS:\\\A h:mm:ss vazta\\\,L:\\\DD-MM-YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY A h:mm vazta\\\,LLLL:\\\dddd, MMMMachea Do, YYYY, A h:mm vazta\\\,llll:\\\ddd, D MMM YYYY, A h:mm vazta\\\},calendar:{sameDay:\\\Aiz LT\\\,nextDay:\\\Faleam LT\\\,nextWeek:\\\Ieta to dddd, LT\\\,lastDay:\\\Kal LT\\\,lastWeek:\\\Fatlo dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s\\\,past:\\\%s adim\\\,s:Vs,ss:Vs,m:Vs,mm:Vs,h:Vs,hh:Vs,d:Vs,dd:Vs,M:Vs,MM:Vs,y:Vs,yy:Vs},dayOfMonthOrdinalParse:/\\\\d{1,2}(er)/,ordinal:function(e,a){switch(a){case\\\D\\\:return e+\\\er\\\;default:case\\\M\\\:case\\\Q\\\:case\\\DDD\\\:case\\\d\\\:case\\\w\\\:case\\\W\\\:return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,a){return 12e&&(e0),\\\rati\\\a?e\u003C4?e:e+12:\\\sokalli\\\a?e:\\\donparam\\\a?12\u003Ce?e:e+12:\\\sanje\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\rati\\\:e\u003C12?\\\sokalli\\\:e\u003C16?\\\donparam\\\:e\u003C20?\\\sanje\\\:\\\rati\\\}});var Ks{1:\\\\\\\u0ae7\\\,2:\\\\\\\u0ae8\\\,3:\\\\\\\u0ae9\\\,4:\\\\\\\u0aea\\\,5:\\\\\\\u0aeb\\\,6:\\\\\\\u0aec\\\,7:\\\\\\\u0aed\\\,8:\\\\\\\u0aee\\\,9:\\\\\\\u0aef\\\,0:\\\\\\\u0ae6\\\},Zs{\\\\\\\u0ae7\\\:\\\1\\\,\\\\\\\u0ae8\\\:\\\2\\\,\\\\\\\u0ae9\\\:\\\3\\\,\\\\\\\u0aea\\\:\\\4\\\,\\\\\\\u0aeb\\\:\\\5\\\,\\\\\\\u0aec\\\:\\\6\\\,\\\\\\\u0aed\\\:\\\7\\\,\\\\\\\u0aee\\\:\\\8\\\,\\\\\\\u0aef\\\:\\\9\\\,\\\\\\\u0ae6\\\:\\\0\\\};l.defineLocale(\\\gu\\\,{months:\\\\\\\u0a9c\\\\u0abe\\\\u0aa8\\\\u0acd\\\\u0aaf\\\\u0ac1\\\\u0a86\\\\u0ab0\\\\u0ac0_\\\\u0aab\\\\u0ac7\\\\u0aac\\\\u0acd\\\\u0ab0\\\\u0ac1\\\\u0a86\\\\u0ab0\\\\u0ac0_\\\\u0aae\\\\u0abe\\\\u0ab0\\\\u0acd\\\\u0a9a_\\\\u0a8f\\\\u0aaa\\\\u0acd\\\\u0ab0\\\\u0abf\\\\u0ab2_\\\\u0aae\\\\u0ac7_\\\\u0a9c\\\\u0ac2\\\\u0aa8_\\\\u0a9c\\\\u0ac1\\\\u0ab2\\\\u0abe\\\\u0a88_\\\\u0a91\\\\u0a97\\\\u0ab8\\\\u0acd\\\\u0a9f_\\\\u0ab8\\\\u0aaa\\\\u0acd\\\\u0a9f\\\\u0ac7\\\\u0aae\\\\u0acd\\\\u0aac\\\\u0ab0_\\\\u0a91\\\\u0a95\\\\u0acd\\\\u0a9f\\\\u0acd\\\\u0aac\\\\u0ab0_\\\\u0aa8\\\\u0ab5\\\\u0ac7\\\\u0aae\\\\u0acd\\\\u0aac\\\\u0ab0_\\\\u0aa1\\\\u0abf\\\\u0ab8\\\\u0ac7\\\\u0aae\\\\u0acd\\\\u0aac\\\\u0ab0\\\.split(\\\_\\\),monthsShort:\\\\\\\u0a9c\\\\u0abe\\\\u0aa8\\\\u0acd\\\\u0aaf\\\\u0ac1._\\\\u0aab\\\\u0ac7\\\\u0aac\\\\u0acd\\\\u0ab0\\\\u0ac1._\\\\u0aae\\\\u0abe\\\\u0ab0\\\\u0acd\\\\u0a9a_\\\\u0a8f\\\\u0aaa\\\\u0acd\\\\u0ab0\\\\u0abf._\\\\u0aae\\\\u0ac7_\\\\u0a9c\\\\u0ac2\\\\u0aa8_\\\\u0a9c\\\\u0ac1\\\\u0ab2\\\\u0abe._\\\\u0a91\\\\u0a97._\\\\u0ab8\\\\u0aaa\\\\u0acd\\\\u0a9f\\\\u0ac7._\\\\u0a91\\\\u0a95\\\\u0acd\\\\u0a9f\\\\u0acd._\\\\u0aa8\\\\u0ab5\\\\u0ac7._\\\\u0aa1\\\\u0abf\\\\u0ab8\\\\u0ac7.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0ab0\\\\u0ab5\\\\u0abf\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0ab8\\\\u0acb\\\\u0aae\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0aae\\\\u0a82\\\\u0a97\\\\u0ab3\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0aac\\\\u0ac1\\\\u0aa7\\\\u0acd\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0a97\\\\u0ac1\\\\u0ab0\\\\u0ac1\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0ab6\\\\u0ac1\\\\u0a95\\\\u0acd\\\\u0ab0\\\\u0ab5\\\\u0abe\\\\u0ab0_\\\\u0ab6\\\\u0aa8\\\\u0abf\\\\u0ab5\\\\u0abe\\\\u0ab0\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0ab0\\\\u0ab5\\\\u0abf_\\\\u0ab8\\\\u0acb\\\\u0aae_\\\\u0aae\\\\u0a82\\\\u0a97\\\\u0ab3_\\\\u0aac\\\\u0ac1\\\\u0aa7\\\\u0acd_\\\\u0a97\\\\u0ac1\\\\u0ab0\\\\u0ac1_\\\\u0ab6\\\\u0ac1\\\\u0a95\\\\u0acd\\\\u0ab0_\\\\u0ab6\\\\u0aa8\\\\u0abf\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0ab0_\\\\u0ab8\\\\u0acb_\\\\u0aae\\\\u0a82_\\\\u0aac\\\\u0ac1_\\\\u0a97\\\\u0ac1_\\\\u0ab6\\\\u0ac1_\\\\u0ab6\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm \\\\u0ab5\\\\u0abe\\\\u0a97\\\\u0acd\\\\u0aaf\\\\u0ac7\\\,LTS:\\\A h:mm:ss \\\\u0ab5\\\\u0abe\\\\u0a97\\\\u0acd\\\\u0aaf\\\\u0ac7\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm \\\\u0ab5\\\\u0abe\\\\u0a97\\\\u0acd\\\\u0aaf\\\\u0ac7\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm \\\\u0ab5\\\\u0abe\\\\u0a97\\\\u0acd\\\\u0aaf\\\\u0ac7\\\},calendar:{sameDay:\\\\\\\u0a86\\\\u0a9c LT\\\,nextDay:\\\\\\\u0a95\\\\u0abe\\\\u0ab2\\\\u0ac7 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0a97\\\\u0a87\\\\u0a95\\\\u0abe\\\\u0ab2\\\\u0ac7 LT\\\,lastWeek:\\\\\\\u0aaa\\\\u0abe\\\\u0a9b\\\\u0ab2\\\\u0abe dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0aae\\\\u0abe\\\,past:\\\%s \\\\u0aaa\\\\u0ac7\\\\u0ab9\\\\u0ab2\\\\u0abe\\\,s:\\\\\\\u0a85\\\\u0aae\\\\u0ac1\\\\u0a95 \\\\u0aaa\\\\u0ab3\\\\u0acb\\\,ss:\\\%d \\\\u0ab8\\\\u0ac7\\\\u0a95\\\\u0a82\\\\u0aa1\\\,m:\\\\\\\u0a8f\\\\u0a95 \\\\u0aae\\\\u0abf\\\\u0aa8\\\\u0abf\\\\u0a9f\\\,mm:\\\%d \\\\u0aae\\\\u0abf\\\\u0aa8\\\\u0abf\\\\u0a9f\\\,h:\\\\\\\u0a8f\\\\u0a95 \\\\u0a95\\\\u0ab2\\\\u0abe\\\\u0a95\\\,hh:\\\%d \\\\u0a95\\\\u0ab2\\\\u0abe\\\\u0a95\\\,d:\\\\\\\u0a8f\\\\u0a95 \\\\u0aa6\\\\u0abf\\\\u0ab5\\\\u0ab8\\\,dd:\\\%d \\\\u0aa6\\\\u0abf\\\\u0ab5\\\\u0ab8\\\,M:\\\\\\\u0a8f\\\\u0a95 \\\\u0aae\\\\u0ab9\\\\u0abf\\\\u0aa8\\\\u0acb\\\,MM:\\\%d \\\\u0aae\\\\u0ab9\\\\u0abf\\\\u0aa8\\\\u0acb\\\,y:\\\\\\\u0a8f\\\\u0a95 \\\\u0ab5\\\\u0ab0\\\\u0acd\\\\u0ab7\\\,yy:\\\%d \\\\u0ab5\\\\u0ab0\\\\u0acd\\\\u0ab7\\\},preparse:function(e){return e.replace(/\\\\u0ae7\\\\u0ae8\\\\u0ae9\\\\u0aea\\\\u0aeb\\\\u0aec\\\\u0aed\\\\u0aee\\\\u0aef\\\\u0ae6/g,function(e){return Zse})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return Kse})},meridiemParse:/\\\\u0ab0\\\\u0abe\\\\u0aa4|\\\\u0aac\\\\u0aaa\\\\u0acb\\\\u0ab0|\\\\u0ab8\\\\u0ab5\\\\u0abe\\\\u0ab0|\\\\u0ab8\\\\u0abe\\\\u0a82\\\\u0a9c/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0ab0\\\\u0abe\\\\u0aa4\\\a?e\u003C4?e:e+12:\\\\\\\u0ab8\\\\u0ab5\\\\u0abe\\\\u0ab0\\\a?e:\\\\\\\u0aac\\\\u0aaa\\\\u0acb\\\\u0ab0\\\a?10\u003Ce?e:e+12:\\\\\\\u0ab8\\\\u0abe\\\\u0a82\\\\u0a9c\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0ab0\\\\u0abe\\\\u0aa4\\\:e\u003C10?\\\\\\\u0ab8\\\\u0ab5\\\\u0abe\\\\u0ab0\\\:e\u003C17?\\\\\\\u0aac\\\\u0aaa\\\\u0acb\\\\u0ab0\\\:e\u003C20?\\\\\\\u0ab8\\\\u0abe\\\\u0a82\\\\u0a9c\\\:\\\\\\\u0ab0\\\\u0abe\\\\u0aa4\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\he\\\,{months:\\\\\\\u05d9\\\\u05e0\\\\u05d5\\\\u05d0\\\\u05e8_\\\\u05e4\\\\u05d1\\\\u05e8\\\\u05d5\\\\u05d0\\\\u05e8_\\\\u05de\\\\u05e8\\\\u05e5_\\\\u05d0\\\\u05e4\\\\u05e8\\\\u05d9\\\\u05dc_\\\\u05de\\\\u05d0\\\\u05d9_\\\\u05d9\\\\u05d5\\\\u05e0\\\\u05d9_\\\\u05d9\\\\u05d5\\\\u05dc\\\\u05d9_\\\\u05d0\\\\u05d5\\\\u05d2\\\\u05d5\\\\u05e1\\\\u05d8_\\\\u05e1\\\\u05e4\\\\u05d8\\\\u05de\\\\u05d1\\\\u05e8_\\\\u05d0\\\\u05d5\\\\u05e7\\\\u05d8\\\\u05d5\\\\u05d1\\\\u05e8_\\\\u05e0\\\\u05d5\\\\u05d1\\\\u05de\\\\u05d1\\\\u05e8_\\\\u05d3\\\\u05e6\\\\u05de\\\\u05d1\\\\u05e8\\\.split(\\\_\\\),monthsShort:\\\\\\\u05d9\\\\u05e0\\\\u05d5\\\\u05f3_\\\\u05e4\\\\u05d1\\\\u05e8\\\\u05f3_\\\\u05de\\\\u05e8\\\\u05e5_\\\\u05d0\\\\u05e4\\\\u05e8\\\\u05f3_\\\\u05de\\\\u05d0\\\\u05d9_\\\\u05d9\\\\u05d5\\\\u05e0\\\\u05d9_\\\\u05d9\\\\u05d5\\\\u05dc\\\\u05d9_\\\\u05d0\\\\u05d5\\\\u05d2\\\\u05f3_\\\\u05e1\\\\u05e4\\\\u05d8\\\\u05f3_\\\\u05d0\\\\u05d5\\\\u05e7\\\\u05f3_\\\\u05e0\\\\u05d5\\\\u05d1\\\\u05f3_\\\\u05d3\\\\u05e6\\\\u05de\\\\u05f3\\\.split(\\\_\\\),weekdays:\\\\\\\u05e8\\\\u05d0\\\\u05e9\\\\u05d5\\\\u05df_\\\\u05e9\\\\u05e0\\\\u05d9_\\\\u05e9\\\\u05dc\\\\u05d9\\\\u05e9\\\\u05d9_\\\\u05e8\\\\u05d1\\\\u05d9\\\\u05e2\\\\u05d9_\\\\u05d7\\\\u05de\\\\u05d9\\\\u05e9\\\\u05d9_\\\\u05e9\\\\u05d9\\\\u05e9\\\\u05d9_\\\\u05e9\\\\u05d1\\\\u05ea\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u05d0\\\\u05f3_\\\\u05d1\\\\u05f3_\\\\u05d2\\\\u05f3_\\\\u05d3\\\\u05f3_\\\\u05d4\\\\u05f3_\\\\u05d5\\\\u05f3_\\\\u05e9\\\\u05f3\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u05d0_\\\\u05d1_\\\\u05d2_\\\\u05d3_\\\\u05d4_\\\\u05d5_\\\\u05e9\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D \\\\u05d1MMMM YYYY\\\,LLL:\\\D \\\\u05d1MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D \\\\u05d1MMMM YYYY HH:mm\\\,l:\\\D/M/YYYY\\\,ll:\\\D MMM YYYY\\\,lll:\\\D MMM YYYY HH:mm\\\,llll:\\\ddd, D MMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u05d4\\\\u05d9\\\\u05d5\\\\u05dd \\\\u05d1\\\\u05beLT\\\,nextDay:\\\\\\\u05de\\\\u05d7\\\\u05e8 \\\\u05d1\\\\u05beLT\\\,nextWeek:\\\dddd \\\\u05d1\\\\u05e9\\\\u05e2\\\\u05d4 LT\\\,lastDay:\\\\\\\u05d0\\\\u05ea\\\\u05de\\\\u05d5\\\\u05dc \\\\u05d1\\\\u05beLT\\\,lastWeek:\\\\\\\u05d1\\\\u05d9\\\\u05d5\\\\u05dd dddd \\\\u05d4\\\\u05d0\\\\u05d7\\\\u05e8\\\\u05d5\\\\u05df \\\\u05d1\\\\u05e9\\\\u05e2\\\\u05d4 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u05d1\\\\u05e2\\\\u05d5\\\\u05d3 %s\\\,past:\\\\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d9 %s\\\,s:\\\\\\\u05de\\\\u05e1\\\\u05e4\\\\u05e8 \\\\u05e9\\\\u05e0\\\\u05d9\\\\u05d5\\\\u05ea\\\,ss:\\\%d \\\\u05e9\\\\u05e0\\\\u05d9\\\\u05d5\\\\u05ea\\\,m:\\\\\\\u05d3\\\\u05e7\\\\u05d4\\\,mm:\\\%d \\\\u05d3\\\\u05e7\\\\u05d5\\\\u05ea\\\,h:\\\\\\\u05e9\\\\u05e2\\\\u05d4\\\,hh:function(e){return 2e?\\\\\\\u05e9\\\\u05e2\\\\u05ea\\\\u05d9\\\\u05d9\\\\u05dd\\\:e+\\\ \\\\u05e9\\\\u05e2\\\\u05d5\\\\u05ea\\\},d:\\\\\\\u05d9\\\\u05d5\\\\u05dd\\\,dd:function(e){return 2e?\\\\\\\u05d9\\\\u05d5\\\\u05de\\\\u05d9\\\\u05d9\\\\u05dd\\\:e+\\\ \\\\u05d9\\\\u05de\\\\u05d9\\\\u05dd\\\},M:\\\\\\\u05d7\\\\u05d5\\\\u05d3\\\\u05e9\\\,MM:function(e){return 2e?\\\\\\\u05d7\\\\u05d5\\\\u05d3\\\\u05e9\\\\u05d9\\\\u05d9\\\\u05dd\\\:e+\\\ \\\\u05d7\\\\u05d5\\\\u05d3\\\\u05e9\\\\u05d9\\\\u05dd\\\},y:\\\\\\\u05e9\\\\u05e0\\\\u05d4\\\,yy:function(e){return 2e?\\\\\\\u05e9\\\\u05e0\\\\u05ea\\\\u05d9\\\\u05d9\\\\u05dd\\\:e%100&&10!e?e+\\\ \\\\u05e9\\\\u05e0\\\\u05d4\\\:e+\\\ \\\\u05e9\\\\u05e0\\\\u05d9\\\\u05dd\\\}},meridiemParse:/\\\\u05d0\\\\u05d7\\\\u05d4\\\\\\\u05e6|\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d4\\\\\\\u05e6|\\\\u05d0\\\\u05d7\\\\u05e8\\\\u05d9 \\\\u05d4\\\\u05e6\\\\u05d4\\\\u05e8\\\\u05d9\\\\u05d9\\\\u05dd|\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d9 \\\\u05d4\\\\u05e6\\\\u05d4\\\\u05e8\\\\u05d9\\\\u05d9\\\\u05dd|\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d5\\\\u05ea \\\\u05d1\\\\u05d5\\\\u05e7\\\\u05e8|\\\\u05d1\\\\u05d1\\\\u05d5\\\\u05e7\\\\u05e8|\\\\u05d1\\\\u05e2\\\\u05e8\\\\u05d1/i,isPM:function(e){return/^(\\\\u05d0\\\\u05d7\\\\u05d4\\\\\\\u05e6|\\\\u05d0\\\\u05d7\\\\u05e8\\\\u05d9 \\\\u05d4\\\\u05e6\\\\u05d4\\\\u05e8\\\\u05d9\\\\u05d9\\\\u05dd|\\\\u05d1\\\\u05e2\\\\u05e8\\\\u05d1)$/.test(e)},meridiem:function(e,a,t){return e\u003C5?\\\\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d5\\\\u05ea \\\\u05d1\\\\u05d5\\\\u05e7\\\\u05e8\\\:e\u003C10?\\\\\\\u05d1\\\\u05d1\\\\u05d5\\\\u05e7\\\\u05e8\\\:e\u003C12?t?\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d4\\\\\\\u05e6:\\\\\\\u05dc\\\\u05e4\\\\u05e0\\\\u05d9 \\\\u05d4\\\\u05e6\\\\u05d4\\\\u05e8\\\\u05d9\\\\u05d9\\\\u05dd\\\:e\u003C18?t?\\\\u05d0\\\\u05d7\\\\u05d4\\\\\\\u05e6:\\\\\\\u05d0\\\\u05d7\\\\u05e8\\\\u05d9 \\\\u05d4\\\\u05e6\\\\u05d4\\\\u05e8\\\\u05d9\\\\u05d9\\\\u05dd\\\:\\\\\\\u05d1\\\\u05e2\\\\u05e8\\\\u05d1\\\}});var $s{1:\\\\\\\u0967\\\,2:\\\\\\\u0968\\\,3:\\\\\\\u0969\\\,4:\\\\\\\u096a\\\,5:\\\\\\\u096b\\\,6:\\\\\\\u096c\\\,7:\\\\\\\u096d\\\,8:\\\\\\\u096e\\\,9:\\\\\\\u096f\\\,0:\\\\\\\u0966\\\},Bs{\\\\\\\u0967\\\:\\\1\\\,\\\\\\\u0968\\\:\\\2\\\,\\\\\\\u0969\\\:\\\3\\\,\\\\\\\u096a\\\:\\\4\\\,\\\\\\\u096b\\\:\\\5\\\,\\\\\\\u096c\\\:\\\6\\\,\\\\\\\u096d\\\:\\\7\\\,\\\\\\\u096e\\\:\\\8\\\,\\\\\\\u096f\\\:\\\9\\\,\\\\\\\u0966\\\:\\\0\\\};function qs(e,a,t){var se+\\\ \\\;switch(t){case\\\ss\\\:return s+1e?\\\sekunda\\\:2e||3e||4e?\\\sekunde\\\:\\\sekundi\\\;case\\\m\\\:return a?\\\jedna minuta\\\:\\\jedne minute\\\;case\\\mm\\\:return s+1e?\\\minuta\\\:2e||3e||4e?\\\minute\\\:\\\minuta\\\;case\\\h\\\:return a?\\\jedan sat\\\:\\\jednog sata\\\;case\\\hh\\\:return s+1e?\\\sat\\\:2e||3e||4e?\\\sata\\\:\\\sati\\\;case\\\dd\\\:return s+1e?\\\dan\\\:\\\dana\\\;case\\\MM\\\:return s+1e?\\\mjesec\\\:2e||3e||4e?\\\mjeseca\\\:\\\mjeseci\\\;case\\\yy\\\:return s+1e?\\\godina\\\:2e||3e||4e?\\\godine\\\:\\\godina\\\}}l.defineLocale(\\\hi\\\,{months:\\\\\\\u091c\\\\u0928\\\\u0935\\\\u0930\\\\u0940_\\\\u092b\\\\u093c\\\\u0930\\\\u0935\\\\u0930\\\\u0940_\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a_\\\\u0905\\\\u092a\\\\u094d\\\\u0930\\\\u0948\\\\u0932_\\\\u092e\\\\u0908_\\\\u091c\\\\u0942\\\\u0928_\\\\u091c\\\\u0941\\\\u0932\\\\u093e\\\\u0908_\\\\u0905\\\\u0917\\\\u0938\\\\u094d\\\\u0924_\\\\u0938\\\\u093f\\\\u0924\\\\u092e\\\\u094d\\\\u092c\\\\u0930_\\\\u0905\\\\u0915\\\\u094d\\\\u091f\\\\u0942\\\\u092c\\\\u0930_\\\\u0928\\\\u0935\\\\u092e\\\\u094d\\\\u092c\\\\u0930_\\\\u0926\\\\u093f\\\\u0938\\\\u092e\\\\u094d\\\\u092c\\\\u0930\\\.split(\\\_\\\),monthsShort:\\\\\\\u091c\\\\u0928._\\\\u092b\\\\u093c\\\\u0930._\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a_\\\\u0905\\\\u092a\\\\u094d\\\\u0930\\\\u0948._\\\\u092e\\\\u0908_\\\\u091c\\\\u0942\\\\u0928_\\\\u091c\\\\u0941\\\\u0932._\\\\u0905\\\\u0917._\\\\u0938\\\\u093f\\\\u0924._\\\\u0905\\\\u0915\\\\u094d\\\\u091f\\\\u0942._\\\\u0928\\\\u0935._\\\\u0926\\\\u093f\\\\u0938.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0930\\\\u0935\\\\u093f\\\\u0935\\\\u093e\\\\u0930_\\\\u0938\\\\u094b\\\\u092e\\\\u0935\\\\u093e\\\\u0930_\\\\u092e\\\\u0902\\\\u0917\\\\u0932\\\\u0935\\\\u093e\\\\u0930_\\\\u092c\\\\u0941\\\\u0927\\\\u0935\\\\u093e\\\\u0930_\\\\u0917\\\\u0941\\\\u0930\\\\u0942\\\\u0935\\\\u093e\\\\u0930_\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930\\\\u0935\\\\u093e\\\\u0930_\\\\u0936\\\\u0928\\\\u093f\\\\u0935\\\\u093e\\\\u0930\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0930\\\\u0935\\\\u093f_\\\\u0938\\\\u094b\\\\u092e_\\\\u092e\\\\u0902\\\\u0917\\\\u0932_\\\\u092c\\\\u0941\\\\u0927_\\\\u0917\\\\u0941\\\\u0930\\\\u0942_\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930_\\\\u0936\\\\u0928\\\\u093f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0930_\\\\u0938\\\\u094b_\\\\u092e\\\\u0902_\\\\u092c\\\\u0941_\\\\u0917\\\\u0941_\\\\u0936\\\\u0941_\\\\u0936\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm \\\\u092c\\\\u091c\\\\u0947\\\,LTS:\\\A h:mm:ss \\\\u092c\\\\u091c\\\\u0947\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm \\\\u092c\\\\u091c\\\\u0947\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm \\\\u092c\\\\u091c\\\\u0947\\\},calendar:{sameDay:\\\\\\\u0906\\\\u091c LT\\\,nextDay:\\\\\\\u0915\\\\u0932 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0915\\\\u0932 LT\\\,lastWeek:\\\\\\\u092a\\\\u093f\\\\u091b\\\\u0932\\\\u0947 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u092e\\\\u0947\\\\u0902\\\,past:\\\%s \\\\u092a\\\\u0939\\\\u0932\\\\u0947\\\,s:\\\\\\\u0915\\\\u0941\\\\u091b \\\\u0939\\\\u0940 \\\\u0915\\\\u094d\\\\u0937\\\\u0923\\\,ss:\\\%d \\\\u0938\\\\u0947\\\\u0915\\\\u0902\\\\u0921\\\,m:\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u093f\\\\u0928\\\\u091f\\\,mm:\\\%d \\\\u092e\\\\u093f\\\\u0928\\\\u091f\\\,h:\\\\\\\u090f\\\\u0915 \\\\u0918\\\\u0902\\\\u091f\\\\u093e\\\,hh:\\\%d \\\\u0918\\\\u0902\\\\u091f\\\\u0947\\\,d:\\\\\\\u090f\\\\u0915 \\\\u0926\\\\u093f\\\\u0928\\\,dd:\\\%d \\\\u0926\\\\u093f\\\\u0928\\\,M:\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u0939\\\\u0940\\\\u0928\\\\u0947\\\,MM:\\\%d \\\\u092e\\\\u0939\\\\u0940\\\\u0928\\\\u0947\\\,y:\\\\\\\u090f\\\\u0915 \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\,yy:\\\%d \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\},preparse:function(e){return e.replace(/\\\\u0967\\\\u0968\\\\u0969\\\\u096a\\\\u096b\\\\u096c\\\\u096d\\\\u096e\\\\u096f\\\\u0966/g,function(e){return Bse})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return $se})},meridiemParse:/\\\\u0930\\\\u093e\\\\u0924|\\\\u0938\\\\u0941\\\\u092c\\\\u0939|\\\\u0926\\\\u094b\\\\u092a\\\\u0939\\\\u0930|\\\\u0936\\\\u093e\\\\u092e/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0930\\\\u093e\\\\u0924\\\a?e\u003C4?e:e+12:\\\\\\\u0938\\\\u0941\\\\u092c\\\\u0939\\\a?e:\\\\\\\u0926\\\\u094b\\\\u092a\\\\u0939\\\\u0930\\\a?10\u003Ce?e:e+12:\\\\\\\u0936\\\\u093e\\\\u092e\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0930\\\\u093e\\\\u0924\\\:e\u003C10?\\\\\\\u0938\\\\u0941\\\\u092c\\\\u0939\\\:e\u003C17?\\\\\\\u0926\\\\u094b\\\\u092a\\\\u0939\\\\u0930\\\:e\u003C20?\\\\\\\u0936\\\\u093e\\\\u092e\\\:\\\\\\\u0930\\\\u093e\\\\u0924\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\hr\\\,{months:{format:\\\sije\\\\u010dnja_velja\\\\u010de_o\\\\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\\\.split(\\\_\\\),standalone:\\\sije\\\\u010danj_velja\\\\u010da_o\\\\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\\\.split(\\\_\\\)},monthsShort:\\\sij._velj._o\\\\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\nedjelja_ponedjeljak_utorak_srijeda_\\\\u010detvrtak_petak_subota\\\.split(\\\_\\\),weekdaysShort:\\\ned._pon._uto._sri._\\\\u010det._pet._sub.\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_ut_sr_\\\\u010de_pe_su\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\danas u LT\\\,nextDay:\\\sutra u LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\u nedjelju u LT\\\;case 3:return\\\u srijedu u LT\\\;case 6:return\\\u subotu u LT\\\;case 1:case 2:case 4:case 5:return\\\u dddd u LT\\\}},lastDay:\\\ju\\\\u010der u LT\\\,lastWeek:function(){switch(this.day()){case 0:case 3:return\\\pro\\\\u0161lu dddd u LT\\\;case 6:return\\\pro\\\\u0161le subote u LT\\\;case 1:case 2:case 4:case 5:return\\\pro\\\\u0161li dddd u LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\prije %s\\\,s:\\\par sekundi\\\,ss:qs,m:qs,mm:qs,h:qs,hh:qs,d:\\\dan\\\,dd:qs,M:\\\mjesec\\\,MM:qs,y:\\\godinu\\\,yy:qs},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}});var Qs\\\vas\\\\xe1rnap h\\\\xe9tf\\\\u0151n kedden szerd\\\\xe1n cs\\\\xfct\\\\xf6rt\\\\xf6k\\\\xf6n p\\\\xe9nteken szombaton\\\.split(\\\ \\\);function Xs(e,a,t,s){var ne;switch(t){case\\\s\\\:return s||a?\\\n\\\\xe9h\\\\xe1ny m\\\\xe1sodperc\\\:\\\n\\\\xe9h\\\\xe1ny m\\\\xe1sodperce\\\;case\\\ss\\\:return n+(s||a)?\\\ m\\\\xe1sodperc\\\:\\\ m\\\\xe1sodperce\\\;case\\\m\\\:return\\\egy\\\+(s||a?\\\ perc\\\:\\\ perce\\\);case\\\mm\\\:return n+(s||a?\\\ perc\\\:\\\ perce\\\);case\\\h\\\:return\\\egy\\\+(s||a?\\\ \\\\xf3ra\\\:\\\ \\\\xf3r\\\\xe1ja\\\);case\\\hh\\\:return n+(s||a?\\\ \\\\xf3ra\\\:\\\ \\\\xf3r\\\\xe1ja\\\);case\\\d\\\:return\\\egy\\\+(s||a?\\\ nap\\\:\\\ napja\\\);case\\\dd\\\:return n+(s||a?\\\ nap\\\:\\\ napja\\\);case\\\M\\\:return\\\egy\\\+(s||a?\\\ h\\\\xf3nap\\\:\\\ h\\\\xf3napja\\\);case\\\MM\\\:return n+(s||a?\\\ h\\\\xf3nap\\\:\\\ h\\\\xf3napja\\\);case\\\y\\\:return\\\egy\\\+(s||a?\\\ \\\\xe9v\\\:\\\ \\\\xe9ve\\\);case\\\yy\\\:return n+(s||a?\\\ \\\\xe9v\\\:\\\ \\\\xe9ve\\\)}return\\\\\\}function en(e){return(e?\\\\\\:\\\m\\\\xfalt \\\)+\\\\\\+Qsthis.day()+\\\ LT-kor\\\}function an(e){return e%10011||e%10!1}function tn(e,a,t,s){var ne+\\\ \\\;switch(t){case\\\s\\\:return a||s?\\\nokkrar sek\\\\xfandur\\\:\\\nokkrum sek\\\\xfandum\\\;case\\\ss\\\:return an(e)?n+(a||s?\\\sek\\\\xfandur\\\:\\\sek\\\\xfandum\\\):n+\\\sek\\\\xfanda\\\;case\\\m\\\:return a?\\\m\\\\xedn\\\\xfata\\\:\\\m\\\\xedn\\\\xfatu\\\;case\\\mm\\\:return an(e)?n+(a||s?\\\m\\\\xedn\\\\xfatur\\\:\\\m\\\\xedn\\\\xfatum\\\):a?n+\\\m\\\\xedn\\\\xfata\\\:n+\\\m\\\\xedn\\\\xfatu\\\;case\\\hh\\\:return an(e)?n+(a||s?\\\klukkustundir\\\:\\\klukkustundum\\\):n+\\\klukkustund\\\;case\\\d\\\:return a?\\\dagur\\\:s?\\\dag\\\:\\\degi\\\;case\\\dd\\\:return an(e)?a?n+\\\dagar\\\:n+(s?\\\daga\\\:\\\d\\\\xf6gum\\\):a?n+\\\dagur\\\:n+(s?\\\dag\\\:\\\degi\\\);case\\\M\\\:return a?\\\m\\\\xe1nu\\\\xf0ur\\\:s?\\\m\\\\xe1nu\\\\xf0\\\:\\\m\\\\xe1nu\\\\xf0i\\\;case\\\MM\\\:return an(e)?a?n+\\\m\\\\xe1nu\\\\xf0ir\\\:n+(s?\\\m\\\\xe1nu\\\\xf0i\\\:\\\m\\\\xe1nu\\\\xf0um\\\):a?n+\\\m\\\\xe1nu\\\\xf0ur\\\:n+(s?\\\m\\\\xe1nu\\\\xf0\\\:\\\m\\\\xe1nu\\\\xf0i\\\);case\\\y\\\:return a||s?\\\\\\\xe1r\\\:\\\\\\\xe1ri\\\;case\\\yy\\\:return an(e)?n+(a||s?\\\\\\\xe1r\\\:\\\\\\\xe1rum\\\):n+(a||s?\\\\\\\xe1r\\\:\\\\\\\xe1ri\\\)}}l.defineLocale(\\\hu\\\,{months:\\\janu\\\\xe1r_febru\\\\xe1r_m\\\\xe1rcius_\\\\xe1prilis_m\\\\xe1jus_j\\\\xfanius_j\\\\xfalius_augusztus_szeptember_okt\\\\xf3ber_november_december\\\.split(\\\_\\\),monthsShort:\\\jan_feb_m\\\\xe1rc_\\\\xe1pr_m\\\\xe1j_j\\\\xfan_j\\\\xfal_aug_szept_okt_nov_dec\\\.split(\\\_\\\),weekdays:\\\vas\\\\xe1rnap_h\\\\xe9tf\\\\u0151_kedd_szerda_cs\\\\xfct\\\\xf6rt\\\\xf6k_p\\\\xe9ntek_szombat\\\.split(\\\_\\\),weekdaysShort:\\\vas_h\\\\xe9t_kedd_sze_cs\\\\xfct_p\\\\xe9n_szo\\\.split(\\\_\\\),weekdaysMin:\\\v_h_k_sze_cs_p_szo\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\YYYY.MM.DD.\\\,LL:\\\YYYY. MMMM D.\\\,LLL:\\\YYYY. MMMM D. H:mm\\\,LLLL:\\\YYYY. MMMM D., dddd H:mm\\\},meridiemParse:/de|du/i,isPM:function(e){return\\\u\\\e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e\u003C12?!0t?\\\de\\\:\\\DE\\\:!0t?\\\du\\\:\\\DU\\\},calendar:{sameDay:\\\ma LT-kor\\\,nextDay:\\\holnap LT-kor\\\,nextWeek:function(){return en.call(this,!0)},lastDay:\\\tegnap LT-kor\\\,lastWeek:function(){return en.call(this,!1)},sameElse:\\\L\\\},relativeTime:{future:\\\%s m\\\\xfalva\\\,past:\\\%s\\\,s:Xs,ss:Xs,m:Xs,mm:Xs,h:Xs,hh:Xs,d:Xs,dd:Xs,M:Xs,MM:Xs,y:Xs,yy:Xs},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\hy-am\\\,{months:{format:\\\\\\\u0570\\\\u0578\\\\u0582\\\\u0576\\\\u057e\\\\u0561\\\\u0580\\\\u056b_\\\\u0583\\\\u0565\\\\u057f\\\\u0580\\\\u057e\\\\u0561\\\\u0580\\\\u056b_\\\\u0574\\\\u0561\\\\u0580\\\\u057f\\\\u056b_\\\\u0561\\\\u057a\\\\u0580\\\\u056b\\\\u056c\\\\u056b_\\\\u0574\\\\u0561\\\\u0575\\\\u056b\\\\u057d\\\\u056b_\\\\u0570\\\\u0578\\\\u0582\\\\u0576\\\\u056b\\\\u057d\\\\u056b_\\\\u0570\\\\u0578\\\\u0582\\\\u056c\\\\u056b\\\\u057d\\\\u056b_\\\\u0585\\\\u0563\\\\u0578\\\\u057d\\\\u057f\\\\u0578\\\\u057d\\\\u056b_\\\\u057d\\\\u0565\\\\u057a\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580\\\\u056b_\\\\u0570\\\\u0578\\\\u056f\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580\\\\u056b_\\\\u0576\\\\u0578\\\\u0575\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580\\\\u056b_\\\\u0564\\\\u0565\\\\u056f\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580\\\\u056b\\\.split(\\\_\\\),standalone:\\\\\\\u0570\\\\u0578\\\\u0582\\\\u0576\\\\u057e\\\\u0561\\\\u0580_\\\\u0583\\\\u0565\\\\u057f\\\\u0580\\\\u057e\\\\u0561\\\\u0580_\\\\u0574\\\\u0561\\\\u0580\\\\u057f_\\\\u0561\\\\u057a\\\\u0580\\\\u056b\\\\u056c_\\\\u0574\\\\u0561\\\\u0575\\\\u056b\\\\u057d_\\\\u0570\\\\u0578\\\\u0582\\\\u0576\\\\u056b\\\\u057d_\\\\u0570\\\\u0578\\\\u0582\\\\u056c\\\\u056b\\\\u057d_\\\\u0585\\\\u0563\\\\u0578\\\\u057d\\\\u057f\\\\u0578\\\\u057d_\\\\u057d\\\\u0565\\\\u057a\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580_\\\\u0570\\\\u0578\\\\u056f\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580_\\\\u0576\\\\u0578\\\\u0575\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580_\\\\u0564\\\\u0565\\\\u056f\\\\u057f\\\\u0565\\\\u0574\\\\u0562\\\\u0565\\\\u0580\\\.split(\\\_\\\)},monthsShort:\\\\\\\u0570\\\\u0576\\\\u057e_\\\\u0583\\\\u057f\\\\u0580_\\\\u0574\\\\u0580\\\\u057f_\\\\u0561\\\\u057a\\\\u0580_\\\\u0574\\\\u0575\\\\u057d_\\\\u0570\\\\u0576\\\\u057d_\\\\u0570\\\\u056c\\\\u057d_\\\\u0585\\\\u0563\\\\u057d_\\\\u057d\\\\u057a\\\\u057f_\\\\u0570\\\\u056f\\\\u057f_\\\\u0576\\\\u0574\\\\u0562_\\\\u0564\\\\u056f\\\\u057f\\\.split(\\\_\\\),weekdays:\\\\\\\u056f\\\\u056b\\\\u0580\\\\u0561\\\\u056f\\\\u056b_\\\\u0565\\\\u0580\\\\u056f\\\\u0578\\\\u0582\\\\u0577\\\\u0561\\\\u0562\\\\u0569\\\\u056b_\\\\u0565\\\\u0580\\\\u0565\\\\u0584\\\\u0577\\\\u0561\\\\u0562\\\\u0569\\\\u056b_\\\\u0579\\\\u0578\\\\u0580\\\\u0565\\\\u0584\\\\u0577\\\\u0561\\\\u0562\\\\u0569\\\\u056b_\\\\u0570\\\\u056b\\\\u0576\\\\u0563\\\\u0577\\\\u0561\\\\u0562\\\\u0569\\\\u056b_\\\\u0578\\\\u0582\\\\u0580\\\\u0562\\\\u0561\\\\u0569_\\\\u0577\\\\u0561\\\\u0562\\\\u0561\\\\u0569\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u056f\\\\u0580\\\\u056f_\\\\u0565\\\\u0580\\\\u056f_\\\\u0565\\\\u0580\\\\u0584_\\\\u0579\\\\u0580\\\\u0584_\\\\u0570\\\\u0576\\\\u0563_\\\\u0578\\\\u0582\\\\u0580\\\\u0562_\\\\u0577\\\\u0562\\\\u0569\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u056f\\\\u0580\\\\u056f_\\\\u0565\\\\u0580\\\\u056f_\\\\u0565\\\\u0580\\\\u0584_\\\\u0579\\\\u0580\\\\u0584_\\\\u0570\\\\u0576\\\\u0563_\\\\u0578\\\\u0582\\\\u0580\\\\u0562_\\\\u0577\\\\u0562\\\\u0569\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY \\\\u0569.\\\,LLL:\\\D MMMM YYYY \\\\u0569., HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY \\\\u0569., HH:mm\\\},calendar:{sameDay:\\\\\\\u0561\\\\u0575\\\\u057d\\\\u0585\\\\u0580 LT\\\,nextDay:\\\\\\\u057e\\\\u0561\\\\u0572\\\\u0568 LT\\\,lastDay:\\\\\\\u0565\\\\u0580\\\\u0565\\\\u056f LT\\\,nextWeek:function(){return\\\dddd \\\\u0585\\\\u0580\\\\u0568 \\\\u056a\\\\u0561\\\\u0574\\\\u0568 LT\\\},lastWeek:function(){return\\\\\\\u0561\\\\u0576\\\\u0581\\\\u0561\\\\u056e dddd \\\\u0585\\\\u0580\\\\u0568 \\\\u056a\\\\u0561\\\\u0574\\\\u0568 LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0570\\\\u0565\\\\u057f\\\\u0578\\\,past:\\\%s \\\\u0561\\\\u057c\\\\u0561\\\\u057b\\\,s:\\\\\\\u0574\\\\u056b \\\\u0584\\\\u0561\\\\u0576\\\\u056b \\\\u057e\\\\u0561\\\\u0575\\\\u0580\\\\u056f\\\\u0575\\\\u0561\\\\u0576\\\,ss:\\\%d \\\\u057e\\\\u0561\\\\u0575\\\\u0580\\\\u056f\\\\u0575\\\\u0561\\\\u0576\\\,m:\\\\\\\u0580\\\\u0578\\\\u057a\\\\u0565\\\,mm:\\\%d \\\\u0580\\\\u0578\\\\u057a\\\\u0565\\\,h:\\\\\\\u056a\\\\u0561\\\\u0574\\\,hh:\\\%d \\\\u056a\\\\u0561\\\\u0574\\\,d:\\\\\\\u0585\\\\u0580\\\,dd:\\\%d \\\\u0585\\\\u0580\\\,M:\\\\\\\u0561\\\\u0574\\\\u056b\\\\u057d\\\,MM:\\\%d \\\\u0561\\\\u0574\\\\u056b\\\\u057d\\\,y:\\\\\\\u057f\\\\u0561\\\\u0580\\\\u056b\\\,yy:\\\%d \\\\u057f\\\\u0561\\\\u0580\\\\u056b\\\},meridiemParse:/\\\\u0563\\\\u056b\\\\u0577\\\\u0565\\\\u0580\\\\u057e\\\\u0561|\\\\u0561\\\\u057c\\\\u0561\\\\u057e\\\\u0578\\\\u057f\\\\u057e\\\\u0561|\\\\u0581\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u057e\\\\u0561|\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u0578\\\\u0575\\\\u0561\\\\u0576/,isPM:function(e){return/^(\\\\u0581\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u057e\\\\u0561|\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u0578\\\\u0575\\\\u0561\\\\u0576)$/.test(e)},meridiem:function(e){return e\u003C4?\\\\\\\u0563\\\\u056b\\\\u0577\\\\u0565\\\\u0580\\\\u057e\\\\u0561\\\:e\u003C12?\\\\\\\u0561\\\\u057c\\\\u0561\\\\u057e\\\\u0578\\\\u057f\\\\u057e\\\\u0561\\\:e\u003C17?\\\\\\\u0581\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u057e\\\\u0561\\\:\\\\\\\u0565\\\\u0580\\\\u0565\\\\u056f\\\\u0578\\\\u0575\\\\u0561\\\\u0576\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}|\\\\d{1,2}-(\\\\u056b\\\\u0576|\\\\u0580\\\\u0564)/,ordinal:function(e,a){switch(a){case\\\DDD\\\:case\\\w\\\:case\\\W\\\:case\\\DDDo\\\:return 1e?e+\\\-\\\\u056b\\\\u0576\\\:e+\\\-\\\\u0580\\\\u0564\\\;default:return e}},week:{dow:1,doy:7}}),l.defineLocale(\\\id\\\,{months:\\\Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\\\.split(\\\_\\\),weekdays:\\\Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\\\.split(\\\_\\\),weekdaysShort:\\\Min_Sen_Sel_Rab_Kam_Jum_Sab\\\.split(\\\_\\\),weekdaysMin:\\\Mg_Sn_Sl_Rb_Km_Jm_Sb\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY pukul HH.mm\\\,LLLL:\\\dddd, D MMMM YYYY pukul HH.mm\\\},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12e&&(e0),\\\pagi\\\a?e:\\\siang\\\a?11\u003Ce?e:e+12:\\\sore\\\a||\\\malam\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C11?\\\pagi\\\:e\u003C15?\\\siang\\\:e\u003C19?\\\sore\\\:\\\malam\\\},calendar:{sameDay:\\\Hari ini pukul LT\\\,nextDay:\\\Besok pukul LT\\\,nextWeek:\\\dddd pukul LT\\\,lastDay:\\\Kemarin pukul LT\\\,lastWeek:\\\dddd lalu pukul LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dalam %s\\\,past:\\\%s yang lalu\\\,s:\\\beberapa detik\\\,ss:\\\%d detik\\\,m:\\\semenit\\\,mm:\\\%d menit\\\,h:\\\sejam\\\,hh:\\\%d jam\\\,d:\\\sehari\\\,dd:\\\%d hari\\\,M:\\\sebulan\\\,MM:\\\%d bulan\\\,y:\\\setahun\\\,yy:\\\%d tahun\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\is\\\,{months:\\\jan\\\\xfaar_febr\\\\xfaar_mars_apr\\\\xedl_ma\\\\xed_j\\\\xfan\\\\xed_j\\\\xfal\\\\xed_\\\\xe1g\\\\xfast_september_okt\\\\xf3ber_n\\\\xf3vember_desember\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_ma\\\\xed_j\\\\xfan_j\\\\xfal_\\\\xe1g\\\\xfa_sep_okt_n\\\\xf3v_des\\\.split(\\\_\\\),weekdays:\\\sunnudagur_m\\\\xe1nudagur_\\\\xferi\\\\xf0judagur_mi\\\\xf0vikudagur_fimmtudagur_f\\\\xf6studagur_laugardagur\\\.split(\\\_\\\),weekdaysShort:\\\sun_m\\\\xe1n_\\\\xferi_mi\\\\xf0_fim_f\\\\xf6s_lau\\\.split(\\\_\\\),weekdaysMin:\\\Su_M\\\\xe1_\\\\xder_Mi_Fi_F\\\\xf6_La\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY kl. H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY kl. H:mm\\\},calendar:{sameDay:\\\\\\\xed dag kl. LT\\\,nextDay:\\\\\\\xe1 morgun kl. LT\\\,nextWeek:\\\dddd kl. LT\\\,lastDay:\\\\\\\xed g\\\\xe6r kl. LT\\\,lastWeek:\\\s\\\\xed\\\\xf0asta dddd kl. LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\eftir %s\\\,past:\\\fyrir %s s\\\\xed\\\\xf0an\\\,s:tn,ss:tn,m:tn,mm:tn,h:\\\klukkustund\\\,hh:tn,d:tn,dd:tn,M:tn,MM:tn,y:tn,yy:tn},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\it-ch\\\,{months:\\\gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\\\.split(\\\_\\\),monthsShort:\\\gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\\\.split(\\\_\\\),weekdays:\\\domenica_luned\\\\xec_marted\\\\xec_mercoled\\\\xec_gioved\\\\xec_venerd\\\\xec_sabato\\\.split(\\\_\\\),weekdaysShort:\\\dom_lun_mar_mer_gio_ven_sab\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_me_gi_ve_sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Oggi alle LT\\\,nextDay:\\\Domani alle LT\\\,nextWeek:\\\dddd alle LT\\\,lastDay:\\\Ieri alle LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\la scorsa dddd alle LT\\\;default:return\\\lo scorso dddd alle LT\\\}},sameElse:\\\L\\\},relativeTime:{future:function(e){return(/^0-9.+$/.test(e)?\\\tra\\\:\\\in\\\)+\\\ \\\+e},past:\\\%s fa\\\,s:\\\alcuni secondi\\\,ss:\\\%d secondi\\\,m:\\\un minuto\\\,mm:\\\%d minuti\\\,h:\\\unora\\\,hh:\\\%d ore\\\,d:\\\un giorno\\\,dd:\\\%d giorni\\\,M:\\\un mese\\\,MM:\\\%d mesi\\\,y:\\\un anno\\\,yy:\\\%d anni\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\it\\\,{months:\\\gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\\\.split(\\\_\\\),monthsShort:\\\gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\\\.split(\\\_\\\),weekdays:\\\domenica_luned\\\\xec_marted\\\\xec_mercoled\\\\xec_gioved\\\\xec_venerd\\\\xec_sabato\\\.split(\\\_\\\),weekdaysShort:\\\dom_lun_mar_mer_gio_ven_sab\\\.split(\\\_\\\),weekdaysMin:\\\do_lu_ma_me_gi_ve_sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Oggi alle LT\\\,nextDay:\\\Domani alle LT\\\,nextWeek:\\\dddd alle LT\\\,lastDay:\\\Ieri alle LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\la scorsa dddd alle LT\\\;default:return\\\lo scorso dddd alle LT\\\}},sameElse:\\\L\\\},relativeTime:{future:function(e){return(/^0-9.+$/.test(e)?\\\tra\\\:\\\in\\\)+\\\ \\\+e},past:\\\%s fa\\\,s:\\\alcuni secondi\\\,ss:\\\%d secondi\\\,m:\\\un minuto\\\,mm:\\\%d minuti\\\,h:\\\unora\\\,hh:\\\%d ore\\\,d:\\\un giorno\\\,dd:\\\%d giorni\\\,M:\\\un mese\\\,MM:\\\%d mesi\\\,y:\\\un anno\\\,yy:\\\%d anni\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\ja\\\,{months:\\\\\\\u4e00\\\\u6708_\\\\u4e8c\\\\u6708_\\\\u4e09\\\\u6708_\\\\u56db\\\\u6708_\\\\u4e94\\\\u6708_\\\\u516d\\\\u6708_\\\\u4e03\\\\u6708_\\\\u516b\\\\u6708_\\\\u4e5d\\\\u6708_\\\\u5341\\\\u6708_\\\\u5341\\\\u4e00\\\\u6708_\\\\u5341\\\\u4e8c\\\\u6708\\\.split(\\\_\\\),monthsShort:\\\1\\\\u6708_2\\\\u6708_3\\\\u6708_4\\\\u6708_5\\\\u6708_6\\\\u6708_7\\\\u6708_8\\\\u6708_9\\\\u6708_10\\\\u6708_11\\\\u6708_12\\\\u6708\\\.split(\\\_\\\),weekdays:\\\\\\\u65e5\\\\u66dc\\\\u65e5_\\\\u6708\\\\u66dc\\\\u65e5_\\\\u706b\\\\u66dc\\\\u65e5_\\\\u6c34\\\\u66dc\\\\u65e5_\\\\u6728\\\\u66dc\\\\u65e5_\\\\u91d1\\\\u66dc\\\\u65e5_\\\\u571f\\\\u66dc\\\\u65e5\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u65e5_\\\\u6708_\\\\u706b_\\\\u6c34_\\\\u6728_\\\\u91d1_\\\\u571f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u65e5_\\\\u6708_\\\\u706b_\\\\u6c34_\\\\u6728_\\\\u91d1_\\\\u571f\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY/MM/DD\\\,LL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,LLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,LLLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 dddd HH:mm\\\,l:\\\YYYY/MM/DD\\\,ll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,lll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,llll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5(ddd) HH:mm\\\},meridiemParse:/\\\\u5348\\\\u524d|\\\\u5348\\\\u5f8c/i,isPM:function(e){return\\\\\\\u5348\\\\u5f8c\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u5348\\\\u524d\\\:\\\\\\\u5348\\\\u5f8c\\\},calendar:{sameDay:\\\\\\\u4eca\\\\u65e5 LT\\\,nextDay:\\\\\\\u660e\\\\u65e5 LT\\\,nextWeek:function(e){return e.week()\u003Cthis.week()?\\\\\\\u6765\\\\u9031dddd LT\\\:\\\dddd LT\\\},lastDay:\\\\\\\u6628\\\\u65e5 LT\\\,lastWeek:function(e){return this.week()\u003Ce.week()?\\\\\\\u5148\\\\u9031dddd LT\\\:\\\dddd LT\\\},sameElse:\\\L\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\u65e5/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\\\\\u65e5\\\;default:return e}},relativeTime:{future:\\\%s\\\\u5f8c\\\,past:\\\%s\\\\u524d\\\,s:\\\\\\\u6570\\\\u79d2\\\,ss:\\\%d\\\\u79d2\\\,m:\\\1\\\\u5206\\\,mm:\\\%d\\\\u5206\\\,h:\\\1\\\\u6642\\\\u9593\\\,hh:\\\%d\\\\u6642\\\\u9593\\\,d:\\\1\\\\u65e5\\\,dd:\\\%d\\\\u65e5\\\,M:\\\1\\\\u30f6\\\\u6708\\\,MM:\\\%d\\\\u30f6\\\\u6708\\\,y:\\\1\\\\u5e74\\\,yy:\\\%d\\\\u5e74\\\}}),l.defineLocale(\\\jv\\\,{months:\\\Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des\\\.split(\\\_\\\),weekdays:\\\Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu\\\.split(\\\_\\\),weekdaysShort:\\\Min_Sen_Sel_Reb_Kem_Jem_Sep\\\.split(\\\_\\\),weekdaysMin:\\\Mg_Sn_Sl_Rb_Km_Jm_Sp\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY pukul HH.mm\\\,LLLL:\\\dddd, D MMMM YYYY pukul HH.mm\\\},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12e&&(e0),\\\enjing\\\a?e:\\\siyang\\\a?11\u003Ce?e:e+12:\\\sonten\\\a||\\\ndalu\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C11?\\\enjing\\\:e\u003C15?\\\siyang\\\:e\u003C19?\\\sonten\\\:\\\ndalu\\\},calendar:{sameDay:\\\Dinten puniko pukul LT\\\,nextDay:\\\Mbenjang pukul LT\\\,nextWeek:\\\dddd pukul LT\\\,lastDay:\\\Kala wingi pukul LT\\\,lastWeek:\\\dddd kepengker pukul LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\wonten ing %s\\\,past:\\\%s ingkang kepengker\\\,s:\\\sawetawis detik\\\,ss:\\\%d detik\\\,m:\\\setunggal menit\\\,mm:\\\%d menit\\\,h:\\\setunggal jam\\\,hh:\\\%d jam\\\,d:\\\sedinten\\\,dd:\\\%d dinten\\\,M:\\\sewulan\\\,MM:\\\%d wulan\\\,y:\\\setaun\\\,yy:\\\%d taun\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\ka\\\,{months:{standalone:\\\\\\\u10d8\\\\u10d0\\\\u10dc\\\\u10d5\\\\u10d0\\\\u10e0\\\\u10d8_\\\\u10d7\\\\u10d4\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d5\\\\u10d0\\\\u10da\\\\u10d8_\\\\u10db\\\\u10d0\\\\u10e0\\\\u10e2\\\\u10d8_\\\\u10d0\\\\u10de\\\\u10e0\\\\u10d8\\\\u10da\\\\u10d8_\\\\u10db\\\\u10d0\\\\u10d8\\\\u10e1\\\\u10d8_\\\\u10d8\\\\u10d5\\\\u10dc\\\\u10d8\\\\u10e1\\\\u10d8_\\\\u10d8\\\\u10d5\\\\u10da\\\\u10d8\\\\u10e1\\\\u10d8_\\\\u10d0\\\\u10d2\\\\u10d5\\\\u10d8\\\\u10e1\\\\u10e2\\\\u10dd_\\\\u10e1\\\\u10d4\\\\u10e5\\\\u10e2\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d8_\\\\u10dd\\\\u10e5\\\\u10e2\\\\u10dd\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d8_\\\\u10dc\\\\u10dd\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d8_\\\\u10d3\\\\u10d4\\\\u10d9\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d8\\\.split(\\\_\\\),format:\\\\\\\u10d8\\\\u10d0\\\\u10dc\\\\u10d5\\\\u10d0\\\\u10e0\\\\u10e1_\\\\u10d7\\\\u10d4\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10d5\\\\u10d0\\\\u10da\\\\u10e1_\\\\u10db\\\\u10d0\\\\u10e0\\\\u10e2\\\\u10e1_\\\\u10d0\\\\u10de\\\\u10e0\\\\u10d8\\\\u10da\\\\u10d8\\\\u10e1_\\\\u10db\\\\u10d0\\\\u10d8\\\\u10e1\\\\u10e1_\\\\u10d8\\\\u10d5\\\\u10dc\\\\u10d8\\\\u10e1\\\\u10e1_\\\\u10d8\\\\u10d5\\\\u10da\\\\u10d8\\\\u10e1\\\\u10e1_\\\\u10d0\\\\u10d2\\\\u10d5\\\\u10d8\\\\u10e1\\\\u10e2\\\\u10e1_\\\\u10e1\\\\u10d4\\\\u10e5\\\\u10e2\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10e1_\\\\u10dd\\\\u10e5\\\\u10e2\\\\u10dd\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10e1_\\\\u10dc\\\\u10dd\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10e1_\\\\u10d3\\\\u10d4\\\\u10d9\\\\u10d4\\\\u10db\\\\u10d1\\\\u10d4\\\\u10e0\\\\u10e1\\\.split(\\\_\\\)},monthsShort:\\\\\\\u10d8\\\\u10d0\\\\u10dc_\\\\u10d7\\\\u10d4\\\\u10d1_\\\\u10db\\\\u10d0\\\\u10e0_\\\\u10d0\\\\u10de\\\\u10e0_\\\\u10db\\\\u10d0\\\\u10d8_\\\\u10d8\\\\u10d5\\\\u10dc_\\\\u10d8\\\\u10d5\\\\u10da_\\\\u10d0\\\\u10d2\\\\u10d5_\\\\u10e1\\\\u10d4\\\\u10e5_\\\\u10dd\\\\u10e5\\\\u10e2_\\\\u10dc\\\\u10dd\\\\u10d4_\\\\u10d3\\\\u10d4\\\\u10d9\\\.split(\\\_\\\),weekdays:{standalone:\\\\\\\u10d9\\\\u10d5\\\\u10d8\\\\u10e0\\\\u10d0_\\\\u10dd\\\\u10e0\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10d8_\\\\u10e1\\\\u10d0\\\\u10db\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10d8_\\\\u10dd\\\\u10d7\\\\u10ee\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10d8_\\\\u10ee\\\\u10e3\\\\u10d7\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10d8_\\\\u10de\\\\u10d0\\\\u10e0\\\\u10d0\\\\u10e1\\\\u10d9\\\\u10d4\\\\u10d5\\\\u10d8_\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10d8\\\.split(\\\_\\\),format:\\\\\\\u10d9\\\\u10d5\\\\u10d8\\\\u10e0\\\\u10d0\\\\u10e1_\\\\u10dd\\\\u10e0\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10e1_\\\\u10e1\\\\u10d0\\\\u10db\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10e1_\\\\u10dd\\\\u10d7\\\\u10ee\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10e1_\\\\u10ee\\\\u10e3\\\\u10d7\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10e1_\\\\u10de\\\\u10d0\\\\u10e0\\\\u10d0\\\\u10e1\\\\u10d9\\\\u10d4\\\\u10d5\\\\u10e1_\\\\u10e8\\\\u10d0\\\\u10d1\\\\u10d0\\\\u10d7\\\\u10e1\\\.split(\\\_\\\),isFormat:/(\\\\u10ec\\\\u10d8\\\\u10dc\\\\u10d0|\\\\u10e8\\\\u10d4\\\\u10db\\\\u10d3\\\\u10d4\\\\u10d2)/},weekdaysShort:\\\\\\\u10d9\\\\u10d5\\\\u10d8_\\\\u10dd\\\\u10e0\\\\u10e8_\\\\u10e1\\\\u10d0\\\\u10db_\\\\u10dd\\\\u10d7\\\\u10ee_\\\\u10ee\\\\u10e3\\\\u10d7_\\\\u10de\\\\u10d0\\\\u10e0_\\\\u10e8\\\\u10d0\\\\u10d1\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u10d9\\\\u10d5_\\\\u10dd\\\\u10e0_\\\\u10e1\\\\u10d0_\\\\u10dd\\\\u10d7_\\\\u10ee\\\\u10e3_\\\\u10de\\\\u10d0_\\\\u10e8\\\\u10d0\\\.split(\\\_\\\),longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendar:{sameDay:\\\\\\\u10d3\\\\u10e6\\\\u10d4\\\\u10e1 LT-\\\\u10d6\\\\u10d4\\\,nextDay:\\\\\\\u10ee\\\\u10d5\\\\u10d0\\\\u10da LT-\\\\u10d6\\\\u10d4\\\,lastDay:\\\\\\\u10d2\\\\u10e3\\\\u10e8\\\\u10d8\\\\u10dc LT-\\\\u10d6\\\\u10d4\\\,nextWeek:\\\\\\\u10e8\\\\u10d4\\\\u10db\\\\u10d3\\\\u10d4\\\\u10d2 dddd LT-\\\\u10d6\\\\u10d4\\\,lastWeek:\\\\\\\u10ec\\\\u10d8\\\\u10dc\\\\u10d0 dddd LT-\\\\u10d6\\\\u10d4\\\,sameElse:\\\L\\\},relativeTime:{future:function(e){return/(\\\\u10ec\\\\u10d0\\\\u10db\\\\u10d8|\\\\u10ec\\\\u10e3\\\\u10d7\\\\u10d8|\\\\u10e1\\\\u10d0\\\\u10d0\\\\u10d7\\\\u10d8|\\\\u10ec\\\\u10d4\\\\u10da\\\\u10d8)/.test(e)?e.replace(/\\\\u10d8$/,\\\\\\\u10e8\\\\u10d8\\\):e+\\\\\\\u10e8\\\\u10d8\\\},past:function(e){return/(\\\\u10ec\\\\u10d0\\\\u10db\\\\u10d8|\\\\u10ec\\\\u10e3\\\\u10d7\\\\u10d8|\\\\u10e1\\\\u10d0\\\\u10d0\\\\u10d7\\\\u10d8|\\\\u10d3\\\\u10e6\\\\u10d4|\\\\u10d7\\\\u10d5\\\\u10d4)/.test(e)?e.replace(/(\\\\u10d8|\\\\u10d4)$/,\\\\\\\u10d8\\\\u10e1 \\\\u10ec\\\\u10d8\\\\u10dc\\\):/\\\\u10ec\\\\u10d4\\\\u10da\\\\u10d8/.test(e)?e.replace(/\\\\u10ec\\\\u10d4\\\\u10da\\\\u10d8$/,\\\\\\\u10ec\\\\u10da\\\\u10d8\\\\u10e1 \\\\u10ec\\\\u10d8\\\\u10dc\\\):void 0},s:\\\\\\\u10e0\\\\u10d0\\\\u10db\\\\u10d3\\\\u10d4\\\\u10dc\\\\u10d8\\\\u10db\\\\u10d4 \\\\u10ec\\\\u10d0\\\\u10db\\\\u10d8\\\,ss:\\\%d \\\\u10ec\\\\u10d0\\\\u10db\\\\u10d8\\\,m:\\\\\\\u10ec\\\\u10e3\\\\u10d7\\\\u10d8\\\,mm:\\\%d \\\\u10ec\\\\u10e3\\\\u10d7\\\\u10d8\\\,h:\\\\\\\u10e1\\\\u10d0\\\\u10d0\\\\u10d7\\\\u10d8\\\,hh:\\\%d \\\\u10e1\\\\u10d0\\\\u10d0\\\\u10d7\\\\u10d8\\\,d:\\\\\\\u10d3\\\\u10e6\\\\u10d4\\\,dd:\\\%d \\\\u10d3\\\\u10e6\\\\u10d4\\\,M:\\\\\\\u10d7\\\\u10d5\\\\u10d4\\\,MM:\\\%d \\\\u10d7\\\\u10d5\\\\u10d4\\\,y:\\\\\\\u10ec\\\\u10d4\\\\u10da\\\\u10d8\\\,yy:\\\%d \\\\u10ec\\\\u10d4\\\\u10da\\\\u10d8\\\},dayOfMonthOrdinalParse:/0|1-\\\\u10da\\\\u10d8|\\\\u10db\\\\u10d4-\\\\d{1,2}|\\\\d{1,2}-\\\\u10d4/,ordinal:function(e){return 0e?e:1e?e+\\\-\\\\u10da\\\\u10d8\\\:e\u003C20||e\u003C100&&e%200||e%1000?\\\\\\\u10db\\\\u10d4-\\\+e:e+\\\-\\\\u10d4\\\},week:{dow:1,doy:7}});var sn{0:\\\-\\\\u0448\\\\u0456\\\,1:\\\-\\\\u0448\\\\u0456\\\,2:\\\-\\\\u0448\\\\u0456\\\,3:\\\-\\\\u0448\\\\u0456\\\,4:\\\-\\\\u0448\\\\u0456\\\,5:\\\-\\\\u0448\\\\u0456\\\,6:\\\-\\\\u0448\\\\u044b\\\,7:\\\-\\\\u0448\\\\u0456\\\,8:\\\-\\\\u0448\\\\u0456\\\,9:\\\-\\\\u0448\\\\u044b\\\,10:\\\-\\\\u0448\\\\u044b\\\,20:\\\-\\\\u0448\\\\u044b\\\,30:\\\-\\\\u0448\\\\u044b\\\,40:\\\-\\\\u0448\\\\u044b\\\,50:\\\-\\\\u0448\\\\u0456\\\,60:\\\-\\\\u0448\\\\u044b\\\,70:\\\-\\\\u0448\\\\u0456\\\,80:\\\-\\\\u0448\\\\u0456\\\,90:\\\-\\\\u0448\\\\u044b\\\,100:\\\-\\\\u0448\\\\u0456\\\};l.defineLocale(\\\kk\\\,{months:\\\\\\\u049b\\\\u0430\\\\u04a3\\\\u0442\\\\u0430\\\\u0440_\\\\u0430\\\\u049b\\\\u043f\\\\u0430\\\\u043d_\\\\u043d\\\\u0430\\\\u0443\\\\u0440\\\\u044b\\\\u0437_\\\\u0441\\\\u04d9\\\\u0443\\\\u0456\\\\u0440_\\\\u043c\\\\u0430\\\\u043c\\\\u044b\\\\u0440_\\\\u043c\\\\u0430\\\\u0443\\\\u0441\\\\u044b\\\\u043c_\\\\u0448\\\\u0456\\\\u043b\\\\u0434\\\\u0435_\\\\u0442\\\\u0430\\\\u043c\\\\u044b\\\\u0437_\\\\u049b\\\\u044b\\\\u0440\\\\u043a\\\\u04af\\\\u0439\\\\u0435\\\\u043a_\\\\u049b\\\\u0430\\\\u0437\\\\u0430\\\\u043d_\\\\u049b\\\\u0430\\\\u0440\\\\u0430\\\\u0448\\\\u0430_\\\\u0436\\\\u0435\\\\u043b\\\\u0442\\\\u043e\\\\u049b\\\\u0441\\\\u0430\\\\u043d\\\.split(\\\_\\\),monthsShort:\\\\\\\u049b\\\\u0430\\\\u04a3_\\\\u0430\\\\u049b\\\\u043f_\\\\u043d\\\\u0430\\\\u0443_\\\\u0441\\\\u04d9\\\\u0443_\\\\u043c\\\\u0430\\\\u043c_\\\\u043c\\\\u0430\\\\u0443_\\\\u0448\\\\u0456\\\\u043b_\\\\u0442\\\\u0430\\\\u043c_\\\\u049b\\\\u044b\\\\u0440_\\\\u049b\\\\u0430\\\\u0437_\\\\u049b\\\\u0430\\\\u0440_\\\\u0436\\\\u0435\\\\u043b\\\.split(\\\_\\\),weekdays:\\\\\\\u0436\\\\u0435\\\\u043a\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456_\\\\u0434\\\\u04af\\\\u0439\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456_\\\\u0441\\\\u0435\\\\u0439\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456_\\\\u0441\\\\u04d9\\\\u0440\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456_\\\\u0431\\\\u0435\\\\u0439\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456_\\\\u0436\\\\u04b1\\\\u043c\\\\u0430_\\\\u0441\\\\u0435\\\\u043d\\\\u0431\\\\u0456\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0436\\\\u0435\\\\u043a_\\\\u0434\\\\u04af\\\\u0439_\\\\u0441\\\\u0435\\\\u0439_\\\\u0441\\\\u04d9\\\\u0440_\\\\u0431\\\\u0435\\\\u0439_\\\\u0436\\\\u04b1\\\\u043c_\\\\u0441\\\\u0435\\\\u043d\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0436\\\\u043a_\\\\u0434\\\\u0439_\\\\u0441\\\\u0439_\\\\u0441\\\\u0440_\\\\u0431\\\\u0439_\\\\u0436\\\\u043c_\\\\u0441\\\\u043d\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0411\\\\u04af\\\\u0433\\\\u0456\\\\u043d \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442 LT\\\,nextDay:\\\\\\\u0415\\\\u0440\\\\u0442\\\\u0435\\\\u04a3 \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442 LT\\\,nextWeek:\\\dddd \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442 LT\\\,lastDay:\\\\\\\u041a\\\\u0435\\\\u0448\\\\u0435 \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442 LT\\\,lastWeek:\\\\\\\u04e8\\\\u0442\\\\u043a\\\\u0435\\\\u043d \\\\u0430\\\\u043f\\\\u0442\\\\u0430\\\\u043d\\\\u044b\\\\u04a3 dddd \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0456\\\\u0448\\\\u0456\\\\u043d\\\\u0434\\\\u0435\\\,past:\\\%s \\\\u0431\\\\u04b1\\\\u0440\\\\u044b\\\\u043d\\\,s:\\\\\\\u0431\\\\u0456\\\\u0440\\\\u043d\\\\u0435\\\\u0448\\\\u0435 \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,ss:\\\%d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,m:\\\\\\\u0431\\\\u0456\\\\u0440 \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,mm:\\\%d \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,h:\\\\\\\u0431\\\\u0456\\\\u0440 \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442\\\,hh:\\\%d \\\\u0441\\\\u0430\\\\u0493\\\\u0430\\\\u0442\\\,d:\\\\\\\u0431\\\\u0456\\\\u0440 \\\\u043a\\\\u04af\\\\u043d\\\,dd:\\\%d \\\\u043a\\\\u04af\\\\u043d\\\,M:\\\\\\\u0431\\\\u0456\\\\u0440 \\\\u0430\\\\u0439\\\,MM:\\\%d \\\\u0430\\\\u0439\\\,y:\\\\\\\u0431\\\\u0456\\\\u0440 \\\\u0436\\\\u044b\\\\u043b\\\,yy:\\\%d \\\\u0436\\\\u044b\\\\u043b\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0448\\\\u0456|\\\\u0448\\\\u044b)/,ordinal:function(e){return e+(sne||sne%10||sn100\u003Ce?100:null)},week:{dow:1,doy:7}});var nn{1:\\\\\\\u17e1\\\,2:\\\\\\\u17e2\\\,3:\\\\\\\u17e3\\\,4:\\\\\\\u17e4\\\,5:\\\\\\\u17e5\\\,6:\\\\\\\u17e6\\\,7:\\\\\\\u17e7\\\,8:\\\\\\\u17e8\\\,9:\\\\\\\u17e9\\\,0:\\\\\\\u17e0\\\},dn{\\\\\\\u17e1\\\:\\\1\\\,\\\\\\\u17e2\\\:\\\2\\\,\\\\\\\u17e3\\\:\\\3\\\,\\\\\\\u17e4\\\:\\\4\\\,\\\\\\\u17e5\\\:\\\5\\\,\\\\\\\u17e6\\\:\\\6\\\,\\\\\\\u17e7\\\:\\\7\\\,\\\\\\\u17e8\\\:\\\8\\\,\\\\\\\u17e9\\\:\\\9\\\,\\\\\\\u17e0\\\:\\\0\\\};l.defineLocale(\\\km\\\,{months:\\\\\\\u1798\\\\u1780\\\\u179a\\\\u17b6_\\\\u1780\\\\u17bb\\\\u1798\\\\u17d2\\\\u1797\\\\u17c8_\\\\u1798\\\\u17b8\\\\u1793\\\\u17b6_\\\\u1798\\\\u17c1\\\\u179f\\\\u17b6_\\\\u17a7\\\\u179f\\\\u1797\\\\u17b6_\\\\u1798\\\\u17b7\\\\u1790\\\\u17bb\\\\u1793\\\\u17b6_\\\\u1780\\\\u1780\\\\u17d2\\\\u1780\\\\u178a\\\\u17b6_\\\\u179f\\\\u17b8\\\\u17a0\\\\u17b6_\\\\u1780\\\\u1789\\\\u17d2\\\\u1789\\\\u17b6_\\\\u178f\\\\u17bb\\\\u179b\\\\u17b6_\\\\u179c\\\\u17b7\\\\u1785\\\\u17d2\\\\u1786\\\\u17b7\\\\u1780\\\\u17b6_\\\\u1792\\\\u17d2\\\\u1793\\\\u17bc\\\.split(\\\_\\\),monthsShort:\\\\\\\u1798\\\\u1780\\\\u179a\\\\u17b6_\\\\u1780\\\\u17bb\\\\u1798\\\\u17d2\\\\u1797\\\\u17c8_\\\\u1798\\\\u17b8\\\\u1793\\\\u17b6_\\\\u1798\\\\u17c1\\\\u179f\\\\u17b6_\\\\u17a7\\\\u179f\\\\u1797\\\\u17b6_\\\\u1798\\\\u17b7\\\\u1790\\\\u17bb\\\\u1793\\\\u17b6_\\\\u1780\\\\u1780\\\\u17d2\\\\u1780\\\\u178a\\\\u17b6_\\\\u179f\\\\u17b8\\\\u17a0\\\\u17b6_\\\\u1780\\\\u1789\\\\u17d2\\\\u1789\\\\u17b6_\\\\u178f\\\\u17bb\\\\u179b\\\\u17b6_\\\\u179c\\\\u17b7\\\\u1785\\\\u17d2\\\\u1786\\\\u17b7\\\\u1780\\\\u17b6_\\\\u1792\\\\u17d2\\\\u1793\\\\u17bc\\\.split(\\\_\\\),weekdays:\\\\\\\u17a2\\\\u17b6\\\\u1791\\\\u17b7\\\\u178f\\\\u17d2\\\\u1799_\\\\u1785\\\\u17d0\\\\u1793\\\\u17d2\\\\u1791_\\\\u17a2\\\\u1784\\\\u17d2\\\\u1782\\\\u17b6\\\\u179a_\\\\u1796\\\\u17bb\\\\u1792_\\\\u1796\\\\u17d2\\\\u179a\\\\u17a0\\\\u179f\\\\u17d2\\\\u1794\\\\u178f\\\\u17b7\\\\u17cd_\\\\u179f\\\\u17bb\\\\u1780\\\\u17d2\\\\u179a_\\\\u179f\\\\u17c5\\\\u179a\\\\u17cd\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u17a2\\\\u17b6_\\\\u1785_\\\\u17a2_\\\\u1796_\\\\u1796\\\\u17d2\\\\u179a_\\\\u179f\\\\u17bb_\\\\u179f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u17a2\\\\u17b6_\\\\u1785_\\\\u17a2_\\\\u1796_\\\\u1796\\\\u17d2\\\\u179a_\\\\u179f\\\\u17bb_\\\\u179f\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u1796\\\\u17d2\\\\u179a\\\\u17b9\\\\u1780|\\\\u179b\\\\u17d2\\\\u1784\\\\u17b6\\\\u1785/,isPM:function(e){return\\\\\\\u179b\\\\u17d2\\\\u1784\\\\u17b6\\\\u1785\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u1796\\\\u17d2\\\\u179a\\\\u17b9\\\\u1780\\\:\\\\\\\u179b\\\\u17d2\\\\u1784\\\\u17b6\\\\u1785\\\},calendar:{sameDay:\\\\\\\u1790\\\\u17d2\\\\u1784\\\\u17c3\\\\u1793\\\\u17c1\\\\u17c7 \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784 LT\\\,nextDay:\\\\\\\u179f\\\\u17d2\\\\u17a2\\\\u17c2\\\\u1780 \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784 LT\\\,nextWeek:\\\dddd \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784 LT\\\,lastDay:\\\\\\\u1798\\\\u17d2\\\\u179f\\\\u17b7\\\\u179b\\\\u1798\\\\u17b7\\\\u1789 \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784 LT\\\,lastWeek:\\\dddd \\\\u179f\\\\u1794\\\\u17d2\\\\u178f\\\\u17b6\\\\u17a0\\\\u17cd\\\\u1798\\\\u17bb\\\\u1793 \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s\\\\u1791\\\\u17c0\\\\u178f\\\,past:\\\%s\\\\u1798\\\\u17bb\\\\u1793\\\,s:\\\\\\\u1794\\\\u17c9\\\\u17bb\\\\u1793\\\\u17d2\\\\u1798\\\\u17b6\\\\u1793\\\\u179c\\\\u17b7\\\\u1793\\\\u17b6\\\\u1791\\\\u17b8\\\,ss:\\\%d \\\\u179c\\\\u17b7\\\\u1793\\\\u17b6\\\\u1791\\\\u17b8\\\,m:\\\\\\\u1798\\\\u17bd\\\\u1799\\\\u1793\\\\u17b6\\\\u1791\\\\u17b8\\\,mm:\\\%d \\\\u1793\\\\u17b6\\\\u1791\\\\u17b8\\\,h:\\\\\\\u1798\\\\u17bd\\\\u1799\\\\u1798\\\\u17c9\\\\u17c4\\\\u1784\\\,hh:\\\%d \\\\u1798\\\\u17c9\\\\u17c4\\\\u1784\\\,d:\\\\\\\u1798\\\\u17bd\\\\u1799\\\\u1790\\\\u17d2\\\\u1784\\\\u17c3\\\,dd:\\\%d \\\\u1790\\\\u17d2\\\\u1784\\\\u17c3\\\,M:\\\\\\\u1798\\\\u17bd\\\\u1799\\\\u1781\\\\u17c2\\\,MM:\\\%d \\\\u1781\\\\u17c2\\\,y:\\\\\\\u1798\\\\u17bd\\\\u1799\\\\u1786\\\\u17d2\\\\u1793\\\\u17b6\\\\u17c6\\\,yy:\\\%d \\\\u1786\\\\u17d2\\\\u1793\\\\u17b6\\\\u17c6\\\},dayOfMonthOrdinalParse:/\\\\u1791\\\\u17b8\\\\d{1,2}/,ordinal:\\\\\\\u1791\\\\u17b8%d\\\,preparse:function(e){return e.replace(/\\\\u17e1\\\\u17e2\\\\u17e3\\\\u17e4\\\\u17e5\\\\u17e6\\\\u17e7\\\\u17e8\\\\u17e9\\\\u17e0/g,function(e){return dne})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return nne})},week:{dow:1,doy:4}});var rn{1:\\\\\\\u0ce7\\\,2:\\\\\\\u0ce8\\\,3:\\\\\\\u0ce9\\\,4:\\\\\\\u0cea\\\,5:\\\\\\\u0ceb\\\,6:\\\\\\\u0cec\\\,7:\\\\\\\u0ced\\\,8:\\\\\\\u0cee\\\,9:\\\\\\\u0cef\\\,0:\\\\\\\u0ce6\\\},_n{\\\\\\\u0ce7\\\:\\\1\\\,\\\\\\\u0ce8\\\:\\\2\\\,\\\\\\\u0ce9\\\:\\\3\\\,\\\\\\\u0cea\\\:\\\4\\\,\\\\\\\u0ceb\\\:\\\5\\\,\\\\\\\u0cec\\\:\\\6\\\,\\\\\\\u0ced\\\:\\\7\\\,\\\\\\\u0cee\\\:\\\8\\\,\\\\\\\u0cef\\\:\\\9\\\,\\\\\\\u0ce6\\\:\\\0\\\};l.defineLocale(\\\kn\\\,{months:\\\\\\\u0c9c\\\\u0ca8\\\\u0cb5\\\\u0cb0\\\\u0cbf_\\\\u0cab\\\\u0cc6\\\\u0cac\\\\u0ccd\\\\u0cb0\\\\u0cb5\\\\u0cb0\\\\u0cbf_\\\\u0cae\\\\u0cbe\\\\u0cb0\\\\u0ccd\\\\u0c9a\\\\u0ccd_\\\\u0c8f\\\\u0caa\\\\u0ccd\\\\u0cb0\\\\u0cbf\\\\u0cb2\\\\u0ccd_\\\\u0cae\\\\u0cc6\\\\u0cd5_\\\\u0c9c\\\\u0cc2\\\\u0ca8\\\\u0ccd_\\\\u0c9c\\\\u0cc1\\\\u0cb2\\\\u0cc6\\\\u0cd6_\\\\u0c86\\\\u0c97\\\\u0cb8\\\\u0ccd\\\\u0c9f\\\\u0ccd_\\\\u0cb8\\\\u0cc6\\\\u0caa\\\\u0ccd\\\\u0c9f\\\\u0cc6\\\\u0c82\\\\u0cac\\\\u0cb0\\\\u0ccd_\\\\u0c85\\\\u0c95\\\\u0ccd\\\\u0c9f\\\\u0cc6\\\\u0cc2\\\\u0cd5\\\\u0cac\\\\u0cb0\\\\u0ccd_\\\\u0ca8\\\\u0cb5\\\\u0cc6\\\\u0c82\\\\u0cac\\\\u0cb0\\\\u0ccd_\\\\u0ca1\\\\u0cbf\\\\u0cb8\\\\u0cc6\\\\u0c82\\\\u0cac\\\\u0cb0\\\\u0ccd\\\.split(\\\_\\\),monthsShort:\\\\\\\u0c9c\\\\u0ca8_\\\\u0cab\\\\u0cc6\\\\u0cac\\\\u0ccd\\\\u0cb0_\\\\u0cae\\\\u0cbe\\\\u0cb0\\\\u0ccd\\\\u0c9a\\\\u0ccd_\\\\u0c8f\\\\u0caa\\\\u0ccd\\\\u0cb0\\\\u0cbf\\\\u0cb2\\\\u0ccd_\\\\u0cae\\\\u0cc6\\\\u0cd5_\\\\u0c9c\\\\u0cc2\\\\u0ca8\\\\u0ccd_\\\\u0c9c\\\\u0cc1\\\\u0cb2\\\\u0cc6\\\\u0cd6_\\\\u0c86\\\\u0c97\\\\u0cb8\\\\u0ccd\\\\u0c9f\\\\u0ccd_\\\\u0cb8\\\\u0cc6\\\\u0caa\\\\u0ccd\\\\u0c9f\\\\u0cc6\\\\u0c82_\\\\u0c85\\\\u0c95\\\\u0ccd\\\\u0c9f\\\\u0cc6\\\\u0cc2\\\\u0cd5_\\\\u0ca8\\\\u0cb5\\\\u0cc6\\\\u0c82_\\\\u0ca1\\\\u0cbf\\\\u0cb8\\\\u0cc6\\\\u0c82\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0cad\\\\u0cbe\\\\u0ca8\\\\u0cc1\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0cb8\\\\u0cc6\\\\u0cc2\\\\u0cd5\\\\u0cae\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0cae\\\\u0c82\\\\u0c97\\\\u0cb3\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0cac\\\\u0cc1\\\\u0ca7\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0c97\\\\u0cc1\\\\u0cb0\\\\u0cc1\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0cb6\\\\u0cc1\\\\u0c95\\\\u0ccd\\\\u0cb0\\\\u0cb5\\\\u0cbe\\\\u0cb0_\\\\u0cb6\\\\u0ca8\\\\u0cbf\\\\u0cb5\\\\u0cbe\\\\u0cb0\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0cad\\\\u0cbe\\\\u0ca8\\\\u0cc1_\\\\u0cb8\\\\u0cc6\\\\u0cc2\\\\u0cd5\\\\u0cae_\\\\u0cae\\\\u0c82\\\\u0c97\\\\u0cb3_\\\\u0cac\\\\u0cc1\\\\u0ca7_\\\\u0c97\\\\u0cc1\\\\u0cb0\\\\u0cc1_\\\\u0cb6\\\\u0cc1\\\\u0c95\\\\u0ccd\\\\u0cb0_\\\\u0cb6\\\\u0ca8\\\\u0cbf\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0cad\\\\u0cbe_\\\\u0cb8\\\\u0cc6\\\\u0cc2\\\\u0cd5_\\\\u0cae\\\\u0c82_\\\\u0cac\\\\u0cc1_\\\\u0c97\\\\u0cc1_\\\\u0cb6\\\\u0cc1_\\\\u0cb6\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm\\\,LTS:\\\A h:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm\\\},calendar:{sameDay:\\\\\\\u0c87\\\\u0c82\\\\u0ca6\\\\u0cc1 LT\\\,nextDay:\\\\\\\u0ca8\\\\u0cbe\\\\u0cb3\\\\u0cc6 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0ca8\\\\u0cbf\\\\u0ca8\\\\u0ccd\\\\u0ca8\\\\u0cc6 LT\\\,lastWeek:\\\\\\\u0c95\\\\u0cc6\\\\u0cc2\\\\u0ca8\\\\u0cc6\\\\u0caf dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0ca8\\\\u0c82\\\\u0ca4\\\\u0cb0\\\,past:\\\%s \\\\u0cb9\\\\u0cbf\\\\u0c82\\\\u0ca6\\\\u0cc6\\\,s:\\\\\\\u0c95\\\\u0cc6\\\\u0cb2\\\\u0cb5\\\\u0cc1 \\\\u0c95\\\\u0ccd\\\\u0cb7\\\\u0ca3\\\\u0c97\\\\u0cb3\\\\u0cc1\\\,ss:\\\%d \\\\u0cb8\\\\u0cc6\\\\u0c95\\\\u0cc6\\\\u0c82\\\\u0ca1\\\\u0cc1\\\\u0c97\\\\u0cb3\\\\u0cc1\\\,m:\\\\\\\u0c92\\\\u0c82\\\\u0ca6\\\\u0cc1 \\\\u0ca8\\\\u0cbf\\\\u0cae\\\\u0cbf\\\\u0cb7\\\,mm:\\\%d \\\\u0ca8\\\\u0cbf\\\\u0cae\\\\u0cbf\\\\u0cb7\\\,h:\\\\\\\u0c92\\\\u0c82\\\\u0ca6\\\\u0cc1 \\\\u0c97\\\\u0c82\\\\u0c9f\\\\u0cc6\\\,hh:\\\%d \\\\u0c97\\\\u0c82\\\\u0c9f\\\\u0cc6\\\,d:\\\\\\\u0c92\\\\u0c82\\\\u0ca6\\\\u0cc1 \\\\u0ca6\\\\u0cbf\\\\u0ca8\\\,dd:\\\%d \\\\u0ca6\\\\u0cbf\\\\u0ca8\\\,M:\\\\\\\u0c92\\\\u0c82\\\\u0ca6\\\\u0cc1 \\\\u0ca4\\\\u0cbf\\\\u0c82\\\\u0c97\\\\u0cb3\\\\u0cc1\\\,MM:\\\%d \\\\u0ca4\\\\u0cbf\\\\u0c82\\\\u0c97\\\\u0cb3\\\\u0cc1\\\,y:\\\\\\\u0c92\\\\u0c82\\\\u0ca6\\\\u0cc1 \\\\u0cb5\\\\u0cb0\\\\u0ccd\\\\u0cb7\\\,yy:\\\%d \\\\u0cb5\\\\u0cb0\\\\u0ccd\\\\u0cb7\\\},preparse:function(e){return e.replace(/\\\\u0ce7\\\\u0ce8\\\\u0ce9\\\\u0cea\\\\u0ceb\\\\u0cec\\\\u0ced\\\\u0cee\\\\u0cef\\\\u0ce6/g,function(e){return _ne})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return rne})},meridiemParse:/\\\\u0cb0\\\\u0cbe\\\\u0ca4\\\\u0ccd\\\\u0cb0\\\\u0cbf|\\\\u0cac\\\\u0cc6\\\\u0cb3\\\\u0cbf\\\\u0c97\\\\u0ccd\\\\u0c97\\\\u0cc6|\\\\u0cae\\\\u0ca7\\\\u0ccd\\\\u0caf\\\\u0cbe\\\\u0cb9\\\\u0ccd\\\\u0ca8|\\\\u0cb8\\\\u0c82\\\\u0c9c\\\\u0cc6/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0cb0\\\\u0cbe\\\\u0ca4\\\\u0ccd\\\\u0cb0\\\\u0cbf\\\a?e\u003C4?e:e+12:\\\\\\\u0cac\\\\u0cc6\\\\u0cb3\\\\u0cbf\\\\u0c97\\\\u0ccd\\\\u0c97\\\\u0cc6\\\a?e:\\\\\\\u0cae\\\\u0ca7\\\\u0ccd\\\\u0caf\\\\u0cbe\\\\u0cb9\\\\u0ccd\\\\u0ca8\\\a?10\u003Ce?e:e+12:\\\\\\\u0cb8\\\\u0c82\\\\u0c9c\\\\u0cc6\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0cb0\\\\u0cbe\\\\u0ca4\\\\u0ccd\\\\u0cb0\\\\u0cbf\\\:e\u003C10?\\\\\\\u0cac\\\\u0cc6\\\\u0cb3\\\\u0cbf\\\\u0c97\\\\u0ccd\\\\u0c97\\\\u0cc6\\\:e\u003C17?\\\\\\\u0cae\\\\u0ca7\\\\u0ccd\\\\u0caf\\\\u0cbe\\\\u0cb9\\\\u0ccd\\\\u0ca8\\\:e\u003C20?\\\\\\\u0cb8\\\\u0c82\\\\u0c9c\\\\u0cc6\\\:\\\\\\\u0cb0\\\\u0cbe\\\\u0ca4\\\\u0ccd\\\\u0cb0\\\\u0cbf\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(\\\\u0ca8\\\\u0cc6\\\\u0cd5)/,ordinal:function(e){return e+\\\\\\\u0ca8\\\\u0cc6\\\\u0cd5\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\ko\\\,{months:\\\1\\\\uc6d4_2\\\\uc6d4_3\\\\uc6d4_4\\\\uc6d4_5\\\\uc6d4_6\\\\uc6d4_7\\\\uc6d4_8\\\\uc6d4_9\\\\uc6d4_10\\\\uc6d4_11\\\\uc6d4_12\\\\uc6d4\\\.split(\\\_\\\),monthsShort:\\\1\\\\uc6d4_2\\\\uc6d4_3\\\\uc6d4_4\\\\uc6d4_5\\\\uc6d4_6\\\\uc6d4_7\\\\uc6d4_8\\\\uc6d4_9\\\\uc6d4_10\\\\uc6d4_11\\\\uc6d4_12\\\\uc6d4\\\.split(\\\_\\\),weekdays:\\\\\\\uc77c\\\\uc694\\\\uc77c_\\\\uc6d4\\\\uc694\\\\uc77c_\\\\ud654\\\\uc694\\\\uc77c_\\\\uc218\\\\uc694\\\\uc77c_\\\\ubaa9\\\\uc694\\\\uc77c_\\\\uae08\\\\uc694\\\\uc77c_\\\\ud1a0\\\\uc694\\\\uc77c\\\.split(\\\_\\\),weekdaysShort:\\\\\\\uc77c_\\\\uc6d4_\\\\ud654_\\\\uc218_\\\\ubaa9_\\\\uae08_\\\\ud1a0\\\.split(\\\_\\\),weekdaysMin:\\\\\\\uc77c_\\\\uc6d4_\\\\ud654_\\\\uc218_\\\\ubaa9_\\\\uae08_\\\\ud1a0\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm\\\,LTS:\\\A h:mm:ss\\\,L:\\\YYYY.MM.DD.\\\,LL:\\\YYYY\\\\ub144 MMMM D\\\\uc77c\\\,LLL:\\\YYYY\\\\ub144 MMMM D\\\\uc77c A h:mm\\\,LLLL:\\\YYYY\\\\ub144 MMMM D\\\\uc77c dddd A h:mm\\\,l:\\\YYYY.MM.DD.\\\,ll:\\\YYYY\\\\ub144 MMMM D\\\\uc77c\\\,lll:\\\YYYY\\\\ub144 MMMM D\\\\uc77c A h:mm\\\,llll:\\\YYYY\\\\ub144 MMMM D\\\\uc77c dddd A h:mm\\\},calendar:{sameDay:\\\\\\\uc624\\\\ub298 LT\\\,nextDay:\\\\\\\ub0b4\\\\uc77c LT\\\,nextWeek:\\\dddd LT\\\,lastDay:\\\\\\\uc5b4\\\\uc81c LT\\\,lastWeek:\\\\\\\uc9c0\\\\ub09c\\\\uc8fc dddd LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\ud6c4\\\,past:\\\%s \\\\uc804\\\,s:\\\\\\\uba87 \\\\ucd08\\\,ss:\\\%d\\\\ucd08\\\,m:\\\1\\\\ubd84\\\,mm:\\\%d\\\\ubd84\\\,h:\\\\\\\ud55c \\\\uc2dc\\\\uac04\\\,hh:\\\%d\\\\uc2dc\\\\uac04\\\,d:\\\\\\\ud558\\\\ub8e8\\\,dd:\\\%d\\\\uc77c\\\,M:\\\\\\\ud55c \\\\ub2ec\\\,MM:\\\%d\\\\ub2ec\\\,y:\\\\\\\uc77c \\\\ub144\\\,yy:\\\%d\\\\ub144\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(\\\\uc77c|\\\\uc6d4|\\\\uc8fc)/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\\\\\uc77c\\\;case\\\M\\\:return e+\\\\\\\uc6d4\\\;case\\\w\\\:case\\\W\\\:return e+\\\\\\\uc8fc\\\;default:return e}},meridiemParse:/\\\\uc624\\\\uc804|\\\\uc624\\\\ud6c4/,isPM:function(e){return\\\\\\\uc624\\\\ud6c4\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\uc624\\\\uc804\\\:\\\\\\\uc624\\\\ud6c4\\\}});var on{1:\\\\\\\u0661\\\,2:\\\\\\\u0662\\\,3:\\\\\\\u0663\\\,4:\\\\\\\u0664\\\,5:\\\\\\\u0665\\\,6:\\\\\\\u0666\\\,7:\\\\\\\u0667\\\,8:\\\\\\\u0668\\\,9:\\\\\\\u0669\\\,0:\\\\\\\u0660\\\},mn{\\\\\\\u0661\\\:\\\1\\\,\\\\\\\u0662\\\:\\\2\\\,\\\\\\\u0663\\\:\\\3\\\,\\\\\\\u0664\\\:\\\4\\\,\\\\\\\u0665\\\:\\\5\\\,\\\\\\\u0666\\\:\\\6\\\,\\\\\\\u0667\\\:\\\7\\\,\\\\\\\u0668\\\:\\\8\\\,\\\\\\\u0669\\\:\\\9\\\,\\\\\\\u0660\\\:\\\0\\\},un\\\\\\\u06a9\\\\u0627\\\\u0646\\\\u0648\\\\u0646\\\\u06cc \\\\u062f\\\\u0648\\\\u0648\\\\u06d5\\\\u0645\\\,\\\\\\\u0634\\\\u0648\\\\u0628\\\\u0627\\\\u062a\\\,\\\\\\\u0626\\\\u0627\\\\u0632\\\\u0627\\\\u0631\\\,\\\\\\\u0646\\\\u06cc\\\\u0633\\\\u0627\\\\u0646\\\,\\\\\\\u0626\\\\u0627\\\\u06cc\\\\u0627\\\\u0631\\\,\\\\\\\u062d\\\\u0648\\\\u0632\\\\u06d5\\\\u06cc\\\\u0631\\\\u0627\\\\u0646\\\,\\\\\\\u062a\\\\u06d5\\\\u0645\\\\u0645\\\\u0648\\\\u0632\\\,\\\\\\\u0626\\\\u0627\\\\u0628\\\,\\\\\\\u0626\\\\u06d5\\\\u06cc\\\\u0644\\\\u0648\\\\u0648\\\\u0644\\\,\\\\\\\u062a\\\\u0634\\\\u0631\\\\u06cc\\\\u0646\\\\u06cc \\\\u06cc\\\\u06d5\\\\u0643\\\\u06d5\\\\u0645\\\,\\\\\\\u062a\\\\u0634\\\\u0631\\\\u06cc\\\\u0646\\\\u06cc \\\\u062f\\\\u0648\\\\u0648\\\\u06d5\\\\u0645\\\,\\\\\\\u0643\\\\u0627\\\\u0646\\\\u0648\\\\u0646\\\\u06cc \\\\u06cc\\\\u06d5\\\\u06a9\\\\u06d5\\\\u0645\\\;l.defineLocale(\\\ku\\\,{months:un,monthsShort:un,weekdays:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c_\\\\u062f\\\\u0648\\\\u0648\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c_\\\\u0633\\\\u06ce\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c_\\\\u0686\\\\u0648\\\\u0627\\\\u0631\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c_\\\\u067e\\\\u06ce\\\\u0646\\\\u062c\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c_\\\\u0647\\\\u0647\\\\u200c\\\\u06cc\\\\u0646\\\\u06cc_\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643\\\\u0634\\\\u0647\\\\u200c\\\\u0645_\\\\u062f\\\\u0648\\\\u0648\\\\u0634\\\\u0647\\\\u200c\\\\u0645_\\\\u0633\\\\u06ce\\\\u0634\\\\u0647\\\\u200c\\\\u0645_\\\\u0686\\\\u0648\\\\u0627\\\\u0631\\\\u0634\\\\u0647\\\\u200c\\\\u0645_\\\\u067e\\\\u06ce\\\\u0646\\\\u062c\\\\u0634\\\\u0647\\\\u200c\\\\u0645_\\\\u0647\\\\u0647\\\\u200c\\\\u06cc\\\\u0646\\\\u06cc_\\\\u0634\\\\u0647\\\\u200c\\\\u0645\\\\u0645\\\\u0647\\\\u200c\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u06cc_\\\\u062f_\\\\u0633_\\\\u0686_\\\\u067e_\\\\u0647_\\\\u0634\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0626\\\\u06ce\\\\u0648\\\\u0627\\\\u0631\\\\u0647\\\\u200c|\\\\u0628\\\\u0647\\\\u200c\\\\u06cc\\\\u0627\\\\u0646\\\\u06cc/,isPM:function(e){return/\\\\u0626\\\\u06ce\\\\u0648\\\\u0627\\\\u0631\\\\u0647\\\\u200c/.test(e)},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0628\\\\u0647\\\\u200c\\\\u06cc\\\\u0627\\\\u0646\\\\u06cc\\\:\\\\\\\u0626\\\\u06ce\\\\u0648\\\\u0627\\\\u0631\\\\u0647\\\\u200c\\\},calendar:{sameDay:\\\\\\\u0626\\\\u0647\\\\u200c\\\\u0645\\\\u0631\\\\u06c6 \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631 LT\\\,nextDay:\\\\\\\u0628\\\\u0647\\\\u200c\\\\u06cc\\\\u0627\\\\u0646\\\\u06cc \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631 LT\\\,nextWeek:\\\dddd \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631 LT\\\,lastDay:\\\\\\\u062f\\\\u0648\\\\u06ce\\\\u0646\\\\u06ce \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631 LT\\\,lastWeek:\\\dddd \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0644\\\\u0647\\\\u200c %s\\\,past:\\\%s\\\,s:\\\\\\\u0686\\\\u0647\\\\u200c\\\\u0646\\\\u062f \\\\u0686\\\\u0631\\\\u0643\\\\u0647\\\\u200c\\\\u06cc\\\\u0647\\\\u200c\\\\u0643\\\,ss:\\\\\\\u0686\\\\u0631\\\\u0643\\\\u0647\\\\u200c %d\\\,m:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643 \\\\u062e\\\\u0648\\\\u0644\\\\u0647\\\\u200c\\\\u0643\\\,mm:\\\%d \\\\u062e\\\\u0648\\\\u0644\\\\u0647\\\\u200c\\\\u0643\\\,h:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643 \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631\\\,hh:\\\%d \\\\u0643\\\\u0627\\\\u062a\\\\u0698\\\\u0645\\\\u06ce\\\\u0631\\\,d:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643 \\\\u0695\\\\u06c6\\\\u0698\\\,dd:\\\%d \\\\u0695\\\\u06c6\\\\u0698\\\,M:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643 \\\\u0645\\\\u0627\\\\u0646\\\\u06af\\\,MM:\\\%d \\\\u0645\\\\u0627\\\\u0646\\\\u06af\\\,y:\\\\\\\u06cc\\\\u0647\\\\u200c\\\\u0643 \\\\u0633\\\\u0627\\\\u06b5\\\,yy:\\\%d \\\\u0633\\\\u0627\\\\u06b5\\\},preparse:function(e){return e.replace(/\\\\u0661\\\\u0662\\\\u0663\\\\u0664\\\\u0665\\\\u0666\\\\u0667\\\\u0668\\\\u0669\\\\u0660/g,function(e){return mne}).replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/\\\\d/g,function(e){return one}).replace(/,/g,\\\\\\\u060c\\\)},week:{dow:6,doy:12}});var ln{0:\\\-\\\\u0447\\\\u04af\\\,1:\\\-\\\\u0447\\\\u0438\\\,2:\\\-\\\\u0447\\\\u0438\\\,3:\\\-\\\\u0447\\\\u04af\\\,4:\\\-\\\\u0447\\\\u04af\\\,5:\\\-\\\\u0447\\\\u0438\\\,6:\\\-\\\\u0447\\\\u044b\\\,7:\\\-\\\\u0447\\\\u0438\\\,8:\\\-\\\\u0447\\\\u0438\\\,9:\\\-\\\\u0447\\\\u0443\\\,10:\\\-\\\\u0447\\\\u0443\\\,20:\\\-\\\\u0447\\\\u044b\\\,30:\\\-\\\\u0447\\\\u0443\\\,40:\\\-\\\\u0447\\\\u044b\\\,50:\\\-\\\\u0447\\\\u04af\\\,60:\\\-\\\\u0447\\\\u044b\\\,70:\\\-\\\\u0447\\\\u0438\\\,80:\\\-\\\\u0447\\\\u0438\\\,90:\\\-\\\\u0447\\\\u0443\\\,100:\\\-\\\\u0447\\\\u04af\\\};function Mn(e,a,t,s){var n{m:\\\eng Minutt\\\,\\\enger Minutt\\\,h:\\\eng Stonn\\\,\\\enger Stonn\\\,d:\\\een Dag\\\,\\\engem Dag\\\,M:\\\ee Mount\\\,\\\engem Mount\\\,y:\\\ee Joer\\\,\\\engem Joer\\\};return a?nt0:nt1}function hn(e){if(eparseInt(e,10),isNaN(e))return!1;if(e\u003C0)return!0;if(e\u003C10)return 4\u003Ce&&e\u003C7;if(e\u003C100){var ae%10;return hn(0a?e/10:a)}if(e\u003C1e4){for(;10\u003Ce;)e/10;return hn(e)}return hn(e/1e3)}l.defineLocale(\\\ky\\\,{months:\\\\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044c_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044c_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044c_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d\\\\u044c_\\\\u0438\\\\u044e\\\\u043b\\\\u044c_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044c\\\.split(\\\_\\\),monthsShort:\\\\\\\u044f\\\\u043d\\\\u0432_\\\\u0444\\\\u0435\\\\u0432_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d\\\\u044c_\\\\u0438\\\\u044e\\\\u043b\\\\u044c_\\\\u0430\\\\u0432\\\\u0433_\\\\u0441\\\\u0435\\\\u043d_\\\\u043e\\\\u043a\\\\u0442_\\\\u043d\\\\u043e\\\\u044f_\\\\u0434\\\\u0435\\\\u043a\\\.split(\\\_\\\),weekdays:\\\\\\\u0416\\\\u0435\\\\u043a\\\\u0448\\\\u0435\\\\u043c\\\\u0431\\\\u0438_\\\\u0414\\\\u04af\\\\u0439\\\\u0448\\\\u04e9\\\\u043c\\\\u0431\\\\u04af_\\\\u0428\\\\u0435\\\\u0439\\\\u0448\\\\u0435\\\\u043c\\\\u0431\\\\u0438_\\\\u0428\\\\u0430\\\\u0440\\\\u0448\\\\u0435\\\\u043c\\\\u0431\\\\u0438_\\\\u0411\\\\u0435\\\\u0439\\\\u0448\\\\u0435\\\\u043c\\\\u0431\\\\u0438_\\\\u0416\\\\u0443\\\\u043c\\\\u0430_\\\\u0418\\\\u0448\\\\u0435\\\\u043c\\\\u0431\\\\u0438\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0416\\\\u0435\\\\u043a_\\\\u0414\\\\u04af\\\\u0439_\\\\u0428\\\\u0435\\\\u0439_\\\\u0428\\\\u0430\\\\u0440_\\\\u0411\\\\u0435\\\\u0439_\\\\u0416\\\\u0443\\\\u043c_\\\\u0418\\\\u0448\\\\u0435\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0416\\\\u043a_\\\\u0414\\\\u0439_\\\\u0428\\\\u0439_\\\\u0428\\\\u0440_\\\\u0411\\\\u0439_\\\\u0416\\\\u043c_\\\\u0418\\\\u0448\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0411\\\\u04af\\\\u0433\\\\u04af\\\\u043d \\\\u0441\\\\u0430\\\\u0430\\\\u0442 LT\\\,nextDay:\\\\\\\u042d\\\\u0440\\\\u0442\\\\u0435\\\\u04a3 \\\\u0441\\\\u0430\\\\u0430\\\\u0442 LT\\\,nextWeek:\\\dddd \\\\u0441\\\\u0430\\\\u0430\\\\u0442 LT\\\,lastDay:\\\\\\\u041a\\\\u0435\\\\u0447\\\\u044d\\\\u044d \\\\u0441\\\\u0430\\\\u0430\\\\u0442 LT\\\,lastWeek:\\\\\\\u04e8\\\\u0442\\\\u043a\\\\u04e9\\\\u043d \\\\u0430\\\\u043f\\\\u0442\\\\u0430\\\\u043d\\\\u044b\\\\u043d dddd \\\\u043a\\\\u04af\\\\u043d\\\\u04af \\\\u0441\\\\u0430\\\\u0430\\\\u0442 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0438\\\\u0447\\\\u0438\\\\u043d\\\\u0434\\\\u0435\\\,past:\\\%s \\\\u043c\\\\u0443\\\\u0440\\\\u0443\\\\u043d\\\,s:\\\\\\\u0431\\\\u0438\\\\u0440\\\\u043d\\\\u0435\\\\u0447\\\\u0435 \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,ss:\\\%d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,m:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u043c\\\\u04af\\\\u043d\\\\u04e9\\\\u0442\\\,mm:\\\%d \\\\u043c\\\\u04af\\\\u043d\\\\u04e9\\\\u0442\\\,h:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0441\\\\u0430\\\\u0430\\\\u0442\\\,hh:\\\%d \\\\u0441\\\\u0430\\\\u0430\\\\u0442\\\,d:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u043a\\\\u04af\\\\u043d\\\,dd:\\\%d \\\\u043a\\\\u04af\\\\u043d\\\,M:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0430\\\\u0439\\\,MM:\\\%d \\\\u0430\\\\u0439\\\,y:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0436\\\\u044b\\\\u043b\\\,yy:\\\%d \\\\u0436\\\\u044b\\\\u043b\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0447\\\\u0438|\\\\u0447\\\\u044b|\\\\u0447\\\\u04af|\\\\u0447\\\\u0443)/,ordinal:function(e){return e+(lne||lne%10||ln100\u003Ce?100:null)},week:{dow:1,doy:7}}),l.defineLocale(\\\lb\\\,{months:\\\Januar_Februar_M\\\\xe4erz_Abr\\\\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\\\.split(\\\_\\\),monthsShort:\\\Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\Sonndeg_M\\\\xe9indeg_D\\\\xebnschdeg_M\\\\xebttwoch_Donneschdeg_Freideg_Samschdeg\\\.split(\\\_\\\),weekdaysShort:\\\So._M\\\\xe9._D\\\\xeb._M\\\\xeb._Do._Fr._Sa.\\\.split(\\\_\\\),weekdaysMin:\\\So_M\\\\xe9_D\\\\xeb_M\\\\xeb_Do_Fr_Sa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm Auer\\\,LTS:\\\H:mm:ss Auer\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm Auer\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm Auer\\\},calendar:{sameDay:\\\Haut um LT\\\,sameElse:\\\L\\\,nextDay:\\\Muer um LT\\\,nextWeek:\\\dddd um LT\\\,lastDay:\\\G\\\\xebschter um LT\\\,lastWeek:function(){switch(this.day()){case 2:case 4:return\\\Leschten dddd um LT\\\;default:return\\\Leschte dddd um LT\\\}}},relativeTime:{future:function(e){return hn(e.substr(0,e.indexOf(\\\ \\\)))?\\\a \\\+e:\\\an \\\+e},past:function(e){return hn(e.substr(0,e.indexOf(\\\ \\\)))?\\\viru \\\+e:\\\virun \\\+e},s:\\\e puer Sekonnen\\\,ss:\\\%d Sekonnen\\\,m:Mn,mm:\\\%d Minutten\\\,h:Mn,hh:\\\%d Stonnen\\\,d:Mn,dd:\\\%d Deeg\\\,M:Mn,MM:\\\%d M\\\\xe9int\\\,y:Mn,yy:\\\%d Joer\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\lo\\\,{months:\\\\\\\u0ea1\\\\u0eb1\\\\u0e87\\\\u0e81\\\\u0ead\\\\u0e99_\\\\u0e81\\\\u0eb8\\\\u0ea1\\\\u0e9e\\\\u0eb2_\\\\u0ea1\\\\u0eb5\\\\u0e99\\\\u0eb2_\\\\u0ec0\\\\u0ea1\\\\u0eaa\\\\u0eb2_\\\\u0e9e\\\\u0eb6\\\\u0e94\\\\u0eaa\\\\u0eb0\\\\u0e9e\\\\u0eb2_\\\\u0ea1\\\\u0eb4\\\\u0e96\\\\u0eb8\\\\u0e99\\\\u0eb2_\\\\u0e81\\\\u0ecd\\\\u0ea5\\\\u0eb0\\\\u0e81\\\\u0ebb\\\\u0e94_\\\\u0eaa\\\\u0eb4\\\\u0e87\\\\u0eab\\\\u0eb2_\\\\u0e81\\\\u0eb1\\\\u0e99\\\\u0e8d\\\\u0eb2_\\\\u0e95\\\\u0eb8\\\\u0ea5\\\\u0eb2_\\\\u0e9e\\\\u0eb0\\\\u0e88\\\\u0eb4\\\\u0e81_\\\\u0e97\\\\u0eb1\\\\u0e99\\\\u0ea7\\\\u0eb2\\\.split(\\\_\\\),monthsShort:\\\\\\\u0ea1\\\\u0eb1\\\\u0e87\\\\u0e81\\\\u0ead\\\\u0e99_\\\\u0e81\\\\u0eb8\\\\u0ea1\\\\u0e9e\\\\u0eb2_\\\\u0ea1\\\\u0eb5\\\\u0e99\\\\u0eb2_\\\\u0ec0\\\\u0ea1\\\\u0eaa\\\\u0eb2_\\\\u0e9e\\\\u0eb6\\\\u0e94\\\\u0eaa\\\\u0eb0\\\\u0e9e\\\\u0eb2_\\\\u0ea1\\\\u0eb4\\\\u0e96\\\\u0eb8\\\\u0e99\\\\u0eb2_\\\\u0e81\\\\u0ecd\\\\u0ea5\\\\u0eb0\\\\u0e81\\\\u0ebb\\\\u0e94_\\\\u0eaa\\\\u0eb4\\\\u0e87\\\\u0eab\\\\u0eb2_\\\\u0e81\\\\u0eb1\\\\u0e99\\\\u0e8d\\\\u0eb2_\\\\u0e95\\\\u0eb8\\\\u0ea5\\\\u0eb2_\\\\u0e9e\\\\u0eb0\\\\u0e88\\\\u0eb4\\\\u0e81_\\\\u0e97\\\\u0eb1\\\\u0e99\\\\u0ea7\\\\u0eb2\\\.split(\\\_\\\),weekdays:\\\\\\\u0ead\\\\u0eb2\\\\u0e97\\\\u0eb4\\\\u0e94_\\\\u0e88\\\\u0eb1\\\\u0e99_\\\\u0ead\\\\u0eb1\\\\u0e87\\\\u0e84\\\\u0eb2\\\\u0e99_\\\\u0e9e\\\\u0eb8\\\\u0e94_\\\\u0e9e\\\\u0eb0\\\\u0eab\\\\u0eb1\\\\u0e94_\\\\u0eaa\\\\u0eb8\\\\u0e81_\\\\u0ec0\\\\u0eaa\\\\u0ebb\\\\u0eb2\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0e97\\\\u0eb4\\\\u0e94_\\\\u0e88\\\\u0eb1\\\\u0e99_\\\\u0ead\\\\u0eb1\\\\u0e87\\\\u0e84\\\\u0eb2\\\\u0e99_\\\\u0e9e\\\\u0eb8\\\\u0e94_\\\\u0e9e\\\\u0eb0\\\\u0eab\\\\u0eb1\\\\u0e94_\\\\u0eaa\\\\u0eb8\\\\u0e81_\\\\u0ec0\\\\u0eaa\\\\u0ebb\\\\u0eb2\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0e97_\\\\u0e88_\\\\u0ead\\\\u0e84_\\\\u0e9e_\\\\u0e9e\\\\u0eab_\\\\u0eaa\\\\u0e81_\\\\u0eaa\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\\\\\u0ea7\\\\u0eb1\\\\u0e99dddd D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0e95\\\\u0ead\\\\u0e99\\\\u0ec0\\\\u0e8a\\\\u0ebb\\\\u0ec9\\\\u0eb2|\\\\u0e95\\\\u0ead\\\\u0e99\\\\u0ec1\\\\u0ea5\\\\u0e87/,isPM:function(e){return\\\\\\\u0e95\\\\u0ead\\\\u0e99\\\\u0ec1\\\\u0ea5\\\\u0e87\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0e95\\\\u0ead\\\\u0e99\\\\u0ec0\\\\u0e8a\\\\u0ebb\\\\u0ec9\\\\u0eb2\\\:\\\\\\\u0e95\\\\u0ead\\\\u0e99\\\\u0ec1\\\\u0ea5\\\\u0e87\\\},calendar:{sameDay:\\\\\\\u0ea1\\\\u0eb7\\\\u0ec9\\\\u0e99\\\\u0eb5\\\\u0ec9\\\\u0ec0\\\\u0ea7\\\\u0ea5\\\\u0eb2 LT\\\,nextDay:\\\\\\\u0ea1\\\\u0eb7\\\\u0ec9\\\\u0ead\\\\u0eb7\\\\u0ec8\\\\u0e99\\\\u0ec0\\\\u0ea7\\\\u0ea5\\\\u0eb2 LT\\\,nextWeek:\\\\\\\u0ea7\\\\u0eb1\\\\u0e99dddd\\\\u0edc\\\\u0ec9\\\\u0eb2\\\\u0ec0\\\\u0ea7\\\\u0ea5\\\\u0eb2 LT\\\,lastDay:\\\\\\\u0ea1\\\\u0eb7\\\\u0ec9\\\\u0ea7\\\\u0eb2\\\\u0e99\\\\u0e99\\\\u0eb5\\\\u0ec9\\\\u0ec0\\\\u0ea7\\\\u0ea5\\\\u0eb2 LT\\\,lastWeek:\\\\\\\u0ea7\\\\u0eb1\\\\u0e99dddd\\\\u0ec1\\\\u0ea5\\\\u0ec9\\\\u0ea7\\\\u0e99\\\\u0eb5\\\\u0ec9\\\\u0ec0\\\\u0ea7\\\\u0ea5\\\\u0eb2 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0ead\\\\u0eb5\\\\u0e81 %s\\\,past:\\\%s\\\\u0e9c\\\\u0ec8\\\\u0eb2\\\\u0e99\\\\u0ea1\\\\u0eb2\\\,s:\\\\\\\u0e9a\\\\u0ecd\\\\u0ec8\\\\u0ec0\\\\u0e97\\\\u0ebb\\\\u0ec8\\\\u0eb2\\\\u0ec3\\\\u0e94\\\\u0ea7\\\\u0eb4\\\\u0e99\\\\u0eb2\\\\u0e97\\\\u0eb5\\\,ss:\\\%d \\\\u0ea7\\\\u0eb4\\\\u0e99\\\\u0eb2\\\\u0e97\\\\u0eb5\\\,m:\\\1 \\\\u0e99\\\\u0eb2\\\\u0e97\\\\u0eb5\\\,mm:\\\%d \\\\u0e99\\\\u0eb2\\\\u0e97\\\\u0eb5\\\,h:\\\1 \\\\u0e8a\\\\u0ebb\\\\u0ec8\\\\u0ea7\\\\u0ec2\\\\u0ea1\\\\u0e87\\\,hh:\\\%d \\\\u0e8a\\\\u0ebb\\\\u0ec8\\\\u0ea7\\\\u0ec2\\\\u0ea1\\\\u0e87\\\,d:\\\1 \\\\u0ea1\\\\u0eb7\\\\u0ec9\\\,dd:\\\%d \\\\u0ea1\\\\u0eb7\\\\u0ec9\\\,M:\\\1 \\\\u0ec0\\\\u0e94\\\\u0eb7\\\\u0ead\\\\u0e99\\\,MM:\\\%d \\\\u0ec0\\\\u0e94\\\\u0eb7\\\\u0ead\\\\u0e99\\\,y:\\\1 \\\\u0e9b\\\\u0eb5\\\,yy:\\\%d \\\\u0e9b\\\\u0eb5\\\},dayOfMonthOrdinalParse:/(\\\\u0e97\\\\u0eb5\\\\u0ec8)\\\\d{1,2}/,ordinal:function(e){return\\\\\\\u0e97\\\\u0eb5\\\\u0ec8\\\+e}});var Ln{ss:\\\sekund\\\\u0117_sekund\\\\u017ei\\\\u0173_sekundes\\\,m:\\\minut\\\\u0117_minut\\\\u0117s_minut\\\\u0119\\\,mm:\\\minut\\\\u0117s_minu\\\\u010di\\\\u0173_minutes\\\,h:\\\valanda_valandos_valand\\\\u0105\\\,hh:\\\valandos_valand\\\\u0173_valandas\\\,d:\\\diena_dienos_dien\\\\u0105\\\,dd:\\\dienos_dien\\\\u0173_dienas\\\,M:\\\m\\\\u0117nuo_m\\\\u0117nesio_m\\\\u0117nes\\\\u012f\\\,MM:\\\m\\\\u0117nesiai_m\\\\u0117nesi\\\\u0173_m\\\\u0117nesius\\\,y:\\\metai_met\\\\u0173_metus\\\,yy:\\\metai_met\\\\u0173_metus\\\};function cn(e,a,t,s){return a?yn(t)0:s?yn(t)1:yn(t)2}function Yn(e){return e%100||10\u003Ce&&e\u003C20}function yn(e){return Lne.split(\\\_\\\)}function fn(e,a,t,s){var ne+\\\ \\\;return 1e?n+cn(0,a,t0,s):a?n+(Yn(e)?yn(t)1:yn(t)0):s?n+yn(t)1:n+(Yn(e)?yn(t)1:yn(t)2)}l.defineLocale(\\\lt\\\,{months:{format:\\\sausio_vasario_kovo_baland\\\\u017eio_gegu\\\\u017e\\\\u0117s_bir\\\\u017eelio_liepos_rugpj\\\\u016b\\\\u010dio_rugs\\\\u0117jo_spalio_lapkri\\\\u010dio_gruod\\\\u017eio\\\.split(\\\_\\\),standalone:\\\sausis_vasaris_kovas_balandis_gegu\\\\u017e\\\\u0117_bir\\\\u017eelis_liepa_rugpj\\\\u016btis_rugs\\\\u0117jis_spalis_lapkritis_gruodis\\\.split(\\\_\\\),isFormat:/DoD?(\\\\^\\\\\\\\*\\\\|\\\\s)+MMMM?|MMMM?(\\\\^\\\\\\\\*\\\\|\\\\s)+DoD?/},monthsShort:\\\sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\\\.split(\\\_\\\),weekdays:{format:\\\sekmadien\\\\u012f_pirmadien\\\\u012f_antradien\\\\u012f_tre\\\\u010diadien\\\\u012f_ketvirtadien\\\\u012f_penktadien\\\\u012f_\\\\u0161e\\\\u0161tadien\\\\u012f\\\.split(\\\_\\\),standalone:\\\sekmadienis_pirmadienis_antradienis_tre\\\\u010diadienis_ketvirtadienis_penktadienis_\\\\u0161e\\\\u0161tadienis\\\.split(\\\_\\\),isFormat:/dddd HH:mm/},weekdaysShort:\\\Sek_Pir_Ant_Tre_Ket_Pen_\\\\u0160e\\\\u0161\\\.split(\\\_\\\),weekdaysMin:\\\S_P_A_T_K_Pn_\\\\u0160\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\YYYY m. MMMM D d.\\\,LLL:\\\YYYY m. MMMM D d., HH:mm val.\\\,LLLL:\\\YYYY m. MMMM D d., dddd, HH:mm val.\\\,l:\\\YYYY-MM-DD\\\,ll:\\\YYYY m. MMMM D d.\\\,lll:\\\YYYY m. MMMM D d., HH:mm val.\\\,llll:\\\YYYY m. MMMM D d., ddd, HH:mm val.\\\},calendar:{sameDay:\\\\\\\u0160iandien LT\\\,nextDay:\\\Rytoj LT\\\,nextWeek:\\\dddd LT\\\,lastDay:\\\Vakar LT\\\,lastWeek:\\\Pra\\\\u0117jus\\\\u012f dddd LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\po %s\\\,past:\\\prie\\\\u0161 %s\\\,s:function(e,a,t,s){return a?\\\kelios sekund\\\\u0117s\\\:s?\\\keli\\\\u0173 sekund\\\\u017ei\\\\u0173\\\:\\\kelias sekundes\\\},ss:fn,m:cn,mm:fn,h:cn,hh:fn,d:cn,dd:fn,M:cn,MM:fn,y:cn,yy:fn},dayOfMonthOrdinalParse:/\\\\d{1,2}-oji/,ordinal:function(e){return e+\\\-oji\\\},week:{dow:1,doy:4}});var kn{ss:\\\sekundes_sekund\\\\u0113m_sekunde_sekundes\\\.split(\\\_\\\),m:\\\min\\\\u016btes_min\\\\u016bt\\\\u0113m_min\\\\u016bte_min\\\\u016btes\\\.split(\\\_\\\),mm:\\\min\\\\u016btes_min\\\\u016bt\\\\u0113m_min\\\\u016bte_min\\\\u016btes\\\.split(\\\_\\\),h:\\\stundas_stund\\\\u0101m_stunda_stundas\\\.split(\\\_\\\),hh:\\\stundas_stund\\\\u0101m_stunda_stundas\\\.split(\\\_\\\),d:\\\dienas_dien\\\\u0101m_diena_dienas\\\.split(\\\_\\\),dd:\\\dienas_dien\\\\u0101m_diena_dienas\\\.split(\\\_\\\),M:\\\m\\\\u0113ne\\\\u0161a_m\\\\u0113ne\\\\u0161iem_m\\\\u0113nesis_m\\\\u0113ne\\\\u0161i\\\.split(\\\_\\\),MM:\\\m\\\\u0113ne\\\\u0161a_m\\\\u0113ne\\\\u0161iem_m\\\\u0113nesis_m\\\\u0113ne\\\\u0161i\\\.split(\\\_\\\),y:\\\gada_gadiem_gads_gadi\\\.split(\\\_\\\),yy:\\\gada_gadiem_gads_gadi\\\.split(\\\_\\\)};function pn(e,a,t){return t?a%101&&a%100!11?e2:e3:a%101&&a%100!11?e0:e1}function Dn(e,a,t){return e+\\\ \\\+pn(knt,e,a)}function Tn(e,a,t){return pn(knt,e,a)}l.defineLocale(\\\lv\\\,{months:\\\janv\\\\u0101ris_febru\\\\u0101ris_marts_apr\\\\u012blis_maijs_j\\\\u016bnijs_j\\\\u016blijs_augusts_septembris_oktobris_novembris_decembris\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_mai_j\\\\u016bn_j\\\\u016bl_aug_sep_okt_nov_dec\\\.split(\\\_\\\),weekdays:\\\sv\\\\u0113tdiena_pirmdiena_otrdiena_tre\\\\u0161diena_ceturtdiena_piektdiena_sestdiena\\\.split(\\\_\\\),weekdaysShort:\\\Sv_P_O_T_C_Pk_S\\\.split(\\\_\\\),weekdaysMin:\\\Sv_P_O_T_C_Pk_S\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY.\\\,LL:\\\YYYY. gada D. MMMM\\\,LLL:\\\YYYY. gada D. MMMM, HH:mm\\\,LLLL:\\\YYYY. gada D. MMMM, dddd, HH:mm\\\},calendar:{sameDay:\\\\\\\u0160odien pulksten LT\\\,nextDay:\\\R\\\\u012bt pulksten LT\\\,nextWeek:\\\dddd pulksten LT\\\,lastDay:\\\Vakar pulksten LT\\\,lastWeek:\\\Pag\\\\u0101ju\\\\u0161\\\\u0101 dddd pulksten LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\p\\\\u0113c %s\\\,past:\\\pirms %s\\\,s:function(e,a){return a?\\\da\\\\u017eas sekundes\\\:\\\da\\\\u017e\\\\u0101m sekund\\\\u0113m\\\},ss:Dn,m:Tn,mm:Dn,h:Tn,hh:Dn,d:Tn,dd:Dn,M:Tn,MM:Dn,y:Tn,yy:Dn},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var gn{words:{ss:\\\sekund\\\,\\\sekunda\\\,\\\sekundi\\\,m:\\\jedan minut\\\,\\\jednog minuta\\\,mm:\\\minut\\\,\\\minuta\\\,\\\minuta\\\,h:\\\jedan sat\\\,\\\jednog sata\\\,hh:\\\sat\\\,\\\sata\\\,\\\sati\\\,dd:\\\dan\\\,\\\dana\\\,\\\dana\\\,MM:\\\mjesec\\\,\\\mjeseca\\\,\\\mjeseci\\\,yy:\\\godina\\\,\\\godine\\\,\\\godina\\\},correctGrammaticalCase:function(e,a){return 1e?a0:2\u003Ce&&e\u003C4?a1:a2},translate:function(e,a,t){var sgn.wordst;return 1t.length?a?s0:s1:e+\\\ \\\+gn.correctGrammaticalCase(e,s)}};function wn(e,a,t,s){switch(t){case\\\s\\\:return a?\\\\\\\u0445\\\\u044d\\\\u0434\\\\u0445\\\\u044d\\\\u043d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\:\\\\\\\u0445\\\\u044d\\\\u0434\\\\u0445\\\\u044d\\\\u043d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b\\\\u043d\\\;case\\\ss\\\:return e+(a?\\\ \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\:\\\ \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b\\\\u043d\\\);case\\\m\\\:case\\\mm\\\:return e+(a?\\\ \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\:\\\ \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u044b\\\\u043d\\\);case\\\h\\\:case\\\hh\\\:return e+(a?\\\ \\\\u0446\\\\u0430\\\\u0433\\\:\\\ \\\\u0446\\\\u0430\\\\u0433\\\\u0438\\\\u0439\\\\u043d\\\);case\\\d\\\:case\\\dd\\\:return e+(a?\\\ \\\\u04e9\\\\u0434\\\\u04e9\\\\u0440\\\:\\\ \\\\u04e9\\\\u0434\\\\u0440\\\\u0438\\\\u0439\\\\u043d\\\);case\\\M\\\:case\\\MM\\\:return e+(a?\\\ \\\\u0441\\\\u0430\\\\u0440\\\:\\\ \\\\u0441\\\\u0430\\\\u0440\\\\u044b\\\\u043d\\\);case\\\y\\\:case\\\yy\\\:return e+(a?\\\ \\\\u0436\\\\u0438\\\\u043b\\\:\\\ \\\\u0436\\\\u0438\\\\u043b\\\\u0438\\\\u0439\\\\u043d\\\);default:return e}}l.defineLocale(\\\me\\\,{months:\\\januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\\\.split(\\\_\\\),monthsShort:\\\jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\nedjelja_ponedjeljak_utorak_srijeda_\\\\u010detvrtak_petak_subota\\\.split(\\\_\\\),weekdaysShort:\\\ned._pon._uto._sri._\\\\u010det._pet._sub.\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_ut_sr_\\\\u010de_pe_su\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\danas u LT\\\,nextDay:\\\sjutra u LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\u nedjelju u LT\\\;case 3:return\\\u srijedu u LT\\\;case 6:return\\\u subotu u LT\\\;case 1:case 2:case 4:case 5:return\\\u dddd u LT\\\}},lastDay:\\\ju\\\\u010de u LT\\\,lastWeek:function(){return\\\pro\\\\u0161le nedjelje u LT\\\,\\\pro\\\\u0161log ponedjeljka u LT\\\,\\\pro\\\\u0161log utorka u LT\\\,\\\pro\\\\u0161le srijede u LT\\\,\\\pro\\\\u0161log \\\\u010detvrtka u LT\\\,\\\pro\\\\u0161log petka u LT\\\,\\\pro\\\\u0161le subote u LT\\\this.day()},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\prije %s\\\,s:\\\nekoliko sekundi\\\,ss:gn.translate,m:gn.translate,mm:gn.translate,h:gn.translate,hh:gn.translate,d:\\\dan\\\,dd:gn.translate,M:\\\mjesec\\\,MM:gn.translate,y:\\\godinu\\\,yy:gn.translate},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}}),l.defineLocale(\\\mi\\\,{months:\\\Kohi-t\\\\u0101te_Hui-tanguru_Pout\\\\u016b-te-rangi_Paenga-wh\\\\u0101wh\\\\u0101_Haratua_Pipiri_H\\\\u014dngoingoi_Here-turi-k\\\\u014dk\\\\u0101_Mahuru_Whiringa-\\\\u0101-nuku_Whiringa-\\\\u0101-rangi_Hakihea\\\.split(\\\_\\\),monthsShort:\\\Kohi_Hui_Pou_Pae_Hara_Pipi_H\\\\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki\\\.split(\\\_\\\),monthsRegex:/(?:a-z\\\\u0101\\\\u014D\\\\u016B+\\\\-?){1,3}/i,monthsStrictRegex:/(?:a-z\\\\u0101\\\\u014D\\\\u016B+\\\\-?){1,3}/i,monthsShortRegex:/(?:a-z\\\\u0101\\\\u014D\\\\u016B+\\\\-?){1,3}/i,monthsShortStrictRegex:/(?:a-z\\\\u0101\\\\u014D\\\\u016B+\\\\-?){1,2}/i,weekdays:\\\R\\\\u0101tapu_Mane_T\\\\u016brei_Wenerei_T\\\\u0101ite_Paraire_H\\\\u0101tarei\\\.split(\\\_\\\),weekdaysShort:\\\Ta_Ma_T\\\\u016b_We_T\\\\u0101i_Pa_H\\\\u0101\\\.split(\\\_\\\),weekdaysMin:\\\Ta_Ma_T\\\\u016b_We_T\\\\u0101i_Pa_H\\\\u0101\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY i HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY i HH:mm\\\},calendar:{sameDay:\\\i teie mahana, i LT\\\,nextDay:\\\apopo i LT\\\,nextWeek:\\\dddd i LT\\\,lastDay:\\\inanahi i LT\\\,lastWeek:\\\dddd whakamutunga i LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\i roto i %s\\\,past:\\\%s i mua\\\,s:\\\te h\\\\u0113kona ruarua\\\,ss:\\\%d h\\\\u0113kona\\\,m:\\\he meneti\\\,mm:\\\%d meneti\\\,h:\\\te haora\\\,hh:\\\%d haora\\\,d:\\\he ra\\\,dd:\\\%d ra\\\,M:\\\he marama\\\,MM:\\\%d marama\\\,y:\\\he tau\\\,yy:\\\%d tau\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\mk\\\,{months:\\\\\\\u0458\\\\u0430\\\\u043d\\\\u0443\\\\u0430\\\\u0440\\\\u0438_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0443\\\\u0430\\\\u0440\\\\u0438_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0438\\\\u043b_\\\\u043c\\\\u0430\\\\u0458_\\\\u0458\\\\u0443\\\\u043d\\\\u0438_\\\\u0458\\\\u0443\\\\u043b\\\\u0438_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043f\\\\u0442\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u043e\\\\u043a\\\\u0442\\\\u043e\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u043d\\\\u043e\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438_\\\\u0434\\\\u0435\\\\u043a\\\\u0435\\\\u043c\\\\u0432\\\\u0440\\\\u0438\\\.split(\\\_\\\),monthsShort:\\\\\\\u0458\\\\u0430\\\\u043d_\\\\u0444\\\\u0435\\\\u0432_\\\\u043c\\\\u0430\\\\u0440_\\\\u0430\\\\u043f\\\\u0440_\\\\u043c\\\\u0430\\\\u0458_\\\\u0458\\\\u0443\\\\u043d_\\\\u0458\\\\u0443\\\\u043b_\\\\u0430\\\\u0432\\\\u0433_\\\\u0441\\\\u0435\\\\u043f_\\\\u043e\\\\u043a\\\\u0442_\\\\u043d\\\\u043e\\\\u0435_\\\\u0434\\\\u0435\\\\u043a\\\.split(\\\_\\\),weekdays:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u0430_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u043d\\\\u0438\\\\u043a_\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043d\\\\u0438\\\\u043a_\\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0430_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0440\\\\u0442\\\\u043e\\\\u043a_\\\\u043f\\\\u0435\\\\u0442\\\\u043e\\\\u043a_\\\\u0441\\\\u0430\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u043d\\\\u0435\\\\u0434_\\\\u043f\\\\u043e\\\\u043d_\\\\u0432\\\\u0442\\\\u043e_\\\\u0441\\\\u0440\\\\u0435_\\\\u0447\\\\u0435\\\\u0442_\\\\u043f\\\\u0435\\\\u0442_\\\\u0441\\\\u0430\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u043de_\\\\u043fo_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0435_\\\\u043f\\\\u0435_\\\\u0441a\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\D.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY H:mm\\\,LLLL:\\\dddd, D MMMM YYYY H:mm\\\},calendar:{sameDay:\\\\\\\u0414\\\\u0435\\\\u043d\\\\u0435\\\\u0441 \\\\u0432\\\\u043e LT\\\,nextDay:\\\\\\\u0423\\\\u0442\\\\u0440\\\\u0435 \\\\u0432\\\\u043e LT\\\,nextWeek:\\\\\\\u0412\\\\u043e dddd \\\\u0432\\\\u043e LT\\\,lastDay:\\\\\\\u0412\\\\u0447\\\\u0435\\\\u0440\\\\u0430 \\\\u0432\\\\u043e LT\\\,lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\\\\\\\u0418\\\\u0437\\\\u043c\\\\u0438\\\\u043d\\\\u0430\\\\u0442\\\\u0430\\\\u0442\\\\u0430 dddd \\\\u0432\\\\u043e LT\\\;case 1:case 2:case 4:case 5:return\\\\\\\u0418\\\\u0437\\\\u043c\\\\u0438\\\\u043d\\\\u0430\\\\u0442\\\\u0438\\\\u043e\\\\u0442 dddd \\\\u0432\\\\u043e LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u043f\\\\u043e\\\\u0441\\\\u043b\\\\u0435 %s\\\,past:\\\\\\\u043f\\\\u0440\\\\u0435\\\\u0434 %s\\\,s:\\\\\\\u043d\\\\u0435\\\\u043a\\\\u043e\\\\u043b\\\\u043a\\\\u0443 \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,ss:\\\%d \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,m:\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430\\\,mm:\\\%d \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0438\\\,h:\\\\\\\u0447\\\\u0430\\\\u0441\\\,hh:\\\%d \\\\u0447\\\\u0430\\\\u0441\\\\u0430\\\,d:\\\\\\\u0434\\\\u0435\\\\u043d\\\,dd:\\\%d \\\\u0434\\\\u0435\\\\u043d\\\\u0430\\\,M:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\,MM:\\\%d \\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\\u0438\\\,y:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\,yy:\\\%d \\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0438\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0435\\\\u0432|\\\\u0435\\\\u043d|\\\\u0442\\\\u0438|\\\\u0432\\\\u0438|\\\\u0440\\\\u0438|\\\\u043c\\\\u0438)/,ordinal:function(e){var ae%10,te%100;return 0e?e+\\\-\\\\u0435\\\\u0432\\\:0t?e+\\\-\\\\u0435\\\\u043d\\\:10\u003Ct&&t\u003C20?e+\\\-\\\\u0442\\\\u0438\\\:1a?e+\\\-\\\\u0432\\\\u0438\\\:2a?e+\\\-\\\\u0440\\\\u0438\\\:7a||8a?e+\\\-\\\\u043c\\\\u0438\\\:e+\\\-\\\\u0442\\\\u0438\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\ml\\\,{months:\\\\\\\u0d1c\\\\u0d28\\\\u0d41\\\\u0d35\\\\u0d30\\\\u0d3f_\\\\u0d2b\\\\u0d46\\\\u0d2c\\\\u0d4d\\\\u0d30\\\\u0d41\\\\u0d35\\\\u0d30\\\\u0d3f_\\\\u0d2e\\\\u0d3e\\\\u0d7c\\\\u0d1a\\\\u0d4d\\\\u0d1a\\\\u0d4d_\\\\u0d0f\\\\u0d2a\\\\u0d4d\\\\u0d30\\\\u0d3f\\\\u0d7d_\\\\u0d2e\\\\u0d47\\\\u0d2f\\\\u0d4d_\\\\u0d1c\\\\u0d42\\\\u0d7a_\\\\u0d1c\\\\u0d42\\\\u0d32\\\\u0d48_\\\\u0d13\\\\u0d17\\\\u0d38\\\\u0d4d\\\\u0d31\\\\u0d4d\\\\u0d31\\\\u0d4d_\\\\u0d38\\\\u0d46\\\\u0d2a\\\\u0d4d\\\\u0d31\\\\u0d4d\\\\u0d31\\\\u0d02\\\\u0d2c\\\\u0d7c_\\\\u0d12\\\\u0d15\\\\u0d4d\\\\u0d1f\\\\u0d4b\\\\u0d2c\\\\u0d7c_\\\\u0d28\\\\u0d35\\\\u0d02\\\\u0d2c\\\\u0d7c_\\\\u0d21\\\\u0d3f\\\\u0d38\\\\u0d02\\\\u0d2c\\\\u0d7c\\\.split(\\\_\\\),monthsShort:\\\\\\\u0d1c\\\\u0d28\\\\u0d41._\\\\u0d2b\\\\u0d46\\\\u0d2c\\\\u0d4d\\\\u0d30\\\\u0d41._\\\\u0d2e\\\\u0d3e\\\\u0d7c._\\\\u0d0f\\\\u0d2a\\\\u0d4d\\\\u0d30\\\\u0d3f._\\\\u0d2e\\\\u0d47\\\\u0d2f\\\\u0d4d_\\\\u0d1c\\\\u0d42\\\\u0d7a_\\\\u0d1c\\\\u0d42\\\\u0d32\\\\u0d48._\\\\u0d13\\\\u0d17._\\\\u0d38\\\\u0d46\\\\u0d2a\\\\u0d4d\\\\u0d31\\\\u0d4d\\\\u0d31._\\\\u0d12\\\\u0d15\\\\u0d4d\\\\u0d1f\\\\u0d4b._\\\\u0d28\\\\u0d35\\\\u0d02._\\\\u0d21\\\\u0d3f\\\\u0d38\\\\u0d02.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0d1e\\\\u0d3e\\\\u0d2f\\\\u0d31\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d24\\\\u0d3f\\\\u0d19\\\\u0d4d\\\\u0d15\\\\u0d33\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d1a\\\\u0d4a\\\\u0d35\\\\u0d4d\\\\u0d35\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d2c\\\\u0d41\\\\u0d27\\\\u0d28\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d35\\\\u0d4d\\\\u0d2f\\\\u0d3e\\\\u0d34\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d35\\\\u0d46\\\\u0d33\\\\u0d4d\\\\u0d33\\\\u0d3f\\\\u0d2f\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a_\\\\u0d36\\\\u0d28\\\\u0d3f\\\\u0d2f\\\\u0d3e\\\\u0d34\\\\u0d4d\\\\u0d1a\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0d1e\\\\u0d3e\\\\u0d2f\\\\u0d7c_\\\\u0d24\\\\u0d3f\\\\u0d19\\\\u0d4d\\\\u0d15\\\\u0d7e_\\\\u0d1a\\\\u0d4a\\\\u0d35\\\\u0d4d\\\\u0d35_\\\\u0d2c\\\\u0d41\\\\u0d27\\\\u0d7b_\\\\u0d35\\\\u0d4d\\\\u0d2f\\\\u0d3e\\\\u0d34\\\\u0d02_\\\\u0d35\\\\u0d46\\\\u0d33\\\\u0d4d\\\\u0d33\\\\u0d3f_\\\\u0d36\\\\u0d28\\\\u0d3f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0d1e\\\\u0d3e_\\\\u0d24\\\\u0d3f_\\\\u0d1a\\\\u0d4a_\\\\u0d2c\\\\u0d41_\\\\u0d35\\\\u0d4d\\\\u0d2f\\\\u0d3e_\\\\u0d35\\\\u0d46_\\\\u0d36\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm -\\\\u0d28\\\\u0d41\\\,LTS:\\\A h:mm:ss -\\\\u0d28\\\\u0d41\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm -\\\\u0d28\\\\u0d41\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm -\\\\u0d28\\\\u0d41\\\},calendar:{sameDay:\\\\\\\u0d07\\\\u0d28\\\\u0d4d\\\\u0d28\\\\u0d4d LT\\\,nextDay:\\\\\\\u0d28\\\\u0d3e\\\\u0d33\\\\u0d46 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0d07\\\\u0d28\\\\u0d4d\\\\u0d28\\\\u0d32\\\\u0d46 LT\\\,lastWeek:\\\\\\\u0d15\\\\u0d34\\\\u0d3f\\\\u0d1e\\\\u0d4d\\\\u0d1e dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0d15\\\\u0d34\\\\u0d3f\\\\u0d1e\\\\u0d4d\\\\u0d1e\\\\u0d4d\\\,past:\\\%s \\\\u0d2e\\\\u0d41\\\\u0d7b\\\\u0d2a\\\\u0d4d\\\,s:\\\\\\\u0d05\\\\u0d7d\\\\u0d2a \\\\u0d28\\\\u0d3f\\\\u0d2e\\\\u0d3f\\\\u0d37\\\\u0d19\\\\u0d4d\\\\u0d19\\\\u0d7e\\\,ss:\\\%d \\\\u0d38\\\\u0d46\\\\u0d15\\\\u0d4d\\\\u0d15\\\\u0d7b\\\\u0d21\\\\u0d4d\\\,m:\\\\\\\u0d12\\\\u0d30\\\\u0d41 \\\\u0d2e\\\\u0d3f\\\\u0d28\\\\u0d3f\\\\u0d31\\\\u0d4d\\\\u0d31\\\\u0d4d\\\,mm:\\\%d \\\\u0d2e\\\\u0d3f\\\\u0d28\\\\u0d3f\\\\u0d31\\\\u0d4d\\\\u0d31\\\\u0d4d\\\,h:\\\\\\\u0d12\\\\u0d30\\\\u0d41 \\\\u0d2e\\\\u0d23\\\\u0d3f\\\\u0d15\\\\u0d4d\\\\u0d15\\\\u0d42\\\\u0d7c\\\,hh:\\\%d \\\\u0d2e\\\\u0d23\\\\u0d3f\\\\u0d15\\\\u0d4d\\\\u0d15\\\\u0d42\\\\u0d7c\\\,d:\\\\\\\u0d12\\\\u0d30\\\\u0d41 \\\\u0d26\\\\u0d3f\\\\u0d35\\\\u0d38\\\\u0d02\\\,dd:\\\%d \\\\u0d26\\\\u0d3f\\\\u0d35\\\\u0d38\\\\u0d02\\\,M:\\\\\\\u0d12\\\\u0d30\\\\u0d41 \\\\u0d2e\\\\u0d3e\\\\u0d38\\\\u0d02\\\,MM:\\\%d \\\\u0d2e\\\\u0d3e\\\\u0d38\\\\u0d02\\\,y:\\\\\\\u0d12\\\\u0d30\\\\u0d41 \\\\u0d35\\\\u0d7c\\\\u0d37\\\\u0d02\\\,yy:\\\%d \\\\u0d35\\\\u0d7c\\\\u0d37\\\\u0d02\\\},meridiemParse:/\\\\u0d30\\\\u0d3e\\\\u0d24\\\\u0d4d\\\\u0d30\\\\u0d3f|\\\\u0d30\\\\u0d3e\\\\u0d35\\\\u0d3f\\\\u0d32\\\\u0d46|\\\\u0d09\\\\u0d1a\\\\u0d4d\\\\u0d1a \\\\u0d15\\\\u0d34\\\\u0d3f\\\\u0d1e\\\\u0d4d\\\\u0d1e\\\\u0d4d|\\\\u0d35\\\\u0d48\\\\u0d15\\\\u0d41\\\\u0d28\\\\u0d4d\\\\u0d28\\\\u0d47\\\\u0d30\\\\u0d02|\\\\u0d30\\\\u0d3e\\\\u0d24\\\\u0d4d\\\\u0d30\\\\u0d3f/i,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0d30\\\\u0d3e\\\\u0d24\\\\u0d4d\\\\u0d30\\\\u0d3f\\\a&&4\u003Ce||\\\\\\\u0d09\\\\u0d1a\\\\u0d4d\\\\u0d1a \\\\u0d15\\\\u0d34\\\\u0d3f\\\\u0d1e\\\\u0d4d\\\\u0d1e\\\\u0d4d\\\a||\\\\\\\u0d35\\\\u0d48\\\\u0d15\\\\u0d41\\\\u0d28\\\\u0d4d\\\\u0d28\\\\u0d47\\\\u0d30\\\\u0d02\\\a?e+12:e},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0d30\\\\u0d3e\\\\u0d24\\\\u0d4d\\\\u0d30\\\\u0d3f\\\:e\u003C12?\\\\\\\u0d30\\\\u0d3e\\\\u0d35\\\\u0d3f\\\\u0d32\\\\u0d46\\\:e\u003C17?\\\\\\\u0d09\\\\u0d1a\\\\u0d4d\\\\u0d1a \\\\u0d15\\\\u0d34\\\\u0d3f\\\\u0d1e\\\\u0d4d\\\\u0d1e\\\\u0d4d\\\:e\u003C20?\\\\\\\u0d35\\\\u0d48\\\\u0d15\\\\u0d41\\\\u0d28\\\\u0d4d\\\\u0d28\\\\u0d47\\\\u0d30\\\\u0d02\\\:\\\\\\\u0d30\\\\u0d3e\\\\u0d24\\\\u0d4d\\\\u0d30\\\\u0d3f\\\}}),l.defineLocale(\\\mn\\\,{months:\\\\\\\u041d\\\\u044d\\\\u0433\\\\u0434\\\\u04af\\\\u0433\\\\u044d\\\\u044d\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0425\\\\u043e\\\\u0451\\\\u0440\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0413\\\\u0443\\\\u0440\\\\u0430\\\\u0432\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0414\\\\u04e9\\\\u0440\\\\u04e9\\\\u0432\\\\u0434\\\\u04af\\\\u0433\\\\u044d\\\\u044d\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0422\\\\u0430\\\\u0432\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0417\\\\u0443\\\\u0440\\\\u0433\\\\u0430\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0414\\\\u043e\\\\u043b\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u041d\\\\u0430\\\\u0439\\\\u043c\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0415\\\\u0441\\\\u0434\\\\u04af\\\\u0433\\\\u044d\\\\u044d\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0410\\\\u0440\\\\u0430\\\\u0432\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0410\\\\u0440\\\\u0432\\\\u0430\\\\u043d \\\\u043d\\\\u044d\\\\u0433\\\\u0434\\\\u04af\\\\u0433\\\\u044d\\\\u044d\\\\u0440 \\\\u0441\\\\u0430\\\\u0440_\\\\u0410\\\\u0440\\\\u0432\\\\u0430\\\\u043d \\\\u0445\\\\u043e\\\\u0451\\\\u0440\\\\u0434\\\\u0443\\\\u0433\\\\u0430\\\\u0430\\\\u0440 \\\\u0441\\\\u0430\\\\u0440\\\.split(\\\_\\\),monthsShort:\\\1 \\\\u0441\\\\u0430\\\\u0440_2 \\\\u0441\\\\u0430\\\\u0440_3 \\\\u0441\\\\u0430\\\\u0440_4 \\\\u0441\\\\u0430\\\\u0440_5 \\\\u0441\\\\u0430\\\\u0440_6 \\\\u0441\\\\u0430\\\\u0440_7 \\\\u0441\\\\u0430\\\\u0440_8 \\\\u0441\\\\u0430\\\\u0440_9 \\\\u0441\\\\u0430\\\\u0440_10 \\\\u0441\\\\u0430\\\\u0440_11 \\\\u0441\\\\u0430\\\\u0440_12 \\\\u0441\\\\u0430\\\\u0440\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u041d\\\\u044f\\\\u043c_\\\\u0414\\\\u0430\\\\u0432\\\\u0430\\\\u0430_\\\\u041c\\\\u044f\\\\u0433\\\\u043c\\\\u0430\\\\u0440_\\\\u041b\\\\u0445\\\\u0430\\\\u0433\\\\u0432\\\\u0430_\\\\u041f\\\\u04af\\\\u0440\\\\u044d\\\\u0432_\\\\u0411\\\\u0430\\\\u0430\\\\u0441\\\\u0430\\\\u043d_\\\\u0411\\\\u044f\\\\u043c\\\\u0431\\\\u0430\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u041d\\\\u044f\\\\u043c_\\\\u0414\\\\u0430\\\\u0432_\\\\u041c\\\\u044f\\\\u0433_\\\\u041b\\\\u0445\\\\u0430_\\\\u041f\\\\u04af\\\\u0440_\\\\u0411\\\\u0430\\\\u0430_\\\\u0411\\\\u044f\\\\u043c\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u041d\\\\u044f_\\\\u0414\\\\u0430_\\\\u041c\\\\u044f_\\\\u041b\\\\u0445_\\\\u041f\\\\u04af_\\\\u0411\\\\u0430_\\\\u0411\\\\u044f\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\YYYY \\\\u043e\\\\u043d\\\\u044b MMMM\\\\u044b\\\\u043d D\\\,LLL:\\\YYYY \\\\u043e\\\\u043d\\\\u044b MMMM\\\\u044b\\\\u043d D HH:mm\\\,LLLL:\\\dddd, YYYY \\\\u043e\\\\u043d\\\\u044b MMMM\\\\u044b\\\\u043d D HH:mm\\\},meridiemParse:/\\\\u04ae\\\\u04e8|\\\\u04ae\\\\u0425/i,isPM:function(e){return\\\\\\\u04ae\\\\u0425\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u04ae\\\\u04e8\\\:\\\\\\\u04ae\\\\u0425\\\},calendar:{sameDay:\\\\\\\u04e8\\\\u043d\\\\u04e9\\\\u04e9\\\\u0434\\\\u04e9\\\\u0440 LT\\\,nextDay:\\\\\\\u041c\\\\u0430\\\\u0440\\\\u0433\\\\u0430\\\\u0430\\\\u0448 LT\\\,nextWeek:\\\\\\\u0418\\\\u0440\\\\u044d\\\\u0445 dddd LT\\\,lastDay:\\\\\\\u04e8\\\\u0447\\\\u0438\\\\u0433\\\\u0434\\\\u04e9\\\\u0440 LT\\\,lastWeek:\\\\\\\u04e8\\\\u043d\\\\u0433\\\\u04e9\\\\u0440\\\\u0441\\\\u04e9\\\\u043d dddd LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0434\\\\u0430\\\\u0440\\\\u0430\\\\u0430\\\,past:\\\%s \\\\u04e9\\\\u043c\\\\u043d\\\\u04e9\\\,s:wn,ss:wn,m:wn,mm:wn,h:wn,hh:wn,d:wn,dd:wn,M:wn,MM:wn,y:wn,yy:wn},dayOfMonthOrdinalParse:/\\\\d{1,2} \\\\u04e9\\\\u0434\\\\u04e9\\\\u0440/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\ \\\\u04e9\\\\u0434\\\\u04e9\\\\u0440\\\;default:return e}}});var vn{1:\\\\\\\u0967\\\,2:\\\\\\\u0968\\\,3:\\\\\\\u0969\\\,4:\\\\\\\u096a\\\,5:\\\\\\\u096b\\\,6:\\\\\\\u096c\\\,7:\\\\\\\u096d\\\,8:\\\\\\\u096e\\\,9:\\\\\\\u096f\\\,0:\\\\\\\u0966\\\},Sn{\\\\\\\u0967\\\:\\\1\\\,\\\\\\\u0968\\\:\\\2\\\,\\\\\\\u0969\\\:\\\3\\\,\\\\\\\u096a\\\:\\\4\\\,\\\\\\\u096b\\\:\\\5\\\,\\\\\\\u096c\\\:\\\6\\\,\\\\\\\u096d\\\:\\\7\\\,\\\\\\\u096e\\\:\\\8\\\,\\\\\\\u096f\\\:\\\9\\\,\\\\\\\u0966\\\:\\\0\\\};function Hn(e,a,t,s){var n\\\\\\;if(a)switch(t){case\\\s\\\:n\\\\\\\u0915\\\\u093e\\\\u0939\\\\u0940 \\\\u0938\\\\u0947\\\\u0915\\\\u0902\\\\u0926\\\;break;case\\\ss\\\:n\\\%d \\\\u0938\\\\u0947\\\\u0915\\\\u0902\\\\u0926\\\;break;case\\\m\\\:n\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u093f\\\\u0928\\\\u093f\\\\u091f\\\;break;case\\\mm\\\:n\\\%d \\\\u092e\\\\u093f\\\\u0928\\\\u093f\\\\u091f\\\\u0947\\\;break;case\\\h\\\:n\\\\\\\u090f\\\\u0915 \\\\u0924\\\\u093e\\\\u0938\\\;break;case\\\hh\\\:n\\\%d \\\\u0924\\\\u093e\\\\u0938\\\;break;case\\\d\\\:n\\\\\\\u090f\\\\u0915 \\\\u0926\\\\u093f\\\\u0935\\\\u0938\\\;break;case\\\dd\\\:n\\\%d \\\\u0926\\\\u093f\\\\u0935\\\\u0938\\\;break;case\\\M\\\:n\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u093e\\\;break;case\\\MM\\\:n\\\%d \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u0947\\\;break;case\\\y\\\:n\\\\\\\u090f\\\\u0915 \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\;break;case\\\yy\\\:n\\\%d \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\\u0947\\\;break}else switch(t){case\\\s\\\:n\\\\\\\u0915\\\\u093e\\\\u0939\\\\u0940 \\\\u0938\\\\u0947\\\\u0915\\\\u0902\\\\u0926\\\\u093e\\\\u0902\\\;break;case\\\ss\\\:n\\\%d \\\\u0938\\\\u0947\\\\u0915\\\\u0902\\\\u0926\\\\u093e\\\\u0902\\\;break;case\\\m\\\:n\\\\\\\u090f\\\\u0915\\\\u093e \\\\u092e\\\\u093f\\\\u0928\\\\u093f\\\\u091f\\\\u093e\\\;break;case\\\mm\\\:n\\\%d \\\\u092e\\\\u093f\\\\u0928\\\\u093f\\\\u091f\\\\u093e\\\\u0902\\\;break;case\\\h\\\:n\\\\\\\u090f\\\\u0915\\\\u093e \\\\u0924\\\\u093e\\\\u0938\\\\u093e\\\;break;case\\\hh\\\:n\\\%d \\\\u0924\\\\u093e\\\\u0938\\\\u093e\\\\u0902\\\;break;case\\\d\\\:n\\\\\\\u090f\\\\u0915\\\\u093e \\\\u0926\\\\u093f\\\\u0935\\\\u0938\\\\u093e\\\;break;case\\\dd\\\:n\\\%d \\\\u0926\\\\u093f\\\\u0935\\\\u0938\\\\u093e\\\\u0902\\\;break;case\\\M\\\:n\\\\\\\u090f\\\\u0915\\\\u093e \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u094d\\\\u092f\\\\u093e\\\;break;case\\\MM\\\:n\\\%d \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u094d\\\\u092f\\\\u093e\\\\u0902\\\;break;case\\\y\\\:n\\\\\\\u090f\\\\u0915\\\\u093e \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\\u093e\\\;break;case\\\yy\\\:n\\\%d \\\\u0935\\\\u0930\\\\u094d\\\\u0937\\\\u093e\\\\u0902\\\;break}return n.replace(/%d/i,e)}l.defineLocale(\\\mr\\\,{months:\\\\\\\u091c\\\\u093e\\\\u0928\\\\u0947\\\\u0935\\\\u093e\\\\u0930\\\\u0940_\\\\u092b\\\\u0947\\\\u092c\\\\u094d\\\\u0930\\\\u0941\\\\u0935\\\\u093e\\\\u0930\\\\u0940_\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a_\\\\u090f\\\\u092a\\\\u094d\\\\u0930\\\\u093f\\\\u0932_\\\\u092e\\\\u0947_\\\\u091c\\\\u0942\\\\u0928_\\\\u091c\\\\u0941\\\\u0932\\\\u0948_\\\\u0911\\\\u0917\\\\u0938\\\\u094d\\\\u091f_\\\\u0938\\\\u092a\\\\u094d\\\\u091f\\\\u0947\\\\u0902\\\\u092c\\\\u0930_\\\\u0911\\\\u0915\\\\u094d\\\\u091f\\\\u094b\\\\u092c\\\\u0930_\\\\u0928\\\\u094b\\\\u0935\\\\u094d\\\\u0939\\\\u0947\\\\u0902\\\\u092c\\\\u0930_\\\\u0921\\\\u093f\\\\u0938\\\\u0947\\\\u0902\\\\u092c\\\\u0930\\\.split(\\\_\\\),monthsShort:\\\\\\\u091c\\\\u093e\\\\u0928\\\\u0947._\\\\u092b\\\\u0947\\\\u092c\\\\u094d\\\\u0930\\\\u0941._\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a._\\\\u090f\\\\u092a\\\\u094d\\\\u0930\\\\u093f._\\\\u092e\\\\u0947._\\\\u091c\\\\u0942\\\\u0928._\\\\u091c\\\\u0941\\\\u0932\\\\u0948._\\\\u0911\\\\u0917._\\\\u0938\\\\u092a\\\\u094d\\\\u091f\\\\u0947\\\\u0902._\\\\u0911\\\\u0915\\\\u094d\\\\u091f\\\\u094b._\\\\u0928\\\\u094b\\\\u0935\\\\u094d\\\\u0939\\\\u0947\\\\u0902._\\\\u0921\\\\u093f\\\\u0938\\\\u0947\\\\u0902.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0930\\\\u0935\\\\u093f\\\\u0935\\\\u093e\\\\u0930_\\\\u0938\\\\u094b\\\\u092e\\\\u0935\\\\u093e\\\\u0930_\\\\u092e\\\\u0902\\\\u0917\\\\u0933\\\\u0935\\\\u093e\\\\u0930_\\\\u092c\\\\u0941\\\\u0927\\\\u0935\\\\u093e\\\\u0930_\\\\u0917\\\\u0941\\\\u0930\\\\u0942\\\\u0935\\\\u093e\\\\u0930_\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930\\\\u0935\\\\u093e\\\\u0930_\\\\u0936\\\\u0928\\\\u093f\\\\u0935\\\\u093e\\\\u0930\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0930\\\\u0935\\\\u093f_\\\\u0938\\\\u094b\\\\u092e_\\\\u092e\\\\u0902\\\\u0917\\\\u0933_\\\\u092c\\\\u0941\\\\u0927_\\\\u0917\\\\u0941\\\\u0930\\\\u0942_\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930_\\\\u0936\\\\u0928\\\\u093f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0930_\\\\u0938\\\\u094b_\\\\u092e\\\\u0902_\\\\u092c\\\\u0941_\\\\u0917\\\\u0941_\\\\u0936\\\\u0941_\\\\u0936\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm \\\\u0935\\\\u093e\\\\u091c\\\\u0924\\\\u093e\\\,LTS:\\\A h:mm:ss \\\\u0935\\\\u093e\\\\u091c\\\\u0924\\\\u093e\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm \\\\u0935\\\\u093e\\\\u091c\\\\u0924\\\\u093e\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm \\\\u0935\\\\u093e\\\\u091c\\\\u0924\\\\u093e\\\},calendar:{sameDay:\\\\\\\u0906\\\\u091c LT\\\,nextDay:\\\\\\\u0909\\\\u0926\\\\u094d\\\\u092f\\\\u093e LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0915\\\\u093e\\\\u0932 LT\\\,lastWeek:\\\\\\\u092e\\\\u093e\\\\u0917\\\\u0940\\\\u0932 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s\\\\u092e\\\\u0927\\\\u094d\\\\u092f\\\\u0947\\\,past:\\\%s\\\\u092a\\\\u0942\\\\u0930\\\\u094d\\\\u0935\\\\u0940\\\,s:Hn,ss:Hn,m:Hn,mm:Hn,h:Hn,hh:Hn,d:Hn,dd:Hn,M:Hn,MM:Hn,y:Hn,yy:Hn},preparse:function(e){return e.replace(/\\\\u0967\\\\u0968\\\\u0969\\\\u096a\\\\u096b\\\\u096c\\\\u096d\\\\u096e\\\\u096f\\\\u0966/g,function(e){return Sne})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return vne})},meridiemParse:/\\\\u0930\\\\u093e\\\\u0924\\\\u094d\\\\u0930\\\\u0940|\\\\u0938\\\\u0915\\\\u093e\\\\u0933\\\\u0940|\\\\u0926\\\\u0941\\\\u092a\\\\u093e\\\\u0930\\\\u0940|\\\\u0938\\\\u093e\\\\u092f\\\\u0902\\\\u0915\\\\u093e\\\\u0933\\\\u0940/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0930\\\\u093e\\\\u0924\\\\u094d\\\\u0930\\\\u0940\\\a?e\u003C4?e:e+12:\\\\\\\u0938\\\\u0915\\\\u093e\\\\u0933\\\\u0940\\\a?e:\\\\\\\u0926\\\\u0941\\\\u092a\\\\u093e\\\\u0930\\\\u0940\\\a?10\u003Ce?e:e+12:\\\\\\\u0938\\\\u093e\\\\u092f\\\\u0902\\\\u0915\\\\u093e\\\\u0933\\\\u0940\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0930\\\\u093e\\\\u0924\\\\u094d\\\\u0930\\\\u0940\\\:e\u003C10?\\\\\\\u0938\\\\u0915\\\\u093e\\\\u0933\\\\u0940\\\:e\u003C17?\\\\\\\u0926\\\\u0941\\\\u092a\\\\u093e\\\\u0930\\\\u0940\\\:e\u003C20?\\\\\\\u0938\\\\u093e\\\\u092f\\\\u0902\\\\u0915\\\\u093e\\\\u0933\\\\u0940\\\:\\\\\\\u0930\\\\u093e\\\\u0924\\\\u094d\\\\u0930\\\\u0940\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\ms-my\\\,{months:\\\Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\\\.split(\\\_\\\),weekdays:\\\Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\\\.split(\\\_\\\),weekdaysShort:\\\Ahd_Isn_Sel_Rab_Kha_Jum_Sab\\\.split(\\\_\\\),weekdaysMin:\\\Ah_Is_Sl_Rb_Km_Jm_Sb\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY pukul HH.mm\\\,LLLL:\\\dddd, D MMMM YYYY pukul HH.mm\\\},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12e&&(e0),\\\pagi\\\a?e:\\\tengahari\\\a?11\u003Ce?e:e+12:\\\petang\\\a||\\\malam\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C11?\\\pagi\\\:e\u003C15?\\\tengahari\\\:e\u003C19?\\\petang\\\:\\\malam\\\},calendar:{sameDay:\\\Hari ini pukul LT\\\,nextDay:\\\Esok pukul LT\\\,nextWeek:\\\dddd pukul LT\\\,lastDay:\\\Kelmarin pukul LT\\\,lastWeek:\\\dddd lepas pukul LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dalam %s\\\,past:\\\%s yang lepas\\\,s:\\\beberapa saat\\\,ss:\\\%d saat\\\,m:\\\seminit\\\,mm:\\\%d minit\\\,h:\\\sejam\\\,hh:\\\%d jam\\\,d:\\\sehari\\\,dd:\\\%d hari\\\,M:\\\sebulan\\\,MM:\\\%d bulan\\\,y:\\\setahun\\\,yy:\\\%d tahun\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\ms\\\,{months:\\\Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\\\.split(\\\_\\\),weekdays:\\\Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\\\.split(\\\_\\\),weekdaysShort:\\\Ahd_Isn_Sel_Rab_Kha_Jum_Sab\\\.split(\\\_\\\),weekdaysMin:\\\Ah_Is_Sl_Rb_Km_Jm_Sb\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY pukul HH.mm\\\,LLLL:\\\dddd, D MMMM YYYY pukul HH.mm\\\},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12e&&(e0),\\\pagi\\\a?e:\\\tengahari\\\a?11\u003Ce?e:e+12:\\\petang\\\a||\\\malam\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C11?\\\pagi\\\:e\u003C15?\\\tengahari\\\:e\u003C19?\\\petang\\\:\\\malam\\\},calendar:{sameDay:\\\Hari ini pukul LT\\\,nextDay:\\\Esok pukul LT\\\,nextWeek:\\\dddd pukul LT\\\,lastDay:\\\Kelmarin pukul LT\\\,lastWeek:\\\dddd lepas pukul LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dalam %s\\\,past:\\\%s yang lepas\\\,s:\\\beberapa saat\\\,ss:\\\%d saat\\\,m:\\\seminit\\\,mm:\\\%d minit\\\,h:\\\sejam\\\,hh:\\\%d jam\\\,d:\\\sehari\\\,dd:\\\%d hari\\\,M:\\\sebulan\\\,MM:\\\%d bulan\\\,y:\\\setahun\\\,yy:\\\%d tahun\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\mt\\\,{months:\\\Jannar_Frar_Marzu_April_Mejju_\\\\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\\\\u010bembru\\\.split(\\\_\\\),monthsShort:\\\Jan_Fra_Mar_Apr_Mej_\\\\u0120un_Lul_Aww_Set_Ott_Nov_Di\\\\u010b\\\.split(\\\_\\\),weekdays:\\\Il-\\\\u0126add_It-Tnejn_It-Tlieta_L-Erbg\\\\u0127a_Il-\\\\u0126amis_Il-\\\\u0120img\\\\u0127a_Is-Sibt\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0126ad_Tne_Tli_Erb_\\\\u0126am_\\\\u0120im_Sib\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0126a_Tn_Tl_Er_\\\\u0126a_\\\\u0120i_Si\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Illum fil-LT\\\,nextDay:\\\G\\\\u0127ada fil-LT\\\,nextWeek:\\\dddd fil-LT\\\,lastDay:\\\Il-biera\\\\u0127 fil-LT\\\,lastWeek:\\\dddd li g\\\\u0127adda fil-LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\f\\\\u2019 %s\\\,past:\\\%s ilu\\\,s:\\\ftit sekondi\\\,ss:\\\%d sekondi\\\,m:\\\minuta\\\,mm:\\\%d minuti\\\,h:\\\sieg\\\\u0127a\\\,hh:\\\%d sieg\\\\u0127at\\\,d:\\\\\\\u0121urnata\\\,dd:\\\%d \\\\u0121ranet\\\,M:\\\xahar\\\,MM:\\\%d xhur\\\,y:\\\sena\\\,yy:\\\%d sni\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}});var bn{1:\\\\\\\u1041\\\,2:\\\\\\\u1042\\\,3:\\\\\\\u1043\\\,4:\\\\\\\u1044\\\,5:\\\\\\\u1045\\\,6:\\\\\\\u1046\\\,7:\\\\\\\u1047\\\,8:\\\\\\\u1048\\\,9:\\\\\\\u1049\\\,0:\\\\\\\u1040\\\},jn{\\\\\\\u1041\\\:\\\1\\\,\\\\\\\u1042\\\:\\\2\\\,\\\\\\\u1043\\\:\\\3\\\,\\\\\\\u1044\\\:\\\4\\\,\\\\\\\u1045\\\:\\\5\\\,\\\\\\\u1046\\\:\\\6\\\,\\\\\\\u1047\\\:\\\7\\\,\\\\\\\u1048\\\:\\\8\\\,\\\\\\\u1049\\\:\\\9\\\,\\\\\\\u1040\\\:\\\0\\\};l.defineLocale(\\\my\\\,{months:\\\\\\\u1007\\\\u1014\\\\u103a\\\\u1014\\\\u101d\\\\u102b\\\\u101b\\\\u102e_\\\\u1016\\\\u1031\\\\u1016\\\\u1031\\\\u102c\\\\u103a\\\\u101d\\\\u102b\\\\u101b\\\\u102e_\\\\u1019\\\\u1010\\\\u103a_\\\\u1027\\\\u1015\\\\u103c\\\\u102e_\\\\u1019\\\\u1031_\\\\u1007\\\\u103d\\\\u1014\\\\u103a_\\\\u1007\\\\u1030\\\\u101c\\\\u102d\\\\u102f\\\\u1004\\\\u103a_\\\\u101e\\\\u103c\\\\u1002\\\\u102f\\\\u1010\\\\u103a_\\\\u1005\\\\u1000\\\\u103a\\\\u1010\\\\u1004\\\\u103a\\\\u1018\\\\u102c_\\\\u1021\\\\u1031\\\\u102c\\\\u1000\\\\u103a\\\\u1010\\\\u102d\\\\u102f\\\\u1018\\\\u102c_\\\\u1014\\\\u102d\\\\u102f\\\\u101d\\\\u1004\\\\u103a\\\\u1018\\\\u102c_\\\\u1012\\\\u102e\\\\u1007\\\\u1004\\\\u103a\\\\u1018\\\\u102c\\\.split(\\\_\\\),monthsShort:\\\\\\\u1007\\\\u1014\\\\u103a_\\\\u1016\\\\u1031_\\\\u1019\\\\u1010\\\\u103a_\\\\u1015\\\\u103c\\\\u102e_\\\\u1019\\\\u1031_\\\\u1007\\\\u103d\\\\u1014\\\\u103a_\\\\u101c\\\\u102d\\\\u102f\\\\u1004\\\\u103a_\\\\u101e\\\\u103c_\\\\u1005\\\\u1000\\\\u103a_\\\\u1021\\\\u1031\\\\u102c\\\\u1000\\\\u103a_\\\\u1014\\\\u102d\\\\u102f_\\\\u1012\\\\u102e\\\.split(\\\_\\\),weekdays:\\\\\\\u1010\\\\u1014\\\\u1004\\\\u103a\\\\u1039\\\\u1002\\\\u1014\\\\u103d\\\\u1031_\\\\u1010\\\\u1014\\\\u1004\\\\u103a\\\\u1039\\\\u101c\\\\u102c_\\\\u1021\\\\u1004\\\\u103a\\\\u1039\\\\u1002\\\\u102b_\\\\u1017\\\\u102f\\\\u1012\\\\u1039\\\\u1013\\\\u101f\\\\u1030\\\\u1038_\\\\u1000\\\\u103c\\\\u102c\\\\u101e\\\\u1015\\\\u1010\\\\u1031\\\\u1038_\\\\u101e\\\\u1031\\\\u102c\\\\u1000\\\\u103c\\\\u102c_\\\\u1005\\\\u1014\\\\u1031\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u1014\\\\u103d\\\\u1031_\\\\u101c\\\\u102c_\\\\u1002\\\\u102b_\\\\u101f\\\\u1030\\\\u1038_\\\\u1000\\\\u103c\\\\u102c_\\\\u101e\\\\u1031\\\\u102c_\\\\u1014\\\\u1031\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u1014\\\\u103d\\\\u1031_\\\\u101c\\\\u102c_\\\\u1002\\\\u102b_\\\\u101f\\\\u1030\\\\u1038_\\\\u1000\\\\u103c\\\\u102c_\\\\u101e\\\\u1031\\\\u102c_\\\\u1014\\\\u1031\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u101a\\\\u1014\\\\u1031. LT \\\\u1019\\\\u103e\\\\u102c\\\,nextDay:\\\\\\\u1019\\\\u1014\\\\u1000\\\\u103a\\\\u1016\\\\u103c\\\\u1014\\\\u103a LT \\\\u1019\\\\u103e\\\\u102c\\\,nextWeek:\\\dddd LT \\\\u1019\\\\u103e\\\\u102c\\\,lastDay:\\\\\\\u1019\\\\u1014\\\\u1031.\\\\u1000 LT \\\\u1019\\\\u103e\\\\u102c\\\,lastWeek:\\\\\\\u1015\\\\u103c\\\\u102e\\\\u1038\\\\u1001\\\\u1032\\\\u1037\\\\u101e\\\\u1031\\\\u102c dddd LT \\\\u1019\\\\u103e\\\\u102c\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u101c\\\\u102c\\\\u1019\\\\u100a\\\\u103a\\\\u1037 %s \\\\u1019\\\\u103e\\\\u102c\\\,past:\\\\\\\u101c\\\\u103d\\\\u1014\\\\u103a\\\\u1001\\\\u1032\\\\u1037\\\\u101e\\\\u1031\\\\u102c %s \\\\u1000\\\,s:\\\\\\\u1005\\\\u1000\\\\u1039\\\\u1000\\\\u1014\\\\u103a.\\\\u1021\\\\u1014\\\\u100a\\\\u103a\\\\u1038\\\\u1004\\\\u101a\\\\u103a\\\,ss:\\\%d \\\\u1005\\\\u1000\\\\u1039\\\\u1000\\\\u1014\\\\u1037\\\\u103a\\\,m:\\\\\\\u1010\\\\u1005\\\\u103a\\\\u1019\\\\u102d\\\\u1014\\\\u1005\\\\u103a\\\,mm:\\\%d \\\\u1019\\\\u102d\\\\u1014\\\\u1005\\\\u103a\\\,h:\\\\\\\u1010\\\\u1005\\\\u103a\\\\u1014\\\\u102c\\\\u101b\\\\u102e\\\,hh:\\\%d \\\\u1014\\\\u102c\\\\u101b\\\\u102e\\\,d:\\\\\\\u1010\\\\u1005\\\\u103a\\\\u101b\\\\u1000\\\\u103a\\\,dd:\\\%d \\\\u101b\\\\u1000\\\\u103a\\\,M:\\\\\\\u1010\\\\u1005\\\\u103a\\\\u101c\\\,MM:\\\%d \\\\u101c\\\,y:\\\\\\\u1010\\\\u1005\\\\u103a\\\\u1014\\\\u103e\\\\u1005\\\\u103a\\\,yy:\\\%d \\\\u1014\\\\u103e\\\\u1005\\\\u103a\\\},preparse:function(e){return e.replace(/\\\\u1041\\\\u1042\\\\u1043\\\\u1044\\\\u1045\\\\u1046\\\\u1047\\\\u1048\\\\u1049\\\\u1040/g,function(e){return jne})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return bne})},week:{dow:1,doy:4}}),l.defineLocale(\\\nb\\\,{months:\\\januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\\\.split(\\\_\\\),monthsShort:\\\jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\s\\\\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\\\\xf8rdag\\\.split(\\\_\\\),weekdaysShort:\\\s\\\\xf8._ma._ti._on._to._fr._l\\\\xf8.\\\.split(\\\_\\\),weekdaysMin:\\\s\\\\xf8_ma_ti_on_to_fr_l\\\\xf8\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY kl. HH:mm\\\,LLLL:\\\dddd D. MMMM YYYY kl. HH:mm\\\},calendar:{sameDay:\\\i dag kl. LT\\\,nextDay:\\\i morgen kl. LT\\\,nextWeek:\\\dddd kl. LT\\\,lastDay:\\\i g\\\\xe5r kl. LT\\\,lastWeek:\\\forrige dddd kl. LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\om %s\\\,past:\\\%s siden\\\,s:\\\noen sekunder\\\,ss:\\\%d sekunder\\\,m:\\\ett minutt\\\,mm:\\\%d minutter\\\,h:\\\en time\\\,hh:\\\%d timer\\\,d:\\\en dag\\\,dd:\\\%d dager\\\,M:\\\en m\\\\xe5ned\\\,MM:\\\%d m\\\\xe5neder\\\,y:\\\ett \\\\xe5r\\\,yy:\\\%d \\\\xe5r\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var xn{1:\\\\\\\u0967\\\,2:\\\\\\\u0968\\\,3:\\\\\\\u0969\\\,4:\\\\\\\u096a\\\,5:\\\\\\\u096b\\\,6:\\\\\\\u096c\\\,7:\\\\\\\u096d\\\,8:\\\\\\\u096e\\\,9:\\\\\\\u096f\\\,0:\\\\\\\u0966\\\},On{\\\\\\\u0967\\\:\\\1\\\,\\\\\\\u0968\\\:\\\2\\\,\\\\\\\u0969\\\:\\\3\\\,\\\\\\\u096a\\\:\\\4\\\,\\\\\\\u096b\\\:\\\5\\\,\\\\\\\u096c\\\:\\\6\\\,\\\\\\\u096d\\\:\\\7\\\,\\\\\\\u096e\\\:\\\8\\\,\\\\\\\u096f\\\:\\\9\\\,\\\\\\\u0966\\\:\\\0\\\};l.defineLocale(\\\ne\\\,{months:\\\\\\\u091c\\\\u0928\\\\u0935\\\\u0930\\\\u0940_\\\\u092b\\\\u0947\\\\u092c\\\\u094d\\\\u0930\\\\u0941\\\\u0935\\\\u0930\\\\u0940_\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a_\\\\u0905\\\\u092a\\\\u094d\\\\u0930\\\\u093f\\\\u0932_\\\\u092e\\\\u0908_\\\\u091c\\\\u0941\\\\u0928_\\\\u091c\\\\u0941\\\\u0932\\\\u093e\\\\u0908_\\\\u0905\\\\u0917\\\\u0937\\\\u094d\\\\u091f_\\\\u0938\\\\u0947\\\\u092a\\\\u094d\\\\u091f\\\\u0947\\\\u092e\\\\u094d\\\\u092c\\\\u0930_\\\\u0905\\\\u0915\\\\u094d\\\\u091f\\\\u094b\\\\u092c\\\\u0930_\\\\u0928\\\\u094b\\\\u092d\\\\u0947\\\\u092e\\\\u094d\\\\u092c\\\\u0930_\\\\u0921\\\\u093f\\\\u0938\\\\u0947\\\\u092e\\\\u094d\\\\u092c\\\\u0930\\\.split(\\\_\\\),monthsShort:\\\\\\\u091c\\\\u0928._\\\\u092b\\\\u0947\\\\u092c\\\\u094d\\\\u0930\\\\u0941._\\\\u092e\\\\u093e\\\\u0930\\\\u094d\\\\u091a_\\\\u0905\\\\u092a\\\\u094d\\\\u0930\\\\u093f._\\\\u092e\\\\u0908_\\\\u091c\\\\u0941\\\\u0928_\\\\u091c\\\\u0941\\\\u0932\\\\u093e\\\\u0908._\\\\u0905\\\\u0917._\\\\u0938\\\\u0947\\\\u092a\\\\u094d\\\\u091f._\\\\u0905\\\\u0915\\\\u094d\\\\u091f\\\\u094b._\\\\u0928\\\\u094b\\\\u092d\\\\u0947._\\\\u0921\\\\u093f\\\\u0938\\\\u0947.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0906\\\\u0907\\\\u0924\\\\u092c\\\\u093e\\\\u0930_\\\\u0938\\\\u094b\\\\u092e\\\\u092c\\\\u093e\\\\u0930_\\\\u092e\\\\u0919\\\\u094d\\\\u0917\\\\u0932\\\\u092c\\\\u093e\\\\u0930_\\\\u092c\\\\u0941\\\\u0927\\\\u092c\\\\u093e\\\\u0930_\\\\u092c\\\\u093f\\\\u0939\\\\u093f\\\\u092c\\\\u093e\\\\u0930_\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930\\\\u092c\\\\u093e\\\\u0930_\\\\u0936\\\\u0928\\\\u093f\\\\u092c\\\\u093e\\\\u0930\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0906\\\\u0907\\\\u0924._\\\\u0938\\\\u094b\\\\u092e._\\\\u092e\\\\u0919\\\\u094d\\\\u0917\\\\u0932._\\\\u092c\\\\u0941\\\\u0927._\\\\u092c\\\\u093f\\\\u0939\\\\u093f._\\\\u0936\\\\u0941\\\\u0915\\\\u094d\\\\u0930._\\\\u0936\\\\u0928\\\\u093f.\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0906._\\\\u0938\\\\u094b._\\\\u092e\\\\u0902._\\\\u092c\\\\u0941._\\\\u092c\\\\u093f._\\\\u0936\\\\u0941._\\\\u0936.\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\A\\\\u0915\\\\u094b h:mm \\\\u092c\\\\u091c\\\\u0947\\\,LTS:\\\A\\\\u0915\\\\u094b h:mm:ss \\\\u092c\\\\u091c\\\\u0947\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A\\\\u0915\\\\u094b h:mm \\\\u092c\\\\u091c\\\\u0947\\\,LLLL:\\\dddd, D MMMM YYYY, A\\\\u0915\\\\u094b h:mm \\\\u092c\\\\u091c\\\\u0947\\\},preparse:function(e){return e.replace(/\\\\u0967\\\\u0968\\\\u0969\\\\u096a\\\\u096b\\\\u096c\\\\u096d\\\\u096e\\\\u096f\\\\u0966/g,function(e){return One})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return xne})},meridiemParse:/\\\\u0930\\\\u093e\\\\u0924\\\\u093f|\\\\u092c\\\\u093f\\\\u0939\\\\u093e\\\\u0928|\\\\u0926\\\\u093f\\\\u0909\\\\u0901\\\\u0938\\\\u094b|\\\\u0938\\\\u093e\\\\u0901\\\\u091d/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0930\\\\u093e\\\\u0924\\\\u093f\\\a?e\u003C4?e:e+12:\\\\\\\u092c\\\\u093f\\\\u0939\\\\u093e\\\\u0928\\\a?e:\\\\\\\u0926\\\\u093f\\\\u0909\\\\u0901\\\\u0938\\\\u094b\\\a?10\u003Ce?e:e+12:\\\\\\\u0938\\\\u093e\\\\u0901\\\\u091d\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C3?\\\\\\\u0930\\\\u093e\\\\u0924\\\\u093f\\\:e\u003C12?\\\\\\\u092c\\\\u093f\\\\u0939\\\\u093e\\\\u0928\\\:e\u003C16?\\\\\\\u0926\\\\u093f\\\\u0909\\\\u0901\\\\u0938\\\\u094b\\\:e\u003C20?\\\\\\\u0938\\\\u093e\\\\u0901\\\\u091d\\\:\\\\\\\u0930\\\\u093e\\\\u0924\\\\u093f\\\},calendar:{sameDay:\\\\\\\u0906\\\\u091c LT\\\,nextDay:\\\\\\\u092d\\\\u094b\\\\u0932\\\\u093f LT\\\,nextWeek:\\\\\\\u0906\\\\u0909\\\\u0901\\\\u0926\\\\u094b dddd, LT\\\,lastDay:\\\\\\\u0939\\\\u093f\\\\u091c\\\\u094b LT\\\,lastWeek:\\\\\\\u0917\\\\u090f\\\\u0915\\\\u094b dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s\\\\u092e\\\\u093e\\\,past:\\\%s \\\\u0905\\\\u0917\\\\u093e\\\\u0921\\\\u093f\\\,s:\\\\\\\u0915\\\\u0947\\\\u0939\\\\u0940 \\\\u0915\\\\u094d\\\\u0937\\\\u0923\\\,ss:\\\%d \\\\u0938\\\\u0947\\\\u0915\\\\u0947\\\\u0923\\\\u094d\\\\u0921\\\,m:\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u093f\\\\u0928\\\\u0947\\\\u091f\\\,mm:\\\%d \\\\u092e\\\\u093f\\\\u0928\\\\u0947\\\\u091f\\\,h:\\\\\\\u090f\\\\u0915 \\\\u0918\\\\u0923\\\\u094d\\\\u091f\\\\u093e\\\,hh:\\\%d \\\\u0918\\\\u0923\\\\u094d\\\\u091f\\\\u093e\\\,d:\\\\\\\u090f\\\\u0915 \\\\u0926\\\\u093f\\\\u0928\\\,dd:\\\%d \\\\u0926\\\\u093f\\\\u0928\\\,M:\\\\\\\u090f\\\\u0915 \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u093e\\\,MM:\\\%d \\\\u092e\\\\u0939\\\\u093f\\\\u0928\\\\u093e\\\,y:\\\\\\\u090f\\\\u0915 \\\\u092c\\\\u0930\\\\u094d\\\\u0937\\\,yy:\\\%d \\\\u092c\\\\u0930\\\\u094d\\\\u0937\\\},week:{dow:0,doy:6}});var Pn\\\jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\\\.split(\\\_\\\),Wn\\\jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\\\.split(\\\_\\\),An/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^juni.?$/i,/^juli.?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i,En/^(januari|februari|maart|april|mei|junli|augustus|september|oktober|november|december|jan\\\\.?|feb\\\\.?|mrt\\\\.?|apr\\\\.?|junl\\\\.?|aug\\\\.?|sep\\\\.?|okt\\\\.?|nov\\\\.?|dec\\\\.?)/i;l.defineLocale(\\\nl-be\\\,{months:\\\januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?Wne.month():Pne.month():Pn},monthsRegex:En,monthsShortRegex:En,monthsStrictRegex:/^(januari|februari|maart|april|mei|junli|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\\\.?|feb\\\\.?|mrt\\\\.?|apr\\\\.?|mei|junl\\\\.?|aug\\\\.?|sep\\\\.?|okt\\\\.?|nov\\\\.?|dec\\\\.?)/i,monthsParse:An,longMonthsParse:An,shortMonthsParse:An,weekdays:\\\zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\\\.split(\\\_\\\),weekdaysShort:\\\zo._ma._di._wo._do._vr._za.\\\.split(\\\_\\\),weekdaysMin:\\\zo_ma_di_wo_do_vr_za\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\vandaag om LT\\\,nextDay:\\\morgen om LT\\\,nextWeek:\\\dddd om LT\\\,lastDay:\\\gisteren om LT\\\,lastWeek:\\\afgelopen dddd om LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\over %s\\\,past:\\\%s geleden\\\,s:\\\een paar seconden\\\,ss:\\\%d seconden\\\,m:\\\\\\\xe9\\\\xe9n minuut\\\,mm:\\\%d minuten\\\,h:\\\\\\\xe9\\\\xe9n uur\\\,hh:\\\%d uur\\\,d:\\\\\\\xe9\\\\xe9n dag\\\,dd:\\\%d dagen\\\,M:\\\\\\\xe9\\\\xe9n maand\\\,MM:\\\%d maanden\\\,y:\\\\\\\xe9\\\\xe9n jaar\\\,yy:\\\%d jaar\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1e||8e||20\u003Ce?\\\ste\\\:\\\de\\\)},week:{dow:1,doy:4}});var Fn\\\jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\\\.split(\\\_\\\),zn\\\jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\\\.split(\\\_\\\),Jn/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^juni.?$/i,/^juli.?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i,Nn/^(januari|februari|maart|april|mei|junli|augustus|september|oktober|november|december|jan\\\\.?|feb\\\\.?|mrt\\\\.?|apr\\\\.?|junl\\\\.?|aug\\\\.?|sep\\\\.?|okt\\\\.?|nov\\\\.?|dec\\\\.?)/i;l.defineLocale(\\\nl\\\,{months:\\\januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\\\.split(\\\_\\\),monthsShort:function(e,a){return e?/-MMM-/.test(a)?zne.month():Fne.month():Fn},monthsRegex:Nn,monthsShortRegex:Nn,monthsStrictRegex:/^(januari|februari|maart|april|mei|junli|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\\\.?|feb\\\\.?|mrt\\\\.?|apr\\\\.?|mei|junl\\\\.?|aug\\\\.?|sep\\\\.?|okt\\\\.?|nov\\\\.?|dec\\\\.?)/i,monthsParse:Jn,longMonthsParse:Jn,shortMonthsParse:Jn,weekdays:\\\zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\\\.split(\\\_\\\),weekdaysShort:\\\zo._ma._di._wo._do._vr._za.\\\.split(\\\_\\\),weekdaysMin:\\\zo_ma_di_wo_do_vr_za\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD-MM-YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\vandaag om LT\\\,nextDay:\\\morgen om LT\\\,nextWeek:\\\dddd om LT\\\,lastDay:\\\gisteren om LT\\\,lastWeek:\\\afgelopen dddd om LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\over %s\\\,past:\\\%s geleden\\\,s:\\\een paar seconden\\\,ss:\\\%d seconden\\\,m:\\\\\\\xe9\\\\xe9n minuut\\\,mm:\\\%d minuten\\\,h:\\\\\\\xe9\\\\xe9n uur\\\,hh:\\\%d uur\\\,d:\\\\\\\xe9\\\\xe9n dag\\\,dd:\\\%d dagen\\\,M:\\\\\\\xe9\\\\xe9n maand\\\,MM:\\\%d maanden\\\,y:\\\\\\\xe9\\\\xe9n jaar\\\,yy:\\\%d jaar\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1e||8e||20\u003Ce?\\\ste\\\:\\\de\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\nn\\\,{months:\\\januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\\\.split(\\\_\\\),weekdays:\\\sundag_m\\\\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag\\\.split(\\\_\\\),weekdaysShort:\\\sun_m\\\\xe5n_tys_ons_tor_fre_lau\\\.split(\\\_\\\),weekdaysMin:\\\su_m\\\\xe5_ty_on_to_fr_l\\\\xf8\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY kl. H:mm\\\,LLLL:\\\dddd D. MMMM YYYY kl. HH:mm\\\},calendar:{sameDay:\\\I dag klokka LT\\\,nextDay:\\\I morgon klokka LT\\\,nextWeek:\\\dddd klokka LT\\\,lastDay:\\\I g\\\\xe5r klokka LT\\\,lastWeek:\\\F\\\\xf8reg\\\\xe5ande dddd klokka LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\om %s\\\,past:\\\%s sidan\\\,s:\\\nokre sekund\\\,ss:\\\%d sekund\\\,m:\\\eit minutt\\\,mm:\\\%d minutt\\\,h:\\\ein time\\\,hh:\\\%d timar\\\,d:\\\ein dag\\\,dd:\\\%d dagar\\\,M:\\\ein m\\\\xe5nad\\\,MM:\\\%d m\\\\xe5nader\\\,y:\\\eit \\\\xe5r\\\,yy:\\\%d \\\\xe5r\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var Rn{1:\\\\\\\u0a67\\\,2:\\\\\\\u0a68\\\,3:\\\\\\\u0a69\\\,4:\\\\\\\u0a6a\\\,5:\\\\\\\u0a6b\\\,6:\\\\\\\u0a6c\\\,7:\\\\\\\u0a6d\\\,8:\\\\\\\u0a6e\\\,9:\\\\\\\u0a6f\\\,0:\\\\\\\u0a66\\\},Cn{\\\\\\\u0a67\\\:\\\1\\\,\\\\\\\u0a68\\\:\\\2\\\,\\\\\\\u0a69\\\:\\\3\\\,\\\\\\\u0a6a\\\:\\\4\\\,\\\\\\\u0a6b\\\:\\\5\\\,\\\\\\\u0a6c\\\:\\\6\\\,\\\\\\\u0a6d\\\:\\\7\\\,\\\\\\\u0a6e\\\:\\\8\\\,\\\\\\\u0a6f\\\:\\\9\\\,\\\\\\\u0a66\\\:\\\0\\\};l.defineLocale(\\\pa-in\\\,{months:\\\\\\\u0a1c\\\\u0a28\\\\u0a35\\\\u0a30\\\\u0a40_\\\\u0a2b\\\\u0a3c\\\\u0a30\\\\u0a35\\\\u0a30\\\\u0a40_\\\\u0a2e\\\\u0a3e\\\\u0a30\\\\u0a1a_\\\\u0a05\\\\u0a2a\\\\u0a4d\\\\u0a30\\\\u0a48\\\\u0a32_\\\\u0a2e\\\\u0a08_\\\\u0a1c\\\\u0a42\\\\u0a28_\\\\u0a1c\\\\u0a41\\\\u0a32\\\\u0a3e\\\\u0a08_\\\\u0a05\\\\u0a17\\\\u0a38\\\\u0a24_\\\\u0a38\\\\u0a24\\\\u0a70\\\\u0a2c\\\\u0a30_\\\\u0a05\\\\u0a15\\\\u0a24\\\\u0a42\\\\u0a2c\\\\u0a30_\\\\u0a28\\\\u0a35\\\\u0a70\\\\u0a2c\\\\u0a30_\\\\u0a26\\\\u0a38\\\\u0a70\\\\u0a2c\\\\u0a30\\\.split(\\\_\\\),monthsShort:\\\\\\\u0a1c\\\\u0a28\\\\u0a35\\\\u0a30\\\\u0a40_\\\\u0a2b\\\\u0a3c\\\\u0a30\\\\u0a35\\\\u0a30\\\\u0a40_\\\\u0a2e\\\\u0a3e\\\\u0a30\\\\u0a1a_\\\\u0a05\\\\u0a2a\\\\u0a4d\\\\u0a30\\\\u0a48\\\\u0a32_\\\\u0a2e\\\\u0a08_\\\\u0a1c\\\\u0a42\\\\u0a28_\\\\u0a1c\\\\u0a41\\\\u0a32\\\\u0a3e\\\\u0a08_\\\\u0a05\\\\u0a17\\\\u0a38\\\\u0a24_\\\\u0a38\\\\u0a24\\\\u0a70\\\\u0a2c\\\\u0a30_\\\\u0a05\\\\u0a15\\\\u0a24\\\\u0a42\\\\u0a2c\\\\u0a30_\\\\u0a28\\\\u0a35\\\\u0a70\\\\u0a2c\\\\u0a30_\\\\u0a26\\\\u0a38\\\\u0a70\\\\u0a2c\\\\u0a30\\\.split(\\\_\\\),weekdays:\\\\\\\u0a10\\\\u0a24\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a38\\\\u0a4b\\\\u0a2e\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a2e\\\\u0a70\\\\u0a17\\\\u0a32\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a2c\\\\u0a41\\\\u0a27\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a35\\\\u0a40\\\\u0a30\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a41\\\\u0a71\\\\u0a15\\\\u0a30\\\\u0a35\\\\u0a3e\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a28\\\\u0a40\\\\u0a1a\\\\u0a30\\\\u0a35\\\\u0a3e\\\\u0a30\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0a10\\\\u0a24_\\\\u0a38\\\\u0a4b\\\\u0a2e_\\\\u0a2e\\\\u0a70\\\\u0a17\\\\u0a32_\\\\u0a2c\\\\u0a41\\\\u0a27_\\\\u0a35\\\\u0a40\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a41\\\\u0a15\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a28\\\\u0a40\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0a10\\\\u0a24_\\\\u0a38\\\\u0a4b\\\\u0a2e_\\\\u0a2e\\\\u0a70\\\\u0a17\\\\u0a32_\\\\u0a2c\\\\u0a41\\\\u0a27_\\\\u0a35\\\\u0a40\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a41\\\\u0a15\\\\u0a30_\\\\u0a38\\\\u0a3c\\\\u0a28\\\\u0a40\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm \\\\u0a35\\\\u0a1c\\\\u0a47\\\,LTS:\\\A h:mm:ss \\\\u0a35\\\\u0a1c\\\\u0a47\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm \\\\u0a35\\\\u0a1c\\\\u0a47\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm \\\\u0a35\\\\u0a1c\\\\u0a47\\\},calendar:{sameDay:\\\\\\\u0a05\\\\u0a1c LT\\\,nextDay:\\\\\\\u0a15\\\\u0a32 LT\\\,nextWeek:\\\\\\\u0a05\\\\u0a17\\\\u0a32\\\\u0a3e dddd, LT\\\,lastDay:\\\\\\\u0a15\\\\u0a32 LT\\\,lastWeek:\\\\\\\u0a2a\\\\u0a3f\\\\u0a1b\\\\u0a32\\\\u0a47 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0a35\\\\u0a3f\\\\u0a71\\\\u0a1a\\\,past:\\\%s \\\\u0a2a\\\\u0a3f\\\\u0a1b\\\\u0a32\\\\u0a47\\\,s:\\\\\\\u0a15\\\\u0a41\\\\u0a1d \\\\u0a38\\\\u0a15\\\\u0a3f\\\\u0a70\\\\u0a1f\\\,ss:\\\%d \\\\u0a38\\\\u0a15\\\\u0a3f\\\\u0a70\\\\u0a1f\\\,m:\\\\\\\u0a07\\\\u0a15 \\\\u0a2e\\\\u0a3f\\\\u0a70\\\\u0a1f\\\,mm:\\\%d \\\\u0a2e\\\\u0a3f\\\\u0a70\\\\u0a1f\\\,h:\\\\\\\u0a07\\\\u0a71\\\\u0a15 \\\\u0a18\\\\u0a70\\\\u0a1f\\\\u0a3e\\\,hh:\\\%d \\\\u0a18\\\\u0a70\\\\u0a1f\\\\u0a47\\\,d:\\\\\\\u0a07\\\\u0a71\\\\u0a15 \\\\u0a26\\\\u0a3f\\\\u0a28\\\,dd:\\\%d \\\\u0a26\\\\u0a3f\\\\u0a28\\\,M:\\\\\\\u0a07\\\\u0a71\\\\u0a15 \\\\u0a2e\\\\u0a39\\\\u0a40\\\\u0a28\\\\u0a3e\\\,MM:\\\%d \\\\u0a2e\\\\u0a39\\\\u0a40\\\\u0a28\\\\u0a47\\\,y:\\\\\\\u0a07\\\\u0a71\\\\u0a15 \\\\u0a38\\\\u0a3e\\\\u0a32\\\,yy:\\\%d \\\\u0a38\\\\u0a3e\\\\u0a32\\\},preparse:function(e){return e.replace(/\\\\u0a67\\\\u0a68\\\\u0a69\\\\u0a6a\\\\u0a6b\\\\u0a6c\\\\u0a6d\\\\u0a6e\\\\u0a6f\\\\u0a66/g,function(e){return Cne})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return Rne})},meridiemParse:/\\\\u0a30\\\\u0a3e\\\\u0a24|\\\\u0a38\\\\u0a35\\\\u0a47\\\\u0a30|\\\\u0a26\\\\u0a41\\\\u0a2a\\\\u0a39\\\\u0a3f\\\\u0a30|\\\\u0a38\\\\u0a3c\\\\u0a3e\\\\u0a2e/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0a30\\\\u0a3e\\\\u0a24\\\a?e\u003C4?e:e+12:\\\\\\\u0a38\\\\u0a35\\\\u0a47\\\\u0a30\\\a?e:\\\\\\\u0a26\\\\u0a41\\\\u0a2a\\\\u0a39\\\\u0a3f\\\\u0a30\\\a?10\u003Ce?e:e+12:\\\\\\\u0a38\\\\u0a3c\\\\u0a3e\\\\u0a2e\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0a30\\\\u0a3e\\\\u0a24\\\:e\u003C10?\\\\\\\u0a38\\\\u0a35\\\\u0a47\\\\u0a30\\\:e\u003C17?\\\\\\\u0a26\\\\u0a41\\\\u0a2a\\\\u0a39\\\\u0a3f\\\\u0a30\\\:e\u003C20?\\\\\\\u0a38\\\\u0a3c\\\\u0a3e\\\\u0a2e\\\:\\\\\\\u0a30\\\\u0a3e\\\\u0a24\\\},week:{dow:0,doy:6}});var In\\\stycze\\\\u0144_luty_marzec_kwiecie\\\\u0144_maj_czerwiec_lipiec_sierpie\\\\u0144_wrzesie\\\\u0144_pa\\\\u017adziernik_listopad_grudzie\\\\u0144\\\.split(\\\_\\\),Un\\\stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\\\\u015bnia_pa\\\\u017adziernika_listopada_grudnia\\\.split(\\\_\\\);function Gn(e){return e%10\u003C5&&1\u003Ce%10&&~~(e/10)%10!1}function Vn(e,a,t){var se+\\\ \\\;switch(t){case\\\ss\\\:return s+(Gn(e)?\\\sekundy\\\:\\\sekund\\\);case\\\m\\\:return a?\\\minuta\\\:\\\minut\\\\u0119\\\;case\\\mm\\\:return s+(Gn(e)?\\\minuty\\\:\\\minut\\\);case\\\h\\\:return a?\\\godzina\\\:\\\godzin\\\\u0119\\\;case\\\hh\\\:return s+(Gn(e)?\\\godziny\\\:\\\godzin\\\);case\\\MM\\\:return s+(Gn(e)?\\\miesi\\\\u0105ce\\\:\\\miesi\\\\u0119cy\\\);case\\\yy\\\:return s+(Gn(e)?\\\lata\\\:\\\lat\\\)}}function Kn(e,a,t){var s\\\ \\\;return(20\u003Ce%100||100\u003Ce&&e%1000)&&(s\\\ de \\\),e+s+{ss:\\\secunde\\\,mm:\\\minute\\\,hh:\\\ore\\\,dd:\\\zile\\\,MM:\\\luni\\\,yy:\\\ani\\\}t}function Zn(e,a,t){var s,n;return\\\m\\\t?a?\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430\\\:\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0443\\\:e+\\\ \\\+(s+e,n{ss:a?\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0430_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\:\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0443_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u044b_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,mm:a?\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430_\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u044b_\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\:\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0443_\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u044b_\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,hh:\\\\\\\u0447\\\\u0430\\\\u0441_\\\\u0447\\\\u0430\\\\u0441\\\\u0430_\\\\u0447\\\\u0430\\\\u0441\\\\u043e\\\\u0432\\\,dd:\\\\\\\u0434\\\\u0435\\\\u043d\\\\u044c_\\\\u0434\\\\u043d\\\\u044f_\\\\u0434\\\\u043d\\\\u0435\\\\u0439\\\,MM:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446_\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\\u0430_\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\\u0435\\\\u0432\\\,yy:\\\\\\\u0433\\\\u043e\\\\u0434_\\\\u0433\\\\u043e\\\\u0434\\\\u0430_\\\\u043b\\\\u0435\\\\u0442\\\}t.split(\\\_\\\),s%101&&s%100!11?n0:2\u003Cs%10&&s%10\u003C4&&(s%100\u003C10||20\u003Cs%100)?n1:n2)}l.defineLocale(\\\pl\\\,{months:function(e,a){return e?\\\\\\a?\\\(\\\+Une.month()+\\\|\\\+Ine.month()+\\\)\\\:/D MMMM/.test(a)?Une.month():Ine.month():In},monthsShort:\\\sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\\\\u017a_lis_gru\\\.split(\\\_\\\),weekdays:\\\niedziela_poniedzia\\\\u0142ek_wtorek_\\\\u015broda_czwartek_pi\\\\u0105tek_sobota\\\.split(\\\_\\\),weekdaysShort:\\\ndz_pon_wt_\\\\u015br_czw_pt_sob\\\.split(\\\_\\\),weekdaysMin:\\\Nd_Pn_Wt_\\\\u015ar_Cz_Pt_So\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Dzi\\\\u015b o LT\\\,nextDay:\\\Jutro o LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\W niedziel\\\\u0119 o LT\\\;case 2:return\\\We wtorek o LT\\\;case 3:return\\\W \\\\u015brod\\\\u0119 o LT\\\;case 6:return\\\W sobot\\\\u0119 o LT\\\;default:return\\\W dddd o LT\\\}},lastDay:\\\Wczoraj o LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\W zesz\\\\u0142\\\\u0105 niedziel\\\\u0119 o LT\\\;case 3:return\\\W zesz\\\\u0142\\\\u0105 \\\\u015brod\\\\u0119 o LT\\\;case 6:return\\\W zesz\\\\u0142\\\\u0105 sobot\\\\u0119 o LT\\\;default:return\\\W zesz\\\\u0142y dddd o LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\%s temu\\\,s:\\\kilka sekund\\\,ss:Vn,m:Vn,mm:Vn,h:Vn,hh:Vn,d:\\\1 dzie\\\\u0144\\\,dd:\\\%d dni\\\,M:\\\miesi\\\\u0105c\\\,MM:Vn,y:\\\rok\\\,yy:Vn},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\pt-br\\\,{months:\\\Janeiro_Fevereiro_Mar\\\\xe7o_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro\\\.split(\\\_\\\),monthsShort:\\\Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\\\.split(\\\_\\\),weekdays:\\\Domingo_Segunda-feira_Ter\\\\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\Dom_Seg_Ter_Qua_Qui_Sex_S\\\\xe1b\\\.split(\\\_\\\),weekdaysMin:\\\Do_2\\\\xaa_3\\\\xaa_4\\\\xaa_5\\\\xaa_6\\\\xaa_S\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY \\\\xe0s HH:mm\\\,LLLL:\\\dddd, D de MMMM de YYYY \\\\xe0s HH:mm\\\},calendar:{sameDay:\\\Hoje \\\\xe0s LT\\\,nextDay:\\\Amanh\\\\xe3 \\\\xe0s LT\\\,nextWeek:\\\dddd \\\\xe0s LT\\\,lastDay:\\\Ontem \\\\xe0s LT\\\,lastWeek:function(){return 0this.day()||6this.day()?\\\\\\\xdaltimo dddd \\\\xe0s LT\\\:\\\\\\\xdaltima dddd \\\\xe0s LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\em %s\\\,past:\\\h\\\\xe1 %s\\\,s:\\\poucos segundos\\\,ss:\\\%d segundos\\\,m:\\\um minuto\\\,mm:\\\%d minutos\\\,h:\\\uma hora\\\,hh:\\\%d horas\\\,d:\\\um dia\\\,dd:\\\%d dias\\\,M:\\\um m\\\\xeas\\\,MM:\\\%d meses\\\,y:\\\um ano\\\,yy:\\\%d anos\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\}),l.defineLocale(\\\pt\\\,{months:\\\Janeiro_Fevereiro_Mar\\\\xe7o_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro\\\.split(\\\_\\\),monthsShort:\\\Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\\\.split(\\\_\\\),weekdays:\\\Domingo_Segunda-feira_Ter\\\\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\\\\xe1bado\\\.split(\\\_\\\),weekdaysShort:\\\Dom_Seg_Ter_Qua_Qui_Sex_S\\\\xe1b\\\.split(\\\_\\\),weekdaysMin:\\\Do_2\\\\xaa_3\\\\xaa_4\\\\xaa_5\\\\xaa_6\\\\xaa_S\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D de MMMM de YYYY\\\,LLL:\\\D de MMMM de YYYY HH:mm\\\,LLLL:\\\dddd, D de MMMM de YYYY HH:mm\\\},calendar:{sameDay:\\\Hoje \\\\xe0s LT\\\,nextDay:\\\Amanh\\\\xe3 \\\\xe0s LT\\\,nextWeek:\\\dddd \\\\xe0s LT\\\,lastDay:\\\Ontem \\\\xe0s LT\\\,lastWeek:function(){return 0this.day()||6this.day()?\\\\\\\xdaltimo dddd \\\\xe0s LT\\\:\\\\\\\xdaltima dddd \\\\xe0s LT\\\},sameElse:\\\L\\\},relativeTime:{future:\\\em %s\\\,past:\\\h\\\\xe1 %s\\\,s:\\\segundos\\\,ss:\\\%d segundos\\\,m:\\\um minuto\\\,mm:\\\%d minutos\\\,h:\\\uma hora\\\,hh:\\\%d horas\\\,d:\\\um dia\\\,dd:\\\%d dias\\\,M:\\\um m\\\\xeas\\\,MM:\\\%d meses\\\,y:\\\um ano\\\,yy:\\\%d anos\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\xba/,ordinal:\\\%d\\\\xba\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\ro\\\,{months:\\\ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\\\.split(\\\_\\\),monthsShort:\\\ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\duminic\\\\u0103_luni_mar\\\\u021bi_miercuri_joi_vineri_s\\\\xe2mb\\\\u0103t\\\\u0103\\\.split(\\\_\\\),weekdaysShort:\\\Dum_Lun_Mar_Mie_Joi_Vin_S\\\\xe2m\\\.split(\\\_\\\),weekdaysMin:\\\Du_Lu_Ma_Mi_Jo_Vi_S\\\\xe2\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY H:mm\\\,LLLL:\\\dddd, D MMMM YYYY H:mm\\\},calendar:{sameDay:\\\azi la LT\\\,nextDay:\\\m\\\\xe2ine la LT\\\,nextWeek:\\\dddd la LT\\\,lastDay:\\\ieri la LT\\\,lastWeek:\\\fosta dddd la LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\peste %s\\\,past:\\\%s \\\\xeen urm\\\\u0103\\\,s:\\\c\\\\xe2teva secunde\\\,ss:Kn,m:\\\un minut\\\,mm:Kn,h:\\\o or\\\\u0103\\\,hh:Kn,d:\\\o zi\\\,dd:Kn,M:\\\o lun\\\\u0103\\\,MM:Kn,y:\\\un an\\\,yy:Kn},week:{dow:1,doy:7}});var $n/^\\\\u044f\\\\u043d\\\\u0432/i,/^\\\\u0444\\\\u0435\\\\u0432/i,/^\\\\u043c\\\\u0430\\\\u0440/i,/^\\\\u0430\\\\u043f\\\\u0440/i,/^\\\\u043c\\\\u0430\\\\u0439\\\\u044f/i,/^\\\\u0438\\\\u044e\\\\u043d/i,/^\\\\u0438\\\\u044e\\\\u043b/i,/^\\\\u0430\\\\u0432\\\\u0433/i,/^\\\\u0441\\\\u0435\\\\u043d/i,/^\\\\u043e\\\\u043a\\\\u0442/i,/^\\\\u043d\\\\u043e\\\\u044f/i,/^\\\\u0434\\\\u0435\\\\u043a/i;l.defineLocale(\\\ru\\\,{months:{format:\\\\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044f_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044f_\\\\u043c\\\\u0430\\\\u0440\\\\u0442\\\\u0430_\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044f_\\\\u043c\\\\u0430\\\\u044f_\\\\u0438\\\\u044e\\\\u043d\\\\u044f_\\\\u0438\\\\u044e\\\\u043b\\\\u044f_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442\\\\u0430_\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044f_\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044f_\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044f_\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044f\\\.split(\\\_\\\),standalone:\\\\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044c_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044c_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044c_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d\\\\u044c_\\\\u0438\\\\u044e\\\\u043b\\\\u044c_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044c_\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044c\\\.split(\\\_\\\)},monthsShort:{format:\\\\\\\u044f\\\\u043d\\\\u0432._\\\\u0444\\\\u0435\\\\u0432\\\\u0440._\\\\u043c\\\\u0430\\\\u0440._\\\\u0430\\\\u043f\\\\u0440._\\\\u043c\\\\u0430\\\\u044f_\\\\u0438\\\\u044e\\\\u043d\\\\u044f_\\\\u0438\\\\u044e\\\\u043b\\\\u044f_\\\\u0430\\\\u0432\\\\u0433._\\\\u0441\\\\u0435\\\\u043d\\\\u0442._\\\\u043e\\\\u043a\\\\u0442._\\\\u043d\\\\u043e\\\\u044f\\\\u0431._\\\\u0434\\\\u0435\\\\u043a.\\\.split(\\\_\\\),standalone:\\\\\\\u044f\\\\u043d\\\\u0432._\\\\u0444\\\\u0435\\\\u0432\\\\u0440._\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440._\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d\\\\u044c_\\\\u0438\\\\u044e\\\\u043b\\\\u044c_\\\\u0430\\\\u0432\\\\u0433._\\\\u0441\\\\u0435\\\\u043d\\\\u0442._\\\\u043e\\\\u043a\\\\u0442._\\\\u043d\\\\u043e\\\\u044f\\\\u0431._\\\\u0434\\\\u0435\\\\u043a.\\\.split(\\\_\\\)},weekdays:{standalone:\\\\\\\u0432\\\\u043e\\\\u0441\\\\u043a\\\\u0440\\\\u0435\\\\u0441\\\\u0435\\\\u043d\\\\u044c\\\\u0435_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u044c\\\\u043d\\\\u0438\\\\u043a_\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043d\\\\u0438\\\\u043a_\\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0430_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0435\\\\u0440\\\\u0433_\\\\u043f\\\\u044f\\\\u0442\\\\u043d\\\\u0438\\\\u0446\\\\u0430_\\\\u0441\\\\u0443\\\\u0431\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),format:\\\\\\\u0432\\\\u043e\\\\u0441\\\\u043a\\\\u0440\\\\u0435\\\\u0441\\\\u0435\\\\u043d\\\\u044c\\\\u0435_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u043b\\\\u044c\\\\u043d\\\\u0438\\\\u043a_\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043d\\\\u0438\\\\u043a_\\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0443_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0435\\\\u0440\\\\u0433_\\\\u043f\\\\u044f\\\\u0442\\\\u043d\\\\u0438\\\\u0446\\\\u0443_\\\\u0441\\\\u0443\\\\u0431\\\\u0431\\\\u043e\\\\u0442\\\\u0443\\\.split(\\\_\\\),isFormat:/\\\\ ?\\\\u0412\\\\u0432 ?(?:\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u0443\\\\u044e|\\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u0443\\\\u044e\\\\u0449\\\\u0443\\\\u044e|\\\\u044d\\\\u0442\\\\u0443)? ?\\\\ ?dddd/},weekdaysShort:\\\\\\\u0432\\\\u0441_\\\\u043f\\\\u043d_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0442_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0432\\\\u0441_\\\\u043f\\\\u043d_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0442_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),monthsParse:$n,longMonthsParse:$n,shortMonthsParse:$n,monthsRegex:/^(\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044c\\\\u044f|\\\\u044f\\\\u043d\\\\u0432\\\\.?|\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044c\\\\u044f|\\\\u0444\\\\u0435\\\\u0432\\\\u0440?\\\\.?|\\\\u043c\\\\u0430\\\\u0440\\\\u0442\\\\u0430?|\\\\u043c\\\\u0430\\\\u0440\\\\.?|\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044c\\\\u044f|\\\\u0430\\\\u043f\\\\u0440\\\\.?|\\\\u043c\\\\u0430\\\\u0439\\\\u044f|\\\\u0438\\\\u044e\\\\u043d\\\\u044c\\\\u044f|\\\\u0438\\\\u044e\\\\u043d\\\\.?|\\\\u0438\\\\u044e\\\\u043b\\\\u044c\\\\u044f|\\\\u0438\\\\u044e\\\\u043b\\\\.?|\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442\\\\u0430?|\\\\u0430\\\\u0432\\\\u0433\\\\.?|\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u0441\\\\u0435\\\\u043d\\\\u0442?\\\\.?|\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u043e\\\\u043a\\\\u0442\\\\.?|\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u043d\\\\u043e\\\\u044f\\\\u0431?\\\\.?|\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u0434\\\\u0435\\\\u043a\\\\.?)/i,monthsShortRegex:/^(\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044c\\\\u044f|\\\\u044f\\\\u043d\\\\u0432\\\\.?|\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044c\\\\u044f|\\\\u0444\\\\u0435\\\\u0432\\\\u0440?\\\\.?|\\\\u043c\\\\u0430\\\\u0440\\\\u0442\\\\u0430?|\\\\u043c\\\\u0430\\\\u0440\\\\.?|\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044c\\\\u044f|\\\\u0430\\\\u043f\\\\u0440\\\\.?|\\\\u043c\\\\u0430\\\\u0439\\\\u044f|\\\\u0438\\\\u044e\\\\u043d\\\\u044c\\\\u044f|\\\\u0438\\\\u044e\\\\u043d\\\\.?|\\\\u0438\\\\u044e\\\\u043b\\\\u044c\\\\u044f|\\\\u0438\\\\u044e\\\\u043b\\\\.?|\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442\\\\u0430?|\\\\u0430\\\\u0432\\\\u0433\\\\.?|\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u0441\\\\u0435\\\\u043d\\\\u0442?\\\\.?|\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u043e\\\\u043a\\\\u0442\\\\.?|\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u043d\\\\u043e\\\\u044f\\\\u0431?\\\\.?|\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044c\\\\u044f|\\\\u0434\\\\u0435\\\\u043a\\\\.?)/i,monthsStrictRegex:/^(\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440\\\\u044f\\\\u044c|\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b\\\\u044f\\\\u044c|\\\\u043c\\\\u0430\\\\u0440\\\\u0442\\\\u0430?|\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b\\\\u044f\\\\u044c|\\\\u043c\\\\u0430\\\\u044f\\\\u0439|\\\\u0438\\\\u044e\\\\u043d\\\\u044f\\\\u044c|\\\\u0438\\\\u044e\\\\u043b\\\\u044f\\\\u044c|\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442\\\\u0430?|\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044f\\\\u044c|\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440\\\\u044f\\\\u044c|\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440\\\\u044f\\\\u044c|\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\\u044f\\\\u044c)/i,monthsShortStrictRegex:/^(\\\\u044f\\\\u043d\\\\u0432\\\\.|\\\\u0444\\\\u0435\\\\u0432\\\\u0440?\\\\.|\\\\u043c\\\\u0430\\\\u0440\\\\u0442.|\\\\u0430\\\\u043f\\\\u0440\\\\.|\\\\u043c\\\\u0430\\\\u044f\\\\u0439|\\\\u0438\\\\u044e\\\\u043d\\\\u044c\\\\u044f.|\\\\u0438\\\\u044e\\\\u043b\\\\u044c\\\\u044f.|\\\\u0430\\\\u0432\\\\u0433\\\\.|\\\\u0441\\\\u0435\\\\u043d\\\\u0442?\\\\.|\\\\u043e\\\\u043a\\\\u0442\\\\.|\\\\u043d\\\\u043e\\\\u044f\\\\u0431?\\\\.|\\\\u0434\\\\u0435\\\\u043a\\\\.)/i,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY \\\\u0433.\\\,LLL:\\\D MMMM YYYY \\\\u0433., H:mm\\\,LLLL:\\\dddd, D MMMM YYYY \\\\u0433., H:mm\\\},calendar:{sameDay:\\\\\\\u0421\\\\u0435\\\\u0433\\\\u043e\\\\u0434\\\\u043d\\\\u044f, \\\\u0432 LT\\\,nextDay:\\\\\\\u0417\\\\u0430\\\\u0432\\\\u0442\\\\u0440\\\\u0430, \\\\u0432 LT\\\,lastDay:\\\\\\\u0412\\\\u0447\\\\u0435\\\\u0440\\\\u0430, \\\\u0432 LT\\\,nextWeek:function(e){if(e.week()this.week())return 2this.day()?\\\\\\\u0412\\\\u043e dddd, \\\\u0432 LT\\\:\\\\\\\u0412 dddd, \\\\u0432 LT\\\;switch(this.day()){case 0:return\\\\\\\u0412 \\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u0443\\\\u044e\\\\u0449\\\\u0435\\\\u0435 dddd, \\\\u0432 LT\\\;case 1:case 2:case 4:return\\\\\\\u0412 \\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u0443\\\\u044e\\\\u0449\\\\u0438\\\\u0439 dddd, \\\\u0432 LT\\\;case 3:case 5:case 6:return\\\\\\\u0412 \\\\u0441\\\\u043b\\\\u0435\\\\u0434\\\\u0443\\\\u044e\\\\u0449\\\\u0443\\\\u044e dddd, \\\\u0432 LT\\\}},lastWeek:function(e){if(e.week()this.week())return 2this.day()?\\\\\\\u0412\\\\u043e dddd, \\\\u0432 LT\\\:\\\\\\\u0412 dddd, \\\\u0432 LT\\\;switch(this.day()){case 0:return\\\\\\\u0412 \\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u043e\\\\u0435 dddd, \\\\u0432 LT\\\;case 1:case 2:case 4:return\\\\\\\u0412 \\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u044b\\\\u0439 dddd, \\\\u0432 LT\\\;case 3:case 5:case 6:return\\\\\\\u0412 \\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u0443\\\\u044e dddd, \\\\u0432 LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0447\\\\u0435\\\\u0440\\\\u0435\\\\u0437 %s\\\,past:\\\%s \\\\u043d\\\\u0430\\\\u0437\\\\u0430\\\\u0434\\\,s:\\\\\\\u043d\\\\u0435\\\\u0441\\\\u043a\\\\u043e\\\\u043b\\\\u044c\\\\u043a\\\\u043e \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,ss:Zn,m:Zn,mm:Zn,h:\\\\\\\u0447\\\\u0430\\\\u0441\\\,hh:Zn,d:\\\\\\\u0434\\\\u0435\\\\u043d\\\\u044c\\\,dd:Zn,M:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u044f\\\\u0446\\\,MM:Zn,y:\\\\\\\u0433\\\\u043e\\\\u0434\\\,yy:Zn},meridiemParse:/\\\\u043d\\\\u043e\\\\u0447\\\\u0438|\\\\u0443\\\\u0442\\\\u0440\\\\u0430|\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u0435\\\\u0440\\\\u0430/i,isPM:function(e){return/^(\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u0435\\\\u0440\\\\u0430)$/.test(e)},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u043d\\\\u043e\\\\u0447\\\\u0438\\\:e\u003C12?\\\\\\\u0443\\\\u0442\\\\u0440\\\\u0430\\\:e\u003C17?\\\\\\\u0434\\\\u043d\\\\u044f\\\:\\\\\\\u0432\\\\u0435\\\\u0447\\\\u0435\\\\u0440\\\\u0430\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0439|\\\\u0433\\\\u043e|\\\\u044f)/,ordinal:function(e,a){switch(a){case\\\M\\\:case\\\d\\\:case\\\DDD\\\:return e+\\\-\\\\u0439\\\;case\\\D\\\:return e+\\\-\\\\u0433\\\\u043e\\\;case\\\w\\\:case\\\W\\\:return e+\\\-\\\\u044f\\\;default:return e}},week:{dow:1,doy:4}});var Bn\\\\\\\u062c\\\\u0646\\\\u0648\\\\u0631\\\\u064a\\\,\\\\\\\u0641\\\\u064a\\\\u0628\\\\u0631\\\\u0648\\\\u0631\\\\u064a\\\,\\\\\\\u0645\\\\u0627\\\\u0631\\\\u0686\\\,\\\\\\\u0627\\\\u067e\\\\u0631\\\\u064a\\\\u0644\\\,\\\\\\\u0645\\\\u0626\\\\u064a\\\,\\\\\\\u062c\\\\u0648\\\\u0646\\\,\\\\\\\u062c\\\\u0648\\\\u0644\\\\u0627\\\\u0621\\\\u0650\\\,\\\\\\\u0622\\\\u06af\\\\u0633\\\\u067d\\\,\\\\\\\u0633\\\\u064a\\\\u067e\\\\u067d\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u0622\\\\u06aa\\\\u067d\\\\u0648\\\\u0628\\\\u0631\\\,\\\\\\\u0646\\\\u0648\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u068a\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\,qn\\\\\\\u0622\\\\u0686\\\\u0631\\\,\\\\\\\u0633\\\\u0648\\\\u0645\\\\u0631\\\,\\\\\\\u0627\\\\u06b1\\\\u0627\\\\u0631\\\\u0648\\\,\\\\\\\u0627\\\\u0631\\\\u0628\\\\u0639\\\,\\\\\\\u062e\\\\u0645\\\\u064a\\\\u0633\\\,\\\\\\\u062c\\\\u0645\\\\u0639\\\,\\\\\\\u0687\\\\u0646\\\\u0687\\\\u0631\\\;l.defineLocale(\\\sd\\\,{months:Bn,monthsShort:Bn,weekdays:qn,weekdaysShort:qn,weekdaysMin:qn,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd\\\\u060c D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0635\\\\u0628\\\\u062d|\\\\u0634\\\\u0627\\\\u0645/,isPM:function(e){return\\\\\\\u0634\\\\u0627\\\\u0645\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0635\\\\u0628\\\\u062d\\\:\\\\\\\u0634\\\\u0627\\\\u0645\\\},calendar:{sameDay:\\\\\\\u0627\\\\u0684 LT\\\,nextDay:\\\\\\\u0633\\\\u0680\\\\u0627\\\\u06bb\\\\u064a LT\\\,nextWeek:\\\dddd \\\\u0627\\\\u06b3\\\\u064a\\\\u0646 \\\\u0647\\\\u0641\\\\u062a\\\\u064a \\\\u062a\\\\u064a LT\\\,lastDay:\\\\\\\u06aa\\\\u0627\\\\u0644\\\\u0647\\\\u0647 LT\\\,lastWeek:\\\\\\\u06af\\\\u0632\\\\u0631\\\\u064a\\\\u0644 \\\\u0647\\\\u0641\\\\u062a\\\\u064a dddd \\\\u062a\\\\u064a LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u067e\\\\u0648\\\\u0621\\\,past:\\\%s \\\\u0627\\\\u06b3\\\,s:\\\\\\\u0686\\\\u0646\\\\u062f \\\\u0633\\\\u064a\\\\u06aa\\\\u0646\\\\u068a\\\,ss:\\\%d \\\\u0633\\\\u064a\\\\u06aa\\\\u0646\\\\u068a\\\,m:\\\\\\\u0647\\\\u06aa \\\\u0645\\\\u0646\\\\u067d\\\,mm:\\\%d \\\\u0645\\\\u0646\\\\u067d\\\,h:\\\\\\\u0647\\\\u06aa \\\\u06aa\\\\u0644\\\\u0627\\\\u06aa\\\,hh:\\\%d \\\\u06aa\\\\u0644\\\\u0627\\\\u06aa\\\,d:\\\\\\\u0647\\\\u06aa \\\\u068f\\\\u064a\\\\u0646\\\\u0647\\\\u0646\\\,dd:\\\%d \\\\u068f\\\\u064a\\\\u0646\\\\u0647\\\\u0646\\\,M:\\\\\\\u0647\\\\u06aa \\\\u0645\\\\u0647\\\\u064a\\\\u0646\\\\u0648\\\,MM:\\\%d \\\\u0645\\\\u0647\\\\u064a\\\\u0646\\\\u0627\\\,y:\\\\\\\u0647\\\\u06aa \\\\u0633\\\\u0627\\\\u0644\\\,yy:\\\%d \\\\u0633\\\\u0627\\\\u0644\\\},preparse:function(e){return e.replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/,/g,\\\\\\\u060c\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\se\\\,{months:\\\o\\\\u0111\\\\u0111ajagem\\\\xe1nnu_guovvam\\\\xe1nnu_njuk\\\\u010dam\\\\xe1nnu_cuo\\\\u014bom\\\\xe1nnu_miessem\\\\xe1nnu_geassem\\\\xe1nnu_suoidnem\\\\xe1nnu_borgem\\\\xe1nnu_\\\\u010dak\\\\u010dam\\\\xe1nnu_golggotm\\\\xe1nnu_sk\\\\xe1bmam\\\\xe1nnu_juovlam\\\\xe1nnu\\\.split(\\\_\\\),monthsShort:\\\o\\\\u0111\\\\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\\\\u010dak\\\\u010d_golg_sk\\\\xe1b_juov\\\.split(\\\_\\\),weekdays:\\\sotnabeaivi_vuoss\\\\xe1rga_ma\\\\u014b\\\\u014beb\\\\xe1rga_gaskavahkku_duorastat_bearjadat_l\\\\xe1vvardat\\\.split(\\\_\\\),weekdaysShort:\\\sotn_vuos_ma\\\\u014b_gask_duor_bear_l\\\\xe1v\\\.split(\\\_\\\),weekdaysMin:\\\s_v_m_g_d_b_L\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\MMMM D. b. YYYY\\\,LLL:\\\MMMM D. b. YYYY ti. HH:mm\\\,LLLL:\\\dddd, MMMM D. b. YYYY ti. HH:mm\\\},calendar:{sameDay:\\\otne ti LT\\\,nextDay:\\\ihttin ti LT\\\,nextWeek:\\\dddd ti LT\\\,lastDay:\\\ikte ti LT\\\,lastWeek:\\\ovddit dddd ti LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s gea\\\\u017ees\\\,past:\\\ma\\\\u014bit %s\\\,s:\\\moadde sekunddat\\\,ss:\\\%d sekunddat\\\,m:\\\okta minuhta\\\,mm:\\\%d minuhtat\\\,h:\\\okta diimmu\\\,hh:\\\%d diimmut\\\,d:\\\okta beaivi\\\,dd:\\\%d beaivvit\\\,M:\\\okta m\\\\xe1nnu\\\,MM:\\\%d m\\\\xe1nut\\\,y:\\\okta jahki\\\,yy:\\\%d jagit\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\si\\\,{months:\\\\\\\u0da2\\\\u0db1\\\\u0dc0\\\\u0dcf\\\\u0dbb\\\\u0dd2_\\\\u0db4\\\\u0dd9\\\\u0db6\\\\u0dbb\\\\u0dc0\\\\u0dcf\\\\u0dbb\\\\u0dd2_\\\\u0db8\\\\u0dcf\\\\u0dbb\\\\u0dca\\\\u0dad\\\\u0dd4_\\\\u0d85\\\\u0db4\\\\u0dca\\\\u200d\\\\u0dbb\\\\u0dda\\\\u0dbd\\\\u0dca_\\\\u0db8\\\\u0dd0\\\\u0dba\\\\u0dd2_\\\\u0da2\\\\u0dd6\\\\u0db1\\\\u0dd2_\\\\u0da2\\\\u0dd6\\\\u0dbd\\\\u0dd2_\\\\u0d85\\\\u0d9c\\\\u0ddd\\\\u0dc3\\\\u0dca\\\\u0dad\\\\u0dd4_\\\\u0dc3\\\\u0dd0\\\\u0db4\\\\u0dca\\\\u0dad\\\\u0dd0\\\\u0db8\\\\u0dca\\\\u0db6\\\\u0dbb\\\\u0dca_\\\\u0d94\\\\u0d9a\\\\u0dca\\\\u0dad\\\\u0ddd\\\\u0db6\\\\u0dbb\\\\u0dca_\\\\u0db1\\\\u0ddc\\\\u0dc0\\\\u0dd0\\\\u0db8\\\\u0dca\\\\u0db6\\\\u0dbb\\\\u0dca_\\\\u0daf\\\\u0dd9\\\\u0dc3\\\\u0dd0\\\\u0db8\\\\u0dca\\\\u0db6\\\\u0dbb\\\\u0dca\\\.split(\\\_\\\),monthsShort:\\\\\\\u0da2\\\\u0db1_\\\\u0db4\\\\u0dd9\\\\u0db6_\\\\u0db8\\\\u0dcf\\\\u0dbb\\\\u0dca_\\\\u0d85\\\\u0db4\\\\u0dca_\\\\u0db8\\\\u0dd0\\\\u0dba\\\\u0dd2_\\\\u0da2\\\\u0dd6\\\\u0db1\\\\u0dd2_\\\\u0da2\\\\u0dd6\\\\u0dbd\\\\u0dd2_\\\\u0d85\\\\u0d9c\\\\u0ddd_\\\\u0dc3\\\\u0dd0\\\\u0db4\\\\u0dca_\\\\u0d94\\\\u0d9a\\\\u0dca_\\\\u0db1\\\\u0ddc\\\\u0dc0\\\\u0dd0_\\\\u0daf\\\\u0dd9\\\\u0dc3\\\\u0dd0\\\.split(\\\_\\\),weekdays:\\\\\\\u0d89\\\\u0dbb\\\\u0dd2\\\\u0daf\\\\u0dcf_\\\\u0dc3\\\\u0db3\\\\u0dd4\\\\u0daf\\\\u0dcf_\\\\u0d85\\\\u0d9f\\\\u0dc4\\\\u0dbb\\\\u0dd4\\\\u0dc0\\\\u0dcf\\\\u0daf\\\\u0dcf_\\\\u0db6\\\\u0daf\\\\u0dcf\\\\u0daf\\\\u0dcf_\\\\u0db6\\\\u0dca\\\\u200d\\\\u0dbb\\\\u0dc4\\\\u0dc3\\\\u0dca\\\\u0db4\\\\u0dad\\\\u0dd2\\\\u0db1\\\\u0dca\\\\u0daf\\\\u0dcf_\\\\u0dc3\\\\u0dd2\\\\u0d9a\\\\u0dd4\\\\u0dbb\\\\u0dcf\\\\u0daf\\\\u0dcf_\\\\u0dc3\\\\u0dd9\\\\u0db1\\\\u0dc3\\\\u0dd4\\\\u0dbb\\\\u0dcf\\\\u0daf\\\\u0dcf\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0d89\\\\u0dbb\\\\u0dd2_\\\\u0dc3\\\\u0db3\\\\u0dd4_\\\\u0d85\\\\u0d9f_\\\\u0db6\\\\u0daf\\\\u0dcf_\\\\u0db6\\\\u0dca\\\\u200d\\\\u0dbb\\\\u0dc4_\\\\u0dc3\\\\u0dd2\\\\u0d9a\\\\u0dd4_\\\\u0dc3\\\\u0dd9\\\\u0db1\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0d89_\\\\u0dc3_\\\\u0d85_\\\\u0db6_\\\\u0db6\\\\u0dca\\\\u200d\\\\u0dbb_\\\\u0dc3\\\\u0dd2_\\\\u0dc3\\\\u0dd9\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\a h:mm\\\,LTS:\\\a h:mm:ss\\\,L:\\\YYYY/MM/DD\\\,LL:\\\YYYY MMMM D\\\,LLL:\\\YYYY MMMM D, a h:mm\\\,LLLL:\\\YYYY MMMM D \\\\u0dc0\\\\u0dd0\\\\u0db1\\\\u0dd2 dddd, a h:mm:ss\\\},calendar:{sameDay:\\\\\\\u0d85\\\\u0daf LT\\\\u0da7\\\,nextDay:\\\\\\\u0dc4\\\\u0dd9\\\\u0da7 LT\\\\u0da7\\\,nextWeek:\\\dddd LT\\\\u0da7\\\,lastDay:\\\\\\\u0d8a\\\\u0dba\\\\u0dda LT\\\\u0da7\\\,lastWeek:\\\\\\\u0db4\\\\u0dc3\\\\u0dd4\\\\u0d9c\\\\u0dd2\\\\u0dba dddd LT\\\\u0da7\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s\\\\u0d9a\\\\u0dd2\\\\u0db1\\\\u0dca\\\,past:\\\%s\\\\u0d9a\\\\u0da7 \\\\u0db4\\\\u0dd9\\\\u0dbb\\\,s:\\\\\\\u0dad\\\\u0dad\\\\u0dca\\\\u0db4\\\\u0dbb \\\\u0d9a\\\\u0dd2\\\\u0dc4\\\\u0dd2\\\\u0db4\\\\u0dba\\\,ss:\\\\\\\u0dad\\\\u0dad\\\\u0dca\\\\u0db4\\\\u0dbb %d\\\,m:\\\\\\\u0db8\\\\u0dd2\\\\u0db1\\\\u0dd2\\\\u0dad\\\\u0dca\\\\u0dad\\\\u0dd4\\\\u0dc0\\\,mm:\\\\\\\u0db8\\\\u0dd2\\\\u0db1\\\\u0dd2\\\\u0dad\\\\u0dca\\\\u0dad\\\\u0dd4 %d\\\,h:\\\\\\\u0db4\\\\u0dd0\\\\u0dba\\\,hh:\\\\\\\u0db4\\\\u0dd0\\\\u0dba %d\\\,d:\\\\\\\u0daf\\\\u0dd2\\\\u0db1\\\\u0dba\\\,dd:\\\\\\\u0daf\\\\u0dd2\\\\u0db1 %d\\\,M:\\\\\\\u0db8\\\\u0dcf\\\\u0dc3\\\\u0dba\\\,MM:\\\\\\\u0db8\\\\u0dcf\\\\u0dc3 %d\\\,y:\\\\\\\u0dc0\\\\u0dc3\\\\u0dbb\\\,yy:\\\\\\\u0dc0\\\\u0dc3\\\\u0dbb %d\\\},dayOfMonthOrdinalParse:/\\\\d{1,2} \\\\u0dc0\\\\u0dd0\\\\u0db1\\\\u0dd2/,ordinal:function(e){return e+\\\ \\\\u0dc0\\\\u0dd0\\\\u0db1\\\\u0dd2\\\},meridiemParse:/\\\\u0db4\\\\u0dd9\\\\u0dbb \\\\u0dc0\\\\u0dbb\\\\u0dd4|\\\\u0db4\\\\u0dc3\\\\u0dca \\\\u0dc0\\\\u0dbb\\\\u0dd4|\\\\u0db4\\\\u0dd9.\\\\u0dc0|\\\\u0db4.\\\\u0dc0./,isPM:function(e){return\\\\\\\u0db4.\\\\u0dc0.\\\e||\\\\\\\u0db4\\\\u0dc3\\\\u0dca \\\\u0dc0\\\\u0dbb\\\\u0dd4\\\e},meridiem:function(e,a,t){return 11\u003Ce?t?\\\\\\\u0db4.\\\\u0dc0.\\\:\\\\\\\u0db4\\\\u0dc3\\\\u0dca \\\\u0dc0\\\\u0dbb\\\\u0dd4\\\:t?\\\\\\\u0db4\\\\u0dd9.\\\\u0dc0.\\\:\\\\\\\u0db4\\\\u0dd9\\\\u0dbb \\\\u0dc0\\\\u0dbb\\\\u0dd4\\\}});var Qn\\\janu\\\\xe1r_febru\\\\xe1r_marec_apr\\\\xedl_m\\\\xe1j_j\\\\xfan_j\\\\xfal_august_september_okt\\\\xf3ber_november_december\\\.split(\\\_\\\),Xn\\\jan_feb_mar_apr_m\\\\xe1j_j\\\\xfan_j\\\\xfal_aug_sep_okt_nov_dec\\\.split(\\\_\\\);function ed(e){return 1\u003Ce&&e\u003C5}function ad(e,a,t,s){var ne+\\\ \\\;switch(t){case\\\s\\\:return a||s?\\\p\\\\xe1r sek\\\\xfand\\\:\\\p\\\\xe1r sekundami\\\;case\\\ss\\\:return a||s?n+(ed(e)?\\\sekundy\\\:\\\sek\\\\xfand\\\):n+\\\sekundami\\\;break;case\\\m\\\:return a?\\\min\\\\xfata\\\:s?\\\min\\\\xfatu\\\:\\\min\\\\xfatou\\\;case\\\mm\\\:return a||s?n+(ed(e)?\\\min\\\\xfaty\\\:\\\min\\\\xfat\\\):n+\\\min\\\\xfatami\\\;break;case\\\h\\\:return a?\\\hodina\\\:s?\\\hodinu\\\:\\\hodinou\\\;case\\\hh\\\:return a||s?n+(ed(e)?\\\hodiny\\\:\\\hod\\\\xedn\\\):n+\\\hodinami\\\;break;case\\\d\\\:return a||s?\\\de\\\\u0148\\\:\\\d\\\\u0148om\\\;case\\\dd\\\:return a||s?n+(ed(e)?\\\dni\\\:\\\dn\\\\xed\\\):n+\\\d\\\\u0148ami\\\;break;case\\\M\\\:return a||s?\\\mesiac\\\:\\\mesiacom\\\;case\\\MM\\\:return a||s?n+(ed(e)?\\\mesiace\\\:\\\mesiacov\\\):n+\\\mesiacmi\\\;break;case\\\y\\\:return a||s?\\\rok\\\:\\\rokom\\\;case\\\yy\\\:return a||s?n+(ed(e)?\\\roky\\\:\\\rokov\\\):n+\\\rokmi\\\;break}}function td(e,a,t,s){var ne+\\\ \\\;switch(t){case\\\s\\\:return a||s?\\\nekaj sekund\\\:\\\nekaj sekundami\\\;case\\\ss\\\:return n+1e?a?\\\sekundo\\\:\\\sekundi\\\:2e?a||s?\\\sekundi\\\:\\\sekundah\\\:e\u003C5?a||s?\\\sekunde\\\:\\\sekundah\\\:\\\sekund\\\;case\\\m\\\:return a?\\\ena minuta\\\:\\\eno minuto\\\;case\\\mm\\\:return n+1e?a?\\\minuta\\\:\\\minuto\\\:2e?a||s?\\\minuti\\\:\\\minutama\\\:e\u003C5?a||s?\\\minute\\\:\\\minutami\\\:a||s?\\\minut\\\:\\\minutami\\\;case\\\h\\\:return a?\\\ena ura\\\:\\\eno uro\\\;case\\\hh\\\:return n+1e?a?\\\ura\\\:\\\uro\\\:2e?a||s?\\\uri\\\:\\\urama\\\:e\u003C5?a||s?\\\ure\\\:\\\urami\\\:a||s?\\\ur\\\:\\\urami\\\;case\\\d\\\:return a||s?\\\en dan\\\:\\\enim dnem\\\;case\\\dd\\\:return n+1e?a||s?\\\dan\\\:\\\dnem\\\:2e?a||s?\\\dni\\\:\\\dnevoma\\\:a||s?\\\dni\\\:\\\dnevi\\\;case\\\M\\\:return a||s?\\\en mesec\\\:\\\enim mesecem\\\;case\\\MM\\\:return n+1e?a||s?\\\mesec\\\:\\\mesecem\\\:2e?a||s?\\\meseca\\\:\\\mesecema\\\:e\u003C5?a||s?\\\mesece\\\:\\\meseci\\\:a||s?\\\mesecev\\\:\\\meseci\\\;case\\\y\\\:return a||s?\\\eno leto\\\:\\\enim letom\\\;case\\\yy\\\:return n+1e?a||s?\\\leto\\\:\\\letom\\\:2e?a||s?\\\leti\\\:\\\letoma\\\:e\u003C5?a||s?\\\leta\\\:\\\leti\\\:a||s?\\\let\\\:\\\leti\\\}}l.defineLocale(\\\sk\\\,{months:Qn,monthsShort:Xn,weekdays:\\\nede\\\\u013ea_pondelok_utorok_streda_\\\\u0161tvrtok_piatok_sobota\\\.split(\\\_\\\),weekdaysShort:\\\ne_po_ut_st_\\\\u0161t_pi_so\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_ut_st_\\\\u0161t_pi_so\\\.split(\\\_\\\),longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\dnes o LT\\\,nextDay:\\\zajtra o LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\v nede\\\\u013eu o LT\\\;case 1:case 2:return\\\v dddd o LT\\\;case 3:return\\\v stredu o LT\\\;case 4:return\\\vo \\\\u0161tvrtok o LT\\\;case 5:return\\\v piatok o LT\\\;case 6:return\\\v sobotu o LT\\\}},lastDay:\\\v\\\\u010dera o LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\minul\\\\xfa nede\\\\u013eu o LT\\\;case 1:case 2:return\\\minul\\\\xfd dddd o LT\\\;case 3:return\\\minul\\\\xfa stredu o LT\\\;case 4:case 5:return\\\minul\\\\xfd dddd o LT\\\;case 6:return\\\minul\\\\xfa sobotu o LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\pred %s\\\,s:ad,ss:ad,m:ad,mm:ad,h:ad,hh:ad,d:ad,dd:ad,M:ad,MM:ad,y:ad,yy:ad},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\sl\\\,{months:\\\januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\\\.split(\\\_\\\),monthsShort:\\\jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\nedelja_ponedeljek_torek_sreda_\\\\u010detrtek_petek_sobota\\\.split(\\\_\\\),weekdaysShort:\\\ned._pon._tor._sre._\\\\u010det._pet._sob.\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_to_sr_\\\\u010de_pe_so\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\danes ob LT\\\,nextDay:\\\jutri ob LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\v nedeljo ob LT\\\;case 3:return\\\v sredo ob LT\\\;case 6:return\\\v soboto ob LT\\\;case 1:case 2:case 4:case 5:return\\\v dddd ob LT\\\}},lastDay:\\\v\\\\u010deraj ob LT\\\,lastWeek:function(){switch(this.day()){case 0:return\\\prej\\\\u0161njo nedeljo ob LT\\\;case 3:return\\\prej\\\\u0161njo sredo ob LT\\\;case 6:return\\\prej\\\\u0161njo soboto ob LT\\\;case 1:case 2:case 4:case 5:return\\\prej\\\\u0161nji dddd ob LT\\\}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u010dez %s\\\,past:\\\pred %s\\\,s:td,ss:td,m:td,mm:td,h:td,hh:td,d:td,dd:td,M:td,MM:td,y:td,yy:td},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}}),l.defineLocale(\\\sq\\\,{months:\\\Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\\\\xebntor_Dhjetor\\\.split(\\\_\\\),monthsShort:\\\Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\\\\xebn_Dhj\\\.split(\\\_\\\),weekdays:\\\E Diel_E H\\\\xebn\\\\xeb_E Mart\\\\xeb_E M\\\\xebrkur\\\\xeb_E Enjte_E Premte_E Shtun\\\\xeb\\\.split(\\\_\\\),weekdaysShort:\\\Die_H\\\\xebn_Mar_M\\\\xebr_Enj_Pre_Sht\\\.split(\\\_\\\),weekdaysMin:\\\D_H_Ma_M\\\\xeb_E_P_Sh\\\.split(\\\_\\\),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return\\\M\\\e.charAt(0)},meridiem:function(e,a,t){return e\u003C12?\\\PD\\\:\\\MD\\\},longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Sot n\\\\xeb LT\\\,nextDay:\\\Nes\\\\xebr n\\\\xeb LT\\\,nextWeek:\\\dddd n\\\\xeb LT\\\,lastDay:\\\Dje n\\\\xeb LT\\\,lastWeek:\\\dddd e kaluar n\\\\xeb LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\n\\\\xeb %s\\\,past:\\\%s m\\\\xeb par\\\\xeb\\\,s:\\\disa sekonda\\\,ss:\\\%d sekonda\\\,m:\\\nj\\\\xeb minut\\\\xeb\\\,mm:\\\%d minuta\\\,h:\\\nj\\\\xeb or\\\\xeb\\\,hh:\\\%d or\\\\xeb\\\,d:\\\nj\\\\xeb dit\\\\xeb\\\,dd:\\\%d dit\\\\xeb\\\,M:\\\nj\\\\xeb muaj\\\,MM:\\\%d muaj\\\,y:\\\nj\\\\xeb vit\\\,yy:\\\%d vite\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var sd{words:{ss:\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0430\\\,\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0435\\\,\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,m:\\\\\\\u0458\\\\u0435\\\\u0434\\\\u0430\\\\u043d \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,\\\\\\\u0458\\\\u0435\\\\u0434\\\\u043d\\\\u0435 \\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0435\\\,mm:\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\,\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0435\\\,\\\\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u0442\\\\u0430\\\,h:\\\\\\\u0458\\\\u0435\\\\u0434\\\\u0430\\\\u043d \\\\u0441\\\\u0430\\\\u0442\\\,\\\\\\\u0458\\\\u0435\\\\u0434\\\\u043d\\\\u043e\\\\u0433 \\\\u0441\\\\u0430\\\\u0442\\\\u0430\\\,hh:\\\\\\\u0441\\\\u0430\\\\u0442\\\,\\\\\\\u0441\\\\u0430\\\\u0442\\\\u0430\\\,\\\\\\\u0441\\\\u0430\\\\u0442\\\\u0438\\\,dd:\\\\\\\u0434\\\\u0430\\\\u043d\\\,\\\\\\\u0434\\\\u0430\\\\u043d\\\\u0430\\\,\\\\\\\u0434\\\\u0430\\\\u043d\\\\u0430\\\,MM:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\,\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\\u0430\\\,\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\\u0438\\\,yy:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\,\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0435\\\,\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\},correctGrammaticalCase:function(e,a){return 1e?a0:2\u003Ce&&e\u003C4?a1:a2},translate:function(e,a,t){var ssd.wordst;return 1t.length?a?s0:s1:e+\\\ \\\+sd.correctGrammaticalCase(e,s)}};l.defineLocale(\\\sr-cyrl\\\,{months:\\\\\\\u0458\\\\u0430\\\\u043d\\\\u0443\\\\u0430\\\\u0440_\\\\u0444\\\\u0435\\\\u0431\\\\u0440\\\\u0443\\\\u0430\\\\u0440_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0438\\\\u043b_\\\\u043c\\\\u0430\\\\u0458_\\\\u0458\\\\u0443\\\\u043d_\\\\u0458\\\\u0443\\\\u043b_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043f\\\\u0442\\\\u0435\\\\u043c\\\\u0431\\\\u0430\\\\u0440_\\\\u043e\\\\u043a\\\\u0442\\\\u043e\\\\u0431\\\\u0430\\\\u0440_\\\\u043d\\\\u043e\\\\u0432\\\\u0435\\\\u043c\\\\u0431\\\\u0430\\\\u0440_\\\\u0434\\\\u0435\\\\u0446\\\\u0435\\\\u043c\\\\u0431\\\\u0430\\\\u0440\\\.split(\\\_\\\),monthsShort:\\\\\\\u0458\\\\u0430\\\\u043d._\\\\u0444\\\\u0435\\\\u0431._\\\\u043c\\\\u0430\\\\u0440._\\\\u0430\\\\u043f\\\\u0440._\\\\u043c\\\\u0430\\\\u0458_\\\\u0458\\\\u0443\\\\u043d_\\\\u0458\\\\u0443\\\\u043b_\\\\u0430\\\\u0432\\\\u0433._\\\\u0441\\\\u0435\\\\u043f._\\\\u043e\\\\u043a\\\\u0442._\\\\u043d\\\\u043e\\\\u0432._\\\\u0434\\\\u0435\\\\u0446.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u0459\\\\u0430_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u0459\\\\u0430\\\\u043a_\\\\u0443\\\\u0442\\\\u043e\\\\u0440\\\\u0430\\\\u043a_\\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0430_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0440\\\\u0442\\\\u0430\\\\u043a_\\\\u043f\\\\u0435\\\\u0442\\\\u0430\\\\u043a_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u043d\\\\u0435\\\\u0434._\\\\u043f\\\\u043e\\\\u043d._\\\\u0443\\\\u0442\\\\u043e._\\\\u0441\\\\u0440\\\\u0435._\\\\u0447\\\\u0435\\\\u0442._\\\\u043f\\\\u0435\\\\u0442._\\\\u0441\\\\u0443\\\\u0431.\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u043d\\\\u0435_\\\\u043f\\\\u043e_\\\\u0443\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0435_\\\\u043f\\\\u0435_\\\\u0441\\\\u0443\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\\\\\u0434\\\\u0430\\\\u043d\\\\u0430\\\\u0441 \\\\u0443 LT\\\,nextDay:\\\\\\\u0441\\\\u0443\\\\u0442\\\\u0440\\\\u0430 \\\\u0443 LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\\\\\u0443 \\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u0459\\\\u0443 \\\\u0443 LT\\\;case 3:return\\\\\\\u0443 \\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0443 \\\\u0443 LT\\\;case 6:return\\\\\\\u0443 \\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0443 \\\\u0443 LT\\\;case 1:case 2:case 4:case 5:return\\\\\\\u0443 dddd \\\\u0443 LT\\\}},lastDay:\\\\\\\u0458\\\\u0443\\\\u0447\\\\u0435 \\\\u0443 LT\\\,lastWeek:function(){return\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u0435 \\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u0459\\\\u0435 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u043e\\\\u0433 \\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0435\\\\u0459\\\\u043a\\\\u0430 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u043e\\\\u0433 \\\\u0443\\\\u0442\\\\u043e\\\\u0440\\\\u043a\\\\u0430 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u0435 \\\\u0441\\\\u0440\\\\u0435\\\\u0434\\\\u0435 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u043e\\\\u0433 \\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0440\\\\u0442\\\\u043a\\\\u0430 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u043e\\\\u0433 \\\\u043f\\\\u0435\\\\u0442\\\\u043a\\\\u0430 \\\\u0443 LT\\\,\\\\\\\u043f\\\\u0440\\\\u043e\\\\u0448\\\\u043b\\\\u0435 \\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0435 \\\\u0443 LT\\\this.day()},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0437\\\\u0430 %s\\\,past:\\\\\\\u043f\\\\u0440\\\\u0435 %s\\\,s:\\\\\\\u043d\\\\u0435\\\\u043a\\\\u043e\\\\u043b\\\\u0438\\\\u043a\\\\u043e \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438\\\,ss:sd.translate,m:sd.translate,mm:sd.translate,h:sd.translate,hh:sd.translate,d:\\\\\\\u0434\\\\u0430\\\\u043d\\\,dd:sd.translate,M:\\\\\\\u043c\\\\u0435\\\\u0441\\\\u0435\\\\u0446\\\,MM:sd.translate,y:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0443\\\,yy:sd.translate},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}});var nd{words:{ss:\\\sekunda\\\,\\\sekunde\\\,\\\sekundi\\\,m:\\\jedan minut\\\,\\\jedne minute\\\,mm:\\\minut\\\,\\\minute\\\,\\\minuta\\\,h:\\\jedan sat\\\,\\\jednog sata\\\,hh:\\\sat\\\,\\\sata\\\,\\\sati\\\,dd:\\\dan\\\,\\\dana\\\,\\\dana\\\,MM:\\\mesec\\\,\\\meseca\\\,\\\meseci\\\,yy:\\\godina\\\,\\\godine\\\,\\\godina\\\},correctGrammaticalCase:function(e,a){return 1e?a0:2\u003Ce&&e\u003C4?a1:a2},translate:function(e,a,t){var snd.wordst;return 1t.length?a?s0:s1:e+\\\ \\\+nd.correctGrammaticalCase(e,s)}};l.defineLocale(\\\sr\\\,{months:\\\januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\\\.split(\\\_\\\),monthsShort:\\\jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\nedelja_ponedeljak_utorak_sreda_\\\\u010detvrtak_petak_subota\\\.split(\\\_\\\),weekdaysShort:\\\ned._pon._uto._sre._\\\\u010det._pet._sub.\\\.split(\\\_\\\),weekdaysMin:\\\ne_po_ut_sr_\\\\u010de_pe_su\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM YYYY\\\,LLL:\\\D. MMMM YYYY H:mm\\\,LLLL:\\\dddd, D. MMMM YYYY H:mm\\\},calendar:{sameDay:\\\danas u LT\\\,nextDay:\\\sutra u LT\\\,nextWeek:function(){switch(this.day()){case 0:return\\\u nedelju u LT\\\;case 3:return\\\u sredu u LT\\\;case 6:return\\\u subotu u LT\\\;case 1:case 2:case 4:case 5:return\\\u dddd u LT\\\}},lastDay:\\\ju\\\\u010de u LT\\\,lastWeek:function(){return\\\pro\\\\u0161le nedelje u LT\\\,\\\pro\\\\u0161log ponedeljka u LT\\\,\\\pro\\\\u0161log utorka u LT\\\,\\\pro\\\\u0161le srede u LT\\\,\\\pro\\\\u0161log \\\\u010detvrtka u LT\\\,\\\pro\\\\u0161log petka u LT\\\,\\\pro\\\\u0161le subote u LT\\\this.day()},sameElse:\\\L\\\},relativeTime:{future:\\\za %s\\\,past:\\\pre %s\\\,s:\\\nekoliko sekundi\\\,ss:nd.translate,m:nd.translate,mm:nd.translate,h:nd.translate,hh:nd.translate,d:\\\dan\\\,dd:nd.translate,M:\\\mesec\\\,MM:nd.translate,y:\\\godinu\\\,yy:nd.translate},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:7}}),l.defineLocale(\\\ss\\\,{months:\\\Bhimbidvwane_Indlovana_Indlovlenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\\\.split(\\\_\\\),monthsShort:\\\Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo\\\.split(\\\_\\\),weekdays:\\\Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo\\\.split(\\\_\\\),weekdaysShort:\\\Lis_Umb_Lsb_Les_Lsi_Lsh_Umg\\\.split(\\\_\\\),weekdaysMin:\\\Li_Us_Lb_Lt_Ls_Lh_Ug\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendar:{sameDay:\\\Namuhla nga LT\\\,nextDay:\\\Kusasa nga LT\\\,nextWeek:\\\dddd nga LT\\\,lastDay:\\\Itolo nga LT\\\,lastWeek:\\\dddd leliphelile nga LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\nga %s\\\,past:\\\wenteka nga %s\\\,s:\\\emizuzwana lomcane\\\,ss:\\\%d mzuzwana\\\,m:\\\umzuzu\\\,mm:\\\%d emizuzu\\\,h:\\\lihora\\\,hh:\\\%d emahora\\\,d:\\\lilanga\\\,dd:\\\%d emalanga\\\,M:\\\inyanga\\\,MM:\\\%d tinyanga\\\,y:\\\umnyaka\\\,yy:\\\%d iminyaka\\\},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e\u003C11?\\\ekuseni\\\:e\u003C15?\\\emini\\\:e\u003C19?\\\entsambama\\\:\\\ebusuku\\\},meridiemHour:function(e,a){return 12e&&(e0),\\\ekuseni\\\a?e:\\\emini\\\a?11\u003Ce?e:e+12:\\\entsambama\\\a||\\\ebusuku\\\a?0e?0:e+12:void 0},dayOfMonthOrdinalParse:/\\\\d{1,2}/,ordinal:\\\%d\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\sv\\\,{months:\\\januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\\\.split(\\\_\\\),monthsShort:\\\jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\\\.split(\\\_\\\),weekdays:\\\s\\\\xf6ndag_m\\\\xe5ndag_tisdag_onsdag_torsdag_fredag_l\\\\xf6rdag\\\.split(\\\_\\\),weekdaysShort:\\\s\\\\xf6n_m\\\\xe5n_tis_ons_tor_fre_l\\\\xf6r\\\.split(\\\_\\\),weekdaysMin:\\\s\\\\xf6_m\\\\xe5_ti_on_to_fr_l\\\\xf6\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY kl. HH:mm\\\,LLLL:\\\dddd D MMMM YYYY kl. HH:mm\\\,lll:\\\D MMM YYYY HH:mm\\\,llll:\\\ddd D MMM YYYY HH:mm\\\},calendar:{sameDay:\\\Idag LT\\\,nextDay:\\\Imorgon LT\\\,lastDay:\\\Ig\\\\xe5r LT\\\,nextWeek:\\\P\\\\xe5 dddd LT\\\,lastWeek:\\\I dddds LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\om %s\\\,past:\\\f\\\\xf6r %s sedan\\\,s:\\\n\\\\xe5gra sekunder\\\,ss:\\\%d sekunder\\\,m:\\\en minut\\\,mm:\\\%d minuter\\\,h:\\\en timme\\\,hh:\\\%d timmar\\\,d:\\\en dag\\\,dd:\\\%d dagar\\\,M:\\\en m\\\\xe5nad\\\,MM:\\\%d m\\\\xe5nader\\\,y:\\\ett \\\\xe5r\\\,yy:\\\%d \\\\xe5r\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(e|a)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\e\\\:1a?\\\a\\\:2a?\\\a\\\:\\\e\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\sw\\\,{months:\\\Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba\\\.split(\\\_\\\),monthsShort:\\\Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des\\\.split(\\\_\\\),weekdays:\\\Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi\\\.split(\\\_\\\),weekdaysShort:\\\Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos\\\.split(\\\_\\\),weekdaysMin:\\\J2_J3_J4_J5_Al_Ij_J1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\leo saa LT\\\,nextDay:\\\kesho saa LT\\\,nextWeek:\\\wiki ijayo dddd saat LT\\\,lastDay:\\\jana LT\\\,lastWeek:\\\wiki iliyopita dddd saat LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s baadaye\\\,past:\\\tokea %s\\\,s:\\\hivi punde\\\,ss:\\\sekunde %d\\\,m:\\\dakika moja\\\,mm:\\\dakika %d\\\,h:\\\saa limoja\\\,hh:\\\masaa %d\\\,d:\\\siku moja\\\,dd:\\\masiku %d\\\,M:\\\mwezi mmoja\\\,MM:\\\miezi %d\\\,y:\\\mwaka mmoja\\\,yy:\\\miaka %d\\\},week:{dow:1,doy:7}});var dd{1:\\\\\\\u0be7\\\,2:\\\\\\\u0be8\\\,3:\\\\\\\u0be9\\\,4:\\\\\\\u0bea\\\,5:\\\\\\\u0beb\\\,6:\\\\\\\u0bec\\\,7:\\\\\\\u0bed\\\,8:\\\\\\\u0bee\\\,9:\\\\\\\u0bef\\\,0:\\\\\\\u0be6\\\},rd{\\\\\\\u0be7\\\:\\\1\\\,\\\\\\\u0be8\\\:\\\2\\\,\\\\\\\u0be9\\\:\\\3\\\,\\\\\\\u0bea\\\:\\\4\\\,\\\\\\\u0beb\\\:\\\5\\\,\\\\\\\u0bec\\\:\\\6\\\,\\\\\\\u0bed\\\:\\\7\\\,\\\\\\\u0bee\\\:\\\8\\\,\\\\\\\u0bef\\\:\\\9\\\,\\\\\\\u0be6\\\:\\\0\\\};l.defineLocale(\\\ta\\\,{months:\\\\\\\u0b9c\\\\u0ba9\\\\u0bb5\\\\u0bb0\\\\u0bbf_\\\\u0baa\\\\u0bbf\\\\u0baa\\\\u0bcd\\\\u0bb0\\\\u0bb5\\\\u0bb0\\\\u0bbf_\\\\u0bae\\\\u0bbe\\\\u0bb0\\\\u0bcd\\\\u0b9a\\\\u0bcd_\\\\u0b8f\\\\u0baa\\\\u0bcd\\\\u0bb0\\\\u0bb2\\\\u0bcd_\\\\u0bae\\\\u0bc7_\\\\u0b9c\\\\u0bc2\\\\u0ba9\\\\u0bcd_\\\\u0b9c\\\\u0bc2\\\\u0bb2\\\\u0bc8_\\\\u0b86\\\\u0b95\\\\u0bb8\\\\u0bcd\\\\u0b9f\\\\u0bcd_\\\\u0b9a\\\\u0bc6\\\\u0baa\\\\u0bcd\\\\u0b9f\\\\u0bc6\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0b85\\\\u0b95\\\\u0bcd\\\\u0b9f\\\\u0bc7\\\\u0bbe\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0ba8\\\\u0bb5\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0b9f\\\\u0bbf\\\\u0b9a\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd\\\.split(\\\_\\\),monthsShort:\\\\\\\u0b9c\\\\u0ba9\\\\u0bb5\\\\u0bb0\\\\u0bbf_\\\\u0baa\\\\u0bbf\\\\u0baa\\\\u0bcd\\\\u0bb0\\\\u0bb5\\\\u0bb0\\\\u0bbf_\\\\u0bae\\\\u0bbe\\\\u0bb0\\\\u0bcd\\\\u0b9a\\\\u0bcd_\\\\u0b8f\\\\u0baa\\\\u0bcd\\\\u0bb0\\\\u0bb2\\\\u0bcd_\\\\u0bae\\\\u0bc7_\\\\u0b9c\\\\u0bc2\\\\u0ba9\\\\u0bcd_\\\\u0b9c\\\\u0bc2\\\\u0bb2\\\\u0bc8_\\\\u0b86\\\\u0b95\\\\u0bb8\\\\u0bcd\\\\u0b9f\\\\u0bcd_\\\\u0b9a\\\\u0bc6\\\\u0baa\\\\u0bcd\\\\u0b9f\\\\u0bc6\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0b85\\\\u0b95\\\\u0bcd\\\\u0b9f\\\\u0bc7\\\\u0bbe\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0ba8\\\\u0bb5\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd_\\\\u0b9f\\\\u0bbf\\\\u0b9a\\\\u0bae\\\\u0bcd\\\\u0baa\\\\u0bb0\\\\u0bcd\\\.split(\\\_\\\),weekdays:\\\\\\\u0b9e\\\\u0bbe\\\\u0baf\\\\u0bbf\\\\u0bb1\\\\u0bcd\\\\u0bb1\\\\u0bc1\\\\u0b95\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0ba4\\\\u0bbf\\\\u0b99\\\\u0bcd\\\\u0b95\\\\u0b9f\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0b9a\\\\u0bc6\\\\u0bb5\\\\u0bcd\\\\u0bb5\\\\u0bbe\\\\u0baf\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0baa\\\\u0bc1\\\\u0ba4\\\\u0ba9\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0bb5\\\\u0bbf\\\\u0baf\\\\u0bbe\\\\u0bb4\\\\u0b95\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0bb5\\\\u0bc6\\\\u0bb3\\\\u0bcd\\\\u0bb3\\\\u0bbf\\\\u0b95\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8_\\\\u0b9a\\\\u0ba9\\\\u0bbf\\\\u0b95\\\\u0bcd\\\\u0b95\\\\u0bbf\\\\u0bb4\\\\u0bae\\\\u0bc8\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0b9e\\\\u0bbe\\\\u0baf\\\\u0bbf\\\\u0bb1\\\\u0bc1_\\\\u0ba4\\\\u0bbf\\\\u0b99\\\\u0bcd\\\\u0b95\\\\u0bb3\\\\u0bcd_\\\\u0b9a\\\\u0bc6\\\\u0bb5\\\\u0bcd\\\\u0bb5\\\\u0bbe\\\\u0baf\\\\u0bcd_\\\\u0baa\\\\u0bc1\\\\u0ba4\\\\u0ba9\\\\u0bcd_\\\\u0bb5\\\\u0bbf\\\\u0baf\\\\u0bbe\\\\u0bb4\\\\u0ba9\\\\u0bcd_\\\\u0bb5\\\\u0bc6\\\\u0bb3\\\\u0bcd\\\\u0bb3\\\\u0bbf_\\\\u0b9a\\\\u0ba9\\\\u0bbf\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0b9e\\\\u0bbe_\\\\u0ba4\\\\u0bbf_\\\\u0b9a\\\\u0bc6_\\\\u0baa\\\\u0bc1_\\\\u0bb5\\\\u0bbf_\\\\u0bb5\\\\u0bc6_\\\\u0b9a\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY, HH:mm\\\},calendar:{sameDay:\\\\\\\u0b87\\\\u0ba9\\\\u0bcd\\\\u0bb1\\\\u0bc1 LT\\\,nextDay:\\\\\\\u0ba8\\\\u0bbe\\\\u0bb3\\\\u0bc8 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0ba8\\\\u0bc7\\\\u0bb1\\\\u0bcd\\\\u0bb1\\\\u0bc1 LT\\\,lastWeek:\\\\\\\u0b95\\\\u0b9f\\\\u0ba8\\\\u0bcd\\\\u0ba4 \\\\u0bb5\\\\u0bbe\\\\u0bb0\\\\u0bae\\\\u0bcd dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0b87\\\\u0bb2\\\\u0bcd\\\,past:\\\%s \\\\u0bae\\\\u0bc1\\\\u0ba9\\\\u0bcd\\\,s:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0b9a\\\\u0bbf\\\\u0bb2 \\\\u0bb5\\\\u0bbf\\\\u0ba8\\\\u0bbe\\\\u0b9f\\\\u0bbf\\\\u0b95\\\\u0bb3\\\\u0bcd\\\,ss:\\\%d \\\\u0bb5\\\\u0bbf\\\\u0ba8\\\\u0bbe\\\\u0b9f\\\\u0bbf\\\\u0b95\\\\u0bb3\\\\u0bcd\\\,m:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0ba8\\\\u0bbf\\\\u0bae\\\\u0bbf\\\\u0b9f\\\\u0bae\\\\u0bcd\\\,mm:\\\%d \\\\u0ba8\\\\u0bbf\\\\u0bae\\\\u0bbf\\\\u0b9f\\\\u0b99\\\\u0bcd\\\\u0b95\\\\u0bb3\\\\u0bcd\\\,h:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0bae\\\\u0ba3\\\\u0bbf \\\\u0ba8\\\\u0bc7\\\\u0bb0\\\\u0bae\\\\u0bcd\\\,hh:\\\%d \\\\u0bae\\\\u0ba3\\\\u0bbf \\\\u0ba8\\\\u0bc7\\\\u0bb0\\\\u0bae\\\\u0bcd\\\,d:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0ba8\\\\u0bbe\\\\u0bb3\\\\u0bcd\\\,dd:\\\%d \\\\u0ba8\\\\u0bbe\\\\u0b9f\\\\u0bcd\\\\u0b95\\\\u0bb3\\\\u0bcd\\\,M:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0bae\\\\u0bbe\\\\u0ba4\\\\u0bae\\\\u0bcd\\\,MM:\\\%d \\\\u0bae\\\\u0bbe\\\\u0ba4\\\\u0b99\\\\u0bcd\\\\u0b95\\\\u0bb3\\\\u0bcd\\\,y:\\\\\\\u0b92\\\\u0bb0\\\\u0bc1 \\\\u0bb5\\\\u0bb0\\\\u0bc1\\\\u0b9f\\\\u0bae\\\\u0bcd\\\,yy:\\\%d \\\\u0b86\\\\u0ba3\\\\u0bcd\\\\u0b9f\\\\u0bc1\\\\u0b95\\\\u0bb3\\\\u0bcd\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\u0bb5\\\\u0ba4\\\\u0bc1/,ordinal:function(e){return e+\\\\\\\u0bb5\\\\u0ba4\\\\u0bc1\\\},preparse:function(e){return e.replace(/\\\\u0be7\\\\u0be8\\\\u0be9\\\\u0bea\\\\u0beb\\\\u0bec\\\\u0bed\\\\u0bee\\\\u0bef\\\\u0be6/g,function(e){return rde})},postformat:function(e){return e.replace(/\\\\d/g,function(e){return dde})},meridiemParse:/\\\\u0baf\\\\u0bbe\\\\u0bae\\\\u0bae\\\\u0bcd|\\\\u0bb5\\\\u0bc8\\\\u0b95\\\\u0bb1\\\\u0bc8|\\\\u0b95\\\\u0bbe\\\\u0bb2\\\\u0bc8|\\\\u0ba8\\\\u0ba3\\\\u0bcd\\\\u0baa\\\\u0b95\\\\u0bb2\\\\u0bcd|\\\\u0b8e\\\\u0bb1\\\\u0bcd\\\\u0baa\\\\u0bbe\\\\u0b9f\\\\u0bc1|\\\\u0bae\\\\u0bbe\\\\u0bb2\\\\u0bc8/,meridiem:function(e,a,t){return e\u003C2?\\\ \\\\u0baf\\\\u0bbe\\\\u0bae\\\\u0bae\\\\u0bcd\\\:e\u003C6?\\\ \\\\u0bb5\\\\u0bc8\\\\u0b95\\\\u0bb1\\\\u0bc8\\\:e\u003C10?\\\ \\\\u0b95\\\\u0bbe\\\\u0bb2\\\\u0bc8\\\:e\u003C14?\\\ \\\\u0ba8\\\\u0ba3\\\\u0bcd\\\\u0baa\\\\u0b95\\\\u0bb2\\\\u0bcd\\\:e\u003C18?\\\ \\\\u0b8e\\\\u0bb1\\\\u0bcd\\\\u0baa\\\\u0bbe\\\\u0b9f\\\\u0bc1\\\:e\u003C22?\\\ \\\\u0bae\\\\u0bbe\\\\u0bb2\\\\u0bc8\\\:\\\ \\\\u0baf\\\\u0bbe\\\\u0bae\\\\u0bae\\\\u0bcd\\\},meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0baf\\\\u0bbe\\\\u0bae\\\\u0bae\\\\u0bcd\\\a?e\u003C2?e:e+12:\\\\\\\u0bb5\\\\u0bc8\\\\u0b95\\\\u0bb1\\\\u0bc8\\\a||\\\\\\\u0b95\\\\u0bbe\\\\u0bb2\\\\u0bc8\\\a?e:\\\\\\\u0ba8\\\\u0ba3\\\\u0bcd\\\\u0baa\\\\u0b95\\\\u0bb2\\\\u0bcd\\\a&&10\u003Ce?e:e+12},week:{dow:0,doy:6}}),l.defineLocale(\\\te\\\,{months:\\\\\\\u0c1c\\\\u0c28\\\\u0c35\\\\u0c30\\\\u0c3f_\\\\u0c2b\\\\u0c3f\\\\u0c2c\\\\u0c4d\\\\u0c30\\\\u0c35\\\\u0c30\\\\u0c3f_\\\\u0c2e\\\\u0c3e\\\\u0c30\\\\u0c4d\\\\u0c1a\\\\u0c3f_\\\\u0c0f\\\\u0c2a\\\\u0c4d\\\\u0c30\\\\u0c3f\\\\u0c32\\\\u0c4d_\\\\u0c2e\\\\u0c47_\\\\u0c1c\\\\u0c42\\\\u0c28\\\\u0c4d_\\\\u0c1c\\\\u0c41\\\\u0c32\\\\u0c48_\\\\u0c06\\\\u0c17\\\\u0c38\\\\u0c4d\\\\u0c1f\\\\u0c41_\\\\u0c38\\\\u0c46\\\\u0c2a\\\\u0c4d\\\\u0c1f\\\\u0c46\\\\u0c02\\\\u0c2c\\\\u0c30\\\\u0c4d_\\\\u0c05\\\\u0c15\\\\u0c4d\\\\u0c1f\\\\u0c4b\\\\u0c2c\\\\u0c30\\\\u0c4d_\\\\u0c28\\\\u0c35\\\\u0c02\\\\u0c2c\\\\u0c30\\\\u0c4d_\\\\u0c21\\\\u0c3f\\\\u0c38\\\\u0c46\\\\u0c02\\\\u0c2c\\\\u0c30\\\\u0c4d\\\.split(\\\_\\\),monthsShort:\\\\\\\u0c1c\\\\u0c28._\\\\u0c2b\\\\u0c3f\\\\u0c2c\\\\u0c4d\\\\u0c30._\\\\u0c2e\\\\u0c3e\\\\u0c30\\\\u0c4d\\\\u0c1a\\\\u0c3f_\\\\u0c0f\\\\u0c2a\\\\u0c4d\\\\u0c30\\\\u0c3f._\\\\u0c2e\\\\u0c47_\\\\u0c1c\\\\u0c42\\\\u0c28\\\\u0c4d_\\\\u0c1c\\\\u0c41\\\\u0c32\\\\u0c48_\\\\u0c06\\\\u0c17._\\\\u0c38\\\\u0c46\\\\u0c2a\\\\u0c4d._\\\\u0c05\\\\u0c15\\\\u0c4d\\\\u0c1f\\\\u0c4b._\\\\u0c28\\\\u0c35._\\\\u0c21\\\\u0c3f\\\\u0c38\\\\u0c46.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0c06\\\\u0c26\\\\u0c3f\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c38\\\\u0c4b\\\\u0c2e\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c2e\\\\u0c02\\\\u0c17\\\\u0c33\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c2c\\\\u0c41\\\\u0c27\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c17\\\\u0c41\\\\u0c30\\\\u0c41\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c36\\\\u0c41\\\\u0c15\\\\u0c4d\\\\u0c30\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02_\\\\u0c36\\\\u0c28\\\\u0c3f\\\\u0c35\\\\u0c3e\\\\u0c30\\\\u0c02\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0c06\\\\u0c26\\\\u0c3f_\\\\u0c38\\\\u0c4b\\\\u0c2e_\\\\u0c2e\\\\u0c02\\\\u0c17\\\\u0c33_\\\\u0c2c\\\\u0c41\\\\u0c27_\\\\u0c17\\\\u0c41\\\\u0c30\\\\u0c41_\\\\u0c36\\\\u0c41\\\\u0c15\\\\u0c4d\\\\u0c30_\\\\u0c36\\\\u0c28\\\\u0c3f\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0c06_\\\\u0c38\\\\u0c4b_\\\\u0c2e\\\\u0c02_\\\\u0c2c\\\\u0c41_\\\\u0c17\\\\u0c41_\\\\u0c36\\\\u0c41_\\\\u0c36\\\.split(\\\_\\\),longDateFormat:{LT:\\\A h:mm\\\,LTS:\\\A h:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY, A h:mm\\\,LLLL:\\\dddd, D MMMM YYYY, A h:mm\\\},calendar:{sameDay:\\\\\\\u0c28\\\\u0c47\\\\u0c21\\\\u0c41 LT\\\,nextDay:\\\\\\\u0c30\\\\u0c47\\\\u0c2a\\\\u0c41 LT\\\,nextWeek:\\\dddd, LT\\\,lastDay:\\\\\\\u0c28\\\\u0c3f\\\\u0c28\\\\u0c4d\\\\u0c28 LT\\\,lastWeek:\\\\\\\u0c17\\\\u0c24 dddd, LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0c32\\\\u0c4b\\\,past:\\\%s \\\\u0c15\\\\u0c4d\\\\u0c30\\\\u0c3f\\\\u0c24\\\\u0c02\\\,s:\\\\\\\u0c15\\\\u0c4a\\\\u0c28\\\\u0c4d\\\\u0c28\\\\u0c3f \\\\u0c15\\\\u0c4d\\\\u0c37\\\\u0c23\\\\u0c3e\\\\u0c32\\\\u0c41\\\,ss:\\\%d \\\\u0c38\\\\u0c46\\\\u0c15\\\\u0c28\\\\u0c4d\\\\u0c32\\\\u0c41\\\,m:\\\\\\\u0c12\\\\u0c15 \\\\u0c28\\\\u0c3f\\\\u0c2e\\\\u0c3f\\\\u0c37\\\\u0c02\\\,mm:\\\%d \\\\u0c28\\\\u0c3f\\\\u0c2e\\\\u0c3f\\\\u0c37\\\\u0c3e\\\\u0c32\\\\u0c41\\\,h:\\\\\\\u0c12\\\\u0c15 \\\\u0c17\\\\u0c02\\\\u0c1f\\\,hh:\\\%d \\\\u0c17\\\\u0c02\\\\u0c1f\\\\u0c32\\\\u0c41\\\,d:\\\\\\\u0c12\\\\u0c15 \\\\u0c30\\\\u0c4b\\\\u0c1c\\\\u0c41\\\,dd:\\\%d \\\\u0c30\\\\u0c4b\\\\u0c1c\\\\u0c41\\\\u0c32\\\\u0c41\\\,M:\\\\\\\u0c12\\\\u0c15 \\\\u0c28\\\\u0c46\\\\u0c32\\\,MM:\\\%d \\\\u0c28\\\\u0c46\\\\u0c32\\\\u0c32\\\\u0c41\\\,y:\\\\\\\u0c12\\\\u0c15 \\\\u0c38\\\\u0c02\\\\u0c35\\\\u0c24\\\\u0c4d\\\\u0c38\\\\u0c30\\\\u0c02\\\,yy:\\\%d \\\\u0c38\\\\u0c02\\\\u0c35\\\\u0c24\\\\u0c4d\\\\u0c38\\\\u0c30\\\\u0c3e\\\\u0c32\\\\u0c41\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\u0c35/,ordinal:\\\%d\\\\u0c35\\\,meridiemParse:/\\\\u0c30\\\\u0c3e\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c3f|\\\\u0c09\\\\u0c26\\\\u0c2f\\\\u0c02|\\\\u0c2e\\\\u0c27\\\\u0c4d\\\\u0c2f\\\\u0c3e\\\\u0c39\\\\u0c4d\\\\u0c28\\\\u0c02|\\\\u0c38\\\\u0c3e\\\\u0c2f\\\\u0c02\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c02/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0c30\\\\u0c3e\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c3f\\\a?e\u003C4?e:e+12:\\\\\\\u0c09\\\\u0c26\\\\u0c2f\\\\u0c02\\\a?e:\\\\\\\u0c2e\\\\u0c27\\\\u0c4d\\\\u0c2f\\\\u0c3e\\\\u0c39\\\\u0c4d\\\\u0c28\\\\u0c02\\\a?10\u003Ce?e:e+12:\\\\\\\u0c38\\\\u0c3e\\\\u0c2f\\\\u0c02\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c02\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0c30\\\\u0c3e\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c3f\\\:e\u003C10?\\\\\\\u0c09\\\\u0c26\\\\u0c2f\\\\u0c02\\\:e\u003C17?\\\\\\\u0c2e\\\\u0c27\\\\u0c4d\\\\u0c2f\\\\u0c3e\\\\u0c39\\\\u0c4d\\\\u0c28\\\\u0c02\\\:e\u003C20?\\\\\\\u0c38\\\\u0c3e\\\\u0c2f\\\\u0c02\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c02\\\:\\\\\\\u0c30\\\\u0c3e\\\\u0c24\\\\u0c4d\\\\u0c30\\\\u0c3f\\\},week:{dow:0,doy:6}}),l.defineLocale(\\\tet\\\,{months:\\\Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\\\\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru\\\.split(\\\_\\\),monthsShort:\\\Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez\\\.split(\\\_\\\),weekdays:\\\Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu\\\.split(\\\_\\\),weekdaysShort:\\\Dom_Seg_Ters_Kua_Kint_Sest_Sab\\\.split(\\\_\\\),weekdaysMin:\\\Do_Seg_Te_Ku_Ki_Ses_Sa\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\Ohin iha LT\\\,nextDay:\\\Aban iha LT\\\,nextWeek:\\\dddd iha LT\\\,lastDay:\\\Horiseik iha LT\\\,lastWeek:\\\dddd semana kotuk iha LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\iha %s\\\,past:\\\%s liuba\\\,s:\\\minutu balun\\\,ss:\\\minutu %d\\\,m:\\\minutu ida\\\,mm:\\\minutu %d\\\,h:\\\oras ida\\\,hh:\\\oras %d\\\,d:\\\loron ida\\\,dd:\\\loron %d\\\,M:\\\fulan ida\\\,MM:\\\fulan %d\\\,y:\\\tinan ida\\\,yy:\\\tinan %d\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}});var _d{0:\\\-\\\\u0443\\\\u043c\\\,1:\\\-\\\\u0443\\\\u043c\\\,2:\\\-\\\\u044e\\\\u043c\\\,3:\\\-\\\\u044e\\\\u043c\\\,4:\\\-\\\\u0443\\\\u043c\\\,5:\\\-\\\\u0443\\\\u043c\\\,6:\\\-\\\\u0443\\\\u043c\\\,7:\\\-\\\\u0443\\\\u043c\\\,8:\\\-\\\\u0443\\\\u043c\\\,9:\\\-\\\\u0443\\\\u043c\\\,10:\\\-\\\\u0443\\\\u043c\\\,12:\\\-\\\\u0443\\\\u043c\\\,13:\\\-\\\\u0443\\\\u043c\\\,20:\\\-\\\\u0443\\\\u043c\\\,30:\\\-\\\\u044e\\\\u043c\\\,40:\\\-\\\\u0443\\\\u043c\\\,50:\\\-\\\\u0443\\\\u043c\\\,60:\\\-\\\\u0443\\\\u043c\\\,70:\\\-\\\\u0443\\\\u043c\\\,80:\\\-\\\\u0443\\\\u043c\\\,90:\\\-\\\\u0443\\\\u043c\\\,100:\\\-\\\\u0443\\\\u043c\\\};l.defineLocale(\\\tg\\\,{months:\\\\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d_\\\\u0438\\\\u044e\\\\u043b_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440_\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440_\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440_\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\.split(\\\_\\\),monthsShort:\\\\\\\u044f\\\\u043d\\\\u0432_\\\\u0444\\\\u0435\\\\u0432_\\\\u043c\\\\u0430\\\\u0440_\\\\u0430\\\\u043f\\\\u0440_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d_\\\\u0438\\\\u044e\\\\u043b_\\\\u0430\\\\u0432\\\\u0433_\\\\u0441\\\\u0435\\\\u043d_\\\\u043e\\\\u043a\\\\u0442_\\\\u043d\\\\u043e\\\\u044f_\\\\u0434\\\\u0435\\\\u043a\\\.split(\\\_\\\),weekdays:\\\\\\\u044f\\\\u043a\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435_\\\\u0434\\\\u0443\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435_\\\\u0441\\\\u0435\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435_\\\\u0447\\\\u043e\\\\u0440\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435_\\\\u043f\\\\u0430\\\\u043d\\\\u04b7\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435_\\\\u04b7\\\\u0443\\\\u043c\\\\u044a\\\\u0430_\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0435\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u044f\\\\u0448\\\\u0431_\\\\u0434\\\\u0448\\\\u0431_\\\\u0441\\\\u0448\\\\u0431_\\\\u0447\\\\u0448\\\\u0431_\\\\u043f\\\\u0448\\\\u0431_\\\\u04b7\\\\u0443\\\\u043c_\\\\u0448\\\\u043d\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u044f\\\\u0448_\\\\u0434\\\\u0448_\\\\u0441\\\\u0448_\\\\u0447\\\\u0448_\\\\u043f\\\\u0448_\\\\u04b7\\\\u043c_\\\\u0448\\\\u0431\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u0418\\\\u043c\\\\u0440\\\\u04ef\\\\u0437 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\\u0438 LT\\\,nextDay:\\\\\\\u041f\\\\u0430\\\\u0433\\\\u043e\\\\u04b3 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\\u0438 LT\\\,lastDay:\\\\\\\u0414\\\\u0438\\\\u0440\\\\u04ef\\\\u0437 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\\u0438 LT\\\,nextWeek:\\\dddd\\\\u0438 \\\\u04b3\\\\u0430\\\\u0444\\\\u0442\\\\u0430\\\\u0438 \\\\u043e\\\\u044f\\\\u043d\\\\u0434\\\\u0430 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\\u0438 LT\\\,lastWeek:\\\dddd\\\\u0438 \\\\u04b3\\\\u0430\\\\u0444\\\\u0442\\\\u0430\\\\u0438 \\\\u0433\\\\u0443\\\\u0437\\\\u0430\\\\u0448\\\\u0442\\\\u0430 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\\u0438 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0431\\\\u0430\\\\u044a\\\\u0434\\\\u0438 %s\\\,past:\\\%s \\\\u043f\\\\u0435\\\\u0448\\\,s:\\\\\\\u044f\\\\u043a\\\\u0447\\\\u0430\\\\u043d\\\\u0434 \\\\u0441\\\\u043e\\\\u043d\\\\u0438\\\\u044f\\\,m:\\\\\\\u044f\\\\u043a \\\\u0434\\\\u0430\\\\u049b\\\\u0438\\\\u049b\\\\u0430\\\,mm:\\\%d \\\\u0434\\\\u0430\\\\u049b\\\\u0438\\\\u049b\\\\u0430\\\,h:\\\\\\\u044f\\\\u043a \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\,hh:\\\%d \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\,d:\\\\\\\u044f\\\\u043a \\\\u0440\\\\u04ef\\\\u0437\\\,dd:\\\%d \\\\u0440\\\\u04ef\\\\u0437\\\,M:\\\\\\\u044f\\\\u043a \\\\u043c\\\\u043e\\\\u04b3\\\,MM:\\\%d \\\\u043c\\\\u043e\\\\u04b3\\\,y:\\\\\\\u044f\\\\u043a \\\\u0441\\\\u043e\\\\u043b\\\,yy:\\\%d \\\\u0441\\\\u043e\\\\u043b\\\},meridiemParse:/\\\\u0448\\\\u0430\\\\u0431|\\\\u0441\\\\u0443\\\\u0431\\\\u04b3|\\\\u0440\\\\u04ef\\\\u0437|\\\\u0431\\\\u0435\\\\u0433\\\\u043e\\\\u04b3/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u0448\\\\u0430\\\\u0431\\\a?e\u003C4?e:e+12:\\\\\\\u0441\\\\u0443\\\\u0431\\\\u04b3\\\a?e:\\\\\\\u0440\\\\u04ef\\\\u0437\\\a?11\u003Ce?e:e+12:\\\\\\\u0431\\\\u0435\\\\u0433\\\\u043e\\\\u04b3\\\a?e+12:void 0},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u0448\\\\u0430\\\\u0431\\\:e\u003C11?\\\\\\\u0441\\\\u0443\\\\u0431\\\\u04b3\\\:e\u003C16?\\\\\\\u0440\\\\u04ef\\\\u0437\\\:e\u003C19?\\\\\\\u0431\\\\u0435\\\\u0433\\\\u043e\\\\u04b3\\\:\\\\\\\u0448\\\\u0430\\\\u0431\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0443\\\\u043c|\\\\u044e\\\\u043c)/,ordinal:function(e){return e+(_de||_de%10||_d100\u003Ce?100:null)},week:{dow:1,doy:7}}),l.defineLocale(\\\th\\\,{months:\\\\\\\u0e21\\\\u0e01\\\\u0e23\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e01\\\\u0e38\\\\u0e21\\\\u0e20\\\\u0e32\\\\u0e1e\\\\u0e31\\\\u0e19\\\\u0e18\\\\u0e4c_\\\\u0e21\\\\u0e35\\\\u0e19\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e40\\\\u0e21\\\\u0e29\\\\u0e32\\\\u0e22\\\\u0e19_\\\\u0e1e\\\\u0e24\\\\u0e29\\\\u0e20\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e21\\\\u0e34\\\\u0e16\\\\u0e38\\\\u0e19\\\\u0e32\\\\u0e22\\\\u0e19_\\\\u0e01\\\\u0e23\\\\u0e01\\\\u0e0e\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e2a\\\\u0e34\\\\u0e07\\\\u0e2b\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e01\\\\u0e31\\\\u0e19\\\\u0e22\\\\u0e32\\\\u0e22\\\\u0e19_\\\\u0e15\\\\u0e38\\\\u0e25\\\\u0e32\\\\u0e04\\\\u0e21_\\\\u0e1e\\\\u0e24\\\\u0e28\\\\u0e08\\\\u0e34\\\\u0e01\\\\u0e32\\\\u0e22\\\\u0e19_\\\\u0e18\\\\u0e31\\\\u0e19\\\\u0e27\\\\u0e32\\\\u0e04\\\\u0e21\\\.split(\\\_\\\),monthsShort:\\\\\\\u0e21.\\\\u0e04._\\\\u0e01.\\\\u0e1e._\\\\u0e21\\\\u0e35.\\\\u0e04._\\\\u0e40\\\\u0e21.\\\\u0e22._\\\\u0e1e.\\\\u0e04._\\\\u0e21\\\\u0e34.\\\\u0e22._\\\\u0e01.\\\\u0e04._\\\\u0e2a.\\\\u0e04._\\\\u0e01.\\\\u0e22._\\\\u0e15.\\\\u0e04._\\\\u0e1e.\\\\u0e22._\\\\u0e18.\\\\u0e04.\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\\\\\u0e2d\\\\u0e32\\\\u0e17\\\\u0e34\\\\u0e15\\\\u0e22\\\\u0e4c_\\\\u0e08\\\\u0e31\\\\u0e19\\\\u0e17\\\\u0e23\\\\u0e4c_\\\\u0e2d\\\\u0e31\\\\u0e07\\\\u0e04\\\\u0e32\\\\u0e23_\\\\u0e1e\\\\u0e38\\\\u0e18_\\\\u0e1e\\\\u0e24\\\\u0e2b\\\\u0e31\\\\u0e2a\\\\u0e1a\\\\u0e14\\\\u0e35_\\\\u0e28\\\\u0e38\\\\u0e01\\\\u0e23\\\\u0e4c_\\\\u0e40\\\\u0e2a\\\\u0e32\\\\u0e23\\\\u0e4c\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u0e2d\\\\u0e32\\\\u0e17\\\\u0e34\\\\u0e15\\\\u0e22\\\\u0e4c_\\\\u0e08\\\\u0e31\\\\u0e19\\\\u0e17\\\\u0e23\\\\u0e4c_\\\\u0e2d\\\\u0e31\\\\u0e07\\\\u0e04\\\\u0e32\\\\u0e23_\\\\u0e1e\\\\u0e38\\\\u0e18_\\\\u0e1e\\\\u0e24\\\\u0e2b\\\\u0e31\\\\u0e2a_\\\\u0e28\\\\u0e38\\\\u0e01\\\\u0e23\\\\u0e4c_\\\\u0e40\\\\u0e2a\\\\u0e32\\\\u0e23\\\\u0e4c\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u0e2d\\\\u0e32._\\\\u0e08._\\\\u0e2d._\\\\u0e1e._\\\\u0e1e\\\\u0e24._\\\\u0e28._\\\\u0e2a.\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\H:mm\\\,LTS:\\\H:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 H:mm\\\,LLLL:\\\\\\\u0e27\\\\u0e31\\\\u0e19dddd\\\\u0e17\\\\u0e35\\\\u0e48 D MMMM YYYY \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 H:mm\\\},meridiemParse:/\\\\u0e01\\\\u0e48\\\\u0e2d\\\\u0e19\\\\u0e40\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e22\\\\u0e07|\\\\u0e2b\\\\u0e25\\\\u0e31\\\\u0e07\\\\u0e40\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e22\\\\u0e07/,isPM:function(e){return\\\\\\\u0e2b\\\\u0e25\\\\u0e31\\\\u0e07\\\\u0e40\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e22\\\\u0e07\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0e01\\\\u0e48\\\\u0e2d\\\\u0e19\\\\u0e40\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e22\\\\u0e07\\\:\\\\\\\u0e2b\\\\u0e25\\\\u0e31\\\\u0e07\\\\u0e40\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e22\\\\u0e07\\\},calendar:{sameDay:\\\\\\\u0e27\\\\u0e31\\\\u0e19\\\\u0e19\\\\u0e35\\\\u0e49 \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 LT\\\,nextDay:\\\\\\\u0e1e\\\\u0e23\\\\u0e38\\\\u0e48\\\\u0e07\\\\u0e19\\\\u0e35\\\\u0e49 \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 LT\\\,nextWeek:\\\dddd\\\\u0e2b\\\\u0e19\\\\u0e49\\\\u0e32 \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 LT\\\,lastDay:\\\\\\\u0e40\\\\u0e21\\\\u0e37\\\\u0e48\\\\u0e2d\\\\u0e27\\\\u0e32\\\\u0e19\\\\u0e19\\\\u0e35\\\\u0e49 \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 LT\\\,lastWeek:\\\\\\\u0e27\\\\u0e31\\\\u0e19dddd\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e41\\\\u0e25\\\\u0e49\\\\u0e27 \\\\u0e40\\\\u0e27\\\\u0e25\\\\u0e32 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0e2d\\\\u0e35\\\\u0e01 %s\\\,past:\\\%s\\\\u0e17\\\\u0e35\\\\u0e48\\\\u0e41\\\\u0e25\\\\u0e49\\\\u0e27\\\,s:\\\\\\\u0e44\\\\u0e21\\\\u0e48\\\\u0e01\\\\u0e35\\\\u0e48\\\\u0e27\\\\u0e34\\\\u0e19\\\\u0e32\\\\u0e17\\\\u0e35\\\,ss:\\\%d \\\\u0e27\\\\u0e34\\\\u0e19\\\\u0e32\\\\u0e17\\\\u0e35\\\,m:\\\1 \\\\u0e19\\\\u0e32\\\\u0e17\\\\u0e35\\\,mm:\\\%d \\\\u0e19\\\\u0e32\\\\u0e17\\\\u0e35\\\,h:\\\1 \\\\u0e0a\\\\u0e31\\\\u0e48\\\\u0e27\\\\u0e42\\\\u0e21\\\\u0e07\\\,hh:\\\%d \\\\u0e0a\\\\u0e31\\\\u0e48\\\\u0e27\\\\u0e42\\\\u0e21\\\\u0e07\\\,d:\\\1 \\\\u0e27\\\\u0e31\\\\u0e19\\\,dd:\\\%d \\\\u0e27\\\\u0e31\\\\u0e19\\\,M:\\\1 \\\\u0e40\\\\u0e14\\\\u0e37\\\\u0e2d\\\\u0e19\\\,MM:\\\%d \\\\u0e40\\\\u0e14\\\\u0e37\\\\u0e2d\\\\u0e19\\\,y:\\\1 \\\\u0e1b\\\\u0e35\\\,yy:\\\%d \\\\u0e1b\\\\u0e35\\\}}),l.defineLocale(\\\tl-ph\\\,{months:\\\Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre\\\.split(\\\_\\\),monthsShort:\\\Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis\\\.split(\\\_\\\),weekdays:\\\Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado\\\.split(\\\_\\\),weekdaysShort:\\\Lin_Lun_Mar_Miy_Huw_Biy_Sab\\\.split(\\\_\\\),weekdaysMin:\\\Li_Lu_Ma_Mi_Hu_Bi_Sab\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\MM/D/YYYY\\\,LL:\\\MMMM D, YYYY\\\,LLL:\\\MMMM D, YYYY HH:mm\\\,LLLL:\\\dddd, MMMM DD, YYYY HH:mm\\\},calendar:{sameDay:\\\LT ngayong araw\\\,nextDay:\\\Bukas ng LT\\\,nextWeek:\\\LT sa susunod na dddd\\\,lastDay:\\\LT kahapon\\\,lastWeek:\\\LT noong nakaraang dddd\\\,sameElse:\\\L\\\},relativeTime:{future:\\\sa loob ng %s\\\,past:\\\%s ang nakalipas\\\,s:\\\ilang segundo\\\,ss:\\\%d segundo\\\,m:\\\isang minuto\\\,mm:\\\%d minuto\\\,h:\\\isang oras\\\,hh:\\\%d oras\\\,d:\\\isang araw\\\,dd:\\\%d araw\\\,M:\\\isang buwan\\\,MM:\\\%d buwan\\\,y:\\\isang taon\\\,yy:\\\%d taon\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}});var id\\\pagh_wa\\\\u2019_cha\\\\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut\\\.split(\\\_\\\);function od(e,a,t,s){var nfunction(e){var aMath.floor(e%1e3/100),tMath.floor(e%100/10),se%10,n\\\\\\;0\u003Ca&&(n+ida+\\\vatlh\\\);0\u003Ct&&(n+(\\\\\\!n?\\\ \\\:\\\\\\)+idt+\\\maH\\\);0\u003Cs&&(n+(\\\\\\!n?\\\ \\\:\\\\\\)+ids);return\\\\\\n?\\\pagh\\\:n}(e);switch(t){case\\\ss\\\:return n+\\\ lup\\\;case\\\mm\\\:return n+\\\ tup\\\;case\\\hh\\\:return n+\\\ rep\\\;case\\\dd\\\:return n+\\\ jaj\\\;case\\\MM\\\:return n+\\\ jar\\\;case\\\yy\\\:return n+\\\ DIS\\\}}l.defineLocale(\\\tlh\\\,{months:\\\tera\\\\u2019 jar wa\\\\u2019_tera\\\\u2019 jar cha\\\\u2019_tera\\\\u2019 jar wej_tera\\\\u2019 jar loS_tera\\\\u2019 jar vagh_tera\\\\u2019 jar jav_tera\\\\u2019 jar Soch_tera\\\\u2019 jar chorgh_tera\\\\u2019 jar Hut_tera\\\\u2019 jar wa\\\\u2019maH_tera\\\\u2019 jar wa\\\\u2019maH wa\\\\u2019_tera\\\\u2019 jar wa\\\\u2019maH cha\\\\u2019\\\.split(\\\_\\\),monthsShort:\\\jar wa\\\\u2019_jar cha\\\\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\\\\u2019maH_jar wa\\\\u2019maH wa\\\\u2019_jar wa\\\\u2019maH cha\\\\u2019\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\\\.split(\\\_\\\),weekdaysShort:\\\lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\\\.split(\\\_\\\),weekdaysMin:\\\lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\DaHjaj LT\\\,nextDay:\\\wa\\\\u2019leS LT\\\,nextWeek:\\\LLL\\\,lastDay:\\\wa\\\\u2019Hu\\\\u2019 LT\\\,lastWeek:\\\LLL\\\,sameElse:\\\L\\\},relativeTime:{future:function(e){var ae;return a-1!e.indexOf(\\\jaj\\\)?a.slice(0,-3)+\\\leS\\\:-1!e.indexOf(\\\jar\\\)?a.slice(0,-3)+\\\waQ\\\:-1!e.indexOf(\\\DIS\\\)?a.slice(0,-3)+\\\nem\\\:a+\\\ pIq\\\},past:function(e){var ae;return a-1!e.indexOf(\\\jaj\\\)?a.slice(0,-3)+\\\Hu\\\\u2019\\\:-1!e.indexOf(\\\jar\\\)?a.slice(0,-3)+\\\wen\\\:-1!e.indexOf(\\\DIS\\\)?a.slice(0,-3)+\\\ben\\\:a+\\\ ret\\\},s:\\\puS lup\\\,ss:od,m:\\\wa\\\\u2019 tup\\\,mm:od,h:\\\wa\\\\u2019 rep\\\,hh:od,d:\\\wa\\\\u2019 jaj\\\,dd:od,M:\\\wa\\\\u2019 jar\\\,MM:od,y:\\\wa\\\\u2019 DIS\\\,yy:od},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}});var md{1:\\\inci\\\,5:\\\inci\\\,8:\\\inci\\\,70:\\\inci\\\,80:\\\inci\\\,2:\\\nci\\\,7:\\\nci\\\,20:\\\nci\\\,50:\\\nci\\\,3:\\\\\\\xfcnc\\\\xfc\\\,4:\\\\\\\xfcnc\\\\xfc\\\,100:\\\\\\\xfcnc\\\\xfc\\\,6:\\\nc\\\\u0131\\\,9:\\\uncu\\\,10:\\\uncu\\\,30:\\\uncu\\\,60:\\\\\\\u0131nc\\\\u0131\\\,90:\\\\\\\u0131nc\\\\u0131\\\};function ud(e,a,t,s){var n{s:\\\viensas secunds\\\,\\\iensas secunds\\\,ss:e+\\\ secunds\\\,e+\\\ secunds\\\,m:\\\n m\\\\xedut\\\,\\\iens m\\\\xedut\\\,mm:e+\\\ m\\\\xeduts\\\,e+\\\ m\\\\xeduts\\\,h:\\\n \\\\xfeora\\\,\\\iensa \\\\xfeora\\\,hh:e+\\\ \\\\xfeoras\\\,e+\\\ \\\\xfeoras\\\,d:\\\n ziua\\\,\\\iensa ziua\\\,dd:e+\\\ ziuas\\\,e+\\\ ziuas\\\,M:\\\n mes\\\,\\\iens mes\\\,MM:e+\\\ mesen\\\,e+\\\ mesen\\\,y:\\\n ar\\\,\\\iens ar\\\,yy:e+\\\ ars\\\,e+\\\ ars\\\};return s?nt0:a?nt0:nt1}function ld(e,a,t){var s,n;return\\\m\\\t?a?\\\\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0430\\\:\\\\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0443\\\:\\\h\\\t?a?\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430\\\:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0443\\\:e+\\\ \\\+(s+e,n{ss:a?\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0430_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\:\\\\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0443_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\\u0438_\\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,mm:a?\\\\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0430_\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0438_\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\:\\\\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0443_\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\\u0438_\\\\u0445\\\\u0432\\\\u0438\\\\u043b\\\\u0438\\\\u043d\\\,hh:a?\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0430_\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0438_\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0443_\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0438_\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\,dd:\\\\\\\u0434\\\\u0435\\\\u043d\\\\u044c_\\\\u0434\\\\u043d\\\\u0456_\\\\u0434\\\\u043d\\\\u0456\\\\u0432\\\,MM:\\\\\\\u043c\\\\u0456\\\\u0441\\\\u044f\\\\u0446\\\\u044c_\\\\u043c\\\\u0456\\\\u0441\\\\u044f\\\\u0446\\\\u0456_\\\\u043c\\\\u0456\\\\u0441\\\\u044f\\\\u0446\\\\u0456\\\\u0432\\\,yy:\\\\\\\u0440\\\\u0456\\\\u043a_\\\\u0440\\\\u043e\\\\u043a\\\\u0438_\\\\u0440\\\\u043e\\\\u043a\\\\u0456\\\\u0432\\\}t.split(\\\_\\\),s%101&&s%100!11?n0:2\u003Cs%10&&s%10\u003C4&&(s%100\u003C10||20\u003Cs%100)?n1:n2)}function Md(e){return function(){return e+\\\\\\\u043e\\\+(11this.hours()?\\\\\\\u0431\\\:\\\\\\)+\\\ LT\\\}}l.defineLocale(\\\tr\\\,{months:\\\Ocak_\\\\u015eubat_Mart_Nisan_May\\\\u0131s_Haziran_Temmuz_A\\\\u011fustos_Eyl\\\\xfcl_Ekim_Kas\\\\u0131m_Aral\\\\u0131k\\\.split(\\\_\\\),monthsShort:\\\Oca_\\\\u015eub_Mar_Nis_May_Haz_Tem_A\\\\u011fu_Eyl_Eki_Kas_Ara\\\.split(\\\_\\\),weekdays:\\\Pazar_Pazartesi_Sal\\\\u0131_\\\\xc7ar\\\\u015famba_Per\\\\u015fembe_Cuma_Cumartesi\\\.split(\\\_\\\),weekdaysShort:\\\Paz_Pts_Sal_\\\\xc7ar_Per_Cum_Cts\\\.split(\\\_\\\),weekdaysMin:\\\Pz_Pt_Sa_\\\\xc7a_Pe_Cu_Ct\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\bug\\\\xfcn saat LT\\\,nextDay:\\\yar\\\\u0131n saat LT\\\,nextWeek:\\\gelecek dddd saat LT\\\,lastDay:\\\d\\\\xfcn LT\\\,lastWeek:\\\ge\\\\xe7en dddd saat LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s sonra\\\,past:\\\%s \\\\xf6nce\\\,s:\\\birka\\\\xe7 saniye\\\,ss:\\\%d saniye\\\,m:\\\bir dakika\\\,mm:\\\%d dakika\\\,h:\\\bir saat\\\,hh:\\\%d saat\\\,d:\\\bir g\\\\xfcn\\\,dd:\\\%d g\\\\xfcn\\\,M:\\\bir ay\\\,MM:\\\%d ay\\\,y:\\\bir y\\\\u0131l\\\,yy:\\\%d y\\\\u0131l\\\},ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\Do\\\:case\\\DD\\\:return e;default:if(0e)return e+\\\\\\\u0131nc\\\\u0131\\\;var te%10;return e+(mdt||mde%100-t||md100\u003Ce?100:null)}},week:{dow:1,doy:7}}),l.defineLocale(\\\tzl\\\,{months:\\\Januar_Fevraglh_Mar\\\\xe7_Avr\\\\xefu_Mai_G\\\\xfcn_Julia_Guscht_Setemvar_Listop\\\\xe4ts_Noemvar_Zecemvar\\\.split(\\\_\\\),monthsShort:\\\Jan_Fev_Mar_Avr_Mai_G\\\\xfcn_Jul_Gus_Set_Lis_Noe_Zec\\\.split(\\\_\\\),weekdays:\\\S\\\\xfaladi_L\\\\xfane\\\\xe7i_Maitzi_M\\\\xe1rcuri_Xh\\\\xfaadi_Vi\\\\xe9ner\\\\xe7i_S\\\\xe1turi\\\.split(\\\_\\\),weekdaysShort:\\\S\\\\xfal_L\\\\xfan_Mai_M\\\\xe1r_Xh\\\\xfa_Vi\\\\xe9_S\\\\xe1t\\\.split(\\\_\\\),weekdaysMin:\\\S\\\\xfa_L\\\\xfa_Ma_M\\\\xe1_Xh_Vi_S\\\\xe1\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH.mm\\\,LTS:\\\HH.mm.ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D. MMMM dallas YYYY\\\,LLL:\\\D. MMMM dallas YYYY HH.mm\\\,LLLL:\\\dddd, li D. MMMM dallas YYYY HH.mm\\\},meridiemParse:/d\\\\o|d\\\\a/i,isPM:function(e){return\\\do\\\e.toLowerCase()},meridiem:function(e,a,t){return 11\u003Ce?t?\\\do\\\:\\\DO\\\:t?\\\da\\\:\\\DA\\\},calendar:{sameDay:\\\oxhi \\\\xe0 LT\\\,nextDay:\\\dem\\\\xe0 \\\\xe0 LT\\\,nextWeek:\\\dddd \\\\xe0 LT\\\,lastDay:\\\ieiri \\\\xe0 LT\\\,lastWeek:\\\s\\\\xfcr el dddd lasteu \\\\xe0 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\osprei %s\\\,past:\\\ja%s\\\,s:ud,ss:ud,m:ud,mm:ud,h:ud,hh:ud,d:ud,dd:ud,M:ud,MM:ud,y:ud,yy:ud},dayOfMonthOrdinalParse:/\\\\d{1,2}\\\\./,ordinal:\\\%d.\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\tzm-latn\\\,{months:\\\innayr_br\\\\u02e4ayr\\\\u02e4_mar\\\\u02e4s\\\\u02e4_ibrir_mayyw_ywnyw_ywlywz_\\\\u0263w\\\\u0161t_\\\\u0161wtanbir_kt\\\\u02e4wbr\\\\u02e4_nwwanbir_dwjnbir\\\.split(\\\_\\\),monthsShort:\\\innayr_br\\\\u02e4ayr\\\\u02e4_mar\\\\u02e4s\\\\u02e4_ibrir_mayyw_ywnyw_ywlywz_\\\\u0263w\\\\u0161t_\\\\u0161wtanbir_kt\\\\u02e4wbr\\\\u02e4_nwwanbir_dwjnbir\\\.split(\\\_\\\),weekdays:\\\asamas_aynas_asinas_akras_akwas_asimwas_asi\\\\u1e0dyas\\\.split(\\\_\\\),weekdaysShort:\\\asamas_aynas_asinas_akras_akwas_asimwas_asi\\\\u1e0dyas\\\.split(\\\_\\\),weekdaysMin:\\\asamas_aynas_asinas_akras_akwas_asimwas_asi\\\\u1e0dyas\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\asdkh g LT\\\,nextDay:\\\aska g LT\\\,nextWeek:\\\dddd g LT\\\,lastDay:\\\assant g LT\\\,lastWeek:\\\dddd g LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\dadkh s yan %s\\\,past:\\\yan %s\\\,s:\\\imik\\\,ss:\\\%d imik\\\,m:\\\minu\\\\u1e0d\\\,mm:\\\%d minu\\\\u1e0d\\\,h:\\\sa\\\\u025ba\\\,hh:\\\%d tassa\\\\u025bin\\\,d:\\\ass\\\,dd:\\\%d ossan\\\,M:\\\ayowr\\\,MM:\\\%d iyyirn\\\,y:\\\asgas\\\,yy:\\\%d isgasn\\\},week:{dow:6,doy:12}}),l.defineLocale(\\\tzm\\\,{months:\\\\\\\u2d49\\\\u2d4f\\\\u2d4f\\\\u2d30\\\\u2d62\\\\u2d54_\\\\u2d31\\\\u2d55\\\\u2d30\\\\u2d62\\\\u2d55_\\\\u2d4e\\\\u2d30\\\\u2d55\\\\u2d5a_\\\\u2d49\\\\u2d31\\\\u2d54\\\\u2d49\\\\u2d54_\\\\u2d4e\\\\u2d30\\\\u2d62\\\\u2d62\\\\u2d53_\\\\u2d62\\\\u2d53\\\\u2d4f\\\\u2d62\\\\u2d53_\\\\u2d62\\\\u2d53\\\\u2d4d\\\\u2d62\\\\u2d53\\\\u2d63_\\\\u2d56\\\\u2d53\\\\u2d5b\\\\u2d5c_\\\\u2d5b\\\\u2d53\\\\u2d5c\\\\u2d30\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54_\\\\u2d3d\\\\u2d5f\\\\u2d53\\\\u2d31\\\\u2d55_\\\\u2d4f\\\\u2d53\\\\u2d61\\\\u2d30\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54_\\\\u2d37\\\\u2d53\\\\u2d4a\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54\\\.split(\\\_\\\),monthsShort:\\\\\\\u2d49\\\\u2d4f\\\\u2d4f\\\\u2d30\\\\u2d62\\\\u2d54_\\\\u2d31\\\\u2d55\\\\u2d30\\\\u2d62\\\\u2d55_\\\\u2d4e\\\\u2d30\\\\u2d55\\\\u2d5a_\\\\u2d49\\\\u2d31\\\\u2d54\\\\u2d49\\\\u2d54_\\\\u2d4e\\\\u2d30\\\\u2d62\\\\u2d62\\\\u2d53_\\\\u2d62\\\\u2d53\\\\u2d4f\\\\u2d62\\\\u2d53_\\\\u2d62\\\\u2d53\\\\u2d4d\\\\u2d62\\\\u2d53\\\\u2d63_\\\\u2d56\\\\u2d53\\\\u2d5b\\\\u2d5c_\\\\u2d5b\\\\u2d53\\\\u2d5c\\\\u2d30\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54_\\\\u2d3d\\\\u2d5f\\\\u2d53\\\\u2d31\\\\u2d55_\\\\u2d4f\\\\u2d53\\\\u2d61\\\\u2d30\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54_\\\\u2d37\\\\u2d53\\\\u2d4a\\\\u2d4f\\\\u2d31\\\\u2d49\\\\u2d54\\\.split(\\\_\\\),weekdays:\\\\\\\u2d30\\\\u2d59\\\\u2d30\\\\u2d4e\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d62\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d54\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4e\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d39\\\\u2d62\\\\u2d30\\\\u2d59\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u2d30\\\\u2d59\\\\u2d30\\\\u2d4e\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d62\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d54\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4e\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d39\\\\u2d62\\\\u2d30\\\\u2d59\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u2d30\\\\u2d59\\\\u2d30\\\\u2d4e\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d62\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4f\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d54\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d3d\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d4e\\\\u2d61\\\\u2d30\\\\u2d59_\\\\u2d30\\\\u2d59\\\\u2d49\\\\u2d39\\\\u2d62\\\\u2d30\\\\u2d59\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\\\\\u2d30\\\\u2d59\\\\u2d37\\\\u2d45 \\\\u2d34 LT\\\,nextDay:\\\\\\\u2d30\\\\u2d59\\\\u2d3d\\\\u2d30 \\\\u2d34 LT\\\,nextWeek:\\\dddd \\\\u2d34 LT\\\,lastDay:\\\\\\\u2d30\\\\u2d5a\\\\u2d30\\\\u2d4f\\\\u2d5c \\\\u2d34 LT\\\,lastWeek:\\\dddd \\\\u2d34 LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u2d37\\\\u2d30\\\\u2d37\\\\u2d45 \\\\u2d59 \\\\u2d62\\\\u2d30\\\\u2d4f %s\\\,past:\\\\\\\u2d62\\\\u2d30\\\\u2d4f %s\\\,s:\\\\\\\u2d49\\\\u2d4e\\\\u2d49\\\\u2d3d\\\,ss:\\\%d \\\\u2d49\\\\u2d4e\\\\u2d49\\\\u2d3d\\\,m:\\\\\\\u2d4e\\\\u2d49\\\\u2d4f\\\\u2d53\\\\u2d3a\\\,mm:\\\%d \\\\u2d4e\\\\u2d49\\\\u2d4f\\\\u2d53\\\\u2d3a\\\,h:\\\\\\\u2d59\\\\u2d30\\\\u2d44\\\\u2d30\\\,hh:\\\%d \\\\u2d5c\\\\u2d30\\\\u2d59\\\\u2d59\\\\u2d30\\\\u2d44\\\\u2d49\\\\u2d4f\\\,d:\\\\\\\u2d30\\\\u2d59\\\\u2d59\\\,dd:\\\%d o\\\\u2d59\\\\u2d59\\\\u2d30\\\\u2d4f\\\,M:\\\\\\\u2d30\\\\u2d62o\\\\u2d53\\\\u2d54\\\,MM:\\\%d \\\\u2d49\\\\u2d62\\\\u2d62\\\\u2d49\\\\u2d54\\\\u2d4f\\\,y:\\\\\\\u2d30\\\\u2d59\\\\u2d33\\\\u2d30\\\\u2d59\\\,yy:\\\%d \\\\u2d49\\\\u2d59\\\\u2d33\\\\u2d30\\\\u2d59\\\\u2d4f\\\},week:{dow:6,doy:12}}),l.defineLocale(\\\ug-cn\\\,{months:\\\\\\\u064a\\\\u0627\\\\u0646\\\\u06cb\\\\u0627\\\\u0631_\\\\u0641\\\\u06d0\\\\u06cb\\\\u0631\\\\u0627\\\\u0644_\\\\u0645\\\\u0627\\\\u0631\\\\u062a_\\\\u0626\\\\u0627\\\\u067e\\\\u0631\\\\u06d0\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u0626\\\\u0649\\\\u064a\\\\u06c7\\\\u0646_\\\\u0626\\\\u0649\\\\u064a\\\\u06c7\\\\u0644_\\\\u0626\\\\u0627\\\\u06cb\\\\u063a\\\\u06c7\\\\u0633\\\\u062a_\\\\u0633\\\\u06d0\\\\u0646\\\\u062a\\\\u06d5\\\\u0628\\\\u0649\\\\u0631_\\\\u0626\\\\u06c6\\\\u0643\\\\u062a\\\\u06d5\\\\u0628\\\\u0649\\\\u0631_\\\\u0646\\\\u0648\\\\u064a\\\\u0627\\\\u0628\\\\u0649\\\\u0631_\\\\u062f\\\\u06d0\\\\u0643\\\\u0627\\\\u0628\\\\u0649\\\\u0631\\\.split(\\\_\\\),monthsShort:\\\\\\\u064a\\\\u0627\\\\u0646\\\\u06cb\\\\u0627\\\\u0631_\\\\u0641\\\\u06d0\\\\u06cb\\\\u0631\\\\u0627\\\\u0644_\\\\u0645\\\\u0627\\\\u0631\\\\u062a_\\\\u0626\\\\u0627\\\\u067e\\\\u0631\\\\u06d0\\\\u0644_\\\\u0645\\\\u0627\\\\u064a_\\\\u0626\\\\u0649\\\\u064a\\\\u06c7\\\\u0646_\\\\u0626\\\\u0649\\\\u064a\\\\u06c7\\\\u0644_\\\\u0626\\\\u0627\\\\u06cb\\\\u063a\\\\u06c7\\\\u0633\\\\u062a_\\\\u0633\\\\u06d0\\\\u0646\\\\u062a\\\\u06d5\\\\u0628\\\\u0649\\\\u0631_\\\\u0626\\\\u06c6\\\\u0643\\\\u062a\\\\u06d5\\\\u0628\\\\u0649\\\\u0631_\\\\u0646\\\\u0648\\\\u064a\\\\u0627\\\\u0628\\\\u0649\\\\u0631_\\\\u062f\\\\u06d0\\\\u0643\\\\u0627\\\\u0628\\\\u0649\\\\u0631\\\.split(\\\_\\\),weekdays:\\\\\\\u064a\\\\u06d5\\\\u0643\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5_\\\\u062f\\\\u06c8\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5_\\\\u0633\\\\u06d5\\\\u064a\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5_\\\\u0686\\\\u0627\\\\u0631\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5_\\\\u067e\\\\u06d5\\\\u064a\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5_\\\\u062c\\\\u06c8\\\\u0645\\\\u06d5_\\\\u0634\\\\u06d5\\\\u0646\\\\u0628\\\\u06d5\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u064a\\\\u06d5_\\\\u062f\\\\u06c8_\\\\u0633\\\\u06d5_\\\\u0686\\\\u0627_\\\\u067e\\\\u06d5_\\\\u062c\\\\u06c8_\\\\u0634\\\\u06d5\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u064a\\\\u06d5_\\\\u062f\\\\u06c8_\\\\u0633\\\\u06d5_\\\\u0686\\\\u0627_\\\\u067e\\\\u06d5_\\\\u062c\\\\u06c8_\\\\u0634\\\\u06d5\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY-MM-DD\\\,LL:\\\YYYY-\\\\u064a\\\\u0649\\\\u0644\\\\u0649M-\\\\u0626\\\\u0627\\\\u064a\\\\u0646\\\\u0649\\\\u06adD-\\\\u0643\\\\u06c8\\\\u0646\\\\u0649\\\,LLL:\\\YYYY-\\\\u064a\\\\u0649\\\\u0644\\\\u0649M-\\\\u0626\\\\u0627\\\\u064a\\\\u0646\\\\u0649\\\\u06adD-\\\\u0643\\\\u06c8\\\\u0646\\\\u0649\\\\u060c HH:mm\\\,LLLL:\\\dddd\\\\u060c YYYY-\\\\u064a\\\\u0649\\\\u0644\\\\u0649M-\\\\u0626\\\\u0627\\\\u064a\\\\u0646\\\\u0649\\\\u06adD-\\\\u0643\\\\u06c8\\\\u0646\\\\u0649\\\\u060c HH:mm\\\},meridiemParse:/\\\\u064a\\\\u06d0\\\\u0631\\\\u0649\\\\u0645 \\\\u0643\\\\u06d0\\\\u0686\\\\u06d5|\\\\u0633\\\\u06d5\\\\u06be\\\\u06d5\\\\u0631|\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0628\\\\u06c7\\\\u0631\\\\u06c7\\\\u0646|\\\\u0686\\\\u06c8\\\\u0634|\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0643\\\\u06d0\\\\u064a\\\\u0649\\\\u0646|\\\\u0643\\\\u06d5\\\\u0686/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u064a\\\\u06d0\\\\u0631\\\\u0649\\\\u0645 \\\\u0643\\\\u06d0\\\\u0686\\\\u06d5\\\a||\\\\\\\u0633\\\\u06d5\\\\u06be\\\\u06d5\\\\u0631\\\a||\\\\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0628\\\\u06c7\\\\u0631\\\\u06c7\\\\u0646\\\a?e:\\\\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0643\\\\u06d0\\\\u064a\\\\u0649\\\\u0646\\\a||\\\\\\\u0643\\\\u06d5\\\\u0686\\\a?e+12:11\u003Ce?e:e+12},meridiem:function(e,a,t){var s100*e+a;return s\u003C600?\\\\\\\u064a\\\\u06d0\\\\u0631\\\\u0649\\\\u0645 \\\\u0643\\\\u06d0\\\\u0686\\\\u06d5\\\:s\u003C900?\\\\\\\u0633\\\\u06d5\\\\u06be\\\\u06d5\\\\u0631\\\:s\u003C1130?\\\\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0628\\\\u06c7\\\\u0631\\\\u06c7\\\\u0646\\\:s\u003C1230?\\\\\\\u0686\\\\u06c8\\\\u0634\\\:s\u003C1800?\\\\\\\u0686\\\\u06c8\\\\u0634\\\\u062a\\\\u0649\\\\u0646 \\\\u0643\\\\u06d0\\\\u064a\\\\u0649\\\\u0646\\\:\\\\\\\u0643\\\\u06d5\\\\u0686\\\},calendar:{sameDay:\\\\\\\u0628\\\\u06c8\\\\u06af\\\\u06c8\\\\u0646 \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a LT\\\,nextDay:\\\\\\\u0626\\\\u06d5\\\\u062a\\\\u06d5 \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a LT\\\,nextWeek:\\\\\\\u0643\\\\u06d0\\\\u0644\\\\u06d5\\\\u0631\\\\u0643\\\\u0649 dddd \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a LT\\\,lastDay:\\\\\\\u062a\\\\u06c6\\\\u0646\\\\u06c8\\\\u06af\\\\u06c8\\\\u0646 LT\\\,lastWeek:\\\\\\\u0626\\\\u0627\\\\u0644\\\\u062f\\\\u0649\\\\u0646\\\\u0642\\\\u0649 dddd \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0643\\\\u06d0\\\\u064a\\\\u0649\\\\u0646\\\,past:\\\%s \\\\u0628\\\\u06c7\\\\u0631\\\\u06c7\\\\u0646\\\,s:\\\\\\\u0646\\\\u06d5\\\\u0686\\\\u0686\\\\u06d5 \\\\u0633\\\\u06d0\\\\u0643\\\\u0648\\\\u0646\\\\u062a\\\,ss:\\\%d \\\\u0633\\\\u06d0\\\\u0643\\\\u0648\\\\u0646\\\\u062a\\\,m:\\\\\\\u0628\\\\u0649\\\\u0631 \\\\u0645\\\\u0649\\\\u0646\\\\u06c7\\\\u062a\\\,mm:\\\%d \\\\u0645\\\\u0649\\\\u0646\\\\u06c7\\\\u062a\\\,h:\\\\\\\u0628\\\\u0649\\\\u0631 \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a\\\,hh:\\\%d \\\\u0633\\\\u0627\\\\u0626\\\\u06d5\\\\u062a\\\,d:\\\\\\\u0628\\\\u0649\\\\u0631 \\\\u0643\\\\u06c8\\\\u0646\\\,dd:\\\%d \\\\u0643\\\\u06c8\\\\u0646\\\,M:\\\\\\\u0628\\\\u0649\\\\u0631 \\\\u0626\\\\u0627\\\\u064a\\\,MM:\\\%d \\\\u0626\\\\u0627\\\\u064a\\\,y:\\\\\\\u0628\\\\u0649\\\\u0631 \\\\u064a\\\\u0649\\\\u0644\\\,yy:\\\%d \\\\u064a\\\\u0649\\\\u0644\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(-\\\\u0643\\\\u06c8\\\\u0646\\\\u0649|-\\\\u0626\\\\u0627\\\\u064a|-\\\\u06be\\\\u06d5\\\\u067e\\\\u062a\\\\u06d5)/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\-\\\\u0643\\\\u06c8\\\\u0646\\\\u0649\\\;case\\\w\\\:case\\\W\\\:return e+\\\-\\\\u06be\\\\u06d5\\\\u067e\\\\u062a\\\\u06d5\\\;default:return e}},preparse:function(e){return e.replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/,/g,\\\\\\\u060c\\\)},week:{dow:1,doy:7}}),l.defineLocale(\\\uk\\\,{months:{format:\\\\\\\u0441\\\\u0456\\\\u0447\\\\u043d\\\\u044f_\\\\u043b\\\\u044e\\\\u0442\\\\u043e\\\\u0433\\\\u043e_\\\\u0431\\\\u0435\\\\u0440\\\\u0435\\\\u0437\\\\u043d\\\\u044f_\\\\u043a\\\\u0432\\\\u0456\\\\u0442\\\\u043d\\\\u044f_\\\\u0442\\\\u0440\\\\u0430\\\\u0432\\\\u043d\\\\u044f_\\\\u0447\\\\u0435\\\\u0440\\\\u0432\\\\u043d\\\\u044f_\\\\u043b\\\\u0438\\\\u043f\\\\u043d\\\\u044f_\\\\u0441\\\\u0435\\\\u0440\\\\u043f\\\\u043d\\\\u044f_\\\\u0432\\\\u0435\\\\u0440\\\\u0435\\\\u0441\\\\u043d\\\\u044f_\\\\u0436\\\\u043e\\\\u0432\\\\u0442\\\\u043d\\\\u044f_\\\\u043b\\\\u0438\\\\u0441\\\\u0442\\\\u043e\\\\u043f\\\\u0430\\\\u0434\\\\u0430_\\\\u0433\\\\u0440\\\\u0443\\\\u0434\\\\u043d\\\\u044f\\\.split(\\\_\\\),standalone:\\\\\\\u0441\\\\u0456\\\\u0447\\\\u0435\\\\u043d\\\\u044c_\\\\u043b\\\\u044e\\\\u0442\\\\u0438\\\\u0439_\\\\u0431\\\\u0435\\\\u0440\\\\u0435\\\\u0437\\\\u0435\\\\u043d\\\\u044c_\\\\u043a\\\\u0432\\\\u0456\\\\u0442\\\\u0435\\\\u043d\\\\u044c_\\\\u0442\\\\u0440\\\\u0430\\\\u0432\\\\u0435\\\\u043d\\\\u044c_\\\\u0447\\\\u0435\\\\u0440\\\\u0432\\\\u0435\\\\u043d\\\\u044c_\\\\u043b\\\\u0438\\\\u043f\\\\u0435\\\\u043d\\\\u044c_\\\\u0441\\\\u0435\\\\u0440\\\\u043f\\\\u0435\\\\u043d\\\\u044c_\\\\u0432\\\\u0435\\\\u0440\\\\u0435\\\\u0441\\\\u0435\\\\u043d\\\\u044c_\\\\u0436\\\\u043e\\\\u0432\\\\u0442\\\\u0435\\\\u043d\\\\u044c_\\\\u043b\\\\u0438\\\\u0441\\\\u0442\\\\u043e\\\\u043f\\\\u0430\\\\u0434_\\\\u0433\\\\u0440\\\\u0443\\\\u0434\\\\u0435\\\\u043d\\\\u044c\\\.split(\\\_\\\)},monthsShort:\\\\\\\u0441\\\\u0456\\\\u0447_\\\\u043b\\\\u044e\\\\u0442_\\\\u0431\\\\u0435\\\\u0440_\\\\u043a\\\\u0432\\\\u0456\\\\u0442_\\\\u0442\\\\u0440\\\\u0430\\\\u0432_\\\\u0447\\\\u0435\\\\u0440\\\\u0432_\\\\u043b\\\\u0438\\\\u043f_\\\\u0441\\\\u0435\\\\u0440\\\\u043f_\\\\u0432\\\\u0435\\\\u0440_\\\\u0436\\\\u043e\\\\u0432\\\\u0442_\\\\u043b\\\\u0438\\\\u0441\\\\u0442_\\\\u0433\\\\u0440\\\\u0443\\\\u0434\\\.split(\\\_\\\),weekdays:function(e,a){var t{nominative:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u044f_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u043e\\\\u043a_\\\\u0432\\\\u0456\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043e\\\\u043a_\\\\u0441\\\\u0435\\\\u0440\\\\u0435\\\\u0434\\\\u0430_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0435\\\\u0440_\\\\u043f\\\\u2019\\\\u044f\\\\u0442\\\\u043d\\\\u0438\\\\u0446\\\\u044f_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0430\\\.split(\\\_\\\),accusative:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u044e_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u043e\\\\u043a_\\\\u0432\\\\u0456\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043e\\\\u043a_\\\\u0441\\\\u0435\\\\u0440\\\\u0435\\\\u0434\\\\u0443_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0435\\\\u0440_\\\\u043f\\\\u2019\\\\u044f\\\\u0442\\\\u043d\\\\u0438\\\\u0446\\\\u044e_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0443\\\.split(\\\_\\\),genitive:\\\\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u0456_\\\\u043f\\\\u043e\\\\u043d\\\\u0435\\\\u0434\\\\u0456\\\\u043b\\\\u043a\\\\u0430_\\\\u0432\\\\u0456\\\\u0432\\\\u0442\\\\u043e\\\\u0440\\\\u043a\\\\u0430_\\\\u0441\\\\u0435\\\\u0440\\\\u0435\\\\u0434\\\\u0438_\\\\u0447\\\\u0435\\\\u0442\\\\u0432\\\\u0435\\\\u0440\\\\u0433\\\\u0430_\\\\u043f\\\\u2019\\\\u044f\\\\u0442\\\\u043d\\\\u0438\\\\u0446\\\\u0456_\\\\u0441\\\\u0443\\\\u0431\\\\u043e\\\\u0442\\\\u0438\\\.split(\\\_\\\)};return!0e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t/(\\\\\\\\u0412\\\\u0432\\\\u0423\\\\u0443\\\\) ?dddd/.test(a)?\\\accusative\\\:/\\\\?(?:\\\\u043c\\\\u0438\\\\u043d\\\\u0443\\\\u043b\\\\u043e\\\\u0457|\\\\u043d\\\\u0430\\\\u0441\\\\u0442\\\\u0443\\\\u043f\\\\u043d\\\\u043e\\\\u0457)? ?\\\\ ?dddd/.test(a)?\\\genitive\\\:\\\nominative\\\e.day():t.nominative},weekdaysShort:\\\\\\\u043d\\\\u0434_\\\\u043f\\\\u043d_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0442_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u043d\\\\u0434_\\\\u043f\\\\u043d_\\\\u0432\\\\u0442_\\\\u0441\\\\u0440_\\\\u0447\\\\u0442_\\\\u043f\\\\u0442_\\\\u0441\\\\u0431\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD.MM.YYYY\\\,LL:\\\D MMMM YYYY \\\\u0440.\\\,LLL:\\\D MMMM YYYY \\\\u0440., HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY \\\\u0440., HH:mm\\\},calendar:{sameDay:Md(\\\\\\\u0421\\\\u044c\\\\u043e\\\\u0433\\\\u043e\\\\u0434\\\\u043d\\\\u0456 \\\),nextDay:Md(\\\\\\\u0417\\\\u0430\\\\u0432\\\\u0442\\\\u0440\\\\u0430 \\\),lastDay:Md(\\\\\\\u0412\\\\u0447\\\\u043e\\\\u0440\\\\u0430 \\\),nextWeek:Md(\\\\\\\u0423 dddd \\\),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return Md(\\\\\\\u041c\\\\u0438\\\\u043d\\\\u0443\\\\u043b\\\\u043e\\\\u0457 dddd \\\).call(this);case 1:case 2:case 4:return Md(\\\\\\\u041c\\\\u0438\\\\u043d\\\\u0443\\\\u043b\\\\u043e\\\\u0433\\\\u043e dddd \\\).call(this)}},sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u0437\\\\u0430 %s\\\,past:\\\%s \\\\u0442\\\\u043e\\\\u043c\\\\u0443\\\,s:\\\\\\\u0434\\\\u0435\\\\u043a\\\\u0456\\\\u043b\\\\u044c\\\\u043a\\\\u0430 \\\\u0441\\\\u0435\\\\u043a\\\\u0443\\\\u043d\\\\u0434\\\,ss:ld,m:ld,mm:ld,h:\\\\\\\u0433\\\\u043e\\\\u0434\\\\u0438\\\\u043d\\\\u0443\\\,hh:ld,d:\\\\\\\u0434\\\\u0435\\\\u043d\\\\u044c\\\,dd:ld,M:\\\\\\\u043c\\\\u0456\\\\u0441\\\\u044f\\\\u0446\\\\u044c\\\,MM:ld,y:\\\\\\\u0440\\\\u0456\\\\u043a\\\,yy:ld},meridiemParse:/\\\\u043d\\\\u043e\\\\u0447\\\\u0456|\\\\u0440\\\\u0430\\\\u043d\\\\u043a\\\\u0443|\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u043e\\\\u0440\\\\u0430/,isPM:function(e){return/^(\\\\u0434\\\\u043d\\\\u044f|\\\\u0432\\\\u0435\\\\u0447\\\\u043e\\\\u0440\\\\u0430)$/.test(e)},meridiem:function(e,a,t){return e\u003C4?\\\\\\\u043d\\\\u043e\\\\u0447\\\\u0456\\\:e\u003C12?\\\\\\\u0440\\\\u0430\\\\u043d\\\\u043a\\\\u0443\\\:e\u003C17?\\\\\\\u0434\\\\u043d\\\\u044f\\\:\\\\\\\u0432\\\\u0435\\\\u0447\\\\u043e\\\\u0440\\\\u0430\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}-(\\\\u0439|\\\\u0433\\\\u043e)/,ordinal:function(e,a){switch(a){case\\\M\\\:case\\\d\\\:case\\\DDD\\\:case\\\w\\\:case\\\W\\\:return e+\\\-\\\\u0439\\\;case\\\D\\\:return e+\\\-\\\\u0433\\\\u043e\\\;default:return e}},week:{dow:1,doy:7}});var hd\\\\\\\u062c\\\\u0646\\\\u0648\\\\u0631\\\\u06cc\\\,\\\\\\\u0641\\\\u0631\\\\u0648\\\\u0631\\\\u06cc\\\,\\\\\\\u0645\\\\u0627\\\\u0631\\\\u0686\\\,\\\\\\\u0627\\\\u067e\\\\u0631\\\\u06cc\\\\u0644\\\,\\\\\\\u0645\\\\u0626\\\\u06cc\\\,\\\\\\\u062c\\\\u0648\\\\u0646\\\,\\\\\\\u062c\\\\u0648\\\\u0644\\\\u0627\\\\u0626\\\\u06cc\\\,\\\\\\\u0627\\\\u06af\\\\u0633\\\\u062a\\\,\\\\\\\u0633\\\\u062a\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u0627\\\\u06a9\\\\u062a\\\\u0648\\\\u0628\\\\u0631\\\,\\\\\\\u0646\\\\u0648\\\\u0645\\\\u0628\\\\u0631\\\,\\\\\\\u062f\\\\u0633\\\\u0645\\\\u0628\\\\u0631\\\,Ld\\\\\\\u0627\\\\u062a\\\\u0648\\\\u0627\\\\u0631\\\,\\\\\\\u067e\\\\u06cc\\\\u0631\\\,\\\\\\\u0645\\\\u0646\\\\u06af\\\\u0644\\\,\\\\\\\u0628\\\\u062f\\\\u06be\\\,\\\\\\\u062c\\\\u0645\\\\u0639\\\\u0631\\\\u0627\\\\u062a\\\,\\\\\\\u062c\\\\u0645\\\\u0639\\\\u06c1\\\,\\\\\\\u06c1\\\\u0641\\\\u062a\\\\u06c1\\\;return l.defineLocale(\\\ur\\\,{months:hd,monthsShort:hd,weekdays:Ld,weekdaysShort:Ld,weekdaysMin:Ld,longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd\\\\u060c D MMMM YYYY HH:mm\\\},meridiemParse:/\\\\u0635\\\\u0628\\\\u062d|\\\\u0634\\\\u0627\\\\u0645/,isPM:function(e){return\\\\\\\u0634\\\\u0627\\\\u0645\\\e},meridiem:function(e,a,t){return e\u003C12?\\\\\\\u0635\\\\u0628\\\\u062d\\\:\\\\\\\u0634\\\\u0627\\\\u0645\\\},calendar:{sameDay:\\\\\\\u0622\\\\u062c \\\\u0628\\\\u0648\\\\u0642\\\\u062a LT\\\,nextDay:\\\\\\\u06a9\\\\u0644 \\\\u0628\\\\u0648\\\\u0642\\\\u062a LT\\\,nextWeek:\\\dddd \\\\u0628\\\\u0648\\\\u0642\\\\u062a LT\\\,lastDay:\\\\\\\u06af\\\\u0630\\\\u0634\\\\u062a\\\\u06c1 \\\\u0631\\\\u0648\\\\u0632 \\\\u0628\\\\u0648\\\\u0642\\\\u062a LT\\\,lastWeek:\\\\\\\u06af\\\\u0630\\\\u0634\\\\u062a\\\\u06c1 dddd \\\\u0628\\\\u0648\\\\u0642\\\\u062a LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s \\\\u0628\\\\u0639\\\\u062f\\\,past:\\\%s \\\\u0642\\\\u0628\\\\u0644\\\,s:\\\\\\\u0686\\\\u0646\\\\u062f \\\\u0633\\\\u06cc\\\\u06a9\\\\u0646\\\\u0688\\\,ss:\\\%d \\\\u0633\\\\u06cc\\\\u06a9\\\\u0646\\\\u0688\\\,m:\\\\\\\u0627\\\\u06cc\\\\u06a9 \\\\u0645\\\\u0646\\\\u0679\\\,mm:\\\%d \\\\u0645\\\\u0646\\\\u0679\\\,h:\\\\\\\u0627\\\\u06cc\\\\u06a9 \\\\u06af\\\\u06be\\\\u0646\\\\u0679\\\\u06c1\\\,hh:\\\%d \\\\u06af\\\\u06be\\\\u0646\\\\u0679\\\\u06d2\\\,d:\\\\\\\u0627\\\\u06cc\\\\u06a9 \\\\u062f\\\\u0646\\\,dd:\\\%d \\\\u062f\\\\u0646\\\,M:\\\\\\\u0627\\\\u06cc\\\\u06a9 \\\\u0645\\\\u0627\\\\u06c1\\\,MM:\\\%d \\\\u0645\\\\u0627\\\\u06c1\\\,y:\\\\\\\u0627\\\\u06cc\\\\u06a9 \\\\u0633\\\\u0627\\\\u0644\\\,yy:\\\%d \\\\u0633\\\\u0627\\\\u0644\\\},preparse:function(e){return e.replace(/\\\\u060c/g,\\\,\\\)},postformat:function(e){return e.replace(/,/g,\\\\\\\u060c\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\uz-latn\\\,{months:\\\Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr\\\.split(\\\_\\\),monthsShort:\\\Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek\\\.split(\\\_\\\),weekdays:\\\Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba\\\.split(\\\_\\\),weekdaysShort:\\\Yak_Dush_Sesh_Chor_Pay_Jum_Shan\\\.split(\\\_\\\),weekdaysMin:\\\Ya_Du_Se_Cho_Pa_Ju_Sha\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\D MMMM YYYY, dddd HH:mm\\\},calendar:{sameDay:\\\Bugun soat LT da\\\,nextDay:\\\Ertaga LT da\\\,nextWeek:\\\dddd kuni soat LT da\\\,lastDay:\\\Kecha soat LT da\\\,lastWeek:\\\Otgan dddd kuni soat LT da\\\,sameElse:\\\L\\\},relativeTime:{future:\\\Yaqin %s ichida\\\,past:\\\Bir necha %s oldin\\\,s:\\\soniya\\\,ss:\\\%d soniya\\\,m:\\\bir daqiqa\\\,mm:\\\%d daqiqa\\\,h:\\\bir soat\\\,hh:\\\%d soat\\\,d:\\\bir kun\\\,dd:\\\%d kun\\\,M:\\\bir oy\\\,MM:\\\%d oy\\\,y:\\\bir yil\\\,yy:\\\%d yil\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\uz\\\,{months:\\\\\\\u044f\\\\u043d\\\\u0432\\\\u0430\\\\u0440_\\\\u0444\\\\u0435\\\\u0432\\\\u0440\\\\u0430\\\\u043b_\\\\u043c\\\\u0430\\\\u0440\\\\u0442_\\\\u0430\\\\u043f\\\\u0440\\\\u0435\\\\u043b_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d_\\\\u0438\\\\u044e\\\\u043b_\\\\u0430\\\\u0432\\\\u0433\\\\u0443\\\\u0441\\\\u0442_\\\\u0441\\\\u0435\\\\u043d\\\\u0442\\\\u044f\\\\u0431\\\\u0440_\\\\u043e\\\\u043a\\\\u0442\\\\u044f\\\\u0431\\\\u0440_\\\\u043d\\\\u043e\\\\u044f\\\\u0431\\\\u0440_\\\\u0434\\\\u0435\\\\u043a\\\\u0430\\\\u0431\\\\u0440\\\.split(\\\_\\\),monthsShort:\\\\\\\u044f\\\\u043d\\\\u0432_\\\\u0444\\\\u0435\\\\u0432_\\\\u043c\\\\u0430\\\\u0440_\\\\u0430\\\\u043f\\\\u0440_\\\\u043c\\\\u0430\\\\u0439_\\\\u0438\\\\u044e\\\\u043d_\\\\u0438\\\\u044e\\\\u043b_\\\\u0430\\\\u0432\\\\u0433_\\\\u0441\\\\u0435\\\\u043d_\\\\u043e\\\\u043a\\\\u0442_\\\\u043d\\\\u043e\\\\u044f_\\\\u0434\\\\u0435\\\\u043a\\\.split(\\\_\\\),weekdays:\\\\\\\u042f\\\\u043a\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0430_\\\\u0414\\\\u0443\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0430_\\\\u0421\\\\u0435\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0430_\\\\u0427\\\\u043e\\\\u0440\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0430_\\\\u041f\\\\u0430\\\\u0439\\\\u0448\\\\u0430\\\\u043d\\\\u0431\\\\u0430_\\\\u0416\\\\u0443\\\\u043c\\\\u0430_\\\\u0428\\\\u0430\\\\u043d\\\\u0431\\\\u0430\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u042f\\\\u043a\\\\u0448_\\\\u0414\\\\u0443\\\\u0448_\\\\u0421\\\\u0435\\\\u0448_\\\\u0427\\\\u043e\\\\u0440_\\\\u041f\\\\u0430\\\\u0439_\\\\u0416\\\\u0443\\\\u043c_\\\\u0428\\\\u0430\\\\u043d\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u042f\\\\u043a_\\\\u0414\\\\u0443_\\\\u0421\\\\u0435_\\\\u0427\\\\u043e_\\\\u041f\\\\u0430_\\\\u0416\\\\u0443_\\\\u0428\\\\u0430\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\D MMMM YYYY, dddd HH:mm\\\},calendar:{sameDay:\\\\\\\u0411\\\\u0443\\\\u0433\\\\u0443\\\\u043d \\\\u0441\\\\u043e\\\\u0430\\\\u0442 LT \\\\u0434\\\\u0430\\\,nextDay:\\\\\\\u042d\\\\u0440\\\\u0442\\\\u0430\\\\u0433\\\\u0430 LT \\\\u0434\\\\u0430\\\,nextWeek:\\\dddd \\\\u043a\\\\u0443\\\\u043d\\\\u0438 \\\\u0441\\\\u043e\\\\u0430\\\\u0442 LT \\\\u0434\\\\u0430\\\,lastDay:\\\\\\\u041a\\\\u0435\\\\u0447\\\\u0430 \\\\u0441\\\\u043e\\\\u0430\\\\u0442 LT \\\\u0434\\\\u0430\\\,lastWeek:\\\\\\\u0423\\\\u0442\\\\u0433\\\\u0430\\\\u043d dddd \\\\u043a\\\\u0443\\\\u043d\\\\u0438 \\\\u0441\\\\u043e\\\\u0430\\\\u0442 LT \\\\u0434\\\\u0430\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\u042f\\\\u043a\\\\u0438\\\\u043d %s \\\\u0438\\\\u0447\\\\u0438\\\\u0434\\\\u0430\\\,past:\\\\\\\u0411\\\\u0438\\\\u0440 \\\\u043d\\\\u0435\\\\u0447\\\\u0430 %s \\\\u043e\\\\u043b\\\\u0434\\\\u0438\\\\u043d\\\,s:\\\\\\\u0444\\\\u0443\\\\u0440\\\\u0441\\\\u0430\\\\u0442\\\,ss:\\\%d \\\\u0444\\\\u0443\\\\u0440\\\\u0441\\\\u0430\\\\u0442\\\,m:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0434\\\\u0430\\\\u043a\\\\u0438\\\\u043a\\\\u0430\\\,mm:\\\%d \\\\u0434\\\\u0430\\\\u043a\\\\u0438\\\\u043a\\\\u0430\\\,h:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\,hh:\\\%d \\\\u0441\\\\u043e\\\\u0430\\\\u0442\\\,d:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u043a\\\\u0443\\\\u043d\\\,dd:\\\%d \\\\u043a\\\\u0443\\\\u043d\\\,M:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u043e\\\\u0439\\\,MM:\\\%d \\\\u043e\\\\u0439\\\,y:\\\\\\\u0431\\\\u0438\\\\u0440 \\\\u0439\\\\u0438\\\\u043b\\\,yy:\\\%d \\\\u0439\\\\u0438\\\\u043b\\\},week:{dow:1,doy:7}}),l.defineLocale(\\\vi\\\,{months:\\\th\\\\xe1ng 1_th\\\\xe1ng 2_th\\\\xe1ng 3_th\\\\xe1ng 4_th\\\\xe1ng 5_th\\\\xe1ng 6_th\\\\xe1ng 7_th\\\\xe1ng 8_th\\\\xe1ng 9_th\\\\xe1ng 10_th\\\\xe1ng 11_th\\\\xe1ng 12\\\.split(\\\_\\\),monthsShort:\\\Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\ch\\\\u1ee7 nh\\\\u1eadt_th\\\\u1ee9 hai_th\\\\u1ee9 ba_th\\\\u1ee9 t\\\\u01b0_th\\\\u1ee9 n\\\\u0103m_th\\\\u1ee9 s\\\\xe1u_th\\\\u1ee9 b\\\\u1ea3y\\\.split(\\\_\\\),weekdaysShort:\\\CN_T2_T3_T4_T5_T6_T7\\\.split(\\\_\\\),weekdaysMin:\\\CN_T2_T3_T4_T5_T6_T7\\\.split(\\\_\\\),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e\u003C12?t?\\\sa\\\:\\\SA\\\:t?\\\ch\\\:\\\CH\\\},longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM n\\\\u0103m YYYY\\\,LLL:\\\D MMMM n\\\\u0103m YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM n\\\\u0103m YYYY HH:mm\\\,l:\\\DD/M/YYYY\\\,ll:\\\D MMM YYYY\\\,lll:\\\D MMM YYYY HH:mm\\\,llll:\\\ddd, D MMM YYYY HH:mm\\\},calendar:{sameDay:\\\H\\\\xf4m nay l\\\\xfac LT\\\,nextDay:\\\Ng\\\\xe0y mai l\\\\xfac LT\\\,nextWeek:\\\dddd tu\\\\u1ea7n t\\\\u1edbi l\\\\xfac LT\\\,lastDay:\\\H\\\\xf4m qua l\\\\xfac LT\\\,lastWeek:\\\dddd tu\\\\u1ea7n r\\\\u1ed3i l\\\\xfac LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\%s t\\\\u1edbi\\\,past:\\\%s tr\\\\u01b0\\\\u1edbc\\\,s:\\\v\\\\xe0i gi\\\\xe2y\\\,ss:\\\%d gi\\\\xe2y\\\,m:\\\m\\\\u1ed9t ph\\\\xfat\\\,mm:\\\%d ph\\\\xfat\\\,h:\\\m\\\\u1ed9t gi\\\\u1edd\\\,hh:\\\%d gi\\\\u1edd\\\,d:\\\m\\\\u1ed9t ng\\\\xe0y\\\,dd:\\\%d ng\\\\xe0y\\\,M:\\\m\\\\u1ed9t th\\\\xe1ng\\\,MM:\\\%d th\\\\xe1ng\\\,y:\\\m\\\\u1ed9t n\\\\u0103m\\\,yy:\\\%d n\\\\u0103m\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),l.defineLocale(\\\x-pseudo\\\,{months:\\\J~\\\\xe1\\\\xf1\\\\xfa\\\\xe1~r\\\\xfd_F~\\\\xe9br\\\\xfa~\\\\xe1r\\\\xfd_~M\\\\xe1rc~h_\\\\xc1p~r\\\\xedl_~M\\\\xe1\\\\xfd_~J\\\\xfa\\\\xf1\\\\xe9~_J\\\\xfal~\\\\xfd_\\\\xc1\\\\xfa~g\\\\xfast~_S\\\\xe9p~t\\\\xe9mb~\\\\xe9r_\\\\xd3~ct\\\\xf3b~\\\\xe9r_\\\\xd1~\\\\xf3v\\\\xe9m~b\\\\xe9r_~D\\\\xe9c\\\\xe9~mb\\\\xe9r\\\.split(\\\_\\\),monthsShort:\\\J~\\\\xe1\\\\xf1_~F\\\\xe9b_~M\\\\xe1r_~\\\\xc1pr_~M\\\\xe1\\\\xfd_~J\\\\xfa\\\\xf1_~J\\\\xfal_~\\\\xc1\\\\xfag_~S\\\\xe9p_~\\\\xd3ct_~\\\\xd1\\\\xf3v_~D\\\\xe9c\\\.split(\\\_\\\),monthsParseExact:!0,weekdays:\\\S~\\\\xfa\\\\xf1d\\\\xe1~\\\\xfd_M\\\\xf3~\\\\xf1d\\\\xe1\\\\xfd~_T\\\\xfa\\\\xe9~sd\\\\xe1\\\\xfd~_W\\\\xe9d~\\\\xf1\\\\xe9sd~\\\\xe1\\\\xfd_T~h\\\\xfars~d\\\\xe1\\\\xfd_~Fr\\\\xedd~\\\\xe1\\\\xfd_S~\\\\xe1t\\\\xfar~d\\\\xe1\\\\xfd\\\.split(\\\_\\\),weekdaysShort:\\\S~\\\\xfa\\\\xf1_~M\\\\xf3\\\\xf1_~T\\\\xfa\\\\xe9_~W\\\\xe9d_~Th\\\\xfa_~Fr\\\\xed_~S\\\\xe1t\\\.split(\\\_\\\),weekdaysMin:\\\S~\\\\xfa_M\\\\xf3~_T\\\\xfa_~W\\\\xe9_T~h_Fr~_S\\\\xe1\\\.split(\\\_\\\),weekdaysParseExact:!0,longDateFormat:{LT:\\\HH:mm\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY HH:mm\\\,LLLL:\\\dddd, D MMMM YYYY HH:mm\\\},calendar:{sameDay:\\\T~\\\\xf3d\\\\xe1~\\\\xfd \\\\xe1t LT\\\,nextDay:\\\T~\\\\xf3m\\\\xf3~rr\\\\xf3~w \\\\xe1t LT\\\,nextWeek:\\\dddd \\\\xe1t LT\\\,lastDay:\\\\\\\xdd~\\\\xe9st~\\\\xe9rd\\\\xe1~\\\\xfd \\\\xe1t LT\\\,lastWeek:\\\L~\\\\xe1st dddd \\\\xe1t LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\\\\\xed~\\\\xf1 %s\\\,past:\\\%s \\\\xe1~g\\\\xf3\\\,s:\\\\\\\xe1 ~f\\\\xe9w ~s\\\\xe9c\\\\xf3~\\\\xf1ds\\\,ss:\\\%d s~\\\\xe9c\\\\xf3\\\\xf1~ds\\\,m:\\\\\\\xe1 ~m\\\\xed\\\\xf1~\\\\xfat\\\\xe9\\\,mm:\\\%d m~\\\\xed\\\\xf1\\\\xfa~t\\\\xe9s\\\,h:\\\\\\\xe1~\\\\xf1 h\\\\xf3~\\\\xfar\\\,hh:\\\%d h~\\\\xf3\\\\xfars\\\,d:\\\\\\\xe1 ~d\\\\xe1\\\\xfd\\\,dd:\\\%d d~\\\\xe1\\\\xfds\\\,M:\\\\\\\xe1 ~m\\\\xf3\\\\xf1~th\\\,MM:\\\%d m~\\\\xf3\\\\xf1t~hs\\\,y:\\\\\\\xe1 ~\\\\xfd\\\\xe9\\\\xe1r\\\,yy:\\\%d \\\\xfd~\\\\xe9\\\\xe1rs\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var ae%10;return e+(1~~(e%100/10)?\\\th\\\:1a?\\\st\\\:2a?\\\nd\\\:3a?\\\rd\\\:\\\th\\\)},week:{dow:1,doy:4}}),l.defineLocale(\\\yo\\\,{months:\\\S\\\\u1eb9\\\\u0301r\\\\u1eb9\\\\u0301_E\\\\u0300re\\\\u0300le\\\\u0300_\\\\u1eb8r\\\\u1eb9\\\\u0300na\\\\u0300_I\\\\u0300gbe\\\\u0301_E\\\\u0300bibi_O\\\\u0300ku\\\\u0300du_Ag\\\\u1eb9mo_O\\\\u0300gu\\\\u0301n_Owewe_\\\\u1ecc\\\\u0300wa\\\\u0300ra\\\\u0300_Be\\\\u0301lu\\\\u0301_\\\\u1ecc\\\\u0300p\\\\u1eb9\\\\u0300\\\\u0300\\\.split(\\\_\\\),monthsShort:\\\S\\\\u1eb9\\\\u0301r_E\\\\u0300rl_\\\\u1eb8rn_I\\\\u0300gb_E\\\\u0300bi_O\\\\u0300ku\\\\u0300_Ag\\\\u1eb9_O\\\\u0300gu\\\\u0301_Owe_\\\\u1ecc\\\\u0300wa\\\\u0300_Be\\\\u0301l_\\\\u1ecc\\\\u0300p\\\\u1eb9\\\\u0300\\\\u0300\\\.split(\\\_\\\),weekdays:\\\A\\\\u0300i\\\\u0300ku\\\\u0301_Aje\\\\u0301_I\\\\u0300s\\\\u1eb9\\\\u0301gun_\\\\u1eccj\\\\u1ecd\\\\u0301ru\\\\u0301_\\\\u1eccj\\\\u1ecd\\\\u0301b\\\\u1ecd_\\\\u1eb8ti\\\\u0300_A\\\\u0300ba\\\\u0301m\\\\u1eb9\\\\u0301ta\\\.split(\\\_\\\),weekdaysShort:\\\A\\\\u0300i\\\\u0300k_Aje\\\\u0301_I\\\\u0300s\\\\u1eb9\\\\u0301_\\\\u1eccjr_\\\\u1eccjb_\\\\u1eb8ti\\\\u0300_A\\\\u0300ba\\\\u0301\\\.split(\\\_\\\),weekdaysMin:\\\A\\\\u0300i\\\\u0300_Aj_I\\\\u0300s_\\\\u1eccr_\\\\u1eccb_\\\\u1eb8t_A\\\\u0300b\\\.split(\\\_\\\),longDateFormat:{LT:\\\h:mm A\\\,LTS:\\\h:mm:ss A\\\,L:\\\DD/MM/YYYY\\\,LL:\\\D MMMM YYYY\\\,LLL:\\\D MMMM YYYY h:mm A\\\,LLLL:\\\dddd, D MMMM YYYY h:mm A\\\},calendar:{sameDay:\\\O\\\\u0300ni\\\\u0300 ni LT\\\,nextDay:\\\\\\\u1ecc\\\\u0300la ni LT\\\,nextWeek:\\\dddd \\\\u1eccs\\\\u1eb9\\\\u0300 to\\\\u0301nb\\\\u1ecd ni LT\\\,lastDay:\\\A\\\\u0300na ni LT\\\,lastWeek:\\\dddd \\\\u1eccs\\\\u1eb9\\\\u0300 to\\\\u0301l\\\\u1ecd\\\\u0301 ni LT\\\,sameElse:\\\L\\\},relativeTime:{future:\\\ni\\\\u0301 %s\\\,past:\\\%s k\\\\u1ecdja\\\\u0301\\\,s:\\\i\\\\u0300s\\\\u1eb9ju\\\\u0301 aaya\\\\u0301 die\\\,ss:\\\aaya\\\\u0301 %d\\\,m:\\\i\\\\u0300s\\\\u1eb9ju\\\\u0301 kan\\\,mm:\\\i\\\\u0300s\\\\u1eb9ju\\\\u0301 %d\\\,h:\\\wa\\\\u0301kati kan\\\,hh:\\\wa\\\\u0301kati %d\\\,d:\\\\\\\u1ecdj\\\\u1ecd\\\\u0301 kan\\\,dd:\\\\\\\u1ecdj\\\\u1ecd\\\\u0301 %d\\\,M:\\\osu\\\\u0300 kan\\\,MM:\\\osu\\\\u0300 %d\\\,y:\\\\\\\u1ecddu\\\\u0301n kan\\\,yy:\\\\\\\u1ecddu\\\\u0301n %d\\\},dayOfMonthOrdinalParse:/\\\\u1ecdj\\\\u1ecd\\\\u0301\\\\s\\\\d{1,2}/,ordinal:\\\\\\\u1ecdj\\\\u1ecd\\\\u0301 %d\\\,week:{dow:1,doy:4}}),l.defineLocale(\\\zh-cn\\\,{months:\\\\\\\u4e00\\\\u6708_\\\\u4e8c\\\\u6708_\\\\u4e09\\\\u6708_\\\\u56db\\\\u6708_\\\\u4e94\\\\u6708_\\\\u516d\\\\u6708_\\\\u4e03\\\\u6708_\\\\u516b\\\\u6708_\\\\u4e5d\\\\u6708_\\\\u5341\\\\u6708_\\\\u5341\\\\u4e00\\\\u6708_\\\\u5341\\\\u4e8c\\\\u6708\\\.split(\\\_\\\),monthsShort:\\\1\\\\u6708_2\\\\u6708_3\\\\u6708_4\\\\u6708_5\\\\u6708_6\\\\u6708_7\\\\u6708_8\\\\u6708_9\\\\u6708_10\\\\u6708_11\\\\u6708_12\\\\u6708\\\.split(\\\_\\\),weekdays:\\\\\\\u661f\\\\u671f\\\\u65e5_\\\\u661f\\\\u671f\\\\u4e00_\\\\u661f\\\\u671f\\\\u4e8c_\\\\u661f\\\\u671f\\\\u4e09_\\\\u661f\\\\u671f\\\\u56db_\\\\u661f\\\\u671f\\\\u4e94_\\\\u661f\\\\u671f\\\\u516d\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u5468\\\\u65e5_\\\\u5468\\\\u4e00_\\\\u5468\\\\u4e8c_\\\\u5468\\\\u4e09_\\\\u5468\\\\u56db_\\\\u5468\\\\u4e94_\\\\u5468\\\\u516d\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u65e5_\\\\u4e00_\\\\u4e8c_\\\\u4e09_\\\\u56db_\\\\u4e94_\\\\u516d\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY/MM/DD\\\,LL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,LLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5Ah\\\\u70b9mm\\\\u5206\\\,LLLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5ddddAh\\\\u70b9mm\\\\u5206\\\,l:\\\YYYY/M/D\\\,ll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,lll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,llll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5dddd HH:mm\\\},meridiemParse:/\\\\u51cc\\\\u6668|\\\\u65e9\\\\u4e0a|\\\\u4e0a\\\\u5348|\\\\u4e2d\\\\u5348|\\\\u4e0b\\\\u5348|\\\\u665a\\\\u4e0a/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u51cc\\\\u6668\\\a||\\\\\\\u65e9\\\\u4e0a\\\a||\\\\\\\u4e0a\\\\u5348\\\a?e:\\\\\\\u4e0b\\\\u5348\\\a||\\\\\\\u665a\\\\u4e0a\\\a?e+12:11\u003Ce?e:e+12},meridiem:function(e,a,t){var s100*e+a;return s\u003C600?\\\\\\\u51cc\\\\u6668\\\:s\u003C900?\\\\\\\u65e9\\\\u4e0a\\\:s\u003C1130?\\\\\\\u4e0a\\\\u5348\\\:s\u003C1230?\\\\\\\u4e2d\\\\u5348\\\:s\u003C1800?\\\\\\\u4e0b\\\\u5348\\\:\\\\\\\u665a\\\\u4e0a\\\},calendar:{sameDay:\\\\\\\u4eca\\\\u5929LT\\\,nextDay:\\\\\\\u660e\\\\u5929LT\\\,nextWeek:\\\\\\\u4e0bddddLT\\\,lastDay:\\\\\\\u6628\\\\u5929LT\\\,lastWeek:\\\\\\\u4e0addddLT\\\,sameElse:\\\L\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(\\\\u65e5|\\\\u6708|\\\\u5468)/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\\\\\u65e5\\\;case\\\M\\\:return e+\\\\\\\u6708\\\;case\\\w\\\:case\\\W\\\:return e+\\\\\\\u5468\\\;default:return e}},relativeTime:{future:\\\%s\\\\u5185\\\,past:\\\%s\\\\u524d\\\,s:\\\\\\\u51e0\\\\u79d2\\\,ss:\\\%d \\\\u79d2\\\,m:\\\1 \\\\u5206\\\\u949f\\\,mm:\\\%d \\\\u5206\\\\u949f\\\,h:\\\1 \\\\u5c0f\\\\u65f6\\\,hh:\\\%d \\\\u5c0f\\\\u65f6\\\,d:\\\1 \\\\u5929\\\,dd:\\\%d \\\\u5929\\\,M:\\\1 \\\\u4e2a\\\\u6708\\\,MM:\\\%d \\\\u4e2a\\\\u6708\\\,y:\\\1 \\\\u5e74\\\,yy:\\\%d \\\\u5e74\\\},week:{dow:1,doy:4}}),l.defineLocale(\\\zh-hk\\\,{months:\\\\\\\u4e00\\\\u6708_\\\\u4e8c\\\\u6708_\\\\u4e09\\\\u6708_\\\\u56db\\\\u6708_\\\\u4e94\\\\u6708_\\\\u516d\\\\u6708_\\\\u4e03\\\\u6708_\\\\u516b\\\\u6708_\\\\u4e5d\\\\u6708_\\\\u5341\\\\u6708_\\\\u5341\\\\u4e00\\\\u6708_\\\\u5341\\\\u4e8c\\\\u6708\\\.split(\\\_\\\),monthsShort:\\\1\\\\u6708_2\\\\u6708_3\\\\u6708_4\\\\u6708_5\\\\u6708_6\\\\u6708_7\\\\u6708_8\\\\u6708_9\\\\u6708_10\\\\u6708_11\\\\u6708_12\\\\u6708\\\.split(\\\_\\\),weekdays:\\\\\\\u661f\\\\u671f\\\\u65e5_\\\\u661f\\\\u671f\\\\u4e00_\\\\u661f\\\\u671f\\\\u4e8c_\\\\u661f\\\\u671f\\\\u4e09_\\\\u661f\\\\u671f\\\\u56db_\\\\u661f\\\\u671f\\\\u4e94_\\\\u661f\\\\u671f\\\\u516d\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u9031\\\\u65e5_\\\\u9031\\\\u4e00_\\\\u9031\\\\u4e8c_\\\\u9031\\\\u4e09_\\\\u9031\\\\u56db_\\\\u9031\\\\u4e94_\\\\u9031\\\\u516d\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u65e5_\\\\u4e00_\\\\u4e8c_\\\\u4e09_\\\\u56db_\\\\u4e94_\\\\u516d\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY/MM/DD\\\,LL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,LLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,LLLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5dddd HH:mm\\\,l:\\\YYYY/M/D\\\,ll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,lll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,llll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5dddd HH:mm\\\},meridiemParse:/\\\\u51cc\\\\u6668|\\\\u65e9\\\\u4e0a|\\\\u4e0a\\\\u5348|\\\\u4e2d\\\\u5348|\\\\u4e0b\\\\u5348|\\\\u665a\\\\u4e0a/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u51cc\\\\u6668\\\a||\\\\\\\u65e9\\\\u4e0a\\\a||\\\\\\\u4e0a\\\\u5348\\\a?e:\\\\\\\u4e2d\\\\u5348\\\a?11\u003Ce?e:e+12:\\\\\\\u4e0b\\\\u5348\\\a||\\\\\\\u665a\\\\u4e0a\\\a?e+12:void 0},meridiem:function(e,a,t){var s100*e+a;return s\u003C600?\\\\\\\u51cc\\\\u6668\\\:s\u003C900?\\\\\\\u65e9\\\\u4e0a\\\:s\u003C1130?\\\\\\\u4e0a\\\\u5348\\\:s\u003C1230?\\\\\\\u4e2d\\\\u5348\\\:s\u003C1800?\\\\\\\u4e0b\\\\u5348\\\:\\\\\\\u665a\\\\u4e0a\\\},calendar:{sameDay:\\\\\\\u4eca\\\\u5929LT\\\,nextDay:\\\\\\\u660e\\\\u5929LT\\\,nextWeek:\\\\\\\u4e0bddddLT\\\,lastDay:\\\\\\\u6628\\\\u5929LT\\\,lastWeek:\\\\\\\u4e0addddLT\\\,sameElse:\\\L\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(\\\\u65e5|\\\\u6708|\\\\u9031)/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\\\\\u65e5\\\;case\\\M\\\:return e+\\\\\\\u6708\\\;case\\\w\\\:case\\\W\\\:return e+\\\\\\\u9031\\\;default:return e}},relativeTime:{future:\\\%s\\\\u5167\\\,past:\\\%s\\\\u524d\\\,s:\\\\\\\u5e7e\\\\u79d2\\\,ss:\\\%d \\\\u79d2\\\,m:\\\1 \\\\u5206\\\\u9418\\\,mm:\\\%d \\\\u5206\\\\u9418\\\,h:\\\1 \\\\u5c0f\\\\u6642\\\,hh:\\\%d \\\\u5c0f\\\\u6642\\\,d:\\\1 \\\\u5929\\\,dd:\\\%d \\\\u5929\\\,M:\\\1 \\\\u500b\\\\u6708\\\,MM:\\\%d \\\\u500b\\\\u6708\\\,y:\\\1 \\\\u5e74\\\,yy:\\\%d \\\\u5e74\\\}}),l.defineLocale(\\\zh-tw\\\,{months:\\\\\\\u4e00\\\\u6708_\\\\u4e8c\\\\u6708_\\\\u4e09\\\\u6708_\\\\u56db\\\\u6708_\\\\u4e94\\\\u6708_\\\\u516d\\\\u6708_\\\\u4e03\\\\u6708_\\\\u516b\\\\u6708_\\\\u4e5d\\\\u6708_\\\\u5341\\\\u6708_\\\\u5341\\\\u4e00\\\\u6708_\\\\u5341\\\\u4e8c\\\\u6708\\\.split(\\\_\\\),monthsShort:\\\1\\\\u6708_2\\\\u6708_3\\\\u6708_4\\\\u6708_5\\\\u6708_6\\\\u6708_7\\\\u6708_8\\\\u6708_9\\\\u6708_10\\\\u6708_11\\\\u6708_12\\\\u6708\\\.split(\\\_\\\),weekdays:\\\\\\\u661f\\\\u671f\\\\u65e5_\\\\u661f\\\\u671f\\\\u4e00_\\\\u661f\\\\u671f\\\\u4e8c_\\\\u661f\\\\u671f\\\\u4e09_\\\\u661f\\\\u671f\\\\u56db_\\\\u661f\\\\u671f\\\\u4e94_\\\\u661f\\\\u671f\\\\u516d\\\.split(\\\_\\\),weekdaysShort:\\\\\\\u9031\\\\u65e5_\\\\u9031\\\\u4e00_\\\\u9031\\\\u4e8c_\\\\u9031\\\\u4e09_\\\\u9031\\\\u56db_\\\\u9031\\\\u4e94_\\\\u9031\\\\u516d\\\.split(\\\_\\\),weekdaysMin:\\\\\\\u65e5_\\\\u4e00_\\\\u4e8c_\\\\u4e09_\\\\u56db_\\\\u4e94_\\\\u516d\\\.split(\\\_\\\),longDateFormat:{LT:\\\HH:mm\\\,LTS:\\\HH:mm:ss\\\,L:\\\YYYY/MM/DD\\\,LL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,LLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,LLLL:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5dddd HH:mm\\\,l:\\\YYYY/M/D\\\,ll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5\\\,lll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5 HH:mm\\\,llll:\\\YYYY\\\\u5e74M\\\\u6708D\\\\u65e5dddd HH:mm\\\},meridiemParse:/\\\\u51cc\\\\u6668|\\\\u65e9\\\\u4e0a|\\\\u4e0a\\\\u5348|\\\\u4e2d\\\\u5348|\\\\u4e0b\\\\u5348|\\\\u665a\\\\u4e0a/,meridiemHour:function(e,a){return 12e&&(e0),\\\\\\\u51cc\\\\u6668\\\a||\\\\\\\u65e9\\\\u4e0a\\\a||\\\\\\\u4e0a\\\\u5348\\\a?e:\\\\\\\u4e2d\\\\u5348\\\a?11\u003Ce?e:e+12:\\\\\\\u4e0b\\\\u5348\\\a||\\\\\\\u665a\\\\u4e0a\\\a?e+12:void 0},meridiem:function(e,a,t){var s100*e+a;return s\u003C600?\\\\\\\u51cc\\\\u6668\\\:s\u003C900?\\\\\\\u65e9\\\\u4e0a\\\:s\u003C1130?\\\\\\\u4e0a\\\\u5348\\\:s\u003C1230?\\\\\\\u4e2d\\\\u5348\\\:s\u003C1800?\\\\\\\u4e0b\\\\u5348\\\:\\\\\\\u665a\\\\u4e0a\\\},calendar:{sameDay:\\\\\\\u4eca\\\\u5929 LT\\\,nextDay:\\\\\\\u660e\\\\u5929 LT\\\,nextWeek:\\\\\\\u4e0bdddd LT\\\,lastDay:\\\\\\\u6628\\\\u5929 LT\\\,lastWeek:\\\\\\\u4e0adddd LT\\\,sameElse:\\\L\\\},dayOfMonthOrdinalParse:/\\\\d{1,2}(\\\\u65e5|\\\\u6708|\\\\u9031)/,ordinal:function(e,a){switch(a){case\\\d\\\:case\\\D\\\:case\\\DDD\\\:return e+\\\\\\\u65e5\\\;case\\\M\\\:return e+\\\\\\\u6708\\\;case\\\w\\\:case\\\W\\\:return e+\\\\\\\u9031\\\;default:return e}},relativeTime:{future:\\\%s\\\\u5167\\\,past:\\\%s\\\\u524d\\\,s:\\\\\\\u5e7e\\\\u79d2\\\,ss:\\\%d \\\\u79d2\\\,m:\\\1 \\\\u5206\\\\u9418\\\,mm:\\\%d \\\\u5206\\\\u9418\\\,h:\\\1 \\\\u5c0f\\\\u6642\\\,hh:\\\%d \\\\u5c0f\\\\u6642\\\,d:\\\1 \\\\u5929\\\,dd:\\\%d \\\\u5929\\\,M:\\\1 \\\\u500b\\\\u6708\\\,MM:\\\%d \\\\u500b\\\\u6708\\\,y:\\\1 \\\\u5e74\\\,yy:\\\%d \\\\u5e74\\\}}),l.locale(\\\en\\\),l});\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/kixam/moment/readme\:{\title\:\$:/plugins/kixam/moment/readme\,\text\:\! moment.js\\n\\nA plugin for TiddlyWiki|http://tiddlywiki.com 5, that provides the moment.js library|http://momentjs.com.\\n\}}}},{title:$:/plugins/kookma/refnotes/styles/footnote-counter,text:/*automatic counter for fnote macro. The counter resets at the begining of each tiddler*/\n.tc-tiddler-frame {\n counter-reset: fnote-count;\n}\n.refnotes-footnote {\n counter-increment: fnote-count;\n}\n.refnotes-footnote:after {\n content: counter(fnote-count);\n font-size:small;\n /* color:#0000ee;*/\n vertical-align: super;\n\tline-height: 1;\n /*line-height: 1.5;*/\n margin-left: -0.1em;\n}\n,created:20181214085707714,modified:20210710124941724,tags:$:/tags/Stylesheet,type:text/css},{author:Matthew Lauber,core-version:>5.0.0,created:20210105134918257,dependents:,description:A Shuffle filter operator,list:readme,modified:20211107172616237,plugin-type:plugin,source:https://github.com/mklauber/tiddly-shuffle,title:$:/plugins/mklauber/shuffle,version:1.0.2,type:application/json,text:{\tiddlers\:{\$:/plugins/mklauber/shuffle/readme\:{\title\:\$:/plugins/mklauber/shuffle/readme\,\caption\:\Shuffle Operator\,\text\:\|!purpose|Randomize the order of the input list|\\n|!input|a selection of titles|\\n|!parameter|a random string to be used to create consistent random ordering|\\n|!output|The input titles, rearranged in a random order|\\n\\nThis plugin implements a new filter operator called Shuffle. This operator takes the input list and randomizes the order of the list. If no parameter is provided, the list order is random every time.\\n\\n!!!Example:\\n```\\n\u003C$list filter\\\1 2 3 4 5 +shuffle\\\>\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button popup\\\$:/state/shuffle/reveal1\\\>Run Demo\u003C/$button>\\n\\n\u003C$reveal type\\\popup\\\ state\\\$:/state/shuffle/reveal1\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n\u003C$list filter\\\1 2 3 4 5 +shuffle\\\>\\n\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\\nCombining this operator with the first operator allows you to choose 1 or more titles randomly from a list.\\n\\n!!!Example:\\n```\\n\u003C$list filter\\\1 2 3 4 5 +shufflefirst2\\\>\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button popup\\\$:/state/shuffle/reveal2\\\>Run Demo\u003C/$button>\\n\\n\u003C$reveal type\\\popup\\\ state\\\$:/state/shuffle/reveal2\\\>\\n\u003Cdiv class\\\tc-drop-down\\\>\\n\u003C$list filter\\\1 2 3 4 5 +shufflefirst2\\\>\\n\\n\u003C/$list>\\n\u003C/div>\\n\u003C/$reveal>\\n\\nIf a parameter is provided the list will be ordered identically every time it is rendered. This can be useful in conjunction a button that updates a state tiddler. Set the parameter of this operator to reference that state tiddler, and create a button that updates that tiddler, and now the ordering of the random operators only changes when the button is pressed.\\n\\n!!!Example:\\n```\\n\u003C$button>\\n\u003C$action-setfield $tiddler\\\$:/temp/shuffle/example\\\ $field\\\state\\\ $value\u003C\u003Cnow \\\0hh:0mm:0ss\\\>>/>\\nChange Order\\n\u003C/$button>\\n\\n\u003C$list filter\\\1 2 3 4 5 +shuffle{$:/temp/shuffle/example!!state}\\\>\\n\\n\u003C/$list>\\n```\\n\\n\u003C$button>\\n\u003C$action-setfield $tiddler\\\$:/temp/shuffle/example\\\ $field\\\state\\\ $value\u003C\u003Cnow \\\0hh:0mm:0ss\\\>>/>\\nUpdate\\n\u003C/$button>\\n\\n\u003C$list filter\\\1 2 3 4 5 +shuffle{$:/temp/shuffle/example!!state}\\\>\\n\\n\u003C/$list>\\n\},\$:/plugins/mklauber/shuffle/seedrandom.js\:{\title\:\$:/plugins/mklauber/shuffle/seedrandom.js\,\text\:\!function(a,b){function c(c,j,k){var n;j1j?{entropy:!0}:j||{};var sg(f(j.entropy?c,i(a):nullc?h():c,3),n),tnew d(n),ufunction(){for(var at.g(m),bp,c0;a\u003Cq;)a(a+c)*l,b*l,ct.g(1);for(;a>r;)a/2,b/2,c>>>1;return(a+c)/b};return u.int32function(){return 0|t.g(4)},u.quickfunction(){return t.g(4)/4294967296},u.doubleu,g(i(t.S),a),(j.pass||k||function(a,c,d,f){return f&&(f.S&&e(f,t),a.statefunction(){return e(t,{})}),d?(boa,c):a})(u,s,\\\global\\\in j?j.global:thisb,j.state)}function d(a){var b,ca.length,dthis,e0,fd.id.j0,gd.S;for(c||(ac++);e\u003Cl;)gee++;for(e0;e\u003Cl;e++)gegfs&f+ae%c+(bge),gfb;(d.gfunction(a){for(var b,c0,ed.i,fd.j,gd.S;a--;)bges&e+1,cc*l+gs&(gegfs&f+b)+(gfb);return d.ie,d.jf,c})(l)}function e(a,b){return b.ia.i,b.ja.j,b.Sa.S.slice(),b}function f(a,b){var c,d,etypeof a;if(b&&\\\object\\\e)for(c in a)try{d.push(f(ac,b-1))}catch(a){}return d.length?d:\\\string\\\e?a:a+\\\\\\\0\\\}function g(a,b){for(var c,da+\\\\\\,e0;e\u003Cd.length;)bs&es&(c^19*bs&e)+d.charCodeAt(e++);return i(b)}function h(){try{var b;return j&&(bj.randomBytes)?bb(l):(bnew Uint8Array(l),(k.crypto||k.msCrypto).getRandomValues(b)),i(b)}catch(b){var ck.navigator,dc&&c.plugins;return+new Date,k,d,k.screen,i(a)}}function i(a){return String.fromCharCode.apply(0,a)}var j,kthis,l256,m6,n52,o\\\random\\\,pb.pow(l,m),qb.pow(2,n),r2*q,sl-1;if(b\\\seed\\\+oc,g(b.random(),a),\\\object\\\typeof module&&module.exports){module.exportsc;try{jrequire(\\\crypto\\\)}catch(a){}}else\\\function\\\typeof define&&define.amd&&define(function(){return c})}(,Math);\,\created\:\20180220123939614\,\modified\:\20180220125617309\,\module-type\:\library\,\tags\:\\,\type\:\application/javascript\},\$:/plugins/mklauber/shuffle/shuffle.js\:{\title\:\$:/plugins/mklauber/shuffle/shuffle.js\,\text\:\(function(){\\n\\n \\\use strict\\\;\\n\\n var hash function(str) {\\n var hash 0, i, chr, len;\\n if (str.length 0) return hash;\\n for (i 0, len str.length; i \u003C len; i++) {\\n chr str.charCodeAt(i);\\n hash ((hash \u003C\u003C 5) - hash) + chr;\\n hash | 0; // Convert to 32bit integer\\n }\\n return hash;\\n }\\n\\n var shuffle function(array, seed) {\\n var currentIndex array.length, temporaryValue, randomIndex ;\\n Math.seedrandom(seed)\\n\\n // While there remain elements to shuffle...\\n while (0 ! currentIndex) {\\n\\n // Pick a remaining element...\\n randomIndex Math.floor(Math.random() * currentIndex);\\n currentIndex - 1;\\n\\n // And swap it with the current element.\\n temporaryValue arraycurrentIndex;\\n arraycurrentIndex arrayrandomIndex;\\n arrayrandomIndex temporaryValue;\\n }\\n\\n return array;\\n }\\n\\n var prepare_results function (source) {\\n\\t var results ;\\n\\t source(function(tiddler,title) {\\n\\t\\t results.push(title);\\n\\t });\\n\\t return results;\\n };\\n\\n exports.shuffle function(source, operator, options) {\\n var results prepare_results(source);\\n if (operatoroperand \\\\\\) {\\n shuffle(results);\\n } else {\\n shuffle(results, hash(operatoroperand));\\n }\\n return results;\\n }\\n})();\\n\,\caption\:\A filter Operator to randomize the order of the list passed to it.\,\created\:\20150811171933696\,\modified\:\20180220125039203\,\module-type\:\filteroperator\,\type\:\application/javascript\},\$:/plugins/mklauber/shuffle/startup.js\:{\title\:\$:/plugins/mklauber/shuffle/startup.js\,\text\:\exports.name \\\shuffle\\\\\nexports.before \\\render\\\\\nexports.startup function() {\\n $tw.modules.execute($:/plugins/mklauber/shuffle/seedrandom.js);\\n}\\n\,\created\:\20180220133753576\,\modified\:\20180220133920300\,\module-type\:\startup\,\tags\:\\,\type\:\application/javascript\}}}},{title:$:/plugins/sobjornstad/TiddlyRemember,description:TiddlyRemember: Embed Anki notes in your TiddlyWiki,author:Soren Bjornstad,version:1.4.1,core-version:>5.1.21,source:https://github.com/sobjornstad/TiddlyRemember,list:readme license,dependents:,plugin-type:plugin,type:application/json,text:{\tiddlers\:{\$:/config/ShortcutInfo/remembercz\:{\title\:\$:/config/ShortcutInfo/remembercz\,\created\:\20200926193600000\,\modified\:\20200926193600000\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Create a new `remembercz` macro snippet\},\$:/config/ShortcutInfo/rememberq\:{\title\:\$:/config/ShortcutInfo/rememberq\,\created\:\20200926193600000\,\modified\:\20200926193600000\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Create a new `rememberq` macro snippet\},\$:/config/TiddlyRemember/DeckMapping\:{\title\:\$:/config/TiddlyRemember/DeckMapping\,\created\:\20200516223625569\,\modified\:\20200516223658777\,\tags\:\\},\$:/config/TiddlyRemember/DefaultClasses\:{\title\:\$:/config/TiddlyRemember/DefaultClasses\,\created\:\20210925145600000\,\modified\:\20210925145600000\,\tags\:\\,\type\:\text/vnd.tiddlywiki\},\$:/config/TiddlyRemember/IdPrefix\:{\title\:\$:/config/TiddlyRemember/IdPrefix\,\created\:\20200516223625569\,\modified\:\20200516223658777\,\tags\:\\},\$:/config/TiddlyRemember/TagMapping\:{\title\:\$:/config/TiddlyRemember/TagMapping\,\created\:\20200516190911842\,\modified\:\20200516223231730\,\tags\:\\},\$:/config/TiddlyRemember/snippets/remembercz\:{\title\:\$:/config/TiddlyRemember/snippets/remembercz\,\created\:\20210929144900000\,\modified\:\20210929144900000\,\tags\:\\,\text\:\\u003C\u003Cremembercz \\\%NOTE_ID%\\\\\n\\t\\\Cloze\\\>>\},\$:/config/TiddlyRemember/snippets/rememberq\:{\title\:\$:/config/TiddlyRemember/snippets/rememberq\,\created\:\20210929144900000\,\modified\:\20210929144900000\,\tags\:\\,\text\:\\u003C\u003Crememberq \\\%NOTE_ID%\\\\\n\\t\\\Q\\\\\n\\t\\\A\\\>>\},\$:/config/shortcuts/remembercz\:{\title\:\$:/config/shortcuts/remembercz\,\created\:\20200926193600000\,\modified\:\20200926193600000\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\alt-shift-R\},\$:/config/shortcuts/rememberq\:{\title\:\$:/config/shortcuts/rememberq\,\created\:\20200926193600000\,\modified\:\20200926193600000\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\alt-R\},\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg\,\text\:\\u003C?xml version\\\1.0\\\ encoding\\\utf-8\\\?>\\n\u003Csvg width\\\18px\\\ height\\\18px\\\ viewBox\\\0 0 1792 1792\\\ xmlns\\\http://www.w3.org/2000/svg\\\>\u003Cpath d\\\M1120 576q0 13-9.5 22.5t-22.5 9.5-22.5-9.5-9.5-22.5q0-46-54-71t-106-25q-13 0-22.5-9.5t-9.5-22.5 9.5-22.5 22.5-9.5q50 0 99.5 16t87 54 37.5 90zm160 0q0-72-34.5-134t-90-101.5-123-62-136.5-22.5-136.5 22.5-123 62-90 101.5-34.5 134q0 101 68 180 10 11 30.5 33t30.5 33q128 153 141 298h228q13-145 141-298 10-11 30.5-33t30.5-33q68-79 68-180zm128 0q0 155-103 268-45 49-74.5 87t-59.5 95.5-34 107.5q47 28 47 82 0 37-25 64 25 27 25 64 0 52-45 81 13 23 13 47 0 46-31.5 71t-77.5 25q-20 44-60 70t-87 26-87-26-60-70q-46 0-77.5-25t-31.5-71q0-24 13-47-45-29-45-81 0-37 25-64-25-27-25-64 0-54 47-82-4-50-34-107.5t-59.5-95.5-74.5-87q-103-113-103-268 0-99 44.5-184.5t117-142 164-89 186.5-32.5 186.5 32.5 164 89 117 142 44.5 184.5z\\\/>\u003C/svg>\\n\u003C!-- Source: FontAwesome -->\,\type\:\image/svg+xml\,\created\:\20200517161140014\,\modified\:\20200517161732249\},\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-white.svg\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-white.svg\,\text\:\\u003C?xml version\\\1.0\\\ encoding\\\utf-8\\\?>\\n\u003Csvg width\\\18px\\\ height\\\18px\\\ viewBox\\\0 0 1792 1792\\\ xmlns\\\http://www.w3.org/2000/svg\\\>\u003Cpath d\\\M1120 576q0 13-9.5 22.5t-22.5 9.5-22.5-9.5-9.5-22.5q0-46-54-71t-106-25q-13 0-22.5-9.5t-9.5-22.5 9.5-22.5 22.5-9.5q50 0 99.5 16t87 54 37.5 90zm160 0q0-72-34.5-134t-90-101.5-123-62-136.5-22.5-136.5 22.5-123 62-90 101.5-34.5 134q0 101 68 180 10 11 30.5 33t30.5 33q128 153 141 298h228q13-145 141-298 10-11 30.5-33t30.5-33q68-79 68-180zm128 0q0 155-103 268-45 49-74.5 87t-59.5 95.5-34 107.5q47 28 47 82 0 37-25 64 25 27 25 64 0 52-45 81 13 23 13 47 0 46-31.5 71t-77.5 25q-20 44-60 70t-87 26-87-26-60-70q-46 0-77.5-25t-31.5-71q0-24 13-47-45-29-45-81 0-37 25-64-25-27-25-64 0-54 47-82-4-50-34-107.5t-59.5-95.5-74.5-87q-103-113-103-268 0-99 44.5-184.5t117-142 164-89 186.5-32.5 186.5 32.5 164 89 117 142 44.5 184.5z\\\ fill\\\#fff\\\/>\u003C/svg>\\n\u003C!-- Source: FontAwesome -->\,\type\:\image/svg+xml\,\created\:\20200517161252694\,\modified\:\20200517161645377\},\$:/plugins/sobjornstad/TiddlyRemember/license\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/license\,\text\:\The MIT License (MIT)\\n\\nCopyright (c) 2020-2025 Soren Bjornstad and the TiddlyRemember community.\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\Software\\\), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\nSOFTWARE.\\n\,\type\:\text/plain\},\$:/plugins/sobjornstad/TiddlyRemember/macros/insert-snippet\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/macros/insert-snippet\,\created\:\20210929144300000\,\modified\:\20210929144300000\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define tr-insert-note(snippet)\\n\\t\u003C$vars\\n\\t\\tthetime\u003C\u003Cnow \\\UTCYYYY0MM0DD0hh0mm0ss0XXX\\\>>\\n\\t\\ttheprefix{{$:/config/TiddlyRemember/IdPrefix}}>\\n\\t\u003C$vars\\n\\t\\tnoteid{{{ \u003Ctheprefix>addsuffix\u003Cthetime> }}}\\n\\t\\teditingtid{{{ \u003CstoryTiddler>getdraft.of }}}>\\n\\t\\t\u003C$action-sendmessage\\n\\t\\t\\t$message\\\tm-edit-text-operation\\\\\n\\t\\t\\t$param\\\replace-selection\\\\\n\\t\\t\\ttext{{{ \u003C__snippet__>search-replace%NOTE_ID%,\u003Cnoteid>search-replace%EDITING_TIDDLER%,\u003Ceditingtid> }}}/>\\n\\t\u003C/$vars>\\n\\t\u003C/$vars>\\n\\\\end\\n\},\$:/plugins/sobjornstad/TiddlyRemember/macros/remember\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/macros/remember\,\created\:\20200510004110231\,\modified\:\20200925141800000\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define rememberq(id, question, answer, reference: \\\\\\, sched: \\\\\\, class:\\\\\\, deck:\\\\\\, tags:\\\\\\)\\n \u003Cdiv class{{{ rememberq remembertwo addsuffix\u003C__class__>addsuffix addsuffix{$:/config/TiddlyRemember/DefaultClasses} }}}>\\n \u003Cdiv class\\\rquestion tr-ritem\\\>\\n \u003Cdiv>Q:\u003C/div>\\n \u003Cp>$question$\u003C/p>\\n \u003C/div>\\n \u003Cdiv class\\\ranswer tr-ritem\\\>\\n \u003Cdiv>A:\u003C/div>\\n \u003Cp>$answer$\u003C/p>\\n \u003C/div>\\n\\t\\t\u003C$macrocall $nametwRememberMetadata id\u003C\u003C__id__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>> deck\u003C\u003C__deck__>> tags\u003C\u003C__tags__>>/>\\n \u003C/div>\\n\\\\end\\n\\n\\\\define rememberp(id, first, second, reference: \\\\\\, sched: \\\\\\, class: \\\\\\, deck:\\\\\\, tags:\\\\\\)\\n \u003Cdiv class{{{ rememberp remembertwo addsuffix\u003C__class__>addsuffix addsuffix{$:/config/TiddlyRemember/DefaultClasses} }}}>\\n \u003Cdiv class\\\rfirst tr-ritem\\\>\\n \u003Cdiv>1:\u003C/div>\\n \u003Cp>$first$\u003C/p>\\n \u003C/div>\\n \u003Cdiv class\\\rsecond tr-ritem\\\>\\n \u003Cdiv>2:\u003C/div>\\n \u003Cp>$second$\u003C/p>\\n \u003C/div>\\n\\t\\t\u003C$macrocall $nametwRememberMetadata id\u003C\u003C__id__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>> deck\u003C\u003C__deck__>> tags\u003C\u003C__tags__>>/>\\n \u003C/div>\\n\\\\end\\n\\n\\\\define remembercz(id, text, mode: \\\block\\\, reference: \\\\\\, sched: \\\\\\, class: \\\\\\, deck:\\\\\\, tags:\\\\\\)\\n\\t\u003C$list filter\\\$mode$matchinline\\\ variable_>\\n\\t\\t\u003C$macrocall $nametwRememberClozeInline id\u003C\u003C__id__>> text\u003C\u003C__text__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>> class\u003C\u003C__class__>> deck\u003C\u003C__deck__>> tags\u003C\u003C__tags__>>/>\\n\\t\u003C/$list>\\n\\t\u003C$list filter\\\$mode$!matchinline\\\ variable_>\\n\\t\\t\u003C$macrocall $nametwRememberClozeBlock id\u003C\u003C__id__>> text\u003C\u003C__text__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>> class\u003C\u003C__class__>> deck\u003C\u003C__deck__>> tags\u003C\u003C__tags__>>/>\\n\\t\u003C/$list>\\n\\\\end\\n\\n\\\\define twRememberMetadata(id, reference, sched)\\n\\t\u003Cdiv class\\\tr-selfidentification\\\>\\n\\t\\t\u003C$set name\\\selfid\\\ filter\\\\\\\\\enlist$reference$\\\\\\\\\ value\\\\\\\\\\u003C$link to\\\$reference$\\\>$reference$\u003C/$link>: $id$\\\\\\\\\ emptyValue\\\$id$\\\>\\n\\t\\t\\t\u003C\u003Cselfid>>\\n\\t\\t\u003C/$set>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\rid\\\>\\n\\t\\t$id$\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tr-reference\\\>\\n\\t\\t\u003C$text text\u003C\u003C__reference__>>/>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tr-sched\\\>\\n\\t\\t\u003C$text text\u003C\u003C__sched__>>/>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tr-deck\\\>\\n\\t\\t\u003C$text text\u003C\u003C__deck__>>/>\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\tr-tags\\\>\\n\\t\\t\u003C$text text\u003C\u003C__tags__>>/>\\n\\t\u003C/div>\\n\\\\end\\n\\n\\\\define twRememberClozeBlock(id, text, reference, sched, class)\\n \u003Cdiv class{{{ remembercz addsuffix\u003C__class__>addsuffix addsuffix{$:/config/TiddlyRemember/DefaultClasses} }}}>\\n\\t\\t\u003Cspan class\\\cloze-identifier\\\>\u003Cspan class\\\tr-name-cloze\\\>cloze: \u003C/span>\u003C/span>\\n\\t\\t\u003Cspan class\\\cloze-display\\\>\u003C$set name\\\unescape\\\ value{{{ \u003C__text__>search-replace:g\\\\{,{search-replace:g\\\\},} }}}>\u003C\u003Cunescape>>\u003C/$set>\u003C/span>\\n\\t\\t\u003Cspan class\\\cloze-text\\\>$text$\u003C/span>\\n\\t\\t\u003C$macrocall $name\\\twRememberMetadata\\\ id\u003C\u003C__id__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>>/>\\n\\t\u003C/div>\\n\\\\end\\n\\n\\\\define twRememberClozeInline(id, text, reference, sched, class)\\n \u003Cspan class{{{ remembercz addsuffix\u003C__class__>addsuffix addsuffix{$:/config/TiddlyRemember/DefaultClasses} }}}>\\n\\t\\t\u003Cspan class\\\cloze-identifier\\\>{\u003Cspan class\\\tr-name-cloze\\\>cloze: \u003C/span>\u003C/span>\\n\\t\\t\u003Cspan class\\\cloze-display\\\>\u003C$set name\\\unescape\\\ value{{{ \u003C__text__>search-replace:g\\\\{,{search-replace:g\\\\},} }}}>\u003C\u003Cunescape>>\u003C/$set>\u003C/span>\\n\\t\\t\u003Cspan class\\\cloze-identifier\\\>}\u003C/span>\\n\\t\\t\u003Cspan class\\\cloze-text\\\>$text$\u003C/span>\\n\\t\\t\u003C$macrocall $name\\\twRememberMetadata\\\ id\u003C\u003C__id__>> reference\u003C\u003C__reference__>> sched\u003C\u003C__sched__>>/>\\n\\t\u003C/span>\\n\\\\end\},\$:/plugins/sobjornstad/TiddlyRemember/readme\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/readme\,\type\:\text/vnd.tiddlywiki\,\text\:\TiddlyRemember is a tool that integrates TiddlyWiki with Anki.\\nYou can interleave questions with your notes in TiddlyWiki,\\n then sync them into Anki notes with one click.\\nYou can edit and move the questions around your TiddlyWiki,\\n and they will stay connected to the Anki notes.\\nScheduling information in Anki is preserved when editing notes in TiddlyWiki.\\n\\n* Documentation|https://sobjornstad.github.io/TiddlyRemember/\\n* GitHub|https://github.com/sobjornstad/TiddlyRemember\\n\},\$:/plugins/sobjornstad/TiddlyRemember/stylesheets/remember\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/stylesheets/remember\,\created\:\20200510004425508\,\modified\:\20200517155210548\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\div.remembertwo {\\n\\tborder-left: 3px solid \u003C\u003Ccolour tag-background>>;\\n\\tpadding-left: 0.5em;\\n\\tmargin-bottom: 22px; /* line-height of the selfidentification block */\\n}\\n\\ndiv.remembertwo .tr-ritem p {\\n\\tmargin-top: 0px;\\n\\tmargin-bottom: 0px;\\n\\tmargin-left: 2em;\\n}\\n\\ndiv.remembertwo .tr-ritem div {\\n\\tfont-weight: bold;\\n\\tcolor: \u003C\u003Ccolour primary>>;\\n\\tfloat: left;\\n}\\n\\ndiv.remembertwo div.tr-selfidentification {\\n\\tfloat: right;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\ndiv.remembercz {\\n\\tborder-left: 3px solid \u003C\u003Ccolour tag-background>>;\\n\\tpadding-left: 0.5em;\\n\\tline-height: 22px; /* default; setting explicitly */\\n}\\n\\n.remembercz > span.cloze-identifier {\\n\\tcolor: \u003C\u003Ccolour tag-background>>;\\n}\\n\\n.remembercz div.tr-selfidentification {\\n\\tfloat: right;\\n\\tmargin-left: 0.5em;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n\\n/* these separate fields are only read by the TR parser */\\ndiv.remembertwo div.tr-reference, .remembercz div.tr-reference {\\n\\tdisplay: none;\\n}\\n\\ndiv.remembertwo div.rid, .remembercz div.rid {\\n\\tdisplay: none;\\n}\\n\\ndiv.remembertwo div.tr-sched, .remembercz div.tr-sched {\\n\\tdisplay: none;\\n}\\n\\n.remembercz > span.cloze-text {\\n\\tdisplay: none;\\n}\\n\\n\\n/***** Built-in classes for common format customizations; apply to the class: parameter to macros *****/\\n/* Hide the ID field */\\n.tr-hide-id div.tr-selfidentification {\\n\\tdisplay: none;\\n}\\n\\n/* Hide the ID only if its an inline cloze */\\nspan.remembercz.tr-hide-inline-cloze-id div.tr-selfidentification {\\n\\tdisplay: none;\\n}\\n\\n/* Hide the word \\\cloze\\\ on inline clozes */\\nspan.remembercz.tr-hide-inline-cloze-name span.cloze-identifier span.tr-name-cloze {\\n\\tdisplay: none;\\n}\},\$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiDecks\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiDecks\,\created\:\20200516223716380\,\modified\:\20200516232507031\,\revision\:\7\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cul id\\\anki-decks\\\>\\n\\t\u003C$list\\n\\t\\t\\tfilter\\\$:/config/TiddlyRemember/DeckMappinggettextsplitregexp\\\\n!isblank\\\\\n\\t\\t\\tvariable\\\subfilter\\\>\\n\\t\\t\u003C$list filter\\\\u003CcurrentTiddler>subfilter\u003Csubfilter>\\\>\\n\\t\\t\\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list>\\n\u003C/ul>\},\$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiTags\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiTags\,\created\:\20200516191131056\,\modified\:\20200516232427612\,\revision\:\174\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cul id\\\anki-tags\\\>\\n\\t\u003C$list\\n\\t\\t\\tfilter\\\$:/config/TiddlyRemember/TagMappinggettextsplitregexp\\\\n!isblank\\\\\n\\t\\t\\tvariable\\\subfilter\\\>\\n\\t\\t\u003C$list filter\\\\u003CcurrentTiddler>subfilter\u003Csubfilter>\\\>\\n\\t\\t\\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list>\\n\u003C/ul>\},\$:/plugins/sobjornstad/TiddlyRemember/templates/TiddlyRememberParseable\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/templates/TiddlyRememberParseable\,\created\:\20200510211830000\,\modified\:\20200516223853339\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\import $:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of allshadows+tiddlerstag$:/tags/Global!hasdraft.of\\n\\n\u003C$let tr-rendering\\\yes\\\>\\n\\n\u003Cspan id\\\tr-version\\\>1.4.1\u003C/span>\\n\\n{{||$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiDecks}}\\n{{||$:/plugins/sobjornstad/TiddlyRemember/templates/AnkiTags}}\\n\\n\u003C$transclude mode\\\block\\\ />\\n\\n\u003C/$let>\\n\},\$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz\,\caption\:\RememberCz\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>typetext/vnd.tiddlywiki\,\created\:\20200517155905263\,\description\:\Remember Cloze Deletion\,\icon\:\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg\,\list-after\:\$:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq\,\modified\:\20200517162124307\,\shortcuts\:\((remembercz))\,\tags\:\$:/tags/EditorToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$macrocall $nametr-insert-note snippet{{$:/config/TiddlyRemember/snippets/remembercz}}>\},\$:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq\:{\title\:\$:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq\,\caption\:\RememberQ\,\condition\:\\u003CtargetTiddler>!hastype \u003CtargetTiddler>typetext/vnd.tiddlywiki\,\created\:\20161118171456554\,\description\:\Remember Question/Answer\,\icon\:\$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-white.svg\,\modified\:\20200517161709608\,\shortcuts\:\((rememberq))\,\tags\:\$:/tags/EditorToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$macrocall $nametr-insert-note snippet{{$:/config/TiddlyRemember/snippets/rememberq}}>\}}}},{title:$:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz,caption:RememberCz,condition:\u003CtargetTiddler>!hastype \u003CtargetTiddler>typetext/vnd.tiddlywiki,created:20200517155905263,creator:soren,description:Remember Cloze Deletion,icon:$:/plugins/sobjornstad/TiddlyRemember/icons/lightbulb-black.svg,modified:20211113234933532,modifier:soren,shortcuts:((remembercz)),tags:$:/tags/EditorToolbar,type:text/vnd.tiddlywiki,text:\\define getMacro()\n\u003C\u003Cremembercz \$(clozeid)$\\n\t\Cloze\>>\n\\end\n\n\\define prefixId() $(theprefix)$$(thetime)$\n\n\u003C$set namethetime value\u003C\u003Cnow \UTCYYYY0MM0DD0hh0mm0ss0XXX\>> >\n\u003C$set nametheprefix value{{$:/config/TiddlyRemember/IdPrefix}}>\n\u003C$set nameclozeid value\u003C\u003CprefixId>> >\n\t\u003C$action-sendmessage\n\t\t$message\tm-edit-text-operation\\n\t\t$param\replace-selection\\n\t\ttext\u003C\u003CgetMacro>>\n\t/>\n\u003C/$set>\n\u003C/$set>\n\u003C/$set>\n},{title:$:/plugins/sobjornstad/TiddlyStretch,description:Stretchtext in TiddlyWiki,author:Soren Bjornstad,version:0.1.0,core-version:>5.1.21,source:https://github.com/sobjornstad/TiddlyStretch,list:readme license TiddlyStretch Macros,dependents:$:/plugins/TheDiveO/FontAwesome,plugin-type:plugin,type:application/json,text:{\tiddlers\:{\$:/plugins/sobjornstad/TiddlyStretch/TiddlyStretch Macros\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/TiddlyStretch Macros\,\created\:\20210304022132594\,\description\:\TiddlyStretch provides four macros for creating stretchtext: `stretch`, `stretch-template`, `stretch-links`, and `stretch-template-links`.\,\modified\:\20210304032037222\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The following four macros are used to create expandos:\\n\\n\u003C\u003Cstretch-template-links \\\alltiddlers+shadowstag$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\\\ \\\$:/plugins/sobjornstad/TiddlyStretch/doc/st/MacroSummary\\\ \\\$:/plugins/sobjornstad/TiddlyStretch/doc/st/Identity\\\>>\\n\},\$:/plugins/sobjornstad/TiddlyStretch/doc/EmptyMessage\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/EmptyMessage\,\created\:\20210304024358659\,\description\:\Optional wikitext to display if the filter yields no result.\,\modified\:\20210306022349423\,\name\:\emptyMessage\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/Filter\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Filter\,\created\:\20210304024354323\,\description\:\A filter expression describing the tiddlers to list.\,\modified\:\20210306022349455\,\name\:\filter\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeField\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeField\,\created\:\20210304024150673\,\description\:\The field to display (in block mode) when the expando is expanded. Defaults to `text`.\,\modified\:\20210306022349461\,\name\:\largeField\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeMode\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeMode\,\created\:\20210304024317434\,\description\:\Whether to render the expanded template in `block` or `inline` mode (default: block).\,\modified\:\20210306022349464\,\name\:\largeMode\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeTemplate\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/LargeTemplate\,\created\:\20210304024308673\,\description\:\The template tiddler to use when the expando is expanded.\,\modified\:\20210306022349466\,\name\:\largeTemplate\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\,\created\:\20210304032156159\,\list\:\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-links $:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template-links\,\modified\:\20210306022058465\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate\,\created\:\20210304025753399\,\modified\:\20210306022549030\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$macrocall $name\\\stretch-template\\\ tiddler\u003C\u003CcurrentTiddler>> smallTemplate\\\$:/plugins/sobjornstad/TiddlyStretch/doc/ParameterListingTemplate\\\ largeTemplate\\\$:/plugins/sobjornstad/TiddlyStretch/doc/ParametersTemplate\\\/>\},\$:/plugins/sobjornstad/TiddlyStretch/doc/ParameterListingTemplate\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/ParameterListingTemplate\,\created\:\20210304025229965\,\modified\:\20210306022014774\,\type\:\text/vnd.tiddlywiki\,\text\:\Parameters:\\n\\n\u003C$wikify name\\\w\\\ mode\\\inline\\\ output\\\html\\\ text{{{ enlist{!!parameters}join\u003C/code>, \u003Ccode>addprefix\u003Ccode>addsuffix\u003C/code> }}}>\\n \u003C\u003Cw>>\\n\u003C/$wikify>\},\$:/plugins/sobjornstad/TiddlyStretch/doc/ParametersTemplate\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/ParametersTemplate\,\created\:\20210304024810329\,\modified\:\20210306022349469\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Parameters:\\n\\n\u003Cdl>\\n\u003C$list filter{{!!parameters}}>\\n \u003C$tiddler tiddler{{{ alltiddlers+shadowstag$:/plugins/sobjornstad/TiddlyStretch/doc/Parametername\u003CcurrentTiddler> }}}>\\n \u003Cdt>\u003Ccode>{{!!name}}\u003C/code>\u003C/dt>\\n \u003Cdd>{{!!description}}\u003C/dd>\\n \u003C/$tiddler>\\n\u003C/$list>\\n\u003C/dl>\\n\},\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallField\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallField\,\created\:\20210304024141880\,\description\:\The field to display (in inline mode) when the expando is contracted. Defaults to `description`.\,\modified\:\20210306022830648\,\name\:\smallField\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallMode\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallMode\,\created\:\20210304024312605\,\description\:\Whether to render the contracted template in `block` or `inline` mode (default: inline).\,\modified\:\20210306022349474\,\name\:\smallMode\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallTemplate\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/SmallTemplate\,\created\:\20210304024303208\,\description\:\The template tiddler to use when the expando is contracted.\,\modified\:\20210306022807061\,\name\:\smallTemplate\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/Tiddler\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Tiddler\,\created\:\20210304024157079\,\description\:\Name of the tiddler to stretch. This tiddler will become the current tiddler when transcluded in either the small or large form.\,\modified\:\20210306022349481\,\name\:\tiddler\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Parameter\,\type\:\text/vnd.tiddlywiki\},\$:/plugins/sobjornstad/TiddlyStretch/doc/st/Identity\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/st/Identity\,\created\:\20210304023945301\,\modified\:\20210306022158599\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{!!text}}\\n\},\$:/plugins/sobjornstad/TiddlyStretch/doc/st/MacroSummary\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/st/MacroSummary\,\created\:\20210304023959526\,\modified\:\20210306022211394\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Ccode>{{!!name}}\u003C/code>: {{!!description}}\\n\},\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-links\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-links\,\created\:\20210304023056728\,\description\:\Create a bulleted list of expandos from the tiddlers that match a filter, displaying one of two fields on each tiddler.\,\modified\:\20210306022047185\,\name\:\stretch-links\,\parameters\:\filter smallField largeField emptyMessage\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\The `stretch-links` macro creates a bulleted list where each item is an expando. It is a cross between TiddlyStretchs `stretch` macro and the built-in `list-links` macro.\\n\\n{{||$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate}}\},\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template-links\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template-links\,\created\:\20210304023737915\,\description\:\Create a bulleted list of expandos from the tiddlers that match a filter, rendering each tiddler through one of two templates.\,\modified\:\20210306023011647\,\name\:\stretch-template-links\,\parameters\:\filter smallTemplate largeTemplate smallMode largeMode emptyMessage\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\The `stretch-template-links` macro works just like the stretch-links|$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-links macro, but instead of directly rendering one of two fields of each tiddler to be stretched, it renders the tiddler through one of two templates.\\n\\n{{||$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate}}\\n\},\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch-template\,\created\:\20210304022640887\,\description\:\Create an expando from a tiddler, rendering the tiddler through one of two templates.\,\modified\:\20210306022706090\,\name\:\stretch-template\,\parameters\:\tiddler smallTemplate largeTemplate smallMode largeMode\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\The `stretch-template` macro works just like the stretch|$:/plugins/sobjornstad/TiddlyStretch/doc/stretch macro, but instead of directly rendering one of two fields of the tiddler to be stretched, it renders the tiddler through one of two templates.\\n\\n{{||$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate}}\},\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/doc/stretch\,\created\:\20210304022329779\,\description\:\Create an expando from a tiddler, displaying one of two fields on the tiddler.\,\modified\:\20210306022740596\,\name\:\stretch\,\parameters\:\tiddler smallField largeField\,\tags\:\$:/plugins/sobjornstad/TiddlyStretch/doc/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\The `stretch` macro creates an expando out of a single tiddler. The `smallField` is shown when contracted, and the `largeField` is shown when expanded.\\n\\n{{||$:/plugins/sobjornstad/TiddlyStretch/doc/MacroInfoTemplate}}\},\$:/plugins/sobjornstad/TiddlyStretch/license\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/license\,\text\:\The MIT License (MIT)\\n\\nCopyright (c) 2021 Soren Bjornstad.\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\Software\\\), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is\\nfurnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\\nSOFTWARE.\\n\,\type\:\text/plain\},\$:/plugins/sobjornstad/TiddlyStretch/macros/stretch\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/macros/stretch\,\created\:\20210304002537855\,\modified\:\20210304014023505\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define stretchtext-tools(tiddler)\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ to\u003C\u003C__tiddler__>>>\\n \u003Ci class\\\fa fa-expand\\\/>\\n \u003C/$button>\\n \u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ message\\\tm-edit-tiddler\\\ param\u003C\u003C__tiddler__>>>\\n \u003Ci class\\\fa fa-pen\\\/>\\n \u003C/$button>\\n\\\\end\\n\\n\\\\define stretchtext-missing-tiddler(tiddler, descr: \\\tiddler\\\)\\n \u003C$list filter\\\\u003C__tiddler__>!istiddler!isshadow\\\ variable_>\\n //Missing $descr$ \u003C$link to\u003C\u003C__tiddler__>>/>//\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define stretchtext-missing(tiddler, field)\\n \u003C$macrocall $name\\\stretchtext-missing-tiddler\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$list filter\\\\u003C__tiddler__>istiddler!isshadow!has\u003C__field__>\\\ variable_>\\n //Missing field $field$ on existing tiddler \u003C$link to\u003C\u003C__tiddler__>>/>//\\n \u003C/$list>\\n\\\\end\\n\\n\\\\define stretch(tiddler, smallField: \\\description\\\, largeField: \\\text\\\)\\n \u003C$set name\\\stateTiddler\\\ value\u003C\u003Cqualify \\\\\\\\\$:/state/stretchtext/$tiddler$\\\\\\\\\>>>\\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\\\match\\\ text\\\hide\\\ default\\\hide\\\>\\n \u003Cdiv class\\\st-closed\\\>\\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\\\show\\\ class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003Ci class\\\fa fa-search-plus\\\/>\\n \u003C/$button>\\n \u003C$macrocall $name\\\stretchtext-tools\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$macrocall $name\\\stretchtext-missing\\\ tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__smallField__>>/>\\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\\n \u003C$transclude tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__smallField__>> />\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$reveal>\\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\\\match\\\ text\\\show\\\ default\\\hide\\\>\\n \u003Cdiv class\\\st-open\\\>\\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\\\hide\\\ class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003Ci class\\\fa fa-search-minus st-expanded-colorize\\\/>\\n \u003C/$button>\\n \u003C$macrocall $name\\\stretchtext-tools\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$link to\u003C\u003C__tiddler__>>/>\\n\\n \u003C$macrocall $name\\\stretchtext-missing\\\ tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__largeField__>>/>\\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\\n \u003C$transclude mode\\\block\\\ field\u003C\u003C__largeField__>> tiddler\u003C\u003C__tiddler__>>/>\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$reveal>\\n \u003C/$set>\\n\\\\end\\n\\n\\\\define stretch-template(tiddler, smallTemplate, largeTemplate, smallMode: \\\inline\\\, largeMode: \\\block\\\)\\n \u003C$set name\\\stateTiddler\\\ value\u003C\u003Cqualify \\\\\\\\\$:/state/stretchtext/$tiddler$\\\\\\\\\>>>\\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\\\match\\\ text\\\hide\\\ default\\\hide\\\>\\n \u003Cdiv class\\\st-closed\\\>\\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\\\show\\\ class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003Ci class\\\fa fa-search-plus\\\/>\\n \u003C/$button>\\n \u003C$macrocall $name\\\stretchtext-tools\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$macrocall $name\\\stretchtext-missing-tiddler\\\ tiddler\u003C\u003C__smallTemplate__>> descr\\\template\\\/>\\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\\n \u003C$transclude mode\u003C\u003C__smallMode__>> tiddler\u003C\u003C__smallTemplate__>>/>\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$reveal>\\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\\\match\\\ text\\\show\\\ default\\\hide\\\>\\n \u003Cdiv class\\\st-open\\\>\\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\\\hide\\\ class\\\tc-btn-invisible tc-tiddlylink\\\>\\n \u003Ci class\\\fa fa-search-minus st-expanded-colorize\\\/>\\n \u003C/$button>\\n \u003C$macrocall $name\\\stretchtext-tools\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$link to\u003C\u003C__tiddler__>>/>\\n\\n \u003C$macrocall $name\\\stretchtext-missing-tiddler\\\ tiddler\u003C\u003C__tiddler__>>/>\\n \u003C$macrocall $name\\\stretchtext-missing-tiddler\\\ tiddler\u003C\u003C__largeTemplate__>> descr\\\template\\\/>\\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\\n \u003C$transclude mode\u003C\u003C__largeMode__>> tiddler\u003C\u003C__largeTemplate__>>/>\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$reveal>\\n \u003C/$set>\\n\\\\end\\n\\n\\\\define stretch-links(filter, smallField: \\\description\\\, largeField: \\\text\\\, emptyMessage: \\\\\\)\\n \u003Cul>\\n \u003C$list filter\u003C\u003C__filter__>> emptyMessage\u003C\u003C__emptyMessage__>>>\\n \u003Cli>\u003C$macrocall $name\\\stretch\\\ tiddler\u003C\u003CcurrentTiddler>> smallField\u003C\u003C__smallField__>> largeField\u003C\u003C__largeField__>>/>\u003C/li>\\n \u003C/$list>\\n \u003C/ul>\\n\\\\end\\n\\n\\\\define stretch-template-links(filter, smallTemplate, largeTemplate, smallMode: \\\inline\\\, largeMode: \\\block\\\, emptyMessage: \\\\\\)\\n \u003Cul>\\n \u003C$list filter\u003C\u003C__filter__>> emptyMessage\u003C\u003C__emptyMessage__>>>\\n \u003Cli>\u003C$macrocall $name\\\stretch-template\\\ tiddler\u003C\u003CcurrentTiddler>> smallTemplate\u003C\u003C__smallTemplate__>> largeTemplate\u003C\u003C__largeTemplate__>> smallMode\u003C\u003C__smallMode__>> largeMode\u003C\u003C__largeMode__>>/>\u003C/li>\\n \u003C/$list>\\n \u003C/ul>\\n\\\\end\\n\},\$:/plugins/sobjornstad/TiddlyStretch/readme\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/readme\,\type\:\text/vnd.tiddlywiki\,\text\:\TiddlyStretch allows you to conveniently write\\n stretchtext|https://en.wikipedia.org/wiki/StretchText in TiddlyWiki.\\n\\n* Documentation|https://sobjornstad.github.io/TiddlyStretch/\\n* GitHub|https://github.com/sobjornstad/TiddlyStretch\\n\},\$:/plugins/sobjornstad/TiddlyStretch/styles/stretch\:{\title\:\$:/plugins/sobjornstad/TiddlyStretch/styles/stretch\,\created\:\20210304003038202\,\modified\:\20210304003233865\,\tags\:\$:/tags/Stylesheet\,\text\:\.st-open {\\n border-left: 3px solid \u003C\u003Ccolour muted-foreground>>;\\n padding-left: 0.5em;\\n}\\n\\n.st-open p {\\n margin-block-start: 0em;\\n}\\n\\n.st-closed { }\\n\\ni.st-expanded-colorize {\\n color: \u003C\u003Ccolour tag-background>>;\\n}\\n\}}}},{title:$:/plugins/sobjornstad/TiddlyStretch/macros/stretch,created:20210304002537855,modified:20210714025439865,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\define stretchtext-tools(tiddler)\n \u003C$button class\tc-btn-invisible tc-tiddlylink\ to\u003C\u003C__tiddler__>> tooltip\Open this nodes tiddler as a new item in the story river.\>\n \u003Ci class\fa fa-expand\/>\n \u003C/$button>\n \u003C$button class\tc-btn-invisible tc-tiddlylink\ message\tm-edit-tiddler\ param\u003C\u003C__tiddler__>> tooltip\Edit this nodes tiddler.\>\n \u003Ci class\fa fa-pen\/>\n \u003C/$button>\n\\end\n\n\\define stretchtext-missing-tiddler(tiddler, descr: \tiddler\)\n \u003C$list filter\\u003C__tiddler__>!istiddler!isshadow\ variable_>\n //Missing $descr$ \u003C$link to\u003C\u003C__tiddler__>>/>//\n \u003C/$list>\n\\end\n\n\\define stretchtext-missing(tiddler, field)\n \u003C$macrocall $name\stretchtext-missing-tiddler\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$list filter\\u003C__tiddler__>istiddler!isshadow!has\u003C__field__>\ variable_>\n //Missing field $field$ on existing tiddler \u003C$link to\u003C\u003C__tiddler__>>/>//\n \u003C/$list>\n\\end\n\n\\define stretch(tiddler, smallField: \description\, largeField: \text\)\n \u003C$set name\stateTiddler\ value\u003C\u003Cqualify \\\$:/state/stretchtext/$tiddler$\\\>>>\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\match\ text\hide\ default\hide\>\n \u003Cdiv class\st-closed\>\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\show\ class\tc-btn-invisible tc-tiddlylink\ tooltip\Expand this node to show more detail.\>\n \u003Ci class\fa fa-search-plus\/>\n \u003C/$button>\n \u003C$macrocall $name\stretchtext-tools\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$macrocall $name\stretchtext-missing\ tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__smallField__>>/>\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\n \u003C$transclude tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__smallField__>> />\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\match\ text\show\ default\hide\>\n \u003Cdiv class\st-open\>\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\hide\ class\tc-btn-invisible tc-tiddlylink\ tooltip\Shrink this node to show less detail.\>\n \u003Ci class\fa fa-search-minus st-expanded-colorize\/>\n \u003C/$button>\n \u003C$macrocall $name\stretchtext-tools\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$link to\u003C\u003C__tiddler__>>/>\n\n \u003C$macrocall $name\stretchtext-missing\ tiddler\u003C\u003C__tiddler__>> field\u003C\u003C__largeField__>>/>\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\n \u003C$transclude mode\block\ field\u003C\u003C__largeField__>> tiddler\u003C\u003C__tiddler__>>/>\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C/$set>\n\\end\n\n\\define stretch-template(tiddler, smallTemplate, largeTemplate, smallMode: \inline\, largeMode: \block\)\n \u003C$set name\stateTiddler\ value\u003C\u003Cqualify \\\$:/state/stretchtext/$tiddler$\\\>>>\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\match\ text\hide\ default\hide\>\n \u003Cdiv class\st-closed\>\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\show\ class\tc-btn-invisible tc-tiddlylink\ tooltip\Expand this node to show more detail.\>\n \u003Ci class\fa fa-search-plus\/>\n \u003C/$button>\n \u003C$macrocall $name\stretchtext-tools\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$macrocall $name\stretchtext-missing-tiddler\ tiddler\u003C\u003C__smallTemplate__>> descr\template\/>\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\n \u003C$transclude mode\u003C\u003C__smallMode__>> tiddler\u003C\u003C__smallTemplate__>>/>\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C$reveal stateTitle\u003C\u003CstateTiddler>> stateIndex\u003C\u003C__tiddler__>> type\match\ text\show\ default\hide\>\n \u003Cdiv class\st-open\>\n \u003C$button setTitle\u003C\u003CstateTiddler>> setIndex\u003C\u003C__tiddler__>> setTo\hide\ class\tc-btn-invisible tc-tiddlylink\ tooltip\Shrink this node to show less detail.\>\n \u003Ci class\fa fa-search-minus st-expanded-colorize\/>\n \u003C/$button>\n \u003C$macrocall $name\stretchtext-tools\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$link to\u003C\u003C__tiddler__>>/>\n\n \u003C$macrocall $name\stretchtext-missing-tiddler\ tiddler\u003C\u003C__tiddler__>>/>\n \u003C$macrocall $name\stretchtext-missing-tiddler\ tiddler\u003C\u003C__largeTemplate__>> descr\template\/>\n \u003C$tiddler tiddler\u003C\u003C__tiddler__>>>\n \u003C$transclude mode\u003C\u003C__largeMode__>> tiddler\u003C\u003C__largeTemplate__>>/>\n \u003C/$tiddler>\n \u003C/div>\n \u003C/$reveal>\n \u003C/$set>\n\\end\n\n\\define stretch-links(filter, smallField: \description\, largeField: \text\, emptyMessage: \\)\n \u003Cul>\n \u003C$list filter\u003C\u003C__filter__>> emptyMessage\u003C\u003C__emptyMessage__>>>\n \u003Cli>\u003C$macrocall $name\stretch\ tiddler\u003C\u003CcurrentTiddler>> smallField\u003C\u003C__smallField__>> largeField\u003C\u003C__largeField__>>/>\u003C/li>\n \u003C/$list>\n \u003C/ul>\n\\end\n\n\\define stretch-template-links(filter, smallTemplate, largeTemplate, smallMode: \inline\, largeMode: \block\, emptyMessage: \\)\n \u003Cul>\n \u003C$list filter\u003C\u003C__filter__>> emptyMessage\u003C\u003C__emptyMessage__>>>\n \u003Cli>\u003C$macrocall $name\stretch-template\ tiddler\u003C\u003CcurrentTiddler>> smallTemplate\u003C\u003C__smallTemplate__>> largeTemplate\u003C\u003C__largeTemplate__>> smallMode\u003C\u003C__smallMode__>> largeMode\u003C\u003C__largeMode__>>/>\u003C/li>\n \u003C/$list>\n \u003C/ul>\n\\end\n},{author:Sylvain Comte,core-version:>5.0.0,dependents:,description:Leaflet maps,list:readme usage geoSyntax tileLayers markers example,plugin-type:plugin,source:https://framagit.org/sycom/TiddlyWiki-Plugins,title:$:/plugins/sycom/leaflet,version:0.8.6,type:application/json,text:{\tiddlers\:{\GeoTiddler\:{\title\:\GeoTiddler\,\created\:\20151130173416239\,\modified\:\20170115153450584\,\type\:\text/vnd.tiddlywiki\,\text\:\GeoTiddlers are tiddlers containing geographical data. geoSyntax|$:/plugins/sycom/leaflet/geoSyntax lists the available objects. geoJson|https://en.wikipedia.org/wiki/GeoJSON data are also accepted. You may specify a color for all objects displayed through `color` field.\\n\\n!! tiddler with geo TiddlerFields\\nYou can upgrade your tiddler by putting some geo metadata (wgs 84 coordinates|https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84) in its TiddlerFields. See geoSyntax|$:/plugins/sycom/leaflet/geoSyntax for the list of object types you can draw. Popup will show the first part of the tiddler. If the tiddler contains a leafmap widget, it will be rendered as `text/plain` in order to avoid crash...\\n\\n!! geoJSON tiddler\\nYou can define a geoJson tiddler like tiddlyWikiFrCommunity|$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity and then display the data by calling it. Just put your geoJson data in the body and declare the tiddler as application/json. Any `application/json` tiddler called will be considered as geoJson. The popups will show\\n\\n* a title\\n** the `name` or the `title` attribute in properties if exists,\\n** if not, the firsts attributes of properties until they are 8 characters long\\n* a description\\n** the `description` attribute in properties if exists,\\n** if not, the data stored in each feature as a bulleted list.\\n\\n!! tiddler grouping GeoTiddlers\\nYou can use `tiddlers` or `filter` as TiddlerFields to make a group of tiddlers. You can apply some styling options to all the group using `style`, `color` or `marker` TiddlerFields and then call the tiddler in your map to render all those tiddler at the same time. This will be a good way to make thematic maps indeed...\\n\},\$:/ext/modules/widgets/geolocation-widget.js\:{\title\:\$:/ext/modules/widgets/geolocation-widget.js\,\text\:\/*\\\\\\ntitle: $:/ext/modules/wigets/geolocation-widget.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nGeolocation widget\\n\\n\\\\*/\\n(function() {\\n /*jslint node: true, browser: true */\\n /*global $tw: false */\\n \\\use strict\\\;\\n var Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n var GeolocationWidget function(parseTreeNode, options) {\\n this.initialise(parseTreeNode, options);\\n };\\n\\n /* Inherit from the base widget class */\\n GeolocationWidget.prototype new Widget();\\n\\n /* Compute the internal state of the widget */\\n GeolocationWidget.prototype.execute function() {\\n // Get attributes\\n this.target this.getAttribute(\\\target\\\) || this.getVariable(\\\currentTiddler\\\);\\n this.icon this.getAttribute(\\\icon\\\) || \\\$:/core/images/globe\\\;\\n this.text this.getAttribute(\\\text\\\) || undefined;\\n this.accuracy this.getAttribute(\\\accuracy\\\);\\n this.type this.getAttribute(\\\type\\\) || \\\point\\\;\\n // Make child widgets\\n this.makeChildWidgets();\\n };\\n\\n /* Render this widget into the DOM */\\n GeolocationWidget.prototype.render function(parent, nextSibling) {\\n var self this;\\n // Remember parent\\n this.parentDomNode parent;\\n // Compute attributes and execute state\\n this.computeAttributes();\\n this.execute();\\n // Create element\\n var tag \\\button\\\;\\n if (this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) -1) {\\n tag this.buttonTag;\\n }\\n var domNode this.document.createElement(tag);\\n // Add a click event handler\\n domNode.addEventListener(\\\click\\\, function(event) {\\n if (navigator.geolocation) {\\n navigator.geolocation.getCurrentPosition(\\n // success callback\\n function(position) {\\n /* to replace by field populating (point(s) polyline(s) or polygon(s)) */\\n /* default : if tiddler has point field, will create a points field to store new data;\\n if tiddler has points field, will add a new point to the tiddler field;\\t*/\\n var target self.target;\\n var accuracy self.accuracy;\\n var type self.type;\\n var newPoint position.coords.latitude + \\\,\\\ + position.coords.longitude;\\n /* check if tiddler has a geofield */\\n var track \\\\\\;\\n if (!$tw.wiki.getTiddler(target)) $tw.wiki.setText(target, \\\text\\\, null, \\\\\\, null);\\n var flds $tw.wiki.getTiddler(target).fields\\n if (flds.points) {\\n track flds.points;\\n $tw.wiki.setText(target, \\\points\\\, null, track + \\\ \\\ + newPoint, null);\\n infoLocation(\\\new point \\\ + newPoint + \\\ added to \\\ + target);\\n\\n } else {\\n if (flds.point && flds.point ! null) {\\n track flds.point;\\n $tw.wiki.setText(target, \\\points\\\, null, track + \\\ \\\ + newPoint, null);\\n $tw.wiki.setText(target, \\\point\\\, null, null, null);\\n infoLocation(\\\new point \\\ + newPoint + \\\ added to \\\ + target);\\n } else {\\n $tw.wiki.setText(target, \\\point\\\, null, newPoint, null);\\n infoLocation(\\\new point \\\ + newPoint + \\\ added to \\\ + target);\\n }\\n }\\n },\\n // error callback\\n function(error) {\\n noLocation(error.message + \\\. You may not are connected via httpS://\\\)\\n }\\n );\\n } else {\\n noLocation(\\\position disabled or not supported by your browser\\\);\\n }\\n }, false);\\n /* dress up button */\\n var buttonContent;\\n // if text parameter, will use it for the button\\n if (self.text) {\\n buttonContent self.text;\\n } else {\\n // if not, looking for an icon\\n /* !todo: ?question: should the icon depend on \\\type\\\ parameter? */\\n buttonContent $tw.wiki.getTiddler(self.icon).fields.text;\\n }\\n domNode.innerHTML buttonContent;\\n // Insert element\\n parent.insertBefore(domNode, nextSibling);\\n this.renderChildren(domNode, null);\\n this.domNodes.push(domNode);\\n };\\n\\n function noLocation(message) {\\n /* !todo: ?question: replace by \\\modal\\\ alert? */\\n // create or update a temporary message tiddler \\n $tw.wiki.setText(\\\$:/temp/noLocationMessage\\\, \\\text\\\, null, \\\geolocation access denied: \\\ + message, null);\\n // displays it in modal\\n $tw.modal.display(\\\$:/temp/noLocationMessage\\\);\\n }\\n\\n function infoLocation(message) {\\n // create or update a temporary message tiddler \\n $tw.wiki.setText(\\\$:/temp/viewLocationMessage\\\, \\\text\\\, null, message, null);\\n // displays it in modal\\n $tw.notifier.display(\\\$:/temp/viewLocationMessage\\\);\\n }\\n /*\\n We dont allow actions to propagate because we trigger actions ourselves\\n */\\n GeolocationWidget.prototype.allowActionPropagation function() {\\n return false;\\n };\\n\\n exports.geoloc GeolocationWidget;\\n\\n})();\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/sycom/leaflet/devDiary\:{\title\:\$:/plugins/sycom/leaflet/devDiary\,\created\:\20151110173416000\,\modified\:\20180531171500000\,\type\:\text/vnd.tiddlywiki\,\text\:\Some notes about coding this plugin. Might be useful to others...\\n\\n* 20180602\\n** added a template that will display a map of embeded object for tiddlers containing one of the geoTiddlers fiels.\\n** updtated leaflet and marker-cluster to 1.3.1 - the easy way. Just replaced with new version and no deprecation at all \\\\o/ !\\n* 20180531\\n** converting all `.svg.tid` files to `.svg` + `.svg.meta` pairs. Will allow git client to make svg viewable in web interface. Also compressed SVG as much as possible with great https://jakearchibald.github.io/svgomg/ tool.\\n** tweak : for svg embedding local TiddlyWiki colors (eg `$primary$`), forced type to `text/vnd.tiddlywiki` to preserve them.\\n* 20170317\\n** lot of work around cluster size, cluster color when using filter. Cluster size depends on point % for the cluster, clusterRadius and zoom.\\n* 20170311\\n** added styling options and also the grouping tiddler capabilities. Discovered that direct styling in SVG does not always overwrite css styling|http://stackoverflow.com/questions/24293880/svg-why-does-external-css-override-inline-style-for-text.\\n* 20170129\\n** adding some markers. And its possible to create yours.\\n* 20170115\\n** darling birthday edit. Clustering by tiddler is on track. Will have to look for clustering direct passing object through widget.\\n* 20161111\\n** armistice edit! can now disable clustering or set clustering distance. Bug #9 fixed. may be cluster size will be too big for big databases\\n* 20161106\\n** color parameter is partially implemented. Note that direct styling like `fill` in svg element wont take on class styling through css...\\n* 20161104\\n** after many attemps, managed to include tiddler excerpt in popups for mapping geoTiddler. Had to include an escape rule for tiddler containing a leafmap widget. No larsen, but a big bug (map number probably).\\n** also managed to give the marker the color of the primary color. Note for later there is probably a bug if primary color is defined with `\u003C\u003Ccolour>>` macro.\\n* 20161102\\n** ok, when importing some library, dont forget to use `require()` in order to conclude. Silly guy. Still some polishing needed, but clustering know works...\\n* 20161101\\n** fighting with markercluster capabilities. At this point seems I can add the script but the MarkerClusterGroup class is not recognized when called...\\n* 20161031\\n** gave up inserting external layers.svg in stylesheet. Issues with `\u003C$text />` and `{{ }}`... Created svg in a separate tiddler for the record but inserting directly an \\\escaped\\\ version in mapCss.css|$:/plugins/sycom/leaflet/mapCssTweaks.css.tid\\n* 20161030\\n** working on different markers. Not so good at designing them though ;-) Putted default leaflet svg marker. Using Inkscape to edit svg easily and SVGO extension in atom to compress them. First attempt to put layers icon as svg. Issues...\\n* 20161029\\n** trying to put svg marker instead of png ones. Will be better for changing colors, content... using data:image/svg+xml. Svg has to bring xmlns ~~and xmlns:xlink~~ with it in order to work...\\n* 20161025\\n** after big fight, managed to call images as embeded through css without writing full base64 code. Had to add `html` to the \\\rules only\\\ list at the beginning of the css code\\n* 20161024\\n** geojson implemented. Will need to add cluster soon. Some question about geojson attributes to create the popup...\\n* 20161021\\n** updated leaflet.js to 1.0.1 moved base64 image to mapCss.css in order to avoid problems when updating leaflet.\\n** Updated tileLayer list. min/max checked for this time. Detect if tile id is wrong to alert user and display osm instead.\\n* 20160314\\n** corrected caption errors for example and roadmap. Have to write an install process in demo site (gh-page) since writing this in plugin is nonsense.\\n* 20151124\\n** wondering the best way to release plugin code in gitlab (or github). Cant be a fork of TiddlyWiki. Dont want to lose .git history.\\n** ok Im dumb. All is written in the dev TiddlyWiki : http://tiddlywiki.com/dev/#Developing%20p lugins%20using%20Node.js%20and%20GitHub . Lost .git history since cuting tree is bad. But history was still short...\\n* 20151123\\n** not able to use directly tiddler stored images as css background.\\n** decided to use base64 form in css. Not so elegant as I wished, but works.\\n* 20151121\\n** fighting with parameters : not imported from widget with `this.getAttribute()`\\n** solved by adding the parameter computation before : `this.computeAttributes();`\\n* 20151115\\n** some problems to declare leaflet.js library : fail during build since there is no window, no document.\\n** solved by creating the tiddlywiki.files importer.\\n* 20151110\\n** starting some tests. Inspiration from d3plugin (also creating widget and importing library)\\n\},\$:/plugins/sycom/leaflet/example/leaflet_with_filter\:{\title\:\$:/plugins/sycom/leaflet/example/leaflet_with_filter\,\created\:\20151211173500000\,\modified\:\20170317163500000\,\text\:\!! a map of a filter\\nthis one displays all tiddlers tagged with \u003C\u003Ctag example>> (theres a //all shadow// tweak, since they are shadowed). There is also one cluster per tiddler. Some colors are set from within each tiddler with `color` field.\\n\\n```\\n\u003C$leafmap tiletoner\\n\\tplaces{\\\filter\\\:\\\allshadowstagexample\\\} clusterTypetiddler/>\\n```\\n\u003C$leafmap tiletoner\\n\\tplaces{\\\filter\\\:\\\allshadowstagexample\\\} clusterTypetiddler/>\\n\},\$:/plugins/sycom/leaflet/example/leaflet_with_geojsontiddler\:{\title\:\$:/plugins/sycom/leaflet/example/leaflet_with_geojsontiddler\,\created\:\20161025150936935\,\modified\:\20170318235936935\,\tags\:\example leaflet\,\text\:\!! a map of a geoJson tiddler\\nThis one displays tiddlyWikiFrCommunity|$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity (that has a color field set to red), which is an almost direct geojson data extraction from the umap Utilisateurs du forum TiddlyWiki FR|https://umap.openstreetmap.fr/fr/map/tiddlywikifr_65983#6/46.995/2.549. `color` is set to orange, `marker` to pin. Cluster distance is default (80) on the first, set to 30 on the second.\\n\\n```\\n\u003C$leafmap tileControl\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\\\}\\n style{\\\color\\\:\\\orange\\\}\\n markerpin/>\\n\u003C$leafmap tileControl cluster\\\30\\\\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\\\}\\n markerpin/>\\n```\\n\u003C$leafmap tileControl\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\\\}\\n style{\\\color\\\:\\\orange\\\}\\n markerpin/>\\n\u003C$leafmap tileControl cluster\\\30\\\\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\\\}\\n markerpin/>\\n\},\$:/plugins/sycom/leaflet/example/leaflet_with_geotiddler\:{\title\:\$:/plugins/sycom/leaflet/example/leaflet_with_geotiddler\,\created\:\20151207090936935\,\modified\:\20161025222038568\,\tags\:\example leaflet\,\text\:\!! a map of a GeoTiddler\\nthis one displays the tiddler placeTiddler|$:/plugins/sycom/leaflet/example/placeTiddler. Note the tileControl attribute that enables map background selection. As the tiddler has its `color` field set to pink, objects are rendered pink. The cat is know a panther ;-). The tiddler also have a `style` field to define dash and thickness of the stroke...\\n\\n```\\n\u003C$leafmap\\n tileControl\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/placeTiddler\\\}/>\\n```\\n\u003C$leafmap\\n tileControl\\n places{\\\tiddler\\\:\\\$:/plugins/sycom/leaflet/example/placeTiddler\\\}/>\\n\},\$:/plugins/sycom/leaflet/example/leaflet_with_non-tiddler_geo_data\:{\title\:\$:/plugins/sycom/leaflet/example/leaflet_with_non-tiddler_geo_data\,\created\:\20151207090936935\,\modified\:\20151211172038568\,\point\:\6.5,19.72\,\tags\:\example leaflet\,\text\:\!! a map with data on the go\\nvery useful for fast mapping. All objects that might be embedded in GeoTiddler can be used here. Lets display a map with satellite imagery and\\n\\n* a point at `6.5,19.72`\\n* a polyline at `6.4,19.7 6.6,19.74`\\n\\nnote this tiddler is also a geoTiddler with one point at `6.5,19.72`\\n\\n```\\n\u003C$leafmap tilesat\\n\\tplaces{\\\point\\\:\\\6.5,19.72\\\,\\\polyline\\\:\\\6.4,19.7 6.6,19.74\\\}/>\\n```\\n\\n\u003C$leafmap tilesat\\n\\tplaces{\\\point\\\:\\\6.5,19.72\\\,\\\polyline\\\:\\\6.4,19.7 6.6,19.74\\\}/>\\n\},\$:/plugins/sycom/leaflet/example/placeTiddler\:{\title\:\$:/plugins/sycom/leaflet/example/placeTiddler\,\color\:\#ff80c0\,\created\:\20151119173416000\,\modified\:\20151211173153114\,\points\:\52.799933,-2.589812 52.799959,-2.590939\,\polygon\:\52.800608,-2.591668 52.800225,-2.591829 52.799849,-2.591937 52.799603,-2.591990 52.799427,-2.591990 52.799187,-2.591894 52.798863,-2.591550 52.798727,-2.591357 52.798662,-2.591121 52.798636,-2.590853 52.798655,-2.590542 52.798668,-2.590467 52.798701,-2.590359 52.798649,-2.590113 52.798623,-2.589920 52.798610,-2.589716 52.798636,-2.589437 52.798694,-2.589136 52.798850,-2.588975 52.799051,-2.588793 52.799311,-2.588707 52.799525,-2.588707 52.799726,-2.588772 52.800018,-2.588857 52.800290,-2.588911 52.800511,-2.589040 52.800731,-2.589126 52.800816,-2.589211 52.800413,-2.589812 52.800446,-2.590166 52.800452,-2.590520 52.800433,-2.590810 52.800426,-2.591068 52.800751,-2.591550 52.800621,-2.591679\,\polylines\:\52.799382,-2.590059 52.799641,-2.588321|52.799330,-2.590048 52.799447,-2.588342|52.799265,-2.590059 52.799181,-2.588342|52.799486,-2.590724 52.799706,-2.592301|52.799414,-2.590767 52.799525,-2.592366|52.799356,-2.590714 52.799278,-2.592355\,\style\:\{\\\dashArray\\\:\\\6, 10\\\,\\\weight\\\:\\\8\\\}\,\tags\:\example leaflet geometry\,\type\:\text/vnd.tiddlywiki\,\text\:\This tiddler contains\\n\\n* a two `points` list : 52.799933,-2.589812 52.799959,-2.590939\\n* a `polygon` : 52.800608,-2.591668 52.800225,-2.591829 52.799849 (...)\\n* a `polyline`s list : 52.799382,-2.590059 52.799641,-2.588321|52.799330,-2.590048 52.799447,-2.588342|52.799265,(...)\\n\\nIt has also some styling informations\\n\\n* `color` is set to pink\\n* `style` defines a dashed 8px thick line\\n\\ngo to edit mode to see the full data fields\\n\},\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\:{\text\:\{\\\type\\\:\\\FeatureCollection\\\,\\\features\\\:{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Aknar\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.4442090000000007,43.604652}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\CdriC\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.563166,47.478419}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Disanv Parean\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.4072784,49.1846226}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Emmanuel\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.3522219000000177,48.85661400000001}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Escrivant\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.3868,48.871958}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Fab13n\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:5.5867,45.1184}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Fabio\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.916515000000004,47.8664401}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Florent\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:0.156237,45.648377}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\François\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.478413899999964,43.543794}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Gub\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.4442090000000007,43.604652}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\jargenty\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.321621999999934,43.514707}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Jérôme\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-2.429759,47.328003}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Joël\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:4.740042686462402,46.10446454226022}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Johanne\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-74.09016960000002,45.65189590000001}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Lakemp\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.19249,48.59338}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\LauDai\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.4750973000000158,43.5664556}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\LongSlowBakery\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-2.4834849999999733,52.903552}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Lucivam\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:4.390278,45.434722}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\m4dz\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.3522219000000177,48.85661400000001}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Matthias\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.560016,47.470006}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Michel\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:7.261953199999994,43.7101728}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Mikabi\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.44,43.604652}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Nico\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.2569674000000077,48.9899655}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Nicolas\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:6.8411643,46.9425711}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\pariswiki\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.29,48.8}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Phil\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:3.98337,50.36155}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Piwig\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-1.677793,48.117266}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Ploum\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:0.1995560000000296,48.00611000000001}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Scapharnaum\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:7.74553,48.58392}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Solaine\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:8.227512,46.818188}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Sylvain Comte\\\,\\\description\\\:\\\Créateur du leaflet map plugin\\\,\\\url\\\:\\\http://sylvain.comte.online.fr\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.08954,49.43584}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Sylvain Naudin\\\,\\\description\\\:\\\Admin du forum\\\,\\\url\\\:\\\http://sylvain.naud.in\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.155689,45.471894}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Thierry\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:0.3333,46.5833}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Thomas Elmiger\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:8.541694,47.376887}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Vincent\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:5.2788245000000416,50.5500944}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Yan\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.0517,46.22475}}}\\n\,\type\:\application/json\,\color\:\#dd0000\,\created\:\20161025143416000\,\modified\:\20180602193416000\,\source\:\https://umap.openstreetmap.fr/fr/map/tiddlywikifr_65983\,\tags\:\example leaflet geojson\,\title\:\$:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\},\$:/plugins/sycom/leaflet/example\:{\title\:\$:/plugins/sycom/leaflet/example\,\caption\:\Example\,\type\:\text/vnd.tiddlywiki\,\text\:\Different ways to use the leaflet plugin|$:/plugins/sycom/leaflet\\n\\n{{$:/plugins/sycom/leaflet/example/leaflet_with_geotiddler}}\\n\\n{{$:/plugins/sycom/leaflet/example/leaflet_with_geojsontiddler}}\\n\\n{{$:/plugins/sycom/leaflet/example/leaflet_with_non-tiddler_geo_data}}\\n\\n{{$:/plugins/sycom/leaflet/example/leaflet_with_filter}}\\n\},\$:/plugins/sycom/leaflet/geoSyntax\:{\title\:\$:/plugins/sycom/leaflet/geoSyntax\,\caption\:\geoSyntax\,\created\:\20151119173416239\,\modified\:\20151211173250584\,\type\:\text/vnd.tiddlywiki\,\text\:\Geographical objects can be stored\\n\\n* in a GeoTiddler by creating a //type// : // pattern// metadata field pair in any tiddler or by storing geoJson data in it and setting your tiddler to `application/JSON` type. Call it in the widget with places attribute : `places{\\\tiddler\\\:\\\title of your tiddler\\\}`\\n* in several GeoTiddlers|GeoTiddler. Call them in the widget with places attribute\\n** via a space separated list of GeoTiddlers|GeoTiddler : `places{\\\tiddlers\\\:\\\tiddler1 tiddler2 tiddler3\\\}`\\n** via a filter|http://tiddlywiki.com/#Filters selection of GeoTiddlers|GeoTiddler : `places{\\\filter\\\:\\\your filter\\\}`\\n* straight in the widget with places attribute : `places{\\\object type\\\:\\\coordinates pattern\\\}`\\n\\n!! Everything might be a GeoTiddler\\n\\nIn a very much tiddlywiki way, a tiddler may also refer to a list or a selection of tiddlers using `tiddlers` or `filter` metadata fields. You may add styling informations to all refered tiddler with `style`, `color` or `marker` metadata fields. Calling this tiddler with `\u003C$leafmap />` will render all refered tiddlers.\\n\\n!! Tool for creating shapes\\nAs not everyone has a GIS in his head, And the plugin does not implement yet any tool for creating geo shapes, there is (very basic) tool for that : extDraw for TiddlyWiki leaflet plugin|http://sycom.github.io/TiddlyWiki-Plugins/leafletDraw.html\\n\\n!! Geographical objects you can display on your map\\n\\n| !type | !description | !pattern |\\n|point |a unique point defined by a comma separated latitude,longitude pair |`y,x` |\\n|points|a points collection defined by a space separated point definition list |`y1,x1 y2,x2 y3,x3 ...` |\\n|polygon|a closed surfacic place defined like an //ordered// points collection just above |`y1,x1 y2,x2 y3,x3 ...` |\\n|polygons|a polygons collection defined by a pipe (`|`) separated list of polygon definitions |`y1,x1 y2,x2 y3,x3|y4,x4 y5...` |\\n|polyline|an open path place defined like the polygon just above |`y1,x1 y2,x2 y3,x3 ...` |\\n|polylines|a polylines collection defined by a pipe (`|`) separated list of polyline definitions |`y1,x1 y2,x2 y3,x3|y4,x4 y5...` |\\n|geojson|a geojson|http://geojson.org/ object. If set through a tiddler field, please crunch it to one single line|see rfc7946|https://tools.ietf.org/html/rfc7946|\\n\},\$:/plugins/sycom/leaflet/icon\:{\title\:\$:/plugins/sycom/leaflet/icon\,\tags\:\$:/tags/Image\,\text\:\\u003Csvg class\\\tc-image-leaflet-map tc-image-button\\\ viewBox\\\0 0 128 128\\\ width\\\22pt\\\ height\\\22pt\\\>\\n \u003Cg fill-rule\\\evenodd\\\>\\n \u003Cpath d\\\M64 0L9.4 32v64L64 128l54.6-32V32zM48.8 32.4l30.8 7.8V95l-30.8-7.8zm57.2 2.4v54.7L82 95V40.2zm-59.8-2.2v54.7L21 92.8V38zm-10.4 5.9a5.2 5.2 0 0 0-5.1 5c0 1.1.6 2.6 1.1 3.6l4 7.6 3.9-7.6c.4-1 1.1-2.4 1.1-3.6 0-2.6-2.3-5-5-5zm-.2 3h.2c1 0 2 .9 2 2a2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1 .8-2 1.8-2zM64.2 44c-7 0-13 6.1-13 12.7 0 3 1.7 6.8 3 9.4l10 19.3L74 66c1.2-2.6 3-6.2 3-9.4C77 50.1 71.2 44 64 44zm0 7.7a5 5 0 0 1 5 5 5 5 0 0 1-10 0 5 5 0 0 1 5-5zM25.6 59a3.5 3.5 0 0 0-3.4 3.3c0 .8.5 1.8.8 2.5l2.6 5 2.6-5c.3-.7.8-1.7.8-2.5 0-1.7-1.5-3.3-3.4-3.3zm0 2a1.3 1.3 0 1 1 0 2.6 1.3 1.3 0 0 1-1.3-1.3 1.3 1.3 0 0 1 1.3-1.3zM92 66.8c-2.7 0-5 2.4-5 5 0 1.2.6 2.7 1.1 3.7l4 7.5 3.8-7.5c.5-1 1.2-2.4 1.2-3.7 0-2.6-2.3-5-5-5zm0 3c1.1 0 2 1 2 2a2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1 .9-1.9 2-2z\\\/>\\n \u003Cpath d\\\M69-158h58v67H69z\\\ fill\\\#fff\\\/>\\n \u003C/g>\\n\u003C/svg>\\n\},\$:/plugins/sycom/leaflet/images/layers.svg\:{\title\:\$:/plugins/sycom/leaflet/images/layers.svg\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ height\\\26\\\ width\\\26\\\>\u003Cpath d\\\M0 17l13-8 13 8-13 8-13-8\\\ fill\\\#b9b9b9\\\/>\u003Cpath d\\\M0 17v1l13 8 13-8v-1l-13 8z\\\ fill\\\#737373\\\/>\u003Cpath d\\\M0 13l13-8 13 8-13 8-13-8\\\ fill\\\#cdcdcd\\\/>\\n \u003Cpath d\\\M0 13v1l13 8 13-8v-1l-13 8z\\\ fill\\\#737373\\\/>\u003Cpath d\\\M0 9l13-8 13 8-13 8L0 9\\\ fill-opacity\\\.6\\\ fill\\\#e9e9e9\\\/>\u003Cpath d\\\M0 9v1l13 8 13-8V9l-13 8z\\\ fill\\\#737373\\\/>\u003C/svg>\\n\,\type\:\image/svg+xml\,\created\:\20161028202401905\,\modified\:\20180531154011600\,\tags\:\$:/tags/Image\},\$:/plugins/sycom/leaflet/images/marker.svg\:{\title\:\$:/plugins/sycom/leaflet/images/marker.svg\,\caption\:\marker\,\created\:\20161028202401905\,\marker_dim\:\25 40 12.5 40\,\modified\:\20180531124011600\,\tags\:\$:/tags/Image\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\25\\\ height\\\40\\\ fill-rule\\\evenodd\\\>\u003Cpath fill\\\none\\\ d\\\M6.279 4.463h12.625v14.5H6.279z\\\/>\u003Cpath fill\\\$primary$\\\ fill-opacity\\\.8\\\ stroke\\\#fff\\\ stroke-linecap\\\round\\\ d\\\M12.544.5C5.971.5.5 6.191.5 12.366c0 2.778 1.564 6.308 2.694 8.746L12.5 38.984l9.262-17.872c1.13-2.438 2.738-5.791 2.738-8.746C24.5 6.191 19.117.5 12.544.5zm0 7.155a4.714 4.714 0 0 1 4.679 4.71c0 2.588-2.095 4.663-4.679 4.679-2.584-.017-4.679-2.09-4.679-4.679a4.714 4.714 0 0 1 4.679-4.71z\\\ class\\\leaflet-marker-colored\\\/>\u003Cpath fill\\\none\\\ stroke\\\#fff\\\ stroke-linecap\\\round\\\ stroke-opacity\\\.9\\\ d\\\M12.531 1.607c-5.944 0-10.938 5.219-10.938 10.75 0 2.359 1.443 5.832 2.563 8.25l.031.031L12.5 36.607l8.25-15.969.031-.031c1.135-2.448 2.625-5.706 2.625-8.25 0-5.538-4.931-10.75-10.875-10.75zm0 4.969c3.168.021 5.781 2.601 5.781 5.781 0 3.18-2.613 5.761-5.781 5.781-3.168-.02-5.75-2.61-5.75-5.781 0-3.172 2.582-5.761 5.75-5.781z\\\/>\u003C/svg>\\n\},\$:/plugins/sycom/leaflet/images/markershadow.svg\:{\title\:\$:/plugins/sycom/leaflet/images/markershadow.svg\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\50\\\ height\\\40\\\>\u003Cfilter id\\\a\\\ width\\\200\\\ height\\\200\\\ x\\\-50\\\ y\\\-50\\\>\u003CfeGaussianBlur in\\\SourceAlpha\\\ stdDeviation\\\1.5\\\/>\u003C/filter>\u003Cpath fill\\\none\\\ d\\\M47 0a52 52 0 0 0-34 21L0 40l30-19 13-9c7-6 9-12 4-12zm-9 7a3 8 58 0 1-2 5c-3 3-7 5-9 5-3 0-2-2 1-5a3 8 58 0 1 10-5z\\\ filter\\\url(#a)\\\/>\u003C/svg>\\n\,\type\:\image/svg+xml\,\created\:\20161028202401905\,\marker_dim\:\50 40 0 40\,\modified\:\20180531155500000\,\tags\:\$:/tags/Image\},\$:/plugins/sycom/leaflet/images/pin.svg\:{\title\:\$:/plugins/sycom/leaflet/images/pin.svg\,\caption\:\pin\,\created\:\20161028202401905\,\marker_dim\:\20 35 10 35\,\modified\:\20180531154500000\,\tags\:\$:/tags/Image\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\20\\\ height\\\35\\\>\u003Cdefs>\u003ClinearGradient id\\\a\\\>\u003Cstop offset\\\0\\\ stop-color\\\#fff\\\/>\u003Cstop offset\\\1\\\ stop-color\\\#fff\\\ stop-opacity\\\0\\\/>\u003C/linearGradient>\u003CradialGradient id\\\b\\\ cx\\\7\\\ cy\\\7\\\ r\\\8\\\ fx\\\5\\\ fy\\\5\\\ gradientTransform\\\scale(1.12)\\\ gradientUnits\\\userSpaceOnUse\\\ href\\\#a\\\/>\u003C/defs>\u003Cg fill-rule\\\evenodd\\\>\u003Cpath d\\\M9 20h2v15H9z\\\/>\u003Ccircle cx\\\10\\\ cy\\\10\\\ r\\\10\\\ class\\\leaflet-marker-colored\\\ fill-opacity\\\.8\\\ fill\\\$primary$\\\/>\u003Ccircle cx\\\10\\\ cy\\\10\\\ r\\\10\\\ fill\\\url(#b)\\\/>\u003C/g>\u003C/svg>\\n\},\$:/plugins/sycom/leaflet/images/pinshadow.svg\:{\title\:\$:/plugins/sycom/leaflet/images/pinshadow.svg\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\15\\\ height\\\15\\\>\u003Cfilter id\\\a\\\ width\\\200\\\ height\\\200\\\ x\\\-50\\\ y\\\-50\\\>\u003CfeGaussianBlur in\\\SourceAlpha\\\ stdDeviation\\\1.5\\\/>\u003C/filter>\u003Cellipse cx\\\8\\\ cy\\\8\\\ style\\\stroke:none; fill-opacity:.3; filter: url(#a)\\\ rx\\\7\\\ ry\\\7\\\/>\u003C/svg>\\n\,\type\:\image/svg+xml\,\created\:\20170129162401910\,\marker_dim\:\15 15 5 7\,\modified\:\20180531155000000\,\tags\:\$:/tags/Image\},\$:/plugins/sycom/leaflet/images/point.svg\:{\title\:\$:/plugins/sycom/leaflet/images/point.svg\,\caption\:\point\,\created\:\20170129162401905\,\marker_dim\:\15 15 7.5 7.5\,\modified\:\20180531165500000\,\tags\:\$:/tags/Image\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\15\\\ height\\\15\\\ fill-rule\\\evenodd\\\>\u003Cellipse cx\\\7.5\\\ cy\\\7.5\\\ fill\\\none\\\ stroke\\\#fff\\\ stroke-opacity\\\.8\\\ rx\\\7.5\\\ ry\\\7.5\\\/>\u003Cellipse cx\\\7.5\\\ cy\\\7.5\\\ fill\\\$primary$\\\ fill-opacity\\\.8\\\ stroke\\\#000\\\ stroke-opacity\\\.8\\\ stroke-width\\\.5\\\ class\\\leaflet-marker-colored\\\ rx\\\7\\\ ry\\\7\\\/>\u003C/svg>\\n\},\$:/plugins/sycom/leaflet/images/pointshadow.svg\:{\title\:\$:/plugins/sycom/leaflet/images/pointshadow.svg\,\text\:\\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ width\\\15\\\ height\\\15\\\>\u003Cfilter id\\\a\\\ width\\\200\\\ height\\\200\\\ x\\\-50\\\ y\\\-50\\\>\u003CfeGaussianBlur in\\\SourceAlpha\\\ stdDeviation\\\1.5\\\/>\u003C/filter>\u003Cellipse cx\\\7.5\\\ cy\\\7.5\\\ fill-opacity\\\.3\\\ filter\\\url(#a)\\\ rx\\\7.2\\\ ry\\\7.2\\\/>\u003C/svg>\\n\,\type\:\image/svg+xml\,\created\:\20170129162401910\,\marker_dim\:\15 15 0 12\,\modified\:\20180531165600000\,\tags\:\$:/tags/Image\},\$:/plugins/sycom/leaflet/lib/leaflet-markercluster.css\:{\title\:\$:/plugins/sycom/leaflet/lib/leaflet-markercluster.css\,\text\:\.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {\\n\\t-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;\\n\\t-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;\\n\\t-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;\\n\\ttransition: transform 0.3s ease-out, opacity 0.3s ease-in;\\n}\\n\\n.leaflet-cluster-spider-leg {\\n\\t/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */\\n\\t-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;\\n\\t-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;\\n\\t-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;\\n\\ttransition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;\\n}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/sycom/leaflet/lib/leaflet-markercluster.js\:{\title\:\$:/plugins/sycom/leaflet/lib/leaflet-markercluster.js\,\text\:\if($tw.browser){\\n!function(e,t){\\\object\\\typeof exports&&\\\undefined\\\!typeof module?t(exports):\\\function\\\typeof define&&define.amd?define(\\\exports\\\,t):t((e.Leaflete.Leaflet||{},e.Leaflet.markerclustere.Leaflet.markercluster||{}))}(this,function(e){\\\use strict\\\;var tL.MarkerClusterGroupL.FeatureGroup.extend({options:{maxClusterRadius:80,iconCreateFunction:null,clusterPane:L.Marker.prototype.options.pane,spiderfyOnMaxZoom:!0,showCoverageOnHover:!0,zoomToBoundsOnClick:!0,singleMarkerMode:!1,disableClusteringAtZoom:null,removeOutsideVisibleBounds:!0,animate:!0,animateAddingMarkers:!1,spiderfyDistanceMultiplier:1,spiderLegPolylineOptions:{weight:1.5,color:\\\#222\\\,opacity:.5},chunkedLoading:!1,chunkInterval:200,chunkDelay:50,chunkProgress:null,polygonOptions:{}},initialize:function(e){L.Util.setOptions(this,e),this.options.iconCreateFunction||(this.options.iconCreateFunctionthis._defaultIconCreateFunction),this._featureGroupL.featureGroup(),this._featureGroup.addEventParent(this),this._nonPointGroupL.featureGroup(),this._nonPointGroup.addEventParent(this),this._inZoomAnimation0,this._needsClustering,this._needsRemoving,this._currentShownBoundsnull,this._queue,this._childMarkerEventHandlers{dragstart:this._childMarkerDragStart,move:this._childMarkerMoved,dragend:this._childMarkerDragEnd};var tL.DomUtil.TRANSITION&&this.options.animate;L.extend(this,t?this._withAnimation:this._noAnimation),this._markerClustert?L.MarkerCluster:L.MarkerClusterNonAnimated},addLayer:function(e){if(e instanceof L.LayerGroup)return this.addLayers(e);if(!e.getLatLng)return this._nonPointGroup.addLayer(e),this.fire(\\\layeradd\\\,{layer:e}),this;if(!this._map)return this._needsClustering.push(e),this.fire(\\\layeradd\\\,{layer:e}),this;if(this.hasLayer(e))return this;this._unspiderfy&&this._unspiderfy(),this._addLayer(e,this._maxZoom),this.fire(\\\layeradd\\\,{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons();var te,ithis._zoom;if(e.__parent)for(;t.__parent._zoom>i;)tt.__parent;return this._currentShownBounds.contains(t.getLatLng())&&(this.options.animateAddingMarkers?this._animationAddLayer(e,t):this._animationAddLayerNonAnimated(e,t)),this},removeLayer:function(e){return e instanceof L.LayerGroup?this.removeLayers(e):e.getLatLng?this._map?e.__parent?(this._unspiderfy&&(this._unspiderfy(),this._unspiderfyLayer(e)),this._removeLayer(e,!0),this.fire(\\\layerremove\\\,{layer:e}),this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),e.off(this._childMarkerEventHandlers,this),this._featureGroup.hasLayer(e)&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow()),this):this:(!this._arraySplice(this._needsClustering,e)&&this.hasLayer(e)&&this._needsRemoving.push({layer:e,latlng:e._latlng}),this.fire(\\\layerremove\\\,{layer:e}),this):(this._nonPointGroup.removeLayer(e),this.fire(\\\layerremove\\\,{layer:e}),this)},addLayers:function(e,t){if(!L.Util.isArray(e))return this.addLayer(e);var i,nthis._featureGroup,rthis._nonPointGroup,sthis.options.chunkedLoading,othis.options.chunkInterval,athis.options.chunkProgress,he.length,l0,u!0;if(this._map){var _(new Date).getTime(),dL.bind(function(){for(var c(new Date).getTime();h>l;l++){if(s&&0l%200){var p(new Date).getTime()-c;if(p>o)break}if(iel,i instanceof L.LayerGroup)u&&(ee.slice(),u!1),this._extractNonGroupLayers(i,e),he.length;else if(i.getLatLng){if(!this.hasLayer(i)&&(this._addLayer(i,this._maxZoom),t||this.fire(\\\layeradd\\\,{layer:i}),i.__parent&&2i.__parent.getChildCount())){var fi.__parent.getAllChildMarkers(),mf0i?f1:f0;n.removeLayer(m)}}else r.addLayer(i),t||this.fire(\\\layeradd\\\,{layer:i})}a&&a(l,h,(new Date).getTime()-_),lh?(this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds)):setTimeout(d,this.options.chunkDelay)},this);d()}else for(var cthis._needsClustering;h>l;l++)iel,i instanceof L.LayerGroup?(u&&(ee.slice(),u!1),this._extractNonGroupLayers(i,e),he.length):i.getLatLng?this.hasLayer(i)||c.push(i):r.addLayer(i);return this},removeLayers:function(e){var t,i,ne.length,rthis._featureGroup,sthis._nonPointGroup,o!0;if(!this._map){for(t0;n>t;t++)iet,i instanceof L.LayerGroup?(o&&(ee.slice(),o!1),this._extractNonGroupLayers(i,e),ne.length):(this._arraySplice(this._needsClustering,i),s.removeLayer(i),this.hasLayer(i)&&this._needsRemoving.push({layer:i,latlng:i._latlng}),this.fire(\\\layerremove\\\,{layer:i}));return this}if(this._unspiderfy){this._unspiderfy();var ae.slice(),hn;for(t0;h>t;t++)iat,i instanceof L.LayerGroup?(this._extractNonGroupLayers(i,a),ha.length):this._unspiderfyLayer(i)}for(t0;n>t;t++)iet,i instanceof L.LayerGroup?(o&&(ee.slice(),o!1),this._extractNonGroupLayers(i,e),ne.length):i.__parent?(this._removeLayer(i,!0,!0),this.fire(\\\layerremove\\\,{layer:i}),r.hasLayer(i)&&(r.removeLayer(i),i.clusterShow&&i.clusterShow())):(s.removeLayer(i),this.fire(\\\layerremove\\\,{layer:i}));return this._topClusterLevel._recalculateBounds(),this._refreshClustersIcons(),this._topClusterLevel._recursivelyAddChildrenToMap(null,this._zoom,this._currentShownBounds),this},clearLayers:function(){return this._map||(this._needsClustering,delete this._gridClusters,delete this._gridUnclustered),this._noanimationUnspiderfy&&this._noanimationUnspiderfy(),this._featureGroup.clearLayers(),this._nonPointGroup.clearLayers(),this.eachLayer(function(e){e.off(this._childMarkerEventHandlers,this),delete e.__parent},this),this._map&&this._generateInitialClusters(),this},getBounds:function(){var enew L.LatLngBounds;this._topClusterLevel&&e.extend(this._topClusterLevel._bounds);for(var tthis._needsClustering.length-1;t>0;t--)e.extend(this._needsClusteringt.getLatLng());return e.extend(this._nonPointGroup.getBounds()),e},eachLayer:function(e,t){var i,n,r,sthis._needsClustering.slice(),othis._needsRemoving;for(this._topClusterLevel&&this._topClusterLevel.getAllChildMarkers(s),ns.length-1;n>0;n--){for(i!0,ro.length-1;r>0;r--)if(or.layersn){i!1;break}i&&e.call(t,sn)}this._nonPointGroup.eachLayer(e,t)},getLayers:function(){var e;return this.eachLayer(function(t){e.push(t)}),e},getLayer:function(e){var tnull;return eparseInt(e,10),this.eachLayer(function(i){L.stamp(i)e&&(ti)}),t},hasLayer:function(e){if(!e)return!1;var t,ithis._needsClustering;for(ti.length-1;t>0;t--)if(ite)return!0;for(ithis._needsRemoving,ti.length-1;t>0;t--)if(it.layere)return!1;return!(!e.__parent||e.__parent._group!this)||this._nonPointGroup.hasLayer(e)},zoomToShowLayer:function(e,t){\\\function\\\!typeof t&&(tfunction(){});var ifunction(){!e._icon&&!e.__parent._icon||this._inZoomAnimation||(this._map.off(\\\moveend\\\,i,this),this.off(\\\animationend\\\,i,this),e._icon?t():e.__parent._icon&&(this.once(\\\spiderfied\\\,t,this),e.__parent.spiderfy()))};e._icon&&this._map.getBounds().contains(e.getLatLng())?t():e.__parent._zoom\u003CMath.round(this._map._zoom)?(this._map.on(\\\moveend\\\,i,this),this._map.panTo(e.getLatLng())):(this._map.on(\\\moveend\\\,i,this),this.on(\\\animationend\\\,i,this),e.__parent.zoomToBounds())},onAdd:function(e){this._mape;var t,i,n;if(!isFinite(this._map.getMaxZoom()))throw\\\Map has no maxZoom specified\\\;for(this._featureGroup.addTo(e),this._nonPointGroup.addTo(e),this._gridClusters||this._generateInitialClusters(),this._maxLate.options.crs.projection.MAX_LATITUDE,t0,ithis._needsRemoving.length;i>t;t++)nthis._needsRemovingt,n.newlatlngn.layer._latlng,n.layer._latlngn.latlng;for(t0,ithis._needsRemoving.length;i>t;t++)nthis._needsRemovingt,this._removeLayer(n.layer,!0),n.layer._latlngn.newlatlng;this._needsRemoving,this._zoomMath.round(this._map._zoom),this._currentShownBoundsthis._getExpandedVisibleBounds(),this._map.on(\\\zoomend\\\,this._zoomEnd,this),this._map.on(\\\moveend\\\,this._moveEnd,this),this._spiderfierOnAdd&&this._spiderfierOnAdd(),this._bindEvents(),ithis._needsClustering,this._needsClustering,this.addLayers(i,!0)},onRemove:function(e){e.off(\\\zoomend\\\,this._zoomEnd,this),e.off(\\\moveend\\\,this._moveEnd,this),this._unbindEvents(),this._map._mapPane.classNamethis._map._mapPane.className.replace(\\\ leaflet-cluster-anim\\\,\\\\\\),this._spiderfierOnRemove&&this._spiderfierOnRemove(),delete this._maxLat,this._hideCoverage(),this._featureGroup.remove(),this._nonPointGroup.remove(),this._featureGroup.clearLayers(),this._mapnull},getVisibleParent:function(e){for(var te;t&&!t._icon;)tt.__parent;return t||null},_arraySplice:function(e,t){for(var ie.length-1;i>0;i--)if(eit)return e.splice(i,1),!0},_removeFromGridUnclustered:function(e,t){for(var ithis._map,nthis._gridUnclustered,rMath.floor(this._map.getMinZoom());t>r&&nt.removeObject(e,i.project(e.getLatLng(),t));t--);},_childMarkerDragStart:function(e){e.target.__dragStarte.target._latlng},_childMarkerMoved:function(e){if(!this._ignoreMove&&!e.target.__dragStart){var te.target._popup&&e.target._popup.isOpen();this._moveChild(e.target,e.oldLatLng,e.latlng),t&&e.target.openPopup()}},_moveChild:function(e,t,i){e._latlngt,this.removeLayer(e),e._latlngi,this.addLayer(e)},_childMarkerDragEnd:function(e){e.target.__dragStart&&this._moveChild(e.target,e.target.__dragStart,e.target._latlng),delete e.target.__dragStart},_removeLayer:function(e,t,i){var nthis._gridClusters,rthis._gridUnclustered,sthis._featureGroup,othis._map,aMath.floor(this._map.getMinZoom());t&&this._removeFromGridUnclustered(e,this._maxZoom);var h,le.__parent,ul._markers;for(this._arraySplice(u,e);l&&(l._childCount--,l._boundsNeedUpdate!0,!(l._zoom\u003Ca));)t&&l._childCount\u003C1?(hl._markers0e?l._markers1:l._markers0,nl._zoom.removeObject(l,o.project(l._cLatLng,l._zoom)),rl._zoom.addObject(h,o.project(h.getLatLng(),l._zoom)),this._arraySplice(l.__parent._childClusters,l),l.__parent._markers.push(h),h.__parentl.__parent,l._icon&&(s.removeLayer(l),i||s.addLayer(h))):l._iconNeedsUpdate!0,ll.__parent;delete e.__parent},_isOrIsParent:function(e,t){for(;t;){if(et)return!0;tt.parentNode}return!1},fire:function(e,t,i){if(t&&t.layer instanceof L.MarkerCluster){if(t.originalEvent&&this._isOrIsParent(t.layer._icon,t.originalEvent.relatedTarget))return;e\\\cluster\\\+e}L.FeatureGroup.prototype.fire.call(this,e,t,i)},listens:function(e,t){return L.FeatureGroup.prototype.listens.call(this,e,t)||L.FeatureGroup.prototype.listens.call(this,\\\cluster\\\+e,t)},_defaultIconCreateFunction:function(e){var te.getChildCount(),i\\\ marker-cluster-\\\;return i+10>t?\\\small\\\:100>t?\\\medium\\\:\\\large\\\,new L.DivIcon({html:\\\\u003Cdiv>\u003Cspan>\\\+t+\\\\u003C/span>\u003C/div>\\\,className:\\\marker-cluster\\\+i,iconSize:new L.Point(40,40)})},_bindEvents:function(){var ethis._map,tthis.options.spiderfyOnMaxZoom,ithis.options.showCoverageOnHover,nthis.options.zoomToBoundsOnClick;(t||n)&&this.on(\\\clusterclick\\\,this._zoomOrSpiderfy,this),i&&(this.on(\\\clustermouseover\\\,this._showCoverage,this),this.on(\\\clustermouseout\\\,this._hideCoverage,this),e.on(\\\zoomend\\\,this._hideCoverage,this))},_zoomOrSpiderfy:function(e){for(var te.layer,it;1i._childClusters.length;)ii._childClusters0;i._zoomthis._maxZoom&&i._childCountt._childCount&&this.options.spiderfyOnMaxZoom?t.spiderfy():this.options.zoomToBoundsOnClick&&t.zoomToBounds(),e.originalEvent&&13e.originalEvent.keyCode&&this._map._container.focus()},_showCoverage:function(e){var tthis._map;this._inZoomAnimation||(this._shownPolygon&&t.removeLayer(this._shownPolygon),e.layer.getChildCount()>2&&e.layer!this._spiderfied&&(this._shownPolygonnew L.Polygon(e.layer.getConvexHull(),this.options.polygonOptions),t.addLayer(this._shownPolygon)))},_hideCoverage:function(){this._shownPolygon&&(this._map.removeLayer(this._shownPolygon),this._shownPolygonnull)},_unbindEvents:function(){var ethis.options.spiderfyOnMaxZoom,tthis.options.showCoverageOnHover,ithis.options.zoomToBoundsOnClick,nthis._map;(e||i)&&this.off(\\\clusterclick\\\,this._zoomOrSpiderfy,this),t&&(this.off(\\\clustermouseover\\\,this._showCoverage,this),this.off(\\\clustermouseout\\\,this._hideCoverage,this),n.off(\\\zoomend\\\,this._hideCoverage,this))},_zoomEnd:function(){this._map&&(this._mergeSplitClusters(),this._zoomMath.round(this._map._zoom),this._currentShownBoundsthis._getExpandedVisibleBounds())},_moveEnd:function(){if(!this._inZoomAnimation){var ethis._getExpandedVisibleBounds();this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,e),this._topClusterLevel._recursivelyAddChildrenToMap(null,Math.round(this._map._zoom),e),this._currentShownBoundse}},_generateInitialClusters:function(){var eMath.ceil(this._map.getMaxZoom()),tMath.floor(this._map.getMinZoom()),ithis.options.maxClusterRadius,ni;\\\function\\\!typeof i&&(nfunction(){return i}),null!this.options.disableClusteringAtZoom&&(ethis.options.disableClusteringAtZoom-1),this._maxZoome,this._gridClusters{},this._gridUnclustered{};for(var re;r>t;r--)this._gridClustersrnew L.DistanceGrid(n(r)),this._gridUnclusteredrnew L.DistanceGrid(n(r));this._topClusterLevelnew this._markerCluster(this,t-1)},_addLayer:function(e,t){var i,n,rthis._gridClusters,sthis._gridUnclustered,oMath.floor(this._map.getMinZoom());for(this.options.singleMarkerMode&&this._overrideMarkerIcon(e),e.on(this._childMarkerEventHandlers,this);t>o;t--){ithis._map.project(e.getLatLng(),t);var art.getNearObject(i);if(a)return a._addChild(e),e.__parenta,void 0;if(ast.getNearObject(i)){var ha.__parent;h&&this._removeLayer(a,!1);var lnew this._markerCluster(this,t,a,e);rt.addObject(l,this._map.project(l._cLatLng,t)),a.__parentl,e.__parentl;var ul;for(nt-1;n>h._zoom;n--)unew this._markerCluster(this,n,u),rn.addObject(u,this._map.project(a.getLatLng(),n));return h._addChild(u),this._removeFromGridUnclustered(a,t),void 0}st.addObject(e,i)}this._topClusterLevel._addChild(e),e.__parentthis._topClusterLevel},_refreshClustersIcons:function(){this._featureGroup.eachLayer(function(e){e instanceof L.MarkerCluster&&e._iconNeedsUpdate&&e._updateIcon()})},_enqueue:function(e){this._queue.push(e),this._queueTimeout||(this._queueTimeoutsetTimeout(L.bind(this._processQueue,this),300))},_processQueue:function(){for(var e0;e\u003Cthis._queue.length;e++)this._queuee.call(this);this._queue.length0,clearTimeout(this._queueTimeout),this._queueTimeoutnull},_mergeSplitClusters:function(){var eMath.round(this._map._zoom);this._processQueue(),this._zoom\u003Ce&&this._currentShownBounds.intersects(this._getExpandedVisibleBounds())?(this._animationStart(),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),this._zoom,this._getExpandedVisibleBounds()),this._animationZoomIn(this._zoom,e)):this._zoom>e?(this._animationStart(),this._animationZoomOut(this._zoom,e)):this._moveEnd()},_getExpandedVisibleBounds:function(){return this.options.removeOutsideVisibleBounds?L.Browser.mobile?this._checkBoundsMaxLat(this._map.getBounds()):this._checkBoundsMaxLat(this._map.getBounds().pad(1)):this._mapBoundsInfinite},_checkBoundsMaxLat:function(e){var tthis._maxLat;return void 0!t&&(e.getNorth()>t&&(e._northEast.lat1/0),e.getSouth()\u003C-t&&(e._southWest.lat-1/0)),e},_animationAddLayerNonAnimated:function(e,t){if(te)this._featureGroup.addLayer(e);else if(2t._childCount){t._addToMap();var it.getAllChildMarkers();this._featureGroup.removeLayer(i0),this._featureGroup.removeLayer(i1)}else t._updateIcon()},_extractNonGroupLayers:function(e,t){var i,ne.getLayers(),r0;for(tt||;r\u003Cn.length;r++)inr,i instanceof L.LayerGroup?this._extractNonGroupLayers(i,t):t.push(i);return t},_overrideMarkerIcon:function(e){var te.options.iconthis.options.iconCreateFunction({getChildCount:function(){return 1},getAllChildMarkers:function(){returne}});return t}});L.MarkerClusterGroup.include({_mapBoundsInfinite:new L.LatLngBounds(new L.LatLng(-1/0,-1/0),new L.LatLng(1/0,1/0))}),L.MarkerClusterGroup.include({_noAnimation:{_animationStart:function(){},_animationZoomIn:function(e,t){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this.fire(\\\animationend\\\)},_animationZoomOut:function(e,t){this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this.fire(\\\animationend\\\)},_animationAddLayer:function(e,t){this._animationAddLayerNonAnimated(e,t)}},_withAnimation:{_animationStart:function(){this._map._mapPane.className+\\\ leaflet-cluster-anim\\\,this._inZoomAnimation++},_animationZoomIn:function(e,t){var i,nthis._getExpandedVisibleBounds(),rthis._featureGroup,sMath.floor(this._map.getMinZoom());this._ignoreMove!0,this._topClusterLevel._recursively(n,e,s,function(s){var o,as._latlng,hs._markers;for(n.contains(a)||(anull),s._isSingleParent()&&e+1t?(r.removeLayer(s),s._recursivelyAddChildrenToMap(null,t,n)):(s.clusterHide(),s._recursivelyAddChildrenToMap(a,t,n)),ih.length-1;i>0;i--)ohi,n.contains(o._latlng)||r.removeLayer(o)}),this._forceLayout(),this._topClusterLevel._recursivelyBecomeVisible(n,t),r.eachLayer(function(e){e instanceof L.MarkerCluster||!e._icon||e.clusterShow()}),this._topClusterLevel._recursively(n,e,t,function(e){e._recursivelyRestoreChildPositions(t)}),this._ignoreMove!1,this._enqueue(function(){this._topClusterLevel._recursively(n,e,s,function(e){r.removeLayer(e),e.clusterShow()}),this._animationEnd()})},_animationZoomOut:function(e,t){this._animationZoomOutSingle(this._topClusterLevel,e-1,t),this._topClusterLevel._recursivelyAddChildrenToMap(null,t,this._getExpandedVisibleBounds()),this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds,Math.floor(this._map.getMinZoom()),e,this._getExpandedVisibleBounds())},_animationAddLayer:function(e,t){var ithis,nthis._featureGroup;n.addLayer(e),t!e&&(t._childCount>2?(t._updateIcon(),this._forceLayout(),this._animationStart(),e._setPos(this._map.latLngToLayerPoint(t.getLatLng())),e.clusterHide(),this._enqueue(function(){n.removeLayer(e),e.clusterShow(),i._animationEnd()})):(this._forceLayout(),i._animationStart(),i._animationZoomOutSingle(t,this._map.getMaxZoom(),this._zoom)))}},_animationZoomOutSingle:function(e,t,i){var nthis._getExpandedVisibleBounds(),rMath.floor(this._map.getMinZoom());e._recursivelyAnimateChildrenInAndAddSelfToMap(n,r,t+1,i);var sthis;this._forceLayout(),e._recursivelyBecomeVisible(n,i),this._enqueue(function(){if(1e._childCount){var oe._markers0;this._ignoreMove!0,o.setLatLng(o.getLatLng()),this._ignoreMove!1,o.clusterShow&&o.clusterShow()}else e._recursively(n,i,r,function(e){e._recursivelyRemoveChildrenFromMap(n,r,t+1)});s._animationEnd()})},_animationEnd:function(){this._map&&(this._map._mapPane.classNamethis._map._mapPane.className.replace(\\\ leaflet-cluster-anim\\\,\\\\\\)),this._inZoomAnimation--,this.fire(\\\animationend\\\)},_forceLayout:function(){L.Util.falseFn(document.body.offsetWidth)}}),L.markerClusterGroupfunction(e){return new L.MarkerClusterGroup(e)};var iL.MarkerClusterL.Marker.extend({options:L.Icon.prototype.options,initialize:function(e,t,i,n){L.Marker.prototype.initialize.call(this,i?i._cLatLng||i.getLatLng():new L.LatLng(0,0),{icon:this,pane:e.options.clusterPane}),this._groupe,this._zoomt,this._markers,this._childClusters,this._childCount0,this._iconNeedsUpdate!0,this._boundsNeedUpdate!0,this._boundsnew L.LatLngBounds,i&&this._addChild(i),n&&this._addChild(n)},getAllChildMarkers:function(e){ee||;for(var tthis._childClusters.length-1;t>0;t--)this._childClusterst.getAllChildMarkers(e);for(var ithis._markers.length-1;i>0;i--)e.push(this._markersi);return e},getChildCount:function(){return this._childCount},zoomToBounds:function(e){for(var t,ithis._childClusters.slice(),nthis._group._map,rn.getBoundsZoom(this._bounds),sthis._zoom+1,on.getZoom();i.length>0&&r>s;){s++;var a;for(t0;t\u003Ci.length;t++)aa.concat(it._childClusters);ia}r>s?this._group._map.setView(this._latlng,s):o>r?this._group._map.setView(this._latlng,o+1):this._group._map.fitBounds(this._bounds,e)},getBounds:function(){var enew L.LatLngBounds;return e.extend(this._bounds),e},_updateIcon:function(){this._iconNeedsUpdate!0,this._icon&&this.setIcon(this)},createIcon:function(){return this._iconNeedsUpdate&&(this._iconObjthis._group.options.iconCreateFunction(this),this._iconNeedsUpdate!1),this._iconObj.createIcon()},createShadow:function(){return this._iconObj.createShadow()},_addChild:function(e,t){this._iconNeedsUpdate!0,this._boundsNeedUpdate!0,this._setClusterCenter(e),e instanceof L.MarkerCluster?(t||(this._childClusters.push(e),e.__parentthis),this._childCount+e._childCount):(t||this._markers.push(e),this._childCount++),this.__parent&&this.__parent._addChild(e,!0)},_setClusterCenter:function(e){this._cLatLng||(this._cLatLnge._cLatLng||e._latlng)},_resetBounds:function(){var ethis._bounds;e._southWest&&(e._southWest.lat1/0,e._southWest.lng1/0),e._northEast&&(e._northEast.lat-1/0,e._northEast.lng-1/0)},_recalculateBounds:function(){var e,t,i,n,rthis._markers,sthis._childClusters,o0,a0,hthis._childCount;if(0!h){for(this._resetBounds(),e0;e\u003Cr.length;e++)ire._latlng,this._bounds.extend(i),o+i.lat,a+i.lng;for(e0;e\u003Cs.length;e++)tse,t._boundsNeedUpdate&&t._recalculateBounds(),this._bounds.extend(t._bounds),it._wLatLng,nt._childCount,o+i.lat*n,a+i.lng*n;this._latlngthis._wLatLngnew L.LatLng(o/h,a/h),this._boundsNeedUpdate!1}},_addToMap:function(e){e&&(this._backupLatlngthis._latlng,this.setLatLng(e)),this._group._featureGroup.addLayer(this)},_recursivelyAnimateChildrenIn:function(e,t,i){this._recursively(e,this._group._map.getMinZoom(),i-1,function(e){var i,n,re._markers;for(ir.length-1;i>0;i--)nri,n._icon&&(n._setPos(t),n.clusterHide())},function(e){var i,n,re._childClusters;for(ir.length-1;i>0;i--)nri,n._icon&&(n._setPos(t),n.clusterHide())})},_recursivelyAnimateChildrenInAndAddSelfToMap:function(e,t,i,n){this._recursively(e,n,t,function(r){r._recursivelyAnimateChildrenIn(e,r._group._map.latLngToLayerPoint(r.getLatLng()).round(),i),r._isSingleParent()&&i-1n?(r.clusterShow(),r._recursivelyRemoveChildrenFromMap(e,t,i)):r.clusterHide(),r._addToMap()})},_recursivelyBecomeVisible:function(e,t){this._recursively(e,this._group._map.getMinZoom(),t,null,function(e){e.clusterShow()})},_recursivelyAddChildrenToMap:function(e,t,i){this._recursively(i,this._group._map.getMinZoom()-1,t,function(n){if(t!n._zoom)for(var rn._markers.length-1;r>0;r--){var sn._markersr;i.contains(s._latlng)&&(e&&(s._backupLatlngs.getLatLng(),s.setLatLng(e),s.clusterHide&&s.clusterHide()),n._group._featureGroup.addLayer(s))}},function(t){t._addToMap(e)})},_recursivelyRestoreChildPositions:function(e){for(var tthis._markers.length-1;t>0;t--){var ithis._markerst;i._backupLatlng&&(i.setLatLng(i._backupLatlng),delete i._backupLatlng)}if(e-1this._zoom)for(var nthis._childClusters.length-1;n>0;n--)this._childClustersn._restorePosition();else for(var rthis._childClusters.length-1;r>0;r--)this._childClustersr._recursivelyRestoreChildPositions(e)},_restorePosition:function(){this._backupLatlng&&(this.setLatLng(this._backupLatlng),delete this._backupLatlng)},_recursivelyRemoveChildrenFromMap:function(e,t,i,n){var r,s;this._recursively(e,t-1,i-1,function(e){for(se._markers.length-1;s>0;s--)re._markerss,n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())},function(e){for(se._childClusters.length-1;s>0;s--)re._childClusterss,n&&n.contains(r._latlng)||(e._group._featureGroup.removeLayer(r),r.clusterShow&&r.clusterShow())})},_recursively:function(e,t,i,n,r){var s,o,athis._childClusters,hthis._zoom;if(h>t&&(n&&n(this),r&&hi&&r(this)),t>h||i>h)for(sa.length-1;s>0;s--)oas,e.intersects(o._bounds)&&o._recursively(e,t,i,n,r)},_isSingleParent:function(){return this._childClusters.length>0&&this._childClusters0._childCountthis._childCount}});L.Marker.include({clusterHide:function(){return this.options.opacityWhenUnclusteredthis.options.opacity||1,this.setOpacity(0)},clusterShow:function(){var ethis.setOpacity(this.options.opacity||this.options.opacityWhenUnclustered);return delete this.options.opacityWhenUnclustered,e}}),L.DistanceGridfunction(e){this._cellSizee,this._sqCellSizee*e,this._grid{},this._objectPoint{}},L.DistanceGrid.prototype{addObject:function(e,t){var ithis._getCoord(t.x),nthis._getCoord(t.y),rthis._grid,srnrn||{},osisi||,aL.Util.stamp(e);this._objectPointat,o.push(e)},updateObject:function(e,t){this.removeObject(e),this.addObject(e,t)},removeObject:function(e,t){var i,n,rthis._getCoord(t.x),sthis._getCoord(t.y),othis._grid,aosos||{},harar||;for(delete this._objectPointL.Util.stamp(e),i0,nh.length;n>i;i++)if(hie)return h.splice(i,1),1n&&delete ar,!0},eachObject:function(e,t){var i,n,r,s,o,a,h,lthis._grid;for(i in l){oli;for(n in o)for(aon,r0,sa.length;s>r;r++)he.call(t,ar),h&&(r--,s--)}},getNearObject:function(e){var t,i,n,r,s,o,a,h,lthis._getCoord(e.x),uthis._getCoord(e.y),_this._objectPoint,dthis._sqCellSize,cnull;for(tu-1;u+1>t;t++)if(rthis._gridt)for(il-1;l+1>i;i++)if(sri)for(n0,os.length;o>n;n++)asn,hthis._sqDist(_L.Util.stamp(a),e),(d>h||d>h&&nullc)&&(dh,ca);return c},_getCoord:function(e){var tMath.floor(e/this._cellSize);return isFinite(t)?t:e},_sqDist:function(e,t){var it.x-e.x,nt.y-e.y;return i*i+n*n}},function(){L.QuickHull{getDistant:function(e,t){var it1.lat-t0.lat,nt0.lng-t1.lng;return n*(e.lat-t0.lat)+i*(e.lng-t0.lng)},findMostDistantPointFromBaseLine:function(e,t){var i,n,r,s0,onull,a;for(it.length-1;i>0;i--)nti,rthis.getDistant(n,e),r>0&&(a.push(n),r>s&&(sr,on));return{maxPoint:o,newPoints:a}},buildConvexHull:function(e,t){var i,nthis.findMostDistantPointFromBaseLine(e,t);return n.maxPoint?(ii.concat(this.buildConvexHull(e0,n.maxPoint,n.newPoints)),ii.concat(this.buildConvexHull(n.maxPoint,e1,n.newPoints))):e0},getConvexHull:function(e){var t,i!1,n!1,r!1,s!1,onull,anull,hnull,lnull,unull,_null;for(te.length-1;t>0;t--){var det;(i!1||d.lat>i)&&(od,id.lat),(n!1||d.lat\u003Cn)&&(ad,nd.lat),(r!1||d.lng>r)&&(hd,rd.lng),(s!1||d.lng\u003Cs)&&(ld,sd.lng)}n!i?(_a,uo):(_l,uh);var c.concat(this.buildConvexHull(_,u,e),this.buildConvexHull(u,_,e));return c}}}(),L.MarkerCluster.include({getConvexHull:function(){var e,t,ithis.getAllChildMarkers(),n;for(ti.length-1;t>0;t--)eit.getLatLng(),n.push(e);return L.QuickHull.getConvexHull(n)}}),L.MarkerCluster.include({_2PI:2*Math.PI,_circleFootSeparation:25,_circleStartAngle:0,_spiralFootSeparation:28,_spiralLengthStart:11,_spiralLengthFactor:5,_circleSpiralSwitchover:9,spiderfy:function(){if(this._group._spiderfied!this&&!this._group._inZoomAnimation){var e,tthis.getAllChildMarkers(),ithis._group,ni._map,rn.latLngToLayerPoint(this._latlng);this._group._unspiderfy(),this._group._spiderfiedthis,t.length>this._circleSpiralSwitchover?ethis._generatePointsSpiral(t.length,r):(r.y+10,ethis._generatePointsCircle(t.length,r)),this._animationSpiderfy(t,e)}},unspiderfy:function(e){this._group._inZoomAnimation||(this._animationUnspiderfy(e),this._group._spiderfiednull)},_generatePointsCircle:function(e,t){var i,n,rthis._group.options.spiderfyDistanceMultiplier*this._circleFootSeparation*(2+e),sr/this._2PI,othis._2PI/e,a;for(sMath.max(s,35),a.lengthe,i0;e>i;i++)nthis._circleStartAngle+i*o,ainew L.Point(t.x+s*Math.cos(n),t.y+s*Math.sin(n))._round();return a},_generatePointsSpiral:function(e,t){var i,nthis._group.options.spiderfyDistanceMultiplier,rn*this._spiralLengthStart,sn*this._spiralFootSeparation,on*this._spiralLengthFactor*this._2PI,a0,h;for(h.lengthe,ie;i>0;i--)e>i&&(hinew L.Point(t.x+r*Math.cos(a),t.y+r*Math.sin(a))._round()),a+s/r+5e-4*i,r+o/a;return h},_noanimationUnspiderfy:function(){var e,t,ithis._group,ni._map,ri._featureGroup,sthis.getAllChildMarkers();for(i._ignoreMove!0,this.setOpacity(1),ts.length-1;t>0;t--)est,r.removeLayer(e),e._preSpiderfyLatlng&&(e.setLatLng(e._preSpiderfyLatlng),delete e._preSpiderfyLatlng),e.setZIndexOffset&&e.setZIndexOffset(0),e._spiderLeg&&(n.removeLayer(e._spiderLeg),delete e._spiderLeg);i.fire(\\\unspiderfied\\\,{cluster:this,markers:s}),i._ignoreMove!1,i._spiderfiednull}}),L.MarkerClusterNonAnimatedL.MarkerCluster.extend({_animationSpiderfy:function(e,t){var i,n,r,s,othis._group,ao._map,ho._featureGroup,lthis._group.options.spiderLegPolylineOptions;for(o._ignoreMove!0,i0;i\u003Ce.length;i++)sa.layerPointToLatLng(ti),nei,rnew L.Polyline(this._latlng,s,l),a.addLayer(r),n._spiderLegr,n._preSpiderfyLatlngn._latlng,n.setLatLng(s),n.setZIndexOffset&&n.setZIndexOffset(1e6),h.addLayer(n);this.setOpacity(.3),o._ignoreMove!1,o.fire(\\\spiderfied\\\,{cluster:this,markers:e})},_animationUnspiderfy:function(){this._noanimationUnspiderfy()}}),L.MarkerCluster.include({_animationSpiderfy:function(e,t){var i,n,r,s,o,a,hthis,lthis._group,ul._map,_l._featureGroup,dthis._latlng,cu.latLngToLayerPoint(d),pL.Path.SVG,fL.extend({},this._group.options.spiderLegPolylineOptions),mf.opacity;for(void 0m&&(mL.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity),p?(f.opacity0,f.className(f.className||\\\\\\)+\\\ leaflet-cluster-spider-leg\\\):f.opacitym,l._ignoreMove!0,i0;i\u003Ce.length;i++)nei,au.layerPointToLatLng(ti),rnew L.Polyline(d,a,f),u.addLayer(r),n._spiderLegr,p&&(sr._path,os.getTotalLength()+.1,s.style.strokeDasharrayo,s.style.strokeDashoffseto),n.setZIndexOffset&&n.setZIndexOffset(1e6),n.clusterHide&&n.clusterHide(),_.addLayer(n),n._setPos&&n._setPos(c);for(l._forceLayout(),l._animationStart(),ie.length-1;i>0;i--)au.layerPointToLatLng(ti),nei,n._preSpiderfyLatlngn._latlng,n.setLatLng(a),n.clusterShow&&n.clusterShow(),p&&(rn._spiderLeg,sr._path,s.style.strokeDashoffset0,r.setStyle({opacity:m}));this.setOpacity(.3),l._ignoreMove!1,setTimeout(function(){l._animationEnd(),l.fire(\\\spiderfied\\\,{cluster:h,markers:e})},200)},_animationUnspiderfy:function(e){var t,i,n,r,s,o,athis,hthis._group,lh._map,uh._featureGroup,_e?l._latLngToNewLayerPoint(this._latlng,e.zoom,e.center):l.latLngToLayerPoint(this._latlng),dthis.getAllChildMarkers(),cL.Path.SVG;for(h._ignoreMove!0,h._animationStart(),this.setOpacity(1),id.length-1;i>0;i--)tdi,t._preSpiderfyLatlng&&(t.closePopup(),t.setLatLng(t._preSpiderfyLatlng),delete t._preSpiderfyLatlng,o!0,t._setPos&&(t._setPos(_),o!1),t.clusterHide&&(t.clusterHide(),o!1),o&&u.removeLayer(t),c&&(nt._spiderLeg,rn._path,sr.getTotalLength()+.1,r.style.strokeDashoffsets,n.setStyle({opacity:0})));h._ignoreMove!1,setTimeout(function(){var e0;for(id.length-1;i>0;i--)tdi,t._spiderLeg&&e++;for(id.length-1;i>0;i--)tdi,t._spiderLeg&&(t.clusterShow&&t.clusterShow(),t.setZIndexOffset&&t.setZIndexOffset(0),e>1&&u.removeLayer(t),l.removeLayer(t._spiderLeg),delete t._spiderLeg);h._animationEnd(),h.fire(\\\unspiderfied\\\,{cluster:a,markers:d})},200)}}),L.MarkerClusterGroup.include({_spiderfied:null,unspiderfy:function(){this._unspiderfy.apply(this,arguments)},_spiderfierOnAdd:function(){this._map.on(\\\click\\\,this._unspiderfyWrapper,this),this._map.options.zoomAnimation&&this._map.on(\\\zoomstart\\\,this._unspiderfyZoomStart,this),this._map.on(\\\zoomend\\\,this._noanimationUnspiderfy,this),L.Browser.touch||this._map.getRenderer(this)},_spiderfierOnRemove:function(){this._map.off(\\\click\\\,this._unspiderfyWrapper,this),this._map.off(\\\zoomstart\\\,this._unspiderfyZoomStart,this),this._map.off(\\\zoomanim\\\,this._unspiderfyZoomAnim,this),this._map.off(\\\zoomend\\\,this._noanimationUnspiderfy,this),this._noanimationUnspiderfy()\\n},_unspiderfyZoomStart:function(){this._map&&this._map.on(\\\zoomanim\\\,this._unspiderfyZoomAnim,this)},_unspiderfyZoomAnim:function(e){L.DomUtil.hasClass(this._map._mapPane,\\\leaflet-touching\\\)||(this._map.off(\\\zoomanim\\\,this._unspiderfyZoomAnim,this),this._unspiderfy(e))},_unspiderfyWrapper:function(){this._unspiderfy()},_unspiderfy:function(e){this._spiderfied&&this._spiderfied.unspiderfy(e)},_noanimationUnspiderfy:function(){this._spiderfied&&this._spiderfied._noanimationUnspiderfy()},_unspiderfyLayer:function(e){e._spiderLeg&&(this._featureGroup.removeLayer(e),e.clusterShow&&e.clusterShow(),e.setZIndexOffset&&e.setZIndexOffset(0),this._map.removeLayer(e._spiderLeg),delete e._spiderLeg)}}),L.MarkerClusterGroup.include({refreshClusters:function(e){return e?e instanceof L.MarkerClusterGroup?ee._topClusterLevel.getAllChildMarkers():e instanceof L.LayerGroup?ee._layers:e instanceof L.MarkerCluster?ee.getAllChildMarkers():e instanceof L.Marker&&(ee):ethis._topClusterLevel.getAllChildMarkers(),this._flagParentsIconsNeedUpdate(e),this._refreshClustersIcons(),this.options.singleMarkerMode&&this._refreshSingleMarkerModeMarkers(e),this},_flagParentsIconsNeedUpdate:function(e){var t,i;for(t in e)for(iet.__parent;i;)i._iconNeedsUpdate!0,ii.__parent},_refreshSingleMarkerModeMarkers:function(e){var t,i;for(t in e)iet,this.hasLayer(i)&&i.setIcon(this._overrideMarkerIcon(i))}}),L.Marker.include({refreshIconOptions:function(e,t){var ithis.options.icon;return L.setOptions(i,e),this.setIcon(i),t&&this.__parent&&this.__parent._group.refreshClusters(this),this}}),e.MarkerClusterGroupt,e.MarkerClusteri});\\n//# sourceMappingURLleaflet.markercluster.js.map\\n}\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/sycom/leaflet/lib/leaflet.css\:{\title\:\$:/plugins/sycom/leaflet/lib/leaflet.css\,\text\:\/* required styles */\\n\\n.leaflet-pane,\\n.leaflet-tile,\\n.leaflet-marker-icon,\\n.leaflet-marker-shadow,\\n.leaflet-tile-container,\\n.leaflet-pane > svg,\\n.leaflet-pane > canvas,\\n.leaflet-zoom-box,\\n.leaflet-image-layer,\\n.leaflet-layer {\\n\\tposition: absolute;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\t}\\n.leaflet-container {\\n\\toverflow: hidden;\\n\\t}\\n.leaflet-tile,\\n.leaflet-marker-icon,\\n.leaflet-marker-shadow {\\n\\t-webkit-user-select: none;\\n\\t -moz-user-select: none;\\n\\t user-select: none;\\n\\t -webkit-user-drag: none;\\n\\t}\\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\\n.leaflet-safari .leaflet-tile {\\n\\timage-rendering: -webkit-optimize-contrast;\\n\\t}\\n/* hack that prevents hw layers \\\stretching\\\ when loading new tiles */\\n.leaflet-safari .leaflet-tile-container {\\n\\twidth: 1600px;\\n\\theight: 1600px;\\n\\t-webkit-transform-origin: 0 0;\\n\\t}\\n.leaflet-marker-icon,\\n.leaflet-marker-shadow {\\n\\tdisplay: block;\\n\\t}\\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\\n.leaflet-container .leaflet-overlay-pane svg,\\n.leaflet-container .leaflet-marker-pane img,\\n.leaflet-container .leaflet-shadow-pane img,\\n.leaflet-container .leaflet-tile-pane img,\\n.leaflet-container img.leaflet-image-layer {\\n\\tmax-width: none !important;\\n\\tmax-height: none !important;\\n\\t}\\n\\n.leaflet-container.leaflet-touch-zoom {\\n\\t-ms-touch-action: pan-x pan-y;\\n\\ttouch-action: pan-x pan-y;\\n\\t}\\n.leaflet-container.leaflet-touch-drag {\\n\\t-ms-touch-action: pinch-zoom;\\n\\t/* Fallback for FF which doesnt support pinch-zoom */\\n\\ttouch-action: none;\\n\\ttouch-action: pinch-zoom;\\n}\\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.leaflet-container {\\n\\t-webkit-tap-highlight-color: transparent;\\n}\\n.leaflet-container a {\\n\\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\\n}\\n.leaflet-tile {\\n\\tfilter: inherit;\\n\\tvisibility: hidden;\\n\\t}\\n.leaflet-tile-loaded {\\n\\tvisibility: inherit;\\n\\t}\\n.leaflet-zoom-box {\\n\\twidth: 0;\\n\\theight: 0;\\n\\t-moz-box-sizing: border-box;\\n\\t box-sizing: border-box;\\n\\tz-index: 800;\\n\\t}\\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id888319 */\\n.leaflet-overlay-pane svg {\\n\\t-moz-user-select: none;\\n\\t}\\n\\n.leaflet-pane { z-index: 400; }\\n\\n.leaflet-tile-pane { z-index: 200; }\\n.leaflet-overlay-pane { z-index: 400; }\\n.leaflet-shadow-pane { z-index: 500; }\\n.leaflet-marker-pane { z-index: 600; }\\n.leaflet-tooltip-pane { z-index: 650; }\\n.leaflet-popup-pane { z-index: 700; }\\n\\n.leaflet-map-pane canvas { z-index: 100; }\\n.leaflet-map-pane svg { z-index: 200; }\\n\\n.leaflet-vml-shape {\\n\\twidth: 1px;\\n\\theight: 1px;\\n\\t}\\n.lvml {\\n\\tbehavior: url(#default#VML);\\n\\tdisplay: inline-block;\\n\\tposition: absolute;\\n\\t}\\n\\n\\n/* control positioning */\\n\\n.leaflet-control {\\n\\tposition: relative;\\n\\tz-index: 800;\\n\\tpointer-events: visiblePainted; /* IE 9-10 doesnt have auto */\\n\\tpointer-events: auto;\\n\\t}\\n.leaflet-top,\\n.leaflet-bottom {\\n\\tposition: absolute;\\n\\tz-index: 1000;\\n\\tpointer-events: none;\\n\\t}\\n.leaflet-top {\\n\\ttop: 0;\\n\\t}\\n.leaflet-right {\\n\\tright: 0;\\n\\t}\\n.leaflet-bottom {\\n\\tbottom: 0;\\n\\t}\\n.leaflet-left {\\n\\tleft: 0;\\n\\t}\\n.leaflet-control {\\n\\tfloat: left;\\n\\tclear: both;\\n\\t}\\n.leaflet-right .leaflet-control {\\n\\tfloat: right;\\n\\t}\\n.leaflet-top .leaflet-control {\\n\\tmargin-top: 10px;\\n\\t}\\n.leaflet-bottom .leaflet-control {\\n\\tmargin-bottom: 10px;\\n\\t}\\n.leaflet-left .leaflet-control {\\n\\tmargin-left: 10px;\\n\\t}\\n.leaflet-right .leaflet-control {\\n\\tmargin-right: 10px;\\n\\t}\\n\\n\\n/* zoom and fade animations */\\n\\n.leaflet-fade-anim .leaflet-tile {\\n\\twill-change: opacity;\\n\\t}\\n.leaflet-fade-anim .leaflet-popup {\\n\\topacity: 0;\\n\\t-webkit-transition: opacity 0.2s linear;\\n\\t -moz-transition: opacity 0.2s linear;\\n\\t -o-transition: opacity 0.2s linear;\\n\\t transition: opacity 0.2s linear;\\n\\t}\\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\\n\\topacity: 1;\\n\\t}\\n.leaflet-zoom-animated {\\n\\t-webkit-transform-origin: 0 0;\\n\\t -ms-transform-origin: 0 0;\\n\\t transform-origin: 0 0;\\n\\t}\\n.leaflet-zoom-anim .leaflet-zoom-animated {\\n\\twill-change: transform;\\n\\t}\\n.leaflet-zoom-anim .leaflet-zoom-animated {\\n\\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\\n\\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\\n\\t -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1);\\n\\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\\n\\t}\\n.leaflet-zoom-anim .leaflet-tile,\\n.leaflet-pan-anim .leaflet-tile {\\n\\t-webkit-transition: none;\\n\\t -moz-transition: none;\\n\\t -o-transition: none;\\n\\t transition: none;\\n\\t}\\n\\n.leaflet-zoom-anim .leaflet-zoom-hide {\\n\\tvisibility: hidden;\\n\\t}\\n\\n\\n/* cursors */\\n\\n.leaflet-interactive {\\n\\tcursor: pointer;\\n\\t}\\n.leaflet-grab {\\n\\tcursor: -webkit-grab;\\n\\tcursor: -moz-grab;\\n\\t}\\n.leaflet-crosshair,\\n.leaflet-crosshair .leaflet-interactive {\\n\\tcursor: crosshair;\\n\\t}\\n.leaflet-popup-pane,\\n.leaflet-control {\\n\\tcursor: auto;\\n\\t}\\n.leaflet-dragging .leaflet-grab,\\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\\n.leaflet-dragging .leaflet-marker-draggable {\\n\\tcursor: move;\\n\\tcursor: -webkit-grabbing;\\n\\tcursor: -moz-grabbing;\\n\\t}\\n\\n/* marker & overlays interactivity */\\n.leaflet-marker-icon,\\n.leaflet-marker-shadow,\\n.leaflet-image-layer,\\n.leaflet-pane > svg path,\\n.leaflet-tile-container {\\n\\tpointer-events: none;\\n\\t}\\n\\n.leaflet-marker-icon.leaflet-interactive,\\n.leaflet-image-layer.leaflet-interactive,\\n.leaflet-pane > svg path.leaflet-interactive {\\n\\tpointer-events: visiblePainted; /* IE 9-10 doesnt have auto */\\n\\tpointer-events: auto;\\n\\t}\\n\\n/* visual tweaks */\\n\\n.leaflet-container {\\n\\tbackground: #ddd;\\n\\toutline: 0;\\n\\t}\\n.leaflet-container a {\\n\\tcolor: #0078A8;\\n\\t}\\n.leaflet-container a.leaflet-active {\\n\\toutline: 2px solid orange;\\n\\t}\\n.leaflet-zoom-box {\\n\\tborder: 2px dotted #38f;\\n\\tbackground: rgba(255,255,255,0.5);\\n\\t}\\n\\n\\n/* general typography */\\n.leaflet-container {\\n\\tfont: 12px/1.5 \\\Helvetica Neue\\\, Arial, Helvetica, sans-serif;\\n\\t}\\n\\n\\n/* general toolbar styles */\\n\\n.leaflet-bar {\\n\\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\\n\\tborder-radius: 4px;\\n\\t}\\n.leaflet-bar a,\\n.leaflet-bar a:hover {\\n\\tbackground-color: #fff;\\n\\tborder-bottom: 1px solid #ccc;\\n\\twidth: 26px;\\n\\theight: 26px;\\n\\tline-height: 26px;\\n\\tdisplay: block;\\n\\ttext-align: center;\\n\\ttext-decoration: none;\\n\\tcolor: black;\\n\\t}\\n.leaflet-bar a,\\n.leaflet-control-layers-toggle {\\n\\tbackground-position: 50% 50%;\\n\\tbackground-repeat: no-repeat;\\n\\tdisplay: block;\\n\\t}\\n.leaflet-bar a:hover {\\n\\tbackground-color: #f4f4f4;\\n\\t}\\n.leaflet-bar a:first-child {\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\t}\\n.leaflet-bar a:last-child {\\n\\tborder-bottom-left-radius: 4px;\\n\\tborder-bottom-right-radius: 4px;\\n\\tborder-bottom: none;\\n\\t}\\n.leaflet-bar a.leaflet-disabled {\\n\\tcursor: default;\\n\\tbackground-color: #f4f4f4;\\n\\tcolor: #bbb;\\n\\t}\\n\\n.leaflet-touch .leaflet-bar a {\\n\\twidth: 30px;\\n\\theight: 30px;\\n\\tline-height: 30px;\\n\\t}\\n.leaflet-touch .leaflet-bar a:first-child {\\n\\tborder-top-left-radius: 2px;\\n\\tborder-top-right-radius: 2px;\\n\\t}\\n.leaflet-touch .leaflet-bar a:last-child {\\n\\tborder-bottom-left-radius: 2px;\\n\\tborder-bottom-right-radius: 2px;\\n\\t}\\n\\n/* zoom control */\\n\\n.leaflet-control-zoom-in,\\n.leaflet-control-zoom-out {\\n\\tfont: bold 18px Lucida Console, Monaco, monospace;\\n\\ttext-indent: 1px;\\n\\t}\\n\\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\\n\\tfont-size: 22px;\\n\\t}\\n\\n\\n/* layers control */\\n\\n.leaflet-control-layers {\\n\\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\\n\\tbackground: #fff;\\n\\tborder-radius: 5px;\\n\\t}\\n.leaflet-control-layers-toggle {\\n\\tbackground-image: url(images/layers.png);\\n\\twidth: 36px;\\n\\theight: 36px;\\n\\t}\\n.leaflet-retina .leaflet-control-layers-toggle {\\n\\tbackground-image: url(images/layers-2x.png);\\n\\tbackground-size: 26px 26px;\\n\\t}\\n.leaflet-touch .leaflet-control-layers-toggle {\\n\\twidth: 44px;\\n\\theight: 44px;\\n\\t}\\n.leaflet-control-layers .leaflet-control-layers-list,\\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\\n\\tdisplay: none;\\n\\t}\\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\\n\\tdisplay: block;\\n\\tposition: relative;\\n\\t}\\n.leaflet-control-layers-expanded {\\n\\tpadding: 6px 10px 6px 6px;\\n\\tcolor: #333;\\n\\tbackground: #fff;\\n\\t}\\n.leaflet-control-layers-scrollbar {\\n\\toverflow-y: scroll;\\n\\toverflow-x: hidden;\\n\\tpadding-right: 5px;\\n\\t}\\n.leaflet-control-layers-selector {\\n\\tmargin-top: 2px;\\n\\tposition: relative;\\n\\ttop: 1px;\\n\\t}\\n.leaflet-control-layers label {\\n\\tdisplay: block;\\n\\t}\\n.leaflet-control-layers-separator {\\n\\theight: 0;\\n\\tborder-top: 1px solid #ddd;\\n\\tmargin: 5px -10px 5px -6px;\\n\\t}\\n\\n/* Default icon URLs */\\n.leaflet-default-icon-path {\\n\\tbackground-image: url(images/marker-icon.png);\\n\\t}\\n\\n\\n/* attribution and scale controls */\\n\\n.leaflet-container .leaflet-control-attribution {\\n\\tbackground: #fff;\\n\\tbackground: rgba(255, 255, 255, 0.7);\\n\\tmargin: 0;\\n\\t}\\n.leaflet-control-attribution,\\n.leaflet-control-scale-line {\\n\\tpadding: 0 5px;\\n\\tcolor: #333;\\n\\t}\\n.leaflet-control-attribution a {\\n\\ttext-decoration: none;\\n\\t}\\n.leaflet-control-attribution a:hover {\\n\\ttext-decoration: underline;\\n\\t}\\n.leaflet-container .leaflet-control-attribution,\\n.leaflet-container .leaflet-control-scale {\\n\\tfont-size: 11px;\\n\\t}\\n.leaflet-left .leaflet-control-scale {\\n\\tmargin-left: 5px;\\n\\t}\\n.leaflet-bottom .leaflet-control-scale {\\n\\tmargin-bottom: 5px;\\n\\t}\\n.leaflet-control-scale-line {\\n\\tborder: 2px solid #777;\\n\\tborder-top: none;\\n\\tline-height: 1.1;\\n\\tpadding: 2px 5px 1px;\\n\\tfont-size: 11px;\\n\\twhite-space: nowrap;\\n\\toverflow: hidden;\\n\\t-moz-box-sizing: border-box;\\n\\t box-sizing: border-box;\\n\\n\\tbackground: #fff;\\n\\tbackground: rgba(255, 255, 255, 0.5);\\n\\t}\\n.leaflet-control-scale-line:not(:first-child) {\\n\\tborder-top: 2px solid #777;\\n\\tborder-bottom: none;\\n\\tmargin-top: -2px;\\n\\t}\\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\\n\\tborder-bottom: 2px solid #777;\\n\\t}\\n\\n.leaflet-touch .leaflet-control-attribution,\\n.leaflet-touch .leaflet-control-layers,\\n.leaflet-touch .leaflet-bar {\\n\\tbox-shadow: none;\\n\\t}\\n.leaflet-touch .leaflet-control-layers,\\n.leaflet-touch .leaflet-bar {\\n\\tborder: 2px solid rgba(0,0,0,0.2);\\n\\tbackground-clip: padding-box;\\n\\t}\\n\\n\\n/* popup */\\n\\n.leaflet-popup {\\n\\tposition: absolute;\\n\\ttext-align: center;\\n\\tmargin-bottom: 20px;\\n\\t}\\n.leaflet-popup-content-wrapper {\\n\\tpadding: 1px;\\n\\ttext-align: left;\\n\\tborder-radius: 12px;\\n\\t}\\n.leaflet-popup-content {\\n\\tmargin: 13px 19px;\\n\\tline-height: 1.4;\\n\\t}\\n.leaflet-popup-content p {\\n\\tmargin: 18px 0;\\n\\t}\\n.leaflet-popup-tip-container {\\n\\twidth: 40px;\\n\\theight: 20px;\\n\\tposition: absolute;\\n\\tleft: 50%;\\n\\tmargin-left: -20px;\\n\\toverflow: hidden;\\n\\tpointer-events: none;\\n\\t}\\n.leaflet-popup-tip {\\n\\twidth: 17px;\\n\\theight: 17px;\\n\\tpadding: 1px;\\n\\n\\tmargin: -10px auto 0;\\n\\n\\t-webkit-transform: rotate(45deg);\\n\\t -moz-transform: rotate(45deg);\\n\\t -ms-transform: rotate(45deg);\\n\\t -o-transform: rotate(45deg);\\n\\t transform: rotate(45deg);\\n\\t}\\n.leaflet-popup-content-wrapper,\\n.leaflet-popup-tip {\\n\\tbackground: white;\\n\\tcolor: #333;\\n\\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\\n\\t}\\n.leaflet-container a.leaflet-popup-close-button {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tpadding: 4px 4px 0 0;\\n\\tborder: none;\\n\\ttext-align: center;\\n\\twidth: 18px;\\n\\theight: 14px;\\n\\tfont: 16px/14px Tahoma, Verdana, sans-serif;\\n\\tcolor: #c3c3c3;\\n\\ttext-decoration: none;\\n\\tfont-weight: bold;\\n\\tbackground: transparent;\\n\\t}\\n.leaflet-container a.leaflet-popup-close-button:hover {\\n\\tcolor: #999;\\n\\t}\\n.leaflet-popup-scrolled {\\n\\toverflow: auto;\\n\\tborder-bottom: 1px solid #ddd;\\n\\tborder-top: 1px solid #ddd;\\n\\t}\\n\\n.leaflet-oldie .leaflet-popup-content-wrapper {\\n\\tzoom: 1;\\n\\t}\\n.leaflet-oldie .leaflet-popup-tip {\\n\\twidth: 24px;\\n\\tmargin: 0 auto;\\n\\n\\t-ms-filter: \\\progid:DXImageTransform.Microsoft.Matrix(M110.70710678, M120.70710678, M21-0.70710678, M220.70710678)\\\;\\n\\tfilter: progid:DXImageTransform.Microsoft.Matrix(M110.70710678, M120.70710678, M21-0.70710678, M220.70710678);\\n\\t}\\n.leaflet-oldie .leaflet-popup-tip-container {\\n\\tmargin-top: -1px;\\n\\t}\\n\\n.leaflet-oldie .leaflet-control-zoom,\\n.leaflet-oldie .leaflet-control-layers,\\n.leaflet-oldie .leaflet-popup-content-wrapper,\\n.leaflet-oldie .leaflet-popup-tip {\\n\\tborder: 1px solid #999;\\n\\t}\\n\\n\\n/* div icon */\\n\\n.leaflet-div-icon {\\n\\tbackground: #fff;\\n\\tborder: 1px solid #666;\\n\\t}\\n\\n\\n/* Tooltip */\\n/* Base styles for the element that has a tooltip */\\n.leaflet-tooltip {\\n\\tposition: absolute;\\n\\tpadding: 6px;\\n\\tbackground-color: #fff;\\n\\tborder: 1px solid #fff;\\n\\tborder-radius: 3px;\\n\\tcolor: #222;\\n\\twhite-space: nowrap;\\n\\t-webkit-user-select: none;\\n\\t-moz-user-select: none;\\n\\t-ms-user-select: none;\\n\\tuser-select: none;\\n\\tpointer-events: none;\\n\\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\\n\\t}\\n.leaflet-tooltip.leaflet-clickable {\\n\\tcursor: pointer;\\n\\tpointer-events: auto;\\n\\t}\\n.leaflet-tooltip-top:before,\\n.leaflet-tooltip-bottom:before,\\n.leaflet-tooltip-left:before,\\n.leaflet-tooltip-right:before {\\n\\tposition: absolute;\\n\\tpointer-events: none;\\n\\tborder: 6px solid transparent;\\n\\tbackground: transparent;\\n\\tcontent: \\\\\\;\\n\\t}\\n\\n/* Directions */\\n\\n.leaflet-tooltip-bottom {\\n\\tmargin-top: 6px;\\n}\\n.leaflet-tooltip-top {\\n\\tmargin-top: -6px;\\n}\\n.leaflet-tooltip-bottom:before,\\n.leaflet-tooltip-top:before {\\n\\tleft: 50%;\\n\\tmargin-left: -6px;\\n\\t}\\n.leaflet-tooltip-top:before {\\n\\tbottom: 0;\\n\\tmargin-bottom: -12px;\\n\\tborder-top-color: #fff;\\n\\t}\\n.leaflet-tooltip-bottom:before {\\n\\ttop: 0;\\n\\tmargin-top: -12px;\\n\\tmargin-left: -6px;\\n\\tborder-bottom-color: #fff;\\n\\t}\\n.leaflet-tooltip-left {\\n\\tmargin-left: -6px;\\n}\\n.leaflet-tooltip-right {\\n\\tmargin-left: 6px;\\n}\\n.leaflet-tooltip-left:before,\\n.leaflet-tooltip-right:before {\\n\\ttop: 50%;\\n\\tmargin-top: -6px;\\n\\t}\\n.leaflet-tooltip-left:before {\\n\\tright: 0;\\n\\tmargin-right: -12px;\\n\\tborder-left-color: #fff;\\n\\t}\\n.leaflet-tooltip-right:before {\\n\\tleft: 0;\\n\\tmargin-left: -12px;\\n\\tborder-right-color: #fff;\\n\\t}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/sycom/leaflet/lib/leaflet.js\:{\title\:\$:/plugins/sycom/leaflet/lib/leaflet.js\,\text\:\var L;if($tw.browser){\\n/* @preserve\\n * Leaflet 1.3.1, a JS library for interactive maps. http://leafletjs.com\\n * (c) 2010-2017 Vladimir Agafonkin, (c) 2010-2011 CloudMade\\n */\\n!function(t,i){\\\object\\\typeof exports&&\\\undefined\\\!typeof module?i(exports):\\\function\\\typeof define&&define.amd?define(\\\exports\\\,i):i(t.L{})}(this,function(t){\\\use strict\\\;function i(t){var i,e,n,o;for(e1,narguments.length;e\u003Cn;e++){oargumentse;for(i in o)tioi}return t}function e(t,i){var eArray.prototype.slice;if(t.bind)return t.bind.apply(t,e.call(arguments,1));var ne.call(arguments,2);return function(){return t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}function n(t){return t._leaflet_idt._leaflet_id||++ti,t._leaflet_id}function o(t,i,e){var n,o,s,r;return rfunction(){n!1,o&&(s.apply(e,o),o!1)},sfunction(){n?oarguments:(t.apply(e,arguments),setTimeout(r,i),n!0)}}function s(t,i,e){var ni1,oi0,sn-o;return tn&&e?t:((t-o)%s+s)%s+o}function r(){return!1}function a(t,i){var eMath.pow(10,void 0i?6:i);return Math.round(t*e)/e}function h(t){return t.trim?t.trim():t.replace(/^\\\\s+|\\\\s+$/g,\\\\\\)}function u(t){return h(t).split(/\\\\s+/)}function l(t,i){t.hasOwnProperty(\\\options\\\)||(t.optionst.options?Qt(t.options):{});for(var e in i)t.optionseie;return t.options}function c(t,i,e){var n;for(var o in t)n.push(encodeURIComponent(e?o.toUpperCase():o)+\\\\\\+encodeURIComponent(to));return(i&&-1!i.indexOf(\\\?\\\)?\\\&\\\:\\\?\\\)+n.join(\\\&\\\)}function _(t,i){return t.replace(ii,function(t,e){var nie;if(void 0n)throw new Error(\\\No value provided for variable \\\+t);return\\\function\\\typeof n&&(nn(i)),n})}function d(t,i){for(var e0;e\u003Ct.length;e++)if(tei)return e;return-1}function p(t){return window\\\webkit\\\+t||window\\\moz\\\+t||window\\\ms\\\+t}function m(t){var i+new Date,eMath.max(0,16-(i-oi));return oii+e,window.setTimeout(t,e)}function f(t,i,n){if(!n||si!m)return si.call(window,e(t,i));t.call(i)}function g(t){t&&ri.call(window,t)}function v(){}function y(t){if(\\\undefined\\\!typeof L&&L&&L.Mixin){tei(t)?t:t;for(var i0;i\u003Ct.length;i++)tiL.Mixin.Events&&console.warn(\\\Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.\\\,(new Error).stack)}}function x(t,i,e){this.xe?Math.round(t):t,this.ye?Math.round(i):i}function w(t,i,e){return t instanceof x?t:ei(t)?new x(t0,t1):void 0t||nullt?t:\\\object\\\typeof t&&\\\x\\\in t&&\\\y\\\in t?new x(t.x,t.y):new x(t,i,e)}function P(t,i){if(t)for(var ei?t,i:t,n0,oe.length;n\u003Co;n++)this.extend(en)}function b(t,i){return!t||t instanceof P?t:new P(t,i)}function T(t,i){if(t)for(var ei?t,i:t,n0,oe.length;n\u003Co;n++)this.extend(en)}function z(t,i){return t instanceof T?t:new T(t,i)}function M(t,i,e){if(isNaN(t)||isNaN(i))throw new Error(\\\Invalid LatLng object: (\\\+t+\\\, \\\+i+\\\)\\\);this.lat+t,this.lng+i,void 0!e&&(this.alt+e)}function C(t,i,e){return t instanceof M?t:ei(t)&&\\\object\\\!typeof t0?3t.length?new M(t0,t1,t2):2t.length?new M(t0,t1):null:void 0t||nullt?t:\\\object\\\typeof t&&\\\lat\\\in t?new M(t.lat,\\\lng\\\in t?t.lng:t.lon,t.alt):void 0i?null:new M(t,i,e)}function Z(t,i,e,n){if(ei(t))return this._at0,this._bt1,this._ct2,void(this._dt3);this._at,this._bi,this._ce,this._dn}function S(t,i,e,n){return new Z(t,i,e,n)}function E(t){return document.createElementNS(\\\http://www.w3.org/2000/svg\\\,t)}function k(t,i){var e,n,o,s,r,a,h\\\\\\;for(e0,ot.length;e\u003Co;e++){for(n0,s(rte).length;n\u003Cs;n++)arn,h+(n?\\\L\\\:\\\M\\\)+a.x+\\\ \\\+a.y;h+i?Xi?\\\z\\\:\\\x\\\:\\\\\\}return h||\\\M0 0\\\}function I(t){return navigator.userAgent.toLowerCase().indexOf(t)>0}function A(t,i,e,n){return\\\touchstart\\\i?O(t,e,n):\\\touchmove\\\i?W(t,e,n):\\\touchend\\\i&&H(t,e,n),this}function B(t,i,e){var nt\\\_leaflet_\\\+i+e;return\\\touchstart\\\i?t.removeEventListener(Qi,n,!1):\\\touchmove\\\i?t.removeEventListener(te,n,!1):\\\touchend\\\i&&(t.removeEventListener(ie,n,!1),t.removeEventListener(ee,n,!1)),this}function O(t,i,n){var oe(function(t){if(\\\mouse\\\!t.pointerType&&t.MSPOINTER_TYPE_MOUSE&&t.pointerType!t.MSPOINTER_TYPE_MOUSE){if(!(ne.indexOf(t.target.tagName)\u003C0))return;$(t)}j(t,i)});t\\\_leaflet_touchstart\\\+no,t.addEventListener(Qi,o,!1),se||(document.documentElement.addEventListener(Qi,R,!0),document.documentElement.addEventListener(te,D,!0),document.documentElement.addEventListener(ie,N,!0),document.documentElement.addEventListener(ee,N,!0),se!0)}function R(t){oet.pointerIdt,re++}function D(t){oet.pointerId&&(oet.pointerIdt)}function N(t){delete oet.pointerId,re--}function j(t,i){t.touches;for(var e in oe)t.touches.push(oee);t.changedTouchest,i(t)}function W(t,i,e){var nfunction(t){(t.pointerType!t.MSPOINTER_TYPE_MOUSE&&\\\mouse\\\!t.pointerType||0!t.buttons)&&j(t,i)};t\\\_leaflet_touchmove\\\+en,t.addEventListener(te,n,!1)}function H(t,i,e){var nfunction(t){j(t,i)};t\\\_leaflet_touchend\\\+en,t.addEventListener(ie,n,!1),t.addEventListener(ee,n,!1)}function F(t,i,e){function n(t){var i;if(Ui){if(!Pi||\\\mouse\\\t.pointerType)return;ire}else it.touches.length;if(!(i>1)){var eDate.now(),ne-(s||e);rt.touches?t.touches0:t,an>0&&n\u003Ch,se}}function o(t){if(a&&!r.cancelBubble){if(Ui){if(!Pi||\\\mouse\\\t.pointerType)return;var e,n,o{};for(n in r)ern,one&&e.bind?e.bind(r):e;ro}r.type\\\dblclick\\\,i(r),snull}}var s,r,a!1,h250;return tue+ae+en,tue+he+eo,tue+\\\dblclick\\\+ei,t.addEventListener(ae,n,!1),t.addEventListener(he,o,!1),t.addEventListener(\\\dblclick\\\,i,!1),this}function U(t,i){var etue+ae+i,ntue+he+i,otue+\\\dblclick\\\+i;return t.removeEventListener(ae,e,!1),t.removeEventListener(he,n,!1),Pi||t.removeEventListener(\\\dblclick\\\,o,!1),this}function V(t,i,e,n){if(\\\object\\\typeof i)for(var o in i)G(t,o,io,e);else for(var s0,r(iu(i)).length;s\u003Cr;s++)G(t,is,e,n);return this}function q(t,i,e,n){if(\\\object\\\typeof i)for(var o in i)K(t,o,io,e);else if(i)for(var s0,r(iu(i)).length;s\u003Cr;s++)K(t,is,e,n);else{for(var a in tle)K(t,a,tlea);delete tle}return this}function G(t,i,e,o){var si+n(e)+(o?\\\_\\\+n(o):\\\\\\);if(tle&&tles)return this;var rfunction(i){return e.call(o||t,i||window.event)},ar;Ui&&0i.indexOf(\\\touch\\\)?A(t,i,r,s):!Vi||\\\dblclick\\\!i||!F||Ui&&Si?\\\addEventListener\\\in t?\\\mousewheel\\\i?t.addEventListener(\\\onwheel\\\in t?\\\wheel\\\:\\\mousewheel\\\,r,!1):\\\mouseenter\\\i||\\\mouseleave\\\i?(rfunction(i){ii||window.event,ot(t,i)&&a(i)},t.addEventListener(\\\mouseenter\\\i?\\\mouseover\\\:\\\mouseout\\\,r,!1)):(\\\click\\\i&&Ti&&(rfunction(t){st(t,a)}),t.addEventListener(i,r,!1)):\\\attachEvent\\\in t&&t.attachEvent(\\\on\\\+i,r):F(t,r,s),tletle||{},tlesr}function K(t,i,e,o){var si+n(e)+(o?\\\_\\\+n(o):\\\\\\),rtle&&tles;if(!r)return this;Ui&&0i.indexOf(\\\touch\\\)?B(t,i,s):!Vi||\\\dblclick\\\!i||!U||Ui&&Si?\\\removeEventListener\\\in t?\\\mousewheel\\\i?t.removeEventListener(\\\onwheel\\\in t?\\\wheel\\\:\\\mousewheel\\\,r,!1):t.removeEventListener(\\\mouseenter\\\i?\\\mouseover\\\:\\\mouseleave\\\i?\\\mouseout\\\:i,r,!1):\\\detachEvent\\\in t&&t.detachEvent(\\\on\\\+i,r):U(t,s),tlesnull}function Y(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped!0:t.cancelBubble!0,nt(t),this}function X(t){return G(t,\\\mousewheel\\\,Y),this}function J(t){return V(t,\\\mousedown touchstart dblclick\\\,Y),G(t,\\\click\\\,et),this}function $(t){return t.preventDefault?t.preventDefault():t.returnValue!1,this}function Q(t){return $(t),Y(t),this}function tt(t,i){if(!i)return new x(t.clientX,t.clientY);var ei.getBoundingClientRect(),ne.width/i.offsetWidth||1,oe.height/i.offsetHeight||1;return new x(t.clientX/n-e.left-i.clientLeft,t.clientY/o-e.top-i.clientTop)}function it(t){return Pi?t.wheelDeltaY/2:t.deltaY&&0t.deltaMode?-t.deltaY/ce:t.deltaY&&1t.deltaMode?20*-t.deltaY:t.deltaY&&2t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)\u003C32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function et(t){_et.type!0}function nt(t){var i_et.type;return _et.type!1,i}function ot(t,i){var ei.relatedTarget;if(!e)return!0;try{for(;e&&e!t;)ee.parentNode}catch(t){return!1}return e!t}function st(t,i){var et.timeStamp||t.originalEvent&&t.originalEvent.timeStamp,npi&&e-pi;n&&n>100&&n\u003C500||t.target._simulatedClick&&!t._simulated?Q(t):(pie,i(t))}function rt(t){return\\\string\\\typeof t?document.getElementById(t):t}function at(t,i){var et.stylei||t.currentStyle&&t.currentStylei;if((!e||\\\auto\\\e)&&document.defaultView){var ndocument.defaultView.getComputedStyle(t,null);en?ni:null}return\\\auto\\\e?null:e}function ht(t,i,e){var ndocument.createElement(t);return n.classNamei||\\\\\\,e&&e.appendChild(n),n}function ut(t){var it.parentNode;i&&i.removeChild(t)}function lt(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function ct(t){var it.parentNode;i.lastChild!t&&i.appendChild(t)}function _t(t){var it.parentNode;i.firstChild!t&&i.insertBefore(t,i.firstChild)}function dt(t,i){if(void 0!t.classList)return t.classList.contains(i);var egt(t);return e.length>0&&new RegExp(\\\(^|\\\\\\\\s)\\\+i+\\\(\\\\\\\\s|$)\\\).test(e)}function pt(t,i){if(void 0!t.classList)for(var eu(i),n0,oe.length;n\u003Co;n++)t.classList.add(en);else if(!dt(t,i)){var sgt(t);ft(t,(s?s+\\\ \\\:\\\\\\)+i)}}function mt(t,i){void 0!t.classList?t.classList.remove(i):ft(t,h((\\\ \\\+gt(t)+\\\ \\\).replace(\\\ \\\+i+\\\ \\\,\\\ \\\)))}function ft(t,i){void 0t.className.baseVal?t.classNamei:t.className.baseVali}function gt(t){return void 0t.className.baseVal?t.className:t.className.baseVal}function vt(t,i){\\\opacity\\\in t.style?t.style.opacityi:\\\filter\\\in t.style&&yt(t,i)}function yt(t,i){var e!1,n\\\DXImageTransform.Microsoft.Alpha\\\;try{et.filters.item(n)}catch(t){if(1i)return}iMath.round(100*i),e?(e.Enabled100!i,e.Opacityi):t.style.filter+\\\ progid:\\\+n+\\\(opacity\\\+i+\\\)\\\}function xt(t){for(var idocument.documentElement.style,e0;e\u003Ct.length;e++)if(tein i)return te;return!1}function wt(t,i,e){var ni||new x(0,0);t.stylepe(Oi?\\\translate(\\\+n.x+\\\px,\\\+n.y+\\\px)\\\:\\\translate3d(\\\+n.x+\\\px,\\\+n.y+\\\px,0)\\\)+(e?\\\ scale(\\\+e+\\\)\\\:\\\\\\)}function Lt(t,i){t._leaflet_posi,Ni?wt(t,i):(t.style.lefti.x+\\\px\\\,t.style.topi.y+\\\px\\\)}function Pt(t){return t._leaflet_pos||new x(0,0)}function bt(){V(window,\\\dragstart\\\,$)}function Tt(){q(window,\\\dragstart\\\,$)}function zt(t){for(;-1t.tabIndex;)tt.parentNode;t.style&&(Mt(),vet,yet.style.outline,t.style.outline\\\none\\\,V(window,\\\keydown\\\,Mt))}function Mt(){ve&&(ve.style.outlineye,vevoid 0,yevoid 0,q(window,\\\keydown\\\,Mt))}function Ct(t,i){if(!i||!t.length)return t.slice();var ei*i;return tkt(t,e),tSt(t,e)}function Zt(t,i,e){return Math.sqrt(Rt(t,i,e,!0))}function St(t,i){var et.length,nnew(typeof Uint8Array!void 0+\\\\\\?Uint8Array:Array)(e);n0ne-11,Et(t,n,i,0,e-1);var o,s;for(o0;o\u003Ce;o++)no&&s.push(to);return s}function Et(t,i,e,n,o){var s,r,a,h0;for(rn+1;r\u003Co-1;r++)(aRt(tr,tn,to,!0))>h&&(sr,ha);h>e&&(is1,Et(t,i,e,n,s),Et(t,i,e,s,o))}function kt(t,i){for(var et0,n1,o0,st.length;n\u003Cs;n++)Ot(tn,to)>i&&(e.push(tn),on);return o\u003Cs-1&&e.push(ts-1),e}function It(t,i,e,n,o){var s,r,a,hn?Se:Bt(t,e),uBt(i,e);for(Seu;;){if(!(h|u))returnt,i;if(h&u)return!1;aBt(rAt(t,i,sh||u,e,o),e),sh?(tr,ha):(ir,ua)}}function At(t,i,e,n,o){var s,r,ai.x-t.x,hi.y-t.y,un.min,ln.max;return 8&e?(st.x+a*(l.y-t.y)/h,rl.y):4&e?(st.x+a*(u.y-t.y)/h,ru.y):2&e?(sl.x,rt.y+h*(l.x-t.x)/a):1&e&&(su.x,rt.y+h*(u.x-t.x)/a),new x(s,r,o)}function Bt(t,i){var e0;return t.x\u003Ci.min.x?e|1:t.x>i.max.x&&(e|2),t.y\u003Ci.min.y?e|4:t.y>i.max.y&&(e|8),e}function Ot(t,i){var ei.x-t.x,ni.y-t.y;return e*e+n*n}function Rt(t,i,e,n){var o,si.x,ri.y,ae.x-s,he.y-r,ua*a+h*h;return u>0&&((o((t.x-s)*a+(t.y-r)*h)/u)>1?(se.x,re.y):o>0&&(s+a*o,r+h*o)),at.x-s,ht.y-r,n?a*a+h*h:new x(s,r)}function Dt(t){return!ei(t0)||\\\object\\\!typeof t00&&void 0!t00}function Nt(t){return console.warn(\\\Deprecated use of _flat, please use L.LineUtil.isFlat instead.\\\),Dt(t)}function jt(t,i,e){var n,o,s,r,a,h,u,l,c,_1,4,2,8;for(o0,ut.length;o\u003Cu;o++)to._codeBt(to,i);for(r0;r\u003C4;r++){for(l_r,n,o0,s(ut.length)-1;o\u003Cu;so++)ato,hts,a._code&l?h._code&l||((cAt(h,a,l,i,e))._codeBt(c,i),n.push(c)):(h._code&l&&((cAt(h,a,l,i,e))._codeBt(c,i),n.push(c)),n.push(a));tn}return t}function Wt(t,i){var e,n,o,s,r\\\Feature\\\t.type?t.geometry:t,ar?r.coordinates:null,h,ui&&i.pointToLayer,li&&i.coordsToLatLng||Ht;if(!a&&!r)return null;switch(r.type){case\\\Point\\\:return el(a),u?u(t,e):new Xe(e);case\\\MultiPoint\\\:for(o0,sa.length;o\u003Cs;o++)el(ao),h.push(u?u(t,e):new Xe(e));return new qe(h);case\\\LineString\\\:case\\\MultiLineString\\\:return nFt(a,\\\LineString\\\r.type?0:1,l),new tn(n,i);case\\\Polygon\\\:case\\\MultiPolygon\\\:return nFt(a,\\\Polygon\\\r.type?1:2,l),new en(n,i);case\\\GeometryCollection\\\:for(o0,sr.geometries.length;o\u003Cs;o++){var cWt({geometry:r.geometrieso,type:\\\Feature\\\,properties:t.properties},i);c&&h.push(c)}return new qe(h);default:throw new Error(\\\Invalid GeoJSON object.\\\)}}function Ht(t){return new M(t1,t0,t2)}function Ft(t,i,e){for(var n,o,s0,rt.length;s\u003Cr;s++)ni?Ft(ts,i-1,e):(e||Ht)(ts),o.push(n);return o}function Ut(t,i){return i\\\number\\\typeof i?i:6,void 0!t.alt?a(t.lng,i),a(t.lat,i),a(t.alt,i):a(t.lng,i),a(t.lat,i)}function Vt(t,i,e,n){for(var o,s0,rt.length;s\u003Cr;s++)o.push(i?Vt(ts,i-1,e,n):Ut(ts,n));return!i&&e&&o.push(o0),o}function qt(t,e){return t.feature?i({},t.feature,{geometry:e}):Gt(e)}function Gt(t){return\\\Feature\\\t.type||\\\FeatureCollection\\\t.type?t:{type:\\\Feature\\\,properties:{},geometry:t}}function Kt(t,i){return new nn(t,i)}function Yt(t,i){return new dn(t,i)}function Xt(t){return Yi?new fn(t):null}function Jt(t){return Xi||Ji?new xn(t):null}var $tObject.freeze;Object.freezefunction(t){return t};var QtObject.create||function(){function t(){}return function(i){return t.prototypei,new t}}(),ti0,ii/\\\\{ *(\\\\w_-+) *\\\\}/g,eiArray.isArray||function(t){return\\\object Array\\\Object.prototype.toString.call(t)},ni\\\data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs\\\,oi0,siwindow.requestAnimationFrame||p(\\\RequestAnimationFrame\\\)||m,riwindow.cancelAnimationFrame||p(\\\CancelAnimationFrame\\\)||p(\\\CancelRequestAnimationFrame\\\)||function(t){window.clearTimeout(t)},ai(Object.freeze||Object)({freeze:$t,extend:i,create:Qt,bind:e,lastId:ti,stamp:n,throttle:o,wrapNum:s,falseFn:r,formatNum:a,trim:h,splitWords:u,setOptions:l,getParamString:c,template:_,isArray:ei,indexOf:d,emptyImageUrl:ni,requestFn:si,cancelFn:ri,requestAnimFrame:f,cancelAnimFrame:g});v.extendfunction(t){var efunction(){this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},ne.__super__this.prototype,oQt(n);o.constructore,e.prototypeo;for(var s in this)this.hasOwnProperty(s)&&\\\prototype\\\!s&&\\\__super__\\\!s&&(esthiss);return t.statics&&(i(e,t.statics),delete t.statics),t.includes&&(y(t.includes),i.apply(null,o.concat(t.includes)),delete t.includes),o.options&&(t.optionsi(Qt(o.options),t.options)),i(o,t),o._initHooks,o.callInitHooksfunction(){if(!this._initHooksCalled){n.callInitHooks&&n.callInitHooks.call(this),this._initHooksCalled!0;for(var t0,io._initHooks.length;t\u003Ci;t++)o._initHookst.call(this)}},e},v.includefunction(t){return i(this.prototype,t),this},v.mergeOptionsfunction(t){return i(this.prototype.options,t),this},v.addInitHookfunction(t){var iArray.prototype.slice.call(arguments,1),e\\\function\\\typeof t?t:function(){thist.apply(this,i)};return this.prototype._initHooksthis.prototype._initHooks||,this.prototype._initHooks.push(e),this};var hi{on:function(t,i,e){if(\\\object\\\typeof t)for(var n in t)this._on(n,tn,i);else for(var o0,s(tu(t)).length;o\u003Cs;o++)this._on(to,i,e);return this},off:function(t,i,e){if(t)if(\\\object\\\typeof t)for(var n in t)this._off(n,tn,i);else for(var o0,s(tu(t)).length;o\u003Cs;o++)this._off(to,i,e);else delete this._events;return this},_on:function(t,i,e){this._eventsthis._events||{};var nthis._eventst;n||(n,this._eventstn),ethis&&(evoid 0);for(var o{fn:i,ctx:e},sn,r0,as.length;r\u003Ca;r++)if(sr.fni&&sr.ctxe)return;s.push(o)},_off:function(t,i,e){var n,o,s;if(this._events&&(nthis._eventst))if(i){if(ethis&&(evoid 0),n)for(o0,sn.length;o\u003Cs;o++){var ano;if(a.ctxe&&a.fni)return a.fnr,this._firingCount&&(this._eventstnn.slice()),void n.splice(o,1)}}else{for(o0,sn.length;o\u003Cs;o++)no.fnr;delete this._eventst}},fire:function(t,e,n){if(!this.listens(t,n))return this;var oi({},e,{type:t,target:this,sourceTarget:e&&e.sourceTarget||this});if(this._events){var sthis._eventst;if(s){this._firingCountthis._firingCount+1||1;for(var r0,as.length;r\u003Ca;r++){var hsr;h.fn.call(h.ctx||this,o)}this._firingCount--}}return n&&this._propagateEvent(o),this},listens:function(t,i){var ethis._events&&this._eventst;if(e&&e.length)return!0;if(i)for(var n in this._eventParents)if(this._eventParentsn.listens(t,i))return!0;return!1},once:function(t,i,n){if(\\\object\\\typeof t){for(var o in t)this.once(o,to,i);return this}var se(function(){this.off(t,i,n).off(t,s,n)},this);return this.on(t,i,n).on(t,s,n)},addEventParent:function(t){return this._eventParentsthis._eventParents||{},this._eventParentsn(t)t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParentsn(t),this},_propagateEvent:function(t){for(var e in this._eventParents)this._eventParentse.fire(t.type,i({layer:t.target,propagatedFrom:t.target},t),!0)}};hi.addEventListenerhi.on,hi.removeEventListenerhi.clearAllEventListenershi.off,hi.addOneTimeEventListenerhi.once,hi.fireEventhi.fire,hi.hasEventListenershi.listens;var uiv.extend(hi),liMath.trunc||function(t){return t>0?Math.floor(t):Math.ceil(t)};x.prototype{clone:function(){return new x(this.x,this.y)},add:function(t){return this.clone()._add(w(t))},_add:function(t){return this.x+t.x,this.y+t.y,this},subtract:function(t){return this.clone()._subtract(w(t))},_subtract:function(t){return this.x-t.x,this.y-t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/t,this.y/t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*t,this.y*t,this},scaleBy:function(t){return new x(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new x(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.xMath.round(this.x),this.yMath.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.xMath.floor(this.x),this.yMath.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.xMath.ceil(this.x),this.yMath.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.xli(this.x),this.yli(this.y),this},distanceTo:function(t){var i(tw(t)).x-this.x,et.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(tw(t)).xthis.x&&t.ythis.y},contains:function(t){return tw(t),Math.abs(t.x)\u003CMath.abs(this.x)&&Math.abs(t.y)\u003CMath.abs(this.y)},toString:function(){return\\\Point(\\\+a(this.x)+\\\, \\\+a(this.y)+\\\)\\\}},P.prototype{extend:function(t){return tw(t),this.min||this.max?(this.min.xMath.min(t.x,this.min.x),this.max.xMath.max(t.x,this.max.x),this.min.yMath.min(t.y,this.min.y),this.max.yMath.max(t.y,this.max.y)):(this.mint.clone(),this.maxt.clone()),this},getCenter:function(t){return new x((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new x(this.min.x,this.max.y)},getTopRight:function(){return new x(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t\\\number\\\typeof t0||t instanceof x?w(t):b(t))instanceof P?(it.min,et.max):iet,i.x>this.min.x&&e.x\u003Cthis.max.x&&i.y>this.min.y&&e.y\u003Cthis.max.y},intersects:function(t){tb(t);var ithis.min,ethis.max,nt.min,ot.max,so.x>i.x&&n.x\u003Ce.x,ro.y>i.y&&n.y\u003Ce.y;return s&&r},overlaps:function(t){tb(t);var ithis.min,ethis.max,nt.min,ot.max,so.x>i.x&&n.x\u003Ce.x,ro.y>i.y&&n.y\u003Ce.y;return s&&r},isValid:function(){return!(!this.min||!this.max)}},T.prototype{extend:function(t){var i,e,nthis._southWest,othis._northEast;if(t instanceof M)it,et;else{if(!(t instanceof T))return t?this.extend(C(t)||z(t)):this;if(it._southWest,et._northEast,!i||!e)return this}return n||o?(n.latMath.min(i.lat,n.lat),n.lngMath.min(i.lng,n.lng),o.latMath.max(e.lat,o.lat),o.lngMath.max(e.lng,o.lng)):(this._southWestnew M(i.lat,i.lng),this._northEastnew M(e.lat,e.lng)),this},pad:function(t){var ithis._southWest,ethis._northEast,nMath.abs(i.lat-e.lat)*t,oMath.abs(i.lng-e.lng)*t;return new T(new M(i.lat-n,i.lng-o),new M(e.lat+n,e.lng+o))},getCenter:function(){return new M((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new M(this.getNorth(),this.getWest())},getSouthEast:function(){return new M(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t\\\number\\\typeof t0||t instanceof M||\\\lat\\\in t?C(t):z(t);var i,e,nthis._southWest,othis._northEast;return t instanceof T?(it.getSouthWest(),et.getNorthEast()):iet,i.lat>n.lat&&e.lat\u003Co.lat&&i.lng>n.lng&&e.lng\u003Co.lng},intersects:function(t){tz(t);var ithis._southWest,ethis._northEast,nt.getSouthWest(),ot.getNorthEast(),so.lat>i.lat&&n.lat\u003Ce.lat,ro.lng>i.lng&&n.lng\u003Ce.lng;return s&&r},overlaps:function(t){tz(t);var ithis._southWest,ethis._northEast,nt.getSouthWest(),ot.getNorthEast(),so.lat>i.lat&&n.lat\u003Ce.lat,ro.lng>i.lng&&n.lng\u003Ce.lng;return s&&r},toBBoxString:function(){returnthis.getWest(),this.getSouth(),this.getEast(),this.getNorth().join(\\\,\\\)},equals:function(t,i){return!!t&&(tz(t),this._southWest.equals(t.getSouthWest(),i)&&this._northEast.equals(t.getNorthEast(),i))},isValid:function(){return!(!this._southWest||!this._northEast)}},M.prototype{equals:function(t,i){return!!t&&(tC(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))\u003C(void 0i?1e-9:i))},toString:function(t){return\\\LatLng(\\\+a(this.lat,t)+\\\, \\\+a(this.lng,t)+\\\)\\\},distanceTo:function(t){return _i.distance(this,C(t))},wrap:function(){return _i.wrapLatLng(this)},toBounds:function(t){var i180*t/40075017,ei/Math.cos(Math.PI/180*this.lat);return z(this.lat-i,this.lng-e,this.lat+i,this.lng+e)},clone:function(){return new M(this.lat,this.lng,this.alt)}};var ci{latLngToPoint:function(t,i){var ethis.projection.project(t),nthis.scale(i);return this.transformation._transform(e,n)},pointToLatLng:function(t,i){var ethis.scale(i),nthis.transformation.untransform(t,e);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return null;var ithis.projection.bounds,ethis.scale(t);return new P(this.transformation.transform(i.min,e),this.transformation.transform(i.max,e))},infinite:!1,wrapLatLng:function(t){var ithis.wrapLng?s(t.lng,this.wrapLng,!0):t.lng;return new M(this.wrapLat?s(t.lat,this.wrapLat,!0):t.lat,i,t.alt)},wrapLatLngBounds:function(t){var it.getCenter(),ethis.wrapLatLng(i),ni.lat-e.lat,oi.lng-e.lng;if(0n&&0o)return t;var st.getSouthWest(),rt.getNorthEast();return new T(new M(s.lat-n,s.lng-o),new M(r.lat-n,r.lng-o))}},_ii({},ci,{wrapLng:-180,180,R:6371e3,distance:function(t,i){var eMath.PI/180,nt.lat*e,oi.lat*e,sMath.sin((i.lat-t.lat)*e/2),rMath.sin((i.lng-t.lng)*e/2),as*s+Math.cos(n)*Math.cos(o)*r*r,h2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return this.R*h}}),di{R:6378137,MAX_LATITUDE:85.0511287798,project:function(t){var iMath.PI/180,ethis.MAX_LATITUDE,nMath.max(Math.min(e,t.lat),-e),oMath.sin(n*i);return new x(this.R*t.lng*i,this.R*Math.log((1+o)/(1-o))/2)},unproject:function(t){var i180/Math.PI;return new M((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*i,t.x*i/this.R)},bounds:function(){var t6378137*Math.PI;return new P(-t,-t,t,t)}()};Z.prototype{transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return ii||1,t.xi*(this._a*t.x+this._b),t.yi*(this._c*t.y+this._d),t},untransform:function(t,i){return ii||1,new x((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}};var pi,mi,fi,gi,vii({},_i,{code:\\\EPSG:3857\\\,projection:di,transformation:function(){var t.5/(Math.PI*di.R);return S(t,.5,-t,.5)}()}),yii({},vi,{code:\\\EPSG:900913\\\}),xidocument.documentElement.style,wi\\\ActiveXObject\\\in window,Liwi&&!document.addEventListener,Pi\\\msLaunchUri\\\in navigator&&!(\\\documentMode\\\in document),biI(\\\webkit\\\),TiI(\\\android\\\),ziI(\\\android 2\\\)||I(\\\android 3\\\),MiparseInt(/WebKit\\\\/(0-9+)|$/.exec(navigator.userAgent)1,10),CiTi&&I(\\\Google\\\)&&Mi\u003C537&&!(\\\AudioNode\\\in window),Zi!!window.opera,SiI(\\\chrome\\\),EiI(\\\gecko\\\)&&!bi&&!Zi&&!wi,ki!Si&&I(\\\safari\\\),IiI(\\\phantom\\\),Ai\\\OTransition\\\in xi,Bi0navigator.platform.indexOf(\\\Win\\\),Oiwi&&\\\transition\\\in xi,Ri\\\WebKitCSSMatrix\\\in window&&\\\m11\\\in new window.WebKitCSSMatrix&&!zi,Di\\\MozPerspective\\\in xi,Ni!window.L_DISABLE_3D&&(Oi||Ri||Di)&&!Ai&&!Ii,ji\\\undefined\\\!typeof orientation||I(\\\mobile\\\),Wiji&&bi,Hiji&&Ri,Fi!window.PointerEvent&&window.MSPointerEvent,Ui!(!window.PointerEvent&&!Fi),Vi!window.L_NO_TOUCH&&(Ui||\\\ontouchstart\\\in window||window.DocumentTouch&&document instanceof window.DocumentTouch),qiji&&Zi,Giji&&Ei,Ki(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI)>1,Yi!!document.createElement(\\\canvas\\\).getContext,Xi!(!document.createElementNS||!E(\\\svg\\\).createSVGRect),Ji!Xi&&function(){try{var tdocument.createElement(\\\div\\\);t.innerHTML\u003Cv:shape adj\\\1\\\/>;var it.firstChild;return i.style.behavior\\\url(#default#VML)\\\,i&&\\\object\\\typeof i.adj}catch(t){return!1}}(),$i(Object.freeze||Object)({ie:wi,ielt9:Li,edge:Pi,webkit:bi,android:Ti,android23:zi,androidStock:Ci,opera:Zi,chrome:Si,gecko:Ei,safari:ki,phantom:Ii,opera12:Ai,win:Bi,ie3d:Oi,webkit3d:Ri,gecko3d:Di,any3d:Ni,mobile:ji,mobileWebkit:Wi,mobileWebkit3d:Hi,msPointer:Fi,pointer:Ui,touch:Vi,mobileOpera:qi,mobileGecko:Gi,retina:Ki,canvas:Yi,svg:Xi,vml:Ji}),QiFi?\\\MSPointerDown\\\:\\\pointerdown\\\,teFi?\\\MSPointerMove\\\:\\\pointermove\\\,ieFi?\\\MSPointerUp\\\:\\\pointerup\\\,eeFi?\\\MSPointerCancel\\\:\\\pointercancel\\\,ne\\\INPUT\\\,\\\SELECT\\\,\\\OPTION\\\,oe{},se!1,re0,aeFi?\\\MSPointerDown\\\:Ui?\\\pointerdown\\\:\\\touchstart\\\,heFi?\\\MSPointerUp\\\:Ui?\\\pointerup\\\:\\\touchend\\\,ue\\\_leaflet_\\\,le\\\_leaflet_events\\\,ceBi&&Si?2*window.devicePixelRatio:Ei?window.devicePixelRatio:1,_e{},de(Object.freeze||Object)({on:V,off:q,stopPropagation:Y,disableScrollPropagation:X,disableClickPropagation:J,preventDefault:$,stop:Q,getMousePosition:tt,getWheelDelta:it,fakeStop:et,skipped:nt,isExternalTarget:ot,addListener:V,removeListener:q}),pext(\\\transform\\\,\\\WebkitTransform\\\,\\\OTransform\\\,\\\MozTransform\\\,\\\msTransform\\\),mext(\\\webkitTransition\\\,\\\transition\\\,\\\OTransition\\\,\\\MozTransition\\\,\\\msTransition\\\),fe\\\webkitTransition\\\me||\\\OTransition\\\me?me+\\\End\\\:\\\transitionend\\\;if(\\\onselectstart\\\in document)mifunction(){V(window,\\\selectstart\\\,$)},fifunction(){q(window,\\\selectstart\\\,$)};else{var gext(\\\userSelect\\\,\\\WebkitUserSelect\\\,\\\OUserSelect\\\,\\\MozUserSelect\\\,\\\msUserSelect\\\);mifunction(){if(ge){var tdocument.documentElement.style;gitge,tge\\\none\\\}},fifunction(){ge&&(document.documentElement.stylegegi,givoid 0)}}var ve,ye,xe(Object.freeze||Object)({TRANSFORM:pe,TRANSITION:me,TRANSITION_END:fe,get:rt,getStyle:at,create:ht,remove:ut,empty:lt,toFront:ct,toBack:_t,hasClass:dt,addClass:pt,removeClass:mt,setClass:ft,getClass:gt,setOpacity:vt,testProp:xt,setTransform:wt,setPosition:Lt,getPosition:Pt,disableTextSelection:mi,enableTextSelection:fi,disableImageDrag:bt,enableImageDrag:Tt,preventOutline:zt,restoreOutline:Mt}),weui.extend({run:function(t,i,e,n){this.stop(),this._elt,this._inProgress!0,this._duratione||.25,this._easeOutPower1/Math.max(n||.5,.2),this._startPosPt(t),this._offseti.subtract(this._startPos),this._startTime+new Date,this.fire(\\\start\\\),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animIdf(this._animate,this),this._step()},_step:function(t){var i+new Date-this._startTime,e1e3*this._duration;i\u003Ce?this._runFrame(this._easeOut(i/e),t):(this._runFrame(1),this._complete())},_runFrame:function(t,i){var ethis._startPos.add(this._offset.multiplyBy(t));i&&e._round(),Lt(this._el,e),this.fire(\\\step\\\)},_complete:function(){g(this._animId),this._inProgress!1,this.fire(\\\end\\\)},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),Leui.extend({options:{crs:vi,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:,maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,i){il(this,i),this._initContainer(t),this._initLayout(),this._onResizee(this._onResize,this),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),void 0!i.zoom&&(this._zoomthis._limitZoom(i.zoom)),i.center&&void 0!i.zoom&&this.setView(C(i.center),i.zoom,{reset:!0}),this._handlers,this._layers{},this._zoomBoundLayers{},this._sizeChanged!0,this.callInitHooks(),this._zoomAnimatedme&&Ni&&!qi&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),V(this._proxy,fe,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,e,n){return evoid 0e?this._zoom:this._limitZoom(e),tthis._limitCenter(C(t),e,this.options.maxBounds),nn||{},this._stop(),this._loaded&&!n.reset&&!0!n&&(void 0!n.animate&&(n.zoomi({animate:n.animate},n.zoom),n.pani({animate:n.animate,duration:n.duration},n.pan)),this._zoom!e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan))?(clearTimeout(this._sizeTimer),this):(this._resetView(t,e),this)},setZoom:function(t,i){return this._loaded?this.setView(this.getCenter(),t,{zoom:i}):(this._zoomt,this)},zoomIn:function(t,i){return tt||(Ni?this.options.zoomDelta:1),this.setZoom(this._zoom+t,i)},zoomOut:function(t,i){return tt||(Ni?this.options.zoomDelta:1),this.setZoom(this._zoom-t,i)},setZoomAround:function(t,i,e){var nthis.getZoomScale(i),othis.getSize().divideBy(2),s(t instanceof x?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),rthis.containerPointToLatLng(o.add(s));return this.setView(r,i,{zoom:e})},_getBoundsCenterZoom:function(t,i){ii||{},tt.getBounds?t.getBounds():z(t);var ew(i.paddingTopLeft||i.padding||0,0),nw(i.paddingBottomRight||i.padding||0,0),othis.getBoundsZoom(t,!1,e.add(n));if((o\\\number\\\typeof i.maxZoom?Math.min(i.maxZoom,o):o)1/0)return{center:t.getCenter(),zoom:o};var sn.subtract(e).divideBy(2),rthis.project(t.getSouthWest(),o),athis.project(t.getNorthEast(),o);return{center:this.unproject(r.add(a).divideBy(2).add(s),o),zoom:o}},fitBounds:function(t,i){if(!(tz(t)).isValid())throw new Error(\\\Bounds are not valid.\\\);var ethis._getBoundsCenterZoom(t,i);return this.setView(e.center,e.zoom,i)},fitWorld:function(t){return this.fitBounds(-90,-180,90,180,t)},panTo:function(t,i){return this.setView(t,this._zoom,{pan:i})},panBy:function(t,i){if(tw(t).round(),ii||{},!t.x&&!t.y)return this.fire(\\\moveend\\\);if(!0!i.animate&&!this.getSize().contains(t))return this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnimnew we,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),i.noMoveStart||this.fire(\\\movestart\\\),!1!i.animate){pt(this._mapPane,\\\leaflet-pan-anim\\\);var ethis._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane,e,i.duration||.25,i.easeLinearity)}else this._rawPanBy(t),this.fire(\\\move\\\).fire(\\\moveend\\\);return this},flyTo:function(t,i,e){function n(t){var i(g*g-m*m+(t?-1:1)*x*x*v*v)/(2*(t?g:m)*x*v),eMath.sqrt(i*i+1)-i;return e\u003C1e-9?-18:Math.log(e)}function o(t){return(Math.exp(t)-Math.exp(-t))/2}function s(t){return(Math.exp(t)+Math.exp(-t))/2}function r(t){return o(t)/s(t)}function a(t){return m*(s(w)/s(w+y*t))}function h(t){return m*(s(w)*r(w+y*t)-o(w))/x}function u(t){return 1-Math.pow(1-t,1.5)}function l(){var e(Date.now()-L)/b,nu(e)*P;e\u003C1?(this._flyToFramef(l,this),this._move(this.unproject(c.add(_.subtract(c).multiplyBy(h(n)/v)),p),this.getScaleZoom(m/a(n),p),{flyTo:!0})):this._move(t,i)._moveEnd(!0)}if(!1(ee||{}).animate||!Ni)return this.setView(t,i,e);this._stop();var cthis.project(this.getCenter()),_this.project(t),dthis.getSize(),pthis._zoom;tC(t),ivoid 0i?p:i;var mMath.max(d.x,d.y),gm*this.getZoomScale(p,i),v_.distanceTo(c)||1,y1.42,xy*y,wn(0),LDate.now(),P(n(1)-w)/y,be.duration?1e3*e.duration:1e3*P*.8;return this._moveStart(!0,e.noMoveStart),l.call(this),this},flyToBounds:function(t,i){var ethis._getBoundsCenterZoom(t,i);return this.flyTo(e.center,e.zoom,i)},setMaxBounds:function(t){return(tz(t)).isValid()?(this.options.maxBounds&&this.off(\\\moveend\\\,this._panInsideMaxBounds),this.options.maxBoundst,this._loaded&&this._panInsideMaxBounds(),this.on(\\\moveend\\\,this._panInsideMaxBounds)):(this.options.maxBoundsnull,this.off(\\\moveend\\\,this._panInsideMaxBounds))},setMinZoom:function(t){var ithis.options.minZoom;return this.options.minZoomt,this._loaded&&i!t&&(this.fire(\\\zoomlevelschange\\\),this.getZoom()\u003Cthis.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var ithis.options.maxZoom;return this.options.maxZoomt,this._loaded&&i!t&&(this.fire(\\\zoomlevelschange\\\),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds!0;var ethis.getCenter(),nthis._limitCenter(e,this._zoom,z(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds!1,this},invalidateSize:function(t){if(!this._loaded)return this;ti({animate:!1,pan:!0},!0t?{animate:!0}:t);var nthis.getSize();this._sizeChanged!0,this._lastCenternull;var othis.getSize(),sn.divideBy(2).round(),ro.divideBy(2).round(),as.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire(\\\move\\\),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimersetTimeout(e(this.fire,this,\\\moveend\\\),200)):this.fire(\\\moveend\\\)),this.fire(\\\resize\\\,{oldSize:n,newSize:o})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire(\\\viewreset\\\),this._stop()},locate:function(t){if(tthis._locateOptionsi({timeout:1e4,watch:!1},t),!(\\\geolocation\\\in navigator))return this._handleGeolocationError({code:0,message:\\\Geolocation not supported.\\\}),this;var ne(this._handleGeolocationResponse,this),oe(this._handleGeolocationError,this);return t.watch?this._locationWatchIdnavigator.geolocation.watchPosition(n,o,t):navigator.geolocation.getCurrentPosition(n,o,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView!1),this},_handleGeolocationError:function(t){var it.code,et.message||(1i?\\\permission denied\\\:2i?\\\position unavailable\\\:\\\timeout\\\);this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire(\\\locationerror\\\,{code:i,message:\\\Geolocation error: \\\+e+\\\.\\\})},_handleGeolocationResponse:function(t){var inew M(t.coords.latitude,t.coords.longitude),ei.toBounds(t.coords.accuracy),nthis._locateOptions;if(n.setView){var othis.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s{latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)\\\number\\\typeof t.coordsr&&(srt.coordsr);this.fire(\\\locationfound\\\,s)},addHandler:function(t,i){if(!i)return this;var ethistnew i(this);return this._handlers.push(e),this.optionst&&e.enable(),this},remove:function(){if(this._initEvents(!0),this._containerId!this._container._leaflet_id)throw new Error(\\\Map container is being reused by another instance\\\);try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_idvoid 0,this._containerIdvoid 0}void 0!this._locationWatchId&&this.stopLocate(),this._stop(),ut(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this._loaded&&this.fire(\\\unload\\\);var t;for(t in this._layers)this._layerst.remove();for(t in this._panes)ut(this._panest);return this._layers,this._panes,delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var eht(\\\div\\\,\\\leaflet-pane\\\+(t?\\\ leaflet-\\\+t.replace(\\\Pane\\\,\\\\\\)+\\\-pane\\\:\\\\\\),i||this._mapPane);return t&&(this._paneste),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var tthis.getPixelBounds();return new T(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0this.options.maxZoom?void 0this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){tz(t),ew(e||0,0);var nthis.getZoom()||0,othis.getMinZoom(),sthis.getMaxZoom(),rt.getNorthWest(),at.getSouthEast(),hthis.getSize().subtract(e),ub(this.project(a,n),this.project(r,n)).getSize(),lNi?this.options.zoomSnap:1,ch.x/u.x,_h.y/u.y,di?Math.max(c,_):Math.min(c,_);return nthis.getScaleZoom(d,n),l&&(nMath.round(n/(l/100))*(l/100),ni?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._sizenew x(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged!1),this._size.clone()},getPixelBounds:function(t,i){var ethis._getTopLeftPoint(t,i);return new P(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0t?this.getZoom():t)},getPane:function(t){return\\\string\\\typeof t?this._panest:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var ethis.options.crs;return ivoid 0i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var ethis.options.crs;ivoid 0i?this._zoom:i;var ne.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return ivoid 0i?this._zoom:i,this.options.crs.latLngToPoint(C(t),i)},unproject:function(t,i){return ivoid 0i?this._zoom:i,this.options.crs.pointToLatLng(w(t),i)},layerPointToLatLng:function(t){var iw(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(C(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(C(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(z(t))},distance:function(t,i){return this.options.crs.distance(C(t),C(i))},containerPointToLayerPoint:function(t){return w(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return w(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var ithis.containerPointToLayerPoint(w(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(C(t)))},mouseEventToContainerPoint:function(t){return tt(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var ithis._containerrt(t);if(!i)throw new Error(\\\Map container not found.\\\);if(i._leaflet_id)throw new Error(\\\Map container is already initialized.\\\);V(i,\\\scroll\\\,this._onScroll,this),this._containerIdn(i)},_initLayout:function(){var tthis._container;this._fadeAnimatedthis.options.fadeAnimation&&Ni,pt(t,\\\leaflet-container\\\+(Vi?\\\ leaflet-touch\\\:\\\\\\)+(Ki?\\\ leaflet-retina\\\:\\\\\\)+(Li?\\\ leaflet-oldie\\\:\\\\\\)+(ki?\\\ leaflet-safari\\\:\\\\\\)+(this._fadeAnimated?\\\ leaflet-fade-anim\\\:\\\\\\));var iat(t,\\\position\\\);\\\absolute\\\!i&&\\\relative\\\!i&&\\\fixed\\\!i&&(t.style.position\\\relative\\\),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var tthis._panes{};this._paneRenderers{},this._mapPanethis.createPane(\\\mapPane\\\,this._container),Lt(this._mapPane,new x(0,0)),this.createPane(\\\tilePane\\\),this.createPane(\\\shadowPane\\\),this.createPane(\\\overlayPane\\\),this.createPane(\\\markerPane\\\),this.createPane(\\\tooltipPane\\\),this.createPane(\\\popupPane\\\),this.options.markerZoomAnimation||(pt(t.markerPane,\\\leaflet-zoom-hide\\\),pt(t.shadowPane,\\\leaflet-zoom-hide\\\))},_resetView:function(t,i){Lt(this._mapPane,new x(0,0));var e!this._loaded;this._loaded!0,ithis._limitZoom(i),this.fire(\\\viewprereset\\\);var nthis._zoom!i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire(\\\viewreset\\\),e&&this.fire(\\\load\\\)},_moveStart:function(t,i){return t&&this.fire(\\\zoomstart\\\),i||this.fire(\\\movestart\\\),this},_move:function(t,i,e){void 0i&&(ithis._zoom);var nthis._zoom!i;return this._zoomi,this._lastCentert,this._pixelOriginthis._getNewPixelOrigin(t),(n||e&&e.pinch)&&this.fire(\\\zoom\\\,e),this.fire(\\\move\\\,e)},_moveEnd:function(t){return t&&this.fire(\\\zoomend\\\),this.fire(\\\moveend\\\)},_stop:function(){return g(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Lt(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error(\\\Set map center and zoom first.\\\)},_initEvents:function(t){this._targets{},this._targetsn(this._container)this;var it?q:V;i(this._container,\\\click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress\\\,this._handleDOMEvent,this),this.options.trackResize&&i(window,\\\resize\\\,this._onResize,this),Ni&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,\\\moveend\\\,this._onMoveEnd)},_onResize:function(){g(this._resizeRequest),this._resizeRequestf(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop0,this._container.scrollLeft0},_onMoveEnd:function(){var tthis._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,o,s\\\mouseout\\\i||\\\mouseover\\\i,rt.target||t.srcElement,a!1;r;){if((ethis._targetsn(r))&&(\\\click\\\i||\\\preclick\\\i)&&!t._simulated&&this._draggableMoved(e)){a!0;break}if(e&&e.listens(i,!0)){if(s&&!ot(r,t))break;if(o.push(e),s)break}if(rthis._container)break;rr.parentNode}return o.length||a||s||!ot(r,t)||(othis),o},_handleDOMEvent:function(t){if(this._loaded&&!nt(t)){var it.type;\\\mousedown\\\!i&&\\\keypress\\\!i||zt(t.target||t.srcElement),this._fireDOMEvent(t,i)}},_mouseEvents:\\\click\\\,\\\dblclick\\\,\\\mouseover\\\,\\\mouseout\\\,\\\contextmenu\\\,_fireDOMEvent:function(t,e,n){if(\\\click\\\t.type){var oi({},t);o.type\\\preclick\\\,this._fireDOMEvent(o,o.type,n)}if(!t._stopped&&(n(n||).concat(this._findEventTargets(t,e))).length){var sn0;\\\contextmenu\\\e&&s.listens(e,!0)&&$(t);var r{originalEvent:t};if(\\\keypress\\\!t.type){var as.getLatLng&&(!s._radius||s._radius\u003C10);r.containerPointa?this.latLngToContainerPoint(s.getLatLng()):this.mouseEventToContainerPoint(t),r.layerPointthis.containerPointToLayerPoint(r.containerPoint),r.latlnga?s.getLatLng():this.layerPointToLatLng(r.layerPoint)}for(var h0;h\u003Cn.length;h++)if(nh.fire(e,r,!0),r.originalEvent._stopped||!1nh.options.bubblingMouseEvents&&-1!d(this._mouseEvents,e))return}},_draggableMoved:function(t){return(tt.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t0,ithis._handlers.length;t\u003Ci;t++)this._handlerst.disable()},whenReady:function(t,i){return this._loaded?t.call(i||this,{target:this}):this.on(\\\load\\\,t,i),this},_getMapPanePos:function(){return Pt(this._mapPane)||new x(0,0)},_moved:function(){var tthis._getMapPanePos();return t&&!t.equals(0,0)},_getTopLeftPoint:function(t,i){return(t&&void 0!i?this._getNewPixelOrigin(t,i):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,i){var ethis.getSize()._divideBy(2);return this.project(t,i)._subtract(e)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,i,e){var nthis._getNewPixelOrigin(e,i);return this.project(t,i)._subtract(n)},_latLngBoundsToNewLayerBounds:function(t,i,e){var nthis._getNewPixelOrigin(e,i);return b(this.project(t.getSouthWest(),i)._subtract(n),this.project(t.getNorthWest(),i)._subtract(n),this.project(t.getSouthEast(),i)._subtract(n),this.project(t.getNorthEast(),i)._subtract(n))},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,i,e){if(!e)return t;var nthis.project(t,i),othis.getSize().divideBy(2),snew P(n.subtract(o),n.add(o)),rthis._getBoundsOffset(s,e,i);return r.round().equals(0,0)?t:this.unproject(n.add(r),i)},_limitOffset:function(t,i){if(!i)return t;var ethis.getPixelBounds(),nnew P(e.min.add(t),e.max.add(t));return t.add(this._getBoundsOffset(n,i))},_getBoundsOffset:function(t,i,e){var nb(this.project(i.getNorthEast(),e),this.project(i.getSouthWest(),e)),on.min.subtract(t.min),sn.max.subtract(t.max);return new x(this._rebound(o.x,-s.x),this._rebound(o.y,-s.y))},_rebound:function(t,i){return t+i>0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var ithis.getMinZoom(),ethis.getMaxZoom(),nNi?this.options.zoomSnap:1;return n&&(tMath.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire(\\\move\\\)},_onPanTransitionEnd:function(){mt(this._mapPane,\\\leaflet-pan-anim\\\),this.fire(\\\moveend\\\)},_tryAnimatedPan:function(t,i){var ethis._getCenterOffset(t)._trunc();return!(!0!(i&&i.animate)&&!this.getSize().contains(e))&&(this.panBy(e,i),!0)},_createAnimProxy:function(){var tthis._proxyht(\\\div\\\,\\\leaflet-proxy leaflet-zoom-animated\\\);this._panes.mapPane.appendChild(t),this.on(\\\zoomanim\\\,function(t){var ipe,ethis._proxy.stylei;wt(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),ethis._proxy.stylei&&this._animatingZoom&&this._onZoomTransitionEnd()},this),this.on(\\\load moveend\\\,function(){var tthis.getCenter(),ithis.getZoom();wt(this._proxy,this.project(t,i),this.getZoomScale(i,1))},this),this._on(\\\unload\\\,this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ut(this._proxy),delete this._proxy},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf(\\\transform\\\)>0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName(\\\leaflet-zoom-animated\\\).length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(ee||{},!this._zoomAnimated||!1e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var nthis.getZoomScale(i),othis._getCenterOffset(t)._divideBy(1-1/n);return!(!0!e.animate&&!this.getSize().contains(o))&&(f(function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)},this),!0)},_animateZoom:function(t,i,n,o){this._mapPane&&(n&&(this._animatingZoom!0,this._animateToCentert,this._animateToZoomi,pt(this._mapPane,\\\leaflet-zoom-anim\\\)),this.fire(\\\zoomanim\\\,{center:t,zoom:i,noUpdate:o}),setTimeout(e(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&mt(this._mapPane,\\\leaflet-zoom-anim\\\),this._animatingZoom!1,this._move(this._animateToCenter,this._animateToZoom),f(function(){this._moveEnd(!0)},this))}}),Pev.extend({options:{position:\\\topright\\\},initialize:function(t){l(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var ithis._map;return i&&i.removeControl(this),this.options.positiont,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._mapt;var ithis._containerthis.onAdd(t),ethis.getPosition(),nt._controlCornerse;return pt(i,\\\leaflet-control\\\),-1!e.indexOf(\\\bottom\\\)?n.insertBefore(i,n.firstChild):n.appendChild(i),this},remove:function(){return this._map?(ut(this._container),this.onRemove&&this.onRemove(this._map),this._mapnull,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),befunction(t){return new Pe(t)};Le.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){function t(t,o){var se+t+\\\ \\\+e+o;it+oht(\\\div\\\,s,n)}var ithis._controlCorners{},e\\\leaflet-\\\,nthis._controlContainerht(\\\div\\\,e+\\\control-container\\\,this._container);t(\\\top\\\,\\\left\\\),t(\\\top\\\,\\\right\\\),t(\\\bottom\\\,\\\left\\\),t(\\\bottom\\\,\\\right\\\)},_clearControlPos:function(){for(var t in this._controlCorners)ut(this._controlCornerst);ut(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var TePe.extend({options:{collapsed:!0,position:\\\topright\\\,autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e\u003Cn?-1:n\u003Ce?1:0}},initialize:function(t,i,e){l(this,e),this._layerControlInputs,this._layers,this._lastZIndex0,this._handlingClick!1;for(var n in t)this._addLayer(tn,n);for(n in i)this._addLayer(in,n,!0)},onAdd:function(t){this._initLayout(),this._update(),this._mapt,t.on(\\\zoomend\\\,this._checkDisabledLayers,this);for(var i0;i\u003Cthis._layers.length;i++)this._layersi.layer.on(\\\add remove\\\,this._onLayerChange,this);return this._container},addTo:function(t){return Pe.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off(\\\zoomend\\\,this._checkDisabledLayers,this);for(var t0;t\u003Cthis._layers.length;t++)this._layerst.layer.off(\\\add remove\\\,this._onLayerChange,this)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._map?this._update():this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._map?this._update():this},removeLayer:function(t){t.off(\\\add remove\\\,this._onLayerChange,this);var ithis._getLayer(n(t));return i&&this._layers.splice(this._layers.indexOf(i),1),this._map?this._update():this},expand:function(){pt(this._container,\\\leaflet-control-layers-expanded\\\),this._form.style.heightnull;var tthis._map.getSize().y-(this._container.offsetTop+50);return t\u003Cthis._form.clientHeight?(pt(this._form,\\\leaflet-control-layers-scrollbar\\\),this._form.style.heightt+\\\px\\\):mt(this._form,\\\leaflet-control-layers-scrollbar\\\),this._checkDisabledLayers(),this},collapse:function(){return mt(this._container,\\\leaflet-control-layers-expanded\\\),this},_initLayout:function(){var t\\\leaflet-control-layers\\\,ithis._containerht(\\\div\\\,t),ethis.options.collapsed;i.setAttribute(\\\aria-haspopup\\\,!0),J(i),X(i);var nthis._formht(\\\form\\\,t+\\\-list\\\);e&&(this._map.on(\\\click\\\,this.collapse,this),Ti||V(i,{mouseenter:this.expand,mouseleave:this.collapse},this));var othis._layersLinkht(\\\a\\\,t+\\\-toggle\\\,i);o.href\\\#\\\,o.title\\\Layers\\\,Vi?(V(o,\\\click\\\,Q),V(o,\\\click\\\,this.expand,this)):V(o,\\\focus\\\,this.expand,this),e||this.expand(),this._baseLayersListht(\\\div\\\,t+\\\-base\\\,n),this._separatorht(\\\div\\\,t+\\\-separator\\\,n),this._overlaysListht(\\\div\\\,t+\\\-overlays\\\,n),i.appendChild(n)},_getLayer:function(t){for(var i0;i\u003Cthis._layers.length;i++)if(this._layersi&&n(this._layersi.layer)t)return this._layersi},_addLayer:function(t,i,n){this._map&&t.on(\\\add remove\\\,this._onLayerChange,this),this._layers.push({layer:t,name:i,overlay:n}),this.options.sortLayers&&this._layers.sort(e(function(t,i){return this.options.sortFunction(t.layer,i.layer,t.name,i.name)},this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return this;lt(this._baseLayersList),lt(this._overlaysList),this._layerControlInputs;var t,i,e,n,o0;for(e0;e\u003Cthis._layers.length;e++)nthis._layerse,this._addItem(n),ii||n.overlay,tt||!n.overlay,o+n.overlay?0:1;return this.options.hideSingleBase&&(tt&&o>1,this._baseLayersList.style.displayt?\\\\\\:\\\none\\\),this._separator.style.displayi&&t?\\\\\\:\\\none\\\,this},_onLayerChange:function(t){this._handlingClick||this._update();var ithis._getLayer(n(t.target)),ei.overlay?\\\add\\\t.type?\\\overlayadd\\\:\\\overlayremove\\\:\\\add\\\t.type?\\\baselayerchange\\\:null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e\u003Cinput type\\\radio\\\ class\\\leaflet-control-layers-selector\\\ name\\\+t+\\\+(i? checked\\\checked\\\:\\\\\\)+\\\/>\\\,ndocument.createElement(\\\div\\\);return n.innerHTMLe,n.firstChild},_addItem:function(t){var i,edocument.createElement(\\\label\\\),othis._map.hasLayer(t.layer);t.overlay?((idocument.createElement(\\\input\\\)).type\\\checkbox\\\,i.className\\\leaflet-control-layers-selector\\\,i.defaultCheckedo):ithis._createRadioElement(\\\leaflet-base-layers\\\,o),this._layerControlInputs.push(i),i.layerIdn(t.layer),V(i,\\\click\\\,this._onInputClick,this);var sdocument.createElement(\\\span\\\);s.innerHTML\\\ \\\+t.name;var rdocument.createElement(\\\div\\\);return e.appendChild(r),r.appendChild(i),r.appendChild(s),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,ethis._layerControlInputs,n,o;this._handlingClick!0;for(var se.length-1;s>0;s--)tes,ithis._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s0;s\u003Co.length;s++)this._map.hasLayer(os)&&this._map.removeLayer(os);for(s0;s\u003Cn.length;s++)this._map.hasLayer(ns)||this._map.addLayer(ns);this._handlingClick!1,this._refocusOnMap()},_checkDisabledLayers:function(){for(var t,i,ethis._layerControlInputs,nthis._map.getZoom(),oe.length-1;o>0;o--)teo,ithis._getLayer(t.layerId).layer,t.disabledvoid 0!i.options.minZoom&&n\u003Ci.options.minZoom||void 0!i.options.maxZoom&&n>i.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),zePe.extend({options:{position:\\\topleft\\\,zoomInText:\\\+\\\,zoomInTitle:\\\Zoom in\\\,zoomOutText:\\\−\\\,zoomOutTitle:\\\Zoom out\\\},onAdd:function(t){var i\\\leaflet-control-zoom\\\,eht(\\\div\\\,i+\\\ leaflet-bar\\\),nthis.options;return this._zoomInButtonthis._createButton(n.zoomInText,n.zoomInTitle,i+\\\-in\\\,e,this._zoomIn),this._zoomOutButtonthis._createButton(n.zoomOutText,n.zoomOutTitle,i+\\\-out\\\,e,this._zoomOut),this._updateDisabled(),t.on(\\\zoomend zoomlevelschange\\\,this._updateDisabled,this),e},onRemove:function(t){t.off(\\\zoomend zoomlevelschange\\\,this._updateDisabled,this)},disable:function(){return this._disabled!0,this._updateDisabled(),this},enable:function(){return this._disabled!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom\u003Cthis._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var sht(\\\a\\\,e,n);return s.innerHTMLt,s.href\\\#\\\,s.titlei,s.setAttribute(\\\role\\\,\\\button\\\),s.setAttribute(\\\aria-label\\\,i),J(s),V(s,\\\click\\\,Q),V(s,\\\click\\\,o,this),V(s,\\\click\\\,this._refocusOnMap,this),s},_updateDisabled:function(){var tthis._map,i\\\leaflet-disabled\\\;mt(this._zoomInButton,i),mt(this._zoomOutButton,i),(this._disabled||t._zoomt.getMinZoom())&&pt(this._zoomOutButton,i),(this._disabled||t._zoomt.getMaxZoom())&&pt(this._zoomInButton,i)}});Le.mergeOptions({zoomControl:!0}),Le.addInitHook(function(){this.options.zoomControl&&(this.zoomControlnew ze,this.addControl(this.zoomControl))});var MePe.extend({options:{position:\\\bottomleft\\\,maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var iht(\\\div\\\,\\\leaflet-control-scale\\\),ethis.options;return this._addScales(e,\\\leaflet-control-scale-line\\\,i),t.on(e.updateWhenIdle?\\\moveend\\\:\\\move\\\,this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?\\\moveend\\\:\\\move\\\,this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScaleht(\\\div\\\,i,e)),t.imperial&&(this._iScaleht(\\\div\\\,i,e))},_update:function(){var tthis._map,it.getSize().y/2,et.distance(t.containerPointToLatLng(0,i),t.containerPointToLatLng(this.options.maxWidth,i));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var ithis._getRoundNum(t),ei\u003C1e3?i+\\\ m\\\:i/1e3+\\\ km\\\;this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o3.2808399*t;o>5280?(io/5280,ethis._getRoundNum(i),this._updateScale(this._iScale,e+\\\ mi\\\,e/i)):(nthis._getRoundNum(o),this._updateScale(this._iScale,n+\\\ ft\\\,n/o))},_updateScale:function(t,i,e){t.style.widthMath.round(this.options.maxWidth*e)+\\\px\\\,t.innerHTMLi},_getRoundNum:function(t){var iMath.pow(10,(Math.floor(t)+\\\\\\).length-1),et/i;return ee>10?10:e>5?5:e>3?3:e>2?2:1,i*e}}),CePe.extend({options:{position:\\\bottomright\\\,prefix:\u003Ca href\\\http://leafletjs.com\\\ title\\\A JS library for interactive maps\\\>Leaflet\u003C/a>},initialize:function(t){l(this,t),this._attributions{}},onAdd:function(t){t.attributionControlthis,this._containerht(\\\div\\\,\\\leaflet-control-attribution\\\),J(this._container);for(var i in t._layers)t._layersi.getAttribution&&this.addAttribution(t._layersi.getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefixt,this._update(),this},addAttribution:function(t){return t?(this._attributionst||(this._attributionst0),this._attributionst++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributionst&&(this._attributionst--,this._update()),this):this},_update:function(){if(this._map){var t;for(var i in this._attributions)this._attributionsi&&t.push(i);var e;this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(\\\, \\\)),this._container.innerHTMLe.join(\\\ | \\\)}}});Le.mergeOptions({attributionControl:!0}),Le.addInitHook(function(){this.options.attributionControl&&(new Ce).addTo(this)});Pe.LayersTe,Pe.Zoomze,Pe.ScaleMe,Pe.AttributionCe,be.layersfunction(t,i,e){return new Te(t,i,e)},be.zoomfunction(t){return new ze(t)},be.scalefunction(t){return new Me(t)},be.attributionfunction(t){return new Ce(t)};var Zev.extend({initialize:function(t){this._mapt},enable:function(){return this._enabled?this:(this._enabled!0,this.addHooks(),this)},disable:function(){return this._enabled?(this._enabled!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Ze.addTofunction(t,i){return t.addHandler(i,this),this};var Se,Ee{Events:hi},keVi?\\\touchstart mousedown\\\:\\\mousedown\\\,Ie{mousedown:\\\mouseup\\\,touchstart:\\\touchend\\\,pointerdown:\\\touchend\\\,MSPointerDown:\\\touchend\\\},Ae{mousedown:\\\mousemove\\\,touchstart:\\\touchmove\\\,pointerdown:\\\touchmove\\\,MSPointerDown:\\\touchmove\\\},Beui.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){l(this,n),this._elementt,this._dragStartTargeti||t,this._preventOutlinee},enable:function(){this._enabled||(V(this._dragStartTarget,ke,this._onDown,this),this._enabled!0)},disable:function(){this._enabled&&(Be._draggingthis&&this.finishDrag(),q(this._dragStartTarget,ke,this._onDown,this),this._enabled!1,this._moved!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved!1,!dt(this._element,\\\leaflet-zoom-anim\\\)&&!(Be._dragging||t.shiftKey||1!t.which&&1!t.button&&!t.touches||(Be._draggingthis,this._preventOutline&&zt(this._element),bt(),mi(),this._moving)))){this.fire(\\\down\\\);var it.touches?t.touches0:t;this._startPointnew x(i.clientX,i.clientY),V(document,Aet.type,this._onMove,this),V(document,Iet.type,this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved!0;else{var it.touches&&1t.touches.length?t.touches0:t,enew x(i.clientX,i.clientY).subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)\u003Cthis.options.clickTolerance||($(t),this._moved||(this.fire(\\\dragstart\\\),this._moved!0,this._startPosPt(this._element).subtract(e),pt(document.body,\\\leaflet-dragging\\\),this._lastTargett.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof SVGElementInstance&&(this._lastTargetthis._lastTarget.correspondingUseElement),pt(this._lastTarget,\\\leaflet-drag-target\\\)),this._newPosthis._startPos.add(e),this._moving!0,g(this._animRequest),this._lastEventt,this._animRequestf(this._updatePosition,this,!0)))}},_updatePosition:function(){var t{originalEvent:this._lastEvent};this.fire(\\\predrag\\\,t),Lt(this._element,this._newPos),this.fire(\\\drag\\\,t)},_onUp:function(t){!t._simulated&&this._enabled&&this.finishDrag()},finishDrag:function(){mt(document.body,\\\leaflet-dragging\\\),this._lastTarget&&(mt(this._lastTarget,\\\leaflet-drag-target\\\),this._lastTargetnull);for(var t in Ae)q(document,Aet,this._onMove,this),q(document,Iet,this._onUp,this);Tt(),fi(),this._moved&&this._moving&&(g(this._animRequest),this.fire(\\\dragend\\\,{distance:this._newPos.distanceTo(this._startPos)})),this._moving!1,Be._dragging!1}}),Oe(Object.freeze||Object)({simplify:Ct,pointToSegmentDistance:Zt,closestPointOnSegment:function(t,i,e){return Rt(t,i,e)},clipSegment:It,_getEdgeIntersection:At,_getBitCode:Bt,_sqClosestPointOnSegment:Rt,isFlat:Dt,_flat:Nt}),Re(Object.freeze||Object)({clipPolygon:jt}),De{project:function(t){return new x(t.lng,t.lat)},unproject:function(t){return new M(t.y,t.x)},bounds:new P(-180,-90,180,90)},Ne{R:6378137,R_MINOR:6356752.314245179,bounds:new P(-20037508.34279,-15496570.73972,20037508.34279,18764656.23138),project:function(t){var iMath.PI/180,ethis.R,nt.lat*i,othis.R_MINOR/e,sMath.sqrt(1-o*o),rs*Math.sin(n),aMath.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return n-e*Math.log(Math.max(a,1e-10)),new x(t.lng*i*e,n)},unproject:function(t){for(var i,e180/Math.PI,nthis.R,othis.R_MINOR/n,sMath.sqrt(1-o*o),rMath.exp(-t.y/n),aMath.PI/2-2*Math.atan(r),h0,u.1;h\u003C15&&Math.abs(u)>1e-7;h++)is*Math.sin(a),iMath.pow((1-i)/(1+i),s/2),a+uMath.PI/2-2*Math.atan(r*i)-a;return new M(a*e,t.x*e/n)}},je(Object.freeze||Object)({LonLat:De,Mercator:Ne,SphericalMercator:di}),Wei({},_i,{code:\\\EPSG:3395\\\,projection:Ne,transformation:function(){var t.5/(Math.PI*Ne.R);return S(t,.5,-t,.5)}()}),Hei({},_i,{code:\\\EPSG:4326\\\,projection:De,transformation:S(1/180,1,-1/180,.5)}),Fei({},ci,{projection:De,transformation:S(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var ei.lng-t.lng,ni.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});ci.Earth_i,ci.EPSG3395We,ci.EPSG3857vi,ci.EPSG900913yi,ci.EPSG4326He,ci.SimpleFe;var Ueui.extend({options:{pane:\\\overlayPane\\\,attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.optionst||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targetsn(t)this,this},removeInteractiveTarget:function(t){return delete this._map._targetsn(t),this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var it.target;if(i.hasLayer(this)){if(this._mapi,this._zoomAnimatedi._zoomAnimated,this.getEvents){var ethis.getEvents();i.on(e,this),this.once(\\\remove\\\,function(){i.off(e,this)},this)}this.onAdd(i),this.getAttribution&&i.attributionControl&&i.attributionControl.addAttribution(this.getAttribution()),this.fire(\\\add\\\),i.fire(\\\layeradd\\\,{layer:this})}}});Le.include({addLayer:function(t){if(!t._layerAdd)throw new Error(\\\The provided object is not a Layer.\\\);var in(t);return this._layersi?this:(this._layersit,t._mapToAddthis,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t),this)},removeLayer:function(t){var in(t);return this._layersi?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layersi,this._loaded&&(this.fire(\\\layerremove\\\,{layer:t}),t.fire(\\\remove\\\)),t._mapt._mapToAddnull,this):this},hasLayer:function(t){return!!t&&n(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layerse);return this},_addLayers:function(t){for(var i0,e(tt?ei(t)?t:t:).length;i\u003Ce;i++)this.addLayer(ti)},_addZoomLimit:function(t){!isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayersn(t)t,this._updateZoomLevels())},_removeZoomLimit:function(t){var in(t);this._zoomBoundLayersi&&(delete this._zoomBoundLayersi,this._updateZoomLevels())},_updateZoomLevels:function(){var t1/0,i-1/0,ethis._getZoomSpan();for(var n in this._zoomBoundLayers){var othis._zoomBoundLayersn.options;tvoid 0o.minZoom?t:Math.min(t,o.minZoom),ivoid 0o.maxZoom?i:Math.max(i,o.maxZoom)}this._layersMaxZoomi-1/0?void 0:i,this._layersMinZoomt1/0?void 0:t,e!this._getZoomSpan()&&this.fire(\\\zoomlevelschange\\\),void 0this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0this.options.minZoom&&this._layersMinZoom&&this.getZoom()\u003Cthis._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var VeUe.extend({initialize:function(t,i){l(this,i),this._layers{};var e,n;if(t)for(e0,nt.length;e\u003Cn;e++)this.addLayer(te)},addLayer:function(t){var ithis.getLayerId(t);return this._layersit,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var it in this._layers?t:this.getLayerId(t);return this._map&&this._layersi&&this._map.removeLayer(this._layersi),delete this._layersi,this},hasLayer:function(t){return!!t&&(t in this._layers||this.getLayerId(t)in this._layers)},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var i,e,nArray.prototype.slice.call(arguments,1);for(i in this._layers)(ethis._layersi)t&&et.apply(e,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layerse);return this},getLayer:function(t){return this._layerst},getLayers:function(){var t;return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke(\\\setZIndex\\\,t)},getLayerId:function(t){return n(t)}}),qeVe.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),Ve.prototype.addLayer.call(this,t),this.fire(\\\layeradd\\\,{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(tthis._layerst),t.removeEventParent(this),Ve.prototype.removeLayer.call(this,t),this.fire(\\\layerremove\\\,{layer:t})):this},setStyle:function(t){return this.invoke(\\\setStyle\\\,t)},bringToFront:function(){return this.invoke(\\\bringToFront\\\)},bringToBack:function(){return this.invoke(\\\bringToBack\\\)},getBounds:function(){var tnew T;for(var i in this._layers){var ethis._layersi;t.extend(e.getBounds?e.getBounds():e.getLatLng())}return t}}),Gev.extend({options:{popupAnchor:0,0,tooltipAnchor:0,0},initialize:function(t){l(this,t)},createIcon:function(t){return this._createIcon(\\\icon\\\,t)},createShadow:function(t){return this._createIcon(\\\shadow\\\,t)},_createIcon:function(t,i){var ethis._getIconUrl(t);if(!e){if(\\\icon\\\t)throw new Error(\\\iconUrl not set in Icon options (see the docs).\\\);return null}var nthis._createImg(e,i&&\\\IMG\\\i.tagName?i:null);return this._setIconStyles(n,t),n},_setIconStyles:function(t,i){var ethis.options,nei+\\\Size\\\;\\\number\\\typeof n&&(nn,n);var ow(n),sw(\\\shadow\\\i&&e.shadowAnchor||e.iconAnchor||o&&o.divideBy(2,!0));t.className\\\leaflet-marker-\\\+i+\\\ \\\+(e.className||\\\\\\),s&&(t.style.marginLeft-s.x+\\\px\\\,t.style.marginTop-s.y+\\\px\\\),o&&(t.style.widtho.x+\\\px\\\,t.style.heighto.y+\\\px\\\)},_createImg:function(t,i){return ii||document.createElement(\\\img\\\),i.srct,i},_getIconUrl:function(t){return Ki&&this.optionst+\\\RetinaUrl\\\||this.optionst+\\\Url\\\}}),KeGe.extend({options:{iconUrl:\\\marker-icon.png\\\,iconRetinaUrl:\\\marker-icon-2x.png\\\,shadowUrl:\\\marker-shadow.png\\\,iconSize:25,41,iconAnchor:12,41,popupAnchor:1,-34,tooltipAnchor:16,-28,shadowSize:41,41},_getIconUrl:function(t){return Ke.imagePath||(Ke.imagePaththis._detectIconPath()),(this.options.imagePath||Ke.imagePath)+Ge.prototype._getIconUrl.call(this,t)},_detectIconPath:function(){var tht(\\\div\\\,\\\leaflet-default-icon-path\\\,document.body),iat(t,\\\background-image\\\)||at(t,\\\backgroundImage\\\);return document.body.removeChild(t),inulli||0!i.indexOf(\\\url\\\)?\\\\\\:i.replace(/^url\\\\(\\\?/,\\\\\\).replace(/marker-icon\\\\.png\\\?\\\\)$/,\\\\\\)}}),YeZe.extend({initialize:function(t){this._markert},addHooks:function(){var tthis._marker._icon;this._draggable||(this._draggablenew Be(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),pt(t,\\\leaflet-marker-draggable\\\)},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&mt(this._marker._icon,\\\leaflet-marker-draggable\\\)},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var ithis._marker,ei._map,nthis._marker.options.autoPanSpeed,othis._marker.options.autoPanPadding,sL.DomUtil.getPosition(i._icon),re.getPixelBounds(),ae.getPixelOrigin(),hb(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));if(!h.contains(s)){var uw((Math.max(h.max.x,s.x)-h.max.x)/(r.max.x-h.max.x)-(Math.min(h.min.x,s.x)-h.min.x)/(r.min.x-h.min.x),(Math.max(h.max.y,s.y)-h.max.y)/(r.max.y-h.max.y)-(Math.min(h.min.y,s.y)-h.min.y)/(r.min.y-h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),L.DomUtil.setPosition(i._icon,this._draggable._newPos),this._onDrag(t),this._panRequestf(this._adjustPan.bind(this,t))}},_onDragStart:function(){this._oldLatLngthis._marker.getLatLng(),this._marker.closePopup().fire(\\\movestart\\\).fire(\\\dragstart\\\)},_onPreDrag:function(t){this._marker.options.autoPan&&(g(this._panRequest),this._panRequestf(this._adjustPan.bind(this,t)))},_onDrag:function(t){var ithis._marker,ei._shadow,nPt(i._icon),oi._map.layerPointToLatLng(n);e&&Lt(e,n),i._latlngo,t.latlngo,t.oldLatLngthis._oldLatLng,i.fire(\\\move\\\,t).fire(\\\drag\\\,t)},_onDragEnd:function(t){g(this._panRequest),delete this._oldLatLng,this._marker.fire(\\\moveend\\\).fire(\\\dragend\\\,t)}}),XeUe.extend({options:{icon:new Ke,interactive:!0,draggable:!1,autoPan:!1,autoPanPadding:50,50,autoPanSpeed:10,keyboard:!0,title:\\\\\\,alt:\\\\\\,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:\\\markerPane\\\,bubblingMouseEvents:!1},initialize:function(t,i){l(this,i),this._latlngC(t)},onAdd:function(t){this._zoomAnimatedthis._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on(\\\zoomanim\\\,this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off(\\\zoomanim\\\,this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var ithis._latlng;return this._latlngC(t),this.update(),this.fire(\\\move\\\,{oldLatLng:i,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffsett,this.update()},setIcon:function(t){return this.options.icont,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon&&this._map){var tthis._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var tthis.options,i\\\leaflet-zoom-\\\+(this._zoomAnimated?\\\animated\\\:\\\hide\\\),et.icon.createIcon(this._icon),n!1;e!this._icon&&(this._icon&&this._removeIcon(),n!0,t.title&&(e.titlet.title),\\\IMG\\\e.tagName&&(e.altt.alt||\\\\\\)),pt(e,i),t.keyboard&&(e.tabIndex\\\0\\\),this._icone,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex});var ot.icon.createShadow(this._shadow),s!1;o!this._shadow&&(this._removeShadow(),s!0),o&&(pt(o,i),o.alt\\\\\\),this._shadowo,t.opacity\u003C1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),o&&s&&this.getPane(\\\shadowPane\\\).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),ut(this._icon),this.removeInteractiveTarget(this._icon),this._iconnull},_removeShadow:function(){this._shadow&&ut(this._shadow),this._shadownull},_setPos:function(t){Lt(this._icon,t),this._shadow&&Lt(this._shadow,t),this._zIndext.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndexthis._zIndex+t},_animateZoom:function(t){var ithis._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(i)},_initInteraction:function(){if(this.options.interactive&&(pt(this._icon,\\\leaflet-interactive\\\),this.addInteractiveTarget(this._icon),Ye)){var tthis.options.draggable;this.dragging&&(tthis.dragging.enabled(),this.dragging.disable()),this.draggingnew Ye(this),t&&this.dragging.enable()}},setOpacity:function(t){return this.options.opacityt,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var tthis.options.opacity;vt(this._icon,t),this._shadow&&vt(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}}),JeUe.extend({options:{stroke:!0,color:\\\#3388ff\\\,weight:3,opacity:1,lineCap:\\\round\\\,lineJoin:\\\round\\\,dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:\\\evenodd\\\,interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderert.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return l(this,t),this._renderer&&this._renderer._updateStyle(this),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+this._renderer.options.tolerance}}),$eJe.extend({options:{fill:!0,radius:10},initialize:function(t,i){l(this,i),this._latlngC(t),this._radiusthis.options.radius},setLatLng:function(t){return this._latlngC(t),this.redraw(),this.fire(\\\move\\\,{latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radiusthis._radiust,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var it&&t.radius||this._radius;return Je.prototype.setStyle.call(this,t),this.setRadius(i),this},_project:function(){this._pointthis._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var tthis._radius,ithis._radiusY||t,ethis._clickTolerance(),nt+e,i+e;this._pxBoundsnew P(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)\u003Cthis._radius+this._clickTolerance()}}),Qe$e.extend({initialize:function(t,e,n){if(\\\number\\\typeof e&&(ei({},n,{radius:e})),l(this,e),this._latlngC(t),isNaN(this.options.radius))throw new Error(\\\Circle radius cannot be NaN\\\);this._mRadiusthis.options.radius},setRadius:function(t){return this._mRadiust,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var tthis._radius,this._radiusY||this._radius;return new T(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:Je.prototype.setStyle,_project:function(){var tthis._latlng.lng,ithis._latlng.lat,ethis._map,ne.options.crs;if(n.distance_i.distance){var oMath.PI/180,sthis._mRadius/_i.R/o,re.project(i+s,t),ae.project(i-s,t),hr.add(a).divideBy(2),ue.unproject(h).lat,lMath.acos((Math.cos(s*o)-Math.sin(i*o)*Math.sin(u*o))/(Math.cos(i*o)*Math.cos(u*o)))/o;(isNaN(l)||0l)&&(ls/Math.cos(Math.PI/180*i)),this._pointh.subtract(e.getPixelOrigin()),this._radiusisNaN(l)?0:h.x-e.project(u,t-l).x,this._radiusYh.y-r.y}else{var cn.unproject(n.project(this._latlng).subtract(this._mRadius,0));this._pointe.latLngToLayerPoint(this._latlng),this._radiusthis._point.x-e.latLngToLayerPoint(c).x}this._updateBounds()}}),tnJe.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,i){l(this,i),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var i,e,n1/0,onull,sRt,r0,athis._parts.length;r\u003Ca;r++)for(var hthis._partsr,u1,lh.length;u\u003Cl;u++){var cs(t,ihu-1,ehu,!0);c\u003Cn&&(nc,os(t,i,e))}return o&&(o.distanceMath.sqrt(n)),o},getCenter:function(){if(!this._map)throw new Error(\\\Must add layer to map before using getCenter()\\\);var t,i,e,n,o,s,r,athis._rings0,ha.length;if(!h)return null;for(t0,i0;t\u003Ch-1;t++)i+at.distanceTo(at+1)/2;if(0i)return this._map.layerPointToLatLng(a0);for(t0,n0;t\u003Ch-1;t++)if(oat,sat+1,eo.distanceTo(s),(n+e)>i)return r(n-i)/e,this._map.layerPointToLatLng(s.x-r*(s.x-o.x),s.y-r*(s.y-o.y))},getBounds:function(){return this._bounds},addLatLng:function(t,i){return ii||this._defaultShape(),tC(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._boundsnew T,this._latlngsthis._convertLatLngs(t)},_defaultShape:function(){return Dt(this._latlngs)?this._latlngs:this._latlngs0},_convertLatLngs:function(t){for(var i,eDt(t),n0,ot.length;n\u003Co;n++)e?(inC(tn),this._bounds.extend(in)):inthis._convertLatLngs(tn);return i},_project:function(){var tnew P;this._rings,this._projectLatlngs(this._latlngs,this._rings,t);var ithis._clickTolerance(),enew x(i,i);this._bounds.isValid()&&t.isValid()&&(t.min._subtract(e),t.max._add(e),this._pxBoundst)},_projectLatlngs:function(t,i,e){var n,o,st0instanceof M,rt.length;if(s){for(o,n0;n\u003Cr;n++)onthis._map.latLngToLayerPoint(tn),e.extend(on);i.push(o)}else for(n0;n\u003Cr;n++)this._projectLatlngs(tn,i,e)},_clipPoints:function(){var tthis._renderer._bounds;if(this._parts,this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._partsthis._rings;else{var i,e,n,o,s,r,a,hthis._parts;for(i0,n0,othis._rings.length;i\u003Co;i++)for(e0,s(athis._ringsi).length;e\u003Cs-1;e++)(rIt(ae,ae+1,t,e,!0))&&(hnhn||,hn.push(r0),r1ae+1&&e!s-2||(hn.push(r1),n++))}},_simplifyPoints:function(){for(var tthis._parts,ithis.options.smoothFactor,e0,nt.length;e\u003Cn;e++)teCt(te,i)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,i){var e,n,o,s,r,a,hthis._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(e0,sthis._parts.length;e\u003Cs;e++)for(n0,o(r(athis._partse).length)-1;n\u003Cr;on++)if((i||0!n)&&Zt(t,ao,an)\u003Ch)return!0;return!1}});tn._flatNt;var entn.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs0.length},getCenter:function(){if(!this._map)throw new Error(\\\Must add layer to map before using getCenter()\\\);var t,i,e,n,o,s,r,a,h,uthis._rings0,lu.length;if(!l)return null;for(sra0,t0,il-1;t\u003Cl;it++)eut,nui,oe.y*n.x-n.y*e.x,r+(e.x+n.x)*o,a+(e.y+n.y)*o,s+3*o;return h0s?u0:r/s,a/s,this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var itn.prototype._convertLatLngs.call(this,t),ei.length;return e>2&&i0instanceof M&&i0.equals(ie-1)&&i.pop(),i},_setLatLngs:function(t){tn.prototype._setLatLngs.call(this,t),Dt(this._latlngs)&&(this._latlngsthis._latlngs)},_defaultShape:function(){return Dt(this._latlngs0)?this._latlngs0:this._latlngs00},_clipPoints:function(){var tthis._renderer._bounds,ithis.options.weight,enew x(i,i);if(tnew P(t.min.subtract(e),t.max.add(e)),this._parts,this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._partsthis._rings;else for(var n,o0,sthis._rings.length;o\u003Cs;o++)(njt(this._ringso,t,!0)).length&&this._parts.push(n)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var i,e,n,o,s,r,a,h,u!1;if(!this._pxBounds.contains(t))return!1;for(o0,athis._parts.length;o\u003Ca;o++)for(s0,r(h(ithis._partso).length)-1;s\u003Ch;rs++)eis,nir,e.y>t.y!n.y>t.y&&t.x\u003C(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u!u);return u||tn.prototype._containsPoint.call(this,t,!0)}}),nnqe.extend({initialize:function(t,i){l(this,i),this._layers{},t&&this.addData(t)},addData:function(t){var i,e,n,oei(t)?t:t.features;if(o){for(i0,eo.length;i\u003Ce;i++)((noi).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var sthis.options;if(s.filter&&!s.filter(t))return this;var rWt(t,s);return r?(r.featureGt(t),r.defaultOptionsr.options,this.resetStyle(r),s.onEachFeature&&s.onEachFeature(t,r),this.addLayer(r)):this},resetStyle:function(t){return t.optionsi({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this},setStyle:function(t){return this.eachLayer(function(i){this._setLayerStyle(i,t)},this)},_setLayerStyle:function(t,i){\\\function\\\typeof i&&(ii(t.feature)),t.setStyle&&t.setStyle(i)}}),on{toGeoJSON:function(t){return qt(this,{type:\\\Point\\\,coordinates:Ut(this.getLatLng(),t)})}};Xe.include(on),Qe.include(on),$e.include(on),tn.include({toGeoJSON:function(t){var i!Dt(this._latlngs),eVt(this._latlngs,i?1:0,!1,t);return qt(this,{type:(i?\\\Multi\\\:\\\\\\)+\\\LineString\\\,coordinates:e})}}),en.include({toGeoJSON:function(t){var i!Dt(this._latlngs),ei&&!Dt(this._latlngs0),nVt(this._latlngs,e?2:i?1:0,!0,t);return i||(nn),qt(this,{type:(e?\\\Multi\\\:\\\\\\)+\\\Polygon\\\,coordinates:n})}}),Ve.include({toMultiPoint:function(t){var i;return this.eachLayer(function(e){i.push(e.toGeoJSON(t).geometry.coordinates)}),qt(this,{type:\\\MultiPoint\\\,coordinates:i})},toGeoJSON:function(t){var ithis.feature&&this.feature.geometry&&this.feature.geometry.type;if(\\\MultiPoint\\\i)return this.toMultiPoint(t);var e\\\GeometryCollection\\\i,n;return this.eachLayer(function(i){if(i.toGeoJSON){var oi.toGeoJSON(t);if(e)n.push(o.geometry);else{var sGt(o);\\\FeatureCollection\\\s.type?n.push.apply(n,s.features):n.push(s)}}}),e?qt(this,{geometries:n,type:\\\GeometryCollection\\\}):{type:\\\FeatureCollection\\\,features:n}}});var snKt,rnUe.extend({options:{opacity:1,alt:\\\\\\,interactive:!1,crossOrigin:!1,errorOverlayUrl:\\\\\\,zIndex:1,className:\\\\\\},initialize:function(t,i,e){this._urlt,this._boundsz(i),l(this,e)},onAdd:function(){this._image||(this._initImage(),this.options.opacity\u003C1&&this._updateOpacity()),this.options.interactive&&(pt(this._image,\\\leaflet-interactive\\\),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){ut(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacityt,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&ct(this._image),this},bringToBack:function(){return this._map&&_t(this._image),this},setUrl:function(t){return this._urlt,this._image&&(this._image.srct),this},setBounds:function(t){return this._boundsz(t),this._map&&this._reset(),this},getEvents:function(){var t{zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanimthis._animateZoom),t},setZIndex:function(t){return this.options.zIndext,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t\\\IMG\\\this._url.tagName,ithis._imaget?this._url:ht(\\\img\\\);pt(i,\\\leaflet-image-layer\\\),this._zoomAnimated&&pt(i,\\\leaflet-zoom-animated\\\),this.options.className&&pt(i,this.options.className),i.onselectstartr,i.onmousemover,i.onloade(this.fire,this,\\\load\\\),i.onerrore(this._overlayOnError,this,\\\error\\\),this.options.crossOrigin&&(i.crossOrigin\\\\\\),this.options.zIndex&&this._updateZIndex(),t?this._urli.src:(i.srcthis._url,i.altthis.options.alt)},_animateZoom:function(t){var ithis._map.getZoomScale(t.zoom),ethis._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;wt(this._image,e,i)},_reset:function(){var tthis._image,inew P(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),ei.getSize();Lt(t,i.min),t.style.widthe.x+\\\px\\\,t.style.heighte.y+\\\px\\\},_updateOpacity:function(){vt(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!this.options.zIndex&&null!this.options.zIndex&&(this._image.style.zIndexthis.options.zIndex)},_overlayOnError:function(){this.fire(\\\error\\\);var tthis.options.errorOverlayUrl;t&&this._url!t&&(this._urlt,this._image.srct)}}),anrn.extend({options:{autoplay:!0,loop:!0},_initImage:function(){var t\\\VIDEO\\\this._url.tagName,ithis._imaget?this._url:ht(\\\video\\\);if(pt(i,\\\leaflet-image-layer\\\),this._zoomAnimated&&pt(i,\\\leaflet-zoom-animated\\\),i.onselectstartr,i.onmousemover,i.onloadeddatae(this.fire,this,\\\load\\\),t){for(var ni.getElementsByTagName(\\\source\\\),o,s0;s\u003Cn.length;s++)o.push(ns.src);this._urln.length>0?o:i.src}else{ei(this._url)||(this._urlthis._url),i.autoplay!!this.options.autoplay,i.loop!!this.options.loop;for(var a0;a\u003Cthis._url.length;a++){var hht(\\\source\\\);h.srcthis._urla,i.appendChild(h)}}}}),hnUe.extend({options:{offset:0,7,className:\\\\\\,pane:\\\popupPane\\\},initialize:function(t,i){l(this,t),this._sourcei},onAdd:function(t){this._zoomAnimatedt._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&vt(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&vt(this._container,1),this.bringToFront()},onRemove:function(t){t._fadeAnimated?(vt(this._container,0),this._removeTimeoutsetTimeout(e(ut,void 0,this._container),200)):ut(this._container)},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlngC(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._contentt,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility\\\hidden\\\,this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility\\\\\\,this._adjustPan())},getEvents:function(){var t{zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanimthis._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&ct(this._container),this},bringToBack:function(){return this._map&&_t(this._container),this},_updateContent:function(){if(this._content){var tthis._contentNode,i\\\function\\\typeof this._content?this._content(this._source||this):this._content;if(\\\string\\\typeof i)t.innerHTMLi;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire(\\\contentupdate\\\)}},_updatePosition:function(){if(this._map){var tthis._map.latLngToLayerPoint(this._latlng),iw(this.options.offset),ethis._getAnchor();this._zoomAnimated?Lt(this._container,t.add(e)):ii.add(t).add(e);var nthis._containerBottom-i.y,othis._containerLeft-Math.round(this._containerWidth/2)+i.x;this._container.style.bottomn+\\\px\\\,this._container.style.lefto+\\\px\\\}},_getAnchor:function(){return0,0}}),unhn.extend({options:{maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:5,5,keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:\\\\\\},openOn:function(t){return t.openPopup(this),this},onAdd:function(t){hn.prototype.onAdd.call(this,t),t.fire(\\\popupopen\\\,{popup:this}),this._source&&(this._source.fire(\\\popupopen\\\,{popup:this},!0),this._source instanceof Je||this._source.on(\\\preclick\\\,Y))},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire(\\\popupclose\\\,{popup:this}),this._source&&(this._source.fire(\\\popupclose\\\,{popup:this},!0),this._source instanceof Je||this._source.off(\\\preclick\\\,Y))},getEvents:function(){var thn.prototype.getEvents.call(this);return(void 0!this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclickthis._close),this.options.keepInView&&(t.moveendthis._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t\\\leaflet-popup\\\,ithis._containerht(\\\div\\\,t+\\\ \\\+(this.options.className||\\\\\\)+\\\ leaflet-zoom-animated\\\),ethis._wrapperht(\\\div\\\,t+\\\-content-wrapper\\\,i);if(this._contentNodeht(\\\div\\\,t+\\\-content\\\,e),J(e),X(this._contentNode),V(e,\\\contextmenu\\\,Y),this._tipContainerht(\\\div\\\,t+\\\-tip-container\\\,i),this._tipht(\\\div\\\,t+\\\-tip\\\,this._tipContainer),this.options.closeButton){var nthis._closeButtonht(\\\a\\\,t+\\\-close-button\\\,i);n.href\\\#close\\\,n.innerHTML\\\×\\\,V(n,\\\click\\\,this._onCloseButtonClick,this)}},_updateLayout:function(){var tthis._contentNode,it.style;i.width\\\\\\,i.whiteSpace\\\nowrap\\\;var et.offsetWidth;eMath.min(e,this.options.maxWidth),eMath.max(e,this.options.minWidth),i.widthe+1+\\\px\\\,i.whiteSpace\\\\\\,i.height\\\\\\;var nt.offsetHeight,othis.options.maxHeight;o&&n>o?(i.heighto+\\\px\\\,pt(t,\\\leaflet-popup-scrolled\\\)):mt(t,\\\leaflet-popup-scrolled\\\),this._containerWidththis._container.offsetWidth},_animateZoom:function(t){var ithis._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),ethis._getAnchor();Lt(this._container,i.add(e))},_adjustPan:function(){if(!(!this.options.autoPan||this._map._panAnim&&this._map._panAnim._inProgress)){var tthis._map,iparseInt(at(this._container,\\\marginBottom\\\),10)||0,ethis._container.offsetHeight+i,nthis._containerWidth,onew x(this._containerLeft,-e-this._containerBottom);o._add(Pt(this._container));var st.layerPointToContainerPoint(o),rw(this.options.autoPanPadding),aw(this.options.autoPanPaddingTopLeft||r),hw(this.options.autoPanPaddingBottomRight||r),ut.getSize(),l0,c0;s.x+n+h.x>u.x&&(ls.x+n-u.x+h.x),s.x-l-a.x\u003C0&&(ls.x-a.x),s.y+e+h.y>u.y&&(cs.y+e-u.y+h.y),s.y-c-a.y\u003C0&&(cs.y-a.y),(l||c)&&t.fire(\\\autopanstart\\\).panBy(l,c)}},_onCloseButtonClick:function(t){this._close(),Q(t)},_getAnchor:function(){return w(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():0,0)}});Le.mergeOptions({closePopupOnClick:!0}),Le.include({openPopup:function(t,i,e){return t instanceof un||(tnew un(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popupt,this.addLayer(t))},closePopup:function(t){return t&&t!this._popup||(tthis._popup,this._popupnull),t&&this.removeLayer(t),this}}),Ue.include({bindPopup:function(t,i){return t instanceof un?(l(t,i),this._popupt,t._sourcethis):(this._popup&&!i||(this._popupnew un(i,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded!1,this._popupnull),this},openPopup:function(t,i){if(t instanceof Ue||(it,tthis),t instanceof qe)for(var e in this._layers){tthis._layerse;break}return i||(it.getCenter?t.getCenter():t.getLatLng()),this._popup&&this._map&&(this._popup._sourcet,this._popup.update(),this._map.openPopup(this._popup,i)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var it.layer||t.target;this._popup&&this._map&&(Q(t),i instanceof Je?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._sourcei?this.closePopup():this.openPopup(i,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13t.originalEvent.keyCode&&this._openPopup(t)}});var lnhn.extend({options:{pane:\\\tooltipPane\\\,offset:0,0,direction:\\\auto\\\,permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){hn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire(\\\tooltipopen\\\,{tooltip:this}),this._source&&this._source.fire(\\\tooltipopen\\\,{tooltip:this},!0)},onRemove:function(t){hn.prototype.onRemove.call(this,t),t.fire(\\\tooltipclose\\\,{tooltip:this}),this._source&&this._source.fire(\\\tooltipclose\\\,{tooltip:this},!0)},getEvents:function(){var thn.prototype.getEvents.call(this);return Vi&&!this.options.permanent&&(t.preclickthis._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t\\\leaflet-tooltip \\\+(this.options.className||\\\\\\)+\\\ leaflet-zoom-\\\+(this._zoomAnimated?\\\animated\\\:\\\hide\\\);this._contentNodethis._containerht(\\\div\\\,t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var ithis._map,ethis._container,ni.latLngToContainerPoint(i.getCenter()),oi.layerPointToContainerPoint(t),sthis.options.direction,re.offsetWidth,ae.offsetHeight,hw(this.options.offset),uthis._getAnchor();\\\top\\\s?tt.add(w(-r/2+h.x,-a+h.y+u.y,!0)):\\\bottom\\\s?tt.subtract(w(r/2-h.x,-h.y,!0)):\\\center\\\s?tt.subtract(w(r/2+h.x,a/2-u.y+h.y,!0)):\\\right\\\s||\\\auto\\\s&&o.x\u003Cn.x?(s\\\right\\\,tt.add(w(h.x+u.x,u.y-a/2+h.y,!0))):(s\\\left\\\,tt.subtract(w(r+u.x-h.x,a/2-u.y-h.y,!0))),mt(e,\\\leaflet-tooltip-right\\\),mt(e,\\\leaflet-tooltip-left\\\),mt(e,\\\leaflet-tooltip-top\\\),mt(e,\\\leaflet-tooltip-bottom\\\),pt(e,\\\leaflet-tooltip-\\\+s),Lt(e,t)},_updatePosition:function(){var tthis._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacityt,this._container&&vt(this._container,t)},_animateZoom:function(t){var ithis._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(i)},_getAnchor:function(){return w(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():0,0)}});Le.include({openTooltip:function(t,i,e){return t instanceof ln||(tnew ln(e).setContent(t)),i&&t.setLatLng(i),this.hasLayer(t)?this:this.addLayer(t)},closeTooltip:function(t){return t&&this.removeLayer(t),this}}),Ue.include({bindTooltip:function(t,i){return t instanceof ln?(l(t,i),this._tooltipt,t._sourcethis):(this._tooltip&&!i||(this._tooltipnew ln(i,this)),this._tooltip.setContent(t)),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltipnull),this},_initTooltipInteractions:function(t){if(t||!this._tooltipHandlersAdded){var it?\\\off\\\:\\\on\\\,e{remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?e.addthis._openTooltip:(e.mouseoverthis._openTooltip,e.mouseoutthis.closeTooltip,this._tooltip.options.sticky&&(e.mousemovethis._moveTooltip),Vi&&(e.clickthis._openTooltip)),thisi(e),this._tooltipHandlersAdded!t}},openTooltip:function(t,i){if(t instanceof Ue||(it,tthis),t instanceof qe)for(var e in this._layers){tthis._layerse;break}return i||(it.getCenter?t.getCenter():t.getLatLng()),this._tooltip&&this._map&&(this._tooltip._sourcet,this._tooltip.update(),this._map.openTooltip(this._tooltip,i),this._tooltip.options.interactive&&this._tooltip._container&&(pt(this._tooltip._container,\\\leaflet-clickable\\\),this.addInteractiveTarget(this._tooltip._container))),this},closeTooltip:function(){return this._tooltip&&(this._tooltip._close(),this._tooltip.options.interactive&&this._tooltip._container&&(mt(this._tooltip._container,\\\leaflet-clickable\\\),this.removeInteractiveTarget(this._tooltip._container))),this},toggleTooltip:function(t){return this._tooltip&&(this._tooltip._map?this.closeTooltip():this.openTooltip(t)),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_openTooltip:function(t){var it.layer||t.target;this._tooltip&&this._map&&this.openTooltip(i,this._tooltip.options.sticky?t.latlng:void 0)},_moveTooltip:function(t){var i,e,nt.latlng;this._tooltip.options.sticky&&t.originalEvent&&(ithis._map.mouseEventToContainerPoint(t.originalEvent),ethis._map.containerPointToLayerPoint(i),nthis._map.layerPointToLatLng(e)),this._tooltip.setLatLng(n)}});var cnGe.extend({options:{iconSize:12,12,html:!1,bgPos:null,className:\\\leaflet-div-icon\\\},createIcon:function(t){var it&&\\\DIV\\\t.tagName?t:document.createElement(\\\div\\\),ethis.options;if(i.innerHTML!1!e.html?e.html:\\\\\\,e.bgPos){var nw(e.bgPos);i.style.backgroundPosition-n.x+\\\px \\\+-n.y+\\\px\\\}return this._setIconStyles(i,\\\icon\\\),i},createShadow:function(){return null}});Ge.DefaultKe;var _nUe.extend({options:{tileSize:256,opacity:1,updateWhenIdle:ji,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:\\\tilePane\\\,className:\\\\\\,keepBuffer:2},initialize:function(t){l(this,t)},onAdd:function(){this._initContainer(),this._levels{},this._tiles{},this._resetView(),this._update()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),ut(this._container),t._removeZoomLimit(this),this._containernull,this._tileZoomvoid 0},bringToFront:function(){return this._map&&(ct(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(_t(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacityt,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndext,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){return this._map&&(this._removeAllTiles(),this._update()),this},getEvents:function(){var t{viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMoveo(this._onMoveEnd,this.options.updateInterval,this)),t.movethis._onMove),this._zoomAnimated&&(t.zoomanimthis._animateZoom),t},createTile:function(){return document.createElement(\\\div\\\)},getTileSize:function(){var tthis.options.tileSize;return t instanceof x?t:new x(t,t)},_updateZIndex:function(){this._container&&void 0!this.options.zIndex&&null!this.options.zIndex&&(this._container.style.zIndexthis.options.zIndex)},_setAutoZIndex:function(t){for(var i,ethis.getPane().children,n-t(-1/0,1/0),o0,se.length;o\u003Cs;o++)ieo.style.zIndex,eo!this._container&&i&&(nt(n,+i));isFinite(n)&&(this.options.zIndexn+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!Li){vt(this._container,this.options.opacity);var t+new Date,i!1,e!1;for(var n in this._tiles){var othis._tilesn;if(o.current&&o.loaded){var sMath.min(1,(t-o.loaded)/200);vt(o.el,s),s\u003C1?i!0:(o.active?e!0:this._onOpaqueTile(o),o.active!0)}}e&&!this._noPrune&&this._pruneTiles(),i&&(g(this._fadeFrame),this._fadeFramef(this._updateOpacity,this))}},_onOpaqueTile:r,_initContainer:function(){this._container||(this._containerht(\\\div\\\,\\\leaflet-layer \\\+(this.options.className||\\\\\\)),this._updateZIndex(),this.options.opacity\u003C1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var tthis._tileZoom,ithis.options.maxZoom;if(void 0!t){for(var e in this._levels)this._levelse.el.children.length||et?(this._levelse.el.style.zIndexi-Math.abs(t-e),this._onUpdateLevel(e)):(ut(this._levelse.el),this._removeTilesAtZoom(e),this._onRemoveLevel(e),delete this._levelse);var nthis._levelst,othis._map;return n||((nthis._levelst{}).elht(\\\div\\\,\\\leaflet-tile-container leaflet-zoom-animated\\\,this._container),n.el.style.zIndexi,n.origino.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoomt,this._setZoomTransform(n,o.getCenter(),o.getZoom()),n.el.offsetWidth,this._onCreateLevel(n)),this._leveln,n}},_onUpdateLevel:r,_onRemoveLevel:r,_onCreateLevel:r,_pruneTiles:function(){if(this._map){var t,i,ethis._map.getZoom();if(e>this.options.maxZoom||e\u003Cthis.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(ithis._tilest).retaini.current;for(t in this._tiles)if((ithis._tilest).current&&!i.active){var ni.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t in this._tiles)this._tilest.retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var i in this._tiles)this._tilesi.coords.zt&&this._removeTile(i)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)ut(this._levelst.el),this._onRemoveLevel(t),delete this._levelst;this._removeAllTiles(),this._tileZoomvoid 0},_retainParent:function(t,i,e,n){var oMath.floor(t/2),sMath.floor(i/2),re-1,anew x(+o,+s);a.z+r;var hthis._tileCoordsToKey(a),uthis._tilesh;return u&&u.active?(u.retain!0,!0):(u&&u.loaded&&(u.retain!0),r>n&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o2*t;o\u003C2*t+2;o++)for(var s2*i;s\u003C2*i+2;s++){var rnew x(o,s);r.ze+1;var athis._tileCoordsToKey(r),hthis._tilesa;h&&h.active?h.retain!0:(h&&h.loaded&&(h.retain!0),e+1\u003Cn&&this._retainChildren(o,s,e+1,n))}},_resetView:function(t){var it&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),i,i)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var ithis.options;return void 0!i.minNativeZoom&&t\u003Ci.minNativeZoom?i.minNativeZoom:void 0!i.maxNativeZoom&&i.maxNativeZoom\u003Ct?i.maxNativeZoom:t},_setView:function(t,i,e,n){var othis._clampZoom(Math.round(i));(void 0!this.options.maxZoom&&o>this.options.maxZoom||void 0!this.options.minZoom&&o\u003Cthis.options.minZoom)&&(ovoid 0);var sthis.options.updateWhenZooming&&o!this._tileZoom;n&&!s||(this._tileZoomo,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!o&&this._update(t),e||this._pruneTiles(),this._noPrune!!e),this._setZoomTransforms(t,i)},_setZoomTransforms:function(t,i){for(var e in this._levels)this._setZoomTransform(this._levelse,t,i)},_setZoomTransform:function(t,i,e){var nthis._map.getZoomScale(e,t.zoom),ot.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i,e)).round();Ni?wt(t.el,o,n):Lt(t.el,o)},_resetGrid:function(){var tthis._map,it.options.crs,ethis._tileSizethis.getTileSize(),nthis._tileZoom,othis._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRangethis._pxBoundsToTileRange(o)),this._wrapXi.wrapLng&&!this.options.noWrap&&Math.floor(t.project(0,i.wrapLng0,n).x/e.x),Math.ceil(t.project(0,i.wrapLng1,n).x/e.y),this._wrapYi.wrapLat&&!this.options.noWrap&&Math.floor(t.project(i.wrapLat0,0,n).y/e.x),Math.ceil(t.project(i.wrapLat1,0,n).y/e.y)},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var ithis._map,ei._animatingZoom?Math.max(i._animateToZoom,i.getZoom()):i.getZoom(),ni.getZoomScale(e,this._tileZoom),oi.project(t,this._tileZoom).floor(),si.getSize().divideBy(2*n);return new P(o.subtract(s),o.add(s))},_update:function(t){var ithis._map;if(i){var ethis._clampZoom(i.getZoom());if(void 0t&&(ti.getCenter()),void 0!this._tileZoom){var nthis._getTiledPixelBounds(t),othis._pxBoundsToTileRange(n),so.getCenter(),r,athis.options.keepBuffer,hnew P(o.getBottomLeft().subtract(a,-a),o.getTopRight().add(a,-a));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error(\\\Attempted to load an infinite number of tiles\\\);for(var u in this._tiles){var lthis._tilesu.coords;l.zthis._tileZoom&&h.contains(new x(l.x,l.y))||(this._tilesu.current!1)}if(Math.abs(e-this._tileZoom)>1)this._setView(t,e);else{for(var co.min.y;c\u003Co.max.y;c++)for(var _o.min.x;_\u003Co.max.x;_++){var dnew x(_,c);if(d.zthis._tileZoom,this._isValidTile(d)){var pthis._tilesthis._tileCoordsToKey(d);p?p.current!0:r.push(d)}}if(r.sort(function(t,i){return t.distanceTo(s)-i.distanceTo(s)}),0!r.length){this._loading||(this._loading!0,this.fire(\\\loading\\\));var mdocument.createDocumentFragment();for(_0;_\u003Cr.length;_++)this._addTile(r_,m);this._level.el.appendChild(m)}}}}},_isValidTile:function(t){var ithis._map.options.crs;if(!i.infinite){var ethis._globalTileRange;if(!i.wrapLng&&(t.x\u003Ce.min.x||t.x>e.max.x)||!i.wrapLat&&(t.y\u003Ce.min.y||t.y>e.max.y))return!1}if(!this.options.bounds)return!0;var nthis._tileCoordsToBounds(t);return z(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var ithis._map,ethis.getTileSize(),nt.scaleBy(e),on.add(e);returni.unproject(n,t.z),i.unproject(o,t.z)},_tileCoordsToBounds:function(t){var ithis._tileCoordsToNwSe(t),enew T(i0,i1);return this.options.noWrap||(ethis._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+\\\:\\\+t.y+\\\:\\\+t.z},_keyToTileCoords:function(t){var it.split(\\\:\\\),enew x(+i0,+i1);return e.z+i2,e},_removeTile:function(t){var ithis._tilest;i&&(Ci||i.el.setAttribute(\\\src\\\,ni),ut(i.el),delete this._tilest,this.fire(\\\tileunload\\\,{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){pt(t,\\\leaflet-tile\\\);var ithis.getTileSize();t.style.widthi.x+\\\px\\\,t.style.heighti.y+\\\px\\\,t.onselectstartr,t.onmousemover,Li&&this.options.opacity\u003C1&&vt(t,this.options.opacity),Ti&&!zi&&(t.style.WebkitBackfaceVisibility\\\hidden\\\)},_addTile:function(t,i){var nthis._getTilePos(t),othis._tileCoordsToKey(t),sthis.createTile(this._wrapCoords(t),e(this._tileReady,this,t));this._initTile(s),this.createTile.length\u003C2&&f(e(this._tileReady,this,t,null,s)),Lt(s,n),this._tileso{el:s,coords:t,current:!0},i.appendChild(s),this.fire(\\\tileloadstart\\\,{tile:s,coords:t})},_tileReady:function(t,i,n){if(this._map){i&&this.fire(\\\tileerror\\\,{error:i,tile:n,coords:t});var othis._tileCoordsToKey(t);(nthis._tileso)&&(n.loaded+new Date,this._map._fadeAnimated?(vt(n.el,0),g(this._fadeFrame),this._fadeFramef(this._updateOpacity,this)):(n.active!0,this._pruneTiles()),i||(pt(n.el,\\\leaflet-tile-loaded\\\),this.fire(\\\tileload\\\,{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading!1,this.fire(\\\load\\\),Li||!this._map._fadeAnimated?f(this._pruneTiles,this):setTimeout(e(this._pruneTiles,this),250)))}},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var inew x(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return i.zt.z,i},_pxBoundsToTileRange:function(t){var ithis.getTileSize();return new P(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract(1,1))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tilest.loaded)return!1;return!0}}),dn_n.extend({options:{minZoom:0,maxZoom:18,subdomains:\\\abc\\\,errorTileUrl:\\\\\\,zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,i){this._urlt,(il(this,i)).detectRetina&&Ki&&i.maxZoom>0&&(i.tileSizeMath.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoomMath.max(0,i.minZoom)),\\\string\\\typeof i.subdomains&&(i.subdomainsi.subdomains.split(\\\\\\)),Ti||this.on(\\\tileunload\\\,this._onTileRemove)},setUrl:function(t,i){return this._urlt,i||this.redraw(),this},createTile:function(t,i){var ndocument.createElement(\\\img\\\);return V(n,\\\load\\\,e(this._tileOnLoad,this,i,n)),V(n,\\\error\\\,e(this._tileOnError,this,i,n)),this.options.crossOrigin&&(n.crossOrigin\\\\\\),n.alt\\\\\\,n.setAttribute(\\\role\\\,\\\presentation\\\),n.srcthis.getTileUrl(t),n},getTileUrl:function(t){var e{r:Ki?\\\@2x\\\:\\\\\\,s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var nthis._globalTileRange.max.y-t.y;this.options.tms&&(e.yn),e\\\-y\\\n}return _(this._url,i(e,this.options))},_tileOnLoad:function(t,i){Li?setTimeout(e(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var nthis.options.errorTileUrl;n&&i.getAttribute(\\\src\\\)!n&&(i.srcn),t(e,i)},_onTileRemove:function(t){t.tile.onloadnull},_getZoomForUrl:function(){var tthis._tileZoom,ithis.options.maxZoom,ethis.options.zoomReverse,nthis.options.zoomOffset;return e&&(ti-t),t+n},_getSubdomain:function(t){var iMath.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomainsi},_abortLoading:function(){var t,i;for(t in this._tiles)this._tilest.coords.z!this._tileZoom&&((ithis._tilest.el).onloadr,i.onerrorr,i.complete||(i.srcni,ut(i),delete this._tilest))}}),pndn.extend({defaultWmsParams:{service:\\\WMS\\\,request:\\\GetMap\\\,layers:\\\\\\,styles:\\\\\\,format:\\\image/jpeg\\\,transparent:!1,version:\\\1.1.1\\\},options:{crs:null,uppercase:!1},initialize:function(t,e){this._urlt;var ni({},this.defaultWmsParams);for(var o in e)o in this.options||(noeo);var s(el(this,e)).detectRetina&&Ki?2:1,rthis.getTileSize();n.widthr.x*s,n.heightr.y*s,this.wmsParamsn},onAdd:function(t){this._crsthis.options.crs||t.options.crs,this._wmsVersionparseFloat(this.wmsParams.version);var ithis._wmsVersion>1.3?\\\crs\\\:\\\srs\\\;this.wmsParamsithis._crs.code,dn.prototype.onAdd.call(this,t)},getTileUrl:function(t){var ithis._tileCoordsToNwSe(t),ethis._crs,nb(e.project(i0),e.project(i1)),on.min,sn.max,r(this._wmsVersion>1.3&&this._crsHe?o.y,o.x,s.y,s.x:o.x,o.y,s.x,s.y).join(\\\,\\\),aL.TileLayer.prototype.getTileUrl.call(this,t);return a+c(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?\\\&BBOX\\\:\\\&bbox\\\)+r},setParams:function(t,e){return i(this.wmsParams,t),e||this.redraw(),this}});dn.WMSpn,Yt.wmsfunction(t,i){return new pn(t,i)};var mnUe.extend({options:{padding:.1,tolerance:0},initialize:function(t){l(this,t),n(this),this._layersthis._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&pt(this._container,\\\leaflet-zoom-animated\\\)),this.getPane().appendChild(this._container),this._update(),this.on(\\\update\\\,this._updatePaths,this)},onRemove:function(){this.off(\\\update\\\,this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t{viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanimthis._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var ethis._map.getZoomScale(i,this._zoom),nPt(this._container),othis._map.getSize().multiplyBy(.5+this.options.padding),sthis._map.project(this._center,i),rthis._map.project(t,i).subtract(s),ao.multiplyBy(-e).add(n).add(o).subtract(r);Ni?wt(this._container,a,e):Lt(this._container,a)},_reset:function(){this._update(),this._updateTransform(this._center,this._zoom);for(var t in this._layers)this._layerst._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layerst._project()},_updatePaths:function(){for(var t in this._layers)this._layerst._update()},_update:function(){var tthis.options.padding,ithis._map.getSize(),ethis._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._boundsnew P(e,e.add(i.multiplyBy(1+2*t)).round()),this._centerthis._map.getCenter(),this._zoomthis._map.getZoom()}}),fnmn.extend({getEvents:function(){var tmn.prototype.getEvents.call(this);return t.viewpreresetthis._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths!0},onAdd:function(){mn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var tthis._containerdocument.createElement(\\\canvas\\\);V(t,\\\mousemove\\\,o(this._onMouseMove,32,this),this),V(t,\\\click dblclick mousedown mouseup contextmenu\\\,this._onClick,this),V(t,\\\mouseout\\\,this._handleMouseOut,this),this._ctxt.getContext(\\\2d\\\)},_destroyContainer:function(){delete this._ctx,ut(this._container),q(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){this._redrawBoundsnull;for(var t in this._layers)this._layerst._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){this._drawnLayers{},mn.prototype._update.call(this);var tthis._bounds,ithis._container,et.getSize(),nKi?2:1;Lt(i,t.min),i.widthn*e.x,i.heightn*e.y,i.style.widthe.x+\\\px\\\,i.style.heighte.y+\\\px\\\,Ki&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire(\\\update\\\)}},_reset:function(){mn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layersn(t)t;var it._order{layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.nexti),this._drawLasti,this._drawFirstthis._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var it._order,ei.next,ni.prev;e?e.prevn:this._drawLastn,n?n.nexte:this._drawFirste,delete t._order,delete this._layersL.stamp(t),this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(t.options.dashArray){var i,et.options.dashArray.split(\\\,\\\),n;for(i0;i\u003Ce.length;i++)n.push(Number(ei));t.options._dashArrayn}},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequestthis._redrawRequest||f(this._redraw,this))},_extendRedrawBounds:function(t){if(t._pxBounds){var i(t.options.weight||0)+1;this._redrawBoundsthis._redrawBounds||new P,this._redrawBounds.extend(t._pxBounds.min.subtract(i,i)),this._redrawBounds.extend(t._pxBounds.max.add(i,i))}},_redraw:function(){this._redrawRequestnull,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBoundsnull},_clear:function(){var tthis._redrawBounds;if(t){var it.getSize();this._ctx.clearRect(t.min.x,t.min.y,i.x,i.y)}else this._ctx.clearRect(0,0,this._container.width,this._container.height)},_draw:function(){var t,ithis._redrawBounds;if(this._ctx.save(),i){var ei.getSize();this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()}this._drawing!0;for(var nthis._drawFirst;n;nn.next)tn.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing!1,this._ctx.restore()},_updatePoly:function(t,i){if(this._drawing){var e,n,o,s,rt._parts,ar.length,hthis._ctx;if(a){for(this._drawnLayerst._leaflet_idt,h.beginPath(),e0;e\u003Ca;e++){for(n0,ore.length;n\u003Co;n++)sren,hn?\\\lineTo\\\:\\\moveTo\\\(s.x,s.y);i&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){if(this._drawing&&!t._empty()){var it._point,ethis._ctx,nMath.max(Math.round(t._radius),1),o(Math.max(Math.round(t._radiusY),1)||n)/n;this._drawnLayerst._leaflet_idt,1!o&&(e.save(),e.scale(1,o)),e.beginPath(),e.arc(i.x,i.y/o,n,0,2*Math.PI,!1),1!o&&e.restore(),this._fillStroke(e,t)}},_fillStroke:function(t,i){var ei.options;e.fill&&(t.globalAlphae.fillOpacity,t.fillStylee.fillColor||e.color,t.fill(e.fillRule||\\\evenodd\\\)),e.stroke&&0!e.weight&&(t.setLineDash&&t.setLineDash(i.options&&i.options._dashArray||),t.globalAlphae.opacity,t.lineWidthe.weight,t.strokeStylee.color,t.lineCape.lineCap,t.lineJoine.lineJoin,t.stroke())},_onClick:function(t){for(var i,e,nthis._map.mouseEventToLayerPoint(t),othis._drawFirst;o;oo.next)(io.layer).options.interactive&&i._containsPoint(n)&&!this._map._draggableMoved(i)&&(ei);e&&(et(t),this._fireEvent(e,t))},_onMouseMove:function(t){if(this._map&&!this._map.dragging.moving()&&!this._map._animatingZoom){var ithis._map.mouseEventToLayerPoint(t);this._handleMouseHover(t,i)}},_handleMouseOut:function(t){var ithis._hoveredLayer;i&&(mt(this._container,\\\leaflet-interactive\\\),this._fireEvent(i,t,\\\mouseout\\\),this._hoveredLayernull)},_handleMouseHover:function(t,i){for(var e,n,othis._drawFirst;o;oo.next)(eo.layer).options.interactive&&e._containsPoint(i)&&(ne);n!this._hoveredLayer&&(this._handleMouseOut(t),n&&(pt(this._container,\\\leaflet-interactive\\\),this._fireEvent(n,t,\\\mouseover\\\),this._hoveredLayern)),this._hoveredLayer&&this._fireEvent(this._hoveredLayer,t)},_fireEvent:function(t,i,e){this._map._fireDOMEvent(i,e||i.type,t)},_bringToFront:function(t){var it._order,ei.next,ni.prev;e&&(e.prevn,n?n.nexte:e&&(this._drawFirste),i.prevthis._drawLast,this._drawLast.nexti,i.nextnull,this._drawLasti,this._requestRedraw(t))},_bringToBack:function(t){var it._order,ei.next,ni.prev;n&&(n.nexte,e?e.prevn:n&&(this._drawLastn),i.prevnull,i.nextthis._drawFirst,this._drawFirst.previ,this._drawFirsti,this._requestRedraw(t))}}),gnfunction(){try{return document.namespaces.add(\\\lvml\\\,\\\urn:schemas-microsoft-com:vml\\\),function(t){return document.createElement(\\\\u003Clvml:\\\+t+ class\\\lvml\\\>)}}catch(t){return function(t){return document.createElement(\\\\u003C\\\+t+ xmlns\\\urn:schemas-microsoft.com:vml\\\ class\\\lvml\\\>)}}}(),vn{_initContainer:function(){this._containerht(\\\div\\\,\\\leaflet-vml-container\\\)},_update:function(){this._map._animatingZoom||(mn.prototype._update.call(this),this.fire(\\\update\\\))},_initPath:function(t){var it._containergn(\\\shape\\\);pt(i,\\\leaflet-vml-shape \\\+(this.options.className||\\\\\\)),i.coordsize\\\1 1\\\,t._pathgn(\\\path\\\),i.appendChild(t._path),this._updateStyle(t),this._layersn(t)t},_addPath:function(t){var it._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var it._container;ut(i),t.removeInteractiveTarget(i),delete this._layersn(t)},_updateStyle:function(t){var it._stroke,et._fill,nt.options,ot._container;o.stroked!!n.stroke,o.filled!!n.fill,n.stroke?(i||(it._strokegn(\\\stroke\\\)),o.appendChild(i),i.weightn.weight+\\\px\\\,i.colorn.color,i.opacityn.opacity,n.dashArray?i.dashStyleei(n.dashArray)?n.dashArray.join(\\\ \\\):n.dashArray.replace(/( *, *)/g,\\\ \\\):i.dashStyle\\\\\\,i.endcapn.lineCap.replace(\\\butt\\\,\\\flat\\\),i.joinstylen.lineJoin):i&&(o.removeChild(i),t._strokenull),n.fill?(e||(et._fillgn(\\\fill\\\)),o.appendChild(e),e.colorn.fillColor||n.color,e.opacityn.fillOpacity):e&&(o.removeChild(e),t._fillnull)},_updateCircle:function(t){var it._point.round(),eMath.round(t._radius),nMath.round(t._radiusY||e);this._setPath(t,t._empty()?\\\M0 0\\\:\\\AL \\\+i.x+\\\,\\\+i.y+\\\ \\\+e+\\\,\\\+n+\\\ 0,23592600\\\)},_setPath:function(t,i){t._path.vi},_bringToFront:function(t){ct(t._container)},_bringToBack:function(t){_t(t._container)}},ynJi?gn:E,xnmn.extend({getEvents:function(){var tmn.prototype.getEvents.call(this);return t.zoomstartthis._onZoomStart,t},_initContainer:function(){this._containeryn(\\\svg\\\),this._container.setAttribute(\\\pointer-events\\\,\\\none\\\),this._rootGroupyn(\\\g\\\),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ut(this._container),q(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){mn.prototype._update.call(this);var tthis._bounds,it.getSize(),ethis._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSizei,e.setAttribute(\\\width\\\,i.x),e.setAttribute(\\\height\\\,i.y)),Lt(e,t.min),e.setAttribute(\\\viewBox\\\,t.min.x,t.min.y,i.x,i.y.join(\\\ \\\)),this.fire(\\\update\\\)}},_initPath:function(t){var it._pathyn(\\\path\\\);t.options.className&&pt(i,t.options.className),t.options.interactive&&pt(i,\\\leaflet-interactive\\\),this._updateStyle(t),this._layersn(t)t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ut(t._path),t.removeInteractiveTarget(t._path),delete this._layersn(t)},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var it._path,et.options;i&&(e.stroke?(i.setAttribute(\\\stroke\\\,e.color),i.setAttribute(\\\stroke-opacity\\\,e.opacity),i.setAttribute(\\\stroke-width\\\,e.weight),i.setAttribute(\\\stroke-linecap\\\,e.lineCap),i.setAttribute(\\\stroke-linejoin\\\,e.lineJoin),e.dashArray?i.setAttribute(\\\stroke-dasharray\\\,e.dashArray):i.removeAttribute(\\\stroke-dasharray\\\),e.dashOffset?i.setAttribute(\\\stroke-dashoffset\\\,e.dashOffset):i.removeAttribute(\\\stroke-dashoffset\\\)):i.setAttribute(\\\stroke\\\,\\\none\\\),e.fill?(i.setAttribute(\\\fill\\\,e.fillColor||e.color),i.setAttribute(\\\fill-opacity\\\,e.fillOpacity),i.setAttribute(\\\fill-rule\\\,e.fillRule||\\\evenodd\\\)):i.setAttribute(\\\fill\\\,\\\none\\\))},_updatePoly:function(t,i){this._setPath(t,k(t._parts,i))},_updateCircle:function(t){var it._point,eMath.max(Math.round(t._radius),1),n\\\a\\\+e+\\\,\\\+(Math.max(Math.round(t._radiusY),1)||e)+\\\ 0 1,0 \\\,ot._empty()?\\\M0 0\\\:\\\M\\\+(i.x-e)+\\\,\\\+i.y+n+2*e+\\\,0 \\\+n+2*-e+\\\,0 \\\;this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute(\\\d\\\,i)},_bringToFront:function(t){ct(t._path)},_bringToBack:function(t){_t(t._path)}});Ji&&xn.include(vn),Le.include({getRenderer:function(t){var it.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(ithis._rendererthis.options.preferCanvas&&Xt()||Jt()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if(\\\overlayPane\\\t||void 0t)return!1;var ithis._paneRendererst;return void 0i&&(ixn&&Jt({pane:t})||fn&&Xt({pane:t}),this._paneRenderersti),i}});var wnen.extend({initialize:function(t,i){en.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return tz(t),t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()}});xn.createyn,xn.pointsToPathk,nn.geometryToLayerWt,nn.coordsToLatLngHt,nn.coordsToLatLngsFt,nn.latLngToCoordsUt,nn.latLngsToCoordsVt,nn.getFeatureqt,nn.asFeatureGt,Le.mergeOptions({boxZoom:!0});var LnZe.extend({initialize:function(t){this._mapt,this._containert._container,this._panet._panes.overlayPane,this._resetStateTimeout0,t.on(\\\unload\\\,this._destroy,this)},addHooks:function(){V(this._container,\\\mousedown\\\,this._onMouseDown,this)},removeHooks:function(){q(this._container,\\\mousedown\\\,this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ut(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout0,this._moved!1},_clearDeferredResetState:function(){0!this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout0)},_onMouseDown:function(t){if(!t.shiftKey||1!t.which&&1!t.button)return!1;this._clearDeferredResetState(),this._resetState(),mi(),bt(),this._startPointthis._map.mouseEventToContainerPoint(t),V(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved!0,this._boxht(\\\div\\\,\\\leaflet-zoom-box\\\,this._container),pt(this._container,\\\leaflet-crosshair\\\),this._map.fire(\\\boxzoomstart\\\)),this._pointthis._map.mouseEventToContainerPoint(t);var inew P(this._point,this._startPoint),ei.getSize();Lt(this._box,i.min),this._box.style.widthe.x+\\\px\\\,this._box.style.heighte.y+\\\px\\\},_finish:function(){this._moved&&(ut(this._box),mt(this._container,\\\leaflet-crosshair\\\)),fi(),Tt(),q(document,{contextmenu:Q,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1t.which||1t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeoutsetTimeout(e(this._resetState,this),0);var inew T(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire(\\\boxzoomend\\\,{boxZoomBounds:i})}},_onKeyDown:function(t){27t.keyCode&&this._finish()}});Le.addInitHook(\\\addHandler\\\,\\\boxZoom\\\,Ln),Le.mergeOptions({doubleClickZoom:!0});var PnZe.extend({addHooks:function(){this._map.on(\\\dblclick\\\,this._onDoubleClick,this)},removeHooks:function(){this._map.off(\\\dblclick\\\,this._onDoubleClick,this)},_onDoubleClick:function(t){var ithis._map,ei.getZoom(),ni.options.zoomDelta,ot.originalEvent.shiftKey?e-n:e+n;\\\center\\\i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});Le.addInitHook(\\\addHandler\\\,\\\doubleClickZoom\\\,Pn),Le.mergeOptions({dragging:!0,inertia:!zi,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var bnZe.extend({addHooks:function(){if(!this._draggable){var tthis._map;this._draggablenew Be(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on(\\\predrag\\\,this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on(\\\predrag\\\,this._onPreDragWrap,this),t.on(\\\zoomend\\\,this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}pt(this._map._container,\\\leaflet-grab leaflet-touch-drag\\\),this._draggable.enable(),this._positions,this._times},removeHooks:function(){mt(this._map._container,\\\leaflet-grab\\\),mt(this._map._container,\\\leaflet-touch-drag\\\),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var tthis._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var iz(this._map.options.maxBounds);this._offsetLimitb(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosityMath.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimitnull;t.fire(\\\movestart\\\).fire(\\\dragstart\\\),t.options.inertia&&(this._positions,this._times)},_onDrag:function(t){if(this._map.options.inertia){var ithis._lastTime+new Date,ethis._lastPosthis._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire(\\\move\\\,t).fire(\\\drag\\\,t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times0>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var tthis._map.getSize().divideBy(2),ithis._map.latLngToLayerPoint(0,0);this._initialWorldOffseti.subtract(t).x,this._worldWidththis._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var tthis._draggable._newPos.subtract(this._draggable._startPos),ithis._offsetLimit;t.x\u003Ci.min.x&&(t.xthis._viscousLimit(t.x,i.min.x)),t.y\u003Ci.min.y&&(t.ythis._viscousLimit(t.y,i.min.y)),t.x>i.max.x&&(t.xthis._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.ythis._viscousLimit(t.y,i.max.y)),this._draggable._newPosthis._draggable._startPos.add(t)}},_onPreDragWrap:function(){var tthis._worldWidth,iMath.round(t/2),ethis._initialWorldOffset,nthis._draggable._newPos.x,o(n-i+e)%t+i-e,s(n+i+e)%t-i-e,rMath.abs(o+e)\u003CMath.abs(s+e)?o:s;this._draggable._absPosthis._draggable._newPos.clone(),this._draggable._newPos.xr},_onDragEnd:function(t){var ithis._map,ei.options,n!e.inertia||this._times.length\u003C2;if(i.fire(\\\dragend\\\,t),n)i.fire(\\\moveend\\\);else{this._prunePositions(+new Date);var othis._lastPos.subtract(this._positions0),s(this._lastTime-this._times0)/1e3,re.easeLinearity,ao.multiplyBy(r/s),ha.distanceTo(0,0),uMath.min(e.inertiaMaxSpeed,h),la.multiplyBy(u/h),cu/(e.inertiaDeceleration*r),_l.multiplyBy(-c/2).round();_.x||_.y?(_i._limitOffset(_,i.options.maxBounds),f(function(){i.panBy(_,{duration:c,easeLinearity:r,noMoveStart:!0,animate:!0})})):i.fire(\\\moveend\\\)}}});Le.addInitHook(\\\addHandler\\\,\\\dragging\\\,bn),Le.mergeOptions({keyboard:!0,keyboardPanDelta:80});var TnZe.extend({keyCodes:{left:37,right:39,down:40,up:38,zoomIn:187,107,61,171,zoomOut:189,109,54,173},initialize:function(t){this._mapt,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var tthis._map._container;t.tabIndex\u003C0&&(t.tabIndex\\\0\\\),V(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),q(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var tdocument.body,idocument.documentElement,et.scrollTop||i.scrollTop,nt.scrollLeft||i.scrollLeft;this._map._container.focus(),window.scrollTo(n,e)}},_onFocus:function(){this._focused!0,this._map.fire(\\\focus\\\)},_onBlur:function(){this._focused!1,this._map.fire(\\\blur\\\)},_setPanDelta:function(t){var i,e,nthis._panKeys{},othis.keyCodes;for(i0,eo.left.length;i\u003Ce;i++)no.lefti-1*t,0;for(i0,eo.right.length;i\u003Ce;i++)no.rightit,0;for(i0,eo.down.length;i\u003Ce;i++)no.downi0,t;for(i0,eo.up.length;i\u003Ce;i++)no.upi0,-1*t},_setZoomDelta:function(t){var i,e,nthis._zoomKeys{},othis.keyCodes;for(i0,eo.zoomIn.length;i\u003Ce;i++)no.zoomInit;for(i0,eo.zoomOut.length;i\u003Ce;i++)no.zoomOuti-t},_addHooks:function(){V(document,\\\keydown\\\,this._onKeyDown,this)},_removeHooks:function(){q(document,\\\keydown\\\,this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var i,et.keyCode,nthis._map;if(e in this._panKeys){if(n._panAnim&&n._panAnim._inProgress)return;ithis._panKeyse,t.shiftKey&&(iw(i).multiplyBy(3)),n.panBy(i),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds)}else if(e in this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeyse);else{if(27!e||!n._popup||!n._popup.options.closeOnEscapeKey)return;n.closePopup()}Q(t)}}});Le.addInitHook(\\\addHandler\\\,\\\keyboard\\\,Tn),Le.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var znZe.extend({addHooks:function(){V(this._map._container,\\\mousewheel\\\,this._onWheelScroll,this),this._delta0},removeHooks:function(){q(this._map._container,\\\mousewheel\\\,this._onWheelScroll,this)},_onWheelScroll:function(t){var iit(t),nthis._map.options.wheelDebounceTime;this._delta+i,this._lastMousePosthis._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime+new Date);var oMath.max(n-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timersetTimeout(e(this._performZoom,this),o),Q(t)},_performZoom:function(){var tthis._map,it.getZoom(),ethis._map.options.zoomSnap||0;t._stop();var nthis._delta/(4*this._map.options.wheelPxPerZoomLevel),o4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,se?Math.ceil(o/e)*e:o,rt._limitZoom(i+(this._delta>0?s:-s))-i;this._delta0,this._startTimenull,r&&(\\\center\\\t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});Le.addInitHook(\\\addHandler\\\,\\\scrollWheelZoom\\\,zn),Le.mergeOptions({tap:!0,tapTolerance:15});var MnZe.extend({addHooks:function(){V(this._map._container,\\\touchstart\\\,this._onDown,this)},removeHooks:function(){q(this._map._container,\\\touchstart\\\,this._onDown,this)},_onDown:function(t){if(t.touches){if($(t),this._fireClick!0,t.touches.length>1)return this._fireClick!1,void clearTimeout(this._holdTimeout);var it.touches0,ni.target;this._startPosthis._newPosnew x(i.clientX,i.clientY),n.tagName&&\\\a\\\n.tagName.toLowerCase()&&pt(n,\\\leaflet-active\\\),this._holdTimeoutsetTimeout(e(function(){this._isTapValid()&&(this._fireClick!1,this._onUp(),this._simulateEvent(\\\contextmenu\\\,i))},this),1e3),this._simulateEvent(\\\mousedown\\\,i),V(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),q(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var it.changedTouches0,ei.target;e&&e.tagName&&\\\a\\\e.tagName.toLowerCase()&&mt(e,\\\leaflet-active\\\),this._simulateEvent(\\\mouseup\\\,i),this._isTapValid()&&this._simulateEvent(\\\click\\\,i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)\u003Cthis._map.options.tapTolerance},_onMove:function(t){var it.touches0;this._newPosnew x(i.clientX,i.clientY),this._simulateEvent(\\\mousemove\\\,i)},_simulateEvent:function(t,i){var edocument.createEvent(\\\MouseEvents\\\);e._simulated!0,i.target._simulatedClick!0,e.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),i.target.dispatchEvent(e)}});Vi&&!Ui&&Le.addInitHook(\\\addHandler\\\,\\\tap\\\,Mn),Le.mergeOptions({touchZoom:Vi&&!zi,bounceAtZoomLimits:!0});var CnZe.extend({addHooks:function(){pt(this._map._container,\\\leaflet-touch-zoom\\\),V(this._map._container,\\\touchstart\\\,this._onTouchStart,this)},removeHooks:function(){mt(this._map._container,\\\leaflet-touch-zoom\\\),q(this._map._container,\\\touchstart\\\,this._onTouchStart,this)},_onTouchStart:function(t){var ithis._map;if(t.touches&&2t.touches.length&&!i._animatingZoom&&!this._zooming){var ei.mouseEventToContainerPoint(t.touches0),ni.mouseEventToContainerPoint(t.touches1);this._centerPointi.getSize()._divideBy(2),this._startLatLngi.containerPointToLatLng(this._centerPoint),\\\center\\\!i.options.touchZoom&&(this._pinchStartLatLngi.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDiste.distanceTo(n),this._startZoomi.getZoom(),this._moved!1,this._zooming!0,i._stop(),V(document,\\\touchmove\\\,this._onTouchMove,this),V(document,\\\touchend\\\,this._onTouchEnd,this),$(t)}},_onTouchMove:function(t){if(t.touches&&2t.touches.length&&this._zooming){var ithis._map,ni.mouseEventToContainerPoint(t.touches0),oi.mouseEventToContainerPoint(t.touches1),sn.distanceTo(o)/this._startDist;if(this._zoomi.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoom\u003Ci.getMinZoom()&&s\u003C1||this._zoom>i.getMaxZoom()&&s>1)&&(this._zoomi._limitZoom(this._zoom)),\\\center\\\i.options.touchZoom){if(this._centerthis._startLatLng,1s)return}else{var rn._add(o)._divideBy(2)._subtract(this._centerPoint);if(1s&&0r.x&&0r.y)return;this._centeri.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved!0),g(this._animRequest);var ae(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequestf(a,this,!0),$(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming!1,g(this._animRequest),q(document,\\\touchmove\\\,this._onTouchMove),q(document,\\\touchend\\\,this._onTouchEnd),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming!1}});Le.addInitHook(\\\addHandler\\\,\\\touchZoom\\\,Cn),Le.BoxZoomLn,Le.DoubleClickZoomPn,Le.Dragbn,Le.KeyboardTn,Le.ScrollWheelZoomzn,Le.TapMn,Le.TouchZoomCn;var Znwindow.L;window.Lt,Object.freeze$t,t.version\\\1.3.1\\\,t.noConflictfunction(){return window.LZn,this},t.ControlPe,t.controlbe,t.Browser$i,t.Eventedui,t.MixinEe,t.Utilai,t.Classv,t.HandlerZe,t.extendi,t.binde,t.stampn,t.setOptionsl,t.DomEventde,t.DomUtilxe,t.PosAnimationwe,t.DraggableBe,t.LineUtilOe,t.PolyUtilRe,t.Pointx,t.pointw,t.BoundsP,t.boundsb,t.TransformationZ,t.transformationS,t.Projectionje,t.LatLngM,t.latLngC,t.LatLngBoundsT,t.latLngBoundsz,t.CRSci,t.GeoJSONnn,t.geoJSONKt,t.geoJsonsn,t.LayerUe,t.LayerGroupVe,t.layerGroupfunction(t,i){return new Ve(t,i)},t.FeatureGroupqe,t.featureGroupfunction(t){return new qe(t)},t.ImageOverlayrn,t.imageOverlayfunction(t,i,e){return new rn(t,i,e)},t.VideoOverlayan,t.videoOverlayfunction(t,i,e){return new an(t,i,e)},t.DivOverlayhn,t.Popupun,t.popupfunction(t,i){return new un(t,i)},t.Tooltipln,t.tooltipfunction(t,i){return new ln(t,i)},t.IconGe,t.iconfunction(t){return new Ge(t)},t.DivIconcn,t.divIconfunction(t){return new cn(t)},t.MarkerXe,t.markerfunction(t,i){return new Xe(t,i)},t.TileLayerdn,t.tileLayerYt,t.GridLayer_n,t.gridLayerfunction(t){return new _n(t)},t.SVGxn,t.svgJt,t.Renderermn,t.Canvasfn,t.canvasXt,t.PathJe,t.CircleMarker$e,t.circleMarkerfunction(t,i){return new $e(t,i)},t.CircleQe,t.circlefunction(t,i,e){return new Qe(t,i,e)},t.Polylinetn,t.polylinefunction(t,i){return new tn(t,i)},t.Polygonen,t.polygonfunction(t,i){return new en(t,i)},t.Rectanglewn,t.rectanglefunction(t,i){return new wn(t,i)},t.MapLe,t.mapfunction(t,i){return new Le(t,i)}});\\n}\\nexports.L L;\\n\,\module-type\:\library\,\type\:\application/javascript\},\$:/plugins/sycom/leaflet/lib/tileLayers.json\:{\text\:\\\n {\\n \\\id\\\: \\\osmfr\\\,\\n \\\nom\\\: \\\OSM France\\\,\\n \\\url\\\: \\\http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\fond par \u003Ca hrefhttp://osm.org/copyright>OSM\u003C/a>, licence \u003Ca hrefhttp://creativecommons.org/licenses/by-sa/3.0>CC BY SA\u003C/a>. Données ©Contributeurs \u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a>, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\osm\\\,\\n \\\nom\\\: \\\OpenStreetMap\\\,\\n \\\url\\\: \\\http://{s}.tile.osm.org/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\Map tiles by ©\u003Ca hrefhttp://osm.org/copyright>OSM\u003C/a>, licence \u003Ca hrefhttp://creativecommons.org/licenses/by-sa/3.0>CC BY SA\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\osmbw\\\,\\n \\\nom\\\: \\\OSM N&B\\\,\\n \\\url\\\: \\\http://www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\Tiles hosted by wikimedia labs. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\sat\\\,\\n \\\nom\\\: \\\Satellite Esri\\\,\\n \\\url\\\: \\\http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}\\\,\\n \\\attrib\\\: \\\©Map tiles by Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\natgeo\\\,\\n \\\nom\\\: \\\National Geog.\\\,\\n \\\url\\\: \\\http://server.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/tile/{z}/{y}/{x}\\\,\\n \\\attrib\\\: \\\©Map tiles by Esri — National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 12\\n },\\n {\\n \\\id\\\: \\\toner\\\,\\n \\\nom\\\: \\\Black Ink\\\,\\n \\\url\\\: \\\http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\Map tiles by \u003Ca hrefhttp://stamen.com>Stamen Design\u003C/a>, licence \u003Ca hrefhttp://creativecommons.org/licenses/by/3.0>CC BY 3.0\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\water\\\,\\n \\\nom\\\: \\\Water painting\\\,\\n \\\url\\\: \\\http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\Map tiles by \u003Ca hrefhttp://stamen.com>Stamen Design\u003C/a>, licence \u003Ca hrefhttp://creativecommons.org/licenses/by/3.0>CC BY 3.0\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\thunder\\\,\\n \\\nom\\\: \\\Thunderforest\\\,\\n \\\url\\\: \\\http://{s}.tile.thunderforest.com/landscape/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\Map tiles by \u003Ca hrefhttp://thunderforest.com/>Thunderforest\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\dark\\\,\\n \\\nom\\\: \\\Dark Matter\\\,\\n \\\url\\\: \\\http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\©Map tiles by \u003Ca hrefhttps://cartodb.com/basemaps/ target_blank>CartoDB\u003C/a>, under \u003Ca hrefhttps://creativecommons.org/licenses/by/3.0/ target_blank>CC BY 3.0\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n },\\n {\\n \\\id\\\: \\\positron\\\,\\n \\\nom\\\: \\\Positron\\\,\\n \\\url\\\: \\\http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png\\\,\\n \\\attrib\\\: \\\©Map tiles by \u003Ca hrefhttps://cartodb.com/basemaps/ target_blank>CartoDB\u003C/a>, under \u003Ca hrefhttps://creativecommons.org/licenses/by/3.0/ target_blank>CC BY 3.0\u003C/a>. Data by ©\u003Ca hrefhttp://openstreetmap.org>OSM\u003C/a> contributors, licence \u003Ca hrefhttp://opendatacommons.org/licenses/odbl/>ODbL\u003C/a>.\\\,\\n \\\zMin\\\: 1,\\n \\\zMax\\\: 20\\n }\\n\\n\,\type\:\application/json\,\title\:\$:/plugins/sycom/leaflet/lib/tileLayers.json\},\$:/plugins/sycom/leaflet/mapCssTweaks.css.tid\:{\title\:\$:/plugins/sycom/leaflet/mapCssTweaks.css.tid\,\created\:\20161028202401905\,\modified\:\20161111151011600\,\tags\:\$:/tags/Stylesheet\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n/* add some styling tweaks to leaflet */\\n.leaflet-right {\\n\\tmax-width:50%\\n}\\n.leaflet-popup-content h6 {\\n\\tfont-size:.7rem;\\n\\tmargin:0 0 .2rem 0\\n}\\n\\n.leaflet-control-attribution {\\n\\theight:1.5em;\\n}\\n.leaflet-control-attribution:hover {\\n\\theight:auto;\\n}\\n\\n.leaflet-top, .leaflet-bottom {\\n z-index:999;\\n}\\n\\n/* solve conflict between tw and leaflet */\\n.leaflet-zoom-animated {max-width: initial !important}\\n\\n/* solve background image problem for layer control */\\n.leaflet-control-layers-toggle {\\n\\tbackground-image: url(data:image/svg+xml;charsetUTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20height%3D%2226%22%20width%3D%2226%22%3E%3Cpath%20d%3D%22M.032%2017.056l13-8%2013%208-13%208-13-8%22%20fill%3D%22%23b9b9b9%22/%3E%3Cpath%20d%3D%22M.032%2017.056l-.032.93%2013%208%2013-8%20.032-.93-13%208z%22%20fill%3D%22%23737373%22/%3E%3Cpath%20d%3D%22M0%2013.076l13-8%2013%208-13%208-13-8%22%20fill%3D%22%23cdcdcd%22/%3E%3Cpath%20d%3D%22M0%2013.076v.91l13%208%2013-8v-.91l-13%208z%22%20fill%3D%22%23737373%22/%3E%3Cpath%20d%3D%22M0%208.986l13-8%2013%208-13%208-13-8%22%20fill-opacity%3D%22.585%22%20stroke%3D%22%23797979%22%20stroke-width%3D%22.1%22%20fill%3D%22%23e9e9e9%22/%3E%3Cpath%20d%3D%22M0%208.986v1l13%208%2013-8v-1l-13%208z%22%20fill%3D%22%23737373%22/%3E%3C/svg%3E) !important\\n}\\n\\n/* default polygon stylin */\\n.polyline {fill:none}\\n.leaflet-popup-content ul {padding:0 1em}\\n\\n/* some styling for clusters */\\n.marker-cluster div {\\n min-width:16px;min-height:16px;\\n border-radius:50%;border:none;\\n vertical-align:middle;text-align:center;font-weight:bold\\n }\\n.marker-cluster div div{width:100%;height:100%}\\n.marker-cluster div span {display:block;text-shadow:0px 0px 6px #ffffff}\\n\\npath.leaflet-clickable {fill:\u003C\u003Ccolour primary>>;fill-opacity: 0.5;stroke:\u003C\u003Ccolour primary>>}\\n.leaflet-marker-colored {fill:\u003C\u003Ccolour primary>>}\\n\},\$:/plugins/sycom/leaflet/mapWidget.tid\:{\title\:\$:/plugins/sycom/leaflet/mapWidget.tid\,\text\:\/*\\\\\\ncreated: 20151028202401905\\nmodified: 20170318234011605\\ntitle: $:/plugins/sycom/leaflet/mapWidget.tid\\ntype: application/javascript\\nmodule-type: widget\\n\\nA widget for displaying leaflet map in TiddlyWiki\\n\\n\\\\*/\\n\\n(function() {\\n /* ----------------------- */\\n /*jslint node: true, browser: true */\\n /*global $tw: false */\\n \\\use strict\\\;\\n var Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget,\\n L require(\\\$:/plugins/sycom/leaflet/lib/leaflet.js\\\),\\n markerClusterGroup require(\\\$:/plugins/sycom/leaflet/lib/leaflet-markercluster.js\\\);\\n\\n var mapWidget function(parseTreeNode, options) {\\n this.initialise(parseTreeNode, options);\\n };\\n\\n // global vars\\n var Map , // map collection\\n map 0, // map order number\\n tn 0, // tiddler number\\n fCluster , // the clusters\\n Colour , // the colors\\n clusterRadius , // cluster radii\\n clusterType , // clustering for whole map or for each tiddler\\n lfltDefBounds \\n 52.75, -2.55,\\n 52.85, -2.65\\n , // default bounds when nothing given\\n bounds, // global bounds for map ?todo one per map?\\n iter , // iteration indicator to avoid infinite loops\\n setting {}; // the maps settings\\n\\n /* Inherit from the base widget class */\\n mapWidget.prototype new Widget();\\n\\n /* Render this widget into the DOM */\\n mapWidget.prototype.render function(parent, nextSibling) {\\n bounds null;\\n // Compute our attributes\\n this.computeAttributes();\\n // Get the base settings for rendering : width / height (default : 100% / 500px)\\n // !todo : make a settings tidller in order to let user set it for the whole wiki (may be inspired from roadtree)\\n // !todo what happens if windows is resized?\\n var width this.getAttribute(\\\width\\\, \\\100%\\\),\\n height this.getAttribute(\\\height\\\, \\\420px\\\);\\n // creating the div container\\n var div this.document.createElement(\\\div\\\);\\n div.setAttribute(\\\id\\\, \\\lfltMap-\\\ + map);\\n div.setAttribute(\\\style\\\, \\\width:\\\ + width + \\\;height:\\\ + height);\\n // Save the parent dom node\\n this.parentDomNode parent;\\n // Compute our attributes\\n // this.computeAttributes();\\n // create the container\\n parent.insertBefore(div, nextSibling);\\n this.domNodes.push(div);\\n // Create the map\\n this.createMap();\\n // Execute our logic\\n this.execute();\\n // increment map number indicator\\n map + 1;\\n };\\n\\n /* Create the map for the widget */\\n mapWidget.prototype.createMap function(parent, nextSibling) {\\n // create the leaflet and push it to #lfltMap\\n Mapmap L.map(lfltMap- + map);\\n // Install base tile layer (if none provided, default is \\\osm\\\)\\n // get tilelayers from JSON\\n var fonds JSON.parse(this.wiki.getTiddlerText(\\\$:/plugins/sycom/leaflet/lib/tileLayers.json\\\));\\n // create tile layers list object from json list\\n var Tiles ; // leaflet tile layers\\n var tiles {}; // tile identifier for control\\n // look for tile parameter\\n setting.tile this.getAttribute(\\\tile\\\, \\\osm\\\);\\n setting.marker this.getAttribute(\\\marker\\\, null);\\n // create tile layer list\\n for (var i in fonds) {\\n if (i setting.tile || fondsi.id setting.tile) {\\n setting.tile fondsi.id;\\n }\\n var couche new L.TileLayer(fondsi.url, {\\n attribution: fondsi.attrib,\\n minZoom: fondsi.zMin,\\n maxZoom: fondsi.zMax,\\n unloadInvisibleTiles: true\\n });\\n Tilesfondsi.id couche;\\n tilesfondsi.nom couche;\\n }\\n // if user entered a wrong tile id\\n if (Tilessetting.tile undefined) {\\n setting.tile \\\osm\\\;\\n $tw.utils.error(\\\Seems you entered a wrong tile id, displayed osm instead. Please refer to plugin documentation to avoid this - error : \\\ + error);\\n }\\n Tilessetting.tile.addTo(Mapmap);\\n // install tile layer control if needed\\n setting.tileControl this.getAttribute(\\\tileControl\\\);\\n if (setting.tileControl) {\\n var tControl L.control.layers(tiles);\\n tControl.addTo(Mapmap);\\n }\\n /* !todo to come next (will have to implement leaflet.draw extension)\\n // look for draw parameter\\n setting.drawControl this.getAttribute(\\\drawControl\\\);\\n if (setting.drawControl) {\\n // Initialize the FeatureGroup to store editable layers\\n var drawnItems new L.FeatureGroup();\\n Mapmap.addLayer(drawnItems);\\n // Initialize the draw control and pass it the FeatureGroup of editable layers\\n var drawControl new L.Control.Draw({\\n edit: {\\n featureGroup: drawnItems\\n }\\n }\\n );\\n Mapmap.addControl(drawControl);\\n }\\n*/\\n };\\n\\n /* Compute the internal state of the widget */\\n mapWidget.prototype.execute function() {\\n // getting wiki primary color\\n // check if you defined a tiddler name for palette but no tiddler with that\\n if(this.wiki.getTiddlerData(this.wiki.getTiddlerText(\\\$:/palette\\\))) Colour.wiki this.wiki.getTiddlerData(this.wiki.getTiddlerText(\\\$:/palette\\\)).primary;\\n // switch back to basic blue\\n else Colour.wiki \\\#5778d8\\\;\\n\\n // switch back to basic tiddlywiki blue if primary is defined from another color\\n /* notes to upgrade this process\\n if primaire is \u003C\u003Ccolour xxxx>> set to default gray\\n if primaire.match(\\\\u003C\u003C\\\) primaire\\\#555\\\; */\\n if (Colour.wiki.match(/\u003C/g)) Colour.wiki \\\#5778d8\\\;\\n\\n // getting style parameters\\n var style this.getAttribute(\\\style\\\, undefined);\\n var st;\\n // case style defined\\n if(style ! undefined) {\\n st JSON.parse(style);\\n // color parameter will overwrite style color and style fillColor parameter\\n if(st.fillColor) Colourmap this.getAttribute(\\\color\\\, st.fillColor);\\n else Colourmap this.getAttribute(\\\color\\\, st.color);\\n }\\n // case style undefined\\n else {\\n st null;\\n // checking if user defined a color if no color go undefined\\n Colourmap this.getAttribute(\\\color\\\, undefined);\\n }\\n // create default icon\\n // ?todo: only if there are points to display?\\n L.icon.default lfltIcon(setColor(null, map), setting.marker, map);\\n\\n // create whole map cluster\\n // getting cluster size parameter, if exists\\n clusterRadiusmap this.getAttribute(\\\cluster\\\, 80);\\n clusterTypemap this.getAttribute(\\\clusterType\\\, \\\map\\\);\\n if (clusterRadiusmap 0 || clusterTypemap \\\tiddler\\\) {\\n // if clusterRadius null or clustering by tiddler, no whole clustering\\n fClustermap L.featureGroup();\\n } else {\\n // creating a cluter group for whole map\\n fClustermap L.markerClusterGroup({\\n name: \\\Cluster\\\ + map,\\n polygonOptions: {\\\weight\\\:\\\0.5\\\},\\n maxClusterRadius: clusterRadiusmap,\\n /* for the record. may be a function\\n function() {return (clusterRadius - 50) / 9 * Mapmap.getZoom() + 50 - (clusterRadius - 50) / 9 },*/\\n iconCreateFunction: createCluster\\n });\\n }\\n // Get the declared places from the attributes\\n var places this.getAttribute(\\\places\\\, undefined);\\n var feature L.featureGroup();\\n // Render the map\\n if (places) mapPlaces(this,\\n JSON.parse(places),\\n Mapmap,\\n fClustermap,\\n null,\\n Colourmap,\\n this.getAttribute(\\\marker\\\),\\n st\\n );\\n\\n // set map to objects bounds\\n if (bounds) {\\n Mapmap.fitBounds(bounds);\\n } else {\\n bounds lfltDefBounds;\\n Mapmap.fitBounds(bounds);\\n }\\n // if lat long zoom settings, overwrite bounds\\n setting.lat this.getAttribute(\\\lat\\\);\\n setting.lg this.getAttribute(\\\long\\\);\\n setting.zoom this.getAttribute(\\\zoom\\\);\\n // overwrite lat and long center\\n if (setting.lat && setting.lg) {\\n Mapmap.setView(setting.lat, setting.lg);\\n }\\n // overwrite zoom\\n if (setting.zoom) {\\n Mapmap.setZoom(setting.zoom);\\n }\\n };\\n\\n // mapping a places json object (parent object, places json object, destination feature, destination cluster, popup for base objects, ands style parameters : color, marker, json style)\\n function mapPlaces(obj, plcs, feat, clust, pop, col, mark, style) {\\n // create feature for this mapping turn\\n var feature L.featureGroup();\\n // case 1 : data in a tiddler\\n if (plcs.tiddler) {\\n // if no tiddler is given (single space) map current Tiddler\\n // !todo would be much better if so when no attribute at all...\\n if (plcs.tiddler \\\ \\\) {\\n mapTiddler(obj, obj.getVariable(\\\currentTiddler\\\), feature, clust, pop, col, mark, style);\\n }\\n // else, map the given tiddler\\n else {\\n // get data fields in the tiddler, lets seek for geo data\\n mapTiddler(obj, plcs.tiddler, feature, clust, pop, col, mark, style);\\n }\\n }\\n // case 2 : data in multiple tiddlers\\n if (plcs.tiddlers) {\\n mapTiddlers(obj, plcs.tiddlers, feature, clust, pop, col, mark, style);\\n }\\n // case 3 : data in tiddlers following a filter\\n if (plcs.filter) {\\n mapFilter(obj, plcs.filter, feature, clust, pop, col, mark, style);\\n }\\n // case 4 : data are directly listed in places (point(s) - polygon - polyline - geojson)\\n // for each we will\\n // - use dedicated function to populate mapping turn layer\\n // - add layer to map\\n if (plcs.point) {\\n // add the point to the cluster layer\\n mapPoint(plcs.point, clust, pop, col, mark);\\n // add the cluster layer to map\\n feature.addLayer(clust);\\n // set bounds\\n }\\n if (plcs.points) {\\n // ?todo : create a cluster for those points if clusterType \\\tiddler\\\\\n mapPoints(plcs.points, clust, pop, col, mark);\\n feature.addLayer(clust);\\n }\\n if (plcs.polygon) {\\n var polygFeat L.featureGroup();\\n mapPolyg(plcs.polygon, polygFeat, pop, col, style);\\n polygFeat.addTo(feature);\\n }\\n if (plcs.polygons) {\\n var polygsFeat L.featureGroup();\\n mapPolygs(plcs.polygons, polygsFeat, pop, col, style);\\n polygsFeat.addTo(feature);\\n }\\n if (plcs.polyline) {\\n var polylFeat L.featureGroup();\\n mapPolyl(plcs.polyline, polylFeat, pop, col, style);\\n polylFeat.addTo(feature);\\n }\\n if (plcs.polylines) {\\n var polylsFeat L.featureGroup();\\n mapPolyls(plcs.polylines, polylsFeat, pop, col, style);\\n polylsFeat.addTo(feature);\\n }\\n if (plcs.geojson) {\\n // !todo : create a cluster for those points if clusterType \\\tiddler\\\\\n var geojsonFeat L.featureGroup();\\n mapGeoJson(plcs.geojson, geojsonFeat, clust, col, mark, style);\\n geojsonFeat.addTo(feat);\\n }\\n // add feature to map\\n feature.addTo(feat);\\n extBounds(feature);\\n }\\n\\n // add a marker for a point\\n function mapPoint(coord, clust, pop, col, mark) {\\n try {\\n var location coord.split(\\\,\\\);\\n } catch (err) {displayError(\\\point coord error\\\, err);}\\n try {\\n var marker L.marker(location, {\\n icon: lfltIcon(col, mark, map)\\n });\\n if (pop) marker.bindPopup(pop);\\n\\t\\t\\tif (clust.count) clust.count +1;\\n\\t\\t\\telse clust.count 1;\\n clust.addLayer(marker);\\n } catch (err) {displayError(\\\point marker error\\\, err);}\\n }\\n // add a marker serie for a points list\\n function mapPoints(list, clust, pop, col, mark) {\\n var Points list.split(\\\ \\\);\\n for (var pt in Points) {\\n mapPoint(Pointspt, clust, pop, col, mark);\\n }\\n }\\n\\n // add a polygon\\n function mapPolyg(list, feat, pop, col, st) {\\n var Coords list.split(\\\ \\\);\\n var Shape ;\\n try {\\n for (var nd in Coords) {\\n var location Coordsnd.split(\\\,\\\);\\n Shape.push(location);\\n }\\n } catch (err) {\\n displayError(\\\polygone\\\, err);\\n }\\n try {\\n var polygon L.polygon(Shape, {\\n color: setColor(col, map)\\n });\\n if (st) polygon.setStyle(checkStyle(st, col));\\n if (pop) polygon.bindPopup(pop);\\n polygon.addTo(feat);\\n } catch (err) {\\n displayError(\\\polygone\\\, err);\\n }\\n }\\n // add a polygons collection\\n function mapPolygs(collec, feat, pop, col, st) {\\n var Polys collec.split(\\\|\\\);\\n for (var pg in Polys) {\\n mapPolyg(Polyspg, feat, pop, col, st);\\n }\\n }\\n // add a polyline\\n function mapPolyl(list, feat, pop, col, st) {\\n var Coords list.split(\\\ \\\);\\n var Line ;\\n try {\\n for (var nd in Coords) {\\n var location Coordsnd.split(\\\,\\\);\\n Line.push(location);\\n }\\n } catch (err) {\\n displayError(\\\polyline\\\, err);\\n }\\n try {\\n var polyline L.polyline(Line, {\\n color: setColor(col,map)\\n });\\n if (st) polyline.setStyle(checkStyle(st, col));\\n if (pop) polyline.bindPopup(pop);\\n // add polyline class in order to make fill transparent\\n polyline.setStyle({\\n \\\className\\\: \\\polyline\\\\\n }).addTo(feat);\\n } catch (err) {\\n displayError(\\\polyline\\\, err);\\n }\\n }\\n // add a polylines collection\\n function mapPolyls(collec, feat, pop, col, st) {\\n var Lines collec.split(\\\|\\\);\\n for (var ln in Lines) {\\n mapPolyl(Linesln, feat, pop, col, st);\\n }\\n }\\n\\n // add a geojson set\\n function mapGeoJson(geojson, feat, clust, col, mark, st) {\\n try {\\n var data JSON.parse(geojson);\\n var geoJson L.geoJSON(data, {\\n // adding style\\n style: function (feature) {\\n // get feature style only if style is not injected\\n // ?todo : only overwrite injected values?\\n if (st undefined || st null) {\\n st {};\\n if(feature.properties.style ! undefined) st feature.properties.style;\\n }\\n // get feature properties style if exists\\n if(feature.properties.color ! undefined) {\\n st.color feature.properties.color;\\n st.fillColor st.color;\\n }\\n // color parameter overwrite style color if exists\\n if (col ! undefined && col ! null) {\\n st.color col;\\n st.fillColor col;\\n }\\n // if no color is defined at the end, fallback\\n if (st.color undefined) {\\n col setColor(col, map);\\n st.color col;\\n st.fillColor col;\\n }\\n return st;\\n },\\n onEachFeature: function (feature, layer) {\\n layer.bindPopup(jsonPop(feature));\\n },\\n // adding points\\n pointToLayer: function(geoJsonPoint, latlng) {\\n // working to get color (from properties)\\n var cl;\\n if(geoJsonPoint.properties.color ! undefined) cl geoJsonPoint.properties.color;\\n if(geoJsonPoint.properties.fillColor ! undefined) cl geoJsonPoint.properties.fillColor;\\n if(col ! undefined && col ! null) cl col;\\n // binding default icon\\n var jsonPoint L.marker(latlng, {\\n icon: lfltIcon(cl, mark, map)\\n });\\n jsonPoint.bindPopup(jsonPop(geoJsonPoint));\\n\\t\\t\\t\\t\\tif (clust.count) clust.count +1;\\n\\t\\t\\t\\t\\telse clust.count 1;\\n clust.addLayer(jsonPoint);\\n }\\n });\\n\\n // ?todo : should we add clust to feat or to geoJson? should we add clust even if its already here?\\n feat.addLayer(clust);\\n feat.addLayer(geoJson);\\n } catch (error) {displayError(\\\there was an error when displaying geoJson. error : \\\, error);}\\n }\\n\\n // map a tiddler\\n function mapTiddler(obj, tid, feat, clust, pop, col, mark, style) {\\n if(iter.map.tid undefined) iter.map.tid 1;\\n else iter.map.tid +1;\\n if(iter.map.tid \u003C 4242) {\\n // get data fields in the tiddler, lets seek for geo data\\n var flds obj.wiki.getTiddler(tid).fields,\\n feature L.featureGroup(), // create the tiddler feature\\n popup \\\\\\; // create the popup text\\n // setting marker, color, style\\n // if no marker injected, trying to get from tiddler\\n if(mark null || mark undefined) {\\n if(flds.marker) mark flds.marker;\\n }\\n // working style and color together\\n var cl, st {};\\n // style\\n if(flds.style) st JSON.parse(flds.style);\\n // overwrite with injected values\\n if (style ! undefined && style ! null) {\\n st style;\\n /* ?todo : should we overwrite only injected?\\n \\tfor (var v in st) {\\n if(style.v ! undefined) st.v style.v;\\n }\\n \\tfor (var v in style) {\\n \\t}*/\\n }\\n // color\\n if (flds.color) cl flds.color;\\n // overwrite with injected color style if exists\\n if (style ! undefined && style ! null) {\\n if (st.fillColor ! undefined) cl st.fillColor\\n }\\n // overwrite with injected color also in style\\n if (col ! undefined && col ! null) {\\n cl col;\\n st.color cl; st.fillColor cl;\\n }\\n Colour\\\t\\\ + tn cl;\\n // if clusterType is tiddler, creating a cluster group for tiddler\\n // also will have to deal with the filter / tiddler distinction\\n if (clusterTypemap \\\tiddler\\\) {\\n // ?todo : automate cluster creation?\\n fCluster\\\t\\\ + tn L.markerClusterGroup({\\n name: \\\Cluster\\\ + map + \\\Cluster\\\ + tn,\\n polygonOptions: {\\\weight\\\:\\\0.5\\\},\\n maxClusterRadius: clusterRadiusmap,\\n /* for the record. may be a function\\n function() {return (clusterRadius - 50) / 9 * Mapmap.getZoom() + 50 - (clusterRadius - 50) / 9 },*/\\n iconCreateFunction: createCluster\\n });\\n } else {\\n fCluster\\\t\\\ + tn fClustermap;\\n }\\n\\n // case 1 : data stored in a json tiddler\\n if (flds.type \\\application/json\\\) {\\n // for now, assuming any json stored data is geoJson...\\n var data obj.wiki.getTiddlerText(tid);\\n mapGeoJson(data, feature, fCluster\\\t\\\ + tn, Colour\\\t\\\ + tn, mark, st);\\n feat.addLayer(feature);\\n }\\n // case 2 if tiddler is not JSON data, display tiddler stored geodata as point(s), polygon, polyline...\\n else {\\n // create the popup for base objects\\n popup \\\\u003Ch4>\u003Ca href\\\\\\\#\\\ + encodeURIComponent(flds.title) + \\\\\\\\\\>\\\ + flds.title + \\\\u003C/a>\u003C/h4>\\\;\\n var content \\\\\\;\\n if (flds.text ! \\\\\\) {\\n // if tiddler contains a widget, avoid html rendering\\n if (flds.text.match(/\u003C\\\\$leafmap/)) {\\n content + \\\\u003Cpre>\\\ + flds.text + \\\\u003C/pre>\\\;\\n }\\n // else render\\n else {\\n content + obj.wiki.renderTiddler(\\\text/html\\\, tid).substring(0, 420);\\n }\\n }\\n // adding a link to the tiddler\\n content + \\\\u003Cbr/>(\u003Ca href\\\\\\\#\\\ + encodeURIComponent(flds.title) + \\\\\\\\\\ title\\\\\\\read more...\\\\\\\>...\u003C/a>)\\\;\\n popup + content;\\n\\n // map recursively (!!! danger !!!)\\n mapPlaces(obj,\\n flds,\\n feature,\\n fCluster\\\t\\\ + tn,\\n popup,\\n cl,\\n mark,\\n st\\n );\\n feature.addTo(feat);\\n }\\n /*\\n// check if anything was rendered before binding popup\\n if (wasRendered 0) console.log(\\\tw-leaflet-map-plugin > non geotiddler was listed and not rendered : \\\ + flds.title);\\n // add the layer to the feature\\n feature.addLayer(subFeat);\\n feature.addTo(Mapmap); // layer.addTo(Mapmap);\\n } */\\n // get layer bounds for automatic zoom\\n extBounds(feature);\\n tn++;\\n }\\n // it tiddler rendered two many times for same map. Stoping and error launch\\n else $tw.utils.error(\\\tiddler \\\ + tid + \\\ was rendered more than 4242 times in this map. Please double check circular dependencies...\\\);\\n }\\n\\n // map a tiddler collection\\n function mapTiddlers(obj, list, feat, clust, pop, col, mark, style) {\\n var Tids list.split(\\\ \\\);\\n for (var td in Tids) {\\n mapTiddler(obj, Tidstd, feat, clust, pop, col, mark, style);\\n }\\n }\\n\\n // map tiddlers with a filter\\n function mapFilter(obj, filter, feat, clust, pop, col, mark, style) {\\n try {\\n var Tids obj.wiki.filterTiddlers(filter);\\n for (var td in Tids) {\\n mapTiddler(obj, Tidstd, feat, clust, pop, col, mark, style);\\n }\\n } catch (error) {\\n $tw.utils.error(\\\sorry there was something wrong when trying to map your filter. error : \\\ + error);\\n }\\n }\\n\\n // icon url creator\\n function iconUrl(col, tid, m) {\\n var icone escape($tw.wiki.renderTiddler(\\\text/html\\\, tid).replace(\\\$primary$\\\, setColor(col, m)).replace(\\\\u003C/p>\\\, \\\\\\).replace(\\\\u003Cp>\\\, \\\\\\));\\n return (data:image/svg+xml;charsetUTF-8, + icone);\\n }\\n\\n // create marker\\n // ?todo only if there are points to display;\\n function lfltIcon(col, tid, m) {\\n // checking if marker is defined. Fallback to default\\n if(tid undefined || tid null) tid \\\$:/plugins/sycom/leaflet/images/marker.svg\\\;\\n else tid \\\$:/plugins/sycom/leaflet/images/\\\ + tid + \\\.svg\\\;\\n if($tw.wiki.getTiddler(tid) undefined) tid \\\$:/plugins/sycom/leaflet/images/marker.svg\\\;\\n // !todo create shadow from icon by transform matrix?\\n var shad tid.split(\\\.svg\\\)0 + \\\shadow.svg\\\,\\n shadowUrl data:image/svg+xml;charsetUTF-8, + escape($tw.wiki.getTiddlerText(shad));\\n // get dimensions in tiddler\\n var MarkDim $tw.wiki.getTiddler(tid).fields.marker_dim.split(\\\ \\\);\\n var ShadDim $tw.wiki.getTiddler(shad).fields.marker_dim.split(\\\ \\\);\\n var theIcon L.icon({\\n iconUrl: iconUrl(col, tid, m),\\n iconRetinaUrl: iconUrl(col, tid, m),\\n iconSize: MarkDim0, MarkDim1,\\n iconAnchor: MarkDim2, MarkDim3,\\n popupAnchor: 0, -MarkDim3,\\n shadowUrl: shadowUrl,\\n shadowRetinaUrl: shadowUrl,\\n shadowSize: ShadDim0, ShadDim1,\\n shadowAnchor: ShadDim2, ShadDim3\\n });\\n return theIcon;\\n }\\n\\n // set color with fallback to map color or wiki...\\n function setColor(col, m) {\\n if(m undefined) m map;\\n if (col undefined || col null) col Colourm;\\n if (col undefined || col null) col Colour.wiki;\\n return col;\\n }\\n\\n // set style with fallback to map color or wiki...\\n function checkStyle(sty, col) {\\n if (col undefined || col null) {\\n if(sty.color undefined) sty.color setColor(col, map);\\n if(sty.fillColor undefined) sty.fillColor setColor(col, map);\\n }\\n else {\\n sty.color col;\\n sty.fillColor col;\\n }\\n return sty;\\n }\\n\\n // coordinate error message\\n function displayError(objectType, error) {\\n $tw.utils.error(\\\there was an error when mapping a \\\ + objectType + \\\ - error : \\\ + error);\\n }\\n\\n // adjust bounds to layer\\n function extBounds(feat) {\\n try {\\n if (bounds) {\\n bounds.extend(feat.getBounds());\\n } else {\\n if (feat.getBounds()._northEast) {\\n bounds feat.getBounds();\\n }\\n }\\n } catch (error) {\\n $tw.utils.error(\\\there was an error when trying to zoom on bounds. error : \\\ + error);\\n }\\n }\\n\\n // cluster icon creation\\n function createCluster(clust) {\\n // getting back map number\\n var m this.name.split(\\\Cluster\\\)1,\\n t this.name.split(\\\Cluster\\\)2,\\n zC Mapm.getZoom(),\\n z0,cTot,cCol,cOpa;\\n // checking object density mean for the map\\n if (t undefined) {\\n if (fClusterm.z0 undefined) fClusterm.z0 zC;\\n z0 fClusterm.z0;\\n if (fClusterm.count undefined) fClusterm.count 1;\\n cTot fClusterm.count;\\n cCol setColor(Colourm,m);\\n cOpa 0.85\\n }\\n else {\\n if (fCluster\\\t\\\ + t.z0 undefined) fCluster\\\t\\\ + t.z0 zC;\\n z0 fCluster\\\t\\\ + t.z0;\\n if (fCluster\\\t\\\ + t.count undefined) fCluster\\\t\\\ + t.count 1;\\n cTot fCluster\\\t\\\ + t.count;\\n cCol setColor(Colour\\\t\\\ + t,m);\\n cOpa 0.65\\n }\\n // cluster icon size will be based on item number and zoom\\n // !todo: use density to get a more \\\local\\\ percentage before calculating size\\n var cC clust.getChildCount(),\\n cS 20 * Math.log(clusterRadiusm) * (1 + Math.log(cTot)/Math.max(cTot * Math.pow(2,zC-z0),Math.log(cTot))) * (1 - 1 / ((Math.log(cTot) / cTot) * Math.pow(2,zC-z0) * cC + 1));\\n if (cS \u003C 34) cS 34;\\n var cF; // font size of cluster text\\n if (cC > 9999) cF cS / 3;\\n else {if (cC > 999) cF cS / 3.5;\\n else cF cS / 2}\\n if (cF \u003C 12) cF 12;\\n // creating icon. Checking tiddler or whole clustering before\\n return new L.DivIcon({\\n html: \u003Cdiv style\\\width: + cS + px;height: + cS + px;font-size: + cF + px;background-color: + cCol + ;border-color: + cCol + ;opacity:+cOpa+\\\>\u003Cdiv>\u003Cspan style\\\line-height: + cS + px;opacity:+(cOpa+0.12)+\\\> + cC + \\\\u003C/span>\u003C/div>\u003C/div>\\\,\\n className: \\\marker-cluster marker-cluster-\\\ + cC,\\n iconSize: new L.Point(cS, cS)\\n });\\n }\\n\\n // popup function for Json\\n function jsonPop(feat) {\\n // extracting data to create popup (all non-null data!)\\n var Prop feat.properties,\\n jsontitle \\\\\\,\\n jsondesc \\\\\\,\\n jsonhtml \\\\\\;\\n // testing if properties title or name exists\\n if (Prop.name) jsontitle + Prop.name + \\\ \\\;\\n if (Prop.title) jsontitle + Prop.title + \\\ \\\;\\n if (Prop.description) jsondesc + Prop.description + \\\\\\;\\n // populating other data\\n // if we got a title\\n if (jsontitle ! \\\\\\) {\\n jsonhtml + \\\\u003Ch4>\\\ + jsontitle + \\\\u003C/h4>\\\;\\n // if we got a description lets give it\\n if (jsondesc ! \\\\\\) jsonhtml + jsondesc;\\n else {\\n jsonhtml+ \\\\u003Cul>\\\;\\n for (var p in Prop) {\\n if (Propp ! null && Propp ! \\\\\\ && p ! \\\name\\\ && p ! \\\title\\\) jsonhtml + \\\\u003Cli>\\\ + p + \\\ : \\\ + Propp + \\\\u003C/li>\\\;\\n }\\n jsonhtml + \\\\u003C/ul>\\\;\\n }\\n }\\n // if we have no title, giving one with first fields\\n else {\\n // in case weve got a description. Stop after title\\n if (jsondesc ! \\\\\\) {\\n for (var pr in Prop) {\\n // if title is really to short (as an id), taking next field\\n if (jsontitle.length \u003C 8) jsontitle + Proppr + \\\ \\\;\\n else break;\\n }\\n jsonhtml \\\\u003Ch4>\\\ + jsontitle + \\\\u003C/h4>\\\ + jsonhtml;\\n }\\n else {\\n for (var po in Prop) {\\n // if title is really to short (as an id), taking next field\\n if (jsontitle.length \u003C 4) jsontitle + Proppo + \\\ \\\;\\n else {\\n if (Proppo ! null && Proppo ! \\\\\\) jsonhtml + \\\\u003Cli>\\\ + po + \\\ : \\\ + Proppo + \\\\u003C/li>\\\;\\n }\\n }\\n jsonhtml \\\\u003Ch4>\\\ + jsontitle + \\\\u003C/h4>\u003Cul>\\\ + jsonhtml + \\\\u003C/ul>\\\;\\n }\\n }\\n return jsonhtml;\\n }\\n\\n exports.leafmap mapWidget;\\n\\n})();\\n/*\\nMISC NOTES for later\\nJSON.parse(tiddler.fields.text);\\nvar jsonData this.wiki.getTiddlerAsJson(this.to),\\n*/\\n\,\created\:\20151028202401905\,\modified\:\20170318234011605\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/sycom/leaflet/markers\:{\title\:\$:/plugins/sycom/leaflet/markers\,\caption\:\Markers\,\created\:\20170129172401910\,\modified\:\20170129172401910\,\type\:\text/vnd.tiddlywiki\,\text\:\markers are used to display point(s) related informations. Default marker is marker|$:/plugins/sycom/leaflet/images/marker.svg.\\n\\n!! Available markers\\n\\nfor now, available markers are those\\n\\n\u003C$list filterallshadowshasmarker_dimhascaption>\u003Cspan style\\\display:inline-block;text-align:center;margin:0 .5em;padding:.5em;border:.5px dotted\\\>\u003C$tiddler tiddler{{!!title}}>\u003C$transclude/>\u003C/$tiddler>\u003Cbr/>\u003C$link to{{!!title}}>{{!!caption}}\u003C/$link>\u003C/span>\u003C/$list>\\n\\n!! Create your own markers\\n\\nHave a look at existing ones above for inspiration and hack. Markers are svg pieces with some mandatory tweaks :\\n\\n* a marker is based upon two tiddlers, one for the marker and one for the shadow\\n* add a `caption` field to the marker tiddler (not for the shadow svg).\\n* the `title` of your marker tiddler will be `$:/plugins/sycom/leaflet/images/`caption`.svg`\\n* and the `title` of the marker shadow tiddler will be `$:/plugins/sycom/leaflet/images/`caption`shadow.svg`\\n* a `marker_dim` field wich defines //width// //height// //x-anchor// //y-anchors//. Please check that your //width// and //height// value are the same as in `\u003Csvg (...) width\\\15\\\ height\\\15\\\>`\\n* dont forget to add `xmlns` attribute : `\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\ (...)`\\n* if you want your marker to change color upon tiddlywiki or widget parameters, use `$primary$` for the color attribute of your svg\\n\},\$:/plugins/sycom/leaflet/readme\:{\title\:\$:/plugins/sycom/leaflet/readme\,\text\:\The leaflet plugin(#$:/plugins/sycom/leaflet) is a work in progress integration of the leafletleaflet library in TiddlyWiki in order to display geographical purpose tiddlers.\\n\\nHave a look at demo page on the webplugindemo or at integrated documentation which describes usage and examples.\\n\\nKeep in mind that the plugin might be buggy or imperfect. Please report any comment or issueissues on main repo.\\n\\n## Sources / licenses\\n* leafletleaflet library (_1.3.1_) - License 2-clause BSD\\n * leaflet-markerClustermarkercluster extension - Licence MIT\\n* leaflet pluginsource is released under similar BSD 3-Clause licenselicense as TiddlyWiki.\\n!! Side projects\\n\\nplugindemo: https://sycom.gitlab.io/TiddlyWiki-Plugins/#Michel%20Strogoff%20from%20the%20sky\\nsource: https://framagit.org/sycom/TiddlyWiki-Plugins/plugins/sycom/leaflet\\nissues: https://framagit.org/sycom/TiddlyWiki-Plugins/issues\\nleaflet: http://leafletjs.com/\\nmarkercluster: https://github.com/Leaflet/Leaflet.markercluster\\nlicense: https://framagit.org/sycom/TiddlyWiki-Plugins/LICENSE.md\\n\,\type\:\text/x-markdown\,\caption\:\Readme\,\created\:\20151119173416000\,\modified\:\20190401172200000\},\$:/plugins/sycom/leaflet/roadmap\:{\title\:\$:/plugins/sycom/leaflet/roadmap\,\caption\:\Roadmap\,\created\:\20151209173416000\,\modified\:\20180531171500000\,\type\:\text/vnd.tiddlywiki\,\text\:\Not really a roadmap just a list for future development ideas. Youd better take a look at issues|https://framagit.org/sycom/TiddlyWiki-Plugins/boards on the repo. And add yours if you dare ;-)\\n\\n* add a tool to draw shapes, lines and collect coordinates. Until this, You may use Draw for TiddlyWiki leaflet plugin|http://sycom.github.io/TiddlyWiki-Plugins/leafletDraw.html\\n* add categories options\\n* add text, title capabilities\\n* try a tiddler template based upon field presence to render data for all geoTiddler\\n* ...\\n\\n* ~~try to put other types of pins (svg? icons?)~~ 0.8.0 : you may change markers via the //marker// option and design your own markers\\n* ~~add color(s) options~~ 0.7.2 : color can be set via //color// tiddler field or forced through //color// option\\n* ~~add a clustering functionality (at least for points)~~ 0.7.0 : each data group is know clustering points\\n* ~~add geoJSON tiddlers~~ 0.6.0 : added geojsontiddler rendering\\n* ~~map tiddlers with the same tag(s)~~ 0.5.0 : added filter places request\\n\},\$:/plugins/sycom/leaflet/templates/geoTiddler\:{\title\:\$:/plugins/sycom/leaflet/templates/geoTiddler\,\created\:\20180602095702318\,\modified\:\20180602105242971\,\tags\:\$:/tags/ViewTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrenthaspoint allcurrenthaspoints allcurrenthaspolyline allcurrenthaspolylines allcurrenthaspolygon allcurrenthaspolygons allcurrenthasplaces allcurrenthasgeojson\\\>\\n \u003C$leafmap places{\\\tiddler\\\:\\\ \\\} height240px/>\\n\u003C/$list>\\n\},\$:/plugins/sycom/leaflet/tileLayers\:{\title\:\$:/plugins/sycom/leaflet/tileLayers\,\caption\:\tileLayers\,\created\:\20151119173416239\,\modified\:\20161020222250584\,\type\:\text/vnd.tiddlywiki\,\text\:\tileLayers are the //background// of the leaflet map. They will not be available offline and will not display at every zoom level.\\n\\n!! Available tile layers\\n\\nedit tileLayers.json|$:/plugins/sycom/leaflet/lib/tileLayers.json if you want to add / remove tile layers.\\n\\n| !id | !description | !zoom min/max |\\n|osm |OpenStreetMap|http://openstreetmap.org classic tile layer | 1/20 |\\n|osmfr |OpenStreetMap|http://openstreetmap.org with //baguette// smell | 1/20 |\\n|osmbw |Black and White version of OpenStreetMap|http://openstreetmap.org tiles by Wikimedia labs | 1/20 |\\n|sat |Satellite photographic layer provided by Esri | 1/18 |\\n|natgeo |National Geographic style layer provided by Esri| 1/12 |\\n|toner |Black and white styled OpenStreetMap data provided by Stamen|http://stamen.com | 1/20 |\\n|water |Watercolor styled OpenStreetMap data provided by Stamen|http://stamen.com | 1/20 |\\n|thunder |Pale styled OpenStreetMap data provided by Thunderforest|http://thunderforest.com | 1/20 |\\n|dark |\\\Dark Matter\\\ styled OpenStreetMap data provided by CartoDB|https://cartodb.com/basemaps | 1/20 |\\n|positron |\\\Positron\\\ styled OpenStreetMap data provided by CartoDB|https://cartodb.com/basemaps | 1/20 |\\n\},\$:/plugins/sycom/leaflet/usage\:{\title\:\$:/plugins/sycom/leaflet/usage\,\caption\:\Usage\,\created\:\20151119173416239\,\modified\:\20170129153650584\,\type\:\text/vnd.tiddlywiki\,\text\:\The widget is called by using `\u003C$leafmap />`. You may specify some options :\\n\\n!!! widget attributes\\n|!Attribute |!Description |!Default |\\n|width |the width of the map (px or tiddler %)| `100%`|\\n|height|the height of the map (px only)| `420px`|\\n\\n!!! leaflet map attributes\\n|!Attribute |!Description |!Default |\\n|places |a json object with the geographical data you want to display. Can be stored in tiddlers as metadata fields. See geoSyntax|$:/plugins/sycom/leaflet/geoSyntax for more informations ||\\n|style |a json object containing styling information for your polygons and polylines objects in the map. Will overwrite GeoTiddler style if exists. Refer to leaflet documentation|http://leafletjs.com/reference-1.0.3.html#path for all options| `{ }`|\\n|color |a color for drawing that will apply to all objects in the map. Will also overwrite GeoTiddler color attributes and //style// (if defined) colors| `\u003C\u003Ccolour primary>>`|\\n|marker|the name of the marker you want for points. See markers|$:/plugins/sycom/leaflet/markers for more informations| `marker`|\\n|tile |the //id// or the //number// of the tile layer you want to use. See tileLayers|$:/plugins/sycom/leaflet/tileLayers for more informations | `osm`|\\n|cluster|set the clustering distance between points. also can disable clustering with no value or `0` or `\\\\\\`| `80`|\\n|clusterType|set if points are clustered for whole map (`map`) or for each tiddler (`tiddler`) displayed.| `map`|\\n|tileControl |if present add a control to select the tile layer you want ||\\n|lat |map center latitude. Will overwrite places auto-centering | `52.8`|\\n|long |map center longitude. Will overwrite places auto-centering | `-2.6`|\\n|zoom |zoom level as defined by leaflet : int value between `0` (world map) and `20` (ant view) | |\\n\},\/usr/local/lib/node_modules/tiddlywiki/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity.old\:{\title\:\/usr/local/lib/node_modules/tiddlywiki/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity.old\,\text\:\created: 20161025143416000\\nmodified: 20170317143416000\\ntitle: $:/plugins/sycom/leaflet/example/tiddlyWikiFrCommunity\\ntype: application/json\\ntags: example leaflet geojson\\ncolor: #dd0000\\n\\n{\\\type\\\:\\\FeatureCollection\\\,\\\features\\\:{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Aknar\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.4442090000000007,43.604652}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\CdriC\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.563166,47.478419}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Disanv Parean\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.4072784,49.1846226}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Fab13n\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:5.5867,45.1184}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Fabio\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.916515000000004,47.8664401}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Florent V.\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:0.156237,45.648377}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Joël\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:4.740042686462402,46.10446454226022}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Johanne\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-74.09016960000002,45.65189590000001}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Lakemp\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.19249,48.59338}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\LauDai\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.4750973000000158,43.5664556}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Lucivam\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:4.390278,45.434722}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Mikabi\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.44,43.604652}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Nico\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:2.2569674000000077,48.9899655}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Nicolas Friedli\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:6.8411643,46.9425711}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Phil\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:3.98337,50.36155}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Piwig\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-1.677793,48.117266}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Sylvain Comte\\\,\\\description\\\:\\\Créateur du leaflet map plugin\\\,\\\url\\\:\\\http://sylvain.comte.online.fr\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:1.08954,49.43584}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Sylvain Naudin\\\,\\\description\\\:\\\Admin du forum\\\,\\\url\\\:\\\http://sylvain.naud.in\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:-0.155689,45.471894}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Thierry Pasquier\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:0.3333,46.5833}},{\\\type\\\:\\\Feature\\\,\\\properties\\\:{\\\name\\\:\\\Vincent Delcros\\\,\\\description\\\:\\\\\\,\\\url\\\:\\\\\\},\\\geometry\\\:{\\\type\\\:\\\Point\\\,\\\coordinates\\\:5.2788245000000416,50.5500944}}}\\n\,\type\:\.old\},\geoLocationWidget\:{\title\:\geoLocationWidget\,\author\:\Sylvain Comte\,\caption\:\action-createtiddler\,\created\:\20180906130958091\,\modified\:\20180906132645752\,\tags\:\Widgets\,\type\:\text/vnd.tiddlywiki\,\text\:\! Introduction\\nThe geolocation widget is used to collect geographic position of the browser running the wiki. For now position will be added the //point// (or //points// if there is more than one point) field of the target tiddler. Those fields may then be used with the Leaflet Map Plugin|https://sycom.github.io/TiddlyWiki-Plugins/#Leaflet%20plugin, or whatever tool using geographic coordinates.\\n\\n* The widget is not dependant from Leaflet Map Plugin (but is bundled in it). You may install it alone\\n* The widget will only work on //https// website, due to security limitation of the geolocation implemented in browsers\\n\\n! Content and Attributes\\nThe geolocation widget|$:/ext/modules/widgets/geolocation-widget.js will create a button to collect your browsers position. Any content within it is ignored.\\n\\n| !Attribute | !Description | !Default |\\n|target |The tiddler (title) in which data will be stored |//current tiddler// |\\n|icon |The title of the icon used to dress up the button|$:/core/images/globe |\\n|text |The text displayed in the button (will overwrite the icon)|`undefined` |\\n\\nMore options will come later (//accuracy//, //object type//...).\\n\\n! Examples\\n\\n```\\n\u003C$geoloc target\\\Geolocation Store\\\ />\\n```\\n\\n\u003C$geoloc target\\\Geolocation Store\\\ />\\n\\n! Source\\nThe geolocation widget is developped aside Leaflet Map Plugin. Source code can be found on the same repository : https://framagit.org/sycom/TiddlyWiki-Plugins/tree/master/ext/modules/widget/geolocation\\n\\n\}}}},{title:$:/plugins/telmiger/details,author:Thomas Elmiger,core-version:>5.1.13,description:DetailsWidget,list:readme license,name:Disclosure HTML element,plugin-type:plugin,source:https://tid.li/tw5/plugins.html,version:0.7.4,dependents:,type:application/json,text:{\tiddlers\:{\$:/plugins/telmiger/details/accordion\:{\title\:\$:/plugins/telmiger/details/accordion\,\created\:\20180928194557274\,\creator\:\Thomas Elmiger\,\modified\:\20200219093956524\,\modifier\:\Thomas Elmiger\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define accordion(filter:\\\_no_\\\,open:\\\no\\\,class:\\\\\\)\\n\u003C$vars accordion-filter\\\\\\\\\$filter$\\\\\\\\\ open\\\\\\\\\$open$\\\\\\\\\ class\\\\\\\\\$class$\\\\\\\\\>\\n\u003C$list filter\u003C\u003Caccordion-filter>>>\\n\u003C$details summary\u003C\u003CcurrentTiddler>> open\u003C\u003Copen>> class\u003C\u003Cclass>>>\\n\\n\u003C$transclude tiddler\u003C\u003CcurrentTiddler>>/>\\n\\n\u003C/$details>\\n\u003C/$list>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C!-- !!! Accordion Macro for Details\\n\\nList tiddlers and open them in a details-summary structure\\n\\n!!!! Attributes\\n* filter: filter to select tiddlers\\n* open: set to \\\open\\\ to display details on load\\n* class: set a class for the details tag\\n\\n-->\},\$:/plugins/telmiger/details/colours.css\:{\title\:\$:/plugins/telmiger/details/colours.css\,\created\:\20180925155320737\,\creator\:\Thomas Elmiger\,\modified\:\20200219093956600\,\modifier\:\Thomas Elmiger\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\/* details and summary colours */\\n\\ndetails {\\n background-color: \u003C\u003Ccolour tiddler-info-tab-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n}\\n\\ndetails summary {\\n background-color: \u003C\u003Ccolour dropdown-tab-background>>;\\n}\\n\\ndetails.notification summary {\\n background-color: \u003C\u003Ccolour notification-background>>;\\n /* TW leaves color undefined/uses foreground */\\n}\\n\\ndetails.warning summary {\\n background-color: #ffbbaf;\\n color: #000;\\n}\\n\\ndetails.success summary {\\n background-color: #88edc5;\\n color: #000;\\n}\\n\},\$:/plugins/telmiger/details/details.css\:{\title\:\$:/plugins/telmiger/details/details.css\,\created\:\20170122140815442\,\creator\:\Thomas Elmiger\,\modified\:\20200219093956595\,\modifier\:\Thomas Elmiger\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\/* details and summary */\\n\\ndetails {\\n transition: height 1s ease;\\n padding: 0 0.5em 0 0.66em;\\n margin-top: 0.66em;\\n margin-bottom: 0.66em;\\n}\\n\\ndetails + details {\\n margin-top: -0.46em;\\n}\\n\\ndetailsopen {\\n padding-bottom: 1em;\\n}\\n\\ndetails:not(open) { \\n cursor: pointer;\\n}\\n\\ndetails > summary {\\n display: list-item;\\n margin: 0 -0.5em 0 -0.66em;\\n padding: 0.2em 0.5em 0.2em 0.66em;\\n padding-left: 1.76em; /* adjust for indentation */\\n text-indent: -1.1em;\\n cursor: pointer;\\n}\\n\\ndetailsopen > summary {\\n margin-bottom: 1em;\\n}\\n\\ndetailsopen > *:first-child:not(summary) {\\n margin-top: 1em;\\n}\\n\},\$:/plugins/telmiger/details/details.js\:{\title\:\$:/plugins/telmiger/details/details.js\,\text\:\/*\\\\\\ntitle: $:/plugins/telmiger/details/details.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nDetails widget v 0.8\\n\\nWill output an HTML 5 \u003Cdetails> section including a \u003Csummary>\\n\\n```\\n\\t\u003Cdetails>\\n\\t\\t\u003Csummary>This sums it up\u003C/summary> \\n\\t\\tAll the details follow here.\\n\\t\u003C/details>\\n```\\n\\n|Parameter |Description |h\\n|summary |Optional text to display as summary. Wins over field (see below). |\\n|open |Optional initial state, set to \\\open\\\ to show details on load. Defaults to \\\\\\. |\\n|state |An optional TextReference containing the state. Wins over open. |\\n|field |Optionally, the summary is taken from the field with this name in a given tiddler. Defaults to \\\title\\\. |\\n|tiddler |Optional title of a tiddler to watch, connected to field. Defaults to current tiddler. |\\n|class |Optional CSS classes to be assigned to the details tag. |\\n\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar DetailsWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nDetailsWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nDetailsWidget.prototype.render function(parent,nextSibling) {\\n\\t// Save the parent dom node\\n\\tthis.parentDomNode parent;\\n\\t// Compute attributes\\n\\tthis.computeAttributes();\\n\\t// Execute logic\\n\\tthis.execute();\\n\\t// Create elements\\n\\tthis.detailsDomNode this.document.createElement(\\\details\\\);\\n\\tif(this.detailsClass ! \\\\\\) {\\n\\t\\t// this.detailsClass + \\\ \\\;\\n\\t\\t// this.detailsClass + \\\tc-details\\\;\\n\\t\\tthis.detailsDomNode.setAttribute(\\\class\\\,this.detailsClass);\\n\\t}\\n\\tif(this.detailsOpen \\\open\\\) {\\n\\t\\tthis.detailsDomNode.setAttribute(\\\open\\\,\\\open\\\);\\n\\t}\\n\\tif(this.detailsSummary ! \\\\\\) {\\n\\t\\tthis.summaryDomNode this.document.createElement(\\\summary\\\);\\n\\t\\t// this.summaryDomNode.setAttribute(\\\class\\\,\\\tc-summary\\\);\\n\\t\\tthis.detailsDomNode.appendChild(this.summaryDomNode);\\n\\t\\tthis.summaryDomNode.appendChild(this.document.createTextNode(this.detailsSummary));\\n\\t}\\n// register an event listener\\n/* Maybe this can be reactivated later, see below.\\n\\tif(this.detailsStateTitle) {\\n\\t\\t$tw.utils.addEventListeners(this.detailsDomNode,\\n\\t\\t\\t{name: \\\toggle\\\, handlerObject: this, handlerMethod: \\\handleToggleEvent\\\},\\n\\t\\t);\\n\\t}\\n*/\\n// As iOS mobile browsers lack support of toggle events on details \\n// we emulate the toggle event using click\\n\\tif(this.detailsStateTitle && this.summaryDomNode) {\\n\\t\\t$tw.utils.addEventListeners(this.summaryDomNode,\\n\\t\\t\\t{name: \\\click\\\, handlerObject: this, handlerMethod: \\\handleToggleEvent\\\},\\n\\t\\t);\\n\\t} else {\\n\\t\\tif(this.detailsStateTitle) {\\n\\t\\t\\t$tw.utils.addEventListeners(this.detailsDomNode,\\n\\t\\t\\t\\t{name: \\\click\\\, handlerObject: this, handlerMethod: \\\handleToggleEvent\\\},\\n\\t\\t\\t);\\n\\t\\t}\\n\\t}\\n\\t// Insert the details into the DOM and render any children\\n\\tthis.parentDomNode.insertBefore(this.detailsDomNode,nextSibling);\\n\\tthis.renderChildren(this.detailsDomNode,null);\\n\\tthis.domNodes.push(this.detailsDomNode);\\n};\\n\\n/*\\nRetrieve the value of the summary\\n*/\\nDetailsWidget.prototype.getSummary function() {\\n\\tvar summary \\\\\\;\\n\\tif(this.summaryTitle \\\Tiddler not found\\\ && this.summaryField \\\\\\) {\\n\\t// nothing defined: leave empty \\n\\t\\tsummary \\\\\\;\\n\\t} else {\\n\\t\\t// tiddler defined? use defined field or title\\n\\t\\tif(this.myTiddler) {\\n\\t\\t\\tif(this.summaryField \\\title\\\ || this.summaryField \\\\\\) {\\n\\t\\t\\t\\tsummary this.summaryTitle;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tif(this.summaryField \\\text\\\) {\\n \\t\\t// getTiddlerText() triggers lazy loading of skinny tiddlers\\n\\t\\t\\t\\t\\tsummary this.wiki.getTiddlerText(this.summaryTitle);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tsummary this.myTiddler.fieldsthis.summaryField;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tif(this.summaryField ! \\\\\\ && this.summaryField ! \\\text\\\) {\\n\\t\\t\\t\\t// try defined field in current tiddler\\n\\t\\t\\t\\tvar tiddler this.wiki.getTiddler(this.getVariable(\\\currentTiddler\\\));\\n\\t\\t\\t\\tsummary tiddler.fieldsthis.summaryField;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tsummary \\\\\\;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n return summary;\\n};\\n\\n/*\\nRetrieve the value of the state text reference\\n*/\\nDetailsWidget.prototype.getStateFromReference function() {\\n var state this.detailsStateTitle ? this.wiki.getTextReference(this.detailsStateTitle,\\\\\\,this.getVariable(\\\currentTiddler\\\)) : \\\\\\;\\n return state;\\n};\\n\\n/*\\nCheck all open signals, state fields/tiddlers get priority\\n*/\\nDetailsWidget.prototype.getOpenState function() {\\n\\tvar result \\\\\\;\\n\\tif((this.detailsOpenDefault ! \\\\\\ && this.detailsOpenDefault ! \\\no\\\) \\n\\t || this.detailsState \\\open\\\) {\\n\\t\\tresult \\\open\\\;\\n\\t } \\n\\tif(this.detailsStateTitle !\\\\\\ && this.detailsState ! \\\open\\\) {\\n\\t\\tresult \\\\\\;\\n\\t}\\n\\treturn result;\\n};\\n\\n/*\\nUpdate the state text reference after click event\\n*/\\nDetailsWidget.prototype.updateState function(openState) {\\n\\tvar fieldValue \\\false\\\;\\n\\tvar currentTiddler this.getVariable(\\\currentTiddler\\\);\\n // get the title for the (existing/new) tiddler\\n\\tvar tr $tw.utils.parseTextReference(this.detailsStateTitle);\\n\\tvar tidTitle tr.title || currentTiddler;\\n // is it an existing state tiddler?\\n\\tvar isStateTiddler (tr.title this.detailsStateTitle);\\n\\tvar hasStateTiddler this.wiki.tiddlerExists(tr.title);\\n\\tvar currentStateTiddler (tr.title currentTiddler);\\n\\tif(isStateTiddler || hasStateTiddler || (currentStateTiddler && tr.field ! \\\text\\\)) { \\n\\t\\t// Set the state field (but never overwrite the current tiddler’s text field\\n\\t\\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\\n\\t} else {\\n\\t\\tif(!hasStateTiddler && tidTitle ! currentTiddler) {\\n\\t\\t\\tthis.createTiddler(tidTitle);\\n\\t\\t\\tthis.wiki.setText(tidTitle,tr.field,tr.index,openState);\\n\\t\\t} else {\\n\\t\\t\\tconsole.log (\\\Something went wrong in updateState\\\);\\n\\t\\t}\\n\\t}\\n};\\n\\n/*\\nCreate a tiddler with a title only\\n*/\\nDetailsWidget.prototype.createTiddler function(tidTitle) {\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(\\n\\t\\tthis.wiki.getCreationFields(),\\n\\t\\tthis.wiki.getModificationFields(),\\n\\t\\t{\\n\\t\\t\\ttitle: tidTitle,\\n\\t\\t\\ttags: \\n\\t\\t}\\n\\t));\\n};\\n\\n/*\\nSet openState according to click\\n*/\\nDetailsWidget.prototype.handleToggleEvent function(event) {\\n\\t// check if an open attribute is present\\n\\tvar newState this.detailsDomNode.open ? \\\\\\ : \\\open\\\;\\n\\t// update only, if the node has a new state\\n\\tif(newState ! this.detailsState) {\\n\\t\\tthis.updateState(newState);\\n\\t}\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nDetailsWidget.prototype.execute function() {\\n\\t// Get the parameters from the attributes \\n\\tvar tryTiddler this.getAttribute(\\\tiddler\\\);\\n\\tthis.myTiddler this.wiki.getTiddler(tryTiddler);\\n\\tthis.summaryTitle this.myTiddler ? tryTiddler : \\\Tiddler not found\\\;\\n\\tthis.summaryField this.getAttribute(\\\field\\\,\\\\\\);\\n\\tthis.detailsSummary this.getAttribute(\\\summary\\\) || this.getSummary();\\n\\tthis.detailsStateTitle this.getAttribute(\\\state\\\,\\\\\\);\\n\\tthis.detailsState this.getStateFromReference();\\n\\tthis.detailsOpenDefault this.getAttribute(\\\open\\\,\\\\\\);\\n\\tthis.detailsOpen this.getOpenState();\\n\\tthis.detailsClass this.getAttribute(\\\class\\\,\\\\\\);\\n\\t// Construct the child widgets\\n\\tthis.makeChildWidgets();\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nDetailsWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.summary || changedAttributes.state || changedAttributes.open || changedAttributes\\\class\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\tvar refreshed false;\\n\\t\\tvar testState this.getStateFromReference();\\n\\t\\tif(testState ! this.detailsState) {\\n\\t\\t\\t// state change\\n\\t\\t\\tthis.refreshSelf();\\n\\t\\t\\trefreshed true;\\n\\t\\t} \\n\\t\\treturn this.refreshChildren(changedTiddlers) || refreshed;\\n\\t}\\n};\\n\\nexports.details DetailsWidget;\\n\\n})();\,\type\:\application/javascript\,\module-type\:\widget\,\created\:\20170124173619910\,\creator\:\Thomas Elmiger\,\modified\:\20200219093956587\,\modifier\:\Thomas Elmiger\,\tags\:\Plugins\},\$:/plugins/telmiger/details/icon\:{\title\:\$:/plugins/telmiger/details/icon\,\created\:\20170205205314072\,\modified\:\20200219093956580\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg class\\\tc-image-button telmiger-icon\\\ viewBox\\\0 0 128 128\\\ xmlns\\\http://www.w3.org/2000/svg\\\ fill-rule\\\evenodd\\\ viewBox\\\0 0 128 128\\\ role\\\img\\\ aria-labelledby\\\title\\\>\u003Ctitle id\\\title\\\>T\u003C/title>\u003Cpath class\\\circle\\\ d\\\M64 2C30 2 2 29.753 2 64c0 34.235 27.753 62 62 62s62-27.752 62-62C126 29.753 98.221 2 64 2z\\\/>\u003Cpath class\\\t\\\ d\\\M100.41 63.254c-2.886 1.92-7.544 2.883-13.979 2.883h-8.008c-4.246 0-7.331.845-9.254 2.536-1.922 1.69-3.449 5.086-4.576 10.19 0 0-.181 1.481-.503 1.481s-.369-.877-.518-1.586a37.897 37.897 0 0 0-.721-2.754c-.631-2.137-1.262-3.753-1.894-4.847-.764-1.359-1.727-2.452-2.889-3.28-1.162-.83-2.49-1.326-3.985-1.492l-2.092-.248H41.73c-6.144 0-10.711-.962-13.7-2.884-4.976-3.159-7.649-9.129-8.02-17.91-.03-.706.003-1.351.132-2.171h.585c.399 3.975 3.679 7.048 6.086 9.219 2.408 2.172 6.269 3.258 11.581 3.258h9.313c5.347 0 9.257 1.226 11.731 3.68 2.231 2.213 3.701 5.68 4.406 10.4.076.511.03.736.178.736.149 0 .11-.256.17-.783.713-6.122 3.085-10.219 7.117-12.294 2.487-1.292 6.434-1.906 11.841-1.839l6.368.1c4.311.066 7.942-.788 10.893-2.56 2.953-1.773 6.447-5.079 6.844-9.917h.595c.183.478.16 1.576.127 2.333-.371 8.752-2.894 14.668-7.567 17.749z\\\/>\u003C/svg>\\n\u003Cstyle>\\n.telmiger-icon .circle { fill: #e2001a }\\n.telmiger-icon .t { fill: #fff }\\n\u003C/style>\},\$:/plugins/telmiger/details/license\:{\title\:\$:/plugins/telmiger/details/license\,\created\:\20170205213335455\,\modified\:\20200219093956569\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\!! Plugin license\\n!!!The MIT License (MIT)\\n\\n```\\nCopyright © 2017/2018 Thomas Elmiger – thomas-elmiger.ch\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n```\},\$:/plugins/telmiger/details/readme\:{\title\:\$:/plugins/telmiger/details/readme\,\created\:\20170205212323032\,\modified\:\20200219093956554\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\! ~DetailsWidget\\n\\nA plugin for TiddlyWiki|http://tiddlywiki.com 5 containing a script and some styles to create an HTML 5 `\u003Cdetails>` section including a `\u003Csummary>`. Here’s an example:\\n\\n\u003C$details summary\\\W3C definition\\\>\\n\\n\u003C\u003C\u003C\\nThe details|http://w3c.github.io/html/interactive-elements.html#elementdef-details element represents a disclosure widget from which the user can obtain additional information or controls.\\n\u003C\u003C\u003C W3C\\n\\n\u003C/$details>\\n\\nDocumentation can be found at http://tid.li/tw5/plugins.html#DetailsWidget\\n\}}}},{title:$:/plugins/telmiger/details/colours.css,created:20180925155320737,creator:Thomas Elmiger,modified:20210920202652482,modifier:soren,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:/* details and summary colours */\n\ndetails {\n background-color: \u003C\u003Cdetails-background-color>>;\n color: \u003C\u003Ccolour foreground>>;\n}\n\ndetails summary {\n background-color: \u003C\u003Ccolour dropdown-tab-background>>;\n}\n\ndetails.notification summary {\n background-color: \u003C\u003Ccolour notification-background>>;\n /* TW leaves color undefined/uses foreground */\n}\n\ndetails.warning summary {\n background-color: #ffbbaf;\n color: #000;\n}\n\ndetails.success summary {\n background-color: #88edc5;\n color: #000;\n}\n},{author:TheDiveO,core-version:>5.1.0,created:20140901105647564,description:FontAwesome embedded font support for TW5,fa-version:5.8.2,list:readme license history,modified:20200419150315831,plugin-type:plugin,source:https://github.com/TheDiveO/TW5FontAwesome,title:$:/plugins/TheDiveO/FontAwesome,version:1.2.18,dependents:,type:application/json,text:{\tiddlers\:{\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Brands.css\:{\title\:\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Brands.css\,\text\:\/* autoimported retrieved from fontawesome-free-5.8.2-web */\\n@font-face {\\n font-family: Font Awesome 5 Brands;\\n font-style: normal;\\n font-weight: normal;\\n src: url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n}\\n\\n.fab {\\n font-family: Font Awesome 5 Brands;\\n font-style: normal;\\n font-weight: normal;\\n}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Regular.css\:{\title\:\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Regular.css\,\text\:\/* autoimported retrieved from fontawesome-free-5.8.2-web */\\n@font-face {\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 400;\\n src: url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n}\\n\\n.far {\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 400;\\n}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Solid.css\:{\title\:\$:/plugins/TheDiveO/FontAwesome/fonts/Font Awesome 5 Free Solid.css\,\text\:\/* autoimported retrieved from fontawesome-free-5.8.2-web */\\n@font-face {\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 900;\\n src: url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n}\\n\\n.fa, .fas {\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 900;\\n}\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/TheDiveO/FontAwesome/history\:{\title\:\$:/plugins/TheDiveO/FontAwesome/history\,\created\:\20140901110931199\,\modified\:\20190509195707164\,\type\:\text/vnd.tiddlywiki\,\text\:\* 1.2.18 -- updates to Font Awesome 5.8.2.\\n\\n* 1.2.17 -- updates to Font Awesome 5.8.1, adding several new categories, such as \\\alert\\\, \\\beverage\\\, \\\energy\\\, et cetera. However, most of these new categories simply rehash existing icons, so there are only few really new icons to be found in this release.\\n\\n* 1.2.16 -- updates to Font Awesome 5.7.2.\\n\\n* 1.2.15 -- updates to Font Awesome 5.6.3. This adds new categories, such as \\\autumn\\\, \\\holliday\\\ and \\\halloween\\\ with new icons, as well as updating existing categories with additional icons.\\n\\n* 1.2.14\\n** updates to Font Awesome Free 5.3.1.\\n** fixes crash in `--update` command when glyph in icons.json lacks a search terms property.\\n\\n* 1.2.13\\n** switches to fetching the most recent Font Awesome Free download URL via GitHub API; this way, we can get rid of the (fine!) Puppeteer package and a truckload of update overhead.\\n** npm package maintenance update: move development dependencies out of the general dependencies.\\n\\n* 1.2.12 -- updates to Font Awesome Free 5.2.0. This adds new category packs for \\\automotive\\\, \\\medical\\\, \\\education\\\, and \\\maps\\\.\\n\\n* 1.2.11 -- updates to Font Awesome Free 5.1.11.\\n\\n* 1.2.10 (1.2.9)\\n** updates to Font Awesome 5.1.0, which brings new categories \\\design\\\, \\\emoji\\\ and \\\travel\\\, and their icons -- as well as some updates and icon additions.\\n** updates the update mechanism to work with the new 5.1.x packaging.\\n\\n* 1.2.8 -- updates to Font Awesome Free 5.0.13. This brings three new catogies: animals, buildings, and mathematics.\\n\\n* 1.2.7 -- updates to Font Awesome Free 5.0.12 -- they really do rapid updates, do they?! Glad that updating this plugin is automated...\\n\\n* 1.2.6 -- updates to Font Awesome Free 5.0.11.\\n\\n* 1.2.5 -- updates to Font Awesome Free 5.0.10.\\n\\n* 1.2.4\\n** adds unicode code point info to the cheatsheet.\\n\\n* 1.2.3\\n** makes TW5FontAwesome plugin available as npm package `tw5-fontawesome`.\\n** adds ~ThirdFlow plugin as npm dependency `tw5-thirdflow`.\\n\\n* 1.2.2\\n** updates to Font Awesome Free 5.0.9.\\n** adds new categories //Charity//, //Chat//, and //Moving//.\\n** adds new \\\Font Awesome 5\\\ tab to the Control Panel|$:/ControlPanel that allows customizing the plugin: enable/disable internal and external link styling.\\n\\n* 1.2.1\\n** adds missing category information.\\n** adds automated update of category information from the Font Awesome 5 web site, as part of the normal update process:\\n*** `npm run update` updates only if there is a newer version of Font Awesome 5 Free available from https://fontawesome.com/\\n*** `npm run forceupdate` updates unconditionally.\\n\\n* 1.2.0\\n** updates to Font Awesome Free 5.0.8.\\n** adds category filtering to the cheatsheet.\\n** adds Font Awesome 5 category meta data.\\n** brings a new (fully) automatic update and release mechanism:\\n*** use `$ npm run update-fontawesome` to update the development files to the newest Font Awesome version that is available online.\\n*** use `$ npm run release` to create the plugin release file(s).\\n** upgrades to most recent version of the ThirdFlow|http://thediveo.github.io/ThirdFlow/ plugin: this comes with a new automated release mechanism.\\n** refactors development command `--update-fontawesome` to directly download the most recent Font Awesome 5 Free package .zip from https://fontawesome.com. The only optional parameter to this command is `force` which forces re-updating, even if the font currently installed in the dev wiki is the same version as the one downloaded.\\n** upgrades ThirdFlow plugin and now uses the new automated release file generation mechanism.\\n\\n* 1.1.2\\n** fixes ~TiddlyWiki-internal links to system tiddlers not showing the gear symbol in the tiddler editor preview pane.\\n\\n* 1.1.1\\n** upgrades to Font Awesome 5.0.4.\\n** adds update/import command to ~FontAwesome 5 demo ~TiddlyWiki to update ~~from a Font Awesome zip package~~ //online//. Use `--update-fontawesome` when running the plugin development ~TiddlyWiki under Node.js.\\n*** The `--update-fontawesome` command ~~expects the (path and) name of a Font Awesome zip package from which it will then update itself~~ //has no parameters, or alternatively a single parameter `force`//. ~~There is no need to unpack the zip package.~~ For instance:\u003Cdiv>\u003Cstrike>\\n\\n```bash\\n$ tiddlywiki editions/develop --verbose --update-fontawesome ~/Downloads/fontawesome-free-5.0.2-zip --server 8080 $:/core/save/all text/plain text/html\\n```\\n\\n\u003C/strike>\u003C/div>\\n*** If for some reason you need to re-update from the same Font Awesome zip package, specify an additional `force` parameter after the zip package file name parameter. For instance:\u003Cdiv>\u003Cstrike>\\n\\n```bash\\n$ tiddlywiki editions/develop --verbose --update-fontawesome ~/Downloads/fontawesome-free-5.0.2-zip force --server 8080 $:/core/save/all text/plain text/html\\n```\\n\u003C/strike>\u003C/div>\\n* 1.1.0\\n** upgrades to Font Awesome 5.0.2.\\n** upgrades user macros to allow to specify the Font Awesome font family: `fas` (//Font Awesome Solid//), `far` (//Font Awesome Regular//), and `fab` (//Font Awesome Brands//).\\n** upgrades stylesheets to new Font Awesome font mess, introduces $:/plugins/TheDiveO/FontAwesome/macros/css settings shorthand macros to avoid lengthy CSS properties assignments in CSS rules using Font Awesome.\\n* 1.0.7\\n** fix overly greedy image URL adornments, so that they dont apply to TW5-internal images. Now, an internal tree.jpeg doesnt get adornment, while http://thediveo.github.io/TW5FontAwesome/fa-flag.png still does, so the type of document can be glanced quickly.\\n** small visual improvement to `fa-lbadge` which adds a small right margin to the badge, so that the adjacent text doesnt seem to visually collide with the badge anymore.\\n* 1.0.6\\n** link adornments for image URLs (`.jpg`/`.jpeg`, `.png`, `.gif`, `.tif`/`.tiff`)\\n* 1.0.5\\n** maintenance: upgrade ThirdFlow plugin to 1.1.11.\\n* 1.0.4\\n** improved display of link adornments by removing the link underlining from the adornments.\\n** fixed CSS class name bug in `fa-lbox` macro. Also added new `fa-lbadge` macro. Added documentation.\\n** oh, the magic of the `list-after` field, when applied to CSS tiddlers, avoids overuse of CSS `!important` declarations.\\n\\n* 1.0.3\\n** fixed CSS to ensure that our embedded Font Awesome font always takes precendence over any system-installed Font Awesome font. This ensures a consistent user experience, especially when the local Font Awesome would be an older version.\\n\\n* 1.0.2\\n** fixes base64 encoding of the embedded Font Awesome woff.\\n** updated documentation with a warning about system-installed fonts taking precedence.\\n** updated instructions on how to update the embedded font yourself.\\n\\n* 1.0.1\\n** incorporates recent Font Awesome 4.7.0.\\n** CSS updated to 4.7.0 too.\\n** development version contains updated Third Flow plugin.\\n\\n* 1.0.0\\n** never released.\\n\\n* 0.9.2-beta\\n** stable beta release with Font Awesome 4.2.0.\\n\\n* v0.0.1-beta1\\n** initial plugin release.\\n\},\$:/plugins/TheDiveO/FontAwesome/icon\:{\title\:\$:/plugins/TheDiveO/FontAwesome/icon\,\created\:\20140901103643546\,\modified\:\20140901123044951\,\tags\:\$:/tags/Image\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Csvg width\\\22pt\\\ height\\\22pt\\\ viewBox\\\0 0 128 128\\\>\\n \u003Cg fill-rule\\\evenodd\\\>\\n \u003Cpath \\n d\\\m 13.75,0 -11.71875,6.875 0,13.75 11.71875,6.875 11.71875,-6.875 0,-13.75 L 13.75,0 z M 6.28125,5.78125 c 0.3579097,1.42e-5 0.6530496,0.1218163 0.90625,0.375 0.2531946,0.2532114 0.4062468,0.5796012 0.40625,0.9375 -3.2e-6,0.4864625 -0.2240993,0.8370553 -0.65625,1.09375 l 0,12.84375 c -2.6e-6,0.08791 -0.029668,0.15448 -0.09375,0.21875 -0.064087,0.06427 -0.1620941,0.09375 -0.25,0.09375 l -0.625,0 c -0.08791,-1e-6 -0.1859173,-0.02948 -0.25,-0.09375 C 5.6546643,21.18573 5.6249987,21.119157 5.625,21.03125 l 0,-12.84375 C 5.1924761,7.9308053 4.9999994,7.5802125 5,7.09375 4.9999994,6.7358512 5.1216167,6.4094614 5.375,6.15625 5.6283811,5.9030663 5.9233364,5.7812642 6.28125,5.78125 z m 6.6875,1.3125 c 0.722833,1.29e-5 1.403139,0.085316 2.03125,0.28125 0.628089,0.1959592 1.367727,0.4764702 2.21875,0.875 0.256694,0.1281803 0.53739,0.2187616 0.875,0.21875 0.364546,1.16e-5 0.758471,-0.076903 1.1875,-0.21875 0.428999,-0.1418231 0.811026,-0.2931062 1.125,-0.46875 0.313942,-0.1756193 0.594637,-0.3581524 0.875,-0.5 0.28033,-0.1418222 0.474573,-0.1874871 0.5625,-0.1875 0.175429,1.29e-5 0.340379,0.059159 0.46875,0.1875 0.128335,0.1283659 0.187481,0.2616962 0.1875,0.4375 l 0,7.75 c -1.9e-5,0.168803 -0.04062,0.283957 -0.125,0.375 -0.08442,0.09105 -0.223803,0.186697 -0.40625,0.28125 -1.45198,0.78379 -2.709891,1.187503 -3.75,1.1875 -0.412222,3e-6 -0.828017,-0.07008 -1.25,-0.21875 -0.422009,-0.148665 -0.782943,-0.324365 -1.09375,-0.5 -0.310829,-0.175628 -0.686986,-0.351512 -1.15625,-0.5 C 14.249466,15.94527 13.743089,15.875004 13.25,15.875 c -1.296838,4e-6 -2.850298,0.514176 -4.6875,1.5 -0.1148759,0.06095 -0.2359002,0.09375 -0.34375,0.09375 -0.1758202,3e-6 -0.3091502,-0.09039 -0.4375,-0.21875 -0.1283567,-0.12835 -0.1875032,-0.26205 -0.1875,-0.4375 l 0,-7.53125 c -3.2e-6,-0.2164353 0.1030684,-0.4073566 0.3125,-0.5625 0.1418315,-0.094545 0.3893527,-0.2417266 0.78125,-0.4375 1.593792,-0.8107376 3.03169,-1.1874871 4.28125,-1.1875 z m 4.4375,1.9375 c -0.342706,0.1226406 -0.355438,0.656233 -0.5,1.375 -0.223336,-0.06073 -0.456025,-0.114193 -0.6875,-0.125 -0.319018,-0.021 -0.822172,0.073 -1.1875,0.0625 -0.365324,-0.0105 -1.089266,-0.319558 -1.6875,-0.25 -0.240525,0.02958 -0.495457,0.05507 -0.71875,0.15625 -0.136605,0.0619 -0.307097,0.253524 -0.40625,0.28125 -0.999033,0.2793 -2.6450261,0.290617 -2.3125,-1.21875 0.02589,-0.1159319 0.051471,-0.2239389 0,-0.25 -0.06413,-0.032479 -0.11842,0.018948 -0.15625,0.09375 -0.5817319,1.263211 0.450231,2.090082 1.625,2.09375 0.368882,-0.02847 0.188339,-0.02825 0.53125,-0.09375 l 0,0.0625 c -0.02423,0.418425 0.151498,0.773091 0.5,1 -0.159883,0.455791 -0.470574,0.831401 -0.6875,1.25 0.08154,0.520418 0.625493,1.213538 0.84375,1.3125 0.19213,0.08713 0.590499,0.108967 0.6875,-0.03125 0.03464,-0.06594 0.03819,-0.208665 0,-0.28125 0.164063,0.181767 0.379948,0.409467 0.59375,0.53125 0.128025,0.06105 0.26257,0.120068 0.40625,0.125 l 0.15625,-0.03125 c 0.09128,-0.01967 0.220122,-0.01257 0.28125,-0.09375 0.06906,-0.117457 0.0042,-0.445257 -0.28125,-0.46875 -0.285459,-0.02351 -0.487565,-0.141306 -0.75,-0.53125 -0.216207,-0.376982 0.06825,-0.879067 0.15625,-1.25 0.451569,0.07267 0.885787,0.123856 1.34375,0.125 0.198682,-0.0101 0.397908,-0.02487 0.59375,-0.0625 0.06247,0.159574 0.248509,0.592654 0.25,0.71875 0.0042,0.355223 -0.119979,0.738597 -0.0625,1.09375 0.03593,0.104625 -0.01675,0.27314 0.1875,0.28125 0.122159,0.0062 0.03564,0.02295 0.21875,0.03125 l 0.1875,0 c 0.201842,0.338685 0.353672,0.332318 0.75,0.34375 L 17.375,15.25 c 0.06687,-0.02489 0.146577,-0.02959 0.1875,-0.09375 0.133768,-0.194285 -0.220263,-0.284732 -0.34375,-0.5 -0.123507,-0.215248 -0.635898,-1.387969 -0.25,-1.71875 0.385924,-0.330776 0.809257,-0.471475 0.96875,-0.78125 0.06907,-0.139714 0.138021,-0.279525 0.15625,-0.4375 0.09397,0.07799 0.154815,0.152169 0.28125,0.15625 0.334451,0.02101 0.632038,-0.392722 0.78125,-0.78125 0.07973,-0.238471 0.140218,-0.485838 0.125,-0.71875 -0.04092,-0.4488514 0.01685,-0.9204038 0.375,-1.21875 C 19.302812,9.334652 18.96272,9.5357952 18.5625,9.59375 18.341438,9.5266203 18.109109,9.4905105 17.875,9.5 17.760279,9.3505649 17.607384,9.0636657 17.40625,9.03125 z m -4.75,4.34375 c -0.01157,0.166727 -0.02255,0.305428 0.03125,0.46875 0.163898,0.134904 0.380252,0.35428 0.53125,0.5 -0.082,-0.02263 -0.235596,-0.0612 -0.3125,-0.03125 L 12.84375,14.28125 12.8125,14.25 c -0.108862,-0.1172 -0.395316,-0.310466 -0.34375,-0.5 0.04127,-0.131581 0.125136,-0.250383 0.1875,-0.375 z\\\ transform\\\scale(4.6545455,4.6545455)\\\\\n/>\\n \u003C/g>\\n\u003C/svg>\},\$:/plugins/TheDiveO/FontAwesome/license\:{\title\:\$:/plugins/TheDiveO/FontAwesome/license\,\created\:\20140901105404058\,\modified\:\20170223103858754\,\type\:\text/vnd.tiddlywiki\,\text\:\This plugin is licensed as follows:\\n\\n* Font Awesome font license: SIL OFL 1.1|http://scripts.sil.org/OFL.\\n* Font Awesome CSS and LESS files licenses: MIT License|http://opensource.org/licenses/mit-license.html.\\n* everything else in this plugin is (c) by TheDiveO and licensed under the MIT License|http://opensource.org/licenses/mit-license.html.\},\$:/plugins/TheDiveO/FontAwesome/macros/css settings\:{\title\:\$:/plugins/TheDiveO/FontAwesome/macros/css settings\,\created\:\20171230210524160\,\modified\:\20171230211107336\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define fa-plugin-font-solid()\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 900; \\n\\\\end\\n\\n\\\\define fa-plugin-font-regular()\\n font-family: Font Awesome 5 Free;\\n font-style: normal;\\n font-weight: 400; \\n\\\\end\\n\\n\\\\define fa-plugin-font-brands()\\n font-family: Font Awesome 5 Brands;\\n font-style: normal;\\n font-weight: normal; \\n\\\\end\\n\},\$:/plugins/TheDiveO/FontAwesome/macros/fa/doc\:{\title\:\$:/plugins/TheDiveO/FontAwesome/macros/fa/doc\,\created\:\20140831145557569\,\modified\:\20171230205047837\,\type\:\text/vnd.tiddlywiki\,\text\:\Convenience macros to typeset symbols from Font Awesome.\\n\\n;`fa-lbox` //glyph//:\\\fa-flag\\\ //fam//:\\\fas\\\\\n: typesets the Font Awesome glyp (defaults to `fa-flag` glyph) in a gray box, and pulls it to the left.\\n: As Font Awesome 5.0 has broken up the single 4.x font into multiple fonts, this macro now sports a second optional parameter for setting the font family. Allowed values are `fas` (for //Font Awesome Solid//), `far` (for //Font Awesome Regular//), and finally `fab` (for //Font Awesome Brands//).\\n\\n;`fa-lbadge` //glyph//:\\\fa-flag\\\\\n: typesets the Font Awesome glyph (defaults to `fa-flag` glyph) in inverse, on a round badge. Also pulls the badge with the icon to the left.\\n: As Font Awesome 5.0 has broken up the single 4.x font into multiple fonts, this macro now sports a second optional parameter for setting the font family. Allowed values are `fas` (for //Font Awesome Solid//), `far` (for //Font Awesome Regular//), and finally `fab` (for //Font Awesome Brands//).\\n\\n;`fa-clear`\\n: convenience macro that inserts an empty HTML `div` element with styling `clear:both`. Use this before multiple `fa-lbox` and `fa-lbadge` macros to avoid them piling up from left to right.\},\$:/plugins/TheDiveO/FontAwesome/macros/fa\:{\title\:\$:/plugins/TheDiveO/FontAwesome/macros/fa\,\created\:\20140831145445334\,\modified\:\20171230204202514\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define fa-lbox(glyph:\\\fa-flag\\\,fam:\\\fas\\\)\\n\u003Ci class\\\$fam$ fa-2x pull-left fa-border $glyph$\\\>\u003C/i>\\n\\\\end\\n\\n\\\\define fa-lbadge(glyph:\\\fa-flag\\\,fam:\\\fas\\\)\\n\u003Cspan class\\\fa-stack fa-lg fa-pull-left\\\ style\\\margin-right: .3em;\\\>\u003Ci class\\\fas fa-circle fa-stack-2x\\\>\u003C/i>\u003Ci class\\\$fam$ fa-stack-1x fa-inverse $glyph$\\\>\u003C/i>\u003C/span>\\n\\\\end\\n\\n\\\\define fa-clear()\\n\u003Cdiv style\\\clear:both;\\\/>\\n\\\\end\\n\},\$:/plugins/TheDiveO/FontAwesome/macros/global-macros\:{\title\:\$:/plugins/TheDiveO/FontAwesome/macros/global-macros\,\created\:\20180328184036630\,\modified\:\20180328191101221\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define fa5-cfgpath(cfg) $:/config/fa5/$cfg$\\n\\n\\\\define fa5-cfgfilterexpr() \u003Ccfg>gettext yes +firstprefixyes\},\$:/plugins/TheDiveO/FontAwesome/readme\:{\title\:\$:/plugins/TheDiveO/FontAwesome/readme\,\created\:\20140901105307611\,\modified\:\20180112190527729\,\type\:\text/vnd.tiddlywiki\,\text\:\This plugin adds support for Font Awesome to your ~TiddlyWiki 5. It embeds the Font Awesome|http://fontawesome.io/ within this plugin, so you dont need to install this font in your operating system. You may, but the //embedded// Font Awesome will take precedence to ensure a consistent user experience.\\n\\nTo install this plugin in your own ~TiddlyWiki(s), simply drop this FontAwesome plugin|$:/plugins/TheDiveO/FontAwesome onto your own ~TiddlyWiki(s): this will then import it.\},\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/FontAwesome\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/FontAwesome\,\created\:\20170227162302202\,\list-after\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks\,\modified\:\20180328191153542\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-wk-extlinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\nahref^\\\http://fontawesome.io/\\\.tc-tiddlylink-external:before,\\nahref^\\\http://fontawesome.com/\\\.tc-tiddlylink-external:before,\\nahref^\\\https://fontawesome.io/\\\.tc-tiddlylink-external:before,\\nahref^\\\https://fontawesome.com/\\\.tc-tiddlylink-external:before {\\n \u003C\u003Cfa-plugin-font-brands>>\\n content: \\\\f425\\\\202f !important;\\n display: inline-block;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/GitHub\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/GitHub\,\created\:\20170223102202986\,\list-after\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks\,\modified\:\20180328191203844\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-wk-extlinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\nahref^\\\http://\\\href*\\\github.com\\\:before {\\n \u003C\u003Cfa-plugin-font-brands>>\\n font-size: 90%;\\n content: \\\\f09b\\\\202f;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/Wikipedia\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/Wikipedia\,\created\:\20170223100306336\,\modified\:\20180328191215033\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-wk-extlinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\nahref^\\\http://\\\href*\\\.wikipedia.org\\\:before {\\n \u003C\u003Cfa-plugin-font-brands>>\\n font-size: 90%;\\n content: \\\\f266\\\\202f;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/doctypes\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks/doctypes\,\created\:\20170301201914393\,\list-after\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks\,\modified\:\20180328191142557\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-extdoclinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\nahref$\\\.pdf\\\.tc-tiddlylink-external:before {\\n \u003C\u003Cfa-plugin-font-regular>>\\n content: \\\\f1c1\\\\202f;\\n display: inline-block;\\n}\\n\\nahref$\\\.gz\\\.tc-tiddlylink-external:before, \\nahref$\\\.zip\\\.tc-tiddlylink-external:before,\\nahref$\\\.7z\\\.tc-tiddlylink-external:before {\\n \u003C\u003Cfa-plugin-font-regular>>\\n content: \\\\f1c6\\\\202f;\\n display: inline-block;\\n}\\n\\nahref$\\\.jpg\\\.tc-tiddlylink-external:before,\\nahref$\\\.jpeg\\\.tc-tiddlylink-external:before,\\nahref$\\\.png\\\.tc-tiddlylink-external:before,\\nahref$\\\.gif\\\.tc-tiddlylink-external:before,\\nahref$\\\.tif\\\.tc-tiddlylink-external:before,\\nahref$\\\.tiff\\\.tc-tiddlylink-external:before {\\n \u003C\u003Cfa-plugin-font-regular>>\\n content: \\\\f1c5\\\\202f;\\n display: inline-block;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/styles/extlinks\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/extlinks\,\created\:\20170223100043117\,\modified\:\20180328191133975\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-extlinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\nahref^\\\http://\\\:before {\\n \u003C\u003Cfa-plugin-font-solid>>\\n font-size: 80%;\\n content: \\\\f35d\\\\202f;\\n display: inline-block;\\n}\\n\\nahref^\\\https://\\\:before {\\n \u003C\u003Cfa-plugin-font-solid>>\\n font-size: 80%;\\n content: \\\\f023\\\\202f;\\n display: inline-block;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/styles/fontawesome 5.css\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/fontawesome 5.css\,\text\:\/* autoimported from fontawesome-free-5.8.2-web */\\n/*!\\n * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com\\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\\n */\\n.fa,\\n.fas,\\n.far,\\n.fal,\\n.fab {\\n -moz-osx-font-smoothing: grayscale;\\n -webkit-font-smoothing: antialiased;\\n display: inline-block;\\n font-style: normal;\\n font-variant: normal;\\n text-rendering: auto;\\n line-height: 1; }\\n\\n.fa-lg {\\n font-size: 1.33333em;\\n line-height: 0.75em;\\n vertical-align: -.0667em; }\\n\\n.fa-xs {\\n font-size: .75em; }\\n\\n.fa-sm {\\n font-size: .875em; }\\n\\n.fa-1x {\\n font-size: 1em; }\\n\\n.fa-2x {\\n font-size: 2em; }\\n\\n.fa-3x {\\n font-size: 3em; }\\n\\n.fa-4x {\\n font-size: 4em; }\\n\\n.fa-5x {\\n font-size: 5em; }\\n\\n.fa-6x {\\n font-size: 6em; }\\n\\n.fa-7x {\\n font-size: 7em; }\\n\\n.fa-8x {\\n font-size: 8em; }\\n\\n.fa-9x {\\n font-size: 9em; }\\n\\n.fa-10x {\\n font-size: 10em; }\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em; }\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: 2.5em;\\n padding-left: 0; }\\n .fa-ul > li {\\n position: relative; }\\n\\n.fa-li {\\n left: -2em;\\n position: absolute;\\n text-align: center;\\n width: 2em;\\n line-height: inherit; }\\n\\n.fa-border {\\n border: solid 0.08em #eee;\\n border-radius: .1em;\\n padding: .2em .25em .15em; }\\n\\n.fa-pull-left {\\n float: left; }\\n\\n.fa-pull-right {\\n float: right; }\\n\\n.fa.fa-pull-left,\\n.fas.fa-pull-left,\\n.far.fa-pull-left,\\n.fal.fa-pull-left,\\n.fab.fa-pull-left {\\n margin-right: .3em; }\\n\\n.fa.fa-pull-right,\\n.fas.fa-pull-right,\\n.far.fa-pull-right,\\n.fal.fa-pull-right,\\n.fab.fa-pull-right {\\n margin-left: .3em; }\\n\\n.fa-spin {\\n -webkit-animation: fa-spin 2s infinite linear;\\n animation: fa-spin 2s infinite linear; }\\n\\n.fa-pulse {\\n -webkit-animation: fa-spin 1s infinite steps(8);\\n animation: fa-spin 1s infinite steps(8); }\\n\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg); }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg); } }\\n\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg); }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg); } }\\n\\n.fa-rotate-90 {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation1)\\\;\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg); }\\n\\n.fa-rotate-180 {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation2)\\\;\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg); }\\n\\n.fa-rotate-270 {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation3)\\\;\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg); }\\n\\n.fa-flip-horizontal {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation0, mirror1)\\\;\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1); }\\n\\n.fa-flip-vertical {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation2, mirror1)\\\;\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1); }\\n\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\n -ms-filter: \\\progid:DXImageTransform.Microsoft.BasicImage(rotation2, mirror1)\\\;\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1); }\\n\\n:root .fa-rotate-90,\\n:root .fa-rotate-180,\\n:root .fa-rotate-270,\\n:root .fa-flip-horizontal,\\n:root .fa-flip-vertical,\\n:root .fa-flip-both {\\n -webkit-filter: none;\\n filter: none; }\\n\\n.fa-stack {\\n display: inline-block;\\n height: 2em;\\n line-height: 2em;\\n position: relative;\\n vertical-align: middle;\\n width: 2.5em; }\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n left: 0;\\n position: absolute;\\n text-align: center;\\n width: 100%; }\\n\\n.fa-stack-1x {\\n line-height: inherit; }\\n\\n.fa-stack-2x {\\n font-size: 2em; }\\n\\n.fa-inverse {\\n color: #fff; }\\n\\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\\nreaders do not read off random characters that represent icons */\\n.fa-500px:before {\\n content: \\\\\\\f26e\\\; }\\n\\n.fa-accessible-icon:before {\\n content: \\\\\\\f368\\\; }\\n\\n.fa-accusoft:before {\\n content: \\\\\\\f369\\\; }\\n\\n.fa-acquisitions-incorporated:before {\\n content: \\\\\\\f6af\\\; }\\n\\n.fa-ad:before {\\n content: \\\\\\\f641\\\; }\\n\\n.fa-address-book:before {\\n content: \\\\\\\f2b9\\\; }\\n\\n.fa-address-card:before {\\n content: \\\\\\\f2bb\\\; }\\n\\n.fa-adjust:before {\\n content: \\\\\\\f042\\\; }\\n\\n.fa-adn:before {\\n content: \\\\\\\f170\\\; }\\n\\n.fa-adobe:before {\\n content: \\\\\\\f778\\\; }\\n\\n.fa-adversal:before {\\n content: \\\\\\\f36a\\\; }\\n\\n.fa-affiliatetheme:before {\\n content: \\\\\\\f36b\\\; }\\n\\n.fa-air-freshener:before {\\n content: \\\\\\\f5d0\\\; }\\n\\n.fa-airbnb:before {\\n content: \\\\\\\f834\\\; }\\n\\n.fa-algolia:before {\\n content: \\\\\\\f36c\\\; }\\n\\n.fa-align-center:before {\\n content: \\\\\\\f037\\\; }\\n\\n.fa-align-justify:before {\\n content: \\\\\\\f039\\\; }\\n\\n.fa-align-left:before {\\n content: \\\\\\\f036\\\; }\\n\\n.fa-align-right:before {\\n content: \\\\\\\f038\\\; }\\n\\n.fa-alipay:before {\\n content: \\\\\\\f642\\\; }\\n\\n.fa-allergies:before {\\n content: \\\\\\\f461\\\; }\\n\\n.fa-amazon:before {\\n content: \\\\\\\f270\\\; }\\n\\n.fa-amazon-pay:before {\\n content: \\\\\\\f42c\\\; }\\n\\n.fa-ambulance:before {\\n content: \\\\\\\f0f9\\\; }\\n\\n.fa-american-sign-language-interpreting:before {\\n content: \\\\\\\f2a3\\\; }\\n\\n.fa-amilia:before {\\n content: \\\\\\\f36d\\\; }\\n\\n.fa-anchor:before {\\n content: \\\\\\\f13d\\\; }\\n\\n.fa-android:before {\\n content: \\\\\\\f17b\\\; }\\n\\n.fa-angellist:before {\\n content: \\\\\\\f209\\\; }\\n\\n.fa-angle-double-down:before {\\n content: \\\\\\\f103\\\; }\\n\\n.fa-angle-double-left:before {\\n content: \\\\\\\f100\\\; }\\n\\n.fa-angle-double-right:before {\\n content: \\\\\\\f101\\\; }\\n\\n.fa-angle-double-up:before {\\n content: \\\\\\\f102\\\; }\\n\\n.fa-angle-down:before {\\n content: \\\\\\\f107\\\; }\\n\\n.fa-angle-left:before {\\n content: \\\\\\\f104\\\; }\\n\\n.fa-angle-right:before {\\n content: \\\\\\\f105\\\; }\\n\\n.fa-angle-up:before {\\n content: \\\\\\\f106\\\; }\\n\\n.fa-angry:before {\\n content: \\\\\\\f556\\\; }\\n\\n.fa-angrycreative:before {\\n content: \\\\\\\f36e\\\; }\\n\\n.fa-angular:before {\\n content: \\\\\\\f420\\\; }\\n\\n.fa-ankh:before {\\n content: \\\\\\\f644\\\; }\\n\\n.fa-app-store:before {\\n content: \\\\\\\f36f\\\; }\\n\\n.fa-app-store-ios:before {\\n content: \\\\\\\f370\\\; }\\n\\n.fa-apper:before {\\n content: \\\\\\\f371\\\; }\\n\\n.fa-apple:before {\\n content: \\\\\\\f179\\\; }\\n\\n.fa-apple-alt:before {\\n content: \\\\\\\f5d1\\\; }\\n\\n.fa-apple-pay:before {\\n content: \\\\\\\f415\\\; }\\n\\n.fa-archive:before {\\n content: \\\\\\\f187\\\; }\\n\\n.fa-archway:before {\\n content: \\\\\\\f557\\\; }\\n\\n.fa-arrow-alt-circle-down:before {\\n content: \\\\\\\f358\\\; }\\n\\n.fa-arrow-alt-circle-left:before {\\n content: \\\\\\\f359\\\; }\\n\\n.fa-arrow-alt-circle-right:before {\\n content: \\\\\\\f35a\\\; }\\n\\n.fa-arrow-alt-circle-up:before {\\n content: \\\\\\\f35b\\\; }\\n\\n.fa-arrow-circle-down:before {\\n content: \\\\\\\f0ab\\\; }\\n\\n.fa-arrow-circle-left:before {\\n content: \\\\\\\f0a8\\\; }\\n\\n.fa-arrow-circle-right:before {\\n content: \\\\\\\f0a9\\\; }\\n\\n.fa-arrow-circle-up:before {\\n content: \\\\\\\f0aa\\\; }\\n\\n.fa-arrow-down:before {\\n content: \\\\\\\f063\\\; }\\n\\n.fa-arrow-left:before {\\n content: \\\\\\\f060\\\; }\\n\\n.fa-arrow-right:before {\\n content: \\\\\\\f061\\\; }\\n\\n.fa-arrow-up:before {\\n content: \\\\\\\f062\\\; }\\n\\n.fa-arrows-alt:before {\\n content: \\\\\\\f0b2\\\; }\\n\\n.fa-arrows-alt-h:before {\\n content: \\\\\\\f337\\\; }\\n\\n.fa-arrows-alt-v:before {\\n content: \\\\\\\f338\\\; }\\n\\n.fa-artstation:before {\\n content: \\\\\\\f77a\\\; }\\n\\n.fa-assistive-listening-systems:before {\\n content: \\\\\\\f2a2\\\; }\\n\\n.fa-asterisk:before {\\n content: \\\\\\\f069\\\; }\\n\\n.fa-asymmetrik:before {\\n content: \\\\\\\f372\\\; }\\n\\n.fa-at:before {\\n content: \\\\\\\f1fa\\\; }\\n\\n.fa-atlas:before {\\n content: \\\\\\\f558\\\; }\\n\\n.fa-atlassian:before {\\n content: \\\\\\\f77b\\\; }\\n\\n.fa-atom:before {\\n content: \\\\\\\f5d2\\\; }\\n\\n.fa-audible:before {\\n content: \\\\\\\f373\\\; }\\n\\n.fa-audio-description:before {\\n content: \\\\\\\f29e\\\; }\\n\\n.fa-autoprefixer:before {\\n content: \\\\\\\f41c\\\; }\\n\\n.fa-avianex:before {\\n content: \\\\\\\f374\\\; }\\n\\n.fa-aviato:before {\\n content: \\\\\\\f421\\\; }\\n\\n.fa-award:before {\\n content: \\\\\\\f559\\\; }\\n\\n.fa-aws:before {\\n content: \\\\\\\f375\\\; }\\n\\n.fa-baby:before {\\n content: \\\\\\\f77c\\\; }\\n\\n.fa-baby-carriage:before {\\n content: \\\\\\\f77d\\\; }\\n\\n.fa-backspace:before {\\n content: \\\\\\\f55a\\\; }\\n\\n.fa-backward:before {\\n content: \\\\\\\f04a\\\; }\\n\\n.fa-bacon:before {\\n content: \\\\\\\f7e5\\\; }\\n\\n.fa-balance-scale:before {\\n content: \\\\\\\f24e\\\; }\\n\\n.fa-ban:before {\\n content: \\\\\\\f05e\\\; }\\n\\n.fa-band-aid:before {\\n content: \\\\\\\f462\\\; }\\n\\n.fa-bandcamp:before {\\n content: \\\\\\\f2d5\\\; }\\n\\n.fa-barcode:before {\\n content: \\\\\\\f02a\\\; }\\n\\n.fa-bars:before {\\n content: \\\\\\\f0c9\\\; }\\n\\n.fa-baseball-ball:before {\\n content: \\\\\\\f433\\\; }\\n\\n.fa-basketball-ball:before {\\n content: \\\\\\\f434\\\; }\\n\\n.fa-bath:before {\\n content: \\\\\\\f2cd\\\; }\\n\\n.fa-battery-empty:before {\\n content: \\\\\\\f244\\\; }\\n\\n.fa-battery-full:before {\\n content: \\\\\\\f240\\\; }\\n\\n.fa-battery-half:before {\\n content: \\\\\\\f242\\\; }\\n\\n.fa-battery-quarter:before {\\n content: \\\\\\\f243\\\; }\\n\\n.fa-battery-three-quarters:before {\\n content: \\\\\\\f241\\\; }\\n\\n.fa-battle-net:before {\\n content: \\\\\\\f835\\\; }\\n\\n.fa-bed:before {\\n content: \\\\\\\f236\\\; }\\n\\n.fa-beer:before {\\n content: \\\\\\\f0fc\\\; }\\n\\n.fa-behance:before {\\n content: \\\\\\\f1b4\\\; }\\n\\n.fa-behance-square:before {\\n content: \\\\\\\f1b5\\\; }\\n\\n.fa-bell:before {\\n content: \\\\\\\f0f3\\\; }\\n\\n.fa-bell-slash:before {\\n content: \\\\\\\f1f6\\\; }\\n\\n.fa-bezier-curve:before {\\n content: \\\\\\\f55b\\\; }\\n\\n.fa-bible:before {\\n content: \\\\\\\f647\\\; }\\n\\n.fa-bicycle:before {\\n content: \\\\\\\f206\\\; }\\n\\n.fa-bimobject:before {\\n content: \\\\\\\f378\\\; }\\n\\n.fa-binoculars:before {\\n content: \\\\\\\f1e5\\\; }\\n\\n.fa-biohazard:before {\\n content: \\\\\\\f780\\\; }\\n\\n.fa-birthday-cake:before {\\n content: \\\\\\\f1fd\\\; }\\n\\n.fa-bitbucket:before {\\n content: \\\\\\\f171\\\; }\\n\\n.fa-bitcoin:before {\\n content: \\\\\\\f379\\\; }\\n\\n.fa-bity:before {\\n content: \\\\\\\f37a\\\; }\\n\\n.fa-black-tie:before {\\n content: \\\\\\\f27e\\\; }\\n\\n.fa-blackberry:before {\\n content: \\\\\\\f37b\\\; }\\n\\n.fa-blender:before {\\n content: \\\\\\\f517\\\; }\\n\\n.fa-blender-phone:before {\\n content: \\\\\\\f6b6\\\; }\\n\\n.fa-blind:before {\\n content: \\\\\\\f29d\\\; }\\n\\n.fa-blog:before {\\n content: \\\\\\\f781\\\; }\\n\\n.fa-blogger:before {\\n content: \\\\\\\f37c\\\; }\\n\\n.fa-blogger-b:before {\\n content: \\\\\\\f37d\\\; }\\n\\n.fa-bluetooth:before {\\n content: \\\\\\\f293\\\; }\\n\\n.fa-bluetooth-b:before {\\n content: \\\\\\\f294\\\; }\\n\\n.fa-bold:before {\\n content: \\\\\\\f032\\\; }\\n\\n.fa-bolt:before {\\n content: \\\\\\\f0e7\\\; }\\n\\n.fa-bomb:before {\\n content: \\\\\\\f1e2\\\; }\\n\\n.fa-bone:before {\\n content: \\\\\\\f5d7\\\; }\\n\\n.fa-bong:before {\\n content: \\\\\\\f55c\\\; }\\n\\n.fa-book:before {\\n content: \\\\\\\f02d\\\; }\\n\\n.fa-book-dead:before {\\n content: \\\\\\\f6b7\\\; }\\n\\n.fa-book-medical:before {\\n content: \\\\\\\f7e6\\\; }\\n\\n.fa-book-open:before {\\n content: \\\\\\\f518\\\; }\\n\\n.fa-book-reader:before {\\n content: \\\\\\\f5da\\\; }\\n\\n.fa-bookmark:before {\\n content: \\\\\\\f02e\\\; }\\n\\n.fa-bootstrap:before {\\n content: \\\\\\\f836\\\; }\\n\\n.fa-bowling-ball:before {\\n content: \\\\\\\f436\\\; }\\n\\n.fa-box:before {\\n content: \\\\\\\f466\\\; }\\n\\n.fa-box-open:before {\\n content: \\\\\\\f49e\\\; }\\n\\n.fa-boxes:before {\\n content: \\\\\\\f468\\\; }\\n\\n.fa-braille:before {\\n content: \\\\\\\f2a1\\\; }\\n\\n.fa-brain:before {\\n content: \\\\\\\f5dc\\\; }\\n\\n.fa-bread-slice:before {\\n content: \\\\\\\f7ec\\\; }\\n\\n.fa-briefcase:before {\\n content: \\\\\\\f0b1\\\; }\\n\\n.fa-briefcase-medical:before {\\n content: \\\\\\\f469\\\; }\\n\\n.fa-broadcast-tower:before {\\n content: \\\\\\\f519\\\; }\\n\\n.fa-broom:before {\\n content: \\\\\\\f51a\\\; }\\n\\n.fa-brush:before {\\n content: \\\\\\\f55d\\\; }\\n\\n.fa-btc:before {\\n content: \\\\\\\f15a\\\; }\\n\\n.fa-buffer:before {\\n content: \\\\\\\f837\\\; }\\n\\n.fa-bug:before {\\n content: \\\\\\\f188\\\; }\\n\\n.fa-building:before {\\n content: \\\\\\\f1ad\\\; }\\n\\n.fa-bullhorn:before {\\n content: \\\\\\\f0a1\\\; }\\n\\n.fa-bullseye:before {\\n content: \\\\\\\f140\\\; }\\n\\n.fa-burn:before {\\n content: \\\\\\\f46a\\\; }\\n\\n.fa-buromobelexperte:before {\\n content: \\\\\\\f37f\\\; }\\n\\n.fa-bus:before {\\n content: \\\\\\\f207\\\; }\\n\\n.fa-bus-alt:before {\\n content: \\\\\\\f55e\\\; }\\n\\n.fa-business-time:before {\\n content: \\\\\\\f64a\\\; }\\n\\n.fa-buysellads:before {\\n content: \\\\\\\f20d\\\; }\\n\\n.fa-calculator:before {\\n content: \\\\\\\f1ec\\\; }\\n\\n.fa-calendar:before {\\n content: \\\\\\\f133\\\; }\\n\\n.fa-calendar-alt:before {\\n content: \\\\\\\f073\\\; }\\n\\n.fa-calendar-check:before {\\n content: \\\\\\\f274\\\; }\\n\\n.fa-calendar-day:before {\\n content: \\\\\\\f783\\\; }\\n\\n.fa-calendar-minus:before {\\n content: \\\\\\\f272\\\; }\\n\\n.fa-calendar-plus:before {\\n content: \\\\\\\f271\\\; }\\n\\n.fa-calendar-times:before {\\n content: \\\\\\\f273\\\; }\\n\\n.fa-calendar-week:before {\\n content: \\\\\\\f784\\\; }\\n\\n.fa-camera:before {\\n content: \\\\\\\f030\\\; }\\n\\n.fa-camera-retro:before {\\n content: \\\\\\\f083\\\; }\\n\\n.fa-campground:before {\\n content: \\\\\\\f6bb\\\; }\\n\\n.fa-canadian-maple-leaf:before {\\n content: \\\\\\\f785\\\; }\\n\\n.fa-candy-cane:before {\\n content: \\\\\\\f786\\\; }\\n\\n.fa-cannabis:before {\\n content: \\\\\\\f55f\\\; }\\n\\n.fa-capsules:before {\\n content: \\\\\\\f46b\\\; }\\n\\n.fa-car:before {\\n content: \\\\\\\f1b9\\\; }\\n\\n.fa-car-alt:before {\\n content: \\\\\\\f5de\\\; }\\n\\n.fa-car-battery:before {\\n content: \\\\\\\f5df\\\; }\\n\\n.fa-car-crash:before {\\n content: \\\\\\\f5e1\\\; }\\n\\n.fa-car-side:before {\\n content: \\\\\\\f5e4\\\; }\\n\\n.fa-caret-down:before {\\n content: \\\\\\\f0d7\\\; }\\n\\n.fa-caret-left:before {\\n content: \\\\\\\f0d9\\\; }\\n\\n.fa-caret-right:before {\\n content: \\\\\\\f0da\\\; }\\n\\n.fa-caret-square-down:before {\\n content: \\\\\\\f150\\\; }\\n\\n.fa-caret-square-left:before {\\n content: \\\\\\\f191\\\; }\\n\\n.fa-caret-square-right:before {\\n content: \\\\\\\f152\\\; }\\n\\n.fa-caret-square-up:before {\\n content: \\\\\\\f151\\\; }\\n\\n.fa-caret-up:before {\\n content: \\\\\\\f0d8\\\; }\\n\\n.fa-carrot:before {\\n content: \\\\\\\f787\\\; }\\n\\n.fa-cart-arrow-down:before {\\n content: \\\\\\\f218\\\; }\\n\\n.fa-cart-plus:before {\\n content: \\\\\\\f217\\\; }\\n\\n.fa-cash-register:before {\\n content: \\\\\\\f788\\\; }\\n\\n.fa-cat:before {\\n content: \\\\\\\f6be\\\; }\\n\\n.fa-cc-amazon-pay:before {\\n content: \\\\\\\f42d\\\; }\\n\\n.fa-cc-amex:before {\\n content: \\\\\\\f1f3\\\; }\\n\\n.fa-cc-apple-pay:before {\\n content: \\\\\\\f416\\\; }\\n\\n.fa-cc-diners-club:before {\\n content: \\\\\\\f24c\\\; }\\n\\n.fa-cc-discover:before {\\n content: \\\\\\\f1f2\\\; }\\n\\n.fa-cc-jcb:before {\\n content: \\\\\\\f24b\\\; }\\n\\n.fa-cc-mastercard:before {\\n content: \\\\\\\f1f1\\\; }\\n\\n.fa-cc-paypal:before {\\n content: \\\\\\\f1f4\\\; }\\n\\n.fa-cc-stripe:before {\\n content: \\\\\\\f1f5\\\; }\\n\\n.fa-cc-visa:before {\\n content: \\\\\\\f1f0\\\; }\\n\\n.fa-centercode:before {\\n content: \\\\\\\f380\\\; }\\n\\n.fa-centos:before {\\n content: \\\\\\\f789\\\; }\\n\\n.fa-certificate:before {\\n content: \\\\\\\f0a3\\\; }\\n\\n.fa-chair:before {\\n content: \\\\\\\f6c0\\\; }\\n\\n.fa-chalkboard:before {\\n content: \\\\\\\f51b\\\; }\\n\\n.fa-chalkboard-teacher:before {\\n content: \\\\\\\f51c\\\; }\\n\\n.fa-charging-station:before {\\n content: \\\\\\\f5e7\\\; }\\n\\n.fa-chart-area:before {\\n content: \\\\\\\f1fe\\\; }\\n\\n.fa-chart-bar:before {\\n content: \\\\\\\f080\\\; }\\n\\n.fa-chart-line:before {\\n content: \\\\\\\f201\\\; }\\n\\n.fa-chart-pie:before {\\n content: \\\\\\\f200\\\; }\\n\\n.fa-check:before {\\n content: \\\\\\\f00c\\\; }\\n\\n.fa-check-circle:before {\\n content: \\\\\\\f058\\\; }\\n\\n.fa-check-double:before {\\n content: \\\\\\\f560\\\; }\\n\\n.fa-check-square:before {\\n content: \\\\\\\f14a\\\; }\\n\\n.fa-cheese:before {\\n content: \\\\\\\f7ef\\\; }\\n\\n.fa-chess:before {\\n content: \\\\\\\f439\\\; }\\n\\n.fa-chess-bishop:before {\\n content: \\\\\\\f43a\\\; }\\n\\n.fa-chess-board:before {\\n content: \\\\\\\f43c\\\; }\\n\\n.fa-chess-king:before {\\n content: \\\\\\\f43f\\\; }\\n\\n.fa-chess-knight:before {\\n content: \\\\\\\f441\\\; }\\n\\n.fa-chess-pawn:before {\\n content: \\\\\\\f443\\\; }\\n\\n.fa-chess-queen:before {\\n content: \\\\\\\f445\\\; }\\n\\n.fa-chess-rook:before {\\n content: \\\\\\\f447\\\; }\\n\\n.fa-chevron-circle-down:before {\\n content: \\\\\\\f13a\\\; }\\n\\n.fa-chevron-circle-left:before {\\n content: \\\\\\\f137\\\; }\\n\\n.fa-chevron-circle-right:before {\\n content: \\\\\\\f138\\\; }\\n\\n.fa-chevron-circle-up:before {\\n content: \\\\\\\f139\\\; }\\n\\n.fa-chevron-down:before {\\n content: \\\\\\\f078\\\; }\\n\\n.fa-chevron-left:before {\\n content: \\\\\\\f053\\\; }\\n\\n.fa-chevron-right:before {\\n content: \\\\\\\f054\\\; }\\n\\n.fa-chevron-up:before {\\n content: \\\\\\\f077\\\; }\\n\\n.fa-child:before {\\n content: \\\\\\\f1ae\\\; }\\n\\n.fa-chrome:before {\\n content: \\\\\\\f268\\\; }\\n\\n.fa-chromecast:before {\\n content: \\\\\\\f838\\\; }\\n\\n.fa-church:before {\\n content: \\\\\\\f51d\\\; }\\n\\n.fa-circle:before {\\n content: \\\\\\\f111\\\; }\\n\\n.fa-circle-notch:before {\\n content: \\\\\\\f1ce\\\; }\\n\\n.fa-city:before {\\n content: \\\\\\\f64f\\\; }\\n\\n.fa-clinic-medical:before {\\n content: \\\\\\\f7f2\\\; }\\n\\n.fa-clipboard:before {\\n content: \\\\\\\f328\\\; }\\n\\n.fa-clipboard-check:before {\\n content: \\\\\\\f46c\\\; }\\n\\n.fa-clipboard-list:before {\\n content: \\\\\\\f46d\\\; }\\n\\n.fa-clock:before {\\n content: \\\\\\\f017\\\; }\\n\\n.fa-clone:before {\\n content: \\\\\\\f24d\\\; }\\n\\n.fa-closed-captioning:before {\\n content: \\\\\\\f20a\\\; }\\n\\n.fa-cloud:before {\\n content: \\\\\\\f0c2\\\; }\\n\\n.fa-cloud-download-alt:before {\\n content: \\\\\\\f381\\\; }\\n\\n.fa-cloud-meatball:before {\\n content: \\\\\\\f73b\\\; }\\n\\n.fa-cloud-moon:before {\\n content: \\\\\\\f6c3\\\; }\\n\\n.fa-cloud-moon-rain:before {\\n content: \\\\\\\f73c\\\; }\\n\\n.fa-cloud-rain:before {\\n content: \\\\\\\f73d\\\; }\\n\\n.fa-cloud-showers-heavy:before {\\n content: \\\\\\\f740\\\; }\\n\\n.fa-cloud-sun:before {\\n content: \\\\\\\f6c4\\\; }\\n\\n.fa-cloud-sun-rain:before {\\n content: \\\\\\\f743\\\; }\\n\\n.fa-cloud-upload-alt:before {\\n content: \\\\\\\f382\\\; }\\n\\n.fa-cloudscale:before {\\n content: \\\\\\\f383\\\; }\\n\\n.fa-cloudsmith:before {\\n content: \\\\\\\f384\\\; }\\n\\n.fa-cloudversify:before {\\n content: \\\\\\\f385\\\; }\\n\\n.fa-cocktail:before {\\n content: \\\\\\\f561\\\; }\\n\\n.fa-code:before {\\n content: \\\\\\\f121\\\; }\\n\\n.fa-code-branch:before {\\n content: \\\\\\\f126\\\; }\\n\\n.fa-codepen:before {\\n content: \\\\\\\f1cb\\\; }\\n\\n.fa-codiepie:before {\\n content: \\\\\\\f284\\\; }\\n\\n.fa-coffee:before {\\n content: \\\\\\\f0f4\\\; }\\n\\n.fa-cog:before {\\n content: \\\\\\\f013\\\; }\\n\\n.fa-cogs:before {\\n content: \\\\\\\f085\\\; }\\n\\n.fa-coins:before {\\n content: \\\\\\\f51e\\\; }\\n\\n.fa-columns:before {\\n content: \\\\\\\f0db\\\; }\\n\\n.fa-comment:before {\\n content: \\\\\\\f075\\\; }\\n\\n.fa-comment-alt:before {\\n content: \\\\\\\f27a\\\; }\\n\\n.fa-comment-dollar:before {\\n content: \\\\\\\f651\\\; }\\n\\n.fa-comment-dots:before {\\n content: \\\\\\\f4ad\\\; }\\n\\n.fa-comment-medical:before {\\n content: \\\\\\\f7f5\\\; }\\n\\n.fa-comment-slash:before {\\n content: \\\\\\\f4b3\\\; }\\n\\n.fa-comments:before {\\n content: \\\\\\\f086\\\; }\\n\\n.fa-comments-dollar:before {\\n content: \\\\\\\f653\\\; }\\n\\n.fa-compact-disc:before {\\n content: \\\\\\\f51f\\\; }\\n\\n.fa-compass:before {\\n content: \\\\\\\f14e\\\; }\\n\\n.fa-compress:before {\\n content: \\\\\\\f066\\\; }\\n\\n.fa-compress-arrows-alt:before {\\n content: \\\\\\\f78c\\\; }\\n\\n.fa-concierge-bell:before {\\n content: \\\\\\\f562\\\; }\\n\\n.fa-confluence:before {\\n content: \\\\\\\f78d\\\; }\\n\\n.fa-connectdevelop:before {\\n content: \\\\\\\f20e\\\; }\\n\\n.fa-contao:before {\\n content: \\\\\\\f26d\\\; }\\n\\n.fa-cookie:before {\\n content: \\\\\\\f563\\\; }\\n\\n.fa-cookie-bite:before {\\n content: \\\\\\\f564\\\; }\\n\\n.fa-copy:before {\\n content: \\\\\\\f0c5\\\; }\\n\\n.fa-copyright:before {\\n content: \\\\\\\f1f9\\\; }\\n\\n.fa-couch:before {\\n content: \\\\\\\f4b8\\\; }\\n\\n.fa-cpanel:before {\\n content: \\\\\\\f388\\\; }\\n\\n.fa-creative-commons:before {\\n content: \\\\\\\f25e\\\; }\\n\\n.fa-creative-commons-by:before {\\n content: \\\\\\\f4e7\\\; }\\n\\n.fa-creative-commons-nc:before {\\n content: \\\\\\\f4e8\\\; }\\n\\n.fa-creative-commons-nc-eu:before {\\n content: \\\\\\\f4e9\\\; }\\n\\n.fa-creative-commons-nc-jp:before {\\n content: \\\\\\\f4ea\\\; }\\n\\n.fa-creative-commons-nd:before {\\n content: \\\\\\\f4eb\\\; }\\n\\n.fa-creative-commons-pd:before {\\n content: \\\\\\\f4ec\\\; }\\n\\n.fa-creative-commons-pd-alt:before {\\n content: \\\\\\\f4ed\\\; }\\n\\n.fa-creative-commons-remix:before {\\n content: \\\\\\\f4ee\\\; }\\n\\n.fa-creative-commons-sa:before {\\n content: \\\\\\\f4ef\\\; }\\n\\n.fa-creative-commons-sampling:before {\\n content: \\\\\\\f4f0\\\; }\\n\\n.fa-creative-commons-sampling-plus:before {\\n content: \\\\\\\f4f1\\\; }\\n\\n.fa-creative-commons-share:before {\\n content: \\\\\\\f4f2\\\; }\\n\\n.fa-creative-commons-zero:before {\\n content: \\\\\\\f4f3\\\; }\\n\\n.fa-credit-card:before {\\n content: \\\\\\\f09d\\\; }\\n\\n.fa-critical-role:before {\\n content: \\\\\\\f6c9\\\; }\\n\\n.fa-crop:before {\\n content: \\\\\\\f125\\\; }\\n\\n.fa-crop-alt:before {\\n content: \\\\\\\f565\\\; }\\n\\n.fa-cross:before {\\n content: \\\\\\\f654\\\; }\\n\\n.fa-crosshairs:before {\\n content: \\\\\\\f05b\\\; }\\n\\n.fa-crow:before {\\n content: \\\\\\\f520\\\; }\\n\\n.fa-crown:before {\\n content: \\\\\\\f521\\\; }\\n\\n.fa-crutch:before {\\n content: \\\\\\\f7f7\\\; }\\n\\n.fa-css3:before {\\n content: \\\\\\\f13c\\\; }\\n\\n.fa-css3-alt:before {\\n content: \\\\\\\f38b\\\; }\\n\\n.fa-cube:before {\\n content: \\\\\\\f1b2\\\; }\\n\\n.fa-cubes:before {\\n content: \\\\\\\f1b3\\\; }\\n\\n.fa-cut:before {\\n content: \\\\\\\f0c4\\\; }\\n\\n.fa-cuttlefish:before {\\n content: \\\\\\\f38c\\\; }\\n\\n.fa-d-and-d:before {\\n content: \\\\\\\f38d\\\; }\\n\\n.fa-d-and-d-beyond:before {\\n content: \\\\\\\f6ca\\\; }\\n\\n.fa-dashcube:before {\\n content: \\\\\\\f210\\\; }\\n\\n.fa-database:before {\\n content: \\\\\\\f1c0\\\; }\\n\\n.fa-deaf:before {\\n content: \\\\\\\f2a4\\\; }\\n\\n.fa-delicious:before {\\n content: \\\\\\\f1a5\\\; }\\n\\n.fa-democrat:before {\\n content: \\\\\\\f747\\\; }\\n\\n.fa-deploydog:before {\\n content: \\\\\\\f38e\\\; }\\n\\n.fa-deskpro:before {\\n content: \\\\\\\f38f\\\; }\\n\\n.fa-desktop:before {\\n content: \\\\\\\f108\\\; }\\n\\n.fa-dev:before {\\n content: \\\\\\\f6cc\\\; }\\n\\n.fa-deviantart:before {\\n content: \\\\\\\f1bd\\\; }\\n\\n.fa-dharmachakra:before {\\n content: \\\\\\\f655\\\; }\\n\\n.fa-dhl:before {\\n content: \\\\\\\f790\\\; }\\n\\n.fa-diagnoses:before {\\n content: \\\\\\\f470\\\; }\\n\\n.fa-diaspora:before {\\n content: \\\\\\\f791\\\; }\\n\\n.fa-dice:before {\\n content: \\\\\\\f522\\\; }\\n\\n.fa-dice-d20:before {\\n content: \\\\\\\f6cf\\\; }\\n\\n.fa-dice-d6:before {\\n content: \\\\\\\f6d1\\\; }\\n\\n.fa-dice-five:before {\\n content: \\\\\\\f523\\\; }\\n\\n.fa-dice-four:before {\\n content: \\\\\\\f524\\\; }\\n\\n.fa-dice-one:before {\\n content: \\\\\\\f525\\\; }\\n\\n.fa-dice-six:before {\\n content: \\\\\\\f526\\\; }\\n\\n.fa-dice-three:before {\\n content: \\\\\\\f527\\\; }\\n\\n.fa-dice-two:before {\\n content: \\\\\\\f528\\\; }\\n\\n.fa-digg:before {\\n content: \\\\\\\f1a6\\\; }\\n\\n.fa-digital-ocean:before {\\n content: \\\\\\\f391\\\; }\\n\\n.fa-digital-tachograph:before {\\n content: \\\\\\\f566\\\; }\\n\\n.fa-directions:before {\\n content: \\\\\\\f5eb\\\; }\\n\\n.fa-discord:before {\\n content: \\\\\\\f392\\\; }\\n\\n.fa-discourse:before {\\n content: \\\\\\\f393\\\; }\\n\\n.fa-divide:before {\\n content: \\\\\\\f529\\\; }\\n\\n.fa-dizzy:before {\\n content: \\\\\\\f567\\\; }\\n\\n.fa-dna:before {\\n content: \\\\\\\f471\\\; }\\n\\n.fa-dochub:before {\\n content: \\\\\\\f394\\\; }\\n\\n.fa-docker:before {\\n content: \\\\\\\f395\\\; }\\n\\n.fa-dog:before {\\n content: \\\\\\\f6d3\\\; }\\n\\n.fa-dollar-sign:before {\\n content: \\\\\\\f155\\\; }\\n\\n.fa-dolly:before {\\n content: \\\\\\\f472\\\; }\\n\\n.fa-dolly-flatbed:before {\\n content: \\\\\\\f474\\\; }\\n\\n.fa-donate:before {\\n content: \\\\\\\f4b9\\\; }\\n\\n.fa-door-closed:before {\\n content: \\\\\\\f52a\\\; }\\n\\n.fa-door-open:before {\\n content: \\\\\\\f52b\\\; }\\n\\n.fa-dot-circle:before {\\n content: \\\\\\\f192\\\; }\\n\\n.fa-dove:before {\\n content: \\\\\\\f4ba\\\; }\\n\\n.fa-download:before {\\n content: \\\\\\\f019\\\; }\\n\\n.fa-draft2digital:before {\\n content: \\\\\\\f396\\\; }\\n\\n.fa-drafting-compass:before {\\n content: \\\\\\\f568\\\; }\\n\\n.fa-dragon:before {\\n content: \\\\\\\f6d5\\\; }\\n\\n.fa-draw-polygon:before {\\n content: \\\\\\\f5ee\\\; }\\n\\n.fa-dribbble:before {\\n content: \\\\\\\f17d\\\; }\\n\\n.fa-dribbble-square:before {\\n content: \\\\\\\f397\\\; }\\n\\n.fa-dropbox:before {\\n content: \\\\\\\f16b\\\; }\\n\\n.fa-drum:before {\\n content: \\\\\\\f569\\\; }\\n\\n.fa-drum-steelpan:before {\\n content: \\\\\\\f56a\\\; }\\n\\n.fa-drumstick-bite:before {\\n content: \\\\\\\f6d7\\\; }\\n\\n.fa-drupal:before {\\n content: \\\\\\\f1a9\\\; }\\n\\n.fa-dumbbell:before {\\n content: \\\\\\\f44b\\\; }\\n\\n.fa-dumpster:before {\\n content: \\\\\\\f793\\\; }\\n\\n.fa-dumpster-fire:before {\\n content: \\\\\\\f794\\\; }\\n\\n.fa-dungeon:before {\\n content: \\\\\\\f6d9\\\; }\\n\\n.fa-dyalog:before {\\n content: \\\\\\\f399\\\; }\\n\\n.fa-earlybirds:before {\\n content: \\\\\\\f39a\\\; }\\n\\n.fa-ebay:before {\\n content: \\\\\\\f4f4\\\; }\\n\\n.fa-edge:before {\\n content: \\\\\\\f282\\\; }\\n\\n.fa-edit:before {\\n content: \\\\\\\f044\\\; }\\n\\n.fa-egg:before {\\n content: \\\\\\\f7fb\\\; }\\n\\n.fa-eject:before {\\n content: \\\\\\\f052\\\; }\\n\\n.fa-elementor:before {\\n content: \\\\\\\f430\\\; }\\n\\n.fa-ellipsis-h:before {\\n content: \\\\\\\f141\\\; }\\n\\n.fa-ellipsis-v:before {\\n content: \\\\\\\f142\\\; }\\n\\n.fa-ello:before {\\n content: \\\\\\\f5f1\\\; }\\n\\n.fa-ember:before {\\n content: \\\\\\\f423\\\; }\\n\\n.fa-empire:before {\\n content: \\\\\\\f1d1\\\; }\\n\\n.fa-envelope:before {\\n content: \\\\\\\f0e0\\\; }\\n\\n.fa-envelope-open:before {\\n content: \\\\\\\f2b6\\\; }\\n\\n.fa-envelope-open-text:before {\\n content: \\\\\\\f658\\\; }\\n\\n.fa-envelope-square:before {\\n content: \\\\\\\f199\\\; }\\n\\n.fa-envira:before {\\n content: \\\\\\\f299\\\; }\\n\\n.fa-equals:before {\\n content: \\\\\\\f52c\\\; }\\n\\n.fa-eraser:before {\\n content: \\\\\\\f12d\\\; }\\n\\n.fa-erlang:before {\\n content: \\\\\\\f39d\\\; }\\n\\n.fa-ethereum:before {\\n content: \\\\\\\f42e\\\; }\\n\\n.fa-ethernet:before {\\n content: \\\\\\\f796\\\; }\\n\\n.fa-etsy:before {\\n content: \\\\\\\f2d7\\\; }\\n\\n.fa-euro-sign:before {\\n content: \\\\\\\f153\\\; }\\n\\n.fa-evernote:before {\\n content: \\\\\\\f839\\\; }\\n\\n.fa-exchange-alt:before {\\n content: \\\\\\\f362\\\; }\\n\\n.fa-exclamation:before {\\n content: \\\\\\\f12a\\\; }\\n\\n.fa-exclamation-circle:before {\\n content: \\\\\\\f06a\\\; }\\n\\n.fa-exclamation-triangle:before {\\n content: \\\\\\\f071\\\; }\\n\\n.fa-expand:before {\\n content: \\\\\\\f065\\\; }\\n\\n.fa-expand-arrows-alt:before {\\n content: \\\\\\\f31e\\\; }\\n\\n.fa-expeditedssl:before {\\n content: \\\\\\\f23e\\\; }\\n\\n.fa-external-link-alt:before {\\n content: \\\\\\\f35d\\\; }\\n\\n.fa-external-link-square-alt:before {\\n content: \\\\\\\f360\\\; }\\n\\n.fa-eye:before {\\n content: \\\\\\\f06e\\\; }\\n\\n.fa-eye-dropper:before {\\n content: \\\\\\\f1fb\\\; }\\n\\n.fa-eye-slash:before {\\n content: \\\\\\\f070\\\; }\\n\\n.fa-facebook:before {\\n content: \\\\\\\f09a\\\; }\\n\\n.fa-facebook-f:before {\\n content: \\\\\\\f39e\\\; }\\n\\n.fa-facebook-messenger:before {\\n content: \\\\\\\f39f\\\; }\\n\\n.fa-facebook-square:before {\\n content: \\\\\\\f082\\\; }\\n\\n.fa-fantasy-flight-games:before {\\n content: \\\\\\\f6dc\\\; }\\n\\n.fa-fast-backward:before {\\n content: \\\\\\\f049\\\; }\\n\\n.fa-fast-forward:before {\\n content: \\\\\\\f050\\\; }\\n\\n.fa-fax:before {\\n content: \\\\\\\f1ac\\\; }\\n\\n.fa-feather:before {\\n content: \\\\\\\f52d\\\; }\\n\\n.fa-feather-alt:before {\\n content: \\\\\\\f56b\\\; }\\n\\n.fa-fedex:before {\\n content: \\\\\\\f797\\\; }\\n\\n.fa-fedora:before {\\n content: \\\\\\\f798\\\; }\\n\\n.fa-female:before {\\n content: \\\\\\\f182\\\; }\\n\\n.fa-fighter-jet:before {\\n content: \\\\\\\f0fb\\\; }\\n\\n.fa-figma:before {\\n content: \\\\\\\f799\\\; }\\n\\n.fa-file:before {\\n content: \\\\\\\f15b\\\; }\\n\\n.fa-file-alt:before {\\n content: \\\\\\\f15c\\\; }\\n\\n.fa-file-archive:before {\\n content: \\\\\\\f1c6\\\; }\\n\\n.fa-file-audio:before {\\n content: \\\\\\\f1c7\\\; }\\n\\n.fa-file-code:before {\\n content: \\\\\\\f1c9\\\; }\\n\\n.fa-file-contract:before {\\n content: \\\\\\\f56c\\\; }\\n\\n.fa-file-csv:before {\\n content: \\\\\\\f6dd\\\; }\\n\\n.fa-file-download:before {\\n content: \\\\\\\f56d\\\; }\\n\\n.fa-file-excel:before {\\n content: \\\\\\\f1c3\\\; }\\n\\n.fa-file-export:before {\\n content: \\\\\\\f56e\\\; }\\n\\n.fa-file-image:before {\\n content: \\\\\\\f1c5\\\; }\\n\\n.fa-file-import:before {\\n content: \\\\\\\f56f\\\; }\\n\\n.fa-file-invoice:before {\\n content: \\\\\\\f570\\\; }\\n\\n.fa-file-invoice-dollar:before {\\n content: \\\\\\\f571\\\; }\\n\\n.fa-file-medical:before {\\n content: \\\\\\\f477\\\; }\\n\\n.fa-file-medical-alt:before {\\n content: \\\\\\\f478\\\; }\\n\\n.fa-file-pdf:before {\\n content: \\\\\\\f1c1\\\; }\\n\\n.fa-file-powerpoint:before {\\n content: \\\\\\\f1c4\\\; }\\n\\n.fa-file-prescription:before {\\n content: \\\\\\\f572\\\; }\\n\\n.fa-file-signature:before {\\n content: \\\\\\\f573\\\; }\\n\\n.fa-file-upload:before {\\n content: \\\\\\\f574\\\; }\\n\\n.fa-file-video:before {\\n content: \\\\\\\f1c8\\\; }\\n\\n.fa-file-word:before {\\n content: \\\\\\\f1c2\\\; }\\n\\n.fa-fill:before {\\n content: \\\\\\\f575\\\; }\\n\\n.fa-fill-drip:before {\\n content: \\\\\\\f576\\\; }\\n\\n.fa-film:before {\\n content: \\\\\\\f008\\\; }\\n\\n.fa-filter:before {\\n content: \\\\\\\f0b0\\\; }\\n\\n.fa-fingerprint:before {\\n content: \\\\\\\f577\\\; }\\n\\n.fa-fire:before {\\n content: \\\\\\\f06d\\\; }\\n\\n.fa-fire-alt:before {\\n content: \\\\\\\f7e4\\\; }\\n\\n.fa-fire-extinguisher:before {\\n content: \\\\\\\f134\\\; }\\n\\n.fa-firefox:before {\\n content: \\\\\\\f269\\\; }\\n\\n.fa-first-aid:before {\\n content: \\\\\\\f479\\\; }\\n\\n.fa-first-order:before {\\n content: \\\\\\\f2b0\\\; }\\n\\n.fa-first-order-alt:before {\\n content: \\\\\\\f50a\\\; }\\n\\n.fa-firstdraft:before {\\n content: \\\\\\\f3a1\\\; }\\n\\n.fa-fish:before {\\n content: \\\\\\\f578\\\; }\\n\\n.fa-fist-raised:before {\\n content: \\\\\\\f6de\\\; }\\n\\n.fa-flag:before {\\n content: \\\\\\\f024\\\; }\\n\\n.fa-flag-checkered:before {\\n content: \\\\\\\f11e\\\; }\\n\\n.fa-flag-usa:before {\\n content: \\\\\\\f74d\\\; }\\n\\n.fa-flask:before {\\n content: \\\\\\\f0c3\\\; }\\n\\n.fa-flickr:before {\\n content: \\\\\\\f16e\\\; }\\n\\n.fa-flipboard:before {\\n content: \\\\\\\f44d\\\; }\\n\\n.fa-flushed:before {\\n content: \\\\\\\f579\\\; }\\n\\n.fa-fly:before {\\n content: \\\\\\\f417\\\; }\\n\\n.fa-folder:before {\\n content: \\\\\\\f07b\\\; }\\n\\n.fa-folder-minus:before {\\n content: \\\\\\\f65d\\\; }\\n\\n.fa-folder-open:before {\\n content: \\\\\\\f07c\\\; }\\n\\n.fa-folder-plus:before {\\n content: \\\\\\\f65e\\\; }\\n\\n.fa-font:before {\\n content: \\\\\\\f031\\\; }\\n\\n.fa-font-awesome:before {\\n content: \\\\\\\f2b4\\\; }\\n\\n.fa-font-awesome-alt:before {\\n content: \\\\\\\f35c\\\; }\\n\\n.fa-font-awesome-flag:before {\\n content: \\\\\\\f425\\\; }\\n\\n.fa-font-awesome-logo-full:before {\\n content: \\\\\\\f4e6\\\; }\\n\\n.fa-fonticons:before {\\n content: \\\\\\\f280\\\; }\\n\\n.fa-fonticons-fi:before {\\n content: \\\\\\\f3a2\\\; }\\n\\n.fa-football-ball:before {\\n content: \\\\\\\f44e\\\; }\\n\\n.fa-fort-awesome:before {\\n content: \\\\\\\f286\\\; }\\n\\n.fa-fort-awesome-alt:before {\\n content: \\\\\\\f3a3\\\; }\\n\\n.fa-forumbee:before {\\n content: \\\\\\\f211\\\; }\\n\\n.fa-forward:before {\\n content: \\\\\\\f04e\\\; }\\n\\n.fa-foursquare:before {\\n content: \\\\\\\f180\\\; }\\n\\n.fa-free-code-camp:before {\\n content: \\\\\\\f2c5\\\; }\\n\\n.fa-freebsd:before {\\n content: \\\\\\\f3a4\\\; }\\n\\n.fa-frog:before {\\n content: \\\\\\\f52e\\\; }\\n\\n.fa-frown:before {\\n content: \\\\\\\f119\\\; }\\n\\n.fa-frown-open:before {\\n content: \\\\\\\f57a\\\; }\\n\\n.fa-fulcrum:before {\\n content: \\\\\\\f50b\\\; }\\n\\n.fa-funnel-dollar:before {\\n content: \\\\\\\f662\\\; }\\n\\n.fa-futbol:before {\\n content: \\\\\\\f1e3\\\; }\\n\\n.fa-galactic-republic:before {\\n content: \\\\\\\f50c\\\; }\\n\\n.fa-galactic-senate:before {\\n content: \\\\\\\f50d\\\; }\\n\\n.fa-gamepad:before {\\n content: \\\\\\\f11b\\\; }\\n\\n.fa-gas-pump:before {\\n content: \\\\\\\f52f\\\; }\\n\\n.fa-gavel:before {\\n content: \\\\\\\f0e3\\\; }\\n\\n.fa-gem:before {\\n content: \\\\\\\f3a5\\\; }\\n\\n.fa-genderless:before {\\n content: \\\\\\\f22d\\\; }\\n\\n.fa-get-pocket:before {\\n content: \\\\\\\f265\\\; }\\n\\n.fa-gg:before {\\n content: \\\\\\\f260\\\; }\\n\\n.fa-gg-circle:before {\\n content: \\\\\\\f261\\\; }\\n\\n.fa-ghost:before {\\n content: \\\\\\\f6e2\\\; }\\n\\n.fa-gift:before {\\n content: \\\\\\\f06b\\\; }\\n\\n.fa-gifts:before {\\n content: \\\\\\\f79c\\\; }\\n\\n.fa-git:before {\\n content: \\\\\\\f1d3\\\; }\\n\\n.fa-git-alt:before {\\n content: \\\\\\\f841\\\; }\\n\\n.fa-git-square:before {\\n content: \\\\\\\f1d2\\\; }\\n\\n.fa-github:before {\\n content: \\\\\\\f09b\\\; }\\n\\n.fa-github-alt:before {\\n content: \\\\\\\f113\\\; }\\n\\n.fa-github-square:before {\\n content: \\\\\\\f092\\\; }\\n\\n.fa-gitkraken:before {\\n content: \\\\\\\f3a6\\\; }\\n\\n.fa-gitlab:before {\\n content: \\\\\\\f296\\\; }\\n\\n.fa-gitter:before {\\n content: \\\\\\\f426\\\; }\\n\\n.fa-glass-cheers:before {\\n content: \\\\\\\f79f\\\; }\\n\\n.fa-glass-martini:before {\\n content: \\\\\\\f000\\\; }\\n\\n.fa-glass-martini-alt:before {\\n content: \\\\\\\f57b\\\; }\\n\\n.fa-glass-whiskey:before {\\n content: \\\\\\\f7a0\\\; }\\n\\n.fa-glasses:before {\\n content: \\\\\\\f530\\\; }\\n\\n.fa-glide:before {\\n content: \\\\\\\f2a5\\\; }\\n\\n.fa-glide-g:before {\\n content: \\\\\\\f2a6\\\; }\\n\\n.fa-globe:before {\\n content: \\\\\\\f0ac\\\; }\\n\\n.fa-globe-africa:before {\\n content: \\\\\\\f57c\\\; }\\n\\n.fa-globe-americas:before {\\n content: \\\\\\\f57d\\\; }\\n\\n.fa-globe-asia:before {\\n content: \\\\\\\f57e\\\; }\\n\\n.fa-globe-europe:before {\\n content: \\\\\\\f7a2\\\; }\\n\\n.fa-gofore:before {\\n content: \\\\\\\f3a7\\\; }\\n\\n.fa-golf-ball:before {\\n content: \\\\\\\f450\\\; }\\n\\n.fa-goodreads:before {\\n content: \\\\\\\f3a8\\\; }\\n\\n.fa-goodreads-g:before {\\n content: \\\\\\\f3a9\\\; }\\n\\n.fa-google:before {\\n content: \\\\\\\f1a0\\\; }\\n\\n.fa-google-drive:before {\\n content: \\\\\\\f3aa\\\; }\\n\\n.fa-google-play:before {\\n content: \\\\\\\f3ab\\\; }\\n\\n.fa-google-plus:before {\\n content: \\\\\\\f2b3\\\; }\\n\\n.fa-google-plus-g:before {\\n content: \\\\\\\f0d5\\\; }\\n\\n.fa-google-plus-square:before {\\n content: \\\\\\\f0d4\\\; }\\n\\n.fa-google-wallet:before {\\n content: \\\\\\\f1ee\\\; }\\n\\n.fa-gopuram:before {\\n content: \\\\\\\f664\\\; }\\n\\n.fa-graduation-cap:before {\\n content: \\\\\\\f19d\\\; }\\n\\n.fa-gratipay:before {\\n content: \\\\\\\f184\\\; }\\n\\n.fa-grav:before {\\n content: \\\\\\\f2d6\\\; }\\n\\n.fa-greater-than:before {\\n content: \\\\\\\f531\\\; }\\n\\n.fa-greater-than-equal:before {\\n content: \\\\\\\f532\\\; }\\n\\n.fa-grimace:before {\\n content: \\\\\\\f57f\\\; }\\n\\n.fa-grin:before {\\n content: \\\\\\\f580\\\; }\\n\\n.fa-grin-alt:before {\\n content: \\\\\\\f581\\\; }\\n\\n.fa-grin-beam:before {\\n content: \\\\\\\f582\\\; }\\n\\n.fa-grin-beam-sweat:before {\\n content: \\\\\\\f583\\\; }\\n\\n.fa-grin-hearts:before {\\n content: \\\\\\\f584\\\; }\\n\\n.fa-grin-squint:before {\\n content: \\\\\\\f585\\\; }\\n\\n.fa-grin-squint-tears:before {\\n content: \\\\\\\f586\\\; }\\n\\n.fa-grin-stars:before {\\n content: \\\\\\\f587\\\; }\\n\\n.fa-grin-tears:before {\\n content: \\\\\\\f588\\\; }\\n\\n.fa-grin-tongue:before {\\n content: \\\\\\\f589\\\; }\\n\\n.fa-grin-tongue-squint:before {\\n content: \\\\\\\f58a\\\; }\\n\\n.fa-grin-tongue-wink:before {\\n content: \\\\\\\f58b\\\; }\\n\\n.fa-grin-wink:before {\\n content: \\\\\\\f58c\\\; }\\n\\n.fa-grip-horizontal:before {\\n content: \\\\\\\f58d\\\; }\\n\\n.fa-grip-lines:before {\\n content: \\\\\\\f7a4\\\; }\\n\\n.fa-grip-lines-vertical:before {\\n content: \\\\\\\f7a5\\\; }\\n\\n.fa-grip-vertical:before {\\n content: \\\\\\\f58e\\\; }\\n\\n.fa-gripfire:before {\\n content: \\\\\\\f3ac\\\; }\\n\\n.fa-grunt:before {\\n content: \\\\\\\f3ad\\\; }\\n\\n.fa-guitar:before {\\n content: \\\\\\\f7a6\\\; }\\n\\n.fa-gulp:before {\\n content: \\\\\\\f3ae\\\; }\\n\\n.fa-h-square:before {\\n content: \\\\\\\f0fd\\\; }\\n\\n.fa-hacker-news:before {\\n content: \\\\\\\f1d4\\\; }\\n\\n.fa-hacker-news-square:before {\\n content: \\\\\\\f3af\\\; }\\n\\n.fa-hackerrank:before {\\n content: \\\\\\\f5f7\\\; }\\n\\n.fa-hamburger:before {\\n content: \\\\\\\f805\\\; }\\n\\n.fa-hammer:before {\\n content: \\\\\\\f6e3\\\; }\\n\\n.fa-hamsa:before {\\n content: \\\\\\\f665\\\; }\\n\\n.fa-hand-holding:before {\\n content: \\\\\\\f4bd\\\; }\\n\\n.fa-hand-holding-heart:before {\\n content: \\\\\\\f4be\\\; }\\n\\n.fa-hand-holding-usd:before {\\n content: \\\\\\\f4c0\\\; }\\n\\n.fa-hand-lizard:before {\\n content: \\\\\\\f258\\\; }\\n\\n.fa-hand-middle-finger:before {\\n content: \\\\\\\f806\\\; }\\n\\n.fa-hand-paper:before {\\n content: \\\\\\\f256\\\; }\\n\\n.fa-hand-peace:before {\\n content: \\\\\\\f25b\\\; }\\n\\n.fa-hand-point-down:before {\\n content: \\\\\\\f0a7\\\; }\\n\\n.fa-hand-point-left:before {\\n content: \\\\\\\f0a5\\\; }\\n\\n.fa-hand-point-right:before {\\n content: \\\\\\\f0a4\\\; }\\n\\n.fa-hand-point-up:before {\\n content: \\\\\\\f0a6\\\; }\\n\\n.fa-hand-pointer:before {\\n content: \\\\\\\f25a\\\; }\\n\\n.fa-hand-rock:before {\\n content: \\\\\\\f255\\\; }\\n\\n.fa-hand-scissors:before {\\n content: \\\\\\\f257\\\; }\\n\\n.fa-hand-spock:before {\\n content: \\\\\\\f259\\\; }\\n\\n.fa-hands:before {\\n content: \\\\\\\f4c2\\\; }\\n\\n.fa-hands-helping:before {\\n content: \\\\\\\f4c4\\\; }\\n\\n.fa-handshake:before {\\n content: \\\\\\\f2b5\\\; }\\n\\n.fa-hanukiah:before {\\n content: \\\\\\\f6e6\\\; }\\n\\n.fa-hard-hat:before {\\n content: \\\\\\\f807\\\; }\\n\\n.fa-hashtag:before {\\n content: \\\\\\\f292\\\; }\\n\\n.fa-hat-wizard:before {\\n content: \\\\\\\f6e8\\\; }\\n\\n.fa-haykal:before {\\n content: \\\\\\\f666\\\; }\\n\\n.fa-hdd:before {\\n content: \\\\\\\f0a0\\\; }\\n\\n.fa-heading:before {\\n content: \\\\\\\f1dc\\\; }\\n\\n.fa-headphones:before {\\n content: \\\\\\\f025\\\; }\\n\\n.fa-headphones-alt:before {\\n content: \\\\\\\f58f\\\; }\\n\\n.fa-headset:before {\\n content: \\\\\\\f590\\\; }\\n\\n.fa-heart:before {\\n content: \\\\\\\f004\\\; }\\n\\n.fa-heart-broken:before {\\n content: \\\\\\\f7a9\\\; }\\n\\n.fa-heartbeat:before {\\n content: \\\\\\\f21e\\\; }\\n\\n.fa-helicopter:before {\\n content: \\\\\\\f533\\\; }\\n\\n.fa-highlighter:before {\\n content: \\\\\\\f591\\\; }\\n\\n.fa-hiking:before {\\n content: \\\\\\\f6ec\\\; }\\n\\n.fa-hippo:before {\\n content: \\\\\\\f6ed\\\; }\\n\\n.fa-hips:before {\\n content: \\\\\\\f452\\\; }\\n\\n.fa-hire-a-helper:before {\\n content: \\\\\\\f3b0\\\; }\\n\\n.fa-history:before {\\n content: \\\\\\\f1da\\\; }\\n\\n.fa-hockey-puck:before {\\n content: \\\\\\\f453\\\; }\\n\\n.fa-holly-berry:before {\\n content: \\\\\\\f7aa\\\; }\\n\\n.fa-home:before {\\n content: \\\\\\\f015\\\; }\\n\\n.fa-hooli:before {\\n content: \\\\\\\f427\\\; }\\n\\n.fa-hornbill:before {\\n content: \\\\\\\f592\\\; }\\n\\n.fa-horse:before {\\n content: \\\\\\\f6f0\\\; }\\n\\n.fa-horse-head:before {\\n content: \\\\\\\f7ab\\\; }\\n\\n.fa-hospital:before {\\n content: \\\\\\\f0f8\\\; }\\n\\n.fa-hospital-alt:before {\\n content: \\\\\\\f47d\\\; }\\n\\n.fa-hospital-symbol:before {\\n content: \\\\\\\f47e\\\; }\\n\\n.fa-hot-tub:before {\\n content: \\\\\\\f593\\\; }\\n\\n.fa-hotdog:before {\\n content: \\\\\\\f80f\\\; }\\n\\n.fa-hotel:before {\\n content: \\\\\\\f594\\\; }\\n\\n.fa-hotjar:before {\\n content: \\\\\\\f3b1\\\; }\\n\\n.fa-hourglass:before {\\n content: \\\\\\\f254\\\; }\\n\\n.fa-hourglass-end:before {\\n content: \\\\\\\f253\\\; }\\n\\n.fa-hourglass-half:before {\\n content: \\\\\\\f252\\\; }\\n\\n.fa-hourglass-start:before {\\n content: \\\\\\\f251\\\; }\\n\\n.fa-house-damage:before {\\n content: \\\\\\\f6f1\\\; }\\n\\n.fa-houzz:before {\\n content: \\\\\\\f27c\\\; }\\n\\n.fa-hryvnia:before {\\n content: \\\\\\\f6f2\\\; }\\n\\n.fa-html5:before {\\n content: \\\\\\\f13b\\\; }\\n\\n.fa-hubspot:before {\\n content: \\\\\\\f3b2\\\; }\\n\\n.fa-i-cursor:before {\\n content: \\\\\\\f246\\\; }\\n\\n.fa-ice-cream:before {\\n content: \\\\\\\f810\\\; }\\n\\n.fa-icicles:before {\\n content: \\\\\\\f7ad\\\; }\\n\\n.fa-id-badge:before {\\n content: \\\\\\\f2c1\\\; }\\n\\n.fa-id-card:before {\\n content: \\\\\\\f2c2\\\; }\\n\\n.fa-id-card-alt:before {\\n content: \\\\\\\f47f\\\; }\\n\\n.fa-igloo:before {\\n content: \\\\\\\f7ae\\\; }\\n\\n.fa-image:before {\\n content: \\\\\\\f03e\\\; }\\n\\n.fa-images:before {\\n content: \\\\\\\f302\\\; }\\n\\n.fa-imdb:before {\\n content: \\\\\\\f2d8\\\; }\\n\\n.fa-inbox:before {\\n content: \\\\\\\f01c\\\; }\\n\\n.fa-indent:before {\\n content: \\\\\\\f03c\\\; }\\n\\n.fa-industry:before {\\n content: \\\\\\\f275\\\; }\\n\\n.fa-infinity:before {\\n content: \\\\\\\f534\\\; }\\n\\n.fa-info:before {\\n content: \\\\\\\f129\\\; }\\n\\n.fa-info-circle:before {\\n content: \\\\\\\f05a\\\; }\\n\\n.fa-instagram:before {\\n content: \\\\\\\f16d\\\; }\\n\\n.fa-intercom:before {\\n content: \\\\\\\f7af\\\; }\\n\\n.fa-internet-explorer:before {\\n content: \\\\\\\f26b\\\; }\\n\\n.fa-invision:before {\\n content: \\\\\\\f7b0\\\; }\\n\\n.fa-ioxhost:before {\\n content: \\\\\\\f208\\\; }\\n\\n.fa-italic:before {\\n content: \\\\\\\f033\\\; }\\n\\n.fa-itch-io:before {\\n content: \\\\\\\f83a\\\; }\\n\\n.fa-itunes:before {\\n content: \\\\\\\f3b4\\\; }\\n\\n.fa-itunes-note:before {\\n content: \\\\\\\f3b5\\\; }\\n\\n.fa-java:before {\\n content: \\\\\\\f4e4\\\; }\\n\\n.fa-jedi:before {\\n content: \\\\\\\f669\\\; }\\n\\n.fa-jedi-order:before {\\n content: \\\\\\\f50e\\\; }\\n\\n.fa-jenkins:before {\\n content: \\\\\\\f3b6\\\; }\\n\\n.fa-jira:before {\\n content: \\\\\\\f7b1\\\; }\\n\\n.fa-joget:before {\\n content: \\\\\\\f3b7\\\; }\\n\\n.fa-joint:before {\\n content: \\\\\\\f595\\\; }\\n\\n.fa-joomla:before {\\n content: \\\\\\\f1aa\\\; }\\n\\n.fa-journal-whills:before {\\n content: \\\\\\\f66a\\\; }\\n\\n.fa-js:before {\\n content: \\\\\\\f3b8\\\; }\\n\\n.fa-js-square:before {\\n content: \\\\\\\f3b9\\\; }\\n\\n.fa-jsfiddle:before {\\n content: \\\\\\\f1cc\\\; }\\n\\n.fa-kaaba:before {\\n content: \\\\\\\f66b\\\; }\\n\\n.fa-kaggle:before {\\n content: \\\\\\\f5fa\\\; }\\n\\n.fa-key:before {\\n content: \\\\\\\f084\\\; }\\n\\n.fa-keybase:before {\\n content: \\\\\\\f4f5\\\; }\\n\\n.fa-keyboard:before {\\n content: \\\\\\\f11c\\\; }\\n\\n.fa-keycdn:before {\\n content: \\\\\\\f3ba\\\; }\\n\\n.fa-khanda:before {\\n content: \\\\\\\f66d\\\; }\\n\\n.fa-kickstarter:before {\\n content: \\\\\\\f3bb\\\; }\\n\\n.fa-kickstarter-k:before {\\n content: \\\\\\\f3bc\\\; }\\n\\n.fa-kiss:before {\\n content: \\\\\\\f596\\\; }\\n\\n.fa-kiss-beam:before {\\n content: \\\\\\\f597\\\; }\\n\\n.fa-kiss-wink-heart:before {\\n content: \\\\\\\f598\\\; }\\n\\n.fa-kiwi-bird:before {\\n content: \\\\\\\f535\\\; }\\n\\n.fa-korvue:before {\\n content: \\\\\\\f42f\\\; }\\n\\n.fa-landmark:before {\\n content: \\\\\\\f66f\\\; }\\n\\n.fa-language:before {\\n content: \\\\\\\f1ab\\\; }\\n\\n.fa-laptop:before {\\n content: \\\\\\\f109\\\; }\\n\\n.fa-laptop-code:before {\\n content: \\\\\\\f5fc\\\; }\\n\\n.fa-laptop-medical:before {\\n content: \\\\\\\f812\\\; }\\n\\n.fa-laravel:before {\\n content: \\\\\\\f3bd\\\; }\\n\\n.fa-lastfm:before {\\n content: \\\\\\\f202\\\; }\\n\\n.fa-lastfm-square:before {\\n content: \\\\\\\f203\\\; }\\n\\n.fa-laugh:before {\\n content: \\\\\\\f599\\\; }\\n\\n.fa-laugh-beam:before {\\n content: \\\\\\\f59a\\\; }\\n\\n.fa-laugh-squint:before {\\n content: \\\\\\\f59b\\\; }\\n\\n.fa-laugh-wink:before {\\n content: \\\\\\\f59c\\\; }\\n\\n.fa-layer-group:before {\\n content: \\\\\\\f5fd\\\; }\\n\\n.fa-leaf:before {\\n content: \\\\\\\f06c\\\; }\\n\\n.fa-leanpub:before {\\n content: \\\\\\\f212\\\; }\\n\\n.fa-lemon:before {\\n content: \\\\\\\f094\\\; }\\n\\n.fa-less:before {\\n content: \\\\\\\f41d\\\; }\\n\\n.fa-less-than:before {\\n content: \\\\\\\f536\\\; }\\n\\n.fa-less-than-equal:before {\\n content: \\\\\\\f537\\\; }\\n\\n.fa-level-down-alt:before {\\n content: \\\\\\\f3be\\\; }\\n\\n.fa-level-up-alt:before {\\n content: \\\\\\\f3bf\\\; }\\n\\n.fa-life-ring:before {\\n content: \\\\\\\f1cd\\\; }\\n\\n.fa-lightbulb:before {\\n content: \\\\\\\f0eb\\\; }\\n\\n.fa-line:before {\\n content: \\\\\\\f3c0\\\; }\\n\\n.fa-link:before {\\n content: \\\\\\\f0c1\\\; }\\n\\n.fa-linkedin:before {\\n content: \\\\\\\f08c\\\; }\\n\\n.fa-linkedin-in:before {\\n content: \\\\\\\f0e1\\\; }\\n\\n.fa-linode:before {\\n content: \\\\\\\f2b8\\\; }\\n\\n.fa-linux:before {\\n content: \\\\\\\f17c\\\; }\\n\\n.fa-lira-sign:before {\\n content: \\\\\\\f195\\\; }\\n\\n.fa-list:before {\\n content: \\\\\\\f03a\\\; }\\n\\n.fa-list-alt:before {\\n content: \\\\\\\f022\\\; }\\n\\n.fa-list-ol:before {\\n content: \\\\\\\f0cb\\\; }\\n\\n.fa-list-ul:before {\\n content: \\\\\\\f0ca\\\; }\\n\\n.fa-location-arrow:before {\\n content: \\\\\\\f124\\\; }\\n\\n.fa-lock:before {\\n content: \\\\\\\f023\\\; }\\n\\n.fa-lock-open:before {\\n content: \\\\\\\f3c1\\\; }\\n\\n.fa-long-arrow-alt-down:before {\\n content: \\\\\\\f309\\\; }\\n\\n.fa-long-arrow-alt-left:before {\\n content: \\\\\\\f30a\\\; }\\n\\n.fa-long-arrow-alt-right:before {\\n content: \\\\\\\f30b\\\; }\\n\\n.fa-long-arrow-alt-up:before {\\n content: \\\\\\\f30c\\\; }\\n\\n.fa-low-vision:before {\\n content: \\\\\\\f2a8\\\; }\\n\\n.fa-luggage-cart:before {\\n content: \\\\\\\f59d\\\; }\\n\\n.fa-lyft:before {\\n content: \\\\\\\f3c3\\\; }\\n\\n.fa-magento:before {\\n content: \\\\\\\f3c4\\\; }\\n\\n.fa-magic:before {\\n content: \\\\\\\f0d0\\\; }\\n\\n.fa-magnet:before {\\n content: \\\\\\\f076\\\; }\\n\\n.fa-mail-bulk:before {\\n content: \\\\\\\f674\\\; }\\n\\n.fa-mailchimp:before {\\n content: \\\\\\\f59e\\\; }\\n\\n.fa-male:before {\\n content: \\\\\\\f183\\\; }\\n\\n.fa-mandalorian:before {\\n content: \\\\\\\f50f\\\; }\\n\\n.fa-map:before {\\n content: \\\\\\\f279\\\; }\\n\\n.fa-map-marked:before {\\n content: \\\\\\\f59f\\\; }\\n\\n.fa-map-marked-alt:before {\\n content: \\\\\\\f5a0\\\; }\\n\\n.fa-map-marker:before {\\n content: \\\\\\\f041\\\; }\\n\\n.fa-map-marker-alt:before {\\n content: \\\\\\\f3c5\\\; }\\n\\n.fa-map-pin:before {\\n content: \\\\\\\f276\\\; }\\n\\n.fa-map-signs:before {\\n content: \\\\\\\f277\\\; }\\n\\n.fa-markdown:before {\\n content: \\\\\\\f60f\\\; }\\n\\n.fa-marker:before {\\n content: \\\\\\\f5a1\\\; }\\n\\n.fa-mars:before {\\n content: \\\\\\\f222\\\; }\\n\\n.fa-mars-double:before {\\n content: \\\\\\\f227\\\; }\\n\\n.fa-mars-stroke:before {\\n content: \\\\\\\f229\\\; }\\n\\n.fa-mars-stroke-h:before {\\n content: \\\\\\\f22b\\\; }\\n\\n.fa-mars-stroke-v:before {\\n content: \\\\\\\f22a\\\; }\\n\\n.fa-mask:before {\\n content: \\\\\\\f6fa\\\; }\\n\\n.fa-mastodon:before {\\n content: \\\\\\\f4f6\\\; }\\n\\n.fa-maxcdn:before {\\n content: \\\\\\\f136\\\; }\\n\\n.fa-medal:before {\\n content: \\\\\\\f5a2\\\; }\\n\\n.fa-medapps:before {\\n content: \\\\\\\f3c6\\\; }\\n\\n.fa-medium:before {\\n content: \\\\\\\f23a\\\; }\\n\\n.fa-medium-m:before {\\n content: \\\\\\\f3c7\\\; }\\n\\n.fa-medkit:before {\\n content: \\\\\\\f0fa\\\; }\\n\\n.fa-medrt:before {\\n content: \\\\\\\f3c8\\\; }\\n\\n.fa-meetup:before {\\n content: \\\\\\\f2e0\\\; }\\n\\n.fa-megaport:before {\\n content: \\\\\\\f5a3\\\; }\\n\\n.fa-meh:before {\\n content: \\\\\\\f11a\\\; }\\n\\n.fa-meh-blank:before {\\n content: \\\\\\\f5a4\\\; }\\n\\n.fa-meh-rolling-eyes:before {\\n content: \\\\\\\f5a5\\\; }\\n\\n.fa-memory:before {\\n content: \\\\\\\f538\\\; }\\n\\n.fa-mendeley:before {\\n content: \\\\\\\f7b3\\\; }\\n\\n.fa-menorah:before {\\n content: \\\\\\\f676\\\; }\\n\\n.fa-mercury:before {\\n content: \\\\\\\f223\\\; }\\n\\n.fa-meteor:before {\\n content: \\\\\\\f753\\\; }\\n\\n.fa-microchip:before {\\n content: \\\\\\\f2db\\\; }\\n\\n.fa-microphone:before {\\n content: \\\\\\\f130\\\; }\\n\\n.fa-microphone-alt:before {\\n content: \\\\\\\f3c9\\\; }\\n\\n.fa-microphone-alt-slash:before {\\n content: \\\\\\\f539\\\; }\\n\\n.fa-microphone-slash:before {\\n content: \\\\\\\f131\\\; }\\n\\n.fa-microscope:before {\\n content: \\\\\\\f610\\\; }\\n\\n.fa-microsoft:before {\\n content: \\\\\\\f3ca\\\; }\\n\\n.fa-minus:before {\\n content: \\\\\\\f068\\\; }\\n\\n.fa-minus-circle:before {\\n content: \\\\\\\f056\\\; }\\n\\n.fa-minus-square:before {\\n content: \\\\\\\f146\\\; }\\n\\n.fa-mitten:before {\\n content: \\\\\\\f7b5\\\; }\\n\\n.fa-mix:before {\\n content: \\\\\\\f3cb\\\; }\\n\\n.fa-mixcloud:before {\\n content: \\\\\\\f289\\\; }\\n\\n.fa-mizuni:before {\\n content: \\\\\\\f3cc\\\; }\\n\\n.fa-mobile:before {\\n content: \\\\\\\f10b\\\; }\\n\\n.fa-mobile-alt:before {\\n content: \\\\\\\f3cd\\\; }\\n\\n.fa-modx:before {\\n content: \\\\\\\f285\\\; }\\n\\n.fa-monero:before {\\n content: \\\\\\\f3d0\\\; }\\n\\n.fa-money-bill:before {\\n content: \\\\\\\f0d6\\\; }\\n\\n.fa-money-bill-alt:before {\\n content: \\\\\\\f3d1\\\; }\\n\\n.fa-money-bill-wave:before {\\n content: \\\\\\\f53a\\\; }\\n\\n.fa-money-bill-wave-alt:before {\\n content: \\\\\\\f53b\\\; }\\n\\n.fa-money-check:before {\\n content: \\\\\\\f53c\\\; }\\n\\n.fa-money-check-alt:before {\\n content: \\\\\\\f53d\\\; }\\n\\n.fa-monument:before {\\n content: \\\\\\\f5a6\\\; }\\n\\n.fa-moon:before {\\n content: \\\\\\\f186\\\; }\\n\\n.fa-mortar-pestle:before {\\n content: \\\\\\\f5a7\\\; }\\n\\n.fa-mosque:before {\\n content: \\\\\\\f678\\\; }\\n\\n.fa-motorcycle:before {\\n content: \\\\\\\f21c\\\; }\\n\\n.fa-mountain:before {\\n content: \\\\\\\f6fc\\\; }\\n\\n.fa-mouse-pointer:before {\\n content: \\\\\\\f245\\\; }\\n\\n.fa-mug-hot:before {\\n content: \\\\\\\f7b6\\\; }\\n\\n.fa-music:before {\\n content: \\\\\\\f001\\\; }\\n\\n.fa-napster:before {\\n content: \\\\\\\f3d2\\\; }\\n\\n.fa-neos:before {\\n content: \\\\\\\f612\\\; }\\n\\n.fa-network-wired:before {\\n content: \\\\\\\f6ff\\\; }\\n\\n.fa-neuter:before {\\n content: \\\\\\\f22c\\\; }\\n\\n.fa-newspaper:before {\\n content: \\\\\\\f1ea\\\; }\\n\\n.fa-nimblr:before {\\n content: \\\\\\\f5a8\\\; }\\n\\n.fa-nintendo-switch:before {\\n content: \\\\\\\f418\\\; }\\n\\n.fa-node:before {\\n content: \\\\\\\f419\\\; }\\n\\n.fa-node-js:before {\\n content: \\\\\\\f3d3\\\; }\\n\\n.fa-not-equal:before {\\n content: \\\\\\\f53e\\\; }\\n\\n.fa-notes-medical:before {\\n content: \\\\\\\f481\\\; }\\n\\n.fa-npm:before {\\n content: \\\\\\\f3d4\\\; }\\n\\n.fa-ns8:before {\\n content: \\\\\\\f3d5\\\; }\\n\\n.fa-nutritionix:before {\\n content: \\\\\\\f3d6\\\; }\\n\\n.fa-object-group:before {\\n content: \\\\\\\f247\\\; }\\n\\n.fa-object-ungroup:before {\\n content: \\\\\\\f248\\\; }\\n\\n.fa-odnoklassniki:before {\\n content: \\\\\\\f263\\\; }\\n\\n.fa-odnoklassniki-square:before {\\n content: \\\\\\\f264\\\; }\\n\\n.fa-oil-can:before {\\n content: \\\\\\\f613\\\; }\\n\\n.fa-old-republic:before {\\n content: \\\\\\\f510\\\; }\\n\\n.fa-om:before {\\n content: \\\\\\\f679\\\; }\\n\\n.fa-opencart:before {\\n content: \\\\\\\f23d\\\; }\\n\\n.fa-openid:before {\\n content: \\\\\\\f19b\\\; }\\n\\n.fa-opera:before {\\n content: \\\\\\\f26a\\\; }\\n\\n.fa-optin-monster:before {\\n content: \\\\\\\f23c\\\; }\\n\\n.fa-osi:before {\\n content: \\\\\\\f41a\\\; }\\n\\n.fa-otter:before {\\n content: \\\\\\\f700\\\; }\\n\\n.fa-outdent:before {\\n content: \\\\\\\f03b\\\; }\\n\\n.fa-page4:before {\\n content: \\\\\\\f3d7\\\; }\\n\\n.fa-pagelines:before {\\n content: \\\\\\\f18c\\\; }\\n\\n.fa-pager:before {\\n content: \\\\\\\f815\\\; }\\n\\n.fa-paint-brush:before {\\n content: \\\\\\\f1fc\\\; }\\n\\n.fa-paint-roller:before {\\n content: \\\\\\\f5aa\\\; }\\n\\n.fa-palette:before {\\n content: \\\\\\\f53f\\\; }\\n\\n.fa-palfed:before {\\n content: \\\\\\\f3d8\\\; }\\n\\n.fa-pallet:before {\\n content: \\\\\\\f482\\\; }\\n\\n.fa-paper-plane:before {\\n content: \\\\\\\f1d8\\\; }\\n\\n.fa-paperclip:before {\\n content: \\\\\\\f0c6\\\; }\\n\\n.fa-parachute-box:before {\\n content: \\\\\\\f4cd\\\; }\\n\\n.fa-paragraph:before {\\n content: \\\\\\\f1dd\\\; }\\n\\n.fa-parking:before {\\n content: \\\\\\\f540\\\; }\\n\\n.fa-passport:before {\\n content: \\\\\\\f5ab\\\; }\\n\\n.fa-pastafarianism:before {\\n content: \\\\\\\f67b\\\; }\\n\\n.fa-paste:before {\\n content: \\\\\\\f0ea\\\; }\\n\\n.fa-patreon:before {\\n content: \\\\\\\f3d9\\\; }\\n\\n.fa-pause:before {\\n content: \\\\\\\f04c\\\; }\\n\\n.fa-pause-circle:before {\\n content: \\\\\\\f28b\\\; }\\n\\n.fa-paw:before {\\n content: \\\\\\\f1b0\\\; }\\n\\n.fa-paypal:before {\\n content: \\\\\\\f1ed\\\; }\\n\\n.fa-peace:before {\\n content: \\\\\\\f67c\\\; }\\n\\n.fa-pen:before {\\n content: \\\\\\\f304\\\; }\\n\\n.fa-pen-alt:before {\\n content: \\\\\\\f305\\\; }\\n\\n.fa-pen-fancy:before {\\n content: \\\\\\\f5ac\\\; }\\n\\n.fa-pen-nib:before {\\n content: \\\\\\\f5ad\\\; }\\n\\n.fa-pen-square:before {\\n content: \\\\\\\f14b\\\; }\\n\\n.fa-pencil-alt:before {\\n content: \\\\\\\f303\\\; }\\n\\n.fa-pencil-ruler:before {\\n content: \\\\\\\f5ae\\\; }\\n\\n.fa-penny-arcade:before {\\n content: \\\\\\\f704\\\; }\\n\\n.fa-people-carry:before {\\n content: \\\\\\\f4ce\\\; }\\n\\n.fa-pepper-hot:before {\\n content: \\\\\\\f816\\\; }\\n\\n.fa-percent:before {\\n content: \\\\\\\f295\\\; }\\n\\n.fa-percentage:before {\\n content: \\\\\\\f541\\\; }\\n\\n.fa-periscope:before {\\n content: \\\\\\\f3da\\\; }\\n\\n.fa-person-booth:before {\\n content: \\\\\\\f756\\\; }\\n\\n.fa-phabricator:before {\\n content: \\\\\\\f3db\\\; }\\n\\n.fa-phoenix-framework:before {\\n content: \\\\\\\f3dc\\\; }\\n\\n.fa-phoenix-squadron:before {\\n content: \\\\\\\f511\\\; }\\n\\n.fa-phone:before {\\n content: \\\\\\\f095\\\; }\\n\\n.fa-phone-slash:before {\\n content: \\\\\\\f3dd\\\; }\\n\\n.fa-phone-square:before {\\n content: \\\\\\\f098\\\; }\\n\\n.fa-phone-volume:before {\\n content: \\\\\\\f2a0\\\; }\\n\\n.fa-php:before {\\n content: \\\\\\\f457\\\; }\\n\\n.fa-pied-piper:before {\\n content: \\\\\\\f2ae\\\; }\\n\\n.fa-pied-piper-alt:before {\\n content: \\\\\\\f1a8\\\; }\\n\\n.fa-pied-piper-hat:before {\\n content: \\\\\\\f4e5\\\; }\\n\\n.fa-pied-piper-pp:before {\\n content: \\\\\\\f1a7\\\; }\\n\\n.fa-piggy-bank:before {\\n content: \\\\\\\f4d3\\\; }\\n\\n.fa-pills:before {\\n content: \\\\\\\f484\\\; }\\n\\n.fa-pinterest:before {\\n content: \\\\\\\f0d2\\\; }\\n\\n.fa-pinterest-p:before {\\n content: \\\\\\\f231\\\; }\\n\\n.fa-pinterest-square:before {\\n content: \\\\\\\f0d3\\\; }\\n\\n.fa-pizza-slice:before {\\n content: \\\\\\\f818\\\; }\\n\\n.fa-place-of-worship:before {\\n content: \\\\\\\f67f\\\; }\\n\\n.fa-plane:before {\\n content: \\\\\\\f072\\\; }\\n\\n.fa-plane-arrival:before {\\n content: \\\\\\\f5af\\\; }\\n\\n.fa-plane-departure:before {\\n content: \\\\\\\f5b0\\\; }\\n\\n.fa-play:before {\\n content: \\\\\\\f04b\\\; }\\n\\n.fa-play-circle:before {\\n content: \\\\\\\f144\\\; }\\n\\n.fa-playstation:before {\\n content: \\\\\\\f3df\\\; }\\n\\n.fa-plug:before {\\n content: \\\\\\\f1e6\\\; }\\n\\n.fa-plus:before {\\n content: \\\\\\\f067\\\; }\\n\\n.fa-plus-circle:before {\\n content: \\\\\\\f055\\\; }\\n\\n.fa-plus-square:before {\\n content: \\\\\\\f0fe\\\; }\\n\\n.fa-podcast:before {\\n content: \\\\\\\f2ce\\\; }\\n\\n.fa-poll:before {\\n content: \\\\\\\f681\\\; }\\n\\n.fa-poll-h:before {\\n content: \\\\\\\f682\\\; }\\n\\n.fa-poo:before {\\n content: \\\\\\\f2fe\\\; }\\n\\n.fa-poo-storm:before {\\n content: \\\\\\\f75a\\\; }\\n\\n.fa-poop:before {\\n content: \\\\\\\f619\\\; }\\n\\n.fa-portrait:before {\\n content: \\\\\\\f3e0\\\; }\\n\\n.fa-pound-sign:before {\\n content: \\\\\\\f154\\\; }\\n\\n.fa-power-off:before {\\n content: \\\\\\\f011\\\; }\\n\\n.fa-pray:before {\\n content: \\\\\\\f683\\\; }\\n\\n.fa-praying-hands:before {\\n content: \\\\\\\f684\\\; }\\n\\n.fa-prescription:before {\\n content: \\\\\\\f5b1\\\; }\\n\\n.fa-prescription-bottle:before {\\n content: \\\\\\\f485\\\; }\\n\\n.fa-prescription-bottle-alt:before {\\n content: \\\\\\\f486\\\; }\\n\\n.fa-print:before {\\n content: \\\\\\\f02f\\\; }\\n\\n.fa-procedures:before {\\n content: \\\\\\\f487\\\; }\\n\\n.fa-product-hunt:before {\\n content: \\\\\\\f288\\\; }\\n\\n.fa-project-diagram:before {\\n content: \\\\\\\f542\\\; }\\n\\n.fa-pushed:before {\\n content: \\\\\\\f3e1\\\; }\\n\\n.fa-puzzle-piece:before {\\n content: \\\\\\\f12e\\\; }\\n\\n.fa-python:before {\\n content: \\\\\\\f3e2\\\; }\\n\\n.fa-qq:before {\\n content: \\\\\\\f1d6\\\; }\\n\\n.fa-qrcode:before {\\n content: \\\\\\\f029\\\; }\\n\\n.fa-question:before {\\n content: \\\\\\\f128\\\; }\\n\\n.fa-question-circle:before {\\n content: \\\\\\\f059\\\; }\\n\\n.fa-quidditch:before {\\n content: \\\\\\\f458\\\; }\\n\\n.fa-quinscape:before {\\n content: \\\\\\\f459\\\; }\\n\\n.fa-quora:before {\\n content: \\\\\\\f2c4\\\; }\\n\\n.fa-quote-left:before {\\n content: \\\\\\\f10d\\\; }\\n\\n.fa-quote-right:before {\\n content: \\\\\\\f10e\\\; }\\n\\n.fa-quran:before {\\n content: \\\\\\\f687\\\; }\\n\\n.fa-r-project:before {\\n content: \\\\\\\f4f7\\\; }\\n\\n.fa-radiation:before {\\n content: \\\\\\\f7b9\\\; }\\n\\n.fa-radiation-alt:before {\\n content: \\\\\\\f7ba\\\; }\\n\\n.fa-rainbow:before {\\n content: \\\\\\\f75b\\\; }\\n\\n.fa-random:before {\\n content: \\\\\\\f074\\\; }\\n\\n.fa-raspberry-pi:before {\\n content: \\\\\\\f7bb\\\; }\\n\\n.fa-ravelry:before {\\n content: \\\\\\\f2d9\\\; }\\n\\n.fa-react:before {\\n content: \\\\\\\f41b\\\; }\\n\\n.fa-reacteurope:before {\\n content: \\\\\\\f75d\\\; }\\n\\n.fa-readme:before {\\n content: \\\\\\\f4d5\\\; }\\n\\n.fa-rebel:before {\\n content: \\\\\\\f1d0\\\; }\\n\\n.fa-receipt:before {\\n content: \\\\\\\f543\\\; }\\n\\n.fa-recycle:before {\\n content: \\\\\\\f1b8\\\; }\\n\\n.fa-red-river:before {\\n content: \\\\\\\f3e3\\\; }\\n\\n.fa-reddit:before {\\n content: \\\\\\\f1a1\\\; }\\n\\n.fa-reddit-alien:before {\\n content: \\\\\\\f281\\\; }\\n\\n.fa-reddit-square:before {\\n content: \\\\\\\f1a2\\\; }\\n\\n.fa-redhat:before {\\n content: \\\\\\\f7bc\\\; }\\n\\n.fa-redo:before {\\n content: \\\\\\\f01e\\\; }\\n\\n.fa-redo-alt:before {\\n content: \\\\\\\f2f9\\\; }\\n\\n.fa-registered:before {\\n content: \\\\\\\f25d\\\; }\\n\\n.fa-renren:before {\\n content: \\\\\\\f18b\\\; }\\n\\n.fa-reply:before {\\n content: \\\\\\\f3e5\\\; }\\n\\n.fa-reply-all:before {\\n content: \\\\\\\f122\\\; }\\n\\n.fa-replyd:before {\\n content: \\\\\\\f3e6\\\; }\\n\\n.fa-republican:before {\\n content: \\\\\\\f75e\\\; }\\n\\n.fa-researchgate:before {\\n content: \\\\\\\f4f8\\\; }\\n\\n.fa-resolving:before {\\n content: \\\\\\\f3e7\\\; }\\n\\n.fa-restroom:before {\\n content: \\\\\\\f7bd\\\; }\\n\\n.fa-retweet:before {\\n content: \\\\\\\f079\\\; }\\n\\n.fa-rev:before {\\n content: \\\\\\\f5b2\\\; }\\n\\n.fa-ribbon:before {\\n content: \\\\\\\f4d6\\\; }\\n\\n.fa-ring:before {\\n content: \\\\\\\f70b\\\; }\\n\\n.fa-road:before {\\n content: \\\\\\\f018\\\; }\\n\\n.fa-robot:before {\\n content: \\\\\\\f544\\\; }\\n\\n.fa-rocket:before {\\n content: \\\\\\\f135\\\; }\\n\\n.fa-rocketchat:before {\\n content: \\\\\\\f3e8\\\; }\\n\\n.fa-rockrms:before {\\n content: \\\\\\\f3e9\\\; }\\n\\n.fa-route:before {\\n content: \\\\\\\f4d7\\\; }\\n\\n.fa-rss:before {\\n content: \\\\\\\f09e\\\; }\\n\\n.fa-rss-square:before {\\n content: \\\\\\\f143\\\; }\\n\\n.fa-ruble-sign:before {\\n content: \\\\\\\f158\\\; }\\n\\n.fa-ruler:before {\\n content: \\\\\\\f545\\\; }\\n\\n.fa-ruler-combined:before {\\n content: \\\\\\\f546\\\; }\\n\\n.fa-ruler-horizontal:before {\\n content: \\\\\\\f547\\\; }\\n\\n.fa-ruler-vertical:before {\\n content: \\\\\\\f548\\\; }\\n\\n.fa-running:before {\\n content: \\\\\\\f70c\\\; }\\n\\n.fa-rupee-sign:before {\\n content: \\\\\\\f156\\\; }\\n\\n.fa-sad-cry:before {\\n content: \\\\\\\f5b3\\\; }\\n\\n.fa-sad-tear:before {\\n content: \\\\\\\f5b4\\\; }\\n\\n.fa-safari:before {\\n content: \\\\\\\f267\\\; }\\n\\n.fa-salesforce:before {\\n content: \\\\\\\f83b\\\; }\\n\\n.fa-sass:before {\\n content: \\\\\\\f41e\\\; }\\n\\n.fa-satellite:before {\\n content: \\\\\\\f7bf\\\; }\\n\\n.fa-satellite-dish:before {\\n content: \\\\\\\f7c0\\\; }\\n\\n.fa-save:before {\\n content: \\\\\\\f0c7\\\; }\\n\\n.fa-schlix:before {\\n content: \\\\\\\f3ea\\\; }\\n\\n.fa-school:before {\\n content: \\\\\\\f549\\\; }\\n\\n.fa-screwdriver:before {\\n content: \\\\\\\f54a\\\; }\\n\\n.fa-scribd:before {\\n content: \\\\\\\f28a\\\; }\\n\\n.fa-scroll:before {\\n content: \\\\\\\f70e\\\; }\\n\\n.fa-sd-card:before {\\n content: \\\\\\\f7c2\\\; }\\n\\n.fa-search:before {\\n content: \\\\\\\f002\\\; }\\n\\n.fa-search-dollar:before {\\n content: \\\\\\\f688\\\; }\\n\\n.fa-search-location:before {\\n content: \\\\\\\f689\\\; }\\n\\n.fa-search-minus:before {\\n content: \\\\\\\f010\\\; }\\n\\n.fa-search-plus:before {\\n content: \\\\\\\f00e\\\; }\\n\\n.fa-searchengin:before {\\n content: \\\\\\\f3eb\\\; }\\n\\n.fa-seedling:before {\\n content: \\\\\\\f4d8\\\; }\\n\\n.fa-sellcast:before {\\n content: \\\\\\\f2da\\\; }\\n\\n.fa-sellsy:before {\\n content: \\\\\\\f213\\\; }\\n\\n.fa-server:before {\\n content: \\\\\\\f233\\\; }\\n\\n.fa-servicestack:before {\\n content: \\\\\\\f3ec\\\; }\\n\\n.fa-shapes:before {\\n content: \\\\\\\f61f\\\; }\\n\\n.fa-share:before {\\n content: \\\\\\\f064\\\; }\\n\\n.fa-share-alt:before {\\n content: \\\\\\\f1e0\\\; }\\n\\n.fa-share-alt-square:before {\\n content: \\\\\\\f1e1\\\; }\\n\\n.fa-share-square:before {\\n content: \\\\\\\f14d\\\; }\\n\\n.fa-shekel-sign:before {\\n content: \\\\\\\f20b\\\; }\\n\\n.fa-shield-alt:before {\\n content: \\\\\\\f3ed\\\; }\\n\\n.fa-ship:before {\\n content: \\\\\\\f21a\\\; }\\n\\n.fa-shipping-fast:before {\\n content: \\\\\\\f48b\\\; }\\n\\n.fa-shirtsinbulk:before {\\n content: \\\\\\\f214\\\; }\\n\\n.fa-shoe-prints:before {\\n content: \\\\\\\f54b\\\; }\\n\\n.fa-shopping-bag:before {\\n content: \\\\\\\f290\\\; }\\n\\n.fa-shopping-basket:before {\\n content: \\\\\\\f291\\\; }\\n\\n.fa-shopping-cart:before {\\n content: \\\\\\\f07a\\\; }\\n\\n.fa-shopware:before {\\n content: \\\\\\\f5b5\\\; }\\n\\n.fa-shower:before {\\n content: \\\\\\\f2cc\\\; }\\n\\n.fa-shuttle-van:before {\\n content: \\\\\\\f5b6\\\; }\\n\\n.fa-sign:before {\\n content: \\\\\\\f4d9\\\; }\\n\\n.fa-sign-in-alt:before {\\n content: \\\\\\\f2f6\\\; }\\n\\n.fa-sign-language:before {\\n content: \\\\\\\f2a7\\\; }\\n\\n.fa-sign-out-alt:before {\\n content: \\\\\\\f2f5\\\; }\\n\\n.fa-signal:before {\\n content: \\\\\\\f012\\\; }\\n\\n.fa-signature:before {\\n content: \\\\\\\f5b7\\\; }\\n\\n.fa-sim-card:before {\\n content: \\\\\\\f7c4\\\; }\\n\\n.fa-simplybuilt:before {\\n content: \\\\\\\f215\\\; }\\n\\n.fa-sistrix:before {\\n content: \\\\\\\f3ee\\\; }\\n\\n.fa-sitemap:before {\\n content: \\\\\\\f0e8\\\; }\\n\\n.fa-sith:before {\\n content: \\\\\\\f512\\\; }\\n\\n.fa-skating:before {\\n content: \\\\\\\f7c5\\\; }\\n\\n.fa-sketch:before {\\n content: \\\\\\\f7c6\\\; }\\n\\n.fa-skiing:before {\\n content: \\\\\\\f7c9\\\; }\\n\\n.fa-skiing-nordic:before {\\n content: \\\\\\\f7ca\\\; }\\n\\n.fa-skull:before {\\n content: \\\\\\\f54c\\\; }\\n\\n.fa-skull-crossbones:before {\\n content: \\\\\\\f714\\\; }\\n\\n.fa-skyatlas:before {\\n content: \\\\\\\f216\\\; }\\n\\n.fa-skype:before {\\n content: \\\\\\\f17e\\\; }\\n\\n.fa-slack:before {\\n content: \\\\\\\f198\\\; }\\n\\n.fa-slack-hash:before {\\n content: \\\\\\\f3ef\\\; }\\n\\n.fa-slash:before {\\n content: \\\\\\\f715\\\; }\\n\\n.fa-sleigh:before {\\n content: \\\\\\\f7cc\\\; }\\n\\n.fa-sliders-h:before {\\n content: \\\\\\\f1de\\\; }\\n\\n.fa-slideshare:before {\\n content: \\\\\\\f1e7\\\; }\\n\\n.fa-smile:before {\\n content: \\\\\\\f118\\\; }\\n\\n.fa-smile-beam:before {\\n content: \\\\\\\f5b8\\\; }\\n\\n.fa-smile-wink:before {\\n content: \\\\\\\f4da\\\; }\\n\\n.fa-smog:before {\\n content: \\\\\\\f75f\\\; }\\n\\n.fa-smoking:before {\\n content: \\\\\\\f48d\\\; }\\n\\n.fa-smoking-ban:before {\\n content: \\\\\\\f54d\\\; }\\n\\n.fa-sms:before {\\n content: \\\\\\\f7cd\\\; }\\n\\n.fa-snapchat:before {\\n content: \\\\\\\f2ab\\\; }\\n\\n.fa-snapchat-ghost:before {\\n content: \\\\\\\f2ac\\\; }\\n\\n.fa-snapchat-square:before {\\n content: \\\\\\\f2ad\\\; }\\n\\n.fa-snowboarding:before {\\n content: \\\\\\\f7ce\\\; }\\n\\n.fa-snowflake:before {\\n content: \\\\\\\f2dc\\\; }\\n\\n.fa-snowman:before {\\n content: \\\\\\\f7d0\\\; }\\n\\n.fa-snowplow:before {\\n content: \\\\\\\f7d2\\\; }\\n\\n.fa-socks:before {\\n content: \\\\\\\f696\\\; }\\n\\n.fa-solar-panel:before {\\n content: \\\\\\\f5ba\\\; }\\n\\n.fa-sort:before {\\n content: \\\\\\\f0dc\\\; }\\n\\n.fa-sort-alpha-down:before {\\n content: \\\\\\\f15d\\\; }\\n\\n.fa-sort-alpha-up:before {\\n content: \\\\\\\f15e\\\; }\\n\\n.fa-sort-amount-down:before {\\n content: \\\\\\\f160\\\; }\\n\\n.fa-sort-amount-up:before {\\n content: \\\\\\\f161\\\; }\\n\\n.fa-sort-down:before {\\n content: \\\\\\\f0dd\\\; }\\n\\n.fa-sort-numeric-down:before {\\n content: \\\\\\\f162\\\; }\\n\\n.fa-sort-numeric-up:before {\\n content: \\\\\\\f163\\\; }\\n\\n.fa-sort-up:before {\\n content: \\\\\\\f0de\\\; }\\n\\n.fa-soundcloud:before {\\n content: \\\\\\\f1be\\\; }\\n\\n.fa-sourcetree:before {\\n content: \\\\\\\f7d3\\\; }\\n\\n.fa-spa:before {\\n content: \\\\\\\f5bb\\\; }\\n\\n.fa-space-shuttle:before {\\n content: \\\\\\\f197\\\; }\\n\\n.fa-speakap:before {\\n content: \\\\\\\f3f3\\\; }\\n\\n.fa-speaker-deck:before {\\n content: \\\\\\\f83c\\\; }\\n\\n.fa-spider:before {\\n content: \\\\\\\f717\\\; }\\n\\n.fa-spinner:before {\\n content: \\\\\\\f110\\\; }\\n\\n.fa-splotch:before {\\n content: \\\\\\\f5bc\\\; }\\n\\n.fa-spotify:before {\\n content: \\\\\\\f1bc\\\; }\\n\\n.fa-spray-can:before {\\n content: \\\\\\\f5bd\\\; }\\n\\n.fa-square:before {\\n content: \\\\\\\f0c8\\\; }\\n\\n.fa-square-full:before {\\n content: \\\\\\\f45c\\\; }\\n\\n.fa-square-root-alt:before {\\n content: \\\\\\\f698\\\; }\\n\\n.fa-squarespace:before {\\n content: \\\\\\\f5be\\\; }\\n\\n.fa-stack-exchange:before {\\n content: \\\\\\\f18d\\\; }\\n\\n.fa-stack-overflow:before {\\n content: \\\\\\\f16c\\\; }\\n\\n.fa-stackpath:before {\\n content: \\\\\\\f842\\\; }\\n\\n.fa-stamp:before {\\n content: \\\\\\\f5bf\\\; }\\n\\n.fa-star:before {\\n content: \\\\\\\f005\\\; }\\n\\n.fa-star-and-crescent:before {\\n content: \\\\\\\f699\\\; }\\n\\n.fa-star-half:before {\\n content: \\\\\\\f089\\\; }\\n\\n.fa-star-half-alt:before {\\n content: \\\\\\\f5c0\\\; }\\n\\n.fa-star-of-david:before {\\n content: \\\\\\\f69a\\\; }\\n\\n.fa-star-of-life:before {\\n content: \\\\\\\f621\\\; }\\n\\n.fa-staylinked:before {\\n content: \\\\\\\f3f5\\\; }\\n\\n.fa-steam:before {\\n content: \\\\\\\f1b6\\\; }\\n\\n.fa-steam-square:before {\\n content: \\\\\\\f1b7\\\; }\\n\\n.fa-steam-symbol:before {\\n content: \\\\\\\f3f6\\\; }\\n\\n.fa-step-backward:before {\\n content: \\\\\\\f048\\\; }\\n\\n.fa-step-forward:before {\\n content: \\\\\\\f051\\\; }\\n\\n.fa-stethoscope:before {\\n content: \\\\\\\f0f1\\\; }\\n\\n.fa-sticker-mule:before {\\n content: \\\\\\\f3f7\\\; }\\n\\n.fa-sticky-note:before {\\n content: \\\\\\\f249\\\; }\\n\\n.fa-stop:before {\\n content: \\\\\\\f04d\\\; }\\n\\n.fa-stop-circle:before {\\n content: \\\\\\\f28d\\\; }\\n\\n.fa-stopwatch:before {\\n content: \\\\\\\f2f2\\\; }\\n\\n.fa-store:before {\\n content: \\\\\\\f54e\\\; }\\n\\n.fa-store-alt:before {\\n content: \\\\\\\f54f\\\; }\\n\\n.fa-strava:before {\\n content: \\\\\\\f428\\\; }\\n\\n.fa-stream:before {\\n content: \\\\\\\f550\\\; }\\n\\n.fa-street-view:before {\\n content: \\\\\\\f21d\\\; }\\n\\n.fa-strikethrough:before {\\n content: \\\\\\\f0cc\\\; }\\n\\n.fa-stripe:before {\\n content: \\\\\\\f429\\\; }\\n\\n.fa-stripe-s:before {\\n content: \\\\\\\f42a\\\; }\\n\\n.fa-stroopwafel:before {\\n content: \\\\\\\f551\\\; }\\n\\n.fa-studiovinari:before {\\n content: \\\\\\\f3f8\\\; }\\n\\n.fa-stumbleupon:before {\\n content: \\\\\\\f1a4\\\; }\\n\\n.fa-stumbleupon-circle:before {\\n content: \\\\\\\f1a3\\\; }\\n\\n.fa-subscript:before {\\n content: \\\\\\\f12c\\\; }\\n\\n.fa-subway:before {\\n content: \\\\\\\f239\\\; }\\n\\n.fa-suitcase:before {\\n content: \\\\\\\f0f2\\\; }\\n\\n.fa-suitcase-rolling:before {\\n content: \\\\\\\f5c1\\\; }\\n\\n.fa-sun:before {\\n content: \\\\\\\f185\\\; }\\n\\n.fa-superpowers:before {\\n content: \\\\\\\f2dd\\\; }\\n\\n.fa-superscript:before {\\n content: \\\\\\\f12b\\\; }\\n\\n.fa-supple:before {\\n content: \\\\\\\f3f9\\\; }\\n\\n.fa-surprise:before {\\n content: \\\\\\\f5c2\\\; }\\n\\n.fa-suse:before {\\n content: \\\\\\\f7d6\\\; }\\n\\n.fa-swatchbook:before {\\n content: \\\\\\\f5c3\\\; }\\n\\n.fa-swimmer:before {\\n content: \\\\\\\f5c4\\\; }\\n\\n.fa-swimming-pool:before {\\n content: \\\\\\\f5c5\\\; }\\n\\n.fa-symfony:before {\\n content: \\\\\\\f83d\\\; }\\n\\n.fa-synagogue:before {\\n content: \\\\\\\f69b\\\; }\\n\\n.fa-sync:before {\\n content: \\\\\\\f021\\\; }\\n\\n.fa-sync-alt:before {\\n content: \\\\\\\f2f1\\\; }\\n\\n.fa-syringe:before {\\n content: \\\\\\\f48e\\\; }\\n\\n.fa-table:before {\\n content: \\\\\\\f0ce\\\; }\\n\\n.fa-table-tennis:before {\\n content: \\\\\\\f45d\\\; }\\n\\n.fa-tablet:before {\\n content: \\\\\\\f10a\\\; }\\n\\n.fa-tablet-alt:before {\\n content: \\\\\\\f3fa\\\; }\\n\\n.fa-tablets:before {\\n content: \\\\\\\f490\\\; }\\n\\n.fa-tachometer-alt:before {\\n content: \\\\\\\f3fd\\\; }\\n\\n.fa-tag:before {\\n content: \\\\\\\f02b\\\; }\\n\\n.fa-tags:before {\\n content: \\\\\\\f02c\\\; }\\n\\n.fa-tape:before {\\n content: \\\\\\\f4db\\\; }\\n\\n.fa-tasks:before {\\n content: \\\\\\\f0ae\\\; }\\n\\n.fa-taxi:before {\\n content: \\\\\\\f1ba\\\; }\\n\\n.fa-teamspeak:before {\\n content: \\\\\\\f4f9\\\; }\\n\\n.fa-teeth:before {\\n content: \\\\\\\f62e\\\; }\\n\\n.fa-teeth-open:before {\\n content: \\\\\\\f62f\\\; }\\n\\n.fa-telegram:before {\\n content: \\\\\\\f2c6\\\; }\\n\\n.fa-telegram-plane:before {\\n content: \\\\\\\f3fe\\\; }\\n\\n.fa-temperature-high:before {\\n content: \\\\\\\f769\\\; }\\n\\n.fa-temperature-low:before {\\n content: \\\\\\\f76b\\\; }\\n\\n.fa-tencent-weibo:before {\\n content: \\\\\\\f1d5\\\; }\\n\\n.fa-tenge:before {\\n content: \\\\\\\f7d7\\\; }\\n\\n.fa-terminal:before {\\n content: \\\\\\\f120\\\; }\\n\\n.fa-text-height:before {\\n content: \\\\\\\f034\\\; }\\n\\n.fa-text-width:before {\\n content: \\\\\\\f035\\\; }\\n\\n.fa-th:before {\\n content: \\\\\\\f00a\\\; }\\n\\n.fa-th-large:before {\\n content: \\\\\\\f009\\\; }\\n\\n.fa-th-list:before {\\n content: \\\\\\\f00b\\\; }\\n\\n.fa-the-red-yeti:before {\\n content: \\\\\\\f69d\\\; }\\n\\n.fa-theater-masks:before {\\n content: \\\\\\\f630\\\; }\\n\\n.fa-themeco:before {\\n content: \\\\\\\f5c6\\\; }\\n\\n.fa-themeisle:before {\\n content: \\\\\\\f2b2\\\; }\\n\\n.fa-thermometer:before {\\n content: \\\\\\\f491\\\; }\\n\\n.fa-thermometer-empty:before {\\n content: \\\\\\\f2cb\\\; }\\n\\n.fa-thermometer-full:before {\\n content: \\\\\\\f2c7\\\; }\\n\\n.fa-thermometer-half:before {\\n content: \\\\\\\f2c9\\\; }\\n\\n.fa-thermometer-quarter:before {\\n content: \\\\\\\f2ca\\\; }\\n\\n.fa-thermometer-three-quarters:before {\\n content: \\\\\\\f2c8\\\; }\\n\\n.fa-think-peaks:before {\\n content: \\\\\\\f731\\\; }\\n\\n.fa-thumbs-down:before {\\n content: \\\\\\\f165\\\; }\\n\\n.fa-thumbs-up:before {\\n content: \\\\\\\f164\\\; }\\n\\n.fa-thumbtack:before {\\n content: \\\\\\\f08d\\\; }\\n\\n.fa-ticket-alt:before {\\n content: \\\\\\\f3ff\\\; }\\n\\n.fa-times:before {\\n content: \\\\\\\f00d\\\; }\\n\\n.fa-times-circle:before {\\n content: \\\\\\\f057\\\; }\\n\\n.fa-tint:before {\\n content: \\\\\\\f043\\\; }\\n\\n.fa-tint-slash:before {\\n content: \\\\\\\f5c7\\\; }\\n\\n.fa-tired:before {\\n content: \\\\\\\f5c8\\\; }\\n\\n.fa-toggle-off:before {\\n content: \\\\\\\f204\\\; }\\n\\n.fa-toggle-on:before {\\n content: \\\\\\\f205\\\; }\\n\\n.fa-toilet:before {\\n content: \\\\\\\f7d8\\\; }\\n\\n.fa-toilet-paper:before {\\n content: \\\\\\\f71e\\\; }\\n\\n.fa-toolbox:before {\\n content: \\\\\\\f552\\\; }\\n\\n.fa-tools:before {\\n content: \\\\\\\f7d9\\\; }\\n\\n.fa-tooth:before {\\n content: \\\\\\\f5c9\\\; }\\n\\n.fa-torah:before {\\n content: \\\\\\\f6a0\\\; }\\n\\n.fa-torii-gate:before {\\n content: \\\\\\\f6a1\\\; }\\n\\n.fa-tractor:before {\\n content: \\\\\\\f722\\\; }\\n\\n.fa-trade-federation:before {\\n content: \\\\\\\f513\\\; }\\n\\n.fa-trademark:before {\\n content: \\\\\\\f25c\\\; }\\n\\n.fa-traffic-light:before {\\n content: \\\\\\\f637\\\; }\\n\\n.fa-train:before {\\n content: \\\\\\\f238\\\; }\\n\\n.fa-tram:before {\\n content: \\\\\\\f7da\\\; }\\n\\n.fa-transgender:before {\\n content: \\\\\\\f224\\\; }\\n\\n.fa-transgender-alt:before {\\n content: \\\\\\\f225\\\; }\\n\\n.fa-trash:before {\\n content: \\\\\\\f1f8\\\; }\\n\\n.fa-trash-alt:before {\\n content: \\\\\\\f2ed\\\; }\\n\\n.fa-trash-restore:before {\\n content: \\\\\\\f829\\\; }\\n\\n.fa-trash-restore-alt:before {\\n content: \\\\\\\f82a\\\; }\\n\\n.fa-tree:before {\\n content: \\\\\\\f1bb\\\; }\\n\\n.fa-trello:before {\\n content: \\\\\\\f181\\\; }\\n\\n.fa-tripadvisor:before {\\n content: \\\\\\\f262\\\; }\\n\\n.fa-trophy:before {\\n content: \\\\\\\f091\\\; }\\n\\n.fa-truck:before {\\n content: \\\\\\\f0d1\\\; }\\n\\n.fa-truck-loading:before {\\n content: \\\\\\\f4de\\\; }\\n\\n.fa-truck-monster:before {\\n content: \\\\\\\f63b\\\; }\\n\\n.fa-truck-moving:before {\\n content: \\\\\\\f4df\\\; }\\n\\n.fa-truck-pickup:before {\\n content: \\\\\\\f63c\\\; }\\n\\n.fa-tshirt:before {\\n content: \\\\\\\f553\\\; }\\n\\n.fa-tty:before {\\n content: \\\\\\\f1e4\\\; }\\n\\n.fa-tumblr:before {\\n content: \\\\\\\f173\\\; }\\n\\n.fa-tumblr-square:before {\\n content: \\\\\\\f174\\\; }\\n\\n.fa-tv:before {\\n content: \\\\\\\f26c\\\; }\\n\\n.fa-twitch:before {\\n content: \\\\\\\f1e8\\\; }\\n\\n.fa-twitter:before {\\n content: \\\\\\\f099\\\; }\\n\\n.fa-twitter-square:before {\\n content: \\\\\\\f081\\\; }\\n\\n.fa-typo3:before {\\n content: \\\\\\\f42b\\\; }\\n\\n.fa-uber:before {\\n content: \\\\\\\f402\\\; }\\n\\n.fa-ubuntu:before {\\n content: \\\\\\\f7df\\\; }\\n\\n.fa-uikit:before {\\n content: \\\\\\\f403\\\; }\\n\\n.fa-umbrella:before {\\n content: \\\\\\\f0e9\\\; }\\n\\n.fa-umbrella-beach:before {\\n content: \\\\\\\f5ca\\\; }\\n\\n.fa-underline:before {\\n content: \\\\\\\f0cd\\\; }\\n\\n.fa-undo:before {\\n content: \\\\\\\f0e2\\\; }\\n\\n.fa-undo-alt:before {\\n content: \\\\\\\f2ea\\\; }\\n\\n.fa-uniregistry:before {\\n content: \\\\\\\f404\\\; }\\n\\n.fa-universal-access:before {\\n content: \\\\\\\f29a\\\; }\\n\\n.fa-university:before {\\n content: \\\\\\\f19c\\\; }\\n\\n.fa-unlink:before {\\n content: \\\\\\\f127\\\; }\\n\\n.fa-unlock:before {\\n content: \\\\\\\f09c\\\; }\\n\\n.fa-unlock-alt:before {\\n content: \\\\\\\f13e\\\; }\\n\\n.fa-untappd:before {\\n content: \\\\\\\f405\\\; }\\n\\n.fa-upload:before {\\n content: \\\\\\\f093\\\; }\\n\\n.fa-ups:before {\\n content: \\\\\\\f7e0\\\; }\\n\\n.fa-usb:before {\\n content: \\\\\\\f287\\\; }\\n\\n.fa-user:before {\\n content: \\\\\\\f007\\\; }\\n\\n.fa-user-alt:before {\\n content: \\\\\\\f406\\\; }\\n\\n.fa-user-alt-slash:before {\\n content: \\\\\\\f4fa\\\; }\\n\\n.fa-user-astronaut:before {\\n content: \\\\\\\f4fb\\\; }\\n\\n.fa-user-check:before {\\n content: \\\\\\\f4fc\\\; }\\n\\n.fa-user-circle:before {\\n content: \\\\\\\f2bd\\\; }\\n\\n.fa-user-clock:before {\\n content: \\\\\\\f4fd\\\; }\\n\\n.fa-user-cog:before {\\n content: \\\\\\\f4fe\\\; }\\n\\n.fa-user-edit:before {\\n content: \\\\\\\f4ff\\\; }\\n\\n.fa-user-friends:before {\\n content: \\\\\\\f500\\\; }\\n\\n.fa-user-graduate:before {\\n content: \\\\\\\f501\\\; }\\n\\n.fa-user-injured:before {\\n content: \\\\\\\f728\\\; }\\n\\n.fa-user-lock:before {\\n content: \\\\\\\f502\\\; }\\n\\n.fa-user-md:before {\\n content: \\\\\\\f0f0\\\; }\\n\\n.fa-user-minus:before {\\n content: \\\\\\\f503\\\; }\\n\\n.fa-user-ninja:before {\\n content: \\\\\\\f504\\\; }\\n\\n.fa-user-nurse:before {\\n content: \\\\\\\f82f\\\; }\\n\\n.fa-user-plus:before {\\n content: \\\\\\\f234\\\; }\\n\\n.fa-user-secret:before {\\n content: \\\\\\\f21b\\\; }\\n\\n.fa-user-shield:before {\\n content: \\\\\\\f505\\\; }\\n\\n.fa-user-slash:before {\\n content: \\\\\\\f506\\\; }\\n\\n.fa-user-tag:before {\\n content: \\\\\\\f507\\\; }\\n\\n.fa-user-tie:before {\\n content: \\\\\\\f508\\\; }\\n\\n.fa-user-times:before {\\n content: \\\\\\\f235\\\; }\\n\\n.fa-users:before {\\n content: \\\\\\\f0c0\\\; }\\n\\n.fa-users-cog:before {\\n content: \\\\\\\f509\\\; }\\n\\n.fa-usps:before {\\n content: \\\\\\\f7e1\\\; }\\n\\n.fa-ussunnah:before {\\n content: \\\\\\\f407\\\; }\\n\\n.fa-utensil-spoon:before {\\n content: \\\\\\\f2e5\\\; }\\n\\n.fa-utensils:before {\\n content: \\\\\\\f2e7\\\; }\\n\\n.fa-vaadin:before {\\n content: \\\\\\\f408\\\; }\\n\\n.fa-vector-square:before {\\n content: \\\\\\\f5cb\\\; }\\n\\n.fa-venus:before {\\n content: \\\\\\\f221\\\; }\\n\\n.fa-venus-double:before {\\n content: \\\\\\\f226\\\; }\\n\\n.fa-venus-mars:before {\\n content: \\\\\\\f228\\\; }\\n\\n.fa-viacoin:before {\\n content: \\\\\\\f237\\\; }\\n\\n.fa-viadeo:before {\\n content: \\\\\\\f2a9\\\; }\\n\\n.fa-viadeo-square:before {\\n content: \\\\\\\f2aa\\\; }\\n\\n.fa-vial:before {\\n content: \\\\\\\f492\\\; }\\n\\n.fa-vials:before {\\n content: \\\\\\\f493\\\; }\\n\\n.fa-viber:before {\\n content: \\\\\\\f409\\\; }\\n\\n.fa-video:before {\\n content: \\\\\\\f03d\\\; }\\n\\n.fa-video-slash:before {\\n content: \\\\\\\f4e2\\\; }\\n\\n.fa-vihara:before {\\n content: \\\\\\\f6a7\\\; }\\n\\n.fa-vimeo:before {\\n content: \\\\\\\f40a\\\; }\\n\\n.fa-vimeo-square:before {\\n content: \\\\\\\f194\\\; }\\n\\n.fa-vimeo-v:before {\\n content: \\\\\\\f27d\\\; }\\n\\n.fa-vine:before {\\n content: \\\\\\\f1ca\\\; }\\n\\n.fa-vk:before {\\n content: \\\\\\\f189\\\; }\\n\\n.fa-vnv:before {\\n content: \\\\\\\f40b\\\; }\\n\\n.fa-volleyball-ball:before {\\n content: \\\\\\\f45f\\\; }\\n\\n.fa-volume-down:before {\\n content: \\\\\\\f027\\\; }\\n\\n.fa-volume-mute:before {\\n content: \\\\\\\f6a9\\\; }\\n\\n.fa-volume-off:before {\\n content: \\\\\\\f026\\\; }\\n\\n.fa-volume-up:before {\\n content: \\\\\\\f028\\\; }\\n\\n.fa-vote-yea:before {\\n content: \\\\\\\f772\\\; }\\n\\n.fa-vr-cardboard:before {\\n content: \\\\\\\f729\\\; }\\n\\n.fa-vuejs:before {\\n content: \\\\\\\f41f\\\; }\\n\\n.fa-walking:before {\\n content: \\\\\\\f554\\\; }\\n\\n.fa-wallet:before {\\n content: \\\\\\\f555\\\; }\\n\\n.fa-warehouse:before {\\n content: \\\\\\\f494\\\; }\\n\\n.fa-water:before {\\n content: \\\\\\\f773\\\; }\\n\\n.fa-wave-square:before {\\n content: \\\\\\\f83e\\\; }\\n\\n.fa-waze:before {\\n content: \\\\\\\f83f\\\; }\\n\\n.fa-weebly:before {\\n content: \\\\\\\f5cc\\\; }\\n\\n.fa-weibo:before {\\n content: \\\\\\\f18a\\\; }\\n\\n.fa-weight:before {\\n content: \\\\\\\f496\\\; }\\n\\n.fa-weight-hanging:before {\\n content: \\\\\\\f5cd\\\; }\\n\\n.fa-weixin:before {\\n content: \\\\\\\f1d7\\\; }\\n\\n.fa-whatsapp:before {\\n content: \\\\\\\f232\\\; }\\n\\n.fa-whatsapp-square:before {\\n content: \\\\\\\f40c\\\; }\\n\\n.fa-wheelchair:before {\\n content: \\\\\\\f193\\\; }\\n\\n.fa-whmcs:before {\\n content: \\\\\\\f40d\\\; }\\n\\n.fa-wifi:before {\\n content: \\\\\\\f1eb\\\; }\\n\\n.fa-wikipedia-w:before {\\n content: \\\\\\\f266\\\; }\\n\\n.fa-wind:before {\\n content: \\\\\\\f72e\\\; }\\n\\n.fa-window-close:before {\\n content: \\\\\\\f410\\\; }\\n\\n.fa-window-maximize:before {\\n content: \\\\\\\f2d0\\\; }\\n\\n.fa-window-minimize:before {\\n content: \\\\\\\f2d1\\\; }\\n\\n.fa-window-restore:before {\\n content: \\\\\\\f2d2\\\; }\\n\\n.fa-windows:before {\\n content: \\\\\\\f17a\\\; }\\n\\n.fa-wine-bottle:before {\\n content: \\\\\\\f72f\\\; }\\n\\n.fa-wine-glass:before {\\n content: \\\\\\\f4e3\\\; }\\n\\n.fa-wine-glass-alt:before {\\n content: \\\\\\\f5ce\\\; }\\n\\n.fa-wix:before {\\n content: \\\\\\\f5cf\\\; }\\n\\n.fa-wizards-of-the-coast:before {\\n content: \\\\\\\f730\\\; }\\n\\n.fa-wolf-pack-battalion:before {\\n content: \\\\\\\f514\\\; }\\n\\n.fa-won-sign:before {\\n content: \\\\\\\f159\\\; }\\n\\n.fa-wordpress:before {\\n content: \\\\\\\f19a\\\; }\\n\\n.fa-wordpress-simple:before {\\n content: \\\\\\\f411\\\; }\\n\\n.fa-wpbeginner:before {\\n content: \\\\\\\f297\\\; }\\n\\n.fa-wpexplorer:before {\\n content: \\\\\\\f2de\\\; }\\n\\n.fa-wpforms:before {\\n content: \\\\\\\f298\\\; }\\n\\n.fa-wpressr:before {\\n content: \\\\\\\f3e4\\\; }\\n\\n.fa-wrench:before {\\n content: \\\\\\\f0ad\\\; }\\n\\n.fa-x-ray:before {\\n content: \\\\\\\f497\\\; }\\n\\n.fa-xbox:before {\\n content: \\\\\\\f412\\\; }\\n\\n.fa-xing:before {\\n content: \\\\\\\f168\\\; }\\n\\n.fa-xing-square:before {\\n content: \\\\\\\f169\\\; }\\n\\n.fa-y-combinator:before {\\n content: \\\\\\\f23b\\\; }\\n\\n.fa-yahoo:before {\\n content: \\\\\\\f19e\\\; }\\n\\n.fa-yammer:before {\\n content: \\\\\\\f840\\\; }\\n\\n.fa-yandex:before {\\n content: \\\\\\\f413\\\; }\\n\\n.fa-yandex-international:before {\\n content: \\\\\\\f414\\\; }\\n\\n.fa-yarn:before {\\n content: \\\\\\\f7e3\\\; }\\n\\n.fa-yelp:before {\\n content: \\\\\\\f1e9\\\; }\\n\\n.fa-yen-sign:before {\\n content: \\\\\\\f157\\\; }\\n\\n.fa-yin-yang:before {\\n content: \\\\\\\f6ad\\\; }\\n\\n.fa-yoast:before {\\n content: \\\\\\\f2b1\\\; }\\n\\n.fa-youtube:before {\\n content: \\\\\\\f167\\\; }\\n\\n.fa-youtube-square:before {\\n content: \\\\\\\f431\\\; }\\n\\n.fa-zhihu:before {\\n content: \\\\\\\f63f\\\; }\\n\\n.sr-only {\\n border: 0;\\n clip: rect(0, 0, 0, 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px; }\\n\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\n clip: auto;\\n height: auto;\\n margin: 0;\\n overflow: visible;\\n position: static;\\n width: auto; }\\n\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/plugins/TheDiveO/FontAwesome/styles/tiddlylinks/system\:{\title\:\$:/plugins/TheDiveO/FontAwesome/styles/tiddlylinks/system\,\created\:\20171230212437805\,\modified\:\20180328191223958\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003C$set name\\\cfg\\\ value\u003C\u003Cfa5-cfgpath \\\decorate-syslinks\\\>> >\\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\\n\\n/* system tiddler titles starting with $:/... */\\n.tc-tiddler-body a.tc-tiddlylinkhref^\\\#%24%3A%2F\\\:before,\\n.tc-tiddler-preview-preview a.tc-tiddlylinkhref^\\\#%24%3A%2F\\\:before {\\n \u003C\u003Cfa-plugin-font-solid>>\\n font-size: 80%;\\n content: \\\\f013\\\\202f;\\n display: inline-block;\\n}\\n\\n\u003C/$list>\\n\u003C/$set>\},\$:/plugins/TheDiveO/FontAwesome/ui/ControlPanel/FontAwesome\:{\title\:\$:/plugins/TheDiveO/FontAwesome/ui/ControlPanel/FontAwesome\,\caption\:\Font Awesome\,\created\:\20180328182555066\,\modified\:\20180328190604063\,\tags\:\$:/tags/ControlPanel\,\type\:\text/vnd.tiddlywiki\,\text\:\Customize the Font Awesome 5 plugin.\\n\\n\u003C$checkbox tiddler\u003C\u003Cfa5-cfgpath \\\decorate-syslinks\\\>> field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\ > decorate system links: $:/ControlPanel\u003C/$checkbox>\\n\\n\u003C$checkbox tiddler\u003C\u003Cfa5-cfgpath \\\decorate-extlinks\\\>> field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\ > decorate external links: TiddlyWiki|http://tiddlywiki.com Wikipedia|https://en.wikipedia.org/wiki/TiddlyWiki\u003C/$checkbox>\\n\\n\u003C$checkbox tiddler\u003C\u003Cfa5-cfgpath \\\decorate-extdoclinks\\\>> field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\ > decorate external document links: https://example.org/document.pdf\u003C/$checkbox>\\n\\n\u003C$checkbox tiddler\u003C\u003Cfa5-cfgpath \\\decorate-wk-extlinks\\\>> field\\\text\\\ checked\\\yes\\\ unchecked\\\no\\\ default\\\yes\\\ > decorate external well-known links: http://github.com http://en.wikipedia.org\u003C/$checkbox>\}}}},{title:$:/plugins/TheDiveO/FontAwesome/styles/extlinks,created:20170223100043117,creator:soren,modified:20240522153607536,modifier:soren,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n\u003C$set name\cfg\ value\u003C\u003Cfa5-cfgpath \decorate-extlinks\>> >\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\n\nahref^\http://\:before {\n \u003C\u003Cfa-plugin-font-solid>>\n font-size: 80%;\n content: \\f35d\\202f;\n display: inline-block;\n}\n\nahref^\https://\:before {\n \u003C\u003Cfa-plugin-font-solid>>\n font-size: 80%;\n content: \\f35d\\202f;\n /*content: \\f023\\202f; */\n display: inline-block;\n}\n\n\u003C/$list>\n\u003C/$set>},{title:$:/plugins/TheDiveO/FontAwesome/styles/extlinks/mailto,created:20240522152316285,creator:soren,list-after:$:/plugins/TheDiveO/FontAwesome/styles/extlinks,modified:20240522153012985,modifier:soren,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n\u003C$set name\cfg\ value\u003C\u003Cfa5-cfgpath \decorate-wk-extlinks\>> >\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\n\nahref^\mailto:\:before {\n font-family: Font Awesome 5 Free;\n font-style: normal;\n font-weight: 900; \n font-size: 80%;\n content: \\f0e0\\202f;\n display: inline-block;\n}\n\n\u003C/$list>\n\u003C/$set>},{title:$:/plugins/TheDiveO/FontAwesome/styles/extlinks/randomthoughts,created:20210514004614277,list-after:$:/plugins/TheDiveO/FontAwesome/styles/extlinks,modified:20210514005019052,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n\u003C$set name\cfg\ value\u003C\u003Cfa5-cfgpath \decorate-wk-extlinks\>> >\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\n\nahref^\https://\href*\randomthoughts.sorenbjornstad.com\:before {\n font-size: 90%;\n content: \\f249\\202f;\n}\n\n\u003C/$list>\n\u003C/$set>},{title:$:/plugins/TheDiveO/FontAwesome/styles/extlinks/soren,created:20240522153624618,creator:soren,list-after:$:/plugins/TheDiveO/FontAwesome/styles/extlinks,modified:20240522153726645,modifier:soren,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n\u003C$set name\cfg\ value\u003C\u003Cfa5-cfgpath \decorate-wk-extlinks\>> >\n\u003C$list filter\u003C\u003Cfa5-cfgfilterexpr>> >\n\nahref^\https://sorenbjornstad.com\:before {\n font-family: Font Awesome 5 Free;\n font-style: normal;\n font-weight: 900; \n font-size: 80%;\n content: \\f007\\202f;\n display: inline-block;\n}\nahref^\https://ap.sorenbjornstad.com\:before {\n font-family: Font Awesome 5 Free;\n font-style: normal;\n font-weight: 900; \n font-size: 80%;\n content: \\f007\\202f;\n display: inline-block;\n}\n\n\n\u003C/$list>\n\u003C/$set>},{title:$:/plugins/tiddlywiki/codemirror,name:CodeMirror,description:CodeMirror editor,list:readme usage keyboard license,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/config/EditorTypeMappings/application/javascript\:{\title\:\$:/config/EditorTypeMappings/application/javascript\,\text\:\codemirror\},\$:/config/EditorTypeMappings/application/json\:{\title\:\$:/config/EditorTypeMappings/application/json\,\text\:\codemirror\},\$:/config/EditorTypeMappings/application/x-tiddler-dictionary\:{\title\:\$:/config/EditorTypeMappings/application/x-tiddler-dictionary\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/css\:{\title\:\$:/config/EditorTypeMappings/text/css\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/html\:{\title\:\$:/config/EditorTypeMappings/text/html\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/plain\:{\title\:\$:/config/EditorTypeMappings/text/plain\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/vnd.tiddlywiki\:{\title\:\$:/config/EditorTypeMappings/text/vnd.tiddlywiki\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/x-markdown\:{\title\:\$:/config/EditorTypeMappings/text/x-markdown\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/markdown\:{\title\:\$:/config/EditorTypeMappings/text/markdown\,\text\:\codemirror\},\$:/config/EditorTypeMappings/text/x-tiddlywiki\:{\title\:\$:/config/EditorTypeMappings/text/x-tiddlywiki\,\text\:\codemirror\},\$:/config/codemirror/cursorBlinkRate\:{\title\:\$:/config/codemirror/cursorBlinkRate\,\type\:\integer\,\text\:\530\},\$:/config/codemirror/extraKeysTW\:{\title\:\$:/config/codemirror/extraKeysTW\,\extend\:\extraKeys\,\type\:\json\,\text\:\{\\n\\t\\\Ctrl-Esc\\\: \\\singleSelection\\\,\\n\\t\\\Esc\\\: \\\\\\,\\n\\t\\\Ctrl-S\\\: \\\\\\,\\n\\t\\\Ctrl-U\\\: \\\\\\,\\n\\t\\\Ctrl-T\\\: \\\\\\,\\n\\t\\\Alt-T\\\: \\\transposeChars\\\,\\n\\t\\\Alt-U\\\: \\\undoSelection\\\,\\n\\t\\\Shift-Alt-U\\\: \\\redoSelection\\\,\\n\\t\\\Cmd-U\\\: \\\\\\,\\n\\t\\\Tab\\\: \\\indentAuto()\\\,\\n\\t\\\Enter\\\: \\\newLineAndIndent()\\\\\n}\\n\},\$:/config/codemirror/indentUnit\:{\title\:\$:/config/codemirror/indentUnit\,\type\:\integer\,\text\:\2\},\$:/config/codemirror/indentWithTabs\:{\title\:\$:/config/codemirror/indentWithTabs\,\type\:\bool\,\text\:\true\},\$:/config/codemirror/inputStyle\:{\title\:\$:/config/codemirror/inputStyle\,\type\:\string\,\text\:\textarea\},\$:/config/codemirror/keyMap\:{\title\:\$:/config/codemirror/keyMap\,\type\:\string\,\text\:\default\},\$:/config/codemirror/lineNumbers\:{\title\:\$:/config/codemirror/lineNumbers\,\type\:\bool\,\text\:\false\},\$:/config/codemirror/lineWrapping\:{\title\:\$:/config/codemirror/lineWrapping\,\type\:\bool\,\text\:\true\},\$:/config/codemirror/showCursorWhenSelecting\:{\title\:\$:/config/codemirror/showCursorWhenSelecting\,\type\:\bool\,\text\:\true\},\$:/config/codemirror/smartIndent\:{\title\:\$:/config/codemirror/smartIndent\,\type\:\bool\,\text\:\true\},\$:/config/codemirror/styleActiveLine\:{\title\:\$:/config/codemirror/styleActiveLine\,\type\:\bool\,\text\:\false\},\$:/config/codemirror/tabSize\:{\title\:\$:/config/codemirror/tabSize\,\type\:\integer\,\text\:\2\},\$:/config/codemirror/theme\:{\title\:\$:/config/codemirror/theme\,\type\:\string\,\text\:\tiddlywiki\},\$:/language/codemirror/homeUrl\:{\title\:\$:/language/codemirror/homeUrl\,\text\:\http://codemirror.net\},\$:/language/codemirror/addOnUrl\:{\title\:\$:/language/codemirror/addOnUrl\,\text\:\http://codemirror.net/doc/manual.html#addons\},\$:/language/codemirror/configUrl\:{\title\:\$:/language/codemirror/configUrl\,\text\:\http://codemirror.net/doc/manual.html#config\},\$:/language/codemirror/controlPanel/hint\:{\title\:\$:/language/codemirror/controlPanel/hint\,\text\:\These settings let you customise the behaviour of CodeMirror|$:/plugins/tiddlywiki/codemirror.\},\$:/language/codemirror/controlPanel/keyboard\:{\title\:\$:/language/codemirror/controlPanel/keyboard\,\text\:\Keyboard shortcuts\},\$:/language/codemirror/controlPanel/usage\:{\title\:\$:/language/codemirror/controlPanel/usage\,\text\:\Usage information\},\$:/language/codemirror/cursorBlinkRate/hint\:{\title\:\$:/language/codemirror/cursorBlinkRate/hint\,\text\:\Cursor blink rate\},\$:/language/codemirror/editorFont/hint\:{\title\:\$:/language/codemirror/editorFont/hint\,\text\:\Editor font family\},\$:/language/codemirror/editorFont/info\:{\title\:\$:/language/codemirror/editorFont/info\,\text\:\Set the font family for the ~CodeMirror text-editor\},\$:/language/codemirror/indentUnit/hint\:{\title\:\$:/language/codemirror/indentUnit/hint\,\text\:\How many spaces a block should be indented\},\$:/language/codemirror/indentWithTabs/hint\:{\title\:\$:/language/codemirror/indentWithTabs/hint\,\text\:\Enable indenting with tabs\},\$:/language/codemirror/indentWithTabs/info\:{\title\:\$:/language/codemirror/indentWithTabs/info\,\text\:\Whether, when indenting, the first N*`tabSize` spaces should be replaced by N tabs.\},\$:/language/codemirror/keyMap/hint\:{\title\:\$:/language/codemirror/keyMap/hint\,\text\:\~CodeMirror keymap\},\$:/language/codemirror/keyMap/info\:{\title\:\$:/language/codemirror/keyMap/info\,\text\:\~The Keyboard KeyMap used within the ~CodeMirror text-editor\},\$:/language/codemirror/lineNumbers/hint\:{\title\:\$:/language/codemirror/lineNumbers/hint\,\text\:\Enable line numbers\},\$:/language/codemirror/lineNumbers/info\:{\title\:\$:/language/codemirror/lineNumbers/info\,\text\:\Whether to show line numbers to the left of the editor.\},\$:/language/codemirror/lineWrapping/hint\:{\title\:\$:/language/codemirror/lineWrapping/hint\,\text\:\Enable line wrapping\},\$:/language/codemirror/lineWrapping/info\:{\title\:\$:/language/codemirror/lineWrapping/info\,\text\:\Whether CodeMirror should scroll or wrap for long lines. Defaults to `false` (scroll).\},\$:/language/codemirror/showCursorWhenSelecting/hint\:{\title\:\$:/language/codemirror/showCursorWhenSelecting/hint\,\text\:\Show cursor, when selecting\},\$:/language/codemirror/showCursorWhenSelecting/info\:{\title\:\$:/language/codemirror/showCursorWhenSelecting/info\,\text\:\Whether the cursor should be drawn when a selection is active.\},\$:/language/codemirror/smartIndent/hint\:{\title\:\$:/language/codemirror/smartIndent/hint\,\text\:\Enable smart indent\},\$:/language/codemirror/smartIndent/info\:{\title\:\$:/language/codemirror/smartIndent/info\,\text\:\Whether to use the context-sensitive indentation that the mode provides (or just indent the same as the line before). Defaults to `true`.\},\$:/language/codemirror/styleActiveLine/hint\:{\title\:\$:/language/codemirror/styleActiveLine/hint\,\text\:\Highlight active line\},\$:/language/codemirror/styleActiveLine/info\:{\title\:\$:/language/codemirror/styleActiveLine/info\,\text\:\Whether or not to highlight the active text-editor line\},\$:/language/codemirror/tabSize/hint\:{\title\:\$:/language/codemirror/tabSize/hint\,\text\:\Width of a tab character\},\$:/language/codemirror/theme/hint\:{\title\:\$:/language/codemirror/theme/hint\,\text\:\Select a theme\},\$:/language/codemirror/theme/info\:{\title\:\$:/language/codemirror/theme/info\,\text\:\Choose between ~CodeMirror themes\},\$:/plugins/tiddlywiki/codemirror/edit-codemirror.js\:{\title\:\$:/plugins/tiddlywiki/codemirror/edit-codemirror.js\,\text\:\/*\\\\\\ntitle: $:/plugins/tiddlywiki/codemirror/edit-codemirror.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nEdit-codemirror widget\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar editTextWidgetFactory require(\\\$:/core/modules/editor/factory.js\\\).editTextWidgetFactory,\\n\\tCodeMirrorEngine require(\\\$:/plugins/tiddlywiki/codemirror/engine.js\\\).CodeMirrorEngine;\\n\\nexports\\\edit-codemirror\\\ editTextWidgetFactory(CodeMirrorEngine,CodeMirrorEngine);\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/tiddlywiki/codemirror/engine.js\:{\title\:\$:/plugins/tiddlywiki/codemirror/engine.js\,\text\:\/*\\\\\\ntitle: $:/plugins/tiddlywiki/codemirror/engine.js\\ntype: application/javascript\\nmodule-type: library\\n\\nText editor engine based on a CodeMirror instance\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar CODEMIRROR_OPTIONS \\\$:/config/CodeMirror\\\,\\nHEIGHT_VALUE_TITLE \\\$:/config/TextEditor/EditorHeight/Height\\\,\\nCONFIG_FILTER \\\allshadows+tiddlersprefix$:/config/codemirror/\\\\\n\\t\\n// Install CodeMirror\\nif($tw.browser && !window.CodeMirror) {\\n\\n\\tvar modules $tw.modules.types\\\codemirror\\\;\\n\\tvar req Object.getOwnPropertyNames(modules);\\n\\n\\twindow.CodeMirror require(\\\$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\\\);\\n\\t// Install required CodeMirror plugins\\n\\tif(req) {\\n\\t\\tif($tw.utils.isArray(req)) {\\n\\t\\t\\tfor(var index0; index\u003Creq.length; index++) {\\n\\t\\t\\t\\trequire(reqindex);\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\trequire(req);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction getCmConfig() {\\n\\tvar type,\\n\\t\\ttest,\\n\\t\\tvalue,\\n\\t\\telement,\\n\\t\\textend,\\n\\t\\ttiddler,\\n\\t\\tconfig {},\\n\\t\\tconfigTiddlers $tw.wiki.filterTiddlers(CONFIG_FILTER);\\n\\n\\tif ($tw.utils.isArray(configTiddlers)) {\\n\\t\\tfor (var i0; i\u003CconfigTiddlers.length; i++) {\\n\\t\\t\\ttiddler $tw.wiki.getTiddler(configTiddlersi);\\n\\t\\t\\t\\tif (tiddler) {\\n\\t\\t\\t\\telement configTiddlersi.replace(/\\\\$:\\\\/config\\\\/codemirror\\\\//ig,\\\\\\);\\n\\t\\t\\t\\t\\ttype (tiddler.fields.type) ? tiddler.fields.type.trim().toLocaleLowerCase() : \\\string\\\;\\n\\t\\t\\t\\tswitch (type) {\\n\\t\\t\\t\\t\\tcase \\\bool\\\:\\n\\t\\t\\t\\t\\ttest tiddler.fields.text.trim().toLowerCase();\\n\\t\\t\\t\\t\\tvalue (test \\\true\\\) ? true : false;\\n\\t\\t\\t\\t\\tconfigelement value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\string\\\:\\n\\t\\t\\t\\t\\tvalue tiddler.fields.text.trim();\\n\\t\\t\\t\\t\\tconfigelement value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\integer\\\:\\n\\t\\t\\t\\t\\tvalue parseInt(tiddler.fields.text.trim(), 10);\\n\\t\\t\\t\\t\\tconfigelement value;\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t\\tcase \\\json\\\:\\n\\t\\t\\t\\t\\tvalue JSON.parse(tiddler.fields.text.trim());\\n\\t\\t\\t\\t\\t\\textend (tiddler.fields.extend) ? tiddler.fields.extend : element;\\n\\n\\t\\t\\t\\t\\tif (configextend) {\\n\\t\\t\\t\\t\\t\\t$tw.utils.extend(configextend, value);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tconfigextend value;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tbreak;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\treturn config;\\n}\\n\\nfunction CodeMirrorEngine(options) {\\n\\n\\t// Save our options\\n\\tvar self this;\\n\\toptions options || {};\\n\\tthis.widget options.widget;\\n\\tthis.value options.value;\\n\\tthis.parentNode options.parentNode;\\n\\tthis.nextSibling options.nextSibling;\\n\\t// Create the wrapper DIV\\n\\tthis.domNode this.widget.document.createElement(\\\div\\\);\\n\\tif(this.widget.editClass) {\\n\\t\\tthis.domNode.className this.widget.editClass;\\n\\t}\\n\\tthis.domNode.style.display \\\inline-block\\\;\\n\\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\\n\\tthis.widget.domNodes.push(this.domNode);\\n\\t\\n\\t// Set all cm-plugin defaults\\n\\t// Get the configuration options for the CodeMirror object\\n\\tvar config getCmConfig();\\n\\n\\tconfig.mode options.type;\\n\\tconfig.value options.value;\\n\\tif(this.widget.editTabIndex) {\\n\\t\\tconfig\\\tabindex\\\ this.widget.editTabIndex;\\n\\t}\\n\\tconfig.editWidget this.widget;\\n\\t// Create the CodeMirror instance\\n\\tthis.cm window.CodeMirror(function(cmDomNode) {\\n\\t\\t// Note that this is a synchronous callback that is called before the constructor returns\\n\\t\\tif(!self.widget.document.isTiddlyWikiFakeDom) {\\n\\t\\t\\tself.domNode.appendChild(cmDomNode);\\n\\t\\t}\\n\\t},config);\\n\\n\\t// Set up a change event handler\\n\\tthis.cm.on(\\\change\\\,function() {\\n\\t\\tself.widget.saveChanges(self.getText());\\n\\t\\tif(self.widget.editInputActions) {\\n\\t\\t\\tself.widget.invokeActionString(self.widget.editInputActions,this,event,{actionValue: this.getText()});\\n\\t\\t}\\n\\t});\\n\\t\\n\\tthis.cm.on(\\\drop\\\,function(cm,event) {\\n\\t\\tif(!self.widget.isFileDropEnabled) {\\n\\t\\t\\tevent.stopPropagation(); // Otherwise TWs dropzone widget sees the drop event\\n\\t\\t}\\n\\t\\t// Detect if Chrome has added a pseudo File object to the dataTransfer\\n\\t\\tif(!$tw.utils.dragEventContainsFiles(event) && event.dataTransfer.files.length) {\\n\\t\\t\\t//Make codemirror ignore the event as we will handle the drop ourselves\\n\\t\\t\\tevent.codemirrorIgnore true;\\n\\t\\t\\tevent.preventDefault();\\n\\n\\t\\t\\t// from https://github.com/codemirror/CodeMirror/blob/master/src/measurement/position_measurement.js#L673\\n\\t\\t\\tfunction posFromMouse(cm, e, liberal, forRect) {\\n\\t\\t\\t\\tlet display cm.display\\n\\t\\t\\t\\tif (!liberal && e_target(e).getAttribute(\\\cm-not-content\\\) \\\true\\\) return null\\n\\n\\t\\t\\t\\tlet x, y, space display.lineSpace.getBoundingClientRect()\\n\\t\\t\\t\\t// Fails unpredictably on IE67 when mouse is dragged around quickly.\\n\\t\\t\\t\\ttry { x e.clientX - space.left; y e.clientY - space.top }\\n\\t\\t\\t\\tcatch (e) { return null }\\n\\t\\t\\t\\tlet coords cm.coordsChar(cm, x, y), line\\n\\t\\t\\t\\tif (forRect && coords.xRel > 0 && (line cm.getLine(cm.doc, coords.line).text).length coords.ch) {\\n\\t\\t\\t\\t\\tlet colDiff window.CodeMirror.countColumn(line, line.length, cm.options.tabSize) - line.length\\n\\t\\t\\t\\t\\tcoords window.CodeMirror.Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff))\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn coords\\n\\t\\t\\t}\\n\\n\\t\\t\\tvar pos posFromMouse(cm,event,true);\\n\\t\\t\\tif(!pos || cm.isReadOnly()) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\t// Dont do a replace if the drop happened inside of the selected text.\\n\\t\\t\\tif (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\\n\\t\\t\\t\\tcm.state.draggingText(event);\\n\\t\\t\\t\\t// Ensure the editor is re-focused\\n\\t\\t\\t\\tsetTimeout(function() {cm.display.input.focus();}, 20); \\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tvar text event.dataTransfer.getData(\\\Text\\\);\\n\\t\\t\\t\\tif (text) {\\n\\t\\t\\t\\t\\tvar selected;\\n\\t\\t\\t\\t\\tif (cm.state.draggingText && !cm.state.draggingText.copy) {\\n\\t\\t\\t\\t\\t\\tselected cm.listSelections();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcm.setCursor(cm.coordsChar({left:event.pageX,top:event.pageY}));\\n\\t\\t\\t\\t\\tif (selected) {\\n\\t\\t\\t\\t\\t\\tfor (var i 0; i \u003C selected.length; ++i) {\\n\\t\\t\\t\\t\\t\\t\\treplaceRange(cm.doc, \\\\\\, selectedi.anchor, selectedi.head, \\\drag\\\);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcm.replaceSelection(text, \\\around\\\, \\\paste\\\);\\n\\t\\t\\t\\t\\tcm.display.input.focus();\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tcatch(e){}\\n\\t\\t}\\n\\t\\treturn false;\\n\\t});\\n\\tthis.cm.on(\\\keydown\\\,function(cm,event) {\\n\\t\\tif ($tw.keyboardManager.handleKeydownEvent(event, {onlyPriority: true})) {\\n\\t\\t\\treturn true;\\n\\t\\t}\\n\\t\\n\\t\\treturn self.widget.handleKeydownEvent.call(self.widget,event);\\n\\t});\\n\\tthis.cm.on(\\\focus\\\,function(cm,event) {\\n\\t\\tif(self.widget.editCancelPopups) {\\n\\t\\t\\t$tw.popup.cancel(0);\\t\\n\\t\\t}\\n\\t});\\n\\t// Add drag and drop event listeners if fileDrop is enabled\\n\\tif(this.widget.isFileDropEnabled) {\\n\\t\\t// If the drag event contains Files, prevent the default CodeMirror handling\\n\\t\\tthis.cm.on(\\\dragenter\\\,function(cm,event) {\\n\\t\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t}\\n\\t\\t\\treturn true;\\n\\t\\t});\\n\\t\\tthis.cm.on(\\\dragleave\\\,function(cm,event) {\\n\\t\\t\\tevent.preventDefault();\\n\\t\\t});\\n\\t\\tthis.cm.on(\\\dragover\\\,function(cm,event) {\\n\\t\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.cm.on(\\\drop\\\,function(cm,event) {\\n\\t\\t\\tif($tw.utils.dragEventContainsFiles(event)) {\\n\\t\\t\\t\\tevent.preventDefault();\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tthis.cm.on(\\\paste\\\,function(cm,event) {\\n\\t\\t\\tevent\\\twEditor\\\ true;\\n\\t\\t\\tself.widget.handlePasteEvent.call(self.widget,event);\\n\\t\\t});\\n\\t} else {\\n\\t\\tthis.cm.on(\\\paste\\\,function(cm,event){\\n\\t\\t\\tevent\\\twEditor\\\ true;\\n\\t\\t});\\n\\t}\\n;\\n}\\n\\n/*\\nSet the text of the engine if it doesnt currently have focus\\n*/\\nCodeMirrorEngine.prototype.setText function(text,type) {\\n\\tvar self this;\\n\\tself.cm.setOption(\\\mode\\\,type);\\n\\tif(!this.cm.hasFocus()) {\\n\\t\\tthis.updateDomNodeText(text);\\n\\t}\\n};\\n\\n/*\\nUpdate the DomNode with the new text\\n*/\\nCodeMirrorEngine.prototype.updateDomNodeText function(text) {\\n\\tthis.cm.setValue(text);\\n};\\n\\n/*\\nGet the text of the engine\\n*/\\nCodeMirrorEngine.prototype.getText function() {\\n\\treturn this.cm.getValue();\\n};\\n\\n/*\\nFix the height of textarea to fit content\\n*/\\nCodeMirrorEngine.prototype.fixHeight function() {\\n\\tif(this.widget.editAutoHeight) {\\n\\t\\t// Resize to fit\\n\\t\\tthis.cm.setSize(null,null);\\n\\t} else {\\n\\t\\tvar fixedHeight parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\\\400px\\\),10);\\n\\t\\tfixedHeight Math.max(fixedHeight,20);\\n\\t\\tthis.cm.setSize(null,fixedHeight);\\n\\t}\\n};\\n\\n/*\\nFocus the engine node\\n*/\\nCodeMirrorEngine.prototype.focus function() {\\n\\tthis.cm.focus();\\n}\\n\\n/*\\nCreate a blank structure representing a text operation\\n*/\\nCodeMirrorEngine.prototype.createTextOperation function() {\\n\\tvar selections this.cm.listSelections();\\n\\tif(selections.length > 0) {\\n\\t\\tvar anchorPos this.cm.indexFromPos(selections0.anchor),\\n\\t\\theadPos this.cm.indexFromPos(selections0.head);\\n\\t}\\n\\tvar operation {\\n\\t\\ttext: this.cm.getValue(),\\n\\t\\tselStart: Math.min(anchorPos,headPos),\\n\\t\\tselEnd: Math.max(anchorPos,headPos),\\n\\t\\tcutStart: null,\\n\\t\\tcutEnd: null,\\n\\t\\treplacement: null,\\n\\t\\tnewSelStart: null,\\n\\t\\tnewSelEnd: null\\n\\t};\\n\\toperation.selection operation.text.substring(operation.selStart,operation.selEnd);\\n\\treturn operation;\\n};\\n\\n/*\\nExecute a text operation\\n*/\\nCodeMirrorEngine.prototype.executeTextOperation function(operation) {\\n\\t// Perform the required changes to the text area and the underlying tiddler\\n\\tvar newText operation.text;\\n\\tif(operation.replacement ! null) {\\n\\t\\tthis.cm.replaceRange(operation.replacement,this.cm.posFromIndex(operation.cutStart),this.cm.posFromIndex(operation.cutEnd));\\n\\t\\tthis.cm.setSelection(this.cm.posFromIndex(operation.newSelStart),this.cm.posFromIndex(operation.newSelEnd));\\n\\t\\tnewText operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\\n\\t}\\n\\tthis.cm.focus();\\n\\treturn newText;\\n};\\n\\nexports.CodeMirrorEngine $tw.browser ? CodeMirrorEngine : require(\\\$:/core/modules/editor/engines/simple.js\\\).SimpleEngine;\\n\,\type\:\application/javascript\,\module-type\:\library\},\$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\:{\text\:\!function(e,t){\\\object\\\typeof exports&&\\\undefined\\\!typeof module?module.exportst():\\\function\\\typeof define&&define.amd?define(t):(ee||self).CodeMirrort()}(this,function(){\\\use strict\\\;var enavigator.userAgent,lnavigator.platform,d/gecko\\\\/\\\\d/i.test(e),s/MSIE \\\\d/.test(e),a/Trident\\\\/(?:7-9|\\\\d{2,})\\\\..*rv:(\\\\d+)/.exec(e),u/Edge\\\\/(\\\\d+)/.exec(e),ws||a||u,vw&&(s?document.documentMode||6:+(u||a)1),x!u&&/WebKit\\\\//.test(e),sx&&/Qt\\\\/\\\\d+\\\\.\\\\d+/.test(e),m!u&&/Chrome\\\\/(\\\\d+)/.exec(e),Vm&&+m1,K/Opera\\\\//.test(e),j/Apple Computer/.test(navigator.vendor),c/Mac OS X 1\\\\d\\\\D(8-9|\\\\d\\\\d)\\\\D/.test(e),X/PhantomJS/.test(e),Yj&&(/Mobile\\\\/\\\\w+/.test(e)||2\u003Cnavigator.maxTouchPoints),$/Android/.test(e),_Y||$||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),CY||/Mac/.test(l),q/\\\\bCrOS\\\\b/.test(e),a/win/i.test(l),uK&&e.match(/Version\\\\/(\\\\d*\\\\.\\\\d*)/),Z((uu&&Number(u1))&&15\u003Cu&&(x!(K!1)),C&&(s||K&&(nullu||u\u003C12.11))),Qd||w&&9\u003Cv;function J(e){return new RegExp(\\\(^|\\\\\\\\s)\\\+e+\\\(?:$|\\\\\\\\s)\\\\\\\\s*\\\)}var eefunction(e,t){var n,re.className,tJ(t).exec(r);t&&(nr.slice(t.index+t0.length),e.classNamer.slice(0,t.index)+(n?t1+n:\\\\\\))};function te(e){for(var te.childNodes.length;0\u003Ct;--t)e.removeChild(e.firstChild);return e}function y(e,t){return te(e).appendChild(t)}function M(e,t,n,r){var idocument.createElement(e);if(n&&(i.classNamen),r&&(i.style.cssTextr),\\\string\\\typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o0;o\u003Ct.length;++o)i.appendChild(to);return i}function ne(e,t,n,r){eM(e,t,n,r);return e.setAttribute(\\\role\\\,\\\presentation\\\),e}function re(e,t){if(3t.nodeType&&(tt.parentNode),e.contains)return e.contains(t);do{if((t11t.nodeType?t.host:t)e)return!0}while(tt.parentNode)}function N(e){var t,ne.ownerDocument||e;try{te.activeElement}catch(e){tn.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)tt.shadowRoot.activeElement;return t}function ie(e,t){var ne.className;J(t).test(n)||(e.className+(n?\\\ \\\:\\\\\\)+t)}function oe(e,t){for(var ne.split(\\\ \\\),r0;r\u003Cn.length;r++)nr&&!J(nr).test(t)&&(t+\\\ \\\+nr);return t}var ledocument.createRange?function(e,t,n,r){var idocument.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var rdocument.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd(\\\character\\\,n),r.moveStart(\\\character\\\,t),r},sefunction(e){e.select()};function ae(e){return e.display.wrapper.ownerDocument}function ue(e){return ce(e.display.wrapper)}function ce(e){return e.getRootNode?e.getRootNode():e.ownerDocument}function he(e){return ae(e).defaultView}function de(e){var tArray.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function fe(e,t,n){for(var r in tt||{},e)!e.hasOwnProperty(r)||!1n&&t.hasOwnProperty(r)||(trer);return t}function S(e,t,n,r,i){nullt&&-1(te.search(/^\\\\s\\\\u00a0/))&&(te.length);for(var or||0,li||0;;){var se.indexOf(\\\\\\\t\\\,o);if(s\u003C0||t\u003Cs)return l+(t-o);l(l+s-o)+(n-l%n),os+1}}Y?sefunction(e){e.selectionStart0,e.selectionEnde.value.length}:w&&(sefunction(e){try{e.select()}catch(e){}});function pe(){this.idnull,this.fnull,this.time0,this.handlerde(this.onTimeout,this)}function L(e,t){for(var n0;n\u003Ce.length;++n)if(ent)return n;return-1}pe.prototype.onTimeoutfunction(e){e.id0,e.time\u003C+new Date?e.f():setTimeout(e.handler,e.time-+new Date)};var ge50,me{toString:function(){return\\\CodeMirror.Pass\\\}},ve{scroll:!(pe.prototype.setfunction(e,t){this.ft;t+new Date+e;(!this.id||t\u003Cthis.time)&&(clearTimeout(this.id),this.idsetTimeout(this.handler,e),this.timet)})},ye{origin:\\\*mouse\\\},be{origin:\\\+move\\\};function we(e,t,n){for(var r0,i0;;){var oe.indexOf(\\\\\\\t\\\,r),l(o-1o?e.length:o)-r;if(oe.length||t\u003Ci+l)return r+Math.min(l,t-i);if(i+o-r,ro+1,t\u003C(i+n-i%n))return r}}var xe\\\\\\;function Ce(e){for(;xe.length\u003Ce;)xe.push(z(xe)+\\\ \\\);return xee}function z(e){return ee.length-1}function Se(e,t){for(var n,r0;r\u003Ce.length;r++)nrt(er,r);return n}function Le(){}function ke(e,t){eObject.create?Object.create(e):(Le.prototypee,new Le);return t&&fe(t,e),e}var Te/\\\\u00df\\\\u0587\\\\u0590-\\\\u05f4\\\\u0600-\\\\u06ff\\\\u3040-\\\\u309f\\\\u30a0-\\\\u30ff\\\\u3400-\\\\u4db5\\\\u4e00-\\\\u9fcc\\\\uac00-\\\\ud7af/;function Me(e){return/\\\\w/.test(e)||\\\\\\\u003Ce&&(e.toUpperCase()!e.toLowerCase()||Te.test(e))}function Ne(e,t){return t?!!(-1\u003Ct.source.indexOf(\\\\\\\\\\\w\\\)&&Me(e))||t.test(e):Me(e)}function Oe(e){for(var t in e)if(e.hasOwnProperty(t)&&et)return;return 1}var Ae/\\\\u0300-\\\\u036f\\\\u0483-\\\\u0489\\\\u0591-\\\\u05bd\\\\u05bf\\\\u05c1\\\\u05c2\\\\u05c4\\\\u05c5\\\\u05c7\\\\u0610-\\\\u061a\\\\u064b-\\\\u065e\\\\u0670\\\\u06d6-\\\\u06dc\\\\u06de-\\\\u06e4\\\\u06e7\\\\u06e8\\\\u06ea-\\\\u06ed\\\\u0711\\\\u0730-\\\\u074a\\\\u07a6-\\\\u07b0\\\\u07eb-\\\\u07f3\\\\u0816-\\\\u0819\\\\u081b-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082d\\\\u0900-\\\\u0902\\\\u093c\\\\u0941-\\\\u0948\\\\u094d\\\\u0951-\\\\u0955\\\\u0962\\\\u0963\\\\u0981\\\\u09bc\\\\u09be\\\\u09c1-\\\\u09c4\\\\u09cd\\\\u09d7\\\\u09e2\\\\u09e3\\\\u0a01\\\\u0a02\\\\u0a3c\\\\u0a41\\\\u0a42\\\\u0a47\\\\u0a48\\\\u0a4b-\\\\u0a4d\\\\u0a51\\\\u0a70\\\\u0a71\\\\u0a75\\\\u0a81\\\\u0a82\\\\u0abc\\\\u0ac1-\\\\u0ac5\\\\u0ac7\\\\u0ac8\\\\u0acd\\\\u0ae2\\\\u0ae3\\\\u0b01\\\\u0b3c\\\\u0b3e\\\\u0b3f\\\\u0b41-\\\\u0b44\\\\u0b4d\\\\u0b56\\\\u0b57\\\\u0b62\\\\u0b63\\\\u0b82\\\\u0bbe\\\\u0bc0\\\\u0bcd\\\\u0bd7\\\\u0c3e-\\\\u0c40\\\\u0c46-\\\\u0c48\\\\u0c4a-\\\\u0c4d\\\\u0c55\\\\u0c56\\\\u0c62\\\\u0c63\\\\u0cbc\\\\u0cbf\\\\u0cc2\\\\u0cc6\\\\u0ccc\\\\u0ccd\\\\u0cd5\\\\u0cd6\\\\u0ce2\\\\u0ce3\\\\u0d3e\\\\u0d41-\\\\u0d44\\\\u0d4d\\\\u0d57\\\\u0d62\\\\u0d63\\\\u0dca\\\\u0dcf\\\\u0dd2-\\\\u0dd4\\\\u0dd6\\\\u0ddf\\\\u0e31\\\\u0e34-\\\\u0e3a\\\\u0e47-\\\\u0e4e\\\\u0eb1\\\\u0eb4-\\\\u0eb9\\\\u0ebb\\\\u0ebc\\\\u0ec8-\\\\u0ecd\\\\u0f18\\\\u0f19\\\\u0f35\\\\u0f37\\\\u0f39\\\\u0f71-\\\\u0f7e\\\\u0f80-\\\\u0f84\\\\u0f86\\\\u0f87\\\\u0f90-\\\\u0f97\\\\u0f99-\\\\u0fbc\\\\u0fc6\\\\u102d-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103a\\\\u103d\\\\u103e\\\\u1058\\\\u1059\\\\u105e-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108d\\\\u109d\\\\u135f\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17b7-\\\\u17bd\\\\u17c6\\\\u17c9-\\\\u17d3\\\\u17dd\\\\u180b-\\\\u180d\\\\u18a9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193b\\\\u1a17\\\\u1a18\\\\u1a56\\\\u1a58-\\\\u1a5e\\\\u1a60\\\\u1a62\\\\u1a65-\\\\u1a6c\\\\u1a73-\\\\u1a7c\\\\u1a7f\\\\u1b00-\\\\u1b03\\\\u1b34\\\\u1b36-\\\\u1b3a\\\\u1b3c\\\\u1b42\\\\u1b6b-\\\\u1b73\\\\u1b80\\\\u1b81\\\\u1ba2-\\\\u1ba5\\\\u1ba8\\\\u1ba9\\\\u1c2c-\\\\u1c33\\\\u1c36\\\\u1c37\\\\u1cd0-\\\\u1cd2\\\\u1cd4-\\\\u1ce0\\\\u1ce2-\\\\u1ce8\\\\u1ced\\\\u1dc0-\\\\u1de6\\\\u1dfd-\\\\u1dff\\\\u200c\\\\u200d\\\\u20d0-\\\\u20f0\\\\u2cef-\\\\u2cf1\\\\u2de0-\\\\u2dff\\\\u302a-\\\\u302f\\\\u3099\\\\u309a\\\\ua66f-\\\\ua672\\\\ua67c\\\\ua67d\\\\ua6f0\\\\ua6f1\\\\ua802\\\\ua806\\\\ua80b\\\\ua825\\\\ua826\\\\ua8c4\\\\ua8e0-\\\\ua8f1\\\\ua926-\\\\ua92d\\\\ua947-\\\\ua951\\\\ua980-\\\\ua982\\\\ua9b3\\\\ua9b6-\\\\ua9b9\\\\ua9bc\\\\uaa29-\\\\uaa2e\\\\uaa31\\\\uaa32\\\\uaa35\\\\uaa36\\\\uaa43\\\\uaa4c\\\\uaab0\\\\uaab2-\\\\uaab4\\\\uaab7\\\\uaab8\\\\uaabe\\\\uaabf\\\\uaac1\\\\uabe5\\\\uabe8\\\\uabed\\\\udc00-\\\\udfff\\\\ufb1e\\\\ufe00-\\\\ufe0f\\\\ufe20-\\\\ufe26\\\\uff9e\\\\uff9f/;function De(e){return 768\u003Ce.charCodeAt(0)&&Ae.test(e)}function We(e,t,n){for(;(n\u003C0?0\u003Ct:t\u003Ce.length)&&De(e.charAt(t));)t+n;return t}function He(e,t,n){for(var rn\u003Ct?-1:1;;){if(tn)return t;var i(t+n)/2,ir\u003C0?Math.ceil(i):Math.floor(i);if(it)return e(i)?t:n;e(i)?ni:ti+r}}var Fenull;function Pe(e,t,n){var r;Fenull;for(var i0;i\u003Ce.length;++i){var oei;if(o.from\u003Ct&&o.to>t)return i;o.tot&&(o.from!o.to&&\\\before\\\n?ri:Fei),o.fromt&&(o.from!o.to&&\\\before\\\!n?ri:Fei)}return null!r?r:Fe}Ee/\\\\u0590-\\\\u05f4\\\\u0600-\\\\u06ff\\\\u0700-\\\\u08ac/,Re/stwN/,ze/LRr/,Ie/Lb1n/,Be/1n/;var Ee,Re,ze,Ie,Be,Gefunction(e,t){var n\\\ltr\\\t?\\\L\\\:\\\R\\\;if(0e.length||\\\ltr\\\t&&!Ee.test(e))return!1;for(var r,ie.length,o,l0;l\u003Ci;++l)o.push((re.charCodeAt(l))\u003C247?\\\bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\\\.charAt(r):1424\u003Cr&&r\u003C1524?\\\R\\\:1536\u003Cr&&r\u003C1785?\\\nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\\\.charAt(r-1536):1774\u003Cr&&r\u003C2220?\\\r\\\:8192\u003Cr&&r\u003C8203?\\\w\\\:8204r?\\\b\\\:\\\L\\\);for(var s0,an;s\u003Ci;++s){var uos;\\\m\\\u?osa:au}for(var c0,hn;c\u003Ci;++c){var doc;\\\1\\\d&&\\\r\\\h?oc\\\n\\\:ze.test(d)&&\\\r\\\(hd)&&(oc\\\R\\\)}for(var f1,po0;f\u003Ci-1;++f){var gof;\\\+\\\g&&\\\1\\\p&&\\\1\\\of+1?of\\\1\\\:\\\,\\\!g||p!of+1||\\\1\\\!p&&\\\n\\\!p||(ofp),pg}for(var m0;m\u003Ci;++m){var vom;if(\\\,\\\v)om\\\N\\\;else if(\\\%\\\v){for(var yvoid 0,ym+1;y\u003Ci&&\\\%\\\oy;++y);for(var bm&&\\\!\\\om-1||y\u003Ci&&\\\1\\\oy?\\\1\\\:\\\N\\\,wm;w\u003Cy;++w)owb;my-1}}for(var x0,Cn;x\u003Ci;++x){var Sox;\\\L\\\C&&\\\1\\\S?ox\\\L\\\:ze.test(S)&&(CS)}for(var L0;L\u003Ci;++L)if(Re.test(oL)){for(var kvoid 0,kL+1;k\u003Ci&&Re.test(ok);++k);for(var T\\\L\\\(L?oL-1:n),MT(\\\L\\\(k\u003Ci?ok:n))?T?\\\L\\\:\\\R\\\:n,NL;N\u003Ck;++N)oNM;Lk-1}for(var O,A,D0;D\u003Ci;)if(Ie.test(oD)){var ED;for(++D;D\u003Ci&&Ie.test(oD);++D);A.push(new Ue(0,E,D))}else{var WD,HA.length,F\\\rtl\\\t?1:0;for(++D;D\u003Ci&&\\\L\\\!oD;++D);for(var PW;P\u003CD;)if(Be.test(oP)){W\u003CP&&(A.splice(H,0,new Ue(1,W,P)),H+F);var RP;for(++P;P\u003CD&&Be.test(oP);++P);A.splice(H,0,new Ue(2,R,P)),H+F,WP}else++P;W\u003CD&&A.splice(H,0,new Ue(1,W,D))}return\\\ltr\\\t&&(1A0.level&&(Oe.match(/^\\\\s+/))&&(A0.fromO0.length,A.unshift(new Ue(0,0,O0.length))),1z(A).level&&(Oe.match(/\\\\s+$/))&&(z(A).to-O0.length,A.push(new Ue(0,i-O0.length,i)))),\\\rtl\\\t?A.reverse():A};function Ue(e,t,n){this.levele,this.fromt,this.ton}function Ve(e,t){var ne.order;return nnulln?e.orderGe(e.text,t):n}var Ke,kfunction(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent?e.attachEvent(\\\on\\\+t,n):(ee._handlers||(e._handlers{}))t(et||Ke).concat(n)};function je(e,t){return e._handlers&&e._handlerst||Ke}function T(e,t,n){var r;e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent?e.detachEvent(\\\on\\\+t,n):(r(ee._handlers)&&et)&&-1\u003C(nL(r,n))&&(etr.slice(0,n).concat(r.slice(n+1)))}function O(e,t){var nje(e,t);if(n.length)for(var rArray.prototype.slice.call(arguments,2),i0;i\u003Cn.length;++i)ni.apply(null,r)}function A(e,t,n){return\\\string\\\typeof t&&(t{type:t,preventDefault:function(){this.defaultPrevented!0}}),O(e,n||t.type,e,t),qe(t)||t.codemirrorIgnore}function Xe(e){var te._handlers&&e._handlers.cursorActivity;if(t)for(var ne.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers),r0;r\u003Ct.length;++r)-1L(n,tr)&&n.push(tr)}function Ye(e,t){return 0\u003Cje(e,t).length}function $e(e){e.prototype.onfunction(e,t){k(this,e,t)},e.prototype.offfunction(e,t){T(this,e,t)}}function D(e){e.preventDefault?e.preventDefault():e.returnValue!1}function _e(e){e.stopPropagation?e.stopPropagation():e.cancelBubble!0}function qe(e){return null!e.defaultPrevented?e.defaultPrevented:0e.returnValue}function Ze(e){D(e),_e(e)}function Qe(e){return e.target||e.srcElement}function Je(e){var te.which;return nullt&&(1&e.button?t1:2&e.button?t3:4&e.button&&(t2)),tC&&e.ctrlKey&&1t?3:t}var et,tt,ntfunction(){if(w&&v\u003C9)return!1;var eM(\\\div\\\);return\\\draggable\\\in e||\\\dragDrop\\\in e}();var rt3!\\\\\\\n\\\\nb\\\.split(/\\\\n/).length?function(e){for(var t0,n,re.length;t\u003Cr;){var ie.indexOf(\\\\\\\n\\\,t),o(-1i&&(ie.length),e.slice(t,\\\\\\\r\\\e.charAt(i-1)?i-1:i)),lo.indexOf(\\\\\\\r\\\);-1!l?(n.push(o.slice(0,l)),t+l+1):(n.push(o),ti+1)}return n}:function(e){return e.split(/\\\\r\\\\n?|\\\\n/)},itwindow.getSelection?function(e){try{return e.selectionStart!e.selectionEnd}catch(e){return!1}}:function(e){var t;try{te.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!e)&&0!t.compareEndPoints(\\\StartToEnd\\\,t)},ot\\\oncopy\\\in(lM(\\\div\\\))||(l.setAttribute(\\\oncopy\\\,\\\return;\\\),\\\function\\\typeof l.oncopy),ltnull;var st{},at{};function ut(e){if(\\\string\\\typeof e&&at.hasOwnProperty(e))eate;else if(e&&\\\string\\\typeof e.name&&at.hasOwnProperty(e.name)){var tate.name;(eke(t\\\string\\\typeof t?{name:t}:t,e)).namet.name}else{if(\\\string\\\typeof e&&/^\\\\w\\\\-+\\\\/\\\\w\\\\-+\\\\+xml$/.test(e))return ut(\\\application/xml\\\);if(\\\string\\\typeof e&&/^\\\\w\\\\-+\\\\/\\\\w\\\\-+\\\\+json$/.test(e))return ut(\\\application/json\\\)}return\\\string\\\typeof e?{name:e}:e||{name:\\\null\\\}}function ct(e,t){tut(t);var nstt.name;if(!n)return ct(e,\\\text/plain\\\);var rn(e,t);if(ht.hasOwnProperty(t.name)){var i,ohtt.name;for(i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r\\\_\\\+iri),rioi)}if(r.namet.name,t.helperType&&(r.helperTypet.helperType),t.modeProps)for(var l in t.modeProps)rlt.modePropsl;return r}var ht{};function dt(e,t){fe(t,ht.hasOwnProperty(e)?hte:hte{})}function ft(e,t){if(!0t)return t;if(e.copyState)return e.copyState(t);var n,r{};for(n in t){var itn;i instanceof Array&&(ii.concat()),rni}return r}function pt(e,t){for(var n;e.innerMode&&(ne.innerMode(t))&&n.mode!e;)tn.state,en.mode;return n||{mode:e,state:t}}function gt(e,t,n){return!e.startState||e.startState(t,n)}var gfunction(e,t,n){this.posthis.start0,this.stringe,this.tabSizet||8,this.lastColumnPosthis.lastColumnValue0,this.lineStart0,this.lineOraclen};function W(e,t){if((t-e.first)\u003C0||t>e.size)throw new Error(\\\There is no line \\\+(t+e.first)+\\\ in the document.\\\);for(var ne;!n.lines;)for(var r0;;++r){var in.childrenr,oi.chunkSize();if(t\u003Co){ni;break}t-o}return n.linest}function mt(e,t,n){var r,it.line;return e.iter(t.line,n.line+1,function(e){ee.text;in.line&&(ee.slice(0,n.ch)),it.line&&(ee.slice(t.ch)),r.push(e),++i}),r}function vt(e,t,n){var r;return e.iter(t,n,function(e){r.push(e.text)}),r}function yt(e,t){var nt-e.height;if(n)for(var re;r;rr.parent)r.height+n}function H(e){if(nulle.parent)return null;for(var te.parent,nL(t.lines,e),rt.parent;r;r(tr).parent)for(var i0;r.childreni!t;++i)n+r.childreni.chunkSize();return n+t.first}function bt(e,t){var ne.first;e:do{for(var r0;r\u003Ce.children.length;++r){var ie.childrenr,oi.height;if(t\u003Co){ei;continue e}t-o,n+i.chunkSize()}return n}while(!e.lines);for(var l0;l\u003Ce.lines.length;++l){var se.linesl.height;if(t\u003Cs)break;t-s}return n+l}function wt(e,t){return t>e.first&&t\u003Ce.first+e.size}function xt(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function F(e,t,n){if(void 0n&&(nnull),!(this instanceof F))return new F(e,t,n);this.linee,this.cht,this.stickyn}function P(e,t){return e.line-t.line||e.ch-t.ch}function Ct(e,t){return e.stickyt.sticky&&0P(e,t)}function St(e){return F(e.line,e.ch)}function Lt(e,t){return P(e,t)\u003C0?t:e}function kt(e,t){return P(e,t)\u003C0?e:t}function Tt(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function E(e,t){if(t.line\u003Ce.first)return F(e.first,0);var ne.first+e.size-1;return t.line>n?F(n,W(e,n).text.length):(eW(e,(nt).line).text.length,null(tn.ch)||e\u003Ct?F(n.line,e):t\u003C0?F(n.line,0):n)}function Mt(e,t){for(var n,r0;r\u003Ct.length;r++)nrE(e,tr);return n}g.prototype.eolfunction(){return this.pos>this.string.length},g.prototype.solfunction(){return this.posthis.lineStart},g.prototype.peekfunction(){return this.string.charAt(this.pos)||void 0},g.prototype.nextfunction(){if(this.pos\u003Cthis.string.length)return this.string.charAt(this.pos++)},g.prototype.eatfunction(e){var tthis.string.charAt(this.pos),e\\\string\\\typeof e?te:t&&(e.test?e.test(t):e(t));if(e)return++this.pos,t},g.prototype.eatWhilefunction(e){for(var tthis.pos;this.eat(e););return this.pos>t},g.prototype.eatSpacefunction(){for(var ethis.pos;/\\\\s\\\\u00a0/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},g.prototype.skipToEndfunction(){this.posthis.string.length},g.prototype.skipTofunction(e){ethis.string.indexOf(e,this.pos);if(-1\u003Ce)return this.pose,!0},g.prototype.backUpfunction(e){this.pos-e},g.prototype.columnfunction(){return this.lastColumnPos\u003Cthis.start&&(this.lastColumnValueS(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPosthis.start),this.lastColumnValue-(this.lineStart?S(this.string,this.lineStart,this.tabSize):0)},g.prototype.indentationfunction(){return S(this.string,null,this.tabSize)-(this.lineStart?S(this.string,this.lineStart,this.tabSize):0)},g.prototype.matchfunction(e,t,n){var r;if(\\\string\\\!typeof e)return(rthis.string.slice(this.pos).match(e))&&0\u003Cr.index?null:(r&&!1!t&&(this.pos+r0.length),r);function i(e){return n?e.toLowerCase():e}return i(this.string.substr(this.pos,e.length))i(e)?(!1!t&&(this.pos+e.length),!0):void 0},g.prototype.currentfunction(){return this.string.slice(this.start,this.pos)},g.prototype.hideFirstCharsfunction(e,t){this.lineStart+e;try{return t()}finally{this.lineStart-e}},g.prototype.lookAheadfunction(e){var tthis.lineOracle;return t&&t.lookAhead(e)},g.prototype.baseTokenfunction(){var ethis.lineOracle;return e&&e.baseToken(this.pos)};function Nt(e,t){this.statee,this.lookAheadt}var Otfunction(e,t,n,r){this.statet,this.doce,this.linen,this.maxLookAheadr||0,this.baseTokensnull,this.baseTokenPos1};function At(t,n,r,e){for(var at.state.modeGen,i{},u(It(t,n.text,t.doc.mode,r,function(e,t){a.push(e,t)},i,e),r.state),o0;o\u003Ct.state.overlays.length;++o)!function(e){r.baseTokensa;var ot.state.overlayse,l1,s0;r.state!0,It(t,n.text,o.mode,r,function(e,t){for(var nl;s\u003Ce;){var ral;e\u003Cr&&a.splice(l,1,e,al+1,r),l+2,sMath.min(e,r)}if(t)if(o.opaque)a.splice(n,l-n,e,\\\overlay \\\+t),ln+2;else for(;n\u003Cl;n+2){var ian+1;an+1(i?i+\\\ \\\:\\\\\\)+\\\overlay \\\+t}},i),r.stateu,r.baseTokensnull,r.baseTokenPos1}(o);return{styles:a,classes:i.bgClass||i.textClass?i:null}}function Dt(e,t,n){var r,i,o;return t.styles&&t.styles0e.state.modeGen||(rWt(e,H(t)),it.text.length>e.options.maxHighlightLength&&ft(e.doc.mode,r.state),oAt(e,t,r),i&&(r.statei),t.stateAfterr.save(!i),t.styleso.styles,o.classes?t.styleClasseso.classes:t.styleClasses&&(t.styleClassesnull),ne.doc.highlightFrontier&&(e.doc.modeFrontierMath.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function Wt(n,r,e){var tn.doc,in.display;if(!t.mode.startState)return new Ot(t,!0,r);var ofunction(e,t,n){for(var r,i,oe.doc,ln?-1:t-(e.doc.mode.innerMode?1e3:100),st;l\u003Cs;--s){if(s\u003Co.first)return o.first;var aW(o,s-1),ua.stateAfter;if(u&&(!n||s+(u instanceof Nt?u.lookAhead:0)\u003Co.modeFrontier))return s;uS(a.text,null,e.options.tabSize);(nulli||u\u003Cr)&&(is-1,ru)}return i}(n,r,e),lo>t.first&&W(t,o-1).stateAfter,sl?Ot.fromSaved(t,l,o):new Ot(t,gt(t.mode),o);return t.iter(o,r,function(e){Ht(n,e.text,s);var ts.line;e.stateAftertr-1||t%50||t>i.viewFrom&&t\u003Ci.viewTo?s.save():null,s.nextLine()}),e&&(t.modeFrontiers.line),s}function Ht(e,t,n,r){var ie.doc.mode,onew g(t,e.options.tabSize,n);for(o.starto.posr||0,\\\\\\t&&Ft(i,n.state);!o.eol();)Pt(i,o,n.state),o.starto.pos}function Ft(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode)return ept(e,t),e.mode.blankLine?e.mode.blankLine(e.state):void 0}function Pt(e,t,n,r){for(var i0;i\u003C10;i++){r&&(r0pt(e,n).mode);var oe.token(t,n);if(t.pos>t.start)return o}throw new Error(\\\Mode \\\+e.name+\\\ failed to advance stream.\\\)}Ot.prototype.lookAheadfunction(e){var tthis.doc.getLine(this.line+e);return null!t&&e>this.maxLookAhead&&(this.maxLookAheade),t},Ot.prototype.baseTokenfunction(e){if(!this.baseTokens)return null;for(;this.baseTokensthis.baseTokenPos\u003Ce;)this.baseTokenPos+2;var tthis.baseTokensthis.baseTokenPos+1;return{type:t&&t.replace(/( |^)overlay .*/,\\\\\\),size:this.baseTokensthis.baseTokenPos-e}},Ot.prototype.nextLinefunction(){this.line++,0\u003Cthis.maxLookAhead&&this.maxLookAhead--},Ot.fromSavedfunction(e,t,n){return t instanceof Nt?new Ot(e,ft(e.mode,t.state),n,t.lookAhead):new Ot(e,ft(e.mode,t),n)},Ot.prototype.savefunction(e){e!1!e?ft(this.doc.mode,this.state):this.state;return 0\u003Cthis.maxLookAhead?new Nt(e,this.maxLookAhead):e};var Etfunction(e,t,n){this.starte.start,this.ende.pos,this.stringe.current(),this.typet||null,this.staten};function Rt(e,t,n,r){var i,o,le.doc,sl.mode,aW(l,(tE(l,t)).line),uWt(e,t.line,n),cnew g(a.text,e.options.tabSize,u);for(r&&(o);(r||c.pos\u003Ct.ch)&&!c.eol();)c.startc.pos,iPt(s,c,u.state),r&&o.push(new Et(c,i,ft(l.mode,u.state)));return r?o:new Et(c,i,u.state)}function zt(e,t){if(e)for(;;){var ne.match(/(?:^|\\\\s+)line-(background-)?(\\\\S+)/);if(!n)break;ee.slice(0,n.index)+e.slice(n.index+n0.length);var rn1?\\\bgClass\\\:\\\textClass\\\;nulltr?trn2:new RegExp(\\\(?:^|\\\\\\\\s)\\\+n2+\\\(?:$|\\\\\\\\s)\\\).test(tr)||(tr+\\\ \\\+n2)}return e}function It(e,t,n,r,i,o,l){var sn.flattenSpans,a(nulls&&(se.options.flattenSpans),0),unull,cnew g(t,e.options.tabSize,r),he.options.addModeClass&&null;for(\\\\\\t&&zt(Ft(n,r.state),o);!c.eol();){var d,fc.pos>e.options.maxHighlightLength?(s!1,l&&Ht(e,t,r,c.pos),c.post.length,null):zt(Pt(n,c,r.state,h),o);if(!h||(dh0.name)&&(f\\\m-\\\+(f?d+\\\ \\\+f:d)),!s||u!f){for(;a\u003Cc.start;)i(aMath.min(c.start,a+5e3),u);uf}c.startc.pos}for(;a\u003Cc.pos;){var pMath.min(c.pos,a+5e3);i(p,u),ap}}var Bt!1,Gt!1;function Ut(e,t,n){this.markere,this.fromt,this.ton}function Vt(e,t){if(e)for(var n0;n\u003Ce.length;++n){var ren;if(r.markert)return r}}function Kt(e,t){if(t.full)return null;var nwt(e,t.from.line)&&W(e,t.from.line).markedSpans,ewt(e,t.to.line)&&W(e,t.to.line).markedSpans;if(!n&&!e)return null;var rt.from.ch,it.to.ch,o0P(t.from,t.to),lfunction(e,t,n){var r;if(e)for(var i0;i\u003Ce.length;++i){var o,lei,sl.marker;!(nulll.from||(s.inclusiveLeft?l.from\u003Ct:l.from\u003Ct))&&(l.from!t||\\\bookmark\\\!s.type||n&&l.marker.insertLeft)||(onulll.to||(s.inclusiveRight?l.to>t:l.to>t),(rr||).push(new Ut(s,l.from,o?null:l.to)))}return r}(n,r,o),sfunction(e,t,n){var r;if(e)for(var i0;i\u003Ce.length;++i){var o,lei,sl.marker;!(nulll.to||(s.inclusiveRight?l.to>t:l.to>t))&&(l.from!t||\\\bookmark\\\!s.type||n&&!l.marker.insertLeft)||(onulll.from||(s.inclusiveLeft?l.from\u003Ct:l.from\u003Ct),(rr||).push(new Ut(s,o?null:l.from-t,nulll.to?null:l.to-t)))}return r}(e,i,o),a1t.text.length,uz(t.text).length+(a?r:0);if(l)for(var c0;c\u003Cl.length;++c){var h,dlc;nulld.to&&((hVt(s,d.marker))?a&&(d.tonullh.to?null:h.to+u):d.tor)}if(s)for(var f0;f\u003Cs.length;++f){var psf;null!p.to&&(p.to+u),nullp.from?Vt(l,p.marker)||(p.fromu,a&&(ll||).push(p)):(p.from+u,a&&(ll||).push(p))}ll&&jt(l),s&&s!l&&(sjt(s));var gl;if(!a){var m,vt.text.length-2;if(0\u003Cv&&l)for(var y0;y\u003Cl.length;++y)nullly.to&&(mm||).push(new Ut(ly.marker,null,null));for(var b0;b\u003Cv;++b)g.push(m);g.push(s)}return g}function jt(e){for(var t0;t\u003Ce.length;++t){var net;null!n.from&&n.fromn.to&&!1!n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Xt(e){var te.markedSpans;if(t){for(var n0;n\u003Ct.length;++n)tn.marker.detachLine(e);e.markedSpansnull}}function Yt(e,t){if(t){for(var n0;n\u003Ct.length;++n)tn.marker.attachLine(e);e.markedSpanst}}function $t(e){return e.inclusiveLeft?-1:0}function _t(e){return e.inclusiveRight?1:0}function qt(e,t){var ne.lines.length-t.lines.length;if(0!n)return n;var ne.find(),rt.find(),iP(n.from,r.from)||$t(e)-$t(t);if(i)return-i;iP(n.to,r.to)||_t(e)-_t(t);return i||t.id-e.id}function Zt(e,t){var n,rGt&&e.markedSpans;if(r)for(var i,o0;o\u003Cr.length;++o)(iro).marker.collapsed&&null(t?i.from:i.to)&&(!n||qt(n,i.marker)\u003C0)&&(ni.marker);return n}function Qt(e){return Zt(e,!0)}function Jt(e){return Zt(e,!1)}function en(e,t,n,r,i){var eW(e,t),oGt&&e.markedSpans;if(o)for(var l0;l\u003Co.length;++l){var sol;if(s.marker.collapsed){var as.marker.find(0),uP(a.from,n)||$t(s.marker)-$t(i),cP(a.to,r)||_t(s.marker)-_t(i);if(!(0\u003Cu&&c\u003C0||u\u003C0&&0\u003Cc)&&(u\u003C0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0\u003CP(a.to,n):0\u003CP(a.to,n))||0\u003Cu&&(s.marker.inclusiveRight&&i.inclusiveLeft?P(a.from,r)\u003C0:P(a.from,r)\u003C0)))return 1}}}function tn(e){for(var t;tQt(e);)et.find(-1,!0).line;return e}function nn(e,t){var eW(e,t),ntn(e);return en?t:H(n)}function rn(e,t){if(t>e.lastLine())return t;var n,rW(e,t);if(!on(e,r))return t;for(;nJt(r);)rn.find(1,!0).line;return H(r)+1}function on(e,t){var nGt&&t.markedSpans;if(n)for(var r,i0;i\u003Cn.length;++i)if((rni).marker.collapsed){if(nullr.from)return!0;if(!r.marker.widgetNode&&0r.from&&r.marker.inclusiveLeft&&function e(t,n,r){{var i;if(nullr.to)return ir.marker.find(1,!0),e(t,i.line,Vt(i.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.ton.text.length)return!0;for(var ovoid 0,l0;l\u003Cn.markedSpans.length;++l)if((on.markedSpansl).marker.collapsed&&!o.marker.widgetNode&&o.fromr.to&&(nullo.to||o.to!r.from)&&(o.marker.inclusiveLeft||r.marker.inclusiveRight)&&e(t,n,o))return!0}(e,t,r))return!0}}function ln(e){for(var t0,n(etn(e)).parent,r0;r\u003Cn.lines.length;++r){var in.linesr;if(ie)break;t+i.height}for(var on.parent;o;o(no).parent)for(var l0;l\u003Co.children.length;++l){var so.childrenl;if(sn)break;t+s.height}return t}function sn(e){if(0e.height)return 0;for(var t,ne.text.length,re;tQt(r);){var it.find(0,!0),ri.from.line;n+i.from.ch-i.to.ch}for(re;tJt(r);)var ot.find(0,!0),n(n-r.text.length-o.from.ch)+((ro.to.line).text.length-o.to.ch);return n}function an(e){var ne.display,ee.doc;n.maxLineW(e,e.first),n.maxLineLengthsn(n.maxLine),n.maxLineChanged!0,e.iter(function(e){var tsn(e);t>n.maxLineLength&&(n.maxLineLengtht,n.maxLinee)})}var unfunction(e,t,n){this.texte,Yt(this,t),this.heightn?n(this):1};un.prototype.lineNofunction(){return H(this)},$e(un);var cn{},hn{};function dn(e,t){if(!e||/^\\\\s*$/.test(e))return null;tt.addModeClass?hn:cn;return te||(tee.replace(/\\\\S+/g,\\\cm-$&\\\))}function fn(e,t){var nne(\\\span\\\,null,null,x?\\\padding-right: .1px\\\:null),r{pre:ne(\\\pre\\\,n,\\\CodeMirror-line\\\),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption(\\\lineWrapping\\\)};t.measure{};for(var i0;i\u003C(t.rest?t.rest.length:0);i++){var oi?t.resti-1:t.line,lvoid 0,l(r.pos0,r.addTokengn,function(e){if(null!tt)return tt;var ty(e,document.createTextNode(\\\AخA\\\)),nle(t,0,1).getBoundingClientRect(),tle(t,1,2).getBoundingClientRect();return te(e),n&&n.left!n.right&&(ttt.right-n.right\u003C3)}(e.display.measure)&&(lVe(o,e.doc.direction))&&(r.addTokenfunction(h,d){return function(e,t,n,r,i,o,l){nn?n+\\\ cm-force-border\\\:\\\cm-force-border\\\;for(var se.pos,as+t.length;;){for(var uvoid 0,c0;c\u003Cd.length&&!((udc).to>s&&u.from\u003Cs);c++);if(u.to>a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),rnull,tt.slice(u.to-s),su.to}}}(r.addToken,l)),r.map,t!e.display.externalMeasured&&H(o));!function(e,t,n){var re.markedSpans,ie.text,o0;if(r)for(var l,s,a,u,c,h,d,fi.length,p0,g1,m\\\\\\,v0;;){if(vp){aucs\\\\\\,hdnull,v1/0;for(var y,bvoid 0,w0;w\u003Cr.length;++w){var xrw,Cx.marker;if(\\\bookmark\\\C.type&&x.fromp&&C.widgetNode)y.push(C);else if(x.from\u003Cp&&(nullx.to||x.to>p||C.collapsed&&x.top&&x.fromp)){if(null!x.to&&x.to!p&&v>x.to&&(vx.to,u\\\\\\),C.className&&(a+\\\ \\\+C.className),C.css&&(s(s?s+\\\;\\\:\\\\\\)+C.css),C.startStyle&&x.fromp&&(c+\\\ \\\+C.startStyle),C.endStyle&&x.tov&&(bb||).push(C.endStyle,x.to),C.title&&((dd||{}).titleC.title),C.attributes)for(var S in C.attributes)(dd||{})SC.attributesS;C.collapsed&&(!h||qt(h.marker,C)\u003C0)&&(hx)}else x.from>p&&v>x.from&&(vx.from)}if(b)for(var L0;L\u003Cb.length;L+2)bL+1v&&(u+\\\ \\\+bL);if(!h||h.fromp)for(var k0;k\u003Cy.length;++k)mn(t,0,yk);if(h&&(h.from||0)p){if(mn(t,(nullh.to?f+1:h.to)-p,h.marker,nullh.from),nullh.to)return;h.top&&(h!1)}}if(f\u003Cp)break;for(var TMath.min(f,v);;){if(m){var M,Np+m.length;if(h||(MT\u003CN?m.slice(0,T-p):m,t.addToken(t,M,l?l+a:a,c,p+M.lengthv?u:\\\\\\,s,d)),T\u003CN){mm.slice(T-p),pT;break}pN,c\\\\\\}mi.slice(o,ong++),ldn(ng++,t.cm.options)}}else for(var O1;O\u003Cn.length;O+2)t.addToken(t,i.slice(o,onO),dn(nO+1,t.cm.options))}(o,r,Dt(e,o,l)),o.styleClasses&&(o.styleClasses.bgClass&&(r.bgClassoe(o.styleClasses.bgClass,r.bgClass||\\\\\\)),o.styleClasses.textClass&&(r.textClassoe(o.styleClasses.textClass,r.textClass||\\\\\\))),0r.map.length&&r.map.push(0,0,r.content.appendChild((le.display.measure,ovoid 0,nullet&&(oM(\\\span\\\,\\\\\\),y(l,M(\\\span\\\,o,document.createTextNode(\\\x\\\))),0!l.firstChild.offsetHeight&&(eto.offsetWidth\u003C1&&2\u003Co.offsetHeight&&!(w&&v\u003C8))),(let?M(\\\span\\\,\\\\\\):M(\\\span\\\,\\\ \\\,null,\\\display: inline-block; width: 1px; margin-right: -1px\\\)).setAttribute(\\\cm-text\\\,\\\\\\),l))),0i?(t.measure.mapr.map,t.measure.cache{}):((t.measure.maps||(t.measure.maps)).push(r.map),(t.measure.caches||(t.measure.caches)).push({}))}return x&&(nr.content.lastChild,(/\\\\bcm-tab\\\\b/.test(n.className)||n.querySelector&&n.querySelector(\\\.cm-tab\\\))&&(r.content.className\\\cm-tab-wrap-hack\\\)),O(e,\\\renderLine\\\,e,t.line,r.pre),r.pre.className&&(r.textClassoe(r.pre.className,r.textClass||\\\\\\)),r}function pn(e){var tM(\\\span\\\,\\\•\\\,\\\cm-invalidchar\\\);return t.title\\\\\\\\\\\u\\\+e.charCodeAt(0).toString(16),t.setAttribute(\\\aria-label\\\,t.title),t}function gn(e,t,n,r,i,o,l){if(t){var se.splitSpaces?function(e,t){if(1\u003Ce.length&&!/ /.test(e))return e;for(var nt,r\\\\\\,i0;i\u003Ce.length;i++){var oe.charAt(i);\\\ \\\!o||!n||i!e.length-1&&32!e.charCodeAt(i+1)||(o\\\ \\\),r+o,n\\\ \\\o}return r}(t,e.trailingSpace):t,ae.cm.state.specialChars,u!1;if(a.test(t))for(var cdocument.createDocumentFragment(),h0;;){a.lastIndexh;var da.exec(t),fd?d.index-h:t.length-h;if(f&&(pdocument.createTextNode(s.slice(h,h+f)),w&&v\u003C9?c.appendChild(M(\\\span\\\,p)):c.appendChild(p),e.map.push(e.pos,e.pos+f,p),e.col+f,e.pos+f),!d)break;h+1+f;var pvoid 0;\\\\\\\t\\\d0?(f(fe.cm.options.tabSize)-e.col%f,(pc.appendChild(M(\\\span\\\,Ce(f),\\\cm-tab\\\))).setAttribute(\\\role\\\,\\\presentation\\\),p.setAttribute(\\\cm-text\\\,\\\\\\\t\\\),e.col+f):(\\\\\\\r\\\d0||\\\\\\\n\\\d0?(pc.appendChild(M(\\\span\\\,\\\\\\\r\\\d0?\\\␍\\\:\\\\\\,\\\cm-invalidchar\\\))).setAttribute(\\\cm-text\\\,d0):((pe.cm.options.specialCharPlaceholder(d0)).setAttribute(\\\cm-text\\\,d0),w&&v\u003C9?c.appendChild(M(\\\span\\\,p)):c.appendChild(p)),e.col+1),e.map.push(e.pos,e.pos+1,p),e.pos++}else e.col+t.length,cdocument.createTextNode(s),e.map.push(e.pos,e.pos+t.length,c),w&&v\u003C9&&(u!0),e.pos+t.length;if(e.trailingSpace32s.charCodeAt(t.length-1),n||r||i||u||o||l){var un||\\\\\\,g(r&&(u+r),i&&(u+i),M(\\\span\\\,c,u,o));if(l)for(var m in l)l.hasOwnProperty(m)&&\\\style\\\!m&&\\\class\\\!m&&g.setAttribute(m,lm);return e.content.appendChild(g)}e.content.appendChild(c)}}function mn(e,t,n,r){var i!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(ii||e.content.appendChild(document.createElement(\\\span\\\))).setAttribute(\\\cm-marker\\\,n.id),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+t,e.trailingSpace!1}function vn(e,t,n){this.linet,this.restfunction(e){for(var t,n;tJt(e);)et.find(1,!0).line,(nn||).push(e);return n}(t),this.sizethis.rest?H(z(this.rest))-n+1:1,this.nodethis.textnull,this.hiddenon(e,t)}function yn(e,t,n){for(var r,it;i\u003Cn;il){var onew vn(e.doc,W(e.doc,i),i),li+o.size;r.push(o)}return r}var bnnull;var wnnull;function b(e,t){var nje(e,t);if(n.length)for(var r,iArray.prototype.slice.call(arguments,2),o(bn?rbn.delayedCallbacks:wn?rwn:(rwn,setTimeout(xn,0)),0);o\u003Cn.length;++o)!function(e){r.push(function(){return ne.apply(null,i)})}(o)}function xn(){var ewn;wnnull;for(var t0;t\u003Ce.length;++t)et()}function Cn(e,t,n,r){for(var i0;i\u003Ct.changes.length;i++){var ot.changesi;if(\\\text\\\o){uaslvoid 0;var le,st,as.text.className,uLn(l,s);s.texts.node&&(s.nodeu.pre),s.text.parentNode.replaceChild(u.pre,s.text),s.textu.pre,u.bgClass!s.bgClass||u.textClass!s.textClass?(s.bgClassu.bgClass,s.textClassu.textClass,kn(l,s)):a&&(s.text.classNamea)}else if(\\\gutter\\\o)Tn(e,t,n,r);else if(\\\class\\\o)kn(e,t);else if(\\\widget\\\o){fdhlcuvoid 0;var ue,ct,lr;c.alignable&&(c.alignablenull);for(var hJ(\\\CodeMirror-linewidget\\\),dc.node.firstChild,fvoid 0;d;df)fd.nextSibling,h.test(d.className)&&c.node.removeChild(d);Mn(u,c,l)}}t.changesnull}function Sn(e){return e.nodee.text&&(e.nodeM(\\\div\\\,null,null,\\\position: relative\\\),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),w&&v\u003C8&&(e.node.style.zIndex2)),e.node}function Ln(e,t){var ne.display.externalMeasured;return n&&n.linet.line?(e.display.externalMeasurednull,t.measuren.measure,n.built):fn(e,t)}function kn(e,t){ee,(i(nt).bgClass?n.bgClass+\\\ \\\+(n.line.bgClass||\\\\\\):n.line.bgClass)&&(i+\\\ CodeMirror-linebackground\\\),n.background?i?n.background.classNamei:(n.background.parentNode.removeChild(n.background),n.backgroundnull):i&&(rSn(n),n.backgroundr.insertBefore(M(\\\div\\\,null,i),r.firstChild),e.display.input.setUneditable(n.background)),t.line.wrapClass?Sn(t).classNamet.line.wrapClass:t.node!t.text&&(t.node.className\\\\\\);var n,r,it.textClass?t.textClass+\\\ \\\+(t.line.textClass||\\\\\\):t.line.textClass;t.text.classNamei||\\\\\\}function Tn(e,t,n,r){t.gutter&&(t.node.removeChild(t.gutter),t.gutternull),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackgroundnull),t.line.gutterClass&&(oSn(t),t.gutterBackgroundM(\\\div\\\,null,\\\CodeMirror-gutter-background \\\+t.line.gutterClass,\\\left: \\\+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\\\px; width: \\\+r.gutterTotalWidth+\\\px\\\),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text));var it.line.gutterMarkers;if(e.options.lineNumbers||i){var oSn(t),lt.gutterM(\\\div\\\,null,\\\CodeMirror-gutter-wrapper\\\,\\\left: \\\+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+\\\px\\\);if(l.setAttribute(\\\aria-hidden\\\,\\\true\\\),e.display.input.setUneditable(l),o.insertBefore(l,t.text),t.line.gutterClass&&(l.className+\\\ \\\+t.line.gutterClass),!e.options.lineNumbers||i&&i\\\CodeMirror-linenumbers\\\||(t.lineNumberl.appendChild(M(\\\div\\\,xt(e.options,n),\\\CodeMirror-linenumber CodeMirror-gutter-elt\\\,\\\left: \\\+r.gutterLeft\\\CodeMirror-linenumbers\\\+\\\px; width: \\\+e.display.lineNumInnerWidth+\\\px\\\))),i)for(var s0;s\u003Ce.display.gutterSpecs.length;++s){var ae.display.gutterSpecss.className,ui.hasOwnProperty(a)&&ia;u&&l.appendChild(M(\\\div\\\,u,\\\CodeMirror-gutter-elt\\\,\\\left: \\\+r.gutterLefta+\\\px; width: \\\+r.gutterWidtha+\\\px\\\))}}}function Mn(e,t,n){if(Nn(e,t.line,t,n,!0),t.rest)for(var r0;r\u003Ct.rest.length;r++)Nn(e,t.restr,t,n,!1)}function Nn(e,t,n,r,i){if(t.widgets)for(var oSn(n),l0,st.widgets;l\u003Cs.length;++l){var asl,uM(\\\div\\\,a.node,\\\CodeMirror-linewidget\\\+(a.className?\\\ \\\+a.className:\\\\\\)),c(a.handleMouseEvents||u.setAttribute(\\\cm-ignore-events\\\,\\\true\\\),dfdhcvoid 0,a),hu,dn,fr;c.noHScroll&&((d.alignable||(d.alignable)).push(h),df.wrapperWidth,h.style.leftf.fixedPos+\\\px\\\,c.coverGutter||(d-f.gutterTotalWidth,h.style.paddingLeftf.gutterTotalWidth+\\\px\\\),h.style.widthd+\\\px\\\),c.coverGutter&&(h.style.zIndex5,h.style.position\\\relative\\\,c.noHScroll||(h.style.marginLeft-f.gutterTotalWidth+\\\px\\\)),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,n.gutter||n.text):o.appendChild(u),b(a,\\\redraw\\\)}}function On(e){if(null!e.height)return e.height;var t,ne.doc.cm;return n?(re(document.body,e.node)||(t\\\position: relative;\\\,e.coverGutter&&(t+\\\margin-left: -\\\+n.display.gutters.offsetWidth+\\\px;\\\),e.noHScroll&&(t+\\\width: \\\+n.display.wrapper.clientWidth+\\\px;\\\),y(n.display.measure,M(\\\div\\\,e.node,null,t))),e.heighte.node.parentNode.offsetHeight):0}function An(e,t){for(var nQe(t);n!e.wrapper;nn.parentNode)if(!n||1n.nodeType&&\\\true\\\n.getAttribute(\\\cm-ignore-events\\\)||n.parentNodee.sizer&&n!e.mover)return 1}function Dn(e){return e.lineSpace.offsetTop}function Wn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Hn(e){if(e.cachedPaddingH)return e.cachedPaddingH;var ty(e.measure,M(\\\pre\\\,\\\x\\\,\\\CodeMirror-line-like\\\)),twindow.getComputedStyle?window.getComputedStyle(t):t.currentStyle,t{left:parseInt(t.paddingLeft),right:parseInt(t.paddingRight)};return isNaN(t.left)||isNaN(t.right)||(e.cachedPaddingHt),t}function Fn(e){return ge-e.display.nativeBarWidth}function Pn(e){return e.display.scroller.clientWidth-Fn(e)-e.display.barWidth}function En(e){return e.display.scroller.clientHeight-Fn(e)-e.display.barHeight}function Rn(e,t,n){if(e.linet)return{map:e.measure.map,cache:e.measure.cache};if(e.rest){for(var r0;r\u003Ce.rest.length;r++)if(e.restrt)return{map:e.measure.mapsr,cache:e.measure.cachesr};for(var i0;i\u003Ce.rest.length;i++)if(H(e.resti)>n)return{map:e.measure.mapsi,cache:e.measure.cachesi,before:!0}}}function zn(e,t,n,r){return Gn(e,Bn(e,t),n,r)}function In(e,t){if(t>e.display.viewFrom&&t\u003Ce.display.viewTo)return e.display.viewmr(e,t);ee.display.externalMeasured;return e&&t>e.lineN&&t\u003Ce.lineN+e.size?e:void 0}function Bn(e,t){var n,r,iH(t),oIn(e,i),e(o&&!o.text?onull:o&&o.changes&&(Cn(e,o,i,hr(e)),e.curOp.forceUpdate!0),o||(ee,rH(ntn(nt)),(ne.display.externalMeasurednew vn(e.doc,n,r)).lineNr,rn.builtfn(e,n),n.textr.pre,y(e.display.lineMeasure,r.pre),on),Rn(o,t,i));return{line:t,view:o,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function Gn(e,t,n,r,i){var o,l(nt.before?-1:n)+(r||\\\\\\);if(t.cache.hasOwnProperty(l))ot.cachel;else{if(t.rect||(t.rectt.view.text.getBoundingClientRect()),!t.hasHeights){var se,at.view,ut.rect,cs.options.lineWrapping,sc&&Pn(s);if(!a.measure.heights||c&&a.measure.width!s){var ha.measure.heights;if(c){a.measure.widths;for(var da.text.firstChild.getClientRects(),f0;f\u003Cd.length-1;f++){var pdf,gdf+1;2\u003CMath.abs(p.bottom-g.bottom)&&h.push((p.bottom+g.top)/2-u.top)}}h.push(u.bottom-u.top)}t.hasHeights!0}(ofunction(e,t,n,r){var i,oKn(t.map,n,r),lo.node,so.start,ao.end,uo.collapse;if(3l.nodeType){for(var c0;c\u003C4;c++){for(;s&&De(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a\u003Co.coverEnd&&De(t.line.text.charAt(o.coverStart+a));)++a;if((iw&&v\u003C9&&0s&&ao.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():function(e,t){var nVn;if(\\\left\\\t)for(var r0;r\u003Ce.length&&(ner).leftn.right;r++);else for(var ie.length-1;0\u003Ci&&(nei).leftn.right;i--);return n}(le(l,s,a).getClientRects(),r)).left||i.right||0s)break;as,s-1,u\\\right\\\}w&&v\u003C11&&(ifunction(e,t){if(!window.screen||nullscreen.logicalXDPI||screen.logicalXDPIscreen.deviceXDPI||!function(e){if(null!lt)return lt;var t(ey(e,M(\\\span\\\,\\\x\\\))).getBoundingClientRect(),ele(e,0,1).getBoundingClientRect();return lt1\u003CMath.abs(t.left-e.left)}(e))return t;var escreen.logicalXDPI/screen.deviceXDPI,nscreen.logicalYDPI/screen.deviceYDPI;return{left:t.left*e,right:t.right*e,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else 0\u003Cs&&(ur\\\right\\\),ie.options.lineWrapping&&1\u003C(nl.getClientRects()).length?n\\\right\\\r?n.length-1:0:l.getBoundingClientRect();!(w&&v\u003C9)||s||i&&(i.left||i.right)||(nl.parentNode.getClientRects()0,in?{left:n.left,right:n.left+cr(e.display),top:n.top,bottom:n.bottom}:Vn);for(var ni.top-t.rect.top,hi.bottom-t.rect.top,d(n+h)/2,ft.view.measure.heights,p0;p\u003Cf.length-1&&!(d\u003Cfp);p++);var gp?fp-1:0,mfp,g{left:(\\\right\\\u?i.right:i.left)-t.rect.left,right:(\\\left\\\u?i.left:i.right)-t.rect.left,top:g,bottom:m};i.left||i.right||(g.bogus!0);e.options.singleCursorHeightPerLine||(g.rtopn,g.rbottomh);return g}(e,t,n,r)).bogus||(t.cachelo)}return{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Un,Vn{left:0,right:0,top:0,bottom:0};function Kn(e,t,n){for(var r,i,o,l,s,a,u0;u\u003Ce.length;u+3)if(seu,aeu+1,t\u003Cs?(i0,o1,l\\\left\\\):t\u003Ca?o(it-s)+1:(ue.length-3||ta&&eu+3>t)&&(i(oa-s)-1,a\u003Ct&&(l\\\right\\\)),null!i){if(reu+2,sa&&n(r.insertLeft?\\\left\\\:\\\right\\\)&&(ln),\\\left\\\n&&0i)for(;u&&eu-2eu-3&&eu-1.insertLeft;)re2+(u-3),l\\\left\\\;if(\\\right\\\n&&ia-s)for(;u\u003Ce.length-3&&eu+3eu+4&&!eu+5.insertLeft;)re(u+3)+2,l\\\right\\\;break}return{node:r,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function jn(e){if(e.measure&&(e.measure.cache{},e.measure.heightsnull,e.rest))for(var t0;t\u003Ce.rest.length;t++)e.measure.cachest{}}function Xn(e){e.display.externalMeasurenull,te(e.display.lineMeasure);for(var t0;t\u003Ce.display.view.length;t++)jn(e.display.viewt)}function Yn(e){Xn(e),e.display.cachedCharWidthe.display.cachedTextHeighte.display.cachedPaddingHnull,e.options.lineWrapping||(e.display.maxLineChanged!0),e.display.lineNumCharsnull}function $n(e){return m&&$?-(e.body.getBoundingClientRect().left-parseInt(getComputedStyle(e.body).marginLeft)):e.defaultView.pageXOffset||(e.documentElement||e.body).scrollLeft}function _n(e){return m&&$?-(e.body.getBoundingClientRect().top-parseInt(getComputedStyle(e.body).marginTop)):e.defaultView.pageYOffset||(e.documentElement||e.body).scrollTop}function qn(e){var ttn(e).widgets,n0;if(t)for(var r0;r\u003Ct.length;++r)tr.above&&(n+On(tr));return n}function Zn(e,t,n,r,i){if(i||(iqn(t),n.top+i,n.bottom+i),\\\line\\\r)return n;rr||\\\local\\\;iln(t);return\\\local\\\r?i+Dn(e.display):i-e.display.viewOffset,\\\page\\\!r&&\\\window\\\!r||(i+(te.display.lineSpace.getBoundingClientRect()).top+(\\\window\\\r?0:_n(ae(e))),tt.left+(\\\window\\\r?0:$n(ae(e))),n.left+t,n.right+t),n.top+i,n.bottom+i,n}function Qn(e,t,n){if(\\\div\\\n)return t;var rt.left,tt.top,n(\\\page\\\n?(r-$n(ae(e)),t-_n(ae(e))):\\\local\\\!n&&n||(r+(ne.display.sizer.getBoundingClientRect()).left,t+n.top),e.display.lineSpace.getBoundingClientRect());return{left:r-n.left,top:t-n.top}}function Jn(e,t,n,r,i){return Zn(e,rr||W(e.doc,t.line),zn(e,r,t.ch,i),n)}function er(n,e,r,i,o,l){function s(e,t){eGn(n,o,e,t?\\\right\\\:\\\left\\\,l);return t?e.lefte.right:e.righte.left,Zn(n,i,e,r)}ii||W(n.doc,e.line),oo||Bn(n,i);var aVe(i,n.doc.direction),te.ch,ee.sticky;if(t>i.text.length?(ti.text.length,e\\\before\\\):t\u003C0&&(t0,e\\\after\\\),!a)return s(\\\before\\\e?t-1:t,\\\before\\\e);function u(e,t,n){return s(n?e-1:e,1at.level!n)}var cPe(a,t,e),hFe,cu(t,c,\\\before\\\e);return null!h&&(c.otheru(t,h,\\\before\\\!e)),c}function tr(e,t){var n0,t(tE(e.doc,t),e.options.lineWrapping||(ncr(e.display)*t.ch),W(e.doc,t.line)),eln(t)+Dn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function nr(e,t,n,r,i){eF(e,t,n);return e.xReli,r&&(e.outsider),e}function rr(e,t,n){var re.doc;if((n+e.display.viewOffset)\u003C0)return nr(r.first,0,null,-1,-1);var ibt(r,n),or.first+r.size-1;if(o\u003Ci)return nr(r.first+r.size-1,W(r,o).text.length,null,1,1);t\u003C0&&(t0);for(var lW(r,i);;){var sfunction(n,e,t,r,i){i-ln(e);var oBn(n,e),lqn(e),s0,ae.text.length,u!0,cVe(e,n.doc.direction);c&&(c(n.options.lineWrapping?ar:sr)(n,e,t,o,c,r,i),u1!c.level,su?c.from:c.to-1,au?c.to:c.from-1);var hnull,dnull,cHe(function(e){var tGn(n,o,e);return t.top+l,t.bottom+l,lr(t,r,i,!1)&&(t.top\u003Ci&&t.left\u003Cr&&(he,dt),1)},s,a),f!1;{var p,g;d?(pr-d.left\u003Cd.right-r,ch+((gpu)?0:1),gg?\\\after\\\:\\\before\\\,pp?d.left:d.right):(u||c!a&&c!s||c++,g0c||c!e.text.length&&Gn(n,o,c-(u?1:0)).bottom+l\u003Ciu?\\\after\\\:\\\before\\\,aer(n,F(t,c,g),\\\line\\\,e,o),pa.left,fi\u003Ca.top?-1:i>a.bottom?1:0)}return cWe(e.text,c,1),nr(t,c,g,f,r-p)}(e,l,i,t,n),afunction(e,t){var n,rGt&&e.markedSpans;if(r)for(var i0;i\u003Cr.length;++i){var ori;o.marker.collapsed&&(nullo.from||o.from\u003Ct)&&(nullo.to||o.to>t)&&(!n||qt(n,o.marker)\u003C0)&&(no.marker)}return n}(l,s.ch+(0\u003Cs.xRel||0\u003Cs.outside?1:0));if(!a)return s;sa.find(1);if(s.linei)return s;lW(r,is.line)}}function ir(t,e,n,r){r-qn(e);var ee.text.length,iHe(function(e){return Gn(t,n,e-1).bottom\u003Cr},e,0);return{begin:i,end:He(function(e){return Gn(t,n,e).top>r},i,e)}}function or(e,t,n,r){return ir(e,t,nn||Bn(e,t),Zn(e,t,Gn(e,n,r),\\\line\\\).top)}function lr(e,t,n,r){return!(e.bottom\u003Cn)&&(e.top>n||(r?e.left:e.right)>t)}function sr(n,r,i,o,l,s,a){var e,tHe(function(e){var ele,t1!e.level;return lr(er(n,F(i,t?e.to:e.from,t?\\\before\\\:\\\after\\\),\\\line\\\,r,o),s,a,!0)},0,l.length-1),ult;return 0\u003Ct&&(e1!u.level,lr(eer(n,F(i,e?u.from:u.to,e?\\\after\\\:\\\before\\\),\\\line\\\,r,o),s,a,!0)&&e.top>a&&(ult-1)),u}function ar(e,t,n,r,i,o,l){for(var lir(e,t,r,l),sl.begin,al.end,u(/\\\\s/.test(t.text.charAt(a-1))&&a--,null),cnull,h0;h\u003Ci.length;h++){var d,fih;f.from>a||f.to\u003Cs||(d(dGn(e,r,1!f.level?Math.min(a,f.to)-1:Math.max(s,f.from)).right)\u003Co?o-d+1e9:d-o,(!u||d\u003Cc)&&(uf,cd))}return u(u(uu||ii.length-1).from\u003Cs?{from:s,to:u.to,level:u.level}:u).to>a?{from:u.from,to:a,level:u.level}:u}function ur(e){if(null!e.cachedTextHeight)return e.cachedTextHeight;if(nullUn){UnM(\\\pre\\\,null,\\\CodeMirror-line-like\\\);for(var t0;t\u003C49;++t)Un.appendChild(document.createTextNode(\\\x\\\)),Un.appendChild(M(\\\br\\\));Un.appendChild(document.createTextNode(\\\x\\\))}y(e.measure,Un);var nUn.offsetHeight/50;return 3\u003Cn&&(e.cachedTextHeightn),te(e.measure),n||1}function cr(e){if(null!e.cachedCharWidth)return e.cachedCharWidth;var tM(\\\span\\\,\\\xxxxxxxxxx\\\),nM(\\\pre\\\,t,\\\CodeMirror-line-like\\\),n(y(e.measure,n),t.getBoundingClientRect()),t(n.right-n.left)/10;return 2\u003Ct&&(e.cachedCharWidtht),t||10}function hr(e){for(var te.display,n{},r{},it.gutters.clientLeft,ot.gutters.firstChild,l0;o;oo.nextSibling,++l){var se.display.gutterSpecsl.className;nso.offsetLeft+o.clientLeft+i,rso.clientWidth}return{fixedPos:dr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function dr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function fr(r){var iur(r.display),or.options.lineWrapping,lo&&Math.max(5,r.display.scroller.clientWidth/cr(r.display)-3);return function(e){if(on(r.doc,e))return 0;var t0;if(e.widgets)for(var n0;n\u003Ce.widgets.length;n++)e.widgetsn.height&&(t+e.widgetsn.height);return o?t+(Math.ceil(e.text.length/l)||1)*i:t+i}}function pr(e){var te.doc,nfr(e);t.iter(function(e){var tn(e);t!e.height&&yt(e,t)})}function gr(e,t,n,r){var ie.display;if(!n&&\\\true\\\Qe(t).getAttribute(\\\cm-not-content\\\))return null;var o,l,ni.lineSpace.getBoundingClientRect();try{ot.clientX-n.left,lt.clientY-n.top}catch(e){return null}irr(e,o,l);return r&&0\u003Ci.xRel&&(tW(e.doc,i.line).text).lengthi.ch&&(nS(t,t.length,e.options.tabSize)-t.length,iF(i.line,Math.max(0,Math.round((o-Hn(e.display).left)/cr(e.display))-n))),i}function mr(e,t){if(t>e.display.viewTo)return null;if((t-e.display.viewFrom)\u003C0)return null;for(var ne.display.view,r0;r\u003Cn.length;r++)if((t-nr.size)\u003C0)return r}function R(e,t,n,r){nullt&&(te.doc.first),nulln&&(ne.doc.first+e.doc.size);var i,oe.display,l((rr||0)&&n\u003Co.viewTo&&(nullo.updateLineNumbers||o.updateLineNumbers>t)&&(o.updateLineNumberst),e.curOp.viewChanged!0,t>o.viewTo?Gt&&nn(e.doc,t)\u003Co.viewTo&&yr(e):n\u003Co.viewFrom?Gt&&rn(e.doc,n+r)>o.viewFrom?yr(e):(o.viewFrom+r,o.viewTo+r):t\u003Co.viewFrom&&n>o.viewTo?yr(e):t\u003Co.viewFrom?(lbr(e,n,n+r,1))?(o.viewo.view.slice(l.index),o.viewFroml.lineN,o.viewTo+r):yr(e):n>o.viewTo?(lbr(e,t,t,-1))?(o.viewo.view.slice(0,l.index),o.viewTol.lineN):yr(e):(lbr(e,t,t,-1),ibr(e,n,n+r,1),l&&i?(o.viewo.view.slice(0,l.index).concat(yn(e,l.lineN,i.lineN)).concat(o.view.slice(i.index)),o.viewTo+r):yr(e)),o.externalMeasured);l&&(n\u003Cl.lineN?l.lineN+r:t\u003Cl.lineN+l.size&&(o.externalMeasurednull))}function vr(e,t,n){e.curOp.viewChanged!0;var re.display,ie.display.externalMeasured;i&&t>i.lineN&&t\u003Ci.lineN+i.size&&(r.externalMeasurednull),t\u003Cr.viewFrom||t>r.viewTo||null!(ir.viewmr(e,t)).node&&-1L(ri.changes||(i.changes),n)&&r.push(n)}function yr(e){e.display.viewFrome.display.viewToe.doc.first,e.display.view,e.display.viewOffset0}function br(e,t,n,r){var i,omr(e,t),le.display.view;if(!Gt||ne.doc.first+e.doc.size)return{index:o,lineN:n};for(var se.display.viewFrom,a0;a\u003Co;a++)s+la.size;if(s!t){if(0\u003Cr){if(ol.length-1)return null;is+lo.size-t,o++}else is-t;t+i,n+i}for(;nn(e.doc,n)!n;){if(o(r\u003C0?0:l.length-1))return null;n+r*lo-(r\u003C0?1:0).size,o+r}return{index:o,lineN:n}}function wr(e){for(var te.display.view,n0,r0;r\u003Ct.length;r++){var itr;i.hidden||i.node&&!i.changes||++n}return n}function xr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Cr(e,t){void 0t&&(t!0);var ne.doc,r{},ir.cursorsdocument.createDocumentFragment(),or.selectiondocument.createDocumentFragment(),le.options.$customCursor;l&&(t!0);for(var s,a,u,c0;c\u003Cn.sel.ranges.length;c++)!t&&cn.sel.primIndex||((sn.sel.rangesc).from().line>e.display.viewTo||s.to().line\u003Ce.display.viewFrom||(as.empty(),l?(ul(e,s))&&Sr(e,u,i):(a||e.options.showCursorWhenSelecting)&&Sr(e,s.head,i),a||function(i,e,t){var ni.display,oi.doc,ldocument.createDocumentFragment(),rHn(i.display),Sr.left,LMath.max(n.sizerWidth,Pn(i)-n.sizer.offsetLeft)-r.right,k\\\ltr\\\o.direction;function T(e,t,n,r){t\u003C0&&(t0),tMath.round(t),rMath.round(r),l.appendChild(M(\\\div\\\,null,\\\CodeMirror-selected\\\,\\\position: absolute; left: \\\+e+\\\px;\\\\n top: \\\+t+\\\px; width: \\\+(nulln?L-e:n)+\\\px;\\\\n height: \\\+(r-t)+\\\px\\\))}function s(n,g,m){var v,y,rW(o,n),br.text.length;function w(e,t){return Jn(i,F(n,e),\\\div\\\,r,t)}function x(e,t,n){eor(i,r,null,e),t\\\ltr\\\t(\\\after\\\n)?\\\left\\\:\\\right\\\;return w(\\\after\\\n?e.begin:e.end-(/\\\\s/.test(r.text.charAt(e.end-1))?2:1),t)t}var CVe(r,o.direction);return function(e,t,n,r){if(!e)return r(t,n,\\\ltr\\\,0);for(var i!1,o0;o\u003Ce.length;++o){var leo;(l.from\u003Cn&&l.to>t||tn&&l.tot)&&(r(Math.max(l.from,t),Math.min(l.to,n),1l.level?\\\rtl\\\:\\\ltr\\\,o),i!0)}i||r(t,n,\\\ltr\\\)}(C,g||0,nullm?b:m,function(e,t,n,r){var i,o,l,s,a,u\\\ltr\\\n,cw(e,u?\\\left\\\:\\\right\\\),hw(t-1,u?\\\right\\\:\\\left\\\),dnullg&&0e,fnullm&&tb,p0r,r!C||rC.length-1;h.top-c.top\u003C3?(i(k?d:f)&&p?S:(u?c:h).left,a(k?f:d)&&r?L:(u?h:c).right,T(i,c.top,a-i,c.bottom)):(au?(ok&&d&&p?S:c.left,lk?L:x(e,n,\\\before\\\),sk?S:x(t,n,\\\after\\\),k&&f&&r?L:h.right):(ok?x(e,n,\\\before\\\):S,l!k&&d&&p?L:c.right,s!k&&f&&r?S:h.left,k?x(t,n,\\\after\\\):L),T(o,c.top,l-o,c.bottom),c.bottom\u003Ch.top&&T(S,c.bottom,null,h.top),T(s,h.top,a-s,h.bottom)),(!v||Lr(c,v)\u003C0)&&(vc),Lr(h,v)\u003C0&&(vh),(!y||Lr(c,y)\u003C0)&&(yc),Lr(h,y)\u003C0&&(yh)}),{start:v,end:y}}ne.from(),re.to();{var a;n.liner.line?s(n.line,n.ch,r.ch):(eW(o,n.line),aW(o,r.line),atn(e)tn(a),ns(n.line,n.ch,a?e.text.length+1:null).end,es(r.line,a?0:null,r.ch).start,a&&(n.top\u003Ce.top-2?(T(n.right,n.top,null,n.bottom),T(S,e.top,e.left,e.bottom)):T(n.right,n.top,e.left-n.right,n.bottom)),n.bottom\u003Ce.top&&T(S,n.bottom,null,e.top))}t.appendChild(l)}(e,s,o)));return r}function Sr(e,t,n){var rer(e,t,\\\div\\\,null,null,!e.options.singleCursorHeightPerLine),in.appendChild(M(\\\div\\\,\\\ \\\,\\\CodeMirror-cursor\\\));i.style.leftr.left+\\\px\\\,i.style.topr.top+\\\px\\\,i.style.heightMath.max(0,r.bottom-r.top)*e.options.cursorHeight+\\\px\\\,/\\\\bcm-fat-cursor\\\\b/.test(e.getWrapperElement().className)&&(t(tJn(e,t,\\\div\\\,null,null)).right-t.left,i.style.width(0\u003Ct?t:e.defaultCharWidth())+\\\px\\\),r.other&&((in.appendChild(M(\\\div\\\,\\\ \\\,\\\CodeMirror-cursor CodeMirror-secondarycursor\\\))).style.display\\\\\\,i.style.leftr.other.left+\\\px\\\,i.style.topr.other.top+\\\px\\\,i.style.height.85*(r.other.bottom-r.other.top)+\\\px\\\)}function Lr(e,t){return e.top-t.top||e.left-t.left}function kr(e){var t,n;e.state.focused&&(te.display,clearInterval(t.blinker),n!0,t.cursorDiv.style.visibility\\\\\\,0\u003Ce.options.cursorBlinkRate?t.blinkersetInterval(function(){e.hasFocus()||Or(e),t.cursorDiv.style.visibility(n!n)?\\\\\\:\\\hidden\\\},e.options.cursorBlinkRate):e.options.cursorBlinkRate\u003C0&&(t.cursorDiv.style.visibility\\\hidden\\\))}function Tr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Nr(e))}function Mr(e){e.state.delayingBlurEvent!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent!1,e.state.focused&&Or(e))},100)}function Nr(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent!1),\\\nocursor\\\!e.options.readOnly&&(e.state.focused||(O(e,\\\focus\\\,e,t),e.state.focused!0,ie(e.display.wrapper,\\\CodeMirror-focused\\\),e.curOp||e.display.selForContextMenue.doc.sel||(e.display.input.reset(),x&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),kr(e))}function Or(e,t){e.state.delayingBlurEvent||(e.state.focused&&(O(e,\\\blur\\\,e,t),e.state.focused!1,ee(e.display.wrapper,\\\CodeMirror-focused\\\)),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift!1)},150))}function Ar(e){for(var te.display,nt.lineDiv.offsetTop,rMath.max(0,t.scroller.getBoundingClientRect().top),it.lineDiv.getBoundingClientRect().top,o0,l0;l\u003Ct.view.length;l++){var st.viewl,ae.options.lineWrapping,uvoid 0,c0;if(!s.hidden){i+s.line.height,w&&v\u003C8?(u(hs.node.offsetTop+s.node.offsetHeight)-n,nh):(u(hs.node.getBoundingClientRect()).bottom-h.top,!a&&s.text.firstChild&&(cs.text.firstChild.getBoundingClientRect().right-h.left-1));var h,as.line.height-u;if((.005\u003Ca||a\u003C-.005)&&(i\u003Cr&&(o-a),yt(s.line,u),Dr(s.line),s.rest))for(var d0;d\u003Cs.rest.length;d++)Dr(s.restd);c>e.display.sizerWidth&&((aMath.ceil(c/cr(e.display)))>e.display.maxLineLength&&(e.display.maxLineLengtha,e.display.maxLines.line,e.display.maxLineChanged!0))}}2\u003CMath.abs(o)&&(t.scroller.scrollTop+o)}function Dr(e){if(e.widgets)for(var t0;t\u003Ce.widgets.length;++t){var ne.widgetst,rn.node.parentNode;r&&(n.heightr.offsetHeight)}}function Wr(e,t,n){var r,in&&null!n.top?Math.max(0,n.top):e.scroller.scrollTop,iMath.floor(i-Dn(e)),on&&null!n.bottom?n.bottom:i+e.wrapper.clientHeight,ibt(t,i),obt(t,o);return n&&n.ensure&&(rn.ensure.from.line,nn.ensure.to.line,r\u003Ci?obt(t,ln(W(t,ir))+e.wrapper.clientHeight):Math.min(n,t.lastLine())>o&&(ibt(t,ln(W(t,n))-e.wrapper.clientHeight),on)),{from:i,to:Math.max(o,i+1)}}function Hr(e,t){var ne.display,rur(e.display),i(t.top\u003C0&&(t.top0),(e.curOp&&null!e.curOp.scrollTop?e.curOp:n.scroller).scrollTop),oEn(e),l{},s(t.bottom-t.top>o&&(t.bottomt.top+o),e.doc.height+Wn(n)),at.top\u003Cr,rt.bottom>s-r,r(t.top\u003Ci?l.scrollTopa?0:t.top:t.bottom>i+o&&((aMath.min(t.top,(r?s:t.bottom)-o))!i&&(l.scrollTopa)),e.options.fixedGutter?0:n.gutters.offsetWidth),se.curOp&&null!e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-r,oPn(e)-n.gutters.offsetWidth,it.right-t.left>o;return i&&(t.rightt.left+o),t.left\u003C10?l.scrollLeft0:t.left\u003Cs?l.scrollLeftMath.max(0,t.left+r-(i?0:10)):t.right>o+s-3&&(l.scrollLeftt.right+(i?0:10)-o),l}function Fr(e,t){null!t&&(Rr(e),e.curOp.scrollTop(nulle.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function Pr(e){Rr(e);var te.getCursor();e.curOp.scrollToPos{from:t,to:t,margin:e.options.cursorScrollMargin}}function Er(e,t,n){nullt&&nulln||Rr(e),null!t&&(e.curOp.scrollLeftt),null!n&&(e.curOp.scrollTopn)}function Rr(e){var te.curOp.scrollToPos;t&&(e.curOp.scrollToPosnull,zr(e,tr(e,t.from),tr(e,t.to),t.margin))}function zr(e,t,n,r){tHr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Er(e,t.scrollLeft,t.scrollTop)}function Ir(e,t){Math.abs(e.doc.scrollTop-t)\u003C2||(d||ri(e,{top:t}),Br(e,t,!0),d&&ri(e),Qr(e,100))}function Br(e,t,n){tMath.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTopt&&!n||(e.doc.scrollTopt,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!t&&(e.display.scroller.scrollTopt))}function Gr(e,t,n,r){tMath.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?te.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)\u003C2)&&!r||(e.doc.scrollLeftt,li(e),e.display.scroller.scrollLeft!t&&(e.display.scroller.scrollLeftt),e.display.scrollbars.setScrollLeft(t))}function Ur(e){var te.display,nt.gutters.offsetWidth,rMath.round(e.doc.height+Wn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Fn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function Vr(e,t,n){this.cmn;var rthis.vertM(\\\div\\\,M(\\\div\\\,null,null,\\\min-width: 1px\\\),\\\CodeMirror-vscrollbar\\\),ithis.horizM(\\\div\\\,M(\\\div\\\,null,null,\\\height: 100%; min-height: 1px\\\),\\\CodeMirror-hscrollbar\\\);r.tabIndexi.tabIndex-1,e(r),e(i),k(r,\\\scroll\\\,function(){r.clientHeight&&t(r.scrollTop,\\\vertical\\\)}),k(i,\\\scroll\\\,function(){i.clientWidth&&t(i.scrollLeft,\\\horizontal\\\)}),this.checkedZeroWidth!1,w&&v\u003C8&&(this.horiz.style.minHeightthis.vert.style.minWidth\\\18px\\\)}function Kr(){}Vr.prototype.updatefunction(e){var t,ne.scrollWidth>e.clientWidth+1,re.scrollHeight>e.clientHeight+1,ie.nativeBarWidth;return r?(this.vert.style.display\\\block\\\,this.vert.style.bottomn?i+\\\px\\\:\\\0\\\,te.viewHeight-(n?i:0),this.vert.firstChild.style.heightMath.max(0,e.scrollHeight-e.clientHeight+t)+\\\px\\\):(this.vert.scrollTop0,this.vert.style.display\\\\\\,this.vert.firstChild.style.height\\\0\\\),n?(this.horiz.style.display\\\block\\\,this.horiz.style.rightr?i+\\\px\\\:\\\0\\\,this.horiz.style.lefte.barLeft+\\\px\\\,te.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.widthMath.max(0,e.scrollWidth-e.clientWidth+t)+\\\px\\\):(this.horiz.style.display\\\\\\,this.horiz.firstChild.style.width\\\0\\\),!this.checkedZeroWidth&&0\u003Ce.clientHeight&&(0i&&this.zeroWidthHack(),this.checkedZeroWidth!0),{right:r?i:0,bottom:n?i:0}},Vr.prototype.setScrollLeftfunction(e){this.horiz.scrollLeft!e&&(this.horiz.scrollLefte),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\\\horiz\\\)},Vr.prototype.setScrollTopfunction(e){this.vert.scrollTop!e&&(this.vert.scrollTope),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\\\vert\\\)},Vr.prototype.zeroWidthHackfunction(){this.horiz.style.heightthis.vert.style.widthC&&!c?\\\12px\\\:\\\18px\\\,this.horiz.style.visibilitythis.vert.style.visibility\\\hidden\\\,this.disableHoriznew pe,this.disableVertnew pe},Vr.prototype.enableZeroWidthBarfunction(n,r,i){n.style.visibility\\\\\\,r.set(1e3,function e(){var tn.getBoundingClientRect();(\\\vert\\\i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!n?n.style.visibility\\\hidden\\\:r.set(1e3,e)})},Vr.prototype.clearfunction(){var ethis.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};function jr(e,t){tt||Ur(e);var ne.display.barWidth,re.display.barHeight;Xr(e,t);for(var i0;i\u003C4&&n!e.display.barWidth||r!e.display.barHeight;i++)n!e.display.barWidth&&e.options.lineWrapping&&Ar(e),Xr(e,Ur(e)),ne.display.barWidth,re.display.barHeight}function Xr(e,t){var ne.display,rn.scrollbars.update(t);n.sizer.style.paddingRight(n.barWidthr.right)+\\\px\\\,n.sizer.style.paddingBottom(n.barHeightr.bottom)+\\\px\\\,n.heightForcer.style.borderBottomr.bottom+\\\px solid transparent\\\,r.right&&r.bottom?(n.scrollbarFiller.style.display\\\block\\\,n.scrollbarFiller.style.heightr.bottom+\\\px\\\,n.scrollbarFiller.style.widthr.right+\\\px\\\):n.scrollbarFiller.style.display\\\\\\,r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display\\\block\\\,n.gutterFiller.style.heightr.bottom+\\\px\\\,n.gutterFiller.style.widtht.gutterWidth+\\\px\\\):n.gutterFiller.style.display\\\\\\}Kr.prototype.updatefunction(){return{bottom:0,right:0}},Kr.prototype.setScrollLeftfunction(){},Kr.prototype.setScrollTopfunction(){},Kr.prototype.clearfunction(){};var Yr{native:Vr,null:Kr};function $r(n){n.display.scrollbars&&(n.display.scrollbars.clear(),n.display.scrollbars.addClass&&ee(n.display.wrapper,n.display.scrollbars.addClass)),n.display.scrollbarsnew Yrn.options.scrollbarStyle(function(e){n.display.wrapper.insertBefore(e,n.display.scrollbarFiller),k(e,\\\mousedown\\\,function(){n.state.focused&&setTimeout(function(){return n.display.input.focus()},0)}),e.setAttribute(\\\cm-not-content\\\,\\\true\\\)},function(e,t){(\\\horizontal\\\t?Gr:Ir)(n,e)},n),n.display.scrollbars.addClass&&ie(n.display.wrapper,n.display.scrollbars.addClass)}var _r0;function qr(e){e.curOp{cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++_r,markArrays:null},ee.curOp,bn?bn.ops.push(e):e.ownsGroupbn{ops:e,delayedCallbacks:}}function Zr(e){ee.curOp;if(e){var tfunction(e){for(var t0;t\u003Ce.ops.length;t++)e.opst.cm.curOpnull;for(var ne.ops,r0;r\u003Cn.length;r++){loivoid 0;var inr,oi.cm,lo.display;(function(e){var te.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidtht.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.heightFn(e)+\\\px\\\,t.sizer.style.marginBottom-t.nativeBarWidth+\\\px\\\,t.sizer.style.borderRightWidthFn(e)+\\\px\\\,t.scrollbarsClipped!0)})(o),i.updateMaxLine&&an(o),i.mustUpdatei.viewChanged||i.forceUpdate||null!i.scrollTop||i.scrollToPos&&(i.scrollToPos.from.line\u003Cl.viewFrom||i.scrollToPos.to.line>l.viewTo)||l.maxLineChanged&&o.options.lineWrapping,i.updatei.mustUpdate&&new ei(o,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}for(var s0;s\u003Cn.length;s++){avoid 0;var ans;a.updatedDisplaya.mustUpdate&&ti(a.cm,a.update)}for(var u0;u\u003Cn.length;u++){cvoid 0;hvoid 0;dvoid 0;var cnu;var hc.cm,dh.display;c.updatedDisplay&&Ar(h);c.barMeasureUr(h),d.maxLineChanged&&!h.options.lineWrapping&&(c.adjustWidthTozn(h,d.maxLine,d.maxLine.text.length).left+3,h.display.sizerWidthc.adjustWidthTo,c.barMeasure.scrollWidthMath.max(d.scroller.clientWidth,d.sizer.offsetLeft+c.adjustWidthTo+Fn(h)+h.display.barWidth),c.maxScrollLeftMath.max(0,d.sizer.offsetLeft+c.adjustWidthTo-Pn(h)));(c.updatedDisplay||c.selectionChanged)&&(c.preparedSelectiond.input.prepareSelection())}for(var f0;f\u003Cn.length;f++){pvoid 0;gvoid 0;mvoid 0;var pnf;var gp.cm;null!p.adjustWidthTo&&(g.display.sizer.style.minWidthp.adjustWidthTo+\\\px\\\,p.maxScrollLeft\u003Cg.doc.scrollLeft&&Gr(g,Math.min(g.display.scroller.scrollLeft,p.maxScrollLeft),!0),g.display.maxLineChanged!1);var mp.focus&&p.focusN(ue(g));p.preparedSelection&&g.display.input.showSelection(p.preparedSelection,m);!p.updatedDisplay&&p.startHeightg.doc.height||jr(g,p.barMeasure);p.updatedDisplay&&oi(g,p.barMeasure);p.selectionChanged&&kr(g);g.state.focused&&p.updateInput&&g.display.input.reset(p.typing);m&&Tr(p.cm)}for(var v,y0;y\u003Cn.length;y++){bvoid 0;wvoid 0;xvoid 0;Cvoid 0;vvoid 0;Svoid 0;Lvoid 0;kvoid 0;Tvoid 0;var bny;var wb.cm,xw.display,Cw.doc;b.updatedDisplay&&ni(w,b.update);nullx.wheelStartX||nullb.scrollTop&&nullb.scrollLeft&&!b.scrollToPos||(x.wheelStartXx.wheelStartYnull);null!b.scrollTop&&Br(w,b.scrollTop,b.forceScroll);null!b.scrollLeft&&Gr(w,b.scrollLeft,!0,!0);b.scrollToPos&&(vfunction(e,t,n,r){nullr&&(r0),e.options.lineWrapping||t!n||(n\\\before\\\t.sticky?F(t.line,t.ch+1,\\\before\\\):t,tt.ch?F(t.line,\\\before\\\t.sticky?t.ch-1:t.ch,\\\after\\\):t);for(var i0;i\u003C5;i++){var o,l!1,ser(e,t),an&&n!t?er(e,n):s,sHr(e,o{left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-r,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+r}),ae.doc.scrollTop,ue.doc.scrollLeft;if(null!s.scrollTop&&(Ir(e,s.scrollTop),1\u003CMath.abs(e.doc.scrollTop-a)&&(l!0)),null!s.scrollLeft&&(Gr(e,s.scrollLeft),1\u003CMath.abs(e.doc.scrollLeft-u)&&(l!0)),!l)break}return o}(w,E(C,b.scrollToPos.from),E(C,b.scrollToPos.to),b.scrollToPos.margin),function(e,t){var n,r,i,o;A(e,\\\scrollCursorIntoView\\\)||(o(ne.display).sizer.getBoundingClientRect(),rnull,in.wrapper.ownerDocument,t.top+o.top\u003C0?r!0:t.bottom+o.top>(i.defaultView.innerHeight||i.documentElement.clientHeight)&&(r!1),nullr||X||(oM(\\\div\\\,\\\\\\,null,\\\position: absolute;\\\\n top: \\\+(t.top-n.viewOffset-Dn(e.display))+\\\px;\\\\n height: \\\+(t.bottom-t.top+Fn(e)+n.barHeight)+\\\px;\\\\n left: \\\+t.left+\\\px; width: \\\+Math.max(2,t.right-t.left)+\\\px;\\\),e.display.lineSpace.appendChild(o),o.scrollIntoView(r),e.display.lineSpace.removeChild(o)))}(w,v));var Sb.maybeHiddenMarkers,Lb.maybeUnhiddenMarkers;if(S)for(var k0;k\u003CS.length;++k)Sk.lines.length||O(Sk,\\\hide\\\);if(L)for(var T0;T\u003CL.length;++T)LT.lines.length&&O(LT,\\\unhide\\\);x.wrapper.offsetHeight&&(C.scrollTopw.display.scroller.scrollTop);b.changeObjs&&O(w,\\\changes\\\,w,b.changeObjs);b.update&&b.update.finish()}};if(ee.ownsGroup)try{var ne,rn.delayedCallbacks,i0;do{for(;i\u003Cr.length;i++)ri.call(null);for(var o0;o\u003Cn.ops.length;o++){var ln.opso;if(l.cursorActivityHandlers)for(;l.cursorActivityCalled\u003Cl.cursorActivityHandlers.length;)l.cursorActivityHandlersl.cursorActivityCalled++.call(null,l.cm)}}while(i\u003Cr.length)}finally{bnnull,t(e)}}}function h(e,t){if(e.curOp)return t();qr(e);try{return t()}finally{Zr(e)}}function I(e,t){return function(){if(e.curOp)return t.apply(e,arguments);qr(e);try{return t.apply(e,arguments)}finally{Zr(e)}}}function t(e){return function(){if(this.curOp)return e.apply(this,arguments);qr(this);try{return e.apply(this,arguments)}finally{Zr(this)}}}function n(t){return function(){var ethis.cm;if(!e||e.curOp)return t.apply(this,arguments);qr(e);try{return t.apply(this,arguments)}finally{Zr(e)}}}function Qr(e,t){e.doc.highlightFrontier\u003Ce.display.viewTo&&e.state.highlight.set(t,de(Jr,e))}function Jr(l){var s,a,u,cl.doc;c.highlightFrontier>l.display.viewTo||(s+new Date+l.options.workTime,aWt(l,c.highlightFrontier),u,c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>l.display.viewFrom){for(var te.styles,ne.text.length>l.options.maxHighlightLength?ft(c.mode,a.state):null,rAt(l,e,a,!0),n(n&&(a.staten),e.stylesr.styles,e.styleClasses),rr.classes,i(r?e.styleClassesr:n&&(e.styleClassesnull),!t||t.length!e.styles.length||n!r&&(!n||!r||n.bgClass!r.bgClass||n.textClass!r.textClass)),o0;!i&&o\u003Ct.length;++o)ito!e.styleso;i&&u.push(a.line),e.stateAftera.save(),a.nextLine()}else e.text.length\u003Cl.options.maxHighlightLength&&Ht(l,e.text,a),e.stateAftera.line%50?a.save():null,a.nextLine();if(+new Date>s)return Qr(l,l.options.workDelay),!0}),c.highlightFrontiera.line,c.modeFrontierMath.max(c.modeFrontier,a.line),u.length&&h(l,function(){for(var e0;e\u003Cu.length;e++)vr(l,ue,\\\text\\\)}))}var eifunction(e,t,n){var re.display;this.viewportt,this.visibleWr(r,e.doc,t),this.editorIsHidden!r.wrapper.offsetWidth,this.wrapperHeightr.wrapper.clientHeight,this.wrapperWidthr.wrapper.clientWidth,this.oldDisplayWidthPn(e),this.forcen,this.dimshr(e),this.events};function ti(e,t){var ne.display,re.doc;if(t.editorIsHidden)return yr(e),!1;if(!t.force&&t.visible.from>n.viewFrom&&t.visible.to\u003Cn.viewTo&&(nulln.updateLineNumbers||n.updateLineNumbers>n.viewTo)&&n.renderedViewn.view&&0wr(e))return!1;si(e)&&(yr(e),t.dimshr(e));var ir.first+r.size,oMath.max(t.visible.from-e.options.viewportMargin,r.first),lMath.min(i,t.visible.to+e.options.viewportMargin),r(n.viewFrom\u003Co&&o-n.viewFrom\u003C20&&(oMath.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l\u003C20&&(lMath.min(i,n.viewTo)),Gt&&(onn(e.doc,o),lrn(e.doc,l)),o!n.viewFrom||l!n.viewTo||n.lastWrapHeight!t.wrapperHeight||n.lastWrapWidth!t.wrapperWidth),i(io,ol,0(c(le).display).view.length||i>c.viewTo||o\u003Cc.viewFrom?(c.viewyn(l,i,o),c.viewFromi):(c.viewFrom>i?c.viewyn(l,i,c.viewFrom).concat(c.view):c.viewFrom\u003Ci&&(c.viewc.view.slice(mr(l,i))),c.viewFromi,c.viewTo\u003Co?c.viewc.view.concat(yn(l,c.viewTo,o)):c.viewTo>o&&(c.viewc.view.slice(0,mr(l,o)))),c.viewToo,n.viewOffsetln(W(e.doc,n.viewFrom)),e.display.mover.style.topn.viewOffset+\\\px\\\,wr(e));if(!r&&0i&&!t.force&&n.renderedViewn.view&&(nulln.updateLineNumbers||n.updateLineNumbers>n.viewTo))return!1;var lfunction(e){if(e.hasFocus())return null;if(!(nN(ue(e)))||!re(e.display.lineDiv,n))return null;var t,n{activeElt:n};return window.getSelection&&(the(e).getSelection()).anchorNode&&t.extend&&re(e.display.lineDiv,t.anchorNode)&&(n.anchorNodet.anchorNode,n.anchorOffsett.anchorOffset,n.focusNodet.focusNode,n.focusOffsett.focusOffset),n}(e),s(4\u003Ci&&(n.lineDiv.style.display\\\none\\\),e),an.updateLineNumbers,ut.dims,cs.display,hs.options.lineNumbers,dc.lineDiv,fd.firstChild;function p(e){var te.nextSibling;return x&&C&&s.display.currentWheelTargete?e.style.display\\\none\\\:e.parentNode.removeChild(e),t}for(var gc.view,mc.viewFrom,v0;v\u003Cg.length;v++){var ygv;if(!y.hidden)if(y.node&&y.node.parentNoded){for(;f!y.node;)fp(f);var bh&&null!a&&a\u003Cm&&y.lineNumber;y.changes&&(-1\u003CL(y.changes,\\\gutter\\\)&&(b!1),Cn(s,y,m,u)),b&&(te(y.lineNumber),y.lineNumber.appendChild(document.createTextNode(xt(s.options,m)))),fy.node.nextSibling}else{bfunction(e,t,n,r){var iLn(e,t);return t.textt.nodei.pre,i.bgClass&&(t.bgClassi.bgClass),i.textClass&&(t.textClassi.textClass),kn(e,t),Tn(e,t,n,r),Mn(e,t,r),t.node}(s,y,m,u);d.insertBefore(b,f)}m+y.size}for(;f;)fp(f);return 4\u003Ci&&(n.lineDiv.style.display\\\\\\),n.renderedViewn.view,(ol)&&o.activeElt&&o.activeElt!N(ce(o.activeElt))&&(o.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(o.activeElt.nodeName)&&o.anchorNode&&re(document.body,o.anchorNode)&&re(document.body,o.focusNode)&&(i(co.activeElt.ownerDocument).defaultView.getSelection(),(cc.createRange()).setEnd(o.anchorNode,o.anchorOffset),c.collapse(!1),i.removeAllRanges(),i.addRange(c),i.extend(o.focusNode,o.focusOffset))),te(n.cursorDiv),te(n.selectionDiv),n.gutters.style.heightn.sizer.style.minHeight0,r&&(n.lastWrapHeightt.wrapperHeight,n.lastWrapWidtht.wrapperWidth,Qr(e,400)),!(n.updateLineNumbersnull)}function ni(e,t){for(var nt.viewport,r!0;;r!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!Pn(e))r&&(t.visibleWr(e.display,e.doc,n));else if(n&&null!n.top&&(n{top:Math.min(e.doc.height+Wn(e.display)-En(e),n.top)}),t.visibleWr(e.display,e.doc,n),t.visible.from>e.display.viewFrom&&t.visible.to\u003Ce.display.viewTo)break;if(!ti(e,t))break;Ar(e);var iUr(e);xr(e),jr(e,i),oi(e,i),t.force!1}t.signal(e,\\\update\\\,e),e.display.viewFrome.display.reportedViewFrom&&e.display.viewToe.display.reportedViewTo||(t.signal(e,\\\viewportChange\\\,e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrome.display.viewFrom,e.display.reportedViewToe.display.viewTo)}function ri(e,t){var n,tnew ei(e,t);ti(e,t)&&(Ar(e),ni(e,t),nUr(e),xr(e),jr(e,n),oi(e,n),t.finish())}function ii(e){var te.gutters.offsetWidth;e.sizer.style.marginLeftt+\\\px\\\,b(e,\\\gutterChanged\\\,e)}function oi(e,t){e.display.sizer.style.minHeightt.docHeight+\\\px\\\,e.display.heightForcer.style.topt.docHeight+\\\px\\\,e.display.gutters.style.heightt.docHeight+e.display.barHeight+Fn(e)+\\\px\\\}function li(e){var te.display,nt.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var rdr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,it.gutters.offsetWidth,or+\\\px\\\,l0;l\u003Cn.length;l++)if(!nl.hidden){e.options.fixedGutter&&(nl.gutter&&(nl.gutter.style.lefto),nl.gutterBackground&&(nl.gutterBackground.style.lefto));var snl.alignable;if(s)for(var a0;a\u003Cs.length;a++)sa.style.lefto}e.options.fixedGutter&&(t.gutters.style.leftr+i+\\\px\\\)}}function si(e){var t,n,r,i;if(e.options.lineNumbers)return te.doc,txt(e.options,t.first+t.size-1),ne.display,t.length!n.lineNumChars?(r(in.measure.appendChild(M(\\\div\\\,M(\\\div\\\,t),\\\CodeMirror-linenumber CodeMirror-gutter-elt\\\))).firstChild.offsetWidth,ii.offsetWidth-r,n.lineGutter.style.width\\\\\\,n.lineNumInnerWidthMath.max(r,n.lineGutter.offsetWidth-i)+1,n.lineNumWidthn.lineNumInnerWidth+i,n.lineNumCharsn.lineNumInnerWidth?t.length:-1,n.lineGutter.style.widthn.lineNumWidth+\\\px\\\,ii(e.display),1):void 0}function ai(e,t){for(var n,r!1,i0;i\u003Ce.length;i++){var oei,lnull;if(\\\string\\\!typeof o&&(lo.style,oo.className),\\\CodeMirror-linenumbers\\\o){if(!t)continue;r!0}n.push({className:o,style:l})}return t&&!r&&n.push({className:\\\CodeMirror-linenumbers\\\,style:null}),n}function ui(e){var te.gutters,ne.gutterSpecs;te(t),e.lineGutternull;for(var r0;r\u003Cn.length;++r){var inr,oi.className,ii.style,lt.appendChild(M(\\\div\\\,null,\\\CodeMirror-gutter \\\+o));i&&(l.style.cssTexti),\\\CodeMirror-linenumbers\\\o&&((e.lineGutterl).style.width(e.lineNumWidth||1)+\\\px\\\)}t.style.displayn.length?\\\\\\:\\\none\\\,ii(e)}function ci(e){ui(e.display),R(e),li(e)}function hi(e,t,n,r){var ithis,o(this.inputn,i.scrollbarFillerM(\\\div\\\,null,\\\CodeMirror-scrollbar-filler\\\),i.scrollbarFiller.setAttribute(\\\cm-not-content\\\,\\\true\\\),i.gutterFillerM(\\\div\\\,null,\\\CodeMirror-gutter-filler\\\),i.gutterFiller.setAttribute(\\\cm-not-content\\\,\\\true\\\),i.lineDivne(\\\div\\\,null,\\\CodeMirror-code\\\),i.selectionDivM(\\\div\\\,null,null,\\\position: relative; z-index: 1\\\),i.cursorDivM(\\\div\\\,null,\\\CodeMirror-cursors\\\),i.measureM(\\\div\\\,null,\\\CodeMirror-measure\\\),i.lineMeasureM(\\\div\\\,null,\\\CodeMirror-measure\\\),i.lineSpacene(\\\div\\\,i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv,null,\\\position: relative; outline: none\\\),ne(\\\div\\\,i.lineSpace,\\\CodeMirror-lines\\\));i.moverM(\\\div\\\,o,null,\\\position: relative\\\),i.sizerM(\\\div\\\,i.mover,\\\CodeMirror-sizer\\\),i.sizerWidthnull,i.heightForcerM(\\\div\\\,null,null,\\\position: absolute; height: \\\+ge+\\\px; width: 1px;\\\),i.guttersM(\\\div\\\,null,\\\CodeMirror-gutters\\\),i.lineGutternull,i.scrollerM(\\\div\\\,i.sizer,i.heightForcer,i.gutters,\\\CodeMirror-scroll\\\),i.scroller.setAttribute(\\\tabIndex\\\,\\\-1\\\),i.wrapperM(\\\div\\\,i.scrollbarFiller,i.gutterFiller,i.scroller,\\\CodeMirror\\\),m&&105\u003CV&&(i.wrapper.style.clipPath\\\inset(0px)\\\),i.wrapper.setAttribute(\\\translate\\\,\\\no\\\),w&&v\u003C8&&(i.gutters.style.zIndex-1,i.scroller.style.paddingRight0),x||d&&_||(i.scroller.draggable!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFromi.viewTot.first,i.reportedViewFromi.reportedViewTot.first,i.view,i.renderedViewnull,i.externalMeasurednull,i.viewOffset0,i.lastWrapHeighti.lastWrapWidth0,i.updateLineNumbersnull,i.nativeBarWidthi.barHeighti.barWidth0,i.scrollbarsClipped!1,i.lineNumWidthi.lineNumInnerWidthi.lineNumCharsnull,i.alignWidgets!1,i.cachedCharWidthi.cachedTextHeighti.cachedPaddingHnull,i.maxLinenull,i.maxLineLength0,i.maxLineChanged!1,i.wheelDXi.wheelDYi.wheelStartXi.wheelStartYnull,i.shift!1,i.selForContextMenunull,i.activeTouchnull,i.gutterSpecsai(r.gutters,r.lineNumbers),ui(i),n.init(i)}ei.prototype.signalfunction(e,t){Ye(e,t)&&this.events.push(arguments)},ei.prototype.finishfunction(){for(var e0;e\u003Cthis.events.length;e++)O.apply(null,this.eventse)};var di0,finull;function pi(e){var te.wheelDeltaX,ne.wheelDeltaY;return nullt&&e.detail&&e.axise.HORIZONTAL_AXIS&&(te.detail),nulln&&e.detail&&e.axise.VERTICAL_AXIS?ne.detail:nulln&&(ne.wheelDelta),{x:t,y:n}}function gi(e){epi(e);return e.x*fi,e.y*fi,e}function mi(e,t){m&&102V&&(nulle.display.chromeScrollHack?e.display.sizer.style.pointerEvents\\\none\\\:clearTimeout(e.display.chromeScrollHack),e.display.chromeScrollHacksetTimeout(function(){e.display.chromeScrollHacknull,e.display.sizer.style.pointerEvents\\\\\\},100));var npi(t),rn.x,nn.y,ifi,o(0t.deltaMode&&(rt.deltaX,nt.deltaY,i1),e.display),lo.scroller,sl.scrollWidth>l.clientWidth,al.scrollHeight>l.clientHeight;if(r&&s||n&&a){if(n&&C&&x)e:for(var ut.target,co.view;u!l;uu.parentNode)for(var h0;h\u003Cc.length;h++)if(ch.nodeu){e.display.currentWheelTargetu;break e}if(r&&!d&&!K&&null!i)return n&&a&&Ir(e,Math.max(0,l.scrollTop+n*i)),Gr(e,Math.max(0,l.scrollLeft+r*i)),n&&!a||D(t),void(o.wheelStartXnull);n&&null!i&&(a(se.doc.scrollTop)+o.wrapper.clientHeight,(in*i)\u003C0?sMath.max(0,s+i-50):aMath.min(e.doc.height,a+i+50),ri(e,{top:s,bottom:a})),di\u003C20&&0!t.deltaMode&&(nullo.wheelStartX?(o.wheelStartXl.scrollLeft,o.wheelStartYl.scrollTop,o.wheelDXr,o.wheelDYn,setTimeout(function(){var e,t;null!o.wheelStartX&&(el.scrollLeft-o.wheelStartX,t(tl.scrollTop-o.wheelStartY)&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX,o.wheelStartXo.wheelStartYnull,t&&(fi(fi*di+t)/(di+1),++di))},200)):(o.wheelDX+r,o.wheelDY+n))}}w?fi-.53:d?fi15:m?fi-.7:j&&(fi-1/3);var Bfunction(e,t){this.rangese,this.primIndext},G(B.prototype.primaryfunction(){return this.rangesthis.primIndex},B.prototype.equalsfunction(e){if(ethis)return!0;if(e.primIndex!this.primIndex||e.ranges.length!this.ranges.length)return!1;for(var t0;t\u003Cthis.ranges.length;t++){var nthis.rangest,re.rangest;if(!Ct(n.anchor,r.anchor)||!Ct(n.head,r.head))return!1}return!0},B.prototype.deepCopyfunction(){for(var e,t0;t\u003Cthis.ranges.length;t++)etnew G(St(this.rangest.anchor),St(this.rangest.head));return new B(e,this.primIndex)},B.prototype.somethingSelectedfunction(){for(var e0;e\u003Cthis.ranges.length;e++)if(!this.rangese.empty())return!0;return!1},B.prototype.containsfunction(e,t){tt||e;for(var n0;n\u003Cthis.ranges.length;n++){var rthis.rangesn;if(0\u003CP(t,r.from())&&P(e,r.to())\u003C0)return n}return-1},function(e,t){this.anchore,this.headt});function vi(e,t,n){var re&&e.options.selectionsMayTouch,etn;t.sort(function(e,t){return P(e.from(),t.from())}),nL(t,e);for(var i1;i\u003Ct.length;i++){var o,lti,sti-1,aP(s.to(),l.from());(r&&!l.empty()?0\u003Ca:0\u003Ca)&&(akt(s.from(),l.from()),oLt(s.to(),l.to()),ls.empty()?l.from()l.head:s.from()s.head,i\u003Cn&&--n,t.splice(--i,2,new G(l?o:a,l?a:o)))}return new B(t,n)}function yi(e,t){return new B(new G(e,t||e),0)}function bi(e){return e.text?F(e.from.line+e.text.length-1,z(e.text).length+(1e.text.length?e.from.ch:0)):e.to}function wi(e,t){if(P(e,t.from)\u003C0)return e;if(P(e,t.to)\u003C0)return bi(t);var ne.line+t.text.length-(t.to.line-t.from.line)-1,re.ch;return e.linet.to.line&&(r+bi(t).ch-t.to.ch),F(n,r)}function xi(e,t){for(var n,r0;r\u003Ce.sel.ranges.length;r++){var ie.sel.rangesr;n.push(new G(wi(i.anchor,t),wi(i.head,t)))}return vi(e.cm,n,e.sel.primIndex)}function Ci(e,t,n){return e.linet.line?F(n.line,e.ch-t.ch+n.ch):F(n.line+(e.line-t.line),e.ch)}function Si(e){e.doc.modect(e.options,e.doc.modeOption),Li(e)}function Li(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfternull),e.styles&&(e.stylesnull)}),e.doc.modeFrontiere.doc.highlightFrontiere.doc.first,Qr(e,100),e.state.modeGen++,e.curOp&&R(e)}function ki(e,t){return 0t.from.ch&&0t.to.ch&&\\\\\\z(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Ti(e,o,t,l){function i(e){return t?te:null}function n(e,t,n){var r,i;tt,nn,il,(re).textt,r.stateAfter&&(r.stateAfternull),r.styles&&(r.stylesnull),null!r.order&&(r.ordernull),Xt(r),Yt(r,n),(ti?i(r):1)!r.height&&yt(r,t),b(e,\\\change\\\,e,o)}function r(e,t){for(var n,re;r\u003Ct;++r)n.push(new un(cr,i(r),l));return n}var s,ao.from,uo.to,co.text,hW(e,a.line),dW(e,u.line),fz(c),pi(c.length-1),gu.line-a.line;o.full?(e.insert(0,r(0,c.length)),e.remove(c.length,e.size-c.length)):ki(e,o)?(sr(0,c.length-1),n(d,d.text,p),g&&e.remove(a.line,g),s.length&&e.insert(a.line,s)):hd?1c.length?n(h,h.text.slice(0,a.ch)+f+h.text.slice(u.ch),p):((sr(1,c.length-1)).push(new un(f+h.text.slice(u.ch),p,l)),n(h,h.text.slice(0,a.ch)+c0,i(0)),e.insert(a.line+1,s)):1c.length?(n(h,h.text.slice(0,a.ch)+c0+d.text.slice(u.ch),i(0)),e.remove(a.line+1,g)):(n(h,h.text.slice(0,a.ch)+c0,i(0)),n(d,f+d.text.slice(u.ch),p),sr(1,c.length-1),1\u003Cg&&e.remove(a.line+1,g-1),e.insert(a.line+1,s)),b(e,\\\change\\\,e,o)}function Mi(e,s,a){!function e(t,n,r){if(t.linked)for(var i0;i\u003Ct.linked.length;++i){var o,lt.linkedi;l.doc!n&&(or&&l.sharedHist,a&&!o||(s(l.doc,o),e(l.doc,t,o)))}}(e,null,!0)}function Ni(e,t){if(t.cm)throw new Error(\\\This document is already in use.\\\);pr((e.doct).cme),Si(e),Oi(e),e.options.directiont.direction,e.options.lineWrapping||an(e),e.options.modet.modeOption,R(e)}function Oi(e){(\\\rtl\\\e.doc.direction?ie:ee)(e.display.lineDiv,\\\CodeMirror-rtl\\\)}function Ai(e){this.done,this.undone,this.undoDepthe?e.undoDepth:1/0,this.lastModTimethis.lastSelTime0,this.lastOpthis.lastSelOpnull,this.lastOriginthis.lastSelOriginnull,this.generationthis.maxGeneratione?e.maxGeneration:1}function Di(e,t){var n{from:St(t.from),to:bi(t),text:mt(e,t.from,t.to)};return Ei(e,n,t.from.line,t.to.line+1),Mi(e,function(e){return Ei(e,n,t.from.line,t.to.line+1)},!0),n}function Wi(e){for(;e.length;){if(!z(e).ranges)break;e.pop()}}function Hi(e,t,n,r){var i,o,le.history,s(l.undone.length0,+new Date);if((l.lastOpr||l.lastOrigint.origin&&t.origin&&(\\\+\\\t.origin.charAt(0)&&l.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||\\\*\\\t.origin.charAt(0)))&&(o(ol).lastOpr?(Wi(o.done),z(o.done)):o.done.length&&!z(o.done).ranges?z(o.done):1\u003Co.done.length&&!o.doneo.done.length-2.ranges?(o.done.pop(),z(o.done)):void 0))iz(o.changes),0P(t.from,t.to)&&0P(t.from,i.to)?i.tobi(t):o.changes.push(Di(e,t));else{var az(l.done);for(a&&a.ranges||Pi(e.sel,l.done),o{changes:Di(e,t),generation:l.generation},l.done.push(o);l.done.length>l.undoDepth;)l.done.shift(),l.done0.ranges||l.done.shift()}l.done.push(n),l.generation++l.maxGeneration,l.lastModTimel.lastSelTimes,l.lastOpl.lastSelOpr,l.lastOriginl.lastSelOrigint.origin,i||O(e,\\\historyAdded\\\)}function Fi(e,t,n,r){var i,o,l,se.history,ar&&r.origin;ns.lastSelOp||a&&s.lastSelOrigina&&(s.lastModTimes.lastSelTime&&s.lastOrigina||(ee,ia,oz(s.done),lt,\\\*\\\(ii.charAt(0))||\\\+\\\i&&o.ranges.lengthl.ranges.length&&o.somethingSelected()l.somethingSelected()&&new Date-e.history.lastSelTime\u003C(e.cm?e.cm.options.historyEventDelay:500)))?s.dones.done.length-1t:Pi(t,s.done),s.lastSelTime+new Date,s.lastSelOrigina,s.lastSelOpn,r&&!1!r.clearRedo&&Wi(s.undone)}function Pi(e,t){var nz(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Ei(t,n,e,r){var in\\\spans_\\\+t.id,o0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((ii||(n\\\spans_\\\+t.id{}))oe.markedSpans),++o})}function Ri(e,t){var nt\\\spans_\\\+e.id;if(!n)return null;for(var r,i0;i\u003Ct.text.length;++i)r.push(function(e){if(!e)return null;for(var t,n0;n\u003Ce.length;++n)en.marker.explicitlyCleared?tt||e.slice(0,n):t&&t.push(en);return t?t.length?t:null:e}(ni));return r}function zi(e,t){var nRi(e,t),rKt(e,t);if(!n)return r;if(!r)return n;for(var i0;i\u003Cn.length;++i){var oni,lri;if(o&&l)e:for(var s0;s\u003Cl.length;++s){for(var als,u0;u\u003Co.length;++u)if(ou.markera.marker)continue e;o.push(a)}else l&&(nil)}return n}function Ii(e,t,n){for(var r,i0;i\u003Ce.length;++i){var oei;if(o.ranges)r.push(n?B.prototype.deepCopy.call(o):o);else{var lo.changes,s;r.push({changes:s});for(var a0;a\u003Cl.length;++a){var u,cla;if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var h in c)(uh.match(/^spans_(\\\\d+)$/))&&-1\u003CL(t,Number(u1))&&(z(s)hch,delete ch)}}}return r}function Bi(e,t,n,r){return r?(re.anchor,n&&((eP(t,r)\u003C0)!P(n,r)\u003C0?(rt,tn):e!P(t,n)\u003C0&&(tn)),new G(r,t)):new G(n||t,t)}function Gi(e,t,n,r,i){nulli&&(ie.cm&&(e.cm.display.shift||e.extend)),U(e,new B(Bi(e.sel.primary(),t,n,i),0),r)}function Ui(e,t,n){for(var r,ie.cm&&(e.cm.display.shift||e.extend),o0;o\u003Ce.sel.ranges.length;o++)roBi(e.sel.rangeso,to,null,i);U(e,vi(e.cm,r,e.sel.primIndex),n)}function Vi(e,t,n,r){var ie.sel.ranges.slice(0);itn,U(e,vi(e.cm,i,e.sel.primIndex),r)}function Ki(e,t,n,r){U(e,yi(t,n),r)}function ji(e,t,n){var re.history.done,iz(r);i&&i.ranges?Xi(e,rr.length-1t,n):U(e,t,n)}function U(e,t,n){Xi(e,t,n),Fi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Xi(e,t,n){(Ye(e,\\\beforeSelectionChange\\\)||e.cm&&Ye(e.cm,\\\beforeSelectionChange\\\))&&(re,on,o{ranges:(it).ranges,update:function(e){this.ranges;for(var t0;t\u003Ce.length;t++)this.rangestnew G(E(r,et.anchor),E(r,et.head))},origin:o&&o.origin},O(r,\\\beforeSelectionChange\\\,r,o),r.cm&&O(r.cm,\\\beforeSelectionChange\\\,r.cm,o),to.ranges!i.ranges?vi(r.cm,o.ranges,o.ranges.length-1):i);var r,i,on&&n.bias||(P(t.primary().head,e.sel.primary().head)\u003C0?-1:1);Yi(e,_i(e,t,o,!0)),n&&!1n.scroll||!e.cm||\\\nocursor\\\e.cm.getOption(\\\readOnly\\\)||Pr(e.cm)}function Yi(e,t){t.equals(e.sel)||(e.selt,e.cm&&(e.cm.curOp.updateInput1,e.cm.curOp.selectionChanged!0,Xe(e.cm)),b(e,\\\cursorActivity\\\,e))}function $i(e){Yi(e,_i(e,e.sel,null,!1))}function _i(e,t,n,r){for(var i,o0;o\u003Ct.ranges.length;o++){var lt.rangeso,st.ranges.lengthe.sel.ranges.length&&e.sel.rangeso,aZi(e,l.anchor,s&&s.anchor,n,r),sl.headl.anchor?a:Zi(e,l.head,s&&s.head,n,r);!i&&al.anchor&&sl.head||((ii||t.ranges.slice(0,o))onew G(a,s))}return i?vi(e.cm,i,t.primIndex):t}function qi(e,t,n,r,i){var oW(e,t.line);if(o.markedSpans)for(var l0;l\u003Co.markedSpans.length;++l){var so.markedSpansl,as.marker,u\\\selectLeft\\\in a?!a.selectLeft:a.inclusiveLeft,c\\\selectRight\\\in a?!a.selectRight:a.inclusiveRight;if((nulls.from||(u?s.from\u003Ct.ch:s.from\u003Ct.ch))&&(nulls.to||(c?s.to>t.ch:s.to>t.ch))){if(i&&(O(a,\\\beforeCursorEnter\\\),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var sa.find(r\u003C0?1:-1),hvoid 0;if((s(r\u003C0?c:u)?Qi(e,s,-r,s&&s.linet.line?o:null):s)&&s.linet.line&&(hP(s,n))&&(r\u003C0?h\u003C0:0\u003Ch))return qi(e,s,t,r,i)}ha.find(r\u003C0?-1:1);return(h(r\u003C0?u:c)?Qi(e,h,r,h.linet.line?o:null):h)?qi(e,h,t,r,i):null}}}return t}function Zi(e,t,n,r,i){rr||1,iqi(e,t,n,r,i)||!i&&qi(e,t,n,r,!0)||qi(e,t,n,-r,i)||!i&&qi(e,t,n,-r,!0);return i||(e.cantEdit!0,F(e.first,0))}function Qi(e,t,n,r){return n\u003C0&&0t.ch?t.line>e.first?E(e,F(t.line-1)):null:0\u003Cn&&t.ch(r||W(e,t.line)).text.length?t.line\u003Ce.first+e.size-1?F(t.line+1,0):null:new F(t.line,t.ch+n)}function Ji(e){e.setSelection(F(e.firstLine(),0),F(e.lastLine()),ve)}function eo(i,e,t){var o{canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled!0}};return t&&(o.updatefunction(e,t,n,r){e&&(o.fromE(i,e)),t&&(o.toE(i,t)),n&&(o.textn),void 0!r&&(o.originr)}),O(i,\\\beforeChange\\\,i,o),i.cm&&O(i.cm,\\\beforeChange\\\,i.cm,o),o.canceled?(i.cm&&(i.cm.curOp.updateInput2),null):{from:o.from,to:o.to,text:o.text,origin:o.origin}}function to(e,t,n){if(e.cm){if(!e.cm.curOp)return I(e.cm,to)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ye(e,\\\beforeChange\\\)||e.cm&&Ye(e.cm,\\\beforeChange\\\))||(teo(e,t,!0))){var rBt&&!n&&function(e,t,n){var rnull;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t0;t\u003Ce.markedSpans.length;++t){var ne.markedSpanst.marker;!n.readOnly||r&&-1!L(r,n)||(rr||).push(n)}}),!r)return null;for(var i{from:t,to:n},o0;o\u003Cr.length;++o)for(var lro,sl.find(0),a0;a\u003Ci.length;++a){var u,c,h,dia;P(d.to,s.from)\u003C0||0\u003CP(d.from,s.to)||(ua,1,cP(d.from,s.from),hP(d.to,s.to),(c\u003C0||!l.inclusiveLeft&&!c)&&u.push({from:d.from,to:s.from}),(0\u003Ch||!l.inclusiveRight&&!h)&&u.push({from:s.to,to:d.to}),i.splice.apply(i,u),a+u.length-3)}return i}(e,t.from,t.to);if(r)for(var ir.length-1;0\u003Ci;--i)no(e,{from:ri.from,to:ri.to,text:i?\\\\\\:t.text,origin:t.origin});else no(e,t)}}function no(e,n){var t,r;1n.text.length&&\\\\\\n.text0&&0P(n.from,n.to)||(txi(e,n),Hi(e,n,t,e.cm?e.cm.curOp.id:NaN),oo(e,n,t,Kt(e,n)),r,Mi(e,function(e,t){t||-1!L(r,e.history)||(uo(e.history,n),r.push(e.history)),oo(e,n,null,Kt(e,n))}))}function ro(i,o,e){var ti.cm&&i.cm.state.suppressEdits;if(!t||e){for(var l,ni.history,ri.sel,s\\\undo\\\o?n.done:n.undone,a\\\undo\\\o?n.undone:n.done,u0;u\u003Cs.length&&(lsu,e?!l.ranges||l.equals(i.sel):l.ranges);u++);if(u!s.length){for(n.lastOriginn.lastSelOriginnull;;){if(!(ls.pop()).ranges){if(t)return void s.push(l);break}if(Pi(l,a),e&&!l.equals(i.sel))return void U(i,l,{clearRedo:!1});rl}for(var c,h(Pi(r,a),a.push({changes:c,generation:n.generation}),n.generationl.generation||++n.maxGeneration,Ye(i,\\\beforeChange\\\)||i.cm&&Ye(i.cm,\\\beforeChange\\\)),dl.changes.length-1;0\u003Cd;--d){var ffunction(e){var nl.changese;if(n.origino,h&&!eo(i,n,!1))return s.length0,{};c.push(Di(i,n));var te?xi(i,n):z(s),r(oo(i,n,t,zi(i,n)),!e&&i.cm&&i.cm.scrollIntoView({from:n.from,to:bi(n)}),);Mi(i,function(e,t){t||-1!L(r,e.history)||(uo(e.history,n),r.push(e.history)),oo(e,n,null,zi(e,n))})}(d);if(f)return f.v}}}}function io(e,t){if(0!t&&(e.first+t,e.selnew B(Se(e.sel.ranges,function(e){return new G(F(e.anchor.line+t,e.anchor.ch),F(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){R(e.cm,e.first,e.first-t,t);for(var ne.cm.display,rn.viewFrom;r\u003Cn.viewTo;r++)vr(e.cm,r,\\\gutter\\\)}}function oo(e,t,n,r){if(e.cm&&!e.cm.curOp)return I(e.cm,oo)(e,t,n,r);if(t.to.line\u003Ce.first)io(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){t.from.line\u003Ce.first&&(io(e,it.text.length-1-(e.first-t.from.line)),t{from:F(e.first,0),to:F(t.to.line+i,t.to.ch),text:z(t.text),origin:t.origin});var ie.lastLine();if((tt.to.line>i?{from:t.from,to:F(i,W(e,i).text.length),text:t.text0,origin:t.origin}:t).removedmt(e,t.from,t.to),nn||xi(e,t),e.cm){var ie.cm,ot,lr,si.doc,ai.display,uo.from,co.to,h!1,du.line,f(i.options.lineWrapping||(dH(tn(W(s,u.line))),s.iter(d,c.line+1,function(e){if(ea.maxLine)return h!0})),-1\u003Cs.sel.contains(o.from,o.to)&&Xe(i),Ti(s,o,l,fr(i)),i.options.lineWrapping||(s.iter(d,u.line+o.text.length,function(e){var tsn(e);t>a.maxLineLength&&(a.maxLinee,a.maxLineLengtht,a.maxLineChanged!0,h!1)}),h&&(i.curOp.updateMaxLine!0)),s),pu.line;if(f.modeFrontierMath.min(f.modeFrontier,p),!(f.highlightFrontier\u003Cp-10)){for(var gf.first,mp-1;g\u003Cm;m--){var vW(f,m).stateAfter;if(v&&(!(v instanceof Nt)||m+v.lookAhead\u003Cp)){gm+1;break}}f.highlightFrontierMath.min(f.highlightFrontier,g)}Qr(i,400),lo.text.length-(c.line-u.line)-1,o.full?R(i):u.line!c.line||1!o.text.length||ki(i.doc,o)?R(i,u.line,c.line+1,l):vr(i,u.line,\\\text\\\),dYe(i,\\\changes\\\),((sYe(i,\\\change\\\))||d)&&(l{from:u,to:c,text:o.text,removed:o.removed,origin:o.origin},s&&b(i,\\\change\\\,i,l),d&&(i.curOp.changeObjs||(i.curOp.changeObjs)).push(l)),i.display.selForContextMenunull}else Ti(e,t,r);Xi(e,n,ve),e.cantEdit&&Zi(e,F(e.firstLine(),0))&&(e.cantEdit!1)}}function lo(e,t,n,r,i){var o;P(rr||n,n)\u003C0&&(n(or,n)0,ro1),\\\string\\\typeof t&&(te.splitLines(t)),to(e,{from:n,to:r,text:t,origin:i})}function so(e,t,n,r){n\u003Ce.line?e.line+r:t\u003Ce.line&&(e.linet,e.ch0)}function ao(e,t,n,r){for(var i0;i\u003Ce.length;++i){var oei,l!0;if(o.ranges){o.copied||((oeio.deepCopy()).copied!0);for(var s0;s\u003Co.ranges.length;s++)so(o.rangess.anchor,t,n,r),so(o.rangess.head,t,n,r)}else{for(var a0;a\u003Co.changes.length;++a){var uo.changesa;if(n\u003Cu.from.line)u.fromF(u.from.line+r,u.from.ch),u.toF(u.to.line+r,u.to.ch);else if(t\u003Cu.to.line){l!1;break}}l||(e.splice(0,i+1),i0)}}}function uo(e,t){var nt.from.line,rt.to.line,tt.text.length-(r-n)-1;ao(e.done,n,r,t),ao(e.undone,n,r,t)}function co(e,t,n,r){var it,ot;return\\\number\\\typeof t?oW(e,Tt(e,t)):iH(t),nulli?null:(r(o,i)&&e.cm&&vr(e.cm,i,n),o)}function ho(e){this.linese,this.parentnull;for(var t0,n0;n\u003Ce.length;++n)en.parentthis,t+en.height;this.heightt}function fo(e){this.childrene;for(var t0,n0,r0;r\u003Ce.length;++r){var ier;t+i.chunkSize(),n+i.height,i.parentthis}this.sizet,this.heightn,this.parentnull}G.prototype.fromfunction(){return kt(this.anchor,this.head)},G.prototype.tofunction(){return Lt(this.anchor,this.head)},G.prototype.emptyfunction(){return this.head.linethis.anchor.line&&this.head.chthis.anchor.ch},ho.prototype{chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n,re,ie+t;r\u003Ci;++r){var othis.linesr;this.height-o.height,(no).parentnull,Xt(n),b(o,\\\delete\\\)}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+n,this.linesthis.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r0;r\u003Ct.length;++r)tr.parentthis},iterN:function(e,t,n){for(var re+t;e\u003Cr;++e)if(n(this.linese))return!0}},fo.prototype{chunkSize:function(){return this.size},removeInner:function(e,t){this.size-t;for(var n,r0;r\u003Cthis.children.length;++r){var ithis.childrenr,oi.chunkSize();if(e\u003Co){var lMath.min(t,o-e),si.height;if(i.removeInner(e,l),this.height-s-i.height,ol&&(this.children.splice(r--,1),i.parentnull),0(t-l))break;e0}else e-o}this.size-t\u003C25&&(1\u003Cthis.children.length||!(this.children0instanceof ho))&&(this.collapse(n),this.childrennew ho(n),this.children0.parentthis)},collapse:function(e){for(var t0;t\u003Cthis.children.length;++t)this.childrent.collapse(e)},insertInner:function(e,t,n){this.size+t.length,this.height+n;for(var r0;r\u003Cthis.children.length;++r){var ithis.childrenr,oi.chunkSize();if(e\u003Co){if(i.insertInner(e,t,n),i.lines&&50\u003Ci.lines.length){for(var li.lines.length%25+25,sl;s\u003Ci.lines.length;){var anew ho(i.lines.slice(s,s+25));i.height-a.height,this.children.splice(++r,0,a),a.parentthis}i.linesi.lines.slice(0,l),this.maybeSpill()}break}e-o}},maybeSpill:function(){if(!(this.children.length\u003C10)){var ethis;do{var t,nnew fo(e.children.splice(e.children.length-5,5))}while(e.parent?(e.size-n.size,e.height-n.height,tL(e.parent.children,e),e.parent.children.splice(t+1,0,n)):(((tnew fo(e.children)).parente).childrent,n,et),n.parente.parent,10\u003Ce.children.length);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r0;r\u003Cthis.children.length;++r){var ithis.childrenr,oi.chunkSize();if(e\u003Co){var lMath.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0(t-l))break;e0}else e-o}}};function po(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(thisrnr);this.doce,this.nodet}function go(e,t,n){ln(t)\u003C(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Fr(e,n)}po.prototype.clearfunction(){var ethis.doc.cm,tthis.line.widgets,nthis.line,rH(n);if(null!r&&t){for(var i0;i\u003Ct.length;++i)tithis&&t.splice(i--,1);t.length||(n.widgetsnull);var oOn(this);yt(n,Math.max(0,n.height-o)),e&&(h(e,function(){go(e,n,-o),vr(e,r,\\\widget\\\)}),b(e,\\\lineWidgetCleared\\\,e,this,r))}},po.prototype.changedfunction(){var ethis,tthis.height,nthis.doc.cm,rthis.line,i(this.heightnull,On(this)-t);i&&(on(this.doc,r)||yt(r,r.height+i),n&&h(n,function(){n.curOp.forceUpdate!0,go(n,r,i),b(n,\\\lineWidgetChanged\\\,n,e,H(r))}))},$e(po);function mo(e,t){this.lines,this.typet,this.doce,this.id++vo}var vo0;function yo(r,i,o,e,t){if(e&&e.shared)return fr,ni,lo,at,(sfe(se)).shared!1,uyo(f,n,l,s,a),cu0,hs.widgetNode,Mi(f,function(e){h&&(s.widgetNodeh.cloneNode(!0)),u.push(yo(e,E(e,n),E(e,l),s,a));for(var t0;t\u003Ce.linked.length;++t)if(e.linkedt.isParent)return;cz(u)}),new bo(u,c);var n,l,s,a,u,c,h;if(r.cm&&!r.cm.curOp)return I(r.cm,yo)(r,i,o,e,t);var dnew mo(r,t),fP(i,o);if(e&&fe(e,d,!1),0\u003Cf||0f&&!1!d.clearWhenEmpty)return d;if(d.replacedWith&&(d.collapsed!0,d.widgetNodene(\\\span\\\,d.replacedWith,\\\CodeMirror-widget\\\),e.handleMouseEvents||d.widgetNode.setAttribute(\\\cm-ignore-events\\\,\\\true\\\),e.insertLeft&&(d.widgetNode.insertLeft!0)),d.collapsed){if(en(r,i.line,i,o,d)||i.line!o.line&&en(r,o.line,i,o,d))throw new Error(\\\Inserting collapsed marker partially overlapping an existing one\\\);Gt!0}d.addToHistory&&Hi(r,{from:i,to:o,origin:\\\markText\\\},r.sel,NaN);var p,gi.line,mr.cm;if(r.iter(g,o.line+1,function(e){var t,n;m&&d.collapsed&&!m.options.lineWrapping&&tn(e)m.display.maxLine&&(p!0),d.collapsed&&g!i.line&&yt(e,0),ee,tnew Ut(d,gi.line?i.ch:null,go.line?o.ch:null),(n(nr.cm&&r.cm.curOp)&&window.WeakSet&&(n.markedSpans||(n.markedSpansnew WeakSet)))&&e.markedSpans&&n.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpanse.markedSpans?e.markedSpans.concat(t):t,n&&n.add(e.markedSpans)),t.marker.attachLine(e),++g}),d.collapsed&&r.iter(i.line,o.line+1,function(e){on(r,e)&&yt(e,0)}),d.clearOnEnter&&k(d,\\\beforeCursorEnter\\\,function(){return d.clear()}),d.readOnly&&(Bt!0,(r.history.done.length||r.history.undone.length)&&r.clearHistory()),d.collapsed&&(d.id++vo,d.atomic!0),m){if(p&&(m.curOp.updateMaxLine!0),d.collapsed)R(m,i.line,o.line+1);else if(d.className||d.startStyle||d.endStyle||d.css||d.attributes||d.title)for(var vi.line;v\u003Co.line;v++)vr(m,v,\\\text\\\);d.atomic&&$i(m.doc),b(m,\\\markerAdded\\\,m,d)}return d}mo.prototype.clearfunction(){if(!this.explicitlyCleared){for(var e,tthis.doc.cm,nt&&!t.curOp,r(n&&qr(t),!Ye(this,\\\clear\\\)||(ethis.find())&&b(this,\\\clear\\\,e.from,e.to),null),inull,o0;o\u003Cthis.lines.length;++o){var lthis.lineso,sVt(l.markedSpans,this);t&&!this.collapsed?vr(t,H(l),\\\text\\\):t&&(null!s.to&&(iH(l)),null!s.from&&(rH(l))),l.markedSpansfunction(e,t){for(var n,r0;r\u003Ce.length;++r)er!t&&(nn||).push(er);return n}(l.markedSpans,s),nulls.from&&this.collapsed&&!on(this.doc,l)&&t&&yt(l,ur(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var a0;a\u003Cthis.lines.length;++a){var utn(this.linesa),csn(u);c>t.display.maxLineLength&&(t.display.maxLineu,t.display.maxLineLengthc,t.display.maxLineChanged!0)}null!r&&t&&this.collapsed&&R(t,r,i+1),this.lines.length0,this.explicitlyCleared!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit!1,t&&$i(t.doc)),t&&b(t,\\\markerCleared\\\,t,this,r,i),n&&Zr(t),this.parent&&this.parent.clear()}},mo.prototype.findfunction(e,t){var n,r;nulle&&\\\bookmark\\\this.type&&(e1);for(var i0;i\u003Cthis.lines.length;++i){var othis.linesi,lVt(o.markedSpans,this);if(null!l.from&&(nF(t?o:H(o),l.from),-1e))return n;if(null!l.to&&(rF(t?o:H(o),l.to),1e))return r}return n&&{from:n,to:r}},mo.prototype.changedfunction(){var nthis,rthis.find(-1,!0),ithis,othis.doc.cm;r&&o&&h(o,function(){var er.line,tH(r.line),tIn(o,t);t&&(jn(t),o.curOp.selectionChangedo.curOp.forceUpdate!0),o.curOp.updateMaxLine!0,on(i.doc,e)||nulli.height||(ti.height,i.heightnull,(tOn(i)-t)&&yt(e,e.height+t)),b(o,\\\markerChanged\\\,o,n)})},mo.prototype.attachLinefunction(e){var t;this.lines.length||!this.doc.cm||(tthis.doc.cm.curOp).maybeHiddenMarkers&&-1!L(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers)).push(this),this.lines.push(e)},mo.prototype.detachLinefunction(e){this.lines.splice(L(this.lines,e),1),!this.lines.length&&this.doc.cm&&((ethis.doc.cm.curOp).maybeHiddenMarkers||(e.maybeHiddenMarkers)).push(this)},$e(mo);var bofunction(e,t){this.markerse,this.primaryt;for(var n0;n\u003Ce.length;++n)en.parentthis};function wo(e){return e.findMarks(F(e.first,0),e.clipPos(F(e.lastLine())),function(e){return e.parent})}function xo(o){for(var e0;e\u003Co.length;e++)!function(e){var toe,nt.primary.doc;Mi(t.primary.doc,function(e){return n.push(e)});for(var r0;r\u003Ct.markers.length;r++){var it.markersr;-1L(n,i.doc)&&(i.parentnull,t.markers.splice(r--,1))}}(e)}bo.prototype.clearfunction(){if(!this.explicitlyCleared){this.explicitlyCleared!0;for(var e0;e\u003Cthis.markers.length;++e)this.markerse.clear();b(this,\\\clear\\\)}},bo.prototype.findfunction(e,t){return this.primary.find(e,t)},$e(bo);function f(e,t,n,r,i){if(!(this instanceof f))return new f(e,t,n,r,i);nulln&&(n0),fo.call(this,new ho(new un(\\\\\\,null))),this.firstn,this.scrollTopthis.scrollLeft0,this.cantEdit!1,this.cleanGeneration1,nF(this.modeFrontierthis.highlightFrontiern,0),this.selyi(n),this.historynew Ai(null),this.id++Co,this.modeOptiont,this.lineSepr,this.direction\\\rtl\\\i?\\\rtl\\\:\\\ltr\\\,this.extend!1,\\\string\\\typeof e&&(ethis.splitLines(e)),Ti(this,{from:n,to:n,text:e}),U(this,yi(n),ve)}var Co0,So((f.prototypeke(fo.prototype,{constructor:f,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n0,r0;r\u003Ct.length;++r)n+tr.height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var tvt(this,this.first,this.first+this.size);return!1e?t:t.join(e||this.lineSeparator())},setValue:n(function(e){var tF(this.first,0),nthis.first+this.size-1;to(this,{from:t,to:F(n,W(this,n).text.length),text:this.splitLines(e),origin:\\\setValue\\\,full:!0},!0),this.cm&&Er(this.cm,0,0),U(this,yi(t),ve)}),replaceRange:function(e,t,n,r){lo(this,e,tE(this,t),nn?E(this,n):t,r)},getRange:function(e,t,n){emt(this,E(this,e),E(this,t));return!1n?e:\\\\\\n?e.join(\\\\\\):e.join(n||this.lineSeparator())},getLine:function(e){ethis.getLineHandle(e);return e&&e.text},getLineHandle:function(e){if(wt(this,e))return W(this,e)},getLineNumber:H,getLineHandleVisualStart:function(e){return tn(e\\\number\\\typeof e?W(this,e):e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return E(this,e)},getCursor:function(e){var tthis.sel.primary(),enulle||\\\head\\\e?t.head:\\\anchor\\\e?t.anchor:\\\end\\\e||\\\to\\\e||!1e?t.to():t.from();return e},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:n(function(e,t,n){Ki(this,E(this,\\\number\\\typeof e?F(e,t||0):e),null,n)}),setSelection:n(function(e,t,n){Ki(this,E(this,e),E(this,t||e),n)}),extendSelection:n(function(e,t,n){Gi(this,E(this,e),t&&E(this,t),n)}),extendSelections:n(function(e,t){Ui(this,Mt(this,e),t)}),extendSelectionsBy:n(function(e,t){Ui(this,Mt(this,Se(this.sel.ranges,e)),t)}),setSelections:n(function(e,t,n){if(e.length){for(var r,i0;i\u003Ce.length;i++)rinew G(E(this,ei.anchor),E(this,ei.head||ei.anchor));nullt&&(tMath.min(e.length-1,this.sel.primIndex)),U(this,vi(this.cm,r,t),n)}}),addSelection:n(function(e,t,n){var rthis.sel.ranges.slice(0);r.push(new G(E(this,e),E(this,t||e))),U(this,vi(this.cm,r,r.length-1),n)}),getSelection:function(e){for(var tthis.sel.ranges,n0;n\u003Ct.length;n++)var rmt(this,tn.from(),tn.to()),ii?i.concat(r):r;return!1e?i:i.join(e||this.lineSeparator())},getSelections:function(e){for(var t,nthis.sel.ranges,r0;r\u003Cn.length;r++){var imt(this,nr.from(),nr.to());!1!e&&(ii.join(e||this.lineSeparator())),tri}return t},replaceSelection:function(e,t,n){for(var r,i0;i\u003Cthis.sel.ranges.length;i++)rie;this.replaceSelections(r,t,n||\\\+input\\\)},replaceSelections:n(function(e,t,n){for(var r,ithis.sel,o0;o\u003Ci.ranges.length;o++){var li.rangeso;ro{from:l.from(),to:l.to(),text:this.splitLines(eo),origin:n}}for(var tt&&\\\end\\\!t&&function(e,t,n){for(var r,iuF(e.first,0),o0;o\u003Ct.length;o++){var lto,sCi(l.from,u,i),aCi(bi(l),u,i),ul.to,ia;\\\around\\\n?(lP((le.sel.rangeso).head,l.anchor)\u003C0,ronew G(l?a:s,l?s:a)):ronew G(s,s)}return new B(r,e.sel.primIndex)}(this,r,t),sr.length-1;0\u003Cs;s--)to(this,rs);t?ji(this,t):this.cm&&Pr(this.cm)}),undo:n(function(){ro(this,\\\undo\\\)}),redo:n(function(){ro(this,\\\redo\\\)}),undoSelection:n(function(){ro(this,\\\undo\\\,!0)}),redoSelection:n(function(){ro(this,\\\redo\\\,!0)}),setExtending:function(e){this.extende},getExtending:function(){return this.extend},historySize:function(){for(var ethis.history,t0,n0,r0;r\u003Ce.done.length;r++)e.doner.ranges||++t;for(var i0;i\u003Ce.undone.length;i++)e.undonei.ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var tthis;this.historynew Ai(this.history),Mi(this,function(e){return e.historyt.history},!0)},markClean:function(){this.cleanGenerationthis.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOpthis.history.lastSelOpthis.history.lastOriginnull),this.history.generation},isClean:function(e){return this.history.generation(e||this.cleanGeneration)},getHistory:function(){return{done:Ii(this.history.done),undone:Ii(this.history.undone)}},setHistory:function(e){var tthis.historynew Ai(this.history);t.doneIi(e.done.slice(0),null,!0),t.undoneIi(e.undone.slice(0),null,!0)},setGutterMarker:n(function(e,n,r){return co(this,e,\\\gutter\\\,function(e){var te.gutterMarkers||(e.gutterMarkers{});return!(tnr)&&Oe(t)&&(e.gutterMarkersnull),1})}),clearGutter:n(function(t){var nthis;this.iter(function(e){e.gutterMarkers&&e.gutterMarkerst&&co(n,e,\\\gutter\\\,function(){return e.gutterMarkerstnull,Oe(e.gutterMarkers)&&(e.gutterMarkersnull),1})})}),lineInfo:function(e){var t;if(\\\number\\\typeof e){if(!wt(this,e))return null;if(!(eW(this,te)))return null}else if(null(tH(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:n(function(e,n,r){return co(this,e,\\\gutter\\\n?\\\gutter\\\:\\\class\\\,function(e){var t\\\text\\\n?\\\textClass\\\:\\\background\\\n?\\\bgClass\\\:\\\gutter\\\n?\\\gutterClass\\\:\\\wrapClass\\\;if(et){if(J(r).test(et))return;et+\\\ \\\+r}else etr;return 1})}),removeLineClass:n(function(e,o,l){return co(this,e,\\\gutter\\\o?\\\gutter\\\:\\\class\\\,function(e){var t\\\text\\\o?\\\textClass\\\:\\\background\\\o?\\\bgClass\\\:\\\gutter\\\o?\\\gutterClass\\\:\\\wrapClass\\\,net;if(n){if(nulll)etnull;else{var rn.match(J(l));if(!r)return;var ir.index+r0.length;etn.slice(0,r.index)+(r.index&&i!n.length?\\\ \\\:\\\\\\)+n.slice(i)||null}return 1}})}),addLineWidget:n(function(e,t,n){return ee,inew po(rthis,t,n),(or.cm)&&i.noHScroll&&(o.display.alignWidgets!0),co(r,e,\\\widget\\\,function(e){var te.widgets||(e.widgets);return nulli.insertAt?t.push(i):t.splice(Math.min(t.length,Math.max(0,i.insertAt)),0,i),i.linee,o&&!on(r,e)&&(tln(e)\u003Cr.scrollTop,yt(e,e.height+On(i)),t&&Fr(o,i.height),o.curOp.forceUpdate!0),1}),o&&b(o,\\\lineWidgetAdded\\\,o,i,\\\number\\\typeof e?e:H(e)),i;var r,i,o}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return yo(this,E(this,e),E(this,t),n,n&&n.type||\\\range\\\)},setBookmark:function(e,t){t{replacedWith:t&&(nullt.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return yo(this,eE(this,e),e,t,\\\bookmark\\\)},findMarksAt:function(e){var t,nW(this,(eE(this,e)).line).markedSpans;if(n)for(var r0;r\u003Cn.length;++r){var inr;(nulli.from||i.from\u003Ce.ch)&&(nulli.to||i.to>e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){iE(this,i),oE(this,o);var s,ai.line;return this.iter(i.line,o.line+1,function(e){var te.markedSpans;if(t)for(var n0;n\u003Ct.length;n++){var rtn;null!r.to&&ai.line&&i.ch>r.to||nullr.from&&a!i.line||null!r.from&&ao.line&&r.from>o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r;return this.iter(function(e){var te.markedSpans;if(t)for(var n0;n\u003Ct.length;++n)null!tn.from&&r.push(tn.marker)}),r},posFromIndex:function(t){var n,rthis.first,ithis.lineSeparator().length;return this.iter(function(e){ee.text.length+i;if(t\u003Ce)return nt,!0;t-e,++r}),E(this,F(r,n))},indexFromPos:function(e){var t(eE(this,e)).ch;if(e.line\u003Cthis.first||e.ch\u003C0)return 0;var nthis.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+e.text.length+n}),t},copy:function(e){var tnew f(vt(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTopthis.scrollTop,t.scrollLeftthis.scrollLeft,t.selthis.sel,t.extend!1,e&&(t.history.undoDepththis.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){for(var tthis.first,nthis.first+this.size,n(null!(ee||{}).from&&e.from>t&&(te.from),null!e.to&&e.to\u003Cn&&(ne.to),new f(vt(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction)),r(e.sharedHist&&(n.historythis.history),(this.linked||(this.linked)).push({doc:n,sharedHist:e.sharedHist}),n.linked{doc:this,isParent:!0,sharedHist:e.sharedHist},n),iwo(this),o0;o\u003Ci.length;o++){var lio,sl.find(),ar.clipPos(s.from),sr.clipPos(s.to);P(a,s)&&(ayo(r,a,s,l.primary,l.primary.type),l.markers.push(a),a.parentl)}return n},unlinkDoc:function(e){if(e instanceof p&&(ee.doc),this.linked)for(var t0;t\u003Cthis.linked.length;++t){var nthis.linkedt;if(n.doce){this.linked.splice(t,1),e.unlinkDoc(this),xo(wo(this));break}}var r;e.historythis.history&&(re.id,Mi(e,function(e){return r.push(e.id)},!0),e.historynew Ai(null),e.history.doneIi(this.history.done,r),e.history.undoneIi(this.history.undone,r))},iterLinkedDocs:function(e){Mi(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):rt(e)},lineSeparator:function(){return this.lineSep||\\\\\\\n\\\},setDirection:n(function(e){var t;(e\\\rtl\\\!e?\\\ltr\\\:e)!this.direction&&(this.directione,this.iter(function(e){return e.ordernull}),this.cm&&h(tthis.cm,function(){Oi(t),R(t)}))})})).eachLinef.prototype.iter,0);function Lo(e){var rthis;if(ko(r),!A(r,e)&&!An(r.display,e)){D(e),w&&(So+new Date);var tgr(r,e,!0),ne.dataTransfer.files;if(t&&!r.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var in.length,oArray(i),l0,sfunction(){++li&&I(r,function(){var e{from:tE(r.doc,t),to:t,text:r.doc.splitLines(o.filter(function(e){return null!e}).join(r.doc.lineSeparator())),origin:\\\paste\\\};to(r.doc,e),ji(r.doc,yi(E(r.doc,t),E(r.doc,bi(e))))})()},a0;a\u003Cn.length;a++)!function(e,t){var n;r.options.allowDropFileTypes&&-1L(r.options.allowDropFileTypes,e.type)?s():((nnew FileReader).onerrorfunction(){return s()},n.onloadfunction(){var en.result;/\\\\x00-\\\\x08\\\\x0e-\\\\x1f{2}/.test(e)||(ote),s()},n.readAsText(e))}(na,a);else{if(r.state.draggingText&&-1\u003Cr.doc.sel.contains(t))return r.state.draggingText(e),void setTimeout(function(){return r.display.input.focus()},20);try{var u,ce.dataTransfer.getData(\\\Text\\\);if(c){if(r.state.draggingText&&!r.state.draggingText.copy&&(ur.listSelections()),Xi(r.doc,yi(t,t)),u)for(var h0;h\u003Cu.length;++h)lo(r.doc,\\\\\\,uh.anchor,uh.head,\\\drag\\\);r.replaceSelection(c,\\\around\\\,\\\paste\\\),r.display.input.focus()}}catch(e){}}}}function ko(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursornull)}function To(t){if(document.getElementsByClassName){for(var edocument.getElementsByClassName(\\\CodeMirror\\\),n,r0;r\u003Ce.length;r++){var ier.CodeMirror;i&&n.push(i)}n.length&&n0.operation(function(){for(var e0;e\u003Cn.length;e++)t(ne)})}}var Mo!1;function No(){var e;Mo||(k(window,\\\resize\\\,function(){nulle&&(esetTimeout(function(){enull,To(Oo)},100))}),k(window,\\\blur\\\,function(){return To(Or)}),Mo!0)}function Oo(e){var te.display;t.cachedCharWidtht.cachedTextHeightt.cachedPaddingHnull,t.scrollbarsClipped!1,e.setSize()}for(var Ao{3:\\\Pause\\\,8:\\\Backspace\\\,9:\\\Tab\\\,13:\\\Enter\\\,16:\\\Shift\\\,17:\\\Ctrl\\\,18:\\\Alt\\\,19:\\\Pause\\\,20:\\\CapsLock\\\,27:\\\Esc\\\,32:\\\Space\\\,33:\\\PageUp\\\,34:\\\PageDown\\\,35:\\\End\\\,36:\\\Home\\\,37:\\\Left\\\,38:\\\Up\\\,39:\\\Right\\\,40:\\\Down\\\,44:\\\PrintScrn\\\,45:\\\Insert\\\,46:\\\Delete\\\,59:\\\;\\\,61:\\\\\\,91:\\\Mod\\\,92:\\\Mod\\\,93:\\\Mod\\\,106:\\\*\\\,107:\\\\\\,109:\\\-\\\,110:\\\.\\\,111:\\\/\\\,145:\\\ScrollLock\\\,173:\\\-\\\,186:\\\;\\\,187:\\\\\\,188:\\\,\\\,189:\\\-\\\,190:\\\.\\\,191:\\\/\\\,192:\\\`\\\,219:\\\\\\,220:\\\\\\\\\\\\\\,221:\\\\\\,222:\\\\\\,224:\\\Mod\\\,63232:\\\Up\\\,63233:\\\Down\\\,63234:\\\Left\\\,63235:\\\Right\\\,63272:\\\Delete\\\,63273:\\\Home\\\,63275:\\\End\\\,63276:\\\PageUp\\\,63277:\\\PageDown\\\,63302:\\\Insert\\\},Do0;Do\u003C10;Do++)AoDo+48AoDo+96String(Do);for(var Wo65;Wo\u003C90;Wo++)AoWoString.fromCharCode(Wo);for(var Ho1;Ho\u003C12;Ho++)AoHo+111AoHo+63235\\\F\\\+Ho;var Fo{};function Po(e){var t,n,r,i,oe.split(/-(?!$)/);eoo.length-1;for(var l0;l\u003Co.length-1;l++){var sol;if(/^(cmd|meta|m)$/i.test(s))i!0;else if(/^a(lt)?$/i.test(s))t!0;else if(/^(c|ctrl|control)$/i.test(s))n!0;else{if(!/^s(hift)?$/i.test(s))throw new Error(\\\Unrecognized modifier name: \\\+s);r!0}}return t&&(e\\\Alt-\\\+e),n&&(e\\\Ctrl-\\\+e),i&&(e\\\Cmd-\\\+e),er?\\\Shift-\\\+e:e}function Eo(e){var t,n,r{};for(t in e)if(e.hasOwnProperty(t)){var iet;if(!/^(name|fallthrough|(de|at)tach)$/.test(t))if(\\\...\\\i)delete et;else{for(var oSe(t.split(\\\ \\\),Po),l0;l\u003Co.length;l++){var svoid 0,avoid 0,slo.length-1?(ao.join(\\\ \\\),i):(ao.slice(0,l+1).join(\\\ \\\),\\\...\\\),ura;if(u){if(u!s)throw new Error(\\\Inconsistent bindings for \\\+a)}else ras}delete et}}for(n in r)enrn;return e}function Ro(e,t,n,r){var i(tGo(t)).call?t.call(e,r):te;if(!1i)return\\\nothing\\\;if(\\\...\\\i)return\\\multi\\\;if(null!i&&n(i))return\\\handled\\\;if(t.fallthrough){if(\\\object Array\\\!Object.prototype.toString.call(t.fallthrough))return Ro(e,t.fallthrough,n,r);for(var o0;o\u003Ct.fallthrough.length;o++){var lRo(e,t.fallthrougho,n,r);if(l)return l}}}function zo(e){e\\\string\\\typeof e?e:Aoe.keyCode;return\\\Ctrl\\\e||\\\Alt\\\e||\\\Shift\\\e||\\\Mod\\\e}function Io(e,t,n){var re;return t.altKey&&\\\Alt\\\!r&&(e\\\Alt-\\\+e),(Z?t.metaKey:t.ctrlKey)&&\\\Ctrl\\\!r&&(e\\\Ctrl-\\\+e),(Z?t.ctrlKey:t.metaKey)&&\\\Mod\\\!r&&(e\\\Cmd-\\\+e),e!n&&t.shiftKey&&\\\Shift\\\!r?\\\Shift-\\\+e:e}function Bo(e,t){if(K&&34e.keyCode&&e.char)return!1;var nAoe.keyCode;return null!n&&!e.altGraphKey&&Io(n3e.keyCode&&e.code?e.code:n,e,t)}function Go(e){return\\\string\\\typeof e?Foe:e}function Uo(t,e){for(var nt.doc.sel.ranges,r,i0;i\u003Cn.length;i++){for(var oe(ni);r.length&&P(o.from,z(r).to)\u003C0;){var lr.pop();if(P(l.from,o.from)\u003C0){o.froml.from;break}}r.push(o)}h(t,function(){for(var er.length-1;0\u003Ce;e--)lo(t.doc,\\\\\\,re.from,re.to,\\\+delete\\\);Pr(t)})}function Vo(e,t,n){tWe(e.text,t+n,n);return t\u003C0||t>e.text.length?null:t}function Ko(e,t,n){eVo(e,t.ch,n);return nulle?null:new F(t.line,e,n\u003C0?\\\after\\\:\\\before\\\)}function jo(e,t,n,r,i){if(e){\\\rtl\\\t.doc.direction&&(i-i);var o,l,s,a,eVe(n,t.doc.direction);if(e)return oi\u003C0(1(ei\u003C0?z(e):e0).level)?\\\after\\\:\\\before\\\,0\u003Ce.level||\\\rtl\\\t.doc.direction?(lBn(t,n),si\u003C0?n.text.length-1:0,aGn(t,l,s).top,sHe(function(e){return Gn(t,l,e).topa},i\u003C0(1e.level)?e.from:e.to-1,s),\\\before\\\o&&(sVo(n,s,1))):si\u003C0?e.to:e.from,new F(r,s,o)}return new F(r,i\u003C0?n.text.length:0,i\u003C0?\\\before\\\:\\\after\\\)}function Xo(t,n,s,e){var aVe(n,t.doc.direction);if(!a)return Ko(n,s,e);s.ch>n.text.length?(s.chn.text.length,s.sticky\\\before\\\):s.ch\u003C0&&(s.ch0,s.sticky\\\after\\\);var rPe(a,s.ch,s.sticky),iar;if(\\\ltr\\\t.doc.direction&&i.level%20&&(0\u003Ce?i.to>s.ch:i.from\u003Cs.ch))return Ko(n,s,e);function u(e,t){return Vo(n,e instanceof F?e.ch:e,t)}function o(e){return t.options.lineWrapping?(ll||Bn(t,n),or(t,n,l,e)):{begin:0,end:n.text.length}}var l,co(\\\before\\\s.sticky?u(s,-1):s.ch);if(\\\rtl\\\t.doc.direction||1i.level){var h1i.levele\u003C0,du(s,h?1:-1);if(null!d&&(h?d\u003Ci.to&&d\u003Cc.end:d>i.from&&d>c.begin))return new F(s.line,d,h?\\\before\\\:\\\after\\\)}function f(e,t,n){for(var rfunction(e,t){return t?new F(s.line,u(e,1),\\\before\\\):new F(s.line,e,\\\after\\\)};0\u003Ce&&e\u003Ca.length;e+t){var iae,o0\u003Ct(1!i.level),lo?n.begin:u(n.end,-1);if(i.from\u003Cl&&l\u003Ci.to)return r(l,o);if(lo?i.from:u(i.to,-1),n.begin\u003Cl&&l\u003Cn.end)return r(l,o)}}if(r+e,e,c);if(i)return i;d0\u003Ce?c.end:u(c.begin,-1);return nulld||0\u003Ce&&dn.text.length||!(if(0\u003Ce?0:a.length-1,e,o(d)))?null:i}Fo.basic{Left:\\\goCharLeft\\\,Right:\\\goCharRight\\\,Up:\\\goLineUp\\\,Down:\\\goLineDown\\\,End:\\\goLineEnd\\\,Home:\\\goLineStartSmart\\\,PageUp:\\\goPageUp\\\,PageDown:\\\goPageDown\\\,Delete:\\\delCharAfter\\\,Backspace:\\\delCharBefore\\\,\\\Shift-Backspace\\\:\\\delCharBefore\\\,Tab:\\\defaultTab\\\,\\\Shift-Tab\\\:\\\indentAuto\\\,Enter:\\\newlineAndIndent\\\,Insert:\\\toggleOverwrite\\\,Esc:\\\singleSelection\\\},Fo.pcDefault{\\\Ctrl-A\\\:\\\selectAll\\\,\\\Ctrl-D\\\:\\\deleteLine\\\,\\\Ctrl-Z\\\:\\\undo\\\,\\\Shift-Ctrl-Z\\\:\\\redo\\\,\\\Ctrl-Y\\\:\\\redo\\\,\\\Ctrl-Home\\\:\\\goDocStart\\\,\\\Ctrl-End\\\:\\\goDocEnd\\\,\\\Ctrl-Up\\\:\\\goLineUp\\\,\\\Ctrl-Down\\\:\\\goLineDown\\\,\\\Ctrl-Left\\\:\\\goGroupLeft\\\,\\\Ctrl-Right\\\:\\\goGroupRight\\\,\\\Alt-Left\\\:\\\goLineStart\\\,\\\Alt-Right\\\:\\\goLineEnd\\\,\\\Ctrl-Backspace\\\:\\\delGroupBefore\\\,\\\Ctrl-Delete\\\:\\\delGroupAfter\\\,\\\Ctrl-S\\\:\\\save\\\,\\\Ctrl-F\\\:\\\find\\\,\\\Ctrl-G\\\:\\\findNext\\\,\\\Shift-Ctrl-G\\\:\\\findPrev\\\,\\\Shift-Ctrl-F\\\:\\\replace\\\,\\\Shift-Ctrl-R\\\:\\\replaceAll\\\,\\\Ctrl-\\\:\\\indentLess\\\,\\\Ctrl-\\\:\\\indentMore\\\,\\\Ctrl-U\\\:\\\undoSelection\\\,\\\Shift-Ctrl-U\\\:\\\redoSelection\\\,\\\Alt-U\\\:\\\redoSelection\\\,fallthrough:\\\basic\\\},Fo.emacsy{\\\Ctrl-F\\\:\\\goCharRight\\\,\\\Ctrl-B\\\:\\\goCharLeft\\\,\\\Ctrl-P\\\:\\\goLineUp\\\,\\\Ctrl-N\\\:\\\goLineDown\\\,\\\Ctrl-A\\\:\\\goLineStart\\\,\\\Ctrl-E\\\:\\\goLineEnd\\\,\\\Ctrl-V\\\:\\\goPageDown\\\,\\\Shift-Ctrl-V\\\:\\\goPageUp\\\,\\\Ctrl-D\\\:\\\delCharAfter\\\,\\\Ctrl-H\\\:\\\delCharBefore\\\,\\\Alt-Backspace\\\:\\\delWordBefore\\\,\\\Ctrl-K\\\:\\\killLine\\\,\\\Ctrl-T\\\:\\\transposeChars\\\,\\\Ctrl-O\\\:\\\openLine\\\},Fo.macDefault{\\\Cmd-A\\\:\\\selectAll\\\,\\\Cmd-D\\\:\\\deleteLine\\\,\\\Cmd-Z\\\:\\\undo\\\,\\\Shift-Cmd-Z\\\:\\\redo\\\,\\\Cmd-Y\\\:\\\redo\\\,\\\Cmd-Home\\\:\\\goDocStart\\\,\\\Cmd-Up\\\:\\\goDocStart\\\,\\\Cmd-End\\\:\\\goDocEnd\\\,\\\Cmd-Down\\\:\\\goDocEnd\\\,\\\Alt-Left\\\:\\\goGroupLeft\\\,\\\Alt-Right\\\:\\\goGroupRight\\\,\\\Cmd-Left\\\:\\\goLineLeft\\\,\\\Cmd-Right\\\:\\\goLineRight\\\,\\\Alt-Backspace\\\:\\\delGroupBefore\\\,\\\Ctrl-Alt-Backspace\\\:\\\delGroupAfter\\\,\\\Alt-Delete\\\:\\\delGroupAfter\\\,\\\Cmd-S\\\:\\\save\\\,\\\Cmd-F\\\:\\\find\\\,\\\Cmd-G\\\:\\\findNext\\\,\\\Shift-Cmd-G\\\:\\\findPrev\\\,\\\Cmd-Alt-F\\\:\\\replace\\\,\\\Shift-Cmd-Alt-F\\\:\\\replaceAll\\\,\\\Cmd-\\\:\\\indentLess\\\,\\\Cmd-\\\:\\\indentMore\\\,\\\Cmd-Backspace\\\:\\\delWrappedLineLeft\\\,\\\Cmd-Delete\\\:\\\delWrappedLineRight\\\,\\\Cmd-U\\\:\\\undoSelection\\\,\\\Shift-Cmd-U\\\:\\\redoSelection\\\,\\\Ctrl-Up\\\:\\\goDocStart\\\,\\\Ctrl-Down\\\:\\\goDocEnd\\\,fallthrough:\\\basic\\\,\\\emacsy\\\},Fo.defaultC?Fo.macDefault:Fo.pcDefault;var Yo{selectAll:Ji,singleSelection:function(e){return e.setSelection(e.getCursor(\\\anchor\\\),e.getCursor(\\\head\\\),ve)},killLine:function(n){return Uo(n,function(e){var t;return e.empty()?(tW(n.doc,e.head.line).text.length,e.head.cht&&e.head.line\u003Cn.lastLine()?{from:e.head,to:F(e.head.line+1,0)}:{from:e.head,to:F(e.head.line,t)}):{from:e.from(),to:e.to()}})},deleteLine:function(t){return Uo(t,function(e){return{from:F(e.from().line,0),to:E(t.doc,F(e.to().line+1,0))}})},delLineLeft:function(e){return Uo(e,function(e){return{from:F(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(n){return Uo(n,function(e){var tn.charCoords(e.head,\\\div\\\).top+5;return{from:n.coordsChar({left:0,top:t},\\\div\\\),to:e.from()}})},delWrappedLineRight:function(n){return Uo(n,function(e){var tn.charCoords(e.head,\\\div\\\).top+5,tn.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},\\\div\\\);return{from:e.from(),to:t}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(F(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(F(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return $o(t,e.head.line)},{origin:\\\+move\\\,bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return _o(t,e.head)},{origin:\\\+move\\\,bias:1})},goLineEnd:function(i){return i.extendSelectionsBy(function(e){var ti,ee.head.line,nW(t.doc,e),rfunction(e){for(var t;tJt(e);)et.find(1,!0).line;return e}(n);return r!n&&(eH(r)),jo(!0,t,n,e,-1)},{origin:\\\+move\\\,bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){et.cursorCoords(e.head,\\\div\\\).top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:e},\\\div\\\)},be)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){et.cursorCoords(e.head,\\\div\\\).top+5;return t.coordsChar({left:0,top:e},\\\div\\\)},be)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var tn.cursorCoords(e.head,\\\div\\\).top+5,tn.coordsChar({left:0,top:t},\\\div\\\);return t.ch\u003Cn.getLine(t.line).search(/\\\\S/)?_o(n,e.head):t},be)},goLineUp:function(e){return e.moveV(-1,\\\line\\\)},goLineDown:function(e){return e.moveV(1,\\\line\\\)},goPageUp:function(e){return e.moveV(-1,\\\page\\\)},goPageDown:function(e){return e.moveV(1,\\\page\\\)},goCharLeft:function(e){return e.moveH(-1,\\\char\\\)},goCharRight:function(e){return e.moveH(1,\\\char\\\)},goColumnLeft:function(e){return e.moveH(-1,\\\column\\\)},goColumnRight:function(e){return e.moveH(1,\\\column\\\)},goWordLeft:function(e){return e.moveH(-1,\\\word\\\)},goGroupRight:function(e){return e.moveH(1,\\\group\\\)},goGroupLeft:function(e){return e.moveH(-1,\\\group\\\)},goWordRight:function(e){return e.moveH(1,\\\word\\\)},delCharBefore:function(e){return e.deleteH(-1,\\\codepoint\\\)},delCharAfter:function(e){return e.deleteH(1,\\\char\\\)},delWordBefore:function(e){return e.deleteH(-1,\\\word\\\)},delWordAfter:function(e){return e.deleteH(1,\\\word\\\)},delGroupBefore:function(e){return e.deleteH(-1,\\\group\\\)},delGroupAfter:function(e){return e.deleteH(1,\\\group\\\)},indentAuto:function(e){return e.indentSelection(\\\smart\\\)},indentMore:function(e){return e.indentSelection(\\\add\\\)},indentLess:function(e){return e.indentSelection(\\\subtract\\\)},insertTab:function(e){return e.replaceSelection(\\\\\\\t\\\)},insertSoftTab:function(e){for(var t,ne.listSelections(),re.options.tabSize,i0;i\u003Cn.length;i++){var oni.from(),oS(e.getLine(o.line),o.ch,r);t.push(Ce(r-o%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\\\add\\\):e.execCommand(\\\insertTab\\\)},transposeChars:function(l){return h(l,function(){for(var e,t,n,rl.listSelections(),i,o0;o\u003Cr.length;o++)ro.empty()&&(ero.head,(tW(l.doc,e.line).text)&&(0\u003C(ee.cht.length?new F(e.line,e.ch-1):e).ch?(enew F(e.line,e.ch+1),l.replaceRange(t.charAt(e.ch-1)+t.charAt(e.ch-2),F(e.line,e.ch-2),e,\\\+transpose\\\)):e.line>l.doc.first&&((nW(l.doc,e.line-1).text)&&(enew F(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),F(e.line-1,n.length-1),e,\\\+transpose\\\)))),i.push(new G(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return h(r,function(){for(var e(tr.listSelections()).length-1;0\u003Ce;e--)r.replaceRange(r.doc.lineSeparator(),te.anchor,te.head,\\\+input\\\);for(var tr.listSelections(),n0;n\u003Ct.length;n++)r.indentLine(tn.from().line,null,!0);Pr(r)})},openLine:function(e){return e.replaceSelection(\\\\\\\n\\\,\\\start\\\)},toggleOverwrite:function(e){return e.toggleOverwrite()}};function $o(e,t){var nW(e.doc,t),rtn(n);return jo(!0,e,r,tr!n?H(r):t,1)}function _o(e,t){var n$o(e,t.line),rW(e.doc,n.line),eVe(r,e.doc.direction);return e&&0!e0.level?n:(eMath.max(n.ch,r.text.search(/\\\\S/)),rt.linen.line&&t.ch\u003Ce&&t.ch,F(n.line,r?0:e,n.sticky))}function qo(e,t,n){if(\\\string\\\typeof t&&!(tYot))return!1;e.display.input.ensurePolled();var re.display.shift,i!1;try{e.isReadOnly()&&(e.state.suppressEdits!0),n&&(e.display.shift!1),it(e)!me}finally{e.display.shiftr,e.state.suppressEdits!1}return i}var Zonew pe;function Qo(e,t,n,r){var ie.state.keySeq;if(i){if(zo(t))return\\\handled\\\;if(/\\\\$/.test(t)?e.state.keySeqnull:Zo.set(50,function(){e.state.keySeqi&&(e.state.keySeqnull,e.display.input.reset())}),Jo(e,i+\\\ \\\+t,n,r))return!0}return Jo(e,t,n,r)}function Jo(e,t,n,r){rfunction(e,t,n){for(var r0;r\u003Ce.state.keyMaps.length;r++){var iRo(t,e.state.keyMapsr,n,e);if(i)return i}return e.options.extraKeys&&Ro(t,e.options.extraKeys,n,e)||Ro(t,e.options.keyMap,n,e)}(e,t,r);return\\\multi\\\r&&(e.state.keySeqt),\\\handled\\\r&&b(e,\\\keyHandled\\\,e,t,n),\\\handled\\\!r&&\\\multi\\\!r||(D(n),kr(e)),!!r}function el(t,e){var nBo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?Qo(t,\\\Shift-\\\+n,e,function(e){return qo(t,e,!0)})||Qo(t,n,e,function(e){if(\\\string\\\typeof e?/^goA-Z/.test(e):e.motion)return qo(t,e)}):Qo(t,n,e,function(e){return qo(t,e)}))}var tlnull;function nl(e){var t,n,r,ithis;function o(e){18!e.keyCode&&e.altKey||(ee(r,\\\CodeMirror-crosshair\\\),T(document,\\\keyup\\\,o),T(document,\\\mouseover\\\,o))}e.target&&e.target!i.display.input.getField()||(i.curOp.focusN(ue(i)),A(i,e)||(w&&v\u003C11&&27e.keyCode&&(e.returnValue!1),te.keyCode,i.display.shift16t||e.shiftKey,nel(i,e),K&&(tln?t:null,!n&&88t&&!ot&&(C?e.metaKey:e.ctrlKey)&&i.replaceSelection(\\\\\\,null,\\\cut\\\)),d&&!C&&!n&&46t&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand(\\\cut\\\),18!t||/\\\\bCodeMirror-crosshair\\\\b/.test(i.display.lineDiv.className)||(ie(ri.display.lineDiv,\\\CodeMirror-crosshair\\\),k(document,\\\keyup\\\,o),k(document,\\\mouseover\\\,o))))}function rl(e){16e.keyCode&&(this.doc.sel.shift!1),A(this,e)}function il(e){var tthis;if(!(e.target&&e.target!t.display.input.getField()||An(t.display,e)||A(t,e)||e.ctrlKey&&!e.altKey||C&&e.metaKey)){var n,re.keyCode,ie.charCode;if(K&&rtl)return tlnull,void D(e);K&&(!e.which||e.which\u003C10)&&el(t,e)||(\\\\\\\b\\\(rString.fromCharCode(nulli?r:i))||Qo(nt,\\\\\\+r+\\\\\\,e,function(e){return qo(n,e,!0)})||t.display.input.onKeyPress(e))}}function ol(e,t,n){this.timee,this.post,this.buttonn}var ll,sl;function al(e){var t,n,r,i,o,l,s,a,u,cthis,hc.display;A(c,e)||h.activeTouch&&h.input.supportsTouch()||(h.input.ensurePolled(),h.shifte.shiftKey,An(h,e)?x||(h.scroller.draggable!1,setTimeout(function(){return h.scroller.draggable!0},100)):hl(c,e)||(tgr(c,e),nJe(e),rt?(it,on,r+new Date,sl&&sl.compare(r,i,o)?(llslnull,\\\triple\\\):ll&&ll.compare(r,i,o)?(slnew ol(r,i,o),llnull,\\\double\\\):(llnew ol(r,i,o),slnull,\\\single\\\)):\\\single\\\,he(c).focus(),1n&&c.state.selectingText&&c.state.selectingText(e),t&&function(n,e,r,t,i){var o\\\Click\\\;\\\double\\\t?o\\\Double\\\+o:\\\triple\\\t&&(o\\\Triple\\\+o);return Qo(n,Io(o(1e?\\\Left\\\:2e?\\\Middle\\\:\\\Right\\\)+o,i),i,function(e){if(!(e\\\string\\\typeof e?Yoe:e))return!1;var t!1;try{n.isReadOnly()&&(n.state.suppressEdits!0),te(n,r)!me}finally{n.state.suppressEdits!1}return t})}(c,n,t,r,e)||(1n?t?(ic,ot,lr,se,w?setTimeout(de(Tr,i),0):i.curOp.focusN(ue(i)),afunction(e,t,n){var re.getOption(\\\configureMouse\\\),rr?r(e,t,n):{};{var i;nullr.unit&&(iq?n.shiftKey&&n.metaKey:n.altKey,r.uniti?\\\rectangle\\\:\\\single\\\t?\\\char\\\:\\\double\\\t?\\\word\\\:\\\line\\\)}null!r.extend&&!e.doc.extend||(r.extende.doc.extend||n.shiftKey);nullr.addNew&&(r.addNewC?n.metaKey:n.ctrlKey);nullr.moveOnDrag&&(r.moveOnDrag!(C?n.altKey:n.ctrlKey));return r}(i,l,s),ui.doc.sel,(i.options.dragDrop&&nt&&!i.isReadOnly()&&\\\single\\\l&&-1\u003C(lu.contains(o))&&(P((lu.rangesl).from(),o)\u003C0||0\u003Co.xRel)&&(0\u003CP(l.to(),o)||o.xRel\u003C0)?function(t,n,r,i){var ot.display,l!1,sI(t,function(e){x&&(o.scroller.draggable!1),t.state.draggingText!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent!1:Mr(t)),T(o.wrapper.ownerDocument,\\\mouseup\\\,s),T(o.wrapper.ownerDocument,\\\mousemove\\\,a),T(o.scroller,\\\dragstart\\\,u),T(o.scroller,\\\drop\\\,s),l||(D(e),i.addNew||Gi(t.doc,r,null,null,i.extend),x&&!j||w&&9v?setTimeout(function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()},20):o.input.focus())}),afunction(e){ll||10\u003CMath.abs(n.clientX-e.clientX)+Math.abs(n.clientY-e.clientY)},ufunction(){return l!0};x&&(o.scroller.draggable!0);(t.state.draggingTexts).copy!i.moveOnDrag,k(o.wrapper.ownerDocument,\\\mouseup\\\,s),k(o.wrapper.ownerDocument,\\\mousemove\\\,a),k(o.scroller,\\\dragstart\\\,u),k(o.scroller,\\\drop\\\,s),t.state.delayingBlurEvent!0,setTimeout(function(){return o.input.focus()},20),o.scroller.dragDrop&&o.scroller.dragDrop()}:function(d,e,f,p){w&&Mr(d);var ld.display,gd.doc;D(e);var m,v,yg.sel,ty.ranges;p.addNew&&!p.extend?(vg.sel.contains(f),m-1\u003Cv?tv:new G(f,f)):(mg.sel.primary(),vg.sel.primIndex);\\\rectangle\\\p.unit?(p.addNew||(mnew G(f,f)),fgr(d,e,!0,!0),v-1):(eul(d,f,p.unit),mp.extend?Bi(m,e.anchor,e.head,p.extend):e);p.addNew?-1v?(vt.length,U(g,vi(d,t.concat(m),v),{scroll:!1,origin:\\\*mouse\\\})):1\u003Ct.length&&tv.empty()&&\\\char\\\p.unit&&!p.extend?(U(g,vi(d,t.slice(0,v).concat(t.slice(v+1)),0),{scroll:!1,origin:\\\*mouse\\\}),yg.sel):Vi(g,v,m,ye):(U(g,new B(m,v0),ye),yg.sel);var bf;function s(e){if(0!P(b,e))if(be,\\\rectangle\\\p.unit){for(var t,nd.options.tabSize,rS(W(g,f.line).text,f.ch,n),iS(W(g,e.line).text,e.ch,n),oMath.min(r,i),lMath.max(r,i),sMath.min(f.line,e.line),aMath.min(d.lastLine(),Math.max(f.line,e.line));s\u003Ca;s++){var uW(g,s).text,cwe(u,o,n);ol?t.push(new G(F(s,c),F(s,c))):u.length>c&&t.push(new G(F(s,c),F(s,we(u,l,n))))}t.length||t.push(new G(f,f)),U(g,vi(d,y.ranges.slice(0,v).concat(t),v),{origin:\\\*mouse\\\,scroll:!1}),d.scrollIntoView(e)}else{var h,rm,iul(d,e,p.unit),er.anchor,e0\u003CP(i.anchor,e)?(hi.head,kt(r.from(),i.anchor)):(hi.anchor,Lt(r.to(),i.head)),ry.ranges.slice(0);rvfunction(e,t){var nt.anchor,rt.head,iW(e.doc,n.line);if(0P(n,r)&&n.stickyr.sticky)return t;iVe(i);if(!i)return t;var oPe(i,n.ch,n.sticky),lio;if(l.from!n.ch&&l.to!n.ch)return t;var so+(l.fromn.ch(1!l.level)?0:1);if(0s||si.length)return t;lr.line!n.line?0\u003C(r.line-n.line)*(\\\ltr\\\e.doc.direction?1:-1):(ePe(i,r.ch,r.sticky),oe-o||(r.ch-n.ch)*(1l.level?-1:1),es-1||es?o\u003C0:0\u003Co);eis+(l?-1:0),ol(1e.level),io?e.from:e.to,so?\\\after\\\:\\\before\\\;return n.chi&&n.stickys?t:new G(new F(n.line,i,s),r)}(d,new G(E(g,e),h)),U(g,vi(d,r,v),ye)}}var al.wrapper.getBoundingClientRect(),u0;function n(e){d.state.selectingText!1,u1/0,e&&(D(e),l.input.focus()),T(l.wrapper.ownerDocument,\\\mousemove\\\,r),T(l.wrapper.ownerDocument,\\\mouseup\\\,i),g.history.lastSelOriginnull}var rI(d,function(e){(0!e.buttons&&Je(e)?function e(t){var n,r,i++u,ogr(d,t,!0,\\\rectangle\\\p.unit);o&&(0!P(o,b)?(d.curOp.focusN(ue(d)),s(o),nWr(l,g),(o.line>n.to||o.line\u003Cn.from)&&setTimeout(I(d,function(){ui&&e(t)}),150)):(rt.clientY\u003Ca.top?-20:t.clientY>a.bottom?20:0)&&setTimeout(I(d,function(){ui&&(l.scroller.scrollTop+r,e(t))}),50))}:n)(e)}),iI(d,n);d.state.selectingTexti,k(l.wrapper.ownerDocument,\\\mousemove\\\,r),k(l.wrapper.ownerDocument,\\\mouseup\\\,i)})(i,s,o,a)):Qe(e)h.scroller&&D(e):2n?(t&&Gi(c.doc,t),setTimeout(function(){return h.input.focus()},20)):3n&&(Q?c.display.input.onContextMenu(e):Mr(c)))))}function ul(e,t,n){if(\\\char\\\n)return new G(t,t);if(\\\word\\\n)return e.findWordAt(t);if(\\\line\\\n)return new G(F(t.line,0),E(e.doc,F(t.line+1,0)));nn(e,t);return new G(n.from,n.to)}function cl(e,t,n,r){var i,o;if(t.touches)it.touches0.clientX,ot.touches0.clientY;else try{it.clientX,ot.clientY}catch(e){return!1}if(i>Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&D(t);var le.display,rl.lineDiv.getBoundingClientRect();if(o>r.bottom||!Ye(e,n))return qe(t);o-r.top-l.viewOffset;for(var s0;s\u003Ce.display.gutterSpecs.length;++s){var al.gutters.childNodess;if(a&&a.getBoundingClientRect().right>i)return O(e,n,e,bt(e.doc,o),e.display.gutterSpecss.className,t),qe(t)}}function hl(e,t){return cl(e,t,\\\gutterClick\\\,!0)}function dl(e,t){var n,r;An(e.display,t)||(rt,Ye(ne,\\\gutterContextMenu\\\)&&cl(n,r,\\\gutterContextMenu\\\,!1))||A(e,t,\\\contextmenu\\\)||Q||e.display.input.onContextMenu(t)}function fl(e){e.display.wrapper.classNamee.display.wrapper.className.replace(/\\\\s*cm-s-\\\\S+/g,\\\\\\)+e.options.theme.replace(/(^|\\\\s)\\\\s*/g,\\\ cm-s-\\\),Yn(e)}ol.prototype.comparefunction(e,t,n){return this.time+400>e&&0P(t,this.pos)&&nthis.button};var pl{toString:function(){return\\\CodeMirror.Init\\\}},gl{},ml{};function vl(e,t,n){!t!!(n&&n!pl)&&(ne.display.dragFunctions,(tt?k:T)(e.display.scroller,\\\dragstart\\\,n.start),t(e.display.scroller,\\\dragenter\\\,n.enter),t(e.display.scroller,\\\dragover\\\,n.over),t(e.display.scroller,\\\dragleave\\\,n.leave),t(e.display.scroller,\\\drop\\\,n.drop))}function yl(e){e.options.lineWrapping?(ie(e.display.wrapper,\\\CodeMirror-wrap\\\),e.display.sizer.style.minWidth\\\\\\,e.display.sizerWidthnull):(ee(e.display.wrapper,\\\CodeMirror-wrap\\\),an(e)),pr(e),R(e),Yn(e),setTimeout(function(){return jr(e)},100)}function p(e,t){var nthis;if(!(this instanceof p))return new p(e,t);this.optionstt?fe(t):{},fe(gl,t,!1);var r,it.value,o(\\\string\\\typeof i?inew f(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOptiont.mode),this.doci,new p.inputStylest.inputStyle(this)),ethis.displaynew hi(e,i,o,t),l(fl(e.wrapper.CodeMirrorthis),t.lineWrapping&&(this.display.wrapper.className+\\\ CodeMirror-wrap\\\),$r(this),this.state{keyMaps:,overlays:,modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new pe,keySeq:null,specialChars:null},t.autofocus&&!_&&e.input.focus(),w&&v\u003C11&&setTimeout(function(){return n.display.input.reset(!0)},20),this),sl.display;k(s.scroller,\\\mousedown\\\,I(l,al)),k(s.scroller,\\\dblclick\\\,w&&v\u003C11?I(l,function(e){var t;A(l,e)||(!(tgr(l,e))||hl(l,e)||An(l.display,e)||(D(e),el.findWordAt(t),Gi(l.doc,e.anchor,e.head)))}):function(e){return A(l,e)||D(e)}),k(s.scroller,\\\contextmenu\\\,function(e){return dl(l,e)}),k(s.input.getField(),\\\contextmenu\\\,function(e){s.scroller.contains(e.target)||dl(l,e)});var a,u{end:0};function c(){s.activeTouch&&(asetTimeout(function(){return s.activeTouchnull},1e3),(us.activeTouch).end+new Date)}function h(e,t){if(nullt.left)return 1;var nt.left-e.left,tt.top-e.top;return 400\u003Cn*n+t*t}k(s.scroller,\\\touchstart\\\,function(e){var t;A(l,e)||function(e){if(1e.touches.length)return(ee.touches0).radiusX\u003C1&&e.radiusY\u003C1}(e)||hl(l,e)||(s.input.ensurePolled(),clearTimeout(a),t+new Date,s.activeTouch{start:t,moved:!1,prev:t-u.end\u003C300?u:null},1e.touches.length&&(s.activeTouch.lefte.touches0.pageX,s.activeTouch.tope.touches0.pageY))}),k(s.scroller,\\\touchmove\\\,function(){s.activeTouch&&(s.activeTouch.moved!0)}),k(s.scroller,\\\touchend\\\,function(e){var t,ns.activeTouch;n&&!An(s,e)&&null!n.left&&!n.moved&&new Date-n.start\u003C300&&(tl.coordsChar(s.activeTouch,\\\page\\\),n!n.prev||h(n,n.prev)?new G(t,t):!n.prev.prev||h(n,n.prev.prev)?l.findWordAt(t):new G(F(t.line,0),E(l.doc,F(t.line+1,0))),l.setSelection(n.anchor,n.head),l.focus(),D(e)),c()}),k(s.scroller,\\\touchcancel\\\,c),k(s.scroller,\\\scroll\\\,function(){s.scroller.clientHeight&&(Ir(l,s.scroller.scrollTop),Gr(l,s.scroller.scrollLeft,!0),O(l,\\\scroll\\\,l))}),k(s.scroller,\\\mousewheel\\\,function(e){return mi(l,e)}),k(s.scroller,\\\DOMMouseScroll\\\,function(e){return mi(l,e)}),k(s.wrapper,\\\scroll\\\,function(){return s.wrapper.scrollTops.wrapper.scrollLeft0}),s.dragFunctions{enter:function(e){A(l,e)||Ze(e)},over:function(e){var t,n;A(l,e)||((ngr(tl,ne))&&(Sr(t,n,ndocument.createDocumentFragment()),t.display.dragCursor||(t.display.dragCursorM(\\\div\\\,null,\\\CodeMirror-cursors CodeMirror-dragcursors\\\),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),y(t.display.dragCursor,n)),Ze(e))},start:function(e){var t,n;tl,ee,w&&(!t.state.draggingText||+new Date-So\u003C100)?Ze(e):A(t,e)||An(t.display,e)||(e.dataTransfer.setData(\\\Text\\\,t.getSelection()),e.dataTransfer.effectAllowed\\\copyMove\\\,e.dataTransfer.setDragImage&&!j&&((nM(\\\img\\\,null,null,\\\position: fixed; left: 0; top: 0;\\\)).src\\\data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw\\\,K&&(n.widthn.height1,t.display.wrapper.appendChild(n),n._topn.offsetTop),e.dataTransfer.setDragImage(n,0,0),K&&n.parentNode.removeChild(n)))},drop:I(l,Lo),leave:function(e){A(l,e)||ko(l)}};os.input.getField();for(r in k(o,\\\keyup\\\,function(e){return rl.call(l,e)}),k(o,\\\keydown\\\,I(l,nl)),k(o,\\\keypress\\\,I(l,il)),k(o,\\\focus\\\,function(e){return Nr(l,e)}),k(o,\\\blur\\\,function(e){return Or(l,e)}),No(),qr(this),this.curOp.forceUpdate!0,Ni(this,i),t.autofocus&&!_||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&Nr(n)},20):Or(this),ml)ml.hasOwnProperty(r)&&mlr(this,tr,pl);si(this),t.finishInit&&t.finishInit(this);for(var d0;d\u003Cbl.length;++d)bld(this);Zr(this),x&&t.lineWrapping&&\\\optimizelegibility\\\getComputedStyle(e.lineDiv).textRendering&&(e.lineDiv.style.textRendering\\\auto\\\)}p.defaultsgl,p.optionHandlersml;var bl;function wl(e,t,n,r){var i,oe.doc,l(\\\smart\\\(nnulln?\\\add\\\:n)&&(o.mode.indent?iWt(e,t).state:n\\\prev\\\),e.options.tabSize),sW(o,t),aS(s.text,null,l),u(s.stateAfter&&(s.stateAfternull),s.text.match(/^\\\\s*/)0);if(r||/\\\\S/.test(s.text)){if(\\\smart\\\n&&((co.mode.indent(i,s.text.slice(u.length),s.text))me||150\u003Cc)){if(!r)return;n\\\prev\\\}}else c0,n\\\not\\\;\\\prev\\\n?ct>o.first?S(W(o,t-1).text,null,l):0:\\\add\\\n?ca+e.options.indentUnit:\\\subtract\\\n?ca-e.options.indentUnit:\\\number\\\typeof n&&(ca+n);var cMath.max(0,c),h\\\\\\,d0;if(e.options.indentWithTabs)for(var fMath.floor(c/l);f;--f)d+l,h+\\\\\\\t\\\;if(d\u003Cc&&(h+Ce(c-d)),h!u)return lo(o,h,F(t,0),F(t,u.length),\\\+input\\\),!(s.stateAfternull);for(var p0;p\u003Co.sel.ranges.length;p++){var go.sel.rangesp;if(g.head.linet&&g.head.ch\u003Cu.length){gF(t,u.length);Vi(o,p,new G(g,g));break}}}p.defineInitHookfunction(e){return bl.push(e)};var xlnull;function Cl(e){xle}function Sl(e,t,n,r,i){var oe.doc,l(e.display.shift!1,rr||o.sel,+new Date-200),s\\\paste\\\i||e.state.pasteIncoming>l,art(t),unull;if(s&&1\u003Cr.ranges.length)if(xl&&xl.text.join(\\\\\\\n\\\)t){if(r.ranges.length%xl.text.length0)for(var u,c0;c\u003Cxl.text.length;c++)u.push(o.splitLines(xl.textc))}else a.lengthr.ranges.length&&e.options.pasteLinesPerSelection&&(uSe(a,function(e){returne}));for(var he.curOp.updateInput,dr.ranges.length-1;0\u003Cd;d--){var fr.rangesd,pf.from(),gf.to(),f(f.empty()&&(n&&0\u003Cn?pF(p.line,p.ch-n):e.state.overwrite&&!s?gF(g.line,Math.min(W(o,g.line).text.length,g.ch+z(a).length)):s&&xl&&xl.lineWise&&xl.text.join(\\\\\\\n\\\)a.join(\\\\\\\n\\\)&&(pgF(p.line,0))),{from:p,to:g,text:u?ud%u.length:a,origin:i||(s?\\\paste\\\:e.state.cutIncoming>l?\\\cut\\\:\\\+input\\\)});to(e.doc,f),b(e,\\\inputRead\\\,e,f)}t&&!s&&kl(e,t),Pr(e),e.curOp.updateInput\u003C2&&(e.curOp.updateInputh),e.curOp.typing!0,e.state.pasteIncominge.state.cutIncoming-1}function Ll(e,t){var ne.clipboardData&&e.clipboardData.getData(\\\Text\\\);return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||h(t,function(){return Sl(t,n,0,null,\\\paste\\\)}),1)}function kl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var ne.doc.sel,rn.ranges.length-1;0\u003Cr;r--){var in.rangesr;if(!(100\u003Ci.head.ch||r&&n.rangesr-1.head.linei.head.line)){var oe.getModeAt(i.head),l!1;if(o.electricChars){for(var s0;s\u003Co.electricChars.length;s++)if(-1\u003Ct.indexOf(o.electricChars.charAt(s))){lwl(e,i.head.line,\\\smart\\\);break}}else o.electricInput&&o.electricInput.test(W(e.doc,i.head.line).text.slice(0,i.head.ch))&&(lwl(e,i.head.line,\\\smart\\\));l&&b(e,\\\electricInput\\\,e,i.head.line)}}}function Tl(e){for(var t,n,r0;r\u003Ce.doc.sel.ranges.length;r++){var ie.doc.sel.rangesr.head.line,i{anchor:F(i,0),head:F(i+1,0)};n.push(i),t.push(e.getRange(i.anchor,i.head))}return{text:t,ranges:n}}function Ml(e,t,n,r){e.setAttribute(\\\autocorrect\\\,n?\\\on\\\:\\\off\\\),e.setAttribute(\\\autocapitalize\\\,r?\\\on\\\:\\\off\\\),e.setAttribute(\\\spellcheck\\\,!!t)}function Nl(){var eM(\\\textarea\\\,null,null,\\\position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\\\),tM(\\\div\\\,e,null,\\\overflow: hidden; position: relative; width: 3px; height: 0px;\\\);return x?e.style.width\\\1000px\\\:e.setAttribute(\\\wrap\\\,\\\off\\\),Y&&(e.style.border\\\1px solid black\\\),t}function Ol(n,r,i,o,l){var er,ti,sW(n,r.line),al&&\\\rtl\\\n.direction?-i:i;function u(e){var t;if(null(t\\\codepoint\\\o?(ts.text.charCodeAt(r.ch+(0\u003Ci?0:-1)),isNaN(t)?null:(t0\u003Ci?55296\u003Ct&&t\u003C56320:56320\u003Ct&&t\u003C57343,new F(r.line,Math.max(0,Math.min(s.text.length,r.ch+i*(t?2:1))),-i))):l?Xo(n.cm,s,r,i):Ko(s,r,i))){if(e||(er.line+a)\u003Cn.first||e>n.first+n.size||(rnew F(e,r.ch,r.sticky),!(sW(n,e))))return;rjo(l,n.cm,s,r.line,a)}else rt;return 1}if(\\\char\\\o||\\\codepoint\\\o)u();else if(\\\column\\\o)u(!0);else if(\\\word\\\o||\\\group\\\o)for(var cnull,h\\\group\\\o,dn.cm&&n.cm.getHelper(r,\\\wordChars\\\),f!0;!(i\u003C0)||u(!f);f!1){var ps.text.charAt(r.ch)||\\\\\\\n\\\,pNe(p,d)?\\\w\\\:h&&\\\\\\\n\\\p?\\\n\\\:!h||/\\\\s/.test(p)?null:\\\p\\\;if(!h||f||p||(p\\\s\\\),c&&c!p){i\u003C0&&(i1,u(),r.sticky\\\after\\\);break}if(p&&(cp),0\u003Ci&&!u(!f))break}tZi(n,r,e,t,!0);return Ct(e,t)&&(t.hitSide!0),t}function Al(e,t,n,r){var i,o,l,se.doc,at.left;for(\\\page\\\r?(iMath.min(e.display.wrapper.clientHeight,he(e).innerHeight||s(e).documentElement.clientHeight),iMath.max(i-.5*ur(e.display),3),o(0\u003Cn?t.bottom:t.top)+n*i):\\\line\\\r&&(o0\u003Cn?t.bottom+3:t.top-3);(lrr(e,a,o)).outside;){if(n\u003C0?o\u003C0:o>s.height){l.hitSide!0;break}o+5*n}return l}function r(e){this.cme,this.lastAnchorNodethis.lastAnchorOffsetthis.lastFocusNodethis.lastFocusOffsetnull,this.pollingnew pe,this.composingnull,this.gracePeriod!1,this.readDOMTimeoutnull}function Dl(e,t){var nIn(e,t.line);if(!n||n.hidden)return null;var rW(e.doc,t.line),nRn(n,r,t.line),rVe(r,e.doc.direction),e\\\left\\\,r(r&&(ePe(r,t.ch)%2?\\\right\\\:\\\left\\\),Kn(n.map,t.ch,e));return r.offset\\\right\\\r.collapse?r.end:r.start,r}function Wl(e,t){return t&&(e.bad!0),e}function Hl(e,t,n){var r;if(te.display.lineDiv){if(!(re.display.lineDiv.childNodesn))return Wl(e.clipPos(F(e.display.viewTo-1)),!0);tnull,n0}else for(rt;;rr.parentNode){if(!r||re.display.lineDiv)return null;if(r.parentNode&&r.parentNodee.display.lineDiv)break}for(var i0;i\u003Ce.display.view.length;i++){var oe.display.viewi;if(o.noder){var uo,ot,ln,su.text.firstChild,a!1;if(!o||!re(s,o))return Wl(F(H(u.line),0),!0);if(os)if(a!0,os.childNodesl,l0,!o)return Wl(F(H(cu.rest?z(u.rest):u.line),c.text.length),a);var c3o.nodeType?o:null,ho;for(c||1!o.childNodes.length||3!o.firstChild.nodeType||(co.firstChild,ll&&c.nodeValue.length);h.parentNode!s;)hh.parentNode;var du.measure,fd.maps;function p(e,t,n){for(var r-1;r\u003C(f?f.length:0);r++)for(var ir\u003C0?d.map:fr,o0;o\u003Ci.length;o+3){var l,s,aio+2;if(ae||at)return lH(r\u003C0?u.line:u.restr),sio+n,F(l,sn\u003C0||a!e?io+(n?1:0):s)}}var gp(c,h,l);if(g)return Wl(g,a);for(var mh.nextSibling,vc?c.nodeValue.length-l:0;m;mm.nextSibling){if(gp(m,m.firstChild,0))return Wl(F(g.line,g.ch-v),a);v+m.textContent.length}for(var yh.previousSibling,bl;y;yy.previousSibling){if(gp(y,y.firstChild,-1))return Wl(F(g.line,g.ch+b),a);b+y.textContent.length}return}}}r.prototype.initfunction(e){var tthis,othis,lo.cm,so.dive.lineDiv;function a(e){for(var te.target;t;tt.parentNode){if(ts)return 1;if(/\\\\bCodeMirror-(?:line)?widget\\\\b/.test(t.className))break}}function n(e){if(a(e)&&!A(l,e)){if(l.somethingSelected())Cl({lineWise:!1,text:l.getSelections()}),\\\cut\\\e.type&&l.replaceSelection(\\\\\\,null,\\\cut\\\);else{if(!l.options.lineWiseCopyCut)return;var tTl(l);Cl({lineWise:!0,text:t.text}),\\\cut\\\e.type&&l.operation(function(){l.setSelections(t.ranges,0,ve),l.replaceSelection(\\\\\\,null,\\\cut\\\)})}if(e.clipboardData){e.clipboardData.clearData();var nxl.text.join(\\\\\\\n\\\);if(e.clipboardData.setData(\\\Text\\\,n),e.clipboardData.getData(\\\Text\\\)n)return void e.preventDefault()}var rNl(),nr.firstChild,i(Ml(n),l.display.lineSpace.insertBefore(r,l.display.lineSpace.firstChild),n.valuexl.text.join(\\\\\\\n\\\),N(ce(s)));se(n),setTimeout(function(){l.display.lineSpace.removeChild(r),i.focus(),is&&o.showPrimarySelection()},50)}}s.contentEditable!0,Ml(s,l.options.spellcheck,l.options.autocorrect,l.options.autocapitalize),k(s,\\\paste\\\,function(e){!a(e)||A(l,e)||Ll(e,l)||v\u003C11&&setTimeout(I(l,function(){return t.updateFromDOM()}),20)}),k(s,\\\compositionstart\\\,function(e){t.composing{data:e.data,done:!1}}),k(s,\\\compositionupdate\\\,function(e){t.composing||(t.composing{data:e.data,done:!1})}),k(s,\\\compositionend\\\,function(e){t.composing&&(e.data!t.composing.data&&t.readFromDOMSoon(),t.composing.done!0)}),k(s,\\\touchstart\\\,function(){return o.forceCompositionEnd()}),k(s,\\\input\\\,function(){t.composing||t.readFromDOMSoon()}),k(s,\\\copy\\\,n),k(s,\\\cut\\\,n)},r.prototype.screenReaderLabelChangedfunction(e){e?this.div.setAttribute(\\\aria-label\\\,e):this.div.removeAttribute(\\\aria-label\\\)},r.prototype.prepareSelectionfunction(){var eCr(this.cm,!1);return e.focusN(ce(this.div))this.div,e},r.prototype.showSelectionfunction(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},r.prototype.getSelectionfunction(){return this.cm.display.wrapper.ownerDocument.getSelection()},r.prototype.showPrimarySelectionfunction(){var ethis.getSelection(),tthis.cm,nt.doc.sel.primary(),rn.from(),nn.to();if(t.display.viewTot.display.viewFrom||r.line>t.display.viewTo||n.line\u003Ct.display.viewFrom)e.removeAllRanges();else{var iHl(t,e.anchorNode,e.anchorOffset),oHl(t,e.focusNode,e.focusOffset);if(!i||i.bad||!o||o.bad||0!P(kt(i,o),r)||0!P(Lt(i,o),n)){var it.display.view,or.line>t.display.viewFrom&&Dl(t,r)||{node:i0.measure.map2,offset:0},rn.line\u003Ct.display.viewTo&&Dl(t,n);if(r||(r{node:(i(nii.length-1.measure).maps?n.mapsn.maps.length-1:n.map)i.length-1,offset:ii.length-2-ii.length-3}),o&&r){var l,ne.rangeCount&&e.getRangeAt(0);try{lle(o.node,o.offset,r.offset,r.node)}catch(e){}l&&(!d&&t.state.focused?(e.collapse(o.node,o.offset),l.collapsed||(e.removeAllRanges(),e.addRange(l))):(e.removeAllRanges(),e.addRange(l)),n&&nulle.anchorNode?e.addRange(n):d&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},r.prototype.startGracePeriodfunction(){var ethis;clearTimeout(this.gracePeriod),this.gracePeriodsetTimeout(function(){e.gracePeriod!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged!0})},20)},r.prototype.showMultipleSelectionsfunction(e){y(this.cm.display.cursorDiv,e.cursors),y(this.cm.display.selectionDiv,e.selection)},r.prototype.rememberSelectionfunction(){var ethis.getSelection();this.lastAnchorNodee.anchorNode,this.lastAnchorOffsete.anchorOffset,this.lastFocusNodee.focusNode,this.lastFocusOffsete.focusOffset},r.prototype.selectionInEditorfunction(){var ethis.getSelection();if(!e.rangeCount)return!1;ee.getRangeAt(0).commonAncestorContainer;return re(this.div,e)},r.prototype.focusfunction(){\\\nocursor\\\!this.cm.options.readOnly&&(this.selectionInEditor()&&N(ce(this.div))this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},r.prototype.blurfunction(){this.div.blur()},r.prototype.getFieldfunction(){return this.div},r.prototype.supportsTouchfunction(){return!0},r.prototype.receivedFocusfunction(){var ethis,tthis;this.selectionInEditor()?setTimeout(function(){return e.pollSelection()},20):h(this.cm,function(){return t.cm.curOp.selectionChanged!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},r.prototype.selectionChangedfunction(){var ethis.getSelection();return e.anchorNode!this.lastAnchorNode||e.anchorOffset!this.lastAnchorOffset||e.focusNode!this.lastFocusNode||e.focusOffset!this.lastFocusOffset},r.prototype.pollSelectionfunction(){if(nullthis.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e,t,nthis.getSelection(),rthis.cm;if($&&m&&this.cm.display.gutterSpecs.length&&function(e){for(var te;t;tt.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return 1;return}(n.anchorNode))return this.cm.triggerOnKeyDown({type:\\\keydown\\\,keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();this.composing||(this.rememberSelection(),eHl(r,n.anchorNode,n.anchorOffset),tHl(r,n.focusNode,n.focusOffset),e&&t&&h(r,function(){U(r.doc,yi(e,t),ve),(e.bad||t.bad)&&(r.curOp.selectionChanged!0)}))}},r.prototype.pollContentfunction(){null!this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeoutnull);var e,tthis.cm,nt.display,rt.doc.sel.primary(),ir.from(),rr.to();if(0i.ch&&i.line>t.firstLine()&&(iF(i.line-1,W(t.doc,i.line-1).length)),r.chW(t.doc,r.line).text.length&&r.line\u003Ct.lastLine()&&(rF(r.line+1,0)),i.line\u003Cn.viewFrom||r.line>n.viewTo-1)return!1;var o,li.linen.viewFrom||0(lmr(t,i.line))?(eH(n.view0.line),n.view0.node):(eH(n.viewl.line),n.viewl-1.node.nextSibling),rmr(t,r.line),nrn.view.length-1?(on.viewTo-1,n.lineDiv.lastChild):(oH(n.viewr+1.line)-1,n.viewr+1.node.previousSibling);if(!l)return!1;for(var st.doc.splitLines(function(o,e,t,l,s){var n\\\\\\,a!1,uo.doc.lineSeparator(),c!1;function h(){a&&(n+u,c&&(n+u),ac!1)}function d(e){e&&(h(),n+e)}for(;!function e(t){if(1t.nodeType){var nt.getAttribute(\\\cm-text\\\);if(n)d(n);else if(nt.getAttribute(\\\cm-marker\\\))(no.findMarks(F(l,0),F(s+1,0),(i+n,function(e){return e.idi}))).length&&(nn0.find(0))&&d(mt(o.doc,n.from,n.to).join(u));else if(\\\false\\\!t.getAttribute(\\\contenteditable\\\)&&(n/^(pre|div|p|li|table|br)$/i.test(t.nodeName),/^br$/i.test(t.nodeName)||0!t.textContent.length)){n&&h();for(var r0;r\u003Ct.childNodes.length;r++)e(t.childNodesr);/^(pre|p)$/i.test(t.nodeName)&&(c!0),n&&(a!0)}}else 3t.nodeType&&d(t.nodeValue.replace(/\\\\u200b/g,\\\\\\).replace(/\\\\u00a0/g,\\\ \\\));var i}(e),e!t;)ee.nextSibling,c!1;return n}(t,l,n,e,o)),amt(t.doc,F(e,0),F(o,W(t.doc,o).text.length));1\u003Cs.length&&1\u003Ca.length;)if(z(s)z(a))s.pop(),a.pop(),o--;else{if(s0!a0)break;s.shift(),a.shift(),e++}for(var u0,c0,hs0,da0,fMath.min(h.length,d.length);u\u003Cf&&h.charCodeAt(u)d.charCodeAt(u);)++u;for(var pz(s),gz(a),mMath.min(p.length-(1s.length?u:0),g.length-(1a.length?u:0));c\u003Cm&&p.charCodeAt(p.length-c-1)g.charCodeAt(g.length-c-1);)++c;if(1s.length&&1a.length&&ei.line)for(;u&&u>i.ch&&p.charCodeAt(p.length-c-1)g.charCodeAt(g.length-c-1);)u--,c++;ss.length-1p.slice(0,p.length-c).replace(/^\\\\u200b+/,\\\\\\),s0s0.slice(u).replace(/\\\\u200b+$/,\\\\\\);rF(e,u),lF(o,a.length?z(a).length-c:0);return 1\u003Cs.length||s0||P(r,l)?(lo(t.doc,s,r,l,\\\+input\\\),!0):void 0},r.prototype.ensurePolledfunction(){this.forceCompositionEnd()},r.prototype.resetfunction(){this.forceCompositionEnd()},r.prototype.forceCompositionEndfunction(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composingnull,this.updateFromDOM(),this.div.blur(),this.div.focus())},r.prototype.readFromDOMSoonfunction(){var ethis;nullthis.readDOMTimeout&&(this.readDOMTimeoutsetTimeout(function(){if(e.readDOMTimeoutnull,e.composing){if(!e.composing.done)return;e.composingnull}e.updateFromDOM()},80))},r.prototype.updateFromDOMfunction(){var ethis;!this.cm.isReadOnly()&&this.pollContent()||h(this.cm,function(){return R(e.cm)})},r.prototype.setUneditablefunction(e){e.contentEditable\\\false\\\},r.prototype.onKeyPressfunction(e){0e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||I(this.cm,Sl)(this.cm,String.fromCharCode(nulle.charCode?e.keyCode:e.charCode),0))},r.prototype.readOnlyChangedfunction(e){this.div.contentEditableString(\\\nocursor\\\!e)},r.prototype.onContextMenufunction(){},r.prototype.resetPositionfunction(){},r.prototype.needsContentAttribute!0;function i(e){this.cme,this.prevInput\\\\\\,this.pollingFast!1,this.pollingnew pe,this.hasSelection!1,this.composingnull,this.resetting!1}var Fl,Pl,El,Rl,zl;function o(e,t,r,n){Fl.defaultset,r&&(Plen?function(e,t,n){n!pl&&r(e,t,n)}:r)}i.prototype.initfunction(n){var ethis,rthis,ithis.cm,o(this.createField(n),this.textarea);function t(e){if(!A(i,e)){if(i.somethingSelected())Cl({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var tTl(i);Cl({lineWise:!0,text:t.text}),\\\cut\\\e.type?i.setSelections(t.ranges,null,ve):(r.prevInput\\\\\\,o.valuet.text.join(\\\\\\\n\\\),se(o))}\\\cut\\\e.type&&(i.state.cutIncoming+new Date)}}n.wrapper.insertBefore(this.wrapper,n.wrapper.firstChild),Y&&(o.style.width\\\0px\\\),k(o,\\\input\\\,function(){w&&9\u003Cv&&e.hasSelection&&(e.hasSelectionnull),r.poll()}),k(o,\\\paste\\\,function(e){A(i,e)||Ll(e,i)||(i.state.pasteIncoming+new Date,r.fastPoll())}),k(o,\\\cut\\\,t),k(o,\\\copy\\\,t),k(n.scroller,\\\paste\\\,function(e){if(!An(n,e)&&!A(i,e)){if(!o.dispatchEvent)return i.state.pasteIncoming+new Date,void r.focus();var tnew Event(\\\paste\\\);t.clipboardDatae.clipboardData,o.dispatchEvent(t)}}),k(n.lineSpace,\\\selectstart\\\,function(e){An(n,e)||D(e)}),k(o,\\\compositionstart\\\,function(){var ei.getCursor(\\\from\\\);r.composing&&r.composing.range.clear(),r.composing{start:e,range:i.markText(e,i.getCursor(\\\to\\\),{className:\\\CodeMirror-composing\\\})}}),k(o,\\\compositionend\\\,function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composingnull)})},i.prototype.createFieldfunction(e){this.wrapperNl(),this.textareathis.wrapper.firstChild;var tthis.cm.options;Ml(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},i.prototype.screenReaderLabelChangedfunction(e){e?this.textarea.setAttribute(\\\aria-label\\\,e):this.textarea.removeAttribute(\\\aria-label\\\)},i.prototype.prepareSelectionfunction(){var e,tthis.cm,nt.display,rt.doc,iCr(t);return t.options.moveInputWithCursor&&(ter(t,r.sel.primary().head,\\\div\\\),rn.wrapper.getBoundingClientRect(),en.lineDiv.getBoundingClientRect(),i.teTopMath.max(0,Math.min(n.wrapper.clientHeight-10,t.top+e.top-r.top)),i.teLeftMath.max(0,Math.min(n.wrapper.clientWidth-10,t.left+e.left-r.left))),i},i.prototype.showSelectionfunction(e){var tthis.cm.display;y(t.cursorDiv,e.cursors),y(t.selectionDiv,e.selection),null!e.teTop&&(this.wrapper.style.tope.teTop+\\\px\\\,this.wrapper.style.lefte.teLeft+\\\px\\\)},i.prototype.resetfunction(e){var t,n;this.contextMenuPending||this.composing&&e||(tthis.cm,this.resetting!0,t.somethingSelected()?(this.prevInput\\\\\\,nt.getSelection(),this.textarea.valuen,t.state.focused&&se(this.textarea),w&&9\u003Cv&&(this.hasSelectionn)):e||(this.prevInputthis.textarea.value\\\\\\,w&&9\u003Cv&&(this.hasSelectionnull)),this.resetting!1)},i.prototype.getFieldfunction(){return this.textarea},i.prototype.supportsTouchfunction(){return!1},i.prototype.focusfunction(){if(\\\nocursor\\\!this.cm.options.readOnly&&(!_||N(ce(this.textarea))!this.textarea))try{this.textarea.focus()}catch(e){}},i.prototype.blurfunction(){this.textarea.blur()},i.prototype.resetPositionfunction(){this.wrapper.style.topthis.wrapper.style.left0},i.prototype.receivedFocusfunction(){this.slowPoll()},i.prototype.slowPollfunction(){var ethis;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},i.prototype.fastPollfunction(){var t!1,nthis;n.pollingFast!0,n.polling.set(20,function e(){n.poll()||t?(n.pollingFast!1,n.slowPoll()):(t!0,n.polling.set(60,e))})},i.prototype.pollfunction(){var ethis,tthis.cm,nthis.textarea,rthis.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||it(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var in.value;if(ir&&!t.somethingSelected())return!1;if(w&&9\u003Cv&&this.hasSelectioni||C&&/\\\\uf700-\\\\uf7ff/.test(i))return t.display.input.reset(),!1;if(t.doc.selt.display.selForContextMenu){var oi.charCodeAt(0);if(8203!o||r||(r\\\\\\),8666o)return this.reset(),this.cm.execCommand(\\\undo\\\)}for(var l0,sMath.min(r.length,i.length);l\u003Cs&&r.charCodeAt(l)i.charCodeAt(l);)++l;return h(t,function(){Sl(t,i.slice(l),r.length-l,null,e.composing?\\\*compose\\\:null),1e3\u003Ci.length||-1\u003Ci.indexOf(\\\\\\\n\\\)?n.valuee.prevInput\\\\\\:e.prevInputi,e.composing&&(e.composing.range.clear(),e.composing.ranget.markText(e.composing.start,t.getCursor(\\\to\\\),{className:\\\CodeMirror-composing\\\}))}),!0},i.prototype.ensurePolledfunction(){this.pollingFast&&this.poll()&&(this.pollingFast!1)},i.prototype.onKeyPressfunction(){w&&9\u003Cv&&(this.hasSelectionnull),this.fastPoll()},i.prototype.onContextMenufunction(e){var n,r,t,i,othis,lo.cm,sl.display,ao.textarea,u(o.contextMenuPending&&o.contextMenuPending(),gr(l,e)),cs.scroller.scrollTop;function h(){var e,t;null!a.selectionStart&&(t\\\\\\+((el.somethingSelected())?a.value:\\\\\\),a.value\\\⇚\\\,a.valuet,o.prevInpute?\\\\\\:\\\\\\,a.selectionStart1,a.selectionEndt.length,s.selForContextMenul.doc.sel)}function d(){var e,t;o.contextMenuPendingd&&(o.contextMenuPending!1,o.wrapper.style.cssTextr,a.style.cssTextn,w&&v\u003C9&&s.scrollbars.setScrollTop(s.scroller.scrollTopc),null!a.selectionStart&&((!w||v\u003C9)&&h(),e0,tfunction(){s.selForContextMenul.doc.sel&&0a.selectionStart&&0\u003Ca.selectionEnd&&\\\\\\o.prevInput?I(l,Ji)(l):e++\u003C10?s.detectingSelectAllsetTimeout(t,500):(s.selForContextMenunull,s.input.reset())},s.detectingSelectAllsetTimeout(t,200)))}u&&!K&&(l.options.resetSelectionOnContextMenu&&-1l.doc.sel.contains(u)&&I(l,U)(l.doc,yi(u),ve),na.style.cssText,ro.wrapper.style.cssText,uo.wrapper.offsetParent.getBoundingClientRect(),o.wrapper.style.cssText\\\position: static\\\,a.style.cssText\\\position: absolute; width: 30px; height: 30px;\\\\n top: \\\+(e.clientY-u.top-5)+\\\px; left: \\\+(e.clientX-u.left-5)+\\\px;\\\\n z-index: 1000; background: \\\+(w?\\\rgba(255, 255, 255, .05)\\\:\\\transparent\\\)+\\\;\\\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity5);\\\,x&&(ta.ownerDocument.defaultView.scrollY),s.input.focus(),x&&a.ownerDocument.defaultView.scrollTo(null,t),s.input.reset(),l.somethingSelected()||(a.valueo.prevInput\\\ \\\),o.contextMenuPendingd,s.selForContextMenul.doc.sel,clearTimeout(s.detectingSelectAll),w&&9\u003Cv&&h(),Q?(Ze(e),ifunction(){T(window,\\\mouseup\\\,i),setTimeout(d,20)},k(window,\\\mouseup\\\,i)):setTimeout(d,50))},i.prototype.readOnlyChangedfunction(e){e||this.reset(),this.textarea.disabled\\\nocursor\\\e,this.textarea.readOnly!!e},i.prototype.setUneditablefunction(){},i.prototype.needsContentAttribute!1,Pl(Flp).optionHandlers,Fl.defineOptiono,Fl.Initpl,o(\\\value\\\,\\\\\\,function(e,t){return e.setValue(t)},!0),o(\\\mode\\\,null,function(e,t){e.doc.modeOptiont,Si(e)},!0),o(\\\indentUnit\\\,2,Si,!0),o(\\\indentWithTabs\\\,!1),o(\\\smartIndent\\\,!0),o(\\\tabSize\\\,4,function(e){Li(e),Yn(e),R(e)},!0),o(\\\lineSeparator\\\,null,function(e,r){if(e.doc.lineSepr){var i,oe.doc.first;e.doc.iter(function(e){for(var t0;;){var ne.text.indexOf(r,t);if(-1n)break;tn+r.length,i.push(F(o,n))}o++});for(var ti.length-1;0\u003Ct;t--)lo(e.doc,r,it,F(it.line,it.ch+r.length))}}),o(\\\specialChars\\\,/\\\\u0000-\\\\u001f\\\\u007f-\\\\u009f\\\\u00ad\\\\u061c\\\\u200b\\\\u200e\\\\u200f\\\\u2028\\\\u2029\\\\u202d\\\\u202e\\\\u2066\\\\u2067\\\\u2069\\\\ufeff\\\\ufff9-\\\\ufffc/g,function(e,t,n){e.state.specialCharsnew RegExp(t.source+(t.test(\\\\\\\t\\\)?\\\\\\:\\\|\\\\t\\\),\\\g\\\),n!pl&&e.refresh()}),o(\\\specialCharPlaceholder\\\,pn,function(e){return e.refresh()},!0),o(\\\electricChars\\\,!0),o(\\\inputStyle\\\,_?\\\contenteditable\\\:\\\textarea\\\,function(){throw new Error(\\\inputStyle can not (yet) be changed in a running editor\\\)},!0),o(\\\spellcheck\\\,!1,function(e,t){return e.getInputField().spellcheckt},!0),o(\\\autocorrect\\\,!1,function(e,t){return e.getInputField().autocorrectt},!0),o(\\\autocapitalize\\\,!1,function(e,t){return e.getInputField().autocapitalizet},!0),o(\\\rtlMoveVisually\\\,!a),o(\\\wholeLineUpdateBefore\\\,!0),o(\\\theme\\\,\\\default\\\,function(e){fl(e),ci(e)},!0),o(\\\keyMap\\\,\\\default\\\,function(e,t,n){tGo(t),nn!pl&&Go(n);n&&n.detach&&n.detach(e,t),t.attach&&t.attach(e,n||null)}),o(\\\extraKeys\\\,null),o(\\\configureMouse\\\,null),o(\\\lineWrapping\\\,!1,yl,!0),o(\\\gutters\\\,,function(e,t){e.display.gutterSpecsai(t,e.options.lineNumbers),ci(e)},!0),o(\\\fixedGutter\\\,!0,function(e,t){e.display.gutters.style.leftt?dr(e.display)+\\\px\\\:\\\0\\\,e.refresh()},!0),o(\\\coverGutterNextToScrollbar\\\,!1,function(e){return jr(e)},!0),o(\\\scrollbarStyle\\\,\\\native\\\,function(e){$r(e),jr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),o(\\\lineNumbers\\\,!1,function(e,t){e.display.gutterSpecsai(e.options.gutters,t),ci(e)},!0),o(\\\firstLineNumber\\\,1,ci,!0),o(\\\lineNumberFormatter\\\,function(e){return e},ci,!0),o(\\\showCursorWhenSelecting\\\,!1,xr,!0),o(\\\resetSelectionOnContextMenu\\\,!0),o(\\\lineWiseCopyCut\\\,!0),o(\\\pasteLinesPerSelection\\\,!0),o(\\\selectionsMayTouch\\\,!1),o(\\\readOnly\\\,!1,function(e,t){\\\nocursor\\\t&&(Or(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),o(\\\screenReaderLabel\\\,null,function(e,t){e.display.input.screenReaderLabelChanged(t\\\\\\t?null:t)}),o(\\\disableInput\\\,!1,function(e,t){t||e.display.input.reset()},!0),o(\\\dragDrop\\\,!0,vl),o(\\\allowDropFileTypes\\\,null),o(\\\cursorBlinkRate\\\,530),o(\\\cursorScrollMargin\\\,0),o(\\\cursorHeight\\\,1,xr,!0),o(\\\singleCursorHeightPerLine\\\,!0,xr,!0),o(\\\workTime\\\,100),o(\\\workDelay\\\,100),o(\\\flattenSpans\\\,!0,Li,!0),o(\\\addModeClass\\\,!1,Li,!0),o(\\\pollInterval\\\,100),o(\\\undoDepth\\\,200,function(e,t){return e.doc.history.undoDeptht}),o(\\\historyEventDelay\\\,1250),o(\\\viewportMargin\\\,10,function(e){return e.refresh()},!0),o(\\\maxHighlightLength\\\,1e4,Li,!0),o(\\\moveInputWithCursor\\\,!0,function(e,t){t||e.display.input.resetPosition()}),o(\\\tabindex\\\,null,function(e,t){return e.display.input.getField().tabIndext||\\\\\\}),o(\\\autofocus\\\,null),o(\\\direction\\\,\\\ltr\\\,function(e,t){return e.doc.setDirection(t)},!0),o(\\\phrases\\\,null),Rl(Elp).optionHandlers,zlEl.helpers{},El.prototype{constructor:El,focus:function(){he(this).focus(),this.display.input.focus()},setOption:function(e,t){var nthis.options,rne;net&&\\\mode\\\!e||(net,Rl.hasOwnProperty(e)&&I(this,Rle)(this,t,r),O(this,\\\optionChange\\\,this,e))},getOption:function(e){return this.optionse},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMapst?\\\push\\\:\\\unshift\\\(Go(e))},removeKeyMap:function(e){for(var tthis.state.keyMaps,n0;n\u003Ct.length;++n)if(tne||tn.namee)return t.splice(n,1),!0},addOverlay:t(function(e,t){var ne.token?e:El.getMode(this.options,e);if(n.startState)throw new Error(\\\Overlays may not be stateful.\\\);for(var rthis.state.overlays,n{mode:n,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},ifunction(e){return e.priority},o0,li(n);o\u003Cr.length&&i(ro)\u003Cl;)o++;r.splice(o,0,n),this.state.modeGen++,R(this)}),removeOverlay:t(function(e){for(var tthis.state.overlays,n0;n\u003Ct.length;++n){var rtn.modeSpec;if(re||\\\string\\\typeof e&&r.namee)return t.splice(n,1),this.state.modeGen++,void R(this)}}),indentLine:t(function(e,t,n){\\\string\\\!typeof t&&\\\number\\\!typeof t&&(tnullt?this.options.smartIndent?\\\smart\\\:\\\prev\\\:t?\\\add\\\:\\\subtract\\\),wt(this.doc,e)&&wl(this,e,t,n)}),indentSelection:t(function(e){for(var tthis.doc.sel.ranges,n-1,r0;r\u003Ct.length;r++){var itr;if(i.empty())i.head.line>n&&(wl(this,i.head.line,e,!0),ni.head.line,rthis.doc.sel.primIndex&&Pr(this));else{for(var oi.from(),ii.to(),lMath.max(n,o.line),nMath.min(this.lastLine(),i.line-(i.ch?0:1))+1,sl;s\u003Cn;++s)wl(this,s,e);ithis.doc.sel.ranges;0o.ch&&t.lengthi.length&&0\u003Cir.from().ch&&Vi(this.doc,r,new G(o,ir.to()),ve)}}}),getTokenAt:function(e,t){return Rt(this,e,t)},getLineTokens:function(e,t){return Rt(this,F(e),t,!0)},getTokenTypeAt:function(e){eE(this.doc,e);var t,nDt(this,W(this.doc,e.line)),r0,i(n.length-1)/2,oe.ch;if(0o)tn2;else for(;;){var lr+i>>1;if((l?n2*l-1:0)>o)il;else{if(!(n2*l+1\u003Co)){tn2*l+2;break}r1+l}}et?t.indexOf(\\\overlay \\\):-1;return e\u003C0?t:0e?null:t.slice(0,e-1)},getModeAt:function(e){var tthis.doc.mode;return t.innerMode?El.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)0},getHelpers:function(e,t){var n;if(!zl.hasOwnProperty(t))return n;var rzlt,ithis.getModeAt(e);if(\\\string\\\typeof it)rit&&n.push(rit);else if(it)for(var o0;o\u003Cit.length;o++){var lrito;l&&n.push(l)}else i.helperType&&ri.helperType?n.push(ri.helperType):ri.name&&n.push(ri.name);for(var s0;s\u003Cr._global.length;s++){var ar._globals;a.pred(i,this)&&-1L(n,a.val)&&n.push(a.val)}return n},getStateAfter:function(e,t){var nthis.doc;return Wt(this,(eTt(n,nulle?n.first+n.size-1:e))+1,t).state},cursorCoords:function(e,t){var nthis.doc.sel.primary(),enulle?n.head:\\\object\\\typeof e?E(this.doc,e):e?n.from():n.to();return er(this,e,t||\\\page\\\)},charCoords:function(e,t){return Jn(this,E(this.doc,e),t||\\\page\\\)},coordsChar:function(e,t){return rr(this,(eQn(this,e,t||\\\page\\\)).left,e.top)},lineAtHeight:function(e,t){return eQn(this,{top:e,left:0},t||\\\page\\\).top,bt(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r!1,i\\\number\\\typeof e?(ithis.doc.first+this.doc.size-1,e\u003Cthis.doc.first?ethis.doc.first:i\u003Ce&&(ei,r!0),W(this.doc,e)):e;return Zn(this,i,{top:0,left:0},t||\\\page\\\,n||r).top+(r?this.doc.height-ln(i):0)},defaultTextHeight:function(){return ur(this.display)},defaultCharWidth:function(){return cr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,l,sthis.display,a(eer(this,E(this.doc,e))).bottom,ue.left;t.style.position\\\absolute\\\,t.setAttribute(\\\cm-ignore-events\\\,\\\true\\\),this.display.input.setUneditable(t),s.sizer.appendChild(t),\\\over\\\r?ae.top:\\\above\\\!r&&\\\near\\\!r||(lMath.max(s.wrapper.clientHeight,this.doc.height),oMath.max(s.sizer.clientWidth,s.lineSpace.clientWidth),(\\\above\\\r||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?ae.top-t.offsetHeight:e.bottom+t.offsetHeight\u003Cl&&(ae.bottom),u+t.offsetWidth>o&&(uo-t.offsetWidth)),t.style.topa+\\\px\\\,t.style.leftt.style.right\\\\\\,\\\right\\\i?(us.sizer.clientWidth-t.offsetWidth,t.style.right\\\0px\\\):(\\\left\\\i?u0:\\\middle\\\i&&(u(s.sizer.clientWidth-t.offsetWidth)/2),t.style.leftu+\\\px\\\),n&&(rthis,l{left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!(lHr(r,l)).scrollTop&&Ir(r,l.scrollTop),null!l.scrollLeft&&Gr(r,l.scrollLeft))},triggerOnKeyDown:t(nl),triggerOnKeyPress:t(il),triggerOnKeyUp:rl,triggerOnMouseDown:t(al),execCommand:function(e){if(Yo.hasOwnProperty(e))return Yoe.call(null,this)},triggerElectric:t(function(e){kl(this,e)}),findPosH:function(e,t,n,r){for(var i1,o(t\u003C0&&(i-1,t-t),E(this.doc,e)),l0;l\u003Ct&&!(oOl(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:t(function(t,n){var rthis;this.extendSelectionsBy(function(e){return r.display.shift||r.doc.extend||e.empty()?Ol(r.doc,e.head,t,n,r.options.rtlMoveVisually):t\u003C0?e.from():e.to()},be)}),deleteH:t(function(n,r){var ethis.doc.sel,ithis.doc;e.somethingSelected()?i.replaceSelection(\\\\\\,null,\\\+delete\\\):Uo(this,function(e){var tOl(i,e.head,n,r,!1);return n\u003C0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,n,r){for(var i1,or,l(t\u003C0&&(i-1,t-t),E(this.doc,e)),s0;s\u003Ct;++s){var aer(this,l,\\\div\\\);if(nullo?oa.left:a.lefto,(lAl(this,a,i,n)).hitSide)break}return l},moveV:t(function(r,i){var othis,lthis.doc,s,a!this.display.shift&&!l.extend&&l.sel.somethingSelected();if(l.extendSelectionsBy(function(e){if(a)return r\u003C0?e.from():e.to();var ter(o,e.head,\\\div\\\),n(null!e.goalColumn&&(t.lefte.goalColumn),s.push(t.left),Al(o,t,r,i));return\\\page\\\i&&el.sel.primary()&&Fr(o,Jn(o,n,\\\div\\\).top-t.top),n},be),s.length)for(var e0;e\u003Cl.sel.ranges.length;e++)l.sel.rangese.goalColumnse}),findWordAt:function(e){var tW(this.doc,e.line).text,ne.ch,re.ch;if(t){for(var ithis.getHelper(e,\\\wordChars\\\),o(\\\before\\\!e.sticky&&r!t.length||!n?++r:--n,t.charAt(n)),lNe(o,i)?function(e){return Ne(e,i)}:/\\\\s/.test(o)?function(e){return/\\\\s/.test(e)}:function(e){return!/\\\\s/.test(e)&&!Ne(e)};0\u003Cn&&l(t.charAt(n-1));)--n;for(;r\u003Ct.length&&l(t.charAt(r));)++r}return new G(F(e.line,n),F(e.line,r))},toggleOverwrite:function(e){null!e&ðis.state.overwrite||(((this.state.overwrite!this.state.overwrite)?ie:ee)(this.display.cursorDiv,\\\CodeMirror-overwrite\\\),O(this,\\\overwriteToggle\\\,this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()N(ue(this))},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:t(function(e,t){Er(this,e,t)}),getScrollInfo:function(){var ethis.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Fn(this)-this.display.barHeight,width:e.scrollWidth-Fn(this)-this.display.barWidth,clientHeight:En(this),clientWidth:Pn(this)}},scrollIntoView:t(function(e,t){var n;nulle?(e{from:this.doc.sel.primary().head,to:null},nullt&&(tthis.options.cursorScrollMargin)):\\\number\\\typeof e?e{from:F(e,0),to:null}:nulle.from&&(e{from:e,to:null}),e.to||(e.toe.from),e.margint||0,null!e.from.line?(te,Rr(nthis),n.curOp.scrollToPost):zr(this,e.from,e.to,e.margin)}),setSize:t(function(e,t){function n(e){return\\\number\\\typeof e||/^\\\\d+$/.test(String(e))?e+\\\px\\\:e}var rthis,i(null!e&&(this.display.wrapper.style.widthn(e)),null!t&&(this.display.wrapper.style.heightn(t)),this.options.lineWrapping&&Xn(this),this.display.viewFrom);this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t0;t\u003Ce.widgets.length;t++)if(e.widgetst.noHScroll){vr(r,i,\\\widget\\\);break}++i}),this.curOp.forceUpdate!0,O(this,\\\refresh\\\,this)}),operation:function(e){return h(this,e)},startOperation:function(){return qr(this)},endOperation:function(){return Zr(this)},refresh:t(function(){var ethis.display.cachedTextHeight;R(this),this.curOp.forceUpdate!0,Yn(this),Er(this,this.doc.scrollLeft,this.doc.scrollTop),ii(this.display),(nulle||.5\u003CMath.abs(e-ur(this.display))||this.options.lineWrapping)&&pr(this),O(this,\\\refresh\\\,this)}),swapDoc:t(function(e){var tthis.doc;return t.cmnull,this.state.selectingText&&this.state.selectingText(),Ni(this,e),Yn(this),this.display.input.reset(),Er(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll!0,b(this,\\\swapDoc\\\,this,t),t}),phrase:function(e){var tthis.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?te:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},$e(El),El.registerHelperfunction(e,t,n){zl.hasOwnProperty(e)||(zleEle{_global:}),zletn},El.registerGlobalHelperfunction(e,t,n,r){El.registerHelper(e,t,r),zle._global.push({pred:n,val:r})};var Il,Bl\\\iter insert remove copy getEditor constructor\\\.split(\\\ \\\);for(Il in f.prototype)f.prototype.hasOwnProperty(Il)&&L(Bl,Il)\u003C0&&(p.prototypeIlfunction(e){return function(){return e.apply(this.doc,arguments)}}(f.prototypeIl));return $e(f),p.inputStyles{textarea:i,contenteditable:r},p.defineModefunction(e){p.defaults.mode||\\\null\\\e||(p.defaults.modee),function(e,t){2\u003Carguments.length&&(t.dependenciesArray.prototype.slice.call(arguments,2)),stet}.apply(this,arguments)},p.defineMIMEfunction(e,t){atet},p.defineMode(\\\null\\\,function(){return{token:function(e){return e.skipToEnd()}}}),p.defineMIME(\\\text/plain\\\,\\\null\\\),p.defineExtensionfunction(e,t){p.prototypeet},p.defineDocExtensionfunction(e,t){f.prototypeet},p.fromTextAreafunction(t,n){var e;function r(){t.values.getValue()}if((nn?fe(n):{}).valuet.value,!n.tabindex&&t.tabIndex&&(n.tabindext.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholdert.placeholder),nulln.autofocus&&(eN(ce(t)),n.autofocuset||null!t.getAttribute(\\\autofocus\\\)&&edocument.body),t.form&&(k(t.form,\\\submit\\\,r),!n.leaveSubmitMethodAlone)){var it.form,oi.submit;try{var li.submitfunction(){r(),i.submito,i.submit(),i.submitl}}catch(e){}}n.finishInitfunction(e){e.saver,e.getTextAreafunction(){return t},e.toTextAreafunction(){e.toTextAreaisNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display\\\\\\,t.form&&(T(t.form,\\\submit\\\,r),n.leaveSubmitMethodAlone||\\\function\\\!typeof t.form.submit||(t.form.submito))}},t.style.display\\\none\\\;var sp(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},n);return s},(ep).offT,e.onk,e.wheelEventPixelsgi,e.Docf,e.splitLinesrt,e.countColumnS,e.findColumnwe,e.isWordCharMe,e.Passme,e.signalO,e.Lineun,e.changeEndbi,e.scrollbarModelYr,e.PosF,e.cmpPosP,e.modesst,e.mimeModesat,e.resolveModeut,e.getModect,e.modeExtensionsht,e.extendModedt,e.copyStateft,e.startStategt,e.innerModept,e.commandsYo,e.keyMapFo,e.keyNameBo,e.isModifierKeyzo,e.lookupKeyRo,e.normalizeKeyMapEo,e.StringStreamg,e.SharedTextMarkerbo,e.TextMarkermo,e.LineWidgetpo,e.e_preventDefaultD,e.e_stopPropagation_e,e.e_stopZe,e.addClassie,e.containsre,e.rmClassee,e.keyNamesAo,p.version\\\5.65.19\\\,p});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\,\module-type\:\library\},\$:/plugins/tiddlywiki/codemirror/lib/codemirror.css\:{\text\:\.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:0;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:0}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:}span.CodeMirror-selectedtext{background:0 0}\,\type\:\text/css\,\title\:\$:/plugins/tiddlywiki/codemirror/lib/codemirror.css\,\tags\:\$:/tags/Stylesheet\},\$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css\:{\text\:\.CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:0;background:0 0;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}\,\type\:\text/css\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css\,\tags\:\$:/tags/Stylesheet\},\$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,e):e(CodeMirror)}(function(s){function f(e,o,n){var ee.getWrapperElement(),te.appendChild(document.createElement(\\\div\\\));return t.classNamen?\\\CodeMirror-dialog CodeMirror-dialog-bottom\\\:\\\CodeMirror-dialog CodeMirror-dialog-top\\\,\\\string\\\typeof o?t.innerHTMLo:t.appendChild(o),s.addClass(e,\\\dialog-opened\\\),t}function p(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationCloseo}s.defineExtension(\\\openDialog\\\,function(e,o,n){nn||{},p(this,null);var tf(this,e,n.bottom),i!1,rthis;function u(e){\\\string\\\typeof e?l.valuee:i||(i!0,s.rmClass(t.parentNode,\\\dialog-opened\\\),t.parentNode.removeChild(t),r.focus(),n.onClose&&n.onClose(t))}var lt.getElementsByTagName(\\\input\\\)0;return l?(l.focus(),n.value&&(l.valuen.value,!1!n.selectValueOnOpen&&l.select()),n.onInput&&s.on(l,\\\input\\\,function(e){n.onInput(e,l.value,u)}),n.onKeyUp&&s.on(l,\\\keyup\\\,function(e){n.onKeyUp(e,l.value,u)}),s.on(l,\\\keydown\\\,function(e){n&&n.onKeyDown&&n.onKeyDown(e,l.value,u)||((27e.keyCode||!1!n.closeOnEnter&&13e.keyCode)&&(l.blur(),s.e_stop(e),u()),13e.keyCode&&o(l.value,e))}),!1!n.closeOnBlur&&s.on(t,\\\focusout\\\,function(e){null!e.relatedTarget&&u()})):(et.getElementsByTagName(\\\button\\\)0)&&(s.on(e,\\\click\\\,function(){u(),r.focus()}),!1!n.closeOnBlur&&s.on(e,\\\blur\\\,u),e.focus()),u}),s.defineExtension(\\\openConfirm\\\,function(e,o,n){p(this,null);var tf(this,e,n&&n.bottom),it.getElementsByTagName(\\\button\\\),r!1,uthis,l1;function a(){r||(r!0,s.rmClass(t.parentNode,\\\dialog-opened\\\),t.parentNode.removeChild(t),u.focus())}i0.focus();for(var c0;c\u003Ci.length;++c){var dic;!function(o){s.on(d,\\\click\\\,function(e){s.e_preventDefault(e),a(),o&&o(u)})}(oc),s.on(d,\\\blur\\\,function(){--l,setTimeout(function(){l\u003C0&&a()},200)}),s.on(d,\\\focus\\\,function(){++l})}}),s.defineExtension(\\\openNotification\\\,function(e,o){p(this,r);var n,tf(this,e,o&&o.bottom),i!1,eo&&void 0!o.duration?o.duration:5e3;function r(){i||(i!0,clearTimeout(n),s.rmClass(t.parentNode,\\\dialog-opened\\\),t.parentNode.removeChild(t))}return s.on(t,\\\click\\\,function(e){s.e_preventDefault(e),r()}),e&&(nsetTimeout(r,e)),r})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,e):e(CodeMirror)}(function(i){\\\use strict\\\;var a\\\CodeMirror-activeline\\\,s\\\CodeMirror-activeline-background\\\,c\\\CodeMirror-activeline-gutter\\\;function l(e){for(var t0;t\u003Ce.state.activeLines.length;t++)e.removeLineClass(e.state.activeLinest,\\\wrap\\\,a),e.removeLineClass(e.state.activeLinest,\\\background\\\,s),e.removeLineClass(e.state.activeLinest,\\\gutter\\\,c)}function o(t,e){for(var n,i0;i\u003Ce.length;i++){var oei,rt.getOption(\\\styleActiveLine\\\);(\\\object\\\typeof r&&r.nonEmpty?o.anchor.lineo.head.line:o.empty())&&(rt.getLineHandleVisualStart(o.head.line),nn.length-1!r&&n.push(r))}!function(e,t){if(e.lengtht.length){for(var n0;n\u003Ce.length;n++)if(en!tn)return;return 1}}(t.state.activeLines,n)&&t.operation(function(){l(t);for(var e0;e\u003Cn.length;e++)t.addLineClass(ne,\\\wrap\\\,a),t.addLineClass(ne,\\\background\\\,s),t.addLineClass(ne,\\\gutter\\\,c);t.state.activeLinesn})}function r(e,t){o(e,t.ranges)}i.defineOption(\\\styleActiveLine\\\,!1,function(e,t,n){nn!i.Init&&n;t!n&&(n&&(e.off(\\\beforeSelectionChange\\\,r),l(e),delete e.state.activeLines),t&&(e.state.activeLines,o(e,e.listSelections()),e.on(\\\beforeSelectionChange\\\,r)))})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../lib/codemirror\\\,e):e(CodeMirror)}(function(e){\\\use strict\\\;e.modeInfo{name:\\\CMake\\\,mime:\\\text/x-cmake\\\,mode:\\\cmake\\\,ext:\\\cmake\\\,\\\cmake.in\\\,file:/^CMakeLists.txt$/},{name:\\\Cython\\\,mime:\\\text/x-cython\\\,mode:\\\python\\\,ext:\\\pyx\\\,\\\pxd\\\,\\\pxi\\\},{name:\\\CSS\\\,mime:\\\text/css\\\,mode:\\\css\\\,ext:\\\css\\\},{name:\\\diff\\\,mime:\\\text/x-diff\\\,mode:\\\diff\\\,ext:\\\diff\\\,\\\patch\\\},{name:\\\Embedded Javascript\\\,mime:\\\application/x-ejs\\\,mode:\\\htmlembedded\\\,ext:\\\ejs\\\},{name:\\\Embedded Ruby\\\,mime:\\\application/x-erb\\\,mode:\\\htmlembedded\\\,ext:\\\erb\\\},{name:\\\Erlang\\\,mime:\\\text/x-erlang\\\,mode:\\\erlang\\\,ext:\\\erl\\\},{name:\\\GitHub Flavored Markdown\\\,mime:\\\text/x-gfm\\\,mode:\\\gfm\\\,file:/^(readme|contributing|history).md$/i},{name:\\\Go\\\,mime:\\\text/x-go\\\,mode:\\\go\\\,ext:\\\go\\\},{name:\\\ASP.NET\\\,mime:\\\application/x-aspx\\\,mode:\\\htmlembedded\\\,ext:\\\aspx\\\,alias:\\\asp\\\,\\\aspx\\\},{name:\\\HTML\\\,mime:\\\text/html\\\,mode:\\\htmlmixed\\\,ext:\\\html\\\,\\\htm\\\,\\\handlebars\\\,\\\hbs\\\,alias:\\\xhtml\\\},{name:\\\HTTP\\\,mime:\\\message/http\\\,mode:\\\http\\\},{name:\\\JavaScript\\\,mimes:\\\text/javascript\\\,\\\text/ecmascript\\\,\\\application/javascript\\\,\\\application/x-javascript\\\,\\\application/ecmascript\\\,mode:\\\javascript\\\,ext:\\\js\\\,alias:\\\ecmascript\\\,\\\js\\\,\\\node\\\},{name:\\\JSON\\\,mimes:\\\application/json\\\,\\\application/x-json\\\,mode:\\\javascript\\\,ext:\\\json\\\,\\\map\\\,alias:\\\json5\\\},{name:\\\JSON-LD\\\,mime:\\\application/ld+json\\\,mode:\\\javascript\\\,ext:\\\jsonld\\\,alias:\\\jsonld\\\},{name:\\\Lua\\\,mime:\\\text/x-lua\\\,mode:\\\lua\\\,ext:\\\lua\\\},{name:\\\Markdown\\\,mimes:\\\text/x-markdown\\\,\\\text/markdown\\\,mode:\\\markdown\\\,ext:\\\markdown\\\,\\\md\\\,\\\mkd\\\},{name:\\\MySQL\\\,mime:\\\text/x-mysql\\\,mode:\\\sql\\\},{name:\\\Plain Text\\\,mime:\\\text/plain\\\,mode:\\\null\\\,ext:\\\txt\\\,\\\text\\\,\\\conf\\\,\\\def\\\,\\\list\\\,\\\log\\\},{name:\\\Python\\\,mime:\\\text/x-python\\\,mode:\\\python\\\,ext:\\\BUILD\\\,\\\bzl\\\,\\\py\\\,\\\pyw\\\,file:/^(BUCK|BUILD)$/},{name:\\\SCSS\\\,mime:\\\text/x-scss\\\,mode:\\\css\\\,ext:\\\scss\\\},{name:\\\LaTeX\\\,mime:\\\text/x-latex\\\,mode:\\\stex\\\,ext:\\\text\\\,\\\ltx\\\,\\\tex\\\,alias:\\\tex\\\},{name:\\\TiddlyWiki \\\,mime:\\\text/x-tiddlywiki\\\,mode:\\\tiddlywiki\\\};for(var t0;t\u003Ce.modeInfo.length;t++){var me.modeInfot;m.mimes&&(m.mimem.mimes0)}e.findModeByMIMEfunction(t){tt.toLowerCase();for(var m0;m\u003Ce.modeInfo.length;m++){var ie.modeInfom;if(i.mimet)return i;if(i.mimes)for(var a0;a\u003Ci.mimes.length;a++)if(i.mimesat)return i}return/\\\\+xml$/.test(t)?e.findModeByMIME(\\\application/xml\\\):/\\\\+json$/.test(t)?e.findModeByMIME(\\\application/json\\\):void 0},e.findModeByExtensionfunction(t){for(var m0;m\u003Ce.modeInfo.length;m++){var ie.modeInfom;if(i.ext)for(var a0;a\u003Ci.ext.length;a++)if(i.extat)return i}},e.findModeByFileNamefunction(t){for(var m0;m\u003Ce.modeInfo.length;m++){var ie.modeInfom;if(i.file&&i.file.test(t))return i}var at.lastIndexOf(\\\.\\\),oa>-1&&t.substring(a+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByNamefunction(t){tt.toLowerCase();for(var m0;m\u003Ce.modeInfo.length;m++){var ie.modeInfom;if(i.name.toLowerCase()t)return i;if(i.alias)for(var a0;a\u003Ci.alias.length;a++)if(i.aliasa.toLowerCase()t)return i}}});\\n\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/keyboard\:{\title\:\$:/plugins/tiddlywiki/codemirror/keyboard\,\text\:\\\n!!Default keyboard shortcuts\\n\\n!!!Basic shortcuts\\n\\n|Shortcut |Function |h\\n|Left |goCharLeft |\\n|Right |goCharRight |\\n|Up |goLineUp |\\n|Down |goLineDown |\\n|End |goLineEnd |\\n|Home |goLineStartSmart |\\n|~PageUp |goPageUp |\\n|~PageDown |goPageDown |\\n|Delete |delCharAfter |\\n|Backspace |delCharBefore |\\n|Shift-Backspace |delCharBefore |\\n|Tab |defaultTab |\\n|Shift-Tab |indentAuto |\\n|Enter |newlineAndIndent |\\n|Insert |toggleOverwrite |\\n|Ctrl-Esc |singleSelection |\\n\\n\\n!!!Shortcuts on Windows and Linux\\n\\n|Shortcut |Function |h\\n|Ctrl-A |selectAll |\\n|Ctrl-D |deleteLine |\\n|Ctrl-Z |undo |\\n|Shift-Ctrl-Z |redo |\\n|Ctrl-Y |redo |\\n|Ctrl-Home |goDocStart |\\n|Ctrl-End |goDocEnd |\\n|Ctrl-Up |goLineUp |\\n|Ctrl-Down |goLineDown |\\n|Ctrl-Left |goGroupLeft |\\n|Ctrl-Right |goGroupRight |\\n|Alt-Left |goLineStart |\\n|Alt-Right |goLineEnd |\\n|Ctrl-Backspace |delGroupBefore |\\n|Ctrl-Delete |delGroupAfter |\\n|Ctrl-F |find |\\n|Ctrl-G |findNext |\\n|Shift-Ctrl-G |findPrev |\\n|Shift-Ctrl-F |replace |\\n|Shift-Ctrl-R |replaceAll |\\n|Ctrl- |indentLess |\\n|Ctrl- |indentMore |\\n|Alt-U |undoSelection |\\n|Shift-Ctrl-U |redoSelection |\\n|Shift-Alt-U |redoSelection |\\n\\n\\n!!!Shortcuts on ~MacOs\\n\\n|Shortcut |Function |h\\n|Cmd-A |selectAll |\\n|Cmd-D |deleteLine |\\n|Cmd-Z |undo |\\n|Shift-Cmd-Z |redo |\\n|Cmd-Y |redo |\\n|Cmd-Home |goDocStart |\\n|Cmd-Up |goDocStart |\\n|Cmd-End |goDocEnd |\\n|Cmd-Down |goDocEnd |\\n|Alt-Left |goGroupLeft |\\n|Alt-Right |goGroupRight |\\n|Cmd-Left |goLineLeft |\\n|Cmd-Right |goLineRight |\\n|Alt-Backspace |delGroupBefore |\\n|Ctrl-Alt-Backspace |delGroupAfter |\\n|Alt-Delete |delGroupAfter |\\n|Cmd-F |find |\\n|Cmd-G |findNext |\\n|Shift-Cmd-G |findPrev |\\n|Cmd-Alt-F |replace |\\n|Shift-Cmd-Alt-F |replaceAll |\\n|Cmd- |indentLess |\\n|Cmd- |indentMore |\\n|Cmd-Backspace |delWrappedLineLeft |\\n|Cmd-Delete |delWrappedLineRight |\\n|Alt-U |undoSelection |\\n|Shift-Alt-U |redoSelection |\\n|Ctrl-Up |goDocStart |\\n|Ctrl-Down |goDocEnd |\\n|Ctrl-F |goCharRight |\\n|Ctrl-B |goCharLeft |\\n|Ctrl-P |goLineUp |\\n|Ctrl-N |goLineDown |\\n|Alt-F |goWordRight |\\n|Alt-B |goWordLeft |\\n|Ctrl-A |goLineStart |\\n|Ctrl-E |goLineEnd |\\n|Ctrl-V |goPageDown |\\n|Shift-Ctrl-V |goPageUp |\\n|Ctrl-D |delCharAfter |\\n|Ctrl-H |delCharBefore |\\n|Alt-D |delWordAfter |\\n|Alt-Backspace |delWordBefore |\\n|Ctrl-K |killLine |\\n|Alt-T |transposeChars |\\n|Ctrl-O |openLine |\\n\\n\\n\},\$:/plugins/tiddlywiki/codemirror/license\:{\title\:\$:/plugins/tiddlywiki/codemirror/license\,\text\:\\\\\\\\\\\\n~CodeMirror, copyright (c) by Marijn Haverbeke and others\\nDistributed under an MIT license: http://codemirror.net/LICENSE\\n\\nCopyright (c) 2004-2007, Jeremy Ruston\\nCopyright (c) 2007-2018, UnaMesa Association\\nDistributed under an BSD license: https://tiddlywiki.com/#License\\n\\\\\\\\\\\n\},\$:/plugins/tiddlywiki/codemirror/readme\:{\title\:\$:/plugins/tiddlywiki/codemirror/readme\,\text\:\This plugin provides an enhanced text editor component based on CodeMirror|http://codemirror.net. The basic configuration is designed to be as lightweight as possible and is just around 235kb of size. Additional features can be installed with ~CodeMirror ~AddOns from the plugin library.\\n\\nSource code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror\\n\\nBased on ~CodeMirror version 5.65.19\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/cursorBlinkRate\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/cursorBlinkRate\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/cursorBlinkRate/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/cursorBlinkRate/\\n\\n|\u003C$link to\\\$:/config/codemirror/cursorBlinkRate\\\>\u003C\u003Clingo hint>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/codemirror/cursorBlinkRate\\\ default\\\\\\ placeholder\\\cursorBlinkRate\\\ tag\\\input\\\ type\\\number\\\/> |\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/editorFont\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/editorFont\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/editorFont/hint}}\,\text\:\\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\>\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\ default\\\\\\ tag\\\input\\\/> | |\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/indentUnit\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/indentUnit\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/indentUnit/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/indentUnit/\\n\\n|\u003C$link to\\\$:/config/codemirror/indentUnit\\\>\u003C\u003Clingo hint>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/codemirror/indentUnit\\\ default\\\\\\ placeholder\\\indentUnit\\\ tag\\\input\\\ type\\\number\\\/> |\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/indentWithTabs\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/indentWithTabs\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/indentWithTabs/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/indentWithTabs/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/indentWithTabs\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\true\\\> \u003C$link to\\\$:/config/codemirror/indentWithTabs\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/keyMap\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/keyMap\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/keyMap/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/keyMap\\n\\n\u003C$link to\\\$:/config/codemirror/keyMap\\\>\u003C\u003Clingo hint>>\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/codemirror/keyMap\\\ default\\\default\\\>\\n\u003Coption value\\\default\\\>default\u003C/option>\\n\u003C$list filter\\\allshadows+tiddlersmodule-typecodemirror-keymap!hasdraft.ofgettext\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$transclude>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/$transclude>\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/lineNumbers/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/lineNumbers/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/lineNumbers\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\false\\\> \u003C$link to\\\$:/config/codemirror/lineNumbers\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/lineWrapping/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/lineWrapping/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/lineWrapping\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\true\\\> \u003C$link to\\\$:/config/codemirror/lineWrapping\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/showCursorWhenSelecting/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/showCursorWhenSelecting/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/showCursorWhenSelecting\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\true\\\> \u003C$link to\\\$:/config/codemirror/showCursorWhenSelecting\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/smartIndent\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/smartIndent\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/smartIndent/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/smartIndent/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/smartIndent\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\true\\\> \u003C$link to\\\$:/config/codemirror/smartIndent\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/styleActiveLine/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/styleActiveLine/\\n\u003C\u003Clingo hint>>\\n\\n\u003C$checkbox tiddler\\\$:/config/codemirror/styleActiveLine\\\ field\\\text\\\ checked\\\true\\\ unchecked\\\false\\\ default\\\false\\\> \u003C$link to\\\$:/config/codemirror/styleActiveLine\\\>\u003C\u003Clingo info>>\u003C/$link> \u003C/$checkbox>\\n\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/tabSize\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/tabSize\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/tabSize/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/tabSize/\\n\\n|\u003C$link to\\\$:/config/codemirror/tabSize\\\>\u003C\u003Clingo hint>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/config/codemirror/tabSize\\\ default\\\\\\ placeholder\\\tabSize\\\ tag\\\input\\\ type\\\number\\\/> |\\n\},\$:/core/ui/ControlPanel/Settings/codemirror/theme\:{\title\:\$:/core/ui/ControlPanel/Settings/codemirror/theme\,\tags\:\$:/tags/ControlPanel/Settings/CodeMirror\,\caption\:\{{$:/language/codemirror/theme/hint}}\,\text\:\\\\\define lingo-base() $:/language/codemirror/\\n\\n\u003C$link to\\\$:/config/codemirror/theme\\\>\u003C\u003Clingo hint>>\u003C/$link>\\n\\n\u003C$select tiddler\\\$:/config/codemirror/theme\\\ default\\\default\\\>\\n\u003Coption value\\\default\\\>default\u003C/option>\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/Stylesheetmodule-typecodemirror-theme!hasdraft.ofgetname\\\>\\n\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C$transclude field\\\name\\\>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/$transclude>\u003C/option>\\n\u003C/$list>\\n\u003C/$select>\\n\\n//see the CodeMirror Usage|$:/plugins/tiddlywiki/codemirror/usage how to add themes//\\n\},\$:/plugins/tiddlywiki/codemirror/styles\:{\title\:\$:/plugins/tiddlywiki/codemirror/styles\,\tags\:\$:/tags/Stylesheet\,\module-type\:\codemirror-theme\,\name\:\tiddlywiki\,\text\:\\\\\define set-fat-cursor-background-css(colour,colourA,colourB)\\n\u003C$set name\\\backgroundColour\\\ value\u003C\u003Ccontrastcolour target:\\\\\\\\\$colour$\\\\\\\\\ fallbackTarget:\\\\\\\\\\\\\\\\\\ colourA:\\\\\\\\\$colourA$\\\\\\\\\ colourB:\\\\\\\\\$colourB$\\\\\\\\\>>>\\n.cm-s-tiddlywiki.cm-fat-cursor .CodeMirror-cursor { background: \u003C\u003CbackgroundColour>>; }\\n.cm-s-tiddlywiki .cm-animate-fat-cursor { background-color: \u003C\u003CbackgroundColour>>; }\\n\u003C/$set>\\n\\\\end\\n\\\\define set-fat-cursor-background-colours(palette)\\n\u003C$macrocall $name\\\set-fat-cursor-background-css\\\ colour{{$palette$##foreground}} colourA\\\#77ee77\\\ colourB\\\#586e75\\\/>\\n\\\\end\\n\\\\define set-fat-cursor-background()\\n\u003C$macrocall $name\\\set-fat-cursor-background-colours\\\ palette{{$:/palette}}/>\\n\\\\end\\n\\\\define set-selection-background-css(colour,colourA,colourB,tiddlerEditorBackground)\\n\u003C$wikify name\\\tiddlerEditorBackground\\\ text{{{ $tiddlerEditorBackground$lowercase }}}>\\n\u003C$set name\\\backgroundColour\\\ value\u003C\u003Ccontrastcolour target:\\\\\\\\\$colour$\\\\\\\\\ fallbackTarget:\\\\\\\\\\\\\\\\\\ colourA:\\\\\\\\\$colourA$\\\\\\\\\ colourB:\\\\\\\\\$colourB$\\\\\\\\\>>>\\n\u003C$set name\\\backgroundColour\\\ value{{{ \u003CbackgroundColour>lowercasematch\u003CtiddlerEditorBackground>then ~\u003CbackgroundColour> }}}>\\n.cm-s-tiddlywiki div.CodeMirror-selected { background: \u003C\u003CbackgroundColour>>; color: \u003C\u003Ccolour foreground>>; }\\n.cm-s-tiddlywiki.CodeMirror ::selection { background: \u003C\u003CbackgroundColour>>; color: \u003C\u003Ccolour foreground>>; }\\n.cm-s-tiddlywiki .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: \u003C\u003CbackgroundColour>>; color: \u003C\u003Ccolour foreground>>; }\\n.cm-s-tiddlywiki .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: \u003C\u003CbackgroundColour>>; color: \u003C\u003Ccolour foreground>>; }\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$wikify>\\n\\\\end\\n\\\\define set-selection-background-colours(palette)\\n\u003C$macrocall $name\\\set-selection-background-css\\\ colour{{$palette$##foreground}} colourA{{{ {$palette$##selection-background}!match!prefix\u003C\u003C!suffix>> ~#073642 }}} colourB{{{ {$palette$##selection-background}!match!prefix\u003C\u003C!suffix>> ~#eee8d5 }}} tiddlerEditorBackground{{$palette$##tiddler-editor-background}}/>\\n\\\\end\\n\\\\define set-selection-background()\\n\u003C$macrocall $name\\\set-selection-background-colours\\\ palette{{$:/palette}}/>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/* Make the editor resize to fit its content */\\n\\n.CodeMirror {\\n\\theight: auto;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tline-height: 1.5;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n}\\n\\n.CodeMirror-scroll {\\n\\toverflow-x: auto;\\n\\toverflow-y: hidden;\\n}\\n\\n.cm-s-tiddlywiki {\\n color-profile: sRGB;\\n rendering-intent: auto;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor .tc-edit-texteditor,\\n.tc-tiddler-frame .tc-tiddler-editor .tc-tiddler-preview-preview {\\n\\toverflow: auto;\\n}\\n\\n.cm-s-tiddlywiki.CodeMirror, .cm-s-tiddlywiki .CodeMirror-gutters { background-color: \u003C\u003Ccolour tiddler-editor-background>>; color: \u003C\u003Ccolour foreground>>; }\\n.cm-s-tiddlywiki .CodeMirror-gutters {background: \u003C\u003Ccolour tiddler-editor-background>>; border-right: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;}\\n.cm-s-tiddlywiki .CodeMirror-linenumber {color: \u003C\u003Ccolour foreground>>;}\\n.cm-s-tiddlywiki .CodeMirror-cursor { border-left: 2px solid \u003C\u003Ccolour foreground>>; }\\n.cm-s-tiddlywiki span.cm-comment { color: #586e75; font-style:italic; font-weight:normal; }\\n.cm-s-tiddlywiki .CodeMirror-activeline-background, .cm-s-tiddlywiki .CodeMirror-activeline-gutter .CodeMirror-linenumber { background: rgba(127,127,127,0.2); }\\n.cm-s-tiddlywiki span.cm-matchhighlight { color: \u003C\u003Ccolour background>>; background-color: \u003C\u003Ccolour primary>>; font-weight: normal;}\\n.cm-s-tiddlywiki .CodeMirror-widget { text-shadow: none; }\\n.cm-s-tiddlywiki .CodeMirror-dialog { background: \u003C\u003Ccolour tiddler-background>>; }\\n.cm-s-tiddlywiki .cm-header { color: #586e75; }\\n.cm-s-tiddlywiki .cm-quote { color: #93a1a1; }\\n.cm-s-tiddlywiki .cm-keyword { color: #cb4b16; }\\n.cm-s-tiddlywiki .cm-atom { color: #d33682; }\\n.cm-s-tiddlywiki .cm-number { color: #d33682; }\\n.cm-s-tiddlywiki .cm-def { color: #2aa198; }\\n.cm-s-tiddlywiki .cm-variable { color: #839496; }\\n.cm-s-tiddlywiki .cm-variable-2 { color: #b58900; }\\n.cm-s-tiddlywiki .cm-variable-3, .cm-s-tiddlywiki .cm-type { color: #6c71c4; }\\n.cm-s-tiddlywiki .cm-property { color: #2aa198; }\\n.cm-s-tiddlywiki .cm-operator { color: #6c71c4; }\\n.cm-s-tiddlywiki .cm-comment { color: #586e75; font-style:italic; }\\n.cm-s-tiddlywiki .cm-string { color: #859900; }\\n.cm-s-tiddlywiki .cm-string-2 { color: #b58900; }\\n.cm-s-tiddlywiki .cm-meta { color: #859900; }\\n.cm-s-tiddlywiki .cm-qualifier { color: #b58900; }\\n.cm-s-tiddlywiki .cm-builtin { color: #d33682; }\\n.cm-s-tiddlywiki .cm-bracket { color: #cb4b16; }\\n.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }\\n.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }\\n.cm-s-tiddlywiki .cm-tag { color: #93a1a1; }\\n.cm-s-tiddlywiki .cm-attribute { color: #2aa198; }\\n.cm-s-tiddlywiki .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; }\\n.cm-s-tiddlywiki .cm-link { color: #93a1a1; cursor: pointer; }\\n.cm-s-tiddlywiki .cm-special { color: #6c71c4; }\\n.cm-s-tiddlywiki .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; }\\n.cm-s-tiddlywiki .cm-error,\\n.cm-s-tiddlywiki .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; }\\n.cm-s-tiddlywiki .CodeMirror-matchingbracket { color: #859900; }\\n.cm-s-tiddlywiki .CodeMirror-nonmatchingbracket { color: #dc322f; }\\n.cm-s-tiddlywiki .cm-searching { background: rgba(243, 155, 53, .3); outline: 1px solid #F39B35; }\\n\u003C\u003Cset-fat-cursor-background>>\\n\u003C\u003Cset-selection-background>>\\n\},\$:/core/ui/ControlPanel/Settings/CodeMirror\:{\title\:\$:/core/ui/ControlPanel/Settings/CodeMirror\,\tags\:\$:/tags/ControlPanel/SettingsTab\,\caption\:\CodeMirror\,\list-after\:\$:/core/ui/ControlPanel/Settings/TiddlyWiki\,\text\:\\\\\define lingo-base() $:/language/codemirror/controlPanel/\\n\\n\u003C\u003Clingo hint>>\\n\\n\u003C$link to\\\$:/plugins/tiddlywiki/codemirror/usage\\\>\u003C\u003Clingo usage>>\u003C/$link>\\n\\n\u003C$link to\\\$:/plugins/tiddlywiki/codemirror/keyboard\\\>\u003C\u003Clingo keyboard>>\u003C/$link>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/ControlPanel/Settings/CodeMirror\\\>\\n\\n\u003Cdiv class\\\tc-control-panel-setting\\\ data-setting-title\u003C\u003CcurrentTiddler>> >\\n\\n!!.tc-control-panel-accent \u003C$link>\u003C$transclude field\\\caption\\\/>\u003C/$link>\\n\\n\u003C$transclude/>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\},\$:/plugins/tiddlywiki/codemirror/usage\:{\title\:\$:/plugins/tiddlywiki/codemirror/usage\,\text\:\! Configuration\\n\\nConfiguration for the ~CodeMirror text-editor can be done from within the CodeMirror Settings Tab in the ControlPanel|$:/ControlPanel (Settings - ~CodeMirror)\\n\\n\\n!!Setting a different Theme\\n\\n~CodeMirror themes are available in the extofficial GitHub repository|https://github.com/codemirror/CodeMirror/tree/master/theme\\n\\nMore themes can be found at https://github.com/FarhadG/code-mirror-themes/tree/master/themes and previewed exthere|http://farhadg.github.io/code-mirror-themes/\\n\\n\\nTo add a theme to your wiki, follow these four steps:\\n\\n* choose one of the CSS files and copy its content to a new tiddler\\n* remove all comments from the top and tag the tiddler with \u003C\u003Ctag-pill \\\$:/tags/Stylesheet\\\>>\\n* add a field \\\module-type\\\ with the value \\\codemirror-theme\\\. add a field \\\name\\\ with the exact name of the theme as value\\n* save the tiddler and go to the Settings tab in $:/ControlPanel - look for the \\\theme\\\ dropdown to select your newly added theme\\n\\n\\n!!Line Numbers\\n\\nTo show or hide the Line Numbers at the left, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\Line Numbers\\\ checkbox\\n\\n\\n!!Line Wrapping\\n\\nControls if long lines get visually wrapped to a new line if theyre too long to fit the editor width or if the editor should scroll horizontally\\n\\nTo change the line-wrapping behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\Line Wrapping\\\ checkbox\\n\\n\\n!!Show Cursor when selecting\\n\\nDefines whether the Mouse cursor should be visually shown or hidden when making a text-selection\\n\\nTo change the show-cursor-when-selecting behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \\\Show cursor when selecting\\\ checkbox\\n\\n\\n!!~CodeMirror Font Family\\n\\nThe Font-Family used within the ~CodeMirror text-editor defaults to \\\monospace\\\ which will choose your configured monospace system-font\\n\\nThat setting can be overridden entering one or more Font-Families in the \\\Font Family\\\ input field at ~ControlPanel - Settings - ~CodeMirror\\n\\n* The entries must be separated by semicolons ,\\n* Font-Family Names that contain spaces must be quoted like \\\My Font\\\\\n* If a list of Font-Families is specified, the last Font-Family found on the user-system gets used, non-existing fonts get ignored\\n* If none of the specified Font-Families is available, ~CodeMirror uses the default \\\monospace\\\\\n\\n\\n!!\\\Hidden\\\ Settings:\\n\\n!!!Cursor Blink Rate\\n\\nThe cursor blink-rate defines how fast (in milliseconds) the cursor blinks inside the textarea\\n\\nYou can change it by editing $:/config/codemirror/cursorBlinkRate\\n\\\0\\\ disables blinking\\n\\n!!!Tabsize\\n\\nThe Tabsize defines the width of a tab character. Default is 4.\\n\\nYou can change it by editing $:/config/codemirror/tabSize\\n\\n!!!Indent Unit\\n\\nNot enabled for vnd.tiddlywiki and x-tiddlywiki\\n\\nDefines how many spaces a text-block should be indented. Defaults to 2.\\n\\nYou can change it by editing $:/config/codemirror/indentUnit\\n\\n\}}}},{title:$:/plugins/tiddlywiki/codemirror-autocomplete,name:CodeMirror Autocomplete,description:Autocompletion for CodeMirror,parent-plugin:$:/plugins/tiddlywiki/codemirror,dependents:$:/plugins/tiddlywiki/codemirror-mode-css,list:readme,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,type:application/json,text:{\tiddlers\:{\$:/config/codemirror/autocomplete\:{\title\:\$:/config/codemirror/autocomplete\,\extend\:\extraKeys\,\type\:\json\,\text\:\{\\n\\t\\\Ctrl-Space\\\: \\\autocomplete\\\\\n}\},\$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,e):e(CodeMirror)}(function(y){\\\use strict\\\;var b/\\\\w$+/;y.registerHelper(\\\hint\\\,\\\anyword\\\,function(e,r){for(var tr&&r.word||b,or&&r.range||500,ie.getCursor(),ne.getLine(i.line),fi.ch,sf;s&&t.test(n.charAt(s-1));)--s;for(var as!f&&n.slice(s,f),cr&&r.list||,l{},dnew RegExp(t.source,\\\g\\\),u-1;u\u003C1;u+2)for(var pi.line,gMath.min(Math.max(p+u*o,e.firstLine()),e.lastLine())+u;p!g;p+u)for(var h,me.getLine(p);hd.exec(m);)pi.line&&h0a||a&&0!h0.lastIndexOf(a,0)||Object.prototype.hasOwnProperty.call(l,h0)||(lh0!0,c.push(h0));return{list:c,from:y.Pos(i.line,s),to:y.Pos(i.line,f)}})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\),require(\\\../../mode/css/css\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,\\\../../mode/css/css\\\,e):e(CodeMirror)}(function(l){\\\use strict\\\;var c{active:1,after:1,before:1,checked:1,default:1,disabled:1,empty:1,enabled:1,\\\first-child\\\:1,\\\first-letter\\\:1,\\\first-line\\\:1,\\\first-of-type\\\:1,focus:1,hover:1,\\\in-range\\\:1,indeterminate:1,invalid:1,lang:1,\\\last-child\\\:1,\\\last-of-type\\\:1,link:1,not:1,\\\nth-child\\\:1,\\\nth-last-child\\\:1,\\\nth-last-of-type\\\:1,\\\nth-of-type\\\:1,\\\only-of-type\\\:1,\\\only-child\\\:1,optional:1,\\\out-of-range\\\:1,placeholder:1,\\\read-only\\\:1,\\\read-write\\\:1,required:1,root:1,selection:1,target:1,valid:1,visited:1};l.registerHelper(\\\hint\\\,\\\css\\\,function(e){var te.getCursor(),re.getTokenAt(t),el.innerMode(e.getMode(),r.state);if(\\\css\\\e.mode.name){if(\\\keyword\\\r.type&&0\\\!important\\\.indexOf(r.string))return{list:\\\!important\\\,from:l.Pos(t.line,r.start),to:l.Pos(t.line,r.end)};var or.start,it.ch,sr.string.slice(0,i-o),n(/^\\\\w$_-/.test(s)&&(s\\\\\\,oit.ch),l.resolveMode(\\\text/css\\\)),a,ee.state.state;return\\\pseudo\\\e||\\\variable-3\\\r.type?d(c):\\\block\\\e||\\\maybeprop\\\e?d(n.propertyKeywords):\\\prop\\\e||\\\parens\\\e||\\\at\\\e||\\\params\\\e?(d(n.valueKeywords),d(n.colorKeywords)):\\\media\\\!e&&\\\media_parens\\\!e||(d(n.mediaTypes),d(n.mediaFeatures)),a.length?{list:a,from:l.Pos(t.line,o),to:l.Pos(t.line,i)}:void 0}function d(e){for(var t in e)s&&0!t.lastIndexOf(s,0)||a.push(t)}})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/css-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\:{\text\:\!function(l){\\\object\\\typeof exports&&\\\object\\\typeof module?l(require(\\\../../lib/codemirror\\\),require(\\\./xml-hint\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,\\\./xml-hint\\\,l):l(CodeMirror)}(function(n){\\\use strict\\\;var l,t\\\ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu\\\.split(\\\ \\\),e\\\_blank\\\,\\\_self\\\,\\\_top\\\,\\\_parent\\\,a\\\ascii\\\,\\\utf-8\\\,\\\utf-16\\\,\\\latin1\\\,\\\latin1\\\,r\\\get\\\,\\\post\\\,\\\put\\\,\\\delete\\\,o\\\application/x-www-form-urlencoded\\\,\\\multipart/form-data\\\,\\\text/plain\\\,s\\\all\\\,\\\screen\\\,\\\print\\\,\\\embossed\\\,\\\braille\\\,\\\handheld\\\,\\\print\\\,\\\projection\\\,\\\screen\\\,\\\tty\\\,\\\tv\\\,\\\speech\\\,\\\3d-glasses\\\,\\\resolution >\u003C X\\\,\\\device-aspect-ratio: X/Y\\\,\\\orientation:portrait\\\,\\\orientation:landscape\\\,\\\device-height: X\\\,\\\device-width: X\\\,u{attrs:{}},i{a:{attrs:{href:null,ping:null,type:null,media:s,target:e,hreflang:t}},abbr:u,acronym:u,address:u,applet:u,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:s,hreflang:t,type:null,shape:\\\default\\\,\\\rect\\\,\\\circle\\\,\\\poly\\\}},article:u,aside:u,audio:{attrs:{src:null,mediagroup:null,crossorigin:\\\anonymous\\\,\\\use-credentials\\\,preload:\\\none\\\,\\\metadata\\\,\\\auto\\\,autoplay:\\\\\\,\\\autoplay\\\,loop:\\\\\\,\\\loop\\\,controls:\\\\\\,\\\controls\\\}},b:u,base:{attrs:{href:null,target:e}},basefont:u,bdi:u,bdo:u,big:u,blockquote:{attrs:{cite:null}},body:u,br:u,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:\\\\\\,\\\autofocus\\\,disabled:\\\\\\,\\\autofocus\\\,formenctype:o,formmethod:r,formnovalidate:\\\\\\,\\\novalidate\\\,formtarget:e,type:\\\submit\\\,\\\reset\\\,\\\button\\\}},canvas:{attrs:{width:null,height:null}},caption:u,center:u,cite:u,code:u,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:\\\command\\\,\\\checkbox\\\,\\\radio\\\,label:null,icon:null,radiogroup:null,command:null,title:null,disabled:\\\\\\,\\\disabled\\\,checked:\\\\\\,\\\checked\\\}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:\\\\\\,\\\disabled\\\,multiple:\\\\\\,\\\multiple\\\}},datalist:{attrs:{data:null}},dd:u,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:\\\\\\,\\\open\\\}},dfn:u,dir:u,div:u,dialog:{attrs:{open:null}},dl:u,dt:u,em:u,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:\\\\\\,\\\disabled\\\,form:null,name:null}},figcaption:u,figure:u,font:u,footer:u,form:{attrs:{action:null,name:null,\\\accept-charset\\\:a,autocomplete:\\\on\\\,\\\off\\\,enctype:o,method:r,novalidate:\\\\\\,\\\novalidate\\\,target:e}},frame:u,frameset:u,h1:u,h2:u,h3:u,h4:u,h5:u,h6:u,head:{attrs:{},children:\\\title\\\,\\\base\\\,\\\link\\\,\\\style\\\,\\\meta\\\,\\\script\\\,\\\noscript\\\,\\\command\\\},header:u,hgroup:u,hr:u,html:{attrs:{manifest:null},children:\\\head\\\,\\\body\\\},i:u,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:\\\allow-top-navigation\\\,\\\allow-same-origin\\\,\\\allow-forms\\\,\\\allow-scripts\\\,seamless:\\\\\\,\\\seamless\\\}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:\\\anonymous\\\,\\\use-credentials\\\}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:\\\audio/*\\\,\\\video/*\\\,\\\image/*\\\,autocomplete:\\\on\\\,\\\off\\\,autofocus:\\\\\\,\\\autofocus\\\,checked:\\\\\\,\\\checked\\\,disabled:\\\\\\,\\\disabled\\\,formenctype:o,formmethod:r,formnovalidate:\\\\\\,\\\novalidate\\\,formtarget:e,multiple:\\\\\\,\\\multiple\\\,readonly:\\\\\\,\\\readonly\\\,required:\\\\\\,\\\required\\\,type:\\\hidden\\\,\\\text\\\,\\\search\\\,\\\tel\\\,\\\url\\\,\\\email\\\,\\\password\\\,\\\datetime\\\,\\\date\\\,\\\month\\\,\\\week\\\,\\\time\\\,\\\datetime-local\\\,\\\number\\\,\\\range\\\,\\\color\\\,\\\checkbox\\\,\\\radio\\\,\\\file\\\,\\\submit\\\,\\\image\\\,\\\reset\\\,\\\button\\\}},ins:{attrs:{cite:null,datetime:null}},kbd:u,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:\\\\\\,\\\autofocus\\\,disabled:\\\\\\,\\\disabled\\\,keytype:\\\RSA\\\}},label:{attrs:{for:null,form:null}},legend:u,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:t,media:s,sizes:\\\all\\\,\\\16x16\\\,\\\16x16 32x32\\\,\\\16x16 32x32 64x64\\\}},map:{attrs:{name:null}},mark:u,menu:{attrs:{label:null,type:\\\list\\\,\\\context\\\,\\\toolbar\\\}},meta:{attrs:{content:null,charset:a,name:\\\viewport\\\,\\\application-name\\\,\\\author\\\,\\\description\\\,\\\generator\\\,\\\keywords\\\,\\\http-equiv\\\:\\\content-language\\\,\\\content-type\\\,\\\default-style\\\,\\\refresh\\\}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:u,noframes:u,noscript:u,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:\\\\\\,\\\typemustmatch\\\}},ol:{attrs:{reversed:\\\\\\,\\\reversed\\\,start:null,type:\\\1\\\,\\\a\\\,\\\A\\\,\\\i\\\,\\\I\\\}},optgroup:{attrs:{disabled:\\\\\\,\\\disabled\\\,label:null}},option:{attrs:{disabled:\\\\\\,\\\disabled\\\,label:null,selected:\\\\\\,\\\selected\\\,value:null}},output:{attrs:{for:null,form:null,name:null}},p:u,param:{attrs:{name:null,value:null}},pre:u,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:u,rt:u,ruby:u,s:u,samp:u,script:{attrs:{type:\\\text/javascript\\\,src:null,async:\\\\\\,\\\async\\\,defer:\\\\\\,\\\defer\\\,charset:a}},section:u,select:{attrs:{form:null,name:null,size:null,autofocus:\\\\\\,\\\autofocus\\\,disabled:\\\\\\,\\\disabled\\\,multiple:\\\\\\,\\\multiple\\\}},small:u,source:{attrs:{src:null,type:null,media:null}},span:u,strike:u,strong:u,style:{attrs:{type:\\\text/css\\\,media:s,scoped:null}},sub:u,summary:u,sup:u,table:u,tbody:u,td:{attrs:{colspan:null,rowspan:null,headers:null}},textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:\\\\\\,\\\autofocus\\\,disabled:\\\\\\,\\\disabled\\\,readonly:\\\\\\,\\\readonly\\\,required:\\\\\\,\\\required\\\,wrap:\\\soft\\\,\\\hard\\\}},tfoot:u,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:\\\row\\\,\\\col\\\,\\\rowgroup\\\,\\\colgroup\\\}},thead:u,time:{attrs:{datetime:null}},title:u,tr:u,track:{attrs:{src:null,label:null,default:null,kind:\\\subtitles\\\,\\\captions\\\,\\\descriptions\\\,\\\chapters\\\,\\\metadata\\\,srclang:t}},tt:u,u:u,ul:u,var:u,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:\\\anonymous\\\,\\\use-credentials\\\,preload:\\\auto\\\,\\\metadata\\\,\\\none\\\,autoplay:\\\\\\,\\\autoplay\\\,mediagroup:\\\movie\\\,muted:\\\\\\,\\\muted\\\,controls:\\\\\\,\\\controls\\\}},wbr:u},d{accesskey:\\\a\\\,\\\b\\\,\\\c\\\,\\\d\\\,\\\e\\\,\\\f\\\,\\\g\\\,\\\h\\\,\\\i\\\,\\\j\\\,\\\k\\\,\\\l\\\,\\\m\\\,\\\n\\\,\\\o\\\,\\\p\\\,\\\q\\\,\\\r\\\,\\\s\\\,\\\t\\\,\\\u\\\,\\\v\\\,\\\w\\\,\\\x\\\,\\\y\\\,\\\z\\\,\\\0\\\,\\\1\\\,\\\2\\\,\\\3\\\,\\\4\\\,\\\5\\\,\\\6\\\,\\\7\\\,\\\8\\\,\\\9\\\,class:null,contenteditable:\\\true\\\,\\\false\\\,contextmenu:null,dir:\\\ltr\\\,\\\rtl\\\,\\\auto\\\,draggable:\\\true\\\,\\\false\\\,\\\auto\\\,dropzone:\\\copy\\\,\\\move\\\,\\\link\\\,\\\string:\\\,\\\file:\\\,hidden:\\\hidden\\\,id:null,inert:\\\inert\\\,itemid:null,itemprop:null,itemref:null,itemscope:\\\itemscope\\\,itemtype:null,lang:\\\en\\\,\\\es\\\,spellcheck:\\\true\\\,\\\false\\\,autocorrect:\\\true\\\,\\\false\\\,autocapitalize:\\\true\\\,\\\false\\\,style:null,tabindex:\\\1\\\,\\\2\\\,\\\3\\\,\\\4\\\,\\\5\\\,\\\6\\\,\\\7\\\,\\\8\\\,\\\9\\\,title:null,translate:\\\yes\\\,\\\no\\\,onclick:null,rel:\\\stylesheet\\\,\\\alternate\\\,\\\author\\\,\\\bookmark\\\,\\\help\\\,\\\license\\\,\\\next\\\,\\\nofollow\\\,\\\noreferrer\\\,\\\prefetch\\\,\\\prev\\\,\\\search\\\,\\\tag\\\};function c(l){for(var t in d)d.hasOwnProperty(t)&&(l.attrstdt)}for(l in c(u),i)i.hasOwnProperty(l)&&il!u&&c(il);n.htmlSchemai,n.registerHelper(\\\hint\\\,\\\html\\\,function(l,t){var e{schemaInfo:i};if(t)for(var a in t)eata;return n.hint.xml(l,e)})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/html-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js\:{\text\:\!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function(f){var cf.Pos;function g(t,e){for(var r0,nt.length;r\u003Cn;++r)e(tr)}function r(t,e,r,n){var it.getCursor(),or(t,i);if(!/\\\\b(?:string|comment)\\\\b/.test(o.type)){var sf.innerMode(t.getMode(),o.state);if(\\\json\\\!s.mode.helperType){o.states.state,/^\\\\w$_*$/.test(o.string)?o.end>i.ch&&(o.endi.ch,o.stringo.string.slice(0,i.ch-o.start)):o{start:i.ch,end:i.ch,string:\\\\\\,state:o.state,type:\\\.\\\o.string?\\\property\\\:null};for(var ao;\\\property\\\a.type;){if(\\\.\\\!(ar(t,c(i.line,a.start))).string)return;var ar(t,c(i.line,a.start)),ll||;l.push(a)}return{list:function(t,e,r,n){var i,ot.string,sn&&n.globalScope||window;function a(t){0!t.lastIndexOf(o,0)||function(t,e){if(Array.prototype.indexOf)return-1!t.indexOf(e);for(var rt.length;r--;)if(tre)return 1}(i,t)||i.push(t)}function l(t){\\\string\\\typeof t?g(y,a):t instanceof Array?g(h,a):t instanceof Function&&g(v,a);var ea;if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var rt;r;rObject.getPrototypeOf(r))Object.getOwnPropertyNames(r).forEach(e);else for(var n in t)e(n)}if(e&&e.length){var f,ce.pop();for(c.type&&0c.type.indexOf(\\\variable\\\)?(n&&n.additionalContext&&(fn.additionalContextc.string),n&&!1n.useGlobalScope||(ff||sc.string)):\\\string\\\c.type?f\\\\\\:\\\atom\\\c.type?f1:\\\function\\\c.type&&(nulls.jQuery||\\\$\\\!c.string&&\\\jQuery\\\!c.string||\\\function\\\!typeof s.jQuery?null!s._&&\\\_\\\c.string&&\\\function\\\typeof s._&&(fs._()):fs.jQuery());null!f&&e.length;)ffe.pop().string;null!f&&l(f)}else{for(var pt.state.localVars;p;pp.next)a(p.name);for(var ut.state.context;u;uu.prev)for(pu.vars;p;pp.next)a(p.name);for(pt.state.globalVars;p;pp.next)a(p.name);if(n&&null!n.additionalContext)for(var d in n.additionalContext)a(d);n&&!1n.useGlobalScope||l(s),g(r,a)}return i}(o,l,e,n),from:c(i.line,o.start),to:c(i.line,o.end)}}}}function n(t,e){tt.getTokenAt(e);return e.cht.start+1&&\\\.\\\t.string.charAt(0)?(t.endt.start,t.string\\\.\\\,t.type\\\property\\\):/^\\\\.\\\\w$_*$/.test(t.string)&&(t.type\\\property\\\,t.start++,t.stringt.string.replace(/\\\\./,\\\\\\)),t}f.registerHelper(\\\hint\\\,\\\javascript\\\,function(t,e){return r(t,i,function(t,e){return t.getTokenAt(e)},e)}),f.registerHelper(\\\hint\\\,\\\coffeescript\\\,function(t,e){return r(t,o,n,e)});var y\\\charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight toUpperCase toLowerCase split concat match replace search\\\.split(\\\ \\\),h\\\length concat join splice push pop shift unshift slice reverse sort indexOf lastIndexOf every some filter forEach map reduce reduceRight \\\.split(\\\ \\\),v\\\prototype apply call bind\\\.split(\\\ \\\),i\\\break case catch class const continue debugger default delete do else export extends false finally for function if in import instanceof new null return super switch this throw true try typeof var void while with yield\\\.split(\\\ \\\),o\\\and break catch class continue delete do else extends false finally for if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes\\\.split(\\\ \\\)});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/javascript-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\:{\text\:\!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function(T){\\\use strict\\\;var F\\\CodeMirror-hint-active\\\;function n(t,e){var i;this.cmt,this.optionse,this.widgetnull,this.debounce0,this.tick0,this.startPosthis.cm.getCursor(\\\start\\\),this.startLenthis.cm.getLine(this.startPos.line).length-this.cm.getSelection().length,this.options.updateOnCursorActivity&&t.on(\\\cursorActivity\\\,(ithis).activityFuncfunction(){i.cursorActivity()})}T.showHintfunction(t,e,i){if(!e)return t.showHint(i);i&&i.async&&(e.async!0);var n{hint:e};if(i)for(var o in i)noio;return t.showHint(n)},T.defineExtension(\\\showHint\\\,function(t){tfunction(t,e,i){var nt.options.hintOptions,o{};for(s in c)oscs;if(n)for(var s in n)void 0!ns&&(osns);if(i)for(var s in i)void 0!is&&(osis);o.hint.resolve&&(o.hinto.hint.resolve(t,e));return o}(this,this.getCursor(\\\start\\\),t);var ethis.listSelections();if(!(1\u003Ce.length)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var i0;i\u003Ce.length;i++)if(ei.head.line!ei.anchor.line)return}this.state.completionActive&&this.state.completionActive.close();tthis.state.completionActivenew n(this,t);t.options.hint&&(T.signal(this,\\\startCompletion\\\,this),t.update(!0))}}),T.defineExtension(\\\closeHint\\\,function(){this.state.completionActive&&this.state.completionActive.close()});var owindow.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},swindow.cancelAnimationFrame||clearTimeout;function M(t){return\\\string\\\typeof t?t:t.text}function O(t,e){for(;e&&e!t;){if(\\\LI\\\e.nodeName.toUpperCase()&&e.parentNodet)return e;ee.parentNode}}function i(o,t){this.id\\\cm-complete-\\\+Math.floor(Math.random(1e6)),this.completiono,this.datat,this.picked!1;for(var ithis,so.cm,cs.getInputField().ownerDocument,rc.defaultView||c.parentWindow,lthis.hintsc.createElement(\\\ul\\\),e(l.setAttribute(\\\role\\\,\\\listbox\\\),l.setAttribute(\\\aria-expanded\\\,\\\true\\\),l.idthis.id,o.cm.options.theme),n(l.className\\\CodeMirror-hints \\\+e,this.selectedHintt.selectedHint||0,t.list),h0;h\u003Cn.length;++h){var al.appendChild(c.createElement(\\\li\\\)),unh,d\\\CodeMirror-hint\\\+(h!this.selectedHint?\\\\\\:\\\ \\\+F);null!u.className&&(du.className+\\\ \\\+d),a.classNamed,hthis.selectedHint&&a.setAttribute(\\\aria-selected\\\,\\\true\\\),a.idthis.id+\\\-\\\+h,a.setAttribute(\\\role\\\,\\\option\\\),u.render?u.render(a,t,u):a.appendChild(c.createTextNode(u.displayText||M(u))),a.hintIdh}var f,eo.options.container||c.body,ps.cursorCoords(o.options.alignWithWord?t.from:null),mp.left,gp.bottom,v!0,y0,w0,b(e!c.body&&(b(H-1!\\\absolute\\\,\\\relative\\\,\\\fixed\\\.indexOf(r.getComputedStyle(e).position)?e:e.offsetParent).getBoundingClientRect(),Ac.body.getBoundingClientRect(),yb.left-A.left-H.scrollLeft,wb.top-A.top-H.scrollTop),l.style.leftm-y+\\\px\\\,l.style.topg-w+\\\px\\\,r.innerWidth||Math.max(c.body.offsetWidth,c.documentElement.offsetWidth)),Ar.innerHeight||Math.max(c.body.offsetHeight,c.documentElement.offsetHeight),H(e.appendChild(l),s.getInputField().setAttribute(\\\aria-autocomplete\\\,\\\list\\\),s.getInputField().setAttribute(\\\aria-owns\\\,this.id),s.getInputField().setAttribute(\\\aria-activedescendant\\\,this.id+\\\-\\\+this.selectedHint),o.options.moveOnOverlap?l.getBoundingClientRect():new DOMRect),e!!o.options.paddingForScrollbar&&l.scrollHeight>l.clientHeight+1;setTimeout(function(){fs.getScrollInfo()});0\u003CH.bottom-A&&(SH.bottom-H.top,kH.top-(p.bottom-p.top)-2,A-H.top\u003Ck?(k\u003CS&&(l.style.height(Sk)+\\\px\\\),l.style.top(gp.top-S)+w+\\\px\\\,v!1):l.style.heightA-H.top-2+\\\px\\\);var C,kH.right-b;if(e&&(k+s.display.nativeBarWidth),0\u003Ck&&(H.right-H.left>b&&(l.style.widthb-5+\\\px\\\,k-H.right-H.left-b),l.style.left(mMath.max(p.left-k-y,0))+\\\px\\\),e)for(var xl.firstChild;x;xx.nextSibling)x.style.paddingRights.display.nativeBarWidth+\\\px\\\;s.addKeyMap(this.keyMapfunction(t,n){var o{Up:function(){n.moveFocus(-1)},Down:function(){n.moveFocus(1)},PageUp:function(){n.moveFocus(1-n.menuSize(),!0)},PageDown:function(){n.moveFocus(n.menuSize()-1,!0)},Home:function(){n.setFocus(0)},End:function(){n.setFocus(n.length-1)},Enter:n.pick,Tab:n.pick,Esc:n.close},e(/Mac/.test(navigator.platform)&&(o\\\Ctrl-P\\\function(){n.moveFocus(-1)},o\\\Ctrl-N\\\function(){n.moveFocus(1)}),t.options.customKeys),se?{}:o;function i(t,e){var i\\\string\\\!typeof e?function(t){return e(t,n)}:o.hasOwnProperty(e)?oe:e;sti}if(e)for(var c in e)e.hasOwnProperty(c)&&i(c,ec);var rt.options.extraKeys;if(r)for(var c in r)r.hasOwnProperty(c)&&i(c,rc);return s}(o,{moveFocus:function(t,e){i.changeActive(i.selectedHint+t,e)},setFocus:function(t){i.changeActive(t)},menuSize:function(){return i.screenAmount()},length:n.length,close:function(){o.close()},pick:function(){i.pick()},data:t})),o.options.closeOnUnfocus&&(s.on(\\\blur\\\,this.onBlurfunction(){CsetTimeout(function(){o.close()},100)}),s.on(\\\focus\\\,this.onFocusfunction(){clearTimeout(C)})),s.on(\\\scroll\\\,this.onScrollfunction(){var ts.getScrollInfo(),es.getWrapperElement().getBoundingClientRect(),i(ff||s.getScrollInfo(),g+f.top-t.top),ni-(r.pageYOffset||(c.documentElement||c.body).scrollTop);if(v||(n+l.offsetHeight),n\u003Ce.top||n>e.bottom)return o.close();l.style.topi+\\\px\\\,l.style.leftm+f.left-t.left+\\\px\\\}),T.on(l,\\\dblclick\\\,function(t){tO(l,t.target||t.srcElement);t&&null!t.hintId&&(i.changeActive(t.hintId),i.pick())}),T.on(l,\\\click\\\,function(t){tO(l,t.target||t.srcElement);t&&null!t.hintId&&(i.changeActive(t.hintId),o.options.completeOnSingleClick&&i.pick())}),T.on(l,\\\mousedown\\\,function(){setTimeout(function(){s.focus()},20)});var Sthis.getSelectedHintRange();return 0S.from&&0S.to||this.scrollToActive(),T.signal(t,\\\select\\\,nthis.selectedHint,l.childNodesthis.selectedHint),!0}function r(t,e,i,n){t.async?t(e,n,i):(tt(e,i))&&t.then?t.then(n):n(t)}n.prototype{close:function(){this.active()&&(this.cm.state.completionActivenull,this.ticknull,this.options.updateOnCursorActivity&&this.cm.off(\\\cursorActivity\\\,this.activityFunc),this.widget&&this.data&&T.signal(this.data,\\\close\\\),this.widget&&this.widget.close(),T.signal(this.cm,\\\endCompletion\\\,this.cm))},active:function(){return this.cm.state.completionActivethis},pick:function(t,e){var it.liste,nthis;this.cm.operation(function(){i.hint?i.hint(n.cm,t,i):n.cm.replaceRange(M(i),i.from||t.from,i.to||t.to,\\\complete\\\),T.signal(t,\\\pick\\\,i),n.cm.scrollIntoView()}),this.options.closeOnPick&&this.close()},cursorActivity:function(){this.debounce&&(s(this.debounce),this.debounce0);var t,ethis.startPos,i(this.data&&(ethis.data.from),this.cm.getCursor()),nthis.cm.getLine(i.line);i.line!this.startPos.line||n.length-i.ch!this.startLen-this.startPos.ch||i.ch\u003Ce.ch||this.cm.somethingSelected()||!i.ch||this.options.closeCharacters.test(n.charAt(i.ch-1))?this.close():((tthis).debounceo(function(){t.update()}),this.widget&&this.widget.disable())},update:function(e){var i,n;null!this.tick&&(n++(ithis).tick,r(this.options.hint,this.cm,this.options,function(t){i.tickn&&i.finishUpdate(t,e)}))},finishUpdate:function(t,e){this.data&&T.signal(this.data,\\\update\\\);ethis.widget&&this.widget.picked||e&&this.options.completeSingle;this.widget&&this.widget.close(),(this.datat)&&t.list.length&&(e&&1t.list.length?this.pick(t,0):(this.widgetnew i(this,t),T.signal(t,\\\shown\\\)))}},i.prototype{close:function(){var t;this.completion.widgetthis&&(this.completion.widgetnull,this.hints.parentNode&&this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap),(tthis.completion.cm.getInputField()).removeAttribute(\\\aria-activedescendant\\\),t.removeAttribute(\\\aria-owns\\\),tthis.completion.cm,this.completion.options.closeOnUnfocus&&(t.off(\\\blur\\\,this.onBlur),t.off(\\\focus\\\,this.onFocus)),t.off(\\\scroll\\\,this.onScroll))},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var tthis;this.keyMap{Enter:function(){t.picked!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(t,e){t>this.data.list.length?te?this.data.list.length-1:0:t\u003C0&&(te?0:this.data.list.length-1),this.selectedHint!t&&((ethis.hints.childNodesthis.selectedHint)&&(e.classNamee.className.replace(\\\ \\\+F,\\\\\\),e.removeAttribute(\\\aria-selected\\\)),(ethis.hints.childNodesthis.selectedHintt).className+\\\ \\\+F,e.setAttribute(\\\aria-selected\\\,\\\true\\\),this.completion.cm.getInputField().setAttribute(\\\aria-activedescendant\\\,e.id),this.scrollToActive(),T.signal(this.data,\\\select\\\,this.data.listthis.selectedHint,e))},scrollToActive:function(){var tthis.getSelectedHintRange(),ethis.hints.childNodest.from,tthis.hints.childNodest.to,ithis.hints.firstChild;e.offsetTop\u003Cthis.hints.scrollTop?this.hints.scrollTope.offsetTop-i.offsetTop:t.offsetTop+t.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTopt.offsetTop+t.offsetHeight-this.hints.clientHeight+i.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var tthis.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-t),to:Math.min(this.data.list.length-1,this.selectedHint+t)}}},T.registerHelper(\\\hint\\\,\\\auto\\\,{resolve:function(t,e){var i,ct.getHelpers(e,\\\hint\\\);return c.length?((efunction(t,n,o){var sfunction(t,e){if(!t.somethingSelected())return e;for(var i,n0;n\u003Ce.length;n++)en.supportsSelection&&i.push(en);return i}(t,c);!function e(i){if(is.length)return n(null);r(si,t,o,function(t){t&&0\u003Ct.list.length?n(t):e(i+1)})}(0)}).async!0,e.supportsSelection!0,e):(it.getHelper(t.getCursor(),\\\hintWords\\\))?function(t){return T.hint.fromList(t,{words:i})}:T.hint.anyword?function(t,e){return T.hint.anyword(t,e)}:function(){}}}),T.registerHelper(\\\hint\\\,\\\fromList\\\,function(t,e){for(var i,nt.getCursor(),tt.getTokenAt(n),oT.Pos(n.line,t.start),sn,c(t.start\u003Cn.ch&&/\\\\w/.test(t.string.charAt(n.ch-t.start-1))?it.string.substr(0,n.ch-t.start):(i\\\\\\,on),),r0;r\u003Ce.words.length;r++){var le.wordsr;l.slice(0,i.length)i&&c.push(l)}if(c.length)return{list:c,from:o,to:s}}),T.commands.autocompleteT.showHint;var c{hint:T.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/\\\\s()\\\\\\\\{};:>,/,closeOnPick:!0,closeOnUnfocus:!0,updateOnCursorActivity:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};T.defineOption(\\\hintOptions\\\,null)});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\:{\text\:\.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto;box-sizing:border-box}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;white-space:pre;color:#000;cursor:pointer}li.CodeMirror-hint-active{background:#08f;color:#fff}\,\type\:\text/css\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/show-hint.css\,\tags\:\$:/tags/Stylesheet\},\$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js\:{\text\:\!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function($){\\\use strict\\\;var I$.Pos;function T(t,e,r){return r?0\u003Ct.indexOf(e):0t.lastIndexOf(e,0)}$.registerHelper(\\\hint\\\,\\\xml\\\,function(t,e){var re&&e.schemaInfo,ne&&e.quoteChar||\\\,se&&e.matchInMiddle;if(r){var it.getCursor(),ot.getTokenAt(i);if(o.end>i.ch&&(o.endi.ch,o.stringo.string.slice(0,i.ch-o.start)),(e$.innerMode(t.getMode(),o.state)).mode.xmlCurrentTag){var a,l,g!1,c/\\\\btag\\\\b/.test(o.type)&&!/>$/.test(o.string),fc&&/^\\\\w/.test(o.string),h(f?(Ot.getLine(i.line).slice(Math.max(0,o.start-2),o.start),(M/\u003C\\\\/$/.test(O)?\\\close\\\:/\u003C$/.test(O)?\\\open\\\:null)&&(ao.start-(\\\close\\\M?2:1))):c&&\\\\u003C\\\o.string?M\\\open\\\:c&&\\\\u003C/\\\o.string&&(M\\\close\\\),e.mode.xmlCurrentTag(e.state));if(!c&&!h||M){f&&(Ao.string);var gM,ce.mode.xmlCurrentContext?e.mode.xmlCurrentContext(e.state):,u(ec.length&&cc.length-1)&&re,de?u&&u.children:r\\\!top\\\;if(d&&\\\close\\\!M)for(var p0;p\u003Cd.length;++p)A&&!T(dp,A,s)||l.push(\\\\u003C\\\+dp);else if(\\\close\\\!M)for(var m in r)!r.hasOwnProperty(m)||\\\!top\\\m||\\\!attrs\\\m||A&&!T(m,A,s)||l.push(\\\\u003C\\\+m);e&&(!A||\\\close\\\M&&T(e,A,s))&&l.push(\\\\u003C/\\\+e+\\\>\\\)}else{var y,x(uh&&rh.name)&&u.attrs,vr\\\!attrs\\\;if(!x&&!v)return;if(x){if(v){var C,b{};for(C in v)v.hasOwnProperty(C)&&(bCvC);for(C in x)x.hasOwnProperty(C)&&(bCxC);xb}}else xv;if(\\\string\\\o.type||\\\\\\o.string){var O,w,A,M,f(Ot.getRange(I(i.line,Math.max(0,i.ch-60)),I(i.line,\\\string\\\o.type?o.start:o.end))).match(/(^\\\\s\\\\u00a0\u003C>\\\\\\\\\\\+)$/);if(!f||!x.hasOwnProperty(f1)||!(wxf1))return;\\\function\\\typeof w&&(ww.call(this,t)),\\\string\\\o.type&&(Ao.string,/\\\/.test(o.string.charAt(c0))&&(no.string.charAt(0),Ao.string.slice(1),c++),Mo.string.length,/\\\/.test(o.string.charAt(M-1))&&(no.string.charAt(M-1),Ao.string.substr(c,M-2)),c&&(et.getLine(i.line)).length>o.end&&e.charAt(o.end)n&&o.end++,g!0);hfunction(t){if(t)for(var e0;e\u003Ct.length;++e)A&&!T(te,A,s)||l.push(n+te+n);return P()};return w&&w.then?w.then(h):h(w)}for(y in\\\attribute\\\o.type&&(Ao.string,g!0),x)!x.hasOwnProperty(y)||A&&!T(y,A,s)||l.push(y)}return P()}}function P(){return{list:l,from:g?I(i.line,nulla?o.start:a):i,to:g?I(i.line,o.end):i}}})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/hint/xml-hint.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror-autocomplete/readme\:{\title\:\$:/plugins/tiddlywiki/codemirror-autocomplete/readme\,\text\:\This plugin enhances the CodeMirror|http://codemirror.net text editor with Autocompletion functionality. It needs the latest CodeMirror plugin|$:/plugins/tiddlywiki/codemirror to be installed\\n\\nIt adds Autocompletion for html, javascript and xml and also for already present words within a text-editor instance\\n\\nThe Keyboard Shortcut for autocompletion is `Ctrl+Space`\\n\\n\}}}},{title:$:/plugins/tiddlywiki/codemirror-closebrackets,name:CodeMirror Close Brackets,description:Close brackets for CodeMirror,parent-plugin:$:/plugins/tiddlywiki/codemirror,list:readme,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/config/codemirror/autoCloseBrackets\:{\title\:\$:/config/codemirror/autoCloseBrackets\,\type\:\bool\,\text\:\true\},\$:/config/codemirror/matchBrackets\:{\title\:\$:/config/codemirror/matchBrackets\,\type\:\bool\,\text\:\true\\n\},\$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,e):e(CodeMirror)}(function(S){var n{pairs:\\\(){}\\\\\\\\\\\\\\\\\,closeBefore:\\\)}\\\\\\\:;>\\\,triples:\\\\\\,explode:\\\{}\\\},kS.Pos;function y(e,t){return\\\pairs\\\t&&\\\string\\\typeof e?e:(\\\object\\\typeof e&&null!et?e:n)t}S.defineOption(\\\autoCloseBrackets\\\,!1,function(e,t,n){n&&n!S.Init&&(e.removeKeyMap(i),e.state.closeBracketsnull),t&&(r(y(t,\\\pairs\\\)),e.state.closeBracketst,e.addKeyMap(i))});var i{Backspace:function(e){var tO(e);if(!t||e.getOption(\\\disableInput\\\))return S.Pass;for(var ny(t,\\\pairs\\\),re.listSelections(),i0;i\u003Cr.length;i++){if(!ri.empty())return S.Pass;var as(e,ri.head);if(!a||n.indexOf(a)%2!0)return S.Pass}for(ir.length-1;0\u003Ci;i--){var ori.head;e.replaceRange(\\\\\\,k(o.line,o.ch-1),k(o.line,o.ch+1),\\\+delete\\\)}},Enter:function(r){var eO(r),te&&y(e,\\\explode\\\);if(!t||r.getOption(\\\disableInput\\\))return S.Pass;for(var ir.listSelections(),n0;n\u003Ci.length;n++){if(!in.empty())return S.Pass;var as(r,in.head);if(!a||t.indexOf(a)%2!0)return S.Pass}r.operation(function(){var er.lineSeparator()||\\\\\\\n\\\;r.replaceSelection(e+e,null),m(r,-1),ir.listSelections();for(var t0;t\u003Ci.length;t++){var nit.head.line;r.indentLine(n,null,!0),r.indentLine(n+1,null,!0)}})}};function r(e){for(var t0;t\u003Ce.length;t++){var ne.charAt(t),r\\\\\\+n+\\\\\\;ir||(irfunction(P){return function(e){var ie,tP,eO(i);if(!e||i.getOption(\\\disableInput\\\))return S.Pass;var ny(e,\\\pairs\\\),rn.indexOf(t);if(-1r)return S.Pass;for(var a,oy(e,\\\closeBefore\\\),sy(e,\\\triples\\\),ln.charAt(r+1)t,ci.listSelections(),hr%20,f0;f\u003Cc.length;f++){var u,dcf,pd.head,gi.getRange(p,k(p.line,p.ch+1));if(h&&!d.empty())u\\\surround\\\;else if(!l&&h||g!t)if(l&&1\u003Cp.ch&&0\u003Cs.indexOf(t)&&i.getRange(k(p.line,p.ch-2),p)t+t){if(2\u003Cp.ch&&/\\\\bstring/.test(i.getTokenTypeAt(k(p.line,p.ch-2))))return S.Pass;u\\\addFour\\\}else if(l){d0p.ch?\\\ \\\:i.getRange(k(p.line,p.ch-1),p);if(S.isWordChar(g)||dt||S.isWordChar(d))return S.Pass;u\\\both\\\}else{if(!h||!(0g.length||/\\\\s/.test(g)||-1\u003Co.indexOf(g)))return S.Pass;u\\\both\\\}else ul&&function(e,t){var ne.getTokenAt(k(t.line,t.ch+1));return/\\\\bstring/.test(n.type)&&n.startt.ch&&(0t.ch||!/\\\\bstring/.test(e.getTokenTypeAt(t)))}(i,p)?\\\both\\\:0\u003Cs.indexOf(t)&&i.getRange(p,k(p.line,p.ch+3))t+t+t?\\\skipThree\\\:\\\skip\\\;if(a){if(a!u)return S.Pass}else au}var vr%2?n.charAt(r-1):t,br%2?t:n.charAt(r+1);i.operation(function(){if(\\\skip\\\a)m(i,1);else if(\\\skipThree\\\a)m(i,3);else if(\\\surround\\\a){for(var ei.getSelections(),t0;t\u003Ce.length;t++)etv+et+b;i.replaceSelections(e,\\\around\\\);for(ei.listSelections().slice(),t0;t\u003Ce.length;t++)et(net,rvoid 0,r0\u003CS.cmpPos(n.anchor,n.head),{anchor:new k(n.anchor.line,n.anchor.ch+(r?-1:1)),head:new k(n.head.line,n.head.ch+(r?1:-1))});i.setSelections(e)}else\\\both\\\a?(i.replaceSelection(v+b,null),i.triggerElectric(v+b),m(i,-1)):\\\addFour\\\a&&(i.replaceSelection(v+v+v+v,\\\before\\\),m(i,1));var n,r})}}(n))}}function O(e){var te.state.closeBrackets;return t&&!t.override&&e.getModeAt(e.getCursor()).closeBrackets||t}function m(e,t){for(var n,re.listSelections(),i0,a0;a\u003Cr.length;a++){var ora,o(o.heade.getCursor()&&(ia),o.head.ch||0\u003Ct?{line:o.head.line,ch:o.head.ch+t}:{line:o.head.line-1});n.push({anchor:o,head:o})}e.setSelections(n,i)}function s(e,t){ee.getRange(k(t.line,t.ch-1),k(t.line,t.ch+1));return 2e.length?e:null}r(n.pairs+\\\`\\\)});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\:{\text\:\!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function(r){var u/MSIE \\\\d/.test(navigator.userAgent)&&(nulldocument.documentMode||document.documentMode\u003C8),kr.Pos,p{\\\(\\\:\\\)>\\\,\\\)\\\:\\\(\u003C\\\,\\\\\\:\\\>\\\,\\\\\\:\\\\u003C\\\,\\\{\\\:\\\}>\\\,\\\}\\\:\\\{\u003C\\\,\\\\u003C\\\:\\\>>\\\,\\\>\\\:\\\\u003C\u003C\\\};function y(t){return t&&t.bracketRegex||/(){}\\\\/}function f(t,e,n){var rt.getLineHandle(e.line),ie.ch-1,cn&&n.afterCursor,a(nullc&&(c/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className)),y(n)),c!c&&0\u003Ci&&a.test(r.text.charAt(i))&&pr.text.charAt(i)||a.test(r.text.charAt(i+1))&&pr.text.charAt(++i);if(!c)return null;a\\\>\\\c.charAt(1)?1:-1;if(n&&n.strict&&0\u003Ca!(ie.ch))return null;rt.getTokenTypeAt(k(e.line,i+1)),to(t,k(e.line,i+(0\u003Ca?1:0)),a,r,n);return nullt?null:{from:k(e.line,i),to:t&&t.pos,match:t&&t.chc.charAt(0),forward:0\u003Ca}}function o(t,e,n,r,i){for(var ci&&i.maxScanLineLength||1e4,ai&&i.maxScanLines||1e3,o,hy(i),l0\u003Cn?Math.min(e.line+a,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-a),se.line;s!l;s+n){var ut.getLine(s);if(u){var f0\u003Cn?0:u.length-1,m0\u003Cn?u.length:-1;if(!(u.length>c))for(se.line&&(fe.ch-(n\u003C0?1:0));f!m;f+n){var gu.charAt(f);if(h.test(g)&&(void 0r||(t.getTokenTypeAt(k(s,f+1))||\\\\\\)(r||\\\\\\))){var dpg;if(d&&\\\>\\\d.charAt(1)0\u003Cn)o.push(g);else{if(!o.length)return{pos:k(s,f),ch:g};o.pop()}}}}}return s-n!(0\u003Cn?t.lastLine():t.firstLine())&&null}function e(t,e,n){for(var rt.state.matchBrackets.maxHighlightLineLength||1e3,in&&n.highlightNonMatching,c,at.listSelections(),o0;o\u003Ca.length;o++){var h,lao.empty()&&f(t,ao.head,n);l&&(l.match||!1!i)&&t.getLine(l.from.line).length\u003Cr&&(hl.match?\\\CodeMirror-matchingbracket\\\:\\\CodeMirror-nonmatchingbracket\\\,c.push(t.markText(l.from,k(l.from.line,l.from.ch+1),{className:h})),l.to&&t.getLine(l.to.line).length\u003Cr&&c.push(t.markText(l.to,k(l.to.line,l.to.ch+1),{className:h})))}if(c.length){u&&t.state.focused&&t.focus();function s(){t.operation(function(){for(var t0;t\u003Cc.length;t++)ct.clear()})}if(!e)return s;setTimeout(s,800)}}function i(t){t.operation(function(){t.state.matchBrackets.currentlyHighlighted&&(t.state.matchBrackets.currentlyHighlighted(),t.state.matchBrackets.currentlyHighlightednull),t.state.matchBrackets.currentlyHighlightede(t,!1,t.state.matchBrackets)})}function c(t){t.state.matchBrackets&&t.state.matchBrackets.currentlyHighlighted&&(t.state.matchBrackets.currentlyHighlighted(),t.state.matchBrackets.currentlyHighlightednull)}r.defineOption(\\\matchBrackets\\\,!1,function(t,e,n){n&&n!r.Init&&(t.off(\\\cursorActivity\\\,i),t.off(\\\focus\\\,i),t.off(\\\blur\\\,c),c(t)),e&&(t.state.matchBrackets\\\object\\\typeof e?e:{},t.on(\\\cursorActivity\\\,i),t.on(\\\focus\\\,i),t.on(\\\blur\\\,c))}),r.defineExtension(\\\matchBrackets\\\,function(){e(this,!0)}),r.defineExtension(\\\findMatchingBracket\\\,function(t,e,n){return f(this,t,e!n&&\\\boolean\\\!typeof e?e:n?(n.stricte,n):e?{strict:!0}:null)}),r.defineExtension(\\\scanForBracket\\\,function(t,e,n,r){return o(this,t,e,n,r)})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror-closebrackets/readme\:{\title\:\$:/plugins/tiddlywiki/codemirror-closebrackets/readme\,\text\:\This plugin adds the ability to automatically insert the closing brackets when you type an opening bracket.\\nAlso enables highlighting of matching brackets.\\n\\nIt needs the latest CodeMirror plugin|$:/plugins/tiddlywiki/codemirror to be installed\\n\\n\}}}},{title:$:/plugins/tiddlywiki/codemirror-keymap-vim,name:CodeMirror Keymap Vim,description:Keymap compatible with Vim for CodeMirror,parent-plugin:$:/plugins/tiddlywiki/codemirror,dependents:$:/plugins/tiddlywiki/codemirror-search-replace $:/plugins/tiddlywiki/codemirror-closebrackets,list:readme,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,type:application/json,text:{\tiddlers\:{\$:/plugins/tiddlywiki/codemirror/keymaps/vim\:{\title\:\$:/plugins/tiddlywiki/codemirror/keymaps/vim\,\module-type\:\codemirror-keymap\,\text\:\vim\\n\},\$:/plugins/tiddlywiki/codemirror/keymap/vim.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../lib/codemirror\\\),require(\\\../addon/search/searchcursor\\\),require(\\\../addon/dialog/dialog\\\),require(\\\../addon/edit/matchbrackets.js\\\)):\\\function\\\typeof define&&define.amd?define(\\\../lib/codemirror\\\,\\\../addon/search/searchcursor\\\,\\\../addon/dialog/dialog\\\,\\\../addon/edit/matchbrackets\\\,e):e(CodeMirror)}(function(e){\\\use strict\\\;function t(b){var Lb.Pos;function r(e,t){ee.state.vim;if(!e||e.insertMode)return t.head;var ne.sel.head;return n?e.visualBlock&&t.head.line!n.line?void 0:t.from()!t.anchor||t.empty()||t.head.line!n.line||t.head.chn.ch?t.head:new L(t.head.line,t.head.ch-1):t.head}var p{keys:\\\\u003CLeft>\\\,type:\\\keyToKey\\\,toKeys:\\\h\\\},{keys:\\\\u003CRight>\\\,type:\\\keyToKey\\\,toKeys:\\\l\\\},{keys:\\\\u003CUp>\\\,type:\\\keyToKey\\\,toKeys:\\\k\\\},{keys:\\\\u003CDown>\\\,type:\\\keyToKey\\\,toKeys:\\\j\\\},{keys:\\\g\u003CUp>\\\,type:\\\keyToKey\\\,toKeys:\\\gk\\\},{keys:\\\g\u003CDown>\\\,type:\\\keyToKey\\\,toKeys:\\\gj\\\},{keys:\\\\u003CSpace>\\\,type:\\\keyToKey\\\,toKeys:\\\l\\\},{keys:\\\\u003CBS>\\\,type:\\\keyToKey\\\,toKeys:\\\h\\\,context:\\\normal\\\},{keys:\\\\u003CDel>\\\,type:\\\keyToKey\\\,toKeys:\\\x\\\,context:\\\normal\\\},{keys:\\\\u003CC-Space>\\\,type:\\\keyToKey\\\,toKeys:\\\W\\\},{keys:\\\\u003CC-BS>\\\,type:\\\keyToKey\\\,toKeys:\\\B\\\,context:\\\normal\\\},{keys:\\\\u003CS-Space>\\\,type:\\\keyToKey\\\,toKeys:\\\w\\\},{keys:\\\\u003CS-BS>\\\,type:\\\keyToKey\\\,toKeys:\\\b\\\,context:\\\normal\\\},{keys:\\\\u003CC-n>\\\,type:\\\keyToKey\\\,toKeys:\\\j\\\},{keys:\\\\u003CC-p>\\\,type:\\\keyToKey\\\,toKeys:\\\k\\\},{keys:\\\\u003CC->\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\},{keys:\\\\u003CC-c>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\},{keys:\\\\u003CC->\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\,context:\\\insert\\\},{keys:\\\\u003CC-c>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\,context:\\\insert\\\},{keys:\\\\u003CC-Esc>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\},{keys:\\\\u003CC-Esc>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CEsc>\\\,context:\\\insert\\\},{keys:\\\s\\\,type:\\\keyToKey\\\,toKeys:\\\cl\\\,context:\\\normal\\\},{keys:\\\s\\\,type:\\\keyToKey\\\,toKeys:\\\c\\\,context:\\\visual\\\},{keys:\\\S\\\,type:\\\keyToKey\\\,toKeys:\\\cc\\\,context:\\\normal\\\},{keys:\\\S\\\,type:\\\keyToKey\\\,toKeys:\\\VdO\\\,context:\\\visual\\\},{keys:\\\\u003CHome>\\\,type:\\\keyToKey\\\,toKeys:\\\0\\\},{keys:\\\\u003CEnd>\\\,type:\\\keyToKey\\\,toKeys:\\\$\\\},{keys:\\\\u003CPageUp>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CC-b>\\\},{keys:\\\\u003CPageDown>\\\,type:\\\keyToKey\\\,toKeys:\\\\u003CC-f>\\\},{keys:\\\\u003CCR>\\\,type:\\\keyToKey\\\,toKeys:\\\j^\\\,context:\\\normal\\\},{keys:\\\\u003CIns>\\\,type:\\\keyToKey\\\,toKeys:\\\i\\\,context:\\\normal\\\},{keys:\\\\u003CIns>\\\,type:\\\action\\\,action:\\\toggleOverwrite\\\,context:\\\insert\\\},{keys:\\\H\\\,type:\\\motion\\\,motion:\\\moveToTopLine\\\,motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\M\\\,type:\\\motion\\\,motion:\\\moveToMiddleLine\\\,motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\L\\\,type:\\\motion\\\,motion:\\\moveToBottomLine\\\,motionArgs:{linewise:!0,toJumplist:!0}},{keys:\\\h\\\,type:\\\motion\\\,motion:\\\moveByCharacters\\\,motionArgs:{forward:!1}},{keys:\\\l\\\,type:\\\motion\\\,motion:\\\moveByCharacters\\\,motionArgs:{forward:!0}},{keys:\\\j\\\,type:\\\motion\\\,motion:\\\moveByLines\\\,motionArgs:{forward:!0,linewise:!0}},{keys:\\\k\\\,type:\\\motion\\\,motion:\\\moveByLines\\\,motionArgs:{forward:!1,linewise:!0}},{keys:\\\gj\\\,type:\\\motion\\\,motion:\\\moveByDisplayLines\\\,motionArgs:{forward:!0}},{keys:\\\gk\\\,type:\\\motion\\\,motion:\\\moveByDisplayLines\\\,motionArgs:{forward:!1}},{keys:\\\w\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!0,wordEnd:!1}},{keys:\\\W\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!0,wordEnd:!1,bigWord:!0}},{keys:\\\e\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!0,wordEnd:!0,inclusive:!0}},{keys:\\\E\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!0,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\\\b\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!1,wordEnd:!1}},{keys:\\\B\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!1,wordEnd:!1,bigWord:!0}},{keys:\\\ge\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!1,wordEnd:!0,inclusive:!0}},{keys:\\\gE\\\,type:\\\motion\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!1,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\\\{\\\,type:\\\motion\\\,motion:\\\moveByParagraph\\\,motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\}\\\,type:\\\motion\\\,motion:\\\moveByParagraph\\\,motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\(\\\,type:\\\motion\\\,motion:\\\moveBySentence\\\,motionArgs:{forward:!1}},{keys:\\\)\\\,type:\\\motion\\\,motion:\\\moveBySentence\\\,motionArgs:{forward:!0}},{keys:\\\\u003CC-f>\\\,type:\\\motion\\\,motion:\\\moveByPage\\\,motionArgs:{forward:!0}},{keys:\\\\u003CC-b>\\\,type:\\\motion\\\,motion:\\\moveByPage\\\,motionArgs:{forward:!1}},{keys:\\\\u003CC-d>\\\,type:\\\motion\\\,motion:\\\moveByScroll\\\,motionArgs:{forward:!0,explicitRepeat:!0}},{keys:\\\\u003CC-u>\\\,type:\\\motion\\\,motion:\\\moveByScroll\\\,motionArgs:{forward:!1,explicitRepeat:!0}},{keys:\\\gg\\\,type:\\\motion\\\,motion:\\\moveToLineOrEdgeOfDocument\\\,motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\\\G\\\,type:\\\motion\\\,motion:\\\moveToLineOrEdgeOfDocument\\\,motionArgs:{forward:!0,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\\\g$\\\,type:\\\motion\\\,motion:\\\moveToEndOfDisplayLine\\\},{keys:\\\g^\\\,type:\\\motion\\\,motion:\\\moveToStartOfDisplayLine\\\},{keys:\\\g0\\\,type:\\\motion\\\,motion:\\\moveToStartOfDisplayLine\\\},{keys:\\\0\\\,type:\\\motion\\\,motion:\\\moveToStartOfLine\\\},{keys:\\\^\\\,type:\\\motion\\\,motion:\\\moveToFirstNonWhiteSpaceCharacter\\\},{keys:\\\+\\\,type:\\\motion\\\,motion:\\\moveByLines\\\,motionArgs:{forward:!0,toFirstChar:!0}},{keys:\\\-\\\,type:\\\motion\\\,motion:\\\moveByLines\\\,motionArgs:{forward:!1,toFirstChar:!0}},{keys:\\\_\\\,type:\\\motion\\\,motion:\\\moveByLines\\\,motionArgs:{forward:!0,toFirstChar:!0,repeatOffset:-1}},{keys:\\\$\\\,type:\\\motion\\\,motion:\\\moveToEol\\\,motionArgs:{inclusive:!0}},{keys:\\\%\\\,type:\\\motion\\\,motion:\\\moveToMatchedSymbol\\\,motionArgs:{inclusive:!0,toJumplist:!0}},{keys:\\\f\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveToCharacter\\\,motionArgs:{forward:!0,inclusive:!0}},{keys:\\\F\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveToCharacter\\\,motionArgs:{forward:!1}},{keys:\\\t\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveTillCharacter\\\,motionArgs:{forward:!0,inclusive:!0}},{keys:\\\T\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveTillCharacter\\\,motionArgs:{forward:!1}},{keys:\\\;\\\,type:\\\motion\\\,motion:\\\repeatLastCharacterSearch\\\,motionArgs:{forward:!0}},{keys:\\\,\\\,type:\\\motion\\\,motion:\\\repeatLastCharacterSearch\\\,motionArgs:{forward:!1}},{keys:\\\\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\goToMark\\\,motionArgs:{toJumplist:!0,linewise:!0}},{keys:\\\`\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\goToMark\\\,motionArgs:{toJumplist:!0}},{keys:\\\`\\\,type:\\\motion\\\,motion:\\\jumpToMark\\\,motionArgs:{forward:!0}},{keys:\\\`\\\,type:\\\motion\\\,motion:\\\jumpToMark\\\,motionArgs:{forward:!1}},{keys:\\\\\\,type:\\\motion\\\,motion:\\\jumpToMark\\\,motionArgs:{forward:!0,linewise:!0}},{keys:\\\\\\,type:\\\motion\\\,motion:\\\jumpToMark\\\,motionArgs:{forward:!1,linewise:!0}},{keys:\\\p\\\,type:\\\action\\\,action:\\\paste\\\,isEdit:!0,actionArgs:{after:!0,isEdit:!0,matchIndent:!0}},{keys:\\\p\\\,type:\\\action\\\,action:\\\paste\\\,isEdit:!0,actionArgs:{after:!1,isEdit:!0,matchIndent:!0}},{keys:\\\\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveToSymbol\\\,motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\moveToSymbol\\\,motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\|\\\,type:\\\motion\\\,motion:\\\moveToColumn\\\},{keys:\\\o\\\,type:\\\motion\\\,motion:\\\moveToOtherHighlightedEnd\\\,context:\\\visual\\\},{keys:\\\O\\\,type:\\\motion\\\,motion:\\\moveToOtherHighlightedEnd\\\,motionArgs:{sameLine:!0},context:\\\visual\\\},{keys:\\\d\\\,type:\\\operator\\\,operator:\\\delete\\\},{keys:\\\y\\\,type:\\\operator\\\,operator:\\\yank\\\},{keys:\\\c\\\,type:\\\operator\\\,operator:\\\change\\\},{keys:\\\\\\,type:\\\operator\\\,operator:\\\indentAuto\\\},{keys:\\\>\\\,type:\\\operator\\\,operator:\\\indent\\\,operatorArgs:{indentRight:!0}},{keys:\\\\u003C\\\,type:\\\operator\\\,operator:\\\indent\\\,operatorArgs:{indentRight:!1}},{keys:\\\g~\\\,type:\\\operator\\\,operator:\\\changeCase\\\},{keys:\\\gu\\\,type:\\\operator\\\,operator:\\\changeCase\\\,operatorArgs:{toLower:!0},isEdit:!0},{keys:\\\gU\\\,type:\\\operator\\\,operator:\\\changeCase\\\,operatorArgs:{toLower:!1},isEdit:!0},{keys:\\\n\\\,type:\\\motion\\\,motion:\\\findNext\\\,motionArgs:{forward:!0,toJumplist:!0}},{keys:\\\N\\\,type:\\\motion\\\,motion:\\\findNext\\\,motionArgs:{forward:!1,toJumplist:!0}},{keys:\\\gn\\\,type:\\\motion\\\,motion:\\\findAndSelectNextInclusive\\\,motionArgs:{forward:!0}},{keys:\\\gN\\\,type:\\\motion\\\,motion:\\\findAndSelectNextInclusive\\\,motionArgs:{forward:!1}},{keys:\\\x\\\,type:\\\operatorMotion\\\,operator:\\\delete\\\,motion:\\\moveByCharacters\\\,motionArgs:{forward:!0},operatorMotionArgs:{visualLine:!1}},{keys:\\\X\\\,type:\\\operatorMotion\\\,operator:\\\delete\\\,motion:\\\moveByCharacters\\\,motionArgs:{forward:!1},operatorMotionArgs:{visualLine:!0}},{keys:\\\D\\\,type:\\\operatorMotion\\\,operator:\\\delete\\\,motion:\\\moveToEol\\\,motionArgs:{inclusive:!0},context:\\\normal\\\},{keys:\\\D\\\,type:\\\operator\\\,operator:\\\delete\\\,operatorArgs:{linewise:!0},context:\\\visual\\\},{keys:\\\Y\\\,type:\\\operatorMotion\\\,operator:\\\yank\\\,motion:\\\expandToLine\\\,motionArgs:{linewise:!0},context:\\\normal\\\},{keys:\\\Y\\\,type:\\\operator\\\,operator:\\\yank\\\,operatorArgs:{linewise:!0},context:\\\visual\\\},{keys:\\\C\\\,type:\\\operatorMotion\\\,operator:\\\change\\\,motion:\\\moveToEol\\\,motionArgs:{inclusive:!0},context:\\\normal\\\},{keys:\\\C\\\,type:\\\operator\\\,operator:\\\change\\\,operatorArgs:{linewise:!0},context:\\\visual\\\},{keys:\\\~\\\,type:\\\operatorMotion\\\,operator:\\\changeCase\\\,motion:\\\moveByCharacters\\\,motionArgs:{forward:!0},operatorArgs:{shouldMoveCursor:!0},context:\\\normal\\\},{keys:\\\~\\\,type:\\\operator\\\,operator:\\\changeCase\\\,context:\\\visual\\\},{keys:\\\\u003CC-u>\\\,type:\\\operatorMotion\\\,operator:\\\delete\\\,motion:\\\moveToStartOfLine\\\,context:\\\insert\\\},{keys:\\\\u003CC-w>\\\,type:\\\operatorMotion\\\,operator:\\\delete\\\,motion:\\\moveByWords\\\,motionArgs:{forward:!1,wordEnd:!1},context:\\\insert\\\},{keys:\\\\u003CC-w>\\\,type:\\\idle\\\,context:\\\normal\\\},{keys:\\\\u003CC-i>\\\,type:\\\action\\\,action:\\\jumpListWalk\\\,actionArgs:{forward:!0}},{keys:\\\\u003CC-o>\\\,type:\\\action\\\,action:\\\jumpListWalk\\\,actionArgs:{forward:!1}},{keys:\\\\u003CC-e>\\\,type:\\\action\\\,action:\\\scroll\\\,actionArgs:{forward:!0,linewise:!0}},{keys:\\\\u003CC-y>\\\,type:\\\action\\\,action:\\\scroll\\\,actionArgs:{forward:!1,linewise:!0}},{keys:\\\a\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\charAfter\\\},context:\\\normal\\\},{keys:\\\A\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\eol\\\},context:\\\normal\\\},{keys:\\\A\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\endOfSelectedArea\\\},context:\\\visual\\\},{keys:\\\i\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\inplace\\\},context:\\\normal\\\},{keys:\\\gi\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\lastEdit\\\},context:\\\normal\\\},{keys:\\\I\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\firstNonBlank\\\},context:\\\normal\\\},{keys:\\\gI\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\bol\\\},context:\\\normal\\\},{keys:\\\I\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{insertAt:\\\startOfSelectedArea\\\},context:\\\visual\\\},{keys:\\\o\\\,type:\\\action\\\,action:\\\newLineAndEnterInsertMode\\\,isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!0},context:\\\normal\\\},{keys:\\\O\\\,type:\\\action\\\,action:\\\newLineAndEnterInsertMode\\\,isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!1},context:\\\normal\\\},{keys:\\\v\\\,type:\\\action\\\,action:\\\toggleVisualMode\\\},{keys:\\\V\\\,type:\\\action\\\,action:\\\toggleVisualMode\\\,actionArgs:{linewise:!0}},{keys:\\\\u003CC-v>\\\,type:\\\action\\\,action:\\\toggleVisualMode\\\,actionArgs:{blockwise:!0}},{keys:\\\\u003CC-q>\\\,type:\\\action\\\,action:\\\toggleVisualMode\\\,actionArgs:{blockwise:!0}},{keys:\\\gv\\\,type:\\\action\\\,action:\\\reselectLastSelection\\\},{keys:\\\J\\\,type:\\\action\\\,action:\\\joinLines\\\,isEdit:!0},{keys:\\\gJ\\\,type:\\\action\\\,action:\\\joinLines\\\,actionArgs:{keepSpaces:!0},isEdit:!0},{keys:\\\p\\\,type:\\\action\\\,action:\\\paste\\\,isEdit:!0,actionArgs:{after:!0,isEdit:!0}},{keys:\\\P\\\,type:\\\action\\\,action:\\\paste\\\,isEdit:!0,actionArgs:{after:!1,isEdit:!0}},{keys:\\\r\u003Ccharacter>\\\,type:\\\action\\\,action:\\\replace\\\,isEdit:!0},{keys:\\\@\u003Ccharacter>\\\,type:\\\action\\\,action:\\\replayMacro\\\},{keys:\\\q\u003Ccharacter>\\\,type:\\\action\\\,action:\\\enterMacroRecordMode\\\},{keys:\\\R\\\,type:\\\action\\\,action:\\\enterInsertMode\\\,isEdit:!0,actionArgs:{replace:!0},context:\\\normal\\\},{keys:\\\R\\\,type:\\\operator\\\,operator:\\\change\\\,operatorArgs:{linewise:!0,fullLine:!0},context:\\\visual\\\,exitVisualBlock:!0},{keys:\\\u\\\,type:\\\action\\\,action:\\\undo\\\,context:\\\normal\\\},{keys:\\\u\\\,type:\\\operator\\\,operator:\\\changeCase\\\,operatorArgs:{toLower:!0},context:\\\visual\\\,isEdit:!0},{keys:\\\U\\\,type:\\\operator\\\,operator:\\\changeCase\\\,operatorArgs:{toLower:!1},context:\\\visual\\\,isEdit:!0},{keys:\\\\u003CC-r>\\\,type:\\\action\\\,action:\\\redo\\\},{keys:\\\m\u003Ccharacter>\\\,type:\\\action\\\,action:\\\setMark\\\},{keys:\\\\u003Ccharacter>,type:\\\action\\\,action:\\\setRegister\\\},{keys:\\\zz\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\center\\\}},{keys:\\\z.\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\center\\\},motion:\\\moveToFirstNonWhiteSpaceCharacter\\\},{keys:\\\zt\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\top\\\}},{keys:\\\z\u003CCR>\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\top\\\},motion:\\\moveToFirstNonWhiteSpaceCharacter\\\},{keys:\\\zb\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\bottom\\\}},{keys:\\\z-\\\,type:\\\action\\\,action:\\\scrollToCursor\\\,actionArgs:{position:\\\bottom\\\},motion:\\\moveToFirstNonWhiteSpaceCharacter\\\},{keys:\\\.\\\,type:\\\action\\\,action:\\\repeatLastEdit\\\},{keys:\\\\u003CC-a>\\\,type:\\\action\\\,action:\\\incrementNumberToken\\\,isEdit:!0,actionArgs:{increase:!0,backtrack:!1}},{keys:\\\\u003CC-x>\\\,type:\\\action\\\,action:\\\incrementNumberToken\\\,isEdit:!0,actionArgs:{increase:!1,backtrack:!1}},{keys:\\\\u003CC-t>\\\,type:\\\action\\\,action:\\\indent\\\,actionArgs:{indentRight:!0},context:\\\insert\\\},{keys:\\\\u003CC-d>\\\,type:\\\action\\\,action:\\\indent\\\,actionArgs:{indentRight:!1},context:\\\insert\\\},{keys:\\\a\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\textObjectManipulation\\\},{keys:\\\i\u003Ccharacter>\\\,type:\\\motion\\\,motion:\\\textObjectManipulation\\\,motionArgs:{textObjectInner:!0}},{keys:\\\/\\\,type:\\\search\\\,searchArgs:{forward:!0,querySrc:\\\prompt\\\,toJumplist:!0}},{keys:\\\?\\\,type:\\\search\\\,searchArgs:{forward:!1,querySrc:\\\prompt\\\,toJumplist:!0}},{keys:\\\*\\\,type:\\\search\\\,searchArgs:{forward:!0,querySrc:\\\wordUnderCursor\\\,wholeWordOnly:!0,toJumplist:!0}},{keys:\\\#\\\,type:\\\search\\\,searchArgs:{forward:!1,querySrc:\\\wordUnderCursor\\\,wholeWordOnly:!0,toJumplist:!0}},{keys:\\\g*\\\,type:\\\search\\\,searchArgs:{forward:!0,querySrc:\\\wordUnderCursor\\\,toJumplist:!0}},{keys:\\\g#\\\,type:\\\search\\\,searchArgs:{forward:!1,querySrc:\\\wordUnderCursor\\\,toJumplist:!0}},{keys:\\\:\\\,type:\\\ex\\\},wp.length,o{name:\\\colorscheme\\\,shortName:\\\colo\\\},{name:\\\map\\\},{name:\\\imap\\\,shortName:\\\im\\\},{name:\\\nmap\\\,shortName:\\\nm\\\},{name:\\\vmap\\\,shortName:\\\vm\\\},{name:\\\unmap\\\},{name:\\\write\\\,shortName:\\\w\\\},{name:\\\undo\\\,shortName:\\\u\\\},{name:\\\redo\\\,shortName:\\\red\\\},{name:\\\set\\\,shortName:\\\se\\\},{name:\\\setlocal\\\,shortName:\\\setl\\\},{name:\\\setglobal\\\,shortName:\\\setg\\\},{name:\\\sort\\\,shortName:\\\sor\\\},{name:\\\substitute\\\,shortName:\\\s\\\,possiblyAsync:!0},{name:\\\nohlsearch\\\,shortName:\\\noh\\\},{name:\\\yank\\\,shortName:\\\y\\\},{name:\\\delmarks\\\,shortName:\\\delm\\\},{name:\\\registers\\\,shortName:\\\reg\\\,excludeFromCommandHistory:!0},{name:\\\vglobal\\\,shortName:\\\v\\\},{name:\\\global\\\,shortName:\\\g\\\};function i(e){e.setOption(\\\disableInput\\\,!0),e.setOption(\\\showCursorWhenSelecting\\\,!1),b.signal(e,\\\vim-mode-change\\\,{mode:\\\normal\\\}),e.on(\\\cursorActivity\\\,Ze),se(e),b.on(e.getInputField(),\\\paste\\\,x(e))}function t(e,t){thisb.keyMap.vim&&(e.options.$customCursornull,b.rmClass(e.getWrapperElement(),\\\cm-fat-cursor\\\)),t&&t.attachn||((te).setOption(\\\disableInput\\\,!1),t.off(\\\cursorActivity\\\,Ze),b.off(t.getInputField(),\\\paste\\\,x(t)),t.state.vimnull,De&&clearTimeout(De))}function n(e,t){thisb.keyMap.vim&&(e.curOp&&(e.curOp.selectionChanged!0),e.options.$customCursorr,b.addClass(e.getWrapperElement(),\\\cm-fat-cursor\\\)),t&&t.attachn||i(e)}function s(e,t){if(t){if(thise)return thise;efunction(e){if(\\\\\\e.charAt(0))return e.charAt(1);var te.split(/-(?!$)/),ett.length-1;{if(1t.length&&1t0.length)return!1;if(2t.length&&\\\Shift\\\t0&&1e.length)return!1}for(var n!1,r0;r\u003Ct.length;r++){var otr;o in c?trco:n!0,o in u&&(truo)}if(!n)return!1;d(e)&&(tt.length-1e.toLowerCase());return\\\\u003C\\\+t.join(\\\-\\\)+\\\>\\\}(e);if(!e)return!1;var nv.findKey(t,e);return\\\function\\\typeof n&&b.signal(t,\\\vim-keypress\\\,e),n}}b.defineOption(\\\vimMode\\\,!1,function(e,t,n){t&&\\\vim\\\!e.getOption(\\\keyMap\\\)?e.setOption(\\\keyMap\\\,\\\vim\\\):!t&&n!b.Init&&/^vim/.test(e.getOption(\\\keyMap\\\))&&e.setOption(\\\keyMap\\\,\\\default\\\)});var c{Shift:\\\S\\\,Ctrl:\\\C\\\,Alt:\\\A\\\,Cmd:\\\D\\\,Mod:\\\A\\\,CapsLock:\\\\\\},u{Enter:\\\CR\\\,Backspace:\\\BS\\\,Delete:\\\Del\\\,Insert:\\\Ins\\\};function x(e){var te.state.vim;return t.onPasteFn||(t.onPasteFnfunction(){t.insertMode||(e.setCursor(y(e.getCursor(),0,1)),fe.enterInsertMode(e,{},t))}),t.onPasteFn}var M/\\\\d/,mb.isWordChar,function(e){return e&&!b.isWordChar(e)&&!/\\\\s/.test(e)},Jfunction(e){return/\\\\S/.test(e)};function q(e,t){for(var n,re;r\u003Ce+t;r++)n.push(String.fromCharCode(r));return n}var Q,zq(65,26),Xq(97,26),Zq(48,10),G.concat(z,X,Z,\\\\u003C\\\,\\\>\\\),Y.concat(z,X,Z,\\\-\\\,\\\,\\\.\\\,\\\:\\\,\\\_\\\,\\\/\\\);try{Qnew RegExp(\\\^\\\\\\\\p{Lu}$\\\,\\\u\\\)}catch(e){Q/^A-Z$/}function ee(e,t){return t>e.firstLine()&&t\u003Ce.lastLine()}function te(e){return/^a-z$/.test(e)}function d(e){return Q.test(e)}function A(e){return/^\\\\s*$/.test(e)}function h(e){return-1!\\\.?!\\\.indexOf(e)}function ne(e,t){for(var n0;n\u003Ct.length;n++)if(tne)return!0;return!1}var a{};function e(e,t,n,r,o){if(void 0t&&!o)throw Error(\\\defaultValue is required unless callback is provided\\\);if(ae{type:nn||\\\string\\\,defaultValue:t,callback:o},r)for(var i0;i\u003Cr.length;i++)ariae;t&&re(e,t)}function re(e,t,n,r){var oae,r(rr||{}).scope;if(!o)return new Error(\\\Unknown option: \\\+e);if(\\\boolean\\\o.type){if(t&&!0!t)return new Error(\\\Invalid argument: \\\+e+\\\\\\+t);!1!t&&(t!0)}o.callback?(\\\local\\\!r&&o.callback(t,void 0),\\\global\\\!r&&n&&o.callback(t,n)):(\\\local\\\!r&&(o.value\\\boolean\\\o.type?!!t:t),\\\global\\\!r&&n&&(n.state.vim.optionse{value:t}))}function T(e,t,n){var r,oae,n(nn||{}).scope;return o?o.callback?(rt&&o.callback(void 0,t),\\\global\\\!n&&void 0!r?r:\\\local\\\!n?o.callback():void 0):((r\\\global\\\!n&&t&&t.state.vim.optionse)||\\\local\\\!n&&o||{}).value:new Error(\\\Unknown option: \\\+e)}e(\\\filetype\\\,void 0,\\\string\\\,\\\ft\\\,function(e,t){var n;if(void 0!t)return void 0e?\\\null\\\(nt.getOption(\\\mode\\\))?\\\\\\:n:void t.setOption(\\\mode\\\,n\\\\\\e?\\\null\\\:e)});function oe(){var a100,s-1,l0,c0,unew Array(a);function r(e,t){l\u003C(s+t)?sl:s\u003Cc&&(sc);var nu(a+s)%a;if(n&&!n.find()){var r,o0\u003Ct?1:-1,ie.getCursor();do{if((nu(a+(s+o))%a)&&(rn.find())&&!K(i,r))break}while(s\u003Cl&&c\u003Cs)}return n}return{cachedCursor:void 0,add:function(r,e,t){var nus%a;function o(e){var t++s%a,nut;n&&n.clear(),utr.setBookmark(e)}n&&(!(nn.find())||K(n,e))||o(e),o(t),(c(ls)-a+1)\u003C0&&(c0)},find:function(e,t){var ns,er(e,t);return sn,e&&e.find()},move:r}}function ie(e){return e?{changes:e.changes,expectCursorActivityForChange:e.expectCursorActivityForChange}:{changes:,expectCursorActivityForChange:!1}}var R,f;function ae(){this.latestRegistervoid 0,this.isPlaying!1,this.isRecording!1,this.replaySearchQueries,this.onRecordingDonevoid 0,this.lastInsertModeChangesie()}function se(e){return e.state.vim||(e.state.vim{inputState:new ce,lastEditInputState:void 0,lastEditActionCommand:void 0,lastHPos:-1,lastHSPos:-1,lastMotion:null,marks:{},insertMode:!1,insertModeRepeat:void 0,visualMode:!1,visualLine:!1,visualBlock:!1,lastSelection:null,lastPastedText:null,sel:{},options:{}}),e.state.vim}function le(){for(var e in R{searchQuery:null,searchIsReversed:!1,lastSubstituteReplacePart:void 0,jumpList:oe(),macroModeState:new ae,lastCharacterSearch:{increment:0,forward:!0,selectedCharacter:\\\\\\},registerController:new ue({}),searchHistoryController:new pe,exCommandHistoryController:new pe},a){eae;e.valuee.defaultValue}}var v{enterVimMode:i,buildKeyMap:function(){},getRegisterController:function(){return R.registerController},resetVimGlobalState_:le,getVimGlobalState_:function(){return R},maybeInitVimState_:se,suppressErrorLogging:!(ae.prototype{exitMacroRecordMode:function(){var eR.macroModeState;e.onRecordingDone&&e.onRecordingDone(),e.onRecordingDonevoid 0,e.isRecording!1},enterMacroRecordMode:function(e,t){var nR.registerController.getRegister(t);n&&(n.clear(),this.latestRegistert,e.openDialog&&(nW(\\\span\\\,{class:\\\cm-vim-message\\\},\\\recording @\\\+t),this.onRecordingDonee.openDialog(n,null,{bottom:!0})),this.isRecording!0)}}),InsertModeKey:Ye,map:function(e,t,n){k.map(e,t,n)},unmap:function(e,t){return k.unmap(e,t)},noremap:function(e,t,n){function r(e){return e?e:\\\normal\\\,\\\insert\\\,\\\visual\\\}for(var or(n),ip.length,ai-w;a\u003Ci&&o.length;a++){var spa;if(!(s.keys!t||n&&s.context&&s.context!n||\\\ex\\\s.type.substr(0,2)||\\\key\\\s.type.substr(0,3))){var l,c{};for(l in s)clsl;c.keyse,n&&!c.context&&(c.contextn),this._mapCommand(c);var ur(s.context),oo.filter(function(e){return-1u.indexOf(e)})}}},mapclear:function(e){var tp.length,nw,rp.slice(0,t-n);if(pp.slice(t-n),e)for(var or.length-1;0\u003Co;o--){var iro;if(e!i.context)if(i.context)this._mapCommand(i);else{var a,s\\\normal\\\,\\\insert\\\,\\\visual\\\;for(a in s)if(sa!e){var l,c{};for(l in i)clil;c.contextsa,this._mapCommand(c)}}}},setOption:re,getOption:T,defineOption:e,defineEx:function(e,t,n){if(t){if(0!e.indexOf(t))throw new Error((Vim.defineEx) \\\+t+\\\ is not a prefix of \\\+e+\\\, command not registered)}else te;Qeen,k.commandMap_t{name:e,shortName:t,type:\\\api\\\}},handleKey:function(e,t,n){ethis.findKey(e,t,n);if(\\\function\\\typeof e)return e()},multiSelectHandleKey:function(o,i,a){var s!1,ev.maybeInitVimState_(o),te.visualBlock||e.wasInVisualBlock,no.isInMultiSelectMode();e.wasInVisualBlock&&!n?e.wasInVisualBlock!1:n&&e.visualBlock&&(e.wasInVisualBlock!0);{var l;\\\\u003CEsc>\\\!i||e.insertMode||e.visualMode||!n||\\\\u003CEsc>\\\!e.status?t||!n||o.inVirtualSelectionMode?sv.handleKey(o,i,a):(lrt(e),o.operation(function(){o.curOp.isVimOp!0,o.forEachSelection(function(){var eN(no.getCursor(\\\head\\\),ro.getCursor(\\\anchor\\\))?0:-1,tN(n,r)?-1:0,ny(n,0,e),ry(r,0,t);o.state.vim.sel.headn,o.state.vim.sel.anchorr,sv.handleKey(o,i,a),o.virtualSelection&&(o.state.vimrt(l))}),o.curOp.cursorActivity&&!s&&(o.curOp.cursorActivity!1),o.state.vime},!0)):E(o)}!s||e.visualMode||e.insert||e.visualModeo.somethingSelected()||Ge(o,e);return s},findKey:function(s,l,n){var r,cse(s);function o(){var e,tR.macroModeState;if(t.isRecording){if(\\\q\\\l)return t.exitMacroRecordMode(),E(s),1;\\\mapping\\\!n&&(el,(tt).isPlaying||(tt.latestRegister,(tR.registerController.getRegister(t))&&t.pushText(e)))}}function u(){if(\\\\u003CEsc>\\\l){if(c.visualMode)D(s);else{if(!c.insertMode)return;C(s)}return E(s),1}}return!1(r(c.insertMode?function(){if(u())return!0;for(var ec.inputState.keyBufferc.inputState.keyBuffer+l,t1l.length,ng.matchCommand(e,p,c.inputState,\\\insert\\\);1\u003Ce.length&&\\\full\\\!n.type;){var ec.inputState.keyBuffere.slice(1),rg.matchCommand(e,p,c.inputState,\\\insert\\\);\\\none\\\!r.type&&(nr)}if(\\\none\\\n.type)return E(s),!1;if(\\\partial\\\n.type)return f&&window.clearTimeout(f),fwindow.setTimeout(function(){c.insertMode&&c.inputState.keyBuffer&&E(s)},T(\\\insertModeEscKeysTimeout\\\)),!t;if(f&&window.clearTimeout(f),t){for(var os.listSelections(),i0;i\u003Co.length;i++){var aoi.head;s.replaceRange(\\\\\\,y(a,0,-(e.length-1)),a,\\\+input\\\)}R.macroModeState.lastInsertModeChanges.changes.pop()}return E(s),n.command}:function(){if(o()||u())return!0;var ec.inputState.keyBufferc.inputState.keyBuffer+l;if(/^1-9\\\\d*$/.test(e))return!0;var t/^(\\\\d*)(.*)$/.exec(e);if(!t)return E(s),!1;var nc.visualMode?\\\visual\\\:\\\normal\\\,rt2||t1;return c.inputState.operatorShortcut&&c.inputState.operatorShortcut.slice(-1)r&&(rc.inputState.operatorShortcut),\\\none\\\(rg.matchCommand(r,p,c.inputState,n)).type?(E(s),!1):\\\partial\\\r.type||(\\\clear\\\r.type?(E(s),!0):(c.inputState.keyBuffer\\\\\\,(t/^(\\\\d*)(.*)$/.exec(e))1&&\\\0\\\!t1&&c.inputState.pushRepeatDigit(t1),r.command))})())?c.insertMode||1!l.length?void 0:function(){return!0}:!0r?function(){return!0}:function(){return s.operation(function(){s.curOp.isVimOp!0;try{if(\\\keyToKey\\\r.type)for(var e,tr.toKeys;t;)e/\u003C\\\\w+-.+?>|\u003C\\\\w+>|./.exec(t),le0,tt.substring(e.index+l.length),v.handleKey(s,l,\\\mapping\\\);else g.processCommand(s,c,r)}catch(e){throw s.state.vimvoid 0,se(s),v.suppressErrorLogging||console.log(e),e}return!0})}},handleEx:function(e,t){k.processCommand(e,t)},defineMotion:function(e,t){Oet},defineAction:function(e,t){feet},defineOperator:function(e,t){deet},mapCommand:function(e,t,n,r,o){var i,a{keys:e,type:t};for(i in atn,at+\\\Args\\\r,o)aioi;ze(a)},_mapCommand:ze,defineRegister:function(e,t){var nR.registerController.registers;if(!e||1!e.length)throw Error(\\\Register name must be 1 character\\\);if(ne)throw Error(\\\Register already defined \\\+e);net,Y.push(e)},exitVisualMode:D,exitInsertMode:C};function ce(){this.prefixRepeat,this.motionRepeat,this.operatornull,this.operatorArgsnull,this.motionnull,this.motionArgsnull,this.keyBuffer,this.registerNamenull}function E(e,t){e.state.vim.inputStatenew ce,b.signal(e,\\\vim-command-done\\\,t)}function l(e,t,n){this.clear(),this.keyBuffere||\\\\\\,this.insertModeChanges,this.searchQueries,this.linewise!!t,this.blockwise!!n}function ue(e){this.registerse,this.unnamedRegistere\\\new l,e\\\.\\\new l,e\\\:\\\new l,e\\\/\\\new l}function pe(){this.historyBuffer,this.iterator0,this.initialPrefixnull}ce.prototype.pushRepeatDigitfunction(e){this.operator?this.motionRepeatthis.motionRepeat.concat(e):this.prefixRepeatthis.prefixRepeat.concat(e)},ce.prototype.getRepeatfunction(){var e0;return(0\u003Cthis.prefixRepeat.length||0\u003Cthis.motionRepeat.length)&&(e1,0\u003Cthis.prefixRepeat.length&&(e*parseInt(this.prefixRepeat.join(\\\\\\),10)),0\u003Cthis.motionRepeat.length&&(e*parseInt(this.motionRepeat.join(\\\\\\),10))),e},l.prototype{setText:function(e,t,n){this.keyBuffere||\\\\\\,this.linewise!!t,this.blockwise!!n},pushText:function(e,t){t&&(this.linewise||this.keyBuffer.push(\\\\\\\n\\\),this.linewise!0),this.keyBuffer.push(e)},pushInsertModeChanges:function(e){this.insertModeChanges.push(ie(e))},pushSearchQuery:function(e){this.searchQueries.push(e)},clear:function(){this.keyBuffer,this.insertModeChanges,this.searchQueries,this.linewise!1},toString:function(){return this.keyBuffer.join(\\\\\\)}},ue.prototype{pushText:function(e,t,n,r,o){if(\\\_\\\!e){r&&\\\\\\\n\\\!n.charAt(n.length-1)&&(n+\\\\\\\n\\\);var ithis.isValidRegister(e)?this.getRegister(e):null;if(i)d(e)?i.pushText(n,r):i.setText(n,r,o),this.unnamedRegister.setText(i.toString(),r);else{switch(t){case\\\yank\\\:this.registers0new l(n,r,o);break;case\\\delete\\\:case\\\change\\\:-1n.indexOf(\\\\\\\n\\\)?this.registers\\\-\\\new l(n,r):(this.shiftNumericRegisters_(),this.registers1new l(n,r))}this.unnamedRegister.setText(n,r,o)}}},getRegister:function(e){return this.isValidRegister(e)?(ee.toLowerCase(),this.registerse||(this.registersenew l),this.registerse):this.unnamedRegister},isValidRegister:function(e){return e&&ne(e,Y)},shiftNumericRegisters_:function(){for(var e9;2\u003Ce;e--)this.registersethis.getRegister(\\\\\\+(e-1))}},pe.prototype{nextMatch:function(e,t){var nthis.historyBuffer,rt?-1:1;nullthis.initialPrefix&&(this.initialPrefixe);for(var othis.iterator+r;t?0\u003Co:o\u003Cn.length;o+r)for(var ino,a0;a\u003Ci.length;a++)if(this.initialPrefixi.substring(0,a))return this.iteratoro,i;return o>n.length?(this.iteratorn.length,this.initialPrefix):o\u003C0?e:void 0},pushInput:function(e){var tthis.historyBuffer.indexOf(e);-1\u003Ct&&this.historyBuffer.splice(t,1),e.length&&this.historyBuffer.push(e)},reset:function(){this.initialPrefixnull,this.iteratorthis.historyBuffer.length}};var g{matchCommand:function(e,t,n,r){var ofunction(e,t,n,r){for(var o,i,a,s0;s\u003Ct.length;s++){var lts;\\\insert\\\n&&\\\insert\\\!l.context||l.context&&l.context!n||r.operator&&\\\action\\\l.type||!(ofunction(e,t){{var n,r,o;return\\\\u003Ccharacter>\\\t.slice(-11)?(nt.length-11,re.slice(0,n),ot.slice(0,n),ro&&e.length>n?\\\full\\\:0o.indexOf(r)&&\\\partial\\\):et?\\\full\\\:0t.indexOf(e)&&\\\partial\\\}}(e,l.keys))||(\\\partial\\\o&&i.push(l),\\\full\\\o&&a.push(l))}return{partial:i.length&&i,full:a.length&&a}}(e,t,r,n);if(!o.full&&!o.partial)return{type:\\\none\\\};if(!o.full&&o.partial)return{type:\\\partial\\\};for(var i0;i\u003Co.full.length;i++)var ao.fulli,ss||a;if(\\\\u003Ccharacter>\\\s.keys.slice(-11)){tfunction(e){var t/^.*(\u003C^>+>)$/.exec(e),nt?t1:e.slice(-1);if(1\u003Cn.length)switch(n){case\\\\u003CCR>\\\:n\\\\\\\n\\\;break;case\\\\u003CSpace>\\\:n\\\ \\\;break;default:n\\\\\\}return n}(e);if(!t||1\u003Ct.length)return{type:\\\clear\\\};n.selectedCharactert}return{type:\\\full\\\,command:s}},processCommand:function(e,t,n){switch(t.inputState.repeatOverriden.repeatOverride,n.type){case\\\motion\\\:this.processMotion(e,t,n);break;case\\\operator\\\:this.processOperator(e,t,n);break;case\\\operatorMotion\\\:this.processOperatorMotion(e,t,n);break;case\\\action\\\:this.processAction(e,t,n);break;case\\\search\\\:this.processSearch(e,t,n);break;case\\\ex\\\:case\\\keyToEx\\\:this.processEx(e,t,n)}},processMotion:function(e,t,n){t.inputState.motionn.motion,t.inputState.motionArgsme(n.motionArgs),this.evalInput(e,t)},processOperator:function(e,t,n){var rt.inputState;if(r.operator){if(r.operatorn.operator)return r.motion\\\expandToLine\\\,r.motionArgs{linewise:!0},void this.evalInput(e,t);E(e)}r.operatorn.operator,r.operatorArgsme(n.operatorArgs),1\u003Cn.keys.length&&(r.operatorShortcutn.keys),n.exitVisualBlock&&(t.visualBlock!1,H(e)),t.visualMode&&this.evalInput(e,t)},processOperatorMotion:function(e,t,n){var rt.visualMode,ome(n.operatorMotionArgs);o&&r&&o.visualLine&&(t.visualLine!0),this.processOperator(e,t,n),r||this.processMotion(e,t,n)},processAction:function(e,t,n){var rt.inputState,or.getRepeat(),i!!o,ame(n.actionArgs)||{};r.selectedCharacter&&(a.selectedCharacterr.selectedCharacter),n.operator&&this.processOperator(e,t,n),n.motion&&this.processMotion(e,t,n),(n.motion||n.operator)&&this.evalInput(e,t),a.repeato||1,a.repeatIsExpliciti,a.registerNamer.registerName,E(e),t.lastMotionnull,n.isEdit&&this.recordLastEdit(t,r,n),fen.action(e,a,t)},processSearch:function(a,r,o){if(a.getSearchCursor){var so.searchArgs.forward,eo.searchArgs.wholeWordOnly,t(F(a).setReversed(!s),s?\\\/\\\:\\\?\\\),iF(a).getQuery(),la.getScrollInfo();switch(o.searchArgs.querySrc){case\\\prompt\\\:var nR.macroModeState;n.isPlaying?p(un.replaySearchQueries.shift(),!0,!1):He(a,{onClose:h,prefix:t,desc:\\\(JavaScript regexp)\\\,onKeyUp:function(e,t,n){var r,o,ib.keyName(e);\\\Up\\\i||\\\Down\\\i?(re.target?e.target.selectionEnd:0,n(tR.searchHistoryController.nextMatch(t,\\\Up\\\i)||\\\\\\),r&&e.target&&(e.target.selectionEnde.target.selectionStartMath.min(r,e.target.value.length))):\\\Left\\\!i&&\\\Right\\\!i&&\\\Ctrl\\\!i&&\\\Alt\\\!i&&\\\Shift\\\!i&&R.searchHistoryController.reset();try{oU(a,t,!0,!0)}catch(e){}o?a.scrollIntoView(Fe(a,!s,o),30):(We(a),a.scrollTo(l.left,l.top))},onKeyDown:function(e,t,n){var rb.keyName(e);\\\Esc\\\r||\\\Ctrl-C\\\r||\\\Ctrl-\\\r||\\\Backspace\\\r&&\\\\\\t?(R.searchHistoryController.pushInput(t),R.searchHistoryController.reset(),U(a,i),We(a),a.scrollTo(l.left,l.top),b.e_stop(e),E(a),n(),a.focus()):\\\Up\\\r||\\\Down\\\r?b.e_stop(e):\\\Ctrl-U\\\r&&(b.e_stop(e),n(\\\\\\))}});break;case\\\wordUnderCursor\\\:var nMe(a,!1,0,!1,!0),c!0;if(n||(nMe(a,!1,0,!1,!1),c!1),!n)return;var ua.getLine(n.start.line).substring(n.start.ch,n.end.ch);uc&&e?\\\\\\\\\\\b\\\+u+\\\\\\\\\\\b\\\:u.replace(/(.?*+$\\\\\\\\\\\\/\\\\\\\\(){}|\\\\-)/g,\\\\\\\\\\\$1\\\),R.jumpList.cachedCursora.getCursor(),a.setCursor(n.start),p(u,!0,!1)}}function p(t,e,n){R.searchHistoryController.pushInput(t),R.searchHistoryController.reset();try{U(a,t,e,n)}catch(e){return $(a,\\\Invalid regex: \\\+t),void E(a)}g.processMotion(a,r,{type:\\\motion\\\,motion:\\\findNext\\\,motionArgs:{forward:!0,toJumplist:o.searchArgs.toJumplist}})}function h(e){a.scrollTo(l.left,l.top),p(e,!0,!0);var tR.macroModeState;t.isRecording&&(ee,(tt).isPlaying||(tt.latestRegister,(tR.registerController.getRegister(t))&&t.pushSearchQuery&&t.pushSearchQuery(e)))}},processEx:function(i,e,t){function n(e){R.exCommandHistoryController.pushInput(e),R.exCommandHistoryController.reset(),k.processCommand(i,e),E(i)}function r(e,t,n){var r,ob.keyName(e);(\\\Esc\\\o||\\\Ctrl-C\\\o||\\\Ctrl-\\\o||\\\Backspace\\\o&&\\\\\\t)&&(R.exCommandHistoryController.pushInput(t),R.exCommandHistoryController.reset(),b.e_stop(e),E(i),n(),i.focus()),\\\Up\\\o||\\\Down\\\o?(b.e_stop(e),re.target?e.target.selectionEnd:0,n(tR.exCommandHistoryController.nextMatch(t,\\\Up\\\o)||\\\\\\),r&&e.target&&(e.target.selectionEnde.target.selectionStartMath.min(r,e.target.value.length))):\\\Ctrl-U\\\o?(b.e_stop(e),n(\\\\\\)):\\\Left\\\!o&&\\\Right\\\!o&&\\\Ctrl\\\!o&&\\\Alt\\\!o&&\\\Shift\\\!o&&R.exCommandHistoryController.reset()}\\\keyToEx\\\t.type?k.processCommand(i,t.exArgs.input):e.visualMode?He(i,{onClose:n,prefix:\\\:\\\,value:\\\\u003C,>\\\,onKeyDown:r,selectValueOnOpen:!1}):He(i,{onClose:n,prefix:\\\:\\\,onKeyDown:r})},evalInput:function(e,t){var n,r,o,i,at.inputState,sa.motion,la.motionArgs||{},ca.operator,ua.operatorArgs||{},pa.registerName,ht.sel,dB(t.visualMode?I(e,h.head):e.getCursor(\\\head\\\)),fB(t.visualMode?I(e,h.anchor):e.getCursor(\\\anchor\\\)),mB(d),fB(f);if(c&&this.recordLastEdit(t,a),0\u003C(nvoid 0!a.repeatOverride?a.repeatOverride:a.getRepeat())&&l.explicitRepeat?l.repeatIsExplicit!0:(l.noRepeat||!l.explicitRepeat&&0n)&&(l.repeatIsExplicit!(n1)),a.selectedCharacter&&(l.selectedCharacteru.selectedCharactera.selectedCharacter),l.repeatn,E(e),s){var g,aOs(e,d,l,t,a);if(t.lastMotionOs,!a)return;l.toJumplist&&((g(sR.jumpList).cachedCursor)?(Se(e,g,a),delete s.cachedCursor):Se(e,d,a)),g(ga instanceof Array?(Ma0,a1):a)||B(d),t.visualMode?(t.visualBlock&&g.ch1/0||(gI(e,g)),MM&&I(e,M),h.anchorMM||f,h.headg,H(e),V(e,t,\\\\u003C\\\,N(M,g)?M:g),V(e,t,\\\>\\\,N(M,g)?g:M)):c||(gI(e,g),e.setCursor(g.line,g.ch))}if(c){if(u.lastSel?(Mf,su.lastSel,aMath.abs(s.head.line-s.anchor.line),dMath.abs(s.head.ch-s.anchor.ch),gs.visualLine?new L(f.line+a,f.ch):s.visualBlock?new L(f.line+a,f.ch+d):s.head.lines.anchor.line?new L(f.line,f.ch+d):new L(f.line+a,f.ch),t.visualMode!0,t.visualLines.visualLine,t.visualBlocks.visualBlock,ht.sel{anchor:M,head:g},H(e)):t.visualMode&&(u.lastSel{anchor:B(h.anchor),head:B(h.head),visualBlock:t.visualBlock,visualLine:t.visualLine}),t.visualMode){if(oP(h.head,h.anchor),ij(h.head,h.anchor),rt.visualLine||u.linewise,Sxe(e,{anchor:o,head:i},xt.visualBlock?\\\block\\\:r?\\\line\\\:\\\char\\\),r){var vS.ranges;if(\\\block\\\x)for(var y0;y\u003Cv.length;y++)vy.head.ch_(e,vy.head.line);else\\\line\\\x&&(v0.headnew L(v0.head.line+1,0))}}else{if(oB(M||f),N(iB(g||m),o)&&(do,oi,id),rl.linewise||u.linewise)ai,o.ch0,a.ch0,a.line++;else if(l.forward){var se,ho,ki;if(hs.getRange(h,k),/\\\\n\\\\s*$/.test(h)){var Ch.split(\\\\\\\n\\\);C.pop();for(var wC.pop();0\u003CC.length&&w&&A(w);wC.pop())k.line--,k.ch0;w?(k.line--,k.ch_(s,k.line)):k.ch0}}var x\\\char\\\,M!l.inclusive||r,Sxe(e,{anchor:o,head:i},x,M)}e.setSelections(S.ranges,S.primary),t.lastMotionnull,u.repeatn,u.registerNamep,u.linewiser;mdec(e,u,S.ranges,f,g);t.visualMode&&D(e,null!m),m&&e.setCursor(m)}},recordLastEdit:function(e,t,n){var rR.macroModeState;r.isPlaying||(e.lastEditInputStatet,e.lastEditActionCommandn,r.lastInsertModeChanges.changes,r.lastInsertModeChanges.expectCursorActivityForChange!1,r.lastInsertModeChanges.visualBlocke.visualBlock?e.sel.head.line-e.sel.anchor.line:0)}},O{moveToTopLine:function(e,t,n){n$e(e).top+n.repeat-1;return new L(n,S(e.getLine(n)))},moveToMiddleLine:function(e){var t$e(e),tMath.floor(.5*(t.top+t.bottom));return new L(t,S(e.getLine(t)))},moveToBottomLine:function(e,t,n){n$e(e).bottom-n.repeat+1;return new L(n,S(e.getLine(n)))},expandToLine:function(e,t,n){return new L(t.line+n.repeat-1,1/0)},findNext:function(e,t,n){var r,oF(e),io.getQuery();if(i)return r!n.forward,ro.isReversed()?!r:r,Ve(e,i),Fe(e,r,i,n.repeat)},findAndSelectNextInclusive:function(e,t,n,r,o){var iF(e),ai.getQuery();if(a){var s!n.forward,afunction(o,i,a,s,l){void 0s&&(s1);return o.operation(function(){var eo.getCursor(),to.getSearchCursor(a,e),nt.find(!i);!l.visualMode&&n&&K(t.from(),e)&&t.find(!i);for(var r0;r\u003Cs;r++)if(!(nt.find(i))&&!(to.getSearchCursor(a,i?new L(o.lastLine()):new L(o.firstLine(),0))).find(i))return;returnt.from(),t.to()})}(e,si.isReversed()?!s:s,a,n.repeat,r);if(a){if(o.operator)return a;oa0,anew L(a1.line,a1.ch-1);if(r.visualMode){(r.visualLine||r.visualBlock)&&(r.visualLine!1,r.visualBlock!1,b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\,subMode:\\\\\\}));var lr.sel.anchor;if(l)return i.isReversed()?n.forward?l,o:l,a:n.forward?l,a:l,o}else r.visualMode!0,r.visualLine!1,r.visualBlock!1,b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\,subMode:\\\\\\});return s?a,o:o,a}}},goToMark:function(e,t,n,r){rUe(e,r,n.selectedCharacter);return r?n.linewise?{line:r.line,ch:S(e.getLine(r.line))}:r:null},moveToOtherHighlightedEnd:function(e,t,n,r){return r.visualBlock&&n.sameLine?(nr.sel,I(e,new L(n.anchor.line,n.head.ch)),I(e,new L(n.head.line,n.anchor.ch))):r.sel.head,r.sel.anchor},jumpToMark:function(e,t,n,r){for(var ot,i0;i\u003Cn.repeat;i++){var a,s,l,c,uo;for(a in r.marks)te(a)&&(sr.marksa.find(),(n.forward?N(s,u):N(u,s))||n.linewise&&s.lineu.line||(lK(u,o),cn.forward?ve(u,s,o):ve(o,s,u),(l||c)&&(os)))}return on.linewise?new L(o.line,S(e.getLine(o.line))):o},moveByCharacters:function(e,t,n){var rn.repeat,nn.forward?t.ch+r:t.ch-r;return new L(t.line,n)},moveByLines:function(e,t,n,r){var ot,io.ch;switch(r.lastMotion){case this.moveByLines:case this.moveByDisplayLines:case this.moveByScroll:case this.moveToColumn:case this.moveToEol:ir.lastHPos;break;default:r.lastHPosi}var an.repeat+(n.repeatOffset||0),sn.forward?o.line+a:o.line-a,le.firstLine(),ce.lastLine(),ae.findPosV(o,n.forward?a:-a,\\\line\\\,r.lastHSPos);return(n.forward?a.line>s:a.line\u003Cs)&&(sa.line,ia.ch),s\u003Cl&&o.linel?this.moveToStartOfLine(e,t,n,r):c\u003Cs&&o.linec?Te(e,t,n,r,!0):(n.toFirstChar&&(iS(e.getLine(s)),r.lastHPosi),r.lastHSPose.charCoords(new L(s,i),\\\div\\\).left,new L(s,i))},moveByDisplayLines:function(e,t,n,r){var ot;switch(r.lastMotion){case this.moveByDisplayLines:case this.moveByScroll:case this.moveByLines:case this.moveToColumn:case this.moveToEol:break;default:r.lastHSPose.charCoords(o,\\\div\\\).left}tn.repeat,te.findPosV(o,n.forward?t:-t,\\\line\\\,r.lastHSPos);return t.hitSide&&(tn.forward?(n{top:e.charCoords(t,\\\div\\\).top+8,left:r.lastHSPos},e.coordsChar(n,\\\div\\\)):((ne.charCoords(new L(e.firstLine(),0),\\\div\\\)).leftr.lastHSPos,e.coordsChar(n,\\\div\\\))),r.lastHPost.ch,t},moveByPage:function(e,t,n){var rn.repeat;return e.findPosV(t,n.forward?r:-r,\\\page\\\)},moveByParagraph:function(e,t,n){var rn.forward?1:-1;return Ee(e,t,n.repeat,r)},moveBySentence:function(e,t,n){var rn.forward?1:-1,oe,et,in.repeat,ar;function u(e,t){if(t.pos+t.dir\u003C0||t.pos+t.dir>t.line.length){if(t.ln+t.dir,!ee(e,t.ln))return t.linenull,t.lnnull,void(t.posnull);t.linee.getLine(t.ln),t.pos0\u003Ct.dir?0:t.line.length-1}else t.pos+t.dir}for(var s{ln:e.line,pos:e.ch};0\u003Ci;)s(a\u003C0?function(e,t,n,r){var o{line:e.getLine(t),ln:t,pos:n,dir:r},i{ln:o.ln,pos:null},a\\\\\\o.line;for(u(e,o);null!o.line;){if(\\\\\\o.line&&!a)return null!i.pos?i:{ln:o.ln,pos:o.pos};if(h(o.lineo.pos)&&null!i.pos&&(o.ln!i.ln||o.pos+1!i.pos))return i;\\\\\\o.line||A(o.lineo.pos)||(a!1,i{ln:o.ln,pos:o.pos}),u(e,o)}for(var se.getLine(i.ln),li.pos0;l\u003Cs.length;++l)if(!A(sl)){i.posl;break}return i}:function(e,t,n,r){var o\\\\\\(le.getLine(t)),i{line:l,ln:t,pos:n,dir:r},a{ln:i.ln,pos:i.pos},s\\\\\\i.line;for(u(e,i);null!i.line;){if(a.lni.ln,a.posi.pos,\\\\\\i.line&&!s)return{ln:i.ln,pos:i.pos};if(o&&\\\\\\!i.line&&!A(i.linei.pos))return{ln:i.ln,pos:i.pos};!h(i.linei.pos)||o||i.pos!i.line.length-1&&!A(i.linei.pos+1)||(o!0),u(e,i)}var le.getLine(a.ln);a.pos0;for(var cl.length-1;0\u003Cc;--c)if(!A(lc)){a.posc;break}return a})(o,s.ln,s.pos,a),i--;return new L(s.ln,s.pos)},moveByScroll:function(e,t,n,r){var oe.getScrollInfo(),i(in.repeat)||o.clientHeight/(2*e.defaultTextHeight()),ae.charCoords(t,\\\local\\\);if(n.repeati,!(iO.moveByDisplayLines(e,t,n,r)))return null;te.charCoords(i,\\\local\\\);return e.scrollTo(null,o.top+t.top-a.top),i},moveByWords:function(e,t,n){var re,ot,in.repeat,a!!n.forward,e!!n.wordEnd,s!!n.bigWord,tB(o),l;(a&&!e||!a&&e)&&i++;for(var c!(a&&e),u0;u\u003Ci;u++){var pfunction(e,t,n,r,o){var it.line,at.ch,se.getLine(i),ln?1:-1,cr?J:m;if(o&&\\\\\\s){if(i+l,se.getLine(i),!ee(e,i))return null;an?0:s.length}for(;;){if(o&&\\\\\\s)return{from:0,to:0,line:i};for(var u0\u003Cl?s.length:-1,pu,hu;a!u;){for(var d!1,f0;f\u003Cc.length&&!d;++f)if(cf(s.charAt(a))){for(pa;a!u&&cf(s.charAt(a));)a+l;if(dp!(ha),p!t.ch||i!t.line||h!p+l)return{from:Math.min(p,h+1),to:Math.max(p,h),line:i}}d||(a+l)}if(!ee(e,i+l))return null;se.getLine(i),a0\u003Cl?0:s.length}}(r,o,a,s,c);if(!p){var h_(r,r.lastLine());l.push(a?{line:r.lastLine(),from:h,to:h}:{line:0,from:0,to:0});break}l.push(p),onew L(p.line,a?p.to-1:p.from)}var nl.length!i,dl0,fl.pop();return a&&!e?(n||d.fromt.ch&&d.linet.line||(fl.pop()),new L(f.line,f.from)):a&&e?new L(f.line,f.to-1):!a&&e?(n||d.tot.ch&&d.linet.line||(fl.pop()),new L(f.line,f.to)):new L(f.line,f.from)},moveTillCharacter:function(e,t,n){var eRe(e,n.repeat,n.forward,n.selectedCharacter),rn.forward?-1:1;return Ae(r,n),e?(e.ch+r,e):null},moveToCharacter:function(e,t,n){var rn.repeat;return Ae(0,n),Re(e,r,n.forward,n.selectedCharacter)||t},moveToSymbol:function(e,t,n){return function(e,t,n,r){var oB(e.getCursor()),in?1:-1,an?e.lineCount():-1,so.ch,lo.line,ce.getLine(l),u{lineText:c,nextCh:c.charAt(s),lastCh:null,index:s,symb:r,reverseSymb:(n?{\\\)\\\:\\\(\\\,\\\}\\\:\\\{\\\}:{\\\(\\\:\\\)\\\,\\\{\\\:\\\}\\\})r,forward:n,depth:0,curMoveThrough:!1},cber;if(!c)return o;var sLec.init,pLec.isComplete;s&&s(u);for(;l!a&&t;){var h;u.index+i,u.nextChu.lineText.charAt(u.index),u.nextCh||(l+i,u.lineTexte.getLine(l)||\\\\\\,0\u003Ci?u.index0:(hu.lineText.length,u.index0\u003Ch?h-1:0),u.nextChu.lineText.charAt(u.index)),p(u)&&(o.linel,o.chu.index,t--)}if(u.nextCh||u.curMoveThrough)return new L(l,u.index);return o}(e,n.repeat,n.forward,n.selectedCharacter)||t},moveToColumn:function(e,t,n,r){var nn.repeat;return r.lastHPosn-1,r.lastHSPose.charCoords(t,\\\div\\\).left,rn,n(te).getCursor().line,I(t,new L(n,r-1))},moveToEol:function(e,t,n,r){return Te(e,t,n,r,!1)},moveToFirstNonWhiteSpaceCharacter:function(e,t){return new L(t.line,S(e.getLine(t.line)))},moveToMatchedSymbol:function(e,t){for(var n,rt.line,ot.ch,ie.getLine(r);o\u003Ci.length;o++)if((ai.charAt(o))&&-1!\\\(){}\\\.indexOf(a)){var ae.getTokenTypeAt(new L(r,o+1));if(\\\string\\\!a&&\\\comment\\\!a)break}return o\u003Ci.length?(n\\\\u003C\\\o||\\\>\\\o?/(){}\\\\\u003C>/:/(){}\\\\/,e.findMatchingBracket(new L(r,o),{bracketRegex:n}).to):t},moveToStartOfLine:function(e,t){return new L(t.line,0)},moveToLineOrEdgeOfDocument:function(e,t,n){var rn.forward?e.lastLine():e.firstLine();return n.repeatIsExplicit&&(rn.repeat-e.getOption(\\\firstLineNumber\\\)),new L(r,S(e.getLine(r)))},moveToStartOfDisplayLine:function(e){return e.execCommand(\\\goLineLeft\\\),e.getCursor()},moveToEndOfDisplayLine:function(e){e.execCommand(\\\goLineRight\\\);ee.getCursor();return\\\before\\\e.sticky&&e.ch--,e},textObjectManipulation:function(e,t,n,r){var on.selectedCharacter,i(\\\b\\\o?o\\\(\\\:\\\B\\\o&&(o\\\{\\\),!n.textObjectInner);if({\\\(\\\:\\\)\\\,\\\)\\\:\\\(\\\,\\\{\\\:\\\}\\\,\\\}\\\:\\\{\\\,\\\\\\:\\\\\\,\\\\\\:\\\\\\,\\\\u003C\\\:\\\>\\\,\\\>\\\:\\\\u003C\\\}o)afunction(e,t,n,r){var o,i{\\\(\\\:/()/,\\\)\\\:/()/,\\\\\\:/\\\\/,\\\\\\:/\\\\/,\\\{\\\:/{}/,\\\}\\\:/{}/,\\\\u003C\\\:/\u003C>/,\\\>\\\:/\u003C>/}n,n{\\\(\\\:\\\(\\\,\\\)\\\:\\\(\\\,\\\\\\:\\\\\\,\\\\\\:\\\\\\,\\\{\\\:\\\{\\\,\\\}\\\:\\\{\\\,\\\\u003C\\\:\\\\u003C\\\,\\\>\\\:\\\\u003C\\\}n,ne.getLine(t.line).charAt(t.ch)n?1:0;if(oe.scanForBracket(new L(t.line,t.ch+n),-1,void 0,{bracketRegex:i}),ee.scanForBracket(new L(t.line,t.ch+n),1,void 0,{bracketRegex:i}),!o||!e)return{start:t,end:t};oo.pos,ee.pos,(o.linee.line&&o.ch>e.ch||o.line>e.line)&&(no,oe,en);r?e.ch+1:o.ch+1;return{start:o,end:e}}(e,t,o,i);else if({\\\\\\:!0,\\\:!0,\\\`\\\:!0}o)afunction(e,t,n,r){var o,i,a,s,tB(t),le.getLine(t.line).split(\\\\\\),el.indexOf(n);t.ch\u003Ce?t.che:e\u003Ct.ch&<.chn&&(it.ch,--t.ch);if(lt.ch!n||i)for(at.ch;-1\u003Ca&&!o;a--)lan&&(oa+1);else ot.ch+1;if(o&&!i)for(ao,sl.length;a\u003Cs&&!i;a++)lan&&(ia);if(!o||!i)return{start:t,end:t};r&&(--o,++i);return{start:new L(t.line,o),end:new L(t.line,i)}}(e,t,o,i);else if(\\\W\\\o)aMe(e,i,0,!0);else if(\\\w\\\o)aMe(e,i,0,!1);else if(\\\p\\\o){var aEe(e,t,n.repeat,0,i);n.linewise!0,r.visualMode?r.visualLine||(r.visualLine!0):((rr.inputState.operatorArgs)&&(r.linewise!0),a.end.line--)}else if(\\\t\\\o)afunction(e,t,n){var rt;if(!b.findMatchingTag||!b.findEnclosingTag)return{start:r,end:r};eb.findMatchingTag(e,t)||b.findEnclosingTag(e,t);if(!e||!e.open||!e.close)return{start:r,end:r};if(n)return{start:e.open.from,end:e.close.to};return{start:e.open.to,end:e.close.from}}(e,t,i);else{if(\\\s\\\!o)return null;var re.getLine(t.line),o(0\u003Ct.ch&&h(rt.ch)&&--t.ch,Oe(e,t,n.repeat,1,i)),rOe(e,t,n.repeat,-1,i);a{start:rA(e.getLine(r.line)r.ch)&&A(e.getLine(o.line)o.ch-1)?{line:r.line,ch:r.ch+1}:r,end:o}}return e.state.vim.visualMode?(te,na.start,ia.end,o(rt.state.vim.sel).head,rr.anchor,N(i,n)&&(ei,in,ne),N(o,r)?(oP(n,o),rj(r,i)):(rP(n,r),-1(oy(oj(o,i),0,-1)).ch&&o.line!t.firstLine()&&(onew L(o.line-1,_(t,o.line-1)))),r,o):a.start,a.end},repeatLastCharacterSearch:function(e,t,n){var rR.lastCharacterSearch,on.repeat,in.forwardr.forward,a(r.increment?1:0)*(i?-1:1),o(e.moveH(-a,\\\char\\\),Re(e,o,n.inclusivei,r.selectedCharacter));return o?(o.ch+a,o):(e.moveH(a,\\\char\\\),t)}};function he(e,t){for(var n,r0;r\u003Ct;r++)n.push(e);return n}var de{change:function(e,t,n){var r,o,ie.state.vim,an0.anchor,sn0.head,si.visualMode?t.fullLine?(s.chNumber.MAX_VALUE,s.line--,e.setSelection(a,s),re.getSelection(),e.replaceSelection(\\\\\\),a):(re.getSelection(),ohe(\\\\\\,n.length),e.replaceSelections(o),P(n0.head,n0.anchor)):(re.getRange(a,s),\\\moveByWords\\\!(oi.lastEditInputState||{}).motion||A(r)||(i/\\\\s+$/.exec(r))&&o.motionArgs&&o.motionArgs.forward&&(sy(s,0,-i0.length),rr.slice(0,-i0.length)),onew L(a.line-1,Number.MAX_VALUE),ie.firstLine()e.lastLine(),s.line>e.lastLine()&&t.linewise&&!i?e.replaceRange(\\\\\\,o,s):e.replaceRange(\\\\\\,a,s),t.linewise&&(i||(e.setCursor(o),b.commands.newlineAndIndent(e)),a.chNumber.MAX_VALUE),a);R.registerController.pushText(t.registerName,\\\change\\\,r,t.linewise,1\u003Cn.length),fe.enterInsertMode(e,{head:s},e.state.vim)},delete:function(e,t,n){var r,o,i,ae.state.vim;return a.visualBlock?(re.getSelection(),ohe(\\\\\\,n.length),e.replaceSelections(o),oP(n0.head,n0.anchor)):(in0.anchor,nn0.head,t.linewise&&n.line!e.firstLine()&&i.linee.lastLine()&&i.linen.line-1&&(i.linee.firstLine()?i.ch0:inew L(i.line-1,_(e,i.line-1))),re.getRange(i,n),e.replaceRange(\\\\\\,i,n),oi,t.linewise&&(oO.moveToFirstNonWhiteSpaceCharacter(e,i))),R.registerController.pushText(t.registerName,\\\delete\\\,r,t.linewise,a.visualBlock),I(e,o)},indent:function(e,t,n){var re.state.vim;if(e.indentMore)for(var or.visualMode?t.repeat:1,i0;i\u003Co;i++)t.indentRight?e.indentMore():e.indentLess();else{var an0.anchor.line,s(r.visualBlock?nn.length-1.anchor:n0.head).line,or.visualMode?t.repeat:1;t.linewise&&s--;for(var la;l\u003Cs;l++)for(i0;i\u003Co;i++)e.indentLine(l,t.indentRight)}return O.moveToFirstNonWhiteSpaceCharacter(e,n0.anchor)},indentAuto:function(e,t,n){return e.execCommand(\\\indentAuto\\\),O.moveToFirstNonWhiteSpaceCharacter(e,n0.anchor)},changeCase:function(e,t,n,r,o){for(var ie.getSelections(),a,st.toLower,l0;l\u003Ci.length;l++){var cil,u\\\\\\;if(!0s)uc.toLowerCase();else if(!1s)uc.toUpperCase();else for(var p0;p\u003Cc.length;p++){var hc.charAt(p);u+d(h)?h.toLowerCase():h.toUpperCase()}a.push(u)}return e.replaceSelections(a),t.shouldMoveCursor?o:!e.state.vim.visualMode&&t.linewise&&n0.anchor.line+1n0.head.line?O.moveToFirstNonWhiteSpaceCharacter(e,r):t.linewise?r:P(n0.anchor,n0.head)},yank:function(e,t,n,r){var oe.state.vim,ee.getSelection(),no.visualMode?P(o.sel.anchor,o.sel.head,n0.head,n0.anchor):r;return R.registerController.pushText(t.registerName,\\\yank\\\,e,t.linewise,o.visualBlock),n}};var fe{jumpListWalk:function(e,t,n){n.visualMode||(nt.repeat,tt.forward,n(n(tR.jumpList.move(e,t?n:-n))?t.find():void 0)||e.getCursor(),e.setCursor(n))},scroll:function(e,t,n){var r,o,i;n.visualMode||(nt.repeat||1,re.defaultTextHeight(),oe.getScrollInfo().top,nr*n,ot.forward?o+n:o-n,nB(e.getCursor()),ie.charCoords(n,\\\local\\\),t.forward?o>i.top?(n.line+(o-i.top)/r,n.lineMath.ceil(n.line),e.setCursor(n),ie.charCoords(n,\\\local\\\),e.scrollTo(null,i.top)):e.scrollTo(null,o):(to+e.getScrollInfo().clientHeight)\u003Ci.bottom?(n.line-(i.bottom-t)/r,n.lineMath.floor(n.line),e.setCursor(n),ie.charCoords(n,\\\local\\\),e.scrollTo(null,i.bottom-e.getScrollInfo().clientHeight)):e.scrollTo(null,o))},scrollToCursor:function(e,t){var ne.getCursor().line,re.charCoords(new L(n,0),\\\local\\\),oe.getScrollInfo().clientHeight,ir.top;switch(t.position){case\\\center\\\:ir.bottom-o/2;break;case\\\bottom\\\:var anew L(n,e.getLine(n).length-1),ii-o+(e.charCoords(a,\\\local\\\).bottom-i)}e.scrollTo(null,i)},replayMacro:function(e,t,n){var rt.selectedCharacter,ot.repeat,iR.macroModeState;for(\\\@\\\r?ri.latestRegister:i.latestRegisterr;o--;){mfmgdhpuclsavoid 0;var ae,sn,li,cr,uR.registerController.getRegister(c);if(\\\:\\\c)u.keyBuffer0&&k.processCommand(a,u.keyBuffer0),l.isPlaying!1;else{var pu.keyBuffer,h0;l.isPlaying!0,l.replaySearchQueriesu.searchQueries.slice(0);for(var d0;d\u003Cp.length;d++)for(var f,m,gpd;g;)m/\u003C\\\\w+-.+?>|\u003C\\\\w+>|./.exec(g),fm0,gg.substring(m.index+f.length),v.handleKey(a,f,\\\macro\\\),s.insertMode&&(mu.insertModeChangesh++.changes,R.macroModeState.lastInsertModeChanges.changesm,nt(a,m,1),C(a));l.isPlaying!1}}},enterMacroRecordMode:function(e,t){var nR.macroModeState,tt.selectedCharacter;R.registerController.isValidRegister(t)&&n.enterMacroRecordMode(e,t)},toggleOverwrite:function(e){e.state.overwrite?(e.toggleOverwrite(!1),e.setOption(\\\keyMap\\\,\\\vim-insert\\\),b.signal(e,\\\vim-mode-change\\\,{mode:\\\insert\\\})):(e.toggleOverwrite(!0),e.setOption(\\\keyMap\\\,\\\vim-replace\\\),b.signal(e,\\\vim-mode-change\\\,{mode:\\\replace\\\}))},enterInsertMode:function(e,t,n){if(!e.getOption(\\\readOnly\\\)){n.insertMode!0,n.insertModeRepeatt&&t.repeat||1;var rt?t.insertAt:null,on.sel,it.head||e.getCursor(\\\head\\\),ae.listSelections().length;if(\\\eol\\\r)inew L(i.line,_(e,i.line));else if(\\\bol\\\r)inew L(i.line,0);else if(\\\charAfter\\\r)iy(i,0,1);else if(\\\firstNonBlank\\\r)iO.moveToFirstNonWhiteSpaceCharacter(e,i);else if(\\\startOfSelectedArea\\\r){if(!n.visualMode)return;n.visualBlock?(inew L(Math.min(o.head.line,o.anchor.line),Math.min(o.head.ch,o.anchor.ch)),aMath.abs(o.head.line-o.anchor.line)+1):io.head.line\u003Co.anchor.line?o.head:new L(o.anchor.line,0)}else if(\\\endOfSelectedArea\\\r){if(!n.visualMode)return;n.visualBlock?(inew L(Math.min(o.head.line,o.anchor.line),Math.max(o.head.ch,o.anchor.ch)+1),aMath.abs(o.head.line-o.anchor.line)+1):io.head.line>o.anchor.line?y(o.head,0,1):new L(o.anchor.line,0)}else if(\\\inplace\\\r){if(n.visualMode)return}else\\\lastEdit\\\r&&(iJe(e)||i);e.setOption(\\\disableInput\\\,!1),t&&t.replace?(e.toggleOverwrite(!0),e.setOption(\\\keyMap\\\,\\\vim-replace\\\),b.signal(e,\\\vim-mode-change\\\,{mode:\\\replace\\\})):(e.toggleOverwrite(!1),e.setOption(\\\keyMap\\\,\\\vim-insert\\\),b.signal(e,\\\vim-mode-change\\\,{mode:\\\insert\\\})),R.macroModeState.isPlaying||(e.on(\\\change\\\,Xe),b.on(e.getInputField(),\\\keydown\\\,et)),n.visualMode&&D(e),Ce(e,i,a)}},toggleVisualMode:function(e,t,n){var rt.repeat,oe.getCursor();n.visualMode?n.visualLine^t.linewise||n.visualBlock^t.blockwise?(n.visualLine!!t.linewise,n.visualBlock!!t.blockwise,b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\,subMode:n.visualLine?\\\linewise\\\:n.visualBlock?\\\blockwise\\\:\\\\\\}),H(e)):D(e):(n.visualMode!0,n.visualLine!!t.linewise,n.visualBlock!!t.blockwise,tI(e,new L(o.line,o.ch+r-1)),n.sel{anchor:o,head:t},b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\,subMode:n.visualLine?\\\linewise\\\:n.visualBlock?\\\blockwise\\\:\\\\\\}),H(e),V(e,n,\\\\u003C\\\,P(o,t)),V(e,n,\\\>\\\,j(o,t)))},reselectLastSelection:function(e,t,n){var r,o,in.lastSelection;n.visualMode&&we(e,n),i&&(ri.anchorMark.find(),oi.headMark.find(),r&&o&&(n.sel{anchor:r,head:o},n.visualMode!0,n.visualLinei.visualLine,n.visualBlocki.visualBlock,H(e),V(e,n,\\\\u003C\\\,P(r,o)),V(e,n,\\\>\\\,j(r,o)),b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\,subMode:n.visualLine?\\\linewise\\\:n.visualBlock?\\\blockwise\\\:\\\\\\})))},joinLines:function(e,t,n){n.visualMode?(oe.getCursor(\\\anchor\\\),N(re.getCursor(\\\head\\\),o)&&(sr,ro,os),r.ch_(e,r.line)-1):(cMath.max(t.repeat,2),oe.getCursor(),rI(e,new L(o.line+c-1,1/0)));for(var r,o,i0,ao.line;a\u003Cr.line;a++){var i_(e,o.line),snew L(o.line+1,_(e,o.line+1)),le.getRange(o,s),lt.keepSpaces?l.replace(/\\\\n\\\\r?/g,\\\\\\):l.replace(/\\\\n\\\\s*/g,\\\ \\\);e.replaceRange(l,o,s)}var cnew L(o.line,i);n.visualMode&&D(e,!1),e.setCursor(c)},newLineAndEnterInsertMode:function(e,t,n){n.insertMode!0;var rB(e.getCursor());r.line!e.firstLine()||t.after?(r.linet.after?r.line:r.line-1,r.ch_(e,r.line),e.setCursor(r),(b.commands.newlineAndIndentContinueComment||b.commands.newlineAndIndent)(e)):(e.replaceRange(\\\\\\\n\\\,new L(e.firstLine(),0)),e.setCursor(e.firstLine(),0)),this.enterInsertMode(e,{repeat:t.repeat},n)},paste:function(n,e,t){var rB(n.getCursor()),oR.registerController.getRegister(e.registerName);if(co.toString()){e.matchIndent&&(in.getOption(\\\tabSize\\\),afunction(e){var te.split(\\\\\\\t\\\).length-1,ee.split(\\\ \\\).length-1;return t*i+e},gn.getLine(n.getCursor().line),sa(g.match(/^\\\\s*/)0),gc.replace(/\\\\n$/,\\\\\\),vc!g,la(c.match(/^\\\\s*/)0),cg.replace(/^\\\\s*/gm,function(e){var t,es+(a(e)-l);return e\u003C0?\\\\\\:n.getOption(\\\indentWithTabs\\\)?(tMath.floor(e/i),Array(t+1).join(\\\\\\\t\\\)):Array(e+1).join(\\\ \\\)}),c+v?\\\\\\\n\\\:\\\\\\),1\u003Ce.repeat&&(cArray(e.repeat+1).join(c));var i,a,s,l,c,u,p,h,d,f,m,go.linewise,vo.blockwise;if(v){cc.split(\\\\\\\n\\\),g&&c.pop();for(var y0;y\u003Cc.length;y++)cy\\\\\\cy?\\\ \\\:cy;r.ch+e.after?1:0,r.chMath.min(_(n,r.line),r.ch)}else g?t.visualMode?ct.visualLine?c.slice(0,-1):\\\\\\\n\\\+c.slice(0,c.length-1)+\\\\\\\n\\\:e.after?(c\\\\\\\n\\\+c.slice(0,c.length-1),r.ch_(n,r.line)):r.ch0:r.ch+e.after?1:0;if(t.visualMode){t.lastPastedTextc,fn,mt.lastSelection;var k,o(t.visualMode?function(){var ef.listSelections(),te0,eee.length-1;returnN(t.anchor,t.head)?t.anchor:t.head,N(e.anchor,e.head)?e.head:e.anchor}:function(){var ef.getCursor(),tf.getCursor(),nm.visualBlock;if(n){for(var rn.width,nn.height,tnew L(e.line+n,e.ch+r),o,ie.line;i\u003Ct.line;i++){var anew L(i,e.ch),snew L(i,t.ch);o.push({anchor:a,head:s})}f.setSelections(o)}else{var nm.anchorMark.find(),rm.headMark.find(),lr.line-n.line,rr.ch-n.ch;t{line:t.line+l,ch:l?t.ch:r+t.ch},m.visualLine&&(enew L(e.line,0),tnew L(t.line,_(f,t.line))),f.setSelection(e,t)}returne,t})(),Co0,oo1,wn.getSelection(),xn.listSelections(),xnew Array(x.length).join(\\\1\\\).split(\\\1\\\);t.lastSelection&&(kt.lastSelection.headMark.find()),R.registerController.unnamedRegister.setText(w),wv?(n.replaceSelections(x),onew L(C.line+c.length-1,C.ch),n.setCursor(C),ke(n,o),n.replaceSelections(c),C):t.visualBlock?(n.replaceSelections(x),n.setCursor(C),n.replaceRange(c,C,C),C):(n.replaceRange(c,C,o),n.posFromIndex(n.indexFromPos(C)+c.length-1)),k&&(t.lastSelection.headMarkn.setBookmark(k)),g&&(w.ch0)}else if(v){n.setCursor(r);for(y0;y\u003Cc.length;y++){var Mr.line+y;M>n.lastLine()&&n.replaceRange(\\\\\\\n\\\,new L(M,0)),_(n,M)\u003Cr.ch&&(pn,MM,hr.ch,dvoid 0,d_(p,M),hnew Array(h-d+1).join(\\\ \\\),p.setCursor(new L(M,d)),p.replaceRange(h,p.getCursor()))}n.setCursor(r),ke(n,new L(r.line+c.length-1,r.ch)),n.replaceSelections(c),wr}else n.replaceRange(c,r),wg&&e.after?new L(r.line+1,S(n.getLine(r.line+1))):g&&!e.after?new L(r.line,S(n.getLine(r.line))):!g&&e.after?(un.indexFromPos(r),n.posFromIndex(u+c.length-1)):(un.indexFromPos(r),n.posFromIndex(u+c.length));t.visualMode&&D(n,!1),n.setCursor(w)}},undo:function(e,t){e.operation(function(){ge(e,b.commands.undo,t.repeat)(),e.setCursor(e.getCursor(\\\anchor\\\))})},redo:function(e,t){ge(e,b.commands.redo,t.repeat)()},setRegister:function(e,t,n){n.inputState.registerNamet.selectedCharacter},setMark:function(e,t,n){V(e,n,t.selectedCharacter,e.getCursor())},replace:function(e,t,n){var r,ot.selectedCharacter,ie.getCursor(),ae.listSelections(),sn.visualMode?(ie.getCursor(\\\start\\\),e.getCursor(\\\end\\\)):(se.getLine(i.line),(ti.ch+t.repeat)>s.length&&(ts.length),new L(i.line,t));\\\\\\\n\\\o?(n.visualMode||e.replaceRange(\\\\\\,i,s),(b.commands.newlineAndIndentContinueComment||b.commands.newlineAndIndent)(e)):(t(te.getRange(i,s)).replace(/^\\\\n/g,o),n.visualBlock?(rnew Array(e.getOption(\\\tabSize\\\)+1).join(\\\ \\\),t(te.getSelection()).replace(/\\\\t/g,r).replace(/^\\\\n/g,o).split(\\\\\\\n\\\),e.replaceSelections(t)):e.replaceRange(t,i,s),n.visualMode?(iN(a0.anchor,a0.head)?a0.anchor:a0.head,e.setCursor(i),D(e,!1)):e.setCursor(y(s,0,-1)))},incrementNumberToken:function(e,t){for(var n,r,o,i,a,s,l,ce.getCursor(),ue.getLine(c.line),p/(-?)(?:(0x)(\\\\da-f+)|(0b|0|)(\\\\d+))/gi;null!(np.exec(u))&&(o(rn.index)+n0.length,!(c.ch\u003Co)););!t.backtrack&&o\u003Cc.ch||n&&(in2||n4,ln3||n5,at.increase?1:-1,s{\\\0b\\\:2,0:8,\\\\\\:10,\\\0x\\\:16}i.toLowerCase(),a(parseInt(n1+l,s)+a*t.repeat).toString(s),ti?new Array(l.length-a.length+1+n1.length).join(\\\0\\\):\\\\\\,a\\\-\\\a.charAt(0)?\\\-\\\+i+t+a.substr(1):i+t+a,snew L(c.line,r),lnew L(c.line,o),e.replaceRange(a,s,l),e.setCursor(new L(c.line,r+a.length-1)))},repeatLastEdit:function(e,t,n){var r;n.lastEditInputState&&((rt.repeat)&&t.repeatIsExplicit?n.lastEditInputState.repeatOverrider:rn.lastEditInputState.repeatOverride||r,tt(e,n,r,!1))},indent:function(e,t){e.indentLine(e.getCursor().line,t.indentRight)},exitInsertMode:C};function I(e,t){var ne.state.vim,nn.insertMode||n.visualMode,rMath.min(Math.max(e.firstLine(),t.line),e.lastLine()),e_(e,r)-1+!!n,nMath.min(Math.max(0,t.ch),e);return new L(r,n)}function me(e){var t,n{};for(t in e)e.hasOwnProperty(t)&&(ntet);return n}function y(e,t,n){return\\\object\\\typeof t&&(nt.ch,tt.line),new L(e.line+t,e.ch+n)}function ge(t,n,r){return function(){for(var e0;e\u003Cr;e++)n(t)}}function B(e){return new L(e.line,e.ch)}function K(e,t){return e.cht.ch&&e.linet.line}function N(e,t){return e.line\u003Ct.line||e.linet.line&&e.ch\u003Ct.ch}function P(e,t){return N(e,t2\u003Carguments.length?P.apply(void 0,Array.prototype.slice.call(arguments,1)):t)?e:t}function j(e,t){return N(e,t2\u003Carguments.length?j.apply(void 0,Array.prototype.slice.call(arguments,1)):t)?t:e}function ve(e,t,n){eN(e,t),tN(t,n);return e&&t}function _(e,t){return e.getLine(t).length}function ye(e){return e.trim?e.trim():e.replace(/^\\\\s+|\\\\s+$/g,\\\\\\)}function ke(e,t){var n,re.listSelections(),oB(e.clipPos(t)),i!K(t,o),afunction(e,t,n){for(var r0;r\u003Ce.length;r++){var o\\\head\\\!n&&K(er.anchor,t),i\\\anchor\\\!n&&K(er.head,t);if(o||i)return r}return-1}(r,e.getCursor(\\\head\\\)),sK(ra.head,ra.anchor),lr.length-1,aa\u003Cl-a?l:0,lra.anchor,cMath.min(l.line,o.line),uMath.max(l.line,o.line),pl.ch,ho.ch,ora.head.ch-p,rh-p;0\u003Co&&r\u003C0?(p++,i||h--):o\u003C0&&0\u003Cr?(p--,s||h++):o\u003C0&&-1r&&(p--,h++);for(var dc;d\u003Cu;d++){var f{anchor:new L(d,p),head:new L(d,h)};n.push(f)}e.setSelections(n),t.chh,l.chp}function Ce(e,t,n){for(var r,o0;o\u003Cn;o++){var iy(t,o,0);r.push({anchor:i,head:i})}e.setSelections(r,0)}function we(e,t){var nt.sel.anchor,rt.sel.head;t.lastPastedText&&(re.posFromIndex(e.indexFromPos(n)+t.lastPastedText.length),t.lastPastedTextnull),t.lastSelection{anchorMark:e.setBookmark(n),headMark:e.setBookmark(r),anchor:B(n),head:B(r),visualMode:t.visualMode,visualLine:t.visualLine,visualBlock:t.visualBlock}}function H(e,t,n){var re.state.vim,n(tt||r.sel,n||r.visualLine?\\\line\\\:r.visualBlock?\\\block\\\:\\\char\\\),rxe(e,t,n);e.setSelections(r.ranges,r.primary)}function xe(e,t,n,r){var oB(t.head),iB(t.anchor);if(\\\char\\\n)return rr||N(t.head,t.anchor)?0:1,lN(t.head,t.anchor)?1:0,oy(t.head,0,r),{ranges:{anchor:iy(t.anchor,0,l),head:o},primary:0};if(\\\line\\\n)return N(t.head,t.anchor)?(o.ch0,i.ch_(e,i.line)):(i.ch0,re.lastLine(),o.line>r&&(o.liner),o.ch_(e,o.line)),{ranges:{anchor:i,head:o},primary:0};if(\\\block\\\n){for(var aMath.min(i.line,o.line),si.ch,lMath.max(i.line,o.line),co.ch,u(s\u003Cc?c+1:s+1,l-a+1),to.linea?0:u-1,p,h0;h\u003Cu;h++)p.push({anchor:new L(a+h,s),head:new L(a+h,c)});return{ranges:p,primary:t}}}function D(e,t){var ne.state.vim;!1!t&&e.setCursor(I(e,n.sel.head)),we(e,n),n.visualMode!1,n.visualLine!1,n.visualBlock!1,n.insertMode||b.signal(e,\\\vim-mode-change\\\,{mode:\\\normal\\\})}function S(e){if(!e)return 0;var te.search(/\\\\S/);return-1t?e.length:t}function Me(e,t,n,r,o){p(ie).getCursor(\\\head\\\);for(var ip1i.getSelection().length?P(p,i.getCursor(\\\anchor\\\)):p,ae.getLine(i.line),si.ch,l(o?m:J)0;!l(a.charAt(s));)if(++s>a.length)return null;r?lJ0:(lm0)(a.charAt(s))||(lm1);for(var cs,us;l(a.charAt(c))&&c\u003Ca.length;)c++;for(;l(a.charAt(u))&&0\u003Cu;)u--;if(u++,t){for(var pc;/\\\\s/.test(a.charAt(c))&&c\u003Ca.length;)c++;if(pc){for(eu;/\\\\s/.test(a.charAt(u-1))&&0\u003Cu;)u--;uu||e}}return{start:new L(i.line,u),end:new L(i.line,c)}}function Se(e,t,n){K(t,n)||R.jumpList.add(e,t,n)}function Ae(e,t){R.lastCharacterSearch.incremente,R.lastCharacterSearch.forwardt.forward,R.lastCharacterSearch.selectedCharactert.selectedCharacter}var be{\\\(\\\:\\\bracket\\\,\\\)\\\:\\\bracket\\\,\\\{\\\:\\\bracket\\\,\\\}\\\:\\\bracket\\\,\\\\\\:\\\section\\\,\\\\\\:\\\section\\\,\\\*\\\:\\\comment\\\,\\\/\\\:\\\comment\\\,m:\\\method\\\,M:\\\method\\\,\\\#\\\:\\\preprocess\\\},Le{bracket:{isComplete:function(e){if(e.nextChe.symb){if(e.depth++,1\u003Ce.depth)return!0}else e.nextChe.reverseSymb&&e.depth--;return!1}},section:{init:function(e){e.curMoveThrough!0,e.symb(e.forward?\\\\\\:\\\\\\)e.symb?\\\{\\\:\\\}\\\},isComplete:function(e){return 0e.index&&e.nextChe.symb}},comment:{isComplete:function(e){var t\\\*\\\e.lastCh&&\\\/\\\e.nextCh;return e.lastChe.nextCh,t}},method:{init:function(e){e.symb\\\m\\\e.symb?\\\{\\\:\\\}\\\,e.reverseSymb\\\{\\\e.symb?\\\}\\\:\\\{\\\},isComplete:function(e){return e.nextChe.symb}},preprocess:{init:function(e){e.index0},isComplete:function(e){if(\\\#\\\e.nextCh){var te.lineText.match(/^#(\\\\w+)/)1;if(\\\endif\\\t){if(e.forward&&0e.depth)return!0;e.depth++}else if(\\\if\\\t){if(!e.forward&&0e.depth)return!0;e.depth--}if(\\\else\\\t&&0e.depth)return!0}return!1}}};function Te(e,t,n,r,o){tnew L(t.line+n.repeat-1,1/0),ne.clipPos(t);return n.ch--,o||(r.lastHPos1/0,r.lastHSPose.charCoords(n,\\\div\\\).left),t}function Re(e,t,n,r){for(var o,ie.getCursor(),ai.ch,s0;s\u003Ct;s++){if(-1(ofunction(e,t,n,r,o){var i;r?-1(it.indexOf(n,e+1))||o||--i:-1(it.lastIndexOf(n,e-1))||o||(i+1);return i}(a,e.getLine(i.line),r,n,!0)))return null;ao}return new L(e.getCursor().line,o)}function V(e,t,n,r){ne(n,G)&&(t.marksn&&t.marksn.clear(),t.marksne.setBookmark(r))}function Ee(t,e,n,r,o){var ie.line,at.firstLine(),st.lastLine(),li;function c(e){return!t.getLine(e)}function u(e,t,n){return n?c(e)!c(e+t):!c(e)&&c(e+t)}if(r){for(;a\u003Cl&&l\u003Cs&&0\u003Cn;)u(l,r)&&n--,l+r;return new L(l,0)}for(var et.state.vim,p(e.visualLine&&u(i,1,!0)&&(!u((ee.sel.anchor).line,-1,!0)||o&&e.linei||(i+1)),c(i)),li;l\u003Cs&&n;l++)!u(l,1,!0)||o&&c(l)p||n--;for(enew L(l,0),s\u003Cl&&!p?p!0:o!1,li;a\u003Cl&&(o&&c(l)!p&&l!i||!u(l,-1,!0));l--);return{start:new L(l,0),end:e}}function Oe(e,t,n,r,a){function s(e){e.pos+e.dir\u003C0||e.pos+e.dir>e.line.length?e.linenull:e.pos+e.dir}for(var o{ln:t.line,pos:t.ch};0\u003Cn;)o(r\u003C0?function(e,t,n,r){var o{line:ee.getLine(t),ln:t,pos:n,dir:r};if(\\\\\\o.line)return{ln:o.ln,pos:o.pos};var io.pos;for(s(o);null!o.line;){if(A(o.lineo.pos)||h(o.lineo.pos)){if(h(o.lineo.pos))return a&&A(o.lineo.pos+1)?{ln:o.ln,pos:o.pos+1}:{ln:o.ln,pos:i}}else io.pos;s(o)}return o.linee,a&&A(o.lineo.pos)?{ln:o.ln,pos:o.pos}:{ln:o.ln,pos:i}}:function(e,t,n,r){var o{line:e.getLine(t),ln:t,pos:n,dir:r};if(\\\\\\o.line)return{ln:o.ln,pos:o.pos};var io.pos;for(s(o);null!o.line;){if(h(o.lineio.pos)){if(a){for(s(o);null!o.line&&A(o.lineo.pos);)io.pos,s(o);return{ln:o.ln,pos:i+1}}return{ln:o.ln,pos:o.pos+1}}s(o)}return{ln:o.ln,pos:i+1}})(e,o.ln,o.pos,r),n--;return new L(o.ln,o.pos)}function Ie(){}function F(e){ee.state.vim;return e.searchState_||(e.searchState_new Ie)}function Be(e,t){var nKe(e,t)||;if(!n.length)return;var r;if(0n0){for(var o0;o\u003Cn.length;o++)\\\number\\\typeof no&&r.push(e.substring(no+1,no+1));return r}}function Ke(e,t){tt||\\\/\\\;for(var n!1,r,o0;o\u003Ce.length;o++){var ie.charAt(o);n||i!t||r.push(o),n!n&&\\\\\\\\\\\\\\i}return r}e(\\\pcre\\\,!0,\\\boolean\\\),Ie.prototype{getQuery:function(){return R.query},setQuery:function(e){R.querye},getOverlay:function(){return this.searchOverlay},setOverlay:function(e){this.searchOverlaye},isReversed:function(){return R.isReversed},setReversed:function(e){R.isReversede},getScrollbarAnnotate:function(){return this.annotate},setScrollbarAnnotate:function(e){this.annotatee}};var Ne{\\\\\\\\\\\n\\\:\\\\\\\n\\\,\\\\\\\\\\\r\\\:\\\\\\\r\\\,\\\\\\\\\\\t\\\:\\\\\\\t\\\};function Pe(e){for(var t!1,n,r-1;r\u003Ce.length;r++){var oe.charAt(r)||\\\\\\,ie.charAt(r+1)||\\\\\\;Neo+i?(n.push(Neo+i),r++):t?(n.push(o),t!1):\\\\\\\\\\\\\\o?(t!0,M.test(i)||\\\$\\\i?n.push(\\\$\\\):\\\/\\\!i&&\\\\\\\\\\\\\\!i&&n.push(\\\\\\\\\\\\\\)):(\\\$\\\o&&n.push(\\\$\\\),n.push(o),\\\/\\\i&&n.push(\\\\\\\\\\\\\\))}return n.join(\\\\\\)}var je{\\\\\\\\\\\/\\\:\\\/\\\,\\\\\\\\\\\\\\\\\\\\\\:\\\\\\\\\\\\\\,\\\\\\\\\\\n\\\:\\\\\\\n\\\,\\\\\\\\\\\r\\\:\\\\\\\r\\\,\\\\\\\\\\\t\\\:\\\\\\\t\\\,\\\\\\\\\\\&\\\:\\\&\\\};function _e(e,t,n){if(R.registerController.getRegister(\\\/\\\).setText(e),e instanceof RegExp)return e;var r,o,iKe(e,\\\/\\\);return i.length?(re.substring(0,i0),o-1!e.substring(i0).indexOf(\\\i\\\)):re,r?(T(\\\pcre\\\)||(rfunction(e){for(var t!1,n,r-1;r\u003Ce.length;r++){var oe.charAt(r)||\\\\\\,ie.charAt(r+1)||\\\\\\,ai&&-1!\\\|(){\\\.indexOf(i);t?(\\\\\\\\\\\\\\o&&a||n.push(o),t!1):\\\\\\\\\\\\\\o?(t!0,(ai&&-1!\\\}\\\.indexOf(i)?!0:a)&&\\\\\\\\\\\\\\!i||n.push(o)):(n.push(o),a&&\\\\\\\\\\\\\\!i&&n.push(\\\\\\\\\\\\\\))}return n.join(\\\\\\)}(r)),n&&(t/^^A-Z*$/.test(r)),new RegExp(r,t||o?\\\im\\\:\\\m\\\)):null}function W(e){\\\string\\\typeof e&&(edocument.createElement(e));for(var t,n1;n\u003Carguments.length;n++)if(targumentsn)if((t\\\object\\\!typeof t?document.createTextNode(t):t).nodeType)e.appendChild(t);else for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(\\\$\\\r0?e.styler.slice(1)tr:e.setAttribute(r,tr));return e}function $(e,t){tW(\\\div\\\,{$color:\\\red\\\,$whiteSpace:\\\pre\\\,class:\\\cm-vim-message\\\},t);e.openNotification?e.openNotification(t,{bottom:!0,duration:5e3}):alert(t.innerText)}function He(e,t){rt.prefix,nt.desc;var n,rW(document.createDocumentFragment(),W(\\\span\\\,{$fontFamily:\\\monospace\\\,$whiteSpace:\\\pre\\\},r,W(\\\input\\\,{type:\\\text\\\,autocorrect:\\\off\\\,autocapitalize:\\\off\\\,spellcheck:\\\false\\\})),n&&W(\\\span\\\,{$color:\\\#888\\\},n));e.openDialog?e.openDialog(r,t.onClose,{onKeyDown:t.onKeyDown,onKeyUp:t.onKeyUp,bottom:!0,selectValueOnOpen:!1,value:t.value}):(n\\\\\\,\\\string\\\!typeof t.prefix&&t.prefix&&(n+t.prefix.textContent),t.desc&&(n+\\\ \\\+t.desc),t.onClose(prompt(n,\\\\\\)))}function U(e,t,n,r){if(t){var oF(e),t_e(t,!!n,!!r);if(t)return Ve(e,t),function(e,t){if(e instanceof RegExp&&t instanceof RegExp){for(var n\\\global\\\,\\\multiline\\\,\\\ignoreCase\\\,\\\source\\\,r0;r\u003Cn.length;r++){var onr;if(eo!to)return}return 1}}(t,o.getQuery())||o.setQuery(t),t}}var De0;function Ve(o,i){clearTimeout(De),DesetTimeout(function(){var e,t,n,r;!o.state.vim||(t(eF(o)).getOverlay())&&it.query||(t&&o.removeOverlay(t),\\\^\\\(ni).source.charAt(0)&&(r!0),t{token:function(e){if(r&&!e.sol())e.skipToEnd();else{var te.match(n,!1);if(t)return 0t0.length?(e.next(),\\\searching\\\):e.sol()||(e.backUp(1),n.exec(e.next()+t0))?(e.match(n),\\\searching\\\):(e.next(),null);for(;!e.eol()&&(e.next(),!e.match(n,!1)););}},query:n},o.addOverlay(t),o.showMatchesOnScrollbar&&(e.getScrollbarAnnotate()&&e.getScrollbarAnnotate().clear(),e.setScrollbarAnnotate(o.showMatchesOnScrollbar(i))),e.setOverlay(t))},50)}function Fe(i,a,s,l){return void 0l&&(l1),i.operation(function(){for(var ei.getCursor(),ti.getSearchCursor(s,e),n0;n\u003Cl;n++){var r,ot.find(a);if(0n&&o&&K(t.from(),e)&&(ra?t.from():t.to(),(ot.find(a))&&!o0&&K(t.from(),r)&&i.getLine(r.line).lengthr.ch&&(ot.find(a))),!o&&!(ti.getSearchCursor(s,a?new L(i.lastLine()):new L(i.firstLine(),0))).find(a))return}return t.from()})}function We(e){var tF(e);e.removeOverlay(F(e).getOverlay()),t.setOverlay(null),t.getScrollbarAnnotate()&&(t.getScrollbarAnnotate().clear(),t.setScrollbarAnnotate(null))}function $e(e){var te.getScrollInfo(),ne.coordsChar({left:0,top:6+t.top},\\\local\\\),tt.clientHeight-10+t.top,ee.coordsChar({left:0,top:t},\\\local\\\);return{top:n.line,bottom:e.line}}function Ue(e,t,n){if(\\\\\\n||\\\`\\\n)return R.jumpList.find(e,-1)||new L(0,0);if(\\\.\\\n)return Je(e);et.marksn;return e&&e.find()}function Je(e){for(var te.doc.history.done,nt.length;n--;)if(tn.changes)return B(tn.changes0.to)}function qe(){this.buildCommandMap_()}qe.prototype{processCommand:function(e,t,n){var rthis;e.operation(function(){e.curOp.isVimOp!0,r._processCommand(e,t,n)})},_processCommand:function(t,e,n){var r,o,it.state.vim,aR.registerController.getRegister(\\\:\\\),sa.toString(),i(i.visualMode&&D(t),new b.StringStream(e)),n(a.setText(e),n||{});n.inpute;try{this.parseInput_(t,i,n)}catch(e){throw $(t,e.toString()),e}if(n.commandName){if(rthis.matchCommand_(n.commandName)){if(or.name,r.excludeFromCommandHistory&&a.setText(s),this.parseCommandArgs_(i,n,r),\\\exToKey\\\r.type){for(var l0;l\u003Cr.toKeys.length;l++)v.handleKey(t,r.toKeysl,\\\mapping\\\);return}if(\\\exToEx\\\r.type)return void this.processCommand(t,r.toInput)}}else void 0!n.line&&(o\\\move\\\);if(o)try{Qeo(t,n),r&&r.possiblyAsync||!n.callback||n.callback()}catch(e){throw $(t,e.toString()),e}else $(t,Not an editor command \\\:+e+\\\)},parseInput_:function(e,t,n){t.eatWhile(\\\:\\\),t.eat(\\\%\\\)?(n.linee.firstLine(),n.lineEnde.lastLine()):(n.linethis.parseLineSpec_(e,t),void 0!n.line&&t.eat(\\\,\\\)&&(n.lineEndthis.parseLineSpec_(e,t)));et.match(/^(\\\\w+|!!|@@|!#&*\u003C>@~)/);return n.commandNamee?e1:t.match(/.*/)0,n},parseLineSpec_:function(e,t){var nt.match(/^(\\\\d+)/);if(n)return parseInt(n1,10)-1;switch(t.next()){case\\\.\\\:return this.parseLineSpecOffset_(t,e.getCursor().line);case\\\$\\\:return this.parseLineSpecOffset_(t,e.lastLine());case\\\\\\:var rt.next(),rUe(e,e.state.vim,r);if(r)return this.parseLineSpecOffset_(t,r.line);throw new Error(\\\Mark not set\\\);case\\\-\\\:case\\\+\\\:return t.backUp(1),this.parseLineSpecOffset_(t,e.getCursor().line);default:return void t.backUp(1)}},parseLineSpecOffset_:function(e,t){var n,ee.match(/^(+-)?(\\\\d+)/);return e&&(nparseInt(e2,10),\\\-\\\e1?t-n:t+n),t},parseCommandArgs_:function(e,t,n){e.eol()||(t.argStringe.match(/.*/)0,en.argDelimiter||/\\\\s+/,(nye(t.argString).split(e)).length&&n0&&(t.argsn))},matchCommand_:function(e){for(var te.length;0\u003Ct;t--){var ne.substring(0,t);if(this.commandMap_n){nthis.commandMap_n;if(0n.name.indexOf(e))return n}}return null},buildCommandMap_:function(){this.commandMap_{};for(var e0;e\u003Co.length;e++){var toe,nt.shortName||t.name;this.commandMap_nt}},map:function(e,t,n){if(\\\:\\\!e&&\\\:\\\e.charAt(0)){if(n)throw Error(\\\Mode not supported for ex mappings\\\);var re.substring(1);\\\:\\\!t&&\\\:\\\t.charAt(0)?this.commandMap_r{name:r,type:\\\exToEx\\\,toInput:t.substring(1),user:!0}:this.commandMap_r{name:r,type:\\\exToKey\\\,toKeys:t,user:!0}}else r\\\:\\\!t&&\\\:\\\t.charAt(0)?{keys:e,type:\\\keyToEx\\\,exArgs:{input:t.substring(1)}}:{keys:e,type:\\\keyToKey\\\,toKeys:t},n&&(r.contextn),p.unshift(r)},unmap:function(e,t){if(\\\:\\\!e&&\\\:\\\e.charAt(0)){if(t)throw Error(\\\Mode not supported for ex mappings\\\);var ne.substring(1);if(this.commandMap_n&&this.commandMap_n.user)return delete this.commandMap_n,!0}else for(var re,o0;o\u003Cp.length;o++)if(rpo.keys&&po.contextt)return p.splice(o,1),!0}};var Qe{colorscheme:function(e,t){!t.args||t.args.length\u003C1?$(e,e.getOption(\\\theme\\\)):e.setOption(\\\theme\\\,t.args0)},map:function(e,t,n){var rt.args;!r||r.length\u003C2?e&&$(e,\\\Invalid mapping: \\\+t.input):k.map(r0,r1,n)},imap:function(e,t){this.map(e,t,\\\insert\\\)},nmap:function(e,t){this.map(e,t,\\\normal\\\)},vmap:function(e,t){this.map(e,t,\\\visual\\\)},unmap:function(e,t,n){var rt.args;(!r||r.length\u003C1||!k.unmap(r0,n))&&e&&$(e,\\\No such mapping: \\\+t.input)},move:function(e,t){g.processCommand(e,e.state.vim,{type:\\\motion\\\,motion:\\\moveToLineOrEdgeOfDocument\\\,motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0},repeatOverride:t.line+1})},set:function(e,t){var nt.args,rt.setCfg||{};if(!n||n.length\u003C1)e&&$(e,\\\Invalid mapping: \\\+t.input);else{var nn0.split(\\\\\\),on0,nn1,i!1;if(\\\?\\\o.charAt(o.length-1)){if(n)throw Error(\\\Trailing characters: \\\+t.argString);oo.substring(0,o.length-1),i!0}void 0n&&\\\no\\\o.substring(0,2)&&(oo.substring(2),n!1);var tao&&\\\boolean\\\ao.type;t&&nulln&&(n!0),!t&&void 0n||i?(tT(o,e,r))instanceof Error?$(e,t.message):$(e,!0t||!1t?\\\ \\\+(t?\\\\\\:\\\no\\\)+o:\\\ \\\+o+\\\\\\+t):(ire(o,n,e,r))instanceof Error&&$(e,i.message)}},setlocal:function(e,t){t.setCfg{scope:\\\local\\\},this.set(e,t)},setglobal:function(e,t){t.setCfg{scope:\\\global\\\},this.set(e,t)},registers:function(e,t){var nt.args,rR.registerController.registers,o\\\----------Registers----------\\\\n\\\\n\\\;if(n)for(var nn.join(\\\\\\),i0;i\u003Cn.length;i++)an.charAt(i),R.registerController.isValidRegister(a)&&(o+\\\+a+\\\ \\\+(ra||new l).toString()+\\\\\\\n\\\);else for(var a in r){var sra.toString();s.length&&(o+\\\+a+\\\ \\\+s+\\\\\\\n\\\)}$(e,o)},sort:function(e,o){var i,a,s,l,c;var tfunction(){if(o.argString){var enew b.StringStream(o.argString);if(e.eat(\\\!\\\)&&(i!0),!e.eol()){if(!e.eatSpace())return\\\Invalid arguments\\\;var te.match(/(dinuox+)?\\\\s*(\\\\/.+\\\\/)?\\\\s*/);if(!t&&!e.eol())return\\\Invalid arguments\\\;if(t1){a-1!t1.indexOf(\\\i\\\),s-1!t1.indexOf(\\\u\\\);var e-1!t1.indexOf(\\\d\\\)||-1!t1.indexOf(\\\n\\\)&&1,n-1!t1.indexOf(\\\x\\\)&&1,r-1!t1.indexOf(\\\o\\\)&&1;if(1\u003Ce+n+r)return\\\Invalid arguments\\\;l(e?\\\decimal\\\:n&&\\\hex\\\)||r&&\\\octal\\\}t2&&(cnew RegExp(t2.substr(1,t2.length-2),a?\\\i\\\:\\\\\\))}}}();if(t)$(e,t+\\\: \\\+o.argString);else{var to.line||e.firstLine(),no.lineEnd||o.line||e.lastLine();if(t!n){var tnew L(t,0),nnew L(n,_(e,n)),re.getRange(t,n).split(\\\\\\\n\\\),uc||(\\\decimal\\\l?/(-?)(\\\\d+)/:\\\hex\\\l?/(-?)(?:0x)?(0-9a-f+)/i:\\\octal\\\l?/(0-7+)/:null),p\\\decimal\\\l?10:\\\hex\\\l?16:\\\octal\\\l?8:null,h,d;if(l||c)for(var f0;f\u003Cr.length;f++){var mc?rf.match(c):null;m&&\\\\\\!m0?h.push(m):(!c&&u.exec(rf)?h:d).push(rf)}else dr;if(h.sort(c?function(e,t){var n;return i&&(ne,et,tn),a&&(e0e0.toLowerCase(),t0t0.toLowerCase()),e0\u003Ct0?-1:1}:y),c)for(f0;f\u003Ch.length;f++)hfhf.input;else l||d.sort(y);if(ri?h.concat(d):d.concat(h),s)for(var g,vr,r,f0;f\u003Cv.length;f++)vf!g&&r.push(vf),gvf;e.replaceRange(r.join(\\\\\\\n\\\),t,n)}}function y(e,t){i&&(ne,et,tn),a&&(ee.toLowerCase(),tt.toLowerCase());var nl&&u.exec(e),rl&&u.exec(t);return n?parseInt((n1+n2).toLowerCase(),p)-parseInt((r1+r2).toLowerCase(),p):e\u003Ct?-1:1}},vglobal:function(e,t){this.global(e,t)},global:function(t,e){var ne.argString;if(n){var r,o\\\v\\\e.commandName0,ivoid 0!e.line?e.line:t.firstLine(),ae.lineEnd||e.line||t.lastLine(),eBe(n,\\\/\\\);if(e.length&&(ne0,re.slice(1,e.length).join(\\\/\\\)),n)try{U(t,n,!0,!0)}catch(e){return void $(t,\\\Invalid regex: \\\+n)}for(var s,l,cF(t).getQuery(),u,pi;p\u003Ca;p++){var ht.getLineHandle(p);c.test(h.text)!o&&u.push(r?h:h.text)}r?(s0,(lfunction(){var e;s\u003Cu.length&&(eus++,null(et.getLineNumber(e))?l():(ee+1+r,k.processCommand(t,e,{callback:l})))})()):$(t,u.join(\\\\\\\n\\\))}else $(t,\\\Regular Expression missing from global\\\)},substitute:function(t,e){if(!t.getSearchCursor)throw new Error(\\\Search feature not available. Requires searchcursor.js or any other getSearchCursor implementation.\\\);var n,r,o,i,a,s,l,c,u,p,h,d,f,m,g,ve.argString,yv?Be(v,v0):,k\\\\\\,C!1,w!1;if(y.length)iy0,T(\\\pcre\\\)&&\\\\\\!i&&(inew RegExp(i).source),void 0!(ky1)&&(kT(\\\pcre\\\)?function(e){for(var tnew b.StringStream(e),n;!t.eol();){for(;t.peek()&&\\\\\\\\\\\\\\!t.peek();)n.push(t.next());var r,o!1;for(r in je)if(t.match(r,!0)){o!0,n.push(jer);break}o||n.push(t.next())}return n.join(\\\\\\)}(k.replace(/(^\\\\\\\\)&/g,\\\$1$$&\\\)):Pe(k),R.lastSubstituteReplacePartk),ny2?y2.split(\\\ \\\):;else if(v&&v.length)return void $(t,\\\Substitutions should be of the form :s/pattern/replace/\\\);if(n&&(yn0,rparseInt(n1),y&&(-1!y.indexOf(\\\c\\\)&&(C!0),-1!y.indexOf(\\\g\\\)&&(w!0),iT(\\\pcre\\\)?i+\\\/\\\+y:i.replace(/\\\\//g,\\\\\\\\\\\/\\\)+\\\/\\\+y)),i)try{U(t,i,!0,!0)}catch(e){return void $(t,\\\Invalid regex: \\\+i)}function x(){o.operation(function(){for(;!g;)M(),S();A()})}function M(){var eo.getRange(c.from(),c.to()).replace(u,p),tc.to().line;c.replace(e),fc.to().line,l+f-t,mf\u003Ct}function S(){for(;ntvoid 0,td&&B(c.to()),(n(nc.findNext())&&!n0&&t&&K(c.from(),t)?c.findNext():n)&&(tc.from(),ns,el,\\\number\\\!typeof t&&(tt.line),n instanceof Array?ne(t,n):\\\number\\\typeof e?n\u003Ct&&t\u003Ce:tn);)if(a||c.from().line!f||m)return o.scrollIntoView(c.from(),30),o.setSelection(c.from(),c.to()),dc.from(),void(g!1);var e,t,n;g!0}function A(e){e&&e(),o.focus(),d&&(o.setCursor(d),(eo.state.vim).exMode!1,e.lastHPose.lastHSPosd.ch),h&&h()}void 0(kk||R.lastSubstituteReplacePart)?$(t,\\\No previous substitute regular expression\\\):(vF(t).getQuery(),n(void 0!e.line?e:t.getCursor()).line,ye.lineEnd||n,nt.firstLine()&&yt.lastLine()&&(y1/0),r&&(y(ny)+r-1),iI(t,new L(n,0)),rt.getSearchCursor(v,i),ot,iC,aw,sn,ly,cr,uv,pk,he.callback,o.state.vim.exMode!0,g!1,S(),g?$(o,\\\No matches for \\\+u.source):i?He(o,{prefix:W(\\\span\\\,\\\replace with \\\,W(\\\strong\\\,p),\\\ (y/n/a/q/l)\\\),onKeyDown:function(e,t,n){switch(b.e_stop(e),b.keyName(e)){case\\\Y\\\:M(),S();break;case\\\N\\\:S();break;case\\\A\\\:var rh;hvoid 0,o.operation(x),hr;break;case\\\L\\\:M();case\\\Q\\\:case\\\Esc\\\:case\\\Ctrl-C\\\:case\\\Ctrl-\\\:A(n)}g&&A(n);return!0}}):(x(),h&&h()))},redo:b.commands.redo,undo:b.commands.undo,write:function(e){b.commands.save?b.commands.save(e):e.save&&e.save()},nohlsearch:function(e){We(e)},yank:function(e){var tB(e.getCursor()).line,ee.getLine(t);R.registerController.pushText(\\\0\\\,\\\yank\\\,e,!0,!0)},delmarks:function(e,t){if(t.argString&&ye(t.argString))for(var ne.state.vim,rnew b.StringStream(ye(t.argString));!r.eol();){r.eatSpace();var or.pos;if(!r.match(/a-zA-Z/,!1))return void $(e,\\\Invalid argument: \\\+t.argString.substring(o));var ir.next();if(r.match(\\\-\\\,!0)){if(!r.match(/a-zA-Z/,!1))return void $(e,\\\Invalid argument: \\\+t.argString.substring(o));var ai,sr.next();if(!(te(a)&&te(s)||d(a)&&d(s)))return void $(e,\\\Invalid argument: \\\+a+\\\-\\\);var la.charCodeAt(0),cs.charCodeAt(0);if(c\u003Cl)return void $(e,\\\Invalid argument: \\\+t.argString.substring(o));for(var u0;u\u003Cc-l;u++){var pString.fromCharCode(l+u);delete n.marksp}}else delete n.marksi}else $(e,\\\Argument required\\\)}},knew qe;function C(e){var te.state.vim,nR.macroModeState,rR.registerController.getRegister(\\\.\\\),on.isPlaying,in.lastInsertModeChanges;o||(e.off(\\\change\\\,Xe),b.off(e.getInputField(),\\\keydown\\\,et)),!o&&1\u003Ct.insertModeRepeat&&(tt(e,t,t.insertModeRepeat-1,!0),t.lastEditInputState.repeatOverridet.insertModeRepeat),delete t.insertModeRepeat,t.insertMode!1,e.setCursor(e.getCursor().line,e.getCursor().ch-1),e.setOption(\\\keyMap\\\,\\\vim\\\),e.setOption(\\\disableInput\\\,!0),e.toggleOverwrite(!1),r.setText(i.changes.join(\\\\\\)),b.signal(e,\\\vim-mode-change\\\,{mode:\\\normal\\\}),n.isRecording&&!(on).isPlaying&&(to.latestRegister,(tR.registerController.getRegister(t))&&t.pushInsertModeChanges&&t.pushInsertModeChanges(o.lastInsertModeChanges))}function ze(e){p.unshift(e)}function Xe(e,t){var n,rR.macroModeState,or.lastInsertModeChanges;if(!r.isPlaying)for(;t;)o.expectCursorActivityForChange!0,1\u003Co.ignoreCount?o.ignoreCount--:\\\+input\\\!t.origin&&\\\paste\\\!t.origin&&void 0!t.origin||(1\u003C(ne.listSelections().length)&&(o.ignoreCountn),nt.text.join(\\\\\\\n\\\),o.maybeReset&&(o.changes,o.maybeReset!1),n&&(e.state.overwrite&&!/\\\\n/.test(n)?o.changes.push(n):o.changes.push(n))),tt.next}function Ze(e){var t,ne.state.vim;n.insertMode?(tR.macroModeState).isPlaying||((tt.lastInsertModeChanges).expectCursorActivityForChange?t.expectCursorActivityForChange!1:t.maybeReset!0):e.curOp.isVimOp||Ge(e,n)}function Ge(e,t){var n,r,oe.getCursor(\\\anchor\\\),ie.getCursor(\\\head\\\);t.visualMode&&!e.somethingSelected()?D(e,!1):t.visualMode||t.insertMode||!e.somethingSelected()||(t.visualMode!0,t.visualLine!1,b.signal(e,\\\vim-mode-change\\\,{mode:\\\visual\\\})),t.visualMode?(nN(i,o)?0:-1,rN(i,o)?-1:0,iy(i,0,n),oy(o,0,r),t.sel{anchor:o,head:i},V(e,t,\\\\u003C\\\,P(i,o)),V(e,t,\\\>\\\,j(i,o))):t.insertMode||(t.lastHPose.getCursor().ch)}function Ye(e){this.keyNamee}function et(e){var tR.macroModeState.lastInsertModeChanges,nb.keyName(e);!n||-1n.indexOf(\\\Delete\\\)&&-1n.indexOf(\\\Backspace\\\)||b.lookupKey(n,\\\vim-insert\\\,function(){return t.maybeReset&&(t.changes,t.maybeReset!1),t.changes.push(new Ye(n)),!0})}function tt(n,r,e,t){var oR.macroModeState,i(o.isPlaying!0,!!r.lastEditActionCommand),ar.inputState;function s(){i?g.processAction(n,r,r.lastEditActionCommand):g.evalInput(n,r)}function l(e){var t;0\u003Co.lastInsertModeChanges.changes.length&&(er.lastEditActionCommand?e:1,to.lastInsertModeChanges,nt(n,t.changes,e))}if(r.inputStater.lastEditInputState,i&&r.lastEditActionCommand.interlaceInsertRepeat)for(var c0;c\u003Ce;c++)s(),l(1);else t||s(),l(e);r.inputStatea,r.insertMode&&!t&&C(n),o.isPlaying!1}function nt(t,e,n){function r(e){return\\\string\\\typeof e?b.commandse(t):e(t),!0}var ot.getCursor(\\\head\\\),iR.macroModeState.lastInsertModeChanges.visualBlock;i&&(Ce(t,o,i+1),nt.listSelections().length,t.setCursor(o));for(var a0;a\u003Cn;a++){i&&t.setCursor(y(o,a,0));for(var s0;s\u003Ce.length;s++){var l,c,ues;u instanceof Ye?b.lookupKey(u.keyName,\\\vim-insert\\\,r):\\\string\\\typeof u?t.replaceSelection(u):(cy(lt.getCursor(),0,u0.length),t.replaceRange(u0,l,c),t.setCursor(c))}}i&&t.setCursor(y(o,0,1))}function rt(n){var rnew n.constructor;return Object.keys(n).forEach(function(e){var tne;Array.isArray(t)?tt.slice():t&&\\\object\\\typeof t&&t.constructor!Object&&(trt(t)),ret}),n.sel&&(r.sel{head:n.sel.head&&B(n.sel.head),anchor:n.sel.anchor&&B(n.sel.anchor)}),r}return b.keyMap.vim{attach:n,detach:t,call:s},e(\\\insertModeEscKeysTimeout\\\,200,\\\number\\\),b.keyMap\\\vim-insert\\\{fallthrough:\\\default\\\,attach:n,detach:t,call:s},b.keyMap\\\vim-replace\\\{Backspace:\\\goCharLeft\\\,fallthrough:\\\vim-insert\\\,attach:n,detach:t,call:s},le(),v}e.Vim((ee).Vimt(e),e.Vim)});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/keymap/vim.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror-keymap-vim/readme\:{\title\:\$:/plugins/tiddlywiki/codemirror-keymap-vim/readme\,\text\:\This plugin adds a Keymap with some of the most important Vim keyboard shortcuts\\n\\nFor information about available keyboard shortcuts see the extCodeMirror vim demo|https://codemirror.net/demo/vim.html\\n\}}}},{title:$:/plugins/tiddlywiki/codemirror-search-replace,name:CodeMirror Search and Replace,description:Search and replace for CodeMirror,parent-plugin:$:/plugins/tiddlywiki/codemirror,list:readme,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/plugins/tiddlywiki/codemirror/addon/search/search.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\),require(\\\./searchcursor\\\),require(\\\../dialog/dialog\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,\\\./searchcursor\\\,\\\../dialog/dialog\\\,e):e(CodeMirror)}(function(f){\\\use strict\\\;function r(){this.posFromthis.posTothis.lastQuerythis.querynull,this.overlaynull}function p(e){return e.state.search||(e.state.searchnew r)}function n(e){return\\\string\\\typeof e&&ee.toLowerCase()}function d(e,r,o){return e.getSearchCursor(r,o,{caseFold:n(r),multiline:!0})}function m(e,r,o,t,n){e.openDialog?e.openDialog(r,n,{value:t,selectValueOnOpen:!0,bottom:e.options.search.bottom}):n(prompt(o,t))}function h(e){return e.replace(/\\\\\\\\(nrt\\\\\\\\)/g,function(e,r){return\\\n\\\r?\\\\\\\n\\\:\\\r\\\r?\\\\\\\r\\\:\\\t\\\r?\\\\\\\t\\\:\\\\\\\\\\\\\\r?\\\\\\\\\\\\\\:e})}function a(e){var re.match(/^\\\\/(.*)\\\\/(a-z*)$/);if(r)try{enew RegExp(r1,-1r2.indexOf(\\\i\\\)?\\\\\\:\\\i\\\)}catch(e){}else eh(e);return e(\\\string\\\typeof e?\\\\\\e:e.test(\\\\\\))?/x^/:e}function y(e,r,o){var t;r.queryTexto,r.querya(o),e.removeOverlay(r.overlay,n(r.query)),r.overlay(tr.query,on(r.query),\\\string\\\typeof t?tnew RegExp(t.replace(/\\\\-\\\\\\\\\\\\/\\\\{\\\\}\\\\(\\\\)\\\\*\\\\+\\\\?\\\\.\\\\\\\\\\\\^\\\\$\\\\|/g,\\\\\\\\\\\$&\\\),o?\\\gi\\\:\\\g\\\):t.global||(tnew RegExp(t.source,t.ignoreCase?\\\gi\\\:\\\g\\\)),{token:function(e){t.lastIndexe.pos;var rt.exec(e.string);if(r&&r.indexe.pos)return e.pos+r0.length||1,\\\searching\\\;r?e.posr.index:e.skipToEnd()}}),e.addOverlay(r.overlay),e.showMatchesOnScrollbar&&(r.annotate&&(r.annotate.clear(),r.annotatenull),r.annotatee.showMatchesOnScrollbar(r.query,n(r.query)))}function o(n,r,e,o){var tp(n);if(t.query)return g(n,r);var a,i,s,c,l,un.getSelection()||t.lastQuery;u instanceof RegExp&&\\\x^\\\u.source&&(unull),e&&n.openDialog?(anull,ifunction(e,r){f.e_stop(r),e&&(e!t.queryText&&(y(n,t,e),t.posFromt.posTon.getCursor()),a&&(a.style.opacity1),g(n,r.shiftKey,function(e,r){var o;r.line\u003C3&&document.querySelector&&(on.display.wrapper.querySelector(\\\.CodeMirror-dialog\\\))&&o.getBoundingClientRect().bottom-4>n.cursorCoords(r,\\\window\\\).top&&((ao).style.opacity.4)}))},eC(sn),cu,lfunction(e,r){var of.keyName(e),tn.getOption(\\\extraKeys\\\),tt&&to||f.keyMapn.getOption(\\\keyMap\\\)o;\\\findNext\\\t||\\\findPrev\\\t||\\\findPersistentNext\\\t||\\\findPersistentPrev\\\t?(f.e_stop(e),y(n,p(n),r),n.execCommand(t)):\\\find\\\!t&&\\\findPersistent\\\!t||(f.e_stop(e),i(r,e))},s.openDialog(e,i,{value:c,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){v(s)},onKeyDown:l,bottom:s.options.search.bottom}),o&&u&&(y(n,t,u),g(n,r))):m(n,C(n),\\\Search for:\\\,u,function(e){e&&!t.query&&n.operation(function(){y(n,t,e),t.posFromt.posTon.getCursor(),g(n,r)})})}function g(o,t,n){o.operation(function(){var ep(o),rd(o,e.query,t?e.posFrom:e.posTo);(r.find(t)||(rd(o,e.query,t?f.Pos(o.lastLine()):f.Pos(o.firstLine(),0))).find(t))&&(o.setSelection(r.from(),r.to()),o.scrollIntoView({from:r.from(),to:r.to()},20),e.posFromr.from(),e.posTor.to(),n&&n(r.from(),r.to()))})}function v(r){r.operation(function(){var ep(r);e.lastQuerye.query,e.query&&(e.querye.queryTextnull,r.removeOverlay(e.overlay),e.annotate&&(e.annotate.clear(),e.annotatenull))})}function x(e,r){var o,te?document.createElement(e):document.createDocumentFragment();for(o in r)toro;for(var n2;n\u003Carguments.length;n++){var aargumentsn;t.appendChild(\\\string\\\typeof a?document.createTextNode(a):a)}return t}function C(e){var rx(\\\label\\\,{className:\\\CodeMirror-search-label\\\},e.phrase(\\\Search:\\\),x(\\\input\\\,{type:\\\text\\\,style:\\\width: 10em\\\,className:\\\CodeMirror-search-field\\\,id:\\\CodeMirror-search-field\\\}));return r.setAttribute(\\\for\\\,\\\CodeMirror-search-field\\\),x(\\\\\\,null,r,\\\ \\\,x(\\\span\\\,{style:\\\color: #666\\\,className:\\\CodeMirror-search-hint\\\},e.phrase(\\\(Use /re/ syntax for regexp search)\\\)))}function b(r,t,n){r.operation(function(){for(var o,ed(r,t);e.findNext();)\\\string\\\!typeof t?(or.getRange(e.from(),e.to()).match(t),e.replace(n.replace(/\\\\$(\\\\d)/g,function(e,r){return or}))):e.replace(n)})}function t(u,e){var r,o,t;u.getOption(\\\readOnly\\\)||(ru.getSelection()||p(u).lastQuery,tx(\\\\\\,null,x(\\\span\\\,{className:\\\CodeMirror-search-label\\\},oe?u.phrase(\\\Replace all:\\\):u.phrase(\\\Replace:\\\)),(tu,x(\\\\\\,null,\\\ \\\,x(\\\input\\\,{type:\\\text\\\,style:\\\width: 10em\\\,className:\\\CodeMirror-search-field\\\}),\\\ \\\,x(\\\span\\\,{style:\\\color: #666\\\,className:\\\CodeMirror-search-hint\\\},t.phrase(\\\(Use /re/ syntax for regexp search)\\\))))),m(u,t,o,r,function(l){l&&(la(l),m(u,x(\\\\\\,null,x(\\\span\\\,{className:\\\CodeMirror-search-label\\\},u.phrase(\\\With:\\\)),\\\ \\\,x(\\\input\\\,{type:\\\text\\\,style:\\\width: 10em\\\,className:\\\CodeMirror-search-field\\\})),u.phrase(\\\Replace with:\\\),\\\\\\,function(a){var i,s,c;ah(a),e?b(u,l,a):(v(u),id(u,l,u.getCursor(\\\from\\\)),cfunction(o){i.replace(\\\string\\\typeof l?a:a.replace(/\\\\$(\\\\d)/g,function(e,r){return or})),s()},(sfunction(){var e,r,o,t,ni.from();!(ei.findNext())&&(id(u,l),!(ei.findNext())||n&&i.from().linen.line&&i.from().chn.ch)||(u.setSelection(i.from(),i.to()),u.scrollIntoView({from:i.from(),to:i.to()}),tx(\\\\\\,null,x(\\\span\\\,{className:\\\CodeMirror-search-label\\\},(tnu).phrase(\\\Replace?\\\)),\\\ \\\,x(\\\button\\\,{},t.phrase(\\\Yes\\\)),\\\ \\\,x(\\\button\\\,{},t.phrase(\\\No\\\)),\\\ \\\,x(\\\button\\\,{},t.phrase(\\\All\\\)),\\\ \\\,x(\\\button\\\,{},t.phrase(\\\Stop\\\))),ru.phrase(\\\Replace?\\\),ofunction(){c(e)},s,function(){b(u,l,a)},n.openConfirm?n.openConfirm(t,o):confirm(r)&&o0())})())}))}))}f.defineOption(\\\search\\\,{bottom:!1}),f.commands.findfunction(e){v(e),o(e)},f.commands.findPersistentfunction(e){v(e),o(e,!1,!0)},f.commands.findPersistentNextfunction(e){o(e,!1,!0,!0)},f.commands.findPersistentPrevfunction(e){o(e,!0,!0,!0)},f.commands.findNexto,f.commands.findPrevfunction(e){o(e,!0)},f.commands.clearSearchv,f.commands.replacet,f.commands.replaceAllfunction(e){t(e,!0)}});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/search/search.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js\:{\text\:\!function(e){\\\object\\\typeof exports&&\\\object\\\typeof module?e(require(\\\../../lib/codemirror\\\),require(\\\../dialog/dialog\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,\\\../dialog/dialog\\\,e):e(CodeMirror)}(function(e){\\\use strict\\\;function l(e,o){var rNumber(o);return/^-+/.test(o)?e.getCursor().line+r:r-1}e.defineOption(\\\search\\\,{bottom:!1}),e.commands.jumpToLinefunction(t){var e,o,r,s,i,nt.getCursor();i(iet).phrase(\\\Jump to line:\\\)+ \u003Cinput type\\\text\\\ style\\\width: 10em\\\ class\\\CodeMirror-search-field\\\/> \u003Cspan style\\\color: #888\\\ class\\\CodeMirror-search-hint\\\>+i.phrase(\\\(Use line:column or scroll% syntax)\\\)+\\\\u003C/span>\\\,ot.phrase(\\\Jump to line:\\\),rn.line+1+\\\:\\\+n.ch,sfunction(e){var o,r;e&&((o/^\\\\s*(\\\\+\\\\-?\\\\d+)\\\\s*\\\\:\\\\s*(\\\\d+)\\\\s*$/.exec(e))?t.setCursor(l(t,o1),Number(o2)):(o/^\\\\s*(\\\\+\\\\-?\\\\d+(\\\\.\\\\d+)?)\\\\%\\\\s*/.exec(e))?(rMath.round(t.lineCount()*Number(o1)/100),/^-+/.test(o1)&&(rn.line+r+1),t.setCursor(r-1,n.ch)):(o/^\\\\s*\\\\:?\\\\s*(\\\\+\\\\-?\\\\d+)\\\\s*/.exec(e))&&t.setCursor(l(t,o1),n.ch))},e.openDialog?e.openDialog(i,s,{value:r,selectValueOnOpen:!0,bottom:e.options.search.bottom}):s(prompt(o,r))},e.keyMap.default\\\Alt-G\\\\\\jumpToLine\\\});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\:{\text\:\!function(t){\\\object\\\typeof exports&&\\\object\\\typeof module?t(require(\\\../../lib/codemirror\\\)):\\\function\\\typeof define&&define.amd?define(\\\../../lib/codemirror\\\,t):t(CodeMirror)}(function(r){\\\use strict\\\;var p,v,xr.Pos;function m(t,e){for(var n,inull!(i(nt).flags)?i:(n.ignoreCase?\\\i\\\:\\\\\\)+(n.global?\\\g\\\:\\\\\\)+(n.multiline?\\\m\\\:\\\\\\),ri,o0;o\u003Ce.length;o++)-1r.indexOf(e.charAt(o))&&(r+e.charAt(o));return ir?t:new RegExp(t.source,r)}function d(t){return/\\\\\\\\s|\\\\\\\\n|\\\\n|\\\\\\\\W|\\\\\\\\D|\\\\\\\\^/.test(t.source)}function a(t,e,n){em(e,\\\g\\\);for(var in.line,rn.ch,ot.lastLine();i\u003Co;i++,r0){e.lastIndexr;var ht.getLine(i),he.exec(h);if(h)return{from:x(i,h.index),to:x(i,h.index+h0.length),match:h}}}function o(t,e,n){if(!d(e))return a(t,e,n);em(e,\\\gm\\\);for(var i1,rn.line,ot.lastLine();r\u003Co;){for(var h0;h\u003Ci&&!(o\u003Cr);h++)var lt.getLine(r++),cnullc?l:c+\\\\\\\n\\\+l;i*2,e.lastIndexn.ch;var s,f,g,ue.exec(c);if(u)return gc.slice(0,u.index).split(\\\\\\\n\\\),su0.split(\\\\\\\n\\\),fn.line+g.length-1,ggg.length-1.length,{from:x(f,g),to:x(f+s.length-1,1s.length?g+s0.length:ss.length-1.length),match:u}}}function L(t,e,n){for(var i,r0;r\u003Ct.length;){e.lastIndexr;var oe.exec(t);if(!o)break;var ho.index+o0.length;if(h>t.length-n)break;(!i||h>i.index+i0.length)&&(io),ro.index+1}return i}function O(t,e,n){em(e,\\\g\\\);for(var in.line,rn.ch,ot.firstLine();o\u003Ci;i--,r-1){var ht.getLine(i),hL(h,e,r\u003C0?0:h.length-r);if(h)return{from:x(i,h.index),to:x(i,h.index+h0.length),match:h}}}function h(t,e,n){if(!d(e))return O(t,e,n);em(e,\\\gm\\\);for(var i1,rt.getLine(n.line).length-n.ch,on.line,ht.firstLine();h\u003Co;){for(var l0;l\u003Ci&&h\u003Co;l++)var ct.getLine(o--),snulls?c:c+\\\\\\\n\\\+s;i*2;var f,g,u,aL(s,e,r);if(a)return us.slice(0,a.index).split(\\\\\\\n\\\),fa0.split(\\\\\\\n\\\),go+u.length,uuu.length-1.length,{from:x(g,u),to:x(g+f.length-1,1f.length?u+f0.length:ff.length-1.length),match:a}}}function y(t,e,n,i){if(t.lengthe.length)return n;for(var r0,on+Math.max(0,t.length-e.length);;){if(ro)return r;var hr+o>>1,li(t.slice(0,h)).length;if(ln)return h;n\u003Cl?oh:r1+h}}function l(t,e,n,i){if(!e.length)return null;var ri?p:v,or(e).split(/\\\\r|\\\\n\\\\r?/);t:for(var hn.line,ln.ch,ct.lastLine()+1-o.length;h\u003Cc;h++,l0){var st.getLine(h).slice(l),fr(s);if(1o.length){var gf.indexOf(o0);if(-1g);else return ny(s,f,g,r)+l,{from:x(h,y(s,f,g,r)+l),to:x(h,y(s,f,g+o0.length,r)+l)}}else{gf.length-o0.length;if(f.slice(g)o0){for(var u1;u\u003Co.length-1;u++)if(r(t.getLine(h+u))!ou)continue t;var at.getLine(h+o.length-1),mr(a),doo.length-1;if(m.slice(0,d.length)d)return{from:x(h,y(s,f,g,r)+l),to:x(h+o.length-1,y(a,m,d.length,r))}}}}}function c(t,e,n,i){if(!e.length)return null;var ri?p:v,or(e).split(/\\\\r|\\\\n\\\\r?/);t:for(var hn.line,ln.ch,ct.firstLine()-1+o.length;c\u003Ch;h--,l-1){var st.getLine(h),fr(s-1\u003Cl?s.slice(0,l):s);if(1o.length){var gf.lastIndexOf(o0);if(-1!g)return{from:x(h,y(s,f,g,r)),to:x(h,y(s,f,g+o0.length,r))}}else{goo.length-1;if(f.slice(0,g.length)g){for(var u1,nh-o.length+1;u\u003Co.length-1;u++)if(r(t.getLine(n+u))!ou)continue t;var at.getLine(h+1-o.length),mr(a);if(m.slice(m.length-o0.length)o0)return{from:x(h+1-o.length,y(a,m,a.length-o0.length,r)),to:x(h,y(s,f,g.length,r))}}}}}function i(n,i,t,e){var r;this.atOccurrence!1,this.afterEmptyMatch!1,this.docn,tt?n.clipPos(t):x(0,0),this.pos{from:t,to:t},\\\object\\\typeof e?re.caseFold:(re,enull),\\\string\\\typeof i?(nullr&&(r!1),this.matchesfunction(t,e){return(t?c:l)(n,i,e,r)}):(im(i,\\\gm\\\),e&&!1e.multiline?this.matchesfunction(t,e){return(t?O:a)(n,i,e)}:this.matchesfunction(t,e){return(t?h:o)(n,i,e)})}vString.prototype.normalize?(pfunction(t){return t.normalize(\\\NFD\\\).toLowerCase()},function(t){return t.normalize(\\\NFD\\\)}):(pfunction(t){return t.toLowerCase()},function(t){return t}),i.prototype{findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){var ethis.doc.clipPos(t?this.pos.from:this.pos.to);if(this.afterEmptyMatch&&this.atOccurrence&&(ex(e.line,e.ch),t?(e.ch--,e.ch\u003C0&&(e.line--,e.ch(this.doc.getLine(e.line)||\\\\\\).length)):(e.ch++,e.ch>(this.doc.getLine(e.line)||\\\\\\).length&&(e.ch0,e.line++)),0!r.cmpPos(e,this.doc.clipPos(e))))return this.atOccurrence!1;var ethis.matches(t,e);return this.afterEmptyMatche&&0r.cmpPos(e.from,e.to),e?(this.pose,this.atOccurrence!0,this.pos.match||!0):(ex(t?this.doc.firstLine():this.doc.lastLine()+1,0),this.pos{from:e,to:e},this.atOccurrence!1)},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,e){this.atOccurrence&&(tr.splitLines(t),this.doc.replaceRange(t,this.pos.from,this.pos.to,e),this.pos.tox(this.pos.from.line+t.length-1,tt.length-1.length+(1t.length?this.pos.from.ch:0)))}},r.defineExtension(\\\getSearchCursor\\\,function(t,e,n){return new i(this.doc,t,e,n)}),r.defineDocExtension(\\\getSearchCursor\\\,function(t,e,n){return new i(this,t,e,n)}),r.defineExtension(\\\selectMatches\\\,function(t,e){for(var n,ithis.getSearchCursor(t,this.getCursor(\\\from\\\),e);i.findNext()&&!(0\u003Cr.cmpPos(i.to(),this.getCursor(\\\to\\\)));)n.push({anchor:i.from(),head:i.to()});n.length&&this.setSelections(n,0)})});\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js\,\module-type\:\codemirror\},\$:/plugins/tiddlywiki/codemirror-search-replace/readme\:{\title\:\$:/plugins/tiddlywiki/codemirror-search-replace/readme\,\text\:\This plugin enhances the CodeMirror|http://codemirror.net text editor with Search and Replace functionality. It needs the latest CodeMirror plugin|$:/plugins/tiddlywiki/codemirror to be installed\\n\\nIt adds these Keyboard Shortcuts to ~CodeMirror:\\n\\n|Shortcut |Function |h\\n|Ctrl-F / Cmd-F |Start searching |\\n|Ctrl-G / Cmd-G / Shift-F3 |Find next |\\n|Shift-Ctrl-G / Shift-Cmd-G / F3 |Find previous |\\n|Shift-Ctrl-F / Cmd-Option-F |Replace |\\n|Shift-Ctrl-R / Shift-Cmd-Option-F |Replace all |\\n|Alt-F |Persistent search (dialog doesnt autoclose, enter to find next, Shift-Enter to find previous) |\\n|Alt-G |Jump to line |\\n\\n\}}}},{title:$:/plugins/tiddlywiki/codemirror/addon/hint/anyword-hint.js2,text:// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports \object\ && typeof module \object\) // CommonJS\n mod(require(\../../lib/codemirror\));\n else if (typeof define \function\ && define.amd) // AMD\n define(\../../lib/codemirror\, mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \use strict\;\n\nCodeMirror.registerHelper(hint, anyword, function(editor) {\n var cur editor.getCursor();\n var curLine editor.getLine(cur.line);\n var start cur.ch;\n var end start;\n var tiddlers $tw.wiki.filterTiddlers(\alltiddlers!issystem\);\n while (end \u003C curLine.length && /\\w$/.test(curLine.charAt(end))) ++end;\n while (start && /\\w$/.test(curLine.charAt(start - 1))) --start;\n var curWord start ! end && curLine.slice(start, end);\n var regex new RegExp(^ + curWord, i);\n return {\n list: (!curWord ? : tiddlers.filter(function(item) {\n return item.match(regex);\n })).sort(),\n from: CodeMirror.Pos(cur.line, start),\n to: CodeMirror.Pos(cur.line, end)\n }\n})\n});,created:20200504175204795,creator:soren,modified:20210827213549101,modifier:soren,module-type:codemirrorDISABLED,tags:$:/tags/DisabledPlugin,type:application/javascript},{title:$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css,created:20200815103937889,modified:20210329230405134,module-type:codemirror-theme,name:cmplus,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:```\n/*\nTiddlywiki Metadata\n----\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\n\nAdditional Fields - \nmodule-type: codemirror-theme\nname: cmplus\n*/\n```\n\n.cm-s-cmplus{\n line-height: 1.5em;\n background: \u003C\u003Ccolour tiddler-editor-background>> !important;\n color: \u003C\u003Ccolour foreground>> !important;\n}\n\n.cm-s-cmplus .CodeMirror-lines {\n padding: 8px 0;\n}\n\n.cm-s-cmplus .CodeMirror-linenumber {\n color: \u003C\u003Ccmcolour linenumber>>;\n}\n\n.cm-s-cmplus .CodeMirror-gutters {\n background-color: \u003C\u003Ccolour page-background>>;\n padding-right: 10px;\n z-index: 3;\n border: none;\n}\n\n.cm-s-cmplus div.CodeMirror-cursor {\n border-left: 3px solid \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-cmplus .CodeMirror-activeline-background {\n background: \u003C\u003Ccolour tiddler-editor-fields-even>>;\n}\n\n.cm-s-cmplus .CodeMirror-selected {\n background: \u003C\u003Ccmcolour selected>> !important;\n}\n\n.cm-s-cmplus .cm-comment {\n font-style: italic;\n color: \u003C\u003Ccolour muted-foreground>>;\n}\n\n.cm-s-cmplus .CodeMirror-matchingbracket {\n text-decoration: underline;\n color: \u003C\u003Ccmcolour matching-bracket>> !important;\n}\n\n.cm-s-cmplus .cm-strikethrough {\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>; \n}\n\n.cm-s-cmplus .cm-underlined {\n text-decoration-line: underline;\n text-decoration-style: solid;\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-cmplus .cm-superscript {\n vertical-align: super;\n font-size: 0.7em;\n line-height: 0.1em;\n}\n\n.cm-s-cmplus .cm-subscript {\n font-size: 0.7em;\n line-height: 0.5;\n}\n\n.cm-s-cmplus .cm-macro {\n color: \u003C\u003Ccmcolour macro>>;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-keyword {\n color: \u003C\u003Ccmcolour keyword>>;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n font-weight: 600;\n}\n\n.cm-s-cmplus .cm-quote {\n font-style: italic;\n padding-left: 0.6em;\n border-left: \u003C\u003Ccmcolour quote>> solid 0.2em;\n}\n\n.cm-s-cmplus .cm-hr {\n color: \u003C\u003Ccmcolour hr>>;\n}\n\n.cm-s-cmplus .cm-h1 {\n color: \u003C\u003Ccmcolour h1>>;\n font-weight: 700;\n font-size: 1.383em;\n line-height: 1.802em;\n}\n\n.cm-s-cmplus .cm-h2 {\n color: \u003C\u003Ccmcolour h2>>;\n font-weight: 600;\n font-size: 1.296em;\n line-height: 1.602em;\n}\n\n.cm-s-cmplus .cm-h3 {\n color: \u003C\u003Ccmcolour h3>>;\n font-weight: 500;\n font-size: 1.215em;\n line-height: 1.424em;\n}\n\n.cm-s-cmplus .cm-h4 {\n color: \u003C\u003Ccmcolour h4>>;\n font-weight: 400;\n font-size: 1.138em;\n line-height: 1.266em;\n}\n\n.cm-s-cmplus .cm-h5 {\n color: \u003C\u003Ccmcolour h5>>;\n font-weight: 400;\n font-size: 1.067em;\n line-height: 1.125em;\n}\n\n.cm-s-cmplus .cm-h6 {\n color: \u003C\u003Ccmcolour h6>>;\n font-weight: 400;\n}\n\n.cm-s-cmplus .cm-link {\n color: \u003C\u003Ccmcolour link>>;\n text-decoration: none;\n font-weight: 600;\n}\n\n.cm-s-cmplus .cm-internallink {\n color: \u003C\u003Ccmcolour internallink>>;\n font-weight:600;\n}\n\n.cm-s-cmplus .cm-externallink {\n color: \u003C\u003Ccmcolour externallink>>;\n text-decoration: underline;\n}\n\n.cm-s-cmplus .cm-transclude {\n color: \u003C\u003Ccmcolour transclude>>;\n}\n\n.cm-s-cmplus .cm-pre {\n color: \u003C\u003Ccmcolour pre>>;\t\t\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\n}\n\n.cm-s-cmplus .cm-monospace {\n color: \u003C\u003Ccmcolour monospace>>;\n font-family: {{$:/plugins/adithyab/cmplus/settings##monospace-font}};\n}\n\n.cm-s-cmplus .cm-list1 {\n color: \u003C\u003Ccmcolour list1>>;\n padding-left: 1em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-list2 {\n color: \u003C\u003Ccmcolour list2>>;\n padding-left: 2em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-list3 {\n color: \u003C\u003Ccmcolour list3>>;\n padding-left: 3em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-list4 {\n color: \u003C\u003Ccmcolour list4>>;\n padding-left: 4em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-cmplus .cm-list5 {\n color: \u003C\u003Ccmcolour list5>>;\n padding-left: 5em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}},{title:$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css2,created:20200815103937889,creator:soren,modified:20210827213558174,modifier:soren,module-type:codemirror-theme,name:tw5plus,tags:$:/tags/DisabledPlugin,type:text/vnd.tiddlywiki,text:```\n/*\nTiddlywiki Metadata\n----\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.css\n\nAdditional Fields - \nmodule-type: codemirror-theme\nname: tw5plus\n*/\n```\n\n.cm-s-tw5plus {\n line-height: 1.5em;\n background: \u003C\u003Ccolour tiddler-editor-background>>;\n color: \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-lines {\n padding: 8px 0;\n}\n\n.cm-s-tw5plus .CodeMirror-linenumber {\n color: #586E75;\n}\n\n.cm-s-tw5plus .CodeMirror-gutters {\n background-color: \u003C\u003Ccolour page-background>>;\n padding-right: 10px;\n z-index: 3;\n border: none;\n}\n\n.cm-s-tw5plus div.CodeMirror-cursor {\n border-left: 3px solid \u003C\u003Ccolour foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-activeline-background {\n background: \u003C\u003Ccolour tiddler-editor-fields-odd>>;\n}\n\n.cm-s-tw5plus .CodeMirror-selected {\n background: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-tw5plus .cm-comment {\n font-style: italic;\n color: \u003C\u003Ccolour muted-foreground>>;\n}\n\n.cm-s-tw5plus .CodeMirror-matchingbracket {\n text-decoration: underline;\n color: #d33682 !important;\n}\n\n.cm-s-tw5plus .cm-strikethrough {\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>; \n}\n\n.cm-s-tw5plus .cm-underlined {\n text-decoration-line: underline;\n text-decoration-style: solid;\n text-decoration-color: \u003C\u003Ccolour very-muted-foreground>>;\n}\n\n.cm-s-tw5plus .cm-superscript {\n vertical-align: super;\n font-size: 0.7em;\n line-height: 0.1em;\n}\n\n.cm-s-tw5plus .cm-subscript {\n font-size: 0.7em;\n line-height: 0.5;\n}\n\n.cm-s-tw5plus .cm-string {\n color: #586E75;\n}\n\n.cm-s-tw5plus .cm-number {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-macro {\n color: #cb4b16;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-keyword {\n color: #859900;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n font-weight: 600;\n}\n\n.cm-s-tw5plus .cm-variable {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-variable-2 {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-property {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-atom {\n color: #268BD2;\n}\n\n.cm-s-tw5plus .cm-operator {\n color: #859900;\n}\n\n.cm-s-tw5plus .cm-quote {\n font-style: italic;\n padding-left: 0.6em;\n border-left: #d33682 solid 0.2em;\n}\n\n.cm-s-tw5plus .cm-hr {\n color: #268bd2;\n}\n\n.cm-s-tw5plus .cm-h1 {\n color: #d33682;\n font-weight: 700;\n font-size: 1.383em;\n line-height: 1.802em;\n}\n\n.cm-s-tw5plus .cm-h2 {\n color: #d33682;\n font-weight: 600;\n font-size: 1.296em;\n line-height: 1.602em;\n}\n\n.cm-s-tw5plus .cm-h3 {\n color: #d33682;\n font-weight: 500;\n font-size: 1.215em;\n line-height: 1.424em;\n}\n\n.cm-s-tw5plus .cm-h4 {\n color: #d33682;\n font-weight: 400;\n font-size: 1.138em;\n line-height: 1.266em;\n}\n\n.cm-s-tw5plus .cm-h5 {\n color: #d33682;\n font-weight: 400;\n font-size: 1.067em;\n line-height: 1.125em;\n}\n\n.cm-s-tw5plus .cm-h6 {\n color: #d33682;\n font-weight: 400;\n}\n\n.cm-s-tw5plus .cm-link {\n color: #2aa198;\n text-decoration: none;\n}\n\n.cm-s-tw5plus .cm-internallink {\n color: #268bd2;\n font-weight:600;\n}\n\n.cm-s-tw5plus .cm-externallink {\n color: #d33682;\n text-decoration: underline;\n}\n\n.cm-s-tw5plus .cm-transclude {\n color: #dc322f;\n}\n\n.cm-s-tw5plus .cm-pre {\n color: #268BD2;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-monospace {\n color: #cb4b16;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list1 {\n color: #268BD2;\n padding-left: 1em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list2 {\n color: #268BD2;\n padding-left: 2em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list3 {\n color: #268BD2;\n padding-left: 3em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list4 {\n color: #268BD2;\n padding-left: 4em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\n.cm-s-tw5plus .cm-list5 {\n color: #268BD2;\n padding-left: 5em;\n padding-right: 0.5em;\n font-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}},{title:$:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js2,text:// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/***\n\n|Name|tw5.js|\n|Description|Enables TiddlyWikiy syntax highlighting using CodeMirror|\n|Original Contributor|PMario|\n|Author|adithya-badidey|https://github.com/adithya-badidey|\n|Version|0.1.8|\n|Status|stable|\n|Source|GitHub|https://github.com/adithya-badidey/TW5-codemirror-plus|\n|Documentation|https://codemirror.tiddlyspace.com/|\n|License|MIT License|http://www.opensource.org/licenses/mit-license.php|\n|Requires|codemirror.js|\n|Keywords|syntax highlighting color code mirror codemirror|\n\n!! Tiddlywiki Metadata\nName: $:/plugins/tiddlywiki/codemirror/mode/tw5/tw5.js\nType: application/javascript\nAdditional Field:\nmodule-type: codemirror\n \nInfo: CoreVersion parameter is needed for TiddlyWiki only!\n\n***/\n\n(function (mod) {\n if (typeof exports \object\ && typeof module \object\) // CommonJS\n mod(require(\../../lib/codemirror\));\n else if (typeof define \function\ && define.amd) // AMD\n define(\../../lib/codemirror\, mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function (CodeMirror) {\n \use strict\;\n\n CodeMirror.defineMode(\tiddlywiki5\, function () {\n // Tokenizer\n var textwords {};\n\n var keywords {\n \changecount\: true, \colour\: true,\n \colour-picker\: true, \contrastcolour\: true,\n \copy-to-clipboard\: true, \csvtiddlers\: true,\n \datauri\: true, \dumpvariables\: true,\n \image-picker\: true, \jsontiddler\: true,\n \jsontiddlers\: true, \lingo\: true,\n \list-links\: true, \list-links-draggable\: true,\n \list-tagged-draggable\: true, \list-thumbnails\: true,\n \makedatauri\: true, \now\: true,\n \qualify\: true, \resolvepath\: true,\n \box-shadow\: true, \filter\: true,\n \transition\: true, \background-linear-gradient\: true,\n \transform-origin\: true, \toc\: true,\n \toc-expandable\: true, \toc-selective-expandable\: true,\n \toc-tabbed-internal-nav\: true, \toc-tabbed-external-nav\: true,\n \tabs\: true, \tag\: true,\n \tag-picker\: true, \tag-pill\: true,\n \thumbnail\: true, \timeline\: true,\n \tree\: true, \unusedtitle\: true,\n \version\: true\n };\n\n var isSpaceName /\\w_\\-/i,\n reHR /^\\-\\-\\-\\-+$/, // \u003Chr>\n reBlockQuote /^\u003C\u003C\u003C/,\n rePreStart /^```$/;\n\n function chain(stream, state, f) {\n state.tokenize f;\n return f(stream, state);\n }\n\n function tokenBase(stream, state) {\n var sol stream.sol(), // sol() -> Returns true only if the stream is at the start of the line.\n ch stream.peek(); // Returns the next character in the stream without advancing it. Will return a null at the end of the line.\n\n // check start of blocks\n if (sol && /\u003C\\/\\*{}\\-`/.test(ch)) { //is at the start of a line and the next char is not\n if (stream.match(reBlockQuote)) {\n return chain(stream, state, twTokenQuote);\n }\n \n if (stream.match(reHR))\n return hr;\n\n if (stream.match(rePreStart))\n return chain(stream, state, twTokenPre);\n }\n\n stream.next();\n if (sol && /\\/\\*!#;:>|/.test(ch)) {\n if (ch \!\) { // tw header\n var count 1;\n while (stream.eat(!))\n count++;\n stream.skipToEnd();\n return \h\ + count;\n }\n\n if (ch \*\ || ch \#\) { // tw list\n var count 1;\n while (stream.eat(*) || stream.eat(#))\n count++;\n return \list\ + count;\n }\n if (ch \;\) { // definition list, term\n stream.eatWhile(;);\n return \list1\;\n }\n if (ch \:\) { // definition list, description\n stream.eatWhile(:);\n return \list2\;\n }\n if (ch \>\) { // single line quote\n stream.eatWhile(\>\);\n return \quote\;\n }\n if (ch |)\n return header;\n }\n\n // rudimentary html:// file:// link matching. TW knows much more ...\n if (/hf/i.test(ch) &&\n /ti/i.test(stream.peek()) &&\n stream.match(/\\b(ttps?|tp|ile):\\/\\/\\-A-Z0-9+&@#\\/%?~_|$!:,.;*A-Z0-9+&@#\\/%~_|$/i, true))\n return \externallink\;\n\n if (ch `) { //\n return chain(stream, state, twTokenMonospace);\n }\n\n if (ch \/\ && stream.eat(\/\)) { //\n return chain(stream, state, twTokenEm);\n }\n\n if (ch \{\ && stream.eat(\{\)) \n return chain(stream, state, twTranslclude);\n\n if (ch \\ && stream.eat(\\)) // tw InternalLink\n return chain(stream, state, twInternalLink);\n\n if (ch \_\ && stream.eat(\_\)) // tw underline\n return chain(stream, state, twTokenUnderline);\n\n if (ch \^\ && stream.eat(\^\))\n return chain(stream, state, twSuperscript);\n\n if (ch \,\ && stream.eat(\,\)) // tw underline\n return chain(stream, state, twSubscript);\n\n // tw strikethrough\n if (ch \~\ && stream.eat(\~\)) {\n return chain(stream, state, twTokenStrike);\n }\n\n if (ch \\ && stream.eat(\\)) // tw bold\n return chain(stream, state, twTokenStrong);\n\n if (ch \\u003C\ && stream.eat(\\u003C\)) // tw macro\n return chain(stream, state, twTokenMacro);\n\n return null\n }\n\n // // tw invisible comment\n // function twTokenComment(stream, state) {\n // var maybeEnd false, ch;\n // while (ch stream.next()) {\n // if (ch \/\ && maybeEnd) {\n // state.tokenize tokenBase;\n // break;\n // }\n // maybeEnd (ch \%\);\n // }\n // return \comment\;\n // }\n\n // tw strong / bold\n function twTokenStrong(stream, state) {\n var maybeEnd false,\n ch;\n while (ch stream.next()) {\n if (ch \\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \\);\n }\n return \strong\;\n }\n\n function twTokenMonospace(stream, state) {\n var ch;\n while (ch stream.next()) {\n if (ch \`\) {\n state.tokenize tokenBase;\n break;\n }\n }\n return \monospace\;\n }\n\n // tw em / italic\n function twTokenEm(stream, state) {\n var maybeEnd false,\n ch;\n while (ch stream.next()) {\n if (ch \/\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \/\);\n }\n return \em\;\n }\n\n // tw transclusions\n function twTranslclude(stream, state) {\n var maybeEnd false,\n ch;\n while (ch stream.next()) {\n if (ch \}\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \}\);\n }\n return \transclude\;\n }\n\n // tw internal links\n function twInternalLink(stream, state) {\n if (stream.current() ) {\n state.pastDivider false;\n // console.log(\Start of link\);\n return link;\n }\n if (stream.peek() ) {\n stream.next()\n if(stream.next() ) {\n state.tokenize tokenBase;\n // console.log(\End of link\);\n return link;\n }\n }\n var pastDivider state.pastDivider,\n ch;\n while (ch stream.peek()) {\n // console.log(\Peeking :\ + ch);\n if (!pastDivider && ch|) {\n stream.next();\n state.pastDivider true;\n // console.log(\Past the divider\);\n return link;\n }\n if (ch \\ && stream.peek() \\) {\n // console.log(\Found end of link\);\n return \internallink\;\n }\n ch stream.next();\n if (/hf/i.test(ch) &&\n /ti/i.test(stream.peek()) &&\n stream.match(/\\b(ttps?|tp|ile):\\/\\/\\-A-Z0-9+&@#\\/%?~_|$!:,.;*A-Z0-9+&@#\\/%~_|$/i, true)) {\n // console.log(\Found external link\);\n return \externallink\;\n }\n stream.eatWhile(/^|\\/);\n }\n return null;\n }\n\n // tw underlined text\n function twTokenUnderline(stream, state) {\n var maybeEnd false,\n ch;\n while (ch stream.next()) {\n if (ch \_\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \_\);\n }\n return \underlined\;\n }\n\n function twSubscript(stream, state) {\n var maybeEnd false, ch;\n\n while (ch stream.next()) {\n if (ch \,\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \,\);\n }\n return \subscript\;\n }\n\n function twSuperscript(stream, state) {\n var maybeEnd false, ch;\n\n while (ch stream.next()) {\n if (ch \^\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \^\);\n }\n return \superscript\;\n }\n\n function twTokenStrike(stream, state) {\n var maybeEnd false, ch;\n\n while (ch stream.next()) {\n if (ch \~\ && maybeEnd) {\n state.tokenize tokenBase;\n break;\n }\n maybeEnd (ch \~\);\n }\n return \strikethrough\;\n }\n\n function twTokenPre(stream, state) {\n var sol stream.sol(), maybeEnd false, surelyend false, ch;\n while (ch stream.next()) {\n if (ch ` && surelyend && stream.eol()) {\n stream.next();\n state.tokenize tokenBase;\n return \pre\;\n }\n surelyend (maybeEnd && (ch `));\n maybeEnd (sol && ch `);\n sol stream.sol();\n }\n return \pre\;\n }\n\n function twTokenQuote(stream, state) {\n var sol stream.sol(), maybeEnd false, surelyend false, ch;\n while (ch stream.next()) {\n if (ch \u003C && surelyend) {\n stream.skipToEnd();\n state.tokenize tokenBase;\n return \quote\;\n }\n surelyend (maybeEnd && (ch \u003C));\n maybeEnd (sol && ch \u003C);\n sol stream.sol();\n }\n return \quote\;\n }\n\n\n function twTokenMacro(stream, state) {\n if (stream.current() \u003C\u003C) {\n return macro;\n }\n\n var ch stream.next();\n if (!ch) {\n state.tokenize tokenBase;\n return null;\n }\n if (ch \>\) {\n if (stream.peek() >) {\n stream.next();\n state.tokenize tokenBase;\n return \macro\;\n }\n }\n\n stream.eatWhile(/\\w\\$_/);\n return keywords.propertyIsEnumerable(stream.current()) ? \keyword\ : \macro\\n }\n\n // Interface\n return {\n startState: function () {\n return { tokenize: tokenBase };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style state.tokenize(stream, state);\n return style;\n }\n };\n });\n\n CodeMirror.defineMIME(\text/vnd.tiddlywiki\, \tiddlywiki5\);\n});,created:20200818164318584,creator:soren,modified:20210827213607229,modifier:soren,module-type:codemirrorDISABLED,tags:$:/tags/DisabledPlugin,type:application/javascript},{title:$:/plugins/tiddlywiki/highlight,name:Highlight,description:Highlight.js syntax highlighting,author:Joao Bolila,list:readme usage license,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/config/HighlightPlugin/TypeMappings/application/javascript\:{\title\:\$:/config/HighlightPlugin/TypeMappings/application/javascript\,\text\:\javascript\},\$:/config/HighlightPlugin/TypeMappings/application/json\:{\title\:\$:/config/HighlightPlugin/TypeMappings/application/json\,\text\:\json\},\$:/config/HighlightPlugin/TypeMappings/text/css\:{\title\:\$:/config/HighlightPlugin/TypeMappings/text/css\,\text\:\css\},\$:/config/HighlightPlugin/TypeMappings/text/html\:{\title\:\$:/config/HighlightPlugin/TypeMappings/text/html\,\text\:\html\},\$:/config/HighlightPlugin/TypeMappings/image/svg+xml\:{\title\:\$:/config/HighlightPlugin/TypeMappings/image/svg+xml\,\text\:\xml\},\$:/config/HighlightPlugin/TypeMappings/text/x-markdown\:{\title\:\$:/config/HighlightPlugin/TypeMappings/text/x-markdown\,\text\:\markdown\},\$:/config/HighlightPlugin/TypeMappings/text/markdown\:{\title\:\$:/config/HighlightPlugin/TypeMappings/text/markdown\,\text\:\markdown\},\$:/plugins/tiddlywiki/highlight/highlight.js\:{\text\:\/*!\\n Highlight.js v11.4.0 (git: 2d0e7c1094)\\n (c) 2006-2022 Ivan Sagalaev and other contributors\\n License: BSD-3-Clause\\n */\\nvar hljsfunction(){\\\use strict\\\;var e{exports:{}};function t(e){\\nreturn e instanceof Map?e.cleare.deletee.set()>{\\nthrow Error(\\\map is read-only\\\)}:e instanceof Set&&(e.adde.cleare.delete()>{\\nthrow Error(\\\set is read-only\\\)\\n}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((n>{var ien\\n;\\\object\\\!typeof i||Object.isFrozen(i)||t(i)})),e}\\ne.exportst,e.exports.defaultt;var ne.exports;class i{constructor(e){\\nvoid 0e.data&&(e.data{}),this.datae.data,this.isMatchIgnored!1}\\nignoreMatch(){this.isMatchIgnored!0}}function r(e){\\nreturn e.replace(/&/g,\\\&\\\).replace(/\u003C/g,\\\<\\\).replace(/>/g,\\\>\\\).replace(/\\\/g,\\\"\\\).replace(//g,\\\'\\\)\\n}function s(e,...t){const nObject.create(null);for(const t in e)ntet\\n;return t.forEach((e>{for(const t in e)ntet})),n}const oe>!!e.kind\\n;class a{constructor(e,t){\\nthis.buffer\\\\\\,this.classPrefixt.classPrefix,e.walk(this)}addText(e){\\nthis.buffer+r(e)}openNode(e){if(!o(e))return;let te.kind\\n;te.sublanguage?\\\language-\\\+t:((e,{prefix:t})>{if(e.includes(\\\.\\\)){\\nconst ne.split(\\\.\\\)\\n;return`${t}${n.shift()}`,...n.map(((e,t)>`${e}${\\\_\\\.repeat(t+1)}`)).join(\\\ \\\)\\n}return`${t}${e}`})(t,{prefix:this.classPrefix}),this.span(t)}closeNode(e){\\no(e)&&(this.buffer+\\\\u003C/span>\\\)}value(){return this.buffer}span(e){\\nthis.buffer+`\u003Cspan class\\\${e}\\\>`}}class c{constructor(){this.rootNode{\\nchildren:},this.stackthis.rootNode}get top(){\\nreturn this.stackthis.stack.length-1}get root(){return this.rootNode}add(e){\\nthis.top.children.push(e)}openNode(e){const t{kind:e,children:}\\n;this.add(t),this.stack.push(t)}closeNode(){\\nif(this.stack.length>1)return this.stack.pop()}closeAllNodes(){\\nfor(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}\\nwalk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){\\nreturn\\\string\\\typeof t?e.addText(t):t.children&&(e.openNode(t),\\nt.children.forEach((t>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\\n\\\string\\\!typeof e&&e.children&&(e.children.every((e>\\\string\\\typeof e))?e.childrene.children.join(\\\\\\):e.children.forEach((e>{\\nc._collapse(e)})))}}class l extends c{constructor(e){super(),this.optionse}\\naddKeyword(e,t){\\\\\\!e&&(this.openNode(t),this.addText(e),this.closeNode())}\\naddText(e){\\\\\\!e&&this.add(e)}addSublanguage(e,t){const ne.root\\n;n.kindt,n.sublanguage!0,this.add(n)}toHTML(){\\nreturn new a(this,this.options).value()}finalize(){return!0}}function g(e){\\nreturn e?\\\string\\\typeof e?e:e.source:null}function d(e){return f(\\\(?\\\,e,\\\)\\\)}\\nfunction u(e){return f(\\\(?:\\\,e,\\\)*\\\)}function h(e){return f(\\\(?:\\\,e,\\\)?\\\)}\\nfunction f(...e){return e.map((e>g(e))).join(\\\\\\)}function p(...e){const t(e>{\\nconst tee.length-1\\n;return\\\object\\\typeof t&&t.constructorObject?(e.splice(e.length-1,1),t):{}\\n})(e);return\\\(\\\+(t.capture?\\\\\\:\\\?:\\\)+e.map((e>g(e))).join(\\\|\\\)+\\\)\\\}\\nfunction b(e){return RegExp(e.toString()+\\\|\\\).exec(\\\\\\).length-1}\\nconst m/\\\\(?:^\\\\\\\\\\\\|\\\\\\\\.)*\\\\|\\\\(\\\\??|\\\\\\\\(1-90-9*)|\\\\\\\\./\\n;function E(e,{joinWith:t}){let n0;return e.map((e>{n+1;const tn\\n;let ig(e),r\\\\\\;for(;i.length>0;){const em.exec(i);if(!e){r+i;break}\\nr+i.substring(0,e.index),\\nii.substring(e.index+e0.length),\\\\\\\\\\\\\\e00&&e1?r+\\\\\\\\\\\\\\+(Number(e1)+t):(r+e0,\\n\\\(\\\e0&&n++)}return r})).map((e>`(${e})`)).join(t)}\\nconst x\\\a-zA-Z\\\\\\\\w*\\\,w\\\a-zA-Z_\\\\\\\\w*\\\,y\\\\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d+)?\\\,_\\\(-?)(\\\\\\\\b0xXa-fA-F0-9+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(eE-+?\\\\\\\\d+)?)\\\,v\\\\\\\\\\\b(0b01+)\\\,k{\\nbegin:\\\\\\\\\\\\\\\\\\\\\\\\\\\s\\\\\\\\S\\\,relevance:0},O{scope:\\\string\\\,begin:\\\\\\,end:\\\\\\,\\nillegal:\\\\\\\\\\\n\\\,contains:k},N{scope:\\\string\\\,begin:\\\,end:\\\,illegal:\\\\\\\\\\\n\\\,\\ncontains:k},M(e,t,n{})>{const is({scope:\\\comment\\\,begin:e,end:t,\\ncontains:},n);i.contains.push({scope:\\\doctag\\\,\\nbegin:\\\ *(?(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)\\\,\\nend:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})\\n;const rp(\\\I\\\,\\\a\\\,\\\is\\\,\\\so\\\,\\\us\\\,\\\to\\\,\\\at\\\,\\\if\\\,\\\in\\\,\\\it\\\,\\\on\\\,/A-Za-z+(d|ve|re|ll|t|s|n)/,/A-Za-z+-a-z+/,/A-Za-za-z{2,}/)\\n;return i.contains.push({begin:f(/ +/,\\\(\\\,r,/.?:?(. | )/,\\\){3}\\\)}),i\\n},SM(\\\//\\\,\\\$\\\),RM(\\\/\\\\\\\\*\\\,\\\\\\\\\\\*/\\\),jM(\\\#\\\,\\\$\\\);var AObject.freeze({\\n__proto__:null,MATCH_NOTHING_RE:/\\\\b\\\\B/,IDENT_RE:x,UNDERSCORE_IDENT_RE:w,\\nNUMBER_RE:y,C_NUMBER_RE:_,BINARY_NUMBER_RE:v,\\nRE_STARTERS_RE:\\\!|!|!|%|%|&|&&|&|\\\\\\\\*|\\\\\\\\*|\\\\\\\\+|\\\\\\\\+|,|-|-|/|/|:|;|\u003C\u003C|\u003C\u003C|\u003C|\u003C||||>>>|>>|>|>>>|>>|>|\\\\\\\\?|\\\\\\\\|\\\\\\\\{|\\\\\\\\(|\\\\\\\\^|\\\\\\\\^|\\\\\\\\||\\\\\\\\||\\\\\\\\|\\\\\\\\||~\\\,\\nSHEBANG:(e{})>{const t/^#! *\\\\//\\n;return e.binary&&(e.beginf(t,/.*\\\\b/,e.binary,/\\\\b.*/)),s({scope:\\\meta\\\,begin:t,\\nend:/$/,relevance:0,\\\on:begin\\\:(e,t)>{0!e.index&&t.ignoreMatch()}},e)},\\nBACKSLASH_ESCAPE:k,APOS_STRING_MODE:O,QUOTE_STRING_MODE:N,PHRASAL_WORDS_MODE:{\\nbegin:/\\\\b(a|an|the|are|Im|isnt|dont|doesnt|wont|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\\\b/\\n},COMMENT:M,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:R,HASH_COMMENT_MODE:j,\\nNUMBER_MODE:{scope:\\\number\\\,begin:y,relevance:0},C_NUMBER_MODE:{scope:\\\number\\\,\\nbegin:_,relevance:0},BINARY_NUMBER_MODE:{scope:\\\number\\\,begin:v,relevance:0},\\nREGEXP_MODE:{begin:/(?\\\\/^/\\\\n*\\\\/)/,contains:{scope:\\\regexp\\\,begin:/\\\\//,\\nend:/\\\\/gimuy*/,illegal:/\\\\n/,contains:k,{begin:/\\\\/,end:/\\\\/,relevance:0,\\ncontains:k}}},TITLE_MODE:{scope:\\\title\\\,begin:x,relevance:0},\\nUNDERSCORE_TITLE_MODE:{scope:\\\title\\\,begin:w,relevance:0},METHOD_GUARD:{\\nbegin:\\\\\\\\\\\.\\\\\\\\s*a-zA-Z_\\\\\\\\w*\\\,relevance:0},END_SAME_AS_BEGIN:e>Object.assign(e,{\\n\\\on:begin\\\:(e,t)>{t.data._beginMatche1},\\\on:end\\\:(e,t)>{\\nt.data._beginMatch!e1&&t.ignoreMatch()}})});function I(e,t){\\n\\\.\\\e.inpute.index-1&&t.ignoreMatch()}function T(e,t){\\nvoid 0!e.className&&(e.scopee.className,delete e.className)}function L(e,t){\\nt&&e.beginKeywords&&(e.begin\\\\\\\\\\\b(\\\+e.beginKeywords.split(\\\ \\\).join(\\\|\\\)+\\\)(?!\\\\\\\\.)(?\\\\\\\\b|\\\\\\\\s)\\\,\\ne.__beforeBeginI,e.keywordse.keywords||e.beginKeywords,delete e.beginKeywords,\\nvoid 0e.relevance&&(e.relevance0))}function B(e,t){\\nArray.isArray(e.illegal)&&(e.illegalp(...e.illegal))}function D(e,t){\\nif(e.match){\\nif(e.begin||e.end)throw Error(\\\begin & end are not supported with match\\\)\\n;e.begine.match,delete e.match}}function H(e,t){\\nvoid 0e.relevance&&(e.relevance1)}const P(e,t)>{if(!e.beforeMatch)return\\n;if(e.starts)throw Error(\\\beforeMatch cannot be used with starts\\\)\\n;const nObject.assign({},e);Object.keys(e).forEach((t>{delete et\\n})),e.keywordsn.keywords,e.beginf(n.beforeMatch,d(n.begin)),e.starts{\\nrelevance:0,contains:Object.assign(n,{endsParent:!0})\\n},e.relevance0,delete n.beforeMatch\\n},C\\\of\\\,\\\and\\\,\\\for\\\,\\\in\\\,\\\not\\\,\\\or\\\,\\\if\\\,\\\then\\\,\\\parent\\\,\\\list\\\,\\\value\\\\\n;function $(e,t,n\\\keyword\\\){const iObject.create(null)\\n;return\\\string\\\typeof e?r(n,e.split(\\\ \\\)):Array.isArray(e)?r(n,e):Object.keys(e).forEach((n>{\\nObject.assign(i,$(en,t,n))})),i;function r(e,n){\\nt&&(nn.map((e>e.toLowerCase()))),n.forEach((t>{const nt.split(\\\|\\\)\\n;in0e,U(n0,n1)}))}}function U(e,t){\\nreturn t?Number(t):(e>C.includes(e.toLowerCase()))(e)?0:1}const z{},Ke>{\\nconsole.error(e)},W(e,...t)>{console.log(\\\WARN: \\\+e,...t)},X(e,t)>{\\nz`${e}/${t}`||(console.log(`Deprecated as of ${e}. ${t}`),z`${e}/${t}`!0)\\n},GError();function Z(e,t,{key:n}){let i0;const ren,s{},o{}\\n;for(let e1;e\u003Ct.length;e++)oe+ire,se+i!0,i+b(te-1)\\n;eno,en._emits,en._multi!0}function F(e){(e>{\\ne.scope&&\\\object\\\typeof e.scope&&null!e.scope&&(e.beginScopee.scope,\\ndelete e.scope)})(e),\\\string\\\typeof e.beginScope&&(e.beginScope{\\n_wrap:e.beginScope}),\\\string\\\typeof e.endScope&&(e.endScope{_wrap:e.endScope\\n}),(e>{if(Array.isArray(e.begin)){\\nif(e.skip||e.excludeBegin||e.returnBegin)throw K(\\\skip, excludeBegin, returnBegin not compatible with beginScope: {}\\\),\\nG\\n;if(\\\object\\\!typeof e.beginScope||nulle.beginScope)throw K(\\\beginScope must be object\\\),\\nG;Z(e,e.begin,{key:\\\beginScope\\\}),e.beginE(e.begin,{joinWith:\\\\\\})}})(e),(e>{\\nif(Array.isArray(e.end)){\\nif(e.skip||e.excludeEnd||e.returnEnd)throw K(\\\skip, excludeEnd, returnEnd not compatible with endScope: {}\\\),\\nG\\n;if(\\\object\\\!typeof e.endScope||nulle.endScope)throw K(\\\endScope must be object\\\),\\nG;Z(e,e.end,{key:\\\endScope\\\}),e.endE(e.end,{joinWith:\\\\\\})}})(e)}function V(e){\\nfunction t(t,n){\\nreturn RegExp(g(t),\\\m\\\+(e.case_insensitive?\\\i\\\:\\\\\\)+(e.unicodeRegex?\\\u\\\:\\\\\\)+(n?\\\g\\\:\\\\\\))\\n}class n{constructor(){\\nthis.matchIndexes{},this.regexes,this.matchAt1,this.position0}\\naddRule(e,t){\\nt.positionthis.position++,this.matchIndexesthis.matchAtt,this.regexes.push(t,e),\\nthis.matchAt+b(e)+1}compile(){0this.regexes.length&&(this.exec()>null)\\n;const ethis.regexes.map((e>e1));this.matcherRet(E(e,{joinWith:\\\|\\\\\n}),!0),this.lastIndex0}exec(e){this.matcherRe.lastIndexthis.lastIndex\\n;const tthis.matcherRe.exec(e);if(!t)return null\\n;const nt.findIndex(((e,t)>t>0&&void 0!e)),ithis.matchIndexesn\\n;return t.splice(0,n),Object.assign(t,i)}}class i{constructor(){\\nthis.rules,this.multiRegexes,\\nthis.count0,this.lastIndex0,this.regexIndex0}getMatcher(e){\\nif(this.multiRegexese)return this.multiRegexese;const tnew n\\n;return this.rules.slice(e).forEach(((e,n)>t.addRule(e,n))),\\nt.compile(),this.multiRegexeset,t}resumingScanAtSamePosition(){\\nreturn 0!this.regexIndex}considerAll(){this.regexIndex0}addRule(e,t){\\nthis.rules.push(e,t),\\\begin\\\t.type&&this.count++}exec(e){\\nconst tthis.getMatcher(this.regexIndex);t.lastIndexthis.lastIndex\\n;let nt.exec(e)\\n;if(this.resumingScanAtSamePosition())if(n&&n.indexthis.lastIndex);else{\\nconst tthis.getMatcher(0);t.lastIndexthis.lastIndex+1,nt.exec(e)}\\nreturn n&&(this.regexIndex+n.position+1,\\nthis.regexIndexthis.count&&this.considerAll()),n}}\\nif(e.compilerExtensions||(e.compilerExtensions),\\ne.contains&&e.contains.includes(\\\self\\\))throw Error(\\\ERR: contains `self` is not supported at the top-level of a language. See documentation.\\\)\\n;return e.classNameAliasess(e.classNameAliases||{}),function n(r,o){const ar\\n;if(r.isCompiled)return a\\n;T,D,F,P.forEach((e>e(r,o))),e.compilerExtensions.forEach((e>e(r,o))),\\nr.__beforeBeginnull,L,B,H.forEach((e>e(r,o))),r.isCompiled!0;let cnull\\n;return\\\object\\\typeof r.keywords&&r.keywords.$pattern&&(r.keywordsObject.assign({},r.keywords),\\ncr.keywords.$pattern,\\ndelete r.keywords.$pattern),cc||/\\\\w+/,r.keywords&&(r.keywords$(r.keywords,e.case_insensitive)),\\na.keywordPatternRet(c,!0),\\no&&(r.begin||(r.begin/\\\\B|\\\\b/),a.beginRet(a.begin),r.end||r.endsWithParent||(r.end/\\\\B|\\\\b/),\\nr.end&&(a.endRet(a.end)),\\na.terminatorEndg(a.end)||\\\\\\,r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+(r.end?\\\|\\\:\\\\\\)+o.terminatorEnd)),\\nr.illegal&&(a.illegalRet(r.illegal)),\\nr.contains||(r.contains),r.contains.concat(...r.contains.map((e>(e>(e.variants&&!e.cachedVariants&&(e.cachedVariantse.variants.map((t>s(e,{\\nvariants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?s(e,{\\nstarts:e.starts?s(e.starts):null\\n}):Object.isFrozen(e)?s(e):e))(\\\self\\\e?r:e)))),r.contains.forEach((e>{n(e,a)\\n})),r.starts&&n(r.starts,o),a.matcher(e>{const tnew i\\n;return e.contains.forEach((e>t.addRule(e.begin,{rule:e,type:\\\begin\\\\\n}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:\\\end\\\\\n}),e.illegal&&t.addRule(e.illegal,{type:\\\illegal\\\}),t})(a),a}(e)}function q(e){\\nreturn!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{\\nconstructor(e,t){super(e),this.name\\\HTMLInjectionError\\\,this.htmlt}}\\nconst Yr,Qs,eeSymbol(\\\nomatch\\\);var te(e>{\\nconst tObject.create(null),rObject.create(null),s;let o!0\\n;const a\\\Could not find the language {}, did you forget to load/include a language module?\\\,c{\\ndisableAutodetect:!0,name:\\\Plain text\\\,contains:};let g{\\nignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,\\nlanguageDetectRe:/\\\\blang(?:uage)?-(\\\\w-+)\\\\b/i,classPrefix:\\\hljs-\\\,\\ncssSelector:\\\pre code\\\,languages:null,__emitter:l};function b(e){\\nreturn g.noHighlightRe.test(e)}function m(e,t,n){let i\\\\\\,r\\\\\\\\n;\\\object\\\typeof t?(ie,\\nnt.ignoreIllegals,rt.language):(X(\\\10.7.0\\\,\\\highlight(lang, code, ...args) has been deprecated.\\\),\\nX(\\\10.7.0\\\,\\\Please use highlight(code, options) instead.\\\\nhttps://github.com/highlightjs/highlight.js/issues/2277\\\),\\nre,it),void 0n&&(n!0);const s{code:i,language:r};N(\\\before:highlight\\\,s)\\n;const os.result?s.result:E(s.language,s.code,n)\\n;return o.codes.code,N(\\\after:highlight\\\,o),o}function E(e,n,r,s){\\nconst cObject.create(null);function l(){if(!O.keywords)return void M.addText(S)\\n;let e0;O.keywordPatternRe.lastIndex0;let tO.keywordPatternRe.exec(S),n\\\\\\\\n;for(;t;){n+S.substring(e,t.index)\\n;const ry.case_insensitive?t0.toLowerCase():t0,s(ir,O.keywordsi);if(s){\\nconste,is\\n;if(M.addText(n),n\\\\\\,cr(cr||0)+1,cr\u003C7&&(R+i),e.startsWith(\\\_\\\))n+t0;else{\\nconst ny.classNameAliasese||e;M.addKeyword(t0,n)}}else n+t0\\n;eO.keywordPatternRe.lastIndex,tO.keywordPatternRe.exec(S)}var i\\n;n+S.substr(e),M.addText(n)}function d(){null!O.subLanguage?(()>{\\nif(\\\\\\S)return;let enull;if(\\\string\\\typeof O.subLanguage){\\nif(!tO.subLanguage)return void M.addText(S)\\n;eE(O.subLanguage,S,!0,NO.subLanguage),NO.subLanguagee._top\\n}else ex(S,O.subLanguage.length?O.subLanguage:null)\\n;O.relevance>0&&(R+e.relevance),M.addSublanguage(e._emitter,e.language)\\n})():l(),S\\\\\\}function u(e,t){let n1;for(;void 0!tn;){if(!e._emitn){n++\\n;continue}const iy.classNameAliasesen||en,rtn\\n;i?M.addKeyword(r,i):(Sr,l(),S\\\\\\),n++}}function h(e,t){\\nreturn e.scope&&\\\string\\\typeof e.scope&&M.openNode(y.classNameAliasese.scope||e.scope),\\ne.beginScope&&(e.beginScope._wrap?(M.addKeyword(S,y.classNameAliasese.beginScope._wrap||e.beginScope._wrap),\\nS\\\\\\):e.beginScope._multi&&(u(e.beginScope,t),S\\\\\\)),OObject.create(e,{parent:{\\nvalue:O}}),O}function f(e,t,n){let r((e,t)>{const ne&&e.exec(t)\\n;return n&&0n.index})(e.endRe,n);if(r){if(e\\\on:end\\\){const nnew i(e)\\n;e\\\on:end\\\(t,n),n.isMatchIgnored&&(r!1)}if(r){\\nfor(;e.endsParent&&e.parent;)ee.parent;return e}}\\nif(e.endsWithParent)return f(e.parent,t,n)}function p(e){\\nreturn 0O.matcher.regexIndex?(S+e0,1):(I!0,0)}function b(e){\\nconst te0,in.substr(e.index),rf(O,e,i);if(!r)return ee;const sO\\n;O.endScope&&O.endScope._wrap?(d(),\\nM.addKeyword(t,O.endScope._wrap)):O.endScope&&O.endScope._multi?(d(),\\nu(O.endScope,e)):s.skip?S+t:(s.returnEnd||s.excludeEnd||(S+t),\\nd(),s.excludeEnd&&(St));do{\\nO.scope&&M.closeNode(),O.skip||O.subLanguage||(R+O.relevance),OO.parent\\n}while(O!r.parent);return r.starts&&h(r.starts,e),s.returnEnd?0:t.length}\\nlet m{};function w(t,s){const as&&s0;if(S+t,nulla)return d(),0\\n;if(\\\begin\\\m.type&&\\\end\\\s.type&&m.indexs.index&&\\\\\\a){\\nif(S+n.slice(s.index,s.index+1),!o){const tError(`0 width match regex (${e})`)\\n;throw t.languageNamee,t.badRulem.rule,t}return 1}\\nif(ms,\\\begin\\\s.type)return(e>{\\nconst te0,ne.rule,rnew i(n),sn.__beforeBegin,n\\\on:begin\\\\\n;for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return p(t)\\n;return n.skip?S+t:(n.excludeBegin&&(S+t),\\nd(),n.returnBegin||n.excludeBegin||(St)),h(n,e),n.returnBegin?0:t.length})(s)\\n;if(\\\illegal\\\s.type&&!r){\\nconst eError(Illegal lexeme \\\+a+\\\ for mode \\\+(O.scope||\\\\u003Cunnamed>\\\)+\\\)\\n;throw e.modeO,e}if(\\\end\\\s.type){const eb(s);if(e!ee)return e}\\nif(\\\illegal\\\s.type&&\\\\\\a)return 1\\n;if(A>1e5&&A>3*s.index)throw Error(\\\potential infinite loop, way more iterations than matches\\\)\\n;return S+a,a.length}const yv(e)\\n;if(!y)throw K(a.replace(\\\{}\\\,e)),Error(Unknown language: \\\+e+\\\)\\n;const _V(y);let k\\\\\\,Os||_;const N{},Mnew g.__emitter(g);(()>{const e\\n;for(let tO;t!y;tt.parent)t.scope&&e.unshift(t.scope)\\n;e.forEach((e>M.openNode(e)))})();let S\\\\\\,R0,j0,A0,I!1;try{\\nfor(O.matcher.considerAll();;){\\nA++,I?I!1:O.matcher.considerAll(),O.matcher.lastIndexj\\n;const eO.matcher.exec(n);if(!e)break;const tw(n.substring(j,e.index),e)\\n;je.index+t}return w(n.substr(j)),M.closeAllNodes(),M.finalize(),kM.toHTML(),{\\nlanguage:e,value:k,relevance:R,illegal:!1,_emitter:M,_top:O}}catch(t){\\nif(t.message&&t.message.includes(\\\Illegal\\\))return{language:e,value:Y(n),\\nillegal:!0,relevance:0,_illegalBy:{message:t.message,index:j,\\ncontext:n.slice(j-100,j+100),mode:t.mode,resultSoFar:k},_emitter:M};if(o)return{\\nlanguage:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:O}\\n;throw t}}function x(e,n){nn||g.languages||Object.keys(t);const i(e>{\\nconst t{value:Y(e),illegal:!1,relevance:0,_top:c,_emitter:new g.__emitter(g)}\\n;return t._emitter.addText(e),t})(e),rn.filter(v).filter(O).map((t>E(t,e,!1)))\\n;r.unshift(i);const sr.sort(((e,t)>{\\nif(e.relevance!t.relevance)return t.relevance-e.relevance\\n;if(e.language&&t.language){if(v(e.language).supersetOft.language)return 1\\n;if(v(t.language).supersetOfe.language)return-1}return 0})),o,as,lo\\n;return l.secondBesta,l}function w(e){let tnull;const n(e>{\\nlet te.className+\\\ \\\;t+e.parentNode?e.parentNode.className:\\\\\\\\n;const ng.languageDetectRe.exec(t);if(n){const tv(n1)\\n;return t||(W(a.replace(\\\{}\\\,n1)),\\nW(\\\Falling back to no-highlight mode for this block.\\\,e)),t?n1:\\\no-highlight\\\}\\nreturn t.split(/\\\\s+/).find((e>b(e)||v(e)))})(e);if(b(n))return\\n;if(N(\\\before:highlightElement\\\,{el:e,language:n\\n}),e.children.length>0&&(g.ignoreUnescapedHTML||(console.warn(\\\One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\\\),\\nconsole.warn(\\\https://github.com/highlightjs/highlight.js/wiki/security\\\),\\nconsole.warn(\\\The element with unescaped HTML:\\\),\\nconsole.warn(e)),g.throwUnescapedHTML))throw new J(\\\One of your code blocks includes unescaped HTML.\\\,e.innerHTML)\\n;te;const it.textContent,sn?m(i,{language:n,ignoreIllegals:!0}):x(i)\\n;e.innerHTMLs.value,((e,t,n)>{const it&&rt||n\\n;e.classList.add(\\\hljs\\\),e.classList.add(\\\language-\\\+i)\\n})(e,n,s.language),e.result{language:s.language,re:s.relevance,\\nrelevance:s.relevance},s.secondBest&&(e.secondBest{\\nlanguage:s.secondBest.language,relevance:s.secondBest.relevance\\n}),N(\\\after:highlightElement\\\,{el:e,result:s,text:i})}let y!1;function _(){\\n\\\loading\\\!document.readyState?document.querySelectorAll(g.cssSelector).forEach(w):y!0\\n}function v(e){return e(e||\\\\\\).toLowerCase(),te||tre}\\nfunction k(e,{languageName:t}){\\\string\\\typeof e&&(ee),e.forEach((e>{\\nre.toLowerCase()t}))}function O(e){const tv(e)\\n;return t&&!t.disableAutodetect}function N(e,t){const ne;s.forEach((e>{\\nen&&en(t)}))}\\n\\\undefined\\\!typeof window&&window.addEventListener&&window.addEventListener(\\\DOMContentLoaded\\\,(()>{\\ny&&_()}),!1),Object.assign(e,{highlight:m,highlightAuto:x,highlightAll:_,\\nhighlightElement:w,\\nhighlightBlock:e>(X(\\\10.7.0\\\,\\\highlightBlock will be removed entirely in v12.0\\\),\\nX(\\\10.7.0\\\,\\\Please use highlightElement now.\\\),w(e)),configure:e>{gQ(g,e)},\\ninitHighlighting:()>{\\n_(),X(\\\10.6.0\\\,\\\initHighlighting() deprecated. Use highlightAll() now.\\\)},\\ninitHighlightingOnLoad:()>{\\n_(),X(\\\10.6.0\\\,\\\initHighlightingOnLoad() deprecated. Use highlightAll() now.\\\)\\n},registerLanguage:(n,i)>{let rnull;try{ri(e)}catch(e){\\nif(K(\\\Language definition for {} could not be registered.\\\.replace(\\\{}\\\,n)),\\n!o)throw e;K(e),rc}\\nr.name||(r.namen),tnr,r.rawDefinitioni.bind(null,e),r.aliases&&k(r.aliases,{\\nlanguageName:n})},unregisterLanguage:e>{delete te\\n;for(const t of Object.keys(r))rte&&delete rt},\\nlistLanguages:()>Object.keys(t),getLanguage:v,registerAliases:k,\\nautoDetection:O,inherit:Q,addPlugin:e>{(e>{\\ne\\\before:highlightBlock\\\&&!e\\\before:highlightElement\\\&&(e\\\before:highlightElement\\\t>{\\ne\\\before:highlightBlock\\\(Object.assign({block:t.el},t))\\n}),e\\\after:highlightBlock\\\&&!e\\\after:highlightElement\\\&&(e\\\after:highlightElement\\\t>{\\ne\\\after:highlightBlock\\\(Object.assign({block:t.el},t))})})(e),s.push(e)}\\n}),e.debugMode()>{o!1},e.safeMode()>{o!0\\n},e.versionString\\\11.4.0\\\,e.regex{concat:f,lookahead:d,either:p,optional:h,\\nanyNumberOfTimes:u};for(const e in A)\\\object\\\typeof Ae&&n(Ae)\\n;return Object.assign(e,A),e})({});return te}()\\n;\\\object\\\typeof exports&&\\\undefined\\\!typeof module&&(module.exportshljs);/*! `c` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const ne.regex,te.COMMENT(\\\//\\\,\\\$\\\,{\\ncontains:{begin:/\\\\\\\\\\\\n/}\\n}),s\\\a-zA-Z_\\\\\\\\w*::\\\,a\\\(decltype\\\\\\\\(auto\\\\\\\\)|\\\+n.optional(s)+\\\a-zA-Z_\\\\\\\\w*\\\+n.optional(\\\\u003C^\u003C>+>\\\)+\\\)\\\,r{\\nclassName:\\\type\\\,variants:{begin:\\\\\\\\\\\ba-z\\\\\\\\d_*_t\\\\\\\\b\\\},{\\nmatch:/\\\\batomic_a-z{3,6}\\\\b/}},i{className:\\\string\\\,variants:{\\nbegin:(u8?|U|L)?\\\,end:\\\,illegal:\\\\\\\\\\\n\\\,contains:e.BACKSLASH_ESCAPE},{\\nbegin:\\\(u8?|U|L)?(\\\\\\\\\\\\\\\\(x0-9A-Fa-f{2}|u0-9A-Fa-f{4,8}|0-7{3}|\\\\\\\\S)|.)\\\,\\nend:\\\\\\,illegal:\\\.\\\},e.END_SAME_AS_BEGIN({\\nbegin:/(?:u8?|U|L)?R\\\(^()\\\\\\\\ {0,16})\\\\(/,end:/\\\\)(^()\\\\\\\\ {0,16})\\\/})},l{\\nclassName:\\\number\\\,variants:{begin:\\\\\\\\\\\b(0b01+)\\\},{\\nbegin:\\\(-?)\\\\\\\\b(\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)\\\\\n},{\\nbegin:\\\(-?)(\\\\\\\\b0xXa-fA-F0-9+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(eE-+?\\\\\\\\d+)?)\\\\\n},relevance:0},o{className:\\\meta\\\,begin:/#\\\\s*a-z+\\\\b/,end:/$/,keywords:{\\nkeyword:\\\if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\\\\\n},contains:{begin:/\\\\\\\\\\\\n/,relevance:0},e.inherit(i,{className:\\\string\\\}),{\\nclassName:\\\string\\\,begin:/\u003C.*?>/},t,e.C_BLOCK_COMMENT_MODE},c{\\nclassName:\\\title\\\,begin:n.optional(s)+e.IDENT_RE,relevance:0\\n},dn.optional(s)+e.IDENT_RE+\\\\\\\\\\\s*\\\\\\\\(\\\,u{\\nkeyword:\\\asm\\\,\\\auto\\\,\\\break\\\,\\\case\\\,\\\continue\\\,\\\default\\\,\\\do\\\,\\\else\\\,\\\enum\\\,\\\extern\\\,\\\for\\\,\\\fortran\\\,\\\goto\\\,\\\if\\\,\\\inline\\\,\\\register\\\,\\\restrict\\\,\\\return\\\,\\\sizeof\\\,\\\struct\\\,\\\switch\\\,\\\typedef\\\,\\\union\\\,\\\volatile\\\,\\\while\\\,\\\_Alignas\\\,\\\_Alignof\\\,\\\_Atomic\\\,\\\_Generic\\\,\\\_Noreturn\\\,\\\_Static_assert\\\,\\\_Thread_local\\\,\\\alignas\\\,\\\alignof\\\,\\\noreturn\\\,\\\static_assert\\\,\\\thread_local\\\,\\\_Pragma\\\,\\ntype:\\\float\\\,\\\double\\\,\\\signed\\\,\\\unsigned\\\,\\\int\\\,\\\short\\\,\\\long\\\,\\\char\\\,\\\void\\\,\\\_Bool\\\,\\\_Complex\\\,\\\_Imaginary\\\,\\\_Decimal32\\\,\\\_Decimal64\\\,\\\_Decimal128\\\,\\\const\\\,\\\static\\\,\\\complex\\\,\\\bool\\\,\\\imaginary\\\,\\nliteral:\\\true false NULL\\\,\\nbuilt_in:\\\std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr\\\\\n},go,r,t,e.C_BLOCK_COMMENT_MODE,l,i,m{variants:{begin://,end:/;/},{\\nbegin:/\\\\(/,end:/\\\\)/},{beginKeywords:\\\new throw return else\\\,end:/;/},\\nkeywords:u,contains:g.concat({begin:/\\\\(/,end:/\\\\)/,keywords:u,\\ncontains:g.concat(\\\self\\\),relevance:0}),relevance:0},p{\\nbegin:\\\(\\\+a+\\\\\\\\\\\*&\\\\\\\\s+)+\\\+d,returnBegin:!0,end:/{;/,excludeEnd:!0,\\nkeywords:u,illegal:/^\\\\w\\\\s\\\\*&:\u003C>./,contains:{begin:\\\decltype\\\\\\\\(auto\\\\\\\\)\\\,\\nkeywords:u,relevance:0},{begin:d,returnBegin:!0,contains:e.inherit(c,{\\nclassName:\\\title.function\\\}),relevance:0},{relevance:0,match:/,/},{\\nclassName:\\\params\\\,begin:/\\\\(/,end:/\\\\)/,keywords:u,relevance:0,\\ncontains:t,e.C_BLOCK_COMMENT_MODE,i,l,r,{begin:/\\\\(/,end:/\\\\)/,keywords:u,\\nrelevance:0,contains:\\\self\\\,t,e.C_BLOCK_COMMENT_MODE,i,l,r}\\n},r,t,e.C_BLOCK_COMMENT_MODE,o};return{name:\\\C\\\,aliases:\\\h\\\,keywords:u,\\ndisableAutodetect:!0,illegal:\\\\u003C/\\\,contains:.concat(m,p,g,o,{\\nbegin:e.IDENT_RE+\\\::\\\,keywords:u},{className:\\\class\\\,\\nbeginKeywords:\\\enum class struct union\\\,end:/{;:\u003C>/,contains:{\\nbeginKeywords:\\\final class struct\\\},e.TITLE_MODE}),exports:{preprocessor:o,\\nstrings:i,keywords:u}}}})();hljs.registerLanguage(\\\c\\\,e)})();/*! `xml` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ae.regex,na.concat(/A-Z_/,a.optional(/A-Z0-9_.-*:/),/A-Z0-9_.-*/),s{\\nclassName:\\\symbol\\\,begin:/&a-z+;|-9+;| -f0-9+;/},t{begin:/\\\\s/,\\ncontains:{className:\\\keyword\\\,begin:/#?a-z_a-z1-9_-+/,illegal:/\\\\n/}\\n},ie.inherit(t,{begin:/\\\\(/,end:/\\\\)/}),ce.inherit(e.APOS_STRING_MODE,{\\nclassName:\\\string\\\}),le.inherit(e.QUOTE_STRING_MODE,{className:\\\string\\\}),r{\\nendsWithParent:!0,illegal:/\u003C/,relevance:0,contains:{className:\\\attr\\\,\\nbegin:/A-Za-z0-9._:-+/,relevance:0},{begin:/\\\\s*/,relevance:0,contains:{\\nclassName:\\\string\\\,endsParent:!0,variants:{begin:/\\\/,end:/\\\/,contains:s},{\\nbegin://,end://,contains:s},{begin:/^\\\\s\\\\u003C>`+/}}}};return{\\nname:\\\HTML, XML\\\,\\naliases:\\\html\\\,\\\xhtml\\\,\\\rss\\\,\\\atom\\\,\\\xjb\\\,\\\xsd\\\,\\\xsl\\\,\\\plist\\\,\\\wsf\\\,\\\svg\\\,\\ncase_insensitive:!0,contains:{className:\\\meta\\\,begin:/\u003C!a-z/,end:/>/,\\nrelevance:10,contains:t,l,c,i,{begin:/\\\\/,end:/\\\\/,contains:{className:\\\meta\\\,\\nbegin:/\u003C!a-z/,end:/>/,contains:t,i,l,c}}},e.COMMENT(/\u003C!--/,/-->/,{\\nrelevance:10}),{begin:/\u003C!\\\\CDATA\\\\/,end:/\\\\\\\\>/,relevance:10},s,{\\nclassName:\\\meta\\\,begin:/\u003C\\\\?xml/,end:/\\\\?>/,relevance:10},{className:\\\tag\\\,\\nbegin:/\u003Cstyle(?\\\\s|>)/,end:/>/,keywords:{name:\\\style\\\},contains:r,starts:{\\nend:/\u003C\\\\/style>/,returnEnd:!0,subLanguage:\\\css\\\,\\\xml\\\}},{className:\\\tag\\\,\\nbegin:/\u003Cscript(?\\\\s|>)/,end:/>/,keywords:{name:\\\script\\\},contains:r,starts:{\\nend:/\u003C\\\\/script>/,returnEnd:!0,subLanguage:\\\javascript\\\,\\\handlebars\\\,\\\xml\\\}},{\\nclassName:\\\tag\\\,begin:/\u003C>|\u003C\\\\/>/},{className:\\\tag\\\,\\nbegin:a.concat(/\u003C/,a.lookahead(a.concat(n,a.either(/\\\\/>/,/>/,/\\\\s/)))),\\nend:/\\\\/?>/,contains:{className:\\\name\\\,begin:n,relevance:0,starts:r}},{\\nclassName:\\\tag\\\,begin:a.concat(/\u003C\\\\//,a.lookahead(a.concat(n,/>/))),contains:{\\nclassName:\\\name\\\,begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}}}}\\n})();hljs.registerLanguage(\\\xml\\\,e)})();/*! `markdown` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n{begin:/\u003C\\\\/?A-Za-z_/,\\nend:\\\>\\\,subLanguage:\\\xml\\\,relevance:0},a{variants:{begin:/\\\\.+?\\\\\\\\.*?\\\\/,\\nrelevance:0},{\\nbegin:/\\\\.+?\\\\\\\\(((data|javascript|mailto):|(?:http|ftp)s?:\\\\/\\\\/).*?\\\\)/,\\nrelevance:2},{\\nbegin:e.regex.concat(/\\\\.+?\\\\\\\\(/,/A-Za-zA-Za-z0-9+.-*/,/:\\\\/\\\\/.*?\\\\)/),\\nrelevance:2},{begin:/\\\\.+?\\\\\\\\(./?.*?\\\\)/,relevance:1},{\\nbegin:/\\\\.*?\\\\\\\\(.*?\\\\)/,relevance:0},returnBegin:!0,contains:{match:/\\\\(?\\\\)/\\n},{className:\\\string\\\,relevance:0,begin:\\\\\\\\\\\\\\,end:\\\\\\\\\\\\\\,excludeBegin:!0,\\nreturnEnd:!0},{className:\\\link\\\,relevance:0,begin:\\\\\\\\\\\\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\,\\nexcludeBegin:!0,excludeEnd:!0},{className:\\\symbol\\\,relevance:0,begin:\\\\\\\\\\\\\\\\\\\\\\,\\nend:\\\\\\\\\\\\\\,excludeBegin:!0,excludeEnd:!0}},i{className:\\\strong\\\,contains:,\\nvariants:{begin:/_{2}/,end:/_{2}/},{begin:/\\\\*{2}/,end:/\\\\*{2}/}},s{\\nclassName:\\\emphasis\\\,contains:,variants:{begin:/\\\\*(?!\\\\*)/,end:/\\\\*/},{\\nbegin:/_(?!_)/,end:/_/,relevance:0}};i.contains.push(s),s.contains.push(i)\\n;let cn,a\\n;return i.containsi.contains.concat(c),s.containss.contains.concat(c),\\ncc.concat(i,s),{name:\\\Markdown\\\,aliases:\\\md\\\,\\\mkdown\\\,\\\mkd\\\,contains:{\\nclassName:\\\section\\\,variants:{begin:\\\^#{1,6}\\\,end:\\\$\\\,contains:c},{\\nbegin:\\\(?^.+?\\\\\\\\n-{2,}$)\\\,contains:{begin:\\\^-*$\\\},{begin:\\\^\\\,end:\\\\\\\\\\\n\\\,\\ncontains:c}}},n,{className:\\\bullet\\\,begin:\\\^ \\\\t*(*+-|(\\\\\\\\d+\\\\\\\\.))(?\\\\\\\\s+)\\\,\\nend:\\\\\\\\\\\s+\\\,excludeEnd:!0},i,s,{className:\\\quote\\\,begin:\\\^>\\\\\\\\s+\\\,contains:c,\\nend:\\\$\\\},{className:\\\code\\\,variants:{begin:\\\(`{3,})^`(.|\\\\\\\\n)*?\\\\\\\\1`* *\\\},{\\nbegin:\\\(~{3,})^~(.|\\\\\\\\n)*?\\\\\\\\1~* *\\\},{begin:\\\```\\\,end:\\\```+ *$\\\},{\\nbegin:\\\~~~\\\,end:\\\~~~+ *$\\\},{begin:\\\`.+?`\\\},{begin:\\\(?^( {4}|\\\\\\\\t))\\\,\\ncontains:{begin:\\\^( {4}|\\\\\\\\t)\\\,end:\\\(\\\\\\\\n)$\\\},relevance:0}},{\\nbegin:\\\^-\\\\\\\\*{3,}\\\,end:\\\$\\\},a,{begin:/^\\\\^\\\\n+\\\\:/,returnBegin:!0,contains:{\\nclassName:\\\symbol\\\,begin:/\\\\/,end:/\\\\/,excludeBegin:!0,excludeEnd:!0},{\\nclassName:\\\link\\\,begin:/:\\\\s*/,end:/$/,excludeBegin:!0}}}}})()\\n;hljs.registerLanguage(\\\markdown\\\,e)})();/*! `bash` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const se.regex,t{},n{begin:/\\\\$\\\\{/,\\nend:/\\\\}/,contains:\\\self\\\,{begin:/:-/,contains:t}};Object.assign(t,{\\nclassName:\\\variable\\\,variants:{\\nbegin:s.concat(/\\\\$\\\\w\\\\d#@\\\\w\\\\d_*/,\\\(?!\\\\\\\\w\\\\\\\\d)(?!$)\\\)},n});const a{\\nclassName:\\\subst\\\,begin:/\\\\$\\\\(/,end:/\\\\)/,contains:e.BACKSLASH_ESCAPE},i{\\nbegin:/\u003C\u003C-?\\\\s*(?\\\\w+)/,starts:{contains:e.END_SAME_AS_BEGIN({begin:/(\\\\w+)/,\\nend:/(\\\\w+)/,className:\\\string\\\})}},c{className:\\\string\\\,begin:/\\\/,end:/\\\/,\\ncontains:e.BACKSLASH_ESCAPE,t,a};a.contains.push(c);const o{begin:/\\\\$\\\\(\\\\(/,\\nend:/\\\\)\\\\)/,contains:{begin:/\\\\d+#0-9a-f+/,className:\\\number\\\},e.NUMBER_MODE,t\\n},re.SHEBANG({binary:\\\(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)\\\,relevance:10\\n}),l{className:\\\function\\\,begin:/\\\\w\\\\w\\\\d_*\\\\s*\\\\(\\\\s*\\\\)\\\\s*\\\\{/,returnBegin:!0,\\ncontains:e.inherit(e.TITLE_MODE,{begin:/\\\\w\\\\w\\\\d_*/}),relevance:0};return{\\nname:\\\Bash\\\,aliases:\\\sh\\\,keywords:{$pattern:/\\\\ba-z._-+\\\\b/,\\nkeyword:\\\if\\\,\\\then\\\,\\\else\\\,\\\elif\\\,\\\fi\\\,\\\for\\\,\\\while\\\,\\\in\\\,\\\do\\\,\\\done\\\,\\\case\\\,\\\esac\\\,\\\function\\\,\\nliteral:\\\true\\\,\\\false\\\,\\nbuilt_in:\\\break\\\,\\\cd\\\,\\\continue\\\,\\\eval\\\,\\\exec\\\,\\\exit\\\,\\\export\\\,\\\getopts\\\,\\\hash\\\,\\\pwd\\\,\\\readonly\\\,\\\return\\\,\\\shift\\\,\\\test\\\,\\\times\\\,\\\trap\\\,\\\umask\\\,\\\unset\\\,\\\alias\\\,\\\bind\\\,\\\builtin\\\,\\\caller\\\,\\\command\\\,\\\declare\\\,\\\echo\\\,\\\enable\\\,\\\help\\\,\\\let\\\,\\\local\\\,\\\logout\\\,\\\mapfile\\\,\\\printf\\\,\\\read\\\,\\\readarray\\\,\\\source\\\,\\\type\\\,\\\typeset\\\,\\\ulimit\\\,\\\unalias\\\,\\\set\\\,\\\shopt\\\,\\\autoload\\\,\\\bg\\\,\\\bindkey\\\,\\\bye\\\,\\\cap\\\,\\\chdir\\\,\\\clone\\\,\\\comparguments\\\,\\\compcall\\\,\\\compctl\\\,\\\compdescribe\\\,\\\compfiles\\\,\\\compgroups\\\,\\\compquote\\\,\\\comptags\\\,\\\comptry\\\,\\\compvalues\\\,\\\dirs\\\,\\\disable\\\,\\\disown\\\,\\\echotc\\\,\\\echoti\\\,\\\emulate\\\,\\\fc\\\,\\\fg\\\,\\\float\\\,\\\functions\\\,\\\getcap\\\,\\\getln\\\,\\\history\\\,\\\integer\\\,\\\jobs\\\,\\\kill\\\,\\\limit\\\,\\\log\\\,\\\noglob\\\,\\\popd\\\,\\\print\\\,\\\pushd\\\,\\\pushln\\\,\\\rehash\\\,\\\sched\\\,\\\setcap\\\,\\\setopt\\\,\\\stat\\\,\\\suspend\\\,\\\ttyctl\\\,\\\unfunction\\\,\\\unhash\\\,\\\unlimit\\\,\\\unsetopt\\\,\\\vared\\\,\\\wait\\\,\\\whence\\\,\\\where\\\,\\\which\\\,\\\zcompile\\\,\\\zformat\\\,\\\zftp\\\,\\\zle\\\,\\\zmodload\\\,\\\zparseopts\\\,\\\zprof\\\,\\\zpty\\\,\\\zregexparse\\\,\\\zsocket\\\,\\\zstyle\\\,\\\ztcp\\\,\\\chcon\\\,\\\chgrp\\\,\\\chown\\\,\\\chmod\\\,\\\cp\\\,\\\dd\\\,\\\df\\\,\\\dir\\\,\\\dircolors\\\,\\\ln\\\,\\\ls\\\,\\\mkdir\\\,\\\mkfifo\\\,\\\mknod\\\,\\\mktemp\\\,\\\mv\\\,\\\realpath\\\,\\\rm\\\,\\\rmdir\\\,\\\shred\\\,\\\sync\\\,\\\touch\\\,\\\truncate\\\,\\\vdir\\\,\\\b2sum\\\,\\\base32\\\,\\\base64\\\,\\\cat\\\,\\\cksum\\\,\\\comm\\\,\\\csplit\\\,\\\cut\\\,\\\expand\\\,\\\fmt\\\,\\\fold\\\,\\\head\\\,\\\join\\\,\\\md5sum\\\,\\\nl\\\,\\\numfmt\\\,\\\od\\\,\\\paste\\\,\\\ptx\\\,\\\pr\\\,\\\sha1sum\\\,\\\sha224sum\\\,\\\sha256sum\\\,\\\sha384sum\\\,\\\sha512sum\\\,\\\shuf\\\,\\\sort\\\,\\\split\\\,\\\sum\\\,\\\tac\\\,\\\tail\\\,\\\tr\\\,\\\tsort\\\,\\\unexpand\\\,\\\uniq\\\,\\\wc\\\,\\\arch\\\,\\\basename\\\,\\\chroot\\\,\\\date\\\,\\\dirname\\\,\\\du\\\,\\\echo\\\,\\\env\\\,\\\expr\\\,\\\factor\\\,\\\groups\\\,\\\hostid\\\,\\\id\\\,\\\link\\\,\\\logname\\\,\\\nice\\\,\\\nohup\\\,\\\nproc\\\,\\\pathchk\\\,\\\pinky\\\,\\\printenv\\\,\\\printf\\\,\\\pwd\\\,\\\readlink\\\,\\\runcon\\\,\\\seq\\\,\\\sleep\\\,\\\stat\\\,\\\stdbuf\\\,\\\stty\\\,\\\tee\\\,\\\test\\\,\\\timeout\\\,\\\tty\\\,\\\uname\\\,\\\unlink\\\,\\\uptime\\\,\\\users\\\,\\\who\\\,\\\whoami\\\,\\\yes\\\\\n},contains:r,e.SHEBANG(),l,o,e.HASH_COMMENT_MODE,i,{match:/(\\\\/a-z._-+)+/},c,{\\nclassName:\\\\\\,begin:/\\\\\\\\\\\/},{className:\\\string\\\,begin://,end://},t}}})()\\n;hljs.registerLanguage(\\\bash\\\,e)})();/*! `dockerfile` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>({name:\\\Dockerfile\\\,aliases:\\\docker\\\,\\ncase_insensitive:!0,\\nkeywords:\\\from\\\,\\\maintainer\\\,\\\expose\\\,\\\env\\\,\\\arg\\\,\\\user\\\,\\\onbuild\\\,\\\stopsignal\\\,\\ncontains:e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{\\nbeginKeywords:\\\run cmd entrypoint volume add copy workdir label healthcheck shell\\\,\\nstarts:{end:/^\\\\\\\\$/,subLanguage:\\\bash\\\}},illegal:\\\\u003C/\\\})})()\\n;hljs.registerLanguage(\\\dockerfile\\\,e)})();/*! `kotlin` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;var e\\\\\\\\\\\.(0-9(_*0-9)*)\\\,n\\\0-9a-fA-F(_*0-9a-fA-F)*\\\,a{\\nclassName:\\\number\\\,variants:{\\nbegin:`(\\\\\\\\b(0-9(_*0-9)*)((${e})|\\\\\\\\.)?|(${e}))eE+-?(0-9(_*0-9)*)fFdD?\\\\\\\\b`\\n},{begin:`\\\\\\\\b(0-9(_*0-9)*)((${e})fFdD?\\\\\\\\b|\\\\\\\\.(fFdD\\\\\\\\b)?)`},{\\nbegin:`(${e})fFdD?\\\\\\\\b`},{begin:\\\\\\\\\\\b(0-9(_*0-9)*)fFdD\\\\\\\\b\\\},{\\nbegin:`\\\\\\\\b0xX((${n})\\\\\\\\.?|(${n})?\\\\\\\\.(${n}))pP+-?(0-9(_*0-9)*)fFdD?\\\\\\\\b`\\n},{begin:\\\\\\\\\\\b(0|1-9(_*0-9)*)lL?\\\\\\\\b\\\},{begin:`\\\\\\\\b0xX(${n})lL?\\\\\\\\b`},{\\nbegin:\\\\\\\\\\\b0(_*0-7)*lL?\\\\\\\\b\\\},{begin:\\\\\\\\\\\b0bB01(_*01)*lL?\\\\\\\\b\\\},\\nrelevance:0};return e>{const n{\\nkeyword:\\\abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual\\\,\\nbuilt_in:\\\Byte Short Char Int Long Boolean Float Double Void Unit Nothing\\\,\\nliteral:\\\true false null\\\},i{className:\\\symbol\\\,begin:e.UNDERSCORE_IDENT_RE+\\\@\\\\\n},s{className:\\\subst\\\,begin:/\\\\$\\\\{/,end:/\\\\}/,contains:e.C_NUMBER_MODE},t{\\nclassName:\\\variable\\\,begin:\\\\\\\\\\\$\\\+e.UNDERSCORE_IDENT_RE},r{className:\\\string\\\,\\nvariants:{begin:\\\\\\\\\,end:\\\\\\\\\(?^\\\),contains:t,s},{begin:\\\\\\,end:\\\\\\,\\nillegal:/\\\\n/,contains:e.BACKSLASH_ESCAPE},{begin:\\\,end:\\\,illegal:/\\\\n/,\\ncontains:e.BACKSLASH_ESCAPE,t,s}};s.contains.push(r);const l{\\nclassName:\\\meta\\\,\\nbegin:\\\@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\\\\\s*:(?:\\\\\\\\s*\\\+e.UNDERSCORE_IDENT_RE+\\\)?\\\\\n},c{className:\\\meta\\\,begin:\\\@\\\+e.UNDERSCORE_IDENT_RE,contains:{begin:/\\\\(/,\\nend:/\\\\)/,contains:e.inherit(r,{className:\\\string\\\})}\\n},oa,be.COMMENT(\\\/\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{contains:e.C_BLOCK_COMMENT_MODE}),E{\\nvariants:{className:\\\type\\\,begin:e.UNDERSCORE_IDENT_RE},{begin:/\\\\(/,end:/\\\\)/,\\ncontains:}},dE;return d.variants1.containsE,E.variants1.containsd,\\n{name:\\\Kotlin\\\,aliases:\\\kt\\\,\\\kts\\\,keywords:n,\\ncontains:e.COMMENT(\\\/\\\\\\\\*\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{relevance:0,contains:{className:\\\doctag\\\,\\nbegin:\\\@A-Za-z+\\\}}),e.C_LINE_COMMENT_MODE,b,{className:\\\keyword\\\,\\nbegin:/\\\\b(break|continue|return|this)\\\\b/,starts:{contains:{className:\\\symbol\\\,\\nbegin:/@\\\\w+/}}},i,l,c,{className:\\\function\\\,beginKeywords:\\\fun\\\,end:\\\(|$\\\,\\nreturnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:{\\nbegin:e.UNDERSCORE_IDENT_RE+\\\\\\\\\\\s*\\\\\\\\(\\\,returnBegin:!0,relevance:0,\\ncontains:e.UNDERSCORE_TITLE_MODE},{className:\\\type\\\,begin:/\u003C/,end:/>/,\\nkeywords:\\\reified\\\,relevance:0},{className:\\\params\\\,begin:/\\\\(/,end:/\\\\)/,\\nendsParent:!0,keywords:n,relevance:0,contains:{begin:/:/,end:/,\\\\//,\\nendsWithParent:!0,contains:E,e.C_LINE_COMMENT_MODE,b,relevance:0\\n},e.C_LINE_COMMENT_MODE,b,l,c,r,e.C_NUMBER_MODE},b},{className:\\\class\\\,\\nbeginKeywords:\\\class interface trait\\\,end:/:\\\\{(|$/,excludeEnd:!0,\\nillegal:\\\extends implements\\\,contains:{\\nbeginKeywords:\\\public protected internal private constructor\\\\\n},e.UNDERSCORE_TITLE_MODE,{className:\\\type\\\,begin:/\u003C/,end:/>/,excludeBegin:!0,\\nexcludeEnd:!0,relevance:0},{className:\\\type\\\,begin:/,:\\\\s*/,end:/\u003C\\\\(,|$/,\\nexcludeBegin:!0,returnEnd:!0},l,c},r,{className:\\\meta\\\,begin:\\\^#!/usr/bin/env\\\,\\nend:\\\$\\\,illegal:\\\\\\\n\\\},o}}})();hljs.registerLanguage(\\\kotlin\\\,e)})();/*! `typescript` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;const e\\\A-Za-z$_0-9A-Za-z$_*\\\,n\\\as\\\,\\\in\\\,\\\of\\\,\\\if\\\,\\\for\\\,\\\while\\\,\\\finally\\\,\\\var\\\,\\\new\\\,\\\function\\\,\\\do\\\,\\\return\\\,\\\void\\\,\\\else\\\,\\\break\\\,\\\catch\\\,\\\instanceof\\\,\\\with\\\,\\\throw\\\,\\\case\\\,\\\default\\\,\\\try\\\,\\\switch\\\,\\\continue\\\,\\\typeof\\\,\\\delete\\\,\\\let\\\,\\\yield\\\,\\\const\\\,\\\class\\\,\\\debugger\\\,\\\async\\\,\\\await\\\,\\\static\\\,\\\import\\\,\\\from\\\,\\\export\\\,\\\extends\\\,a\\\true\\\,\\\false\\\,\\\null\\\,\\\undefined\\\,\\\NaN\\\,\\\Infinity\\\,t\\\Object\\\,\\\Function\\\,\\\Boolean\\\,\\\Symbol\\\,\\\Math\\\,\\\Date\\\,\\\Number\\\,\\\BigInt\\\,\\\String\\\,\\\RegExp\\\,\\\Array\\\,\\\Float32Array\\\,\\\Float64Array\\\,\\\Int8Array\\\,\\\Uint8Array\\\,\\\Uint8ClampedArray\\\,\\\Int16Array\\\,\\\Int32Array\\\,\\\Uint16Array\\\,\\\Uint32Array\\\,\\\BigInt64Array\\\,\\\BigUint64Array\\\,\\\Set\\\,\\\Map\\\,\\\WeakSet\\\,\\\WeakMap\\\,\\\ArrayBuffer\\\,\\\SharedArrayBuffer\\\,\\\Atomics\\\,\\\DataView\\\,\\\JSON\\\,\\\Promise\\\,\\\Generator\\\,\\\GeneratorFunction\\\,\\\AsyncFunction\\\,\\\Reflect\\\,\\\Proxy\\\,\\\Intl\\\,\\\WebAssembly\\\,s\\\Error\\\,\\\EvalError\\\,\\\InternalError\\\,\\\RangeError\\\,\\\ReferenceError\\\,\\\SyntaxError\\\,\\\TypeError\\\,\\\URIError\\\,r\\\setInterval\\\,\\\setTimeout\\\,\\\clearInterval\\\,\\\clearTimeout\\\,\\\require\\\,\\\exports\\\,\\\eval\\\,\\\isFinite\\\,\\\isNaN\\\,\\\parseFloat\\\,\\\parseInt\\\,\\\decodeURI\\\,\\\decodeURIComponent\\\,\\\encodeURI\\\,\\\encodeURIComponent\\\,\\\escape\\\,\\\unescape\\\,c\\\arguments\\\,\\\this\\\,\\\super\\\,\\\console\\\,\\\window\\\,\\\document\\\,\\\localStorage\\\,\\\module\\\,\\\global\\\,i.concat(r,t,s)\\n;function o(o){const lo.regex,de,b{begin:/\u003CA-Za-z0-9\\\\\\\\._:-+/,\\nend:/\\\\/A-Za-z0-9\\\\\\\\._:-+>|\\\\/>/,isTrulyOpeningTag:(e,n)>{\\nconst ae0.length+e.index,te.inputa\\n;if(\\\\u003C\\\t||\\\,\\\t)return void n.ignoreMatch();let s\\n;\\\>\\\t&&(((e,{after:n})>{const a\\\\u003C/\\\+e0.slice(1)\\n;return-1!e.input.indexOf(a,n)})(e,{after:a\\n})||n.ignoreMatch()),(se.input.substr(a).match(/^\\\\s+extends\\\\s+/))&&0s.index&&n.ignoreMatch()\\n}},g{$pattern:e,keyword:n,literal:a,built_in:i,\\\variable.language\\\:c\\n},u\\\\\\\\\\\.(0-9(_?0-9)*)\\\,m\\\0|1-9(_?0-9)*|00-7*890-9*\\\,E{\\nclassName:\\\number\\\,variants:{\\nbegin:`(\\\\\\\\b(${m})((${u})|\\\\\\\\.)?|(${u}))eE+-?(0-9(_?0-9)*)\\\\\\\\b`},{\\nbegin:`\\\\\\\\b(${m})\\\\\\\\b((${u})\\\\\\\\b|\\\\\\\\.)?|(${u})\\\\\\\\b`},{\\nbegin:\\\\\\\\\\\b(0|1-9(_?0-9)*)n\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0xX0-9a-fA-F(_?0-9a-fA-F)*n?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0bB0-1(_?0-1)*n?\\\\\\\\b\\\},{begin:\\\\\\\\\\\b0oO0-7(_?0-7)*n?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b00-7+n?\\\\\\\\b\\\},relevance:0},y{className:\\\subst\\\,begin:\\\\\\\\\\\$\\\\\\\\{\\\,\\nend:\\\\\\\\\\\}\\\,keywords:g,contains:},A{begin:\\\html`\\\,end:\\\\\\,starts:{end:\\\`\\\,\\nreturnEnd:!1,contains:o.BACKSLASH_ESCAPE,y,subLanguage:\\\xml\\\}},p{\\nbegin:\\\css`\\\,end:\\\\\\,starts:{end:\\\`\\\,returnEnd:!1,\\ncontains:o.BACKSLASH_ESCAPE,y,subLanguage:\\\css\\\}},_{className:\\\string\\\,\\nbegin:\\\`\\\,end:\\\`\\\,contains:o.BACKSLASH_ESCAPE,y},f{className:\\\comment\\\,\\nvariants:o.COMMENT(/\\\\/\\\\*\\\\*(?!\\\\/)/,\\\\\\\\\\\*/\\\,{relevance:0,contains:{\\nbegin:\\\(?@A-Za-z+)\\\,relevance:0,contains:{className:\\\doctag\\\,\\nbegin:\\\@A-Za-z+\\\},{className:\\\type\\\,begin:\\\\\\\\\\\{\\\,end:\\\\\\\\\\\}\\\,excludeEnd:!0,\\nexcludeBegin:!0,relevance:0},{className:\\\variable\\\,begin:d+\\\(?\\\\\\\\s*(-)|$)\\\,\\nendsParent:!0,relevance:0},{begin:/(?^\\\\n)\\\\s/,relevance:0}}\\n}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE\\n},No.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,p,_,E;y.containsN.concat({\\nbegin:/\\\\{/,end:/\\\\}/,keywords:g,contains:\\\self\\\.concat(N)})\\n;const h.concat(f,y.contains),vh.concat({begin:/\\\\(/,end:/\\\\)/,keywords:g,\\ncontains:\\\self\\\.concat(h)}),S{className:\\\params\\\,begin:/\\\\(/,end:/\\\\)/,\\nexcludeBegin:!0,excludeEnd:!0,keywords:g,contains:v},w{variants:{\\nmatch:/class/,/\\\\s+/,d,/\\\\s+/,/extends/,/\\\\s+/,l.concat(d,\\\(\\\,l.concat(/\\\\./,d),\\\)*\\\),\\nscope:{1:\\\keyword\\\,3:\\\title.class\\\,5:\\\keyword\\\,7:\\\title.class.inherited\\\}},{\\nmatch:/class/,/\\\\s+/,d,scope:{1:\\\keyword\\\,3:\\\title.class\\\}}},R{relevance:0,\\nmatch:l.either(/\\\\bJSON/,/\\\\bA-Za-z+(A-Za-z*|\\\\d)*/,/\\\\bA-Z{2,}(A-Za-z+|\\\\d)+(A-Za-z*)*/,/\\\\bA-Z{2,}a-z+(A-Za-z+|\\\\d)*(A-Za-z*)*/),\\nclassName:\\\title.class\\\,keywords:{_:...t,...s}},x{variants:{\\nmatch:/function/,/\\\\s+/,d,/(?\\\\s*\\\\()/},{match:/function/,/\\\\s*(?\\\\()/},\\nclassName:{1:\\\keyword\\\,3:\\\title.function\\\},label:\\\func.def\\\,contains:S,\\nillegal:/%/},k{\\nmatch:l.concat(/\\\\b/,(O...r,\\\super\\\,l.concat(\\\(?!\\\,O.join(\\\|\\\),\\\)\\\)),d,l.lookahead(/\\\\(/)),\\nclassName:\\\title.function\\\,relevance:0};var O;const I{\\nbegin:l.concat(/\\\\./,l.lookahead(l.concat(d,/(?!0-9A-Za-z$_()/))),end:d,\\nexcludeBegin:!0,keywords:\\\prototype\\\,className:\\\property\\\,relevance:0},C{\\nmatch:/get|set/,/\\\\s+/,d,/(?\\\\()/,className:{1:\\\keyword\\\,3:\\\title.function\\\},\\ncontains:{begin:/\\\\(\\\\)/},S\\n},T\\\(\\\\\\\\(^()*(\\\\\\\\(^()*(\\\\\\\\(^()*\\\\\\\\)^()*)*\\\\\\\\)^()*)*\\\\\\\\)|\\\+o.UNDERSCORE_IDENT_RE+\\\)\\\\\\\\s*>\\\,M{\\nmatch:/const|var|let/,/\\\\s+/,d,/\\\\s*/,/\\\\s*/,/(async\\\\s*)?/,l.lookahead(T),\\nkeywords:\\\async\\\,className:{1:\\\keyword\\\,3:\\\title.function\\\},contains:S}\\n;return{name:\\\Javascript\\\,aliases:\\\js\\\,\\\jsx\\\,\\\mjs\\\,\\\cjs\\\,keywords:g,exports:{\\nPARAMS_CONTAINS:v,CLASS_REFERENCE:R},illegal:/#(?!$_A-z)/,\\ncontains:o.SHEBANG({label:\\\shebang\\\,binary:\\\node\\\,relevance:5}),{\\nlabel:\\\use_strict\\\,className:\\\meta\\\,relevance:10,\\nbegin:/^\\\\s*\\\use (strict|asm)\\\/\\n},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,A,p,_,f,E,R,{className:\\\attr\\\,\\nbegin:d+l.lookahead(\\\:\\\),relevance:0},M,{\\nbegin:\\\(\\\+o.RE_STARTERS_RE+\\\|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*\\\,\\nkeywords:\\\return throw case\\\,relevance:0,contains:f,o.REGEXP_MODE,{\\nclassName:\\\function\\\,begin:T,returnBegin:!0,end:\\\\\\\\\\\s*>\\\,contains:{\\nclassName:\\\params\\\,variants:{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{\\nclassName:null,begin:/\\\\(\\\\s*\\\\)/,skip:!0},{begin:/\\\\(/,end:/\\\\)/,excludeBegin:!0,\\nexcludeEnd:!0,keywords:g,contains:v}}},{begin:/,/,relevance:0},{match:/\\\\s+/,\\nrelevance:0},{variants:{begin:\\\\u003C>\\\,end:\\\\u003C/>\\\},{\\nmatch:/\u003CA-Za-z0-9\\\\\\\\._:-+\\\\s*\\\\/>/},{begin:b.begin,\\n\\\on:begin\\\:b.isTrulyOpeningTag,end:b.end},subLanguage:\\\xml\\\,contains:{\\nbegin:b.begin,end:b.end,skip:!0,contains:\\\self\\\}}},x,{\\nbeginKeywords:\\\while if switch catch for\\\},{\\nbegin:\\\\\\\\\\\b(?!function)\\\+o.UNDERSCORE_IDENT_RE+\\\\\\\\\\\(^()*(\\\\\\\\(^()*(\\\\\\\\(^()*\\\\\\\\)^()*)*\\\\\\\\)^()*)*\\\\\\\\)\\\\\\\\s*\\\\\\\\{\\\,\\nreturnBegin:!0,label:\\\func.def\\\,contains:S,o.inherit(o.TITLE_MODE,{begin:d,\\nclassName:\\\title.function\\\})},{match:/\\\\.\\\\.\\\\./,relevance:0},I,{match:\\\\\\\\\\\$\\\+d,\\nrelevance:0},{match:/\\\\bconstructor(?\\\\s*\\\\()/,className:{1:\\\title.function\\\},\\ncontains:S},k,{relevance:0,match:/\\\\bA-ZA-Z_0-9+\\\\b/,\\nclassName:\\\variable.constant\\\},w,C,{match:/\\\\$(./}}}return t>{\\nconst so(t),r\\\any\\\,\\\void\\\,\\\number\\\,\\\boolean\\\,\\\string\\\,\\\object\\\,\\\never\\\,\\\enum\\\,l{\\nbeginKeywords:\\\namespace\\\,end:/\\\\{/,excludeEnd:!0,\\ncontains:s.exports.CLASS_REFERENCE},d{beginKeywords:\\\interface\\\,end:/\\\\{/,\\nexcludeEnd:!0,keywords:{keyword:\\\interface extends\\\,built_in:r},\\ncontains:s.exports.CLASS_REFERENCE},b{$pattern:e,\\nkeyword:n.concat(\\\type\\\,\\\namespace\\\,\\\typedef\\\,\\\interface\\\,\\\public\\\,\\\private\\\,\\\protected\\\,\\\implements\\\,\\\declare\\\,\\\abstract\\\,\\\readonly\\\),\\nliteral:a,built_in:i.concat(r),\\\variable.language\\\:c},g{className:\\\meta\\\,\\nbegin:\\\@A-Za-z$_0-9A-Za-z$_*\\\},u(e,n,a)>{\\nconst te.contains.findIndex((e>e.labeln))\\n;if(-1t)throw Error(\\\can not find mode to replace\\\);e.contains.splice(t,1,a)}\\n;return Object.assign(s.keywords,b),\\ns.exports.PARAMS_CONTAINS.push(g),s.containss.contains.concat(g,l,d),\\nu(s,\\\shebang\\\,t.SHEBANG()),u(s,\\\use_strict\\\,{className:\\\meta\\\,relevance:10,\\nbegin:/^\\\\s*\\\use strict\\\/\\n}),s.contains.find((e>\\\func.def\\\e.label)).relevance0,Object.assign(s,{\\nname:\\\TypeScript\\\,aliases:\\\ts\\\,\\\tsx\\\}),s}})()\\n;hljs.registerLanguage(\\\typescript\\\,e)})();/*! `python` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ne.regex,a/\\\\p{XID_Start}_\\\\p{XID_Continue}*/u,i\\\and\\\,\\\as\\\,\\\assert\\\,\\\async\\\,\\\await\\\,\\\break\\\,\\\class\\\,\\\continue\\\,\\\def\\\,\\\del\\\,\\\elif\\\,\\\else\\\,\\\except\\\,\\\finally\\\,\\\for\\\,\\\from\\\,\\\global\\\,\\\if\\\,\\\import\\\,\\\in\\\,\\\is\\\,\\\lambda\\\,\\\nonlocal|10\\\,\\\not\\\,\\\or\\\,\\\pass\\\,\\\raise\\\,\\\return\\\,\\\try\\\,\\\while\\\,\\\with\\\,\\\yield\\\,s{\\n$pattern:/A-Za-z\\\\w+|__\\\\w+__/,keyword:i,\\nbuilt_in:\\\__import__\\\,\\\abs\\\,\\\all\\\,\\\any\\\,\\\ascii\\\,\\\bin\\\,\\\bool\\\,\\\breakpoint\\\,\\\bytearray\\\,\\\bytes\\\,\\\callable\\\,\\\chr\\\,\\\classmethod\\\,\\\compile\\\,\\\complex\\\,\\\delattr\\\,\\\dict\\\,\\\dir\\\,\\\divmod\\\,\\\enumerate\\\,\\\eval\\\,\\\exec\\\,\\\filter\\\,\\\float\\\,\\\format\\\,\\\frozenset\\\,\\\getattr\\\,\\\globals\\\,\\\hasattr\\\,\\\hash\\\,\\\help\\\,\\\hex\\\,\\\id\\\,\\\input\\\,\\\int\\\,\\\isinstance\\\,\\\issubclass\\\,\\\iter\\\,\\\len\\\,\\\list\\\,\\\locals\\\,\\\map\\\,\\\max\\\,\\\memoryview\\\,\\\min\\\,\\\next\\\,\\\object\\\,\\\oct\\\,\\\open\\\,\\\ord\\\,\\\pow\\\,\\\print\\\,\\\property\\\,\\\range\\\,\\\repr\\\,\\\reversed\\\,\\\round\\\,\\\set\\\,\\\setattr\\\,\\\slice\\\,\\\sorted\\\,\\\staticmethod\\\,\\\str\\\,\\\sum\\\,\\\super\\\,\\\tuple\\\,\\\type\\\,\\\vars\\\,\\\zip\\\,\\nliteral:\\\__debug__\\\,\\\Ellipsis\\\,\\\False\\\,\\\None\\\,\\\NotImplemented\\\,\\\True\\\,\\ntype:\\\Any\\\,\\\Callable\\\,\\\Coroutine\\\,\\\Dict\\\,\\\List\\\,\\\Literal\\\,\\\Generic\\\,\\\Optional\\\,\\\Sequence\\\,\\\Set\\\,\\\Tuple\\\,\\\Type\\\,\\\Union\\\\\n},t{className:\\\meta\\\,begin:/^(>>>|\\\\.\\\\.\\\\.) /},r{className:\\\subst\\\,begin:/\\\\{/,\\nend:/\\\\}/,keywords:s,illegal:/#/},l{begin:/\\\\{\\\\{/,relevance:0},b{\\nclassName:\\\string\\\,contains:e.BACKSLASH_ESCAPE,variants:{\\nbegin:/(uU|bB|rR|bBrR|rRbB)?/,end://,\\ncontains:e.BACKSLASH_ESCAPE,t,relevance:10},{\\nbegin:/(uU|bB|rR|bBrR|rRbB)?\\\\\\\\\/,end:/\\\\\\\\\/,\\ncontains:e.BACKSLASH_ESCAPE,t,relevance:10},{\\nbegin:/(fFrR|rRfF|fF)/,end://,\\ncontains:e.BACKSLASH_ESCAPE,t,l,r},{begin:/(fFrR|rRfF|fF)\\\\\\\\\/,\\nend:/\\\\\\\\\/,contains:e.BACKSLASH_ESCAPE,t,l,r},{begin:/(uU|rR)/,end://,\\nrelevance:10},{begin:/(uU|rR)\\\/,end:/\\\/,relevance:10},{\\nbegin:/(bB|bBrR|rRbB)/,end://},{begin:/(bB|bBrR|rRbB)\\\/,\\nend:/\\\/},{begin:/(fFrR|rRfF|fF)/,end://,\\ncontains:e.BACKSLASH_ESCAPE,l,r},{begin:/(fFrR|rRfF|fF)\\\/,end:/\\\/,\\ncontains:e.BACKSLASH_ESCAPE,l,r},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE\\n},o\\\0-9(_?0-9)*\\\,c`(\\\\\\\\b(${o}))?\\\\\\\\.(${o})|\\\\\\\\b(${o})\\\\\\\\.`,d\\\\\\\\\\\b|\\\+i.join(\\\|\\\),g{\\nclassName:\\\number\\\,relevance:0,variants:{\\nbegin:`(\\\\\\\\b(${o})|(${c}))eE+-?(${o})jJ?(?${d})`},{begin:`(${c})jJ?`},{\\nbegin:`\\\\\\\\b(1-9(_?0-9)*|0+(_?0)*)lLjJ?(?${d})`},{\\nbegin:`\\\\\\\\b0bB(_?01)+lL?(?${d})`},{begin:`\\\\\\\\b0oO(_?0-7)+lL?(?${d})`\\n},{begin:`\\\\\\\\b0xX(_?0-9a-fA-F)+lL?(?${d})`},{begin:`\\\\\\\\b(${o})jJ(?${d})`\\n}},p{className:\\\comment\\\,begin:n.lookahead(/# type:/),end:/$/,keywords:s,\\ncontains:{begin:/# type:/},{begin:/#/,end:/\\\\b\\\\B/,endsWithParent:!0}},m{\\nclassName:\\\params\\\,variants:{className:\\\\\\,begin:/\\\\(\\\\s*\\\\)/,skip:!0},{begin:/\\\\(/,\\nend:/\\\\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,\\ncontains:\\\self\\\,t,g,b,e.HASH_COMMENT_MODE}};return r.containsb,g,t,{\\nname:\\\Python\\\,aliases:\\\py\\\,\\\gyp\\\,\\\ipython\\\,unicodeRegex:!0,keywords:s,\\nillegal:/(\u003C\\\\/|->|\\\\?)|>/,contains:t,g,{begin:/\\\\bself\\\\b/},{beginKeywords:\\\if\\\,\\nrelevance:0},b,p,e.HASH_COMMENT_MODE,{match:/\\\\bdef/,/\\\\s+/,a,scope:{\\n1:\\\keyword\\\,3:\\\title.function\\\},contains:m},{variants:{\\nmatch:/\\\\bclass/,/\\\\s+/,a,/\\\\s*/,/\\\\(\\\\s*/,a,/\\\\s*\\\\)/},{match:/\\\\bclass/,/\\\\s+/,a},\\nscope:{1:\\\keyword\\\,3:\\\title.class\\\,6:\\\title.class.inherited\\\}},{\\nclassName:\\\meta\\\,begin:/^\\\\t *@/,end:/(?#)|$/,contains:g,m,b}}}})()\\n;hljs.registerLanguage(\\\python\\\,e)})();/*! `python-repl` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var a(()>{\\\use strict\\\;return a>({aliases:\\\pycon\\\,contains:{\\nclassName:\\\meta\\\,starts:{end:/ |$/,starts:{end:\\\$\\\,subLanguage:\\\python\\\}},\\nvariants:{begin:/^>>>(? |$)/},{begin:/^\\\\.\\\\.\\\\.(? |$)/}}})})()\\n;hljs.registerLanguage(\\\python-repl\\\,a)})();/*! `php` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst te.regex,r\\\a-zA-Z0-9_\\\\x7f-\\\\xff*(?!A-Za-z0-9)(?!$))\\\,at.concat(\\\(a-zA-Z_\\\\\\\\x7f-\\\\\\\\xff\\\,r),nt.concat(\\\(A-Z\\\,r),o{\\nscope:\\\variable\\\,match:\\\\\\\\\\\$+\\\+a},c{scope:\\\subst\\\,variants:{begin:/\\\\$\\\\w+/},{\\nbegin:/\\\\{\\\\$/,end:/\\\\}/}},ie.inherit(e.APOS_STRING_MODE,{illegal:null\\n}),l\\\ \\\\t\\\\n\\\,s{scope:\\\string\\\,variants:e.inherit(e.QUOTE_STRING_MODE,{\\nillegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(c)\\n}),i,e.END_SAME_AS_BEGIN({begin:/\u003C\u003C\u003C \\\\t*(\\\\w+)\\\\n/,end:/ \\\\t*(\\\\w+)\\\\b/,\\ncontains:e.QUOTE_STRING_MODE.contains.concat(c)})},p{scope:\\\number\\\,\\nvariants:{begin:\\\\\\\\\\\b0bB01+(?:_01+)*\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0oO0-7+(?:_0-7+)*\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0xX\\\\\\\\da-fA-F+(?:_\\\\\\\\da-fA-F+)*\\\\\\\\b\\\},{\\nbegin:\\\(?:\\\\\\\\b\\\\\\\\d+(?:_\\\\\\\\d+)*(\\\\\\\\.(?:\\\\\\\\d+(?:_\\\\\\\\d+)*))?|\\\\\\\\B\\\\\\\\.\\\\\\\\d+)(?:eE+-?\\\\\\\\d+)?\\\\\n},relevance:0\\n},_\\\__CLASS__\\\,\\\__DIR__\\\,\\\__FILE__\\\,\\\__FUNCTION__\\\,\\\__COMPILER_HALT_OFFSET__\\\,\\\__LINE__\\\,\\\__METHOD__\\\,\\\__NAMESPACE__\\\,\\\__TRAIT__\\\,\\\die\\\,\\\echo\\\,\\\exit\\\,\\\include\\\,\\\include_once\\\,\\\print\\\,\\\require\\\,\\\require_once\\\,\\\array\\\,\\\abstract\\\,\\\and\\\,\\\as\\\,\\\binary\\\,\\\bool\\\,\\\boolean\\\,\\\break\\\,\\\callable\\\,\\\case\\\,\\\catch\\\,\\\class\\\,\\\clone\\\,\\\const\\\,\\\continue\\\,\\\declare\\\,\\\default\\\,\\\do\\\,\\\double\\\,\\\else\\\,\\\elseif\\\,\\\empty\\\,\\\enddeclare\\\,\\\endfor\\\,\\\endforeach\\\,\\\endif\\\,\\\endswitch\\\,\\\endwhile\\\,\\\enum\\\,\\\eval\\\,\\\extends\\\,\\\final\\\,\\\finally\\\,\\\float\\\,\\\for\\\,\\\foreach\\\,\\\from\\\,\\\global\\\,\\\goto\\\,\\\if\\\,\\\implements\\\,\\\instanceof\\\,\\\insteadof\\\,\\\int\\\,\\\integer\\\,\\\interface\\\,\\\isset\\\,\\\iterable\\\,\\\list\\\,\\\match|0\\\,\\\mixed\\\,\\\new\\\,\\\never\\\,\\\object\\\,\\\or\\\,\\\private\\\,\\\protected\\\,\\\public\\\,\\\readonly\\\,\\\real\\\,\\\return\\\,\\\string\\\,\\\switch\\\,\\\throw\\\,\\\trait\\\,\\\try\\\,\\\unset\\\,\\\use\\\,\\\var\\\,\\\void\\\,\\\while\\\,\\\xor\\\,\\\yield\\\,d\\\Error|0\\\,\\\AppendIterator\\\,\\\ArgumentCountError\\\,\\\ArithmeticError\\\,\\\ArrayIterator\\\,\\\ArrayObject\\\,\\\AssertionError\\\,\\\BadFunctionCallException\\\,\\\BadMethodCallException\\\,\\\CachingIterator\\\,\\\CallbackFilterIterator\\\,\\\CompileError\\\,\\\Countable\\\,\\\DirectoryIterator\\\,\\\DivisionByZeroError\\\,\\\DomainException\\\,\\\EmptyIterator\\\,\\\ErrorException\\\,\\\Exception\\\,\\\FilesystemIterator\\\,\\\FilterIterator\\\,\\\GlobIterator\\\,\\\InfiniteIterator\\\,\\\InvalidArgumentException\\\,\\\IteratorIterator\\\,\\\LengthException\\\,\\\LimitIterator\\\,\\\LogicException\\\,\\\MultipleIterator\\\,\\\NoRewindIterator\\\,\\\OutOfBoundsException\\\,\\\OutOfRangeException\\\,\\\OuterIterator\\\,\\\OverflowException\\\,\\\ParentIterator\\\,\\\ParseError\\\,\\\RangeException\\\,\\\RecursiveArrayIterator\\\,\\\RecursiveCachingIterator\\\,\\\RecursiveCallbackFilterIterator\\\,\\\RecursiveDirectoryIterator\\\,\\\RecursiveFilterIterator\\\,\\\RecursiveIterator\\\,\\\RecursiveIteratorIterator\\\,\\\RecursiveRegexIterator\\\,\\\RecursiveTreeIterator\\\,\\\RegexIterator\\\,\\\RuntimeException\\\,\\\SeekableIterator\\\,\\\SplDoublyLinkedList\\\,\\\SplFileInfo\\\,\\\SplFileObject\\\,\\\SplFixedArray\\\,\\\SplHeap\\\,\\\SplMaxHeap\\\,\\\SplMinHeap\\\,\\\SplObjectStorage\\\,\\\SplObserver\\\,\\\SplPriorityQueue\\\,\\\SplQueue\\\,\\\SplStack\\\,\\\SplSubject\\\,\\\SplTempFileObject\\\,\\\TypeError\\\,\\\UnderflowException\\\,\\\UnexpectedValueException\\\,\\\UnhandledMatchError\\\,\\\ArrayAccess\\\,\\\BackedEnum\\\,\\\Closure\\\,\\\Fiber\\\,\\\Generator\\\,\\\Iterator\\\,\\\IteratorAggregate\\\,\\\Serializable\\\,\\\Stringable\\\,\\\Throwable\\\,\\\Traversable\\\,\\\UnitEnum\\\,\\\WeakReference\\\,\\\WeakMap\\\,\\\Directory\\\,\\\__PHP_Incomplete_Class\\\,\\\parent\\\,\\\php_user_filter\\\,\\\self\\\,\\\static\\\,\\\stdClass\\\,b{\\nkeyword:_,literal:(e>{const t;return\\\false\\\,\\\null\\\,\\\true\\\.forEach((e>{\\nt.push(e),e.toLowerCase()e?t.push(e.toUpperCase()):t.push(e.toLowerCase())\\n})),t})(),built_in:d},ue>e.map((e>e.replace(/\\\\|\\\\d+$/,\\\\\\))),E{variants:{\\nmatch:/new/,t.concat(l,\\\+\\\),t.concat(\\\(?!\\\,u(d).join(\\\\\\\\\\\b|\\\),\\\\\\\\\\\b)\\\),t.concat(/\\\\\\\\?/,a),t.concat(l,\\\*\\\,/\\\\(/),\\nscope:{1:\\\keyword\\\,4:\\\title.class\\\}}},g{relevance:0,\\nmatch:/\\\\b/,t.concat(\\\(?!fn\\\\\\\\b|function\\\\\\\\b|\\\,u(_).join(\\\\\\\\\\\b|\\\),\\\|\\\,u(d).join(\\\\\\\\\\\b|\\\),\\\\\\\\\\\b)\\\),a,t.concat(l,\\\*\\\),t.lookahead(/(?\\\\()/),\\nscope:{3:\\\title.function.invoke\\\}},It.concat(a,\\\\\\\\\\\b(?!\\\\\\\\()\\\),h{variants:{\\nmatch:t.concat(/::/,t.lookahead(/(?!class\\\\b)/)),I,scope:{2:\\\variable.constant\\\\\n}},{match:/::/,/class/,scope:{2:\\\variable.language\\\}},{\\nmatch:n,t.concat(\\\::\\\,t.lookahead(/(?!class\\\\b)/)),scope:{1:\\\title.class\\\}},{\\nmatch:n,/::/,/class/,scope:{1:\\\title.class\\\,3:\\\variable.language\\\}}};return{\\ncase_insensitive:!1,keywords:b,\\ncontains:e.HASH_COMMENT_MODE,e.COMMENT(\\\//\\\,\\\$\\\),e.COMMENT(\\\/\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{\\ncontains:{scope:\\\doctag\\\,match:\\\@A-Za-z+\\\}}),{match:/__halt_compiler\\\\(\\\\);/,\\nkeywords:\\\__halt_compiler\\\,starts:{scope:\\\comment\\\,end:e.MATCH_NOTHING_RE,\\ncontains:{match:/\\\\?>/,scope:\\\meta\\\,endsParent:!0}}},{scope:\\\meta\\\,variants:{\\nbegin:/\u003C\\\\?php/,relevance:10},{begin:/\u003C\\\\??/},{begin:/\\\\?>/}},{\\nscope:\\\variable.language\\\,match:/\\\\$this\\\\b/},o,g,h,{\\nmatch:/const/,/\\\\s/,a,/\\\\s*/,scope:{1:\\\keyword\\\,3:\\\variable.constant\\\}},E,{\\nscope:\\\function\\\,relevance:0,beginKeywords:\\\fn function\\\,end:/;{/,\\nexcludeEnd:!0,illegal:\\\$%\\\\\\\\\\\,contains:{beginKeywords:\\\use\\\\\n},e.UNDERSCORE_TITLE_MODE,{begin:\\\>\\\,endsParent:!0},{scope:\\\params\\\,\\nbegin:\\\\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\,excludeBegin:!0,excludeEnd:!0,keywords:b,\\ncontains:\\\self\\\,o,h,e.C_BLOCK_COMMENT_MODE,s,p}},{scope:\\\class\\\,variants:{\\nbeginKeywords:\\\enum\\\,illegal:/($\\\/},{beginKeywords:\\\class interface trait\\\,\\nillegal:/:($\\\/},relevance:0,end:/\\\\{/,excludeEnd:!0,contains:{\\nbeginKeywords:\\\extends implements\\\},e.UNDERSCORE_TITLE_MODE},{\\nbeginKeywords:\\\namespace\\\,relevance:0,end:\\\;\\\,illegal:/./,\\ncontains:e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:\\\title.class\\\})},{\\nbeginKeywords:\\\use\\\,relevance:0,end:\\\;\\\,contains:{\\nmatch:/\\\\b(as|const|function)\\\\b/,scope:\\\keyword\\\},e.UNDERSCORE_TITLE_MODE},s,p}\\n}})();hljs.registerLanguage(\\\php\\\,e)})();/*! `scss` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;const e\\\a\\\,\\\abbr\\\,\\\address\\\,\\\article\\\,\\\aside\\\,\\\audio\\\,\\\b\\\,\\\blockquote\\\,\\\body\\\,\\\button\\\,\\\canvas\\\,\\\caption\\\,\\\cite\\\,\\\code\\\,\\\dd\\\,\\\del\\\,\\\details\\\,\\\dfn\\\,\\\div\\\,\\\dl\\\,\\\dt\\\,\\\em\\\,\\\fieldset\\\,\\\figcaption\\\,\\\figure\\\,\\\footer\\\,\\\form\\\,\\\h1\\\,\\\h2\\\,\\\h3\\\,\\\h4\\\,\\\h5\\\,\\\h6\\\,\\\header\\\,\\\hgroup\\\,\\\html\\\,\\\i\\\,\\\iframe\\\,\\\img\\\,\\\input\\\,\\\ins\\\,\\\kbd\\\,\\\label\\\,\\\legend\\\,\\\li\\\,\\\main\\\,\\\mark\\\,\\\menu\\\,\\\nav\\\,\\\object\\\,\\\ol\\\,\\\p\\\,\\\q\\\,\\\quote\\\,\\\samp\\\,\\\section\\\,\\\span\\\,\\\strong\\\,\\\summary\\\,\\\sup\\\,\\\table\\\,\\\tbody\\\,\\\td\\\,\\\textarea\\\,\\\tfoot\\\,\\\th\\\,\\\thead\\\,\\\time\\\,\\\tr\\\,\\\ul\\\,\\\var\\\,\\\video\\\,t\\\any-hover\\\,\\\any-pointer\\\,\\\aspect-ratio\\\,\\\color\\\,\\\color-gamut\\\,\\\color-index\\\,\\\device-aspect-ratio\\\,\\\device-height\\\,\\\device-width\\\,\\\display-mode\\\,\\\forced-colors\\\,\\\grid\\\,\\\height\\\,\\\hover\\\,\\\inverted-colors\\\,\\\monochrome\\\,\\\orientation\\\,\\\overflow-block\\\,\\\overflow-inline\\\,\\\pointer\\\,\\\prefers-color-scheme\\\,\\\prefers-contrast\\\,\\\prefers-reduced-motion\\\,\\\prefers-reduced-transparency\\\,\\\resolution\\\,\\\scan\\\,\\\scripting\\\,\\\update\\\,\\\width\\\,\\\min-width\\\,\\\max-width\\\,\\\min-height\\\,\\\max-height\\\,i\\\active\\\,\\\any-link\\\,\\\blank\\\,\\\checked\\\,\\\current\\\,\\\default\\\,\\\defined\\\,\\\dir\\\,\\\disabled\\\,\\\drop\\\,\\\empty\\\,\\\enabled\\\,\\\first\\\,\\\first-child\\\,\\\first-of-type\\\,\\\fullscreen\\\,\\\future\\\,\\\focus\\\,\\\focus-visible\\\,\\\focus-within\\\,\\\has\\\,\\\host\\\,\\\host-context\\\,\\\hover\\\,\\\indeterminate\\\,\\\in-range\\\,\\\invalid\\\,\\\is\\\,\\\lang\\\,\\\last-child\\\,\\\last-of-type\\\,\\\left\\\,\\\link\\\,\\\local-link\\\,\\\not\\\,\\\nth-child\\\,\\\nth-col\\\,\\\nth-last-child\\\,\\\nth-last-col\\\,\\\nth-last-of-type\\\,\\\nth-of-type\\\,\\\only-child\\\,\\\only-of-type\\\,\\\optional\\\,\\\out-of-range\\\,\\\past\\\,\\\placeholder-shown\\\,\\\read-only\\\,\\\read-write\\\,\\\required\\\,\\\right\\\,\\\root\\\,\\\scope\\\,\\\target\\\,\\\target-within\\\,\\\user-invalid\\\,\\\valid\\\,\\\visited\\\,\\\where\\\,r\\\after\\\,\\\backdrop\\\,\\\before\\\,\\\cue\\\,\\\cue-region\\\,\\\first-letter\\\,\\\first-line\\\,\\\grammar-error\\\,\\\marker\\\,\\\part\\\,\\\placeholder\\\,\\\selection\\\,\\\slotted\\\,\\\spelling-error\\\,o\\\align-content\\\,\\\align-items\\\,\\\align-self\\\,\\\all\\\,\\\animation\\\,\\\animation-delay\\\,\\\animation-direction\\\,\\\animation-duration\\\,\\\animation-fill-mode\\\,\\\animation-iteration-count\\\,\\\animation-name\\\,\\\animation-play-state\\\,\\\animation-timing-function\\\,\\\backface-visibility\\\,\\\background\\\,\\\background-attachment\\\,\\\background-clip\\\,\\\background-color\\\,\\\background-image\\\,\\\background-origin\\\,\\\background-position\\\,\\\background-repeat\\\,\\\background-size\\\,\\\border\\\,\\\border-bottom\\\,\\\border-bottom-color\\\,\\\border-bottom-left-radius\\\,\\\border-bottom-right-radius\\\,\\\border-bottom-style\\\,\\\border-bottom-width\\\,\\\border-collapse\\\,\\\border-color\\\,\\\border-image\\\,\\\border-image-outset\\\,\\\border-image-repeat\\\,\\\border-image-slice\\\,\\\border-image-source\\\,\\\border-image-width\\\,\\\border-left\\\,\\\border-left-color\\\,\\\border-left-style\\\,\\\border-left-width\\\,\\\border-radius\\\,\\\border-right\\\,\\\border-right-color\\\,\\\border-right-style\\\,\\\border-right-width\\\,\\\border-spacing\\\,\\\border-style\\\,\\\border-top\\\,\\\border-top-color\\\,\\\border-top-left-radius\\\,\\\border-top-right-radius\\\,\\\border-top-style\\\,\\\border-top-width\\\,\\\border-width\\\,\\\bottom\\\,\\\box-decoration-break\\\,\\\box-shadow\\\,\\\box-sizing\\\,\\\break-after\\\,\\\break-before\\\,\\\break-inside\\\,\\\caption-side\\\,\\\caret-color\\\,\\\clear\\\,\\\clip\\\,\\\clip-path\\\,\\\clip-rule\\\,\\\color\\\,\\\column-count\\\,\\\column-fill\\\,\\\column-gap\\\,\\\column-rule\\\,\\\column-rule-color\\\,\\\column-rule-style\\\,\\\column-rule-width\\\,\\\column-span\\\,\\\column-width\\\,\\\columns\\\,\\\contain\\\,\\\content\\\,\\\content-visibility\\\,\\\counter-increment\\\,\\\counter-reset\\\,\\\cue\\\,\\\cue-after\\\,\\\cue-before\\\,\\\cursor\\\,\\\direction\\\,\\\display\\\,\\\empty-cells\\\,\\\filter\\\,\\\flex\\\,\\\flex-basis\\\,\\\flex-direction\\\,\\\flex-flow\\\,\\\flex-grow\\\,\\\flex-shrink\\\,\\\flex-wrap\\\,\\\float\\\,\\\flow\\\,\\\font\\\,\\\font-display\\\,\\\font-family\\\,\\\font-feature-settings\\\,\\\font-kerning\\\,\\\font-language-override\\\,\\\font-size\\\,\\\font-size-adjust\\\,\\\font-smoothing\\\,\\\font-stretch\\\,\\\font-style\\\,\\\font-synthesis\\\,\\\font-variant\\\,\\\font-variant-caps\\\,\\\font-variant-east-asian\\\,\\\font-variant-ligatures\\\,\\\font-variant-numeric\\\,\\\font-variant-position\\\,\\\font-variation-settings\\\,\\\font-weight\\\,\\\gap\\\,\\\glyph-orientation-vertical\\\,\\\grid\\\,\\\grid-area\\\,\\\grid-auto-columns\\\,\\\grid-auto-flow\\\,\\\grid-auto-rows\\\,\\\grid-column\\\,\\\grid-column-end\\\,\\\grid-column-start\\\,\\\grid-gap\\\,\\\grid-row\\\,\\\grid-row-end\\\,\\\grid-row-start\\\,\\\grid-template\\\,\\\grid-template-areas\\\,\\\grid-template-columns\\\,\\\grid-template-rows\\\,\\\hanging-punctuation\\\,\\\height\\\,\\\hyphens\\\,\\\icon\\\,\\\image-orientation\\\,\\\image-rendering\\\,\\\image-resolution\\\,\\\ime-mode\\\,\\\isolation\\\,\\\justify-content\\\,\\\left\\\,\\\letter-spacing\\\,\\\line-break\\\,\\\line-height\\\,\\\list-style\\\,\\\list-style-image\\\,\\\list-style-position\\\,\\\list-style-type\\\,\\\margin\\\,\\\margin-bottom\\\,\\\margin-left\\\,\\\margin-right\\\,\\\margin-top\\\,\\\marks\\\,\\\mask\\\,\\\mask-border\\\,\\\mask-border-mode\\\,\\\mask-border-outset\\\,\\\mask-border-repeat\\\,\\\mask-border-slice\\\,\\\mask-border-source\\\,\\\mask-border-width\\\,\\\mask-clip\\\,\\\mask-composite\\\,\\\mask-image\\\,\\\mask-mode\\\,\\\mask-origin\\\,\\\mask-position\\\,\\\mask-repeat\\\,\\\mask-size\\\,\\\mask-type\\\,\\\max-height\\\,\\\max-width\\\,\\\min-height\\\,\\\min-width\\\,\\\mix-blend-mode\\\,\\\nav-down\\\,\\\nav-index\\\,\\\nav-left\\\,\\\nav-right\\\,\\\nav-up\\\,\\\none\\\,\\\normal\\\,\\\object-fit\\\,\\\object-position\\\,\\\opacity\\\,\\\order\\\,\\\orphans\\\,\\\outline\\\,\\\outline-color\\\,\\\outline-offset\\\,\\\outline-style\\\,\\\outline-width\\\,\\\overflow\\\,\\\overflow-wrap\\\,\\\overflow-x\\\,\\\overflow-y\\\,\\\padding\\\,\\\padding-bottom\\\,\\\padding-left\\\,\\\padding-right\\\,\\\padding-top\\\,\\\page-break-after\\\,\\\page-break-before\\\,\\\page-break-inside\\\,\\\pause\\\,\\\pause-after\\\,\\\pause-before\\\,\\\perspective\\\,\\\perspective-origin\\\,\\\pointer-events\\\,\\\position\\\,\\\quotes\\\,\\\resize\\\,\\\rest\\\,\\\rest-after\\\,\\\rest-before\\\,\\\right\\\,\\\row-gap\\\,\\\scroll-margin\\\,\\\scroll-margin-block\\\,\\\scroll-margin-block-end\\\,\\\scroll-margin-block-start\\\,\\\scroll-margin-bottom\\\,\\\scroll-margin-inline\\\,\\\scroll-margin-inline-end\\\,\\\scroll-margin-inline-start\\\,\\\scroll-margin-left\\\,\\\scroll-margin-right\\\,\\\scroll-margin-top\\\,\\\scroll-padding\\\,\\\scroll-padding-block\\\,\\\scroll-padding-block-end\\\,\\\scroll-padding-block-start\\\,\\\scroll-padding-bottom\\\,\\\scroll-padding-inline\\\,\\\scroll-padding-inline-end\\\,\\\scroll-padding-inline-start\\\,\\\scroll-padding-left\\\,\\\scroll-padding-right\\\,\\\scroll-padding-top\\\,\\\scroll-snap-align\\\,\\\scroll-snap-stop\\\,\\\scroll-snap-type\\\,\\\shape-image-threshold\\\,\\\shape-margin\\\,\\\shape-outside\\\,\\\speak\\\,\\\speak-as\\\,\\\src\\\,\\\tab-size\\\,\\\table-layout\\\,\\\text-align\\\,\\\text-align-all\\\,\\\text-align-last\\\,\\\text-combine-upright\\\,\\\text-decoration\\\,\\\text-decoration-color\\\,\\\text-decoration-line\\\,\\\text-decoration-style\\\,\\\text-emphasis\\\,\\\text-emphasis-color\\\,\\\text-emphasis-position\\\,\\\text-emphasis-style\\\,\\\text-indent\\\,\\\text-justify\\\,\\\text-orientation\\\,\\\text-overflow\\\,\\\text-rendering\\\,\\\text-shadow\\\,\\\text-transform\\\,\\\text-underline-position\\\,\\\top\\\,\\\transform\\\,\\\transform-box\\\,\\\transform-origin\\\,\\\transform-style\\\,\\\transition\\\,\\\transition-delay\\\,\\\transition-duration\\\,\\\transition-property\\\,\\\transition-timing-function\\\,\\\unicode-bidi\\\,\\\vertical-align\\\,\\\visibility\\\,\\\voice-balance\\\,\\\voice-duration\\\,\\\voice-family\\\,\\\voice-pitch\\\,\\\voice-range\\\,\\\voice-rate\\\,\\\voice-stress\\\,\\\voice-volume\\\,\\\white-space\\\,\\\widows\\\,\\\width\\\,\\\will-change\\\,\\\word-break\\\,\\\word-spacing\\\,\\\word-wrap\\\,\\\writing-mode\\\,\\\z-index\\\.reverse()\\n;return a>{const n(e>({IMPORTANT:{scope:\\\meta\\\,begin:\\\!important\\\},\\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\\\number\\\,\\nbegin:/#((0-9a-fA-F{3,4})|((0-9a-fA-F{2}){3,4}))\\\\b/},FUNCTION_DISPATCH:{\\nclassName:\\\built_in\\\,begin:/\\\\w-+(?\\\\()/},ATTRIBUTE_SELECTOR_MODE:{\\nscope:\\\selector-attr\\\,begin:/\\\\/,end:/\\\\/,illegal:\\\$\\\,\\ncontains:e.APOS_STRING_MODE,e.QUOTE_STRING_MODE},CSS_NUMBER_MODE:{\\nscope:\\\number\\\,\\nbegin:e.NUMBER_RE+\\\(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\\\,\\nrelevance:0},CSS_VARIABLE:{className:\\\attr\\\,begin:/--A-Za-zA-Za-z0-9_-*/}\\n}))(a),lr,si,d\\\@a-z-+\\\,c{className:\\\variable\\\,\\nbegin:\\\(\\\\\\\\$a-zA-Z-a-zA-Z0-9_-*)\\\\\\\\b\\\};return{name:\\\SCSS\\\,case_insensitive:!0,\\nillegal:\\\/|\\\,\\ncontains:a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{\\nclassName:\\\selector-id\\\,begin:\\\#A-Za-z0-9_-+\\\,relevance:0},{\\nclassName:\\\selector-class\\\,begin:\\\\\\\\\\\.A-Za-z0-9_-+\\\,relevance:0\\n},n.ATTRIBUTE_SELECTOR_MODE,{className:\\\selector-tag\\\,\\nbegin:\\\\\\\\\\\b(\\\+e.join(\\\|\\\)+\\\)\\\\\\\\b\\\,relevance:0},{className:\\\selector-pseudo\\\,\\nbegin:\\\:(\\\+s.join(\\\|\\\)+\\\)\\\},{className:\\\selector-pseudo\\\,\\nbegin:\\\:(:)?(\\\+l.join(\\\|\\\)+\\\)\\\},c,{begin:/\\\\(/,end:/\\\\)/,\\ncontains:n.CSS_NUMBER_MODE},n.CSS_VARIABLE,{className:\\\attribute\\\,\\nbegin:\\\\\\\\\\\b(\\\+o.join(\\\|\\\)+\\\)\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\\\\\b\\\\\n},{begin:/:/,end:/;}{/,\\ncontains:n.BLOCK_COMMENT,c,n.HEXCOLOR,n.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.IMPORTANT\\n},{begin:\\\@(page|font-face)\\\,keywords:{$pattern:d,keyword:\\\@page @font-face\\\}},{\\nbegin:\\\@\\\,end:\\\{;\\\,returnBegin:!0,keywords:{$pattern:/a-z-+/,\\nkeyword:\\\and or not only\\\,attribute:t.join(\\\ \\\)},contains:{begin:d,\\nclassName:\\\keyword\\\},{begin:/a-z-+(?:)/,className:\\\attribute\\\\\n},c,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE\\n},n.FUNCTION_DISPATCH}}})();hljs.registerLanguage(\\\scss\\\,e)})();/*! `latex` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n{begin:/\\\\^{6}0-9a-f{6}/},{\\nbegin:/\\\\^{5}0-9a-f{5}/},{begin:/\\\\^{4}0-9a-f{4}/},{begin:/\\\\^{3}0-9a-f{3}/\\n},{begin:/\\\\^{2}0-9a-f{2}/},{begin:/\\\\^{2}\\\\u0000-\\\\u007f/},a{\\nclassName:\\\keyword\\\,begin:/\\\\\\\\/,relevance:0,contains:{endsParent:!0,\\nbegin:e.regex.either(...\\\(?:NeedsTeXFormat|RequirePackage|GetIdInfo)\\\,\\\Provides(?:Expl)?(?:Package|Class|File)\\\,\\\(?:DeclareOption|ProcessOptions)\\\,\\\(?:documentclass|usepackage|input|include)\\\,\\\makeat(?:letter|other)\\\,\\\ExplSyntax(?:On|Off)\\\,\\\(?:new|renew|provide)?command\\\,\\\(?:re)newenvironment\\\,\\\(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand\\\,\\\(?:New|Renew|Provide|Declare)DocumentEnvironment\\\,\\\(?:(?:e|g|x)?def|let)\\\,\\\(?:begin|end)\\\,\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)\\\,\\\caption\\\,\\\(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)\\\,\\\(?:alpha|beta|Ggamma|Ddelta|(?:var)?epsilon|zeta|eta|Ttheta|vartheta)\\\,\\\(?:iota|(?:var)?kappa|Llambda|mu|nu|Xxi|Ppi|varpi|(?:var)rho)\\\,\\\(?:Ssigma|varsigma|tau|Uupsilon|Pphi|varphi|chi|Ppsi|Oomega)\\\,\\\(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|bBigg?)\\\,\\\(?:lrangle|q?quad|lcvdi?dots|d?dot|hat|tilde|bar)\\\.map((e>e+\\\(?!a-zA-Z@:_)\\\)))\\n},{endsParent:!0,\\nbegin:RegExp(\\\(?:__)?a-zA-Z{2,}_a-zA-Z(?:_?a-zA-Z)+:a-zA-Z*\\\,\\\lgc__?a-zA-Z(?:_?a-zA-Z)*_a-zA-Z{2,}\\\,\\\qs__?a-zA-Z(?:_?a-zA-Z)+\\\,\\\use(?:_i)?:a-zA-Z*\\\,\\\(?:else|fi|or):\\\,\\\(?:if|cs|exp):w\\\,\\\(?:hbox|vbox):n\\\,\\\::a-zA-Z_unbraced\\\,\\\::a-zA-Z:\\\.map((e>e+\\\(?!a-zA-Z:_)\\\)).join(\\\|\\\))\\n},{endsParent:!0,variants:n},{endsParent:!0,relevance:0,variants:{\\nbegin:/a-zA-Z@+/},{begin:/^a-zA-Z@?/}}},{className:\\\params\\\,relevance:0,\\nbegin:/#+\\\\d?/},{variants:n},{className:\\\built_in\\\,relevance:0,begin:/$&^_/},{\\nclassName:\\\meta\\\,begin:/% ?!(TeEX|tex|BIB|bib)/,end:\\\$\\\,relevance:10\\n},e.COMMENT(\\\%\\\,\\\$\\\,{relevance:0}),i{begin:/\\\\{/,end:/\\\\}/,relevance:0,\\ncontains:\\\self\\\,...a},te.inherit(i,{relevance:0,endsParent:!0,\\ncontains:i,...a}),r{begin:/\\\\/,end:/\\\\/,endsParent:!0,relevance:0,\\ncontains:i,...a},s{begin:/\\\\s+/,relevance:0},ct,lr,o(e,n)>({\\ncontains:s,starts:{relevance:0,contains:e,starts:n}}),d(e,n)>({\\nbegin:\\\\\\\\\\\\\\\\\\\\\\+e+\\\(?!a-zA-Z@:_)\\\,keywords:{$pattern:/\\\\\\\\a-zA-Z+/,keyword:\\\\\\\\\\\\\\+e\\n},relevance:0,contains:s,starts:n}),g(n,a)>e.inherit({\\nbegin:\\\\\\\\\\\\\\\\\\\begin(? \\\\t*(\\\\\\\\r?\\\\\\\\n \\\\t*)?\\\\\\\\{\\\+n+\\\\\\\\\\\})\\\,keywords:{\\n$pattern:/\\\\\\\\a-zA-Z+/,keyword:\\\\\\\\\\\begin\\\},relevance:0\\n},o(c,a)),m(n\\\string\\\)>e.END_SAME_AS_BEGIN({className:n,begin:/(.|\\\\r?\\\\n)/,\\nend:/(.|\\\\r?\\\\n)/,excludeBegin:!0,excludeEnd:!0,endsParent:!0}),be>({\\nclassName:\\\string\\\,end:\\\(?\\\\\\\\\\\\\\\\end\\\\\\\\{\\\+e+\\\\\\\\\\\})\\\}),p(e\\\string\\\)>({relevance:0,\\nbegin:/\\\\{/,starts:{endsParent:!0,contains:{className:e,end:/(?\\\\})/,\\nendsParent:!0,contains:{begin:/\\\\{/,end:/\\\\}/,relevance:0,contains:\\\self\\\}}}\\n});return{name:\\\LaTeX\\\,aliases:\\\tex\\\,\\ncontains:...\\\verb\\\,\\\lstinline\\\.map((e>d(e,{contains:m()}))),d(\\\mint\\\,o(c,{\\ncontains:m()})),d(\\\mintinline\\\,o(c,{contains:p(),m()})),d(\\\url\\\,{\\ncontains:p(\\\link\\\),p(\\\link\\\)}),d(\\\hyperref\\\,{contains:p(\\\link\\\)\\n}),d(\\\href\\\,o(l,{contains:p(\\\link\\\)\\n})),....concat(...\\\\\\,\\\\\\\\\\\*\\\.map((e>g(\\\verbatim\\\+e,b(\\\verbatim\\\+e)),g(\\\filecontents\\\+e,o(c,b(\\\filecontents\\\+e))),...\\\\\\,\\\B\\\,\\\L\\\.map((n>g(n+\\\Verbatim\\\+e,o(l,b(n+\\\Verbatim\\\+e)))))))),g(\\\minted\\\,o(l,o(c,b(\\\minted\\\)))),...a\\n}}})();hljs.registerLanguage(\\\latex\\\,e)})();/*! `vbnet` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ne.regex,t/\\\\d{1,2}\\\\/\\\\d{1,2}\\\\/\\\\d{4}/,a/\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}/,i/(\\\\d|1012)(:\\\\d+){0,2} *(AM|PM)/,s/\\\\d{1,2}(:\\\\d{1,2}){1,2}/,r{\\nclassName:\\\literal\\\,variants:{begin:n.concat(/# */,n.either(a,t),/ *#/)},{\\nbegin:n.concat(/# */,s,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{\\nbegin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,s),/ *#/)}\\n},le.COMMENT(//,/$/,{contains:{className:\\\doctag\\\,begin:/\u003C\\\\/?/,end:/>/}\\n}),oe.COMMENT(null,/$/,{variants:{begin://},{begin:/(\\\\t |^)REM(?\\\\s)/}})\\n;return{name:\\\Visual Basic .NET\\\,aliases:\\\vb\\\,case_insensitive:!0,\\nclassNameAliases:{label:\\\symbol\\\},keywords:{\\nkeyword:\\\addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield\\\,\\nbuilt_in:\\\addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort\\\,\\ntype:\\\boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort\\\,\\nliteral:\\\true false nothing\\\},\\nillegal:\\\//|\\\\\\\\{|\\\\\\\\}|endif|gosub|variant|wend|^\\\\\\\\$ \\\,contains:{\\nclassName:\\\string\\\,begin:/\\\(\\\\\\|^/n)\\\C\\\\b/},{className:\\\string\\\,begin:/\\\/,\\nend:/\\\/,illegal:/\\\\n/,contains:{begin:/\\\\\\/}},r,{className:\\\number\\\,relevance:0,\\nvariants:{begin:/\\\\b\\\\d\\\\d_*((\\\\.\\\\d_+(E+-?\\\\d_+)?)|(E+-?\\\\d_+))RFD@!#?/\\n},{begin:/\\\\b\\\\d\\\\d_*((U?SIL)|%&)?/},{begin:/&H\\\\dA-F_+((U?SIL)|%&)?/},{\\nbegin:/&O0-7_+((U?SIL)|%&)?/},{begin:/&B01_+((U?SIL)|%&)?/}},{\\nclassName:\\\label\\\,begin:/^\\\\w+:/},l,o,{className:\\\meta\\\,\\nbegin:/\\\\t *#(const|disable|else|elseif|enable|end|externalsource|if|region)\\\\b/,\\nend:/$/,keywords:{\\nkeyword:\\\const disable else elseif enable end externalsource if region then\\\},\\ncontains:o}}}})();hljs.registerLanguage(\\\vbnet\\\,e)})();/*! `diff` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const ae.regex;return{name:\\\Diff\\\,\\naliases:\\\patch\\\,contains:{className:\\\meta\\\,relevance:10,\\nmatch:a.either(/^@@ +-\\\\d+,\\\\d+ +\\\\+\\\\d+,\\\\d+ +@@/,/^\\\\*\\\\*\\\\* +\\\\d+,\\\\d+ +\\\\*\\\\*\\\\*\\\\*$/,/^--- +\\\\d+,\\\\d+ +----$/)\\n},{className:\\\comment\\\,variants:{\\nbegin:a.either(/Index: /,/^index/,/{3,}/,/^-{3}/,/^\\\\*{3} /,/^\\\\+{3}/,/^diff --git/),\\nend:/$/},{match:/^\\\\*{15}$/}},{className:\\\addition\\\,begin:/^\\\\+/,end:/$/},{\\nclassName:\\\deletion\\\,begin:/^-/,end:/$/},{className:\\\addition\\\,begin:/^!/,\\nend:/$/}}}})();hljs.registerLanguage(\\\diff\\\,e)})();/*! `makefile` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const i{className:\\\variable\\\,\\nvariants:{begin:\\\\\\\\\\\$\\\\\\\\(\\\+e.UNDERSCORE_IDENT_RE+\\\\\\\\\\\)\\\,\\ncontains:e.BACKSLASH_ESCAPE},{begin:/\\\\$@%\u003C?\\\\^\\\\+\\\\*/}},a{className:\\\string\\\,\\nbegin:/\\\/,end:/\\\/,contains:e.BACKSLASH_ESCAPE,i},n{className:\\\variable\\\,\\nbegin:/\\\\$\\\\(\\\\w-+\\\\s/,end:/\\\\)/,keywords:{\\nbuilt_in:\\\subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value\\\\\n},contains:i},s{begin:\\\^\\\+e.UNDERSCORE_IDENT_RE+\\\\\\\\\\\s*(?:+??)\\\},r{\\nclassName:\\\section\\\,begin:/^^\\\\s+:/,end:/$/,contains:i};return{\\nname:\\\Makefile\\\,aliases:\\\mk\\\,\\\mak\\\,\\\make\\\,keywords:{$pattern:/\\\\w-+/,\\nkeyword:\\\define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath\\\\\n},contains:e.HASH_COMMENT_MODE,i,a,n,s,{className:\\\meta\\\,begin:/^\\\\.PHONY:/,\\nend:/$/,keywords:{$pattern:/\\\\.\\\\w+/,keyword:\\\.PHONY\\\}},r}}})()\\n;hljs.registerLanguage(\\\makefile\\\,e)})();/*! `lua` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const t\\\\\\\\\\\*\\\\\\\\\\\,a\\\\\\\\\\\*\\\\\\\\\\\,n{\\nbegin:t,end:a,contains:\\\self\\\\\n},oe.COMMENT(\\\--(?!\\\\\\\\*\\\\\\\\)\\\,\\\$\\\),e.COMMENT(\\\--\\\\\\\\*\\\\\\\\\\\,a,{contains:n,\\nrelevance:10});return{name:\\\Lua\\\,keywords:{$pattern:e.UNDERSCORE_IDENT_RE,\\nliteral:\\\true false nil\\\,\\nkeyword:\\\and break do else elseif end for goto if in local not or repeat return then until while\\\,\\nbuilt_in:\\\_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove\\\\\n},contains:o.concat({className:\\\function\\\,beginKeywords:\\\function\\\,end:\\\\\\\\\\\)\\\,\\ncontains:e.inherit(e.TITLE_MODE,{\\nbegin:\\\(_a-zA-Z\\\\\\\\w*\\\\\\\\.)*(_a-zA-Z\\\\\\\\w*:)?_a-zA-Z\\\\\\\\w*\\\}),{className:\\\params\\\,\\nbegin:\\\\\\\\\\\(\\\,endsWithParent:!0,contains:o}.concat(o)\\n},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:\\\string\\\,\\nbegin:t,end:a,contains:n,relevance:5})}}})();hljs.registerLanguage(\\\lua\\\,e)\\n})();/*! `csharp` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n{\\nkeyword:\\\abstract\\\,\\\as\\\,\\\base\\\,\\\break\\\,\\\case\\\,\\\catch\\\,\\\class\\\,\\\const\\\,\\\continue\\\,\\\do\\\,\\\else\\\,\\\event\\\,\\\explicit\\\,\\\extern\\\,\\\finally\\\,\\\fixed\\\,\\\for\\\,\\\foreach\\\,\\\goto\\\,\\\if\\\,\\\implicit\\\,\\\in\\\,\\\interface\\\,\\\internal\\\,\\\is\\\,\\\lock\\\,\\\namespace\\\,\\\new\\\,\\\operator\\\,\\\out\\\,\\\override\\\,\\\params\\\,\\\private\\\,\\\protected\\\,\\\public\\\,\\\readonly\\\,\\\record\\\,\\\ref\\\,\\\return\\\,\\\sealed\\\,\\\sizeof\\\,\\\stackalloc\\\,\\\static\\\,\\\struct\\\,\\\switch\\\,\\\this\\\,\\\throw\\\,\\\try\\\,\\\typeof\\\,\\\unchecked\\\,\\\unsafe\\\,\\\using\\\,\\\virtual\\\,\\\void\\\,\\\volatile\\\,\\\while\\\.concat(\\\add\\\,\\\alias\\\,\\\and\\\,\\\ascending\\\,\\\async\\\,\\\await\\\,\\\by\\\,\\\descending\\\,\\\equals\\\,\\\from\\\,\\\get\\\,\\\global\\\,\\\group\\\,\\\init\\\,\\\into\\\,\\\join\\\,\\\let\\\,\\\nameof\\\,\\\not\\\,\\\notnull\\\,\\\on\\\,\\\or\\\,\\\orderby\\\,\\\partial\\\,\\\remove\\\,\\\select\\\,\\\set\\\,\\\unmanaged\\\,\\\value|0\\\,\\\var\\\,\\\when\\\,\\\where\\\,\\\with\\\,\\\yield\\\),\\nbuilt_in:\\\bool\\\,\\\byte\\\,\\\char\\\,\\\decimal\\\,\\\delegate\\\,\\\double\\\,\\\dynamic\\\,\\\enum\\\,\\\float\\\,\\\int\\\,\\\long\\\,\\\nint\\\,\\\nuint\\\,\\\object\\\,\\\sbyte\\\,\\\short\\\,\\\string\\\,\\\ulong\\\,\\\uint\\\,\\\ushort\\\,\\nliteral:\\\default\\\,\\\false\\\,\\\null\\\,\\\true\\\},ae.inherit(e.TITLE_MODE,{\\nbegin:\\\a-zA-Z(\\\\\\\\.?\\\\\\\\w)*\\\}),i{className:\\\number\\\,variants:{\\nbegin:\\\\\\\\\\\b(0b01+)\\\},{\\nbegin:\\\(-?)\\\\\\\\b(\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(u|U|l|L|ul|UL|f|F|b|B)\\\},{\\nbegin:\\\(-?)(\\\\\\\\b0xXa-fA-F0-9+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(eE-+?\\\\\\\\d+)?)\\\\\n},relevance:0},s{className:\\\string\\\,begin:@\\\,end:\\\,contains:{begin:\\\\\\}\\n},te.inherit(s,{illegal:/\\\\n/}),r{className:\\\subst\\\,begin:/\\\\{/,end:/\\\\}/,\\nkeywords:n},le.inherit(r,{illegal:/\\\\n/}),c{className:\\\string\\\,begin:/\\\\$\\\/,\\nend:\\\,illegal:/\\\\n/,contains:{begin:/\\\\{\\\\{/},{begin:/\\\\}\\\\}/\\n},e.BACKSLASH_ESCAPE,l},o{className:\\\string\\\,begin:/\\\\$@\\\/,end:\\\,contains:{\\nbegin:/\\\\{\\\\{/},{begin:/\\\\}\\\\}/},{begin:\\\\\\},r},de.inherit(o,{illegal:/\\\\n/,\\ncontains:{begin:/\\\\{\\\\{/},{begin:/\\\\}\\\\}/},{begin:\\\\\\},l})\\n;r.containso,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.C_BLOCK_COMMENT_MODE,\\nl.containsd,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,i,e.inherit(e.C_BLOCK_COMMENT_MODE,{\\nillegal:/\\\\n/});const g{variants:o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE\\n},E{begin:\\\\u003C\\\,end:\\\>\\\,contains:{beginKeywords:\\\in out\\\},a\\n},_e.IDENT_RE+\\\(\u003C\\\+e.IDENT_RE+\\\(\\\\\\\\s*,\\\\\\\\s*\\\+e.IDENT_RE+\\\)*>)?(\\\\\\\\\\\\\\\\)?\\\,b{\\nbegin:\\\@\\\+e.IDENT_RE,relevance:0};return{name:\\\C#\\\,aliases:\\\cs\\\,\\\c#\\\,\\nkeywords:n,illegal:/::/,contains:e.COMMENT(\\\///\\\,\\\$\\\,{returnBegin:!0,\\ncontains:{className:\\\doctag\\\,variants:{begin:\\\///\\\,relevance:0},{\\nbegin:\\\\\\\x3c!--|--\\\\x3e\\\},{begin:\\\\u003C/?\\\,end:\\\>\\\}}\\n}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:\\\meta\\\,begin:\\\#\\\,\\nend:\\\$\\\,keywords:{\\nkeyword:\\\if else elif endif define undef warning error line region endregion pragma checksum\\\\\n}},g,i,{beginKeywords:\\\class interface\\\,relevance:0,end:/{;/,\\nillegal:/^\\\\s:,/,contains:{beginKeywords:\\\where class\\\\\n},a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},{beginKeywords:\\\namespace\\\,\\nrelevance:0,end:/{;/,illegal:/^\\\\s:/,\\ncontains:a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},{\\nbeginKeywords:\\\record\\\,relevance:0,end:/{;/,illegal:/^\\\\s:/,\\ncontains:a,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},{className:\\\meta\\\,\\nbegin:\\\^\\\\\\\\s*\\\\\\\\(?\\\\\\\\w)\\\,excludeBegin:!0,end:\\\\\\\\\\\\\\,excludeEnd:!0,contains:{\\nclassName:\\\string\\\,begin:/\\\/,end:/\\\/}},{\\nbeginKeywords:\\\new return throw await else\\\,relevance:0},{className:\\\function\\\,\\nbegin:\\\(\\\+_+\\\\\\\\\\\s+)+\\\+e.IDENT_RE+\\\\\\\\\\\s*(\u003C^+>\\\\\\\\s*)?\\\\\\\\(\\\,returnBegin:!0,\\nend:/\\\\s*{;/,excludeEnd:!0,keywords:n,contains:{\\nbeginKeywords:\\\public private protected static internal protected abstract async extern override unsafe virtual new sealed partial\\\,\\nrelevance:0},{begin:e.IDENT_RE+\\\\\\\\\\\s*(\u003C^+>\\\\\\\\s*)?\\\\\\\\(\\\,returnBegin:!0,\\ncontains:e.TITLE_MODE,E,relevance:0},{match:/\\\\(\\\\)/},{className:\\\params\\\,\\nbegin:/\\\\(/,end:/\\\\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,\\ncontains:g,i,e.C_BLOCK_COMMENT_MODE\\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},b}}})()\\n;hljs.registerLanguage(\\\csharp\\\,e)})();/*! `json` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>({name:\\\JSON\\\,contains:{\\nclassName:\\\attr\\\,begin:/\\\(\\\\\\\\.|^\\\\\\\\\\\\\\\r\\\\n)*\\\(?\\\\s*:)/,relevance:1.01},{\\nmatch:/{}\\\\,:/,className:\\\punctuation\\\,relevance:0},e.QUOTE_STRING_MODE,{\\nbeginKeywords:\\\true false null\\\\\n},e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,illegal:\\\\\\\\\\\S\\\})\\n})();hljs.registerLanguage(\\\json\\\,e)})();/*! `nginx` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const ne.regex,a{\\nclassName:\\\variable\\\,variants:{begin:/\\\\$\\\\d+/},{begin:/\\\\$\\\\{\\\\w+\\\\}/},{\\nbegin:n.concat(/$@/,e.UNDERSCORE_IDENT_RE)}},s{endsWithParent:!0,keywords:{\\n$pattern:/a-z_{2,}|\\\\/dev\\\\/poll/,\\nliteral:\\\on\\\,\\\off\\\,\\\yes\\\,\\\no\\\,\\\true\\\,\\\false\\\,\\\none\\\,\\\blocked\\\,\\\debug\\\,\\\info\\\,\\\notice\\\,\\\warn\\\,\\\error\\\,\\\crit\\\,\\\select\\\,\\\break\\\,\\\last\\\,\\\permanent\\\,\\\redirect\\\,\\\kqueue\\\,\\\rtsig\\\,\\\epoll\\\,\\\poll\\\,\\\/dev/poll\\\\\n},relevance:0,illegal:\\\>\\\,contains:e.HASH_COMMENT_MODE,{className:\\\string\\\,\\ncontains:e.BACKSLASH_ESCAPE,a,variants:{begin:/\\\/,end:/\\\/},{begin://,end://\\n}},{begin:\\\(a-z+):/\\\,end:\\\\\\\\\\\s\\\,endsWithParent:!0,excludeEnd:!0,contains:a\\n},{className:\\\regexp\\\,contains:e.BACKSLASH_ESCAPE,a,variants:{begin:\\\\\\\\\\\s\\\\\\\\^\\\,\\nend:\\\\\\\\\\\s|\\\\\\\\{|;\\\,returnEnd:!0},{begin:\\\~\\\\\\\\*?\\\\\\\\s+\\\,end:\\\\\\\\\\\s|\\\\\\\\{|;\\\,returnEnd:!0},{\\nbegin:\\\\\\\\\\\*(\\\\\\\\.a-z\\\\\\\\-+)+\\\},{begin:\\\(a-z\\\\\\\\-+\\\\\\\\.)+\\\\\\\\*\\\}},{className:\\\number\\\,\\nbegin:\\\\\\\\\\\b\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}\\\\\\\\.\\\\\\\\d{1,3}(:\\\\\\\\d{1,5})?\\\\\\\\b\\\},{\\nclassName:\\\number\\\,begin:\\\\\\\\\\\b\\\\\\\\d+kKmMgGdshdwy?\\\\\\\\b\\\,relevance:0},a};return{\\nname:\\\Nginx config\\\,aliases:\\\nginxconf\\\,contains:e.HASH_COMMENT_MODE,{\\nbeginKeywords:\\\upstream location\\\,end:/;|\\\\{/,contains:s.contains,keywords:{\\nsection:\\\upstream location\\\}},{className:\\\section\\\,\\nbegin:n.concat(e.UNDERSCORE_IDENT_RE+n.lookahead(/\\\\s+\\\\{/)),relevance:0},{\\nbegin:n.lookahead(e.UNDERSCORE_IDENT_RE+\\\\\\\\\\\s\\\),end:\\\;|\\\\\\\\{\\\,contains:{\\nclassName:\\\attribute\\\,begin:e.UNDERSCORE_IDENT_RE,starts:s},relevance:0},\\nillegal:\\\^\\\\\\\\s\\\\\\\\}\\\\\\\\{\\\}}})();hljs.registerLanguage(\\\nginx\\\,e)})();/*! `ruby` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ne.regex,a\\\(a-zA-Z_\\\\\\\\w*!??|-+~@|\u003C\u003C|>>|~|?|\u003C>|\u003C>?|\\\\\\\\*\\\\\\\\*|-/+%^&*~`||\\\\\\\\\\\\\\\\?)\\\,i{\\nkeyword:\\\and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor __FILE__\\\,\\nbuilt_in:\\\proc lambda\\\,literal:\\\true false nil\\\},s{className:\\\doctag\\\,\\nbegin:\\\@A-Za-z+\\\},b{begin:\\\#\u003C\\\,end:\\\>\\\},re.COMMENT(\\\#\\\,\\\$\\\,{contains:s\\n}),e.COMMENT(\\\^begin\\\,\\\^end\\\,{contains:s,relevance:10\\n}),e.COMMENT(\\\^__END__\\\,\\\\\\\\\\\n$\\\),c{className:\\\subst\\\,begin:/#\\\\{/,end:/\\\\}/,\\nkeywords:i},t{className:\\\string\\\,contains:e.BACKSLASH_ESCAPE,c,variants:{\\nbegin://,end://},{begin:/\\\/,end:/\\\/},{begin:/`/,end:/`/},{begin:/%qQwWx?\\\\(/,\\nend:/\\\\)/},{begin:/%qQwWx?\\\\/,end:/\\\\/},{begin:/%qQwWx?\\\\{/,end:/\\\\}/},{\\nbegin:/%qQwWx?\u003C/,end:/>/},{begin:/%qQwWx?\\\\//,end:/\\\\//},{begin:/%qQwWx?%/,\\nend:/%/},{begin:/%qQwWx?-/,end:/-/},{begin:/%qQwWx?\\\\|/,end:/\\\\|/},{\\nbegin:/\\\\B\\\\?(\\\\\\\\\\\\d{1,3})/},{begin:/\\\\B\\\\?(\\\\\\\\xA-Fa-f0-9{1,2})/},{\\nbegin:/\\\\B\\\\?(\\\\\\\\u\\\\{?A-Fa-f0-9{1,6}\\\\}?)/},{\\nbegin:/\\\\B\\\\?(\\\\\\\\M-\\\\\\\\C-|\\\\\\\\M-\\\\\\\\c|\\\\\\\\c\\\\\\\\M-|\\\\\\\\M-|\\\\\\\\C-\\\\\\\\M-)\\\\x20-\\\\x7e/},{\\nbegin:/\\\\B\\\\?\\\\\\\\(c|C-)\\\\x20-\\\\x7e/},{begin:/\\\\B\\\\?\\\\\\\\?\\\\S/},{\\nbegin:n.concat(/\u003C\u003C-~??/,n.lookahead(/(\\\\w+)(?\\\\W)^\\\\n*\\\\n(?:^\\\\n*\\\\n)*?\\\\s*\\\\1\\\\b/)),\\ncontains:e.END_SAME_AS_BEGIN({begin:/(\\\\w+)/,end:/(\\\\w+)/,\\ncontains:e.BACKSLASH_ESCAPE,c})}},d\\\0-9(_?0-9)*\\\,g{className:\\\number\\\,\\nrelevance:0,variants:{\\nbegin:`\\\\\\\\b(1-9(_?0-9)*|0)(\\\\\\\\.(${d}))?(eE+-?(${d})|r)?i?\\\\\\\\b`},{\\nbegin:\\\\\\\\\\\b0dD0-9(_?0-9)*r?i?\\\\\\\\b\\\},{begin:\\\\\\\\\\\b0bB0-1(_?0-1)*r?i?\\\\\\\\b\\\\\n},{begin:\\\\\\\\\\\b0oO0-7(_?0-7)*r?i?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0xX0-9a-fA-F(_?0-9a-fA-F)*r?i?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0(_?0-7)+r?i?\\\\\\\\b\\\}},l{className:\\\params\\\,begin:\\\\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\,\\nendsParent:!0,keywords:i},ot,{className:\\\class\\\,beginKeywords:\\\class module\\\,\\nend:\\\$|;\\\,illegal://,contains:e.inherit(e.TITLE_MODE,{\\nbegin:\\\A-Za-z_\\\\\\\\w*(::\\\\\\\\w+)*(\\\\\\\\?|!)?\\\}),{begin:\\\\u003C\\\\\\\\s*\\\,contains:{\\nbegin:\\\(\\\+e.IDENT_RE+\\\::)?\\\+e.IDENT_RE,relevance:0}}.concat(r)},{\\nclassName:\\\function\\\,begin:n.concat(/def\\\\s+/,n.lookahead(a+\\\\\\\\\\\s*(\\\\\\\\(|;|$)\\\)),\\nrelevance:0,keywords:\\\def\\\,end:\\\$|;\\\,contains:e.inherit(e.TITLE_MODE,{begin:a\\n}),l.concat(r)},{begin:e.IDENT_RE+\\\::\\\},{className:\\\symbol\\\,\\nbegin:e.UNDERSCORE_IDENT_RE+\\\(!|\\\\\\\\?)?:\\\,relevance:0},{className:\\\symbol\\\,\\nbegin:\\\:(?!\\\\\\\\s)\\\,contains:t,{begin:a},relevance:0},g,{className:\\\variable\\\,\\nbegin:\\\(\\\\\\\\$\\\\\\\\W)|((\\\\\\\\$|@@?)(\\\\\\\\w+))(?^@$?)(?!A-Za-z)(?!@$?)\\\},{\\nclassName:\\\params\\\,begin:/\\\\|/,end:/\\\\|/,relevance:0,keywords:i},{\\nbegin:\\\(\\\+e.RE_STARTERS_RE+\\\|unless)\\\\\\\\s*\\\,keywords:\\\unless\\\,contains:{\\nclassName:\\\regexp\\\,contains:e.BACKSLASH_ESCAPE,c,illegal:/\\\\n/,variants:{\\nbegin:\\\/\\\,end:\\\/a-z*\\\},{begin:/%r\\\\{/,end:/\\\\}a-z*/},{begin:\\\%r\\\\\\\\(\\\,\\nend:\\\\\\\\\\\)a-z*\\\},{begin:\\\%r!\\\,end:\\\!a-z*\\\},{begin:\\\%r\\\\\\\\\\\,end:\\\\\\\\\\\a-z*\\\}\\n}.concat(b,r),relevance:0}.concat(b,r);c.containso,l.containso;const _{\\nbegin:/^\\\\s*>/,starts:{end:\\\$\\\,contains:o}},{className:\\\meta\\\,\\nbegin:\\\^(>?>|\\\\\\\\w#+\\\\\\\\(\\\\\\\\w+\\\\\\\\):\\\\\\\\d+:\\\\\\\\d+>|(\\\\\\\\w+-)?\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+(p\\\\\\\\d+)?^\\\\\\\\d^>+>)(? )\\\,\\nstarts:{end:\\\$\\\,contains:o}};return r.unshift(b),{name:\\\Ruby\\\,\\naliases:\\\rb\\\,\\\gemspec\\\,\\\podspec\\\,\\\thor\\\,\\\irb\\\,keywords:i,illegal:/\\\\/\\\\*/,\\ncontains:e.SHEBANG({binary:\\\ruby\\\}).concat(_).concat(r).concat(o)}}})()\\n;hljs.registerLanguage(\\\ruby\\\,e)})();/*! `yaml` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst n\\\true false yes no null\\\,a\\\\\\\\\\\w#;/?:@&+$,.~*()\\\\\\\\+\\\,s{\\nclassName:\\\string\\\,relevance:0,variants:{begin://,end://},{begin:/\\\/,end:/\\\/\\n},{begin:/\\\\S+/},contains:e.BACKSLASH_ESCAPE,{className:\\\template-variable\\\,\\nvariants:{begin:/\\\\{\\\\{/,end:/\\\\}\\\\}/},{begin:/%\\\\{/,end:/\\\\}/}}},ie.inherit(s,{\\nvariants:{begin://,end://},{begin:/\\\/,end:/\\\/},{begin:/^\\\\s,{}\\\\+/}}),l{\\nend:\\\,\\\,endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t{begin:/\\\\{/,\\nend:/\\\\}/,contains:l,illegal:\\\\\\\\\\\n\\\,relevance:0},g{begin:\\\\\\\\\\\\\\,end:\\\\\\\\\\\\\\,\\ncontains:l,illegal:\\\\\\\\\\\n\\\,relevance:0},b{className:\\\attr\\\,variants:{\\nbegin:\\\\\\\\\\\w\\\\\\\\w :\\\\\\\\/.-*:(? \\\\t|$)\\\},{begin:\\\\\\\\\\\w\\\\\\\\w :\\\\\\\\/.-*\\\:(? \\\\t|$)},{\\nbegin:\\\\\\\\\\\w\\\\\\\\w :\\\\\\\\/.-*:(? \\\\t|$)\\\}},{className:\\\meta\\\,begin:\\\^---\\\\\\\\s*$\\\,\\nrelevance:10},{className:\\\string\\\,\\nbegin:\\\\\\\\\\\|>(1-9?+-)? *\\\\\\\\n( +)^ ^\\\\\\\\n*\\\\\\\\n(\\\\\\\\2^\\\\\\\\n+\\\\\\\\n?)*\\\},{\\nbegin:\\\\u003C%%-?\\\,end:\\\%-?%>\\\,subLanguage:\\\ruby\\\,excludeBegin:!0,excludeEnd:!0,\\nrelevance:0},{className:\\\type\\\,begin:\\\!\\\\\\\\w+!\\\+a},{className:\\\type\\\,\\nbegin:\\\!\u003C\\\+a+\\\>\\\},{className:\\\type\\\,begin:\\\!\\\+a},{className:\\\type\\\,begin:\\\!!\\\+a\\n},{className:\\\meta\\\,begin:\\\&\\\+e.UNDERSCORE_IDENT_RE+\\\$\\\},{className:\\\meta\\\,\\nbegin:\\\\\\\\\\\*\\\+e.UNDERSCORE_IDENT_RE+\\\$\\\},{className:\\\bullet\\\,begin:\\\-(? |$)\\\,\\nrelevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{\\nclassName:\\\number\\\,\\nbegin:\\\\\\\\\\\b0-9{4}(-0-90-9){0,2}(Tt \\\\\\\\t0-90-9?(:0-90-9){2})?(\\\\\\\\.0-9*)?( \\\\\\\\t)*(Z|-+0-90-9?(:0-90-9)?)?\\\\\\\\b\\\\\n},{className:\\\number\\\,begin:e.C_NUMBER_RE+\\\\\\\\\\\b\\\,relevance:0},t,g,s,r...b\\n;return r.pop(),r.push(i),l.containsr,{name:\\\YAML\\\,case_insensitive:!0,\\naliases:\\\yml\\\,contains:b}}})();hljs.registerLanguage(\\\yaml\\\,e)})();/*! `php-template` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var n(()>{\\\use strict\\\;return n>({name:\\\PHP template\\\,\\nsubLanguage:\\\xml\\\,contains:{begin:/\u003C\\\\?(php|)?/,end:/\\\\?>/,subLanguage:\\\php\\\,\\ncontains:{begin:\\\/\\\\\\\\*\\\,end:\\\\\\\\\\\*/\\\,skip:!0},{begin:b\\\,end:\\\,skip:!0},{\\nbegin:\\\b\\\,end:\\\\\\,skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,\\nclassName:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{\\nillegal:null,className:null,contains:null,skip:!0})}})})()\\n;hljs.registerLanguage(\\\php-template\\\,n)})();/*! `sql` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst re.regex,te.COMMENT(\\\--\\\,\\\$\\\),n\\\true\\\,\\\false\\\,\\\unknown\\\,a\\\bigint\\\,\\\binary\\\,\\\blob\\\,\\\boolean\\\,\\\char\\\,\\\character\\\,\\\clob\\\,\\\date\\\,\\\dec\\\,\\\decfloat\\\,\\\decimal\\\,\\\float\\\,\\\int\\\,\\\integer\\\,\\\interval\\\,\\\nchar\\\,\\\nclob\\\,\\\national\\\,\\\numeric\\\,\\\real\\\,\\\row\\\,\\\smallint\\\,\\\time\\\,\\\timestamp\\\,\\\varchar\\\,\\\varying\\\,\\\varbinary\\\,i\\\abs\\\,\\\acos\\\,\\\array_agg\\\,\\\asin\\\,\\\atan\\\,\\\avg\\\,\\\cast\\\,\\\ceil\\\,\\\ceiling\\\,\\\coalesce\\\,\\\corr\\\,\\\cos\\\,\\\cosh\\\,\\\count\\\,\\\covar_pop\\\,\\\covar_samp\\\,\\\cume_dist\\\,\\\dense_rank\\\,\\\deref\\\,\\\element\\\,\\\exp\\\,\\\extract\\\,\\\first_value\\\,\\\floor\\\,\\\json_array\\\,\\\json_arrayagg\\\,\\\json_exists\\\,\\\json_object\\\,\\\json_objectagg\\\,\\\json_query\\\,\\\json_table\\\,\\\json_table_primitive\\\,\\\json_value\\\,\\\lag\\\,\\\last_value\\\,\\\lead\\\,\\\listagg\\\,\\\ln\\\,\\\log\\\,\\\log10\\\,\\\lower\\\,\\\max\\\,\\\min\\\,\\\mod\\\,\\\nth_value\\\,\\\ntile\\\,\\\nullif\\\,\\\percent_rank\\\,\\\percentile_cont\\\,\\\percentile_disc\\\,\\\position\\\,\\\position_regex\\\,\\\power\\\,\\\rank\\\,\\\regr_avgx\\\,\\\regr_avgy\\\,\\\regr_count\\\,\\\regr_intercept\\\,\\\regr_r2\\\,\\\regr_slope\\\,\\\regr_sxx\\\,\\\regr_sxy\\\,\\\regr_syy\\\,\\\row_number\\\,\\\sin\\\,\\\sinh\\\,\\\sqrt\\\,\\\stddev_pop\\\,\\\stddev_samp\\\,\\\substring\\\,\\\substring_regex\\\,\\\sum\\\,\\\tan\\\,\\\tanh\\\,\\\translate\\\,\\\translate_regex\\\,\\\treat\\\,\\\trim\\\,\\\trim_array\\\,\\\unnest\\\,\\\upper\\\,\\\value_of\\\,\\\var_pop\\\,\\\var_samp\\\,\\\width_bucket\\\,s\\\create table\\\,\\\insert into\\\,\\\primary key\\\,\\\foreign key\\\,\\\not null\\\,\\\alter table\\\,\\\add constraint\\\,\\\grouping sets\\\,\\\on overflow\\\,\\\character set\\\,\\\respect nulls\\\,\\\ignore nulls\\\,\\\nulls first\\\,\\\nulls last\\\,\\\depth first\\\,\\\breadth first\\\,oi,c\\\abs\\\,\\\acos\\\,\\\all\\\,\\\allocate\\\,\\\alter\\\,\\\and\\\,\\\any\\\,\\\are\\\,\\\array\\\,\\\array_agg\\\,\\\array_max_cardinality\\\,\\\as\\\,\\\asensitive\\\,\\\asin\\\,\\\asymmetric\\\,\\\at\\\,\\\atan\\\,\\\atomic\\\,\\\authorization\\\,\\\avg\\\,\\\begin\\\,\\\begin_frame\\\,\\\begin_partition\\\,\\\between\\\,\\\bigint\\\,\\\binary\\\,\\\blob\\\,\\\boolean\\\,\\\both\\\,\\\by\\\,\\\call\\\,\\\called\\\,\\\cardinality\\\,\\\cascaded\\\,\\\case\\\,\\\cast\\\,\\\ceil\\\,\\\ceiling\\\,\\\char\\\,\\\char_length\\\,\\\character\\\,\\\character_length\\\,\\\check\\\,\\\classifier\\\,\\\clob\\\,\\\close\\\,\\\coalesce\\\,\\\collate\\\,\\\collect\\\,\\\column\\\,\\\commit\\\,\\\condition\\\,\\\connect\\\,\\\constraint\\\,\\\contains\\\,\\\convert\\\,\\\copy\\\,\\\corr\\\,\\\corresponding\\\,\\\cos\\\,\\\cosh\\\,\\\count\\\,\\\covar_pop\\\,\\\covar_samp\\\,\\\create\\\,\\\cross\\\,\\\cube\\\,\\\cume_dist\\\,\\\current\\\,\\\current_catalog\\\,\\\current_date\\\,\\\current_default_transform_group\\\,\\\current_path\\\,\\\current_role\\\,\\\current_row\\\,\\\current_schema\\\,\\\current_time\\\,\\\current_timestamp\\\,\\\current_path\\\,\\\current_role\\\,\\\current_transform_group_for_type\\\,\\\current_user\\\,\\\cursor\\\,\\\cycle\\\,\\\date\\\,\\\day\\\,\\\deallocate\\\,\\\dec\\\,\\\decimal\\\,\\\decfloat\\\,\\\declare\\\,\\\default\\\,\\\define\\\,\\\delete\\\,\\\dense_rank\\\,\\\deref\\\,\\\describe\\\,\\\deterministic\\\,\\\disconnect\\\,\\\distinct\\\,\\\double\\\,\\\drop\\\,\\\dynamic\\\,\\\each\\\,\\\element\\\,\\\else\\\,\\\empty\\\,\\\end\\\,\\\end_frame\\\,\\\end_partition\\\,\\\end-exec\\\,\\\equals\\\,\\\escape\\\,\\\every\\\,\\\except\\\,\\\exec\\\,\\\execute\\\,\\\exists\\\,\\\exp\\\,\\\external\\\,\\\extract\\\,\\\false\\\,\\\fetch\\\,\\\filter\\\,\\\first_value\\\,\\\float\\\,\\\floor\\\,\\\for\\\,\\\foreign\\\,\\\frame_row\\\,\\\free\\\,\\\from\\\,\\\full\\\,\\\function\\\,\\\fusion\\\,\\\get\\\,\\\global\\\,\\\grant\\\,\\\group\\\,\\\grouping\\\,\\\groups\\\,\\\having\\\,\\\hold\\\,\\\hour\\\,\\\identity\\\,\\\in\\\,\\\indicator\\\,\\\initial\\\,\\\inner\\\,\\\inout\\\,\\\insensitive\\\,\\\insert\\\,\\\int\\\,\\\integer\\\,\\\intersect\\\,\\\intersection\\\,\\\interval\\\,\\\into\\\,\\\is\\\,\\\join\\\,\\\json_array\\\,\\\json_arrayagg\\\,\\\json_exists\\\,\\\json_object\\\,\\\json_objectagg\\\,\\\json_query\\\,\\\json_table\\\,\\\json_table_primitive\\\,\\\json_value\\\,\\\lag\\\,\\\language\\\,\\\large\\\,\\\last_value\\\,\\\lateral\\\,\\\lead\\\,\\\leading\\\,\\\left\\\,\\\like\\\,\\\like_regex\\\,\\\listagg\\\,\\\ln\\\,\\\local\\\,\\\localtime\\\,\\\localtimestamp\\\,\\\log\\\,\\\log10\\\,\\\lower\\\,\\\match\\\,\\\match_number\\\,\\\match_recognize\\\,\\\matches\\\,\\\max\\\,\\\member\\\,\\\merge\\\,\\\method\\\,\\\min\\\,\\\minute\\\,\\\mod\\\,\\\modifies\\\,\\\module\\\,\\\month\\\,\\\multiset\\\,\\\national\\\,\\\natural\\\,\\\nchar\\\,\\\nclob\\\,\\\new\\\,\\\no\\\,\\\none\\\,\\\normalize\\\,\\\not\\\,\\\nth_value\\\,\\\ntile\\\,\\\null\\\,\\\nullif\\\,\\\numeric\\\,\\\octet_length\\\,\\\occurrences_regex\\\,\\\of\\\,\\\offset\\\,\\\old\\\,\\\omit\\\,\\\on\\\,\\\one\\\,\\\only\\\,\\\open\\\,\\\or\\\,\\\order\\\,\\\out\\\,\\\outer\\\,\\\over\\\,\\\overlaps\\\,\\\overlay\\\,\\\parameter\\\,\\\partition\\\,\\\pattern\\\,\\\per\\\,\\\percent\\\,\\\percent_rank\\\,\\\percentile_cont\\\,\\\percentile_disc\\\,\\\period\\\,\\\portion\\\,\\\position\\\,\\\position_regex\\\,\\\power\\\,\\\precedes\\\,\\\precision\\\,\\\prepare\\\,\\\primary\\\,\\\procedure\\\,\\\ptf\\\,\\\range\\\,\\\rank\\\,\\\reads\\\,\\\real\\\,\\\recursive\\\,\\\ref\\\,\\\references\\\,\\\referencing\\\,\\\regr_avgx\\\,\\\regr_avgy\\\,\\\regr_count\\\,\\\regr_intercept\\\,\\\regr_r2\\\,\\\regr_slope\\\,\\\regr_sxx\\\,\\\regr_sxy\\\,\\\regr_syy\\\,\\\release\\\,\\\result\\\,\\\return\\\,\\\returns\\\,\\\revoke\\\,\\\right\\\,\\\rollback\\\,\\\rollup\\\,\\\row\\\,\\\row_number\\\,\\\rows\\\,\\\running\\\,\\\savepoint\\\,\\\scope\\\,\\\scroll\\\,\\\search\\\,\\\second\\\,\\\seek\\\,\\\select\\\,\\\sensitive\\\,\\\session_user\\\,\\\set\\\,\\\show\\\,\\\similar\\\,\\\sin\\\,\\\sinh\\\,\\\skip\\\,\\\smallint\\\,\\\some\\\,\\\specific\\\,\\\specifictype\\\,\\\sql\\\,\\\sqlexception\\\,\\\sqlstate\\\,\\\sqlwarning\\\,\\\sqrt\\\,\\\start\\\,\\\static\\\,\\\stddev_pop\\\,\\\stddev_samp\\\,\\\submultiset\\\,\\\subset\\\,\\\substring\\\,\\\substring_regex\\\,\\\succeeds\\\,\\\sum\\\,\\\symmetric\\\,\\\system\\\,\\\system_time\\\,\\\system_user\\\,\\\table\\\,\\\tablesample\\\,\\\tan\\\,\\\tanh\\\,\\\then\\\,\\\time\\\,\\\timestamp\\\,\\\timezone_hour\\\,\\\timezone_minute\\\,\\\to\\\,\\\trailing\\\,\\\translate\\\,\\\translate_regex\\\,\\\translation\\\,\\\treat\\\,\\\trigger\\\,\\\trim\\\,\\\trim_array\\\,\\\true\\\,\\\truncate\\\,\\\uescape\\\,\\\union\\\,\\\unique\\\,\\\unknown\\\,\\\unnest\\\,\\\update\\\,\\\upper\\\,\\\user\\\,\\\using\\\,\\\value\\\,\\\values\\\,\\\value_of\\\,\\\var_pop\\\,\\\var_samp\\\,\\\varbinary\\\,\\\varchar\\\,\\\varying\\\,\\\versioning\\\,\\\when\\\,\\\whenever\\\,\\\where\\\,\\\width_bucket\\\,\\\window\\\,\\\with\\\,\\\within\\\,\\\without\\\,\\\year\\\,\\\add\\\,\\\asc\\\,\\\collation\\\,\\\desc\\\,\\\final\\\,\\\first\\\,\\\last\\\,\\\view\\\.filter((e>!i.includes(e))),l{\\nbegin:r.concat(/\\\\b/,r.either(...o),/\\\\s*\\\\(/),relevance:0,keywords:{built_in:o}}\\n;return{name:\\\SQL\\\,case_insensitive:!0,illegal:/{}|\u003C\\\\//,keywords:{\\n$pattern:/\\\\b\\\\w\\\\.+/,keyword:((e,{exceptions:r,when:t}{})>{const nt\\n;return rr||,e.map((e>e.match(/\\\\|\\\\d+$/)||r.includes(e)?e:n(e)?e+\\\|0\\\:e))\\n})(c,{when:e>e.length\u003C3}),literal:n,type:a,\\nbuilt_in:\\\current_catalog\\\,\\\current_date\\\,\\\current_default_transform_group\\\,\\\current_path\\\,\\\current_role\\\,\\\current_schema\\\,\\\current_transform_group_for_type\\\,\\\current_user\\\,\\\session_user\\\,\\\system_time\\\,\\\system_user\\\,\\\current_time\\\,\\\localtime\\\,\\\current_timestamp\\\,\\\localtimestamp\\\\\n},contains:{begin:r.either(...s),relevance:0,keywords:{$pattern:/\\\\w\\\\.+/,\\nkeyword:c.concat(s),literal:n,type:a}},{className:\\\type\\\,\\nbegin:r.either(\\\double precision\\\,\\\large object\\\,\\\with timezone\\\,\\\without timezone\\\)\\n},l,{className:\\\variable\\\,begin:/@a-z0-9+/},{className:\\\string\\\,variants:{\\nbegin://,end://,contains:{begin://}}},{begin:/\\\/,end:/\\\/,contains:{\\nbegin:/\\\\\\/}},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:\\\operator\\\,\\nbegin:/-+*/%^~|&&?|\\\\|\\\\|?|!?|\u003C(?:>?|\u003C|>)?|>>?/,relevance:0}}}})()\\n;hljs.registerLanguage(\\\sql\\\,e)})();/*! `objectivec` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n/a-zA-Z@a-zA-Z0-9_*/,_{\\n$pattern:n,keyword:\\\@interface\\\,\\\@class\\\,\\\@protocol\\\,\\\@implementation\\\}\\n;return{name:\\\Objective-C\\\,\\naliases:\\\mm\\\,\\\objc\\\,\\\obj-c\\\,\\\obj-c++\\\,\\\objective-c++\\\,keywords:{$pattern:n,\\nkeyword:\\\int\\\,\\\float\\\,\\\while\\\,\\\char\\\,\\\export\\\,\\\sizeof\\\,\\\typedef\\\,\\\const\\\,\\\struct\\\,\\\for\\\,\\\union\\\,\\\unsigned\\\,\\\long\\\,\\\volatile\\\,\\\static\\\,\\\bool\\\,\\\mutable\\\,\\\if\\\,\\\do\\\,\\\return\\\,\\\goto\\\,\\\void\\\,\\\enum\\\,\\\else\\\,\\\break\\\,\\\extern\\\,\\\asm\\\,\\\case\\\,\\\short\\\,\\\default\\\,\\\double\\\,\\\register\\\,\\\explicit\\\,\\\signed\\\,\\\typename\\\,\\\this\\\,\\\switch\\\,\\\continue\\\,\\\wchar_t\\\,\\\inline\\\,\\\readonly\\\,\\\assign\\\,\\\readwrite\\\,\\\self\\\,\\\@synchronized\\\,\\\id\\\,\\\typeof\\\,\\\nonatomic\\\,\\\super\\\,\\\unichar\\\,\\\IBOutlet\\\,\\\IBAction\\\,\\\strong\\\,\\\weak\\\,\\\copy\\\,\\\in\\\,\\\out\\\,\\\inout\\\,\\\bycopy\\\,\\\byref\\\,\\\oneway\\\,\\\__strong\\\,\\\__weak\\\,\\\__block\\\,\\\__autoreleasing\\\,\\\@private\\\,\\\@protected\\\,\\\@public\\\,\\\@try\\\,\\\@property\\\,\\\@end\\\,\\\@throw\\\,\\\@catch\\\,\\\@finally\\\,\\\@autoreleasepool\\\,\\\@synthesize\\\,\\\@dynamic\\\,\\\@selector\\\,\\\@optional\\\,\\\@required\\\,\\\@encode\\\,\\\@package\\\,\\\@import\\\,\\\@defs\\\,\\\@compatibility_alias\\\,\\\__bridge\\\,\\\__bridge_transfer\\\,\\\__bridge_retained\\\,\\\__bridge_retain\\\,\\\__covariant\\\,\\\__contravariant\\\,\\\__kindof\\\,\\\_Nonnull\\\,\\\_Nullable\\\,\\\_Null_unspecified\\\,\\\__FUNCTION__\\\,\\\__PRETTY_FUNCTION__\\\,\\\__attribute__\\\,\\\getter\\\,\\\setter\\\,\\\retain\\\,\\\unsafe_unretained\\\,\\\nonnull\\\,\\\nullable\\\,\\\null_unspecified\\\,\\\null_resettable\\\,\\\class\\\,\\\instancetype\\\,\\\NS_DESIGNATED_INITIALIZER\\\,\\\NS_UNAVAILABLE\\\,\\\NS_REQUIRES_SUPER\\\,\\\NS_RETURNS_INNER_POINTER\\\,\\\NS_INLINE\\\,\\\NS_AVAILABLE\\\,\\\NS_DEPRECATED\\\,\\\NS_ENUM\\\,\\\NS_OPTIONS\\\,\\\NS_SWIFT_UNAVAILABLE\\\,\\\NS_ASSUME_NONNULL_BEGIN\\\,\\\NS_ASSUME_NONNULL_END\\\,\\\NS_REFINED_FOR_SWIFT\\\,\\\NS_SWIFT_NAME\\\,\\\NS_SWIFT_NOTHROW\\\,\\\NS_DURING\\\,\\\NS_HANDLER\\\,\\\NS_ENDHANDLER\\\,\\\NS_VALUERETURN\\\,\\\NS_VOIDRETURN\\\,\\nliteral:\\\false\\\,\\\true\\\,\\\FALSE\\\,\\\TRUE\\\,\\\nil\\\,\\\YES\\\,\\\NO\\\,\\\NULL\\\,\\nbuilt_in:\\\BOOL\\\,\\\dispatch_once_t\\\,\\\dispatch_queue_t\\\,\\\dispatch_sync\\\,\\\dispatch_async\\\,\\\dispatch_once\\\\\n},illegal:\\\\u003C/\\\,contains:{className:\\\built_in\\\,\\nbegin:\\\\\\\\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\\\\\w+\\\\\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{\\nclassName:\\\string\\\,variants:{begin:@\\\,end:\\\,illegal:\\\\\\\\\\\n\\\,\\ncontains:e.BACKSLASH_ESCAPE}},{className:\\\meta\\\,begin:/#\\\\s*a-z+\\\\b/,end:/$/,\\nkeywords:{\\nkeyword:\\\if else elif endif define undef warning error line pragma ifdef ifndef include\\\\\n},contains:{begin:/\\\\\\\\\\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{\\nclassName:\\\string\\\}),{className:\\\string\\\,begin:/\u003C.*?>/,end:/$/,illegal:\\\\\\\\\\\n\\\\\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},{className:\\\class\\\,\\nbegin:\\\(\\\+_.keyword.join(\\\|\\\)+\\\)\\\\\\\\b\\\,end:/(\\\\{|$)/,excludeEnd:!0,keywords:_,\\ncontains:e.UNDERSCORE_TITLE_MODE},{begin:\\\\\\\\\\\.\\\+e.UNDERSCORE_IDENT_RE,\\nrelevance:0}}}})();hljs.registerLanguage(\\\objectivec\\\,e)})();/*! `cpp` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const te.regex,ae.COMMENT(\\\//\\\,\\\$\\\,{\\ncontains:{begin:/\\\\\\\\\\\\n/}\\n}),n\\\a-zA-Z_\\\\\\\\w*::\\\,r\\\(?!struct)(decltype\\\\\\\\(auto\\\\\\\\)|\\\+t.optional(n)+\\\a-zA-Z_\\\\\\\\w*\\\+t.optional(\\\\u003C^\u003C>+>\\\)+\\\)\\\,i{\\nclassName:\\\type\\\,begin:\\\\\\\\\\\ba-z\\\\\\\\d_*_t\\\\\\\\b\\\},s{className:\\\string\\\,variants:{\\nbegin:(u8?|U|L)?\\\,end:\\\,illegal:\\\\\\\\\\\n\\\,contains:e.BACKSLASH_ESCAPE},{\\nbegin:\\\(u8?|U|L)?(\\\\\\\\\\\\\\\\(x0-9A-Fa-f{2}|u0-9A-Fa-f{4,8}|0-7{3}|\\\\\\\\S)|.)\\\,\\nend:\\\\\\,illegal:\\\.\\\},e.END_SAME_AS_BEGIN({\\nbegin:/(?:u8?|U|L)?R\\\(^()\\\\\\\\ {0,16})\\\\(/,end:/\\\\)(^()\\\\\\\\ {0,16})\\\/})},c{\\nclassName:\\\number\\\,variants:{begin:\\\\\\\\\\\b(0b01+)\\\},{\\nbegin:\\\(-?)\\\\\\\\b(\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)\\\\\n},{\\nbegin:\\\(-?)(\\\\\\\\b0xXa-fA-F0-9+|(\\\\\\\\b\\\\\\\\d+(\\\\\\\\.\\\\\\\\d*)?|\\\\\\\\.\\\\\\\\d+)(eE-+?\\\\\\\\d+)?)\\\\\n},relevance:0},o{className:\\\meta\\\,begin:/#\\\\s*a-z+\\\\b/,end:/$/,keywords:{\\nkeyword:\\\if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\\\\\n},contains:{begin:/\\\\\\\\\\\\n/,relevance:0},e.inherit(s,{className:\\\string\\\}),{\\nclassName:\\\string\\\,begin:/\u003C.*?>/},a,e.C_BLOCK_COMMENT_MODE},l{\\nclassName:\\\title\\\,begin:t.optional(n)+e.IDENT_RE,relevance:0\\n},dt.optional(n)+e.IDENT_RE+\\\\\\\\\\\s*\\\\\\\\(\\\,u{\\ntype:\\\bool\\\,\\\char\\\,\\\char16_t\\\,\\\char32_t\\\,\\\char8_t\\\,\\\double\\\,\\\float\\\,\\\int\\\,\\\long\\\,\\\short\\\,\\\void\\\,\\\wchar_t\\\,\\\unsigned\\\,\\\signed\\\,\\\const\\\,\\\static\\\,\\nkeyword:\\\alignas\\\,\\\alignof\\\,\\\and\\\,\\\and_eq\\\,\\\asm\\\,\\\atomic_cancel\\\,\\\atomic_commit\\\,\\\atomic_noexcept\\\,\\\auto\\\,\\\bitand\\\,\\\bitor\\\,\\\break\\\,\\\case\\\,\\\catch\\\,\\\class\\\,\\\co_await\\\,\\\co_return\\\,\\\co_yield\\\,\\\compl\\\,\\\concept\\\,\\\const_cast|10\\\,\\\consteval\\\,\\\constexpr\\\,\\\constinit\\\,\\\continue\\\,\\\decltype\\\,\\\default\\\,\\\delete\\\,\\\do\\\,\\\dynamic_cast|10\\\,\\\else\\\,\\\enum\\\,\\\explicit\\\,\\\export\\\,\\\extern\\\,\\\false\\\,\\\final\\\,\\\for\\\,\\\friend\\\,\\\goto\\\,\\\if\\\,\\\import\\\,\\\inline\\\,\\\module\\\,\\\mutable\\\,\\\namespace\\\,\\\new\\\,\\\noexcept\\\,\\\not\\\,\\\not_eq\\\,\\\nullptr\\\,\\\operator\\\,\\\or\\\,\\\or_eq\\\,\\\override\\\,\\\private\\\,\\\protected\\\,\\\public\\\,\\\reflexpr\\\,\\\register\\\,\\\reinterpret_cast|10\\\,\\\requires\\\,\\\return\\\,\\\sizeof\\\,\\\static_assert\\\,\\\static_cast|10\\\,\\\struct\\\,\\\switch\\\,\\\synchronized\\\,\\\template\\\,\\\this\\\,\\\thread_local\\\,\\\throw\\\,\\\transaction_safe\\\,\\\transaction_safe_dynamic\\\,\\\true\\\,\\\try\\\,\\\typedef\\\,\\\typeid\\\,\\\typename\\\,\\\union\\\,\\\using\\\,\\\virtual\\\,\\\volatile\\\,\\\while\\\,\\\xor\\\,\\\xor_eq\\\,\\nliteral:\\\NULL\\\,\\\false\\\,\\\nullopt\\\,\\\nullptr\\\,\\\true\\\,built_in:\\\_Pragma\\\,\\n_type_hints:\\\any\\\,\\\auto_ptr\\\,\\\barrier\\\,\\\binary_semaphore\\\,\\\bitset\\\,\\\complex\\\,\\\condition_variable\\\,\\\condition_variable_any\\\,\\\counting_semaphore\\\,\\\deque\\\,\\\false_type\\\,\\\future\\\,\\\imaginary\\\,\\\initializer_list\\\,\\\istringstream\\\,\\\jthread\\\,\\\latch\\\,\\\lock_guard\\\,\\\multimap\\\,\\\multiset\\\,\\\mutex\\\,\\\optional\\\,\\\ostringstream\\\,\\\packaged_task\\\,\\\pair\\\,\\\promise\\\,\\\priority_queue\\\,\\\queue\\\,\\\recursive_mutex\\\,\\\recursive_timed_mutex\\\,\\\scoped_lock\\\,\\\set\\\,\\\shared_future\\\,\\\shared_lock\\\,\\\shared_mutex\\\,\\\shared_timed_mutex\\\,\\\shared_ptr\\\,\\\stack\\\,\\\string_view\\\,\\\stringstream\\\,\\\timed_mutex\\\,\\\thread\\\,\\\true_type\\\,\\\tuple\\\,\\\unique_lock\\\,\\\unique_ptr\\\,\\\unordered_map\\\,\\\unordered_multimap\\\,\\\unordered_multiset\\\,\\\unordered_set\\\,\\\variant\\\,\\\vector\\\,\\\weak_ptr\\\,\\\wstring\\\,\\\wstring_view\\\\\n},p{className:\\\function.dispatch\\\,relevance:0,keywords:{\\n_hint:\\\abort\\\,\\\abs\\\,\\\acos\\\,\\\apply\\\,\\\as_const\\\,\\\asin\\\,\\\atan\\\,\\\atan2\\\,\\\calloc\\\,\\\ceil\\\,\\\cerr\\\,\\\cin\\\,\\\clog\\\,\\\cos\\\,\\\cosh\\\,\\\cout\\\,\\\declval\\\,\\\endl\\\,\\\exchange\\\,\\\exit\\\,\\\exp\\\,\\\fabs\\\,\\\floor\\\,\\\fmod\\\,\\\forward\\\,\\\fprintf\\\,\\\fputs\\\,\\\free\\\,\\\frexp\\\,\\\fscanf\\\,\\\future\\\,\\\invoke\\\,\\\isalnum\\\,\\\isalpha\\\,\\\iscntrl\\\,\\\isdigit\\\,\\\isgraph\\\,\\\islower\\\,\\\isprint\\\,\\\ispunct\\\,\\\isspace\\\,\\\isupper\\\,\\\isxdigit\\\,\\\labs\\\,\\\launder\\\,\\\ldexp\\\,\\\log\\\,\\\log10\\\,\\\make_pair\\\,\\\make_shared\\\,\\\make_shared_for_overwrite\\\,\\\make_tuple\\\,\\\make_unique\\\,\\\malloc\\\,\\\memchr\\\,\\\memcmp\\\,\\\memcpy\\\,\\\memset\\\,\\\modf\\\,\\\move\\\,\\\pow\\\,\\\printf\\\,\\\putchar\\\,\\\puts\\\,\\\realloc\\\,\\\scanf\\\,\\\sin\\\,\\\sinh\\\,\\\snprintf\\\,\\\sprintf\\\,\\\sqrt\\\,\\\sscanf\\\,\\\std\\\,\\\stderr\\\,\\\stdin\\\,\\\stdout\\\,\\\strcat\\\,\\\strchr\\\,\\\strcmp\\\,\\\strcpy\\\,\\\strcspn\\\,\\\strlen\\\,\\\strncat\\\,\\\strncmp\\\,\\\strncpy\\\,\\\strpbrk\\\,\\\strrchr\\\,\\\strspn\\\,\\\strstr\\\,\\\swap\\\,\\\tan\\\,\\\tanh\\\,\\\terminate\\\,\\\to_underlying\\\,\\\tolower\\\,\\\toupper\\\,\\\vfprintf\\\,\\\visit\\\,\\\vprintf\\\,\\\vsprintf\\\\\n},\\nbegin:t.concat(/\\\\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,t.lookahead(/(\u003C^\u003C>+>|)\\\\s*\\\\(/))\\n},_p,o,i,a,e.C_BLOCK_COMMENT_MODE,c,s,m{variants:{begin://,end:/;/},{\\nbegin:/\\\\(/,end:/\\\\)/},{beginKeywords:\\\new throw return else\\\,end:/;/},\\nkeywords:u,contains:_.concat({begin:/\\\\(/,end:/\\\\)/,keywords:u,\\ncontains:_.concat(\\\self\\\),relevance:0}),relevance:0},g{className:\\\function\\\,\\nbegin:\\\(\\\+r+\\\\\\\\\\\*&\\\\\\\\s+)+\\\+d,returnBegin:!0,end:/{;/,excludeEnd:!0,\\nkeywords:u,illegal:/^\\\\w\\\\s\\\\*&:\u003C>./,contains:{begin:\\\decltype\\\\\\\\(auto\\\\\\\\)\\\,\\nkeywords:u,relevance:0},{begin:d,returnBegin:!0,contains:l,relevance:0},{\\nbegin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:s,c},{\\nrelevance:0,match:/,/},{className:\\\params\\\,begin:/\\\\(/,end:/\\\\)/,keywords:u,\\nrelevance:0,contains:a,e.C_BLOCK_COMMENT_MODE,s,c,i,{begin:/\\\\(/,end:/\\\\)/,\\nkeywords:u,relevance:0,contains:\\\self\\\,a,e.C_BLOCK_COMMENT_MODE,s,c,i}\\n},i,a,e.C_BLOCK_COMMENT_MODE,o};return{name:\\\C++\\\,\\naliases:\\\cc\\\,\\\c++\\\,\\\h++\\\,\\\hpp\\\,\\\hh\\\,\\\hxx\\\,\\\cxx\\\,keywords:u,illegal:\\\\u003C/\\\,\\nclassNameAliases:{\\\function.dispatch\\\:\\\built_in\\\},\\ncontains:.concat(m,g,p,_,o,{\\nbegin:\\\\\\\\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\\\\\s*\u003C(?!\u003C)\\\,\\nend:\\\>\\\,keywords:u,contains:\\\self\\\,i},{begin:e.IDENT_RE+\\\::\\\,keywords:u},{\\nmatch:/\\\\b(?:enum(?:\\\\s+(?:class|struct))?|class|struct|union)/,/\\\\s+/,/\\\\w+/,\\nclassName:{1:\\\keyword\\\,3:\\\title.class\\\}})}}})();hljs.registerLanguage(\\\cpp\\\,e)\\n})();/*! `apache` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n{className:\\\number\\\,\\nbegin:/\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?/};return{\\nname:\\\Apache config\\\,aliases:\\\apacheconf\\\,case_insensitive:!0,\\ncontains:e.HASH_COMMENT_MODE,{className:\\\section\\\,begin:/\u003C\\\\/?/,end:/>/,\\ncontains:n,{className:\\\number\\\,begin:/:\\\\d{1,5}/\\n},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})},{className:\\\attribute\\\,\\nbegin:/\\\\w+/,relevance:0,keywords:{\\n_:\\\order\\\,\\\deny\\\,\\\allow\\\,\\\setenv\\\,\\\rewriterule\\\,\\\rewriteengine\\\,\\\rewritecond\\\,\\\documentroot\\\,\\\sethandler\\\,\\\errordocument\\\,\\\loadmodule\\\,\\\options\\\,\\\header\\\,\\\listen\\\,\\\serverroot\\\,\\\servername\\\\\n},starts:{end:/$/,relevance:0,keywords:{literal:\\\on off all deny allow\\\},\\ncontains:{className:\\\meta\\\,begin:/\\\\s\\\\/,end:/\\\\$/},{className:\\\variable\\\,\\nbegin:/\\\\$%\\\\{/,end:/\\\\}/,contains:\\\self\\\,{className:\\\number\\\,begin:/$%\\\\d+/}\\n},n,{className:\\\number\\\,begin:/\\\\b\\\\d+/},e.QUOTE_STRING_MODE}},illegal:/\\\\S/}}\\n})();hljs.registerLanguage(\\\apache\\\,e)})();/*! `plaintext` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var t(()>{\\\use strict\\\;return t>({name:\\\Plain text\\\,\\naliases:\\\text\\\,\\\txt\\\,disableAutodetect:!0})})()\\n;hljs.registerLanguage(\\\plaintext\\\,t)})();/*! `shell` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var s(()>{\\\use strict\\\;return s>({name:\\\Shell Session\\\,\\naliases:\\\console\\\,\\\shellsession\\\,contains:{className:\\\meta\\\,\\nbegin:/^\\\\s{0,3}/~\\\\w\\\\d\\\\()@-*>%$# ?/,starts:{end:/^\\\\\\\\(?\\\\s*$)/,\\nsubLanguage:\\\bash\\\}}})})();hljs.registerLanguage(\\\shell\\\,s)})();/*! `r` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ae.regex,n/(?:(?:a-zA-Z|\\\\.._a-zA-Z)._a-zA-Z0-9*)|\\\\.(?!\\\\d)/,ia.either(/0xX0-9a-fA-F+\\\\.0-9a-fA-F*pP+-?\\\\d+i?/,/0xX0-9a-fA-F+(?:pP+-?\\\\d+)?Li?/,/(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:eE+-?\\\\d+)?Li?/),s/!\u003C>:|\\\\|\\\\||&&|:::?|\u003C-|\u003C\u003C-|->>|->|\\\\|>|-+*\\\\/?!$&|:\u003C>@^~|\\\\*\\\\*/,ta.either(/()/,/{}/,/\\\\\\\\/,/\\\\/,/\\\\\\\\/,/,/)\\n;return{name:\\\R\\\,keywords:{$pattern:n,\\nkeyword:\\\function if in break next repeat else for while\\\,\\nliteral:\\\NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\\\,\\nbuilt_in:\\\LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm\\\\\n},contains:e.COMMENT(/#/,/$/,{contains:{scope:\\\doctag\\\,match:/@examples/,\\nstarts:{end:a.lookahead(a.either(/\\\\n^#\\\\s*(?@a-zA-Z+)/,/\\\\n^(?!#)/)),\\nendsParent:!0}},{scope:\\\doctag\\\,begin:\\\@param\\\,end:/$/,contains:{\\nscope:\\\variable\\\,variants:{match:n},{match:/`(?:\\\\\\\\.|^`\\\\\\\\)+`/},endsParent:!0\\n}},{scope:\\\doctag\\\,match:/@a-zA-Z+/},{scope:\\\keyword\\\,match:/\\\\\\\\a-zA-Z+/}\\n}),e.HASH_COMMENT_MODE,{scope:\\\string\\\,contains:e.BACKSLASH_ESCAPE,\\nvariants:e.END_SAME_AS_BEGIN({begin:/rR\\\(-*)\\\\(/,end:/\\\\)(-*)\\\/\\n}),e.END_SAME_AS_BEGIN({begin:/rR\\\(-*)\\\\{/,end:/\\\\}(-*)\\\/\\n}),e.END_SAME_AS_BEGIN({begin:/rR\\\(-*)\\\\/,end:/\\\\(-*)\\\/\\n}),e.END_SAME_AS_BEGIN({begin:/rR(-*)\\\\(/,end:/\\\\)(-*)/\\n}),e.END_SAME_AS_BEGIN({begin:/rR(-*)\\\\{/,end:/\\\\}(-*)/\\n}),e.END_SAME_AS_BEGIN({begin:/rR(-*)\\\\/,end:/\\\\(-*)/}),{begin:\\\,end:\\\,\\nrelevance:0},{begin:\\\\\\,end:\\\\\\,relevance:0}},{relevance:0,variants:{scope:{\\n1:\\\operator\\\,2:\\\number\\\},match:s,i},{scope:{1:\\\operator\\\,2:\\\number\\\},\\nmatch:/%^%*%/,i},{scope:{1:\\\punctuation\\\,2:\\\number\\\},match:t,i},{scope:{\\n2:\\\number\\\},match:/^a-zA-Z0-9._|^/,i}},{scope:{3:\\\operator\\\},\\nmatch:n,/\\\\s+/,/\u003C-/,/\\\\s+/},{scope:\\\operator\\\,relevance:0,variants:{match:s},{\\nmatch:/%^%*%/}},{scope:\\\punctuation\\\,relevance:0,match:t},{begin:\\\`\\\,end:\\\`\\\,\\ncontains:{begin:/\\\\\\\\./}}}}})();hljs.registerLanguage(\\\r\\\,e)})();/*! `ini` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const ne.regex,a{className:\\\number\\\,\\nrelevance:0,variants:{begin:/(+-+)?\\\\d+_\\\\d_+/},{begin:e.NUMBER_RE}\\n},se.COMMENT();s.variants{begin:/;/,end:/$/},{begin:/#/,end:/$/};const i{\\nclassName:\\\variable\\\,variants:{begin:/\\\\$\\\\w\\\\d\\\\\\\w\\\\d_*/},{begin:/\\\\$\\\\{(.*?)\\\\}/\\n}},t{className:\\\literal\\\,begin:/\\\\bon|off|true|false|yes|no\\\\b/},r{\\nclassName:\\\string\\\,contains:e.BACKSLASH_ESCAPE,variants:{begin:\\\\\\,\\nend:\\\\\\,relevance:10},{begin:\\\\\\\\\,end:\\\\\\\\\,relevance:10},{begin:\\\,end:\\\\\n},{begin:\\\\\\,end:\\\\\\}},l{begin:/\\\\/,end:/\\\\/,contains:s,t,i,r,a,\\\self\\\,\\nrelevance:0},cn.either(/A-Za-z0-9_-+/,/\\\(\\\\\\\\\\\|^\\\)*\\\/,/^*/);return{\\nname:\\\TOML, also INI\\\,aliases:\\\toml\\\,case_insensitive:!0,illegal:/\\\\S/,\\ncontains:s,{className:\\\section\\\,begin:/\\\\+/,end:/\\\\+/},{\\nbegin:n.concat(c,\\\(\\\\\\\\s*\\\\\\\\.\\\\\\\\s*\\\,c,\\\)*\\\,n.lookahead(/\\\\s*\\\\s*^#\\\\s/)),\\nclassName:\\\attr\\\,starts:{end:/$/,contains:s,l,t,i,r,a}}}}})()\\n;hljs.registerLanguage(\\\ini\\\,e)})();/*! `less` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;const e\\\a\\\,\\\abbr\\\,\\\address\\\,\\\article\\\,\\\aside\\\,\\\audio\\\,\\\b\\\,\\\blockquote\\\,\\\body\\\,\\\button\\\,\\\canvas\\\,\\\caption\\\,\\\cite\\\,\\\code\\\,\\\dd\\\,\\\del\\\,\\\details\\\,\\\dfn\\\,\\\div\\\,\\\dl\\\,\\\dt\\\,\\\em\\\,\\\fieldset\\\,\\\figcaption\\\,\\\figure\\\,\\\footer\\\,\\\form\\\,\\\h1\\\,\\\h2\\\,\\\h3\\\,\\\h4\\\,\\\h5\\\,\\\h6\\\,\\\header\\\,\\\hgroup\\\,\\\html\\\,\\\i\\\,\\\iframe\\\,\\\img\\\,\\\input\\\,\\\ins\\\,\\\kbd\\\,\\\label\\\,\\\legend\\\,\\\li\\\,\\\main\\\,\\\mark\\\,\\\menu\\\,\\\nav\\\,\\\object\\\,\\\ol\\\,\\\p\\\,\\\q\\\,\\\quote\\\,\\\samp\\\,\\\section\\\,\\\span\\\,\\\strong\\\,\\\summary\\\,\\\sup\\\,\\\table\\\,\\\tbody\\\,\\\td\\\,\\\textarea\\\,\\\tfoot\\\,\\\th\\\,\\\thead\\\,\\\time\\\,\\\tr\\\,\\\ul\\\,\\\var\\\,\\\video\\\,t\\\any-hover\\\,\\\any-pointer\\\,\\\aspect-ratio\\\,\\\color\\\,\\\color-gamut\\\,\\\color-index\\\,\\\device-aspect-ratio\\\,\\\device-height\\\,\\\device-width\\\,\\\display-mode\\\,\\\forced-colors\\\,\\\grid\\\,\\\height\\\,\\\hover\\\,\\\inverted-colors\\\,\\\monochrome\\\,\\\orientation\\\,\\\overflow-block\\\,\\\overflow-inline\\\,\\\pointer\\\,\\\prefers-color-scheme\\\,\\\prefers-contrast\\\,\\\prefers-reduced-motion\\\,\\\prefers-reduced-transparency\\\,\\\resolution\\\,\\\scan\\\,\\\scripting\\\,\\\update\\\,\\\width\\\,\\\min-width\\\,\\\max-width\\\,\\\min-height\\\,\\\max-height\\\,i\\\active\\\,\\\any-link\\\,\\\blank\\\,\\\checked\\\,\\\current\\\,\\\default\\\,\\\defined\\\,\\\dir\\\,\\\disabled\\\,\\\drop\\\,\\\empty\\\,\\\enabled\\\,\\\first\\\,\\\first-child\\\,\\\first-of-type\\\,\\\fullscreen\\\,\\\future\\\,\\\focus\\\,\\\focus-visible\\\,\\\focus-within\\\,\\\has\\\,\\\host\\\,\\\host-context\\\,\\\hover\\\,\\\indeterminate\\\,\\\in-range\\\,\\\invalid\\\,\\\is\\\,\\\lang\\\,\\\last-child\\\,\\\last-of-type\\\,\\\left\\\,\\\link\\\,\\\local-link\\\,\\\not\\\,\\\nth-child\\\,\\\nth-col\\\,\\\nth-last-child\\\,\\\nth-last-col\\\,\\\nth-last-of-type\\\,\\\nth-of-type\\\,\\\only-child\\\,\\\only-of-type\\\,\\\optional\\\,\\\out-of-range\\\,\\\past\\\,\\\placeholder-shown\\\,\\\read-only\\\,\\\read-write\\\,\\\required\\\,\\\right\\\,\\\root\\\,\\\scope\\\,\\\target\\\,\\\target-within\\\,\\\user-invalid\\\,\\\valid\\\,\\\visited\\\,\\\where\\\,r\\\after\\\,\\\backdrop\\\,\\\before\\\,\\\cue\\\,\\\cue-region\\\,\\\first-letter\\\,\\\first-line\\\,\\\grammar-error\\\,\\\marker\\\,\\\part\\\,\\\placeholder\\\,\\\selection\\\,\\\slotted\\\,\\\spelling-error\\\,o\\\align-content\\\,\\\align-items\\\,\\\align-self\\\,\\\all\\\,\\\animation\\\,\\\animation-delay\\\,\\\animation-direction\\\,\\\animation-duration\\\,\\\animation-fill-mode\\\,\\\animation-iteration-count\\\,\\\animation-name\\\,\\\animation-play-state\\\,\\\animation-timing-function\\\,\\\backface-visibility\\\,\\\background\\\,\\\background-attachment\\\,\\\background-clip\\\,\\\background-color\\\,\\\background-image\\\,\\\background-origin\\\,\\\background-position\\\,\\\background-repeat\\\,\\\background-size\\\,\\\border\\\,\\\border-bottom\\\,\\\border-bottom-color\\\,\\\border-bottom-left-radius\\\,\\\border-bottom-right-radius\\\,\\\border-bottom-style\\\,\\\border-bottom-width\\\,\\\border-collapse\\\,\\\border-color\\\,\\\border-image\\\,\\\border-image-outset\\\,\\\border-image-repeat\\\,\\\border-image-slice\\\,\\\border-image-source\\\,\\\border-image-width\\\,\\\border-left\\\,\\\border-left-color\\\,\\\border-left-style\\\,\\\border-left-width\\\,\\\border-radius\\\,\\\border-right\\\,\\\border-right-color\\\,\\\border-right-style\\\,\\\border-right-width\\\,\\\border-spacing\\\,\\\border-style\\\,\\\border-top\\\,\\\border-top-color\\\,\\\border-top-left-radius\\\,\\\border-top-right-radius\\\,\\\border-top-style\\\,\\\border-top-width\\\,\\\border-width\\\,\\\bottom\\\,\\\box-decoration-break\\\,\\\box-shadow\\\,\\\box-sizing\\\,\\\break-after\\\,\\\break-before\\\,\\\break-inside\\\,\\\caption-side\\\,\\\caret-color\\\,\\\clear\\\,\\\clip\\\,\\\clip-path\\\,\\\clip-rule\\\,\\\color\\\,\\\column-count\\\,\\\column-fill\\\,\\\column-gap\\\,\\\column-rule\\\,\\\column-rule-color\\\,\\\column-rule-style\\\,\\\column-rule-width\\\,\\\column-span\\\,\\\column-width\\\,\\\columns\\\,\\\contain\\\,\\\content\\\,\\\content-visibility\\\,\\\counter-increment\\\,\\\counter-reset\\\,\\\cue\\\,\\\cue-after\\\,\\\cue-before\\\,\\\cursor\\\,\\\direction\\\,\\\display\\\,\\\empty-cells\\\,\\\filter\\\,\\\flex\\\,\\\flex-basis\\\,\\\flex-direction\\\,\\\flex-flow\\\,\\\flex-grow\\\,\\\flex-shrink\\\,\\\flex-wrap\\\,\\\float\\\,\\\flow\\\,\\\font\\\,\\\font-display\\\,\\\font-family\\\,\\\font-feature-settings\\\,\\\font-kerning\\\,\\\font-language-override\\\,\\\font-size\\\,\\\font-size-adjust\\\,\\\font-smoothing\\\,\\\font-stretch\\\,\\\font-style\\\,\\\font-synthesis\\\,\\\font-variant\\\,\\\font-variant-caps\\\,\\\font-variant-east-asian\\\,\\\font-variant-ligatures\\\,\\\font-variant-numeric\\\,\\\font-variant-position\\\,\\\font-variation-settings\\\,\\\font-weight\\\,\\\gap\\\,\\\glyph-orientation-vertical\\\,\\\grid\\\,\\\grid-area\\\,\\\grid-auto-columns\\\,\\\grid-auto-flow\\\,\\\grid-auto-rows\\\,\\\grid-column\\\,\\\grid-column-end\\\,\\\grid-column-start\\\,\\\grid-gap\\\,\\\grid-row\\\,\\\grid-row-end\\\,\\\grid-row-start\\\,\\\grid-template\\\,\\\grid-template-areas\\\,\\\grid-template-columns\\\,\\\grid-template-rows\\\,\\\hanging-punctuation\\\,\\\height\\\,\\\hyphens\\\,\\\icon\\\,\\\image-orientation\\\,\\\image-rendering\\\,\\\image-resolution\\\,\\\ime-mode\\\,\\\isolation\\\,\\\justify-content\\\,\\\left\\\,\\\letter-spacing\\\,\\\line-break\\\,\\\line-height\\\,\\\list-style\\\,\\\list-style-image\\\,\\\list-style-position\\\,\\\list-style-type\\\,\\\margin\\\,\\\margin-bottom\\\,\\\margin-left\\\,\\\margin-right\\\,\\\margin-top\\\,\\\marks\\\,\\\mask\\\,\\\mask-border\\\,\\\mask-border-mode\\\,\\\mask-border-outset\\\,\\\mask-border-repeat\\\,\\\mask-border-slice\\\,\\\mask-border-source\\\,\\\mask-border-width\\\,\\\mask-clip\\\,\\\mask-composite\\\,\\\mask-image\\\,\\\mask-mode\\\,\\\mask-origin\\\,\\\mask-position\\\,\\\mask-repeat\\\,\\\mask-size\\\,\\\mask-type\\\,\\\max-height\\\,\\\max-width\\\,\\\min-height\\\,\\\min-width\\\,\\\mix-blend-mode\\\,\\\nav-down\\\,\\\nav-index\\\,\\\nav-left\\\,\\\nav-right\\\,\\\nav-up\\\,\\\none\\\,\\\normal\\\,\\\object-fit\\\,\\\object-position\\\,\\\opacity\\\,\\\order\\\,\\\orphans\\\,\\\outline\\\,\\\outline-color\\\,\\\outline-offset\\\,\\\outline-style\\\,\\\outline-width\\\,\\\overflow\\\,\\\overflow-wrap\\\,\\\overflow-x\\\,\\\overflow-y\\\,\\\padding\\\,\\\padding-bottom\\\,\\\padding-left\\\,\\\padding-right\\\,\\\padding-top\\\,\\\page-break-after\\\,\\\page-break-before\\\,\\\page-break-inside\\\,\\\pause\\\,\\\pause-after\\\,\\\pause-before\\\,\\\perspective\\\,\\\perspective-origin\\\,\\\pointer-events\\\,\\\position\\\,\\\quotes\\\,\\\resize\\\,\\\rest\\\,\\\rest-after\\\,\\\rest-before\\\,\\\right\\\,\\\row-gap\\\,\\\scroll-margin\\\,\\\scroll-margin-block\\\,\\\scroll-margin-block-end\\\,\\\scroll-margin-block-start\\\,\\\scroll-margin-bottom\\\,\\\scroll-margin-inline\\\,\\\scroll-margin-inline-end\\\,\\\scroll-margin-inline-start\\\,\\\scroll-margin-left\\\,\\\scroll-margin-right\\\,\\\scroll-margin-top\\\,\\\scroll-padding\\\,\\\scroll-padding-block\\\,\\\scroll-padding-block-end\\\,\\\scroll-padding-block-start\\\,\\\scroll-padding-bottom\\\,\\\scroll-padding-inline\\\,\\\scroll-padding-inline-end\\\,\\\scroll-padding-inline-start\\\,\\\scroll-padding-left\\\,\\\scroll-padding-right\\\,\\\scroll-padding-top\\\,\\\scroll-snap-align\\\,\\\scroll-snap-stop\\\,\\\scroll-snap-type\\\,\\\shape-image-threshold\\\,\\\shape-margin\\\,\\\shape-outside\\\,\\\speak\\\,\\\speak-as\\\,\\\src\\\,\\\tab-size\\\,\\\table-layout\\\,\\\text-align\\\,\\\text-align-all\\\,\\\text-align-last\\\,\\\text-combine-upright\\\,\\\text-decoration\\\,\\\text-decoration-color\\\,\\\text-decoration-line\\\,\\\text-decoration-style\\\,\\\text-emphasis\\\,\\\text-emphasis-color\\\,\\\text-emphasis-position\\\,\\\text-emphasis-style\\\,\\\text-indent\\\,\\\text-justify\\\,\\\text-orientation\\\,\\\text-overflow\\\,\\\text-rendering\\\,\\\text-shadow\\\,\\\text-transform\\\,\\\text-underline-position\\\,\\\top\\\,\\\transform\\\,\\\transform-box\\\,\\\transform-origin\\\,\\\transform-style\\\,\\\transition\\\,\\\transition-delay\\\,\\\transition-duration\\\,\\\transition-property\\\,\\\transition-timing-function\\\,\\\unicode-bidi\\\,\\\vertical-align\\\,\\\visibility\\\,\\\voice-balance\\\,\\\voice-duration\\\,\\\voice-family\\\,\\\voice-pitch\\\,\\\voice-range\\\,\\\voice-rate\\\,\\\voice-stress\\\,\\\voice-volume\\\,\\\white-space\\\,\\\widows\\\,\\\width\\\,\\\will-change\\\,\\\word-break\\\,\\\word-spacing\\\,\\\word-wrap\\\,\\\writing-mode\\\,\\\z-index\\\.reverse(),ni.concat(r)\\n;return a>{const s(e>({IMPORTANT:{scope:\\\meta\\\,begin:\\\!important\\\},\\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\\\number\\\,\\nbegin:/#((0-9a-fA-F{3,4})|((0-9a-fA-F{2}){3,4}))\\\\b/},FUNCTION_DISPATCH:{\\nclassName:\\\built_in\\\,begin:/\\\\w-+(?\\\\()/},ATTRIBUTE_SELECTOR_MODE:{\\nscope:\\\selector-attr\\\,begin:/\\\\/,end:/\\\\/,illegal:\\\$\\\,\\ncontains:e.APOS_STRING_MODE,e.QUOTE_STRING_MODE},CSS_NUMBER_MODE:{\\nscope:\\\number\\\,\\nbegin:e.NUMBER_RE+\\\(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\\\,\\nrelevance:0},CSS_VARIABLE:{className:\\\attr\\\,begin:/--A-Za-zA-Za-z0-9_-*/}\\n}))(a),ln,d\\\(\\\\\\\\w-+|@\\\\\\\\{\\\\\\\\w-+\\\\\\\\})\\\,c,g,me>({className:\\\string\\\,\\nbegin:\\\~?\\\+e+\\\.*?\\\+e}),p(e,t,i)>({className:e,begin:t,relevance:i}),b{\\n$pattern:/a-z-+/,keyword:\\\and or not only\\\,attribute:t.join(\\\ \\\)},u{\\nbegin:\\\\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\,contains:g,keywords:b,relevance:0}\\n;g.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,m(\\\\\\),m(\\\),s.CSS_NUMBER_MODE,{\\nbegin:\\\(url|data-uri)\\\\\\\\(\\\,starts:{className:\\\string\\\,end:\\\\\\\\\\\)\\\\\\\\n\\\,\\nexcludeEnd:!0}\\n},s.HEXCOLOR,u,p(\\\variable\\\,\\\@@?\\\\\\\\w-+\\\,10),p(\\\variable\\\,\\\@\\\\\\\\{\\\\\\\\w-+\\\\\\\\}\\\),p(\\\built_in\\\,\\\~?`^`*?`\\\),{\\nclassName:\\\attribute\\\,begin:\\\\\\\\\\\w-+\\\\\\\\s*:\\\,end:\\\:\\\,returnBegin:!0,excludeEnd:!0\\n},s.IMPORTANT);const hg.concat({begin:/\\\\{/,end:/\\\\}/,contains:c}),f{\\nbeginKeywords:\\\when\\\,endsWithParent:!0,contains:{beginKeywords:\\\and not\\\\\n}.concat(g)},v{begin:d+\\\\\\\\\\\s*:\\\,returnBegin:!0,end:/;}/,relevance:0,\\ncontains:{begin:/-(webkit|moz|ms|o)-/},s.CSS_VARIABLE,{className:\\\attribute\\\,\\nbegin:\\\\\\\\\\\b(\\\+o.join(\\\|\\\)+\\\)\\\\\\\\b\\\,end:/(?:)/,starts:{endsWithParent:!0,\\nillegal:\\\\u003C$\\\,relevance:0,contains:g}}},w{className:\\\keyword\\\,\\nbegin:\\\@(import|media|charset|font-face|(-a-z+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\\\\\b\\\,\\nstarts:{end:\\\;{}\\\,keywords:b,returnEnd:!0,contains:g,relevance:0}},k{\\nclassName:\\\variable\\\,variants:{begin:\\\@\\\\\\\\w-+\\\\\\\\s*:\\\,relevance:15},{\\nbegin:\\\@\\\\\\\\w-+\\\},starts:{end:\\\;}\\\,returnEnd:!0,contains:h}},y{variants:{\\nbegin:\\\\\\\\\\\.#:&\\\\\\\\>\\\,end:\\\;{}\\\},{begin:d,end:/\\\\{/},returnBegin:!0,\\nreturnEnd:!0,illegal:\\\\u003C$\\\\\\\\\\,relevance:0,\\ncontains:a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,f,p(\\\keyword\\\,\\\all\\\\\\\\b\\\),p(\\\variable\\\,\\\@\\\\\\\\{\\\\\\\\w-+\\\\\\\\}\\\),{\\nbegin:\\\\\\\\\\\b(\\\+e.join(\\\|\\\)+\\\)\\\\\\\\b\\\,className:\\\selector-tag\\\\\n},s.CSS_NUMBER_MODE,p(\\\selector-tag\\\,d,0),p(\\\selector-id\\\,\\\#\\\+d),p(\\\selector-class\\\,\\\\\\\\\\\.\\\+d,0),p(\\\selector-tag\\\,\\\&\\\,0),s.ATTRIBUTE_SELECTOR_MODE,{\\nclassName:\\\selector-pseudo\\\,begin:\\\:(\\\+i.join(\\\|\\\)+\\\)\\\},{\\nclassName:\\\selector-pseudo\\\,begin:\\\:(:)?(\\\+r.join(\\\|\\\)+\\\)\\\},{begin:/\\\\(/,\\nend:/\\\\)/,relevance:0,contains:h},{begin:\\\!important\\\},s.FUNCTION_DISPATCH},x{\\nbegin:`\\\\\\\\w-+:(:)?(${l.join(\\\|\\\)})`,returnBegin:!0,contains:y}\\n;return c.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,w,k,x,v,y),{\\nname:\\\Less\\\,case_insensitive:!0,illegal:\\\>/\u003C($\\\\\\\\\\,contains:c}}})()\\n;hljs.registerLanguage(\\\less\\\,e)})();/*! `fortran` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const ne.regex,a{\\nvariants:e.COMMENT(\\\!\\\,\\\$\\\,{relevance:0}),e.COMMENT(\\\^C \\\,\\\$\\\,{relevance:0\\n}),e.COMMENT(\\\^C$\\\,\\\$\\\,{relevance:0})\\n},t/(_a-z_\\\\d+)?/,i/(de+-?\\\\d+)?/,c{className:\\\number\\\,variants:{\\nbegin:n.concat(/\\\\b\\\\d+/,/\\\\.(\\\\d*)/,i,t)},{begin:n.concat(/\\\\b\\\\d+/,i,t)},{\\nbegin:n.concat(/\\\\.\\\\d+/,i,t)},relevance:0},o{className:\\\function\\\,\\nbeginKeywords:\\\subroutine function program\\\,illegal:\\\${\\\\\\\\n\\\,\\ncontains:e.UNDERSCORE_TITLE_MODE,{className:\\\params\\\,begin:\\\\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\}}\\n;return{name:\\\Fortran\\\,case_insensitive:!0,aliases:\\\f90\\\,\\\f95\\\,keywords:{\\nkeyword:\\\kind\\\,\\\do\\\,\\\concurrent\\\,\\\local\\\,\\\shared\\\,\\\while\\\,\\\private\\\,\\\call\\\,\\\intrinsic\\\,\\\where\\\,\\\elsewhere\\\,\\\type\\\,\\\endtype\\\,\\\endmodule\\\,\\\endselect\\\,\\\endinterface\\\,\\\end\\\,\\\enddo\\\,\\\endif\\\,\\\if\\\,\\\forall\\\,\\\endforall\\\,\\\only\\\,\\\contains\\\,\\\default\\\,\\\return\\\,\\\stop\\\,\\\then\\\,\\\block\\\,\\\endblock\\\,\\\endassociate\\\,\\\public\\\,\\\subroutine|10\\\,\\\function\\\,\\\program\\\,\\\.and.\\\,\\\.or.\\\,\\\.not.\\\,\\\.le.\\\,\\\.eq.\\\,\\\.ge.\\\,\\\.gt.\\\,\\\.lt.\\\,\\\goto\\\,\\\save\\\,\\\else\\\,\\\use\\\,\\\module\\\,\\\select\\\,\\\case\\\,\\\access\\\,\\\blank\\\,\\\direct\\\,\\\exist\\\,\\\file\\\,\\\fmt\\\,\\\form\\\,\\\formatted\\\,\\\iostat\\\,\\\name\\\,\\\named\\\,\\\nextrec\\\,\\\number\\\,\\\opened\\\,\\\rec\\\,\\\recl\\\,\\\sequential\\\,\\\status\\\,\\\unformatted\\\,\\\unit\\\,\\\continue\\\,\\\format\\\,\\\pause\\\,\\\cycle\\\,\\\exit\\\,\\\c_null_char\\\,\\\c_alert\\\,\\\c_backspace\\\,\\\c_form_feed\\\,\\\flush\\\,\\\wait\\\,\\\decimal\\\,\\\round\\\,\\\iomsg\\\,\\\synchronous\\\,\\\nopass\\\,\\\non_overridable\\\,\\\pass\\\,\\\protected\\\,\\\volatile\\\,\\\abstract\\\,\\\extends\\\,\\\import\\\,\\\non_intrinsic\\\,\\\value\\\,\\\deferred\\\,\\\generic\\\,\\\final\\\,\\\enumerator\\\,\\\class\\\,\\\associate\\\,\\\bind\\\,\\\enum\\\,\\\c_int\\\,\\\c_short\\\,\\\c_long\\\,\\\c_long_long\\\,\\\c_signed_char\\\,\\\c_size_t\\\,\\\c_int8_t\\\,\\\c_int16_t\\\,\\\c_int32_t\\\,\\\c_int64_t\\\,\\\c_int_least8_t\\\,\\\c_int_least16_t\\\,\\\c_int_least32_t\\\,\\\c_int_least64_t\\\,\\\c_int_fast8_t\\\,\\\c_int_fast16_t\\\,\\\c_int_fast32_t\\\,\\\c_int_fast64_t\\\,\\\c_intmax_t\\\,\\\C_intptr_t\\\,\\\c_float\\\,\\\c_double\\\,\\\c_long_double\\\,\\\c_float_complex\\\,\\\c_double_complex\\\,\\\c_long_double_complex\\\,\\\c_bool\\\,\\\c_char\\\,\\\c_null_ptr\\\,\\\c_null_funptr\\\,\\\c_new_line\\\,\\\c_carriage_return\\\,\\\c_horizontal_tab\\\,\\\c_vertical_tab\\\,\\\iso_c_binding\\\,\\\c_loc\\\,\\\c_funloc\\\,\\\c_associated\\\,\\\c_f_pointer\\\,\\\c_ptr\\\,\\\c_funptr\\\,\\\iso_fortran_env\\\,\\\character_storage_size\\\,\\\error_unit\\\,\\\file_storage_size\\\,\\\input_unit\\\,\\\iostat_end\\\,\\\iostat_eor\\\,\\\numeric_storage_size\\\,\\\output_unit\\\,\\\c_f_procpointer\\\,\\\ieee_arithmetic\\\,\\\ieee_support_underflow_control\\\,\\\ieee_get_underflow_mode\\\,\\\ieee_set_underflow_mode\\\,\\\newunit\\\,\\\contiguous\\\,\\\recursive\\\,\\\pad\\\,\\\position\\\,\\\action\\\,\\\delim\\\,\\\readwrite\\\,\\\eor\\\,\\\advance\\\,\\\nml\\\,\\\interface\\\,\\\procedure\\\,\\\namelist\\\,\\\include\\\,\\\sequence\\\,\\\elemental\\\,\\\pure\\\,\\\impure\\\,\\\integer\\\,\\\real\\\,\\\character\\\,\\\complex\\\,\\\logical\\\,\\\codimension\\\,\\\dimension\\\,\\\allocatable|10\\\,\\\parameter\\\,\\\external\\\,\\\implicit|10\\\,\\\none\\\,\\\double\\\,\\\precision\\\,\\\assign\\\,\\\intent\\\,\\\optional\\\,\\\pointer\\\,\\\target\\\,\\\in\\\,\\\out\\\,\\\common\\\,\\\equivalence\\\,\\\data\\\,\\nliteral:\\\.False.\\\,\\\.True.\\\,\\nbuilt_in:\\\alog\\\,\\\alog10\\\,\\\amax0\\\,\\\amax1\\\,\\\amin0\\\,\\\amin1\\\,\\\amod\\\,\\\cabs\\\,\\\ccos\\\,\\\cexp\\\,\\\clog\\\,\\\csin\\\,\\\csqrt\\\,\\\dabs\\\,\\\dacos\\\,\\\dasin\\\,\\\datan\\\,\\\datan2\\\,\\\dcos\\\,\\\dcosh\\\,\\\ddim\\\,\\\dexp\\\,\\\dint\\\,\\\dlog\\\,\\\dlog10\\\,\\\dmax1\\\,\\\dmin1\\\,\\\dmod\\\,\\\dnint\\\,\\\dsign\\\,\\\dsin\\\,\\\dsinh\\\,\\\dsqrt\\\,\\\dtan\\\,\\\dtanh\\\,\\\float\\\,\\\iabs\\\,\\\idim\\\,\\\idint\\\,\\\idnint\\\,\\\ifix\\\,\\\isign\\\,\\\max0\\\,\\\max1\\\,\\\min0\\\,\\\min1\\\,\\\sngl\\\,\\\algama\\\,\\\cdabs\\\,\\\cdcos\\\,\\\cdexp\\\,\\\cdlog\\\,\\\cdsin\\\,\\\cdsqrt\\\,\\\cqabs\\\,\\\cqcos\\\,\\\cqexp\\\,\\\cqlog\\\,\\\cqsin\\\,\\\cqsqrt\\\,\\\dcmplx\\\,\\\dconjg\\\,\\\derf\\\,\\\derfc\\\,\\\dfloat\\\,\\\dgamma\\\,\\\dimag\\\,\\\dlgama\\\,\\\iqint\\\,\\\qabs\\\,\\\qacos\\\,\\\qasin\\\,\\\qatan\\\,\\\qatan2\\\,\\\qcmplx\\\,\\\qconjg\\\,\\\qcos\\\,\\\qcosh\\\,\\\qdim\\\,\\\qerf\\\,\\\qerfc\\\,\\\qexp\\\,\\\qgamma\\\,\\\qimag\\\,\\\qlgama\\\,\\\qlog\\\,\\\qlog10\\\,\\\qmax1\\\,\\\qmin1\\\,\\\qmod\\\,\\\qnint\\\,\\\qsign\\\,\\\qsin\\\,\\\qsinh\\\,\\\qsqrt\\\,\\\qtan\\\,\\\qtanh\\\,\\\abs\\\,\\\acos\\\,\\\aimag\\\,\\\aint\\\,\\\anint\\\,\\\asin\\\,\\\atan\\\,\\\atan2\\\,\\\char\\\,\\\cmplx\\\,\\\conjg\\\,\\\cos\\\,\\\cosh\\\,\\\exp\\\,\\\ichar\\\,\\\index\\\,\\\int\\\,\\\log\\\,\\\log10\\\,\\\max\\\,\\\min\\\,\\\nint\\\,\\\sign\\\,\\\sin\\\,\\\sinh\\\,\\\sqrt\\\,\\\tan\\\,\\\tanh\\\,\\\print\\\,\\\write\\\,\\\dim\\\,\\\lge\\\,\\\lgt\\\,\\\lle\\\,\\\llt\\\,\\\mod\\\,\\\nullify\\\,\\\allocate\\\,\\\deallocate\\\,\\\adjustl\\\,\\\adjustr\\\,\\\all\\\,\\\allocated\\\,\\\any\\\,\\\associated\\\,\\\bit_size\\\,\\\btest\\\,\\\ceiling\\\,\\\count\\\,\\\cshift\\\,\\\date_and_time\\\,\\\digits\\\,\\\dot_product\\\,\\\eoshift\\\,\\\epsilon\\\,\\\exponent\\\,\\\floor\\\,\\\fraction\\\,\\\huge\\\,\\\iand\\\,\\\ibclr\\\,\\\ibits\\\,\\\ibset\\\,\\\ieor\\\,\\\ior\\\,\\\ishft\\\,\\\ishftc\\\,\\\lbound\\\,\\\len_trim\\\,\\\matmul\\\,\\\maxexponent\\\,\\\maxloc\\\,\\\maxval\\\,\\\merge\\\,\\\minexponent\\\,\\\minloc\\\,\\\minval\\\,\\\modulo\\\,\\\mvbits\\\,\\\nearest\\\,\\\pack\\\,\\\present\\\,\\\product\\\,\\\radix\\\,\\\random_number\\\,\\\random_seed\\\,\\\range\\\,\\\repeat\\\,\\\reshape\\\,\\\rrspacing\\\,\\\scale\\\,\\\scan\\\,\\\selected_int_kind\\\,\\\selected_real_kind\\\,\\\set_exponent\\\,\\\shape\\\,\\\size\\\,\\\spacing\\\,\\\spread\\\,\\\sum\\\,\\\system_clock\\\,\\\tiny\\\,\\\transpose\\\,\\\trim\\\,\\\ubound\\\,\\\unpack\\\,\\\verify\\\,\\\achar\\\,\\\iachar\\\,\\\transfer\\\,\\\dble\\\,\\\entry\\\,\\\dprod\\\,\\\cpu_time\\\,\\\command_argument_count\\\,\\\get_command\\\,\\\get_command_argument\\\,\\\get_environment_variable\\\,\\\is_iostat_end\\\,\\\ieee_arithmetic\\\,\\\ieee_support_underflow_control\\\,\\\ieee_get_underflow_mode\\\,\\\ieee_set_underflow_mode\\\,\\\is_iostat_eor\\\,\\\move_alloc\\\,\\\new_line\\\,\\\selected_char_kind\\\,\\\same_type_as\\\,\\\extends_type_of\\\,\\\acosh\\\,\\\asinh\\\,\\\atanh\\\,\\\bessel_j0\\\,\\\bessel_j1\\\,\\\bessel_jn\\\,\\\bessel_y0\\\,\\\bessel_y1\\\,\\\bessel_yn\\\,\\\erf\\\,\\\erfc\\\,\\\erfc_scaled\\\,\\\gamma\\\,\\\log_gamma\\\,\\\hypot\\\,\\\norm2\\\,\\\atomic_define\\\,\\\atomic_ref\\\,\\\execute_command_line\\\,\\\leadz\\\,\\\trailz\\\,\\\storage_size\\\,\\\merge_bits\\\,\\\bge\\\,\\\bgt\\\,\\\ble\\\,\\\blt\\\,\\\dshiftl\\\,\\\dshiftr\\\,\\\findloc\\\,\\\iall\\\,\\\iany\\\,\\\iparity\\\,\\\image_index\\\,\\\lcobound\\\,\\\ucobound\\\,\\\maskl\\\,\\\maskr\\\,\\\num_images\\\,\\\parity\\\,\\\popcnt\\\,\\\poppar\\\,\\\shifta\\\,\\\shiftl\\\,\\\shiftr\\\,\\\this_image\\\,\\\sync\\\,\\\change\\\,\\\team\\\,\\\co_broadcast\\\,\\\co_max\\\,\\\co_min\\\,\\\co_sum\\\,\\\co_reduce\\\\\n},illegal:/\\\\/\\\\*/,contains:{className:\\\string\\\,relevance:0,\\nvariants:e.APOS_STRING_MODE,e.QUOTE_STRING_MODE},o,{begin:/^C\\\\s*(?!)/,\\nrelevance:0},a,c}}})();hljs.registerLanguage(\\\fortran\\\,e)})();/*! `css` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;const e\\\a\\\,\\\abbr\\\,\\\address\\\,\\\article\\\,\\\aside\\\,\\\audio\\\,\\\b\\\,\\\blockquote\\\,\\\body\\\,\\\button\\\,\\\canvas\\\,\\\caption\\\,\\\cite\\\,\\\code\\\,\\\dd\\\,\\\del\\\,\\\details\\\,\\\dfn\\\,\\\div\\\,\\\dl\\\,\\\dt\\\,\\\em\\\,\\\fieldset\\\,\\\figcaption\\\,\\\figure\\\,\\\footer\\\,\\\form\\\,\\\h1\\\,\\\h2\\\,\\\h3\\\,\\\h4\\\,\\\h5\\\,\\\h6\\\,\\\header\\\,\\\hgroup\\\,\\\html\\\,\\\i\\\,\\\iframe\\\,\\\img\\\,\\\input\\\,\\\ins\\\,\\\kbd\\\,\\\label\\\,\\\legend\\\,\\\li\\\,\\\main\\\,\\\mark\\\,\\\menu\\\,\\\nav\\\,\\\object\\\,\\\ol\\\,\\\p\\\,\\\q\\\,\\\quote\\\,\\\samp\\\,\\\section\\\,\\\span\\\,\\\strong\\\,\\\summary\\\,\\\sup\\\,\\\table\\\,\\\tbody\\\,\\\td\\\,\\\textarea\\\,\\\tfoot\\\,\\\th\\\,\\\thead\\\,\\\time\\\,\\\tr\\\,\\\ul\\\,\\\var\\\,\\\video\\\,t\\\any-hover\\\,\\\any-pointer\\\,\\\aspect-ratio\\\,\\\color\\\,\\\color-gamut\\\,\\\color-index\\\,\\\device-aspect-ratio\\\,\\\device-height\\\,\\\device-width\\\,\\\display-mode\\\,\\\forced-colors\\\,\\\grid\\\,\\\height\\\,\\\hover\\\,\\\inverted-colors\\\,\\\monochrome\\\,\\\orientation\\\,\\\overflow-block\\\,\\\overflow-inline\\\,\\\pointer\\\,\\\prefers-color-scheme\\\,\\\prefers-contrast\\\,\\\prefers-reduced-motion\\\,\\\prefers-reduced-transparency\\\,\\\resolution\\\,\\\scan\\\,\\\scripting\\\,\\\update\\\,\\\width\\\,\\\min-width\\\,\\\max-width\\\,\\\min-height\\\,\\\max-height\\\,i\\\active\\\,\\\any-link\\\,\\\blank\\\,\\\checked\\\,\\\current\\\,\\\default\\\,\\\defined\\\,\\\dir\\\,\\\disabled\\\,\\\drop\\\,\\\empty\\\,\\\enabled\\\,\\\first\\\,\\\first-child\\\,\\\first-of-type\\\,\\\fullscreen\\\,\\\future\\\,\\\focus\\\,\\\focus-visible\\\,\\\focus-within\\\,\\\has\\\,\\\host\\\,\\\host-context\\\,\\\hover\\\,\\\indeterminate\\\,\\\in-range\\\,\\\invalid\\\,\\\is\\\,\\\lang\\\,\\\last-child\\\,\\\last-of-type\\\,\\\left\\\,\\\link\\\,\\\local-link\\\,\\\not\\\,\\\nth-child\\\,\\\nth-col\\\,\\\nth-last-child\\\,\\\nth-last-col\\\,\\\nth-last-of-type\\\,\\\nth-of-type\\\,\\\only-child\\\,\\\only-of-type\\\,\\\optional\\\,\\\out-of-range\\\,\\\past\\\,\\\placeholder-shown\\\,\\\read-only\\\,\\\read-write\\\,\\\required\\\,\\\right\\\,\\\root\\\,\\\scope\\\,\\\target\\\,\\\target-within\\\,\\\user-invalid\\\,\\\valid\\\,\\\visited\\\,\\\where\\\,o\\\after\\\,\\\backdrop\\\,\\\before\\\,\\\cue\\\,\\\cue-region\\\,\\\first-letter\\\,\\\first-line\\\,\\\grammar-error\\\,\\\marker\\\,\\\part\\\,\\\placeholder\\\,\\\selection\\\,\\\slotted\\\,\\\spelling-error\\\,r\\\align-content\\\,\\\align-items\\\,\\\align-self\\\,\\\all\\\,\\\animation\\\,\\\animation-delay\\\,\\\animation-direction\\\,\\\animation-duration\\\,\\\animation-fill-mode\\\,\\\animation-iteration-count\\\,\\\animation-name\\\,\\\animation-play-state\\\,\\\animation-timing-function\\\,\\\backface-visibility\\\,\\\background\\\,\\\background-attachment\\\,\\\background-clip\\\,\\\background-color\\\,\\\background-image\\\,\\\background-origin\\\,\\\background-position\\\,\\\background-repeat\\\,\\\background-size\\\,\\\border\\\,\\\border-bottom\\\,\\\border-bottom-color\\\,\\\border-bottom-left-radius\\\,\\\border-bottom-right-radius\\\,\\\border-bottom-style\\\,\\\border-bottom-width\\\,\\\border-collapse\\\,\\\border-color\\\,\\\border-image\\\,\\\border-image-outset\\\,\\\border-image-repeat\\\,\\\border-image-slice\\\,\\\border-image-source\\\,\\\border-image-width\\\,\\\border-left\\\,\\\border-left-color\\\,\\\border-left-style\\\,\\\border-left-width\\\,\\\border-radius\\\,\\\border-right\\\,\\\border-right-color\\\,\\\border-right-style\\\,\\\border-right-width\\\,\\\border-spacing\\\,\\\border-style\\\,\\\border-top\\\,\\\border-top-color\\\,\\\border-top-left-radius\\\,\\\border-top-right-radius\\\,\\\border-top-style\\\,\\\border-top-width\\\,\\\border-width\\\,\\\bottom\\\,\\\box-decoration-break\\\,\\\box-shadow\\\,\\\box-sizing\\\,\\\break-after\\\,\\\break-before\\\,\\\break-inside\\\,\\\caption-side\\\,\\\caret-color\\\,\\\clear\\\,\\\clip\\\,\\\clip-path\\\,\\\clip-rule\\\,\\\color\\\,\\\column-count\\\,\\\column-fill\\\,\\\column-gap\\\,\\\column-rule\\\,\\\column-rule-color\\\,\\\column-rule-style\\\,\\\column-rule-width\\\,\\\column-span\\\,\\\column-width\\\,\\\columns\\\,\\\contain\\\,\\\content\\\,\\\content-visibility\\\,\\\counter-increment\\\,\\\counter-reset\\\,\\\cue\\\,\\\cue-after\\\,\\\cue-before\\\,\\\cursor\\\,\\\direction\\\,\\\display\\\,\\\empty-cells\\\,\\\filter\\\,\\\flex\\\,\\\flex-basis\\\,\\\flex-direction\\\,\\\flex-flow\\\,\\\flex-grow\\\,\\\flex-shrink\\\,\\\flex-wrap\\\,\\\float\\\,\\\flow\\\,\\\font\\\,\\\font-display\\\,\\\font-family\\\,\\\font-feature-settings\\\,\\\font-kerning\\\,\\\font-language-override\\\,\\\font-size\\\,\\\font-size-adjust\\\,\\\font-smoothing\\\,\\\font-stretch\\\,\\\font-style\\\,\\\font-synthesis\\\,\\\font-variant\\\,\\\font-variant-caps\\\,\\\font-variant-east-asian\\\,\\\font-variant-ligatures\\\,\\\font-variant-numeric\\\,\\\font-variant-position\\\,\\\font-variation-settings\\\,\\\font-weight\\\,\\\gap\\\,\\\glyph-orientation-vertical\\\,\\\grid\\\,\\\grid-area\\\,\\\grid-auto-columns\\\,\\\grid-auto-flow\\\,\\\grid-auto-rows\\\,\\\grid-column\\\,\\\grid-column-end\\\,\\\grid-column-start\\\,\\\grid-gap\\\,\\\grid-row\\\,\\\grid-row-end\\\,\\\grid-row-start\\\,\\\grid-template\\\,\\\grid-template-areas\\\,\\\grid-template-columns\\\,\\\grid-template-rows\\\,\\\hanging-punctuation\\\,\\\height\\\,\\\hyphens\\\,\\\icon\\\,\\\image-orientation\\\,\\\image-rendering\\\,\\\image-resolution\\\,\\\ime-mode\\\,\\\isolation\\\,\\\justify-content\\\,\\\left\\\,\\\letter-spacing\\\,\\\line-break\\\,\\\line-height\\\,\\\list-style\\\,\\\list-style-image\\\,\\\list-style-position\\\,\\\list-style-type\\\,\\\margin\\\,\\\margin-bottom\\\,\\\margin-left\\\,\\\margin-right\\\,\\\margin-top\\\,\\\marks\\\,\\\mask\\\,\\\mask-border\\\,\\\mask-border-mode\\\,\\\mask-border-outset\\\,\\\mask-border-repeat\\\,\\\mask-border-slice\\\,\\\mask-border-source\\\,\\\mask-border-width\\\,\\\mask-clip\\\,\\\mask-composite\\\,\\\mask-image\\\,\\\mask-mode\\\,\\\mask-origin\\\,\\\mask-position\\\,\\\mask-repeat\\\,\\\mask-size\\\,\\\mask-type\\\,\\\max-height\\\,\\\max-width\\\,\\\min-height\\\,\\\min-width\\\,\\\mix-blend-mode\\\,\\\nav-down\\\,\\\nav-index\\\,\\\nav-left\\\,\\\nav-right\\\,\\\nav-up\\\,\\\none\\\,\\\normal\\\,\\\object-fit\\\,\\\object-position\\\,\\\opacity\\\,\\\order\\\,\\\orphans\\\,\\\outline\\\,\\\outline-color\\\,\\\outline-offset\\\,\\\outline-style\\\,\\\outline-width\\\,\\\overflow\\\,\\\overflow-wrap\\\,\\\overflow-x\\\,\\\overflow-y\\\,\\\padding\\\,\\\padding-bottom\\\,\\\padding-left\\\,\\\padding-right\\\,\\\padding-top\\\,\\\page-break-after\\\,\\\page-break-before\\\,\\\page-break-inside\\\,\\\pause\\\,\\\pause-after\\\,\\\pause-before\\\,\\\perspective\\\,\\\perspective-origin\\\,\\\pointer-events\\\,\\\position\\\,\\\quotes\\\,\\\resize\\\,\\\rest\\\,\\\rest-after\\\,\\\rest-before\\\,\\\right\\\,\\\row-gap\\\,\\\scroll-margin\\\,\\\scroll-margin-block\\\,\\\scroll-margin-block-end\\\,\\\scroll-margin-block-start\\\,\\\scroll-margin-bottom\\\,\\\scroll-margin-inline\\\,\\\scroll-margin-inline-end\\\,\\\scroll-margin-inline-start\\\,\\\scroll-margin-left\\\,\\\scroll-margin-right\\\,\\\scroll-margin-top\\\,\\\scroll-padding\\\,\\\scroll-padding-block\\\,\\\scroll-padding-block-end\\\,\\\scroll-padding-block-start\\\,\\\scroll-padding-bottom\\\,\\\scroll-padding-inline\\\,\\\scroll-padding-inline-end\\\,\\\scroll-padding-inline-start\\\,\\\scroll-padding-left\\\,\\\scroll-padding-right\\\,\\\scroll-padding-top\\\,\\\scroll-snap-align\\\,\\\scroll-snap-stop\\\,\\\scroll-snap-type\\\,\\\shape-image-threshold\\\,\\\shape-margin\\\,\\\shape-outside\\\,\\\speak\\\,\\\speak-as\\\,\\\src\\\,\\\tab-size\\\,\\\table-layout\\\,\\\text-align\\\,\\\text-align-all\\\,\\\text-align-last\\\,\\\text-combine-upright\\\,\\\text-decoration\\\,\\\text-decoration-color\\\,\\\text-decoration-line\\\,\\\text-decoration-style\\\,\\\text-emphasis\\\,\\\text-emphasis-color\\\,\\\text-emphasis-position\\\,\\\text-emphasis-style\\\,\\\text-indent\\\,\\\text-justify\\\,\\\text-orientation\\\,\\\text-overflow\\\,\\\text-rendering\\\,\\\text-shadow\\\,\\\text-transform\\\,\\\text-underline-position\\\,\\\top\\\,\\\transform\\\,\\\transform-box\\\,\\\transform-origin\\\,\\\transform-style\\\,\\\transition\\\,\\\transition-delay\\\,\\\transition-duration\\\,\\\transition-property\\\,\\\transition-timing-function\\\,\\\unicode-bidi\\\,\\\vertical-align\\\,\\\visibility\\\,\\\voice-balance\\\,\\\voice-duration\\\,\\\voice-family\\\,\\\voice-pitch\\\,\\\voice-range\\\,\\\voice-rate\\\,\\\voice-stress\\\,\\\voice-volume\\\,\\\white-space\\\,\\\widows\\\,\\\width\\\,\\\will-change\\\,\\\word-break\\\,\\\word-spacing\\\,\\\word-wrap\\\,\\\writing-mode\\\,\\\z-index\\\.reverse()\\n;return a>{const na.regex,l(e>({IMPORTANT:{scope:\\\meta\\\,begin:\\\!important\\\},\\nBLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:\\\number\\\,\\nbegin:/#((0-9a-fA-F{3,4})|((0-9a-fA-F{2}){3,4}))\\\\b/},FUNCTION_DISPATCH:{\\nclassName:\\\built_in\\\,begin:/\\\\w-+(?\\\\()/},ATTRIBUTE_SELECTOR_MODE:{\\nscope:\\\selector-attr\\\,begin:/\\\\/,end:/\\\\/,illegal:\\\$\\\,\\ncontains:e.APOS_STRING_MODE,e.QUOTE_STRING_MODE},CSS_NUMBER_MODE:{\\nscope:\\\number\\\,\\nbegin:e.NUMBER_RE+\\\(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\\\,\\nrelevance:0},CSS_VARIABLE:{className:\\\attr\\\,begin:/--A-Za-zA-Za-z0-9_-*/}\\n}))(a),sa.APOS_STRING_MODE,a.QUOTE_STRING_MODE;return{name:\\\CSS\\\,\\ncase_insensitive:!0,illegal:/|\\\\$/,keywords:{keyframePosition:\\\from to\\\},\\nclassNameAliases:{keyframePosition:\\\selector-tag\\\},contains:l.BLOCK_COMMENT,{\\nbegin:/-(webkit|moz|ms|o)-(?a-z)/},l.CSS_NUMBER_MODE,{\\nclassName:\\\selector-id\\\,begin:/#A-Za-z0-9_-+/,relevance:0},{\\nclassName:\\\selector-class\\\,begin:\\\\\\\\\\\.a-zA-Z-a-zA-Z0-9_-*\\\,relevance:0\\n},l.ATTRIBUTE_SELECTOR_MODE,{className:\\\selector-pseudo\\\,variants:{\\nbegin:\\\:(\\\+i.join(\\\|\\\)+\\\)\\\},{begin:\\\:(:)?(\\\+o.join(\\\|\\\)+\\\)\\\}},l.CSS_VARIABLE,{\\nclassName:\\\attribute\\\,begin:\\\\\\\\\\\b(\\\+r.join(\\\|\\\)+\\\)\\\\\\\\b\\\},{begin:/:/,end:/;}{/,\\ncontains:l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{\\nbegin:/(url|data-uri)\\\\(/,end:/\\\\)/,relevance:0,keywords:{built_in:\\\url data-uri\\\\\n},contains:{className:\\\string\\\,begin:/^)/,endsWithParent:!0,excludeEnd:!0}\\n},l.FUNCTION_DISPATCH},{begin:n.lookahead(/@/),end:\\\{;\\\,relevance:0,\\nillegal:/:/,contains:{className:\\\keyword\\\,begin:/@-?\\\\w\\\\w*(-\\\\w+)*/},{\\nbegin:/\\\\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{\\n$pattern:/a-z-+/,keyword:\\\and or not only\\\,attribute:t.join(\\\ \\\)},contains:{\\nbegin:/a-z-+(?:)/,className:\\\attribute\\\},...s,l.CSS_NUMBER_MODE}},{\\nclassName:\\\selector-tag\\\,begin:\\\\\\\\\\\b(\\\+e.join(\\\|\\\)+\\\)\\\\\\\\b\\\}}}})()\\n;hljs.registerLanguage(\\\css\\\,e)})();/*! `perl` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{\\nconst ne.regex,t/dualxmsipngr{0,12}/,r{$pattern:/\\\\w.+/,\\nkeyword:\\\abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0\\\\\n},s{className:\\\subst\\\,begin:\\\$@\\\\\\\\{\\\,end:\\\\\\\\\\\}\\\,keywords:r},i{begin:/->\\\\{/,\\nend:/\\\\}/},a{variants:{begin:/\\\\$\\\\d/},{\\nbegin:n.concat(/$%@(\\\\^\\\\w\\\\b|#\\\\w+(::\\\\w+)*|\\\\{\\\\w+\\\\}|\\\\w+(::\\\\w*)*)/,\\\(?!A-Za-z)(?!@$%)\\\)\\n},{begin:/$%@^\\\\s\\\\w{/,relevance:0}\\n},ce.BACKSLASH_ESCAPE,s,a,o/!/,/\\\\//,/\\\\|/,/\\\\?/,//,/\\\/,/#/,g(e,r,s\\\\\\\\\\\1\\\)>{\\nconst i\\\\\\\\\\\1\\\s?s:n.concat(s,r)\\n;return n.concat(n.concat(\\\(?:\\\,e,\\\)\\\),r,/(?:\\\\\\\\.|^\\\\\\\\\\\\/)*?/,i,/(?:\\\\\\\\.|^\\\\\\\\\\\\/)*?/,s,t)\\n},l(e,r,s)>n.concat(n.concat(\\\(?:\\\,e,\\\)\\\),r,/(?:\\\\\\\\.|^\\\\\\\\\\\\/)*?/,s,t),da,e.HASH_COMMENT_MODE,e.COMMENT(/^\\\\w/,/cut/,{\\nendsWithParent:!0}),i,{className:\\\string\\\,contains:c,variants:{\\nbegin:\\\qqwxr?\\\\\\\\s*\\\\\\\\(\\\,end:\\\\\\\\\\\)\\\,relevance:5},{begin:\\\qqwxr?\\\\\\\\s*\\\\\\\\\\\,\\nend:\\\\\\\\\\\\\\,relevance:5},{begin:\\\qqwxr?\\\\\\\\s*\\\\\\\\{\\\,end:\\\\\\\\\\\}\\\,relevance:5},{\\nbegin:\\\qqwxr?\\\\\\\\s*\\\\\\\\|\\\,end:\\\\\\\\\\\|\\\,relevance:5},{begin:\\\qqwxr?\\\\\\\\s*\u003C\\\,end:\\\>\\\,\\nrelevance:5},{begin:\\\qw\\\\\\\\s+q\\\,end:\\\q\\\,relevance:5},{begin:\\\\\\,end:\\\\\\,\\ncontains:e.BACKSLASH_ESCAPE},{begin:\\\,end:\\\},{begin:\\\`\\\,end:\\\`\\\,\\ncontains:e.BACKSLASH_ESCAPE},{begin:/\\\\{\\\\w+\\\\}/,relevance:0},{\\nbegin:\\\-?\\\\\\\\w+\\\\\\\\s*>\\\,relevance:0}},{className:\\\number\\\,\\nbegin:\\\(\\\\\\\\b00-7_+)|(\\\\\\\\b0x0-9a-fA-F_+)|(\\\\\\\\b1-90-9_*(\\\\\\\\.0-9_+)?)|0_\\\\\\\\b\\\,\\nrelevance:0},{\\nbegin:\\\(\\\\\\\\/\\\\\\\\/|\\\+e.RE_STARTERS_RE+\\\|\\\\\\\\b(split|return|print|reverse|grep)\\\\\\\\b)\\\\\\\\s*\\\,\\nkeywords:\\\split return print reverse grep\\\,relevance:0,\\ncontains:e.HASH_COMMENT_MODE,{className:\\\regexp\\\,variants:{\\nbegin:g(\\\s|tr|y\\\,n.either(...o,{capture:!0}))},{begin:g(\\\s|tr|y\\\,\\\\\\\\\\\(\\\,\\\\\\\\\\\)\\\)},{\\nbegin:g(\\\s|tr|y\\\,\\\\\\\\\\\\\\,\\\\\\\\\\\\\\)},{begin:g(\\\s|tr|y\\\,\\\\\\\\\\\{\\\,\\\\\\\\\\\}\\\)},relevance:2},{\\nclassName:\\\regexp\\\,variants:{begin:/(m|qr)\\\\/\\\\//,relevance:0},{\\nbegin:l(\\\(?:m|qr)?\\\,/\\\\//,/\\\\//)},{begin:l(\\\m|qr\\\,n.either(...o,{capture:!0\\n}),/\\\\1/)},{begin:l(\\\m|qr\\\,/\\\\(/,/\\\\)/)},{begin:l(\\\m|qr\\\,/\\\\/,/\\\\/)},{\\nbegin:l(\\\m|qr\\\,/\\\\{/,/\\\\}/)}}},{className:\\\function\\\,beginKeywords:\\\sub\\\,\\nend:\\\(\\\\\\\\s*\\\\\\\\(.*?\\\\\\\\))?;{\\\,excludeEnd:!0,relevance:5,contains:e.TITLE_MODE},{\\nbegin:\\\-\\\\\\\\w\\\\\\\\b\\\,relevance:0},{begin:\\\^__DATA__$\\\,end:\\\^__END__$\\\,\\nsubLanguage:\\\mojolicious\\\,contains:{begin:\\\^@@.*\\\,end:\\\$\\\,className:\\\comment\\\}\\n};return s.containsd,i.containsd,{name:\\\Perl\\\,aliases:\\\pl\\\,\\\pm\\\,keywords:r,\\ncontains:d}}})();hljs.registerLanguage(\\\perl\\\,e)})();/*! `swift` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;function e(e){\\nreturn e?\\\string\\\typeof e?e:e.source:null}function a(e){return t(\\\(?\\\,e,\\\)\\\)}\\nfunction t(...a){return a.map((a>e(a))).join(\\\\\\)}function n(...a){const t(e>{\\nconst aee.length-1\\n;return\\\object\\\typeof a&&a.constructorObject?(e.splice(e.length-1,1),a):{}\\n})(a);return\\\(\\\+(t.capture?\\\\\\:\\\?:\\\)+a.map((a>e(a))).join(\\\|\\\)+\\\)\\\}\\nconst ie>t(/\\\\b/,e,/\\\\w$/.test(e)?/\\\\b/:/\\\\B/),s\\\Protocol\\\,\\\Type\\\.map(i),u\\\init\\\,\\\self\\\.map(i),c\\\Any\\\,\\\Self\\\,r\\\actor\\\,\\\associatedtype\\\,\\\async\\\,\\\await\\\,/as\\\\?/,/as!/,\\\as\\\,\\\break\\\,\\\case\\\,\\\catch\\\,\\\class\\\,\\\continue\\\,\\\convenience\\\,\\\default\\\,\\\defer\\\,\\\deinit\\\,\\\didSet\\\,\\\do\\\,\\\dynamic\\\,\\\else\\\,\\\enum\\\,\\\extension\\\,\\\fallthrough\\\,/fileprivate\\\\(set\\\\)/,\\\fileprivate\\\,\\\final\\\,\\\for\\\,\\\func\\\,\\\get\\\,\\\guard\\\,\\\if\\\,\\\import\\\,\\\indirect\\\,\\\infix\\\,/init\\\\?/,/init!/,\\\inout\\\,/internal\\\\(set\\\\)/,\\\internal\\\,\\\in\\\,\\\is\\\,\\\isolated\\\,\\\nonisolated\\\,\\\lazy\\\,\\\let\\\,\\\mutating\\\,\\\nonmutating\\\,/open\\\\(set\\\\)/,\\\open\\\,\\\operator\\\,\\\optional\\\,\\\override\\\,\\\postfix\\\,\\\precedencegroup\\\,\\\prefix\\\,/private\\\\(set\\\\)/,\\\private\\\,\\\protocol\\\,/public\\\\(set\\\\)/,\\\public\\\,\\\repeat\\\,\\\required\\\,\\\rethrows\\\,\\\return\\\,\\\set\\\,\\\some\\\,\\\static\\\,\\\struct\\\,\\\subscript\\\,\\\super\\\,\\\switch\\\,\\\throws\\\,\\\throw\\\,/try\\\\?/,/try!/,\\\try\\\,\\\typealias\\\,/unowned\\\\(safe\\\\)/,/unowned\\\\(unsafe\\\\)/,\\\unowned\\\,\\\var\\\,\\\weak\\\,\\\where\\\,\\\while\\\,\\\willSet\\\,o\\\false\\\,\\\nil\\\,\\\true\\\,l\\\assignment\\\,\\\associativity\\\,\\\higherThan\\\,\\\left\\\,\\\lowerThan\\\,\\\none\\\,\\\right\\\,m\\\#colorLiteral\\\,\\\#column\\\,\\\#dsohandle\\\,\\\#else\\\,\\\#elseif\\\,\\\#endif\\\,\\\#error\\\,\\\#file\\\,\\\#fileID\\\,\\\#fileLiteral\\\,\\\#filePath\\\,\\\#function\\\,\\\#if\\\,\\\#imageLiteral\\\,\\\#keyPath\\\,\\\#line\\\,\\\#selector\\\,\\\#sourceLocation\\\,\\\#warn_unqualified_access\\\,\\\#warning\\\,p\\\abs\\\,\\\all\\\,\\\any\\\,\\\assert\\\,\\\assertionFailure\\\,\\\debugPrint\\\,\\\dump\\\,\\\fatalError\\\,\\\getVaList\\\,\\\isKnownUniquelyReferenced\\\,\\\max\\\,\\\min\\\,\\\numericCast\\\,\\\pointwiseMax\\\,\\\pointwiseMin\\\,\\\precondition\\\,\\\preconditionFailure\\\,\\\print\\\,\\\readLine\\\,\\\repeatElement\\\,\\\sequence\\\,\\\stride\\\,\\\swap\\\,\\\swift_unboxFromSwiftValueWithType\\\,\\\transcode\\\,\\\type\\\,\\\unsafeBitCast\\\,\\\unsafeDowncast\\\,\\\withExtendedLifetime\\\,\\\withUnsafeMutablePointer\\\,\\\withUnsafePointer\\\,\\\withVaList\\\,\\\withoutActuallyEscaping\\\,\\\zip\\\,dn(//\\\\-+!*%\u003C>&|^~?/,/\\\\u00A1-\\\\u00A7/,/\\\\u00A9\\\\u00AB/,/\\\\u00AC\\\\u00AE/,/\\\\u00B0\\\\u00B1/,/\\\\u00B6\\\\u00BB\\\\u00BF\\\\u00D7\\\\u00F7/,/\\\\u2016-\\\\u2017/,/\\\\u2020-\\\\u2027/,/\\\\u2030-\\\\u203E/,/\\\\u2041-\\\\u2053/,/\\\\u2055-\\\\u205E/,/\\\\u2190-\\\\u23FF/,/\\\\u2500-\\\\u2775/,/\\\\u2794-\\\\u2BFF/,/\\\\u2E00-\\\\u2E7F/,/\\\\u3001-\\\\u3003/,/\\\\u3008-\\\\u3020/,/\\\\u3030/),Fn(d,/\\\\u0300-\\\\u036F/,/\\\\u1DC0-\\\\u1DFF/,/\\\\u20D0-\\\\u20FF/,/\\\\uFE00-\\\\uFE0F/,/\\\\uFE20-\\\\uFE2F/),bt(d,F,\\\*\\\),hn(/a-zA-Z_/,/\\\\u00A8\\\\u00AA\\\\u00AD\\\\u00AF\\\\u00B2-\\\\u00B5\\\\u00B7-\\\\u00BA/,/\\\\u00BC-\\\\u00BE\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u00FF/,/\\\\u0100-\\\\u02FF\\\\u0370-\\\\u167F\\\\u1681-\\\\u180D\\\\u180F-\\\\u1DBF/,/\\\\u1E00-\\\\u1FFF/,/\\\\u200B-\\\\u200D\\\\u202A-\\\\u202E\\\\u203F-\\\\u2040\\\\u2054\\\\u2060-\\\\u206F/,/\\\\u2070-\\\\u20CF\\\\u2100-\\\\u218F\\\\u2460-\\\\u24FF\\\\u2776-\\\\u2793/,/\\\\u2C00-\\\\u2DFF\\\\u2E80-\\\\u2FFF/,/\\\\u3004-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u303F\\\\u3040-\\\\uD7FF/,/\\\\uF900-\\\\uFD3D\\\\uFD40-\\\\uFDCF\\\\uFDF0-\\\\uFE1F\\\\uFE30-\\\\uFE44/,/\\\\uFE47-\\\\uFEFE\\\\uFF00-\\\\uFFFD/),fn(h,/\\\\d/,/\\\\u0300-\\\\u036F\\\\u1DC0-\\\\u1DFF\\\\u20D0-\\\\u20FF\\\\uFE20-\\\\uFE2F/),wt(h,f,\\\*\\\),yt(/A-Z/,f,\\\*\\\),g\\\autoclosure\\\,t(/convention\\\\(/,n(\\\swift\\\,\\\block\\\,\\\c\\\),/\\\\)/),\\\discardableResult\\\,\\\dynamicCallable\\\,\\\dynamicMemberLookup\\\,\\\escaping\\\,\\\frozen\\\,\\\GKInspectable\\\,\\\IBAction\\\,\\\IBDesignable\\\,\\\IBInspectable\\\,\\\IBOutlet\\\,\\\IBSegueAction\\\,\\\inlinable\\\,\\\main\\\,\\\nonobjc\\\,\\\NSApplicationMain\\\,\\\NSCopying\\\,\\\NSManaged\\\,t(/objc\\\\(/,w,/\\\\)/),\\\objc\\\,\\\objcMembers\\\,\\\propertyWrapper\\\,\\\requires_stored_property_inits\\\,\\\resultBuilder\\\,\\\testable\\\,\\\UIApplicationMain\\\,\\\unknown\\\,\\\usableFromInline\\\,E\\\iOS\\\,\\\iOSApplicationExtension\\\,\\\macOS\\\,\\\macOSApplicationExtension\\\,\\\macCatalyst\\\,\\\macCatalystApplicationExtension\\\,\\\watchOS\\\,\\\watchOSApplicationExtension\\\,\\\tvOS\\\,\\\tvOSApplicationExtension\\\,\\\swift\\\\\n;return e>{const d{match:/\\\\s+/,relevance:0},he.COMMENT(\\\/\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{\\ncontains:\\\self\\\}),ve.C_LINE_COMMENT_MODE,h,A{match:/\\\\./,n(...s,...u),\\nclassName:{2:\\\keyword\\\}},N{match:t(/\\\\./,n(...r)),relevance:0\\n},Cr.filter((e>\\\string\\\typeof e)).concat(\\\_|0\\\),D{variants:{\\nclassName:\\\keyword\\\,\\nmatch:n(...r.filter((e>\\\string\\\!typeof e)).concat(c).map(i),...u)}},k{\\n$pattern:n(/\\\\b\\\\w+/,/#\\\\w+/),keyword:C.concat(m),literal:o},BA,N,D,_{\\nmatch:t(/\\\\./,n(...p)),relevance:0},{className:\\\built_in\\\,\\nmatch:t(/\\\\b/,n(...p),/(?\\\\()/)},S{match:/->/,relevance:0},MS,{\\nclassName:\\\operator\\\,relevance:0,variants:{match:b},{match:`\\\\\\\\.(\\\\\\\\.|${F})+`}\\n},x\\\(0-9a-fA-F_*)+\\\,I{className:\\\number\\\,relevance:0,variants:{\\nmatch:\\\\\\\\\\\b((0-9_*)+)(\\\\\\\\.((0-9_*)+))?(eE+-?((0-9_*)+))?\\\\\\\\b\\\},{\\nmatch:`\\\\\\\\b0x(${x})(\\\\\\\\.(${x}))?(pP+-?((0-9_*)+))?\\\\\\\\b`},{\\nmatch:/\\\\b0o(0-7_*)+\\\\b/},{match:/\\\\b0b(01_*)+\\\\b/}},L(e\\\\\\)>({\\nclassName:\\\subst\\\,variants:{match:t(/\\\\\\\\/,e,/0\\\\\\\\tnr\\\/)},{\\nmatch:t(/\\\\\\\\/,e,/u\\\\{0-9a-fA-F{1,8}\\\\}/)}}),O(e\\\\\\)>({className:\\\subst\\\,\\nmatch:t(/\\\\\\\\/,e,/\\\\t *(?:\\\\r\\\\n|\\\\r\\\\n)/)}),T(e\\\\\\)>({className:\\\subst\\\,\\nlabel:\\\interpol\\\,begin:t(/\\\\\\\\/,e,/\\\\(/),end:/\\\\)/}),$(e\\\\\\)>({begin:t(e,/\\\\\\\\\/),\\nend:t(/\\\\\\\\\/,e),contains:L(e),O(e),T(e)}),j(e\\\\\\)>({begin:t(e,/\\\/),\\nend:t(/\\\/,e),contains:L(e),T(e)}),P{className:\\\string\\\,\\nvariants:$(),$(\\\#\\\),$(\\\##\\\),$(\\\###\\\),j(),j(\\\#\\\),j(\\\##\\\),j(\\\###\\\)},K{\\nmatch:t(/`/,w,/`/)},zK,{className:\\\variable\\\,match:/\\\\$\\\\d+/},{\\nclassName:\\\variable\\\,match:`\\\\\\\\$${f}+`},q{match:/(@|#(un)?)available/,\\nclassName:\\\keyword\\\,starts:{contains:{begin:/\\\\(/,end:/\\\\)/,keywords:E,\\ncontains:...M,I,P}}},{className:\\\keyword\\\,match:t(/@/,n(...g))},{\\nclassName:\\\meta\\\,match:t(/@/,w)},U{match:a(/\\\\bA-Z/),relevance:0,contains:{\\nclassName:\\\type\\\,\\nmatch:t(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,\\\+\\\)\\n},{className:\\\type\\\,match:y,relevance:0},{match:/?!+/,relevance:0},{\\nmatch:/\\\\.\\\\.\\\\./,relevance:0},{match:t(/\\\\s+&\\\\s+/,a(y)),relevance:0}},Z{\\nbegin:/\u003C/,end:/>/,keywords:k,contains:...v,...B,...q,S,U};U.contains.push(Z)\\n;const V{begin:/\\\\(/,end:/\\\\)/,relevance:0,keywords:k,contains:\\\self\\\,{\\nmatch:t(w,/\\\\s*:/),keywords:\\\_|0\\\,relevance:0\\n},...v,...B,..._,...M,I,P,...z,...q,U},W{begin:/\u003C/,end:/>/,contains:...v,U\\n},G{begin:/\\\\(/,end:/\\\\)/,keywords:k,contains:{\\nbegin:n(a(t(w,/\\\\s*:/)),a(t(w,/\\\\s+/,w,/\\\\s*:/))),end:/:/,relevance:0,contains:{\\nclassName:\\\keyword\\\,match:/\\\\b_\\\\b/},{className:\\\params\\\,match:w}\\n},...v,...B,...M,I,P,...q,U,V,endsParent:!0,illegal:/\\\/},R{\\nmatch:/func/,/\\\\s+/,n(K.match,w,b),className:{1:\\\keyword\\\,3:\\\title.function\\\},\\ncontains:W,G,d,illegal:/\\\\/,/%/},X{\\nmatch:/\\\\b(?:subscript|init?!?)/,/\\\\s*(?\u003C()/,className:{1:\\\keyword\\\},\\ncontains:W,G,d,illegal:/\\\\|%/},H{match:/operator/,/\\\\s+/,b,className:{\\n1:\\\keyword\\\,3:\\\title\\\}},J{begin:/precedencegroup/,/\\\\s+/,y,className:{\\n1:\\\keyword\\\,3:\\\title\\\},contains:U,keywords:...l,...o,end:/}/}\\n;for(const e of P.variants){const ae.contains.find((e>\\\interpol\\\e.label))\\n;a.keywordsk;const t...B,..._,...M,I,P,...z;a.contains...t,{begin:/\\\\(/,\\nend:/\\\\)/,contains:\\\self\\\,...t}}return{name:\\\Swift\\\,keywords:k,\\ncontains:...v,R,X,{beginKeywords:\\\struct protocol class extension enum actor\\\,\\nend:\\\\\\\\\\\{\\\,excludeEnd:!0,keywords:k,contains:e.inherit(e.TITLE_MODE,{\\nclassName:\\\title.class\\\,begin:/A-Za-z$_\\\\u00C0-\\\\u02B80-9A-Za-z$_*/}),...B\\n},H,J,{beginKeywords:\\\import\\\,end:/$/,contains:...v,relevance:0\\n},...B,..._,...M,I,P,...z,...q,U,V}}})();hljs.registerLanguage(\\\swift\\\,e)})();/*! `go` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const n{\\nkeyword:\\\break\\\,\\\case\\\,\\\chan\\\,\\\const\\\,\\\continue\\\,\\\default\\\,\\\defer\\\,\\\else\\\,\\\fallthrough\\\,\\\for\\\,\\\func\\\,\\\go\\\,\\\goto\\\,\\\if\\\,\\\import\\\,\\\interface\\\,\\\map\\\,\\\package\\\,\\\range\\\,\\\return\\\,\\\select\\\,\\\struct\\\,\\\switch\\\,\\\type\\\,\\\var\\\,\\ntype:\\\bool\\\,\\\byte\\\,\\\complex64\\\,\\\complex128\\\,\\\error\\\,\\\float32\\\,\\\float64\\\,\\\int8\\\,\\\int16\\\,\\\int32\\\,\\\int64\\\,\\\string\\\,\\\uint8\\\,\\\uint16\\\,\\\uint32\\\,\\\uint64\\\,\\\int\\\,\\\uint\\\,\\\uintptr\\\,\\\rune\\\,\\nliteral:\\\true\\\,\\\false\\\,\\\iota\\\,\\\nil\\\,\\nbuilt_in:\\\append\\\,\\\cap\\\,\\\close\\\,\\\complex\\\,\\\copy\\\,\\\imag\\\,\\\len\\\,\\\make\\\,\\\new\\\,\\\panic\\\,\\\print\\\,\\\println\\\,\\\real\\\,\\\recover\\\,\\\delete\\\\\n};return{name:\\\Go\\\,aliases:\\\golang\\\,keywords:n,illegal:\\\\u003C/\\\,\\ncontains:e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:\\\string\\\,\\nvariants:e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:\\\`\\\,end:\\\`\\\}},{\\nclassName:\\\number\\\,variants:{begin:e.C_NUMBER_RE+\\\i\\\,relevance:1\\n},e.C_NUMBER_MODE},{begin:/:/},{className:\\\function\\\,beginKeywords:\\\func\\\,\\nend:\\\\\\\\\\\s*(\\\\\\\\{|$)\\\,excludeEnd:!0,contains:e.TITLE_MODE,{className:\\\params\\\,\\nbegin:/\\\\(/,end:/\\\\)/,endsParent:!0,keywords:n,illegal:/\\\/}}}}})()\\n;hljs.registerLanguage(\\\go\\\,e)})();/*! `javascript` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;const e\\\A-Za-z$_0-9A-Za-z$_*\\\,n\\\as\\\,\\\in\\\,\\\of\\\,\\\if\\\,\\\for\\\,\\\while\\\,\\\finally\\\,\\\var\\\,\\\new\\\,\\\function\\\,\\\do\\\,\\\return\\\,\\\void\\\,\\\else\\\,\\\break\\\,\\\catch\\\,\\\instanceof\\\,\\\with\\\,\\\throw\\\,\\\case\\\,\\\default\\\,\\\try\\\,\\\switch\\\,\\\continue\\\,\\\typeof\\\,\\\delete\\\,\\\let\\\,\\\yield\\\,\\\const\\\,\\\class\\\,\\\debugger\\\,\\\async\\\,\\\await\\\,\\\static\\\,\\\import\\\,\\\from\\\,\\\export\\\,\\\extends\\\,a\\\true\\\,\\\false\\\,\\\null\\\,\\\undefined\\\,\\\NaN\\\,\\\Infinity\\\,t\\\Object\\\,\\\Function\\\,\\\Boolean\\\,\\\Symbol\\\,\\\Math\\\,\\\Date\\\,\\\Number\\\,\\\BigInt\\\,\\\String\\\,\\\RegExp\\\,\\\Array\\\,\\\Float32Array\\\,\\\Float64Array\\\,\\\Int8Array\\\,\\\Uint8Array\\\,\\\Uint8ClampedArray\\\,\\\Int16Array\\\,\\\Int32Array\\\,\\\Uint16Array\\\,\\\Uint32Array\\\,\\\BigInt64Array\\\,\\\BigUint64Array\\\,\\\Set\\\,\\\Map\\\,\\\WeakSet\\\,\\\WeakMap\\\,\\\ArrayBuffer\\\,\\\SharedArrayBuffer\\\,\\\Atomics\\\,\\\DataView\\\,\\\JSON\\\,\\\Promise\\\,\\\Generator\\\,\\\GeneratorFunction\\\,\\\AsyncFunction\\\,\\\Reflect\\\,\\\Proxy\\\,\\\Intl\\\,\\\WebAssembly\\\,s\\\Error\\\,\\\EvalError\\\,\\\InternalError\\\,\\\RangeError\\\,\\\ReferenceError\\\,\\\SyntaxError\\\,\\\TypeError\\\,\\\URIError\\\,r\\\setInterval\\\,\\\setTimeout\\\,\\\clearInterval\\\,\\\clearTimeout\\\,\\\require\\\,\\\exports\\\,\\\eval\\\,\\\isFinite\\\,\\\isNaN\\\,\\\parseFloat\\\,\\\parseInt\\\,\\\decodeURI\\\,\\\decodeURIComponent\\\,\\\encodeURI\\\,\\\encodeURIComponent\\\,\\\escape\\\,\\\unescape\\\,c\\\arguments\\\,\\\this\\\,\\\super\\\,\\\console\\\,\\\window\\\,\\\document\\\,\\\localStorage\\\,\\\module\\\,\\\global\\\,i.concat(r,t,s)\\n;return o>{const lo.regex,be,d{begin:/\u003CA-Za-z0-9\\\\\\\\._:-+/,\\nend:/\\\\/A-Za-z0-9\\\\\\\\._:-+>|\\\\/>/,isTrulyOpeningTag:(e,n)>{\\nconst ae0.length+e.index,te.inputa\\n;if(\\\\u003C\\\t||\\\,\\\t)return void n.ignoreMatch();let s\\n;\\\>\\\t&&(((e,{after:n})>{const a\\\\u003C/\\\+e0.slice(1)\\n;return-1!e.input.indexOf(a,n)})(e,{after:a\\n})||n.ignoreMatch()),(se.input.substr(a).match(/^\\\\s+extends\\\\s+/))&&0s.index&&n.ignoreMatch()\\n}},g{$pattern:e,keyword:n,literal:a,built_in:i,\\\variable.language\\\:c\\n},u\\\\\\\\\\\.(0-9(_?0-9)*)\\\,m\\\0|1-9(_?0-9)*|00-7*890-9*\\\,E{\\nclassName:\\\number\\\,variants:{\\nbegin:`(\\\\\\\\b(${m})((${u})|\\\\\\\\.)?|(${u}))eE+-?(0-9(_?0-9)*)\\\\\\\\b`},{\\nbegin:`\\\\\\\\b(${m})\\\\\\\\b((${u})\\\\\\\\b|\\\\\\\\.)?|(${u})\\\\\\\\b`},{\\nbegin:\\\\\\\\\\\b(0|1-9(_?0-9)*)n\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0xX0-9a-fA-F(_?0-9a-fA-F)*n?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b0bB0-1(_?0-1)*n?\\\\\\\\b\\\},{begin:\\\\\\\\\\\b0oO0-7(_?0-7)*n?\\\\\\\\b\\\},{\\nbegin:\\\\\\\\\\\b00-7+n?\\\\\\\\b\\\},relevance:0},A{className:\\\subst\\\,begin:\\\\\\\\\\\$\\\\\\\\{\\\,\\nend:\\\\\\\\\\\}\\\,keywords:g,contains:},y{begin:\\\html`\\\,end:\\\\\\,starts:{end:\\\`\\\,\\nreturnEnd:!1,contains:o.BACKSLASH_ESCAPE,A,subLanguage:\\\xml\\\}},N{\\nbegin:\\\css`\\\,end:\\\\\\,starts:{end:\\\`\\\,returnEnd:!1,\\ncontains:o.BACKSLASH_ESCAPE,A,subLanguage:\\\css\\\}},_{className:\\\string\\\,\\nbegin:\\\`\\\,end:\\\`\\\,contains:o.BACKSLASH_ESCAPE,A},f{className:\\\comment\\\,\\nvariants:o.COMMENT(/\\\\/\\\\*\\\\*(?!\\\\/)/,\\\\\\\\\\\*/\\\,{relevance:0,contains:{\\nbegin:\\\(?@A-Za-z+)\\\,relevance:0,contains:{className:\\\doctag\\\,\\nbegin:\\\@A-Za-z+\\\},{className:\\\type\\\,begin:\\\\\\\\\\\{\\\,end:\\\\\\\\\\\}\\\,excludeEnd:!0,\\nexcludeBegin:!0,relevance:0},{className:\\\variable\\\,begin:b+\\\(?\\\\\\\\s*(-)|$)\\\,\\nendsParent:!0,relevance:0},{begin:/(?^\\\\n)\\\\s/,relevance:0}}\\n}),o.C_BLOCK_COMMENT_MODE,o.C_LINE_COMMENT_MODE\\n},ho.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,E;A.containsh.concat({\\nbegin:/\\\\{/,end:/\\\\}/,keywords:g,contains:\\\self\\\.concat(h)})\\n;const v.concat(f,A.contains),pv.concat({begin:/\\\\(/,end:/\\\\)/,keywords:g,\\ncontains:\\\self\\\.concat(v)}),S{className:\\\params\\\,begin:/\\\\(/,end:/\\\\)/,\\nexcludeBegin:!0,excludeEnd:!0,keywords:g,contains:p},w{variants:{\\nmatch:/class/,/\\\\s+/,b,/\\\\s+/,/extends/,/\\\\s+/,l.concat(b,\\\(\\\,l.concat(/\\\\./,b),\\\)*\\\),\\nscope:{1:\\\keyword\\\,3:\\\title.class\\\,5:\\\keyword\\\,7:\\\title.class.inherited\\\}},{\\nmatch:/class/,/\\\\s+/,b,scope:{1:\\\keyword\\\,3:\\\title.class\\\}}},R{relevance:0,\\nmatch:l.either(/\\\\bJSON/,/\\\\bA-Za-z+(A-Za-z*|\\\\d)*/,/\\\\bA-Z{2,}(A-Za-z+|\\\\d)+(A-Za-z*)*/,/\\\\bA-Z{2,}a-z+(A-Za-z+|\\\\d)*(A-Za-z*)*/),\\nclassName:\\\title.class\\\,keywords:{_:...t,...s}},O{variants:{\\nmatch:/function/,/\\\\s+/,b,/(?\\\\s*\\\\()/},{match:/function/,/\\\\s*(?\\\\()/},\\nclassName:{1:\\\keyword\\\,3:\\\title.function\\\},label:\\\func.def\\\,contains:S,\\nillegal:/%/},k{\\nmatch:l.concat(/\\\\b/,(I...r,\\\super\\\,l.concat(\\\(?!\\\,I.join(\\\|\\\),\\\)\\\)),b,l.lookahead(/\\\\(/)),\\nclassName:\\\title.function\\\,relevance:0};var I;const x{\\nbegin:l.concat(/\\\\./,l.lookahead(l.concat(b,/(?!0-9A-Za-z$_()/))),end:b,\\nexcludeBegin:!0,keywords:\\\prototype\\\,className:\\\property\\\,relevance:0},T{\\nmatch:/get|set/,/\\\\s+/,b,/(?\\\\()/,className:{1:\\\keyword\\\,3:\\\title.function\\\},\\ncontains:{begin:/\\\\(\\\\)/},S\\n},C\\\(\\\\\\\\(^()*(\\\\\\\\(^()*(\\\\\\\\(^()*\\\\\\\\)^()*)*\\\\\\\\)^()*)*\\\\\\\\)|\\\+o.UNDERSCORE_IDENT_RE+\\\)\\\\\\\\s*>\\\,M{\\nmatch:/const|var|let/,/\\\\s+/,b,/\\\\s*/,/\\\\s*/,/(async\\\\s*)?/,l.lookahead(C),\\nkeywords:\\\async\\\,className:{1:\\\keyword\\\,3:\\\title.function\\\},contains:S}\\n;return{name:\\\Javascript\\\,aliases:\\\js\\\,\\\jsx\\\,\\\mjs\\\,\\\cjs\\\,keywords:g,exports:{\\nPARAMS_CONTAINS:p,CLASS_REFERENCE:R},illegal:/#(?!$_A-z)/,\\ncontains:o.SHEBANG({label:\\\shebang\\\,binary:\\\node\\\,relevance:5}),{\\nlabel:\\\use_strict\\\,className:\\\meta\\\,relevance:10,\\nbegin:/^\\\\s*\\\use (strict|asm)\\\/\\n},o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,y,N,_,f,E,R,{className:\\\attr\\\,\\nbegin:b+l.lookahead(\\\:\\\),relevance:0},M,{\\nbegin:\\\(\\\+o.RE_STARTERS_RE+\\\|\\\\\\\\b(case|return|throw)\\\\\\\\b)\\\\\\\\s*\\\,\\nkeywords:\\\return throw case\\\,relevance:0,contains:f,o.REGEXP_MODE,{\\nclassName:\\\function\\\,begin:C,returnBegin:!0,end:\\\\\\\\\\\s*>\\\,contains:{\\nclassName:\\\params\\\,variants:{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{\\nclassName:null,begin:/\\\\(\\\\s*\\\\)/,skip:!0},{begin:/\\\\(/,end:/\\\\)/,excludeBegin:!0,\\nexcludeEnd:!0,keywords:g,contains:p}}},{begin:/,/,relevance:0},{match:/\\\\s+/,\\nrelevance:0},{variants:{begin:\\\\u003C>\\\,end:\\\\u003C/>\\\},{\\nmatch:/\u003CA-Za-z0-9\\\\\\\\._:-+\\\\s*\\\\/>/},{begin:d.begin,\\n\\\on:begin\\\:d.isTrulyOpeningTag,end:d.end},subLanguage:\\\xml\\\,contains:{\\nbegin:d.begin,end:d.end,skip:!0,contains:\\\self\\\}}},O,{\\nbeginKeywords:\\\while if switch catch for\\\},{\\nbegin:\\\\\\\\\\\b(?!function)\\\+o.UNDERSCORE_IDENT_RE+\\\\\\\\\\\(^()*(\\\\\\\\(^()*(\\\\\\\\(^()*\\\\\\\\)^()*)*\\\\\\\\)^()*)*\\\\\\\\)\\\\\\\\s*\\\\\\\\{\\\,\\nreturnBegin:!0,label:\\\func.def\\\,contains:S,o.inherit(o.TITLE_MODE,{begin:b,\\nclassName:\\\title.function\\\})},{match:/\\\\.\\\\.\\\\./,relevance:0},x,{match:\\\\\\\\\\\$\\\+b,\\nrelevance:0},{match:/\\\\bconstructor(?\\\\s*\\\\()/,className:{1:\\\title.function\\\},\\ncontains:S},k,{relevance:0,match:/\\\\bA-ZA-Z_0-9+\\\\b/,\\nclassName:\\\variable.constant\\\},w,T,{match:/\\\\$(./}}}})()\\n;hljs.registerLanguage(\\\javascript\\\,e)})();/*! `rust` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\;return e>{const te.regex,n{\\nclassName:\\\title.function.invoke\\\,relevance:0,\\nbegin:t.concat(/\\\\b/,/(?!let\\\\b)/,e.IDENT_RE,t.lookahead(/\\\\s*\\\\(/))\\n},a\\\(ui(8|16|32|64|128|size)|f(32|64))?\\\,i\\\drop \\\,\\\Copy\\\,\\\Send\\\,\\\Sized\\\,\\\Sync\\\,\\\Drop\\\,\\\Fn\\\,\\\FnMut\\\,\\\FnOnce\\\,\\\ToOwned\\\,\\\Clone\\\,\\\Debug\\\,\\\PartialEq\\\,\\\PartialOrd\\\,\\\Eq\\\,\\\Ord\\\,\\\AsRef\\\,\\\AsMut\\\,\\\Into\\\,\\\From\\\,\\\Default\\\,\\\Iterator\\\,\\\Extend\\\,\\\IntoIterator\\\,\\\DoubleEndedIterator\\\,\\\ExactSizeIterator\\\,\\\SliceConcatExt\\\,\\\ToString\\\,\\\assert!\\\,\\\assert_eq!\\\,\\\bitflags!\\\,\\\bytes!\\\,\\\cfg!\\\,\\\col!\\\,\\\concat!\\\,\\\concat_idents!\\\,\\\debug_assert!\\\,\\\debug_assert_eq!\\\,\\\env!\\\,\\\panic!\\\,\\\file!\\\,\\\format!\\\,\\\format_args!\\\,\\\include_bin!\\\,\\\include_str!\\\,\\\line!\\\,\\\local_data_key!\\\,\\\module_path!\\\,\\\option_env!\\\,\\\print!\\\,\\\println!\\\,\\\select!\\\,\\\stringify!\\\,\\\try!\\\,\\\unimplemented!\\\,\\\unreachable!\\\,\\\vec!\\\,\\\write!\\\,\\\writeln!\\\,\\\macro_rules!\\\,\\\assert_ne!\\\,\\\debug_assert_ne!\\\\\n;return{name:\\\Rust\\\,aliases:\\\rs\\\,keywords:{$pattern:e.IDENT_RE+\\\!?\\\,\\ntype:\\\i8\\\,\\\i16\\\,\\\i32\\\,\\\i64\\\,\\\i128\\\,\\\isize\\\,\\\u8\\\,\\\u16\\\,\\\u32\\\,\\\u64\\\,\\\u128\\\,\\\usize\\\,\\\f32\\\,\\\f64\\\,\\\str\\\,\\\char\\\,\\\bool\\\,\\\Box\\\,\\\Option\\\,\\\Result\\\,\\\String\\\,\\\Vec\\\,\\nkeyword:\\\abstract\\\,\\\as\\\,\\\async\\\,\\\await\\\,\\\become\\\,\\\box\\\,\\\break\\\,\\\const\\\,\\\continue\\\,\\\crate\\\,\\\do\\\,\\\dyn\\\,\\\else\\\,\\\enum\\\,\\\extern\\\,\\\false\\\,\\\final\\\,\\\fn\\\,\\\for\\\,\\\if\\\,\\\impl\\\,\\\in\\\,\\\let\\\,\\\loop\\\,\\\macro\\\,\\\match\\\,\\\mod\\\,\\\move\\\,\\\mut\\\,\\\override\\\,\\\priv\\\,\\\pub\\\,\\\ref\\\,\\\return\\\,\\\self\\\,\\\Self\\\,\\\static\\\,\\\struct\\\,\\\super\\\,\\\trait\\\,\\\true\\\,\\\try\\\,\\\type\\\,\\\typeof\\\,\\\unsafe\\\,\\\unsized\\\,\\\use\\\,\\\virtual\\\,\\\where\\\,\\\while\\\,\\\yield\\\,\\nliteral:\\\true\\\,\\\false\\\,\\\Some\\\,\\\None\\\,\\\Ok\\\,\\\Err\\\,built_in:i},illegal:\\\\u003C/\\\,\\ncontains:e.C_LINE_COMMENT_MODE,e.COMMENT(\\\/\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{contains:\\\self\\\\\n}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?\\\/,illegal:null}),{\\nclassName:\\\string\\\,variants:{begin:/b?r(#*)\\\(.|\\\\n)*?\\\\\\\1(?!#)/},{\\nbegin:/b?\\\\\\\\?(x\\\\w{2}|u\\\\w{4}|U\\\\w{8}|.)/}},{className:\\\symbol\\\,\\nbegin:/a-zA-Z_a-zA-Z0-9_*/},{className:\\\number\\\,variants:{\\nbegin:\\\\\\\\\\\b0b(01_+)\\\+a},{begin:\\\\\\\\\\\b0o(0-7_+)\\\+a},{\\nbegin:\\\\\\\\\\\b0x(A-Fa-f0-9_+)\\\+a},{\\nbegin:\\\\\\\\\\\b(\\\\\\\\d\\\\\\\\d_*(\\\\\\\\.0-9_+)?(eE+-?0-9_+)?)\\\+a},relevance:0},{\\nbegin:/fn/,/\\\\s+/,e.UNDERSCORE_IDENT_RE,className:{1:\\\keyword\\\,\\n3:\\\title.function\\\}},{className:\\\meta\\\,begin:\\\#!?\\\\\\\\\\\,end:\\\\\\\\\\\\\\,contains:{\\nclassName:\\\string\\\,begin:/\\\/,end:/\\\/}},{\\nbegin:/let/,/\\\\s+/,/(?:mut\\\\s+)?/,e.UNDERSCORE_IDENT_RE,className:{1:\\\keyword\\\,\\n3:\\\keyword\\\,4:\\\variable\\\}},{\\nbegin:/for/,/\\\\s+/,e.UNDERSCORE_IDENT_RE,/\\\\s+/,/in/,className:{1:\\\keyword\\\,\\n3:\\\variable\\\,5:\\\keyword\\\}},{begin:/type/,/\\\\s+/,e.UNDERSCORE_IDENT_RE,\\nclassName:{1:\\\keyword\\\,3:\\\title.class\\\}},{\\nbegin:/(?:trait|enum|struct|union|impl|for)/,/\\\\s+/,e.UNDERSCORE_IDENT_RE,\\nclassName:{1:\\\keyword\\\,3:\\\title.class\\\}},{begin:e.IDENT_RE+\\\::\\\,keywords:{\\nkeyword:\\\Self\\\,built_in:i}},{className:\\\punctuation\\\,begin:\\\->\\\},n}}})()\\n;hljs.registerLanguage(\\\rust\\\,e)})();/*! `java` grammar compiled for Highlight.js 11.4.0 */\\n(()>{var e(()>{\\\use strict\\\\\n;var e\\\\\\\\\\\.(0-9(_*0-9)*)\\\,a\\\0-9a-fA-F(_*0-9a-fA-F)*\\\,n{\\nclassName:\\\number\\\,variants:{\\nbegin:`(\\\\\\\\b(0-9(_*0-9)*)((${e})|\\\\\\\\.)?|(${e}))eE+-?(0-9(_*0-9)*)fFdD?\\\\\\\\b`\\n},{begin:`\\\\\\\\b(0-9(_*0-9)*)((${e})fFdD?\\\\\\\\b|\\\\\\\\.(fFdD\\\\\\\\b)?)`},{\\nbegin:`(${e})fFdD?\\\\\\\\b`},{begin:\\\\\\\\\\\b(0-9(_*0-9)*)fFdD\\\\\\\\b\\\},{\\nbegin:`\\\\\\\\b0xX((${a})\\\\\\\\.?|(${a})?\\\\\\\\.(${a}))pP+-?(0-9(_*0-9)*)fFdD?\\\\\\\\b`\\n},{begin:\\\\\\\\\\\b(0|1-9(_*0-9)*)lL?\\\\\\\\b\\\},{begin:`\\\\\\\\b0xX(${a})lL?\\\\\\\\b`},{\\nbegin:\\\\\\\\\\\b0(_*0-7)*lL?\\\\\\\\b\\\},{begin:\\\\\\\\\\\b0bB01(_*01)*lL?\\\\\\\\b\\\},\\nrelevance:0};function s(e,a,n){return-1n?\\\\\\:e.replace(a,(t>s(e,a,n-1)))}\\nreturn e>{e.regex\\n;const a\\\\\\\xc0-\\\\u02b8a-zA-Z_$\\\\xc0-\\\\u02b8a-zA-Z_$0-9*\\\,ta+s(\\\(?:\u003C\\\+a+\\\~~~(?:\\\\\\\\s*,\\\\\\\\s*\\\+a+\\\~~~)*>)?\\\,/~~~/g,2),i{\\nkeyword:\\\synchronized\\\,\\\abstract\\\,\\\private\\\,\\\var\\\,\\\static\\\,\\\if\\\,\\\const \\\,\\\for\\\,\\\while\\\,\\\strictfp\\\,\\\finally\\\,\\\protected\\\,\\\import\\\,\\\native\\\,\\\final\\\,\\\void\\\,\\\enum\\\,\\\else\\\,\\\break\\\,\\\transient\\\,\\\catch\\\,\\\instanceof\\\,\\\volatile\\\,\\\case\\\,\\\assert\\\,\\\package\\\,\\\default\\\,\\\public\\\,\\\try\\\,\\\switch\\\,\\\continue\\\,\\\throws\\\,\\\protected\\\,\\\public\\\,\\\private\\\,\\\module\\\,\\\requires\\\,\\\exports\\\,\\\do\\\,\\\sealed\\\,\\nliteral:\\\false\\\,\\\true\\\,\\\null\\\,\\ntype:\\\char\\\,\\\boolean\\\,\\\long\\\,\\\float\\\,\\\int\\\,\\\byte\\\,\\\short\\\,\\\double\\\,\\nbuilt_in:\\\super\\\,\\\this\\\},r{className:\\\meta\\\,begin:\\\@\\\+a,contains:{\\nbegin:/\\\\(/,end:/\\\\)/,contains:\\\self\\\}},l{className:\\\params\\\,begin:/\\\\(/,\\nend:/\\\\)/,keywords:i,relevance:0,contains:e.C_BLOCK_COMMENT_MODE,endsParent:!0}\\n;return{name:\\\Java\\\,aliases:\\\jsp\\\,keywords:i,illegal:/\u003C\\\\/|#/,\\ncontains:e.COMMENT(\\\/\\\\\\\\*\\\\\\\\*\\\,\\\\\\\\\\\*/\\\,{relevance:0,contains:{begin:/\\\\w+@/,\\nrelevance:0},{className:\\\doctag\\\,begin:\\\@A-Za-z+\\\}}),{\\nbegin:/import java\\\\.a-z+\\\\./,keywords:\\\import\\\,relevance:2\\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/\\\\\\\\\/,end:/\\\\\\\\\/,\\nclassName:\\\string\\\,contains:e.BACKSLASH_ESCAPE\\n},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{\\nmatch:/\\\\b(?:class|interface|enum|extends|implements|new)/,/\\\\s+/,a,className:{\\n1:\\\keyword\\\,3:\\\title.class\\\}},{match:/non-sealed/,scope:\\\keyword\\\},{\\nbegin:a,/\\\\s+/,a,/\\\\s+/,//,className:{1:\\\type\\\,3:\\\variable\\\,5:\\\operator\\\}},{\\nbegin:/record/,/\\\\s+/,a,className:{1:\\\keyword\\\,3:\\\title.class\\\},\\ncontains:l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},{\\nbeginKeywords:\\\new throw return else\\\,relevance:0},{\\nbegin:\\\(?:\\\+t+\\\\\\\\\\\s+)\\\,e.UNDERSCORE_IDENT_RE,/\\\\s*(?\\\\()/,className:{\\n2:\\\title.function\\\},keywords:i,contains:{className:\\\params\\\,begin:/\\\\(/,\\nend:/\\\\)/,keywords:i,relevance:0,\\ncontains:r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE\\n},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE},n,r}}})()\\n;hljs.registerLanguage(\\\java\\\,e)})();\\nexports.hljs hljs;\\n\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/highlight/highlight.js\,\module-type\:\library\},\$:/plugins/tiddlywiki/highlight/highlight.css\:{\text\:\/*!\\n Theme: Default\\n Description: Original highlight.js style\\n Author: (c) Ivan Sagalaev \u003Cmaniac@softwaremaniacs.org>\\n Maintainer: @highlightjs/core-team\\n Website: https://highlightjs.org/\\n License: see project LICENSE\\n Touched: 2021\\n*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#f3f3f3;color:#444}.hljs-comment{color:#697070}.hljs-punctuation,.hljs-tag{color:#444a}.hljs-tag .hljs-attr,.hljs-tag .hljs-name{color:#444}.hljs-attribute,.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-name,.hljs-selector-tag{font-weight:700}.hljs-deletion,.hljs-number,.hljs-quote,.hljs-selector-class,.hljs-selector-id,.hljs-string,.hljs-template-tag,.hljs-type{color:#800}.hljs-section,.hljs-title{color:#800;font-weight:700}.hljs-link,.hljs-operator,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-symbol,.hljs-template-variable,.hljs-variable{color:#ab5656}.hljs-literal{color:#695}.hljs-addition,.hljs-built_in,.hljs-bullet,.hljs-code{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}\,\type\:\text/css\,\title\:\$:/plugins/tiddlywiki/highlight/highlight.css\,\tags\:\$:/tags/Stylesheet $:/tags/Stylesheet/Highlight\},\$:/plugins/tiddlywiki/highlight/highlightblock.js\:{\title\:\$:/plugins/tiddlywiki/highlight/highlightblock.js\,\text\:\/*\\\\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\\n\\n\\\\*/\\n\\\use strict\\\;\\n\\nvar TYPE_MAPPINGS_BASE \\\$:/config/HighlightPlugin/TypeMappings/\\\;\\n\\nvar CodeBlockWidget require(\\\$:/core/modules/widgets/codeblock.js\\\).codeblock;\\n\\nvar hljs require(\\\$:/plugins/tiddlywiki/highlight/highlight.js\\\);\\n\\nif(hljs.getLanguage ! undefined) {\\n\\t// load language definitions\\n\\t$tw.utils.each($tw.modules.types\\\highlight\\\,function(moduleInfo,moduleName) {\\n\\t\\t$tw.utils.evalSandboxed(moduleInfo.definition,{hljs:hljs, exports:{}},moduleName);\\n\\t});\\n\\t\\n\\tCodeBlockWidget.prototype.postRender function() {\\n\\t\\tvar domNode this.domNodes0,\\n\\t\\t\\tlanguage this.language,\\n\\t\\t\\ttiddler this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\\n\\t\\tif(tiddler) {\\n\\t\\t\\tlanguage tiddler.fields.text || \\\\\\;\\n\\t\\t}\\n\\t\\tif(language && hljs.getLanguage(language)) {\\n\\t\\t\\tdomNode.className \\\hljs\\\;\\n\\t\\t\\tdomNode.children0.className language.toLowerCase() + \\\ hljs\\\;\\n\\t\\t\\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\t\\thljs.highlightElement(domNode.children0);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tvar text domNode.textContent;\\n\\t\\t\\t\\tdomNode.children0.innerHTML hljs.highlight(text,{language: language, ignoreIllegals: true}).value;\\n\\t\\t\\t\\t// If were using the fakedom then specially save the original raw text\\n\\t\\t\\t\\tif(domNode.isTiddlyWikiFakeDom) {\\n\\t\\t\\t\\t\\tdomNode.children0.textInnerHTML text;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n}\\n\,\type\:\application/javascript\,\module-type\:\widget\},\$:/plugins/tiddlywiki/highlight/license\:{\title\:\$:/plugins/tiddlywiki/highlight/license\,\type\:\text/plain\,\text\:\Copyright (c) 2006, Ivan Sagalaev\\nAll rights reserved.\\nRedistribution and use in source and binary forms, with or without\\nmodification, are permitted provided that the following conditions are met:\\n\\n * Redistributions of source code must retain the above copyright\\n notice, this list of conditions and the following disclaimer.\\n * Redistributions in binary form must reproduce the above copyright\\n notice, this list of conditions and the following disclaimer in the\\n documentation and/or other materials provided with the distribution.\\n * Neither the name of highlight.js nor the names of its contributors\\n may be used to endorse or promote products derived from this software\\n without specific prior written permission.\\n\\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS AND ANY\\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\\n\},\$:/plugins/tiddlywiki/highlight/readme\:{\title\:\$:/plugins/tiddlywiki/highlight/readme\,\text\:\\\\\define highlightVersion() 11.4.0\\n\\nThis plugin provides syntax highlighting of code blocks using version \u003C\u003ChighlightVersion>> of highlight.js|https://github.com/isagalaev/highlight.js from Ivan Sagalaev. This plugin does not work on browsers that do not fully support ~JavaScript ES6 (2015). If you need highlight.js running on those legacy browsers, you would need to install the \\\Highlight (Legacy)\\\ plugin instead. Heres a ES6 compatibility table|https://caniuse.com/?searches6.\\n\\n! Built-in Language Brushes\\n\\nThe plugin includes support for the following common languages (referred to as \\\brushes\\\ by highlight.js):\\n\\n* bash\\n* c\\n* cpp\\n* csharp\\n* css\\n* diff\\n* go\\n* html, xml\\n* java\\n* javascript\\n* json\\n* kotlin\\n* less\\n* lua\\n* makefile\\n* markdown\\n* objectivec\\n* perl\\n* php\\n* plaintext\\n* python\\n* R\\n* ruby\\n* rust\\n* scss\\n* sql\\n* shell session\\n* swift\\n* toml, ini\\n* typescript\\n* visual basic .net\\n* yaml\\n\\nAnd these additional ones:\\n\\n* apache config\\n* dockerfile\\n* fortran\\n* latex\\n* nginx config\\n\\nThe mapping between a MIME type and a highlight.js language specifier is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\\n\},\$:/plugins/tiddlywiki/highlight/styles\:{\title\:\$:/plugins/tiddlywiki/highlight/styles\,\tags\:\$:/tags/Stylesheet $:/tags/Stylesheet/Highlight\,\text\:\pre.hljs {\\n padding: 0;\\n}\\n\\npre code.hljs {\\n padding: 0.5em;\\n}\\n\\n.hljs {\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n -webkit-text-size-adjust:none;\\n}\\n\\n.hljs-comment,\\n.hljs-quote {\\n color: #93a1a1;\\n}\\n\\n/* Solarized Green */\\n.hljs-keyword,\\n.hljs-selector-tag,\\n.hljs-addition {\\n color: #859900;\\n}\\n\\n/* Solarized Cyan */\\n.hljs-number,\\n.hljs-string,\\n.hljs-meta .hljs-string,\\n.hljs-literal,\\n.hljs-doctag,\\n.hljs-regexp {\\n color: #2aa198;\\n}\\n\\n/* Solarized Blue */\\n.hljs-title,\\n.hljs-section,\\n.hljs-name,\\n.hljs-selector-id,\\n.hljs-selector-class {\\n color: #268bd2;\\n}\\n\\n/* Solarized Yellow */\\n.hljs-attribute,\\n.hljs-attr,\\n.hljs-variable,\\n.hljs-template-variable,\\n.hljs-class .hljs-title,\\n.hljs-type {\\n color: #b58900;\\n}\\n\\n/* Solarized Orange */\\n.hljs-symbol,\\n.hljs-bullet,\\n.hljs-subst,\\n.hljs-meta,\\n.hljs-meta .hljs-keyword,\\n.hljs-selector-attr,\\n.hljs-selector-pseudo,\\n.hljs-link {\\n color: #cb4b16;\\n}\\n\\n/* Solarized Red */\\n.hljs-built_in,\\n.hljs-deletion {\\n color: #dc322f;\\n}\\n\\n.hljs-formula {\\n background: #eee8d5;\\n}\\n\\n.hljs-emphasis {\\n font-style: italic;\\n}\\n\\n.hljs-strong {\\n font-weight: bold;\\n}\\n\},\$:/plugins/tiddlywiki/highlight/usage\:{\title\:\$:/plugins/tiddlywiki/highlight/usage\,\text\:\\\\\import $:/plugins/tiddlywiki/highlight/readme\\n\\n! Usage\\n\\nSyntax highlighting is triggered when you add language information to code blocks defined with triple backticks or with the `\u003C$codeblock>` widget. For fenced code blocks, specify the codes language immediately after the first set of backticks:\\n\\n```\\n ```js\\n var a b + c; // Highlighted as JavaScript\\n ```\\n```\\n\\n! Adding Themes\\n\\nThe available themes can be found from the following CDNs:\\n\\n* \u003Ca href`https://www.jsdelivr.com/package/gh/highlightjs/cdn-release?pathbuild%2Fstyles&version$(highlightVersion)$` class\\\tc-tiddlylink-external\\\ target\\\_blank\\\>jsDelivr\u003C/a>\\n* \u003Ca href`https://unpkg.com/browse/@highlightjs/cdn-assets@$(highlightVersion)$/styles/` class\\\tc-tiddlylink-external\\\ target\\\_blank\\\>unpkg\u003C/a>\\n\\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with $:/tags/Stylesheet/Highlight, with type set to `text/css`.\\n\\nThen, check the new theme in the following list and uncheck others: \\n\\n\u003C$list filter\\\alltiddlers+shadowstag$:/tags/Stylesheet/Highlightsorttitle!isdraft\\\>\\n\\n\u003C$checkbox tag\\\$:/tags/Stylesheet\\\> \u003C$link/>\u003C/$checkbox>\\n\\n\u003C/$list>\\n\\n! Supporting Additional Languages\\n\\nThe highlight.js|https://github.com/highlightjs/highlight.js project supports many languages. Only a subset of these languages are supported by the plugin. You can change the language set using either of the following methods:\\n\\n!! Browser-based Method\\n\\nYou can import language definitions into \u003C$text text\\\JavaScript\\\/> tiddlers, with their `module-type` set to \\\highlight\\\.\\n\\nFirst, locate the language file(s) you need. You can fetch the files from the following CDNs:\\n\\n* \u003Ca href`https://www.jsdelivr.com/package/gh/highlightjs/cdn-release?pathbuild%2Flanguages&version$(highlightVersion)$` class\\\tc-tiddlylink-external\\\ target\\\_blank\\\>jsDelivr\u003C/a>\\n* \u003Ca href`https://unpkg.com/browse/@highlightjs/cdn-assets@$(highlightVersion)$/languages/` class\\\tc-tiddlylink-external\\\ target\\\_blank\\\>unpkg\u003C/a>\\n\\nThen, click the button below to create a \\\highlight\\\ module. Copy and paste the content of a language file into the the text area. Give your tiddler a meaningful title so you can keep track of the languages youve installed. You may choose to either create one tiddler per language or lump all language definitions into one tiddler. Save and reload your wiki.\\n\\n\u003C$button tooltip\\\add new languages\\\ aria-label\\\add new languages\\\ >\\n\u003C$action-createtiddler $basetitle\\\highlight-language.js\\\ text\\\\\\ type\\\application/javascript\\\ module-type\\\highlight\\\>\\n\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $param\u003C\u003CcreateTiddler-title>>/>\\n\u003C/$action-createtiddler>\\nAdd New Language(s)\\n\u003C/$button>\\n\\n!!! Keeping Your Language Definitions Up-to-date\\n\\nRemember to update installed languages whenever this plugin is upgraded: \\n\\n\u003Cul>\\n\u003C$list filter\\\highlightmodules\\\ emptyMessage\\\\\\\\\\u003Cli>(none installed)\u003C/li>\\\\\\\\\>\\n\u003Cli>\u003C$link>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\\n\\n!! Via \u003C$text text\\\TiddlyWiki\\\/> on Node.js\\n\\nYou can replace the supplied highlight.js library with a custom version:\\n\\n# Go to the highlight.js project download page|https://highlightjs.org/download/, select the language definitions to include, and press the Download button to download a zip archive containing customised support files for a highlight.js syntax highlighting server.\\n# Locate the `highlight.min.js` file in the highlight plugin -- on a stock Debian 8 system running Tiddlywiki5 under node-js, it is in `/usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/highlight/files/`.\\n# Replace the plugin `highlight.min.js` file located in step 2 with the one from the downloaded archive obtained in step 1.\\n# Restart the ~TiddlyWiki server.\}}}},{title:$:/plugins/tiddlywiki/katex,name:KaTeX,description:KaTeX library for mathematical typography,list:readme usage config,library-version:v0.15.3,stability:STABILITY_2_STABLE,version:5.3.8,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/plugins/tiddlywiki/katex/ImplementationNotes\:{\title\:\$:/plugins/tiddlywiki/katex/ImplementationNotes\,\text\:\! CSS Handling\\n\\nThe original CSS from KaTeX includes a number of font definitions in this format:\\n\\n```\\n@font-face {\\n font-family: KaTeX_AMS;\\n src: url(fonts/KaTeX_AMS-Regular.eot);\\n src: url(fonts/KaTeX_AMS-Regular.eot?#iefix) format(embedded-opentype),\\n url(fonts/KaTeX_AMS-Regular.woff) format(woff),\\n url(fonts/KaTeX_AMS-Regular.ttf) format(truetype);\\n font-weight: normal;\\n font-style: normal;\\n}\\n```\\n\\nThese definitions are currently removed manually from $:/plugins/tiddlywiki/katex/katex.min.css so that they can be redefined as data URIs using TiddlyWikis macro notation in $:/plugins/tiddlywiki/katex/styles\\n\\n```\\n@font-face {\\n font-family: KaTeX_AMS;\\n src: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff>>) format(woff);\\n font-weight: normal;\\n font-style: normal;\\n}\\n```\\n\\nNote that the plugin currently only embeds the WOFF format fonts, which seems to be sufficient for most browsers.\\n\},\$:/plugins/tiddlywiki/katex/config\:{\title\:\$:/plugins/tiddlywiki/katex/config\,\caption\:\KaTeX\,\tags\:\$:/tags/ControlPanel/SettingsTab\,\text\:\\u003Cdiv class\\\tc-control-panel\\\>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/KaTeX/Config!hasdraft.of\\\>\\n\\n\u003Cdiv>\\n\\n!! \u003C$link>\u003C$transclude field\\\caption\\\/>\u003C/$link>\\n\\n\u003C$transclude>\\n\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003C/div>\\n\},\$:/plugins/tiddlywiki/katex/developer\:{\title\:\$:/plugins/tiddlywiki/katex/developer\,\text\:\!! How to upgrade\\n\\n# Download latest release zip file from Github release|https://github.com/KaTeX/KaTeX/releases\\n# Backup existing files\\n#* `plugins/tiddlywiki/katex/files/tiddlywiki.files` file and \\n#* `katex.without-font-face.min.css` file\\n#* Learn more at: $:/plugins/tiddlywiki/katex/ImplementationNotes\\n# Rename extracted folder to \\\files\\\ and \\n#* copy it to `plugins/tiddlywiki/katex/files`\\n#* (maybe delete the old folder first, to make a full overwrite)\\n#* delete unused files in it, like `*.mjs` files and `*.md` files\\n# Create `plugins/tiddlywiki/katex/files/tiddlywiki.files`\\n#* (or use the old one) and \\n#* register all needed files\\n# Register in `files/tiddlywiki.files`\\n#* `katex.without-font-face.min.css` as \\n#* `$:/plugins/tiddlywiki/katex/katex.min.css`\\n#* so fonts are loaded properly in tw environment\\n\\n\\n!! How to test\\n\\nTo create a new \\\test edition\\\ type the following command in a console window:\\n\\n\u003C\u003C\u003C\\n```\\nnode tiddlywiki test-katex --init katexdemo\\n```\\n\u003C\u003C\u003C\\n\\n>It will create a new directory //test-katex// and clones the //katexdemo// edition.\u003Cbr>The output should be:\\n\\n\u003C\u003C\u003C\\n`Copied edition katexdemo to test-katex`\\n\u003C\u003C\u003C\\n\\nType:\\n\\n\u003C\u003C\u003C\\n```\\nnode tiddlywiki test-katex --listen\\n```\\n\u003C\u003C\u003C\\n\\n>It should output\\n\\n\u003C\u003C\u003C\\n`syncer-server-filesystem: Dispatching save task: $:/StoryList\\nServing on http://127.0.0.1:8080\\n(press ctrl-C to exit)\\n`\\n\u003C\u003C\u003C\\n\\nTest the new version in the browser at: http://127.0.0.1:8080\\n\\nMake sure all equations of math and chemistry are rendered properly.\\n\},\$:/plugins/tiddlywiki/katex/katex.min.css\:{\text\:\.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\\\0.15.3\\\}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\\\\\\}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\\\(\\\ counter(katexEqnNo) \\\)\\\;counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\\\(\\\ counter(mmlEqnNo) \\\)\\\;counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}\\n\,\type\:\text/plain\,\title\:\$:/plugins/tiddlywiki/katex/katex.min.css\},\$:/plugins/tiddlywiki/katex/katex.min.js\:{\text\:\(function(document) {\\n!function(e,t){\\\object\\\typeof exports&&\\\object\\\typeof module?module.exportst():\\\function\\\typeof define&&define.amd?define(,t):\\\object\\\typeof exports?exports.katext():e.katext()}(\\\undefined\\\!typeof self?self:this,(function(){return function(){\\\use strict\\\;var e{d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:rn})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t{};e.d(t,{default:function(){return Qn}});var rfunction e(t,r){this.positionvoid 0;var n,a\\\KaTeX parse error: \\\+t,ir&&r.loc;if(i&&i.start\u003Ci.end){var oi.lexer.input;ni.start;var si.end;no.length?a+\\\ at end of input: \\\:a+\\\ at position \\\+(n+1)+\\\: \\\;var lo.slice(n,s).replace(/^/g,\\\$&\\\\u0332\\\);a+(n>15?\\\\\\\u2026\\\+o.slice(n-15,n):o.slice(0,n))+l+(s+15\u003Co.length?o.slice(s,s+15)+\\\\\\\u2026\\\:o.slice(s))}var hnew Error(a);return h.name\\\ParseError\\\,h.__proto__e.prototype,h.positionn,h};r.prototype.__proto__Error.prototype;var nr,a/(A-Z)/g,i{\\\&\\\:\\\&\\\,\\\>\\\:\\\>\\\,\\\\u003C\\\:\\\<\\\,\\\:\\\"\\\,\\\\\\:\\\'\\\},o/&>\u003C\\\/g;var sfunction e(t){return\\\ordgroup\\\t.type||\\\color\\\t.type?1t.body.length?e(t.body0):t:\\\font\\\t.type?e(t.body):t},l{contains:function(e,t){return-1!e.indexOf(t)},deflt:function(e,t){return void 0e?t:e},escape:function(e){return String(e).replace(o,(function(e){return ie}))},hyphenate:function(e){return e.replace(a,\\\-$1\\\).toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var ts(e);return\\\mathord\\\t.type||\\\textord\\\t.type||\\\atom\\\t.type},protocolFromUrl:function(e){var t/^\\\\s*(^\\\\\\\\/#*?)(?::|*58|*3a)/i.exec(e);return null!t?t1:\\\_relative\\\}},h{displayMode:{type:\\\boolean\\\,description:\\\Render math in display mode, which puts the math in display style (so \\\\\\\\int and \\\\\\\\sum are large, for example), and centers the math on the page on its own line.\\\,cli:\\\-d, --display-mode\\\},output:{type:{enum:\\\htmlAndMathml\\\,\\\html\\\,\\\mathml\\\},description:\\\Determines the markup language of the output.\\\,cli:\\\-F, --format \u003Ctype>\\\},leqno:{type:\\\boolean\\\,description:\\\Render display math in leqno style (left-justified tags).\\\},fleqn:{type:\\\boolean\\\,description:\\\Render display math flush left.\\\},throwOnError:{type:\\\boolean\\\,default:!0,cli:\\\-t, --no-throw-on-error\\\,cliDescription:\\\Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error.\\\},errorColor:{type:\\\string\\\,default:\\\#cc0000\\\,cli:\\\-c, --error-color \u003Ccolor>\\\,cliDescription:\\\A color string given in the format rgb or rrggbb (no #). This option determines the color of errors rendered by the -t option.\\\,cliProcessor:function(e){return\\\#\\\+e}},macros:{type:\\\object\\\,cli:\\\-m, --macro \u003Cdef>\\\,cliDescription:\\\Define custom macro of the form \\\\\\\\foo:expansion (use multiple -m arguments for multiple macros).\\\,cliDefault:,cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:\\\number\\\,description:\\\Specifies a minimum thickness, in ems, for fraction lines, `\\\\\\\\sqrt` top lines, `{array}` vertical lines, `\\\\\\\\hline`, `\\\\\\\\hdashline`, `\\\\\\\\underline`, `\\\\\\\\overline`, and the borders of `\\\\\\\\fbox`, `\\\\\\\\boxed`, and `\\\\\\\\fcolorbox`.\\\,processor:function(e){return Math.max(0,e)},cli:\\\--min-rule-thickness \u003Csize>\\\,cliProcessor:parseFloat},colorIsTextColor:{type:\\\boolean\\\,description:\\\Makes \\\\\\\\color behave like LaTeXs 2-argument \\\\\\\\textcolor, instead of LaTeXs one-argument \\\\\\\\color mode change.\\\,cli:\\\-b, --color-is-text-color\\\},strict:{type:{enum:\\\warn\\\,\\\ignore\\\,\\\error\\\},\\\boolean\\\,\\\function\\\,description:\\\Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.\\\,cli:\\\-S, --strict\\\,cliDefault:!1},trust:{type:\\\boolean\\\,\\\function\\\,description:\\\Trust the input, enabling all HTML features such as \\\\\\\\url.\\\,cli:\\\-T, --trust\\\},maxSize:{type:\\\number\\\,default:1/0,description:\\\If non-zero, all user-specified sizes, e.g. in \\\\\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large\\\,processor:function(e){return Math.max(0,e)},cli:\\\-s, --max-size \u003Cn>\\\,cliProcessor:parseInt},maxExpand:{type:\\\number\\\,default:1e3,description:\\\Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.\\\,processor:function(e){return Math.max(0,e)},cli:\\\-e, --max-expand \u003Cn>\\\,cliProcessor:function(e){return\\\Infinity\\\e?1/0:parseInt(e)}},globalGroup:{type:\\\boolean\\\,cli:!1}};function m(e){if(e.default)return e.default;var te.type,rArray.isArray(t)?t0:t;if(\\\string\\\!typeof r)return r.enum0;switch(r){case\\\boolean\\\:return!1;case\\\string\\\:return\\\\\\;case\\\number\\\:return 0;case\\\object\\\:return{}}}var cfunction(){function e(e){for(var t in this.displayModevoid 0,this.outputvoid 0,this.leqnovoid 0,this.fleqnvoid 0,this.throwOnErrorvoid 0,this.errorColorvoid 0,this.macrosvoid 0,this.minRuleThicknessvoid 0,this.colorIsTextColorvoid 0,this.strictvoid 0,this.trustvoid 0,this.maxSizevoid 0,this.maxExpandvoid 0,this.globalGroupvoid 0,ee||{},h)if(h.hasOwnProperty(t)){var rht;thistvoid 0!et?r.processor?r.processor(et):et:m(r)}}var te.prototype;return t.reportNonstrictfunction(e,t,r){var athis.strict;if(\\\function\\\typeof a&&(aa(e,t,r)),a&&\\\ignore\\\!a){if(!0a||\\\error\\\a)throw new n(\\\LaTeX-incompatible input and strict mode is set to error: \\\+t+\\\ \\\+e+\\\\\\,r);\\\warn\\\a?\\\undefined\\\!typeof console&&console.warn(\\\LaTeX-incompatible input and strict mode is set to warn: \\\+t+\\\ \\\+e+\\\\\\):\\\undefined\\\!typeof console&&console.warn(\\\LaTeX-incompatible input and strict mode is set to unrecognized \\\+a+\\\: \\\+t+\\\ \\\+e+\\\\\\)}},t.useStrictBehaviorfunction(e,t,r){var nthis.strict;if(\\\function\\\typeof n)try{nn(e,t,r)}catch(e){n\\\error\\\}return!(!n||\\\ignore\\\n)&&(!0n||\\\error\\\n||(\\\warn\\\n?(\\\undefined\\\!typeof console&&console.warn(\\\LaTeX-incompatible input and strict mode is set to warn: \\\+t+\\\ \\\+e+\\\\\\),!1):(\\\undefined\\\!typeof console&&console.warn(\\\LaTeX-incompatible input and strict mode is set to unrecognized \\\+n+\\\: \\\+t+\\\ \\\+e+\\\\\\),!1)))},t.isTrustedfunction(e){e.url&&!e.protocol&&(e.protocoll.protocolFromUrl(e.url));var t\\\function\\\typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),ufunction(){function e(e,t,r){this.idvoid 0,this.sizevoid 0,this.crampedvoid 0,this.ide,this.sizet,this.crampedr}var te.prototype;return t.supfunction(){return pdthis.id},t.subfunction(){return pfthis.id},t.fracNumfunction(){return pgthis.id},t.fracDenfunction(){return pvthis.id},t.crampfunction(){return pbthis.id},t.textfunction(){return pythis.id},t.isTightfunction(){return this.size>2},e}(),pnew u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0),d4,5,4,5,6,7,6,7,f5,5,5,5,7,7,7,7,g2,3,4,5,6,7,6,7,v3,3,5,5,7,7,7,7,b1,1,3,3,5,5,7,7,y0,1,2,3,2,3,2,3,x{DISPLAY:p0,TEXT:p2,SCRIPT:p4,SCRIPTSCRIPT:p6},w{name:\\\latin\\\,blocks:256,591,768,879},{name:\\\cyrillic\\\,blocks:1024,1279},{name:\\\armenian\\\,blocks:1328,1423},{name:\\\brahmic\\\,blocks:2304,4255},{name:\\\georgian\\\,blocks:4256,4351},{name:\\\cjk\\\,blocks:12288,12543,19968,40879,65280,65376},{name:\\\hangul\\\,blocks:44032,55215};var k;function S(e){for(var t0;t\u003Ck.length;t+2)if(e>kt&&e\u003Ckt+1)return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M80,z{doubleleftarrow:\\\M262 157\\\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\\\,doublerightarrow:\\\M399738 392l\\\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\\\,leftarrow:\\\M400000 241H110l3-3c68.7-52.7 113.7-120\\\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\\\n l-3-3h399890zM100 241v40h399900v-40z\\\,leftbrace:\\\M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\\\,leftbraceunder:\\\M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\\\,leftgroup:\\\M400000 80\\\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\\\n 435 0h399565z\\\,leftgroupunder:\\\M400000 262\\\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\\\n 435 219h399565z\\\,leftharpoon:\\\M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\\\,leftharpoonplus:\\\M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\\\nm0 0v40h400000v-40z\\\,leftharpoondown:\\\M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\\\,leftharpoondownplus:\\\M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\\\,lefthook:\\\M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\\\n 71.5 23h399859zM103 281v-40h399897v40z\\\,leftlinesegment:\\\M40 281 V428 H0 V94 H40 V241 H400000 v40z\\\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\\\,leftmapsto:\\\M40 281 V448H0V74H40V241H400000v40z\\\\nM40 281 V448H0V74H40V241H400000v40z\\\,leftToFrom:\\\M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\\\,longequal:\\\M0 50 h400000 v40H0z m0 194h40000v40H0z\\\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\\\,midbrace:\\\M200428 334\\\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\\\,midbraceunder:\\\M199572 214\\\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\\\,oiintSize1:\\\M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\\\,oiintSize2:\\\M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\\\nc0 110 84 276 504 276s502.4-166 502.4-276z\\\,oiiintSize1:\\\M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\\\,oiiintSize2:\\\M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\\\,rightarrow:\\\M0 241v40h399891c-47.3 35.3-84 78-110 128\\\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\\\n 151.7 139 205zm0 0v40h399900v-40z\\\,rightbrace:\\\M400000 542l\\\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\\\,rightbraceunder:\\\M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\\\,rightgroup:\\\M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\\\,rightgroupunder:\\\M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\\\,rightharpoon:\\\M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\\\n 69.2 92 94.5zm0 0v40h399900v-40z\\\,rightharpoonplus:\\\M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\\\,rightharpoondown:\\\M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\\\,rightharpoondownplus:\\\M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\\\,righthook:\\\M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\\\,rightlinesegment:\\\M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\\,rightToFrom:\\\M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\\\,twoheadleftarrow:\\\M0 167c68 40\\\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\\\,twoheadrightarrow:\\\M400000 167\\\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\\\,tilde1:\\\M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\\\n-68.267.847-113-73.952-191-73.952z\\\,tilde2:\\\M344 55.266c-142 0-300.638 81.316-311.5 86.418\\\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\\\,tilde3:\\\M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\\\n -338 0-409-156.573-744-156.573z\\\,tilde4:\\\M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\\\n -175.236-744-175.236z\\\,vec:\\\M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\\\nc-16-25.333-24-45-24-59z\\\,widehat1:\\\M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\\\,widehat2:\\\M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\,widehat3:\\\M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\,widehat4:\\\M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\\\,widecheck1:\\\M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\\\,widecheck2:\\\M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\,widecheck3:\\\M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\,widecheck4:\\\M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\\\,baraboveleftarrow:\\\M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\\\,rightarrowabovebar:\\\M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\\\,baraboveshortleftharpoon:\\\M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\\\,rightharpoonaboveshortbar:\\\M0,241 l0,40c399126,0,399993,0,399993,0\\\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\\\,shortbaraboveleftharpoon:\\\M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\\\,shortrightharpoonabovebar:\\\M53,241l0,40c398570,0,399437,0,399437,0\\\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\\\},Afunction(){function e(e){this.childrenvoid 0,this.classesvoid 0,this.heightvoid 0,this.depthvoid 0,this.maxFontSizevoid 0,this.stylevoid 0,this.childrene,this.classes,this.height0,this.depth0,this.maxFontSize0,this.style{}}var te.prototype;return t.hasClassfunction(e){return l.contains(this.classes,e)},t.toNodefunction(){for(var edocument.createDocumentFragment(),t0;t\u003Cthis.children.length;t++)e.appendChild(this.childrent.toNode());return e},t.toMarkupfunction(){for(var e\\\\\\,t0;t\u003Cthis.children.length;t++)e+this.childrent.toMarkup();return e},t.toTextfunction(){var efunction(e){return e.toText()};return this.children.map(e).join(\\\\\\)},e}(),T{\\\AMS-Regular\\\:{32:0,0,0,0,.25,65:0,.68889,0,0,.72222,66:0,.68889,0,0,.66667,67:0,.68889,0,0,.72222,68:0,.68889,0,0,.72222,69:0,.68889,0,0,.66667,70:0,.68889,0,0,.61111,71:0,.68889,0,0,.77778,72:0,.68889,0,0,.77778,73:0,.68889,0,0,.38889,74:.16667,.68889,0,0,.5,75:0,.68889,0,0,.77778,76:0,.68889,0,0,.66667,77:0,.68889,0,0,.94445,78:0,.68889,0,0,.72222,79:.16667,.68889,0,0,.77778,80:0,.68889,0,0,.61111,81:.16667,.68889,0,0,.77778,82:0,.68889,0,0,.72222,83:0,.68889,0,0,.55556,84:0,.68889,0,0,.66667,85:0,.68889,0,0,.72222,86:0,.68889,0,0,.72222,87:0,.68889,0,0,1,88:0,.68889,0,0,.72222,89:0,.68889,0,0,.72222,90:0,.68889,0,0,.66667,107:0,.68889,0,0,.55556,160:0,0,0,0,.25,165:0,.675,.025,0,.75,174:.15559,.69224,0,0,.94666,240:0,.68889,0,0,.55556,295:0,.68889,0,0,.54028,710:0,.825,0,0,2.33334,732:0,.9,0,0,2.33334,770:0,.825,0,0,2.33334,771:0,.9,0,0,2.33334,989:.08167,.58167,0,0,.77778,1008:0,.43056,.04028,0,.66667,8245:0,.54986,0,0,.275,8463:0,.68889,0,0,.54028,8487:0,.68889,0,0,.72222,8498:0,.68889,0,0,.55556,8502:0,.68889,0,0,.66667,8503:0,.68889,0,0,.44445,8504:0,.68889,0,0,.66667,8513:0,.68889,0,0,.63889,8592:-.03598,.46402,0,0,.5,8594:-.03598,.46402,0,0,.5,8602:-.13313,.36687,0,0,1,8603:-.13313,.36687,0,0,1,8606:.01354,.52239,0,0,1,8608:.01354,.52239,0,0,1,8610:.01354,.52239,0,0,1.11111,8611:.01354,.52239,0,0,1.11111,8619:0,.54986,0,0,1,8620:0,.54986,0,0,1,8621:-.13313,.37788,0,0,1.38889,8622:-.13313,.36687,0,0,1,8624:0,.69224,0,0,.5,8625:0,.69224,0,0,.5,8630:0,.43056,0,0,1,8631:0,.43056,0,0,1,8634:.08198,.58198,0,0,.77778,8635:.08198,.58198,0,0,.77778,8638:.19444,.69224,0,0,.41667,8639:.19444,.69224,0,0,.41667,8642:.19444,.69224,0,0,.41667,8643:.19444,.69224,0,0,.41667,8644:.1808,.675,0,0,1,8646:.1808,.675,0,0,1,8647:.1808,.675,0,0,1,8648:.19444,.69224,0,0,.83334,8649:.1808,.675,0,0,1,8650:.19444,.69224,0,0,.83334,8651:.01354,.52239,0,0,1,8652:.01354,.52239,0,0,1,8653:-.13313,.36687,0,0,1,8654:-.13313,.36687,0,0,1,8655:-.13313,.36687,0,0,1,8666:.13667,.63667,0,0,1,8667:.13667,.63667,0,0,1,8669:-.13313,.37788,0,0,1,8672:-.064,.437,0,0,1.334,8674:-.064,.437,0,0,1.334,8705:0,.825,0,0,.5,8708:0,.68889,0,0,.55556,8709:.08167,.58167,0,0,.77778,8717:0,.43056,0,0,.42917,8722:-.03598,.46402,0,0,.5,8724:.08198,.69224,0,0,.77778,8726:.08167,.58167,0,0,.77778,8733:0,.69224,0,0,.77778,8736:0,.69224,0,0,.72222,8737:0,.69224,0,0,.72222,8738:.03517,.52239,0,0,.72222,8739:.08167,.58167,0,0,.22222,8740:.25142,.74111,0,0,.27778,8741:.08167,.58167,0,0,.38889,8742:.25142,.74111,0,0,.5,8756:0,.69224,0,0,.66667,8757:0,.69224,0,0,.66667,8764:-.13313,.36687,0,0,.77778,8765:-.13313,.37788,0,0,.77778,8769:-.13313,.36687,0,0,.77778,8770:-.03625,.46375,0,0,.77778,8774:.30274,.79383,0,0,.77778,8776:-.01688,.48312,0,0,.77778,8778:.08167,.58167,0,0,.77778,8782:.06062,.54986,0,0,.77778,8783:.06062,.54986,0,0,.77778,8785:.08198,.58198,0,0,.77778,8786:.08198,.58198,0,0,.77778,8787:.08198,.58198,0,0,.77778,8790:0,.69224,0,0,.77778,8791:.22958,.72958,0,0,.77778,8796:.08198,.91667,0,0,.77778,8806:.25583,.75583,0,0,.77778,8807:.25583,.75583,0,0,.77778,8808:.25142,.75726,0,0,.77778,8809:.25142,.75726,0,0,.77778,8812:.25583,.75583,0,0,.5,8814:.20576,.70576,0,0,.77778,8815:.20576,.70576,0,0,.77778,8816:.30274,.79383,0,0,.77778,8817:.30274,.79383,0,0,.77778,8818:.22958,.72958,0,0,.77778,8819:.22958,.72958,0,0,.77778,8822:.1808,.675,0,0,.77778,8823:.1808,.675,0,0,.77778,8828:.13667,.63667,0,0,.77778,8829:.13667,.63667,0,0,.77778,8830:.22958,.72958,0,0,.77778,8831:.22958,.72958,0,0,.77778,8832:.20576,.70576,0,0,.77778,8833:.20576,.70576,0,0,.77778,8840:.30274,.79383,0,0,.77778,8841:.30274,.79383,0,0,.77778,8842:.13597,.63597,0,0,.77778,8843:.13597,.63597,0,0,.77778,8847:.03517,.54986,0,0,.77778,8848:.03517,.54986,0,0,.77778,8858:.08198,.58198,0,0,.77778,8859:.08198,.58198,0,0,.77778,8861:.08198,.58198,0,0,.77778,8862:0,.675,0,0,.77778,8863:0,.675,0,0,.77778,8864:0,.675,0,0,.77778,8865:0,.675,0,0,.77778,8872:0,.69224,0,0,.61111,8873:0,.69224,0,0,.72222,8874:0,.69224,0,0,.88889,8876:0,.68889,0,0,.61111,8877:0,.68889,0,0,.61111,8878:0,.68889,0,0,.72222,8879:0,.68889,0,0,.72222,8882:.03517,.54986,0,0,.77778,8883:.03517,.54986,0,0,.77778,8884:.13667,.63667,0,0,.77778,8885:.13667,.63667,0,0,.77778,8888:0,.54986,0,0,1.11111,8890:.19444,.43056,0,0,.55556,8891:.19444,.69224,0,0,.61111,8892:.19444,.69224,0,0,.61111,8901:0,.54986,0,0,.27778,8903:.08167,.58167,0,0,.77778,8905:.08167,.58167,0,0,.77778,8906:.08167,.58167,0,0,.77778,8907:0,.69224,0,0,.77778,8908:0,.69224,0,0,.77778,8909:-.03598,.46402,0,0,.77778,8910:0,.54986,0,0,.76042,8911:0,.54986,0,0,.76042,8912:.03517,.54986,0,0,.77778,8913:.03517,.54986,0,0,.77778,8914:0,.54986,0,0,.66667,8915:0,.54986,0,0,.66667,8916:0,.69224,0,0,.66667,8918:.0391,.5391,0,0,.77778,8919:.0391,.5391,0,0,.77778,8920:.03517,.54986,0,0,1.33334,8921:.03517,.54986,0,0,1.33334,8922:.38569,.88569,0,0,.77778,8923:.38569,.88569,0,0,.77778,8926:.13667,.63667,0,0,.77778,8927:.13667,.63667,0,0,.77778,8928:.30274,.79383,0,0,.77778,8929:.30274,.79383,0,0,.77778,8934:.23222,.74111,0,0,.77778,8935:.23222,.74111,0,0,.77778,8936:.23222,.74111,0,0,.77778,8937:.23222,.74111,0,0,.77778,8938:.20576,.70576,0,0,.77778,8939:.20576,.70576,0,0,.77778,8940:.30274,.79383,0,0,.77778,8941:.30274,.79383,0,0,.77778,8994:.19444,.69224,0,0,.77778,8995:.19444,.69224,0,0,.77778,9416:.15559,.69224,0,0,.90222,9484:0,.69224,0,0,.5,9488:0,.69224,0,0,.5,9492:0,.37788,0,0,.5,9496:0,.37788,0,0,.5,9585:.19444,.68889,0,0,.88889,9586:.19444,.74111,0,0,.88889,9632:0,.675,0,0,.77778,9633:0,.675,0,0,.77778,9650:0,.54986,0,0,.72222,9651:0,.54986,0,0,.72222,9654:.03517,.54986,0,0,.77778,9660:0,.54986,0,0,.72222,9661:0,.54986,0,0,.72222,9664:.03517,.54986,0,0,.77778,9674:.11111,.69224,0,0,.66667,9733:.19444,.69224,0,0,.94445,10003:0,.69224,0,0,.83334,10016:0,.69224,0,0,.83334,10731:.11111,.69224,0,0,.66667,10846:.19444,.75583,0,0,.61111,10877:.13667,.63667,0,0,.77778,10878:.13667,.63667,0,0,.77778,10885:.25583,.75583,0,0,.77778,10886:.25583,.75583,0,0,.77778,10887:.13597,.63597,0,0,.77778,10888:.13597,.63597,0,0,.77778,10889:.26167,.75726,0,0,.77778,10890:.26167,.75726,0,0,.77778,10891:.48256,.98256,0,0,.77778,10892:.48256,.98256,0,0,.77778,10901:.13667,.63667,0,0,.77778,10902:.13667,.63667,0,0,.77778,10933:.25142,.75726,0,0,.77778,10934:.25142,.75726,0,0,.77778,10935:.26167,.75726,0,0,.77778,10936:.26167,.75726,0,0,.77778,10937:.26167,.75726,0,0,.77778,10938:.26167,.75726,0,0,.77778,10949:.25583,.75583,0,0,.77778,10950:.25583,.75583,0,0,.77778,10955:.28481,.79383,0,0,.77778,10956:.28481,.79383,0,0,.77778,57350:.08167,.58167,0,0,.22222,57351:.08167,.58167,0,0,.38889,57352:.08167,.58167,0,0,.77778,57353:0,.43056,.04028,0,.66667,57356:.25142,.75726,0,0,.77778,57357:.25142,.75726,0,0,.77778,57358:.41951,.91951,0,0,.77778,57359:.30274,.79383,0,0,.77778,57360:.30274,.79383,0,0,.77778,57361:.41951,.91951,0,0,.77778,57366:.25142,.75726,0,0,.77778,57367:.25142,.75726,0,0,.77778,57368:.25142,.75726,0,0,.77778,57369:.25142,.75726,0,0,.77778,57370:.13597,.63597,0,0,.77778,57371:.13597,.63597,0,0,.77778},\\\Caligraphic-Regular\\\:{32:0,0,0,0,.25,65:0,.68333,0,.19445,.79847,66:0,.68333,.03041,.13889,.65681,67:0,.68333,.05834,.13889,.52653,68:0,.68333,.02778,.08334,.77139,69:0,.68333,.08944,.11111,.52778,70:0,.68333,.09931,.11111,.71875,71:.09722,.68333,.0593,.11111,.59487,72:0,.68333,.00965,.11111,.84452,73:0,.68333,.07382,0,.54452,74:.09722,.68333,.18472,.16667,.67778,75:0,.68333,.01445,.05556,.76195,76:0,.68333,0,.13889,.68972,77:0,.68333,0,.13889,1.2009,78:0,.68333,.14736,.08334,.82049,79:0,.68333,.02778,.11111,.79611,80:0,.68333,.08222,.08334,.69556,81:.09722,.68333,0,.11111,.81667,82:0,.68333,0,.08334,.8475,83:0,.68333,.075,.13889,.60556,84:0,.68333,.25417,0,.54464,85:0,.68333,.09931,.08334,.62583,86:0,.68333,.08222,0,.61278,87:0,.68333,.08222,.08334,.98778,88:0,.68333,.14643,.13889,.7133,89:.09722,.68333,.08222,.08334,.66834,90:0,.68333,.07944,.13889,.72473,160:0,0,0,0,.25},\\\Fraktur-Regular\\\:{32:0,0,0,0,.25,33:0,.69141,0,0,.29574,34:0,.69141,0,0,.21471,38:0,.69141,0,0,.73786,39:0,.69141,0,0,.21201,40:.24982,.74947,0,0,.38865,41:.24982,.74947,0,0,.38865,42:0,.62119,0,0,.27764,43:.08319,.58283,0,0,.75623,44:0,.10803,0,0,.27764,45:.08319,.58283,0,0,.75623,46:0,.10803,0,0,.27764,47:.24982,.74947,0,0,.50181,48:0,.47534,0,0,.50181,49:0,.47534,0,0,.50181,50:0,.47534,0,0,.50181,51:.18906,.47534,0,0,.50181,52:.18906,.47534,0,0,.50181,53:.18906,.47534,0,0,.50181,54:0,.69141,0,0,.50181,55:.18906,.47534,0,0,.50181,56:0,.69141,0,0,.50181,57:.18906,.47534,0,0,.50181,58:0,.47534,0,0,.21606,59:.12604,.47534,0,0,.21606,61:-.13099,.36866,0,0,.75623,63:0,.69141,0,0,.36245,65:0,.69141,0,0,.7176,66:0,.69141,0,0,.88397,67:0,.69141,0,0,.61254,68:0,.69141,0,0,.83158,69:0,.69141,0,0,.66278,70:.12604,.69141,0,0,.61119,71:0,.69141,0,0,.78539,72:.06302,.69141,0,0,.7203,73:0,.69141,0,0,.55448,74:.12604,.69141,0,0,.55231,75:0,.69141,0,0,.66845,76:0,.69141,0,0,.66602,77:0,.69141,0,0,1.04953,78:0,.69141,0,0,.83212,79:0,.69141,0,0,.82699,80:.18906,.69141,0,0,.82753,81:.03781,.69141,0,0,.82699,82:0,.69141,0,0,.82807,83:0,.69141,0,0,.82861,84:0,.69141,0,0,.66899,85:0,.69141,0,0,.64576,86:0,.69141,0,0,.83131,87:0,.69141,0,0,1.04602,88:0,.69141,0,0,.71922,89:.18906,.69141,0,0,.83293,90:.12604,.69141,0,0,.60201,91:.24982,.74947,0,0,.27764,93:.24982,.74947,0,0,.27764,94:0,.69141,0,0,.49965,97:0,.47534,0,0,.50046,98:0,.69141,0,0,.51315,99:0,.47534,0,0,.38946,100:0,.62119,0,0,.49857,101:0,.47534,0,0,.40053,102:.18906,.69141,0,0,.32626,103:.18906,.47534,0,0,.5037,104:.18906,.69141,0,0,.52126,105:0,.69141,0,0,.27899,106:0,.69141,0,0,.28088,107:0,.69141,0,0,.38946,108:0,.69141,0,0,.27953,109:0,.47534,0,0,.76676,110:0,.47534,0,0,.52666,111:0,.47534,0,0,.48885,112:.18906,.52396,0,0,.50046,113:.18906,.47534,0,0,.48912,114:0,.47534,0,0,.38919,115:0,.47534,0,0,.44266,116:0,.62119,0,0,.33301,117:0,.47534,0,0,.5172,118:0,.52396,0,0,.5118,119:0,.52396,0,0,.77351,120:.18906,.47534,0,0,.38865,121:.18906,.47534,0,0,.49884,122:.18906,.47534,0,0,.39054,160:0,0,0,0,.25,8216:0,.69141,0,0,.21471,8217:0,.69141,0,0,.21471,58112:0,.62119,0,0,.49749,58113:0,.62119,0,0,.4983,58114:.18906,.69141,0,0,.33328,58115:.18906,.69141,0,0,.32923,58116:.18906,.47534,0,0,.50343,58117:0,.69141,0,0,.33301,58118:0,.62119,0,0,.33409,58119:0,.47534,0,0,.50073},\\\Main-Bold\\\:{32:0,0,0,0,.25,33:0,.69444,0,0,.35,34:0,.69444,0,0,.60278,35:.19444,.69444,0,0,.95833,36:.05556,.75,0,0,.575,37:.05556,.75,0,0,.95833,38:0,.69444,0,0,.89444,39:0,.69444,0,0,.31944,40:.25,.75,0,0,.44722,41:.25,.75,0,0,.44722,42:0,.75,0,0,.575,43:.13333,.63333,0,0,.89444,44:.19444,.15556,0,0,.31944,45:0,.44444,0,0,.38333,46:0,.15556,0,0,.31944,47:.25,.75,0,0,.575,48:0,.64444,0,0,.575,49:0,.64444,0,0,.575,50:0,.64444,0,0,.575,51:0,.64444,0,0,.575,52:0,.64444,0,0,.575,53:0,.64444,0,0,.575,54:0,.64444,0,0,.575,55:0,.64444,0,0,.575,56:0,.64444,0,0,.575,57:0,.64444,0,0,.575,58:0,.44444,0,0,.31944,59:.19444,.44444,0,0,.31944,60:.08556,.58556,0,0,.89444,61:-.10889,.39111,0,0,.89444,62:.08556,.58556,0,0,.89444,63:0,.69444,0,0,.54305,64:0,.69444,0,0,.89444,65:0,.68611,0,0,.86944,66:0,.68611,0,0,.81805,67:0,.68611,0,0,.83055,68:0,.68611,0,0,.88194,69:0,.68611,0,0,.75555,70:0,.68611,0,0,.72361,71:0,.68611,0,0,.90416,72:0,.68611,0,0,.9,73:0,.68611,0,0,.43611,74:0,.68611,0,0,.59444,75:0,.68611,0,0,.90138,76:0,.68611,0,0,.69166,77:0,.68611,0,0,1.09166,78:0,.68611,0,0,.9,79:0,.68611,0,0,.86388,80:0,.68611,0,0,.78611,81:.19444,.68611,0,0,.86388,82:0,.68611,0,0,.8625,83:0,.68611,0,0,.63889,84:0,.68611,0,0,.8,85:0,.68611,0,0,.88472,86:0,.68611,.01597,0,.86944,87:0,.68611,.01597,0,1.18888,88:0,.68611,0,0,.86944,89:0,.68611,.02875,0,.86944,90:0,.68611,0,0,.70277,91:.25,.75,0,0,.31944,92:.25,.75,0,0,.575,93:.25,.75,0,0,.31944,94:0,.69444,0,0,.575,95:.31,.13444,.03194,0,.575,97:0,.44444,0,0,.55902,98:0,.69444,0,0,.63889,99:0,.44444,0,0,.51111,100:0,.69444,0,0,.63889,101:0,.44444,0,0,.52708,102:0,.69444,.10903,0,.35139,103:.19444,.44444,.01597,0,.575,104:0,.69444,0,0,.63889,105:0,.69444,0,0,.31944,106:.19444,.69444,0,0,.35139,107:0,.69444,0,0,.60694,108:0,.69444,0,0,.31944,109:0,.44444,0,0,.95833,110:0,.44444,0,0,.63889,111:0,.44444,0,0,.575,112:.19444,.44444,0,0,.63889,113:.19444,.44444,0,0,.60694,114:0,.44444,0,0,.47361,115:0,.44444,0,0,.45361,116:0,.63492,0,0,.44722,117:0,.44444,0,0,.63889,118:0,.44444,.01597,0,.60694,119:0,.44444,.01597,0,.83055,120:0,.44444,0,0,.60694,121:.19444,.44444,.01597,0,.60694,122:0,.44444,0,0,.51111,123:.25,.75,0,0,.575,124:.25,.75,0,0,.31944,125:.25,.75,0,0,.575,126:.35,.34444,0,0,.575,160:0,0,0,0,.25,163:0,.69444,0,0,.86853,168:0,.69444,0,0,.575,172:0,.44444,0,0,.76666,176:0,.69444,0,0,.86944,177:.13333,.63333,0,0,.89444,184:.17014,0,0,0,.51111,198:0,.68611,0,0,1.04166,215:.13333,.63333,0,0,.89444,216:.04861,.73472,0,0,.89444,223:0,.69444,0,0,.59722,230:0,.44444,0,0,.83055,247:.13333,.63333,0,0,.89444,248:.09722,.54167,0,0,.575,305:0,.44444,0,0,.31944,338:0,.68611,0,0,1.16944,339:0,.44444,0,0,.89444,567:.19444,.44444,0,0,.35139,710:0,.69444,0,0,.575,711:0,.63194,0,0,.575,713:0,.59611,0,0,.575,714:0,.69444,0,0,.575,715:0,.69444,0,0,.575,728:0,.69444,0,0,.575,729:0,.69444,0,0,.31944,730:0,.69444,0,0,.86944,732:0,.69444,0,0,.575,733:0,.69444,0,0,.575,915:0,.68611,0,0,.69166,916:0,.68611,0,0,.95833,920:0,.68611,0,0,.89444,923:0,.68611,0,0,.80555,926:0,.68611,0,0,.76666,928:0,.68611,0,0,.9,931:0,.68611,0,0,.83055,933:0,.68611,0,0,.89444,934:0,.68611,0,0,.83055,936:0,.68611,0,0,.89444,937:0,.68611,0,0,.83055,8211:0,.44444,.03194,0,.575,8212:0,.44444,.03194,0,1.14999,8216:0,.69444,0,0,.31944,8217:0,.69444,0,0,.31944,8220:0,.69444,0,0,.60278,8221:0,.69444,0,0,.60278,8224:.19444,.69444,0,0,.51111,8225:.19444,.69444,0,0,.51111,8242:0,.55556,0,0,.34444,8407:0,.72444,.15486,0,.575,8463:0,.69444,0,0,.66759,8465:0,.69444,0,0,.83055,8467:0,.69444,0,0,.47361,8472:.19444,.44444,0,0,.74027,8476:0,.69444,0,0,.83055,8501:0,.69444,0,0,.70277,8592:-.10889,.39111,0,0,1.14999,8593:.19444,.69444,0,0,.575,8594:-.10889,.39111,0,0,1.14999,8595:.19444,.69444,0,0,.575,8596:-.10889,.39111,0,0,1.14999,8597:.25,.75,0,0,.575,8598:.19444,.69444,0,0,1.14999,8599:.19444,.69444,0,0,1.14999,8600:.19444,.69444,0,0,1.14999,8601:.19444,.69444,0,0,1.14999,8636:-.10889,.39111,0,0,1.14999,8637:-.10889,.39111,0,0,1.14999,8640:-.10889,.39111,0,0,1.14999,8641:-.10889,.39111,0,0,1.14999,8656:-.10889,.39111,0,0,1.14999,8657:.19444,.69444,0,0,.70277,8658:-.10889,.39111,0,0,1.14999,8659:.19444,.69444,0,0,.70277,8660:-.10889,.39111,0,0,1.14999,8661:.25,.75,0,0,.70277,8704:0,.69444,0,0,.63889,8706:0,.69444,.06389,0,.62847,8707:0,.69444,0,0,.63889,8709:.05556,.75,0,0,.575,8711:0,.68611,0,0,.95833,8712:.08556,.58556,0,0,.76666,8715:.08556,.58556,0,0,.76666,8722:.13333,.63333,0,0,.89444,8723:.13333,.63333,0,0,.89444,8725:.25,.75,0,0,.575,8726:.25,.75,0,0,.575,8727:-.02778,.47222,0,0,.575,8728:-.02639,.47361,0,0,.575,8729:-.02639,.47361,0,0,.575,8730:.18,.82,0,0,.95833,8733:0,.44444,0,0,.89444,8734:0,.44444,0,0,1.14999,8736:0,.69224,0,0,.72222,8739:.25,.75,0,0,.31944,8741:.25,.75,0,0,.575,8743:0,.55556,0,0,.76666,8744:0,.55556,0,0,.76666,8745:0,.55556,0,0,.76666,8746:0,.55556,0,0,.76666,8747:.19444,.69444,.12778,0,.56875,8764:-.10889,.39111,0,0,.89444,8768:.19444,.69444,0,0,.31944,8771:.00222,.50222,0,0,.89444,8773:.027,.638,0,0,.894,8776:.02444,.52444,0,0,.89444,8781:.00222,.50222,0,0,.89444,8801:.00222,.50222,0,0,.89444,8804:.19667,.69667,0,0,.89444,8805:.19667,.69667,0,0,.89444,8810:.08556,.58556,0,0,1.14999,8811:.08556,.58556,0,0,1.14999,8826:.08556,.58556,0,0,.89444,8827:.08556,.58556,0,0,.89444,8834:.08556,.58556,0,0,.89444,8835:.08556,.58556,0,0,.89444,8838:.19667,.69667,0,0,.89444,8839:.19667,.69667,0,0,.89444,8846:0,.55556,0,0,.76666,8849:.19667,.69667,0,0,.89444,8850:.19667,.69667,0,0,.89444,8851:0,.55556,0,0,.76666,8852:0,.55556,0,0,.76666,8853:.13333,.63333,0,0,.89444,8854:.13333,.63333,0,0,.89444,8855:.13333,.63333,0,0,.89444,8856:.13333,.63333,0,0,.89444,8857:.13333,.63333,0,0,.89444,8866:0,.69444,0,0,.70277,8867:0,.69444,0,0,.70277,8868:0,.69444,0,0,.89444,8869:0,.69444,0,0,.89444,8900:-.02639,.47361,0,0,.575,8901:-.02639,.47361,0,0,.31944,8902:-.02778,.47222,0,0,.575,8968:.25,.75,0,0,.51111,8969:.25,.75,0,0,.51111,8970:.25,.75,0,0,.51111,8971:.25,.75,0,0,.51111,8994:-.13889,.36111,0,0,1.14999,8995:-.13889,.36111,0,0,1.14999,9651:.19444,.69444,0,0,1.02222,9657:-.02778,.47222,0,0,.575,9661:.19444,.69444,0,0,1.02222,9667:-.02778,.47222,0,0,.575,9711:.19444,.69444,0,0,1.14999,9824:.12963,.69444,0,0,.89444,9825:.12963,.69444,0,0,.89444,9826:.12963,.69444,0,0,.89444,9827:.12963,.69444,0,0,.89444,9837:0,.75,0,0,.44722,9838:.19444,.69444,0,0,.44722,9839:.19444,.69444,0,0,.44722,10216:.25,.75,0,0,.44722,10217:.25,.75,0,0,.44722,10815:0,.68611,0,0,.9,10927:.19667,.69667,0,0,.89444,10928:.19667,.69667,0,0,.89444,57376:.19444,.69444,0,0,0},\\\Main-BoldItalic\\\:{32:0,0,0,0,.25,33:0,.69444,.11417,0,.38611,34:0,.69444,.07939,0,.62055,35:.19444,.69444,.06833,0,.94444,37:.05556,.75,.12861,0,.94444,38:0,.69444,.08528,0,.88555,39:0,.69444,.12945,0,.35555,40:.25,.75,.15806,0,.47333,41:.25,.75,.03306,0,.47333,42:0,.75,.14333,0,.59111,43:.10333,.60333,.03306,0,.88555,44:.19444,.14722,0,0,.35555,45:0,.44444,.02611,0,.41444,46:0,.14722,0,0,.35555,47:.25,.75,.15806,0,.59111,48:0,.64444,.13167,0,.59111,49:0,.64444,.13167,0,.59111,50:0,.64444,.13167,0,.59111,51:0,.64444,.13167,0,.59111,52:.19444,.64444,.13167,0,.59111,53:0,.64444,.13167,0,.59111,54:0,.64444,.13167,0,.59111,55:.19444,.64444,.13167,0,.59111,56:0,.64444,.13167,0,.59111,57:0,.64444,.13167,0,.59111,58:0,.44444,.06695,0,.35555,59:.19444,.44444,.06695,0,.35555,61:-.10889,.39111,.06833,0,.88555,63:0,.69444,.11472,0,.59111,64:0,.69444,.09208,0,.88555,65:0,.68611,0,0,.86555,66:0,.68611,.0992,0,.81666,67:0,.68611,.14208,0,.82666,68:0,.68611,.09062,0,.87555,69:0,.68611,.11431,0,.75666,70:0,.68611,.12903,0,.72722,71:0,.68611,.07347,0,.89527,72:0,.68611,.17208,0,.8961,73:0,.68611,.15681,0,.47166,74:0,.68611,.145,0,.61055,75:0,.68611,.14208,0,.89499,76:0,.68611,0,0,.69777,77:0,.68611,.17208,0,1.07277,78:0,.68611,.17208,0,.8961,79:0,.68611,.09062,0,.85499,80:0,.68611,.0992,0,.78721,81:.19444,.68611,.09062,0,.85499,82:0,.68611,.02559,0,.85944,83:0,.68611,.11264,0,.64999,84:0,.68611,.12903,0,.7961,85:0,.68611,.17208,0,.88083,86:0,.68611,.18625,0,.86555,87:0,.68611,.18625,0,1.15999,88:0,.68611,.15681,0,.86555,89:0,.68611,.19803,0,.86555,90:0,.68611,.14208,0,.70888,91:.25,.75,.1875,0,.35611,93:.25,.75,.09972,0,.35611,94:0,.69444,.06709,0,.59111,95:.31,.13444,.09811,0,.59111,97:0,.44444,.09426,0,.59111,98:0,.69444,.07861,0,.53222,99:0,.44444,.05222,0,.53222,100:0,.69444,.10861,0,.59111,101:0,.44444,.085,0,.53222,102:.19444,.69444,.21778,0,.4,103:.19444,.44444,.105,0,.53222,104:0,.69444,.09426,0,.59111,105:0,.69326,.11387,0,.35555,106:.19444,.69326,.1672,0,.35555,107:0,.69444,.11111,0,.53222,108:0,.69444,.10861,0,.29666,109:0,.44444,.09426,0,.94444,110:0,.44444,.09426,0,.64999,111:0,.44444,.07861,0,.59111,112:.19444,.44444,.07861,0,.59111,113:.19444,.44444,.105,0,.53222,114:0,.44444,.11111,0,.50167,115:0,.44444,.08167,0,.48694,116:0,.63492,.09639,0,.385,117:0,.44444,.09426,0,.62055,118:0,.44444,.11111,0,.53222,119:0,.44444,.11111,0,.76777,120:0,.44444,.12583,0,.56055,121:.19444,.44444,.105,0,.56166,122:0,.44444,.13889,0,.49055,126:.35,.34444,.11472,0,.59111,160:0,0,0,0,.25,168:0,.69444,.11473,0,.59111,176:0,.69444,0,0,.94888,184:.17014,0,0,0,.53222,198:0,.68611,.11431,0,1.02277,216:.04861,.73472,.09062,0,.88555,223:.19444,.69444,.09736,0,.665,230:0,.44444,.085,0,.82666,248:.09722,.54167,.09458,0,.59111,305:0,.44444,.09426,0,.35555,338:0,.68611,.11431,0,1.14054,339:0,.44444,.085,0,.82666,567:.19444,.44444,.04611,0,.385,710:0,.69444,.06709,0,.59111,711:0,.63194,.08271,0,.59111,713:0,.59444,.10444,0,.59111,714:0,.69444,.08528,0,.59111,715:0,.69444,0,0,.59111,728:0,.69444,.10333,0,.59111,729:0,.69444,.12945,0,.35555,730:0,.69444,0,0,.94888,732:0,.69444,.11472,0,.59111,733:0,.69444,.11472,0,.59111,915:0,.68611,.12903,0,.69777,916:0,.68611,0,0,.94444,920:0,.68611,.09062,0,.88555,923:0,.68611,0,0,.80666,926:0,.68611,.15092,0,.76777,928:0,.68611,.17208,0,.8961,931:0,.68611,.11431,0,.82666,933:0,.68611,.10778,0,.88555,934:0,.68611,.05632,0,.82666,936:0,.68611,.10778,0,.88555,937:0,.68611,.0992,0,.82666,8211:0,.44444,.09811,0,.59111,8212:0,.44444,.09811,0,1.18221,8216:0,.69444,.12945,0,.35555,8217:0,.69444,.12945,0,.35555,8220:0,.69444,.16772,0,.62055,8221:0,.69444,.07939,0,.62055},\\\Main-Italic\\\:{32:0,0,0,0,.25,33:0,.69444,.12417,0,.30667,34:0,.69444,.06961,0,.51444,35:.19444,.69444,.06616,0,.81777,37:.05556,.75,.13639,0,.81777,38:0,.69444,.09694,0,.76666,39:0,.69444,.12417,0,.30667,40:.25,.75,.16194,0,.40889,41:.25,.75,.03694,0,.40889,42:0,.75,.14917,0,.51111,43:.05667,.56167,.03694,0,.76666,44:.19444,.10556,0,0,.30667,45:0,.43056,.02826,0,.35778,46:0,.10556,0,0,.30667,47:.25,.75,.16194,0,.51111,48:0,.64444,.13556,0,.51111,49:0,.64444,.13556,0,.51111,50:0,.64444,.13556,0,.51111,51:0,.64444,.13556,0,.51111,52:.19444,.64444,.13556,0,.51111,53:0,.64444,.13556,0,.51111,54:0,.64444,.13556,0,.51111,55:.19444,.64444,.13556,0,.51111,56:0,.64444,.13556,0,.51111,57:0,.64444,.13556,0,.51111,58:0,.43056,.0582,0,.30667,59:.19444,.43056,.0582,0,.30667,61:-.13313,.36687,.06616,0,.76666,63:0,.69444,.1225,0,.51111,64:0,.69444,.09597,0,.76666,65:0,.68333,0,0,.74333,66:0,.68333,.10257,0,.70389,67:0,.68333,.14528,0,.71555,68:0,.68333,.09403,0,.755,69:0,.68333,.12028,0,.67833,70:0,.68333,.13305,0,.65277,71:0,.68333,.08722,0,.77361,72:0,.68333,.16389,0,.74333,73:0,.68333,.15806,0,.38555,74:0,.68333,.14028,0,.525,75:0,.68333,.14528,0,.76888,76:0,.68333,0,0,.62722,77:0,.68333,.16389,0,.89666,78:0,.68333,.16389,0,.74333,79:0,.68333,.09403,0,.76666,80:0,.68333,.10257,0,.67833,81:.19444,.68333,.09403,0,.76666,82:0,.68333,.03868,0,.72944,83:0,.68333,.11972,0,.56222,84:0,.68333,.13305,0,.71555,85:0,.68333,.16389,0,.74333,86:0,.68333,.18361,0,.74333,87:0,.68333,.18361,0,.99888,88:0,.68333,.15806,0,.74333,89:0,.68333,.19383,0,.74333,90:0,.68333,.14528,0,.61333,91:.25,.75,.1875,0,.30667,93:.25,.75,.10528,0,.30667,94:0,.69444,.06646,0,.51111,95:.31,.12056,.09208,0,.51111,97:0,.43056,.07671,0,.51111,98:0,.69444,.06312,0,.46,99:0,.43056,.05653,0,.46,100:0,.69444,.10333,0,.51111,101:0,.43056,.07514,0,.46,102:.19444,.69444,.21194,0,.30667,103:.19444,.43056,.08847,0,.46,104:0,.69444,.07671,0,.51111,105:0,.65536,.1019,0,.30667,106:.19444,.65536,.14467,0,.30667,107:0,.69444,.10764,0,.46,108:0,.69444,.10333,0,.25555,109:0,.43056,.07671,0,.81777,110:0,.43056,.07671,0,.56222,111:0,.43056,.06312,0,.51111,112:.19444,.43056,.06312,0,.51111,113:.19444,.43056,.08847,0,.46,114:0,.43056,.10764,0,.42166,115:0,.43056,.08208,0,.40889,116:0,.61508,.09486,0,.33222,117:0,.43056,.07671,0,.53666,118:0,.43056,.10764,0,.46,119:0,.43056,.10764,0,.66444,120:0,.43056,.12042,0,.46389,121:.19444,.43056,.08847,0,.48555,122:0,.43056,.12292,0,.40889,126:.35,.31786,.11585,0,.51111,160:0,0,0,0,.25,168:0,.66786,.10474,0,.51111,176:0,.69444,0,0,.83129,184:.17014,0,0,0,.46,198:0,.68333,.12028,0,.88277,216:.04861,.73194,.09403,0,.76666,223:.19444,.69444,.10514,0,.53666,230:0,.43056,.07514,0,.71555,248:.09722,.52778,.09194,0,.51111,338:0,.68333,.12028,0,.98499,339:0,.43056,.07514,0,.71555,710:0,.69444,.06646,0,.51111,711:0,.62847,.08295,0,.51111,713:0,.56167,.10333,0,.51111,714:0,.69444,.09694,0,.51111,715:0,.69444,0,0,.51111,728:0,.69444,.10806,0,.51111,729:0,.66786,.11752,0,.30667,730:0,.69444,0,0,.83129,732:0,.66786,.11585,0,.51111,733:0,.69444,.1225,0,.51111,915:0,.68333,.13305,0,.62722,916:0,.68333,0,0,.81777,920:0,.68333,.09403,0,.76666,923:0,.68333,0,0,.69222,926:0,.68333,.15294,0,.66444,928:0,.68333,.16389,0,.74333,931:0,.68333,.12028,0,.71555,933:0,.68333,.11111,0,.76666,934:0,.68333,.05986,0,.71555,936:0,.68333,.11111,0,.76666,937:0,.68333,.10257,0,.71555,8211:0,.43056,.09208,0,.51111,8212:0,.43056,.09208,0,1.02222,8216:0,.69444,.12417,0,.30667,8217:0,.69444,.12417,0,.30667,8220:0,.69444,.1685,0,.51444,8221:0,.69444,.06961,0,.51444,8463:0,.68889,0,0,.54028},\\\Main-Regular\\\:{32:0,0,0,0,.25,33:0,.69444,0,0,.27778,34:0,.69444,0,0,.5,35:.19444,.69444,0,0,.83334,36:.05556,.75,0,0,.5,37:.05556,.75,0,0,.83334,38:0,.69444,0,0,.77778,39:0,.69444,0,0,.27778,40:.25,.75,0,0,.38889,41:.25,.75,0,0,.38889,42:0,.75,0,0,.5,43:.08333,.58333,0,0,.77778,44:.19444,.10556,0,0,.27778,45:0,.43056,0,0,.33333,46:0,.10556,0,0,.27778,47:.25,.75,0,0,.5,48:0,.64444,0,0,.5,49:0,.64444,0,0,.5,50:0,.64444,0,0,.5,51:0,.64444,0,0,.5,52:0,.64444,0,0,.5,53:0,.64444,0,0,.5,54:0,.64444,0,0,.5,55:0,.64444,0,0,.5,56:0,.64444,0,0,.5,57:0,.64444,0,0,.5,58:0,.43056,0,0,.27778,59:.19444,.43056,0,0,.27778,60:.0391,.5391,0,0,.77778,61:-.13313,.36687,0,0,.77778,62:.0391,.5391,0,0,.77778,63:0,.69444,0,0,.47222,64:0,.69444,0,0,.77778,65:0,.68333,0,0,.75,66:0,.68333,0,0,.70834,67:0,.68333,0,0,.72222,68:0,.68333,0,0,.76389,69:0,.68333,0,0,.68056,70:0,.68333,0,0,.65278,71:0,.68333,0,0,.78472,72:0,.68333,0,0,.75,73:0,.68333,0,0,.36111,74:0,.68333,0,0,.51389,75:0,.68333,0,0,.77778,76:0,.68333,0,0,.625,77:0,.68333,0,0,.91667,78:0,.68333,0,0,.75,79:0,.68333,0,0,.77778,80:0,.68333,0,0,.68056,81:.19444,.68333,0,0,.77778,82:0,.68333,0,0,.73611,83:0,.68333,0,0,.55556,84:0,.68333,0,0,.72222,85:0,.68333,0,0,.75,86:0,.68333,.01389,0,.75,87:0,.68333,.01389,0,1.02778,88:0,.68333,0,0,.75,89:0,.68333,.025,0,.75,90:0,.68333,0,0,.61111,91:.25,.75,0,0,.27778,92:.25,.75,0,0,.5,93:.25,.75,0,0,.27778,94:0,.69444,0,0,.5,95:.31,.12056,.02778,0,.5,97:0,.43056,0,0,.5,98:0,.69444,0,0,.55556,99:0,.43056,0,0,.44445,100:0,.69444,0,0,.55556,101:0,.43056,0,0,.44445,102:0,.69444,.07778,0,.30556,103:.19444,.43056,.01389,0,.5,104:0,.69444,0,0,.55556,105:0,.66786,0,0,.27778,106:.19444,.66786,0,0,.30556,107:0,.69444,0,0,.52778,108:0,.69444,0,0,.27778,109:0,.43056,0,0,.83334,110:0,.43056,0,0,.55556,111:0,.43056,0,0,.5,112:.19444,.43056,0,0,.55556,113:.19444,.43056,0,0,.52778,114:0,.43056,0,0,.39167,115:0,.43056,0,0,.39445,116:0,.61508,0,0,.38889,117:0,.43056,0,0,.55556,118:0,.43056,.01389,0,.52778,119:0,.43056,.01389,0,.72222,120:0,.43056,0,0,.52778,121:.19444,.43056,.01389,0,.52778,122:0,.43056,0,0,.44445,123:.25,.75,0,0,.5,124:.25,.75,0,0,.27778,125:.25,.75,0,0,.5,126:.35,.31786,0,0,.5,160:0,0,0,0,.25,163:0,.69444,0,0,.76909,167:.19444,.69444,0,0,.44445,168:0,.66786,0,0,.5,172:0,.43056,0,0,.66667,176:0,.69444,0,0,.75,177:.08333,.58333,0,0,.77778,182:.19444,.69444,0,0,.61111,184:.17014,0,0,0,.44445,198:0,.68333,0,0,.90278,215:.08333,.58333,0,0,.77778,216:.04861,.73194,0,0,.77778,223:0,.69444,0,0,.5,230:0,.43056,0,0,.72222,247:.08333,.58333,0,0,.77778,248:.09722,.52778,0,0,.5,305:0,.43056,0,0,.27778,338:0,.68333,0,0,1.01389,339:0,.43056,0,0,.77778,567:.19444,.43056,0,0,.30556,710:0,.69444,0,0,.5,711:0,.62847,0,0,.5,713:0,.56778,0,0,.5,714:0,.69444,0,0,.5,715:0,.69444,0,0,.5,728:0,.69444,0,0,.5,729:0,.66786,0,0,.27778,730:0,.69444,0,0,.75,732:0,.66786,0,0,.5,733:0,.69444,0,0,.5,915:0,.68333,0,0,.625,916:0,.68333,0,0,.83334,920:0,.68333,0,0,.77778,923:0,.68333,0,0,.69445,926:0,.68333,0,0,.66667,928:0,.68333,0,0,.75,931:0,.68333,0,0,.72222,933:0,.68333,0,0,.77778,934:0,.68333,0,0,.72222,936:0,.68333,0,0,.77778,937:0,.68333,0,0,.72222,8211:0,.43056,.02778,0,.5,8212:0,.43056,.02778,0,1,8216:0,.69444,0,0,.27778,8217:0,.69444,0,0,.27778,8220:0,.69444,0,0,.5,8221:0,.69444,0,0,.5,8224:.19444,.69444,0,0,.44445,8225:.19444,.69444,0,0,.44445,8230:0,.123,0,0,1.172,8242:0,.55556,0,0,.275,8407:0,.71444,.15382,0,.5,8463:0,.68889,0,0,.54028,8465:0,.69444,0,0,.72222,8467:0,.69444,0,.11111,.41667,8472:.19444,.43056,0,.11111,.63646,8476:0,.69444,0,0,.72222,8501:0,.69444,0,0,.61111,8592:-.13313,.36687,0,0,1,8593:.19444,.69444,0,0,.5,8594:-.13313,.36687,0,0,1,8595:.19444,.69444,0,0,.5,8596:-.13313,.36687,0,0,1,8597:.25,.75,0,0,.5,8598:.19444,.69444,0,0,1,8599:.19444,.69444,0,0,1,8600:.19444,.69444,0,0,1,8601:.19444,.69444,0,0,1,8614:.011,.511,0,0,1,8617:.011,.511,0,0,1.126,8618:.011,.511,0,0,1.126,8636:-.13313,.36687,0,0,1,8637:-.13313,.36687,0,0,1,8640:-.13313,.36687,0,0,1,8641:-.13313,.36687,0,0,1,8652:.011,.671,0,0,1,8656:-.13313,.36687,0,0,1,8657:.19444,.69444,0,0,.61111,8658:-.13313,.36687,0,0,1,8659:.19444,.69444,0,0,.61111,8660:-.13313,.36687,0,0,1,8661:.25,.75,0,0,.61111,8704:0,.69444,0,0,.55556,8706:0,.69444,.05556,.08334,.5309,8707:0,.69444,0,0,.55556,8709:.05556,.75,0,0,.5,8711:0,.68333,0,0,.83334,8712:.0391,.5391,0,0,.66667,8715:.0391,.5391,0,0,.66667,8722:.08333,.58333,0,0,.77778,8723:.08333,.58333,0,0,.77778,8725:.25,.75,0,0,.5,8726:.25,.75,0,0,.5,8727:-.03472,.46528,0,0,.5,8728:-.05555,.44445,0,0,.5,8729:-.05555,.44445,0,0,.5,8730:.2,.8,0,0,.83334,8733:0,.43056,0,0,.77778,8734:0,.43056,0,0,1,8736:0,.69224,0,0,.72222,8739:.25,.75,0,0,.27778,8741:.25,.75,0,0,.5,8743:0,.55556,0,0,.66667,8744:0,.55556,0,0,.66667,8745:0,.55556,0,0,.66667,8746:0,.55556,0,0,.66667,8747:.19444,.69444,.11111,0,.41667,8764:-.13313,.36687,0,0,.77778,8768:.19444,.69444,0,0,.27778,8771:-.03625,.46375,0,0,.77778,8773:-.022,.589,0,0,.778,8776:-.01688,.48312,0,0,.77778,8781:-.03625,.46375,0,0,.77778,8784:-.133,.673,0,0,.778,8801:-.03625,.46375,0,0,.77778,8804:.13597,.63597,0,0,.77778,8805:.13597,.63597,0,0,.77778,8810:.0391,.5391,0,0,1,8811:.0391,.5391,0,0,1,8826:.0391,.5391,0,0,.77778,8827:.0391,.5391,0,0,.77778,8834:.0391,.5391,0,0,.77778,8835:.0391,.5391,0,0,.77778,8838:.13597,.63597,0,0,.77778,8839:.13597,.63597,0,0,.77778,8846:0,.55556,0,0,.66667,8849:.13597,.63597,0,0,.77778,8850:.13597,.63597,0,0,.77778,8851:0,.55556,0,0,.66667,8852:0,.55556,0,0,.66667,8853:.08333,.58333,0,0,.77778,8854:.08333,.58333,0,0,.77778,8855:.08333,.58333,0,0,.77778,8856:.08333,.58333,0,0,.77778,8857:.08333,.58333,0,0,.77778,8866:0,.69444,0,0,.61111,8867:0,.69444,0,0,.61111,8868:0,.69444,0,0,.77778,8869:0,.69444,0,0,.77778,8872:.249,.75,0,0,.867,8900:-.05555,.44445,0,0,.5,8901:-.05555,.44445,0,0,.27778,8902:-.03472,.46528,0,0,.5,8904:.005,.505,0,0,.9,8942:.03,.903,0,0,.278,8943:-.19,.313,0,0,1.172,8945:-.1,.823,0,0,1.282,8968:.25,.75,0,0,.44445,8969:.25,.75,0,0,.44445,8970:.25,.75,0,0,.44445,8971:.25,.75,0,0,.44445,8994:-.14236,.35764,0,0,1,8995:-.14236,.35764,0,0,1,9136:.244,.744,0,0,.412,9137:.244,.745,0,0,.412,9651:.19444,.69444,0,0,.88889,9657:-.03472,.46528,0,0,.5,9661:.19444,.69444,0,0,.88889,9667:-.03472,.46528,0,0,.5,9711:.19444,.69444,0,0,1,9824:.12963,.69444,0,0,.77778,9825:.12963,.69444,0,0,.77778,9826:.12963,.69444,0,0,.77778,9827:.12963,.69444,0,0,.77778,9837:0,.75,0,0,.38889,9838:.19444,.69444,0,0,.38889,9839:.19444,.69444,0,0,.38889,10216:.25,.75,0,0,.38889,10217:.25,.75,0,0,.38889,10222:.244,.744,0,0,.412,10223:.244,.745,0,0,.412,10229:.011,.511,0,0,1.609,10230:.011,.511,0,0,1.638,10231:.011,.511,0,0,1.859,10232:.024,.525,0,0,1.609,10233:.024,.525,0,0,1.638,10234:.024,.525,0,0,1.858,10236:.011,.511,0,0,1.638,10815:0,.68333,0,0,.75,10927:.13597,.63597,0,0,.77778,10928:.13597,.63597,0,0,.77778,57376:.19444,.69444,0,0,0},\\\Math-BoldItalic\\\:{32:0,0,0,0,.25,48:0,.44444,0,0,.575,49:0,.44444,0,0,.575,50:0,.44444,0,0,.575,51:.19444,.44444,0,0,.575,52:.19444,.44444,0,0,.575,53:.19444,.44444,0,0,.575,54:0,.64444,0,0,.575,55:.19444,.44444,0,0,.575,56:0,.64444,0,0,.575,57:.19444,.44444,0,0,.575,65:0,.68611,0,0,.86944,66:0,.68611,.04835,0,.8664,67:0,.68611,.06979,0,.81694,68:0,.68611,.03194,0,.93812,69:0,.68611,.05451,0,.81007,70:0,.68611,.15972,0,.68889,71:0,.68611,0,0,.88673,72:0,.68611,.08229,0,.98229,73:0,.68611,.07778,0,.51111,74:0,.68611,.10069,0,.63125,75:0,.68611,.06979,0,.97118,76:0,.68611,0,0,.75555,77:0,.68611,.11424,0,1.14201,78:0,.68611,.11424,0,.95034,79:0,.68611,.03194,0,.83666,80:0,.68611,.15972,0,.72309,81:.19444,.68611,0,0,.86861,82:0,.68611,.00421,0,.87235,83:0,.68611,.05382,0,.69271,84:0,.68611,.15972,0,.63663,85:0,.68611,.11424,0,.80027,86:0,.68611,.25555,0,.67778,87:0,.68611,.15972,0,1.09305,88:0,.68611,.07778,0,.94722,89:0,.68611,.25555,0,.67458,90:0,.68611,.06979,0,.77257,97:0,.44444,0,0,.63287,98:0,.69444,0,0,.52083,99:0,.44444,0,0,.51342,100:0,.69444,0,0,.60972,101:0,.44444,0,0,.55361,102:.19444,.69444,.11042,0,.56806,103:.19444,.44444,.03704,0,.5449,104:0,.69444,0,0,.66759,105:0,.69326,0,0,.4048,106:.19444,.69326,.0622,0,.47083,107:0,.69444,.01852,0,.6037,108:0,.69444,.0088,0,.34815,109:0,.44444,0,0,1.0324,110:0,.44444,0,0,.71296,111:0,.44444,0,0,.58472,112:.19444,.44444,0,0,.60092,113:.19444,.44444,.03704,0,.54213,114:0,.44444,.03194,0,.5287,115:0,.44444,0,0,.53125,116:0,.63492,0,0,.41528,117:0,.44444,0,0,.68102,118:0,.44444,.03704,0,.56666,119:0,.44444,.02778,0,.83148,120:0,.44444,0,0,.65903,121:.19444,.44444,.03704,0,.59028,122:0,.44444,.04213,0,.55509,160:0,0,0,0,.25,915:0,.68611,.15972,0,.65694,916:0,.68611,0,0,.95833,920:0,.68611,.03194,0,.86722,923:0,.68611,0,0,.80555,926:0,.68611,.07458,0,.84125,928:0,.68611,.08229,0,.98229,931:0,.68611,.05451,0,.88507,933:0,.68611,.15972,0,.67083,934:0,.68611,0,0,.76666,936:0,.68611,.11653,0,.71402,937:0,.68611,.04835,0,.8789,945:0,.44444,0,0,.76064,946:.19444,.69444,.03403,0,.65972,947:.19444,.44444,.06389,0,.59003,948:0,.69444,.03819,0,.52222,949:0,.44444,0,0,.52882,950:.19444,.69444,.06215,0,.50833,951:.19444,.44444,.03704,0,.6,952:0,.69444,.03194,0,.5618,953:0,.44444,0,0,.41204,954:0,.44444,0,0,.66759,955:0,.69444,0,0,.67083,956:.19444,.44444,0,0,.70787,957:0,.44444,.06898,0,.57685,958:.19444,.69444,.03021,0,.50833,959:0,.44444,0,0,.58472,960:0,.44444,.03704,0,.68241,961:.19444,.44444,0,0,.6118,962:.09722,.44444,.07917,0,.42361,963:0,.44444,.03704,0,.68588,964:0,.44444,.13472,0,.52083,965:0,.44444,.03704,0,.63055,966:.19444,.44444,0,0,.74722,967:.19444,.44444,0,0,.71805,968:.19444,.69444,.03704,0,.75833,969:0,.44444,.03704,0,.71782,977:0,.69444,0,0,.69155,981:.19444,.69444,0,0,.7125,982:0,.44444,.03194,0,.975,1009:.19444,.44444,0,0,.6118,1013:0,.44444,0,0,.48333,57649:0,.44444,0,0,.39352,57911:.19444,.44444,0,0,.43889},\\\Math-Italic\\\:{32:0,0,0,0,.25,48:0,.43056,0,0,.5,49:0,.43056,0,0,.5,50:0,.43056,0,0,.5,51:.19444,.43056,0,0,.5,52:.19444,.43056,0,0,.5,53:.19444,.43056,0,0,.5,54:0,.64444,0,0,.5,55:.19444,.43056,0,0,.5,56:0,.64444,0,0,.5,57:.19444,.43056,0,0,.5,65:0,.68333,0,.13889,.75,66:0,.68333,.05017,.08334,.75851,67:0,.68333,.07153,.08334,.71472,68:0,.68333,.02778,.05556,.82792,69:0,.68333,.05764,.08334,.7382,70:0,.68333,.13889,.08334,.64306,71:0,.68333,0,.08334,.78625,72:0,.68333,.08125,.05556,.83125,73:0,.68333,.07847,.11111,.43958,74:0,.68333,.09618,.16667,.55451,75:0,.68333,.07153,.05556,.84931,76:0,.68333,0,.02778,.68056,77:0,.68333,.10903,.08334,.97014,78:0,.68333,.10903,.08334,.80347,79:0,.68333,.02778,.08334,.76278,80:0,.68333,.13889,.08334,.64201,81:.19444,.68333,0,.08334,.79056,82:0,.68333,.00773,.08334,.75929,83:0,.68333,.05764,.08334,.6132,84:0,.68333,.13889,.08334,.58438,85:0,.68333,.10903,.02778,.68278,86:0,.68333,.22222,0,.58333,87:0,.68333,.13889,0,.94445,88:0,.68333,.07847,.08334,.82847,89:0,.68333,.22222,0,.58056,90:0,.68333,.07153,.08334,.68264,97:0,.43056,0,0,.52859,98:0,.69444,0,0,.42917,99:0,.43056,0,.05556,.43276,100:0,.69444,0,.16667,.52049,101:0,.43056,0,.05556,.46563,102:.19444,.69444,.10764,.16667,.48959,103:.19444,.43056,.03588,.02778,.47697,104:0,.69444,0,0,.57616,105:0,.65952,0,0,.34451,106:.19444,.65952,.05724,0,.41181,107:0,.69444,.03148,0,.5206,108:0,.69444,.01968,.08334,.29838,109:0,.43056,0,0,.87801,110:0,.43056,0,0,.60023,111:0,.43056,0,.05556,.48472,112:.19444,.43056,0,.08334,.50313,113:.19444,.43056,.03588,.08334,.44641,114:0,.43056,.02778,.05556,.45116,115:0,.43056,0,.05556,.46875,116:0,.61508,0,.08334,.36111,117:0,.43056,0,.02778,.57246,118:0,.43056,.03588,.02778,.48472,119:0,.43056,.02691,.08334,.71592,120:0,.43056,0,.02778,.57153,121:.19444,.43056,.03588,.05556,.49028,122:0,.43056,.04398,.05556,.46505,160:0,0,0,0,.25,915:0,.68333,.13889,.08334,.61528,916:0,.68333,0,.16667,.83334,920:0,.68333,.02778,.08334,.76278,923:0,.68333,0,.16667,.69445,926:0,.68333,.07569,.08334,.74236,928:0,.68333,.08125,.05556,.83125,931:0,.68333,.05764,.08334,.77986,933:0,.68333,.13889,.05556,.58333,934:0,.68333,0,.08334,.66667,936:0,.68333,.11,.05556,.61222,937:0,.68333,.05017,.08334,.7724,945:0,.43056,.0037,.02778,.6397,946:.19444,.69444,.05278,.08334,.56563,947:.19444,.43056,.05556,0,.51773,948:0,.69444,.03785,.05556,.44444,949:0,.43056,0,.08334,.46632,950:.19444,.69444,.07378,.08334,.4375,951:.19444,.43056,.03588,.05556,.49653,952:0,.69444,.02778,.08334,.46944,953:0,.43056,0,.05556,.35394,954:0,.43056,0,0,.57616,955:0,.69444,0,0,.58334,956:.19444,.43056,0,.02778,.60255,957:0,.43056,.06366,.02778,.49398,958:.19444,.69444,.04601,.11111,.4375,959:0,.43056,0,.05556,.48472,960:0,.43056,.03588,0,.57003,961:.19444,.43056,0,.08334,.51702,962:.09722,.43056,.07986,.08334,.36285,963:0,.43056,.03588,0,.57141,964:0,.43056,.1132,.02778,.43715,965:0,.43056,.03588,.02778,.54028,966:.19444,.43056,0,.08334,.65417,967:.19444,.43056,0,.05556,.62569,968:.19444,.69444,.03588,.11111,.65139,969:0,.43056,.03588,0,.62245,977:0,.69444,0,.08334,.59144,981:.19444,.69444,0,.08334,.59583,982:0,.43056,.02778,0,.82813,1009:.19444,.43056,0,.08334,.51702,1013:0,.43056,0,.05556,.4059,57649:0,.43056,0,.02778,.32246,57911:.19444,.43056,0,.08334,.38403},\\\SansSerif-Bold\\\:{32:0,0,0,0,.25,33:0,.69444,0,0,.36667,34:0,.69444,0,0,.55834,35:.19444,.69444,0,0,.91667,36:.05556,.75,0,0,.55,37:.05556,.75,0,0,1.02912,38:0,.69444,0,0,.83056,39:0,.69444,0,0,.30556,40:.25,.75,0,0,.42778,41:.25,.75,0,0,.42778,42:0,.75,0,0,.55,43:.11667,.61667,0,0,.85556,44:.10556,.13056,0,0,.30556,45:0,.45833,0,0,.36667,46:0,.13056,0,0,.30556,47:.25,.75,0,0,.55,48:0,.69444,0,0,.55,49:0,.69444,0,0,.55,50:0,.69444,0,0,.55,51:0,.69444,0,0,.55,52:0,.69444,0,0,.55,53:0,.69444,0,0,.55,54:0,.69444,0,0,.55,55:0,.69444,0,0,.55,56:0,.69444,0,0,.55,57:0,.69444,0,0,.55,58:0,.45833,0,0,.30556,59:.10556,.45833,0,0,.30556,61:-.09375,.40625,0,0,.85556,63:0,.69444,0,0,.51945,64:0,.69444,0,0,.73334,65:0,.69444,0,0,.73334,66:0,.69444,0,0,.73334,67:0,.69444,0,0,.70278,68:0,.69444,0,0,.79445,69:0,.69444,0,0,.64167,70:0,.69444,0,0,.61111,71:0,.69444,0,0,.73334,72:0,.69444,0,0,.79445,73:0,.69444,0,0,.33056,74:0,.69444,0,0,.51945,75:0,.69444,0,0,.76389,76:0,.69444,0,0,.58056,77:0,.69444,0,0,.97778,78:0,.69444,0,0,.79445,79:0,.69444,0,0,.79445,80:0,.69444,0,0,.70278,81:.10556,.69444,0,0,.79445,82:0,.69444,0,0,.70278,83:0,.69444,0,0,.61111,84:0,.69444,0,0,.73334,85:0,.69444,0,0,.76389,86:0,.69444,.01528,0,.73334,87:0,.69444,.01528,0,1.03889,88:0,.69444,0,0,.73334,89:0,.69444,.0275,0,.73334,90:0,.69444,0,0,.67223,91:.25,.75,0,0,.34306,93:.25,.75,0,0,.34306,94:0,.69444,0,0,.55,95:.35,.10833,.03056,0,.55,97:0,.45833,0,0,.525,98:0,.69444,0,0,.56111,99:0,.45833,0,0,.48889,100:0,.69444,0,0,.56111,101:0,.45833,0,0,.51111,102:0,.69444,.07639,0,.33611,103:.19444,.45833,.01528,0,.55,104:0,.69444,0,0,.56111,105:0,.69444,0,0,.25556,106:.19444,.69444,0,0,.28611,107:0,.69444,0,0,.53056,108:0,.69444,0,0,.25556,109:0,.45833,0,0,.86667,110:0,.45833,0,0,.56111,111:0,.45833,0,0,.55,112:.19444,.45833,0,0,.56111,113:.19444,.45833,0,0,.56111,114:0,.45833,.01528,0,.37222,115:0,.45833,0,0,.42167,116:0,.58929,0,0,.40417,117:0,.45833,0,0,.56111,118:0,.45833,.01528,0,.5,119:0,.45833,.01528,0,.74445,120:0,.45833,0,0,.5,121:.19444,.45833,.01528,0,.5,122:0,.45833,0,0,.47639,126:.35,.34444,0,0,.55,160:0,0,0,0,.25,168:0,.69444,0,0,.55,176:0,.69444,0,0,.73334,180:0,.69444,0,0,.55,184:.17014,0,0,0,.48889,305:0,.45833,0,0,.25556,567:.19444,.45833,0,0,.28611,710:0,.69444,0,0,.55,711:0,.63542,0,0,.55,713:0,.63778,0,0,.55,728:0,.69444,0,0,.55,729:0,.69444,0,0,.30556,730:0,.69444,0,0,.73334,732:0,.69444,0,0,.55,733:0,.69444,0,0,.55,915:0,.69444,0,0,.58056,916:0,.69444,0,0,.91667,920:0,.69444,0,0,.85556,923:0,.69444,0,0,.67223,926:0,.69444,0,0,.73334,928:0,.69444,0,0,.79445,931:0,.69444,0,0,.79445,933:0,.69444,0,0,.85556,934:0,.69444,0,0,.79445,936:0,.69444,0,0,.85556,937:0,.69444,0,0,.79445,8211:0,.45833,.03056,0,.55,8212:0,.45833,.03056,0,1.10001,8216:0,.69444,0,0,.30556,8217:0,.69444,0,0,.30556,8220:0,.69444,0,0,.55834,8221:0,.69444,0,0,.55834},\\\SansSerif-Italic\\\:{32:0,0,0,0,.25,33:0,.69444,.05733,0,.31945,34:0,.69444,.00316,0,.5,35:.19444,.69444,.05087,0,.83334,36:.05556,.75,.11156,0,.5,37:.05556,.75,.03126,0,.83334,38:0,.69444,.03058,0,.75834,39:0,.69444,.07816,0,.27778,40:.25,.75,.13164,0,.38889,41:.25,.75,.02536,0,.38889,42:0,.75,.11775,0,.5,43:.08333,.58333,.02536,0,.77778,44:.125,.08333,0,0,.27778,45:0,.44444,.01946,0,.33333,46:0,.08333,0,0,.27778,47:.25,.75,.13164,0,.5,48:0,.65556,.11156,0,.5,49:0,.65556,.11156,0,.5,50:0,.65556,.11156,0,.5,51:0,.65556,.11156,0,.5,52:0,.65556,.11156,0,.5,53:0,.65556,.11156,0,.5,54:0,.65556,.11156,0,.5,55:0,.65556,.11156,0,.5,56:0,.65556,.11156,0,.5,57:0,.65556,.11156,0,.5,58:0,.44444,.02502,0,.27778,59:.125,.44444,.02502,0,.27778,61:-.13,.37,.05087,0,.77778,63:0,.69444,.11809,0,.47222,64:0,.69444,.07555,0,.66667,65:0,.69444,0,0,.66667,66:0,.69444,.08293,0,.66667,67:0,.69444,.11983,0,.63889,68:0,.69444,.07555,0,.72223,69:0,.69444,.11983,0,.59722,70:0,.69444,.13372,0,.56945,71:0,.69444,.11983,0,.66667,72:0,.69444,.08094,0,.70834,73:0,.69444,.13372,0,.27778,74:0,.69444,.08094,0,.47222,75:0,.69444,.11983,0,.69445,76:0,.69444,0,0,.54167,77:0,.69444,.08094,0,.875,78:0,.69444,.08094,0,.70834,79:0,.69444,.07555,0,.73611,80:0,.69444,.08293,0,.63889,81:.125,.69444,.07555,0,.73611,82:0,.69444,.08293,0,.64584,83:0,.69444,.09205,0,.55556,84:0,.69444,.13372,0,.68056,85:0,.69444,.08094,0,.6875,86:0,.69444,.1615,0,.66667,87:0,.69444,.1615,0,.94445,88:0,.69444,.13372,0,.66667,89:0,.69444,.17261,0,.66667,90:0,.69444,.11983,0,.61111,91:.25,.75,.15942,0,.28889,93:.25,.75,.08719,0,.28889,94:0,.69444,.0799,0,.5,95:.35,.09444,.08616,0,.5,97:0,.44444,.00981,0,.48056,98:0,.69444,.03057,0,.51667,99:0,.44444,.08336,0,.44445,100:0,.69444,.09483,0,.51667,101:0,.44444,.06778,0,.44445,102:0,.69444,.21705,0,.30556,103:.19444,.44444,.10836,0,.5,104:0,.69444,.01778,0,.51667,105:0,.67937,.09718,0,.23889,106:.19444,.67937,.09162,0,.26667,107:0,.69444,.08336,0,.48889,108:0,.69444,.09483,0,.23889,109:0,.44444,.01778,0,.79445,110:0,.44444,.01778,0,.51667,111:0,.44444,.06613,0,.5,112:.19444,.44444,.0389,0,.51667,113:.19444,.44444,.04169,0,.51667,114:0,.44444,.10836,0,.34167,115:0,.44444,.0778,0,.38333,116:0,.57143,.07225,0,.36111,117:0,.44444,.04169,0,.51667,118:0,.44444,.10836,0,.46111,119:0,.44444,.10836,0,.68334,120:0,.44444,.09169,0,.46111,121:.19444,.44444,.10836,0,.46111,122:0,.44444,.08752,0,.43472,126:.35,.32659,.08826,0,.5,160:0,0,0,0,.25,168:0,.67937,.06385,0,.5,176:0,.69444,0,0,.73752,184:.17014,0,0,0,.44445,305:0,.44444,.04169,0,.23889,567:.19444,.44444,.04169,0,.26667,710:0,.69444,.0799,0,.5,711:0,.63194,.08432,0,.5,713:0,.60889,.08776,0,.5,714:0,.69444,.09205,0,.5,715:0,.69444,0,0,.5,728:0,.69444,.09483,0,.5,729:0,.67937,.07774,0,.27778,730:0,.69444,0,0,.73752,732:0,.67659,.08826,0,.5,733:0,.69444,.09205,0,.5,915:0,.69444,.13372,0,.54167,916:0,.69444,0,0,.83334,920:0,.69444,.07555,0,.77778,923:0,.69444,0,0,.61111,926:0,.69444,.12816,0,.66667,928:0,.69444,.08094,0,.70834,931:0,.69444,.11983,0,.72222,933:0,.69444,.09031,0,.77778,934:0,.69444,.04603,0,.72222,936:0,.69444,.09031,0,.77778,937:0,.69444,.08293,0,.72222,8211:0,.44444,.08616,0,.5,8212:0,.44444,.08616,0,1,8216:0,.69444,.07816,0,.27778,8217:0,.69444,.07816,0,.27778,8220:0,.69444,.14205,0,.5,8221:0,.69444,.00316,0,.5},\\\SansSerif-Regular\\\:{32:0,0,0,0,.25,33:0,.69444,0,0,.31945,34:0,.69444,0,0,.5,35:.19444,.69444,0,0,.83334,36:.05556,.75,0,0,.5,37:.05556,.75,0,0,.83334,38:0,.69444,0,0,.75834,39:0,.69444,0,0,.27778,40:.25,.75,0,0,.38889,41:.25,.75,0,0,.38889,42:0,.75,0,0,.5,43:.08333,.58333,0,0,.77778,44:.125,.08333,0,0,.27778,45:0,.44444,0,0,.33333,46:0,.08333,0,0,.27778,47:.25,.75,0,0,.5,48:0,.65556,0,0,.5,49:0,.65556,0,0,.5,50:0,.65556,0,0,.5,51:0,.65556,0,0,.5,52:0,.65556,0,0,.5,53:0,.65556,0,0,.5,54:0,.65556,0,0,.5,55:0,.65556,0,0,.5,56:0,.65556,0,0,.5,57:0,.65556,0,0,.5,58:0,.44444,0,0,.27778,59:.125,.44444,0,0,.27778,61:-.13,.37,0,0,.77778,63:0,.69444,0,0,.47222,64:0,.69444,0,0,.66667,65:0,.69444,0,0,.66667,66:0,.69444,0,0,.66667,67:0,.69444,0,0,.63889,68:0,.69444,0,0,.72223,69:0,.69444,0,0,.59722,70:0,.69444,0,0,.56945,71:0,.69444,0,0,.66667,72:0,.69444,0,0,.70834,73:0,.69444,0,0,.27778,74:0,.69444,0,0,.47222,75:0,.69444,0,0,.69445,76:0,.69444,0,0,.54167,77:0,.69444,0,0,.875,78:0,.69444,0,0,.70834,79:0,.69444,0,0,.73611,80:0,.69444,0,0,.63889,81:.125,.69444,0,0,.73611,82:0,.69444,0,0,.64584,83:0,.69444,0,0,.55556,84:0,.69444,0,0,.68056,85:0,.69444,0,0,.6875,86:0,.69444,.01389,0,.66667,87:0,.69444,.01389,0,.94445,88:0,.69444,0,0,.66667,89:0,.69444,.025,0,.66667,90:0,.69444,0,0,.61111,91:.25,.75,0,0,.28889,93:.25,.75,0,0,.28889,94:0,.69444,0,0,.5,95:.35,.09444,.02778,0,.5,97:0,.44444,0,0,.48056,98:0,.69444,0,0,.51667,99:0,.44444,0,0,.44445,100:0,.69444,0,0,.51667,101:0,.44444,0,0,.44445,102:0,.69444,.06944,0,.30556,103:.19444,.44444,.01389,0,.5,104:0,.69444,0,0,.51667,105:0,.67937,0,0,.23889,106:.19444,.67937,0,0,.26667,107:0,.69444,0,0,.48889,108:0,.69444,0,0,.23889,109:0,.44444,0,0,.79445,110:0,.44444,0,0,.51667,111:0,.44444,0,0,.5,112:.19444,.44444,0,0,.51667,113:.19444,.44444,0,0,.51667,114:0,.44444,.01389,0,.34167,115:0,.44444,0,0,.38333,116:0,.57143,0,0,.36111,117:0,.44444,0,0,.51667,118:0,.44444,.01389,0,.46111,119:0,.44444,.01389,0,.68334,120:0,.44444,0,0,.46111,121:.19444,.44444,.01389,0,.46111,122:0,.44444,0,0,.43472,126:.35,.32659,0,0,.5,160:0,0,0,0,.25,168:0,.67937,0,0,.5,176:0,.69444,0,0,.66667,184:.17014,0,0,0,.44445,305:0,.44444,0,0,.23889,567:.19444,.44444,0,0,.26667,710:0,.69444,0,0,.5,711:0,.63194,0,0,.5,713:0,.60889,0,0,.5,714:0,.69444,0,0,.5,715:0,.69444,0,0,.5,728:0,.69444,0,0,.5,729:0,.67937,0,0,.27778,730:0,.69444,0,0,.66667,732:0,.67659,0,0,.5,733:0,.69444,0,0,.5,915:0,.69444,0,0,.54167,916:0,.69444,0,0,.83334,920:0,.69444,0,0,.77778,923:0,.69444,0,0,.61111,926:0,.69444,0,0,.66667,928:0,.69444,0,0,.70834,931:0,.69444,0,0,.72222,933:0,.69444,0,0,.77778,934:0,.69444,0,0,.72222,936:0,.69444,0,0,.77778,937:0,.69444,0,0,.72222,8211:0,.44444,.02778,0,.5,8212:0,.44444,.02778,0,1,8216:0,.69444,0,0,.27778,8217:0,.69444,0,0,.27778,8220:0,.69444,0,0,.5,8221:0,.69444,0,0,.5},\\\Script-Regular\\\:{32:0,0,0,0,.25,65:0,.7,.22925,0,.80253,66:0,.7,.04087,0,.90757,67:0,.7,.1689,0,.66619,68:0,.7,.09371,0,.77443,69:0,.7,.18583,0,.56162,70:0,.7,.13634,0,.89544,71:0,.7,.17322,0,.60961,72:0,.7,.29694,0,.96919,73:0,.7,.19189,0,.80907,74:.27778,.7,.19189,0,1.05159,75:0,.7,.31259,0,.91364,76:0,.7,.19189,0,.87373,77:0,.7,.15981,0,1.08031,78:0,.7,.3525,0,.9015,79:0,.7,.08078,0,.73787,80:0,.7,.08078,0,1.01262,81:0,.7,.03305,0,.88282,82:0,.7,.06259,0,.85,83:0,.7,.19189,0,.86767,84:0,.7,.29087,0,.74697,85:0,.7,.25815,0,.79996,86:0,.7,.27523,0,.62204,87:0,.7,.27523,0,.80532,88:0,.7,.26006,0,.94445,89:0,.7,.2939,0,.70961,90:0,.7,.24037,0,.8212,160:0,0,0,0,.25},\\\Size1-Regular\\\:{32:0,0,0,0,.25,40:.35001,.85,0,0,.45834,41:.35001,.85,0,0,.45834,47:.35001,.85,0,0,.57778,91:.35001,.85,0,0,.41667,92:.35001,.85,0,0,.57778,93:.35001,.85,0,0,.41667,123:.35001,.85,0,0,.58334,125:.35001,.85,0,0,.58334,160:0,0,0,0,.25,710:0,.72222,0,0,.55556,732:0,.72222,0,0,.55556,770:0,.72222,0,0,.55556,771:0,.72222,0,0,.55556,8214:-99e-5,.601,0,0,.77778,8593:1e-5,.6,0,0,.66667,8595:1e-5,.6,0,0,.66667,8657:1e-5,.6,0,0,.77778,8659:1e-5,.6,0,0,.77778,8719:.25001,.75,0,0,.94445,8720:.25001,.75,0,0,.94445,8721:.25001,.75,0,0,1.05556,8730:.35001,.85,0,0,1,8739:-.00599,.606,0,0,.33333,8741:-.00599,.606,0,0,.55556,8747:.30612,.805,.19445,0,.47222,8748:.306,.805,.19445,0,.47222,8749:.306,.805,.19445,0,.47222,8750:.30612,.805,.19445,0,.47222,8896:.25001,.75,0,0,.83334,8897:.25001,.75,0,0,.83334,8898:.25001,.75,0,0,.83334,8899:.25001,.75,0,0,.83334,8968:.35001,.85,0,0,.47222,8969:.35001,.85,0,0,.47222,8970:.35001,.85,0,0,.47222,8971:.35001,.85,0,0,.47222,9168:-99e-5,.601,0,0,.66667,10216:.35001,.85,0,0,.47222,10217:.35001,.85,0,0,.47222,10752:.25001,.75,0,0,1.11111,10753:.25001,.75,0,0,1.11111,10754:.25001,.75,0,0,1.11111,10756:.25001,.75,0,0,.83334,10758:.25001,.75,0,0,.83334},\\\Size2-Regular\\\:{32:0,0,0,0,.25,40:.65002,1.15,0,0,.59722,41:.65002,1.15,0,0,.59722,47:.65002,1.15,0,0,.81111,91:.65002,1.15,0,0,.47222,92:.65002,1.15,0,0,.81111,93:.65002,1.15,0,0,.47222,123:.65002,1.15,0,0,.66667,125:.65002,1.15,0,0,.66667,160:0,0,0,0,.25,710:0,.75,0,0,1,732:0,.75,0,0,1,770:0,.75,0,0,1,771:0,.75,0,0,1,8719:.55001,1.05,0,0,1.27778,8720:.55001,1.05,0,0,1.27778,8721:.55001,1.05,0,0,1.44445,8730:.65002,1.15,0,0,1,8747:.86225,1.36,.44445,0,.55556,8748:.862,1.36,.44445,0,.55556,8749:.862,1.36,.44445,0,.55556,8750:.86225,1.36,.44445,0,.55556,8896:.55001,1.05,0,0,1.11111,8897:.55001,1.05,0,0,1.11111,8898:.55001,1.05,0,0,1.11111,8899:.55001,1.05,0,0,1.11111,8968:.65002,1.15,0,0,.52778,8969:.65002,1.15,0,0,.52778,8970:.65002,1.15,0,0,.52778,8971:.65002,1.15,0,0,.52778,10216:.65002,1.15,0,0,.61111,10217:.65002,1.15,0,0,.61111,10752:.55001,1.05,0,0,1.51112,10753:.55001,1.05,0,0,1.51112,10754:.55001,1.05,0,0,1.51112,10756:.55001,1.05,0,0,1.11111,10758:.55001,1.05,0,0,1.11111},\\\Size3-Regular\\\:{32:0,0,0,0,.25,40:.95003,1.45,0,0,.73611,41:.95003,1.45,0,0,.73611,47:.95003,1.45,0,0,1.04445,91:.95003,1.45,0,0,.52778,92:.95003,1.45,0,0,1.04445,93:.95003,1.45,0,0,.52778,123:.95003,1.45,0,0,.75,125:.95003,1.45,0,0,.75,160:0,0,0,0,.25,710:0,.75,0,0,1.44445,732:0,.75,0,0,1.44445,770:0,.75,0,0,1.44445,771:0,.75,0,0,1.44445,8730:.95003,1.45,0,0,1,8968:.95003,1.45,0,0,.58334,8969:.95003,1.45,0,0,.58334,8970:.95003,1.45,0,0,.58334,8971:.95003,1.45,0,0,.58334,10216:.95003,1.45,0,0,.75,10217:.95003,1.45,0,0,.75},\\\Size4-Regular\\\:{32:0,0,0,0,.25,40:1.25003,1.75,0,0,.79167,41:1.25003,1.75,0,0,.79167,47:1.25003,1.75,0,0,1.27778,91:1.25003,1.75,0,0,.58334,92:1.25003,1.75,0,0,1.27778,93:1.25003,1.75,0,0,.58334,123:1.25003,1.75,0,0,.80556,125:1.25003,1.75,0,0,.80556,160:0,0,0,0,.25,710:0,.825,0,0,1.8889,732:0,.825,0,0,1.8889,770:0,.825,0,0,1.8889,771:0,.825,0,0,1.8889,8730:1.25003,1.75,0,0,1,8968:1.25003,1.75,0,0,.63889,8969:1.25003,1.75,0,0,.63889,8970:1.25003,1.75,0,0,.63889,8971:1.25003,1.75,0,0,.63889,9115:.64502,1.155,0,0,.875,9116:1e-5,.6,0,0,.875,9117:.64502,1.155,0,0,.875,9118:.64502,1.155,0,0,.875,9119:1e-5,.6,0,0,.875,9120:.64502,1.155,0,0,.875,9121:.64502,1.155,0,0,.66667,9122:-99e-5,.601,0,0,.66667,9123:.64502,1.155,0,0,.66667,9124:.64502,1.155,0,0,.66667,9125:-99e-5,.601,0,0,.66667,9126:.64502,1.155,0,0,.66667,9127:1e-5,.9,0,0,.88889,9128:.65002,1.15,0,0,.88889,9129:.90001,0,0,0,.88889,9130:0,.3,0,0,.88889,9131:1e-5,.9,0,0,.88889,9132:.65002,1.15,0,0,.88889,9133:.90001,0,0,0,.88889,9143:.88502,.915,0,0,1.05556,10216:1.25003,1.75,0,0,.80556,10217:1.25003,1.75,0,0,.80556,57344:-.00499,.605,0,0,1.05556,57345:-.00499,.605,0,0,1.05556,57680:0,.12,0,0,.45,57681:0,.12,0,0,.45,57682:0,.12,0,0,.45,57683:0,.12,0,0,.45},\\\Typewriter-Regular\\\:{32:0,0,0,0,.525,33:0,.61111,0,0,.525,34:0,.61111,0,0,.525,35:0,.61111,0,0,.525,36:.08333,.69444,0,0,.525,37:.08333,.69444,0,0,.525,38:0,.61111,0,0,.525,39:0,.61111,0,0,.525,40:.08333,.69444,0,0,.525,41:.08333,.69444,0,0,.525,42:0,.52083,0,0,.525,43:-.08056,.53055,0,0,.525,44:.13889,.125,0,0,.525,45:-.08056,.53055,0,0,.525,46:0,.125,0,0,.525,47:.08333,.69444,0,0,.525,48:0,.61111,0,0,.525,49:0,.61111,0,0,.525,50:0,.61111,0,0,.525,51:0,.61111,0,0,.525,52:0,.61111,0,0,.525,53:0,.61111,0,0,.525,54:0,.61111,0,0,.525,55:0,.61111,0,0,.525,56:0,.61111,0,0,.525,57:0,.61111,0,0,.525,58:0,.43056,0,0,.525,59:.13889,.43056,0,0,.525,60:-.05556,.55556,0,0,.525,61:-.19549,.41562,0,0,.525,62:-.05556,.55556,0,0,.525,63:0,.61111,0,0,.525,64:0,.61111,0,0,.525,65:0,.61111,0,0,.525,66:0,.61111,0,0,.525,67:0,.61111,0,0,.525,68:0,.61111,0,0,.525,69:0,.61111,0,0,.525,70:0,.61111,0,0,.525,71:0,.61111,0,0,.525,72:0,.61111,0,0,.525,73:0,.61111,0,0,.525,74:0,.61111,0,0,.525,75:0,.61111,0,0,.525,76:0,.61111,0,0,.525,77:0,.61111,0,0,.525,78:0,.61111,0,0,.525,79:0,.61111,0,0,.525,80:0,.61111,0,0,.525,81:.13889,.61111,0,0,.525,82:0,.61111,0,0,.525,83:0,.61111,0,0,.525,84:0,.61111,0,0,.525,85:0,.61111,0,0,.525,86:0,.61111,0,0,.525,87:0,.61111,0,0,.525,88:0,.61111,0,0,.525,89:0,.61111,0,0,.525,90:0,.61111,0,0,.525,91:.08333,.69444,0,0,.525,92:.08333,.69444,0,0,.525,93:.08333,.69444,0,0,.525,94:0,.61111,0,0,.525,95:.09514,0,0,0,.525,96:0,.61111,0,0,.525,97:0,.43056,0,0,.525,98:0,.61111,0,0,.525,99:0,.43056,0,0,.525,100:0,.61111,0,0,.525,101:0,.43056,0,0,.525,102:0,.61111,0,0,.525,103:.22222,.43056,0,0,.525,104:0,.61111,0,0,.525,105:0,.61111,0,0,.525,106:.22222,.61111,0,0,.525,107:0,.61111,0,0,.525,108:0,.61111,0,0,.525,109:0,.43056,0,0,.525,110:0,.43056,0,0,.525,111:0,.43056,0,0,.525,112:.22222,.43056,0,0,.525,113:.22222,.43056,0,0,.525,114:0,.43056,0,0,.525,115:0,.43056,0,0,.525,116:0,.55358,0,0,.525,117:0,.43056,0,0,.525,118:0,.43056,0,0,.525,119:0,.43056,0,0,.525,120:0,.43056,0,0,.525,121:.22222,.43056,0,0,.525,122:0,.43056,0,0,.525,123:.08333,.69444,0,0,.525,124:.08333,.69444,0,0,.525,125:.08333,.69444,0,0,.525,126:0,.61111,0,0,.525,127:0,.61111,0,0,.525,160:0,0,0,0,.525,176:0,.61111,0,0,.525,184:.19445,0,0,0,.525,305:0,.43056,0,0,.525,567:.22222,.43056,0,0,.525,711:0,.56597,0,0,.525,713:0,.56555,0,0,.525,714:0,.61111,0,0,.525,715:0,.61111,0,0,.525,728:0,.61111,0,0,.525,730:0,.61111,0,0,.525,770:0,.61111,0,0,.525,771:0,.61111,0,0,.525,776:0,.61111,0,0,.525,915:0,.61111,0,0,.525,916:0,.61111,0,0,.525,920:0,.61111,0,0,.525,923:0,.61111,0,0,.525,926:0,.61111,0,0,.525,928:0,.61111,0,0,.525,931:0,.61111,0,0,.525,933:0,.61111,0,0,.525,934:0,.61111,0,0,.525,936:0,.61111,0,0,.525,937:0,.61111,0,0,.525,8216:0,.61111,0,0,.525,8217:0,.61111,0,0,.525,8242:0,.61111,0,0,.525,9251:.11111,.21944,0,0,.525}},B{slant:.25,.25,.25,space:0,0,0,stretch:0,0,0,shrink:0,0,0,xHeight:.431,.431,.431,quad:1,1.171,1.472,extraSpace:0,0,0,num1:.677,.732,.925,num2:.394,.384,.387,num3:.444,.471,.504,denom1:.686,.752,1.025,denom2:.345,.344,.532,sup1:.413,.503,.504,sup2:.363,.431,.404,sup3:.289,.286,.294,sub1:.15,.143,.2,sub2:.247,.286,.4,supDrop:.386,.353,.494,subDrop:.05,.071,.1,delim1:2.39,1.7,1.98,delim2:1.01,1.157,1.42,axisHeight:.25,.25,.25,defaultRuleThickness:.04,.049,.049,bigOpSpacing1:.111,.111,.111,bigOpSpacing2:.166,.166,.166,bigOpSpacing3:.2,.2,.2,bigOpSpacing4:.6,.611,.611,bigOpSpacing5:.1,.143,.143,sqrtRuleThickness:.04,.04,.04,ptPerEm:10,10,10,doubleRuleSep:.2,.2,.2,arrayRuleWidth:.04,.04,.04,fboxsep:.3,.3,.3,fboxrule:.04,.04,.04},C{\\\\\\\xc5\\\:\\\A\\\,\\\\\\\xd0\\\:\\\D\\\,\\\\\\\xde\\\:\\\o\\\,\\\\\\\xe5\\\:\\\a\\\,\\\\\\\xf0\\\:\\\d\\\,\\\\\\\xfe\\\:\\\o\\\,\\\\\\\u0410\\\:\\\A\\\,\\\\\\\u0411\\\:\\\B\\\,\\\\\\\u0412\\\:\\\B\\\,\\\\\\\u0413\\\:\\\F\\\,\\\\\\\u0414\\\:\\\A\\\,\\\\\\\u0415\\\:\\\E\\\,\\\\\\\u0416\\\:\\\K\\\,\\\\\\\u0417\\\:\\\3\\\,\\\\\\\u0418\\\:\\\N\\\,\\\\\\\u0419\\\:\\\N\\\,\\\\\\\u041a\\\:\\\K\\\,\\\\\\\u041b\\\:\\\N\\\,\\\\\\\u041c\\\:\\\M\\\,\\\\\\\u041d\\\:\\\H\\\,\\\\\\\u041e\\\:\\\O\\\,\\\\\\\u041f\\\:\\\N\\\,\\\\\\\u0420\\\:\\\P\\\,\\\\\\\u0421\\\:\\\C\\\,\\\\\\\u0422\\\:\\\T\\\,\\\\\\\u0423\\\:\\\y\\\,\\\\\\\u0424\\\:\\\O\\\,\\\\\\\u0425\\\:\\\X\\\,\\\\\\\u0426\\\:\\\U\\\,\\\\\\\u0427\\\:\\\h\\\,\\\\\\\u0428\\\:\\\W\\\,\\\\\\\u0429\\\:\\\W\\\,\\\\\\\u042a\\\:\\\B\\\,\\\\\\\u042b\\\:\\\X\\\,\\\\\\\u042c\\\:\\\B\\\,\\\\\\\u042d\\\:\\\3\\\,\\\\\\\u042e\\\:\\\X\\\,\\\\\\\u042f\\\:\\\R\\\,\\\\\\\u0430\\\:\\\a\\\,\\\\\\\u0431\\\:\\\b\\\,\\\\\\\u0432\\\:\\\a\\\,\\\\\\\u0433\\\:\\\r\\\,\\\\\\\u0434\\\:\\\y\\\,\\\\\\\u0435\\\:\\\e\\\,\\\\\\\u0436\\\:\\\m\\\,\\\\\\\u0437\\\:\\\e\\\,\\\\\\\u0438\\\:\\\n\\\,\\\\\\\u0439\\\:\\\n\\\,\\\\\\\u043a\\\:\\\n\\\,\\\\\\\u043b\\\:\\\n\\\,\\\\\\\u043c\\\:\\\m\\\,\\\\\\\u043d\\\:\\\n\\\,\\\\\\\u043e\\\:\\\o\\\,\\\\\\\u043f\\\:\\\n\\\,\\\\\\\u0440\\\:\\\p\\\,\\\\\\\u0441\\\:\\\c\\\,\\\\\\\u0442\\\:\\\o\\\,\\\\\\\u0443\\\:\\\y\\\,\\\\\\\u0444\\\:\\\b\\\,\\\\\\\u0445\\\:\\\x\\\,\\\\\\\u0446\\\:\\\n\\\,\\\\\\\u0447\\\:\\\n\\\,\\\\\\\u0448\\\:\\\w\\\,\\\\\\\u0449\\\:\\\w\\\,\\\\\\\u044a\\\:\\\a\\\,\\\\\\\u044b\\\:\\\m\\\,\\\\\\\u044c\\\:\\\a\\\,\\\\\\\u044d\\\:\\\e\\\,\\\\\\\u044e\\\:\\\m\\\,\\\\\\\u044f\\\:\\\r\\\};function q(e,t,r){if(!Tt)throw new Error(\\\Font metrics not found for font: \\\+t+\\\.\\\);var ne.charCodeAt(0),aTtn;if(!a&&e0in C&&(nCe0.charCodeAt(0),aTtn),a||\\\text\\\!r||S(n)&&(aTt77),a)return{depth:a0,height:a1,italic:a2,skew:a3,width:a4}}var N{};var I1,1,1,2,1,1,3,1,1,4,2,1,5,2,1,6,3,1,7,4,2,8,6,3,9,7,6,10,8,7,11,10,9,R.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488,Ofunction(e,t){return t.size\u003C2?e:Ie-1t.size-1},Hfunction(){function e(t){this.stylevoid 0,this.colorvoid 0,this.sizevoid 0,this.textSizevoid 0,this.phantomvoid 0,this.fontvoid 0,this.fontFamilyvoid 0,this.fontWeightvoid 0,this.fontShapevoid 0,this.sizeMultipliervoid 0,this.maxSizevoid 0,this.minRuleThicknessvoid 0,this._fontMetricsvoid 0,this.stylet.style,this.colort.color,this.sizet.size||e.BASESIZE,this.textSizet.textSize||this.size,this.phantom!!t.phantom,this.fontt.font||\\\\\\,this.fontFamilyt.fontFamily||\\\\\\,this.fontWeightt.fontWeight||\\\\\\,this.fontShapet.fontShape||\\\\\\,this.sizeMultiplierRthis.size-1,this.maxSizet.maxSize,this.minRuleThicknesst.minRuleThickness,this._fontMetricsvoid 0}var te.prototype;return t.extendfunction(t){var r{style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in t)t.hasOwnProperty(n)&&(rntn);return new e(r)},t.havingStylefunction(e){return this.stylee?this:this.extend({style:e,size:O(this.textSize,e)})},t.havingCrampedStylefunction(){return this.havingStyle(this.style.cramp())},t.havingSizefunction(e){return this.sizee&&this.textSizee?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:Re-1})},t.havingBaseStylefunction(t){tt||this.style.text();var rO(e.BASESIZE,t);return this.sizer&&this.textSizee.BASESIZE&&this.stylet?this:this.extend({style:t,size:r})},t.havingBaseSizingfunction(){var e;switch(this.style.id){case 4:case 5:e3;break;case 6:case 7:e1;break;default:e6}return this.extend({style:this.style.text(),size:e})},t.withColorfunction(e){return this.extend({color:e})},t.withPhantomfunction(){return this.extend({phantom:!0})},t.withFontfunction(e){return this.extend({font:e})},t.withTextFontFamilyfunction(e){return this.extend({fontFamily:e,font:\\\\\\})},t.withTextFontWeightfunction(e){return this.extend({fontWeight:e,font:\\\\\\})},t.withTextFontShapefunction(e){return this.extend({fontShape:e,font:\\\\\\})},t.sizingClassesfunction(e){return e.size!this.size?\\\sizing\\\,\\\reset-size\\\+e.size,\\\size\\\+this.size:},t.baseSizingClassesfunction(){return this.size!e.BASESIZE?\\\sizing\\\,\\\reset-size\\\+this.size,\\\size\\\+e.BASESIZE:},t.fontMetricsfunction(){return this._fontMetrics||(this._fontMetricsfunction(e){var t;if(!Nte>5?0:e>3?1:2){var rNt{cssEmPerMu:B.quadt/18};for(var n in B)B.hasOwnProperty(n)&&(rnBnt)}return Nt}(this.size)),this._fontMetrics},t.getColorfunction(){return this.phantom?\\\transparent\\\:this.color},e}();H.BASESIZE6;var EH,L{pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D{ex:!0,em:!0,mu:!0},Pfunction(e){return\\\string\\\!typeof e&&(ee.unit),e in L||e in D||\\\ex\\\e},Ffunction(e,t){var r;if(e.unit in L)rLe.unit/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if(\\\mu\\\e.unit)rt.fontMetrics().cssEmPerMu;else{var a;if(at.style.isTight()?t.havingStyle(t.style.text()):t,\\\ex\\\e.unit)ra.fontMetrics().xHeight;else{if(\\\em\\\!e.unit)throw new n(\\\Invalid unit: \\\+e.unit+\\\\\\);ra.fontMetrics().quad}a!t&&(r*a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},Vfunction(e){return+e.toFixed(4)+\\\em\\\},Gfunction(e){return e.filter((function(e){return e})).join(\\\ \\\)},Ufunction(e,t,r){if(this.classese||,this.attributes{},this.height0,this.depth0,this.maxFontSize0,this.styler||{},t){t.style.isTight()&&this.classes.push(\\\mtight\\\);var nt.getColor();n&&(this.style.colorn)}},Yfunction(e){var tdocument.createElement(e);for(var r in t.classNameG(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.stylerthis.styler);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributesn);for(var a0;a\u003Cthis.children.length;a++)t.appendChild(this.childrena.toNode());return t},Xfunction(e){var t\\\\u003C\\\+e;this.classes.length&&(t+ class\\\+l.escape(G(this.classes))+\\\);var r\\\\\\;for(var n in this.style)this.style.hasOwnProperty(n)&&(r+l.hyphenate(n)+\\\:\\\+this.stylen+\\\;\\\);for(var a in r&&(t+ style\\\+l.escape(r)+\\\),this.attributes)this.attributes.hasOwnProperty(a)&&(t+\\\ \\\+a+\\\+l.escape(this.attributesa)+\\\);t+\\\>\\\;for(var i0;i\u003Cthis.children.length;i++)t+this.childreni.toMarkup();return t+\\\\u003C/\\\+e+\\\>\\\},Wfunction(){function e(e,t,r,n){this.childrenvoid 0,this.attributesvoid 0,this.classesvoid 0,this.heightvoid 0,this.depthvoid 0,this.widthvoid 0,this.maxFontSizevoid 0,this.stylevoid 0,U.call(this,e,r,n),this.childrent||}var te.prototype;return t.setAttributefunction(e,t){this.attributeset},t.hasClassfunction(e){return l.contains(this.classes,e)},t.toNodefunction(){return Y.call(this,\\\span\\\)},t.toMarkupfunction(){return X.call(this,\\\span\\\)},e}(),_function(){function e(e,t,r,n){this.childrenvoid 0,this.attributesvoid 0,this.classesvoid 0,this.heightvoid 0,this.depthvoid 0,this.maxFontSizevoid 0,this.stylevoid 0,U.call(this,t,n),this.childrenr||,this.setAttribute(\\\href\\\,e)}var te.prototype;return t.setAttributefunction(e,t){this.attributeset},t.hasClassfunction(e){return l.contains(this.classes,e)},t.toNodefunction(){return Y.call(this,\\\a\\\)},t.toMarkupfunction(){return X.call(this,\\\a\\\)},e}(),jfunction(){function e(e,t,r){this.srcvoid 0,this.altvoid 0,this.classesvoid 0,this.heightvoid 0,this.depthvoid 0,this.maxFontSizevoid 0,this.stylevoid 0,this.altt,this.srce,this.classes\\\mord\\\,this.styler}var te.prototype;return t.hasClassfunction(e){return l.contains(this.classes,e)},t.toNodefunction(){var edocument.createElement(\\\img\\\);for(var t in e.srcthis.src,e.altthis.alt,e.className\\\mord\\\,this.style)this.style.hasOwnProperty(t)&&(e.styletthis.stylet);return e},t.toMarkupfunction(){var e\\\\u003Cimg src\\\+this.src+\\\ alt\\\+this.alt+\\\ \\\,t\\\\\\;for(var r in this.style)this.style.hasOwnProperty(r)&&(t+l.hyphenate(r)+\\\:\\\+this.styler+\\\;\\\);return t&&(e+ style\\\+l.escape(t)+\\\),e+\\\/>\\\},e}(),${\\\\\\\xee\\\:\\\\\\\u0131\\\\u0302\\\,\\\\\\\xef\\\:\\\\\\\u0131\\\\u0308\\\,\\\\\\\xed\\\:\\\\\\\u0131\\\\u0301\\\,\\\\\\\xec\\\:\\\\\\\u0131\\\\u0300\\\},Zfunction(){function e(e,t,r,n,a,i,o,s){this.textvoid 0,this.heightvoid 0,this.depthvoid 0,this.italicvoid 0,this.skewvoid 0,this.widthvoid 0,this.maxFontSizevoid 0,this.classesvoid 0,this.stylevoid 0,this.texte,this.heightt||0,this.depthr||0,this.italicn||0,this.skewa||0,this.widthi||0,this.classeso||,this.styles||{},this.maxFontSize0;var lfunction(e){for(var t0;t\u003Cw.length;t++)for(var rwt,n0;n\u003Cr.blocks.length;n++){var ar.blocksn;if(e>a0&&e\u003Ca1)return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+\\\_fallback\\\),/\\\\xee\\\\xef\\\\xed\\\\xec/.test(this.text)&&(this.text$this.text)}var te.prototype;return t.hasClassfunction(e){return l.contains(this.classes,e)},t.toNodefunction(){var edocument.createTextNode(this.text),tnull;for(var r in this.italic>0&&((tdocument.createElement(\\\span\\\)).style.marginRightV(this.italic)),this.classes.length>0&&((tt||document.createElement(\\\span\\\)).classNameG(this.classes)),this.style)this.style.hasOwnProperty(r)&&((tt||document.createElement(\\\span\\\)).stylerthis.styler);return t?(t.appendChild(e),t):e},t.toMarkupfunction(){var e!1,t\\\\u003Cspan\\\;this.classes.length&&(e!0,t+ class\\\,t+l.escape(G(this.classes)),t+\\\);var r\\\\\\;for(var n in this.italic>0&&(r+\\\margin-right:\\\+this.italic+\\\em;\\\),this.style)this.style.hasOwnProperty(n)&&(r+l.hyphenate(n)+\\\:\\\+this.stylen+\\\;\\\);r&&(e!0,t+ style\\\+l.escape(r)+\\\);var al.escape(this.text);return e?(t+\\\>\\\,t+a,t+\\\\u003C/span>\\\):a},e}(),Kfunction(){function e(e,t){this.childrenvoid 0,this.attributesvoid 0,this.childrene||,this.attributest||{}}var te.prototype;return t.toNodefunction(){var edocument.createElementNS(\\\http://www.w3.org/2000/svg\\\,\\\svg\\\);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributest);for(var r0;r\u003Cthis.children.length;r++)e.appendChild(this.childrenr.toNode());return e},t.toMarkupfunction(){var e\u003Csvg xmlns\\\http://www.w3.org/2000/svg\\\;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+\\\ \\\+t+\\\\\\+this.attributest+\\\\\\);e+\\\>\\\;for(var r0;r\u003Cthis.children.length;r++)e+this.childrenr.toMarkup();return e+\\\\u003C/svg>\\\},e}(),Jfunction(){function e(e,t){this.pathNamevoid 0,this.alternatevoid 0,this.pathNamee,this.alternatet}var te.prototype;return t.toNodefunction(){var edocument.createElementNS(\\\http://www.w3.org/2000/svg\\\,\\\path\\\);return this.alternate?e.setAttribute(\\\d\\\,this.alternate):e.setAttribute(\\\d\\\,zthis.pathName),e},t.toMarkupfunction(){return this.alternate?\\\\u003Cpath d\\\+this.alternate+\\\/>\\\:\\\\u003Cpath d\\\+zthis.pathName+\\\/>\\\},e}(),Qfunction(){function e(e){this.attributesvoid 0,this.attributese||{}}var te.prototype;return t.toNodefunction(){var edocument.createElementNS(\\\http://www.w3.org/2000/svg\\\,\\\line\\\);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributest);return e},t.toMarkupfunction(){var e\\\\u003Cline\\\;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+\\\ \\\+t+\\\\\\+this.attributest+\\\\\\);return e+\\\/>\\\},e}();function ee(e){if(e instanceof Z)return e;throw new Error(\\\Expected symbolNode but got \\\+String(e)+\\\.\\\)}var te{bin:1,close:1,inner:1,open:1,punct:1,rel:1},re{\\\accent-token\\\:1,mathord:1,\\\op-token\\\:1,spacing:1,textord:1},ne{math:{},text:{}},aene;function ie(e,t,r,n,a,i){neea{font:t,group:r,replace:n},i&&n&&(neenneea)}var oe\\\math\\\,se\\\text\\\,le\\\main\\\,he\\\ams\\\,me\\\accent-token\\\,ce\\\bin\\\,ue\\\close\\\,pe\\\inner\\\,de\\\mathord\\\,fe\\\op-token\\\,ge\\\open\\\,ve\\\punct\\\,be\\\rel\\\,ye\\\spacing\\\,xe\\\textord\\\;ie(oe,le,be,\\\\\\\u2261\\\,\\\\\\\\\\\equiv\\\,!0),ie(oe,le,be,\\\\\\\u227a\\\,\\\\\\\\\\\prec\\\,!0),ie(oe,le,be,\\\\\\\u227b\\\,\\\\\\\\\\\succ\\\,!0),ie(oe,le,be,\\\\\\\u223c\\\,\\\\\\\\\\\sim\\\,!0),ie(oe,le,be,\\\\\\\u22a5\\\,\\\\\\\\\\\perp\\\),ie(oe,le,be,\\\\\\\u2aaf\\\,\\\\\\\\\\\preceq\\\,!0),ie(oe,le,be,\\\\\\\u2ab0\\\,\\\\\\\\\\\succeq\\\,!0),ie(oe,le,be,\\\\\\\u2243\\\,\\\\\\\\\\\simeq\\\,!0),ie(oe,le,be,\\\\\\\u2223\\\,\\\\\\\\\\\mid\\\,!0),ie(oe,le,be,\\\\\\\u226a\\\,\\\\\\\\\\\ll\\\,!0),ie(oe,le,be,\\\\\\\u226b\\\,\\\\\\\\\\\gg\\\,!0),ie(oe,le,be,\\\\\\\u224d\\\,\\\\\\\\\\\asymp\\\,!0),ie(oe,le,be,\\\\\\\u2225\\\,\\\\\\\\\\\parallel\\\),ie(oe,le,be,\\\\\\\u22c8\\\,\\\\\\\\\\\bowtie\\\,!0),ie(oe,le,be,\\\\\\\u2323\\\,\\\\\\\\\\\smile\\\,!0),ie(oe,le,be,\\\\\\\u2291\\\,\\\\\\\\\\\sqsubseteq\\\,!0),ie(oe,le,be,\\\\\\\u2292\\\,\\\\\\\\\\\sqsupseteq\\\,!0),ie(oe,le,be,\\\\\\\u2250\\\,\\\\\\\\\\\doteq\\\,!0),ie(oe,le,be,\\\\\\\u2322\\\,\\\\\\\\\\\frown\\\,!0),ie(oe,le,be,\\\\\\\u220b\\\,\\\\\\\\\\\ni\\\,!0),ie(oe,le,be,\\\\\\\u221d\\\,\\\\\\\\\\\propto\\\,!0),ie(oe,le,be,\\\\\\\u22a2\\\,\\\\\\\\\\\vdash\\\,!0),ie(oe,le,be,\\\\\\\u22a3\\\,\\\\\\\\\\\dashv\\\,!0),ie(oe,le,be,\\\\\\\u220b\\\,\\\\\\\\\\\owns\\\),ie(oe,le,ve,\\\.\\\,\\\\\\\\\\\ldotp\\\),ie(oe,le,ve,\\\\\\\u22c5\\\,\\\\\\\\\\\cdotp\\\),ie(oe,le,xe,\\\#\\\,\\\\\\\\\\\#\\\),ie(se,le,xe,\\\#\\\,\\\\\\\\\\\#\\\),ie(oe,le,xe,\\\&\\\,\\\\\\\\\\\&\\\),ie(se,le,xe,\\\&\\\,\\\\\\\\\\\&\\\),ie(oe,le,xe,\\\\\\\u2135\\\,\\\\\\\\\\\aleph\\\,!0),ie(oe,le,xe,\\\\\\\u2200\\\,\\\\\\\\\\\forall\\\,!0),ie(oe,le,xe,\\\\\\\u210f\\\,\\\\\\\\\\\hbar\\\,!0),ie(oe,le,xe,\\\\\\\u2203\\\,\\\\\\\\\\\exists\\\,!0),ie(oe,le,xe,\\\\\\\u2207\\\,\\\\\\\\\\\nabla\\\,!0),ie(oe,le,xe,\\\\\\\u266d\\\,\\\\\\\\\\\flat\\\,!0),ie(oe,le,xe,\\\\\\\u2113\\\,\\\\\\\\\\\ell\\\,!0),ie(oe,le,xe,\\\\\\\u266e\\\,\\\\\\\\\\\natural\\\,!0),ie(oe,le,xe,\\\\\\\u2663\\\,\\\\\\\\\\\clubsuit\\\,!0),ie(oe,le,xe,\\\\\\\u2118\\\,\\\\\\\\\\\wp\\\,!0),ie(oe,le,xe,\\\\\\\u266f\\\,\\\\\\\\\\\sharp\\\,!0),ie(oe,le,xe,\\\\\\\u2662\\\,\\\\\\\\\\\diamondsuit\\\,!0),ie(oe,le,xe,\\\\\\\u211c\\\,\\\\\\\\\\\Re\\\,!0),ie(oe,le,xe,\\\\\\\u2661\\\,\\\\\\\\\\\heartsuit\\\,!0),ie(oe,le,xe,\\\\\\\u2111\\\,\\\\\\\\\\\Im\\\,!0),ie(oe,le,xe,\\\\\\\u2660\\\,\\\\\\\\\\\spadesuit\\\,!0),ie(oe,le,xe,\\\\\\\xa7\\\,\\\\\\\\\\\S\\\,!0),ie(se,le,xe,\\\\\\\xa7\\\,\\\\\\\\\\\S\\\),ie(oe,le,xe,\\\\\\\xb6\\\,\\\\\\\\\\\P\\\,!0),ie(se,le,xe,\\\\\\\xb6\\\,\\\\\\\\\\\P\\\),ie(oe,le,xe,\\\\\\\u2020\\\,\\\\\\\\\\\dag\\\),ie(se,le,xe,\\\\\\\u2020\\\,\\\\\\\\\\\dag\\\),ie(se,le,xe,\\\\\\\u2020\\\,\\\\\\\\\\\textdagger\\\),ie(oe,le,xe,\\\\\\\u2021\\\,\\\\\\\\\\\ddag\\\),ie(se,le,xe,\\\\\\\u2021\\\,\\\\\\\\\\\ddag\\\),ie(se,le,xe,\\\\\\\u2021\\\,\\\\\\\\\\\textdaggerdbl\\\),ie(oe,le,ue,\\\\\\\u23b1\\\,\\\\\\\\\\\rmoustache\\\,!0),ie(oe,le,ge,\\\\\\\u23b0\\\,\\\\\\\\\\\lmoustache\\\,!0),ie(oe,le,ue,\\\\\\\u27ef\\\,\\\\\\\\\\\rgroup\\\,!0),ie(oe,le,ge,\\\\\\\u27ee\\\,\\\\\\\\\\\lgroup\\\,!0),ie(oe,le,ce,\\\\\\\u2213\\\,\\\\\\\\\\\mp\\\,!0),ie(oe,le,ce,\\\\\\\u2296\\\,\\\\\\\\\\\ominus\\\,!0),ie(oe,le,ce,\\\\\\\u228e\\\,\\\\\\\\\\\uplus\\\,!0),ie(oe,le,ce,\\\\\\\u2293\\\,\\\\\\\\\\\sqcap\\\,!0),ie(oe,le,ce,\\\\\\\u2217\\\,\\\\\\\\\\\ast\\\),ie(oe,le,ce,\\\\\\\u2294\\\,\\\\\\\\\\\sqcup\\\,!0),ie(oe,le,ce,\\\\\\\u25ef\\\,\\\\\\\\\\\bigcirc\\\,!0),ie(oe,le,ce,\\\\\\\u2219\\\,\\\\\\\\\\\bullet\\\,!0),ie(oe,le,ce,\\\\\\\u2021\\\,\\\\\\\\\\\ddagger\\\),ie(oe,le,ce,\\\\\\\u2240\\\,\\\\\\\\\\\wr\\\,!0),ie(oe,le,ce,\\\\\\\u2a3f\\\,\\\\\\\\\\\amalg\\\),ie(oe,le,ce,\\\&\\\,\\\\\\\\\\\And\\\),ie(oe,le,be,\\\\\\\u27f5\\\,\\\\\\\\\\\longleftarrow\\\,!0),ie(oe,le,be,\\\\\\\u21d0\\\,\\\\\\\\\\\Leftarrow\\\,!0),ie(oe,le,be,\\\\\\\u27f8\\\,\\\\\\\\\\\Longleftarrow\\\,!0),ie(oe,le,be,\\\\\\\u27f6\\\,\\\\\\\\\\\longrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u21d2\\\,\\\\\\\\\\\Rightarrow\\\,!0),ie(oe,le,be,\\\\\\\u27f9\\\,\\\\\\\\\\\Longrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u2194\\\,\\\\\\\\\\\leftrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u27f7\\\,\\\\\\\\\\\longleftrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u21d4\\\,\\\\\\\\\\\Leftrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u27fa\\\,\\\\\\\\\\\Longleftrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u21a6\\\,\\\\\\\\\\\mapsto\\\,!0),ie(oe,le,be,\\\\\\\u27fc\\\,\\\\\\\\\\\longmapsto\\\,!0),ie(oe,le,be,\\\\\\\u2197\\\,\\\\\\\\\\\nearrow\\\,!0),ie(oe,le,be,\\\\\\\u21a9\\\,\\\\\\\\\\\hookleftarrow\\\,!0),ie(oe,le,be,\\\\\\\u21aa\\\,\\\\\\\\\\\hookrightarrow\\\,!0),ie(oe,le,be,\\\\\\\u2198\\\,\\\\\\\\\\\searrow\\\,!0),ie(oe,le,be,\\\\\\\u21bc\\\,\\\\\\\\\\\leftharpoonup\\\,!0),ie(oe,le,be,\\\\\\\u21c0\\\,\\\\\\\\\\\rightharpoonup\\\,!0),ie(oe,le,be,\\\\\\\u2199\\\,\\\\\\\\\\\swarrow\\\,!0),ie(oe,le,be,\\\\\\\u21bd\\\,\\\\\\\\\\\leftharpoondown\\\,!0),ie(oe,le,be,\\\\\\\u21c1\\\,\\\\\\\\\\\rightharpoondown\\\,!0),ie(oe,le,be,\\\\\\\u2196\\\,\\\\\\\\\\\nwarrow\\\,!0),ie(oe,le,be,\\\\\\\u21cc\\\,\\\\\\\\\\\rightleftharpoons\\\,!0),ie(oe,he,be,\\\\\\\u226e\\\,\\\\\\\\\\\nless\\\,!0),ie(oe,he,be,\\\\\\\ue010\\\,\\\\\\\\\\\@nleqslant\\\),ie(oe,he,be,\\\\\\\ue011\\\,\\\\\\\\\\\@nleqq\\\),ie(oe,he,be,\\\\\\\u2a87\\\,\\\\\\\\\\\lneq\\\,!0),ie(oe,he,be,\\\\\\\u2268\\\,\\\\\\\\\\\lneqq\\\,!0),ie(oe,he,be,\\\\\\\ue00c\\\,\\\\\\\\\\\@lvertneqq\\\),ie(oe,he,be,\\\\\\\u22e6\\\,\\\\\\\\\\\lnsim\\\,!0),ie(oe,he,be,\\\\\\\u2a89\\\,\\\\\\\\\\\lnapprox\\\,!0),ie(oe,he,be,\\\\\\\u2280\\\,\\\\\\\\\\\nprec\\\,!0),ie(oe,he,be,\\\\\\\u22e0\\\,\\\\\\\\\\\npreceq\\\,!0),ie(oe,he,be,\\\\\\\u22e8\\\,\\\\\\\\\\\precnsim\\\,!0),ie(oe,he,be,\\\\\\\u2ab9\\\,\\\\\\\\\\\precnapprox\\\,!0),ie(oe,he,be,\\\\\\\u2241\\\,\\\\\\\\\\\nsim\\\,!0),ie(oe,he,be,\\\\\\\ue006\\\,\\\\\\\\\\\@nshortmid\\\),ie(oe,he,be,\\\\\\\u2224\\\,\\\\\\\\\\\nmid\\\,!0),ie(oe,he,be,\\\\\\\u22ac\\\,\\\\\\\\\\\nvdash\\\,!0),ie(oe,he,be,\\\\\\\u22ad\\\,\\\\\\\\\\\nvDash\\\,!0),ie(oe,he,be,\\\\\\\u22ea\\\,\\\\\\\\\\\ntriangleleft\\\),ie(oe,he,be,\\\\\\\u22ec\\\,\\\\\\\\\\\ntrianglelefteq\\\,!0),ie(oe,he,be,\\\\\\\u228a\\\,\\\\\\\\\\\subsetneq\\\,!0),ie(oe,he,be,\\\\\\\ue01a\\\,\\\\\\\\\\\@varsubsetneq\\\),ie(oe,he,be,\\\\\\\u2acb\\\,\\\\\\\\\\\subsetneqq\\\,!0),ie(oe,he,be,\\\\\\\ue017\\\,\\\\\\\\\\\@varsubsetneqq\\\),ie(oe,he,be,\\\\\\\u226f\\\,\\\\\\\\\\\ngtr\\\,!0),ie(oe,he,be,\\\\\\\ue00f\\\,\\\\\\\\\\\@ngeqslant\\\),ie(oe,he,be,\\\\\\\ue00e\\\,\\\\\\\\\\\@ngeqq\\\),ie(oe,he,be,\\\\\\\u2a88\\\,\\\\\\\\\\\gneq\\\,!0),ie(oe,he,be,\\\\\\\u2269\\\,\\\\\\\\\\\gneqq\\\,!0),ie(oe,he,be,\\\\\\\ue00d\\\,\\\\\\\\\\\@gvertneqq\\\),ie(oe,he,be,\\\\\\\u22e7\\\,\\\\\\\\\\\gnsim\\\,!0),ie(oe,he,be,\\\\\\\u2a8a\\\,\\\\\\\\\\\gnapprox\\\,!0),ie(oe,he,be,\\\\\\\u2281\\\,\\\\\\\\\\\nsucc\\\,!0),ie(oe,he,be,\\\\\\\u22e1\\\,\\\\\\\\\\\nsucceq\\\,!0),ie(oe,he,be,\\\\\\\u22e9\\\,\\\\\\\\\\\succnsim\\\,!0),ie(oe,he,be,\\\\\\\u2aba\\\,\\\\\\\\\\\succnapprox\\\,!0),ie(oe,he,be,\\\\\\\u2246\\\,\\\\\\\\\\\ncong\\\,!0),ie(oe,he,be,\\\\\\\ue007\\\,\\\\\\\\\\\@nshortparallel\\\),ie(oe,he,be,\\\\\\\u2226\\\,\\\\\\\\\\\nparallel\\\,!0),ie(oe,he,be,\\\\\\\u22af\\\,\\\\\\\\\\\nVDash\\\,!0),ie(oe,he,be,\\\\\\\u22eb\\\,\\\\\\\\\\\ntriangleright\\\),ie(oe,he,be,\\\\\\\u22ed\\\,\\\\\\\\\\\ntrianglerighteq\\\,!0),ie(oe,he,be,\\\\\\\ue018\\\,\\\\\\\\\\\@nsupseteqq\\\),ie(oe,he,be,\\\\\\\u228b\\\,\\\\\\\\\\\supsetneq\\\,!0),ie(oe,he,be,\\\\\\\ue01b\\\,\\\\\\\\\\\@varsupsetneq\\\),ie(oe,he,be,\\\\\\\u2acc\\\,\\\\\\\\\\\supsetneqq\\\,!0),ie(oe,he,be,\\\\\\\ue019\\\,\\\\\\\\\\\@varsupsetneqq\\\),ie(oe,he,be,\\\\\\\u22ae\\\,\\\\\\\\\\\nVdash\\\,!0),ie(oe,he,be,\\\\\\\u2ab5\\\,\\\\\\\\\\\precneqq\\\,!0),ie(oe,he,be,\\\\\\\u2ab6\\\,\\\\\\\\\\\succneqq\\\,!0),ie(oe,he,be,\\\\\\\ue016\\\,\\\\\\\\\\\@nsubseteqq\\\),ie(oe,he,ce,\\\\\\\u22b4\\\,\\\\\\\\\\\unlhd\\\),ie(oe,he,ce,\\\\\\\u22b5\\\,\\\\\\\\\\\unrhd\\\),ie(oe,he,be,\\\\\\\u219a\\\,\\\\\\\\\\\nleftarrow\\\,!0),ie(oe,he,be,\\\\\\\u219b\\\,\\\\\\\\\\\nrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21cd\\\,\\\\\\\\\\\nLeftarrow\\\,!0),ie(oe,he,be,\\\\\\\u21cf\\\,\\\\\\\\\\\nRightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21ae\\\,\\\\\\\\\\\nleftrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21ce\\\,\\\\\\\\\\\nLeftrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u25b3\\\,\\\\\\\\\\\vartriangle\\\),ie(oe,he,xe,\\\\\\\u210f\\\,\\\\\\\\\\\hslash\\\),ie(oe,he,xe,\\\\\\\u25bd\\\,\\\\\\\\\\\triangledown\\\),ie(oe,he,xe,\\\\\\\u25ca\\\,\\\\\\\\\\\lozenge\\\),ie(oe,he,xe,\\\\\\\u24c8\\\,\\\\\\\\\\\circledS\\\),ie(oe,he,xe,\\\\\\\xae\\\,\\\\\\\\\\\circledR\\\),ie(se,he,xe,\\\\\\\xae\\\,\\\\\\\\\\\circledR\\\),ie(oe,he,xe,\\\\\\\u2221\\\,\\\\\\\\\\\measuredangle\\\,!0),ie(oe,he,xe,\\\\\\\u2204\\\,\\\\\\\\\\\nexists\\\),ie(oe,he,xe,\\\\\\\u2127\\\,\\\\\\\\\\\mho\\\),ie(oe,he,xe,\\\\\\\u2132\\\,\\\\\\\\\\\Finv\\\,!0),ie(oe,he,xe,\\\\\\\u2141\\\,\\\\\\\\\\\Game\\\,!0),ie(oe,he,xe,\\\\\\\u2035\\\,\\\\\\\\\\\backprime\\\),ie(oe,he,xe,\\\\\\\u25b2\\\,\\\\\\\\\\\blacktriangle\\\),ie(oe,he,xe,\\\\\\\u25bc\\\,\\\\\\\\\\\blacktriangledown\\\),ie(oe,he,xe,\\\\\\\u25a0\\\,\\\\\\\\\\\blacksquare\\\),ie(oe,he,xe,\\\\\\\u29eb\\\,\\\\\\\\\\\blacklozenge\\\),ie(oe,he,xe,\\\\\\\u2605\\\,\\\\\\\\\\\bigstar\\\),ie(oe,he,xe,\\\\\\\u2222\\\,\\\\\\\\\\\sphericalangle\\\,!0),ie(oe,he,xe,\\\\\\\u2201\\\,\\\\\\\\\\\complement\\\,!0),ie(oe,he,xe,\\\\\\\xf0\\\,\\\\\\\\\\\eth\\\,!0),ie(se,le,xe,\\\\\\\xf0\\\,\\\\\\\xf0\\\),ie(oe,he,xe,\\\\\\\u2571\\\,\\\\\\\\\\\diagup\\\),ie(oe,he,xe,\\\\\\\u2572\\\,\\\\\\\\\\\diagdown\\\),ie(oe,he,xe,\\\\\\\u25a1\\\,\\\\\\\\\\\square\\\),ie(oe,he,xe,\\\\\\\u25a1\\\,\\\\\\\\\\\Box\\\),ie(oe,he,xe,\\\\\\\u25ca\\\,\\\\\\\\\\\Diamond\\\),ie(oe,he,xe,\\\\\\\xa5\\\,\\\\\\\\\\\yen\\\,!0),ie(se,he,xe,\\\\\\\xa5\\\,\\\\\\\\\\\yen\\\,!0),ie(oe,he,xe,\\\\\\\u2713\\\,\\\\\\\\\\\checkmark\\\,!0),ie(se,he,xe,\\\\\\\u2713\\\,\\\\\\\\\\\checkmark\\\),ie(oe,he,xe,\\\\\\\u2136\\\,\\\\\\\\\\\beth\\\,!0),ie(oe,he,xe,\\\\\\\u2138\\\,\\\\\\\\\\\daleth\\\,!0),ie(oe,he,xe,\\\\\\\u2137\\\,\\\\\\\\\\\gimel\\\,!0),ie(oe,he,xe,\\\\\\\u03dd\\\,\\\\\\\\\\\digamma\\\,!0),ie(oe,he,xe,\\\\\\\u03f0\\\,\\\\\\\\\\\varkappa\\\),ie(oe,he,ge,\\\\\\\u250c\\\,\\\\\\\\\\\@ulcorner\\\,!0),ie(oe,he,ue,\\\\\\\u2510\\\,\\\\\\\\\\\@urcorner\\\,!0),ie(oe,he,ge,\\\\\\\u2514\\\,\\\\\\\\\\\@llcorner\\\,!0),ie(oe,he,ue,\\\\\\\u2518\\\,\\\\\\\\\\\@lrcorner\\\,!0),ie(oe,he,be,\\\\\\\u2266\\\,\\\\\\\\\\\leqq\\\,!0),ie(oe,he,be,\\\\\\\u2a7d\\\,\\\\\\\\\\\leqslant\\\,!0),ie(oe,he,be,\\\\\\\u2a95\\\,\\\\\\\\\\\eqslantless\\\,!0),ie(oe,he,be,\\\\\\\u2272\\\,\\\\\\\\\\\lesssim\\\,!0),ie(oe,he,be,\\\\\\\u2a85\\\,\\\\\\\\\\\lessapprox\\\,!0),ie(oe,he,be,\\\\\\\u224a\\\,\\\\\\\\\\\approxeq\\\,!0),ie(oe,he,ce,\\\\\\\u22d6\\\,\\\\\\\\\\\lessdot\\\),ie(oe,he,be,\\\\\\\u22d8\\\,\\\\\\\\\\\lll\\\,!0),ie(oe,he,be,\\\\\\\u2276\\\,\\\\\\\\\\\lessgtr\\\,!0),ie(oe,he,be,\\\\\\\u22da\\\,\\\\\\\\\\\lesseqgtr\\\,!0),ie(oe,he,be,\\\\\\\u2a8b\\\,\\\\\\\\\\\lesseqqgtr\\\,!0),ie(oe,he,be,\\\\\\\u2251\\\,\\\\\\\\\\\doteqdot\\\),ie(oe,he,be,\\\\\\\u2253\\\,\\\\\\\\\\\risingdotseq\\\,!0),ie(oe,he,be,\\\\\\\u2252\\\,\\\\\\\\\\\fallingdotseq\\\,!0),ie(oe,he,be,\\\\\\\u223d\\\,\\\\\\\\\\\backsim\\\,!0),ie(oe,he,be,\\\\\\\u22cd\\\,\\\\\\\\\\\backsimeq\\\,!0),ie(oe,he,be,\\\\\\\u2ac5\\\,\\\\\\\\\\\subseteqq\\\,!0),ie(oe,he,be,\\\\\\\u22d0\\\,\\\\\\\\\\\Subset\\\,!0),ie(oe,he,be,\\\\\\\u228f\\\,\\\\\\\\\\\sqsubset\\\,!0),ie(oe,he,be,\\\\\\\u227c\\\,\\\\\\\\\\\preccurlyeq\\\,!0),ie(oe,he,be,\\\\\\\u22de\\\,\\\\\\\\\\\curlyeqprec\\\,!0),ie(oe,he,be,\\\\\\\u227e\\\,\\\\\\\\\\\precsim\\\,!0),ie(oe,he,be,\\\\\\\u2ab7\\\,\\\\\\\\\\\precapprox\\\,!0),ie(oe,he,be,\\\\\\\u22b2\\\,\\\\\\\\\\\vartriangleleft\\\),ie(oe,he,be,\\\\\\\u22b4\\\,\\\\\\\\\\\trianglelefteq\\\),ie(oe,he,be,\\\\\\\u22a8\\\,\\\\\\\\\\\vDash\\\,!0),ie(oe,he,be,\\\\\\\u22aa\\\,\\\\\\\\\\\Vvdash\\\,!0),ie(oe,he,be,\\\\\\\u2323\\\,\\\\\\\\\\\smallsmile\\\),ie(oe,he,be,\\\\\\\u2322\\\,\\\\\\\\\\\smallfrown\\\),ie(oe,he,be,\\\\\\\u224f\\\,\\\\\\\\\\\bumpeq\\\,!0),ie(oe,he,be,\\\\\\\u224e\\\,\\\\\\\\\\\Bumpeq\\\,!0),ie(oe,he,be,\\\\\\\u2267\\\,\\\\\\\\\\\geqq\\\,!0),ie(oe,he,be,\\\\\\\u2a7e\\\,\\\\\\\\\\\geqslant\\\,!0),ie(oe,he,be,\\\\\\\u2a96\\\,\\\\\\\\\\\eqslantgtr\\\,!0),ie(oe,he,be,\\\\\\\u2273\\\,\\\\\\\\\\\gtrsim\\\,!0),ie(oe,he,be,\\\\\\\u2a86\\\,\\\\\\\\\\\gtrapprox\\\,!0),ie(oe,he,ce,\\\\\\\u22d7\\\,\\\\\\\\\\\gtrdot\\\),ie(oe,he,be,\\\\\\\u22d9\\\,\\\\\\\\\\\ggg\\\,!0),ie(oe,he,be,\\\\\\\u2277\\\,\\\\\\\\\\\gtrless\\\,!0),ie(oe,he,be,\\\\\\\u22db\\\,\\\\\\\\\\\gtreqless\\\,!0),ie(oe,he,be,\\\\\\\u2a8c\\\,\\\\\\\\\\\gtreqqless\\\,!0),ie(oe,he,be,\\\\\\\u2256\\\,\\\\\\\\\\\eqcirc\\\,!0),ie(oe,he,be,\\\\\\\u2257\\\,\\\\\\\\\\\circeq\\\,!0),ie(oe,he,be,\\\\\\\u225c\\\,\\\\\\\\\\\triangleq\\\,!0),ie(oe,he,be,\\\\\\\u223c\\\,\\\\\\\\\\\thicksim\\\),ie(oe,he,be,\\\\\\\u2248\\\,\\\\\\\\\\\thickapprox\\\),ie(oe,he,be,\\\\\\\u2ac6\\\,\\\\\\\\\\\supseteqq\\\,!0),ie(oe,he,be,\\\\\\\u22d1\\\,\\\\\\\\\\\Supset\\\,!0),ie(oe,he,be,\\\\\\\u2290\\\,\\\\\\\\\\\sqsupset\\\,!0),ie(oe,he,be,\\\\\\\u227d\\\,\\\\\\\\\\\succcurlyeq\\\,!0),ie(oe,he,be,\\\\\\\u22df\\\,\\\\\\\\\\\curlyeqsucc\\\,!0),ie(oe,he,be,\\\\\\\u227f\\\,\\\\\\\\\\\succsim\\\,!0),ie(oe,he,be,\\\\\\\u2ab8\\\,\\\\\\\\\\\succapprox\\\,!0),ie(oe,he,be,\\\\\\\u22b3\\\,\\\\\\\\\\\vartriangleright\\\),ie(oe,he,be,\\\\\\\u22b5\\\,\\\\\\\\\\\trianglerighteq\\\),ie(oe,he,be,\\\\\\\u22a9\\\,\\\\\\\\\\\Vdash\\\,!0),ie(oe,he,be,\\\\\\\u2223\\\,\\\\\\\\\\\shortmid\\\),ie(oe,he,be,\\\\\\\u2225\\\,\\\\\\\\\\\shortparallel\\\),ie(oe,he,be,\\\\\\\u226c\\\,\\\\\\\\\\\between\\\,!0),ie(oe,he,be,\\\\\\\u22d4\\\,\\\\\\\\\\\pitchfork\\\,!0),ie(oe,he,be,\\\\\\\u221d\\\,\\\\\\\\\\\varpropto\\\),ie(oe,he,be,\\\\\\\u25c0\\\,\\\\\\\\\\\blacktriangleleft\\\),ie(oe,he,be,\\\\\\\u2234\\\,\\\\\\\\\\\therefore\\\,!0),ie(oe,he,be,\\\\\\\u220d\\\,\\\\\\\\\\\backepsilon\\\),ie(oe,he,be,\\\\\\\u25b6\\\,\\\\\\\\\\\blacktriangleright\\\),ie(oe,he,be,\\\\\\\u2235\\\,\\\\\\\\\\\because\\\,!0),ie(oe,he,be,\\\\\\\u22d8\\\,\\\\\\\\\\\llless\\\),ie(oe,he,be,\\\\\\\u22d9\\\,\\\\\\\\\\\gggtr\\\),ie(oe,he,ce,\\\\\\\u22b2\\\,\\\\\\\\\\\lhd\\\),ie(oe,he,ce,\\\\\\\u22b3\\\,\\\\\\\\\\\rhd\\\),ie(oe,he,be,\\\\\\\u2242\\\,\\\\\\\\\\\eqsim\\\,!0),ie(oe,le,be,\\\\\\\u22c8\\\,\\\\\\\\\\\Join\\\),ie(oe,he,be,\\\\\\\u2251\\\,\\\\\\\\\\\Doteq\\\,!0),ie(oe,he,ce,\\\\\\\u2214\\\,\\\\\\\\\\\dotplus\\\,!0),ie(oe,he,ce,\\\\\\\u2216\\\,\\\\\\\\\\\smallsetminus\\\),ie(oe,he,ce,\\\\\\\u22d2\\\,\\\\\\\\\\\Cap\\\,!0),ie(oe,he,ce,\\\\\\\u22d3\\\,\\\\\\\\\\\Cup\\\,!0),ie(oe,he,ce,\\\\\\\u2a5e\\\,\\\\\\\\\\\doublebarwedge\\\,!0),ie(oe,he,ce,\\\\\\\u229f\\\,\\\\\\\\\\\boxminus\\\,!0),ie(oe,he,ce,\\\\\\\u229e\\\,\\\\\\\\\\\boxplus\\\,!0),ie(oe,he,ce,\\\\\\\u22c7\\\,\\\\\\\\\\\divideontimes\\\,!0),ie(oe,he,ce,\\\\\\\u22c9\\\,\\\\\\\\\\\ltimes\\\,!0),ie(oe,he,ce,\\\\\\\u22ca\\\,\\\\\\\\\\\rtimes\\\,!0),ie(oe,he,ce,\\\\\\\u22cb\\\,\\\\\\\\\\\leftthreetimes\\\,!0),ie(oe,he,ce,\\\\\\\u22cc\\\,\\\\\\\\\\\rightthreetimes\\\,!0),ie(oe,he,ce,\\\\\\\u22cf\\\,\\\\\\\\\\\curlywedge\\\,!0),ie(oe,he,ce,\\\\\\\u22ce\\\,\\\\\\\\\\\curlyvee\\\,!0),ie(oe,he,ce,\\\\\\\u229d\\\,\\\\\\\\\\\circleddash\\\,!0),ie(oe,he,ce,\\\\\\\u229b\\\,\\\\\\\\\\\circledast\\\,!0),ie(oe,he,ce,\\\\\\\u22c5\\\,\\\\\\\\\\\centerdot\\\),ie(oe,he,ce,\\\\\\\u22ba\\\,\\\\\\\\\\\intercal\\\,!0),ie(oe,he,ce,\\\\\\\u22d2\\\,\\\\\\\\\\\doublecap\\\),ie(oe,he,ce,\\\\\\\u22d3\\\,\\\\\\\\\\\doublecup\\\),ie(oe,he,ce,\\\\\\\u22a0\\\,\\\\\\\\\\\boxtimes\\\,!0),ie(oe,he,be,\\\\\\\u21e2\\\,\\\\\\\\\\\dashrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21e0\\\,\\\\\\\\\\\dashleftarrow\\\,!0),ie(oe,he,be,\\\\\\\u21c7\\\,\\\\\\\\\\\leftleftarrows\\\,!0),ie(oe,he,be,\\\\\\\u21c6\\\,\\\\\\\\\\\leftrightarrows\\\,!0),ie(oe,he,be,\\\\\\\u21da\\\,\\\\\\\\\\\Lleftarrow\\\,!0),ie(oe,he,be,\\\\\\\u219e\\\,\\\\\\\\\\\twoheadleftarrow\\\,!0),ie(oe,he,be,\\\\\\\u21a2\\\,\\\\\\\\\\\leftarrowtail\\\,!0),ie(oe,he,be,\\\\\\\u21ab\\\,\\\\\\\\\\\looparrowleft\\\,!0),ie(oe,he,be,\\\\\\\u21cb\\\,\\\\\\\\\\\leftrightharpoons\\\,!0),ie(oe,he,be,\\\\\\\u21b6\\\,\\\\\\\\\\\curvearrowleft\\\,!0),ie(oe,he,be,\\\\\\\u21ba\\\,\\\\\\\\\\\circlearrowleft\\\,!0),ie(oe,he,be,\\\\\\\u21b0\\\,\\\\\\\\\\\Lsh\\\,!0),ie(oe,he,be,\\\\\\\u21c8\\\,\\\\\\\\\\\upuparrows\\\,!0),ie(oe,he,be,\\\\\\\u21bf\\\,\\\\\\\\\\\upharpoonleft\\\,!0),ie(oe,he,be,\\\\\\\u21c3\\\,\\\\\\\\\\\downharpoonleft\\\,!0),ie(oe,le,be,\\\\\\\u22b6\\\,\\\\\\\\\\\origof\\\,!0),ie(oe,le,be,\\\\\\\u22b7\\\,\\\\\\\\\\\imageof\\\,!0),ie(oe,he,be,\\\\\\\u22b8\\\,\\\\\\\\\\\multimap\\\,!0),ie(oe,he,be,\\\\\\\u21ad\\\,\\\\\\\\\\\leftrightsquigarrow\\\,!0),ie(oe,he,be,\\\\\\\u21c9\\\,\\\\\\\\\\\rightrightarrows\\\,!0),ie(oe,he,be,\\\\\\\u21c4\\\,\\\\\\\\\\\rightleftarrows\\\,!0),ie(oe,he,be,\\\\\\\u21a0\\\,\\\\\\\\\\\twoheadrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21a3\\\,\\\\\\\\\\\rightarrowtail\\\,!0),ie(oe,he,be,\\\\\\\u21ac\\\,\\\\\\\\\\\looparrowright\\\,!0),ie(oe,he,be,\\\\\\\u21b7\\\,\\\\\\\\\\\curvearrowright\\\,!0),ie(oe,he,be,\\\\\\\u21bb\\\,\\\\\\\\\\\circlearrowright\\\,!0),ie(oe,he,be,\\\\\\\u21b1\\\,\\\\\\\\\\\Rsh\\\,!0),ie(oe,he,be,\\\\\\\u21ca\\\,\\\\\\\\\\\downdownarrows\\\,!0),ie(oe,he,be,\\\\\\\u21be\\\,\\\\\\\\\\\upharpoonright\\\,!0),ie(oe,he,be,\\\\\\\u21c2\\\,\\\\\\\\\\\downharpoonright\\\,!0),ie(oe,he,be,\\\\\\\u21dd\\\,\\\\\\\\\\\rightsquigarrow\\\,!0),ie(oe,he,be,\\\\\\\u21dd\\\,\\\\\\\\\\\leadsto\\\),ie(oe,he,be,\\\\\\\u21db\\\,\\\\\\\\\\\Rrightarrow\\\,!0),ie(oe,he,be,\\\\\\\u21be\\\,\\\\\\\\\\\restriction\\\),ie(oe,le,xe,\\\\\\\u2018\\\,\\\`\\\),ie(oe,le,xe,\\\$\\\,\\\\\\\\\\\$\\\),ie(se,le,xe,\\\$\\\,\\\\\\\\\\\$\\\),ie(se,le,xe,\\\$\\\,\\\\\\\\\\\textdollar\\\),ie(oe,le,xe,\\\%\\\,\\\\\\\\\\\%\\\),ie(se,le,xe,\\\%\\\,\\\\\\\\\\\%\\\),ie(oe,le,xe,\\\_\\\,\\\\\\\\\\\_\\\),ie(se,le,xe,\\\_\\\,\\\\\\\\\\\_\\\),ie(se,le,xe,\\\_\\\,\\\\\\\\\\\textunderscore\\\),ie(oe,le,xe,\\\\\\\u2220\\\,\\\\\\\\\\\angle\\\,!0),ie(oe,le,xe,\\\\\\\u221e\\\,\\\\\\\\\\\infty\\\,!0),ie(oe,le,xe,\\\\\\\u2032\\\,\\\\\\\\\\\prime\\\),ie(oe,le,xe,\\\\\\\u25b3\\\,\\\\\\\\\\\triangle\\\),ie(oe,le,xe,\\\\\\\u0393\\\,\\\\\\\\\\\Gamma\\\,!0),ie(oe,le,xe,\\\\\\\u0394\\\,\\\\\\\\\\\Delta\\\,!0),ie(oe,le,xe,\\\\\\\u0398\\\,\\\\\\\\\\\Theta\\\,!0),ie(oe,le,xe,\\\\\\\u039b\\\,\\\\\\\\\\\Lambda\\\,!0),ie(oe,le,xe,\\\\\\\u039e\\\,\\\\\\\\\\\Xi\\\,!0),ie(oe,le,xe,\\\\\\\u03a0\\\,\\\\\\\\\\\Pi\\\,!0),ie(oe,le,xe,\\\\\\\u03a3\\\,\\\\\\\\\\\Sigma\\\,!0),ie(oe,le,xe,\\\\\\\u03a5\\\,\\\\\\\\\\\Upsilon\\\,!0),ie(oe,le,xe,\\\\\\\u03a6\\\,\\\\\\\\\\\Phi\\\,!0),ie(oe,le,xe,\\\\\\\u03a8\\\,\\\\\\\\\\\Psi\\\,!0),ie(oe,le,xe,\\\\\\\u03a9\\\,\\\\\\\\\\\Omega\\\,!0),ie(oe,le,xe,\\\A\\\,\\\\\\\u0391\\\),ie(oe,le,xe,\\\B\\\,\\\\\\\u0392\\\),ie(oe,le,xe,\\\E\\\,\\\\\\\u0395\\\),ie(oe,le,xe,\\\Z\\\,\\\\\\\u0396\\\),ie(oe,le,xe,\\\H\\\,\\\\\\\u0397\\\),ie(oe,le,xe,\\\I\\\,\\\\\\\u0399\\\),ie(oe,le,xe,\\\K\\\,\\\\\\\u039a\\\),ie(oe,le,xe,\\\M\\\,\\\\\\\u039c\\\),ie(oe,le,xe,\\\N\\\,\\\\\\\u039d\\\),ie(oe,le,xe,\\\O\\\,\\\\\\\u039f\\\),ie(oe,le,xe,\\\P\\\,\\\\\\\u03a1\\\),ie(oe,le,xe,\\\T\\\,\\\\\\\u03a4\\\),ie(oe,le,xe,\\\X\\\,\\\\\\\u03a7\\\),ie(oe,le,xe,\\\\\\\xac\\\,\\\\\\\\\\\neg\\\,!0),ie(oe,le,xe,\\\\\\\xac\\\,\\\\\\\\\\\lnot\\\),ie(oe,le,xe,\\\\\\\u22a4\\\,\\\\\\\\\\\top\\\),ie(oe,le,xe,\\\\\\\u22a5\\\,\\\\\\\\\\\bot\\\),ie(oe,le,xe,\\\\\\\u2205\\\,\\\\\\\\\\\emptyset\\\),ie(oe,he,xe,\\\\\\\u2205\\\,\\\\\\\\\\\varnothing\\\),ie(oe,le,de,\\\\\\\u03b1\\\,\\\\\\\\\\\alpha\\\,!0),ie(oe,le,de,\\\\\\\u03b2\\\,\\\\\\\\\\\beta\\\,!0),ie(oe,le,de,\\\\\\\u03b3\\\,\\\\\\\\\\\gamma\\\,!0),ie(oe,le,de,\\\\\\\u03b4\\\,\\\\\\\\\\\delta\\\,!0),ie(oe,le,de,\\\\\\\u03f5\\\,\\\\\\\\\\\epsilon\\\,!0),ie(oe,le,de,\\\\\\\u03b6\\\,\\\\\\\\\\\zeta\\\,!0),ie(oe,le,de,\\\\\\\u03b7\\\,\\\\\\\\\\\eta\\\,!0),ie(oe,le,de,\\\\\\\u03b8\\\,\\\\\\\\\\\theta\\\,!0),ie(oe,le,de,\\\\\\\u03b9\\\,\\\\\\\\\\\iota\\\,!0),ie(oe,le,de,\\\\\\\u03ba\\\,\\\\\\\\\\\kappa\\\,!0),ie(oe,le,de,\\\\\\\u03bb\\\,\\\\\\\\\\\lambda\\\,!0),ie(oe,le,de,\\\\\\\u03bc\\\,\\\\\\\\\\\mu\\\,!0),ie(oe,le,de,\\\\\\\u03bd\\\,\\\\\\\\\\\nu\\\,!0),ie(oe,le,de,\\\\\\\u03be\\\,\\\\\\\\\\\xi\\\,!0),ie(oe,le,de,\\\\\\\u03bf\\\,\\\\\\\\\\\omicron\\\,!0),ie(oe,le,de,\\\\\\\u03c0\\\,\\\\\\\\\\\pi\\\,!0),ie(oe,le,de,\\\\\\\u03c1\\\,\\\\\\\\\\\rho\\\,!0),ie(oe,le,de,\\\\\\\u03c3\\\,\\\\\\\\\\\sigma\\\,!0),ie(oe,le,de,\\\\\\\u03c4\\\,\\\\\\\\\\\tau\\\,!0),ie(oe,le,de,\\\\\\\u03c5\\\,\\\\\\\\\\\upsilon\\\,!0),ie(oe,le,de,\\\\\\\u03d5\\\,\\\\\\\\\\\phi\\\,!0),ie(oe,le,de,\\\\\\\u03c7\\\,\\\\\\\\\\\chi\\\,!0),ie(oe,le,de,\\\\\\\u03c8\\\,\\\\\\\\\\\psi\\\,!0),ie(oe,le,de,\\\\\\\u03c9\\\,\\\\\\\\\\\omega\\\,!0),ie(oe,le,de,\\\\\\\u03b5\\\,\\\\\\\\\\\varepsilon\\\,!0),ie(oe,le,de,\\\\\\\u03d1\\\,\\\\\\\\\\\vartheta\\\,!0),ie(oe,le,de,\\\\\\\u03d6\\\,\\\\\\\\\\\varpi\\\,!0),ie(oe,le,de,\\\\\\\u03f1\\\,\\\\\\\\\\\varrho\\\,!0),ie(oe,le,de,\\\\\\\u03c2\\\,\\\\\\\\\\\varsigma\\\,!0),ie(oe,le,de,\\\\\\\u03c6\\\,\\\\\\\\\\\varphi\\\,!0),ie(oe,le,ce,\\\\\\\u2217\\\,\\\*\\\,!0),ie(oe,le,ce,\\\+\\\,\\\+\\\),ie(oe,le,ce,\\\\\\\u2212\\\,\\\-\\\,!0),ie(oe,le,ce,\\\\\\\u22c5\\\,\\\\\\\\\\\cdot\\\,!0),ie(oe,le,ce,\\\\\\\u2218\\\,\\\\\\\\\\\circ\\\,!0),ie(oe,le,ce,\\\\\\\xf7\\\,\\\\\\\\\\\div\\\,!0),ie(oe,le,ce,\\\\\\\xb1\\\,\\\\\\\\\\\pm\\\,!0),ie(oe,le,ce,\\\\\\\xd7\\\,\\\\\\\\\\\times\\\,!0),ie(oe,le,ce,\\\\\\\u2229\\\,\\\\\\\\\\\cap\\\,!0),ie(oe,le,ce,\\\\\\\u222a\\\,\\\\\\\\\\\cup\\\,!0),ie(oe,le,ce,\\\\\\\u2216\\\,\\\\\\\\\\\setminus\\\,!0),ie(oe,le,ce,\\\\\\\u2227\\\,\\\\\\\\\\\land\\\),ie(oe,le,ce,\\\\\\\u2228\\\,\\\\\\\\\\\lor\\\),ie(oe,le,ce,\\\\\\\u2227\\\,\\\\\\\\\\\wedge\\\,!0),ie(oe,le,ce,\\\\\\\u2228\\\,\\\\\\\\\\\vee\\\,!0),ie(oe,le,xe,\\\\\\\u221a\\\,\\\\\\\\\\\surd\\\),ie(oe,le,ge,\\\\\\\u27e8\\\,\\\\\\\\\\\langle\\\,!0),ie(oe,le,ge,\\\\\\\u2223\\\,\\\\\\\\\\\lvert\\\),ie(oe,le,ge,\\\\\\\u2225\\\,\\\\\\\\\\\lVert\\\),ie(oe,le,ue,\\\?\\\,\\\?\\\),ie(oe,le,ue,\\\!\\\,\\\!\\\),ie(oe,le,ue,\\\\\\\u27e9\\\,\\\\\\\\\\\rangle\\\,!0),ie(oe,le,ue,\\\\\\\u2223\\\,\\\\\\\\\\\rvert\\\),ie(oe,le,ue,\\\\\\\u2225\\\,\\\\\\\\\\\rVert\\\),ie(oe,le,be,\\\\\\,\\\\\\),ie(oe,le,be,\\\:\\\,\\\:\\\),ie(oe,le,be,\\\\\\\u2248\\\,\\\\\\\\\\\approx\\\,!0),ie(oe,le,be,\\\\\\\u2245\\\,\\\\\\\\\\\cong\\\,!0),ie(oe,le,be,\\\\\\\u2265\\\,\\\\\\\\\\\ge\\\),ie(oe,le,be,\\\\\\\u2265\\\,\\\\\\\\\\\geq\\\,!0),ie(oe,le,be,\\\\\\\u2190\\\,\\\\\\\\\\\gets\\\),ie(oe,le,be,\\\>\\\,\\\\\\\\\\\gt\\\,!0),ie(oe,le,be,\\\\\\\u2208\\\,\\\\\\\\\\\in\\\,!0),ie(oe,le,be,\\\\\\\ue020\\\,\\\\\\\\\\\@not\\\),ie(oe,le,be,\\\\\\\u2282\\\,\\\\\\\\\\\subset\\\,!0),ie(oe,le,be,\\\\\\\u2283\\\,\\\\\\\\\\\supset\\\,!0),ie(oe,le,be,\\\\\\\u2286\\\,\\\\\\\\\\\subseteq\\\,!0),ie(oe,le,be,\\\\\\\u2287\\\,\\\\\\\\\\\supseteq\\\,!0),ie(oe,he,be,\\\\\\\u2288\\\,\\\\\\\\\\\nsubseteq\\\,!0),ie(oe,he,be,\\\\\\\u2289\\\,\\\\\\\\\\\nsupseteq\\\,!0),ie(oe,le,be,\\\\\\\u22a8\\\,\\\\\\\\\\\models\\\),ie(oe,le,be,\\\\\\\u2190\\\,\\\\\\\\\\\leftarrow\\\,!0),ie(oe,le,be,\\\\\\\u2264\\\,\\\\\\\\\\\le\\\),ie(oe,le,be,\\\\\\\u2264\\\,\\\\\\\\\\\leq\\\,!0),ie(oe,le,be,\\\\u003C\\\,\\\\\\\\\\\lt\\\,!0),ie(oe,le,be,\\\\\\\u2192\\\,\\\\\\\\\\\rightarrow\\\,!0),ie(oe,le,be,\\\\\\\u2192\\\,\\\\\\\\\\\to\\\),ie(oe,he,be,\\\\\\\u2271\\\,\\\\\\\\\\\ngeq\\\,!0),ie(oe,he,be,\\\\\\\u2270\\\,\\\\\\\\\\\nleq\\\,!0),ie(oe,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\ \\\),ie(oe,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\space\\\),ie(oe,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\nobreakspace\\\),ie(se,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\ \\\),ie(se,le,ye,\\\\\\\xa0\\\,\\\ \\\),ie(se,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\space\\\),ie(se,le,ye,\\\\\\\xa0\\\,\\\\\\\\\\\nobreakspace\\\),ie(oe,le,ye,null,\\\\\\\\\\\nobreak\\\),ie(oe,le,ye,null,\\\\\\\\\\\allowbreak\\\),ie(oe,le,ve,\\\,\\\,\\\,\\\),ie(oe,le,ve,\\\;\\\,\\\;\\\),ie(oe,he,ce,\\\\\\\u22bc\\\,\\\\\\\\\\\barwedge\\\,!0),ie(oe,he,ce,\\\\\\\u22bb\\\,\\\\\\\\\\\veebar\\\,!0),ie(oe,le,ce,\\\\\\\u2299\\\,\\\\\\\\\\\odot\\\,!0),ie(oe,le,ce,\\\\\\\u2295\\\,\\\\\\\\\\\oplus\\\,!0),ie(oe,le,ce,\\\\\\\u2297\\\,\\\\\\\\\\\otimes\\\,!0),ie(oe,le,xe,\\\\\\\u2202\\\,\\\\\\\\\\\partial\\\,!0),ie(oe,le,ce,\\\\\\\u2298\\\,\\\\\\\\\\\oslash\\\,!0),ie(oe,he,ce,\\\\\\\u229a\\\,\\\\\\\\\\\circledcirc\\\,!0),ie(oe,he,ce,\\\\\\\u22a1\\\,\\\\\\\\\\\boxdot\\\,!0),ie(oe,le,ce,\\\\\\\u25b3\\\,\\\\\\\\\\\bigtriangleup\\\),ie(oe,le,ce,\\\\\\\u25bd\\\,\\\\\\\\\\\bigtriangledown\\\),ie(oe,le,ce,\\\\\\\u2020\\\,\\\\\\\\\\\dagger\\\),ie(oe,le,ce,\\\\\\\u22c4\\\,\\\\\\\\\\\diamond\\\),ie(oe,le,ce,\\\\\\\u22c6\\\,\\\\\\\\\\\star\\\),ie(oe,le,ce,\\\\\\\u25c3\\\,\\\\\\\\\\\triangleleft\\\),ie(oe,le,ce,\\\\\\\u25b9\\\,\\\\\\\\\\\triangleright\\\),ie(oe,le,ge,\\\{\\\,\\\\\\\\\\\{\\\),ie(se,le,xe,\\\{\\\,\\\\\\\\\\\{\\\),ie(se,le,xe,\\\{\\\,\\\\\\\\\\\textbraceleft\\\),ie(oe,le,ue,\\\}\\\,\\\\\\\\\\\}\\\),ie(se,le,xe,\\\}\\\,\\\\\\\\\\\}\\\),ie(se,le,xe,\\\}\\\,\\\\\\\\\\\textbraceright\\\),ie(oe,le,ge,\\\{\\\,\\\\\\\\\\\lbrace\\\),ie(oe,le,ue,\\\}\\\,\\\\\\\\\\\rbrace\\\),ie(oe,le,ge,\\\\\\,\\\\\\\\\\\lbrack\\\,!0),ie(se,le,xe,\\\\\\,\\\\\\\\\\\lbrack\\\,!0),ie(oe,le,ue,\\\\\\,\\\\\\\\\\\rbrack\\\,!0),ie(se,le,xe,\\\\\\,\\\\\\\\\\\rbrack\\\,!0),ie(oe,le,ge,\\\(\\\,\\\\\\\\\\\lparen\\\,!0),ie(oe,le,ue,\\\)\\\,\\\\\\\\\\\rparen\\\,!0),ie(se,le,xe,\\\\u003C\\\,\\\\\\\\\\\textless\\\,!0),ie(se,le,xe,\\\>\\\,\\\\\\\\\\\textgreater\\\,!0),ie(oe,le,ge,\\\\\\\u230a\\\,\\\\\\\\\\\lfloor\\\,!0),ie(oe,le,ue,\\\\\\\u230b\\\,\\\\\\\\\\\rfloor\\\,!0),ie(oe,le,ge,\\\\\\\u2308\\\,\\\\\\\\\\\lceil\\\,!0),ie(oe,le,ue,\\\\\\\u2309\\\,\\\\\\\\\\\rceil\\\,!0),ie(oe,le,xe,\\\\\\\\\\\\\\,\\\\\\\\\\\backslash\\\),ie(oe,le,xe,\\\\\\\u2223\\\,\\\|\\\),ie(oe,le,xe,\\\\\\\u2223\\\,\\\\\\\\\\\vert\\\),ie(se,le,xe,\\\|\\\,\\\\\\\\\\\textbar\\\,!0),ie(oe,le,xe,\\\\\\\u2225\\\,\\\\\\\\\\\|\\\),ie(oe,le,xe,\\\\\\\u2225\\\,\\\\\\\\\\\Vert\\\),ie(se,le,xe,\\\\\\\u2225\\\,\\\\\\\\\\\textbardbl\\\),ie(se,le,xe,\\\~\\\,\\\\\\\\\\\textasciitilde\\\),ie(se,le,xe,\\\\\\\\\\\\\\,\\\\\\\\\\\textbackslash\\\),ie(se,le,xe,\\\^\\\,\\\\\\\\\\\textasciicircum\\\),ie(oe,le,be,\\\\\\\u2191\\\,\\\\\\\\\\\uparrow\\\,!0),ie(oe,le,be,\\\\\\\u21d1\\\,\\\\\\\\\\\Uparrow\\\,!0),ie(oe,le,be,\\\\\\\u2193\\\,\\\\\\\\\\\downarrow\\\,!0),ie(oe,le,be,\\\\\\\u21d3\\\,\\\\\\\\\\\Downarrow\\\,!0),ie(oe,le,be,\\\\\\\u2195\\\,\\\\\\\\\\\updownarrow\\\,!0),ie(oe,le,be,\\\\\\\u21d5\\\,\\\\\\\\\\\Updownarrow\\\,!0),ie(oe,le,fe,\\\\\\\u2210\\\,\\\\\\\\\\\coprod\\\),ie(oe,le,fe,\\\\\\\u22c1\\\,\\\\\\\\\\\bigvee\\\),ie(oe,le,fe,\\\\\\\u22c0\\\,\\\\\\\\\\\bigwedge\\\),ie(oe,le,fe,\\\\\\\u2a04\\\,\\\\\\\\\\\biguplus\\\),ie(oe,le,fe,\\\\\\\u22c2\\\,\\\\\\\\\\\bigcap\\\),ie(oe,le,fe,\\\\\\\u22c3\\\,\\\\\\\\\\\bigcup\\\),ie(oe,le,fe,\\\\\\\u222b\\\,\\\\\\\\\\\int\\\),ie(oe,le,fe,\\\\\\\u222b\\\,\\\\\\\\\\\intop\\\),ie(oe,le,fe,\\\\\\\u222c\\\,\\\\\\\\\\\iint\\\),ie(oe,le,fe,\\\\\\\u222d\\\,\\\\\\\\\\\iiint\\\),ie(oe,le,fe,\\\\\\\u220f\\\,\\\\\\\\\\\prod\\\),ie(oe,le,fe,\\\\\\\u2211\\\,\\\\\\\\\\\sum\\\),ie(oe,le,fe,\\\\\\\u2a02\\\,\\\\\\\\\\\bigotimes\\\),ie(oe,le,fe,\\\\\\\u2a01\\\,\\\\\\\\\\\bigoplus\\\),ie(oe,le,fe,\\\\\\\u2a00\\\,\\\\\\\\\\\bigodot\\\),ie(oe,le,fe,\\\\\\\u222e\\\,\\\\\\\\\\\oint\\\),ie(oe,le,fe,\\\\\\\u222f\\\,\\\\\\\\\\\oiint\\\),ie(oe,le,fe,\\\\\\\u2230\\\,\\\\\\\\\\\oiiint\\\),ie(oe,le,fe,\\\\\\\u2a06\\\,\\\\\\\\\\\bigsqcup\\\),ie(oe,le,fe,\\\\\\\u222b\\\,\\\\\\\\\\\smallint\\\),ie(se,le,pe,\\\\\\\u2026\\\,\\\\\\\\\\\textellipsis\\\),ie(oe,le,pe,\\\\\\\u2026\\\,\\\\\\\\\\\mathellipsis\\\),ie(se,le,pe,\\\\\\\u2026\\\,\\\\\\\\\\\ldots\\\,!0),ie(oe,le,pe,\\\\\\\u2026\\\,\\\\\\\\\\\ldots\\\,!0),ie(oe,le,pe,\\\\\\\u22ef\\\,\\\\\\\\\\\@cdots\\\,!0),ie(oe,le,pe,\\\\\\\u22f1\\\,\\\\\\\\\\\ddots\\\,!0),ie(oe,le,xe,\\\\\\\u22ee\\\,\\\\\\\\\\\varvdots\\\),ie(oe,le,me,\\\\\\\u02ca\\\,\\\\\\\\\\\acute\\\),ie(oe,le,me,\\\\\\\u02cb\\\,\\\\\\\\\\\grave\\\),ie(oe,le,me,\\\\\\\xa8\\\,\\\\\\\\\\\ddot\\\),ie(oe,le,me,\\\~\\\,\\\\\\\\\\\tilde\\\),ie(oe,le,me,\\\\\\\u02c9\\\,\\\\\\\\\\\bar\\\),ie(oe,le,me,\\\\\\\u02d8\\\,\\\\\\\\\\\breve\\\),ie(oe,le,me,\\\\\\\u02c7\\\,\\\\\\\\\\\check\\\),ie(oe,le,me,\\\^\\\,\\\\\\\\\\\hat\\\),ie(oe,le,me,\\\\\\\u20d7\\\,\\\\\\\\\\\vec\\\),ie(oe,le,me,\\\\\\\u02d9\\\,\\\\\\\\\\\dot\\\),ie(oe,le,me,\\\\\\\u02da\\\,\\\\\\\\\\\mathring\\\),ie(oe,le,de,\\\\\\\ue131\\\,\\\\\\\\\\\@imath\\\),ie(oe,le,de,\\\\\\\ue237\\\,\\\\\\\\\\\@jmath\\\),ie(oe,le,xe,\\\\\\\u0131\\\,\\\\\\\u0131\\\),ie(oe,le,xe,\\\\\\\u0237\\\,\\\\\\\u0237\\\),ie(se,le,xe,\\\\\\\u0131\\\,\\\\\\\\\\\i\\\,!0),ie(se,le,xe,\\\\\\\u0237\\\,\\\\\\\\\\\j\\\,!0),ie(se,le,xe,\\\\\\\xdf\\\,\\\\\\\\\\\ss\\\,!0),ie(se,le,xe,\\\\\\\xe6\\\,\\\\\\\\\\\ae\\\,!0),ie(se,le,xe,\\\\\\\u0153\\\,\\\\\\\\\\\oe\\\,!0),ie(se,le,xe,\\\\\\\xf8\\\,\\\\\\\\\\\o\\\,!0),ie(se,le,xe,\\\\\\\xc6\\\,\\\\\\\\\\\AE\\\,!0),ie(se,le,xe,\\\\\\\u0152\\\,\\\\\\\\\\\OE\\\,!0),ie(se,le,xe,\\\\\\\xd8\\\,\\\\\\\\\\\O\\\,!0),ie(se,le,me,\\\\\\\u02ca\\\,\\\\\\\\\\\\\\),ie(se,le,me,\\\\\\\u02cb\\\,\\\\\\\\\\\`\\\),ie(se,le,me,\\\\\\\u02c6\\\,\\\\\\\\\\\^\\\),ie(se,le,me,\\\\\\\u02dc\\\,\\\\\\\\\\\~\\\),ie(se,le,me,\\\\\\\u02c9\\\,\\\\\\\\\\\\\\),ie(se,le,me,\\\\\\\u02d8\\\,\\\\\\\\\\\u\\\),ie(se,le,me,\\\\\\\u02d9\\\,\\\\\\\\\\\.\\\),ie(se,le,me,\\\\\\\xb8\\\,\\\\\\\\\\\c\\\),ie(se,le,me,\\\\\\\u02da\\\,\\\\\\\\\\\r\\\),ie(se,le,me,\\\\\\\u02c7\\\,\\\\\\\\\\\v\\\),ie(se,le,me,\\\\\\\xa8\\\,\\\\\\\\\\\),ie(se,le,me,\\\\\\\u02dd\\\,\\\\\\\\\\\H\\\),ie(se,le,me,\\\\\\\u25ef\\\,\\\\\\\\\\\textcircled\\\);var we{\\\--\\\:!0,\\\---\\\:!0,\\\``\\\:!0,\\\\\\:!0};ie(se,le,xe,\\\\\\\u2013\\\,\\\--\\\,!0),ie(se,le,xe,\\\\\\\u2013\\\,\\\\\\\\\\\textendash\\\),ie(se,le,xe,\\\\\\\u2014\\\,\\\---\\\,!0),ie(se,le,xe,\\\\\\\u2014\\\,\\\\\\\\\\\textemdash\\\),ie(se,le,xe,\\\\\\\u2018\\\,\\\`\\\,!0),ie(se,le,xe,\\\\\\\u2018\\\,\\\\\\\\\\\textquoteleft\\\),ie(se,le,xe,\\\\\\\u2019\\\,\\\\\\,!0),ie(se,le,xe,\\\\\\\u2019\\\,\\\\\\\\\\\textquoteright\\\),ie(se,le,xe,\\\\\\\u201c\\\,\\\``\\\,!0),ie(se,le,xe,\\\\\\\u201c\\\,\\\\\\\\\\\textquotedblleft\\\),ie(se,le,xe,\\\\\\\u201d\\\,\\\\\\,!0),ie(se,le,xe,\\\\\\\u201d\\\,\\\\\\\\\\\textquotedblright\\\),ie(oe,le,xe,\\\\\\\xb0\\\,\\\\\\\\\\\degree\\\,!0),ie(se,le,xe,\\\\\\\xb0\\\,\\\\\\\\\\\degree\\\),ie(se,le,xe,\\\\\\\xb0\\\,\\\\\\\\\\\textdegree\\\,!0),ie(oe,le,xe,\\\\\\\xa3\\\,\\\\\\\\\\\pounds\\\),ie(oe,le,xe,\\\\\\\xa3\\\,\\\\\\\\\\\mathsterling\\\,!0),ie(se,le,xe,\\\\\\\xa3\\\,\\\\\\\\\\\pounds\\\),ie(se,le,xe,\\\\\\\xa3\\\,\\\\\\\\\\\textsterling\\\,!0),ie(oe,he,xe,\\\\\\\u2720\\\,\\\\\\\\\\\maltese\\\),ie(se,he,xe,\\\\\\\u2720\\\,\\\\\\\\\\\maltese\\\);for(var ke0123456789/@.\\\,Se0;Se\u003Cke.length;Se++){var Meke.charAt(Se);ie(oe,le,xe,Me,Me)}for(var ze0123456789!@*()-+\\\;:?/.,,Ae0;Ae\u003Cze.length;Ae++){var Teze.charAt(Ae);ie(se,le,xe,Te,Te)}for(var Be\\\ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\\\,Ce0;Ce\u003CBe.length;Ce++){var qeBe.charAt(Ce);ie(oe,le,de,qe,qe),ie(se,le,xe,qe,qe)}ie(oe,he,xe,\\\C\\\,\\\\\\\u2102\\\),ie(se,he,xe,\\\C\\\,\\\\\\\u2102\\\),ie(oe,he,xe,\\\H\\\,\\\\\\\u210d\\\),ie(se,he,xe,\\\H\\\,\\\\\\\u210d\\\),ie(oe,he,xe,\\\N\\\,\\\\\\\u2115\\\),ie(se,he,xe,\\\N\\\,\\\\\\\u2115\\\),ie(oe,he,xe,\\\P\\\,\\\\\\\u2119\\\),ie(se,he,xe,\\\P\\\,\\\\\\\u2119\\\),ie(oe,he,xe,\\\Q\\\,\\\\\\\u211a\\\),ie(se,he,xe,\\\Q\\\,\\\\\\\u211a\\\),ie(oe,he,xe,\\\R\\\,\\\\\\\u211d\\\),ie(se,he,xe,\\\R\\\,\\\\\\\u211d\\\),ie(oe,he,xe,\\\Z\\\,\\\\\\\u2124\\\),ie(se,he,xe,\\\Z\\\,\\\\\\\u2124\\\),ie(oe,le,de,\\\h\\\,\\\\\\\u210e\\\),ie(se,le,de,\\\h\\\,\\\\\\\u210e\\\);for(var Ne\\\\\\,Ie0;Ie\u003CBe.length;Ie++){var ReBe.charAt(Ie);ie(oe,le,de,Re,NeString.fromCharCode(55349,56320+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56372+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56424+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56580+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56736+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56788+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56840+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56944+Ie)),ie(se,le,xe,Re,Ne),Ie\u003C26&&(ie(oe,le,de,Re,NeString.fromCharCode(55349,56632+Ie)),ie(se,le,xe,Re,Ne),ie(oe,le,de,Re,NeString.fromCharCode(55349,56476+Ie)),ie(se,le,xe,Re,Ne))}ie(oe,le,de,\\\k\\\,NeString.fromCharCode(55349,56668)),ie(se,le,xe,\\\k\\\,Ne);for(var Oe0;Oe\u003C10;Oe++){var HeOe.toString();ie(oe,le,de,He,NeString.fromCharCode(55349,57294+Oe)),ie(se,le,xe,He,Ne),ie(oe,le,de,He,NeString.fromCharCode(55349,57314+Oe)),ie(se,le,xe,He,Ne),ie(oe,le,de,He,NeString.fromCharCode(55349,57324+Oe)),ie(se,le,xe,He,Ne),ie(oe,le,de,He,NeString.fromCharCode(55349,57334+Oe)),ie(se,le,xe,He,Ne)}for(var Ee\\\\\\\xd0\\\\xde\\\\xfe\\\,Le0;Le\u003CEe.length;Le++){var DeEe.charAt(Le);ie(oe,le,de,De,De),ie(se,le,xe,De,De)}var Pe\\\mathbf\\\,\\\textbf\\\,\\\Main-Bold\\\,\\\mathbf\\\,\\\textbf\\\,\\\Main-Bold\\\,\\\mathnormal\\\,\\\textit\\\,\\\Math-Italic\\\,\\\mathnormal\\\,\\\textit\\\,\\\Math-Italic\\\,\\\boldsymbol\\\,\\\boldsymbol\\\,\\\Main-BoldItalic\\\,\\\boldsymbol\\\,\\\boldsymbol\\\,\\\Main-BoldItalic\\\,\\\mathscr\\\,\\\textscr\\\,\\\Script-Regular\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\mathfrak\\\,\\\textfrak\\\,\\\Fraktur-Regular\\\,\\\mathfrak\\\,\\\textfrak\\\,\\\Fraktur-Regular\\\,\\\mathbb\\\,\\\textbb\\\,\\\AMS-Regular\\\,\\\mathbb\\\,\\\textbb\\\,\\\AMS-Regular\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\mathsf\\\,\\\textsf\\\,\\\SansSerif-Regular\\\,\\\mathsf\\\,\\\textsf\\\,\\\SansSerif-Regular\\\,\\\mathboldsf\\\,\\\textboldsf\\\,\\\SansSerif-Bold\\\,\\\mathboldsf\\\,\\\textboldsf\\\,\\\SansSerif-Bold\\\,\\\mathitsf\\\,\\\textitsf\\\,\\\SansSerif-Italic\\\,\\\mathitsf\\\,\\\textitsf\\\,\\\SansSerif-Italic\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\\\\,\\\mathtt\\\,\\\texttt\\\,\\\Typewriter-Regular\\\,\\\mathtt\\\,\\\texttt\\\,\\\Typewriter-Regular\\\,Fe\\\mathbf\\\,\\\textbf\\\,\\\Main-Bold\\\,\\\\\\,\\\\\\,\\\\\\,\\\mathsf\\\,\\\textsf\\\,\\\SansSerif-Regular\\\,\\\mathboldsf\\\,\\\textboldsf\\\,\\\SansSerif-Bold\\\,\\\mathtt\\\,\\\texttt\\\,\\\Typewriter-Regular\\\,Vefunction(e,t,r){return aere&&aere.replace&&(eaere.replace),{value:e,metrics:q(e,t,r)}},Gefunction(e,t,r,n,a){var i,oVe(e,t,r),so.metrics;if(eo.value,s){var ls.italic;(\\\text\\\r||n&&\\\mathit\\\n.font)&&(l0),inew Z(e,s.height,s.depth,l,s.skew,s.width,a)}else\\\undefined\\\!typeof console&&console.warn(\\\No character metrics for \\\+e+\\\ in style \\\+t+\\\ and mode \\\+r+\\\\\\),inew Z(e,0,0,0,0,0,a);if(n){i.maxFontSizen.sizeMultiplier,n.style.isTight()&&i.classes.push(\\\mtight\\\);var hn.getColor();h&&(i.style.colorh)}return i},Uefunction(e,t){if(G(e.classes)!G(t.classes)||e.skew!t.skew||e.maxFontSize!t.maxFontSize)return!1;if(1e.classes.length){var re.classes0;if(\\\mbin\\\r||\\\mord\\\r)return!1}for(var n in e.style)if(e.style.hasOwnProperty(n)&&e.stylen!t.stylen)return!1;for(var a in t.style)if(t.style.hasOwnProperty(a)&&e.stylea!t.stylea)return!1;return!0},Yefunction(e){for(var t0,r0,n0,a0;a\u003Ce.children.length;a++){var ie.childrena;i.height>t&&(ti.height),i.depth>r&&(ri.depth),i.maxFontSize>n&&(ni.maxFontSize)}e.heightt,e.depthr,e.maxFontSizen},Xefunction(e,t,r,n){var anew W(e,t,r,n);return Ye(a),a},Wefunction(e,t,r,n){return new W(e,t,r,n)},_efunction(e){var tnew A(e);return Ye(t),t},jefunction(e,t,r){var n\\\\\\;switch(e){case\\\amsrm\\\:n\\\AMS\\\;break;case\\\textrm\\\:n\\\Main\\\;break;case\\\textsf\\\:n\\\SansSerif\\\;break;case\\\texttt\\\:n\\\Typewriter\\\;break;default:ne}return n+\\\-\\\+(\\\textbf\\\t&&\\\textit\\\r?\\\BoldItalic\\\:\\\textbf\\\t?\\\Bold\\\:\\\textit\\\t?\\\Italic\\\:\\\Regular\\\)},$e{mathbf:{variant:\\\bold\\\,fontName:\\\Main-Bold\\\},mathrm:{variant:\\\normal\\\,fontName:\\\Main-Regular\\\},textit:{variant:\\\italic\\\,fontName:\\\Main-Italic\\\},mathit:{variant:\\\italic\\\,fontName:\\\Main-Italic\\\},mathnormal:{variant:\\\italic\\\,fontName:\\\Math-Italic\\\},mathbb:{variant:\\\double-struck\\\,fontName:\\\AMS-Regular\\\},mathcal:{variant:\\\script\\\,fontName:\\\Caligraphic-Regular\\\},mathfrak:{variant:\\\fraktur\\\,fontName:\\\Fraktur-Regular\\\},mathscr:{variant:\\\script\\\,fontName:\\\Script-Regular\\\},mathsf:{variant:\\\sans-serif\\\,fontName:\\\SansSerif-Regular\\\},mathtt:{variant:\\\monospace\\\,fontName:\\\Typewriter-Regular\\\}},Ze{vec:\\\vec\\\,.471,.714,oiintSize1:\\\oiintSize1\\\,.957,.499,oiintSize2:\\\oiintSize2\\\,1.472,.659,oiiintSize1:\\\oiiintSize1\\\,1.304,.499,oiiintSize2:\\\oiiintSize2\\\,1.98,.659},Ke{fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0n&&(n),\\\boldsymbol\\\r.font&&Ve(e,\\\Main-Bold\\\,t).metrics?Ge(e,\\\Main-Bold\\\,t,r,n.concat(\\\mathbf\\\)):\\\\\\\\\\\\\\e||\\\main\\\aete.font?Ge(e,\\\Main-Regular\\\,t,r,n):Ge(e,\\\AMS-Regular\\\,t,r,n.concat(\\\amsrm\\\))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var nXe(e,,t);return n.heightMath.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidthV(n.height),n.maxFontSize1,n},makeAnchor:function(e,t,r,n){var anew _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe(,e,t):e},makeVList:function(e,t){for(var rfunction(e){if(\\\individualShift\\\e.positionType){for(var te.children,rt0,n-t0.shift-t0.elem.depth,an,i1;i\u003Ct.length;i++){var o-ti.shift-a-ti.elem.depth,so-(ti-1.elem.height+ti-1.elem.depth);a+o,r.push({type:\\\kern\\\,size:s}),r.push(ti)}return{children:r,depth:n}}var l;if(\\\top\\\e.positionType){for(var he.positionData,m0;m\u003Ce.children.length;m++){var ce.childrenm;h-\\\kern\\\c.type?c.size:c.elem.height+c.elem.depth}lh}else if(\\\bottom\\\e.positionType)l-e.positionData;else{var ue.children0;if(\\\elem\\\!u.type)throw new Error(First child must have type \\\elem\\\.);if(\\\shift\\\e.positionType)l-u.elem.depth-e.positionData;else{if(\\\firstBaseline\\\!e.positionType)throw new Error(\\\Invalid positionType \\\+e.positionType+\\\.\\\);l-u.elem.depth}}return{children:e.children,depth:l}}(e),nr.children,ar.depth,i0,o0;o\u003Cn.length;o++){var sno;if(\\\elem\\\s.type){var ls.elem;iMath.max(i,l.maxFontSize,l.height)}}i+2;var hXe(\\\pstrut\\\,);h.style.heightV(i);for(var m,ca,ua,pa,d0;d\u003Cn.length;d++){var fnd;if(\\\kern\\\f.type)p+f.size;else{var gf.elem,vf.wrapperClasses||,bf.wrapperStyle||{},yXe(v,h,g,void 0,b);y.style.topV(-i-p-g.depth),f.marginLeft&&(y.style.marginLeftf.marginLeft),f.marginRight&&(y.style.marginRightf.marginRight),m.push(y),p+g.height+g.depth}cMath.min(c,p),uMath.max(u,p)}var x,wXe(\\\vlist\\\,m);if(w.style.heightV(u),c\u003C0){var kXe(,),SXe(\\\vlist\\\,k);S.style.heightV(-c);var MXe(\\\vlist-s\\\,new Z(\\\\\\\u200b\\\));xXe(\\\vlist-r\\\,w,M),Xe(\\\vlist-r\\\,S)}else xXe(\\\vlist-r\\\,w);var zXe(\\\vlist-t\\\,x);return 2x.length&&z.classes.push(\\\vlist-t2\\\),z.heightu,z.depth-c,z},makeOrd:function(e,t,r){var ae.mode,ie.text,o\\\mord\\\,s\\\math\\\a||\\\text\\\a&&t.font,ls?t.font:t.fontFamily;if(55349i.charCodeAt(0)){var hfunction(e,t){var r1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536,a\\\math\\\t?0:1;if(119808\u003Cr&&r\u003C120484){var iMath.floor((r-119808)/26);returnPei2,Peia}if(120782\u003Cr&&r\u003C120831){var oMath.floor((r-120782)/10);returnFeo2,Feoa}if(120485r||120486r)returnPe02,Pe0a;if(120486\u003Cr&&r\u003C120782)return\\\\\\,\\\\\\;throw new n(\\\Unsupported character: \\\+e)}(i,a),mh0,ch1;return Ge(i,m,a,t,o.concat(c))}if(l){var u,p;if(\\\boldsymbol\\\l){var dfunction(e,t,r,n,a){return\\\textord\\\!a&&Ve(e,\\\Math-BoldItalic\\\,t).metrics?{fontName:\\\Math-BoldItalic\\\,fontClass:\\\boldsymbol\\\}:{fontName:\\\Main-Bold\\\,fontClass:\\\mathbf\\\}}(i,a,0,0,r);ud.fontName,pd.fontClass}else s?(u$el.fontName,pl):(uje(l,t.fontWeight,t.fontShape),pl,t.fontWeight,t.fontShape);if(Ve(i,u,a).metrics)return Ge(i,u,a,t,o.concat(p));if(we.hasOwnProperty(i)&&\\\Typewriter\\\u.substr(0,10)){for(var f,g0;g\u003Ci.length;g++)f.push(Ge(ig,u,a,t,o.concat(p)));return _e(f)}}if(\\\mathord\\\r)return Ge(i,\\\Math-Italic\\\,a,t,o.concat(\\\mathnormal\\\));if(\\\textord\\\r){var vaeai&&aeai.font;if(\\\ams\\\v){var bje(\\\amsrm\\\,t.fontWeight,t.fontShape);return Ge(i,b,a,t,o.concat(\\\amsrm\\\,t.fontWeight,t.fontShape))}if(\\\main\\\!v&&v){var yje(v,t.fontWeight,t.fontShape);return Ge(i,y,a,t,o.concat(y,t.fontWeight,t.fontShape))}var xje(\\\textrm\\\,t.fontWeight,t.fontShape);return Ge(i,x,a,t,o.concat(t.fontWeight,t.fontShape))}throw new Error(\\\unexpected type: \\\+r+\\\ in makeOrd\\\)},makeGlue:function(e,t){var rXe(\\\mspace\\\,,t),nF(e,t);return r.style.marginRightV(n),r},staticSvg:function(e,t){var rZee,nr0,ar1,ir2,onew J(n),snew K(o,{width:V(a),height:V(i),style:\\\width:\\\+V(a),viewBox:\\\0 0 \\\+1e3*a+\\\ \\\+1e3*i,preserveAspectRatio:\\\xMinYMin\\\}),lWe(\\\overlay\\\,s,t);return l.heighti,l.style.heightV(i),l.style.widthV(a),l},svgData:Ze,tryCombineChars:function(e){for(var t0;t\u003Ce.length-1;t++){var ret,net+1;r instanceof Z&&n instanceof Z&&Ue(r,n)&&(r.text+n.text,r.heightMath.max(r.height,n.height),r.depthMath.max(r.depth,n.depth),r.italicn.italic,e.splice(t+1,1),t--)}return e}},Je{number:3,unit:\\\mu\\\},Qe{number:4,unit:\\\mu\\\},et{number:5,unit:\\\mu\\\},tt{mord:{mop:Je,mbin:Qe,mrel:et,minner:Je},mop:{mord:Je,mop:Je,mrel:et,minner:Je},mbin:{mord:Qe,mop:Qe,mopen:Qe,minner:Qe},mrel:{mord:et,mop:et,mopen:et,minner:et},mopen:{},mclose:{mop:Je,mbin:Qe,mrel:et,minner:Je},mpunct:{mord:Je,mop:Je,mrel:et,mopen:Je,mclose:Je,mpunct:Je,minner:Je},minner:{mord:Je,mop:Je,mbin:Qe,mrel:et,mopen:Je,mpunct:Je,minner:Je}},rt{mord:{mop:Je},mop:{mord:Je,mop:Je},mbin:{},mrel:{},mopen:{},mclose:{mop:Je},mpunct:{},minner:{mop:Je}},nt{},at{},it{};function ot(e){for(var te.type,re.names,ne.props,ae.handler,ie.htmlBuilder,oe.mathmlBuilder,s{type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:void 0n.allowedInMath||n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l0;l\u003Cr.length;++l)ntrls;t&&(i&&(atti),o&&(itto))}function st(e){ot({type:e.type,names:,props:{numArgs:0},handler:function(){throw new Error(\\\Should never be called.\\\)},htmlBuilder:e.htmlBuilder,mathmlBuilder:e.mathmlBuilder})}var ltfunction(e){return\\\ordgroup\\\e.type&&1e.body.length?e.body0:e},htfunction(e){return\\\ordgroup\\\e.type?e.body:e},mtKe.makeSpan,ct\\\leftmost\\\,\\\mbin\\\,\\\mopen\\\,\\\mrel\\\,\\\mop\\\,\\\mpunct\\\,ut\\\rightmost\\\,\\\mrel\\\,\\\mclose\\\,\\\mpunct\\\,pt{display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT},dt{mord:\\\mord\\\,mop:\\\mop\\\,mbin:\\\mbin\\\,mrel:\\\mrel\\\,mopen:\\\mopen\\\,mclose:\\\mclose\\\,mpunct:\\\mpunct\\\,minner:\\\minner\\\},ftfunction(e,t,r,n){void 0n&&(nnull,null);for(var a,i0;i\u003Ce.length;i++){var owt(ei,t);if(o instanceof A){var so.children;a.push.apply(a,s)}else a.push(o)}if(Ke.tryCombineChars(a),!r)return a;var ht;if(1e.length){var me0;\\\sizing\\\m.type?ht.havingSize(m.size):\\\styling\\\m.type&&(ht.havingStyle(ptm.style))}var cmt(n0||\\\leftmost\\\,,t),umt(n1||\\\rightmost\\\,,t),p\\\root\\\r;return gt(a,(function(e,t){var rt.classes0,ne.classes0;\\\mbin\\\r&&l.contains(ut,n)?t.classes0\\\mord\\\:\\\mbin\\\n&&l.contains(ct,r)&&(e.classes0\\\mord\\\)}),{node:c},u,p),gt(a,(function(e,t){var ryt(t),nyt(e),ar&&n?e.hasClass(\\\mtight\\\)?rtrn:ttrn:null;if(a)return Ke.makeGlue(a,h)}),{node:c},u,p),a},gtfunction e(t,r,n,a,i){a&&t.push(a);for(var o0;o\u003Ct.length;o++){var sto,lvt(s);if(l)e(l.children,r,n,null,i);else{var h!s.hasClass(\\\mspace\\\);if(h){var mr(s,n.node);m&&(n.insertAfter?n.insertAfter(m):(t.unshift(m),o++))}h?n.nodes:i&&s.hasClass(\\\newline\\\)&&(n.nodemt(\\\leftmost\\\)),n.insertAfterfunction(e){return function(r){t.splice(e+1,0,r),o++}}(o)}}a&&t.pop()},vtfunction(e){return e instanceof A||e instanceof _||e instanceof W&&e.hasClass(\\\enclosing\\\)?e:null},btfunction e(t,r){var nvt(t);if(n){var an.children;if(a.length){if(\\\right\\\r)return e(aa.length-1,\\\right\\\);if(\\\left\\\r)return e(a0,\\\left\\\)}}return t},ytfunction(e,t){return e?(t&&(ebt(e,t)),dte.classes0||null):null},xtfunction(e,t){var r\\\nulldelimiter\\\.concat(e.baseSizingClasses());return mt(t.concat(r))},wtfunction(e,t,r){if(!e)return mt();if(ate.type){var aate.type(e,t);if(r&&t.size!r.size){amt(t.sizingClasses(r),a,t);var it.sizeMultiplier/r.sizeMultiplier;a.height*i,a.depth*i}return a}throw new n(\\\Got group of unknown type: \\\+e.type+\\\\\\)};function kt(e,t){var rmt(\\\base\\\,e,t),nmt(\\\strut\\\);return n.style.heightV(r.height+r.depth),r.depth&&(n.style.verticalAlignV(-r.depth)),r.children.unshift(n),r}function St(e,t){var rnull;1e.length&&\\\tag\\\e0.type&&(re0.tag,ee0.body);var n,aft(e,t,\\\root\\\);2a.length&&a1.hasClass(\\\tag\\\)&&(na.pop());for(var i,o,s,l0;l\u003Ca.length;l++)if(s.push(al),al.hasClass(\\\mbin\\\)||al.hasClass(\\\mrel\\\)||al.hasClass(\\\allowbreak\\\)){for(var h!1;l\u003Ca.length-1&&al+1.hasClass(\\\mspace\\\)&&!al+1.hasClass(\\\newline\\\);)l++,s.push(al),al.hasClass(\\\nobreak\\\)&&(h!0);h||(o.push(kt(s,t)),s)}else al.hasClass(\\\newline\\\)&&(s.pop(),s.length>0&&(o.push(kt(s,t)),s),o.push(al));s.length>0&&o.push(kt(s,t)),r?((ikt(ft(r,t,!0))).classes\\\tag\\\,o.push(i)):n&&o.push(n);var mmt(\\\katex-html\\\,o);if(m.setAttribute(\\\aria-hidden\\\,\\\true\\\),i){var ci.children0;c.style.heightV(m.height+m.depth),m.depth&&(c.style.verticalAlignV(-m.depth))}return m}function Mt(e){return new A(e)}var ztfunction(){function e(e,t,r){this.typevoid 0,this.attributesvoid 0,this.childrenvoid 0,this.classesvoid 0,this.typee,this.attributes{},this.childrent||,this.classesr||}var te.prototype;return t.setAttributefunction(e,t){this.attributeset},t.getAttributefunction(e){return this.attributese},t.toNodefunction(){var edocument.createElementNS(\\\http://www.w3.org/1998/Math/MathML\\\,this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributest);this.classes.length>0&&(e.classNameG(this.classes));for(var r0;r\u003Cthis.children.length;r++)e.appendChild(this.childrenr.toNode());return e},t.toMarkupfunction(){var e\\\\u003C\\\+this.type;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+\\\ \\\+t+\\\,e+l.escape(this.attributest),e+\\\);this.classes.length>0&&(e+ class \\\+l.escape(G(this.classes))+\\\),e+\\\>\\\;for(var r0;r\u003Cthis.children.length;r++)e+this.childrenr.toMarkup();return e+\\\\u003C/\\\+this.type+\\\>\\\},t.toTextfunction(){return this.children.map((function(e){return e.toText()})).join(\\\\\\)},e}(),Atfunction(){function e(e){this.textvoid 0,this.texte}var te.prototype;return t.toNodefunction(){return document.createTextNode(this.text)},t.toMarkupfunction(){return l.escape(this.toText())},t.toTextfunction(){return this.text},e}(),Tt{MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.widthvoid 0,this.charactervoid 0,this.widthe,this.charactere>.05555&&e\u003C.05556?\\\\\\\u200a\\\:e>.1666&&e\u003C.1667?\\\\\\\u2009\\\:e>.2222&&e\u003C.2223?\\\\\\\u2005\\\:e>.2777&&e\u003C.2778?\\\\\\\u2005\\\\u200a\\\:e>-.05556&&e\u003C-.05555?\\\\\\\u200a\\\\u2063\\\:e>-.1667&&e\u003C-.1666?\\\\\\\u2009\\\\u2063\\\:e>-.2223&&e\u003C-.2222?\\\\\\\u205f\\\\u2063\\\:e>-.2778&&e\u003C-.2777?\\\\\\\u2005\\\\u2063\\\:null}var te.prototype;return t.toNodefunction(){if(this.character)return document.createTextNode(this.character);var edocument.createElementNS(\\\http://www.w3.org/1998/Math/MathML\\\,\\\mspace\\\);return e.setAttribute(\\\width\\\,V(this.width)),e},t.toMarkupfunction(){return this.character?\\\\u003Cmtext>\\\+this.character+\\\\u003C/mtext>\\\:\u003Cmspace width\\\+V(this.width)+\\\/>},t.toTextfunction(){return this.character?this.character:\\\ \\\},e}(),newDocumentFragment:Mt},Btfunction(e,t,r){return!aete||!aete.replace||55349e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&\\\tt\\\r.fontFamily.substr(4,2)||r.font&&\\\tt\\\r.font.substr(4,2))||(eaete.replace),new Tt.TextNode(e)},Ctfunction(e){return 1e.length?e0:new Tt.MathNode(\\\mrow\\\,e)},qtfunction(e,t){if(\\\texttt\\\t.fontFamily)return\\\monospace\\\;if(\\\textsf\\\t.fontFamily)return\\\textit\\\t.fontShape&&\\\textbf\\\t.fontWeight?\\\sans-serif-bold-italic\\\:\\\textit\\\t.fontShape?\\\sans-serif-italic\\\:\\\textbf\\\t.fontWeight?\\\bold-sans-serif\\\:\\\sans-serif\\\;if(\\\textit\\\t.fontShape&&\\\textbf\\\t.fontWeight)return\\\bold-italic\\\;if(\\\textit\\\t.fontShape)return\\\italic\\\;if(\\\textbf\\\t.fontWeight)return\\\bold\\\;var rt.font;if(!r||\\\mathnormal\\\r)return null;var ne.mode;if(\\\mathit\\\r)return\\\italic\\\;if(\\\boldsymbol\\\r)return\\\textord\\\e.type?\\\bold\\\:\\\bold-italic\\\;if(\\\mathbf\\\r)return\\\bold\\\;if(\\\mathbb\\\r)return\\\double-struck\\\;if(\\\mathfrak\\\r)return\\\fraktur\\\;if(\\\mathscr\\\r||\\\mathcal\\\r)return\\\script\\\;if(\\\mathsf\\\r)return\\\sans-serif\\\;if(\\\mathtt\\\r)return\\\monospace\\\;var ae.text;return l.contains(\\\\\\\\\\\imath\\\,\\\\\\\\\\\jmath\\\,a)?null:(aena&&aena.replace&&(aaena.replace),q(a,Ke.fontMapr.fontName,n)?Ke.fontMapr.variant:null)},Ntfunction(e,t,r){if(1e.length){var nRt(e0,t);return r&&n instanceof zt&&\\\mo\\\n.type&&(n.setAttribute(\\\lspace\\\,\\\0em\\\),n.setAttribute(\\\rspace\\\,\\\0em\\\)),n}for(var a,i,o0;o\u003Ce.length;o++){var sRt(eo,t);if(s instanceof zt&&a instanceof zt){if(\\\mtext\\\s.type&&\\\mtext\\\a.type&&s.getAttribute(\\\mathvariant\\\)a.getAttribute(\\\mathvariant\\\)){var l;(la.children).push.apply(l,s.children);continue}if(\\\mn\\\s.type&&\\\mn\\\a.type){var h;(ha.children).push.apply(h,s.children);continue}if(\\\mi\\\s.type&&1s.children.length&&\\\mn\\\a.type){var ms.children0;if(m instanceof At&&\\\.\\\m.text){var c;(ca.children).push.apply(c,s.children);continue}}else if(\\\mi\\\a.type&&1a.children.length){var ua.children0;if(u instanceof At&&\\\\\\\u0338\\\u.text&&(\\\mo\\\s.type||\\\mi\\\s.type||\\\mn\\\s.type)){var ps.children0;p instanceof At&&p.text.length>0&&(p.textp.text.slice(0,1)+\\\\\\\u0338\\\+p.text.slice(1),i.pop())}}}i.push(s),as}return i},Itfunction(e,t,r){return Ct(Nt(e,t,r))},Rtfunction(e,t){if(!e)return new Tt.MathNode(\\\mrow\\\);if(ite.type)return ite.type(e,t);throw new n(\\\Got group of unknown type: \\\+e.type+\\\\\\)};function Ot(e,t,r,n,a){var i,oNt(e,r);i1o.length&&o0instanceof zt&&l.contains(\\\mrow\\\,\\\mtable\\\,o0.type)?o0:new Tt.MathNode(\\\mrow\\\,o);var snew Tt.MathNode(\\\annotation\\\,new Tt.TextNode(t));s.setAttribute(\\\encoding\\\,\\\application/x-tex\\\);var hnew Tt.MathNode(\\\semantics\\\,i,s),mnew Tt.MathNode(\\\math\\\,h);m.setAttribute(\\\xmlns\\\,\\\http://www.w3.org/1998/Math/MathML\\\),n&&m.setAttribute(\\\display\\\,\\\block\\\);var ca?\\\katex\\\:\\\katex-mathml\\\;return Ke.makeSpan(c,m)}var Htfunction(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Etfunction(e,t){if(t.displayMode){var r\\\katex-display\\\;t.leqno&&r.push(\\\leqno\\\),t.fleqn&&r.push(\\\fleqn\\\),eKe.makeSpan(r,e)}return e},Ltfunction(e,t,r){var n,aHt(r);if(\\\mathml\\\r.output)return Ot(e,t,a,r.displayMode,!0);if(\\\html\\\r.output){var iSt(e,a);nKe.makeSpan(\\\katex\\\,i)}else{var oOt(e,t,a,r.displayMode,!1),sSt(e,a);nKe.makeSpan(\\\katex\\\,o,s)}return Et(n,r)},Dt{widehat:\\\^\\\,widecheck:\\\\\\\u02c7\\\,widetilde:\\\~\\\,utilde:\\\~\\\,overleftarrow:\\\\\\\u2190\\\,underleftarrow:\\\\\\\u2190\\\,xleftarrow:\\\\\\\u2190\\\,overrightarrow:\\\\\\\u2192\\\,underrightarrow:\\\\\\\u2192\\\,xrightarrow:\\\\\\\u2192\\\,underbrace:\\\\\\\u23df\\\,overbrace:\\\\\\\u23de\\\,overgroup:\\\\\\\u23e0\\\,undergroup:\\\\\\\u23e1\\\,overleftrightarrow:\\\\\\\u2194\\\,underleftrightarrow:\\\\\\\u2194\\\,xleftrightarrow:\\\\\\\u2194\\\,Overrightarrow:\\\\\\\u21d2\\\,xRightarrow:\\\\\\\u21d2\\\,overleftharpoon:\\\\\\\u21bc\\\,xleftharpoonup:\\\\\\\u21bc\\\,overrightharpoon:\\\\\\\u21c0\\\,xrightharpoonup:\\\\\\\u21c0\\\,xLeftarrow:\\\\\\\u21d0\\\,xLeftrightarrow:\\\\\\\u21d4\\\,xhookleftarrow:\\\\\\\u21a9\\\,xhookrightarrow:\\\\\\\u21aa\\\,xmapsto:\\\\\\\u21a6\\\,xrightharpoondown:\\\\\\\u21c1\\\,xleftharpoondown:\\\\\\\u21bd\\\,xrightleftharpoons:\\\\\\\u21cc\\\,xleftrightharpoons:\\\\\\\u21cb\\\,xtwoheadleftarrow:\\\\\\\u219e\\\,xtwoheadrightarrow:\\\\\\\u21a0\\\,xlongequal:\\\\\\,xtofrom:\\\\\\\u21c4\\\,xrightleftarrows:\\\\\\\u21c4\\\,xrightequilibrium:\\\\\\\u21cc\\\,xleftequilibrium:\\\\\\\u21cb\\\,\\\\\\\\\\\cdrightarrow\\\:\\\\\\\u2192\\\,\\\\\\\\\\\cdleftarrow\\\:\\\\\\\u2190\\\,\\\\\\\\\\\cdlongequal\\\:\\\\\\},Pt{overrightarrow:\\\rightarrow\\\,.888,522,\\\xMaxYMin\\\,overleftarrow:\\\leftarrow\\\,.888,522,\\\xMinYMin\\\,underrightarrow:\\\rightarrow\\\,.888,522,\\\xMaxYMin\\\,underleftarrow:\\\leftarrow\\\,.888,522,\\\xMinYMin\\\,xrightarrow:\\\rightarrow\\\,1.469,522,\\\xMaxYMin\\\,\\\\\\\\\\\cdrightarrow\\\:\\\rightarrow\\\,3,522,\\\xMaxYMin\\\,xleftarrow:\\\leftarrow\\\,1.469,522,\\\xMinYMin\\\,\\\\\\\\\\\cdleftarrow\\\:\\\leftarrow\\\,3,522,\\\xMinYMin\\\,Overrightarrow:\\\doublerightarrow\\\,.888,560,\\\xMaxYMin\\\,xRightarrow:\\\doublerightarrow\\\,1.526,560,\\\xMaxYMin\\\,xLeftarrow:\\\doubleleftarrow\\\,1.526,560,\\\xMinYMin\\\,overleftharpoon:\\\leftharpoon\\\,.888,522,\\\xMinYMin\\\,xleftharpoonup:\\\leftharpoon\\\,.888,522,\\\xMinYMin\\\,xleftharpoondown:\\\leftharpoondown\\\,.888,522,\\\xMinYMin\\\,overrightharpoon:\\\rightharpoon\\\,.888,522,\\\xMaxYMin\\\,xrightharpoonup:\\\rightharpoon\\\,.888,522,\\\xMaxYMin\\\,xrightharpoondown:\\\rightharpoondown\\\,.888,522,\\\xMaxYMin\\\,xlongequal:\\\longequal\\\,.888,334,\\\xMinYMin\\\,\\\\\\\\\\\cdlongequal\\\:\\\longequal\\\,3,334,\\\xMinYMin\\\,xtwoheadleftarrow:\\\twoheadleftarrow\\\,.888,334,\\\xMinYMin\\\,xtwoheadrightarrow:\\\twoheadrightarrow\\\,.888,334,\\\xMaxYMin\\\,overleftrightarrow:\\\leftarrow\\\,\\\rightarrow\\\,.888,522,overbrace:\\\leftbrace\\\,\\\midbrace\\\,\\\rightbrace\\\,1.6,548,underbrace:\\\leftbraceunder\\\,\\\midbraceunder\\\,\\\rightbraceunder\\\,1.6,548,underleftrightarrow:\\\leftarrow\\\,\\\rightarrow\\\,.888,522,xleftrightarrow:\\\leftarrow\\\,\\\rightarrow\\\,1.75,522,xLeftrightarrow:\\\doubleleftarrow\\\,\\\doublerightarrow\\\,1.75,560,xrightleftharpoons:\\\leftharpoondownplus\\\,\\\rightharpoonplus\\\,1.75,716,xleftrightharpoons:\\\leftharpoonplus\\\,\\\rightharpoondownplus\\\,1.75,716,xhookleftarrow:\\\leftarrow\\\,\\\righthook\\\,1.08,522,xhookrightarrow:\\\lefthook\\\,\\\rightarrow\\\,1.08,522,overlinesegment:\\\leftlinesegment\\\,\\\rightlinesegment\\\,.888,522,underlinesegment:\\\leftlinesegment\\\,\\\rightlinesegment\\\,.888,522,overgroup:\\\leftgroup\\\,\\\rightgroup\\\,.888,342,undergroup:\\\leftgroupunder\\\,\\\rightgroupunder\\\,.888,342,xmapsto:\\\leftmapsto\\\,\\\rightarrow\\\,1.5,522,xtofrom:\\\leftToFrom\\\,\\\rightToFrom\\\,1.75,528,xrightleftarrows:\\\baraboveleftarrow\\\,\\\rightarrowabovebar\\\,1.75,901,xrightequilibrium:\\\baraboveshortleftharpoon\\\,\\\rightharpoonaboveshortbar\\\,1.75,716,xleftequilibrium:\\\shortbaraboveleftharpoon\\\,\\\shortrightharpoonabovebar\\\,1.75,716},Ftfunction(e,t,r,n,a){var i,oe.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(iKe.makeSpan(\\\stretchy\\\,t,,a),\\\fbox\\\t){var sa.color&&a.getColor();s&&(i.style.borderColors)}}else{var l;/^bxcancel$/.test(t)&&l.push(new Q({x1:\\\0\\\,y1:\\\0\\\,x2:\\\100%\\\,y2:\\\100%\\\,\\\stroke-width\\\:\\\0.046em\\\})),/^x?cancel$/.test(t)&&l.push(new Q({x1:\\\0\\\,y1:\\\100%\\\,x2:\\\100%\\\,y2:\\\0\\\,\\\stroke-width\\\:\\\0.046em\\\}));var hnew K(l,{width:\\\100%\\\,height:V(o)});iKe.makeSvgSpan(,h,a)}return i.heighto,i.style.heightV(o),i},Vtfunction(e){var tnew Tt.MathNode(\\\mo\\\,new Tt.TextNode(Dte.replace(/^\\\\\\\\/,\\\\\\)));return t.setAttribute(\\\stretchy\\\,\\\true\\\),t},Gtfunction(e,t){var rfunction(){var r4e5,ne.label.substr(1);if(l.contains(\\\widehat\\\,\\\widecheck\\\,\\\widetilde\\\,\\\utilde\\\,n)){var a,i,o,s\\\ordgroup\\\(de.base).type?d.body.length:1;if(s>5)\\\widehat\\\n||\\\widecheck\\\n?(a420,r2364,o.42,in+\\\4\\\):(a312,r2340,o.34,i\\\tilde4\\\);else{var h1,1,2,2,3,3s;\\\widehat\\\n||\\\widecheck\\\n?(r0,1062,2364,2364,2364h,a0,239,300,360,420h,o0,.24,.3,.3,.36,.42h,in+h):(r0,600,1033,2339,2340h,a0,260,286,306,312h,o0,.26,.286,.3,.306,.34h,i\\\tilde\\\+h)}var mnew J(i),cnew K(m,{width:\\\100%\\\,height:V(o),viewBox:\\\0 0 \\\+r+\\\ \\\+a,preserveAspectRatio:\\\none\\\});return{span:Ke.makeSvgSpan(,c,t),minWidth:0,height:o}}var u,p,d,f,gPtn,vg0,bg1,yg2,xy/1e3,wv.length;if(1w)u\\\hide-tail\\\,pg3;else if(2w)u\\\halfarrow-left\\\,\\\halfarrow-right\\\,p\\\xMinYMin\\\,\\\xMaxYMin\\\;else{if(3!w)throw new Error(\\\Correct katexImagesData or update code here to support\\\\n \\\+w+\\\ children.\\\);u\\\brace-left\\\,\\\brace-center\\\,\\\brace-right\\\,p\\\xMinYMin\\\,\\\xMidYMin\\\,\\\xMaxYMin\\\}for(var k0;k\u003Cw;k++){var Snew J(vk),Mnew K(S,{width:\\\400em\\\,height:V(x),viewBox:\\\0 0 \\\+r+\\\ \\\+y,preserveAspectRatio:pk+\\\ slice\\\}),zKe.makeSvgSpan(uk,M,t);if(1w)return{span:z,minWidth:b,height:x};z.style.heightV(x),f.push(z)}return{span:Ke.makeSpan(\\\stretchy\\\,f,t),minWidth:b,height:x}}(),nr.span,ar.minWidth,ir.height;return n.heighti,n.style.heightV(i),a>0&&(n.style.minWidthV(a)),n};function Ut(e,t){if(!e||e.type!t)throw new Error(\\\Expected node of type \\\+t+\\\, but got \\\+(e?\\\node of type \\\+e.type:String(e)));return e}function Yt(e){var tXt(e);if(!t)throw new Error(\\\Expected node of symbol group type, but got \\\+(e?\\\node of type \\\+e.type:String(e)));return t}function Xt(e){return e&&(\\\atom\\\e.type||re.hasOwnProperty(e.type))?e:null}var Wtfunction(e,t){var r,n,a;e&&\\\supsub\\\e.type?(r(nUt(e.base,\\\accent\\\)).base,e.baser,afunction(e){if(e instanceof W)return e;throw new Error(\\\Expected span\u003CHtmlDomNode> but got \\\+String(e)+\\\.\\\)}(wt(e,t)),e.basen):r(nUt(e,\\\accent\\\)).base;var iwt(r,t.havingCrampedStyle()),o0;if(n.isShifty&&l.isCharacterBox(r)){var sl.getBaseElem(r);oee(wt(s,t.havingCrampedStyle())).skew}var h,m\\\\\\\\\\\c\\\n.label,cm?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)hGt(n,t),hKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:i},{type:\\\elem\\\,elem:h,wrapperClasses:\\\svg-align\\\,wrapperStyle:o>0?{width:\\\calc(100% - \\\+V(2*o)+\\\)\\\,marginLeft:V(2*o)}:void 0}},t);else{var u,p;\\\\\\\\\\\vec\\\n.label?(uKe.staticSvg(\\\vec\\\,t),pKe.svgData.vec1):((uee(uKe.makeOrd({mode:n.mode,text:n.label},t,\\\textord\\\))).italic0,pu.width,m&&(c+u.depth)),hKe.makeSpan(\\\accent-body\\\,u);var d\\\\\\\\\\\textcircled\\\n.label;d&&(h.classes.push(\\\accent-full\\\),ci.height);var fo;d||(f-p/2),h.style.leftV(f),\\\\\\\\\\\textcircled\\\n.label&&(h.style.top\\\.2em\\\),hKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:i},{type:\\\kern\\\,size:-c},{type:\\\elem\\\,elem:h}},t)}var gKe.makeSpan(\\\mord\\\,\\\accent\\\,h,t);return a?(a.children0g,a.heightMath.max(g.height,a.height),a.classes0\\\mord\\\,a):g},_tfunction(e,t){var re.isStretchy?Vt(e.label):new Tt.MathNode(\\\mo\\\,Bt(e.label,e.mode)),nnew Tt.MathNode(\\\mover\\\,Rt(e.base,t),r);return n.setAttribute(\\\accent\\\,\\\true\\\),n},jtnew RegExp(\\\\\\\\\\\acute\\\,\\\\\\\\\\\grave\\\,\\\\\\\\\\\ddot\\\,\\\\\\\\\\\tilde\\\,\\\\\\\\\\\bar\\\,\\\\\\\\\\\breve\\\,\\\\\\\\\\\check\\\,\\\\\\\\\\\hat\\\,\\\\\\\\\\\vec\\\,\\\\\\\\\\\dot\\\,\\\\\\\\\\\mathring\\\.map((function(e){return\\\\\\\\\\\\\\+e})).join(\\\|\\\));ot({type:\\\accent\\\,names:\\\\\\\\\\\acute\\\,\\\\\\\\\\\grave\\\,\\\\\\\\\\\ddot\\\,\\\\\\\\\\\tilde\\\,\\\\\\\\\\\bar\\\,\\\\\\\\\\\breve\\\,\\\\\\\\\\\check\\\,\\\\\\\\\\\hat\\\,\\\\\\\\\\\vec\\\,\\\\\\\\\\\dot\\\,\\\\\\\\\\\mathring\\\,\\\\\\\\\\\widecheck\\\,\\\\\\\\\\\widehat\\\,\\\\\\\\\\\widetilde\\\,\\\\\\\\\\\overrightarrow\\\,\\\\\\\\\\\overleftarrow\\\,\\\\\\\\\\\Overrightarrow\\\,\\\\\\\\\\\overleftrightarrow\\\,\\\\\\\\\\\overgroup\\\,\\\\\\\\\\\overlinesegment\\\,\\\\\\\\\\\overleftharpoon\\\,\\\\\\\\\\\overrightharpoon\\\,props:{numArgs:1},handler:function(e,t){var rlt(t0),n!jt.test(e.funcName),a!n||\\\\\\\\\\\widehat\\\e.funcName||\\\\\\\\\\\widetilde\\\e.funcName||\\\\\\\\\\\widecheck\\\e.funcName;return{type:\\\accent\\\,mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:\\\accent\\\,names:\\\\\\\\\\\\\\,\\\\\\\\\\\`\\\,\\\\\\\\\\\^\\\,\\\\\\\\\\\~\\\,\\\\\\\\\\\\\\,\\\\\\\\\\\u\\\,\\\\\\\\\\\.\\\,\\\\\\\\\\\,\\\\\\\\\\\c\\\,\\\\\\\\\\\r\\\,\\\\\\\\\\\H\\\,\\\\\\\\\\\v\\\,\\\\\\\\\\\textcircled\\\,props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:\\\primitive\\\},handler:function(e,t){var rt0,ne.parser.mode;return\\\math\\\n&&(e.parser.settings.reportNonstrict(\\\mathVsTextAccents\\\,\\\LaTeXs accent \\\+e.funcName+\\\ works only in text mode\\\),n\\\text\\\),{type:\\\accent\\\,mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:\\\accentUnder\\\,names:\\\\\\\\\\\underleftarrow\\\,\\\\\\\\\\\underrightarrow\\\,\\\\\\\\\\\underleftrightarrow\\\,\\\\\\\\\\\undergroup\\\,\\\\\\\\\\\underlinesegment\\\,\\\\\\\\\\\utilde\\\,props:{numArgs:1},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\accentUnder\\\,mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var rwt(e.base,t),nGt(e,t),a\\\\\\\\\\\utilde\\\e.label?.12:0,iKe.makeVList({positionType:\\\top\\\,positionData:r.height,children:{type:\\\elem\\\,elem:n,wrapperClasses:\\\svg-align\\\},{type:\\\kern\\\,size:a},{type:\\\elem\\\,elem:r}},t);return Ke.makeSpan(\\\mord\\\,\\\accentunder\\\,i,t)},mathmlBuilder:function(e,t){var rVt(e.label),nnew Tt.MathNode(\\\munder\\\,Rt(e.base,t),r);return n.setAttribute(\\\accentunder\\\,\\\true\\\),n}});var $tfunction(e){var tnew Tt.MathNode(\\\mpadded\\\,e?e:);return t.setAttribute(\\\width\\\,\\\+0.6em\\\),t.setAttribute(\\\lspace\\\,\\\0.3em\\\),t};ot({type:\\\xArrow\\\,names:\\\\\\\\\\\xleftarrow\\\,\\\\\\\\\\\xrightarrow\\\,\\\\\\\\\\\xLeftarrow\\\,\\\\\\\\\\\xRightarrow\\\,\\\\\\\\\\\xleftrightarrow\\\,\\\\\\\\\\\xLeftrightarrow\\\,\\\\\\\\\\\xhookleftarrow\\\,\\\\\\\\\\\xhookrightarrow\\\,\\\\\\\\\\\xmapsto\\\,\\\\\\\\\\\xrightharpoondown\\\,\\\\\\\\\\\xrightharpoonup\\\,\\\\\\\\\\\xleftharpoondown\\\,\\\\\\\\\\\xleftharpoonup\\\,\\\\\\\\\\\xrightleftharpoons\\\,\\\\\\\\\\\xleftrightharpoons\\\,\\\\\\\\\\\xlongequal\\\,\\\\\\\\\\\xtwoheadrightarrow\\\,\\\\\\\\\\\xtwoheadleftarrow\\\,\\\\\\\\\\\xtofrom\\\,\\\\\\\\\\\xrightleftarrows\\\,\\\\\\\\\\\xrightequilibrium\\\,\\\\\\\\\\\xleftequilibrium\\\,\\\\\\\\\\\\\\\\\\\cdrightarrow\\\,\\\\\\\\\\\\\\\\\\\cdleftarrow\\\,\\\\\\\\\\\\\\\\\\\cdlongequal\\\,props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var ne.parser,ae.funcName;return{type:\\\xArrow\\\,mode:n.mode,label:a,body:t0,below:r0}},htmlBuilder:function(e,t){var r,nt.style,at.havingStyle(n.sup()),iKe.wrapFragment(wt(e.body,a,t),t),o\\\\\\\\\\\x\\\e.label.slice(0,2)?\\\x\\\:\\\cd\\\;i.classes.push(o+\\\-arrow-pad\\\),e.below&&(at.havingStyle(n.sub()),(rKe.wrapFragment(wt(e.below,a,t),t)).classes.push(o+\\\-arrow-pad\\\));var s,lGt(e,t),h-t.fontMetrics().axisHeight+.5*l.height,m-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||\\\\\\\\\\\xleftequilibrium\\\e.label)&&(m-i.depth),r){var c-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;sKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:i,shift:m},{type:\\\elem\\\,elem:l,shift:h},{type:\\\elem\\\,elem:r,shift:c}},t)}else sKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:i,shift:m},{type:\\\elem\\\,elem:l,shift:h}},t);return s.children0.children0.children1.classes.push(\\\svg-align\\\),Ke.makeSpan(\\\mrel\\\,\\\x-arrow\\\,s,t)},mathmlBuilder:function(e,t){var r,nVt(e.label);if(n.setAttribute(\\\minsize\\\,\\\x\\\e.label.charAt(0)?\\\1.75em\\\:\\\3.0em\\\),e.body){var a$t(Rt(e.body,t));if(e.below){var i$t(Rt(e.below,t));rnew Tt.MathNode(\\\munderover\\\,n,i,a)}else rnew Tt.MathNode(\\\mover\\\,n,a)}else if(e.below){var o$t(Rt(e.below,t));rnew Tt.MathNode(\\\munder\\\,n,o)}else r$t(),rnew Tt.MathNode(\\\mover\\\,n,r);return r}});var Zt{\\\>\\\:\\\\\\\\\\\\\\\\\\\cdrightarrow\\\,\\\\u003C\\\:\\\\\\\\\\\\\\\\\\\cdleftarrow\\\,\\\\\\:\\\\\\\\\\\\\\\\\\\cdlongequal\\\,A:\\\\\\\\\\\uparrow\\\,V:\\\\\\\\\\\downarrow\\\,\\\|\\\:\\\\\\\\\\\Vert\\\,\\\.\\\:\\\no arrow\\\},Ktfunction(e){return\\\textord\\\e.type&&\\\@\\\e.text};function Jt(e,t,r){var nZte;switch(n){case\\\\\\\\\\\\\\\\\\\cdrightarrow\\\:case\\\\\\\\\\\\\\\\\\\cdleftarrow\\\:return r.callFunction(n,t0,t1);case\\\\\\\\\\\uparrow\\\:case\\\\\\\\\\\downarrow\\\:var a{type:\\\atom\\\,text:n,mode:\\\math\\\,family:\\\rel\\\},i{type:\\\ordgroup\\\,mode:\\\math\\\,body:r.callFunction(\\\\\\\\\\\\\\\\\\\cdleft\\\,t0,),r.callFunction(\\\\\\\\\\\Big\\\,a,),r.callFunction(\\\\\\\\\\\\\\\\\\\cdright\\\,t1,)};return r.callFunction(\\\\\\\\\\\\\\\\\\\cdparent\\\,i,);case\\\\\\\\\\\\\\\\\\\cdlongequal\\\:return r.callFunction(\\\\\\\\\\\\\\\\\\\cdlongequal\\\,,);case\\\\\\\\\\\Vert\\\:return r.callFunction(\\\\\\\\\\\Big\\\,{type:\\\textord\\\,text:\\\\\\\\\\\Vert\\\,mode:\\\math\\\},);default:return{type:\\\textord\\\,text:\\\ \\\,mode:\\\math\\\}}}ot({type:\\\cdlabel\\\,names:\\\\\\\\\\\\\\\\\\\cdleft\\\,\\\\\\\\\\\\\\\\\\\cdright\\\,props:{numArgs:1},handler:function(e,t){var re.parser,ne.funcName;return{type:\\\cdlabel\\\,mode:r.mode,side:n.slice(4),label:t0}},htmlBuilder:function(e,t){var rt.havingStyle(t.style.sup()),nKe.wrapFragment(wt(e.label,r,t),t);return n.classes.push(\\\cd-label-\\\+e.side),n.style.bottomV(.8-n.depth),n.height0,n.depth0,n},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mrow\\\,Rt(e.label,t));return(rnew Tt.MathNode(\\\mpadded\\\,r)).setAttribute(\\\width\\\,\\\0\\\),\\\left\\\e.side&&r.setAttribute(\\\lspace\\\,\\\-1width\\\),r.setAttribute(\\\voffset\\\,\\\0.7em\\\),(rnew Tt.MathNode(\\\mstyle\\\,r)).setAttribute(\\\displaystyle\\\,\\\false\\\),r.setAttribute(\\\scriptlevel\\\,\\\1\\\),r}}),ot({type:\\\cdlabelparent\\\,names:\\\\\\\\\\\\\\\\\\\cdparent\\\,props:{numArgs:1},handler:function(e,t){return{type:\\\cdlabelparent\\\,mode:e.parser.mode,fragment:t0}},htmlBuilder:function(e,t){var rKe.wrapFragment(wt(e.fragment,t),t);return r.classes.push(\\\cd-vert-arrow\\\),r},mathmlBuilder:function(e,t){return new Tt.MathNode(\\\mrow\\\,Rt(e.fragment,t))}}),ot({type:\\\textord\\\,names:\\\\\\\\\\\@char\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var re.parser,aUt(t0,\\\ordgroup\\\).body,i\\\\\\,o0;o\u003Ca.length;o++){i+Ut(ao,\\\textord\\\).text}var s,lparseInt(i);if(isNaN(l))throw new n(\\\\\\\\\\\@char has non-numeric argument \\\+i);if(l\u003C0||l>1114111)throw new n(\\\\\\\\\\\@char with invalid code point \\\+i);return l\u003C65535?sString.fromCharCode(l):(l-65536,sString.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:\\\textord\\\,mode:r.mode,text:s}}});var Qtfunction(e,t){var rft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},erfunction(e,t){var rNt(e.body,t.withColor(e.color)),nnew Tt.MathNode(\\\mstyle\\\,r);return n.setAttribute(\\\mathcolor\\\,e.color),n};ot({type:\\\color\\\,names:\\\\\\\\\\\textcolor\\\,props:{numArgs:2,allowedInText:!0,argTypes:\\\color\\\,\\\original\\\},handler:function(e,t){var re.parser,nUt(t0,\\\color-token\\\).color,at1;return{type:\\\color\\\,mode:r.mode,color:n,body:ht(a)}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:\\\color\\\,names:\\\\\\\\\\\color\\\,props:{numArgs:1,allowedInText:!0,argTypes:\\\color\\\},handler:function(e,t){var re.parser,ne.breakOnTokenText,aUt(t0,\\\color-token\\\).color;r.gullet.macros.set(\\\\\\\\\\\current@color\\\,a);var ir.parseExpression(!0,n);return{type:\\\color\\\,mode:r.mode,color:a,body:i}},htmlBuilder:Qt,mathmlBuilder:er}),ot({type:\\\cr\\\,names:\\\\\\\\\\\\\\\\\\\\\\,props:{numArgs:0,numOptionalArgs:1,argTypes:\\\size\\\,allowedInText:!0},handler:function(e,t,r){var ne.parser,ar0,i!n.settings.displayMode||!n.settings.useStrictBehavior(\\\newLineInDisplayMode\\\,\\\In LaTeX, \\\\\\\\\\\\\\\\ or \\\\\\\\newline does nothing in display mode\\\);return{type:\\\cr\\\,mode:n.mode,newLine:i,size:a&&Ut(a,\\\size\\\).value}},htmlBuilder:function(e,t){var rKe.makeSpan(\\\mspace\\\,,t);return e.newLine&&(r.classes.push(\\\newline\\\),e.size&&(r.style.marginTopV(F(e.size,t)))),r},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mspace\\\);return e.newLine&&(r.setAttribute(\\\linebreak\\\,\\\newline\\\),e.size&&r.setAttribute(\\\height\\\,V(F(e.size,t)))),r}});var tr{\\\\\\\\\\\global\\\:\\\\\\\\\\\global\\\,\\\\\\\\\\\long\\\:\\\\\\\\\\\\\\\\\\\globallong\\\,\\\\\\\\\\\\\\\\\\\globallong\\\:\\\\\\\\\\\\\\\\\\\globallong\\\,\\\\\\\\\\\def\\\:\\\\\\\\\\\gdef\\\,\\\\\\\\\\\gdef\\\:\\\\\\\\\\\gdef\\\,\\\\\\\\\\\edef\\\:\\\\\\\\\\\xdef\\\,\\\\\\\\\\\xdef\\\:\\\\\\\\\\\xdef\\\,\\\\\\\\\\\let\\\:\\\\\\\\\\\\\\\\\\\globallet\\\,\\\\\\\\\\\futurelet\\\:\\\\\\\\\\\\\\\\\\\globalfuture\\\},rrfunction(e){var te.text;if(/^(?:\\\\\\\\{}$^_|EOF)$/.test(t))throw new n(\\\Expected a control sequence\\\,e);return t},nrfunction(e,t,r,n){var ae.gullet.macros.get(r.text);nulla&&(r.noexpand!0,a{tokens:r,numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:\\\internal\\\,names:\\\\\\\\\\\global\\\,\\\\\\\\\\\long\\\,\\\\\\\\\\\\\\\\\\\globallong\\\,props:{numArgs:0,allowedInText:!0},handler:function(e){var te.parser,re.funcName;t.consumeSpaces();var at.fetch();if(tra.text)return\\\\\\\\\\\global\\\!r&&\\\\\\\\\\\\\\\\\\\globallong\\\!r||(a.texttra.text),Ut(t.parseFunction(),\\\internal\\\);throw new n(\\\Invalid token after macro prefix\\\,a)}}),ot({type:\\\internal\\\,names:\\\\\\\\\\\def\\\,\\\\\\\\\\\gdef\\\,\\\\\\\\\\\edef\\\,\\\\\\\\\\\xdef\\\,props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var te.parser,re.funcName,at.gullet.popToken(),ia.text;if(/^(?:\\\\\\\\{}$^_|EOF)$/.test(i))throw new n(\\\Expected a control sequence\\\,a);for(var o,s0,l;\\\{\\\!t.gullet.future().text;)if(\\\#\\\(at.gullet.popToken()).text){if(\\\{\\\t.gullet.future().text){ot.gullet.future(),ls.push(\\\{\\\);break}if(at.gullet.popToken(),!/^1-9$/.test(a.text))throw new n(Invalid argument number \\\+a.text+\\\);if(parseInt(a.text)!s+1)throw new n(Argument number \\\+a.text+\\\ out of order);s++,l.push()}else{if(\\\EOF\\\a.text)throw new n(\\\Expected a macro definition\\\);ls.push(a.text)}var ht.gullet.consumeArg().tokens;return o&&h.unshift(o),\\\\\\\\\\\edef\\\!r&&\\\\\\\\\\\xdef\\\!r||(ht.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},rtrr),{type:\\\internal\\\,mode:t.mode}}}),ot({type:\\\internal\\\,names:\\\\\\\\\\\let\\\,\\\\\\\\\\\\\\\\\\\globallet\\\,props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var te.parser,re.funcName,nrr(t.gullet.popToken());t.gullet.consumeSpaces();var afunction(e){var te.gullet.popToken();return\\\\\\t.text&&\\\ \\\(te.gullet.popToken()).text&&(te.gullet.popToken()),t}(t);return nr(t,n,a,\\\\\\\\\\\\\\\\\\\globallet\\\r),{type:\\\internal\\\,mode:t.mode}}}),ot({type:\\\internal\\\,names:\\\\\\\\\\\futurelet\\\,\\\\\\\\\\\\\\\\\\\globalfuture\\\,props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var te.parser,re.funcName,nrr(t.gullet.popToken()),at.gullet.popToken(),it.gullet.popToken();return nr(t,n,i,\\\\\\\\\\\\\\\\\\\globalfuture\\\r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:\\\internal\\\,mode:t.mode}}});var arfunction(e,t,r){var nq(ae.mathe&&ae.mathe.replace||e,t,r);if(!n)throw new Error(\\\Unsupported symbol \\\+e+\\\ and font size \\\+t+\\\.\\\);return n},irfunction(e,t,r,n){var ar.havingBaseStyle(t),iKe.makeSpan(n.concat(a.sizingClasses(r)),e,r),oa.sizeMultiplier/r.sizeMultiplier;return i.height*o,i.depth*o,i.maxFontSizea.sizeMultiplier,i},orfunction(e,t,r){var nt.havingBaseStyle(r),a(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push(\\\delimcenter\\\),e.style.topV(a),e.height-a,e.depth+a},srfunction(e,t,r,n,a,i){var ofunction(e,t,r,n){return Ke.makeSymbol(e,\\\Size\\\+t+\\\-Regular\\\,r,n)}(e,t,a,n),sir(Ke.makeSpan(\\\delimsizing\\\,\\\size\\\+t,o,n),x.TEXT,n,i);return r&&or(s,n,x.TEXT),s},lrfunction(e,t,r){var n;return n\\\Size1-Regular\\\t?\\\delim-size1\\\:\\\delim-size4\\\,{type:\\\elem\\\,elem:Ke.makeSpan(\\\delimsizinginner\\\,n,Ke.makeSpan(,Ke.makeSymbol(e,t,r)))}},hrfunction(e,t,r){var nT\\\Size4-Regular\\\e.charCodeAt(0)?T\\\Size4-Regular\\\e.charCodeAt(0)4:T\\\Size1-Regular\\\e.charCodeAt(0)4,anew J(\\\inner\\\,function(e,t){switch(e){case\\\\\\\u239c\\\:return\\\M291 0 H417 V\\\+t+\\\ H291z M291 0 H417 V\\\+t+\\\ H291z\\\;case\\\\\\\u2223\\\:return\\\M145 0 H188 V\\\+t+\\\ H145z M145 0 H188 V\\\+t+\\\ H145z\\\;case\\\\\\\u2225\\\:return\\\M145 0 H188 V\\\+t+\\\ H145z M145 0 H188 V\\\+t+\\\ H145zM367 0 H410 V\\\+t+\\\ H367z M367 0 H410 V\\\+t+\\\ H367z\\\;case\\\\\\\u239f\\\:return\\\M457 0 H583 V\\\+t+\\\ H457z M457 0 H583 V\\\+t+\\\ H457z\\\;case\\\\\\\u23a2\\\:return\\\M319 0 H403 V\\\+t+\\\ H319z M319 0 H403 V\\\+t+\\\ H319z\\\;case\\\\\\\u23a5\\\:return\\\M263 0 H347 V\\\+t+\\\ H263z M263 0 H347 V\\\+t+\\\ H263z\\\;case\\\\\\\u23aa\\\:return\\\M384 0 H504 V\\\+t+\\\ H384z M384 0 H504 V\\\+t+\\\ H384z\\\;case\\\\\\\u23d0\\\:return\\\M312 0 H355 V\\\+t+\\\ H312z M312 0 H355 V\\\+t+\\\ H312z\\\;case\\\\\\\u2016\\\:return\\\M257 0 H300 V\\\+t+\\\ H257z M257 0 H300 V\\\+t+\\\ H257zM478 0 H521 V\\\+t+\\\ H478z M478 0 H521 V\\\+t+\\\ H478z\\\;default:return\\\\\\}}(e,Math.round(1e3*t))),inew K(a,{width:V(n),height:V(t),style:\\\width:\\\+V(n),viewBox:\\\0 0 \\\+1e3*n+\\\ \\\+Math.round(1e3*t),preserveAspectRatio:\\\xMinYMin\\\}),oKe.makeSvgSpan(,i,r);return o.heightt,o.style.heightV(t),o.style.widthV(n),{type:\\\elem\\\,elem:o}},mr{type:\\\kern\\\,size:-.008},cr\\\|\\\,\\\\\\\\\\\lvert\\\,\\\\\\\\\\\rvert\\\,\\\\\\\\\\\vert\\\,ur\\\\\\\\\\\|\\\,\\\\\\\\\\\lVert\\\,\\\\\\\\\\\rVert\\\,\\\\\\\\\\\Vert\\\,prfunction(e,t,r,n,a,i){var o,s,h,m;ohme,snull;var c\\\Size1-Regular\\\;\\\\\\\\\\\uparrow\\\e?hm\\\\\\\u23d0\\\:\\\\\\\\\\\Uparrow\\\e?hm\\\\\\\u2016\\\:\\\\\\\\\\\downarrow\\\e?oh\\\\\\\u23d0\\\:\\\\\\\\\\\Downarrow\\\e?oh\\\\\\\u2016\\\:\\\\\\\\\\\updownarrow\\\e?(o\\\\\\\\\\\uparrow\\\,h\\\\\\\u23d0\\\,m\\\\\\\\\\\downarrow\\\):\\\\\\\\\\\Updownarrow\\\e?(o\\\\\\\\\\\Uparrow\\\,h\\\\\\\u2016\\\,m\\\\\\\\\\\Downarrow\\\):l.contains(cr,e)?h\\\\\\\u2223\\\:l.contains(ur,e)?h\\\\\\\u2225\\\:\\\\\\e||\\\\\\\\\\\lbrack\\\e?(o\\\\\\\u23a1\\\,h\\\\\\\u23a2\\\,m\\\\\\\u23a3\\\,c\\\Size4-Regular\\\):\\\\\\e||\\\\\\\\\\\rbrack\\\e?(o\\\\\\\u23a4\\\,h\\\\\\\u23a5\\\,m\\\\\\\u23a6\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\lfloor\\\e||\\\\\\\u230a\\\e?(ho\\\\\\\u23a2\\\,m\\\\\\\u23a3\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\lceil\\\e||\\\\\\\u2308\\\e?(o\\\\\\\u23a1\\\,hm\\\\\\\u23a2\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\rfloor\\\e||\\\\\\\u230b\\\e?(ho\\\\\\\u23a5\\\,m\\\\\\\u23a6\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\rceil\\\e||\\\\\\\u2309\\\e?(o\\\\\\\u23a4\\\,hm\\\\\\\u23a5\\\,c\\\Size4-Regular\\\):\\\(\\\e||\\\\\\\\\\\lparen\\\e?(o\\\\\\\u239b\\\,h\\\\\\\u239c\\\,m\\\\\\\u239d\\\,c\\\Size4-Regular\\\):\\\)\\\e||\\\\\\\\\\\rparen\\\e?(o\\\\\\\u239e\\\,h\\\\\\\u239f\\\,m\\\\\\\u23a0\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\{\\\e||\\\\\\\\\\\lbrace\\\e?(o\\\\\\\u23a7\\\,s\\\\\\\u23a8\\\,m\\\\\\\u23a9\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\}\\\e||\\\\\\\\\\\rbrace\\\e?(o\\\\\\\u23ab\\\,s\\\\\\\u23ac\\\,m\\\\\\\u23ad\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\lgroup\\\e||\\\\\\\u27ee\\\e?(o\\\\\\\u23a7\\\,m\\\\\\\u23a9\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\rgroup\\\e||\\\\\\\u27ef\\\e?(o\\\\\\\u23ab\\\,m\\\\\\\u23ad\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\lmoustache\\\e||\\\\\\\u23b0\\\e?(o\\\\\\\u23a7\\\,m\\\\\\\u23ad\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\):\\\\\\\\\\\rmoustache\\\!e&&\\\\\\\u23b1\\\!e||(o\\\\\\\u23ab\\\,m\\\\\\\u23a9\\\,h\\\\\\\u23aa\\\,c\\\Size4-Regular\\\);var uar(o,c,a),pu.height+u.depth,dar(h,c,a),fd.height+d.depth,gar(m,c,a),vg.height+g.depth,b0,y1;if(null!s){var war(s,c,a);bw.height+w.depth,y2}var kp+v+b,Sk+Math.max(0,Math.ceil((t-k)/(y*f)))*y*f,Mn.fontMetrics().axisHeight;r&&(M*n.sizeMultiplier);var zS/2-M,A;if(A.push(lr(m,c,a)),A.push(mr),nulls){var TS-p-v+.016;A.push(hr(h,T,n))}else{var B(S-p-v-b)/2+.016;A.push(hr(h,B,n)),A.push(mr),A.push(lr(s,c,a)),A.push(mr),A.push(hr(h,B,n))}A.push(mr),A.push(lr(o,c,a));var Cn.havingBaseStyle(x.TEXT),qKe.makeVList({positionType:\\\bottom\\\,positionData:z,children:A},C);return ir(Ke.makeSpan(\\\delimsizing\\\,\\\mult\\\,q,C),x.TEXT,n,i)},dr.08,frfunction(e,t,r,n,a){var ifunction(e,t,r){t*1e3;var n\\\\\\;switch(e){case\\\sqrtMain\\\:nfunction(e,t){return\\\M95,\\\+(622+e+t)+\\\\\\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\\\nc69,-144,104.5,-217.7,106.5,-221\\\\nl\\\+e/2.075+\\\ -\\\+e+\\\\\\\nc5.3,-9.3,12,-14,20,-14\\\\nH400000v\\\+(40+e)+\\\H845.2724\\\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\\\nM\\\+(834+e)+\\\ \\\+t+\\\h400000v\\\+(40+e)+\\\h-400000z\\\}(t,M);break;case\\\sqrtSize1\\\:nfunction(e,t){return\\\M263,\\\+(601+e+t)+\\\c0.7,0,18,39.7,52,119\\\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\\\nc340,-704.7,510.7,-1060.3,512,-1067\\\\nl\\\+e/2.084+\\\ -\\\+e+\\\\\\\nc4.7,-7.3,11,-11,19,-11\\\\nH40000v\\\+(40+e)+\\\H1012.3\\\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\\\nM\\\+(1001+e)+\\\ \\\+t+\\\h400000v\\\+(40+e)+\\\h-400000z\\\}(t,M);break;case\\\sqrtSize2\\\:nfunction(e,t){return\\\M983 \\\+(10+e+t)+\\\\\\\nl\\\+e/3.13+\\\ -\\\+e+\\\\\\\nc4,-6.7,10,-10,18,-10 H400000v\\\+(40+e)+\\\\\\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\\\nM\\\+(1001+e)+\\\ \\\+t+\\\h400000v\\\+(40+e)+\\\h-400000z\\\}(t,M);break;case\\\sqrtSize3\\\:nfunction(e,t){return\\\M424,\\\+(2398+e+t)+\\\\\\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\\\nl\\\+e/4.223+\\\ -\\\+e+\\\c4,-6.7,10,-10,18,-10 H400000\\\\nv\\\+(40+e)+\\\H1014.6\\\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\\\nc-2,6,-10,9,-24,9\\\\nc-8,0,-12,-0.7,-12,-2z M\\\+(1001+e)+\\\ \\\+t+\\\\\\\nh400000v\\\+(40+e)+\\\h-400000z\\\}(t,M);break;case\\\sqrtSize4\\\:nfunction(e,t){return\\\M473,\\\+(2713+e+t)+\\\\\\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\\\+e/5.298+\\\ -\\\+e+\\\\\\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\\\+(40+e)+\\\H1017.7\\\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\\\n606zM\\\+(1001+e)+\\\ \\\+t+\\\h400000v\\\+(40+e)+\\\H1017.7z\\\}(t,M);break;case\\\sqrtTall\\\:nfunction(e,t,r){return\\\M702 \\\+(e+t)+\\\H400000\\\+(40+e)+\\\\\\\nH742v\\\+(r-54-t-e)+\\\l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\\\n219 661 l218 661zM702 \\\+t+\\\H400000v\\\+(40+e)+\\\H742z\\\}(t,M,r)}return n}(e,n,r),onew J(e,i),snew K(o,{width:\\\400em\\\,height:V(t),viewBox:\\\0 0 400000 \\\+r,preserveAspectRatio:\\\xMinYMin slice\\\});return Ke.makeSvgSpan(\\\hide-tail\\\,s,a)},gr\\\(\\\,\\\\\\\\\\\lparen\\\,\\\)\\\,\\\\\\\\\\\rparen\\\,\\\\\\,\\\\\\\\\\\lbrack\\\,\\\\\\,\\\\\\\\\\\rbrack\\\,\\\\\\\\\\\{\\\,\\\\\\\\\\\lbrace\\\,\\\\\\\\\\\}\\\,\\\\\\\\\\\rbrace\\\,\\\\\\\\\\\lfloor\\\,\\\\\\\\\\\rfloor\\\,\\\\\\\u230a\\\,\\\\\\\u230b\\\,\\\\\\\\\\\lceil\\\,\\\\\\\\\\\rceil\\\,\\\\\\\u2308\\\,\\\\\\\u2309\\\,\\\\\\\\\\\surd\\\,vr\\\\\\\\\\\uparrow\\\,\\\\\\\\\\\downarrow\\\,\\\\\\\\\\\updownarrow\\\,\\\\\\\\\\\Uparrow\\\,\\\\\\\\\\\Downarrow\\\,\\\\\\\\\\\Updownarrow\\\,\\\|\\\,\\\\\\\\\\\|\\\,\\\\\\\\\\\vert\\\,\\\\\\\\\\\Vert\\\,\\\\\\\\\\\lvert\\\,\\\\\\\\\\\rvert\\\,\\\\\\\\\\\lVert\\\,\\\\\\\\\\\rVert\\\,\\\\\\\\\\\lgroup\\\,\\\\\\\\\\\rgroup\\\,\\\\\\\u27ee\\\,\\\\\\\u27ef\\\,\\\\\\\\\\\lmoustache\\\,\\\\\\\\\\\rmoustache\\\,\\\\\\\u23b0\\\,\\\\\\\u23b1\\\,br\\\\u003C\\\,\\\>\\\,\\\\\\\\\\\langle\\\,\\\\\\\\\\\rangle\\\,\\\/\\\,\\\\\\\\\\\backslash\\\,\\\\\\\\\\\lt\\\,\\\\\\\\\\\gt\\\,yr0,1.2,1.8,2.4,3,xr{type:\\\small\\\,style:x.SCRIPTSCRIPT},{type:\\\small\\\,style:x.SCRIPT},{type:\\\small\\\,style:x.TEXT},{type:\\\large\\\,size:1},{type:\\\large\\\,size:2},{type:\\\large\\\,size:3},{type:\\\large\\\,size:4},wr{type:\\\small\\\,style:x.SCRIPTSCRIPT},{type:\\\small\\\,style:x.SCRIPT},{type:\\\small\\\,style:x.TEXT},{type:\\\stack\\\},kr{type:\\\small\\\,style:x.SCRIPTSCRIPT},{type:\\\small\\\,style:x.SCRIPT},{type:\\\small\\\,style:x.TEXT},{type:\\\large\\\,size:1},{type:\\\large\\\,size:2},{type:\\\large\\\,size:3},{type:\\\large\\\,size:4},{type:\\\stack\\\},Srfunction(e){if(\\\small\\\e.type)return\\\Main-Regular\\\;if(\\\large\\\e.type)return\\\Size\\\+e.size+\\\-Regular\\\;if(\\\stack\\\e.type)return\\\Size4-Regular\\\;throw new Error(\\\Add support for delim type \\\+e.type+\\\ here.\\\)},Mrfunction(e,t,r,n){for(var aMath.min(2,3-n.style.size);a\u003Cr.length&&\\\stack\\\!ra.type;a++){var iar(e,Sr(ra),\\\math\\\),oi.height+i.depth;if(\\\small\\\ra.type&&(o*n.havingBaseStyle(ra.style).sizeMultiplier),o>t)return ra}return rr.length-1},zrfunction(e,t,r,n,a,i){var o;\\\\u003C\\\e||\\\\\\\\\\\lt\\\e||\\\\\\\u27e8\\\e?e\\\\\\\\\\\langle\\\:\\\>\\\!e&&\\\\\\\\\\\gt\\\!e&&\\\\\\\u27e9\\\!e||(e\\\\\\\\\\\rangle\\\),ol.contains(br,e)?xr:l.contains(gr,e)?kr:wr;var sMr(e,t,o,n);return\\\small\\\s.type?function(e,t,r,n,a,i){var oKe.makeSymbol(e,\\\Main-Regular\\\,a,n),sir(o,t,n,i);return r&&or(s,n,t),s}(e,s.style,r,n,a,i):\\\large\\\s.type?sr(e,s.size,r,n,a,i):pr(e,t,r,n,a,i)},Ar{sqrtImage:function(e,t){var r,n,at.havingBaseSizing(),iMr(\\\\\\\\\\\surd\\\,e*a.sizeMultiplier,kr,a),oa.sizeMultiplier,sMath.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l0,h0,m0;return\\\small\\\i.type?(e\u003C1?o1:e\u003C1.4&&(o.7),h(1+s)/o,(rfr(\\\sqrtMain\\\,l(1+s+dr)/o,m1e3+1e3*s+80,s,t)).style.minWidth\\\0.853em\\\,n.833/o):\\\large\\\i.type?(m1080*yri.size,h(yri.size+s)/o,l(yri.size+s+dr)/o,(rfr(\\\sqrtSize\\\+i.size,l,m,s,t)).style.minWidth\\\1.02em\\\,n1/o):(le+s+dr,he+s,mMath.floor(1e3*e+s)+80,(rfr(\\\sqrtTall\\\,l,m,s,t)).style.minWidth\\\0.742em\\\,n1.056),r.heighth,r.style.heightV(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if(\\\\u003C\\\e||\\\\\\\\\\\lt\\\e||\\\\\\\u27e8\\\e?e\\\\\\\\\\\langle\\\:\\\>\\\!e&&\\\\\\\\\\\gt\\\!e&&\\\\\\\u27e9\\\!e||(e\\\\\\\\\\\rangle\\\),l.contains(gr,e)||l.contains(br,e))return sr(e,t,!1,r,a,i);if(l.contains(vr,e))return pr(e,yrt,!1,r,a,i);throw new n(\\\Illegal delimiter: \\\+e+\\\\\\)},sizeToMaxHeight:yr,customSizedDelim:zr,leftRightDelim:function(e,t,r,n,a,i){var on.fontMetrics().axisHeight*n.sizeMultiplier,s5/n.fontMetrics().ptPerEm,lMath.max(t-o,r+o),hMath.max(l/500*901,2*l-s);return zr(e,h,!0,n,a,i)}},Tr{\\\\\\\\\\\bigl\\\:{mclass:\\\mopen\\\,size:1},\\\\\\\\\\\Bigl\\\:{mclass:\\\mopen\\\,size:2},\\\\\\\\\\\biggl\\\:{mclass:\\\mopen\\\,size:3},\\\\\\\\\\\Biggl\\\:{mclass:\\\mopen\\\,size:4},\\\\\\\\\\\bigr\\\:{mclass:\\\mclose\\\,size:1},\\\\\\\\\\\Bigr\\\:{mclass:\\\mclose\\\,size:2},\\\\\\\\\\\biggr\\\:{mclass:\\\mclose\\\,size:3},\\\\\\\\\\\Biggr\\\:{mclass:\\\mclose\\\,size:4},\\\\\\\\\\\bigm\\\:{mclass:\\\mrel\\\,size:1},\\\\\\\\\\\Bigm\\\:{mclass:\\\mrel\\\,size:2},\\\\\\\\\\\biggm\\\:{mclass:\\\mrel\\\,size:3},\\\\\\\\\\\Biggm\\\:{mclass:\\\mrel\\\,size:4},\\\\\\\\\\\big\\\:{mclass:\\\mord\\\,size:1},\\\\\\\\\\\Big\\\:{mclass:\\\mord\\\,size:2},\\\\\\\\\\\bigg\\\:{mclass:\\\mord\\\,size:3},\\\\\\\\\\\Bigg\\\:{mclass:\\\mord\\\,size:4}},Br\\\(\\\,\\\\\\\\\\\lparen\\\,\\\)\\\,\\\\\\\\\\\rparen\\\,\\\\\\,\\\\\\\\\\\lbrack\\\,\\\\\\,\\\\\\\\\\\rbrack\\\,\\\\\\\\\\\{\\\,\\\\\\\\\\\lbrace\\\,\\\\\\\\\\\}\\\,\\\\\\\\\\\rbrace\\\,\\\\\\\\\\\lfloor\\\,\\\\\\\\\\\rfloor\\\,\\\\\\\u230a\\\,\\\\\\\u230b\\\,\\\\\\\\\\\lceil\\\,\\\\\\\\\\\rceil\\\,\\\\\\\u2308\\\,\\\\\\\u2309\\\,\\\\u003C\\\,\\\>\\\,\\\\\\\\\\\langle\\\,\\\\\\\u27e8\\\,\\\\\\\\\\\rangle\\\,\\\\\\\u27e9\\\,\\\\\\\\\\\lt\\\,\\\\\\\\\\\gt\\\,\\\\\\\\\\\lvert\\\,\\\\\\\\\\\rvert\\\,\\\\\\\\\\\lVert\\\,\\\\\\\\\\\rVert\\\,\\\\\\\\\\\lgroup\\\,\\\\\\\\\\\rgroup\\\,\\\\\\\u27ee\\\,\\\\\\\u27ef\\\,\\\\\\\\\\\lmoustache\\\,\\\\\\\\\\\rmoustache\\\,\\\\\\\u23b0\\\,\\\\\\\u23b1\\\,\\\/\\\,\\\\\\\\\\\backslash\\\,\\\|\\\,\\\\\\\\\\\vert\\\,\\\\\\\\\\\|\\\,\\\\\\\\\\\Vert\\\,\\\\\\\\\\\uparrow\\\,\\\\\\\\\\\Uparrow\\\,\\\\\\\\\\\downarrow\\\,\\\\\\\\\\\Downarrow\\\,\\\\\\\\\\\updownarrow\\\,\\\\\\\\\\\Updownarrow\\\,\\\.\\\;function Cr(e,t){var rXt(e);if(r&&l.contains(Br,r.text))return r;throw new n(r?\\\Invalid delimiter \\\+r.text+\\\ after \\\+t.funcName+\\\\\\:\\\Invalid delimiter type \\\+e.type+\\\\\\,e)}function qr(e){if(!e.body)throw new Error(\\\Bug: The leftright ParseNode wasnt fully parsed.\\\)}ot({type:\\\delimsizing\\\,names:\\\\\\\\\\\bigl\\\,\\\\\\\\\\\Bigl\\\,\\\\\\\\\\\biggl\\\,\\\\\\\\\\\Biggl\\\,\\\\\\\\\\\bigr\\\,\\\\\\\\\\\Bigr\\\,\\\\\\\\\\\biggr\\\,\\\\\\\\\\\Biggr\\\,\\\\\\\\\\\bigm\\\,\\\\\\\\\\\Bigm\\\,\\\\\\\\\\\biggm\\\,\\\\\\\\\\\Biggm\\\,\\\\\\\\\\\big\\\,\\\\\\\\\\\Big\\\,\\\\\\\\\\\bigg\\\,\\\\\\\\\\\Bigg\\\,props:{numArgs:1,argTypes:\\\primitive\\\},handler:function(e,t){var rCr(t0,e);return{type:\\\delimsizing\\\,mode:e.parser.mode,size:Tre.funcName.size,mclass:Tre.funcName.mclass,delim:r.text}},htmlBuilder:function(e,t){return\\\.\\\e.delim?Ke.makeSpan(e.mclass):Ar.sizedDelim(e.delim,e.size,t,e.mode,e.mclass)},mathmlBuilder:function(e){var t;\\\.\\\!e.delim&&t.push(Bt(e.delim,e.mode));var rnew Tt.MathNode(\\\mo\\\,t);\\\mopen\\\e.mclass||\\\mclose\\\e.mclass?r.setAttribute(\\\fence\\\,\\\true\\\):r.setAttribute(\\\fence\\\,\\\false\\\),r.setAttribute(\\\stretchy\\\,\\\true\\\);var nV(Ar.sizeToMaxHeighte.size);return r.setAttribute(\\\minsize\\\,n),r.setAttribute(\\\maxsize\\\,n),r}}),ot({type:\\\leftright-right\\\,names:\\\\\\\\\\\right\\\,props:{numArgs:1,primitive:!0},handler:function(e,t){var re.parser.gullet.macros.get(\\\\\\\\\\\current@color\\\);if(r&&\\\string\\\!typeof r)throw new n(\\\\\\\\\\\current@color set to non-string in \\\\\\\\right\\\);return{type:\\\leftright-right\\\,mode:e.parser.mode,delim:Cr(t0,e).text,color:r}}}),ot({type:\\\leftright\\\,names:\\\\\\\\\\\left\\\,props:{numArgs:1,primitive:!0},handler:function(e,t){var rCr(t0,e),ne.parser;++n.leftrightDepth;var an.parseExpression(!1);--n.leftrightDepth,n.expect(\\\\\\\\\\\right\\\,!1);var iUt(n.parseFunction(),\\\leftright-right\\\);return{type:\\\leftright\\\,mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){qr(e);for(var r,n,aft(e.body,t,!0,\\\mopen\\\,\\\mclose\\\),i0,o0,s!1,l0;l\u003Ca.length;l++)al.isMiddle?s!0:(iMath.max(al.height,i),oMath.max(al.depth,o));if(i*t.sizeMultiplier,o*t.sizeMultiplier,r\\\.\\\e.left?xt(t,\\\mopen\\\):Ar.leftRightDelim(e.left,i,o,t,e.mode,\\\mopen\\\),a.unshift(r),s)for(var h1;h\u003Ca.length;h++){var mah.isMiddle;m&&(ahAr.leftRightDelim(m.delim,i,o,m.options,e.mode,))}if(\\\.\\\e.right)nxt(t,\\\mclose\\\);else{var ce.rightColor?t.withColor(e.rightColor):t;nAr.leftRightDelim(e.right,i,o,c,e.mode,\\\mclose\\\)}return a.push(n),Ke.makeSpan(\\\minner\\\,a,t)},mathmlBuilder:function(e,t){qr(e);var rNt(e.body,t);if(\\\.\\\!e.left){var nnew Tt.MathNode(\\\mo\\\,Bt(e.left,e.mode));n.setAttribute(\\\fence\\\,\\\true\\\),r.unshift(n)}if(\\\.\\\!e.right){var anew Tt.MathNode(\\\mo\\\,Bt(e.right,e.mode));a.setAttribute(\\\fence\\\,\\\true\\\),e.rightColor&&a.setAttribute(\\\mathcolor\\\,e.rightColor),r.push(a)}return Ct(r)}}),ot({type:\\\middle\\\,names:\\\\\\\\\\\middle\\\,props:{numArgs:1,primitive:!0},handler:function(e,t){var rCr(t0,e);if(!e.parser.leftrightDepth)throw new n(\\\\\\\\\\\middle without preceding \\\\\\\\left\\\,r);return{type:\\\middle\\\,mode:e.parser.mode,delim:r.text}},htmlBuilder:function(e,t){var r;if(\\\.\\\e.delim)rxt(t,);else{rAr.sizedDelim(e.delim,1,t,e.mode,);var n{delim:e.delim,options:t};r.isMiddlen}return r},mathmlBuilder:function(e,t){var r\\\\\\\\\\\vert\\\e.delim||\\\|\\\e.delim?Bt(\\\|\\\,\\\text\\\):Bt(e.delim,e.mode),nnew Tt.MathNode(\\\mo\\\,r);return n.setAttribute(\\\fence\\\,\\\true\\\),n.setAttribute(\\\lspace\\\,\\\0.05em\\\),n.setAttribute(\\\rspace\\\,\\\0.05em\\\),n}});var Nrfunction(e,t){var r,n,a,iKe.wrapFragment(wt(e.body,t),t),oe.label.substr(1),st.sizeMultiplier,h0,ml.isCharacterBox(e.body);if(\\\sout\\\o)(rKe.makeSpan(\\\stretchy\\\,\\\sout\\\)).heightt.fontMetrics().defaultRuleThickness/s,h-.5*t.fontMetrics().xHeight;else if(\\\phase\\\o){var cF({number:.6,unit:\\\pt\\\},t),uF({number:.35,unit:\\\ex\\\},t);s/t.havingBaseSizing().sizeMultiplier;var pi.height+i.depth+c+u;i.style.paddingLeftV(p/2+c);var dMath.floor(1e3*p*s),f\\\M400000 \\\+(nd)+\\\ H0 L\\\+n/2+\\\ 0 l65 45 L145 \\\+(n-80)+\\\ H400000z\\\,gnew K(new J(\\\phase\\\,f),{width:\\\400em\\\,height:V(d/1e3),viewBox:\\\0 0 400000 \\\+d,preserveAspectRatio:\\\xMinYMin slice\\\});(rKe.makeSvgSpan(\\\hide-tail\\\,g,t)).style.heightV(p),hi.depth+c+u}else{/cancel/.test(o)?m||i.classes.push(\\\cancel-pad\\\):\\\angl\\\o?i.classes.push(\\\anglpad\\\):i.classes.push(\\\boxpad\\\);var v0,b0,y0;/box/.test(o)?(yMath.max(t.fontMetrics().fboxrule,t.minRuleThickness),bvt.fontMetrics().fboxsep+(\\\colorbox\\\o?0:y)):\\\angl\\\o?(v4*(yMath.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),bMath.max(0,.25-i.depth)):bvm?.2:0,rFt(i,o,v,b,t),/fbox|boxed|fcolorbox/.test(o)?(r.style.borderStyle\\\solid\\\,r.style.borderWidthV(y)):\\\angl\\\o&&.049!y&&(r.style.borderTopWidthV(y),r.style.borderRightWidthV(y)),hi.depth+b,e.backgroundColor&&(r.style.backgroundColore.backgroundColor,e.borderColor&&(r.style.borderColore.borderColor))}if(e.backgroundColor)aKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:r,shift:h},{type:\\\elem\\\,elem:i,shift:0}},t);else{var x/cancel|phase/.test(o)?\\\svg-align\\\:;aKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:i,shift:0},{type:\\\elem\\\,elem:r,shift:h,wrapperClasses:x}},t)}return/cancel/.test(o)&&(a.heighti.height,a.depthi.depth),/cancel/.test(o)&&!m?Ke.makeSpan(\\\mord\\\,\\\cancel-lap\\\,a,t):Ke.makeSpan(\\\mord\\\,a,t)},Irfunction(e,t){var r0,nnew Tt.MathNode(e.label.indexOf(\\\colorbox\\\)>-1?\\\mpadded\\\:\\\menclose\\\,Rt(e.body,t));switch(e.label){case\\\\\\\\\\\cancel\\\:n.setAttribute(\\\notation\\\,\\\updiagonalstrike\\\);break;case\\\\\\\\\\\bcancel\\\:n.setAttribute(\\\notation\\\,\\\downdiagonalstrike\\\);break;case\\\\\\\\\\\phase\\\:n.setAttribute(\\\notation\\\,\\\phasorangle\\\);break;case\\\\\\\\\\\sout\\\:n.setAttribute(\\\notation\\\,\\\horizontalstrike\\\);break;case\\\\\\\\\\\fbox\\\:n.setAttribute(\\\notation\\\,\\\box\\\);break;case\\\\\\\\\\\angl\\\:n.setAttribute(\\\notation\\\,\\\actuarial\\\);break;case\\\\\\\\\\\fcolorbox\\\:case\\\\\\\\\\\colorbox\\\:if(rt.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute(\\\width\\\,\\\+\\\+2*r+\\\pt\\\),n.setAttribute(\\\height\\\,\\\+\\\+2*r+\\\pt\\\),n.setAttribute(\\\lspace\\\,r+\\\pt\\\),n.setAttribute(\\\voffset\\\,r+\\\pt\\\),\\\\\\\\\\\fcolorbox\\\e.label){var aMath.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute(\\\style\\\,\\\border: \\\+a+\\\em solid \\\+String(e.borderColor))}break;case\\\\\\\\\\\xcancel\\\:n.setAttribute(\\\notation\\\,\\\updiagonalstrike downdiagonalstrike\\\)}return e.backgroundColor&&n.setAttribute(\\\mathbackground\\\,e.backgroundColor),n};ot({type:\\\enclose\\\,names:\\\\\\\\\\\colorbox\\\,props:{numArgs:2,allowedInText:!0,argTypes:\\\color\\\,\\\text\\\},handler:function(e,t,r){var ne.parser,ae.funcName,iUt(t0,\\\color-token\\\).color,ot1;return{type:\\\enclose\\\,mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:\\\enclose\\\,names:\\\\\\\\\\\fcolorbox\\\,props:{numArgs:3,allowedInText:!0,argTypes:\\\color\\\,\\\color\\\,\\\text\\\},handler:function(e,t,r){var ne.parser,ae.funcName,iUt(t0,\\\color-token\\\).color,oUt(t1,\\\color-token\\\).color,st2;return{type:\\\enclose\\\,mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:\\\enclose\\\,names:\\\\\\\\\\\fbox\\\,props:{numArgs:1,argTypes:\\\hbox\\\,allowedInText:!0},handler:function(e,t){return{type:\\\enclose\\\,mode:e.parser.mode,label:\\\\\\\\\\\fbox\\\,body:t0}}}),ot({type:\\\enclose\\\,names:\\\\\\\\\\\cancel\\\,\\\\\\\\\\\bcancel\\\,\\\\\\\\\\\xcancel\\\,\\\\\\\\\\\sout\\\,\\\\\\\\\\\phase\\\,props:{numArgs:1},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\enclose\\\,mode:r.mode,label:n,body:a}},htmlBuilder:Nr,mathmlBuilder:Ir}),ot({type:\\\enclose\\\,names:\\\\\\\\\\\angl\\\,props:{numArgs:1,argTypes:\\\hbox\\\,allowedInText:!1},handler:function(e,t){return{type:\\\enclose\\\,mode:e.parser.mode,label:\\\\\\\\\\\angl\\\,body:t0}}});var Rr{};function Or(e){for(var te.type,re.names,ne.props,ae.handler,ie.htmlBuilder,oe.mathmlBuilder,s{type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l0;l\u003Cr.length;++l)Rrrls;i&&(atti),o&&(itto)}var Hr{};function Er(e,t){Hret}var Lrfunction(){function e(e,t,r){this.lexervoid 0,this.startvoid 0,this.endvoid 0,this.lexere,this.startt,this.endr}return e.rangefunction(t,r){return r?t&&t.loc&&r.loc&&t.loc.lexerr.loc.lexer?new e(t.loc.lexer,t.loc.start,r.loc.end):null:t&&t.loc},e}(),Drfunction(){function e(e,t){this.textvoid 0,this.locvoid 0,this.noexpandvoid 0,this.treatAsRelaxvoid 0,this.texte,this.loct}return e.prototype.rangefunction(t,r){return new e(r,Lr.range(this,t))},e}();function Pr(e){var t;e.consumeSpaces();for(var re.fetch().text;\\\\\\\\\\\hline\\\r||\\\\\\\\\\\hdashline\\\r;)e.consume(),t.push(\\\\\\\\\\\hdashline\\\r),e.consumeSpaces(),re.fetch().text;return t}var Frfunction(e){if(!e.parser.settings.displayMode)throw new n(\\\{\\\+e.envName+\\\} can be used only in display mode.\\\)};function Vr(e){if(-1e.indexOf(\\\ed\\\))return-1e.indexOf(\\\*\\\)}function Gr(e,t,r){var at.hskipBeforeAndAfter,it.addJot,ot.cols,st.arraystretch,lt.colSeparationType,ht.autoTag,mt.singleRow,ct.emptySingleRow,ut.maxNumCols,pt.leqno;if(e.gullet.beginGroup(),m||e.gullet.macros.set(\\\\\\\\\\\cr\\\,\\\\\\\\\\\\\\\\\\\\\\\\\\\relax\\\),!s){var de.gullet.expandMacroAsText(\\\\\\\\\\\arraystretch\\\);if(nulld)s1;else if(!(sparseFloat(d))||s\u003C0)throw new n(\\\Invalid \\\\\\\\arraystretch: \\\+d)}e.gullet.beginGroup();var f,gf,v,b,ynull!h?:void 0;function x(){h&&e.gullet.macros.set(\\\\\\\\\\\@eqnsw\\\,\\\1\\\,!0)}function w(){y&&(e.gullet.macros.get(\\\\\\\\\\\df@tag\\\)?(y.push(e.subparse(new Dr(\\\\\\\\\\\df@tag\\\))),e.gullet.macros.set(\\\\\\\\\\\df@tag\\\,void 0,!0)):y.push(Boolean(h)&&\\\1\\\e.gullet.macros.get(\\\\\\\\\\\@eqnsw\\\)))}for(x(),b.push(Pr(e));;){var ke.parseExpression(!1,m?\\\\\\\\\\\end\\\:\\\\\\\\\\\\\\\\\\\\\\);e.gullet.endGroup(),e.gullet.beginGroup(),k{type:\\\ordgroup\\\,mode:e.mode,body:k},r&&(k{type:\\\styling\\\,mode:e.mode,style:r,body:k}),f.push(k);var Se.fetch().text;if(\\\&\\\S){if(u&&f.lengthu){if(m||l)throw new n(\\\Too many tab characters: &\\\,e.nextToken);e.settings.reportNonstrict(\\\textEnv\\\,\\\Too few columns specified in the {array} column argument.\\\)}e.consume()}else{if(\\\\\\\\\\\end\\\S){w(),1f.length&&\\\styling\\\k.type&&0k.body0.body.length&&(g.length>1||!c)&&g.pop(),b.length\u003Cg.length+1&&b.push();break}if(\\\\\\\\\\\\\\\\\\\\\\!S)throw new n(\\\Expected & or \\\\\\\\\\\\\\\\ or \\\\\\\\cr or \\\\\\\\end\\\,e.nextToken);e.consume();var Mvoid 0;\\\ \\\!e.gullet.future().text&&(Me.parseSizeGroup(!0)),v.push(M?M.value:null),w(),b.push(Pr(e)),f,g.push(f),x()}}return e.gullet.endGroup(),e.gullet.endGroup(),{type:\\\array\\\,mode:e.mode,addJot:i,arraystretch:s,body:g,cols:o,rowGaps:v,hskipBeforeAndAfter:a,hLinesBeforeRow:b,colSeparationType:l,tags:y,leqno:p}}function Ur(e){return\\\d\\\e.substr(0,1)?\\\display\\\:\\\text\\\}var Yrfunction(e,t){var r,a,ie.body.length,oe.hLinesBeforeRow,s0,hnew Array(i),m,cMath.max(t.fontMetrics().arrayRuleWidth,t.minRuleThickness),u1/t.fontMetrics().ptPerEm,p5*u;e.colSeparationType&&\\\small\\\e.colSeparationType&&(pt.havingStyle(x.SCRIPT).sizeMultiplier/t.sizeMultiplier*.2778);var d\\\CD\\\e.colSeparationType?F({number:3,unit:\\\ex\\\},t):12*u,f3*u,ge.arraystretch*d,v.7*g,b.3*g,y0;function w(e){for(var t0;t\u003Ce.length;++t)t>0&&(y+.25),m.push({pos:y,isDashed:et})}for(w(o0),r0;r\u003Ce.body.length;++r){var ke.bodyr,Sv,Mb;s\u003Ck.length&&(sk.length);var znew Array(k.length);for(a0;a\u003Ck.length;++a){var Awt(ka,t);M\u003CA.depth&&(MA.depth),S\u003CA.height&&(SA.height),zaA}var Te.rowGapsr,B0;T&&(BF(T,t))>0&&(M\u003C(B+b)&&(MB),B0),e.addJot&&(M+f),z.heightS,z.depthM,y+S,z.posy,y+M+B,hrz,w(or+1)}var C,q,Ny/2+t.fontMetrics().axisHeight,Ie.cols||,R,O;if(e.tags&&e.tags.some((function(e){return e})))for(r0;r\u003Ci;++r){var Hhr,EH.pos-N,Le.tagsr,Dvoid 0;(D!0L?Ke.makeSpan(\\\eqn-num\\\,,t):!1L?Ke.makeSpan(,,t):Ke.makeSpan(,ft(L,t,!0),t)).depthH.depth,D.heightH.height,O.push({type:\\\elem\\\,elem:D,shift:E})}for(a0,q0;a\u003Cs||q\u003CI.length;++a,++q){for(var PIq||{},G!0;\\\separator\\\P.type;){if(G||((CKe.makeSpan(\\\arraycolsep\\\,)).style.widthV(t.fontMetrics().doubleRuleSep),R.push(C)),\\\|\\\!P.separator&&\\\:\\\!P.separator)throw new n(\\\Invalid separator type: \\\+P.separator);var U\\\|\\\P.separator?\\\solid\\\:\\\dashed\\\,YKe.makeSpan(\\\vertical-separator\\\,,t);Y.style.heightV(y),Y.style.borderRightWidthV(c),Y.style.borderRightStyleU,Y.style.margin\\\0 \\\+V(-c/2);var Xy-N;X&&(Y.style.verticalAlignV(-X)),R.push(Y),PI++q||{},G!1}if(!(a>s)){var Wvoid 0;(a>0||e.hskipBeforeAndAfter)&&0!(Wl.deflt(P.pregap,p))&&((CKe.makeSpan(\\\arraycolsep\\\,)).style.widthV(W),R.push(C));var _;for(r0;r\u003Ci;++r){var jhr,$ja;if($){var Zj.pos-N;$.depthj.depth,$.heightj.height,_.push({type:\\\elem\\\,elem:$,shift:Z})}}_Ke.makeVList({positionType:\\\individualShift\\\,children:_},t),_Ke.makeSpan(\\\col-align-\\\+(P.align||\\\c\\\),_),R.push(_),(a\u003Cs-1||e.hskipBeforeAndAfter)&&0!(Wl.deflt(P.postgap,p))&&((CKe.makeSpan(\\\arraycolsep\\\,)).style.widthV(W),R.push(C))}}if(hKe.makeSpan(\\\mtable\\\,R),m.length>0){for(var KKe.makeLineSpan(\\\hline\\\,t,c),JKe.makeLineSpan(\\\hdashline\\\,t,c),Q{type:\\\elem\\\,elem:h,shift:0};m.length>0;){var eem.pop(),teee.pos-N;ee.isDashed?Q.push({type:\\\elem\\\,elem:J,shift:te}):Q.push({type:\\\elem\\\,elem:K,shift:te})}hKe.makeVList({positionType:\\\individualShift\\\,children:Q},t)}if(0O.length)return Ke.makeSpan(\\\mord\\\,h,t);var reKe.makeVList({positionType:\\\individualShift\\\,children:O},t);return reKe.makeSpan(\\\tag\\\,re,t),Ke.makeFragment(h,re)},Xr{c:\\\center \\\,l:\\\left \\\,r:\\\right \\\},Wrfunction(e,t){for(var r,nnew Tt.MathNode(\\\mtd\\\,,\\\mtr-glue\\\),anew Tt.MathNode(\\\mtd\\\,,\\\mml-eqn-num\\\),i0;i\u003Ce.body.length;i++){for(var oe.bodyi,s,l0;l\u003Co.length;l++)s.push(new Tt.MathNode(\\\mtd\\\,Rt(ol,t)));e.tags&&e.tagsi&&(s.unshift(n),s.push(n),e.leqno?s.unshift(a):s.push(a)),r.push(new Tt.MathNode(\\\mtr\\\,s))}var hnew Tt.MathNode(\\\mtable\\\,r),m.5e.arraystretch?.1:.16+e.arraystretch-1+(e.addJot?.09:0);h.setAttribute(\\\rowspacing\\\,V(m));var c\\\\\\,u\\\\\\;if(e.cols&&e.cols.length>0){var pe.cols,d\\\\\\,f!1,g0,vp.length;\\\separator\\\p0.type&&(c+\\\top \\\,g1),\\\separator\\\pp.length-1.type&&(c+\\\bottom \\\,v-1);for(var bg;b\u003Cv;b++)\\\align\\\pb.type?(u+Xrpb.align,f&&(d+\\\none \\\),f!0):\\\separator\\\pb.type&&f&&(d+\\\|\\\pb.separator?\\\solid \\\:\\\dashed \\\,f!1);h.setAttribute(\\\columnalign\\\,u.trim()),/sd/.test(d)&&h.setAttribute(\\\columnlines\\\,d.trim())}if(\\\align\\\e.colSeparationType){for(var ye.cols||,x\\\\\\,w1;w\u003Cy.length;w++)x+w%2?\\\0em \\\:\\\1em \\\;h.setAttribute(\\\columnspacing\\\,x.trim())}else\\\alignat\\\e.colSeparationType||\\\gather\\\e.colSeparationType?h.setAttribute(\\\columnspacing\\\,\\\0em\\\):\\\small\\\e.colSeparationType?h.setAttribute(\\\columnspacing\\\,\\\0.2778em\\\):\\\CD\\\e.colSeparationType?h.setAttribute(\\\columnspacing\\\,\\\0.5em\\\):h.setAttribute(\\\columnspacing\\\,\\\1em\\\);var k\\\\\\,Se.hLinesBeforeRow;c+S0.length>0?\\\left \\\:\\\\\\,c+SS.length-1.length>0?\\\right \\\:\\\\\\;for(var M1;M\u003CS.length-1;M++)k+0SM.length?\\\none \\\:SM0?\\\dashed \\\:\\\solid \\\;return/sd/.test(k)&&h.setAttribute(\\\rowlines\\\,k.trim()),\\\\\\!c&&(hnew Tt.MathNode(\\\menclose\\\,h)).setAttribute(\\\notation\\\,c.trim()),e.arraystretch&&e.arraystretch\u003C1&&(hnew Tt.MathNode(\\\mstyle\\\,h)).setAttribute(\\\scriptlevel\\\,\\\1\\\),h},_rfunction(e,t){-1e.envName.indexOf(\\\ed\\\)&&Fr(e);var r,a,ie.envName.indexOf(\\\at\\\)>-1?\\\alignat\\\:\\\align\\\,o\\\split\\\e.envName,sGr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Vr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},\\\display\\\),l0,h{type:\\\ordgroup\\\,mode:e.mode,body:};if(t0&&\\\ordgroup\\\t0.type){for(var m\\\\\\,c0;c\u003Ct0.body.length;c++){m+Ut(t0.bodyc,\\\textord\\\).text}rNumber(m),l2*r}var u!l;s.body.forEach((function(e){for(var t1;t\u003Ce.length;t+2){var aUt(et,\\\styling\\\);Ut(a.body0,\\\ordgroup\\\).body.unshift(h)}if(u)l\u003Ce.length&&(le.length);else{var ie.length/2;if(r\u003Ci)throw new n(\\\Too many math in a row: expected \\\+r+\\\, but got \\\+i,e0)}}));for(var p0;p\u003Cl;++p){var d\\\r\\\,f0;p%21?d\\\l\\\:p>0&&u&&(f1),ap{type:\\\align\\\,align:d,pregap:f,postgap:0}}return s.colSeparationTypeu?\\\align\\\:\\\alignat\\\,s};Or({type:\\\array\\\,names:\\\array\\\,\\\darray\\\,props:{numArgs:1},handler:function(e,t){var r(Xt(t0)?t0:Ut(t0,\\\ordgroup\\\).body).map((function(e){var tYt(e).text;if(-1!\\\lcr\\\.indexOf(t))return{type:\\\align\\\,align:t};if(\\\|\\\t)return{type:\\\separator\\\,separator:\\\|\\\};if(\\\:\\\t)return{type:\\\separator\\\,separator:\\\:\\\};throw new n(\\\Unknown column alignment: \\\+t,e)})),a{cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Gr(e.parser,a,Ur(e.envName))},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\matrix\\\,\\\pmatrix\\\,\\\bmatrix\\\,\\\Bmatrix\\\,\\\vmatrix\\\,\\\Vmatrix\\\,\\\matrix*\\\,\\\pmatrix*\\\,\\\bmatrix*\\\,\\\Bmatrix*\\\,\\\vmatrix*\\\,\\\Vmatrix*\\\,props:{numArgs:0},handler:function(e){var t{matrix:null,pmatrix:\\\(\\\,\\\)\\\,bmatrix:\\\\\\,\\\\\\,Bmatrix:\\\\\\\\\\\{\\\,\\\\\\\\\\\}\\\,vmatrix:\\\|\\\,\\\|\\\,Vmatrix:\\\\\\\\\\\Vert\\\,\\\\\\\\\\\Vert\\\}e.envName.replace(\\\*\\\,\\\\\\),r\\\c\\\,a{hskipBeforeAndAfter:!1,cols:{type:\\\align\\\,align:r}};if(\\\*\\\e.envName.charAt(e.envName.length-1)){var ie.parser;if(i.consumeSpaces(),\\\\\\i.fetch().text){if(i.consume(),i.consumeSpaces(),ri.fetch().text,-1\\\lcr\\\.indexOf(r))throw new n(\\\Expected l or c or r\\\,i.nextToken);i.consume(),i.consumeSpaces(),i.expect(\\\\\\),i.consume(),a.cols{type:\\\align\\\,align:r}}}var oGr(e.parser,a,Ur(e.envName)),sMath.max.apply(Math,0.concat(o.body.map((function(e){return e.length}))));return o.colsnew Array(s).fill({type:\\\align\\\,align:r}),t?{type:\\\leftright\\\,mode:e.mode,body:o,left:t0,right:t1,rightColor:void 0}:o},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\smallmatrix\\\,props:{numArgs:0},handler:function(e){var tGr(e.parser,{arraystretch:.5},\\\script\\\);return t.colSeparationType\\\small\\\,t},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\subarray\\\,props:{numArgs:1},handler:function(e,t){var r(Xt(t0)?t0:Ut(t0,\\\ordgroup\\\).body).map((function(e){var tYt(e).text;if(-1!\\\lc\\\.indexOf(t))return{type:\\\align\\\,align:t};throw new n(\\\Unknown column alignment: \\\+t,e)}));if(r.length>1)throw new n(\\\{subarray} can contain only one column\\\);var a{cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((aGr(e.parser,a,\\\script\\\)).body.length>0&&a.body0.length>1)throw new n(\\\{subarray} can contain only one column\\\);return a},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\cases\\\,\\\dcases\\\,\\\rcases\\\,\\\drcases\\\,props:{numArgs:0},handler:function(e){var tGr(e.parser,{arraystretch:1.2,cols:{type:\\\align\\\,align:\\\l\\\,pregap:0,postgap:1},{type:\\\align\\\,align:\\\l\\\,pregap:0,postgap:0}},Ur(e.envName));return{type:\\\leftright\\\,mode:e.mode,body:t,left:e.envName.indexOf(\\\r\\\)>-1?\\\.\\\:\\\\\\\\\\\{\\\,right:e.envName.indexOf(\\\r\\\)>-1?\\\\\\\\\\\}\\\:\\\.\\\,rightColor:void 0}},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\align\\\,\\\align*\\\,\\\aligned\\\,\\\split\\\,props:{numArgs:0},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\gathered\\\,\\\gather\\\,\\\gather*\\\,props:{numArgs:0},handler:function(e){l.contains(\\\gather\\\,\\\gather*\\\,e.envName)&&Fr(e);var t{cols:{type:\\\align\\\,align:\\\c\\\},addJot:!0,colSeparationType:\\\gather\\\,autoTag:Vr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Gr(e.parser,t,\\\display\\\)},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\alignat\\\,\\\alignat*\\\,\\\alignedat\\\,props:{numArgs:1},handler:_r,htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\equation\\\,\\\equation*\\\,props:{numArgs:0},handler:function(e){Fr(e);var t{autoTag:Vr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Gr(e.parser,t,\\\display\\\)},htmlBuilder:Yr,mathmlBuilder:Wr}),Or({type:\\\array\\\,names:\\\CD\\\,props:{numArgs:0},handler:function(e){return Fr(e),function(e){var t;for(e.gullet.beginGroup(),e.gullet.macros.set(\\\\\\\\\\\cr\\\,\\\\\\\\\\\\\\\\\\\\\\\\\\\relax\\\),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,\\\\\\\\\\\\\\\\\\\\\\)),e.gullet.endGroup(),e.gullet.beginGroup();var re.fetch().text;if(\\\&\\\!r&&\\\\\\\\\\\\\\\\\\\\\\!r){if(\\\\\\\\\\\end\\\r){0tt.length-1.length&&t.pop();break}throw new n(\\\Expected \\\\\\\\\\\\\\\\ or \\\\\\\\cr or \\\\\\\\end\\\,e.nextToken)}e.consume()}for(var a,i,o,so,l0;l\u003Ct.length;l++){for(var htl,m{type:\\\styling\\\,body:,mode:\\\math\\\,style:\\\display\\\},c0;c\u003Ch.length;c++)if(Kt(hc)){o.push(m);var uYt(hc+1).text,pnew Array(2);if(p0{type:\\\ordgroup\\\,mode:\\\math\\\,body:},p1{type:\\\ordgroup\\\,mode:\\\math\\\,body:},\\\|.\\\.indexOf(u)>-1);else{if(!(\\\\u003C>AV\\\.indexOf(u)>-1))throw new n(Expected one of \\\\u003C>AV|.\\\ after @,hc);for(var d0;d\u003C2;d++){for(var f!0,gc+1;g\u003Ch.length;g++){if(iu,(\\\mathord\\\(ahg).type||\\\atom\\\a.type)&&a.texti){f!1,cg;break}if(Kt(hg))throw new n(\\\Missing a \\\+u+\\\ character to complete a CD arrow.\\\,hg);pd.body.push(hg)}if(f)throw new n(\\\Missing a \\\+u+\\\ character to complete a CD arrow.\\\,hc)}}var v{type:\\\styling\\\,body:Jt(u,p,e),mode:\\\math\\\,style:\\\display\\\};o.push(v),m{type:\\\styling\\\,body:,mode:\\\math\\\,style:\\\display\\\}}else m.body.push(hc);l%20?o.push(m):o.shift(),o,s.push(o)}return e.gullet.endGroup(),e.gullet.endGroup(),{type:\\\array\\\,mode:\\\math\\\,body:s,arraystretch:1,addJot:!0,rowGaps:null,cols:new Array(s0.length).fill({type:\\\align\\\,align:\\\c\\\,pregap:.25,postgap:.25}),colSeparationType:\\\CD\\\,hLinesBeforeRow:new Array(s.length+1).fill()}}(e.parser)},htmlBuilder:Yr,mathmlBuilder:Wr}),Er(\\\\\\\\\\\nonumber\\\,\\\\\\\\\\\gdef\\\\\\\\@eqnsw{0}\\\),Er(\\\\\\\\\\\notag\\\,\\\\\\\\\\\nonumber\\\),ot({type:\\\text\\\,names:\\\\\\\\\\\hline\\\,\\\\\\\\\\\hdashline\\\,props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(e,t){throw new n(e.funcName+\\\ valid only within array environment\\\)}});var jrRr;ot({type:\\\environment\\\,names:\\\\\\\\\\\begin\\\,\\\\\\\\\\\end\\\,props:{numArgs:1,argTypes:\\\text\\\},handler:function(e,t){var re.parser,ae.funcName,it0;if(\\\ordgroup\\\!i.type)throw new n(\\\Invalid environment name\\\,i);for(var o\\\\\\,s0;s\u003Ci.body.length;++s)o+Ut(i.bodys,\\\textord\\\).text;if(\\\\\\\\\\\begin\\\a){if(!jr.hasOwnProperty(o))throw new n(\\\No such environment: \\\+o,i);var ljro,hr.parseArguments(\\\\\\\\\\\begin{\\\+o+\\\}\\\,l),mh.args,ch.optArgs,u{mode:r.mode,envName:o,parser:r},pl.handler(u,m,c);r.expect(\\\\\\\\\\\end\\\,!1);var dr.nextToken,fUt(r.parseFunction(),\\\environment\\\);if(f.name!o)throw new n(\\\Mismatch: \\\\\\\\begin{\\\+o+\\\} matched by \\\\\\\\end{\\\+f.name+\\\}\\\,d);return p}return{type:\\\environment\\\,mode:r.mode,name:o,nameGroup:i}}});var $rKe.makeSpan;function Zr(e,t){var rft(e.body,t,!0);return $r(e.mclass,r,t)}function Kr(e,t){var r,nNt(e.body,t);return\\\minner\\\e.mclass?rnew Tt.MathNode(\\\mpadded\\\,n):\\\mord\\\e.mclass?e.isCharacterBox?(rn0).type\\\mi\\\:rnew Tt.MathNode(\\\mi\\\,n):(e.isCharacterBox?(rn0).type\\\mo\\\:rnew Tt.MathNode(\\\mo\\\,n),\\\mbin\\\e.mclass?(r.attributes.lspace\\\0.22em\\\,r.attributes.rspace\\\0.22em\\\):\\\mpunct\\\e.mclass?(r.attributes.lspace\\\0em\\\,r.attributes.rspace\\\0.17em\\\):\\\mopen\\\e.mclass||\\\mclose\\\e.mclass?(r.attributes.lspace\\\0em\\\,r.attributes.rspace\\\0em\\\):\\\minner\\\e.mclass&&(r.attributes.lspace\\\0.0556em\\\,r.attributes.width\\\+0.1111em\\\)),r}ot({type:\\\mclass\\\,names:\\\\\\\\\\\mathord\\\,\\\\\\\\\\\mathbin\\\,\\\\\\\\\\\mathrel\\\,\\\\\\\\\\\mathopen\\\,\\\\\\\\\\\mathclose\\\,\\\\\\\\\\\mathpunct\\\,\\\\\\\\\\\mathinner\\\,props:{numArgs:1,primitive:!0},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\mclass\\\,mode:r.mode,mclass:\\\m\\\+n.substr(5),body:ht(a),isCharacterBox:l.isCharacterBox(a)}},htmlBuilder:Zr,mathmlBuilder:Kr});var Jrfunction(e){var t\\\ordgroup\\\e.type&&e.body.length?e.body0:e;return\\\atom\\\!t.type||\\\bin\\\!t.family&&\\\rel\\\!t.family?\\\mord\\\:\\\m\\\+t.family};ot({type:\\\mclass\\\,names:\\\\\\\\\\\@binrel\\\,props:{numArgs:2},handler:function(e,t){return{type:\\\mclass\\\,mode:e.parser.mode,mclass:Jr(t0),body:ht(t1),isCharacterBox:l.isCharacterBox(t1)}}}),ot({type:\\\mclass\\\,names:\\\\\\\\\\\stackrel\\\,\\\\\\\\\\\overset\\\,\\\\\\\\\\\underset\\\,props:{numArgs:2},handler:function(e,t){var r,ne.parser,ae.funcName,it1,ot0;r\\\\\\\\\\\stackrel\\\!a?Jr(i):\\\mrel\\\;var s{type:\\\op\\\,mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:\\\\\\\\\\\stackrel\\\!a,body:ht(i)},h{type:\\\supsub\\\,mode:o.mode,base:s,sup:\\\\\\\\\\\underset\\\a?null:o,sub:\\\\\\\\\\\underset\\\a?o:null};return{type:\\\mclass\\\,mode:n.mode,mclass:r,body:h,isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Zr,mathmlBuilder:Kr});var Qrfunction(e,t){var re.font,nt.withFont(r);return wt(e.body,n)},enfunction(e,t){var re.font,nt.withFont(r);return Rt(e.body,n)},tn{\\\\\\\\\\\Bbb\\\:\\\\\\\\\\\mathbb\\\,\\\\\\\\\\\bold\\\:\\\\\\\\\\\mathbf\\\,\\\\\\\\\\\frak\\\:\\\\\\\\\\\mathfrak\\\,\\\\\\\\\\\bm\\\:\\\\\\\\\\\boldsymbol\\\};ot({type:\\\font\\\,names:\\\\\\\\\\\mathrm\\\,\\\\\\\\\\\mathit\\\,\\\\\\\\\\\mathbf\\\,\\\\\\\\\\\mathnormal\\\,\\\\\\\\\\\mathbb\\\,\\\\\\\\\\\mathcal\\\,\\\\\\\\\\\mathfrak\\\,\\\\\\\\\\\mathscr\\\,\\\\\\\\\\\mathsf\\\,\\\\\\\\\\\mathtt\\\,\\\\\\\\\\\Bbb\\\,\\\\\\\\\\\bold\\\,\\\\\\\\\\\frak\\\,props:{numArgs:1,allowedInArgument:!0},handler:function(e,t){var re.parser,ne.funcName,alt(t0),in;return i in tn&&(itni),{type:\\\font\\\,mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Qr,mathmlBuilder:en}),ot({type:\\\mclass\\\,names:\\\\\\\\\\\boldsymbol\\\,\\\\\\\\\\\bm\\\,props:{numArgs:1},handler:function(e,t){var re.parser,nt0,al.isCharacterBox(n);return{type:\\\mclass\\\,mode:r.mode,mclass:Jr(n),body:{type:\\\font\\\,mode:r.mode,font:\\\boldsymbol\\\,body:n},isCharacterBox:a}}}),ot({type:\\\font\\\,names:\\\\\\\\\\\rm\\\,\\\\\\\\\\\sf\\\,\\\\\\\\\\\tt\\\,\\\\\\\\\\\bf\\\,\\\\\\\\\\\it\\\,\\\\\\\\\\\cal\\\,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var re.parser,ne.funcName,ae.breakOnTokenText,ir.mode,or.parseExpression(!0,a);return{type:\\\font\\\,mode:i,font:\\\math\\\+n.slice(1),body:{type:\\\ordgroup\\\,mode:r.mode,body:o}}},htmlBuilder:Qr,mathmlBuilder:en});var rnfunction(e,t){var rt;return\\\display\\\e?rr.id>x.SCRIPT.id?r.text():x.DISPLAY:\\\text\\\e&&r.sizex.DISPLAY.size?rx.TEXT:\\\script\\\e?rx.SCRIPT:\\\scriptscript\\\e&&(rx.SCRIPTSCRIPT),r},nnfunction(e,t){var r,nrn(e.size,t.style),an.fracNum(),in.fracDen();rt.havingStyle(a);var owt(e.numer,r,t);if(e.continued){var s8.5/t.fontMetrics().ptPerEm,l3.5/t.fontMetrics().ptPerEm;o.heighto.height\u003Cs?s:o.height,o.deptho.depth\u003Cl?l:o.depth}rt.havingStyle(i);var h,m,c,u,p,d,f,g,v,b,ywt(e.denom,r,t);if(e.hasBarLine?(e.barSize?(mF(e.barSize,t),hKe.makeLineSpan(\\\frac-line\\\,t,m)):hKe.makeLineSpan(\\\frac-line\\\,t),mh.height,ch.height):(hnull,m0,ct.fontMetrics().defaultRuleThickness),n.sizex.DISPLAY.size||\\\display\\\e.size?(ut.fontMetrics().num1,pm>0?3*c:7*c,dt.fontMetrics().denom1):(m>0?(ut.fontMetrics().num2,pc):(ut.fontMetrics().num3,p3*c),dt.fontMetrics().denom2),h){var wt.fontMetrics().axisHeight;u-o.depth-(w+.5*m)\u003Cp&&(u+p-(u-o.depth-(w+.5*m))),w-.5*m-(y.height-d)\u003Cp&&(d+p-(w-.5*m-(y.height-d)));var k-(w-.5*m);fKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:y,shift:d},{type:\\\elem\\\,elem:h,shift:k},{type:\\\elem\\\,elem:o,shift:-u}},t)}else{var Su-o.depth-(y.height-d);S\u003Cp&&(u+.5*(p-S),d+.5*(p-S)),fKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:y,shift:d},{type:\\\elem\\\,elem:o,shift:-u}},t)}return rt.havingStyle(n),f.height*r.sizeMultiplier/t.sizeMultiplier,f.depth*r.sizeMultiplier/t.sizeMultiplier,gn.sizex.DISPLAY.size?t.fontMetrics().delim1:n.sizex.SCRIPTSCRIPT.size?t.havingStyle(x.SCRIPT).fontMetrics().delim2:t.fontMetrics().delim2,vnulle.leftDelim?xt(t,\\\mopen\\\):Ar.customSizedDelim(e.leftDelim,g,!0,t.havingStyle(n),e.mode,\\\mopen\\\),be.continued?Ke.makeSpan():nulle.rightDelim?xt(t,\\\mclose\\\):Ar.customSizedDelim(e.rightDelim,g,!0,t.havingStyle(n),e.mode,\\\mclose\\\),Ke.makeSpan(\\\mord\\\.concat(r.sizingClasses(t)),v,Ke.makeSpan(\\\mfrac\\\,f),b,t)},anfunction(e,t){var rnew Tt.MathNode(\\\mfrac\\\,Rt(e.numer,t),Rt(e.denom,t));if(e.hasBarLine){if(e.barSize){var nF(e.barSize,t);r.setAttribute(\\\linethickness\\\,V(n))}}else r.setAttribute(\\\linethickness\\\,\\\0px\\\);var arn(e.size,t.style);if(a.size!t.style.size){rnew Tt.MathNode(\\\mstyle\\\,r);var ia.sizex.DISPLAY.size?\\\true\\\:\\\false\\\;r.setAttribute(\\\displaystyle\\\,i),r.setAttribute(\\\scriptlevel\\\,\\\0\\\)}if(null!e.leftDelim||null!e.rightDelim){var o;if(null!e.leftDelim){var snew Tt.MathNode(\\\mo\\\,new Tt.TextNode(e.leftDelim.replace(\\\\\\\\\\\\\\,\\\\\\)));s.setAttribute(\\\fence\\\,\\\true\\\),o.push(s)}if(o.push(r),null!e.rightDelim){var lnew Tt.MathNode(\\\mo\\\,new Tt.TextNode(e.rightDelim.replace(\\\\\\\\\\\\\\,\\\\\\)));l.setAttribute(\\\fence\\\,\\\true\\\),o.push(l)}return Ct(o)}return r};ot({type:\\\genfrac\\\,names:\\\\\\\\\\\dfrac\\\,\\\\\\\\\\\frac\\\,\\\\\\\\\\\tfrac\\\,\\\\\\\\\\\dbinom\\\,\\\\\\\\\\\binom\\\,\\\\\\\\\\\tbinom\\\,\\\\\\\\\\\\\\\\\\\atopfrac\\\,\\\\\\\\\\\\\\\\\\\bracefrac\\\,\\\\\\\\\\\\\\\\\\\brackfrac\\\,props:{numArgs:2,allowedInArgument:!0},handler:function(e,t){var r,ne.parser,ae.funcName,it0,ot1,snull,lnull,h\\\auto\\\;switch(a){case\\\\\\\\\\\dfrac\\\:case\\\\\\\\\\\frac\\\:case\\\\\\\\\\\tfrac\\\:r!0;break;case\\\\\\\\\\\\\\\\\\\atopfrac\\\:r!1;break;case\\\\\\\\\\\dbinom\\\:case\\\\\\\\\\\binom\\\:case\\\\\\\\\\\tbinom\\\:r!1,s\\\(\\\,l\\\)\\\;break;case\\\\\\\\\\\\\\\\\\\bracefrac\\\:r!1,s\\\\\\\\\\\{\\\,l\\\\\\\\\\\}\\\;break;case\\\\\\\\\\\\\\\\\\\brackfrac\\\:r!1,s\\\\\\,l\\\\\\;break;default:throw new Error(\\\Unrecognized genfrac command\\\)}switch(a){case\\\\\\\\\\\dfrac\\\:case\\\\\\\\\\\dbinom\\\:h\\\display\\\;break;case\\\\\\\\\\\tfrac\\\:case\\\\\\\\\\\tbinom\\\:h\\\text\\\}return{type:\\\genfrac\\\,mode:n.mode,continued:!1,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:l,size:h,barSize:null}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:\\\genfrac\\\,names:\\\\\\\\\\\cfrac\\\,props:{numArgs:2},handler:function(e,t){var re.parser,n(e.funcName,t0),at1;return{type:\\\genfrac\\\,mode:r.mode,continued:!0,numer:n,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:\\\display\\\,barSize:null}}}),ot({type:\\\infix\\\,names:\\\\\\\\\\\over\\\,\\\\\\\\\\\choose\\\,\\\\\\\\\\\atop\\\,\\\\\\\\\\\brace\\\,\\\\\\\\\\\brack\\\,props:{numArgs:0,infix:!0},handler:function(e){var t,re.parser,ne.funcName,ae.token;switch(n){case\\\\\\\\\\\over\\\:t\\\\\\\\\\\frac\\\;break;case\\\\\\\\\\\choose\\\:t\\\\\\\\\\\binom\\\;break;case\\\\\\\\\\\atop\\\:t\\\\\\\\\\\\\\\\\\\atopfrac\\\;break;case\\\\\\\\\\\brace\\\:t\\\\\\\\\\\\\\\\\\\bracefrac\\\;break;case\\\\\\\\\\\brack\\\:t\\\\\\\\\\\\\\\\\\\brackfrac\\\;break;default:throw new Error(\\\Unrecognized infix genfrac command\\\)}return{type:\\\infix\\\,mode:r.mode,replaceWith:t,token:a}}});var on\\\display\\\,\\\text\\\,\\\script\\\,\\\scriptscript\\\,snfunction(e){var tnull;return e.length>0&&(t\\\.\\\(te)?null:t),t};ot({type:\\\genfrac\\\,names:\\\\\\\\\\\genfrac\\\,props:{numArgs:6,allowedInArgument:!0,argTypes:\\\math\\\,\\\math\\\,\\\size\\\,\\\text\\\,\\\math\\\,\\\math\\\},handler:function(e,t){var r,ne.parser,at4,it5,olt(t0),s\\\atom\\\o.type&&\\\open\\\o.family?sn(o.text):null,llt(t1),h\\\atom\\\l.type&&\\\close\\\l.family?sn(l.text):null,mUt(t2,\\\size\\\),cnull;r!!m.isBlank||(cm.value).number>0;var u\\\auto\\\,pt3;if(\\\ordgroup\\\p.type){if(p.body.length>0){var dUt(p.body0,\\\textord\\\);uonNumber(d.text)}}else pUt(p,\\\textord\\\),uonNumber(p.text);return{type:\\\genfrac\\\,mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:c,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:\\\infix\\\,names:\\\\\\\\\\\above\\\,props:{numArgs:1,argTypes:\\\size\\\,infix:!0},handler:function(e,t){var re.parser,n(e.funcName,e.token);return{type:\\\infix\\\,mode:r.mode,replaceWith:\\\\\\\\\\\\\\\\\\\abovefrac\\\,size:Ut(t0,\\\size\\\).value,token:n}}}),ot({type:\\\genfrac\\\,names:\\\\\\\\\\\\\\\\\\\abovefrac\\\,props:{numArgs:3,argTypes:\\\math\\\,\\\size\\\,\\\math\\\},handler:function(e,t){var re.parser,n(e.funcName,t0),afunction(e){if(!e)throw new Error(\\\Expected non-null, but got \\\+String(e));return e}(Ut(t1,\\\infix\\\).size),it2,oa.number>0;return{type:\\\genfrac\\\,mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:\\\auto\\\}},htmlBuilder:nn,mathmlBuilder:an});var lnfunction(e,t){var r,n,at.style;\\\supsub\\\e.type?(re.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),nUt(e.base,\\\horizBrace\\\)):nUt(e,\\\horizBrace\\\);var i,owt(n.base,t.havingBaseStyle(x.DISPLAY)),sGt(n,t);if(n.isOver?(iKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:o},{type:\\\kern\\\,size:.1},{type:\\\elem\\\,elem:s}},t)).children0.children0.children1.classes.push(\\\svg-align\\\):(iKe.makeVList({positionType:\\\bottom\\\,positionData:o.depth+.1+s.height,children:{type:\\\elem\\\,elem:s},{type:\\\kern\\\,size:.1},{type:\\\elem\\\,elem:o}},t)).children0.children0.children0.classes.push(\\\svg-align\\\),r){var lKe.makeSpan(\\\mord\\\,n.isOver?\\\mover\\\:\\\munder\\\,i,t);in.isOver?Ke.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:l},{type:\\\kern\\\,size:.2},{type:\\\elem\\\,elem:r}},t):Ke.makeVList({positionType:\\\bottom\\\,positionData:l.depth+.2+r.height+r.depth,children:{type:\\\elem\\\,elem:r},{type:\\\kern\\\,size:.2},{type:\\\elem\\\,elem:l}},t)}return Ke.makeSpan(\\\mord\\\,n.isOver?\\\mover\\\:\\\munder\\\,i,t)};ot({type:\\\horizBrace\\\,names:\\\\\\\\\\\overbrace\\\,\\\\\\\\\\\underbrace\\\,props:{numArgs:1},handler:function(e,t){var re.parser,ne.funcName;return{type:\\\horizBrace\\\,mode:r.mode,label:n,isOver:/^\\\\\\\\over/.test(n),base:t0}},htmlBuilder:ln,mathmlBuilder:function(e,t){var rVt(e.label);return new Tt.MathNode(e.isOver?\\\mover\\\:\\\munder\\\,Rt(e.base,t),r)}}),ot({type:\\\href\\\,names:\\\\\\\\\\\href\\\,props:{numArgs:2,argTypes:\\\url\\\,\\\original\\\,allowedInText:!0},handler:function(e,t){var re.parser,nt1,aUt(t0,\\\url\\\).url;return r.settings.isTrusted({command:\\\\\\\\\\\href\\\,url:a})?{type:\\\href\\\,mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd(\\\\\\\\\\\href\\\)},htmlBuilder:function(e,t){var rft(e.body,t,!1);return Ke.makeAnchor(e.href,,r,t)},mathmlBuilder:function(e,t){var rIt(e.body,t);return r instanceof zt||(rnew zt(\\\mrow\\\,r)),r.setAttribute(\\\href\\\,e.href),r}}),ot({type:\\\href\\\,names:\\\\\\\\\\\url\\\,props:{numArgs:1,argTypes:\\\url\\\,allowedInText:!0},handler:function(e,t){var re.parser,nUt(t0,\\\url\\\).url;if(!r.settings.isTrusted({command:\\\\\\\\\\\url\\\,url:n}))return r.formatUnsupportedCmd(\\\\\\\\\\\url\\\);for(var a,i0;i\u003Cn.length;i++){var oni;\\\~\\\o&&(o\\\\\\\\\\\textasciitilde\\\),a.push({type:\\\textord\\\,mode:\\\text\\\,text:o})}var s{type:\\\text\\\,mode:r.mode,font:\\\\\\\\\\\texttt\\\,body:a};return{type:\\\href\\\,mode:r.mode,href:n,body:ht(s)}}}),ot({type:\\\hbox\\\,names:\\\\\\\\\\\hbox\\\,props:{numArgs:1,argTypes:\\\text\\\,allowedInText:!0,primitive:!0},handler:function(e,t){return{type:\\\hbox\\\,mode:e.parser.mode,body:ht(t0)}},htmlBuilder:function(e,t){var rft(e.body,t,!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){return new Tt.MathNode(\\\mrow\\\,Nt(e.body,t))}}),ot({type:\\\html\\\,names:\\\\\\\\\\\htmlClass\\\,\\\\\\\\\\\htmlId\\\,\\\\\\\\\\\htmlStyle\\\,\\\\\\\\\\\htmlData\\\,props:{numArgs:2,argTypes:\\\raw\\\,\\\original\\\,allowedInText:!0},handler:function(e,t){var r,ae.parser,ie.funcName,o(e.token,Ut(t0,\\\raw\\\).string),st1;a.settings.strict&&a.settings.reportNonstrict(\\\htmlExtension\\\,\\\HTML extension is disabled on strict mode\\\);var l{};switch(i){case\\\\\\\\\\\htmlClass\\\:l.classo,r{command:\\\\\\\\\\\htmlClass\\\,class:o};break;case\\\\\\\\\\\htmlId\\\:l.ido,r{command:\\\\\\\\\\\htmlId\\\,id:o};break;case\\\\\\\\\\\htmlStyle\\\:l.styleo,r{command:\\\\\\\\\\\htmlStyle\\\,style:o};break;case\\\\\\\\\\\htmlData\\\:for(var ho.split(\\\,\\\),m0;m\u003Ch.length;m++){var chm.split(\\\\\\);if(2!c.length)throw new n(\\\Error parsing key-value for \\\\\\\\htmlData\\\);l\\\data-\\\+c0.trim()c1.trim()}r{command:\\\\\\\\\\\htmlData\\\,attributes:l};break;default:throw new Error(\\\Unrecognized html command\\\)}return a.settings.isTrusted(r)?{type:\\\html\\\,mode:a.mode,attributes:l,body:ht(s)}:a.formatUnsupportedCmd(i)},htmlBuilder:function(e,t){var rft(e.body,t,!1),n\\\enclosing\\\;e.attributes.class&&n.push.apply(n,e.attributes.class.trim().split(/\\\\s+/));var aKe.makeSpan(n,r,t);for(var i in e.attributes)\\\class\\\!i&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributesi);return a},mathmlBuilder:function(e,t){return It(e.body,t)}}),ot({type:\\\htmlmathml\\\,names:\\\\\\\\\\\html@mathml\\\,props:{numArgs:2,allowedInText:!0},handler:function(e,t){return{type:\\\htmlmathml\\\,mode:e.parser.mode,html:ht(t0),mathml:ht(t1)}},htmlBuilder:function(e,t){var rft(e.html,t,!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){return It(e.mathml,t)}});var hnfunction(e){if(/^-+? *(\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)$/.test(e))return{number:+e,unit:\\\bp\\\};var t/(-+?) *(\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+) *(a-z{2})/.exec(e);if(!t)throw new n(\\\Invalid size: \\\+e+\\\ in \\\\\\\\includegraphics\\\);var r{number:+(t1+t2),unit:t3};if(!P(r))throw new n(\\\Invalid unit: \\\+r.unit+\\\ in \\\\\\\\includegraphics.\\\);return r};ot({type:\\\includegraphics\\\,names:\\\\\\\\\\\includegraphics\\\,props:{numArgs:1,numOptionalArgs:1,argTypes:\\\raw\\\,\\\url\\\,allowedInText:!1},handler:function(e,t,r){var ae.parser,i{number:0,unit:\\\em\\\},o{number:.9,unit:\\\em\\\},s{number:0,unit:\\\em\\\},l\\\\\\;if(r0)for(var hUt(r0,\\\raw\\\).string.split(\\\,\\\),m0;m\u003Ch.length;m++){var chm.split(\\\\\\);if(2c.length){var uc1.trim();switch(c0.trim()){case\\\alt\\\:lu;break;case\\\width\\\:ihn(u);break;case\\\height\\\:ohn(u);break;case\\\totalheight\\\:shn(u);break;default:throw new n(\\\Invalid key: \\\+c0+\\\ in \\\\\\\\includegraphics.\\\)}}}var pUt(t0,\\\url\\\).url;return\\\\\\l&&(l(l(lp).replace(/^.*\\\\\\\\//,\\\\\\)).substring(0,l.lastIndexOf(\\\.\\\))),a.settings.isTrusted({command:\\\\\\\\\\\includegraphics\\\,url:p})?{type:\\\includegraphics\\\,mode:a.mode,alt:l,width:i,height:o,totalheight:s,src:p}:a.formatUnsupportedCmd(\\\\\\\\\\\includegraphics\\\)},htmlBuilder:function(e,t){var rF(e.height,t),n0;e.totalheight.number>0&&(nF(e.totalheight,t)-r);var a0;e.width.number>0&&(aF(e.width,t));var i{height:V(r+n)};a>0&&(i.widthV(a)),n>0&&(i.verticalAlignV(-n));var onew j(e.src,e.alt,i);return o.heightr,o.depthn,o},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mglyph\\\,);r.setAttribute(\\\alt\\\,e.alt);var nF(e.height,t),a0;if(e.totalheight.number>0&&(aF(e.totalheight,t)-n,r.setAttribute(\\\valign\\\,V(-a))),r.setAttribute(\\\height\\\,V(n+a)),e.width.number>0){var iF(e.width,t);r.setAttribute(\\\width\\\,V(i))}return r.setAttribute(\\\src\\\,e.src),r}}),ot({type:\\\kern\\\,names:\\\\\\\\\\\kern\\\,\\\\\\\\\\\mkern\\\,\\\\\\\\\\\hskip\\\,\\\\\\\\\\\mskip\\\,props:{numArgs:1,argTypes:\\\size\\\,primitive:!0,allowedInText:!0},handler:function(e,t){var re.parser,ne.funcName,aUt(t0,\\\size\\\);if(r.settings.strict){var i\\\m\\\n1,o\\\mu\\\a.value.unit;i?(o||r.settings.reportNonstrict(\\\mathVsTextUnits\\\,\\\LaTeXs \\\+n+\\\ supports only mu units, not \\\+a.value.unit+\\\ units\\\),\\\math\\\!r.mode&&r.settings.reportNonstrict(\\\mathVsTextUnits\\\,\\\LaTeXs \\\+n+\\\ works only in math mode\\\)):o&&r.settings.reportNonstrict(\\\mathVsTextUnits\\\,\\\LaTeXs \\\+n+\\\ doesnt support mu units\\\)}return{type:\\\kern\\\,mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var rF(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:\\\lap\\\,names:\\\\\\\\\\\mathllap\\\,\\\\\\\\\\\mathrlap\\\,\\\\\\\\\\\mathclap\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\lap\\\,mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;\\\clap\\\e.alignment?(rKe.makeSpan(,wt(e.body,t)),rKe.makeSpan(\\\inner\\\,r,t)):rKe.makeSpan(\\\inner\\\,wt(e.body,t));var nKe.makeSpan(\\\fix\\\,),aKe.makeSpan(e.alignment,r,n,t),iKe.makeSpan(\\\strut\\\);return i.style.heightV(a.height+a.depth),a.depth&&(i.style.verticalAlignV(-a.depth)),a.children.unshift(i),aKe.makeSpan(\\\thinbox\\\,a,t),Ke.makeSpan(\\\mord\\\,\\\vbox\\\,a,t)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mpadded\\\,Rt(e.body,t));if(\\\rlap\\\!e.alignment){var n\\\llap\\\e.alignment?\\\-1\\\:\\\-0.5\\\;r.setAttribute(\\\lspace\\\,n+\\\width\\\)}return r.setAttribute(\\\width\\\,\\\0px\\\),r}}),ot({type:\\\styling\\\,names:\\\\\\\\\\\(\\\,\\\$\\\,props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var re.funcName,ne.parser,an.mode;n.switchMode(\\\math\\\);var i\\\\\\\\\\\(\\\r?\\\\\\\\\\\)\\\:\\\$\\\,on.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:\\\styling\\\,mode:n.mode,style:\\\text\\\,body:o}}}),ot({type:\\\text\\\,names:\\\\\\\\\\\)\\\,\\\\\\\\\\\\\\,props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n(\\\Mismatched \\\+e.funcName)}});var mnfunction(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:\\\mathchoice\\\,names:\\\\\\\\\\\mathchoice\\\,props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:\\\mathchoice\\\,mode:e.parser.mode,display:ht(t0),text:ht(t1),script:ht(t2),scriptscript:ht(t3)}},htmlBuilder:function(e,t){var rmn(e,t),nft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var rmn(e,t);return It(r,t)}});var cnfunction(e,t,r,n,a,i,o){eKe.makeSpan(,e);var s,h,m,cr&&l.isCharacterBox(r);if(t){var uwt(t,n.havingStyle(a.sup()),n);h{elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var pwt(r,n.havingStyle(a.sub()),n);s{elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var dn.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;mKe.makeVList({positionType:\\\bottom\\\,positionData:d,children:{type:\\\kern\\\,size:n.fontMetrics().bigOpSpacing5},{type:\\\elem\\\,elem:s.elem,marginLeft:V(-i)},{type:\\\kern\\\,size:s.kern},{type:\\\elem\\\,elem:e},{type:\\\kern\\\,size:h.kern},{type:\\\elem\\\,elem:h.elem,marginLeft:V(i)},{type:\\\kern\\\,size:n.fontMetrics().bigOpSpacing5}},n)}else if(s){var fe.height-o;mKe.makeVList({positionType:\\\top\\\,positionData:f,children:{type:\\\kern\\\,size:n.fontMetrics().bigOpSpacing5},{type:\\\elem\\\,elem:s.elem,marginLeft:V(-i)},{type:\\\kern\\\,size:s.kern},{type:\\\elem\\\,elem:e}},n)}else{if(!h)return e;var ge.depth+o;mKe.makeVList({positionType:\\\bottom\\\,positionData:g,children:{type:\\\elem\\\,elem:e},{type:\\\kern\\\,size:h.kern},{type:\\\elem\\\,elem:h.elem,marginLeft:V(i)},{type:\\\kern\\\,size:n.fontMetrics().bigOpSpacing5}},n)}var vm;if(s&&0!i&&!c){var bKe.makeSpan(\\\mspace\\\,,n);b.style.marginRightV(i),v.unshift(b)}return Ke.makeSpan(\\\mop\\\,\\\op-limits\\\,v,n)},un\\\\\\\\\\\smallint\\\,pnfunction(e,t){var r,n,a,i!1;\\\supsub\\\e.type?(re.sup,ne.sub,aUt(e.base,\\\op\\\),i!0):aUt(e,\\\op\\\);var o,st.style,h!1;if(s.sizex.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h!0),a.symbol){var mh?\\\Size2-Regular\\\:\\\Size1-Regular\\\,c\\\\\\;if(\\\\\\\\\\\oiint\\\!a.name&&\\\\\\\\\\\oiiint\\\!a.name||(ca.name.substr(1),a.name\\\oiint\\\c?\\\\\\\\\\\iint\\\:\\\\\\\\\\\iiint\\\),oKe.makeSymbol(a.name,m,\\\math\\\,t,\\\mop\\\,\\\op-symbol\\\,h?\\\large-op\\\:\\\small-op\\\),c.length>0){var uo.italic,pKe.staticSvg(c+\\\Size\\\+(h?\\\2\\\:\\\1\\\),t);oKe.makeVList({positionType:\\\individualShift\\\,children:{type:\\\elem\\\,elem:o,shift:0},{type:\\\elem\\\,elem:p,shift:h?.08:0}},t),a.name\\\\\\\\\\\\\\+c,o.classes.unshift(\\\mop\\\),o.italicu}}else if(a.body){var dft(a.body,t,!0);1d.length&&d0instanceof Z?(od0).classes0\\\mop\\\:oKe.makeSpan(\\\mop\\\,d,t)}else{for(var f,g1;g\u003Ca.name.length;g++)f.push(Ke.mathsym(a.nameg,a.mode,t));oKe.makeSpan(\\\mop\\\,f,t)}var v0,b0;return(o instanceof Z||\\\\\\\\\\\oiint\\\a.name||\\\\\\\\\\\oiiint\\\a.name)&&!a.suppressBaseShift&&(v(o.height-o.depth)/2-t.fontMetrics().axisHeight,bo.italic),i?cn(o,r,n,t,s,b,v):(v&&(o.style.position\\\relative\\\,o.style.topV(v)),o)},dnfunction(e,t){var r;if(e.symbol)rnew zt(\\\mo\\\,Bt(e.name,e.mode)),l.contains(un,e.name)&&r.setAttribute(\\\largeop\\\,\\\false\\\);else if(e.body)rnew zt(\\\mo\\\,Nt(e.body,t));else{rnew zt(\\\mi\\\,new At(e.name.slice(1)));var nnew zt(\\\mo\\\,Bt(\\\\\\\u2061\\\,\\\text\\\));re.parentIsSupSub?new zt(\\\mrow\\\,r,n):Mt(r,n)}return r},fn{\\\\\\\u220f\\\:\\\\\\\\\\\prod\\\,\\\\\\\u2210\\\:\\\\\\\\\\\coprod\\\,\\\\\\\u2211\\\:\\\\\\\\\\\sum\\\,\\\\\\\u22c0\\\:\\\\\\\\\\\bigwedge\\\,\\\\\\\u22c1\\\:\\\\\\\\\\\bigvee\\\,\\\\\\\u22c2\\\:\\\\\\\\\\\bigcap\\\,\\\\\\\u22c3\\\:\\\\\\\\\\\bigcup\\\,\\\\\\\u2a00\\\:\\\\\\\\\\\bigodot\\\,\\\\\\\u2a01\\\:\\\\\\\\\\\bigoplus\\\,\\\\\\\u2a02\\\:\\\\\\\\\\\bigotimes\\\,\\\\\\\u2a04\\\:\\\\\\\\\\\biguplus\\\,\\\\\\\u2a06\\\:\\\\\\\\\\\bigsqcup\\\};ot({type:\\\op\\\,names:\\\\\\\\\\\coprod\\\,\\\\\\\\\\\bigvee\\\,\\\\\\\\\\\bigwedge\\\,\\\\\\\\\\\biguplus\\\,\\\\\\\\\\\bigcap\\\,\\\\\\\\\\\bigcup\\\,\\\\\\\\\\\intop\\\,\\\\\\\\\\\prod\\\,\\\\\\\\\\\sum\\\,\\\\\\\\\\\bigotimes\\\,\\\\\\\\\\\bigoplus\\\,\\\\\\\\\\\bigodot\\\,\\\\\\\\\\\bigsqcup\\\,\\\\\\\\\\\smallint\\\,\\\\\\\u220f\\\,\\\\\\\u2210\\\,\\\\\\\u2211\\\,\\\\\\\u22c0\\\,\\\\\\\u22c1\\\,\\\\\\\u22c2\\\,\\\\\\\u22c3\\\,\\\\\\\u2a00\\\,\\\\\\\u2a01\\\,\\\\\\\u2a02\\\,\\\\\\\u2a04\\\,\\\\\\\u2a06\\\,props:{numArgs:0},handler:function(e,t){var re.parser,ne.funcName;return 1n.length&&(nfnn),{type:\\\op\\\,mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:\\\op\\\,names:\\\\\\\\\\\mathop\\\,props:{numArgs:1,primitive:!0},handler:function(e,t){var re.parser,nt0;return{type:\\\op\\\,mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ht(n)}},htmlBuilder:pn,mathmlBuilder:dn});var gn{\\\\\\\u222b\\\:\\\\\\\\\\\int\\\,\\\\\\\u222c\\\:\\\\\\\\\\\iint\\\,\\\\\\\u222d\\\:\\\\\\\\\\\iiint\\\,\\\\\\\u222e\\\:\\\\\\\\\\\oint\\\,\\\\\\\u222f\\\:\\\\\\\\\\\oiint\\\,\\\\\\\u2230\\\:\\\\\\\\\\\oiiint\\\};ot({type:\\\op\\\,names:\\\\\\\\\\\arcsin\\\,\\\\\\\\\\\arccos\\\,\\\\\\\\\\\arctan\\\,\\\\\\\\\\\arctg\\\,\\\\\\\\\\\arcctg\\\,\\\\\\\\\\\arg\\\,\\\\\\\\\\\ch\\\,\\\\\\\\\\\cos\\\,\\\\\\\\\\\cosec\\\,\\\\\\\\\\\cosh\\\,\\\\\\\\\\\cot\\\,\\\\\\\\\\\cotg\\\,\\\\\\\\\\\coth\\\,\\\\\\\\\\\csc\\\,\\\\\\\\\\\ctg\\\,\\\\\\\\\\\cth\\\,\\\\\\\\\\\deg\\\,\\\\\\\\\\\dim\\\,\\\\\\\\\\\exp\\\,\\\\\\\\\\\hom\\\,\\\\\\\\\\\ker\\\,\\\\\\\\\\\lg\\\,\\\\\\\\\\\ln\\\,\\\\\\\\\\\log\\\,\\\\\\\\\\\sec\\\,\\\\\\\\\\\sin\\\,\\\\\\\\\\\sinh\\\,\\\\\\\\\\\sh\\\,\\\\\\\\\\\tan\\\,\\\\\\\\\\\tanh\\\,\\\\\\\\\\\tg\\\,\\\\\\\\\\\th\\\,props:{numArgs:0},handler:function(e){var te.parser,re.funcName;return{type:\\\op\\\,mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:\\\op\\\,names:\\\\\\\\\\\det\\\,\\\\\\\\\\\gcd\\\,\\\\\\\\\\\inf\\\,\\\\\\\\\\\lim\\\,\\\\\\\\\\\max\\\,\\\\\\\\\\\min\\\,\\\\\\\\\\\Pr\\\,\\\\\\\\\\\sup\\\,props:{numArgs:0},handler:function(e){var te.parser,re.funcName;return{type:\\\op\\\,mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:\\\op\\\,names:\\\\\\\\\\\int\\\,\\\\\\\\\\\iint\\\,\\\\\\\\\\\iiint\\\,\\\\\\\\\\\oint\\\,\\\\\\\\\\\oiint\\\,\\\\\\\\\\\oiiint\\\,\\\\\\\u222b\\\,\\\\\\\u222c\\\,\\\\\\\u222d\\\,\\\\\\\u222e\\\,\\\\\\\u222f\\\,\\\\\\\u2230\\\,props:{numArgs:0},handler:function(e){var te.parser,re.funcName;return 1r.length&&(rgnr),{type:\\\op\\\,mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:pn,mathmlBuilder:dn});var vnfunction(e,t){var r,n,a,i,o!1;if(\\\supsub\\\e.type?(re.sup,ne.sub,aUt(e.base,\\\operatorname\\\),o!0):aUt(e,\\\operatorname\\\),a.body.length>0){for(var sa.body.map((function(e){var te.text;return\\\string\\\typeof t?{type:\\\textord\\\,mode:e.mode,text:t}:e})),lft(s,t.withFont(\\\mathrm\\\),!0),h0;h\u003Cl.length;h++){var mlh;m instanceof Z&&(m.textm.text.replace(/\\\\u2212/,\\\-\\\).replace(/\\\\u2217/,\\\*\\\))}iKe.makeSpan(\\\mop\\\,l,t)}else iKe.makeSpan(\\\mop\\\,,t);return o?cn(i,r,n,t,t.style,0,0):i};function bn(e,t,r){for(var nft(e,t,!1),at.sizeMultiplier/r.sizeMultiplier,i0;i\u003Cn.length;i++){var oni.classes.indexOf(\\\sizing\\\);o\u003C0?Array.prototype.push.apply(ni.classes,t.sizingClasses(r)):ni.classeso+1\\\reset-size\\\+t.size&&(ni.classeso+1\\\reset-size\\\+r.size),ni.height*a,ni.depth*a}return Ke.makeFragment(n)}ot({type:\\\operatorname\\\,names:\\\\\\\\\\\operatorname@\\\,\\\\\\\\\\\operatornamewithlimits\\\,props:{numArgs:1},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\operatorname\\\,mode:r.mode,body:ht(a),alwaysHandleSupSub:\\\\\\\\\\\operatornamewithlimits\\\n,limits:!1,parentIsSupSub:!1}},htmlBuilder:vn,mathmlBuilder:function(e,t){for(var rNt(e.body,t.withFont(\\\mathrm\\\)),n!0,a0;a\u003Cr.length;a++){var ira;if(i instanceof Tt.SpaceNode);else if(i instanceof Tt.MathNode)switch(i.type){case\\\mi\\\:case\\\mn\\\:case\\\ms\\\:case\\\mspace\\\:case\\\mtext\\\:break;case\\\mo\\\:var oi.children0;1i.children.length&&o instanceof Tt.TextNode?o.texto.text.replace(/\\\\u2212/,\\\-\\\).replace(/\\\\u2217/,\\\*\\\):n!1;break;default:n!1}else n!1}if(n){var sr.map((function(e){return e.toText()})).join(\\\\\\);rnew Tt.TextNode(s)}var lnew Tt.MathNode(\\\mi\\\,r);l.setAttribute(\\\mathvariant\\\,\\\normal\\\);var hnew Tt.MathNode(\\\mo\\\,Bt(\\\\\\\u2061\\\,\\\text\\\));return e.parentIsSupSub?new Tt.MathNode(\\\mrow\\\,l,h):Tt.newDocumentFragment(l,h)}}),Er(\\\\\\\\\\\operatorname\\\,\\\\\\\\\\\@ifstar\\\\\\\\operatornamewithlimits\\\\\\\\operatorname@\\\),st({type:\\\ordgroup\\\,htmlBuilder:function(e,t){return e.semisimple?Ke.makeFragment(ft(e.body,t,!1)):Ke.makeSpan(\\\mord\\\,ft(e.body,t,!0),t)},mathmlBuilder:function(e,t){return It(e.body,t,!0)}}),ot({type:\\\overline\\\,names:\\\\\\\\\\\overline\\\,props:{numArgs:1},handler:function(e,t){var re.parser,nt0;return{type:\\\overline\\\,mode:r.mode,body:n}},htmlBuilder:function(e,t){var rwt(e.body,t.havingCrampedStyle()),nKe.makeLineSpan(\\\overline-line\\\,t),at.fontMetrics().defaultRuleThickness,iKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:r},{type:\\\kern\\\,size:3*a},{type:\\\elem\\\,elem:n},{type:\\\kern\\\,size:a}},t);return Ke.makeSpan(\\\mord\\\,\\\overline\\\,i,t)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mo\\\,new Tt.TextNode(\\\\\\\u203e\\\));r.setAttribute(\\\stretchy\\\,\\\true\\\);var nnew Tt.MathNode(\\\mover\\\,Rt(e.body,t),r);return n.setAttribute(\\\accent\\\,\\\true\\\),n}}),ot({type:\\\phantom\\\,names:\\\\\\\\\\\phantom\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){var re.parser,nt0;return{type:\\\phantom\\\,mode:r.mode,body:ht(n)}},htmlBuilder:function(e,t){var rft(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){var rNt(e.body,t);return new Tt.MathNode(\\\mphantom\\\,r)}}),ot({type:\\\hphantom\\\,names:\\\\\\\\\\\hphantom\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){var re.parser,nt0;return{type:\\\hphantom\\\,mode:r.mode,body:n}},htmlBuilder:function(e,t){var rKe.makeSpan(,wt(e.body,t.withPhantom()));if(r.height0,r.depth0,r.children)for(var n0;n\u003Cr.children.length;n++)r.childrenn.height0,r.childrenn.depth0;return rKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:r}},t),Ke.makeSpan(\\\mord\\\,r,t)},mathmlBuilder:function(e,t){var rNt(ht(e.body),t),nnew Tt.MathNode(\\\mphantom\\\,r),anew Tt.MathNode(\\\mpadded\\\,n);return a.setAttribute(\\\height\\\,\\\0px\\\),a.setAttribute(\\\depth\\\,\\\0px\\\),a}}),ot({type:\\\vphantom\\\,names:\\\\\\\\\\\vphantom\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){var re.parser,nt0;return{type:\\\vphantom\\\,mode:r.mode,body:n}},htmlBuilder:function(e,t){var rKe.makeSpan(\\\inner\\\,wt(e.body,t.withPhantom())),nKe.makeSpan(\\\fix\\\,);return Ke.makeSpan(\\\mord\\\,\\\rlap\\\,r,n,t)},mathmlBuilder:function(e,t){var rNt(ht(e.body),t),nnew Tt.MathNode(\\\mphantom\\\,r),anew Tt.MathNode(\\\mpadded\\\,n);return a.setAttribute(\\\width\\\,\\\0px\\\),a}}),ot({type:\\\raisebox\\\,names:\\\\\\\\\\\raisebox\\\,props:{numArgs:2,argTypes:\\\size\\\,\\\hbox\\\,allowedInText:!0},handler:function(e,t){var re.parser,nUt(t0,\\\size\\\).value,at1;return{type:\\\raisebox\\\,mode:r.mode,dy:n,body:a}},htmlBuilder:function(e,t){var rwt(e.body,t),nF(e.dy,t);return Ke.makeVList({positionType:\\\shift\\\,positionData:-n,children:{type:\\\elem\\\,elem:r}},t)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mpadded\\\,Rt(e.body,t)),ne.dy.number+e.dy.unit;return r.setAttribute(\\\voffset\\\,n),r}}),ot({type:\\\internal\\\,names:\\\\\\\\\\\relax\\\,props:{numArgs:0,allowedInText:!0},handler:function(e){return{type:\\\internal\\\,mode:e.parser.mode}}}),ot({type:\\\rule\\\,names:\\\\\\\\\\\rule\\\,props:{numArgs:2,numOptionalArgs:1,argTypes:\\\size\\\,\\\size\\\,\\\size\\\},handler:function(e,t,r){var ne.parser,ar0,iUt(t0,\\\size\\\),oUt(t1,\\\size\\\);return{type:\\\rule\\\,mode:n.mode,shift:a&&Ut(a,\\\size\\\).value,width:i.value,height:o.value}},htmlBuilder:function(e,t){var rKe.makeSpan(\\\mord\\\,\\\rule\\\,,t),nF(e.width,t),aF(e.height,t),ie.shift?F(e.shift,t):0;return r.style.borderRightWidthV(n),r.style.borderTopWidthV(a),r.style.bottomV(i),r.widthn,r.heighta+i,r.depth-i,r.maxFontSize1.125*a*t.sizeMultiplier,r},mathmlBuilder:function(e,t){var rF(e.width,t),nF(e.height,t),ae.shift?F(e.shift,t):0,it.color&&t.getColor()||\\\black\\\,onew Tt.MathNode(\\\mspace\\\);o.setAttribute(\\\mathbackground\\\,i),o.setAttribute(\\\width\\\,V(r)),o.setAttribute(\\\height\\\,V(n));var snew Tt.MathNode(\\\mpadded\\\,o);return a>0?s.setAttribute(\\\height\\\,V(a)):(s.setAttribute(\\\height\\\,V(a)),s.setAttribute(\\\depth\\\,V(-a))),s.setAttribute(\\\voffset\\\,V(a)),s}});var yn\\\\\\\\\\\tiny\\\,\\\\\\\\\\\sixptsize\\\,\\\\\\\\\\\scriptsize\\\,\\\\\\\\\\\footnotesize\\\,\\\\\\\\\\\small\\\,\\\\\\\\\\\normalsize\\\,\\\\\\\\\\\large\\\,\\\\\\\\\\\Large\\\,\\\\\\\\\\\LARGE\\\,\\\\\\\\\\\huge\\\,\\\\\\\\\\\Huge\\\;ot({type:\\\sizing\\\,names:yn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var re.breakOnTokenText,ne.funcName,ae.parser,ia.parseExpression(!1,r);return{type:\\\sizing\\\,mode:a.mode,size:yn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var rt.havingSize(e.size);return bn(e.body,r,t)},mathmlBuilder:function(e,t){var rt.havingSize(e.size),nNt(e.body,r),anew Tt.MathNode(\\\mstyle\\\,n);return a.setAttribute(\\\mathsize\\\,V(r.sizeMultiplier)),a}}),ot({type:\\\smash\\\,names:\\\\\\\\\\\smash\\\,props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var ne.parser,a!1,i!1,or0&&Ut(r0,\\\ordgroup\\\);if(o)for(var s\\\\\\,l0;l\u003Co.body.length;++l){if(\\\t\\\(so.bodyl.text))a!0;else{if(\\\b\\\!s){a!1,i!1;break}i!0}}else a!0,i!0;var ht0;return{type:\\\smash\\\,mode:n.mode,body:h,smashHeight:a,smashDepth:i}},htmlBuilder:function(e,t){var rKe.makeSpan(,wt(e.body,t));if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height0,r.children))for(var n0;n\u003Cr.children.length;n++)r.childrenn.height0;if(e.smashDepth&&(r.depth0,r.children))for(var a0;a\u003Cr.children.length;a++)r.childrena.depth0;var iKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:r}},t);return Ke.makeSpan(\\\mord\\\,i,t)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mpadded\\\,Rt(e.body,t));return e.smashHeight&&r.setAttribute(\\\height\\\,\\\0px\\\),e.smashDepth&&r.setAttribute(\\\depth\\\,\\\0px\\\),r}}),ot({type:\\\sqrt\\\,names:\\\\\\\\\\\sqrt\\\,props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var ne.parser,ar0,it0;return{type:\\\sqrt\\\,mode:n.mode,body:i,index:a}},htmlBuilder:function(e,t){var rwt(e.body,t.havingCrampedStyle());0r.height&&(r.heightt.fontMetrics().xHeight),rKe.wrapFragment(r,t);var nt.fontMetrics().defaultRuleThickness,an;t.style.id\u003Cx.TEXT.id&&(at.fontMetrics().xHeight);var in+a/4,or.height+r.depth+i+n,sAr.sqrtImage(o,t),ls.span,hs.ruleWidth,ms.advanceWidth,cl.height-h;c>r.height+r.depth+i&&(i(i+c-r.height-r.depth)/2);var ul.height-r.height-i-h;r.style.paddingLeftV(m);var pKe.makeVList({positionType:\\\firstBaseline\\\,children:{type:\\\elem\\\,elem:r,wrapperClasses:\\\svg-align\\\},{type:\\\kern\\\,size:-(r.height+u)},{type:\\\elem\\\,elem:l},{type:\\\kern\\\,size:h}},t);if(e.index){var dt.havingStyle(x.SCRIPTSCRIPT),fwt(e.index,d,t),g.6*(p.height-p.depth),vKe.makeVList({positionType:\\\shift\\\,positionData:-g,children:{type:\\\elem\\\,elem:f}},t),bKe.makeSpan(\\\root\\\,v);return Ke.makeSpan(\\\mord\\\,\\\sqrt\\\,b,p,t)}return Ke.makeSpan(\\\mord\\\,\\\sqrt\\\,p,t)},mathmlBuilder:function(e,t){var re.body,ne.index;return n?new Tt.MathNode(\\\mroot\\\,Rt(r,t),Rt(n,t)):new Tt.MathNode(\\\msqrt\\\,Rt(r,t))}});var xn{display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:\\\styling\\\,names:\\\\\\\\\\\displaystyle\\\,\\\\\\\\\\\textstyle\\\,\\\\\\\\\\\scriptstyle\\\,\\\\\\\\\\\scriptscriptstyle\\\,props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var re.breakOnTokenText,ne.funcName,ae.parser,ia.parseExpression(!0,r),on.slice(1,n.length-5);return{type:\\\styling\\\,mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var rxne.style,nt.havingStyle(r).withFont(\\\\\\);return bn(e.body,n,t)},mathmlBuilder:function(e,t){var rxne.style,nt.havingStyle(r),aNt(e.body,n),inew Tt.MathNode(\\\mstyle\\\,a),o{display:\\\0\\\,\\\true\\\,text:\\\0\\\,\\\false\\\,script:\\\1\\\,\\\false\\\,scriptscript:\\\2\\\,\\\false\\\}e.style;return i.setAttribute(\\\scriptlevel\\\,o0),i.setAttribute(\\\displaystyle\\\,o1),i}});var wnfunction(e,t){var re.base;return r?\\\op\\\r.type?r.limits&&(t.style.sizex.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:\\\operatorname\\\r.type?r.alwaysHandleSupSub&&(t.style.sizex.DISPLAY.size||r.limits)?vn:null:\\\accent\\\r.type?l.isCharacterBox(r.base)?Wt:null:\\\horizBrace\\\r.type&&!e.subr.isOver?ln:null:null};st({type:\\\supsub\\\,htmlBuilder:function(e,t){var rwn(e,t);if(r)return r(e,t);var n,a,i,oe.base,se.sup,he.sub,mwt(o,t),ct.fontMetrics(),u0,p0,do&&l.isCharacterBox(o);if(s){var ft.havingStyle(t.style.sup());nwt(s,f,t),d||(um.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var gt.havingStyle(t.style.sub());awt(h,g,t),d||(pm.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}it.stylex.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;var v,bt.sizeMultiplier,yV(.5/c.ptPerEm/b),wnull;if(a){var ke.base&&\\\op\\\e.base.type&&e.base.name&&(\\\\\\\\\\\oiint\\\e.base.name||\\\\\\\\\\\oiiint\\\e.base.name);(m instanceof Z||k)&&(wV(-m.italic))}if(n&&a){uMath.max(u,i,n.depth+.25*c.xHeight),pMath.max(p,c.sub2);var S4*c.defaultRuleThickness;if(u-n.depth-(a.height-p)\u003CS){pS-(u-n.depth)+a.height;var M.8*c.xHeight-(u-n.depth);M>0&&(u+M,p-M)}var z{type:\\\elem\\\,elem:a,shift:p,marginRight:y,marginLeft:w},{type:\\\elem\\\,elem:n,shift:-u,marginRight:y};vKe.makeVList({positionType:\\\individualShift\\\,children:z},t)}else if(a){pMath.max(p,c.sub1,a.height-.8*c.xHeight);var A{type:\\\elem\\\,elem:a,marginLeft:w,marginRight:y};vKe.makeVList({positionType:\\\shift\\\,positionData:p,children:A},t)}else{if(!n)throw new Error(\\\supsub must have either sup or sub.\\\);uMath.max(u,i,n.depth+.25*c.xHeight),vKe.makeVList({positionType:\\\shift\\\,positionData:-u,children:{type:\\\elem\\\,elem:n,marginRight:y}},t)}var Tyt(m,\\\right\\\)||\\\mord\\\;return Ke.makeSpan(T,m,Ke.makeSpan(\\\msupsub\\\,v),t)},mathmlBuilder:function(e,t){var r,n!1;e.base&&\\\horizBrace\\\e.base.type&&!!e.supe.base.isOver&&(n!0,re.base.isOver),!e.base||\\\op\\\!e.base.type&&\\\operatorname\\\!e.base.type||(e.base.parentIsSupSub!0);var a,iRt(e.base,t);if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)ar?\\\mover\\\:\\\munder\\\;else if(e.sub)if(e.sup){var oe.base;ao&&\\\op\\\o.type&&o.limits&&t.stylex.DISPLAY||o&&\\\operatorname\\\o.type&&o.alwaysHandleSupSub&&(t.stylex.DISPLAY||o.limits)?\\\munderover\\\:\\\msubsup\\\}else{var se.base;as&&\\\op\\\s.type&&s.limits&&(t.stylex.DISPLAY||s.alwaysHandleSupSub)||s&&\\\operatorname\\\s.type&&s.alwaysHandleSupSub&&(s.limits||t.stylex.DISPLAY)?\\\munder\\\:\\\msub\\\}else{var le.base;al&&\\\op\\\l.type&&l.limits&&(t.stylex.DISPLAY||l.alwaysHandleSupSub)||l&&\\\operatorname\\\l.type&&l.alwaysHandleSupSub&&(l.limits||t.stylex.DISPLAY)?\\\mover\\\:\\\msup\\\}return new Tt.MathNode(a,i)}}),st({type:\\\atom\\\,htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,\\\m\\\+e.family)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mo\\\,Bt(e.text,e.mode));if(\\\bin\\\e.family){var nqt(e,t);\\\bold-italic\\\n&&r.setAttribute(\\\mathvariant\\\,n)}else\\\punct\\\e.family?r.setAttribute(\\\separator\\\,\\\true\\\):\\\open\\\!e.family&&\\\close\\\!e.family||r.setAttribute(\\\stretchy\\\,\\\false\\\);return r}});var kn{mi:\\\italic\\\,mn:\\\normal\\\,mtext:\\\normal\\\};st({type:\\\mathord\\\,htmlBuilder:function(e,t){return Ke.makeOrd(e,t,\\\mathord\\\)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mi\\\,Bt(e.text,e.mode,t)),nqt(e,t)||\\\italic\\\;return n!knr.type&&r.setAttribute(\\\mathvariant\\\,n),r}}),st({type:\\\textord\\\,htmlBuilder:function(e,t){return Ke.makeOrd(e,t,\\\textord\\\)},mathmlBuilder:function(e,t){var r,nBt(e.text,e.mode,t),aqt(e,t)||\\\normal\\\;return r\\\text\\\e.mode?new Tt.MathNode(\\\mtext\\\,n):/0-9/.test(e.text)?new Tt.MathNode(\\\mn\\\,n):\\\\\\\\\\\prime\\\e.text?new Tt.MathNode(\\\mo\\\,n):new Tt.MathNode(\\\mi\\\,n),a!knr.type&&r.setAttribute(\\\mathvariant\\\,a),r}});var Sn{\\\\\\\\\\\nobreak\\\:\\\nobreak\\\,\\\\\\\\\\\allowbreak\\\:\\\allowbreak\\\},Mn{\\\ \\\:{},\\\\\\\\\\\ \\\:{},\\\~\\\:{className:\\\nobreak\\\},\\\\\\\\\\\space\\\:{},\\\\\\\\\\\nobreakspace\\\:{className:\\\nobreak\\\}};st({type:\\\spacing\\\,htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var rMne.text.className||\\\\\\;if(\\\text\\\e.mode){var aKe.makeOrd(e,t,\\\textord\\\);return a.classes.push(r),a}return Ke.makeSpan(\\\mspace\\\,r,Ke.mathsym(e.text,e.mode,t),t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(\\\mspace\\\,Sne.text,,t);throw new n(Unknown type of space \\\+e.text+\\\)},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode(\\\mspace\\\);throw new n(Unknown type of space \\\+e.text+\\\)}return new Tt.MathNode(\\\mtext\\\,new Tt.TextNode(\\\\\\\xa0\\\))}});var znfunction(){var enew Tt.MathNode(\\\mtd\\\,);return e.setAttribute(\\\width\\\,\\\50%\\\),e};st({type:\\\tag\\\,mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mtable\\\,new Tt.MathNode(\\\mtr\\\,zn(),new Tt.MathNode(\\\mtd\\\,It(e.body,t)),zn(),new Tt.MathNode(\\\mtd\\\,It(e.tag,t))));return r.setAttribute(\\\width\\\,\\\100%\\\),r}});var An{\\\\\\\\\\\text\\\:void 0,\\\\\\\\\\\textrm\\\:\\\textrm\\\,\\\\\\\\\\\textsf\\\:\\\textsf\\\,\\\\\\\\\\\texttt\\\:\\\texttt\\\,\\\\\\\\\\\textnormal\\\:\\\textrm\\\},Tn{\\\\\\\\\\\textbf\\\:\\\textbf\\\,\\\\\\\\\\\textmd\\\:\\\textmd\\\},Bn{\\\\\\\\\\\textit\\\:\\\textit\\\,\\\\\\\\\\\textup\\\:\\\textup\\\},Cnfunction(e,t){var re.font;return r?Anr?t.withTextFontFamily(Anr):Tnr?t.withTextFontWeight(Tnr):t.withTextFontShape(Bnr):t};ot({type:\\\text\\\,names:\\\\\\\\\\\text\\\,\\\\\\\\\\\textrm\\\,\\\\\\\\\\\textsf\\\,\\\\\\\\\\\texttt\\\,\\\\\\\\\\\textnormal\\\,\\\\\\\\\\\textbf\\\,\\\\\\\\\\\textmd\\\,\\\\\\\\\\\textit\\\,\\\\\\\\\\\textup\\\,props:{numArgs:1,argTypes:\\\text\\\,allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var re.parser,ne.funcName,at0;return{type:\\\text\\\,mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var rCn(e,t),nft(e.body,r,!0);return Ke.makeSpan(\\\mord\\\,\\\text\\\,n,r)},mathmlBuilder:function(e,t){var rCn(e,t);return It(e.body,r)}}),ot({type:\\\underline\\\,names:\\\\\\\\\\\underline\\\,props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:\\\underline\\\,mode:e.parser.mode,body:t0}},htmlBuilder:function(e,t){var rwt(e.body,t),nKe.makeLineSpan(\\\underline-line\\\,t),at.fontMetrics().defaultRuleThickness,iKe.makeVList({positionType:\\\top\\\,positionData:r.height,children:{type:\\\kern\\\,size:a},{type:\\\elem\\\,elem:n},{type:\\\kern\\\,size:3*a},{type:\\\elem\\\,elem:r}},t);return Ke.makeSpan(\\\mord\\\,\\\underline\\\,i,t)},mathmlBuilder:function(e,t){var rnew Tt.MathNode(\\\mo\\\,new Tt.TextNode(\\\\\\\u203e\\\));r.setAttribute(\\\stretchy\\\,\\\true\\\);var nnew Tt.MathNode(\\\munder\\\,Rt(e.body,t),r);return n.setAttribute(\\\accentunder\\\,\\\true\\\),n}}),ot({type:\\\vcenter\\\,names:\\\\\\\\\\\vcenter\\\,props:{numArgs:1,argTypes:\\\original\\\,allowedInText:!1},handler:function(e,t){return{type:\\\vcenter\\\,mode:e.parser.mode,body:t0}},htmlBuilder:function(e,t){var rwt(e.body,t),nt.fontMetrics().axisHeight,a.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:\\\shift\\\,positionData:a,children:{type:\\\elem\\\,elem:r}},t)},mathmlBuilder:function(e,t){return new Tt.MathNode(\\\mpadded\\\,Rt(e.body,t),\\\vcenter\\\)}}),ot({type:\\\verb\\\,names:\\\\\\\\\\\verb\\\,props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n(\\\\\\\\\\\verb ended by end of line instead of matching delimiter\\\)},htmlBuilder:function(e,t){for(var rqn(e),n,at.havingStyle(t.style.text()),i0;i\u003Cr.length;i++){var ori;\\\~\\\o&&(o\\\\\\\\\\\textasciitilde\\\),n.push(Ke.makeSymbol(o,\\\Typewriter-Regular\\\,e.mode,a,\\\mord\\\,\\\texttt\\\))}return Ke.makeSpan(\\\mord\\\,\\\text\\\.concat(a.sizingClasses(t)),Ke.tryCombineChars(n),a)},mathmlBuilder:function(e,t){var rnew Tt.TextNode(qn(e)),nnew Tt.MathNode(\\\mtext\\\,r);return n.setAttribute(\\\mathvariant\\\,\\\monospace\\\),n}});var qnfunction(e){return e.body.replace(/ /g,e.star?\\\\\\\u2423\\\:\\\\\\\xa0\\\)},Nnnt,Innew RegExp(\\\\\\\u0300-\\\\u036f+$\\\),Rnfunction(){function e(e,t){this.inputvoid 0,this.settingsvoid 0,this.tokenRegexvoid 0,this.catcodesvoid 0,this.inpute,this.settingst,this.tokenRegexnew RegExp(\\\( \\\\r\\\\n\\\\t+)|\\\\\\\\\\\\\\\\(\\\\n| \\\\r\\\\t+\\\\n?) \\\\r\\\\t*|(!-\\\\\\\\\\\\\\\\-\\\\u2027\\\\u202a-\\\\ud7ff\\\\uf900-\\\\uffff\\\\u0300-\\\\u036f*|\\\\ud800-\\\\udbff\\\\udc00-\\\\udfff\\\\u0300-\\\\u036f*|\\\\\\\\\\\\\\\\verb\\\\\\\\*(^).*?\\\\\\\\4|\\\\\\\\\\\\\\\\verb(^*a-zA-Z).*?\\\\\\\\5|(\\\\\\\\\\\\\\\\a-zA-Z@+) \\\\r\\\\n\\\\t*|\\\\\\\\\\\\\\\\^\\\\ud800-\\\\udfff)\\\,\\\g\\\),this.catcodes{\\\%\\\:14,\\\~\\\:13}}var te.prototype;return t.setCatcodefunction(e,t){this.catcodeset},t.lexfunction(){var ethis.input,tthis.tokenRegex.lastIndex;if(te.length)return new Dr(\\\EOF\\\,new Lr(this,t,t));var rthis.tokenRegex.exec(e);if(nullr||r.index!t)throw new n(\\\Unexpected character: \\\+et+\\\\\\,new Dr(et,new Lr(this,t,t+1)));var ar6||r3||(r2?\\\\\\\\\\\ \\\:\\\ \\\);if(14this.catcodesa){var ie.indexOf(\\\\\\\n\\\,this.tokenRegex.lastIndex);return-1i?(this.tokenRegex.lastIndexe.length,this.settings.reportNonstrict(\\\commentAtEnd\\\,\\\% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)\\\)):this.tokenRegex.lastIndexi+1,this.lex()}return new Dr(a,new Lr(this,t,this.tokenRegex.lastIndex))},e}(),Onfunction(){function e(e,t){void 0e&&(e{}),void 0t&&(t{}),this.currentvoid 0,this.builtinsvoid 0,this.undefStackvoid 0,this.currentt,this.builtinse,this.undefStack}var te.prototype;return t.beginGroupfunction(){this.undefStack.push({})},t.endGroupfunction(){if(0this.undefStack.length)throw new n(\\\Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug\\\);var ethis.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(nullet?delete this.currentt:this.currenttet)},t.endGroupsfunction(){for(;this.undefStack.length>0;)this.endGroup()},t.hasfunction(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.getfunction(e){return this.current.hasOwnProperty(e)?this.currente:this.builtinse},t.setfunction(e,t,r){if(void 0r&&(r!1),r){for(var n0;n\u003Cthis.undefStack.length;n++)delete this.undefStackne;this.undefStack.length>0&&(this.undefStackthis.undefStack.length-1et)}else{var athis.undefStackthis.undefStack.length-1;a&&!a.hasOwnProperty(e)&&(aethis.currente)}nullt?delete this.currente:this.currentet},e}(),HnHr;Er(\\\\\\\\\\\noexpand\\\,(function(e){var te.popToken();return e.isExpandable(t.text)&&(t.noexpand!0,t.treatAsRelax!0),{tokens:t,numArgs:0}})),Er(\\\\\\\\\\\expandafter\\\,(function(e){var te.popToken();return e.expandOnce(!0),{tokens:t,numArgs:0}})),Er(\\\\\\\\\\\@firstoftwo\\\,(function(e){return{tokens:e.consumeArgs(2)0,numArgs:0}})),Er(\\\\\\\\\\\@secondoftwo\\\,(function(e){return{tokens:e.consumeArgs(2)1,numArgs:0}})),Er(\\\\\\\\\\\@ifnextchar\\\,(function(e){var te.consumeArgs(3);e.consumeSpaces();var re.future();return 1t0.length&&t00.textr.text?{tokens:t1,numArgs:0}:{tokens:t2,numArgs:0}})),Er(\\\\\\\\\\\@ifstar\\\,\\\\\\\\\\\@ifnextchar *{\\\\\\\\@firstoftwo{#1}}\\\),Er(\\\\\\\\\\\TextOrMath\\\,(function(e){var te.consumeArgs(2);return\\\text\\\e.mode?{tokens:t0,numArgs:0}:{tokens:t1,numArgs:0}}));var En{0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Er(\\\\\\\\\\\char\\\,(function(e){var t,re.popToken(),a\\\\\\;if(\\\\\\r.text)t8,re.popToken();else if(\\\r.text)t16,re.popToken();else if(\\\`\\\r.text)if(\\\\\\\\\\\\\\(re.popToken()).text0)ar.text.charCodeAt(1);else{if(\\\EOF\\\r.text)throw new n(\\\\\\\\\\\char` missing argument\\\);ar.text.charCodeAt(0)}else t10;if(t){if(null(aEnr.text)||a>t)throw new n(\\\Invalid base-\\\+t+\\\ digit \\\+r.text);for(var i;null!(iEne.future().text)&&i\u003Ct;)a*t,a+i,e.popToken()}return\\\\\\\\\\\@char{\\\+a+\\\}\\\}));var Lnfunction(e,t,r){var ae.consumeArg().tokens;if(1!a.length)throw new n(\\\\\\\\\\\newcommands first argument must be a macro name\\\);var ia0.text,oe.isDefined(i);if(o&&!t)throw new n(\\\\\\\\\\\newcommand{\\\+i+\\\} attempting to redefine \\\+i+\\\; use \\\\\\\\renewcommand\\\);if(!o&&!r)throw new n(\\\\\\\\\\\renewcommand{\\\+i+\\\} when command \\\+i+\\\ does not yet exist; use \\\\\\\\newcommand\\\);var s0;if(1(ae.consumeArg().tokens).length&&\\\\\\a0.text){for(var l\\\\\\,he.expandNextToken();\\\\\\!h.text&&\\\EOF\\\!h.text;)l+h.text,he.expandNextToken();if(!l.match(/^\\\\s*0-9+\\\\s*$/))throw new n(\\\Invalid number of arguments: \\\+l);sparseInt(l),ae.consumeArg().tokens}return e.macros.set(i,{tokens:a,numArgs:s}),\\\\\\};Er(\\\\\\\\\\\newcommand\\\,(function(e){return Ln(e,!1,!0)})),Er(\\\\\\\\\\\renewcommand\\\,(function(e){return Ln(e,!0,!1)})),Er(\\\\\\\\\\\providecommand\\\,(function(e){return Ln(e,!0,!0)})),Er(\\\\\\\\\\\message\\\,(function(e){var te.consumeArgs(1)0;return console.log(t.reverse().map((function(e){return e.text})).join(\\\\\\)),\\\\\\})),Er(\\\\\\\\\\\errmessage\\\,(function(e){var te.consumeArgs(1)0;return console.error(t.reverse().map((function(e){return e.text})).join(\\\\\\)),\\\\\\})),Er(\\\\\\\\\\\show\\\,(function(e){var te.popToken(),rt.text;return console.log(t,e.macros.get(r),Nnr,ae.mathr,ae.textr),\\\\\\})),Er(\\\\\\\\\\\bgroup\\\,\\\{\\\),Er(\\\\\\\\\\\egroup\\\,\\\}\\\),Er(\\\~\\\,\\\\\\\\\\\nobreakspace\\\),Er(\\\\\\\\\\\lq\\\,\\\`\\\),Er(\\\\\\\\\\\rq\\\,\\\\\\),Er(\\\\\\\\\\\aa\\\,\\\\\\\\\\\r a\\\),Er(\\\\\\\\\\\AA\\\,\\\\\\\\\\\r A\\\),Er(\\\\\\\\\\\textcopyright\\\,\\\\\\\\\\\html@mathml{\\\\\\\\textcircled{c}}{\\\\\\\\char`\\\\xa9}\\\),Er(\\\\\\\\\\\copyright\\\,\\\\\\\\\\\TextOrMath{\\\\\\\\textcopyright}{\\\\\\\\text{\\\\\\\\textcopyright}}\\\),Er(\\\\\\\\\\\textregistered\\\,\\\\\\\\\\\html@mathml{\\\\\\\\textcircled{\\\\\\\\scriptsize R}}{\\\\\\\\char`\\\\xae}\\\),Er(\\\\\\\u212c\\\,\\\\\\\\\\\mathscr{B}\\\),Er(\\\\\\\u2130\\\,\\\\\\\\\\\mathscr{E}\\\),Er(\\\\\\\u2131\\\,\\\\\\\\\\\mathscr{F}\\\),Er(\\\\\\\u210b\\\,\\\\\\\\\\\mathscr{H}\\\),Er(\\\\\\\u2110\\\,\\\\\\\\\\\mathscr{I}\\\),Er(\\\\\\\u2112\\\,\\\\\\\\\\\mathscr{L}\\\),Er(\\\\\\\u2133\\\,\\\\\\\\\\\mathscr{M}\\\),Er(\\\\\\\u211b\\\,\\\\\\\\\\\mathscr{R}\\\),Er(\\\\\\\u212d\\\,\\\\\\\\\\\mathfrak{C}\\\),Er(\\\\\\\u210c\\\,\\\\\\\\\\\mathfrak{H}\\\),Er(\\\\\\\u2128\\\,\\\\\\\\\\\mathfrak{Z}\\\),Er(\\\\\\\\\\\Bbbk\\\,\\\\\\\\\\\Bbb{k}\\\),Er(\\\\\\\xb7\\\,\\\\\\\\\\\cdotp\\\),Er(\\\\\\\\\\\llap\\\,\\\\\\\\\\\mathllap{\\\\\\\\textrm{#1}}\\\),Er(\\\\\\\\\\\rlap\\\,\\\\\\\\\\\mathrlap{\\\\\\\\textrm{#1}}\\\),Er(\\\\\\\\\\\clap\\\,\\\\\\\\\\\mathclap{\\\\\\\\textrm{#1}}\\\),Er(\\\\\\\\\\\mathstrut\\\,\\\\\\\\\\\vphantom{(}\\\),Er(\\\\\\\\\\\underbar\\\,\\\\\\\\\\\underline{\\\\\\\\text{#1}}\\\),Er(\\\\\\\\\\\not\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrlap\\\\\\\\@not}}{\\\\\\\\char\\\338}),Er(\\\\\\\\\\\neq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\not}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2260}}\\\),Er(\\\\\\\\\\\ne\\\,\\\\\\\\\\\neq\\\),Er(\\\\\\\u2260\\\,\\\\\\\\\\\neq\\\),Er(\\\\\\\\\\\notin\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathrel{{\\\\\\\\in}\\\\\\\\mathllap{/\\\\\\\\mskip1mu}}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2209}}\\\),Er(\\\\\\\u2209\\\,\\\\\\\\\\\notin\\\),Er(\\\\\\\u2258\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\kern{-1em}\\\\\\\\raisebox{0.4em}{$\\\\\\\\scriptsize\\\\\\\\frown$}}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2258}}\\\),Er(\\\\\\\u2259\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\wedge}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u2258}}\\\),Er(\\\\\\\u225a\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\vee}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225a}}\\\),Er(\\\\\\\u225b\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\scriptsize\\\\\\\\star}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225b}}\\\),Er(\\\\\\\u225d\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\mathrm{def}}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225d}}\\\),Er(\\\\\\\u225e\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny\\\\\\\\mathrm{m}}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225e}}\\\),Er(\\\\\\\u225f\\\,\\\\\\\\\\\html@mathml{\\\\\\\\stackrel{\\\\\\\\tiny?}{}}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u225f}}\\\),Er(\\\\\\\u27c2\\\,\\\\\\\\\\\perp\\\),Er(\\\\\\\u203c\\\,\\\\\\\\\\\mathclose{!\\\\\\\\mkern-0.8mu!}\\\),Er(\\\\\\\u220c\\\,\\\\\\\\\\\notni\\\),Er(\\\\\\\u231c\\\,\\\\\\\\\\\ulcorner\\\),Er(\\\\\\\u231d\\\,\\\\\\\\\\\urcorner\\\),Er(\\\\\\\u231e\\\,\\\\\\\\\\\llcorner\\\),Er(\\\\\\\u231f\\\,\\\\\\\\\\\lrcorner\\\),Er(\\\\\\\xa9\\\,\\\\\\\\\\\copyright\\\),Er(\\\\\\\xae\\\,\\\\\\\\\\\textregistered\\\),Er(\\\\\\\ufe0f\\\,\\\\\\\\\\\textregistered\\\),Er(\\\\\\\\\\\ulcorner\\\,\\\\\\\\html@mathml{\\\\\\\\@ulcorner}{\\\\\\\\mathop{\\\\\\\\char\\\231c}}),Er(\\\\\\\\\\\urcorner\\\,\\\\\\\\html@mathml{\\\\\\\\@urcorner}{\\\\\\\\mathop{\\\\\\\\char\\\231d}}),Er(\\\\\\\\\\\llcorner\\\,\\\\\\\\html@mathml{\\\\\\\\@llcorner}{\\\\\\\\mathop{\\\\\\\\char\\\231e}}),Er(\\\\\\\\\\\lrcorner\\\,\\\\\\\\html@mathml{\\\\\\\\@lrcorner}{\\\\\\\\mathop{\\\\\\\\char\\\231f}}),Er(\\\\\\\\\\\vdots\\\,\\\\\\\\\\\mathord{\\\\\\\\varvdots\\\\\\\\rule{0pt}{15pt}}\\\),Er(\\\\\\\u22ee\\\,\\\\\\\\\\\vdots\\\),Er(\\\\\\\\\\\varGamma\\\,\\\\\\\\\\\mathit{\\\\\\\\Gamma}\\\),Er(\\\\\\\\\\\varDelta\\\,\\\\\\\\\\\mathit{\\\\\\\\Delta}\\\),Er(\\\\\\\\\\\varTheta\\\,\\\\\\\\\\\mathit{\\\\\\\\Theta}\\\),Er(\\\\\\\\\\\varLambda\\\,\\\\\\\\\\\mathit{\\\\\\\\Lambda}\\\),Er(\\\\\\\\\\\varXi\\\,\\\\\\\\\\\mathit{\\\\\\\\Xi}\\\),Er(\\\\\\\\\\\varPi\\\,\\\\\\\\\\\mathit{\\\\\\\\Pi}\\\),Er(\\\\\\\\\\\varSigma\\\,\\\\\\\\\\\mathit{\\\\\\\\Sigma}\\\),Er(\\\\\\\\\\\varUpsilon\\\,\\\\\\\\\\\mathit{\\\\\\\\Upsilon}\\\),Er(\\\\\\\\\\\varPhi\\\,\\\\\\\\\\\mathit{\\\\\\\\Phi}\\\),Er(\\\\\\\\\\\varPsi\\\,\\\\\\\\\\\mathit{\\\\\\\\Psi}\\\),Er(\\\\\\\\\\\varOmega\\\,\\\\\\\\\\\mathit{\\\\\\\\Omega}\\\),Er(\\\\\\\\\\\substack\\\,\\\\\\\\\\\begin{subarray}{c}#1\\\\\\\\end{subarray}\\\),Er(\\\\\\\\\\\colon\\\,\\\\\\\\\\\nobreak\\\\\\\\mskip2mu\\\\\\\\mathpunct{}\\\\\\\\mathchoice{\\\\\\\\mkern-3mu}{\\\\\\\\mkern-3mu}{}{}{:}\\\\\\\\mskip6mu\\\\\\\\relax\\\),Er(\\\\\\\\\\\boxed\\\,\\\\\\\\\\\fbox{$\\\\\\\\displaystyle{#1}$}\\\),Er(\\\\\\\\\\\iff\\\,\\\\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longleftrightarrow\\\\\\\\;\\\),Er(\\\\\\\\\\\implies\\\,\\\\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longrightarrow\\\\\\\\;\\\),Er(\\\\\\\\\\\impliedby\\\,\\\\\\\\\\\DOTSB\\\\\\\\;\\\\\\\\Longleftarrow\\\\\\\\;\\\);var Dn{\\\,\\\:\\\\\\\\\\\dotsc\\\,\\\\\\\\\\\not\\\:\\\\\\\\\\\dotsb\\\,\\\+\\\:\\\\\\\\\\\dotsb\\\,\\\\\\:\\\\\\\\\\\dotsb\\\,\\\\u003C\\\:\\\\\\\\\\\dotsb\\\,\\\>\\\:\\\\\\\\\\\dotsb\\\,\\\-\\\:\\\\\\\\\\\dotsb\\\,\\\*\\\:\\\\\\\\\\\dotsb\\\,\\\:\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\DOTSB\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\coprod\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigvee\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigwedge\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\biguplus\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigcap\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigcup\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\prod\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\sum\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigotimes\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigoplus\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigodot\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\bigsqcup\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\And\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\longrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\Longrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\longleftarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\Longleftarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\longleftrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\Longleftrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\mapsto\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\longmapsto\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\hookrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\doteq\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\mathbin\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\mathrel\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\relbar\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\Relbar\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\xrightarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\xleftarrow\\\:\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\DOTSI\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\int\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\oint\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\iint\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\iiint\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\iiiint\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\idotsint\\\:\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\DOTSX\\\:\\\\\\\\\\\dotsx\\\};Er(\\\\\\\\\\\dots\\\,(function(e){var t\\\\\\\\\\\dotso\\\,re.expandAfterFuture().text;return r in Dn?tDnr:(\\\\\\\\\\\not\\\r.substr(0,4)||r in ae.math&&l.contains(\\\bin\\\,\\\rel\\\,ae.mathr.group))&&(t\\\\\\\\\\\dotsb\\\),t}));var Pn{\\\)\\\:!0,\\\\\\:!0,\\\\\\\\\\\rbrack\\\:!0,\\\\\\\\\\\}\\\:!0,\\\\\\\\\\\rbrace\\\:!0,\\\\\\\\\\\rangle\\\:!0,\\\\\\\\\\\rceil\\\:!0,\\\\\\\\\\\rfloor\\\:!0,\\\\\\\\\\\rgroup\\\:!0,\\\\\\\\\\\rmoustache\\\:!0,\\\\\\\\\\\right\\\:!0,\\\\\\\\\\\bigr\\\:!0,\\\\\\\\\\\biggr\\\:!0,\\\\\\\\\\\Bigr\\\:!0,\\\\\\\\\\\Biggr\\\:!0,$:!0,\\\;\\\:!0,\\\.\\\:!0,\\\,\\\:!0};Er(\\\\\\\\\\\dotso\\\,(function(e){return e.future().text in Pn?\\\\\\\\\\\ldots\\\\\\\\,\\\:\\\\\\\\\\\ldots\\\})),Er(\\\\\\\\\\\dotsc\\\,(function(e){var te.future().text;return t in Pn&&\\\,\\\!t?\\\\\\\\\\\ldots\\\\\\\\,\\\:\\\\\\\\\\\ldots\\\})),Er(\\\\\\\\\\\cdots\\\,(function(e){return e.future().text in Pn?\\\\\\\\\\\@cdots\\\\\\\\,\\\:\\\\\\\\\\\@cdots\\\})),Er(\\\\\\\\\\\dotsb\\\,\\\\\\\\\\\cdots\\\),Er(\\\\\\\\\\\dotsm\\\,\\\\\\\\\\\cdots\\\),Er(\\\\\\\\\\\dotsi\\\,\\\\\\\\\\\!\\\\\\\\cdots\\\),Er(\\\\\\\\\\\dotsx\\\,\\\\\\\\\\\ldots\\\\\\\\,\\\),Er(\\\\\\\\\\\DOTSI\\\,\\\\\\\\\\\relax\\\),Er(\\\\\\\\\\\DOTSB\\\,\\\\\\\\\\\relax\\\),Er(\\\\\\\\\\\DOTSX\\\,\\\\\\\\\\\relax\\\),Er(\\\\\\\\\\\tmspace\\\,\\\\\\\\\\\TextOrMath{\\\\\\\\kern#1#3}{\\\\\\\\mskip#1#2}\\\\\\\\relax\\\),Er(\\\\\\\\\\\,\\\,\\\\\\\\\\\tmspace+{3mu}{.1667em}\\\),Er(\\\\\\\\\\\thinspace\\\,\\\\\\\\\\\,\\\),Er(\\\\\\\\\\\>\\\,\\\\\\\\\\\mskip{4mu}\\\),Er(\\\\\\\\\\\:\\\,\\\\\\\\\\\tmspace+{4mu}{.2222em}\\\),Er(\\\\\\\\\\\medspace\\\,\\\\\\\\\\\:\\\),Er(\\\\\\\\\\\;\\\,\\\\\\\\\\\tmspace+{5mu}{.2777em}\\\),Er(\\\\\\\\\\\thickspace\\\,\\\\\\\\\\\;\\\),Er(\\\\\\\\\\\!\\\,\\\\\\\\\\\tmspace-{3mu}{.1667em}\\\),Er(\\\\\\\\\\\negthinspace\\\,\\\\\\\\\\\!\\\),Er(\\\\\\\\\\\negmedspace\\\,\\\\\\\\\\\tmspace-{4mu}{.2222em}\\\),Er(\\\\\\\\\\\negthickspace\\\,\\\\\\\\\\\tmspace-{5mu}{.277em}\\\),Er(\\\\\\\\\\\enspace\\\,\\\\\\\\\\\kern.5em \\\),Er(\\\\\\\\\\\enskip\\\,\\\\\\\\\\\hskip.5em\\\\\\\\relax\\\),Er(\\\\\\\\\\\quad\\\,\\\\\\\\\\\hskip1em\\\\\\\\relax\\\),Er(\\\\\\\\\\\qquad\\\,\\\\\\\\\\\hskip2em\\\\\\\\relax\\\),Er(\\\\\\\\\\\tag\\\,\\\\\\\\\\\@ifstar\\\\\\\\tag@literal\\\\\\\\tag@paren\\\),Er(\\\\\\\\\\\tag@paren\\\,\\\\\\\\\\\tag@literal{({#1})}\\\),Er(\\\\\\\\\\\tag@literal\\\,(function(e){if(e.macros.get(\\\\\\\\\\\df@tag\\\))throw new n(\\\Multiple \\\\\\\\tag\\\);return\\\\\\\\\\\gdef\\\\\\\\df@tag{\\\\\\\\text{#1}}\\\})),Er(\\\\\\\\\\\bmod\\\,\\\\\\\\\\\mathchoice{\\\\\\\\mskip1mu}{\\\\\\\\mskip1mu}{\\\\\\\\mskip5mu}{\\\\\\\\mskip5mu}\\\\\\\\mathbin{\\\\\\\\rm mod}\\\\\\\\mathchoice{\\\\\\\\mskip1mu}{\\\\\\\\mskip1mu}{\\\\\\\\mskip5mu}{\\\\\\\\mskip5mu}\\\),Er(\\\\\\\\\\\pod\\\,\\\\\\\\\\\allowbreak\\\\\\\\mathchoice{\\\\\\\\mkern18mu}{\\\\\\\\mkern8mu}{\\\\\\\\mkern8mu}{\\\\\\\\mkern8mu}(#1)\\\),Er(\\\\\\\\\\\pmod\\\,\\\\\\\\\\\pod{{\\\\\\\\rm mod}\\\\\\\\mkern6mu#1}\\\),Er(\\\\\\\\\\\mod\\\,\\\\\\\\\\\allowbreak\\\\\\\\mathchoice{\\\\\\\\mkern18mu}{\\\\\\\\mkern12mu}{\\\\\\\\mkern12mu}{\\\\\\\\mkern12mu}{\\\\\\\\rm mod}\\\\\\\\,\\\\\\\\,#1\\\),Er(\\\\\\\\\\\pmb\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@binrel{#1}{\\\\\\\\mathrlap{#1}\\\\\\\\kern0.5px#1}}{\\\\\\\\mathbf{#1}}\\\),Er(\\\\\\\\\\\newline\\\,\\\\\\\\\\\\\\\\\\\\\\\\\\\relax\\\),Er(\\\\\\\\\\\TeX\\\,\\\\\\\\\\\textrm{\\\\\\\\html@mathml{T\\\\\\\\kern-.1667em\\\\\\\\raisebox{-.5ex}{E}\\\\\\\\kern-.125emX}{TeX}}\\\);var FnV(T\\\Main-Regular\\\\\\T\\\.charCodeAt(0)1-.7*T\\\Main-Regular\\\\\\A\\\.charCodeAt(0)1);Er(\\\\\\\\\\\LaTeX\\\,\\\\\\\\\\\textrm{\\\\\\\\html@mathml{L\\\\\\\\kern-.36em\\\\\\\\raisebox{\\\+Fn+\\\}{\\\\\\\\scriptstyle A}\\\\\\\\kern-.15em\\\\\\\\TeX}{LaTeX}}\\\),Er(\\\\\\\\\\\KaTeX\\\,\\\\\\\\\\\textrm{\\\\\\\\html@mathml{K\\\\\\\\kern-.17em\\\\\\\\raisebox{\\\+Fn+\\\}{\\\\\\\\scriptstyle A}\\\\\\\\kern-.15em\\\\\\\\TeX}{KaTeX}}\\\),Er(\\\\\\\\\\\hspace\\\,\\\\\\\\\\\@ifstar\\\\\\\\@hspacer\\\\\\\\@hspace\\\),Er(\\\\\\\\\\\@hspace\\\,\\\\\\\\\\\hskip #1\\\\\\\\relax\\\),Er(\\\\\\\\\\\@hspacer\\\,\\\\\\\\\\\rule{0pt}{0pt}\\\\\\\\hskip #1\\\\\\\\relax\\\),Er(\\\\\\\\\\\ordinarycolon\\\,\\\:\\\),Er(\\\\\\\\\\\vcentcolon\\\,\\\\\\\\\\\mathrel{\\\\\\\\mathop\\\\\\\\ordinarycolon}\\\),Er(\\\\\\\\\\\dblcolon\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-.9mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\2237}}),Er(\\\\\\\\\\\coloneqq\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}}}{\\\\\\\\mathop{\\\\\\\\char\\\2254}}),Er(\\\\\\\\\\\Coloneqq\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}}}{\\\\\\\\mathop{\\\\\\\\char\\\2237\\\\\\\\char\\\3d}}),Er(\\\\\\\\\\\coloneq\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\mathrel{-}}}{\\\\\\\\mathop{\\\\\\\\char\\\3a\\\\\\\\char\\\2212}}),Er(\\\\\\\\\\\Coloneq\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\mathrel{-}}}{\\\\\\\\mathop{\\\\\\\\char\\\2237\\\\\\\\char\\\2212}}),Er(\\\\\\\\\\\eqqcolon\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\2255}}),Er(\\\\\\\\\\\Eqqcolon\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\3d\\\\\\\\char\\\2237}}),Er(\\\\\\\\\\\eqcolon\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{-}\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\2239}}),Er(\\\\\\\\\\\Eqcolon\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\mathrel{-}\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}}{\\\\\\\\mathop{\\\\\\\\char\\\2212\\\\\\\\char\\\2237}}),Er(\\\\\\\\\\\colonapprox\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\approx}}{\\\\\\\\mathop{\\\\\\\\char\\\3a\\\\\\\\char\\\2248}}),Er(\\\\\\\\\\\Colonapprox\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\approx}}{\\\\\\\\mathop{\\\\\\\\char\\\2237\\\\\\\\char\\\2248}}),Er(\\\\\\\\\\\colonsim\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\vcentcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\sim}}{\\\\\\\\mathop{\\\\\\\\char\\\3a\\\\\\\\char\\\223c}}),Er(\\\\\\\\\\\Colonsim\\\,\\\\\\\\html@mathml{\\\\\\\\mathrel{\\\\\\\\dblcolon\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\sim}}{\\\\\\\\mathop{\\\\\\\\char\\\2237\\\\\\\\char\\\223c}}),Er(\\\\\\\u2237\\\,\\\\\\\\\\\dblcolon\\\),Er(\\\\\\\u2239\\\,\\\\\\\\\\\eqcolon\\\),Er(\\\\\\\u2254\\\,\\\\\\\\\\\coloneqq\\\),Er(\\\\\\\u2255\\\,\\\\\\\\\\\eqqcolon\\\),Er(\\\\\\\u2a74\\\,\\\\\\\\\\\Coloneqq\\\),Er(\\\\\\\\\\\ratio\\\,\\\\\\\\\\\vcentcolon\\\),Er(\\\\\\\\\\\coloncolon\\\,\\\\\\\\\\\dblcolon\\\),Er(\\\\\\\\\\\colonequals\\\,\\\\\\\\\\\coloneqq\\\),Er(\\\\\\\\\\\coloncolonequals\\\,\\\\\\\\\\\Coloneqq\\\),Er(\\\\\\\\\\\equalscolon\\\,\\\\\\\\\\\eqqcolon\\\),Er(\\\\\\\\\\\equalscoloncolon\\\,\\\\\\\\\\\Eqqcolon\\\),Er(\\\\\\\\\\\colonminus\\\,\\\\\\\\\\\coloneq\\\),Er(\\\\\\\\\\\coloncolonminus\\\,\\\\\\\\\\\Coloneq\\\),Er(\\\\\\\\\\\minuscolon\\\,\\\\\\\\\\\eqcolon\\\),Er(\\\\\\\\\\\minuscoloncolon\\\,\\\\\\\\\\\Eqcolon\\\),Er(\\\\\\\\\\\coloncolonapprox\\\,\\\\\\\\\\\Colonapprox\\\),Er(\\\\\\\\\\\coloncolonsim\\\,\\\\\\\\\\\Colonsim\\\),Er(\\\\\\\\\\\simcolon\\\,\\\\\\\\\\\mathrel{\\\\\\\\sim\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}\\\),Er(\\\\\\\\\\\simcoloncolon\\\,\\\\\\\\\\\mathrel{\\\\\\\\sim\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}\\\),Er(\\\\\\\\\\\approxcolon\\\,\\\\\\\\\\\mathrel{\\\\\\\\approx\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\vcentcolon}\\\),Er(\\\\\\\\\\\approxcoloncolon\\\,\\\\\\\\\\\mathrel{\\\\\\\\approx\\\\\\\\mathrel{\\\\\\\\mkern-1.2mu}\\\\\\\\dblcolon}\\\),Er(\\\\\\\\\\\notni\\\,\\\\\\\\\\\html@mathml{\\\\\\\\not\\\\\\\\ni}{\\\\\\\\mathrel{\\\\\\\\char`\\\\u220c}}\\\),Er(\\\\\\\\\\\limsup\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{lim\\\\\\\\,sup}\\\),Er(\\\\\\\\\\\liminf\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{lim\\\\\\\\,inf}\\\),Er(\\\\\\\\\\\injlim\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{inj\\\\\\\\,lim}\\\),Er(\\\\\\\\\\\projlim\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{proj\\\\\\\\,lim}\\\),Er(\\\\\\\\\\\varlimsup\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{\\\\\\\\overline{lim}}\\\),Er(\\\\\\\\\\\varliminf\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{\\\\\\\\underline{lim}}\\\),Er(\\\\\\\\\\\varinjlim\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{\\\\\\\\underrightarrow{lim}}\\\),Er(\\\\\\\\\\\varprojlim\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{\\\\\\\\underleftarrow{lim}}\\\),Er(\\\\\\\\\\\gvertneqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@gvertneqq}{\\\\u2269}\\\),Er(\\\\\\\\\\\lvertneqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@lvertneqq}{\\\\u2268}\\\),Er(\\\\\\\\\\\ngeqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@ngeqq}{\\\\u2271}\\\),Er(\\\\\\\\\\\ngeqslant\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@ngeqslant}{\\\\u2271}\\\),Er(\\\\\\\\\\\nleqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nleqq}{\\\\u2270}\\\),Er(\\\\\\\\\\\nleqslant\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nleqslant}{\\\\u2270}\\\),Er(\\\\\\\\\\\nshortmid\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nshortmid}{\\\\u2224}\\\),Er(\\\\\\\\\\\nshortparallel\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nshortparallel}{\\\\u2226}\\\),Er(\\\\\\\\\\\nsubseteqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nsubseteqq}{\\\\u2288}\\\),Er(\\\\\\\\\\\nsupseteqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@nsupseteqq}{\\\\u2289}\\\),Er(\\\\\\\\\\\varsubsetneq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@varsubsetneq}{\\\\u228a}\\\),Er(\\\\\\\\\\\varsubsetneqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@varsubsetneqq}{\\\\u2acb}\\\),Er(\\\\\\\\\\\varsupsetneq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@varsupsetneq}{\\\\u228b}\\\),Er(\\\\\\\\\\\varsupsetneqq\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@varsupsetneqq}{\\\\u2acc}\\\),Er(\\\\\\\\\\\imath\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@imath}{\\\\u0131}\\\),Er(\\\\\\\\\\\jmath\\\,\\\\\\\\\\\html@mathml{\\\\\\\\@jmath}{\\\\u0237}\\\),Er(\\\\\\\\\\\llbracket\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathopen{\\\\\\\\mkern-3.2mu}}{\\\\\\\\mathopen{\\\\\\\\char`\\\\u27e6}}\\\),Er(\\\\\\\\\\\rrbracket\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathclose{\\\\\\\\mkern-3.2mu}}{\\\\\\\\mathclose{\\\\\\\\char`\\\\u27e7}}\\\),Er(\\\\\\\u27e6\\\,\\\\\\\\\\\llbracket\\\),Er(\\\\\\\u27e7\\\,\\\\\\\\\\\rrbracket\\\),Er(\\\\\\\\\\\lBrace\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathopen{\\\\\\\\{\\\\\\\\mkern-3.2mu}}{\\\\\\\\mathopen{\\\\\\\\char`\\\\u2983}}\\\),Er(\\\\\\\\\\\rBrace\\\,\\\\\\\\\\\html@mathml{\\\\\\\\mathclose{\\\\\\\\mkern-3.2mu\\\\\\\\}}}{\\\\\\\\mathclose{\\\\\\\\char`\\\\u2984}}\\\),Er(\\\\\\\u2983\\\,\\\\\\\\\\\lBrace\\\),Er(\\\\\\\u2984\\\,\\\\\\\\\\\rBrace\\\),Er(\\\\\\\\\\\minuso\\\,\\\\\\\\\\\mathbin{\\\\\\\\html@mathml{{\\\\\\\\mathrlap{\\\\\\\\mathchoice{\\\\\\\\kern{0.145em}}{\\\\\\\\kern{0.145em}}{\\\\\\\\kern{0.1015em}}{\\\\\\\\kern{0.0725em}}\\\\\\\\circ}{-}}}{\\\\\\\\char`\\\\u29b5}}\\\),Er(\\\\\\\u29b5\\\,\\\\\\\\\\\minuso\\\),Er(\\\\\\\\\\\darr\\\,\\\\\\\\\\\downarrow\\\),Er(\\\\\\\\\\\dArr\\\,\\\\\\\\\\\Downarrow\\\),Er(\\\\\\\\\\\Darr\\\,\\\\\\\\\\\Downarrow\\\),Er(\\\\\\\\\\\lang\\\,\\\\\\\\\\\langle\\\),Er(\\\\\\\\\\\rang\\\,\\\\\\\\\\\rangle\\\),Er(\\\\\\\\\\\uarr\\\,\\\\\\\\\\\uparrow\\\),Er(\\\\\\\\\\\uArr\\\,\\\\\\\\\\\Uparrow\\\),Er(\\\\\\\\\\\Uarr\\\,\\\\\\\\\\\Uparrow\\\),Er(\\\\\\\\\\\N\\\,\\\\\\\\\\\mathbb{N}\\\),Er(\\\\\\\\\\\R\\\,\\\\\\\\\\\mathbb{R}\\\),Er(\\\\\\\\\\\Z\\\,\\\\\\\\\\\mathbb{Z}\\\),Er(\\\\\\\\\\\alef\\\,\\\\\\\\\\\aleph\\\),Er(\\\\\\\\\\\alefsym\\\,\\\\\\\\\\\aleph\\\),Er(\\\\\\\\\\\Alpha\\\,\\\\\\\\\\\mathrm{A}\\\),Er(\\\\\\\\\\\Beta\\\,\\\\\\\\\\\mathrm{B}\\\),Er(\\\\\\\\\\\bull\\\,\\\\\\\\\\\bullet\\\),Er(\\\\\\\\\\\Chi\\\,\\\\\\\\\\\mathrm{X}\\\),Er(\\\\\\\\\\\clubs\\\,\\\\\\\\\\\clubsuit\\\),Er(\\\\\\\\\\\cnums\\\,\\\\\\\\\\\mathbb{C}\\\),Er(\\\\\\\\\\\Complex\\\,\\\\\\\\\\\mathbb{C}\\\),Er(\\\\\\\\\\\Dagger\\\,\\\\\\\\\\\ddagger\\\),Er(\\\\\\\\\\\diamonds\\\,\\\\\\\\\\\diamondsuit\\\),Er(\\\\\\\\\\\empty\\\,\\\\\\\\\\\emptyset\\\),Er(\\\\\\\\\\\Epsilon\\\,\\\\\\\\\\\mathrm{E}\\\),Er(\\\\\\\\\\\Eta\\\,\\\\\\\\\\\mathrm{H}\\\),Er(\\\\\\\\\\\exist\\\,\\\\\\\\\\\exists\\\),Er(\\\\\\\\\\\harr\\\,\\\\\\\\\\\leftrightarrow\\\),Er(\\\\\\\\\\\hArr\\\,\\\\\\\\\\\Leftrightarrow\\\),Er(\\\\\\\\\\\Harr\\\,\\\\\\\\\\\Leftrightarrow\\\),Er(\\\\\\\\\\\hearts\\\,\\\\\\\\\\\heartsuit\\\),Er(\\\\\\\\\\\image\\\,\\\\\\\\\\\Im\\\),Er(\\\\\\\\\\\infin\\\,\\\\\\\\\\\infty\\\),Er(\\\\\\\\\\\Iota\\\,\\\\\\\\\\\mathrm{I}\\\),Er(\\\\\\\\\\\isin\\\,\\\\\\\\\\\in\\\),Er(\\\\\\\\\\\Kappa\\\,\\\\\\\\\\\mathrm{K}\\\),Er(\\\\\\\\\\\larr\\\,\\\\\\\\\\\leftarrow\\\),Er(\\\\\\\\\\\lArr\\\,\\\\\\\\\\\Leftarrow\\\),Er(\\\\\\\\\\\Larr\\\,\\\\\\\\\\\Leftarrow\\\),Er(\\\\\\\\\\\lrarr\\\,\\\\\\\\\\\leftrightarrow\\\),Er(\\\\\\\\\\\lrArr\\\,\\\\\\\\\\\Leftrightarrow\\\),Er(\\\\\\\\\\\Lrarr\\\,\\\\\\\\\\\Leftrightarrow\\\),Er(\\\\\\\\\\\Mu\\\,\\\\\\\\\\\mathrm{M}\\\),Er(\\\\\\\\\\\natnums\\\,\\\\\\\\\\\mathbb{N}\\\),Er(\\\\\\\\\\\Nu\\\,\\\\\\\\\\\mathrm{N}\\\),Er(\\\\\\\\\\\Omicron\\\,\\\\\\\\\\\mathrm{O}\\\),Er(\\\\\\\\\\\plusmn\\\,\\\\\\\\\\\pm\\\),Er(\\\\\\\\\\\rarr\\\,\\\\\\\\\\\rightarrow\\\),Er(\\\\\\\\\\\rArr\\\,\\\\\\\\\\\Rightarrow\\\),Er(\\\\\\\\\\\Rarr\\\,\\\\\\\\\\\Rightarrow\\\),Er(\\\\\\\\\\\real\\\,\\\\\\\\\\\Re\\\),Er(\\\\\\\\\\\reals\\\,\\\\\\\\\\\mathbb{R}\\\),Er(\\\\\\\\\\\Reals\\\,\\\\\\\\\\\mathbb{R}\\\),Er(\\\\\\\\\\\Rho\\\,\\\\\\\\\\\mathrm{P}\\\),Er(\\\\\\\\\\\sdot\\\,\\\\\\\\\\\cdot\\\),Er(\\\\\\\\\\\sect\\\,\\\\\\\\\\\S\\\),Er(\\\\\\\\\\\spades\\\,\\\\\\\\\\\spadesuit\\\),Er(\\\\\\\\\\\sub\\\,\\\\\\\\\\\subset\\\),Er(\\\\\\\\\\\sube\\\,\\\\\\\\\\\subseteq\\\),Er(\\\\\\\\\\\supe\\\,\\\\\\\\\\\supseteq\\\),Er(\\\\\\\\\\\Tau\\\,\\\\\\\\\\\mathrm{T}\\\),Er(\\\\\\\\\\\thetasym\\\,\\\\\\\\\\\vartheta\\\),Er(\\\\\\\\\\\weierp\\\,\\\\\\\\\\\wp\\\),Er(\\\\\\\\\\\Zeta\\\,\\\\\\\\\\\mathrm{Z}\\\),Er(\\\\\\\\\\\argmin\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{arg\\\\\\\\,min}\\\),Er(\\\\\\\\\\\argmax\\\,\\\\\\\\\\\DOTSB\\\\\\\\operatorname*{arg\\\\\\\\,max}\\\),Er(\\\\\\\\\\\plim\\\,\\\\\\\\\\\DOTSB\\\\\\\\mathop{\\\\\\\\operatorname{plim}}\\\\\\\\limits\\\),Er(\\\\\\\\\\\bra\\\,\\\\\\\\\\\mathinner{\\\\\\\\langle{#1}|}\\\),Er(\\\\\\\\\\\ket\\\,\\\\\\\\\\\mathinner{|{#1}\\\\\\\\rangle}\\\),Er(\\\\\\\\\\\braket\\\,\\\\\\\\\\\mathinner{\\\\\\\\langle{#1}\\\\\\\\rangle}\\\),Er(\\\\\\\\\\\Bra\\\,\\\\\\\\\\\left\\\\\\\\langle#1\\\\\\\\right|\\\),Er(\\\\\\\\\\\Ket\\\,\\\\\\\\\\\left|#1\\\\\\\\right\\\\\\\\rangle\\\);var Vnfunction(e){return function(t){var rt.consumeArg().tokens,nt.consumeArg().tokens,at.consumeArg().tokens,it.consumeArg().tokens,ot.macros.get(\\\|\\\),st.macros.get(\\\\\\\\\\\|\\\);t.macros.beginGroup();var lfunction(t){return function(r){e&&(r.macros.set(\\\|\\\,o),a.length&&r.macros.set(\\\\\\\\\\\|\\\,s));var it;!t&&a.length&&(\\\|\\\r.future().text&&(r.popToken(),i!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set(\\\|\\\,l(!1)),a.length&&t.macros.set(\\\\\\\\\\\|\\\,l(!0));var ht.consumeArg().tokens,mt.expandTokens(.concat(i,h,r));return t.macros.endGroup(),{tokens:m.reverse(),numArgs:0}}};Er(\\\\\\\\\\\bra@ket\\\,Vn(!1)),Er(\\\\\\\\\\\bra@set\\\,Vn(!0)),Er(\\\\\\\\\\\Braket\\\,\\\\\\\\\\\bra@ket{\\\\\\\\left\\\\\\\\langle}{\\\\\\\\,\\\\\\\\middle\\\\\\\\vert\\\\\\\\,}{\\\\\\\\,\\\\\\\\middle\\\\\\\\vert\\\\\\\\,}{\\\\\\\\right\\\\\\\\rangle}\\\),Er(\\\\\\\\\\\Set\\\,\\\\\\\\\\\bra@set{\\\\\\\\left\\\\\\\\{\\\\\\\\:}{\\\\\\\\;\\\\\\\\middle\\\\\\\\vert\\\\\\\\;}{\\\\\\\\;\\\\\\\\middle\\\\\\\\Vert\\\\\\\\;}{\\\\\\\\:\\\\\\\\right\\\\\\\\}}\\\),Er(\\\\\\\\\\\set\\\,\\\\\\\\\\\bra@set{\\\\\\\\{\\\\\\\\,}{\\\\\\\\mid}{}{\\\\\\\\,\\\\\\\\}}\\\),Er(\\\\\\\\\\\angln\\\,\\\{\\\\\\\\angl n}\\\),Er(\\\\\\\\\\\blue\\\,\\\\\\\\\\\textcolor{##6495ed}{#1}\\\),Er(\\\\\\\\\\\orange\\\,\\\\\\\\\\\textcolor{##ffa500}{#1}\\\),Er(\\\\\\\\\\\pink\\\,\\\\\\\\\\\textcolor{##ff00af}{#1}\\\),Er(\\\\\\\\\\\red\\\,\\\\\\\\\\\textcolor{##df0030}{#1}\\\),Er(\\\\\\\\\\\green\\\,\\\\\\\\\\\textcolor{##28ae7b}{#1}\\\),Er(\\\\\\\\\\\gray\\\,\\\\\\\\\\\textcolor{gray}{#1}\\\),Er(\\\\\\\\\\\purple\\\,\\\\\\\\\\\textcolor{##9d38bd}{#1}\\\),Er(\\\\\\\\\\\blueA\\\,\\\\\\\\\\\textcolor{##ccfaff}{#1}\\\),Er(\\\\\\\\\\\blueB\\\,\\\\\\\\\\\textcolor{##80f6ff}{#1}\\\),Er(\\\\\\\\\\\blueC\\\,\\\\\\\\\\\textcolor{##63d9ea}{#1}\\\),Er(\\\\\\\\\\\blueD\\\,\\\\\\\\\\\textcolor{##11accd}{#1}\\\),Er(\\\\\\\\\\\blueE\\\,\\\\\\\\\\\textcolor{##0c7f99}{#1}\\\),Er(\\\\\\\\\\\tealA\\\,\\\\\\\\\\\textcolor{##94fff5}{#1}\\\),Er(\\\\\\\\\\\tealB\\\,\\\\\\\\\\\textcolor{##26edd5}{#1}\\\),Er(\\\\\\\\\\\tealC\\\,\\\\\\\\\\\textcolor{##01d1c1}{#1}\\\),Er(\\\\\\\\\\\tealD\\\,\\\\\\\\\\\textcolor{##01a995}{#1}\\\),Er(\\\\\\\\\\\tealE\\\,\\\\\\\\\\\textcolor{##208170}{#1}\\\),Er(\\\\\\\\\\\greenA\\\,\\\\\\\\\\\textcolor{##b6ffb0}{#1}\\\),Er(\\\\\\\\\\\greenB\\\,\\\\\\\\\\\textcolor{##8af281}{#1}\\\),Er(\\\\\\\\\\\greenC\\\,\\\\\\\\\\\textcolor{##74cf70}{#1}\\\),Er(\\\\\\\\\\\greenD\\\,\\\\\\\\\\\textcolor{##1fab54}{#1}\\\),Er(\\\\\\\\\\\greenE\\\,\\\\\\\\\\\textcolor{##0d923f}{#1}\\\),Er(\\\\\\\\\\\goldA\\\,\\\\\\\\\\\textcolor{##ffd0a9}{#1}\\\),Er(\\\\\\\\\\\goldB\\\,\\\\\\\\\\\textcolor{##ffbb71}{#1}\\\),Er(\\\\\\\\\\\goldC\\\,\\\\\\\\\\\textcolor{##ff9c39}{#1}\\\),Er(\\\\\\\\\\\goldD\\\,\\\\\\\\\\\textcolor{##e07d10}{#1}\\\),Er(\\\\\\\\\\\goldE\\\,\\\\\\\\\\\textcolor{##a75a05}{#1}\\\),Er(\\\\\\\\\\\redA\\\,\\\\\\\\\\\textcolor{##fca9a9}{#1}\\\),Er(\\\\\\\\\\\redB\\\,\\\\\\\\\\\textcolor{##ff8482}{#1}\\\),Er(\\\\\\\\\\\redC\\\,\\\\\\\\\\\textcolor{##f9685d}{#1}\\\),Er(\\\\\\\\\\\redD\\\,\\\\\\\\\\\textcolor{##e84d39}{#1}\\\),Er(\\\\\\\\\\\redE\\\,\\\\\\\\\\\textcolor{##bc2612}{#1}\\\),Er(\\\\\\\\\\\maroonA\\\,\\\\\\\\\\\textcolor{##ffbde0}{#1}\\\),Er(\\\\\\\\\\\maroonB\\\,\\\\\\\\\\\textcolor{##ff92c6}{#1}\\\),Er(\\\\\\\\\\\maroonC\\\,\\\\\\\\\\\textcolor{##ed5fa6}{#1}\\\),Er(\\\\\\\\\\\maroonD\\\,\\\\\\\\\\\textcolor{##ca337c}{#1}\\\),Er(\\\\\\\\\\\maroonE\\\,\\\\\\\\\\\textcolor{##9e034e}{#1}\\\),Er(\\\\\\\\\\\purpleA\\\,\\\\\\\\\\\textcolor{##ddd7ff}{#1}\\\),Er(\\\\\\\\\\\purpleB\\\,\\\\\\\\\\\textcolor{##c6b9fc}{#1}\\\),Er(\\\\\\\\\\\purpleC\\\,\\\\\\\\\\\textcolor{##aa87ff}{#1}\\\),Er(\\\\\\\\\\\purpleD\\\,\\\\\\\\\\\textcolor{##7854ab}{#1}\\\),Er(\\\\\\\\\\\purpleE\\\,\\\\\\\\\\\textcolor{##543b78}{#1}\\\),Er(\\\\\\\\\\\mintA\\\,\\\\\\\\\\\textcolor{##f5f9e8}{#1}\\\),Er(\\\\\\\\\\\mintB\\\,\\\\\\\\\\\textcolor{##edf2df}{#1}\\\),Er(\\\\\\\\\\\mintC\\\,\\\\\\\\\\\textcolor{##e0e5cc}{#1}\\\),Er(\\\\\\\\\\\grayA\\\,\\\\\\\\\\\textcolor{##f6f7f7}{#1}\\\),Er(\\\\\\\\\\\grayB\\\,\\\\\\\\\\\textcolor{##f0f1f2}{#1}\\\),Er(\\\\\\\\\\\grayC\\\,\\\\\\\\\\\textcolor{##e3e5e6}{#1}\\\),Er(\\\\\\\\\\\grayD\\\,\\\\\\\\\\\textcolor{##d6d8da}{#1}\\\),Er(\\\\\\\\\\\grayE\\\,\\\\\\\\\\\textcolor{##babec2}{#1}\\\),Er(\\\\\\\\\\\grayF\\\,\\\\\\\\\\\textcolor{##888d93}{#1}\\\),Er(\\\\\\\\\\\grayG\\\,\\\\\\\\\\\textcolor{##626569}{#1}\\\),Er(\\\\\\\\\\\grayH\\\,\\\\\\\\\\\textcolor{##3b3e40}{#1}\\\),Er(\\\\\\\\\\\grayI\\\,\\\\\\\\\\\textcolor{##21242c}{#1}\\\),Er(\\\\\\\\\\\kaBlue\\\,\\\\\\\\\\\textcolor{##314453}{#1}\\\),Er(\\\\\\\\\\\kaGreen\\\,\\\\\\\\\\\textcolor{##71B307}{#1}\\\);var Gn{\\\^\\\:!0,_:!0,\\\\\\\\\\\limits\\\:!0,\\\\\\\\\\\nolimits\\\:!0},Unfunction(){function e(e,t,r){this.settingsvoid 0,this.expansionCountvoid 0,this.lexervoid 0,this.macrosvoid 0,this.stackvoid 0,this.modevoid 0,this.settingst,this.expansionCount0,this.feed(e),this.macrosnew On(Hn,t.macros),this.moder,this.stack}var te.prototype;return t.feedfunction(e){this.lexernew Rn(e,this.settings)},t.switchModefunction(e){this.modee},t.beginGroupfunction(){this.macros.beginGroup()},t.endGroupfunction(){this.macros.endGroup()},t.endGroupsfunction(){this.macros.endGroups()},t.futurefunction(){return 0this.stack.length&&this.pushToken(this.lexer.lex()),this.stackthis.stack.length-1},t.popTokenfunction(){return this.future(),this.stack.pop()},t.pushTokenfunction(e){this.stack.push(e)},t.pushTokensfunction(e){var t;(tthis.stack).push.apply(t,e)},t.scanArgumentfunction(e){var t,r,n;if(e){if(this.consumeSpaces(),\\\\\\!this.future().text)return null;tthis.popToken();var athis.consumeArg(\\\\\\);na.tokens,ra.end}else{var ithis.consumeArg();ni.tokens,ti.start,ri.end}return this.pushToken(new Dr(\\\EOF\\\,r.loc)),this.pushTokens(n),t.range(r,\\\\\\)},t.consumeSpacesfunction(){for(;;){if(\\\ \\\!this.future().text)break;this.stack.pop()}},t.consumeArgfunction(e){var t,re&&e.length>0;r||this.consumeSpaces();var a,ithis.future(),o0,s0;do{if(athis.popToken(),t.push(a),\\\{\\\a.text)++o;else if(\\\}\\\a.text){if(-1--o)throw new n(\\\Extra }\\\,a)}else if(\\\EOF\\\a.text)throw new n(\\\Unexpected end of input in a macro argument, expected \\\+(e&&r?es:\\\}\\\)+\\\\\\,a);if(e&&r)if((0o||1o&&\\\{\\\es)&&a.textes){if(++se.length){t.splice(-s,s);break}}else s0}while(0!o||r);return\\\{\\\i.text&&\\\}\\\tt.length-1.text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgsfunction(e,t){if(t){if(t.length!e+1)throw new n(\\\The length of delimiters doesnt match the number of args!\\\);for(var rt0,a0;a\u003Cr.length;a++){var ithis.popToken();if(ra!i.text)throw new n(\\\Use of the macro doesnt match its definition\\\,i)}}for(var o,s0;s\u003Ce;s++)o.push(this.consumeArg(t&&ts+1).tokens);return o},t.expandOncefunction(e){var tthis.popToken(),rt.text,at.noexpand?null:this._getExpansion(r);if(nulla||e&&a.unexpandable){if(e&&nulla&&\\\\\\\\\\\\\\r0&&!this.isDefined(r))throw new n(\\\Undefined control sequence: \\\+r);return this.pushToken(t),t}if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new n(\\\Too many expansions: infinite loop or need to increase maxExpand setting\\\);var ia.tokens,othis.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s(ii.slice()).length-1;s>0;--s){var lis;if(\\\#\\\l.text){if(0s)throw new n(\\\Incomplete placeholder at end of macro body\\\,l);if(\\\#\\\(li--s).text)i.splice(s+1,1);else{if(!/^1-9$/.test(l.text))throw new n(\\\Not a valid argument number\\\,l);var h;(hi).splice.apply(h,s,2.concat(o+l.text-1))}}}return this.pushTokens(i),i},t.expandAfterFuturefunction(){return this.expandOnce(),this.future()},t.expandNextTokenfunction(){for(;;){var ethis.expandOnce();if(e instanceof Dr)return e.treatAsRelax&&(e.text\\\\\\\\\\\relax\\\),this.stack.pop()}throw new Error},t.expandMacrofunction(e){return this.macros.has(e)?this.expandTokens(new Dr(e)):void 0},t.expandTokensfunction(e){var t,rthis.stack.length;for(this.pushTokens(e);this.stack.length>r;){var nthis.expandOnce(!0);n instanceof Dr&&(n.treatAsRelax&&(n.noexpand!1,n.treatAsRelax!1),t.push(this.stack.pop()))}return t},t.expandMacroAsTextfunction(e){var tthis.expandMacro(e);return t?t.map((function(e){return e.text})).join(\\\\\\):t},t._getExpansionfunction(e){var tthis.macros.get(e);if(nullt)return t;if(1e.length){var rthis.lexer.catcodese;if(null!r&&13!r)return}var n\\\function\\\typeof t?t(this):t;if(\\\string\\\typeof n){var a0;if(-1!n.indexOf(\\\#\\\))for(var in.replace(/##/g,\\\\\\);-1!i.indexOf(\\\#\\\+(a+1));)++a;for(var onew Rn(n,this.settings),s,lo.lex();\\\EOF\\\!l.text;)s.push(l),lo.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefinedfunction(e){return this.macros.has(e)||Nn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Gn.hasOwnProperty(e)},t.isExpandablefunction(e){var tthis.macros.get(e);return null!t?\\\string\\\typeof t||\\\function\\\typeof t||!t.unexpandable:Nn.hasOwnProperty(e)&&!Nne.primitive},e}(),Yn/^\\\\u208a\\\\u208b\\\\u208c\\\\u208d\\\\u208e\\\\u2080\\\\u2081\\\\u2082\\\\u2083\\\\u2084\\\\u2085\\\\u2086\\\\u2087\\\\u2088\\\\u2089\\\\u2090\\\\u2091\\\\u2095\\\\u1d62\\\\u2c7c\\\\u2096\\\\u2097\\\\u2098\\\\u2099\\\\u2092\\\\u209a\\\\u1d63\\\\u209b\\\\u209c\\\\u1d64\\\\u1d65\\\\u2093\\\\u1d66\\\\u1d67\\\\u1d68\\\\u1d69\\\\u1d6a/,XnObject.freeze({\\\\\\\u208a\\\:\\\+\\\,\\\\\\\u208b\\\:\\\-\\\,\\\\\\\u208c\\\:\\\\\\,\\\\\\\u208d\\\:\\\(\\\,\\\\\\\u208e\\\:\\\)\\\,\\\\\\\u2080\\\:\\\0\\\,\\\\\\\u2081\\\:\\\1\\\,\\\\\\\u2082\\\:\\\2\\\,\\\\\\\u2083\\\:\\\3\\\,\\\\\\\u2084\\\:\\\4\\\,\\\\\\\u2085\\\:\\\5\\\,\\\\\\\u2086\\\:\\\6\\\,\\\\\\\u2087\\\:\\\7\\\,\\\\\\\u2088\\\:\\\8\\\,\\\\\\\u2089\\\:\\\9\\\,\\\\\\\u2090\\\:\\\a\\\,\\\\\\\u2091\\\:\\\e\\\,\\\\\\\u2095\\\:\\\h\\\,\\\\\\\u1d62\\\:\\\i\\\,\\\\\\\u2c7c\\\:\\\j\\\,\\\\\\\u2096\\\:\\\k\\\,\\\\\\\u2097\\\:\\\l\\\,\\\\\\\u2098\\\:\\\m\\\,\\\\\\\u2099\\\:\\\n\\\,\\\\\\\u2092\\\:\\\o\\\,\\\\\\\u209a\\\:\\\p\\\,\\\\\\\u1d63\\\:\\\r\\\,\\\\\\\u209b\\\:\\\s\\\,\\\\\\\u209c\\\:\\\t\\\,\\\\\\\u1d64\\\:\\\u\\\,\\\\\\\u1d65\\\:\\\v\\\,\\\\\\\u2093\\\:\\\x\\\,\\\\\\\u1d66\\\:\\\\\\\u03b2\\\,\\\\\\\u1d67\\\:\\\\\\\u03b3\\\,\\\\\\\u1d68\\\:\\\\\\\u03c1\\\,\\\\\\\u1d69\\\:\\\\\\\u03d5\\\,\\\\\\\u1d6a\\\:\\\\\\\u03c7\\\,\\\\\\\u207a\\\:\\\+\\\,\\\\\\\u207b\\\:\\\-\\\,\\\\\\\u207c\\\:\\\\\\,\\\\\\\u207d\\\:\\\(\\\,\\\\\\\u207e\\\:\\\)\\\,\\\\\\\u2070\\\:\\\0\\\,\\\\\\\xb9\\\:\\\1\\\,\\\\\\\xb2\\\:\\\2\\\,\\\\\\\xb3\\\:\\\3\\\,\\\\\\\u2074\\\:\\\4\\\,\\\\\\\u2075\\\:\\\5\\\,\\\\\\\u2076\\\:\\\6\\\,\\\\\\\u2077\\\:\\\7\\\,\\\\\\\u2078\\\:\\\8\\\,\\\\\\\u2079\\\:\\\9\\\,\\\\\\\u1d2c\\\:\\\A\\\,\\\\\\\u1d2e\\\:\\\B\\\,\\\\\\\u1d30\\\:\\\D\\\,\\\\\\\u1d31\\\:\\\E\\\,\\\\\\\u1d33\\\:\\\G\\\,\\\\\\\u1d34\\\:\\\H\\\,\\\\\\\u1d35\\\:\\\I\\\,\\\\\\\u1d36\\\:\\\J\\\,\\\\\\\u1d37\\\:\\\K\\\,\\\\\\\u1d38\\\:\\\L\\\,\\\\\\\u1d39\\\:\\\M\\\,\\\\\\\u1d3a\\\:\\\N\\\,\\\\\\\u1d3c\\\:\\\O\\\,\\\\\\\u1d3e\\\:\\\P\\\,\\\\\\\u1d3f\\\:\\\R\\\,\\\\\\\u1d40\\\:\\\T\\\,\\\\\\\u1d41\\\:\\\U\\\,\\\\\\\u2c7d\\\:\\\V\\\,\\\\\\\u1d42\\\:\\\W\\\,\\\\\\\u1d43\\\:\\\a\\\,\\\\\\\u1d47\\\:\\\b\\\,\\\\\\\u1d9c\\\:\\\c\\\,\\\\\\\u1d48\\\:\\\d\\\,\\\\\\\u1d49\\\:\\\e\\\,\\\\\\\u1da0\\\:\\\f\\\,\\\\\\\u1d4d\\\:\\\g\\\,\\\\\\\u02b0\\\:\\\h\\\,\\\\\\\u2071\\\:\\\i\\\,\\\\\\\u02b2\\\:\\\j\\\,\\\\\\\u1d4f\\\:\\\k\\\,\\\\\\\u02e1\\\:\\\l\\\,\\\\\\\u1d50\\\:\\\m\\\,\\\\\\\u207f\\\:\\\n\\\,\\\\\\\u1d52\\\:\\\o\\\,\\\\\\\u1d56\\\:\\\p\\\,\\\\\\\u02b3\\\:\\\r\\\,\\\\\\\u02e2\\\:\\\s\\\,\\\\\\\u1d57\\\:\\\t\\\,\\\\\\\u1d58\\\:\\\u\\\,\\\\\\\u1d5b\\\:\\\v\\\,\\\\\\\u02b7\\\:\\\w\\\,\\\\\\\u02e3\\\:\\\x\\\,\\\\\\\u02b8\\\:\\\y\\\,\\\\\\\u1dbb\\\:\\\z\\\,\\\\\\\u1d5d\\\:\\\\\\\u03b2\\\,\\\\\\\u1d5e\\\:\\\\\\\u03b3\\\,\\\\\\\u1d5f\\\:\\\\\\\u03b4\\\,\\\\\\\u1d60\\\:\\\\\\\u03d5\\\,\\\\\\\u1d61\\\:\\\\\\\u03c7\\\,\\\\\\\u1dbf\\\:\\\\\\\u03b8\\\}),Wn{\\\\\\\u0301\\\:{text:\\\\\\\\\\\\\\,math:\\\\\\\\\\\acute\\\},\\\\\\\u0300\\\:{text:\\\\\\\\\\\`\\\,math:\\\\\\\\\\\grave\\\},\\\\\\\u0308\\\:{text:\\\\\\\\\\\,math:\\\\\\\\\\\ddot\\\},\\\\\\\u0303\\\:{text:\\\\\\\\\\\~\\\,math:\\\\\\\\\\\tilde\\\},\\\\\\\u0304\\\:{text:\\\\\\\\\\\\\\,math:\\\\\\\\\\\bar\\\},\\\\\\\u0306\\\:{text:\\\\\\\\\\\u\\\,math:\\\\\\\\\\\breve\\\},\\\\\\\u030c\\\:{text:\\\\\\\\\\\v\\\,math:\\\\\\\\\\\check\\\},\\\\\\\u0302\\\:{text:\\\\\\\\\\\^\\\,math:\\\\\\\\\\\hat\\\},\\\\\\\u0307\\\:{text:\\\\\\\\\\\.\\\,math:\\\\\\\\\\\dot\\\},\\\\\\\u030a\\\:{text:\\\\\\\\\\\r\\\,math:\\\\\\\\\\\mathring\\\},\\\\\\\u030b\\\:{text:\\\\\\\\\\\H\\\},\\\\\\\u0327\\\:{text:\\\\\\\\\\\c\\\}},_n{\\\\\\\xe1\\\:\\\a\\\\u0301\\\,\\\\\\\xe0\\\:\\\a\\\\u0300\\\,\\\\\\\xe4\\\:\\\a\\\\u0308\\\,\\\\\\\u01df\\\:\\\a\\\\u0308\\\\u0304\\\,\\\\\\\xe3\\\:\\\a\\\\u0303\\\,\\\\\\\u0101\\\:\\\a\\\\u0304\\\,\\\\\\\u0103\\\:\\\a\\\\u0306\\\,\\\\\\\u1eaf\\\:\\\a\\\\u0306\\\\u0301\\\,\\\\\\\u1eb1\\\:\\\a\\\\u0306\\\\u0300\\\,\\\\\\\u1eb5\\\:\\\a\\\\u0306\\\\u0303\\\,\\\\\\\u01ce\\\:\\\a\\\\u030c\\\,\\\\\\\xe2\\\:\\\a\\\\u0302\\\,\\\\\\\u1ea5\\\:\\\a\\\\u0302\\\\u0301\\\,\\\\\\\u1ea7\\\:\\\a\\\\u0302\\\\u0300\\\,\\\\\\\u1eab\\\:\\\a\\\\u0302\\\\u0303\\\,\\\\\\\u0227\\\:\\\a\\\\u0307\\\,\\\\\\\u01e1\\\:\\\a\\\\u0307\\\\u0304\\\,\\\\\\\xe5\\\:\\\a\\\\u030a\\\,\\\\\\\u01fb\\\:\\\a\\\\u030a\\\\u0301\\\,\\\\\\\u1e03\\\:\\\b\\\\u0307\\\,\\\\\\\u0107\\\:\\\c\\\\u0301\\\,\\\\\\\u1e09\\\:\\\c\\\\u0327\\\\u0301\\\,\\\\\\\u010d\\\:\\\c\\\\u030c\\\,\\\\\\\u0109\\\:\\\c\\\\u0302\\\,\\\\\\\u010b\\\:\\\c\\\\u0307\\\,\\\\\\\xe7\\\:\\\c\\\\u0327\\\,\\\\\\\u010f\\\:\\\d\\\\u030c\\\,\\\\\\\u1e0b\\\:\\\d\\\\u0307\\\,\\\\\\\u1e11\\\:\\\d\\\\u0327\\\,\\\\\\\xe9\\\:\\\e\\\\u0301\\\,\\\\\\\xe8\\\:\\\e\\\\u0300\\\,\\\\\\\xeb\\\:\\\e\\\\u0308\\\,\\\\\\\u1ebd\\\:\\\e\\\\u0303\\\,\\\\\\\u0113\\\:\\\e\\\\u0304\\\,\\\\\\\u1e17\\\:\\\e\\\\u0304\\\\u0301\\\,\\\\\\\u1e15\\\:\\\e\\\\u0304\\\\u0300\\\,\\\\\\\u0115\\\:\\\e\\\\u0306\\\,\\\\\\\u1e1d\\\:\\\e\\\\u0327\\\\u0306\\\,\\\\\\\u011b\\\:\\\e\\\\u030c\\\,\\\\\\\xea\\\:\\\e\\\\u0302\\\,\\\\\\\u1ebf\\\:\\\e\\\\u0302\\\\u0301\\\,\\\\\\\u1ec1\\\:\\\e\\\\u0302\\\\u0300\\\,\\\\\\\u1ec5\\\:\\\e\\\\u0302\\\\u0303\\\,\\\\\\\u0117\\\:\\\e\\\\u0307\\\,\\\\\\\u0229\\\:\\\e\\\\u0327\\\,\\\\\\\u1e1f\\\:\\\f\\\\u0307\\\,\\\\\\\u01f5\\\:\\\g\\\\u0301\\\,\\\\\\\u1e21\\\:\\\g\\\\u0304\\\,\\\\\\\u011f\\\:\\\g\\\\u0306\\\,\\\\\\\u01e7\\\:\\\g\\\\u030c\\\,\\\\\\\u011d\\\:\\\g\\\\u0302\\\,\\\\\\\u0121\\\:\\\g\\\\u0307\\\,\\\\\\\u0123\\\:\\\g\\\\u0327\\\,\\\\\\\u1e27\\\:\\\h\\\\u0308\\\,\\\\\\\u021f\\\:\\\h\\\\u030c\\\,\\\\\\\u0125\\\:\\\h\\\\u0302\\\,\\\\\\\u1e23\\\:\\\h\\\\u0307\\\,\\\\\\\u1e29\\\:\\\h\\\\u0327\\\,\\\\\\\xed\\\:\\\i\\\\u0301\\\,\\\\\\\xec\\\:\\\i\\\\u0300\\\,\\\\\\\xef\\\:\\\i\\\\u0308\\\,\\\\\\\u1e2f\\\:\\\i\\\\u0308\\\\u0301\\\,\\\\\\\u0129\\\:\\\i\\\\u0303\\\,\\\\\\\u012b\\\:\\\i\\\\u0304\\\,\\\\\\\u012d\\\:\\\i\\\\u0306\\\,\\\\\\\u01d0\\\:\\\i\\\\u030c\\\,\\\\\\\xee\\\:\\\i\\\\u0302\\\,\\\\\\\u01f0\\\:\\\j\\\\u030c\\\,\\\\\\\u0135\\\:\\\j\\\\u0302\\\,\\\\\\\u1e31\\\:\\\k\\\\u0301\\\,\\\\\\\u01e9\\\:\\\k\\\\u030c\\\,\\\\\\\u0137\\\:\\\k\\\\u0327\\\,\\\\\\\u013a\\\:\\\l\\\\u0301\\\,\\\\\\\u013e\\\:\\\l\\\\u030c\\\,\\\\\\\u013c\\\:\\\l\\\\u0327\\\,\\\\\\\u1e3f\\\:\\\m\\\\u0301\\\,\\\\\\\u1e41\\\:\\\m\\\\u0307\\\,\\\\\\\u0144\\\:\\\n\\\\u0301\\\,\\\\\\\u01f9\\\:\\\n\\\\u0300\\\,\\\\\\\xf1\\\:\\\n\\\\u0303\\\,\\\\\\\u0148\\\:\\\n\\\\u030c\\\,\\\\\\\u1e45\\\:\\\n\\\\u0307\\\,\\\\\\\u0146\\\:\\\n\\\\u0327\\\,\\\\\\\xf3\\\:\\\o\\\\u0301\\\,\\\\\\\xf2\\\:\\\o\\\\u0300\\\,\\\\\\\xf6\\\:\\\o\\\\u0308\\\,\\\\\\\u022b\\\:\\\o\\\\u0308\\\\u0304\\\,\\\\\\\xf5\\\:\\\o\\\\u0303\\\,\\\\\\\u1e4d\\\:\\\o\\\\u0303\\\\u0301\\\,\\\\\\\u1e4f\\\:\\\o\\\\u0303\\\\u0308\\\,\\\\\\\u022d\\\:\\\o\\\\u0303\\\\u0304\\\,\\\\\\\u014d\\\:\\\o\\\\u0304\\\,\\\\\\\u1e53\\\:\\\o\\\\u0304\\\\u0301\\\,\\\\\\\u1e51\\\:\\\o\\\\u0304\\\\u0300\\\,\\\\\\\u014f\\\:\\\o\\\\u0306\\\,\\\\\\\u01d2\\\:\\\o\\\\u030c\\\,\\\\\\\xf4\\\:\\\o\\\\u0302\\\,\\\\\\\u1ed1\\\:\\\o\\\\u0302\\\\u0301\\\,\\\\\\\u1ed3\\\:\\\o\\\\u0302\\\\u0300\\\,\\\\\\\u1ed7\\\:\\\o\\\\u0302\\\\u0303\\\,\\\\\\\u022f\\\:\\\o\\\\u0307\\\,\\\\\\\u0231\\\:\\\o\\\\u0307\\\\u0304\\\,\\\\\\\u0151\\\:\\\o\\\\u030b\\\,\\\\\\\u1e55\\\:\\\p\\\\u0301\\\,\\\\\\\u1e57\\\:\\\p\\\\u0307\\\,\\\\\\\u0155\\\:\\\r\\\\u0301\\\,\\\\\\\u0159\\\:\\\r\\\\u030c\\\,\\\\\\\u1e59\\\:\\\r\\\\u0307\\\,\\\\\\\u0157\\\:\\\r\\\\u0327\\\,\\\\\\\u015b\\\:\\\s\\\\u0301\\\,\\\\\\\u1e65\\\:\\\s\\\\u0301\\\\u0307\\\,\\\\\\\u0161\\\:\\\s\\\\u030c\\\,\\\\\\\u1e67\\\:\\\s\\\\u030c\\\\u0307\\\,\\\\\\\u015d\\\:\\\s\\\\u0302\\\,\\\\\\\u1e61\\\:\\\s\\\\u0307\\\,\\\\\\\u015f\\\:\\\s\\\\u0327\\\,\\\\\\\u1e97\\\:\\\t\\\\u0308\\\,\\\\\\\u0165\\\:\\\t\\\\u030c\\\,\\\\\\\u1e6b\\\:\\\t\\\\u0307\\\,\\\\\\\u0163\\\:\\\t\\\\u0327\\\,\\\\\\\xfa\\\:\\\u\\\\u0301\\\,\\\\\\\xf9\\\:\\\u\\\\u0300\\\,\\\\\\\xfc\\\:\\\u\\\\u0308\\\,\\\\\\\u01d8\\\:\\\u\\\\u0308\\\\u0301\\\,\\\\\\\u01dc\\\:\\\u\\\\u0308\\\\u0300\\\,\\\\\\\u01d6\\\:\\\u\\\\u0308\\\\u0304\\\,\\\\\\\u01da\\\:\\\u\\\\u0308\\\\u030c\\\,\\\\\\\u0169\\\:\\\u\\\\u0303\\\,\\\\\\\u1e79\\\:\\\u\\\\u0303\\\\u0301\\\,\\\\\\\u016b\\\:\\\u\\\\u0304\\\,\\\\\\\u1e7b\\\:\\\u\\\\u0304\\\\u0308\\\,\\\\\\\u016d\\\:\\\u\\\\u0306\\\,\\\\\\\u01d4\\\:\\\u\\\\u030c\\\,\\\\\\\xfb\\\:\\\u\\\\u0302\\\,\\\\\\\u016f\\\:\\\u\\\\u030a\\\,\\\\\\\u0171\\\:\\\u\\\\u030b\\\,\\\\\\\u1e7d\\\:\\\v\\\\u0303\\\,\\\\\\\u1e83\\\:\\\w\\\\u0301\\\,\\\\\\\u1e81\\\:\\\w\\\\u0300\\\,\\\\\\\u1e85\\\:\\\w\\\\u0308\\\,\\\\\\\u0175\\\:\\\w\\\\u0302\\\,\\\\\\\u1e87\\\:\\\w\\\\u0307\\\,\\\\\\\u1e98\\\:\\\w\\\\u030a\\\,\\\\\\\u1e8d\\\:\\\x\\\\u0308\\\,\\\\\\\u1e8b\\\:\\\x\\\\u0307\\\,\\\\\\\xfd\\\:\\\y\\\\u0301\\\,\\\\\\\u1ef3\\\:\\\y\\\\u0300\\\,\\\\\\\xff\\\:\\\y\\\\u0308\\\,\\\\\\\u1ef9\\\:\\\y\\\\u0303\\\,\\\\\\\u0233\\\:\\\y\\\\u0304\\\,\\\\\\\u0177\\\:\\\y\\\\u0302\\\,\\\\\\\u1e8f\\\:\\\y\\\\u0307\\\,\\\\\\\u1e99\\\:\\\y\\\\u030a\\\,\\\\\\\u017a\\\:\\\z\\\\u0301\\\,\\\\\\\u017e\\\:\\\z\\\\u030c\\\,\\\\\\\u1e91\\\:\\\z\\\\u0302\\\,\\\\\\\u017c\\\:\\\z\\\\u0307\\\,\\\\\\\xc1\\\:\\\A\\\\u0301\\\,\\\\\\\xc0\\\:\\\A\\\\u0300\\\,\\\\\\\xc4\\\:\\\A\\\\u0308\\\,\\\\\\\u01de\\\:\\\A\\\\u0308\\\\u0304\\\,\\\\\\\xc3\\\:\\\A\\\\u0303\\\,\\\\\\\u0100\\\:\\\A\\\\u0304\\\,\\\\\\\u0102\\\:\\\A\\\\u0306\\\,\\\\\\\u1eae\\\:\\\A\\\\u0306\\\\u0301\\\,\\\\\\\u1eb0\\\:\\\A\\\\u0306\\\\u0300\\\,\\\\\\\u1eb4\\\:\\\A\\\\u0306\\\\u0303\\\,\\\\\\\u01cd\\\:\\\A\\\\u030c\\\,\\\\\\\xc2\\\:\\\A\\\\u0302\\\,\\\\\\\u1ea4\\\:\\\A\\\\u0302\\\\u0301\\\,\\\\\\\u1ea6\\\:\\\A\\\\u0302\\\\u0300\\\,\\\\\\\u1eaa\\\:\\\A\\\\u0302\\\\u0303\\\,\\\\\\\u0226\\\:\\\A\\\\u0307\\\,\\\\\\\u01e0\\\:\\\A\\\\u0307\\\\u0304\\\,\\\\\\\xc5\\\:\\\A\\\\u030a\\\,\\\\\\\u01fa\\\:\\\A\\\\u030a\\\\u0301\\\,\\\\\\\u1e02\\\:\\\B\\\\u0307\\\,\\\\\\\u0106\\\:\\\C\\\\u0301\\\,\\\\\\\u1e08\\\:\\\C\\\\u0327\\\\u0301\\\,\\\\\\\u010c\\\:\\\C\\\\u030c\\\,\\\\\\\u0108\\\:\\\C\\\\u0302\\\,\\\\\\\u010a\\\:\\\C\\\\u0307\\\,\\\\\\\xc7\\\:\\\C\\\\u0327\\\,\\\\\\\u010e\\\:\\\D\\\\u030c\\\,\\\\\\\u1e0a\\\:\\\D\\\\u0307\\\,\\\\\\\u1e10\\\:\\\D\\\\u0327\\\,\\\\\\\xc9\\\:\\\E\\\\u0301\\\,\\\\\\\xc8\\\:\\\E\\\\u0300\\\,\\\\\\\xcb\\\:\\\E\\\\u0308\\\,\\\\\\\u1ebc\\\:\\\E\\\\u0303\\\,\\\\\\\u0112\\\:\\\E\\\\u0304\\\,\\\\\\\u1e16\\\:\\\E\\\\u0304\\\\u0301\\\,\\\\\\\u1e14\\\:\\\E\\\\u0304\\\\u0300\\\,\\\\\\\u0114\\\:\\\E\\\\u0306\\\,\\\\\\\u1e1c\\\:\\\E\\\\u0327\\\\u0306\\\,\\\\\\\u011a\\\:\\\E\\\\u030c\\\,\\\\\\\xca\\\:\\\E\\\\u0302\\\,\\\\\\\u1ebe\\\:\\\E\\\\u0302\\\\u0301\\\,\\\\\\\u1ec0\\\:\\\E\\\\u0302\\\\u0300\\\,\\\\\\\u1ec4\\\:\\\E\\\\u0302\\\\u0303\\\,\\\\\\\u0116\\\:\\\E\\\\u0307\\\,\\\\\\\u0228\\\:\\\E\\\\u0327\\\,\\\\\\\u1e1e\\\:\\\F\\\\u0307\\\,\\\\\\\u01f4\\\:\\\G\\\\u0301\\\,\\\\\\\u1e20\\\:\\\G\\\\u0304\\\,\\\\\\\u011e\\\:\\\G\\\\u0306\\\,\\\\\\\u01e6\\\:\\\G\\\\u030c\\\,\\\\\\\u011c\\\:\\\G\\\\u0302\\\,\\\\\\\u0120\\\:\\\G\\\\u0307\\\,\\\\\\\u0122\\\:\\\G\\\\u0327\\\,\\\\\\\u1e26\\\:\\\H\\\\u0308\\\,\\\\\\\u021e\\\:\\\H\\\\u030c\\\,\\\\\\\u0124\\\:\\\H\\\\u0302\\\,\\\\\\\u1e22\\\:\\\H\\\\u0307\\\,\\\\\\\u1e28\\\:\\\H\\\\u0327\\\,\\\\\\\xcd\\\:\\\I\\\\u0301\\\,\\\\\\\xcc\\\:\\\I\\\\u0300\\\,\\\\\\\xcf\\\:\\\I\\\\u0308\\\,\\\\\\\u1e2e\\\:\\\I\\\\u0308\\\\u0301\\\,\\\\\\\u0128\\\:\\\I\\\\u0303\\\,\\\\\\\u012a\\\:\\\I\\\\u0304\\\,\\\\\\\u012c\\\:\\\I\\\\u0306\\\,\\\\\\\u01cf\\\:\\\I\\\\u030c\\\,\\\\\\\xce\\\:\\\I\\\\u0302\\\,\\\\\\\u0130\\\:\\\I\\\\u0307\\\,\\\\\\\u0134\\\:\\\J\\\\u0302\\\,\\\\\\\u1e30\\\:\\\K\\\\u0301\\\,\\\\\\\u01e8\\\:\\\K\\\\u030c\\\,\\\\\\\u0136\\\:\\\K\\\\u0327\\\,\\\\\\\u0139\\\:\\\L\\\\u0301\\\,\\\\\\\u013d\\\:\\\L\\\\u030c\\\,\\\\\\\u013b\\\:\\\L\\\\u0327\\\,\\\\\\\u1e3e\\\:\\\M\\\\u0301\\\,\\\\\\\u1e40\\\:\\\M\\\\u0307\\\,\\\\\\\u0143\\\:\\\N\\\\u0301\\\,\\\\\\\u01f8\\\:\\\N\\\\u0300\\\,\\\\\\\xd1\\\:\\\N\\\\u0303\\\,\\\\\\\u0147\\\:\\\N\\\\u030c\\\,\\\\\\\u1e44\\\:\\\N\\\\u0307\\\,\\\\\\\u0145\\\:\\\N\\\\u0327\\\,\\\\\\\xd3\\\:\\\O\\\\u0301\\\,\\\\\\\xd2\\\:\\\O\\\\u0300\\\,\\\\\\\xd6\\\:\\\O\\\\u0308\\\,\\\\\\\u022a\\\:\\\O\\\\u0308\\\\u0304\\\,\\\\\\\xd5\\\:\\\O\\\\u0303\\\,\\\\\\\u1e4c\\\:\\\O\\\\u0303\\\\u0301\\\,\\\\\\\u1e4e\\\:\\\O\\\\u0303\\\\u0308\\\,\\\\\\\u022c\\\:\\\O\\\\u0303\\\\u0304\\\,\\\\\\\u014c\\\:\\\O\\\\u0304\\\,\\\\\\\u1e52\\\:\\\O\\\\u0304\\\\u0301\\\,\\\\\\\u1e50\\\:\\\O\\\\u0304\\\\u0300\\\,\\\\\\\u014e\\\:\\\O\\\\u0306\\\,\\\\\\\u01d1\\\:\\\O\\\\u030c\\\,\\\\\\\xd4\\\:\\\O\\\\u0302\\\,\\\\\\\u1ed0\\\:\\\O\\\\u0302\\\\u0301\\\,\\\\\\\u1ed2\\\:\\\O\\\\u0302\\\\u0300\\\,\\\\\\\u1ed6\\\:\\\O\\\\u0302\\\\u0303\\\,\\\\\\\u022e\\\:\\\O\\\\u0307\\\,\\\\\\\u0230\\\:\\\O\\\\u0307\\\\u0304\\\,\\\\\\\u0150\\\:\\\O\\\\u030b\\\,\\\\\\\u1e54\\\:\\\P\\\\u0301\\\,\\\\\\\u1e56\\\:\\\P\\\\u0307\\\,\\\\\\\u0154\\\:\\\R\\\\u0301\\\,\\\\\\\u0158\\\:\\\R\\\\u030c\\\,\\\\\\\u1e58\\\:\\\R\\\\u0307\\\,\\\\\\\u0156\\\:\\\R\\\\u0327\\\,\\\\\\\u015a\\\:\\\S\\\\u0301\\\,\\\\\\\u1e64\\\:\\\S\\\\u0301\\\\u0307\\\,\\\\\\\u0160\\\:\\\S\\\\u030c\\\,\\\\\\\u1e66\\\:\\\S\\\\u030c\\\\u0307\\\,\\\\\\\u015c\\\:\\\S\\\\u0302\\\,\\\\\\\u1e60\\\:\\\S\\\\u0307\\\,\\\\\\\u015e\\\:\\\S\\\\u0327\\\,\\\\\\\u0164\\\:\\\T\\\\u030c\\\,\\\\\\\u1e6a\\\:\\\T\\\\u0307\\\,\\\\\\\u0162\\\:\\\T\\\\u0327\\\,\\\\\\\xda\\\:\\\U\\\\u0301\\\,\\\\\\\xd9\\\:\\\U\\\\u0300\\\,\\\\\\\xdc\\\:\\\U\\\\u0308\\\,\\\\\\\u01d7\\\:\\\U\\\\u0308\\\\u0301\\\,\\\\\\\u01db\\\:\\\U\\\\u0308\\\\u0300\\\,\\\\\\\u01d5\\\:\\\U\\\\u0308\\\\u0304\\\,\\\\\\\u01d9\\\:\\\U\\\\u0308\\\\u030c\\\,\\\\\\\u0168\\\:\\\U\\\\u0303\\\,\\\\\\\u1e78\\\:\\\U\\\\u0303\\\\u0301\\\,\\\\\\\u016a\\\:\\\U\\\\u0304\\\,\\\\\\\u1e7a\\\:\\\U\\\\u0304\\\\u0308\\\,\\\\\\\u016c\\\:\\\U\\\\u0306\\\,\\\\\\\u01d3\\\:\\\U\\\\u030c\\\,\\\\\\\xdb\\\:\\\U\\\\u0302\\\,\\\\\\\u016e\\\:\\\U\\\\u030a\\\,\\\\\\\u0170\\\:\\\U\\\\u030b\\\,\\\\\\\u1e7c\\\:\\\V\\\\u0303\\\,\\\\\\\u1e82\\\:\\\W\\\\u0301\\\,\\\\\\\u1e80\\\:\\\W\\\\u0300\\\,\\\\\\\u1e84\\\:\\\W\\\\u0308\\\,\\\\\\\u0174\\\:\\\W\\\\u0302\\\,\\\\\\\u1e86\\\:\\\W\\\\u0307\\\,\\\\\\\u1e8c\\\:\\\X\\\\u0308\\\,\\\\\\\u1e8a\\\:\\\X\\\\u0307\\\,\\\\\\\xdd\\\:\\\Y\\\\u0301\\\,\\\\\\\u1ef2\\\:\\\Y\\\\u0300\\\,\\\\\\\u0178\\\:\\\Y\\\\u0308\\\,\\\\\\\u1ef8\\\:\\\Y\\\\u0303\\\,\\\\\\\u0232\\\:\\\Y\\\\u0304\\\,\\\\\\\u0176\\\:\\\Y\\\\u0302\\\,\\\\\\\u1e8e\\\:\\\Y\\\\u0307\\\,\\\\\\\u0179\\\:\\\Z\\\\u0301\\\,\\\\\\\u017d\\\:\\\Z\\\\u030c\\\,\\\\\\\u1e90\\\:\\\Z\\\\u0302\\\,\\\\\\\u017b\\\:\\\Z\\\\u0307\\\,\\\\\\\u03ac\\\:\\\\\\\u03b1\\\\u0301\\\,\\\\\\\u1f70\\\:\\\\\\\u03b1\\\\u0300\\\,\\\\\\\u1fb1\\\:\\\\\\\u03b1\\\\u0304\\\,\\\\\\\u1fb0\\\:\\\\\\\u03b1\\\\u0306\\\,\\\\\\\u03ad\\\:\\\\\\\u03b5\\\\u0301\\\,\\\\\\\u1f72\\\:\\\\\\\u03b5\\\\u0300\\\,\\\\\\\u03ae\\\:\\\\\\\u03b7\\\\u0301\\\,\\\\\\\u1f74\\\:\\\\\\\u03b7\\\\u0300\\\,\\\\\\\u03af\\\:\\\\\\\u03b9\\\\u0301\\\,\\\\\\\u1f76\\\:\\\\\\\u03b9\\\\u0300\\\,\\\\\\\u03ca\\\:\\\\\\\u03b9\\\\u0308\\\,\\\\\\\u0390\\\:\\\\\\\u03b9\\\\u0308\\\\u0301\\\,\\\\\\\u1fd2\\\:\\\\\\\u03b9\\\\u0308\\\\u0300\\\,\\\\\\\u1fd1\\\:\\\\\\\u03b9\\\\u0304\\\,\\\\\\\u1fd0\\\:\\\\\\\u03b9\\\\u0306\\\,\\\\\\\u03cc\\\:\\\\\\\u03bf\\\\u0301\\\,\\\\\\\u1f78\\\:\\\\\\\u03bf\\\\u0300\\\,\\\\\\\u03cd\\\:\\\\\\\u03c5\\\\u0301\\\,\\\\\\\u1f7a\\\:\\\\\\\u03c5\\\\u0300\\\,\\\\\\\u03cb\\\:\\\\\\\u03c5\\\\u0308\\\,\\\\\\\u03b0\\\:\\\\\\\u03c5\\\\u0308\\\\u0301\\\,\\\\\\\u1fe2\\\:\\\\\\\u03c5\\\\u0308\\\\u0300\\\,\\\\\\\u1fe1\\\:\\\\\\\u03c5\\\\u0304\\\,\\\\\\\u1fe0\\\:\\\\\\\u03c5\\\\u0306\\\,\\\\\\\u03ce\\\:\\\\\\\u03c9\\\\u0301\\\,\\\\\\\u1f7c\\\:\\\\\\\u03c9\\\\u0300\\\,\\\\\\\u038e\\\:\\\\\\\u03a5\\\\u0301\\\,\\\\\\\u1fea\\\:\\\\\\\u03a5\\\\u0300\\\,\\\\\\\u03ab\\\:\\\\\\\u03a5\\\\u0308\\\,\\\\\\\u1fe9\\\:\\\\\\\u03a5\\\\u0304\\\,\\\\\\\u1fe8\\\:\\\\\\\u03a5\\\\u0306\\\,\\\\\\\u038f\\\:\\\\\\\u03a9\\\\u0301\\\,\\\\\\\u1ffa\\\:\\\\\\\u03a9\\\\u0300\\\},jnfunction(){function e(e,t){this.modevoid 0,this.gulletvoid 0,this.settingsvoid 0,this.leftrightDepthvoid 0,this.nextTokenvoid 0,this.mode\\\math\\\,this.gulletnew Un(e,t,this.mode),this.settingst,this.leftrightDepth0}var te.prototype;return t.expectfunction(e,t){if(void 0t&&(t!0),this.fetch().text!e)throw new n(\\\Expected \\\+e+\\\, got \\\+this.fetch().text+\\\\\\,this.fetch());t&&this.consume()},t.consumefunction(){this.nextTokennull},t.fetchfunction(){return nullthis.nextToken&&(this.nextTokenthis.gullet.expandNextToken()),this.nextToken},t.switchModefunction(e){this.modee,this.gullet.switchMode(e)},t.parsefunction(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set(\\\\\\\\\\\color\\\,\\\\\\\\\\\textcolor\\\);try{var ethis.parseExpression(!1);return this.expect(\\\EOF\\\),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparsefunction(e){var tthis.nextToken;this.consume(),this.gullet.pushToken(new Dr(\\\}\\\)),this.gullet.pushTokens(e);var rthis.parseExpression(!1);return this.expect(\\\}\\\),this.nextTokent,r},t.parseExpressionfunction(t,r){for(var n;;){\\\math\\\this.mode&&this.consumeSpaces();var athis.fetch();if(-1!e.endOfExpression.indexOf(a.text))break;if(r&&a.textr)break;if(t&&Nna.text&&Nna.text.infix)break;var ithis.parseAtom(r);if(!i)break;\\\internal\\\!i.type&&n.push(i)}return\\\text\\\this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodesfunction(e){for(var t,r-1,a0;a\u003Ce.length;a++)if(\\\infix\\\ea.type){if(-1!r)throw new n(\\\only one infix operator per group\\\,ea.token);ra,tea.replaceWith}if(-1!r&&t){var i,o,se.slice(0,r),le.slice(r+1);return i1s.length&&\\\ordgroup\\\s0.type?s0:{type:\\\ordgroup\\\,mode:this.mode,body:s},o1l.length&&\\\ordgroup\\\l0.type?l0:{type:\\\ordgroup\\\,mode:this.mode,body:l},\\\\\\\\\\\\\\\\\\\abovefrac\\\t?this.callFunction(t,i,er,o,):this.callFunction(t,i,o,)}return e},t.handleSupSubscriptfunction(e){var tthis.fetch(),rt.text;this.consume(),this.consumeSpaces();var athis.parseGroup(e);if(!a)throw new n(\\\Expected group after \\\+r+\\\\\\,t);return a},t.formatUnsupportedCmdfunction(e){for(var t,r0;r\u003Ce.length;r++)t.push({type:\\\textord\\\,mode:\\\text\\\,text:er});var n{type:\\\text\\\,mode:this.mode,body:t};return{type:\\\color\\\,mode:this.mode,color:this.settings.errorColor,body:n}},t.parseAtomfunction(t){var r,a,ithis.parseGroup(\\\atom\\\,t);if(\\\text\\\this.mode)return i;for(;;){this.consumeSpaces();var othis.fetch();if(\\\\\\\\\\\limits\\\o.text||\\\\\\\\\\\nolimits\\\o.text){if(i&&\\\op\\\i.type){var s\\\\\\\\\\\limits\\\o.text;i.limitss,i.alwaysHandleSupSub!0}else{if(!i||\\\operatorname\\\!i.type)throw new n(\\\Limit controls must follow a math operator\\\,o);i.alwaysHandleSupSub&&(i.limits\\\\\\\\\\\limits\\\o.text)}this.consume()}else if(\\\^\\\o.text){if(r)throw new n(\\\Double superscript\\\,o);rthis.handleSupSubscript(\\\superscript\\\)}else if(\\\_\\\o.text){if(a)throw new n(\\\Double subscript\\\,o);athis.handleSupSubscript(\\\subscript\\\)}else if(\\\\\\o.text){if(r)throw new n(\\\Double superscript\\\,o);var l{type:\\\textord\\\,mode:this.mode,text:\\\\\\\\\\\prime\\\},hl;for(this.consume();\\\\\\this.fetch().text;)h.push(l),this.consume();\\\^\\\this.fetch().text&&h.push(this.handleSupSubscript(\\\superscript\\\)),r{type:\\\ordgroup\\\,mode:this.mode,body:h}}else{if(!Xno.text)break;var mXno.text,cYn.test(o.text);for(this.consume();;){var uthis.fetch().text;if(!Xnu)break;if(Yn.test(u)!c)break;this.consume(),m+Xnu}var pnew e(m,this.settings).parse();c?a{type:\\\ordgroup\\\,mode:\\\math\\\,body:p}:r{type:\\\ordgroup\\\,mode:\\\math\\\,body:p}}}return r||a?{type:\\\supsub\\\,mode:this.mode,base:i,sup:r,sub:a}:i},t.parseFunctionfunction(e,t){var rthis.fetch(),ar.text,iNna;if(!i)return null;if(this.consume(),t&&\\\atom\\\!t&&!i.allowedInArgument)throw new n(\\\Got function \\\+a+\\\ with no arguments\\\+(t?\\\ as \\\+t:\\\\\\),r);if(\\\text\\\this.mode&&!i.allowedInText)throw new n(\\\Cant use function \\\+a+\\\ in text mode\\\,r);if(\\\math\\\this.mode&&!1i.allowedInMath)throw new n(\\\Cant use function \\\+a+\\\ in math mode\\\,r);var othis.parseArguments(a,i),so.args,lo.optArgs;return this.callFunction(a,s,l,r,e)},t.callFunctionfunction(e,t,r,a,i){var o{funcName:e,parser:this,token:a,breakOnTokenText:i},sNne;if(s&&s.handler)return s.handler(o,t,r);throw new n(\\\No function handler for \\\+e)},t.parseArgumentsfunction(e,t){var rt.numArgs+t.numOptionalArgs;if(0r)return{args:,optArgs:};for(var a,i,o0;o\u003Cr;o++){var st.argTypes&&t.argTypeso,lo\u003Ct.numOptionalArgs;(t.primitive&&nulls||\\\sqrt\\\t.type&&1o&&nulli0)&&(s\\\primitive\\\);var hthis.parseGroupOfType(\\\argument to \\\+e+\\\\\\,s,l);if(l)i.push(h);else{if(nullh)throw new n(\\\Null argument, please report this as a bug\\\);a.push(h)}}return{args:a,optArgs:i}},t.parseGroupOfTypefunction(e,t,r){switch(t){case\\\color\\\:return this.parseColorGroup(r);case\\\size\\\:return this.parseSizeGroup(r);case\\\url\\\:return this.parseUrlGroup(r);case\\\math\\\:case\\\text\\\:return this.parseArgumentGroup(r,t);case\\\hbox\\\:var athis.parseArgumentGroup(r,\\\text\\\);return null!a?{type:\\\styling\\\,mode:a.mode,body:a,style:\\\text\\\}:null;case\\\raw\\\:var ithis.parseStringGroup(\\\raw\\\,r);return null!i?{type:\\\raw\\\,mode:\\\text\\\,string:i.text}:null;case\\\primitive\\\:if(r)throw new n(\\\A primitive argument cannot be optional\\\);var othis.parseGroup(e);if(nullo)throw new n(\\\Expected group as \\\+e,this.fetch());return o;case\\\original\\\:case null:case void 0:return this.parseArgumentGroup(r);default:throw new n(\\\Unknown group type as \\\+e,this.fetch())}},t.consumeSpacesfunction(){for(;\\\ \\\this.fetch().text;)this.consume()},t.parseStringGroupfunction(e,t){var rthis.gullet.scanArgument(t);if(nullr)return null;for(var n,a\\\\\\;\\\EOF\\\!(nthis.fetch()).text;)a+n.text,this.consume();return this.consume(),r.texta,r},t.parseRegexGroupfunction(e,t){for(var r,athis.fetch(),ia,o\\\\\\;\\\EOF\\\!(rthis.fetch()).text&&e.test(o+r.text);)o+(ir).text,this.consume();if(\\\\\\o)throw new n(\\\Invalid \\\+t+\\\: \\\+a.text+\\\\\\,a);return a.range(i,o)},t.parseColorGroupfunction(e){var tthis.parseStringGroup(\\\color\\\,e);if(nullt)return null;var r/^(#a-f0-9{3}|#?a-f0-9{6}|a-z+)$/i.exec(t.text);if(!r)throw new n(\\\Invalid color: \\\+t.text+\\\\\\,t);var ar0;return/^0-9a-f{6}$/i.test(a)&&(a\\\#\\\+a),{type:\\\color-token\\\,mode:this.mode,color:a}},t.parseSizeGroupfunction(e){var t,r!1;if(this.gullet.consumeSpaces(),!(te||\\\{\\\this.gullet.future().text?this.parseStringGroup(\\\size\\\,e):this.parseRegexGroup(/^-+? *(?:$|\\\\d+|\\\\d+\\\\.\\\\d*|\\\\.\\\\d*) *a-z{0,2} *$/,\\\size\\\)))return null;e||0!t.text.length||(t.text\\\0pt\\\,r!0);var a/(-+?) *(\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+) *(a-z{2})/.exec(t.text);if(!a)throw new n(\\\Invalid size: \\\+t.text+\\\\\\,t);var i{number:+(a1+a2),unit:a3};if(!P(i))throw new n(\\\Invalid unit: \\\+i.unit+\\\\\\,t);return{type:\\\size\\\,mode:this.mode,value:i,isBlank:r}},t.parseUrlGroupfunction(e){this.gullet.lexer.setCatcode(\\\%\\\,13),this.gullet.lexer.setCatcode(\\\~\\\,12);var tthis.parseStringGroup(\\\url\\\,e);if(this.gullet.lexer.setCatcode(\\\%\\\,14),this.gullet.lexer.setCatcode(\\\~\\\,13),nullt)return null;var rt.text.replace(/\\\\\\\\(#$%&~_^{})/g,\\\$1\\\);return{type:\\\url\\\,mode:this.mode,url:r}},t.parseArgumentGroupfunction(e,t){var rthis.gullet.scanArgument(e);if(nullr)return null;var nthis.mode;t&&this.switchMode(t),this.gullet.beginGroup();var athis.parseExpression(!1,\\\EOF\\\);this.expect(\\\EOF\\\),this.gullet.endGroup();var i{type:\\\ordgroup\\\,mode:this.mode,loc:r.loc,body:a};return t&&this.switchMode(n),i},t.parseGroupfunction(e,t){var r,athis.fetch(),ia.text;if(\\\{\\\i||\\\\\\\\\\\begingroup\\\i){this.consume();var o\\\{\\\i?\\\}\\\:\\\\\\\\\\\endgroup\\\;this.gullet.beginGroup();var sthis.parseExpression(!1,o),lthis.fetch();this.expect(o),this.gullet.endGroup(),r{type:\\\ordgroup\\\,mode:this.mode,loc:Lr.range(a,l),body:s,semisimple:\\\\\\\\\\\begingroup\\\i||void 0}}else if(null(rthis.parseFunction(t,e)||this.parseSymbol())&&\\\\\\\\\\\\\\i0&&!Gn.hasOwnProperty(i)){if(this.settings.throwOnError)throw new n(\\\Undefined control sequence: \\\+i,a);rthis.formatUnsupportedCmd(i),this.consume()}return r},t.formLigaturesfunction(e){for(var te.length-1,r0;r\u003Ct;++r){var ner,an.text;\\\-\\\a&&\\\-\\\er+1.text&&(r+1\u003Ct&&\\\-\\\er+2.text?(e.splice(r,3,{type:\\\textord\\\,mode:\\\text\\\,loc:Lr.range(n,er+2),text:\\\---\\\}),t-2):(e.splice(r,2,{type:\\\textord\\\,mode:\\\text\\\,loc:Lr.range(n,er+1),text:\\\--\\\}),t-1)),\\\\\\!a&&\\\`\\\!a||er+1.text!a||(e.splice(r,2,{type:\\\textord\\\,mode:\\\text\\\,loc:Lr.range(n,er+1),text:a+a}),t-1)}},t.parseSymbolfunction(){var ethis.fetch(),te.text;if(/^\\\\\\\\verb^a-zA-Z/.test(t)){this.consume();var rt.slice(5),a\\\*\\\r.charAt(0);if(a&&(rr.slice(1)),r.length\u003C2||r.charAt(0)!r.slice(-1))throw new n(\\\\\\\\\\\verb assertion failed --\\\\n please report what input caused this bug\\\);return{type:\\\verb\\\,mode:\\\text\\\,body:rr.slice(1,-1),star:a}}_n.hasOwnProperty(t0)&&!aethis.modet0&&(this.settings.strict&&\\\math\\\this.mode&&this.settings.reportNonstrict(\\\unicodeTextInMathMode\\\,Accented Unicode text character \\\+t0+\\\ used in math mode,e),t_nt0+t.substr(1));var i,oIn.exec(t);if(o&&(\\\i\\\(tt.substring(0,o.index))?t\\\\\\\u0131\\\:\\\j\\\t&&(t\\\\\\\u0237\\\)),aethis.modet){this.settings.strict&&\\\math\\\this.mode&&Ee.indexOf(t)>0&&this.settings.reportNonstrict(\\\unicodeTextInMathMode\\\,Latin-1/Unicode text character \\\+t0+\\\ used in math mode,e);var s,laethis.modet.group,hLr.range(e);if(te.hasOwnProperty(l)){var ml;s{type:\\\atom\\\,mode:this.mode,family:m,loc:h,text:t}}else s{type:l,mode:this.mode,loc:h,text:t};is}else{if(!(t.charCodeAt(0)>128))return null;this.settings.strict&&(S(t.charCodeAt(0))?\\\math\\\this.mode&&this.settings.reportNonstrict(\\\unicodeTextInMathMode\\\,Unicode text character \\\+t0+\\\ used in math mode,e):this.settings.reportNonstrict(\\\unknownSymbol\\\,Unrecognized Unicode character \\\+t0+\\\ (+t.charCodeAt(0)+\\\)\\\,e)),i{type:\\\textord\\\,mode:\\\text\\\,loc:Lr.range(e),text:t}}if(this.consume(),o)for(var c0;c\u003Co0.length;c++){var uo0c;if(!Wnu)throw new n(\\\Unknown accent \\\+u+\\\\\\,e);var pWnuthis.mode||Wnu.text;if(!p)throw new n(\\\Accent \\\+u+\\\ unsupported in \\\+this.mode+\\\ mode\\\,e);i{type:\\\accent\\\,mode:this.mode,loc:Lr.range(e),label:p,isStretchy:!1,isShifty:!0,base:i}}return i},e}();jn.endOfExpression\\\}\\\,\\\\\\\\\\\endgroup\\\,\\\\\\\\\\\end\\\,\\\\\\\\\\\right\\\,\\\&\\\;var $nfunction(e,t){if(!(\\\string\\\typeof e||e instanceof String))throw new TypeError(\\\KaTeX can only parse string typed expression\\\);var rnew jn(e,t);delete r.gullet.macros.current\\\\\\\\\\\df@tag\\\;var ar.parse();if(delete r.gullet.macros.current\\\\\\\\\\\current@color\\\,delete r.gullet.macros.current\\\\\\\\\\\color\\\,r.gullet.macros.get(\\\\\\\\\\\df@tag\\\)){if(!t.displayMode)throw new n(\\\\\\\\\\\tag works only in display equations\\\);a{type:\\\tag\\\,mode:\\\text\\\,body:a,tag:r.subparse(new Dr(\\\\\\\\\\\df@tag\\\))}}return a},Znfunction(e,t,r){t.textContent\\\\\\;var nJn(e,r).toNode();t.appendChild(n)};\\\undefined\\\!typeof document&&\\\CSS1Compat\\\!document.compatMode&&(\\\undefined\\\!typeof console&&console.warn(\\\Warning: KaTeX doesnt work in quirks mode. Make sure your website has a suitable doctype.\\\),Znfunction(){throw new n(\\\KaTeX doesnt work in quirks mode.\\\)});var Knfunction(e,t,r){if(r.throwOnError||!(e instanceof n))throw e;var aKe.makeSpan(\\\katex-error\\\,new Z(t));return a.setAttribute(\\\title\\\,e.toString()),a.setAttribute(\\\style\\\,\\\color:\\\+r.errorColor),a},Jnfunction(e,t){var rnew c(t);try{var n$n(e,r);return Lt(n,e,r)}catch(t){return Kn(t,e,r)}},Qn{version:\\\0.16.0\\\,render:Zn,renderToString:function(e,t){return Jn(e,t).toMarkup()},ParseError:n,SETTINGS_SCHEMA:h,__parse:function(e,t){var rnew c(t);return $n(e,r)},__renderToDomTree:Jn,__renderToHTMLTree:function(e,t){var rnew c(t);try{return function(e,t,r){var nSt(e,Ht(r)),aKe.makeSpan(\\\katex\\\,n);return Et(a,r)}($n(e,r),0,r)}catch(t){return Kn(t,e,r)}},__setFontMetrics:function(e,t){Tet},__defineSymbol:ie,__defineMacro:Er,__domTree:{Span:W,Anchor:_,SymbolNode:Z,SvgNode:K,PathNode:J,LineNode:Q}};return tt.default}()}));\\n})(!$tw.browser ? $tw.fakeDocument : window.document)\\n\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/katex/katex.min.js\,\module-type\:\library\},\$:/plugins/tiddlywiki/katex/mhchem.min.js\:{\text\:\(function(realRequire) {var require function(m) {if(m\\\katex\\\){m \\\$:/plugins/tiddlywiki/katex/katex.min.js\\\};return realRequire(m);};!function(t,e){if(\\\object\\\typeof exports&&\\\object\\\typeof module)module.exportse(require(\\\katex\\\));else if(\\\function\\\typeof define&&define.amd)define(\\\katex\\\,e);else{var n\\\object\\\typeof exports?e(require(\\\katex\\\)):e(t.katex);for(var o in n)(\\\object\\\typeof exports?exports:t)ono}}(\\\undefined\\\!typeof self?self:this,(function(t){return function(){\\\use strict\\\;var e{771:function(e){e.exportst}},n{};function o(t){var ant;if(void 0!a)return a.exports;var rnt{exports:{}};return et(r,r.exports,o),r.exports}o.nfunction(t){var et&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.dfunction(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:en})},o.ofunction(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var a{};return function(){var to(771),eo.n(t);e().__defineMacro(\\\\\\\\\\\ce\\\,(function(t){return n(t.consumeArgs(1)0,\\\ce\\\)})),e().__defineMacro(\\\\\\\\\\\pu\\\,(function(t){return n(t.consumeArgs(1)0,\\\pu\\\)})),e().__defineMacro(\\\\\\\\\\\tripledash\\\,\\\{\\\\\\\\vphantom{-}\\\\\\\\raisebox{2.56mu}{$\\\\\\\\mkern2mu\\\\\\\\tiny\\\\\\\\text{-}\\\\\\\\mkern1mu\\\\\\\\text{-}\\\\\\\\mkern1mu\\\\\\\\text{-}\\\\\\\\mkern2mu$}}\\\);var nfunction(t,e){for(var n\\\\\\,ot.length&&tt.length-1.loc.start,it.length-1;i>0;i--)ti.loc.start>o&&(n+\\\ \\\,oti.loc.start),n+ti.text,o+ti.text.length;return r.go(a.go(n,e))},a{go:function(t,e){if(!t)return;void 0e&&(e\\\ce\\\);var n,o\\\0\\\,r{};r.parenthesisLevel0,t(t(tt.replace(/\\\\n/g,\\\ \\\)).replace(/\\\\u2212\\\\u2013\\\\u2014\\\\u2010/g,\\\-\\\)).replace(/\\\\u2026/g,\\\...\\\);for(var i10,c;;){n!t?(i10,nt):i--;var ua.stateMachinese,pu.transitionso||u.transitions\\\*\\\;t:for(var s0;s\u003Cp.length;s++){var _a.patterns.match_(ps.pattern,t);if(_){for(var dps.task,m0;m\u003Cd.action_.length;m++){var l;if(u.actionsd.action_m.type_)lu.actionsd.action_m.type_(r,_.match_,d.action_m.option);else{if(!a.actionsd.action_m.type_)throw\\\MhchemBugA\\\,\\\mhchem bug A. Please report. (\\\+d.action_m.type_+\\\)\\\;la.actionsd.action_m.type_(r,_.match_,d.action_m.option)}a.concatArray(c,l)}if(od.nextState||o,!(t.length>0))return c;if(d.revisit||(t_.remainder),!d.toContinue)break t}}if(i\u003C0)throw\\\MhchemBugU\\\,\\\mhchem bug U. Please report.\\\}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var n0;n\u003Ce.length;n++)t.push(en);else t.push(e)},patterns:{patterns:{empty:/^$/,else:/^./,else2:/^./,space:/^\\\\s/,\\\space A\\\:/^\\\\s(?A-Z\\\\\\\\$)/,space$:/^\\\\s$/,\\\a-z\\\:/^a-z/,x:/^x/,x$:/^x$/,i$:/^i$/,letters:/^(?:a-zA-Z\\\\u03B1-\\\\u03C9\\\\u0391-\\\\u03A9?@|(?:\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\\\s+|\\\\{\\\\}|(?!a-zA-Z))))+/,\\\\\\\\\\\greek\\\:/^\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\\\s+|\\\\{\\\\}|(?!a-zA-Z))/,\\\one lowercase latin letter $\\\:/^(?:(a-z)(?:$|^a-zA-Z))$/,\\\$one lowercase latin letter$ $\\\:/^\\\\$(?:(a-z)(?:$|^a-zA-Z))\\\\$$/,\\\one lowercase greek letter $\\\:/^(?:\\\\$?\\\\u03B1-\\\\u03C9\\\\$?|\\\\$?\\\\\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\\\s*\\\\$?)(?:\\\\s+|\\\\{\\\\}|(?!a-zA-Z))$/,digits:/^0-9+/,\\\-9.,9\\\:/^+\\\\-?(?:0-9+(?:,.0-9+)?|0-9*(?:\\\\.0-9+))/,\\\-9.,9 no missing 0\\\:/^+\\\\-?0-9+(?:.,0-9+)?/,\\\(-)(9.,9)(e)(99)\\\:function(t){var et.match(/^(\\\\+\\\\-|\\\\+\\\\/\\\\-|\\\\+|\\\\-|\\\\\\\\pm\\\\s?)?(0-9+(?:,.0-9+)?|0-9*(?:\\\\.0-9+))?(\\\\((?:0-9+(?:,.0-9+)?|0-9*(?:\\\\.0-9+))\\\\))?(?:(eE|\\\\s*(\\\\*|x|\\\\\\\\times|\\\\u00D7)\\\\s*10\\\\^)(+\\\\-?0-9+|\\\\{+\\\\-?0-9+\\\\}))?/);return e&&e0?{match_:e.splice(1),remainder:t.substr(e0.length)}:null},\\\(-)(9)^(-9)\\\:function(t){var et.match(/^(\\\\+\\\\-|\\\\+\\\\/\\\\-|\\\\+|\\\\-|\\\\\\\\pm\\\\s?)?(0-9+(?:,.0-9+)?|0-9*(?:\\\\.0-9+)?)\\\\^(+\\\\-?0-9+|\\\\{+\\\\-?0-9+\\\\})/);return e&&e0?{match_:e.splice(1),remainder:t.substr(e0.length)}:null},\\\state of aggregation $\\\:function(t){var ea.patterns.findObserveGroups(t,\\\\\\,/^\\\\(a-z{1,3}(?\\\\),)/,\\\)\\\,\\\\\\);if(e&&e.remainder.match(/^($|\\\\s,;\\\\)\\\\\\\\})/))return e;var nt.match(/^(?:\\\\((?:\\\\\\\\ca\\\\s?)?\\\\$amothc\\\\$\\\\))/);return n?{match_:n0,remainder:t.substr(n0.length)}:null},\\\_{(state of aggregation)}$\\\:/^_\\\\{(\\\\(a-z{1,3}\\\\))\\\\}/,\\\{(\\\:/^(?:\\\\\\\\\\\\{|\\\\|\\\\()/,\\\)}\\\:/^(?:\\\\)|\\\\|\\\\\\\\\\\\})/,\\\, \\\:/^,;\\\\s*/,\\\,\\\:/^,;/,\\\.\\\:/^./,\\\. \\\:/^(.\\\\u22C5\\\\u00B7\\\\u2022)\\\\s*/,\\\...\\\:/^\\\\.\\\\.\\\\.(?$|^.)/,\\\* \\\:/^(*)\\\\s*/,\\\^{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\^{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\^($...$)\\\:function(t){return a.patterns.findObserveGroups(t,\\\^\\\,\\\$\\\,\\\$\\\,\\\\\\)},\\\^a\\\:/^\\\\^(0-9+|^\\\\\\\\_)/,\\\^\\\\\\\\x{}{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\^\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\,\\\\\\,\\\{\\\,\\\}\\\,\\\\\\,!0)},\\\^\\\\\\\\x{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\^\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\)},\\\^\\\\\\\\x\\\:/^\\\\^(\\\\\\\\a-zA-Z+)\\\\s*/,\\\^(-1)\\\:/^\\\\^(-?\\\\d+)/,\\\\\\:/^/,\\\_{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\_{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\_($...$)\\\:function(t){return a.patterns.findObserveGroups(t,\\\_\\\,\\\$\\\,\\\$\\\,\\\\\\)},_9:/^_(+\\\\-?0-9+|^\\\\\\\\)/,\\\_\\\\\\\\x{}{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\_\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\,\\\\\\,\\\{\\\,\\\}\\\,\\\\\\,!0)},\\\_\\\\\\\\x{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\_\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\)},\\\_\\\\\\\\x\\\:/^_(\\\\\\\\a-zA-Z+)\\\\s*/,\\\^_\\\:/^(?:\\\\^(?_)|\\\\_(?\\\\^)|\\\\^_$)/,\\\{}\\\:/^\\\\{\\\\}/,\\\{...}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\,\\\{\\\,\\\}\\\,\\\\\\)},\\\{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\$...$\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\,\\\$\\\,\\\$\\\,\\\\\\)},\\\${(...)}$\\\:function(t){return a.patterns.findObserveGroups(t,\\\${\\\,\\\\\\,\\\\\\,\\\}$\\\)},\\\$(...)$\\\:function(t){return a.patterns.findObserveGroups(t,\\\$\\\,\\\\\\,\\\\\\,\\\$\\\)},\\\\u003C>\\\:/^\u003C>/,\\\#\\\:/^#\\\\u2261/,\\\+\\\:/^\\\\+/,\\\-$\\\:/^-(?\\\\s_},;\\\\/|$|\\\\(a-z+\\\\))/,\\\-9\\\:/^-(?0-9)/,\\\- orbital overlap\\\:/^-(?(?:spd|sp)(?:$|\\\\s,;\\\\)\\\\\\\\}))/,\\\-\\\:/^-/,\\\pm-operator\\\:/^(?:\\\\\\\\pm|\\\\$\\\\\\\\pm\\\\$|\\\\+-|\\\\+\\\\/-)/,operator:/^(?:\\\\+|(?:\\\\-\u003C>|\u003C\u003C|>>|\\\\\\\\approx|\\\\$\\\\\\\\approx\\\\$)(?\\\\s|$|-?0-9))/,arrowUpDown:/^(?:v|\\\\(v\\\\)|\\\\^|\\\\(\\\\^\\\\))(?$|\\\\s,;\\\\)\\\\\\\\})/,\\\\\\\\\\\bond{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\bond{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\->\\\:/^(?:\u003C->|\u003C-->|->|\u003C-|\u003C>>|\u003C\u003C>|\u003C>|\\\\u2192\\\\u27F6\\\\u21CC)/,CMT:/^CMT(?\\\\)/,\\\(...)\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\,\\\\\\,\\\\\\,\\\\\\)},\\\1st-level escape\\\:/^(&|\\\\\\\\\\\\\\\\|\\\\\\\\hline)\\\\s*/,\\\\\\\\\\\,\\\:/^(?:\\\\\\\\,\\\\ ;:)/,\\\\\\\\\\\x{}{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\,\\\\\\,\\\{\\\,\\\}\\\,\\\\\\,!0)},\\\\\\\\\\\x{}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\,/^\\\\\\\\a-zA-Z+\\\\{/,\\\}\\\,\\\\\\)},\\\\\\\\\\\ca\\\:/^\\\\\\\\ca(?:\\\\s+|(?!a-zA-Z))/,\\\\\\\\\\\x\\\:/^(?:\\\\\\\\a-zA-Z+\\\\s*|\\\\\\\\_&{}%)/,orbital:/^(?:0-9{1,2}spdfgh|0-9{0,2}sp)(?$|^a-zA-Z)/,others:/^\\\\/~|/,\\\\\\\\\\\frac{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\frac{\\\,\\\\\\,\\\\\\,\\\}\\\,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\overset{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\overset{\\\,\\\\\\,\\\\\\,\\\}\\\,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\underset{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\underset{\\\,\\\\\\,\\\\\\,\\\}\\\,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\underbrace{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\underbrace{\\\,\\\\\\,\\\\\\,\\\}_\\\,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\color{(...)}0\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\color{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\color{(...)}{(...)}1\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\color{\\\,\\\\\\,\\\\\\,\\\}\\\,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\color(...){(...)}2\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\color\\\,\\\\\\\\\\\\\\,\\\\\\,/^(?\\\\{)/,\\\{\\\,\\\\\\,\\\\\\,\\\}\\\)},\\\\\\\\\\\ce{(...)}\\\:function(t){return a.patterns.findObserveGroups(t,\\\\\\\\\\\ce{\\\,\\\\\\,\\\\\\,\\\}\\\)},oxidation$:/^(?:+-IVX+|\\\\\\\\pm\\\\s*0|\\\\$\\\\\\\\pm\\\\$\\\\s*0)$/,\\\d-oxidation$\\\:/^(?:+-?\\\\s?IVX+|\\\\\\\\pm\\\\s*0|\\\\$\\\\\\\\pm\\\\$\\\\s*0)$/,\\\roman numeral\\\:/^IVX+/,\\\1/2$\\\:/^+\\\\-?(?:0-9+|\\\\$a-z\\\\$|a-z)\\\\/0-9+(?:\\\\$a-z\\\\$|a-z)?$/,amount:function(t){var e;if(et.match(/^(?:(?:(?:\\\\(+\\\\-?0-9+\\\\/0-9+\\\\)|+\\\\-?(?:0-9+|\\\\$a-z\\\\$|a-z)\\\\/0-9+|+\\\\-?0-9+.,0-9+|+\\\\-?\\\\.0-9+|+\\\\-?0-9+)(?:a-z(?\\\\s*A-Z))?)|+\\\\-?a-z(?\\\\s*A-Z)|\\\\+(?!\\\\s))/))return{match_:e0,remainder:t.substr(e0.length)};var na.patterns.findObserveGroups(t,\\\\\\,\\\$\\\,\\\$\\\,\\\\\\);return n&&(en.match_.match(/^\\\\$(?:\\\\(?+\\\\-?(?:0-9*a-z?+\\\\-)?0-9*a-z(?:+\\\\-0-9*a-z?)?\\\\)?|\\\\+|-)\\\\$$/))?{match_:e0,remainder:t.substr(e0.length)}:null},amount2:function(t){return this.amount(t)},\\\(KV letters),\\\:/^(?:A-Za-z{0,2}|i)(?,)/,formula$:function(t){if(t.match(/^\\\\(a-z+\\\\)$/))return null;var et.match(/^(?:a-z|(?:0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)+a-z)+0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)*|(?:a-z0-9\\\\ \\\\+\\\\-\\\\,\\\\.\\\\(\\\\)+)+a-z?)$/);return e?{match_:e0,remainder:t.substr(e0.length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?$|^a-zA-Z)/,\\\/\\\:/^\\\\s*(\\\\/)\\\\s*/,\\\//\\\:/^\\\\s*(\\\\/\\\\/)\\\\s*/,\\\*\\\:/^\\\\s**.\\\\s*/},findObserveGroups:function(t,e,n,o,a,r,i,c,u,p){var sfunction(t,e){if(\\\string\\\typeof e)return 0!t.indexOf(e)?null:e;var nt.match(e);return n?n0:null},_s(t,e);if(null_)return null;if(tt.substr(_.length),null(_s(t,n)))return null;var dfunction(t,e,n){for(var o0;e\u003Ct.length;){var at.charAt(e),rs(t.substr(e),n);if(null!r&&0o)return{endMatchBegin:e,endMatchEnd:e+r.length};if(\\\{\\\a)o++;else if(\\\}\\\a){if(0o)throw\\\ExtraCloseMissingOpen\\\,\\\Extra close brace or missing open brace\\\;o--}e++}return null}(t,_.length,o||a);if(nulld)return null;var mt.substring(0,o?d.endMatchEnd:d.endMatchBegin);if(r||i){var lthis.findObserveGroups(t.substr(d.endMatchEnd),r,i,c,u);if(nulll)return null;var fm,l.match_;return{match_:p?f.join(\\\\\\):f,remainder:l.remainder}}return{match_:m,remainder:t.substr(d.endMatchEnd)}},match_:function(t,e){var na.patterns.patternst;if(void 0n)throw\\\MhchemBugP\\\,\\\mhchem bug P. Please report. (\\\+t+\\\)\\\;if(\\\function\\\typeof n)return a.patterns.patternst(e);var oe.match(n);return o?{match_:o2?o1,o2:o1?o1:o0,remainder:e.substr(o0.length)}:null}},actions:{\\\a\\\:function(t,e){t.a(t.a||\\\\\\)+e},\\\b\\\:function(t,e){t.b(t.b||\\\\\\)+e},\\\p\\\:function(t,e){t.p(t.p||\\\\\\)+e},\\\o\\\:function(t,e){t.o(t.o||\\\\\\)+e},\\\q\\\:function(t,e){t.q(t.q||\\\\\\)+e},\\\d\\\:function(t,e){t.d(t.d||\\\\\\)+e},\\\rm\\\:function(t,e){t.rm(t.rm||\\\\\\)+e},\\\text\\\:function(t,e){t.text_(t.text_||\\\\\\)+e},insert:function(t,e,n){return{type_:n}},\\\insert+p1\\\:function(t,e,n){return{type_:n,p1:e}},\\\insert+p1+p2\\\:function(t,e,n){return{type_:n,p1:e0,p2:e1}},copy:function(t,e){return e},rm:function(t,e){return{type_:\\\rm\\\,p1:e||\\\\\\}},text:function(t,e){return a.go(e,\\\text\\\)},\\\{text}\\\:function(t,e){var n\\\{\\\;return a.concatArray(n,a.go(e,\\\text\\\)),n.push(\\\}\\\),n},\\\tex-math\\\:function(t,e){return a.go(e,\\\tex-math\\\)},\\\tex-math tight\\\:function(t,e){return a.go(e,\\\tex-math tight\\\)},bond:function(t,e,n){return{type_:\\\bond\\\,kind_:n||e}},\\\color0-output\\\:function(t,e){return{type_:\\\color0\\\,color:e0}},ce:function(t,e){return a.go(e)},\\\1/2\\\:function(t,e){var n;e.match(/^+\\\\-/)&&(n.push(e.substr(0,1)),ee.substr(1));var oe.match(/^(0-9+|\\\\$a-z\\\\$|a-z)\\\\/(0-9+)(\\\\$a-z\\\\$|a-z)?$/);return o1o1.replace(/\\\\$/g,\\\\\\),n.push({type_:\\\frac\\\,p1:o1,p2:o2}),o3&&(o3o3.replace(/\\\\$/g,\\\\\\),n.push({type_:\\\tex-math\\\,p1:o3})),n},\\\9,9\\\:function(t,e){return a.go(e,\\\9,9\\\)}},createTransitions:function(t){var e,n,o,a,r{};for(e in t)for(n in te)for(on.split(\\\|\\\),ten.stateArrayo,a0;a\u003Co.length;a++)roa;for(e in t)for(n in te)for(oten.stateArray||,a0;a\u003Co.length;a++){var iten;if(i.action_){i.action_.concat(i.action_);for(var c0;c\u003Ci.action_.length;c++)\\\string\\\typeof i.action_c&&(i.action_c{type_:i.action_c})}else i.action_;for(var ue.split(\\\|\\\),p0;p\u003Cu.length;p++)if(\\\*\\\oa)for(var s in r)rs.push({pattern:up,task:i});else roa.push({pattern:up,task:i})}return r},stateMachines:{}};a.stateMachines{ce:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},else:{\\\0|1|2\\\:{action_:\\\beginsWithBondfalse\\\,revisit:!0,toContinue:!0}},oxidation$:{0:{action_:\\\oxidation-output\\\}},CMT:{r:{action_:\\\rdt\\\,nextState:\\\rt\\\},rd:{action_:\\\rqt\\\,nextState:\\\rdt\\\}},arrowUpDown:{\\\0|1|2|as\\\:{action_:\\\sbfalse\\\,\\\output\\\,\\\operator\\\,nextState:\\\1\\\}},uprightEntities:{\\\0|1|2\\\:{action_:\\\o\\\,\\\output\\\,nextState:\\\1\\\}},orbital:{\\\0|1|2|3\\\:{action_:\\\o\\\,nextState:\\\o\\\}},\\\->\\\:{\\\0|1|2|3\\\:{action_:\\\r\\\,nextState:\\\r\\\},\\\a|as\\\:{action_:\\\output\\\,\\\r\\\,nextState:\\\r\\\},\\\*\\\:{action_:\\\output\\\,\\\r\\\,nextState:\\\r\\\}},\\\+\\\:{o:{action_:\\\d kv\\\,nextState:\\\d\\\},\\\d|D\\\:{action_:\\\d\\\,nextState:\\\d\\\},q:{action_:\\\d\\\,nextState:\\\qd\\\},\\\qd|qD\\\:{action_:\\\d\\\,nextState:\\\qd\\\},dq:{action_:\\\output\\\,\\\d\\\,nextState:\\\d\\\},3:{action_:\\\sbfalse\\\,\\\output\\\,\\\operator\\\,nextState:\\\0\\\}},amount:{\\\0|2\\\:{action_:\\\a\\\,nextState:\\\a\\\}},\\\pm-operator\\\:{\\\0|1|2|a|as\\\:{action_:\\\sbfalse\\\,\\\output\\\,{type_:\\\operator\\\,option:\\\\\\\\\\\pm\\\},nextState:\\\0\\\}},operator:{\\\0|1|2|a|as\\\:{action_:\\\sbfalse\\\,\\\output\\\,\\\operator\\\,nextState:\\\0\\\}},\\\-$\\\:{\\\o|q\\\:{action_:\\\charge or bond\\\,\\\output\\\,nextState:\\\qd\\\},d:{action_:\\\d\\\,nextState:\\\d\\\},D:{action_:\\\output\\\,{type_:\\\bond\\\,option:\\\-\\\},nextState:\\\3\\\},q:{action_:\\\d\\\,nextState:\\\qd\\\},qd:{action_:\\\d\\\,nextState:\\\qd\\\},\\\qD|dq\\\:{action_:\\\output\\\,{type_:\\\bond\\\,option:\\\-\\\},nextState:\\\3\\\}},\\\-9\\\:{\\\3|o\\\:{action_:\\\output\\\,{type_:\\\insert\\\,option:\\\hyphen\\\},nextState:\\\3\\\}},\\\- orbital overlap\\\:{o:{action_:\\\output\\\,{type_:\\\insert\\\,option:\\\hyphen\\\},nextState:\\\2\\\},d:{action_:\\\output\\\,{type_:\\\insert\\\,option:\\\hyphen\\\},nextState:\\\2\\\}},\\\-\\\:{\\\0|1|2\\\:{action_:{type_:\\\output\\\,option:1},\\\beginsWithBondtrue\\\,{type_:\\\bond\\\,option:\\\-\\\},nextState:\\\3\\\},3:{action_:{type_:\\\bond\\\,option:\\\-\\\}},a:{action_:\\\output\\\,{type_:\\\insert\\\,option:\\\hyphen\\\},nextState:\\\2\\\},as:{action_:{type_:\\\output\\\,option:2},{type_:\\\bond\\\,option:\\\-\\\},nextState:\\\3\\\},b:{action_:\\\b\\\},o:{action_:{type_:\\\- after o/d\\\,option:!1},nextState:\\\2\\\},q:{action_:{type_:\\\- after o/d\\\,option:!1},nextState:\\\2\\\},\\\d|qd|dq\\\:{action_:{type_:\\\- after o/d\\\,option:!0},nextState:\\\2\\\},\\\D|qD|p\\\:{action_:\\\output\\\,{type_:\\\bond\\\,option:\\\-\\\},nextState:\\\3\\\}},amount2:{\\\1|3\\\:{action_:\\\a\\\,nextState:\\\a\\\}},letters:{\\\0|1|2|3|a|as|b|p|bp|o\\\:{action_:\\\o\\\,nextState:\\\o\\\},\\\q|dq\\\:{action_:\\\output\\\,\\\o\\\,nextState:\\\o\\\},\\\d|D|qd|qD\\\:{action_:\\\o after d\\\,nextState:\\\o\\\}},digits:{o:{action_:\\\q\\\,nextState:\\\q\\\},\\\d|D\\\:{action_:\\\q\\\,nextState:\\\dq\\\},q:{action_:\\\output\\\,\\\o\\\,nextState:\\\o\\\},a:{action_:\\\o\\\,nextState:\\\o\\\}},\\\space A\\\:{\\\b|p|bp\\\:{}},space:{a:{nextState:\\\as\\\},0:{action_:\\\sbfalse\\\},\\\1|2\\\:{action_:\\\sbtrue\\\},\\\r|rt|rd|rdt|rdq\\\:{action_:\\\output\\\,nextState:\\\0\\\},\\\*\\\:{action_:\\\output\\\,\\\sbtrue\\\,nextState:\\\1\\\}},\\\1st-level escape\\\:{\\\1|2\\\:{action_:\\\output\\\,{type_:\\\insert+p1\\\,option:\\\1st-level escape\\\}},\\\*\\\:{action_:\\\output\\\,{type_:\\\insert+p1\\\,option:\\\1st-level escape\\\},nextState:\\\0\\\}},\\\(...)\\\:{\\\r|rt\\\:{action_:\\\rd\\\,nextState:\\\rd\\\},\\\rd|rdt\\\:{action_:\\\rq\\\,nextState:\\\rdq\\\}},\\\...\\\:{\\\o|d|D|dq|qd|qD\\\:{action_:\\\output\\\,{type_:\\\bond\\\,option:\\\...\\\},nextState:\\\3\\\},\\\*\\\:{action_:{type_:\\\output\\\,option:1},{type_:\\\insert\\\,option:\\\ellipsis\\\},nextState:\\\1\\\}},\\\. |* \\\:{\\\*\\\:{action_:\\\output\\\,{type_:\\\insert\\\,option:\\\addition compound\\\},nextState:\\\1\\\}},\\\state of aggregation $\\\:{\\\*\\\:{action_:\\\output\\\,\\\state of aggregation\\\,nextState:\\\1\\\}},\\\{(\\\:{\\\a|as|o\\\:{action_:\\\o\\\,\\\output\\\,\\\parenthesisLevel++\\\,nextState:\\\2\\\},\\\0|1|2|3\\\:{action_:\\\o\\\,\\\output\\\,\\\parenthesisLevel++\\\,nextState:\\\2\\\},\\\*\\\:{action_:\\\output\\\,\\\o\\\,\\\output\\\,\\\parenthesisLevel++\\\,nextState:\\\2\\\}},\\\)}\\\:{\\\0|1|2|3|b|p|bp|o\\\:{action_:\\\o\\\,\\\parenthesisLevel--\\\,nextState:\\\o\\\},\\\a|as|d|D|q|qd|qD|dq\\\:{action_:\\\output\\\,\\\o\\\,\\\parenthesisLevel--\\\,nextState:\\\o\\\}},\\\, \\\:{\\\*\\\:{action_:\\\output\\\,\\\comma\\\,nextState:\\\0\\\}},\\\^_\\\:{\\\*\\\:{}},\\\^{(...)}|^($...$)\\\:{\\\0|1|2|as\\\:{action_:\\\b\\\,nextState:\\\b\\\},p:{action_:\\\b\\\,nextState:\\\bp\\\},\\\3|o\\\:{action_:\\\d kv\\\,nextState:\\\D\\\},q:{action_:\\\d\\\,nextState:\\\qD\\\},\\\d|D|qd|qD|dq\\\:{action_:\\\output\\\,\\\d\\\,nextState:\\\D\\\}},\\\^a|^\\\\\\\\x{}{}|^\\\\\\\\x{}|^\\\\\\\\x|\\\:{\\\0|1|2|as\\\:{action_:\\\b\\\,nextState:\\\b\\\},p:{action_:\\\b\\\,nextState:\\\bp\\\},\\\3|o\\\:{action_:\\\d kv\\\,nextState:\\\d\\\},q:{action_:\\\d\\\,nextState:\\\qd\\\},\\\d|qd|D|qD\\\:{action_:\\\d\\\},dq:{action_:\\\output\\\,\\\d\\\,nextState:\\\d\\\}},\\\_{(state of aggregation)}$\\\:{\\\d|D|q|qd|qD|dq\\\:{action_:\\\output\\\,\\\q\\\,nextState:\\\q\\\}},\\\_{(...)}|_($...$)|_9|_\\\\\\\\x{}{}|_\\\\\\\\x{}|_\\\\\\\\x\\\:{\\\0|1|2|as\\\:{action_:\\\p\\\,nextState:\\\p\\\},b:{action_:\\\p\\\,nextState:\\\bp\\\},\\\3|o\\\:{action_:\\\q\\\,nextState:\\\q\\\},\\\d|D\\\:{action_:\\\q\\\,nextState:\\\dq\\\},\\\q|qd|qD|dq\\\:{action_:\\\output\\\,\\\q\\\,nextState:\\\q\\\}},\\\\u003C>\\\:{\\\0|1|2|3|a|as|o|q|d|D|qd|qD|dq\\\:{action_:{type_:\\\output\\\,option:2},\\\bond\\\,nextState:\\\3\\\}},\\\#\\\:{\\\0|1|2|3|a|as|o\\\:{action_:{type_:\\\output\\\,option:2},{type_:\\\bond\\\,option:\\\#\\\},nextState:\\\3\\\}},\\\{}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:1},nextState:\\\1\\\}},\\\{...}\\\:{\\\0|1|2|3|a|as|b|p|bp\\\:{action_:\\\o\\\,nextState:\\\o\\\},\\\o|d|D|q|qd|qD|dq\\\:{action_:\\\output\\\,\\\o\\\,nextState:\\\o\\\}},\\\$...$\\\:{a:{action_:\\\a\\\},\\\0|1|2|3|as|b|p|bp|o\\\:{action_:\\\o\\\,nextState:\\\o\\\},\\\as|o\\\:{action_:\\\o\\\},\\\q|d|D|qd|qD|dq\\\:{action_:\\\output\\\,\\\o\\\,nextState:\\\o\\\}},\\\\\\\\\\\bond{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\bond\\\,nextState:\\\3\\\}},\\\\\\\\\\\frac{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:1},\\\frac-output\\\,nextState:\\\3\\\}},\\\\\\\\\\\overset{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\overset-output\\\,nextState:\\\3\\\}},\\\\\\\\\\\underset{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\underset-output\\\,nextState:\\\3\\\}},\\\\\\\\\\\underbrace{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\underbrace-output\\\,nextState:\\\3\\\}},\\\\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\color-output\\\,nextState:\\\3\\\}},\\\\\\\\\\\color{(...)}0\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\color0-output\\\}},\\\\\\\\\\\ce{(...)}\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:2},\\\ce\\\,nextState:\\\3\\\}},\\\\\\\\\\\,\\\:{\\\*\\\:{action_:{type_:\\\output\\\,option:1},\\\copy\\\,nextState:\\\1\\\}},\\\\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\0|1|2|3|a|as|b|p|bp|o|c0\\\:{action_:\\\o\\\,\\\output\\\,nextState:\\\3\\\},\\\*\\\:{action_:\\\output\\\,\\\o\\\,\\\output\\\,nextState:\\\3\\\}},others:{\\\*\\\:{action_:{type_:\\\output\\\,option:1},\\\copy\\\,nextState:\\\3\\\}},else2:{a:{action_:\\\a to o\\\,nextState:\\\o\\\,revisit:!0},as:{action_:\\\output\\\,\\\sbtrue\\\,nextState:\\\1\\\,revisit:!0},\\\r|rt|rd|rdt|rdq\\\:{action_:\\\output\\\,nextState:\\\0\\\,revisit:!0},\\\*\\\:{action_:\\\output\\\,\\\copy\\\,nextState:\\\3\\\}}}),actions:{\\\o after d\\\:function(t,e){var n;if((t.d||\\\\\\).match(/^0-9+$/)){var ot.d;t.dvoid 0,nthis.output(t),t.bo}else nthis.output(t);return a.actions\\\o\\\(t,e),n},\\\d kv\\\:function(t,e){t.de,t.dType\\\kv\\\},\\\charge or bond\\\:function(t,e){if(t.beginsWithBond){var n;return a.concatArray(n,this.output(t)),a.concatArray(n,a.actions.bond(t,e,\\\-\\\)),n}t.de},\\\- after o/d\\\:function(t,e,n){var oa.patterns.match_(\\\orbital\\\,t.o||\\\\\\),ra.patterns.match_(\\\one lowercase greek letter $\\\,t.o||\\\\\\),ia.patterns.match_(\\\one lowercase latin letter $\\\,t.o||\\\\\\),ca.patterns.match_(\\\$one lowercase latin letter$ $\\\,t.o||\\\\\\),u\\\-\\\e&&(o&&\\\\\\o.remainder||r||i||c);!u||t.a||t.b||t.p||t.d||t.q||o||!i||(t.o\\\$\\\+t.o+\\\$\\\);var p;return u?(a.concatArray(p,this.output(t)),p.push({type_:\\\hyphen\\\})):(oa.patterns.match_(\\\digits\\\,t.d||\\\\\\),n&&o&&\\\\\\o.remainder?(a.concatArray(p,a.actions\\\d\\\(t,e)),a.concatArray(p,this.output(t))):(a.concatArray(p,this.output(t)),a.concatArray(p,a.actions.bond(t,e,\\\-\\\)))),p},\\\a to o\\\:function(t){t.ot.a,t.avoid 0},\\\sbtrue\\\:function(t){t.sb!0},\\\sbfalse\\\:function(t){t.sb!1},\\\beginsWithBondtrue\\\:function(t){t.beginsWithBond!0},\\\beginsWithBondfalse\\\:function(t){t.beginsWithBond!1},\\\parenthesisLevel++\\\:function(t){t.parenthesisLevel++},\\\parenthesisLevel--\\\:function(t){t.parenthesisLevel--},\\\state of aggregation\\\:function(t,e){return{type_:\\\state of aggregation\\\,p1:a.go(e,\\\o\\\)}},comma:function(t,e){var ne.replace(/\\\\s*$/,\\\\\\);return n!e&&0t.parenthesisLevel?{type_:\\\comma enumeration L\\\,p1:n}:{type_:\\\comma enumeration M\\\,p1:n}},output:function(t,e,n){var o,r,i;t.r?(r\\\M\\\t.rdt?a.go(t.rd,\\\tex-math\\\):\\\T\\\t.rdt?{type_:\\\text\\\,p1:t.rd||\\\\\\}:a.go(t.rd),i\\\M\\\t.rqt?a.go(t.rq,\\\tex-math\\\):\\\T\\\t.rqt?{type_:\\\text\\\,p1:t.rq||\\\\\\}:a.go(t.rq),o{type_:\\\arrow\\\,r:t.r,rd:r,rq:i}):(o,(t.a||t.b||t.p||t.o||t.q||t.d||n)&&(t.sb&&o.push({type_:\\\entitySkip\\\}),t.o||t.q||t.d||t.b||t.p||2n?t.o||t.q||t.d||!t.b&&!t.p?t.o&&\\\kv\\\t.dType&&a.patterns.match_(\\\d-oxidation$\\\,t.d||\\\\\\)?t.dType\\\oxidation\\\:t.o&&\\\kv\\\t.dType&&!t.q&&(t.dTypevoid 0):(t.ot.a,t.dt.b,t.qt.p,t.at.bt.pvoid 0):(t.ot.a,t.avoid 0),o.push({type_:\\\chemfive\\\,a:a.go(t.a,\\\a\\\),b:a.go(t.b,\\\bd\\\),p:a.go(t.p,\\\pq\\\),o:a.go(t.o,\\\o\\\),q:a.go(t.q,\\\pq\\\),d:a.go(t.d,\\\oxidation\\\t.dType?\\\oxidation\\\:\\\bd\\\),dType:t.dType})));for(var c in t)\\\parenthesisLevel\\\!c&&\\\beginsWithBond\\\!c&&delete tc;return o},\\\oxidation-output\\\:function(t,e){var n\\\{\\\;return a.concatArray(n,a.go(e,\\\oxidation\\\)),n.push(\\\}\\\),n},\\\frac-output\\\:function(t,e){return{type_:\\\frac-ce\\\,p1:a.go(e0),p2:a.go(e1)}},\\\overset-output\\\:function(t,e){return{type_:\\\overset\\\,p1:a.go(e0),p2:a.go(e1)}},\\\underset-output\\\:function(t,e){return{type_:\\\underset\\\,p1:a.go(e0),p2:a.go(e1)}},\\\underbrace-output\\\:function(t,e){return{type_:\\\underbrace\\\,p1:a.go(e0),p2:a.go(e1)}},\\\color-output\\\:function(t,e){return{type_:\\\color\\\,color1:e0,color2:a.go(e1)}},\\\r\\\:function(t,e){t.re},\\\rdt\\\:function(t,e){t.rdte},\\\rd\\\:function(t,e){t.rde},\\\rqt\\\:function(t,e){t.rqte},\\\rq\\\:function(t,e){t.rqe},operator:function(t,e,n){return{type_:\\\operator\\\,kind_:n||e}}}},a:{transitions:a.createTransitions({empty:{\\\*\\\:{}},\\\1/2$\\\:{0:{action_:\\\1/2\\\}},else:{0:{nextState:\\\1\\\,revisit:!0}},\\\$(...)$\\\:{\\\*\\\:{action_:\\\tex-math tight\\\,nextState:\\\1\\\}},\\\,\\\:{\\\*\\\:{action_:{type_:\\\insert\\\,option:\\\commaDecimal\\\}}},else2:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{}},o:{transitions:a.createTransitions({empty:{\\\*\\\:{}},\\\1/2$\\\:{0:{action_:\\\1/2\\\}},else:{0:{nextState:\\\1\\\,revisit:!0}},letters:{\\\*\\\:{action_:\\\rm\\\}},\\\\\\\\\\\ca\\\:{\\\*\\\:{action_:{type_:\\\insert\\\,option:\\\circa\\\}}},\\\\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\copy\\\}},\\\${(...)}$|$(...)$\\\:{\\\*\\\:{action_:\\\tex-math\\\}},\\\{(...)}\\\:{\\\*\\\:{action_:\\\{text}\\\}},else2:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{}},text:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},\\\{...}\\\:{\\\*\\\:{action_:\\\text\\\}},\\\${(...)}$|$(...)$\\\:{\\\*\\\:{action_:\\\tex-math\\\}},\\\\\\\\\\\greek\\\:{\\\*\\\:{action_:\\\output\\\,\\\rm\\\}},\\\\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\output\\\,\\\copy\\\}},else:{\\\*\\\:{action_:\\\text\\\}}}),actions:{output:function(t){if(t.text_){var e{type_:\\\text\\\,p1:t.text_};for(var n in t)delete tn;return e}}}},pq:{transitions:a.createTransitions({empty:{\\\*\\\:{}},\\\state of aggregation $\\\:{\\\*\\\:{action_:\\\state of aggregation\\\}},i$:{0:{nextState:\\\!f\\\,revisit:!0}},\\\(KV letters),\\\:{0:{action_:\\\rm\\\,nextState:\\\0\\\}},formula$:{0:{nextState:\\\f\\\,revisit:!0}},\\\1/2$\\\:{0:{action_:\\\1/2\\\}},else:{0:{nextState:\\\!f\\\,revisit:!0}},\\\${(...)}$|$(...)$\\\:{\\\*\\\:{action_:\\\tex-math\\\}},\\\{(...)}\\\:{\\\*\\\:{action_:\\\text\\\}},\\\a-z\\\:{f:{action_:\\\tex-math\\\}},letters:{\\\*\\\:{action_:\\\rm\\\}},\\\-9.,9\\\:{\\\*\\\:{action_:\\\9,9\\\}},\\\,\\\:{\\\*\\\:{action_:{type_:\\\insert+p1\\\,option:\\\comma enumeration S\\\}}},\\\\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2\\\:{\\\*\\\:{action_:\\\color-output\\\}},\\\\\\\\\\\color{(...)}0\\\:{\\\*\\\:{action_:\\\color0-output\\\}},\\\\\\\\\\\ce{(...)}\\\:{\\\*\\\:{action_:\\\ce\\\}},\\\\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\copy\\\}},else2:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{\\\state of aggregation\\\:function(t,e){return{type_:\\\state of aggregation subscript\\\,p1:a.go(e,\\\o\\\)}},\\\color-output\\\:function(t,e){return{type_:\\\color\\\,color1:e0,color2:a.go(e1,\\\pq\\\)}}}},bd:{transitions:a.createTransitions({empty:{\\\*\\\:{}},x$:{0:{nextState:\\\!f\\\,revisit:!0}},formula$:{0:{nextState:\\\f\\\,revisit:!0}},else:{0:{nextState:\\\!f\\\,revisit:!0}},\\\-9.,9 no missing 0\\\:{\\\*\\\:{action_:\\\9,9\\\}},\\\.\\\:{\\\*\\\:{action_:{type_:\\\insert\\\,option:\\\electron dot\\\}}},\\\a-z\\\:{f:{action_:\\\tex-math\\\}},x:{\\\*\\\:{action_:{type_:\\\insert\\\,option:\\\KV x\\\}}},letters:{\\\*\\\:{action_:\\\rm\\\}},\\\\\\:{\\\*\\\:{action_:{type_:\\\insert\\\,option:\\\prime\\\}}},\\\${(...)}$|$(...)$\\\:{\\\*\\\:{action_:\\\tex-math\\\}},\\\{(...)}\\\:{\\\*\\\:{action_:\\\text\\\}},\\\\\\\\\\\color{(...)}{(...)}1|\\\\\\\\color(...){(...)}2\\\:{\\\*\\\:{action_:\\\color-output\\\}},\\\\\\\\\\\color{(...)}0\\\:{\\\*\\\:{action_:\\\color0-output\\\}},\\\\\\\\\\\ce{(...)}\\\:{\\\*\\\:{action_:\\\ce\\\}},\\\\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\copy\\\}},else2:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{\\\color-output\\\:function(t,e){return{type_:\\\color\\\,color1:e0,color2:a.go(e1,\\\bd\\\)}}}},oxidation:{transitions:a.createTransitions({empty:{\\\*\\\:{}},\\\roman numeral\\\:{\\\*\\\:{action_:\\\roman-numeral\\\}},\\\${(...)}$|$(...)$\\\:{\\\*\\\:{action_:\\\tex-math\\\}},else:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{\\\roman-numeral\\\:function(t,e){return{type_:\\\roman numeral\\\,p1:e||\\\\\\}}}},\\\tex-math\\\:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},\\\\\\\\\\\ce{(...)}\\\:{\\\*\\\:{action_:\\\output\\\,\\\ce\\\}},\\\{...}|\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\o\\\}},else:{\\\*\\\:{action_:\\\o\\\}}}),actions:{output:function(t){if(t.o){var e{type_:\\\tex-math\\\,p1:t.o};for(var n in t)delete tn;return e}}}},\\\tex-math tight\\\:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},\\\\\\\\\\\ce{(...)}\\\:{\\\*\\\:{action_:\\\output\\\,\\\ce\\\}},\\\{...}|\\\\\\\\,|\\\\\\\\x{}{}|\\\\\\\\x{}|\\\\\\\\x\\\:{\\\*\\\:{action_:\\\o\\\}},\\\-|+\\\:{\\\*\\\:{action_:\\\tight operator\\\}},else:{\\\*\\\:{action_:\\\o\\\}}}),actions:{\\\tight operator\\\:function(t,e){t.o(t.o||\\\\\\)+\\\{\\\+e+\\\}\\\},output:function(t){if(t.o){var e{type_:\\\tex-math\\\,p1:t.o};for(var n in t)delete tn;return e}}}},\\\9,9\\\:{transitions:a.createTransitions({empty:{\\\*\\\:{}},\\\,\\\:{\\\*\\\:{action_:\\\comma\\\}},else:{\\\*\\\:{action_:\\\copy\\\}}}),actions:{comma:function(){return{type_:\\\commaDecimal\\\}}}},pu:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},space$:{\\\*\\\:{action_:\\\output\\\,\\\space\\\}},\\\{(|)}\\\:{\\\0|a\\\:{action_:\\\copy\\\}},\\\(-)(9)^(-9)\\\:{0:{action_:\\\number^\\\,nextState:\\\a\\\}},\\\(-)(9.,9)(e)(99)\\\:{0:{action_:\\\enumber\\\,nextState:\\\a\\\}},space:{\\\0|a\\\:{}},\\\pm-operator\\\:{\\\0|a\\\:{action_:{type_:\\\operator\\\,option:\\\\\\\\\\\pm\\\},nextState:\\\0\\\}},operator:{\\\0|a\\\:{action_:\\\copy\\\,nextState:\\\0\\\}},\\\//\\\:{d:{action_:\\\o\\\,nextState:\\\/\\\}},\\\/\\\:{d:{action_:\\\o\\\,nextState:\\\/\\\}},\\\{...}|else\\\:{\\\0|d\\\:{action_:\\\d\\\,nextState:\\\d\\\},a:{action_:\\\space\\\,\\\d\\\,nextState:\\\d\\\},\\\/|q\\\:{action_:\\\q\\\,nextState:\\\q\\\}}}),actions:{enumber:function(t,e){var n;return\\\+-\\\e0||\\\+/-\\\e0?n.push(\\\\\\\\\\\pm \\\):e0&&n.push(e0),e1&&(a.concatArray(n,a.go(e1,\\\pu-9,9\\\)),e2&&(e2.match(/,./)?a.concatArray(n,a.go(e2,\\\pu-9,9\\\)):n.push(e2)),e3e4||e3,e3&&(e3e3.trim(),\\\e\\\e3||\\\*\\\e3.substr(0,1)?n.push({type_:\\\cdot\\\}):n.push({type_:\\\times\\\}))),e3&&n.push(\\\10^{\\\+e5+\\\}\\\),n},\\\number^\\\:function(t,e){var n;return\\\+-\\\e0||\\\+/-\\\e0?n.push(\\\\\\\\\\\pm \\\):e0&&n.push(e0),a.concatArray(n,a.go(e1,\\\pu-9,9\\\)),n.push(\\\^{\\\+e2+\\\}\\\),n},operator:function(t,e,n){return{type_:\\\operator\\\,kind_:n||e}},space:function(){return{type_:\\\pu-space-1\\\}},output:function(t){var e,na.patterns.match_(\\\{(...)}\\\,t.d||\\\\\\);n&&\\\\\\n.remainder&&(t.dn.match_);var oa.patterns.match_(\\\{(...)}\\\,t.q||\\\\\\);if(o&&\\\\\\o.remainder&&(t.qo.match_),t.d&&(t.dt.d.replace(/\\\\u00B0C|\\\\^oC|\\\\^{o}C/g,\\\{}^{\\\\\\\\circ}C\\\),t.dt.d.replace(/\\\\u00B0F|\\\\^oF|\\\\^{o}F/g,\\\{}^{\\\\\\\\circ}F\\\)),t.q){t.qt.q.replace(/\\\\u00B0C|\\\\^oC|\\\\^{o}C/g,\\\{}^{\\\\\\\\circ}C\\\),t.qt.q.replace(/\\\\u00B0F|\\\\^oF|\\\\^{o}F/g,\\\{}^{\\\\\\\\circ}F\\\);var r{d:a.go(t.d,\\\pu\\\),q:a.go(t.q,\\\pu\\\)};\\\//\\\t.o?e{type_:\\\pu-frac\\\,p1:r.d,p2:r.q}:(er.d,r.d.length>1||r.q.length>1?e.push({type_:\\\ / \\\}):e.push({type_:\\\/\\\}),a.concatArray(e,r.q))}else ea.go(t.d,\\\pu-2\\\);for(var i in t)delete ti;return e}}},\\\pu-2\\\:{transitions:a.createTransitions({empty:{\\\*\\\:{action_:\\\output\\\}},\\\*\\\:{\\\*\\\:{action_:\\\output\\\,\\\cdot\\\,nextState:\\\0\\\}},\\\\\\\\\\\x\\\:{\\\*\\\:{action_:\\\rm\\\}},space:{\\\*\\\:{action_:\\\output\\\,\\\space\\\,nextState:\\\0\\\}},\\\^{(...)}|^(-1)\\\:{1:{action_:\\\^(-1)\\\}},\\\-9.,9\\\:{0:{action_:\\\rm\\\,nextState:\\\0\\\},1:{action_:\\\^(-1)\\\,nextState:\\\0\\\}},\\\{...}|else\\\:{\\\*\\\:{action_:\\\rm\\\,nextState:\\\1\\\}}}),actions:{cdot:function(){return{type_:\\\tight cdot\\\}},\\\^(-1)\\\:function(t,e){t.rm+\\\^{\\\+e+\\\}\\\},space:function(){return{type_:\\\pu-space-2\\\}},output:function(t){var e;if(t.rm){var na.patterns.match_(\\\{(...)}\\\,t.rm||\\\\\\);en&&\\\\\\n.remainder?a.go(n.match_,\\\pu\\\):{type_:\\\rm\\\,p1:t.rm}}for(var o in t)delete to;return e}}},\\\pu-9,9\\\:{transitions:a.createTransitions({empty:{0:{action_:\\\output-0\\\},o:{action_:\\\output-o\\\}},\\\,\\\:{0:{action_:\\\output-0\\\,\\\comma\\\,nextState:\\\o\\\}},\\\.\\\:{0:{action_:\\\output-0\\\,\\\copy\\\,nextState:\\\o\\\}},else:{\\\*\\\:{action_:\\\text\\\}}}),actions:{comma:function(){return{type_:\\\commaDecimal\\\}},\\\output-0\\\:function(t){var e;if(t.text_t.text_||\\\\\\,t.text_.length>4){var nt.text_.length%3;0n&&(n3);for(var ot.text_.length-3;o>0;o-3)e.push(t.text_.substr(o,3)),e.push({type_:\\\1000 separator\\\});e.push(t.text_.substr(0,n)),e.reverse()}else e.push(t.text_);for(var a in t)delete ta;return e},\\\output-o\\\:function(t){var e;if(t.text_t.text_||\\\\\\,t.text_.length>4){for(var nt.text_.length-3,o0;o\u003Cn;o+3)e.push(t.text_.substr(o,3)),e.push({type_:\\\1000 separator\\\});e.push(t.text_.substr(o))}else e.push(t.text_);for(var a in t)delete ta;return e}}}};var r{go:function(t,e){if(!t)return\\\\\\;for(var n\\\\\\,o!1,a0;a\u003Ct.length;a++){var ita;\\\string\\\typeof i?n+i:(n+r._go2(i),\\\1st-level escape\\\i.type_&&(o!0))}return e||o||!n||(n\\\{\\\+n+\\\}\\\),n},_goInner:function(t){return t?r.go(t,!0):t},_go2:function(t){var e;switch(t.type_){case\\\chemfive\\\:e\\\\\\;var n{a:r._goInner(t.a),b:r._goInner(t.b),p:r._goInner(t.p),o:r._goInner(t.o),q:r._goInner(t.q),d:r._goInner(t.d)};n.a&&(n.a.match(/^+\\\\-/)&&(n.a\\\{\\\+n.a+\\\}\\\),e+n.a+\\\\\\\\\\\,\\\),(n.b||n.p)&&(e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\^{\\\\\\\\hphantom{\\\+(n.b||\\\\\\)+\\\}}_{\\\\\\\\hphantom{\\\+(n.p||\\\\\\)+\\\}}\\\,e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\^{\\\\\\\\smasht{\\\\\\\\vphantom{2}}\\\\\\\\mathllap{\\\+(n.b||\\\\\\)+\\\}}\\\,e+\\\_{\\\\\\\\vphantom{2}\\\\\\\\mathllap{\\\\\\\\smasht{\\\+(n.p||\\\\\\)+\\\}}}\\\),n.o&&(n.o.match(/^+\\\\-/)&&(n.o\\\{\\\+n.o+\\\}\\\),e+n.o),\\\kv\\\t.dType?((n.d||n.q)&&(e+\\\{\\\\\\\\vphantom{X}}\\\),n.d&&(e+\\\^{\\\+n.d+\\\}\\\),n.q&&(e+\\\_{\\\\\\\\smasht{\\\+n.q+\\\}}\\\)):\\\oxidation\\\t.dType?(n.d&&(e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\^{\\\+n.d+\\\}\\\),n.q&&(e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\_{\\\\\\\\smasht{\\\+n.q+\\\}}\\\)):(n.q&&(e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\_{\\\\\\\\smasht{\\\+n.q+\\\}}\\\),n.d&&(e+\\\{\\\\\\\\vphantom{X}}\\\,e+\\\^{\\\+n.d+\\\}\\\));break;case\\\rm\\\:e\\\\\\\\\\\mathrm{\\\+t.p1+\\\}\\\;break;case\\\text\\\:t.p1.match(/\\\\^_/)?(t.p1t.p1.replace(\\\ \\\,\\\~\\\).replace(\\\-\\\,\\\\\\\\\\\text{-}\\\),e\\\\\\\\\\\mathrm{\\\+t.p1+\\\}\\\):e\\\\\\\\\\\text{\\\+t.p1+\\\}\\\;break;case\\\roman numeral\\\:e\\\\\\\\\\\mathrm{\\\+t.p1+\\\}\\\;break;case\\\state of aggregation\\\:e\\\\\\\\\\\mskip2mu \\\+r._goInner(t.p1);break;case\\\state of aggregation subscript\\\:e\\\\\\\\\\\mskip1mu \\\+r._goInner(t.p1);break;case\\\bond\\\:if(!(er._getBond(t.kind_)))throw\\\MhchemErrorBond\\\,\\\mhchem Error. Unknown bond type (\\\+t.kind_+\\\)\\\;break;case\\\frac\\\:var o\\\\\\\\\\\frac{\\\+t.p1+\\\}{\\\+t.p2+\\\}\\\;e\\\\\\\\\\\mathchoice{\\\\\\\\textstyle\\\+o+\\\}{\\\+o+\\\}{\\\+o+\\\}{\\\+o+\\\}\\\;break;case\\\pu-frac\\\:var a\\\\\\\\\\\frac{\\\+r._goInner(t.p1)+\\\}{\\\+r._goInner(t.p2)+\\\}\\\;e\\\\\\\\\\\mathchoice{\\\\\\\\textstyle\\\+a+\\\}{\\\+a+\\\}{\\\+a+\\\}{\\\+a+\\\}\\\;break;case\\\tex-math\\\:et.p1+\\\ \\\;break;case\\\frac-ce\\\:e\\\\\\\\\\\frac{\\\+r._goInner(t.p1)+\\\}{\\\+r._goInner(t.p2)+\\\}\\\;break;case\\\overset\\\:e\\\\\\\\\\\overset{\\\+r._goInner(t.p1)+\\\}{\\\+r._goInner(t.p2)+\\\}\\\;break;case\\\underset\\\:e\\\\\\\\\\\underset{\\\+r._goInner(t.p1)+\\\}{\\\+r._goInner(t.p2)+\\\}\\\;break;case\\\underbrace\\\:e\\\\\\\\\\\underbrace{\\\+r._goInner(t.p1)+\\\}_{\\\+r._goInner(t.p2)+\\\}\\\;break;case\\\color\\\:e\\\{\\\\\\\\color{\\\+t.color1+\\\}{\\\+r._goInner(t.color2)+\\\}}\\\;break;case\\\color0\\\:e\\\\\\\\\\\color{\\\+t.color+\\\}\\\;break;case\\\arrow\\\:var i{rd:r._goInner(t.rd),rq:r._goInner(t.rq)},c\\\\\\\\\\\x\\\+r._getArrow(t.r);i.rq&&(c+\\\{\\\+i.rq+\\\}\\\),ec+i.rd?\\\{\\\+i.rd+\\\}\\\:\\\{}\\\;break;case\\\operator\\\:er._getOperator(t.kind_);break;case\\\1st-level escape\\\:et.p1+\\\ \\\;break;case\\\space\\\:e\\\ \\\;break;case\\\entitySkip\\\:case\\\pu-space-1\\\:e\\\~\\\;break;case\\\pu-space-2\\\:e\\\\\\\\\\\mkern3mu \\\;break;case\\\1000 separator\\\:e\\\\\\\\\\\mkern2mu \\\;break;case\\\commaDecimal\\\:e\\\{,}\\\;break;case\\\comma enumeration L\\\:e\\\{\\\+t.p1+\\\}\\\\\\\\mkern6mu \\\;break;case\\\comma enumeration M\\\:e\\\{\\\+t.p1+\\\}\\\\\\\\mkern3mu \\\;break;case\\\comma enumeration S\\\:e\\\{\\\+t.p1+\\\}\\\\\\\\mkern1mu \\\;break;case\\\hyphen\\\:e\\\\\\\\\\\text{-}\\\;break;case\\\addition compound\\\:e\\\\\\\\\\\,{\\\\\\\\cdot}\\\\\\\\,\\\;break;case\\\electron dot\\\:e\\\\\\\\\\\mkern1mu \\\\\\\\bullet\\\\\\\\mkern1mu \\\;break;case\\\KV x\\\:e\\\{\\\\\\\\times}\\\;break;case\\\prime\\\:e\\\\\\\\\\\prime \\\;break;case\\\cdot\\\:e\\\\\\\\\\\cdot \\\;break;case\\\tight cdot\\\:e\\\\\\\\\\\mkern1mu{\\\\\\\\cdot}\\\\\\\\mkern1mu \\\;break;case\\\times\\\:e\\\\\\\\\\\times \\\;break;case\\\circa\\\:e\\\{\\\\\\\\sim}\\\;break;case\\\^\\\:e\\\uparrow\\\;break;case\\\v\\\:e\\\downarrow\\\;break;case\\\ellipsis\\\:e\\\\\\\\\\\ldots \\\;break;case\\\/\\\:e\\\/\\\;break;case\\\ / \\\:e\\\\\\\\\\\,/\\\\\\\\,\\\;break;default:throw\\\MhchemBugT\\\,\\\mhchem bug T. Please report.\\\}return e},_getArrow:function(t){switch(t){case\\\->\\\:case\\\\\\\u2192\\\:case\\\\\\\u27f6\\\:return\\\rightarrow\\\;case\\\\u003C-\\\:return\\\leftarrow\\\;case\\\\u003C->\\\:return\\\leftrightarrow\\\;case\\\\u003C--\\\\x3e\\\:return\\\rightleftarrows\\\;case\\\\u003C>\\\:case\\\\\\\u21cc\\\:return\\\rightleftharpoons\\\;case\\\\u003C>>\\\:return\\\rightequilibrium\\\;case\\\\u003C\u003C>\\\:return\\\leftequilibrium\\\;default:throw\\\MhchemBugT\\\,\\\mhchem bug T. Please report.\\\}},_getBond:function(t){switch(t){case\\\-\\\:case\\\1\\\:return\\\{-}\\\;case\\\\\\:case\\\2\\\:return\\\{}\\\;case\\\#\\\:case\\\3\\\:return\\\{\\\\\\\\equiv}\\\;case\\\~\\\:return\\\{\\\\\\\\tripledash}\\\;case\\\~-\\\:return\\\{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.1em}{$-$}}\\\\\\\\raisebox{.1em}{$\\\\\\\\tripledash$}}\\\;case\\\~\\\:case\\\~--\\\:return\\\{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.2em}{$-$}}\\\\\\\\mathrlap{\\\\\\\\raisebox{.2em}{$\\\\\\\\tripledash$}}-}\\\;case\\\-~-\\\:return\\\{\\\\\\\\mathrlap{\\\\\\\\raisebox{-.2em}{$-$}}\\\\\\\\mathrlap{\\\\\\\\raisebox{.2em}{$-$}}\\\\\\\\tripledash}\\\;case\\\...\\\:return\\\{{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}}\\\;case\\\....\\\:return\\\{{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}{\\\\\\\\cdot}}\\\;case\\\->\\\:return\\\{\\\\\\\\rightarrow}\\\;case\\\\u003C-\\\:return\\\{\\\\\\\\leftarrow}\\\;case\\\\u003C\\\:return\\\{\u003C}\\\;case\\\>\\\:return\\\{>}\\\;default:throw\\\MhchemBugT\\\,\\\mhchem bug T. Please report.\\\}},_getOperator:function(t){switch(t){case\\\+\\\:return\\\ {}+{} \\\;case\\\-\\\:return\\\ {}-{} \\\;case\\\\\\:return\\\ {}{} \\\;case\\\\u003C\\\:return\\\ {}\u003C{} \\\;case\\\>\\\:return\\\ {}>{} \\\;case\\\\u003C\u003C\\\:return\\\ {}\\\\\\\\ll{} \\\;case\\\>>\\\:return\\\ {}\\\\\\\\gg{} \\\;case\\\\\\\\\\\pm\\\:return\\\ {}\\\\\\\\pm{} \\\;case\\\\\\\\\\\approx\\\:case\\\$\\\\\\\\approx$\\\:return\\\ {}\\\\\\\\approx{} \\\;case\\\v\\\:case\\\(v)\\\:return\\\ \\\\\\\\downarrow{} \\\;case\\\^\\\:case\\\(^)\\\:return\\\ \\\\\\\\uparrow{} \\\;default:throw\\\MhchemBugT\\\,\\\mhchem bug T. Please report.\\\}}}}(),aa.default}()}));})(require);\\n\,\type\:\application/javascript\,\title\:\$:/plugins/tiddlywiki/katex/mhchem.min.js\,\module-type\:\library\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff\:{\text\:\d09GRgABAAAAAB3oAA4AAAAAMDgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAUBAAAAFEAAABgRT1pkWNtYXAAABRYAAAANAAAAEQAiwEsY3Z0IAAAG9gAAAAaAAAALApXAH1mcGdtAAAUjAAABrsAAA4MYi77e2dhc3AAAB3gAAAACAAAAAgAAAAQZ2x5ZgAAAUQAABGQAAAZbto6EhxoZWFkAAATNAAAADYAAAA2Y3ZDa2hoZWEAABPkAAAAHwAAACQHxQMiaG10eAAAE2wAAAB2AAAAfE2XAudsb2NhAAAS9AAAAEAAAABAWUtfkm1heHAAABLUAAAAHwAAACAAyQ6cbmFtZQAAG/QAAAGjAAAEsGWnhAJwb3N0AAAdmAAAAEgAAABoOcqzP3ByZXAAABtIAAAAjQAAAKdkQq2ceNpdWAVYG8vazsjOums82bhDFClQWiiUuty6357THpf+x6+7u7u7u7u7u7u7S/lnExK4fWYrazCvfO98syEYaoZCoU9AO4RCbCjU0lt6oaVnmk8732xC+7+/boI30mcSq59DLfiN0Hxob4h7687FWRc2K712t9V0HafV7HXp6LWa3U6716UXWdtyHZcePXpiE7Y/Mn4h3x+dTGFwns/RE/pfBdot+noiKQsIlmwe53Y++0adYyHkWq6BZEZWGEP0VQ1gqRS1DctXMK8QCB78YDmjnuhlurCMibjlXqwjA0n4YCXWNe0Y1K771g99yGJOS2mPfdFzd89MiCzRFHruKoR4xJ9qmBABs23ct/O37R+bsR/2CNG3AMahEAglV38FnwE/GLotRN48nQTNCvADcIPR6bQpDp8l6yOA01t7oNvptem1/gv0tBWQYBHWovf6jNlW/x3Wdfr/XeOmz5xL2Rz+/HzGJ2BcTirVIrcrmmDtTa7Vaun6WF5x84pcVzkOCHVvLAogMKKqkSTnWB4JUFMhf/q+XPiciyDv1vfKcm9B9F5y1oztbCoQT7qsUt68u1VkjFp1M+ODQ6Ju86oK45FImVWUEkOUXV7m5FN7c0dV1WVZ6Bw7/8F3sSrGSKD8GhYzDhGUyEUOCRcMsFvQBSGX7FYJYxyYTKaXb5VRU+H0rFKul+ckTW1HIogyKq3+HNqU0UnKqE0oo7lmgL6PPWBqyNWAniErfbrblIrgmm316emCH6pW85nLWxo79cLJzsMXCQ+dnZAtyLGwxooYip7ChKON2s5uY/+elZbceLUoRLfuy008bGrLM850F1gA0CzWysvhMIc57FRLuuKaduHO6686fvMuK0Edb4RC8DJ8dagT2k4dv3kiIlHHm4HGVF4600BUZyglHWsg5mDXbHe6mbFMhiLoH0yezr7/HNsauifHCwBA5w3XxRPO2Rvb9+ZTj37kq5JHdmFWs8IidzqMEASbt8sAA7EGT2lP+T9ZzexWcneeeVqcAd/mCMAELl5kgZmcvcsvPfriBZcBEBNRMTls/QEgAF2cKUNqhnD68AGonv70R3zU2P00z1YjVIsEdXebarFItZjhAUWWH5i1OTIoZT+41GkH1PfruTkCOxKiNZRwoOD396Ryj9qOTOawyXrimK6x3IFjKblSnPPURDUf25tVds3s6wpNS9Naz9u1eM6u3gquLS40q73dLCjJSjSnhEVWUJXaghcbi0eQJCgJBOTkYd+rT+3WEiLnLBxcmshVzy8EVWqs/gDNUJUOUBwTclClg2lTJFOw22xRhVwruNSl9ZRhB/O3WsH1gfMy61YbQGgGrwwjbRa2M0AupjRG298CkUpnW/rrXBltCmtA0C+eA5yZkOA99/AACeK4KeG3oKWyu5Ah9p4UFpN5kWEMX+UxtnMHGlAg2+DVvoilZBEDALhIpKSKkAEYpHafzANIMK/rUZG8YS5RY8FmjuXFNMJiVmCIf/Cd7xLLUUgRV1cfCQ/DD4QOUcSTdqCcNZztUI5gZIKgDfC0KJjB/Q5hNwBdi6K+hQk7ZG2oN2GfsLyU96d8LDITnhIp1xdviRR2bNKoFFlOnF7iXD2bNhhmeb9hLFUn5fgr7qiNldlingE9O5VVZSUOwZkd491dGMzuvcrN7+Uzek4UTj9z561xFsVFJhCWSRiFg1WCcFuG1d61tdbtr09IgA17mIsetxOCqBrjIiINP/PMwxS7vvoFlKFqXwhcqwVq08mulV8/KIbm7WtMT4NjSIkCbWtI1HrudLo9WpeZUYZ3emsc5AOauv2CBtV6d8pluVSGFyENi6cdH1dYXo3dcSdrb+XEqmnyE5WCCCDIcRkiRnO26N6yYJGikEP6TTey0axF5LqhWdk8W8/KGMYsM+HhLNySKVQUPoF4Vk/O7fMVWZ+/5SDwVt4rqREgIu/Jz33Med6WUJYxxSgDFd4qt6FWEW5+EsLAO36mx2phqXfq/i4EgMFQiAo8ANqjQ2D1RzS9HrRWF5utIGsDWAP0g5INjpHnaez2BqNHCSWZ4ao2XPKa9InWwCjs6CYLVq7DAEBGSOQMJO5rWYWXfQixcjRl7jA90/MdK5FHm+WCgzY5AseI8ayJvQvTp2BrT+7pQsNg5+ZU143H1USZWwQUAyeJcSQxnD8tMQAAzIpymIVedeLhRzcdL2EKUsCeKkaxyPI7ih4GhJV9AoHZmbntUvFQjaceaaw+Ei1T5Nsocg8EHulPfSD4+nJNjzWNh36wN9RRrzdCSR/rX4JL1o238ZDrOKbSacZTHGfVK3dOm3Znj6l6iaQF4a6ZXGIuBpXSwc3Cwop7IssAxk7ELYazyi+Fr4Q8RthIymNPPXS/rDfXaS/xqJ7PpppWGEEZCpyzacEuHyHtl39jjgfEPSoR+pM1P7V0VQj2E/s7NLFzodN0PTq6rABIsY0q/soWpLCh/2Do5cESGsDuZ3k/4tYTY603o4kxygYnkBuIAtSIFK2MJQDXsVgBCq1KVpaxFdUG7QZ4rigATSKo+uIxW3ZTZ3KiVJ7mSco0sHn/vTJqN4p7GZCqvHdHNRlPJ+D7oZKcuHDxBQ/ZDfUEz4DYg591v3P7WF4ZNha38bwqq0C8ZsyypezS+RcbTCaluyrHT+wC2s7JT04iDmYK7YcmdJiMRRJU8xTl5vGUm51U87lsPxcGOTayqktzwe2bfIh41I9Spkbp1x/DNdC2BpyCv+NeTGmUInFdd1gS6R0/0VBkjovmwgrUrt2kugkvc7RbUwWtaajJbM6uV9OVwxeghGcs6lC9oamQZWLcNrl809ItC+WGyAPPg7LjGp4ApbFDMsKMqyLAaxFeSWYP73v9kfnaIR60FF2KepLuUIyx1c/hW+CHQ9dTjPca+LovozuU0hxhY6FtBRdH5yOwHcoLNTdLNtZAX/hCcGVjUQQUuM6w4QXPMwmDGb+tqDYDd5v3/IGGNyMxMlsjWCCcE1Fs2cnFGSGiyggCLg0Z4vAv350+xmLCcWwpopVlOTvZKebSiIv0CExwLMOYBYnLLM6HiWDA92OExOS73zSen9xlPxjEswC7hrq5dvmfD10yZKxJsiGKJgGqXExE2SjznPfyhESEDx3IHsaIlRd2jb2gN/GMpz56rseDuMqx1QQtagIY9yNvfFNKMGkq/pTuYr6M7P7aWQ5RDl0/oORKsAFtA2bd4HRoiX6IrOeCbRXawS8YUNZ30nCnM5OaMCSOArfzCmun94Ux5oqmipjxxW6bsZK5esNtH4IakrkYb3SzUcwYRUoyAGyBJqVUrxfreQ4y6almI9z0PaMmDaAo537+/RSneCyyX/fWpxzl99z90Jc8xGvzQFAqCR4ZCs/3HvClL8oAQAigGiPGytnr77zbBij5qpc/oeZRH02t/grxtFYWKAd8wAFobtyEDAJxQ6H07wz9NOzFr1wfuvDwkWOe/4ZbFhYna3PbgNRYfnTUxkRHfHz/jRI41Nw20Z0+79rbd9qeXknyYjJtccnW3ust+MG7z+9YueGtpbATv9+xFH9x3/0P6gwQGUI3Oi+7yKceM5+LxO+7srBw9AZJr6xYYhwKFNfkCQMOOsCPw+/SvN8V9EMy2NijB8tW02m2Rm36aM2j9wZY6B4rM1oQAuyGOQs7eXo6OEZ9OkxU8pUEvGMmD/mOF5593h4Hw2gxfPC2mJmdeWQcRo6URKFms6J8kw8wgmjYvW/s1gE3XRpnla3zcbs9iwiGQswAZGE6lx5LT4i/+/slTYsAQAiTBiZQ2XwMADBs4ynWW1fvi0yq3XGKdYsfaDdI9XWBev3d9hVN3lBflh1mxZUp2N9rrm1f1iwPX3z++Ildix5Xy8/VxlzFAlLsQe1q6uzh3gv2JZJbO2eAfL+j8wsyWj6zxbVZhvMLCtKun9LcfKVx9YlxXzZUKybkDrfbhdaRWAm84Ow9uxZPxjN7ajlbBDIvJQpa7Z7bbl6+t8Jk5p+YEq5/86aqS5CX1h2F9yWGH98lIE7IpQiWBMXiEQCSaIWPdA8GulMfL8JXhS5SLhriRt0DdP+7N1uPyWH/MwQ+GH5nFvaaGzzh2/+7pBpm5wpL6Hftb+4/ePhirobk2XTFaUGkR0u6lzCSmpSqGYnFk9G4iPNJPZ0M65YGo3kXm2j+qAT9ztNcCBNnHGawpIp3RpgrzdI7bilqODYpq8uzflh2MRPefNbNqJpaxKKc3u4SwLfie3dHdaSIYQMAwK1McWbdyQBF/es/emKwtqIIyIIcN3LQgDXaF34odJCydrAwrP5hLQ/Q50cbvnUOR44asKdCYvcJHbwxGKM9PPjl3DGGEeN5A2JF2eYfCzO5aG97ZhJJzWjkugfePmdXKy2HUSMMIsDsXPXAggyNa5fdcQFCPpa7ZwnDD9TGZccU41iCgqx6mmRu1+VyJhzxE/U5WZluh/Xt+6PZmWoFiTzjiEjU3LC3ZX84abCb276RqxHT4IqZ+jyBFLe/+h40Dz8b6lHcJgDrnVMfuY3WMPYhzMIARb9bGtXIsJjgz8YiuqZNx9wL526J5MyOKKtc1oJTkxjy8N43yKqF2Jolc2o0eWtP/DV8tc8rlukTBsDL8yd35A0sMsr+Ze5XP+KgDDFTNBlWThJGy+arW9gg0VZ/v/oT+Eb46v4q1Wb6zu60hxW7cfM9bFZpha8Z3Vr/4jbYkreDq1dG+1ovGNa3Tm3qRNXMjCpksq6//OY5R45joW7xmCWc1ppxMOaEhKoxJy3DCTcQueW6xUlN0blsQTTn6iovqo4VhwuSl0m1M9uKex81lfYrbWfsF/ctZ/czWhgibCULd//lwKLKYkZRknniOUuvBJh90mKFii3M1dPlLU+4ppGwNFG2gjwPr34aPomin6DoSzBA317PsNawRoOabQ/b1AHEkUzDb2fhseh05agAAYia1z3BwrWU4ahYqnex88Sd5086BEiQV6eSJV3V4F2aXzxwec8FXnb002/eLEqJCvTsJg/xQluMPfh1R47sFWCYKJXXzXz6cE1g+jP9KBboTA/TmW7635n2ZtGA6NFXPTrcDey3NyRzYL61DCYsRKNVtdOuQ4piPH62EjEAJLxIbjg6jyBgapaEGGdRBSjRuxTFyahkq4RoUhuGP3CjpxKAuEkDIfysHzu8QjhZlxNTRRXeZaQu7b31/H0goMLxT3z2TRwiHKPFCbvjh38ysL/rRadlLZ5r1nhIvIOG9pLLl5+sCgqz/LOvrxBy+ZuX/xwFrmqET991auLUwbFArXYohAqUg2uCr6RcUFeD6Y9AU33c5gBNX7LWKG/634iHq5YzMinNkTocLmrB04MPNevmHTSsGbDgF00gnZtKmI7A8gACUHuSBMPqdDwcNbX08iPDnMDIBYZLZkUOiOnmiq0mLRLslAF7vxs5GEMcYsUxNxwrRbIzj61xnBCDIoRXF6CEUamp6cXY/QSbkNjJKJZTWNJK6WjCc2LTB1UGHL/LmOCSkOVzVo7VVnYIhJ8tHthuYzlLFRX0aDqaL0UijUNR8ODerAhg/5vyLfBTlK1lylZlY2W7jm4Re8hTfy3euHRv7M66o1a1Q58d7mAOGFZr4WDzEITFRzfEcU1WTImwqXCViz3xup1PKGLOMfzxqIfU7SKp7NMINo57JYGPwRVZtDqLt13+hbzM1577BF8b10nYzhNoZbYlUtf/+vrdFwgg0nzRrTgLBAB+C13Vzm+t/nqbxQA+WFNyoRBcXfNAKegoWwMD9zL9NaHX6v+/X5KjrnGQWwOTuPR//a+j1qBTW+vRKKyNG7fulbuZwCMtJfLSR3tjDTHL3ZW6ylPCpa27YrmMwMYTUVPn/QfMApOtLS7YdlUx7ePnI0pDglldgEJZ9+5/K5PZdOFgy04LpBEhkgKN1Nxxwe9dfbGRiNiC5D72oR4gnKvi9HVJDQiim7RNG4psTmosMUDkAbCBEb7hQgxAhyAtCgBDGATcu89hIHCoWjLTLOShNFHcY0JBFKT/B7cQyZN42mNgZGBgkGcoY2BiAAIwKcHQCySl+HhAAgAX5wF0AAAAABIAEgASABIAiwE0AYsB+gJeAtcDVQPqBGcE0wVhBdMGdQb3B18H1QhbCPYJcgnICkcKnAseC7UMIAy3DLcAAQAAAAEAAL2P45NfDzz1AA8D6AAAAAAAAAAAAAAAAAAAAAD/4v9xBHEDFQAAAAgAAgAAAAAAAHjaDYonAoEBFMd/3tNsyd6SPZIz2LrmAt9NdFknuYIkaYqVZft7+7940QbwDMAwmiEjS7ISwq9KVMLGD/ZnVHVARPL/i6xpyMv0LTnvhpR2/3dN0ZMdUW3h6Njyc9s8BXH+D1kQ1xNx2dOVFVk5UuYFLhwcF7gAAHjaY2BkYGAW/V/IEMWy8f+jfw9YCoEiqEAeAKZdBu0AeNpjYGLawDiBgZWBgamLaQ8DA0MPhGZ8wGDIyMSABBoYGN4LMLx5C+MHpLmmMDgwKDAsYFb4b8EQxSzK0K/AwNAfxwySZVoNJBQYGAH/OA9wAAAAeNpjYGBgAmJmIBYBkoxgmoXBAEhzACFIToEhimHB//9gliOI9f/x/8P/64BqoQAA6/MLsXjarFbXettMDh2quVeVFKaAmcjrNYeK090Lx7Q23fX7yK2kJed+9yrPwH0ZUOl3+2gLkJJ7+ZtVMIMywDnA0EKhAMW+7wUAb36I0e03WNr9q4/PTJwOwo8Q7/uYq0c/+0W/aLXkgWlZKAIUWm50hCF06DpoKITwo4M5JS1pOZhX0P6cr1SFq7GsIQzdJFfRblLPa8zpvU+Aw5IWOmpjYetTJ5fL0TFoHd6xWNsZrRruHaCldDtlo0w2iWLLPww6NYM9HSwozNtY1T7nw5rWXQcT2oD/28LC1F8708aI9loeljzfwnw92PmbT85m7ANubZFqjbxxjldzQQBJ5k0VTZOquwOcZfssedKpPhAbcQQ4uOWHpAG2DfLqBa9ehGYYBIFJbOGwbqHY8VG8YWeL9uYbvMere2+iH+OixR4/iuIgCNpRgIYdBF0EAbQJj3QDB4sKqIJCPSJMfXrLxz7pYr90qQMUEjpYSukmJqCd9B24wEaGa2bl8zf5eS0szlhk1BBDTLmS2WKdGNr2wy0z2gl8GVgB4NquTzaTeOmV4mCfwgFtd0Qua3M/baUrAYV0I8wdfESjRQmwb8bBAQVc7SjBKogD4BNwLQzYJdxIqx1UnYFRoT13xjoanCF1epCGs1MMW5KeoIfgxTKCdpdsYXJDEExcOyKMWiujjSzFyCXh+JCiBEVdFDSqUkCfR4ZF3qMsprSCGRriMZXkch62ow0HxxW5AuCYfs0H0II6hOO826HdeNqvCUWrlBQgDlqUGSd0CHEIOEG0OTip3uz5SaG9ETzEkUP5ycGyerPtv9nNlKZF+nKqr6hETOp9P5mcpBZGLk7YAUPK1d1kjL/G6QuNmgRCsuUnTB/hdeMYOO34jCUprLc2MzuF0CfVBISkSfU3SXu6WZe0MBGiLIkvjWKlYxhG2q2qEonIeXs+TkoXPByVLo5IYsqF8PvNm4aYEGXhui4zUCGbESWVfhv/a5sPiK4aYazaDt5QicHyJvHN8pZK8ixvq6TA0lRJkeUdlZRY3lVJH8t7KulneV8lAyxtJXv8YykkpiU00PgH3xYH1Qlj7cj478zonDBOHRn/kxlBCRyzL8VJoL5mUBnnSXwW4QOq6wHhYykJH8uHhI9lnfCxnCJ8LP9E+FhOEz6WfyZ8LGcIH8uGgqV0YB8pSnszBM0laG4pSWzwzM4qfGTjI7qPjxVAEy7ppozmJD/Yr/QwGf2TXouT0ZLHE4ePZ5KiUfX82SBF+TSj50qfZwqep5U/V6Lr453PiYZNtVysF7Uvgv82VuRc8syoMtYXxAc0L6kfhY7mHHypGjeWHJy7zhUN3SL3eWqRqNWhAU0Ukm/LqzhuyqaMwD8gPtCQbmfOMKoVYnhBUVl4g9wKdXqnbsmwcHFI24dxQwIsxXTm4mk3aGTnYUm6PW/AkJ8pa9v+5wIUwfxcmCreDlxXAg5qiGUaITdDLOmz1zUEoif7r1TQYVtiUUdtMhd0ZNI65Cfd2ZhIAnlPyU3qsaQMm4STRJolhIuSSM4iyRKSxGI9os9ZJzqRi6hzEXn67j5Jj3MFDi71uADSFqe6XMglomm5ZyLMqX1TNjkpd3GlZ0vBZEyj2PMbsCQtkzQ9JR161Aos1Wn36uRvl6yJF017t1uSR371RCW6166Qf+Cchdxr8ZqS0GAWN/GG9rfMncCHpaCRzBoV28H1U9Ydc+uU1b0w9qoIrXDBvirhhsJFO6baeMYI1KWu1NAGzlKEx5DT+ZzKmI9wWLoZdB5QCUvQkHPd8zdVMliouxTyW0a6+UdNMWOKCN2SpEfViXmxgm6dTZWIBbvHyl9ot2hbssuLnDtNwSuioJpd+47gG15u4Au65a8v0b+h44xKGV/S+q3CeRLvmEWP6IbNWEY9tt4rHmj8f891kRY7FARQ+NYTdAlMmRFWgLu7Nm6Nuzbuvpi2DVKnKmT233wn7gPKoagQQqdiWCFgJCpIAKMKAWM0XYpxGjBBAyZpwFRUDCG0qaZVYkpFRfFpMyoxzdIJmqMzzdOZFuhMi6yzQ7GkELDMOsGKQsAqTbdijQakacA6DdhgfaFdtakS0xbrM22rxLRDJ2iXzrRHZ9qnMx3oMa5PTuChjXLNyiNni/KYg26jVh2dRHmJm1PozZk1EjfnOnNDstQLRj5HBvocl9DzK11OHFxDD26gB7faNibLu2Pk+T30/AF6/qhzxsET9OAZevCibVOyvFdGnr9Bz9+h5x86Zxx8Qg++oAffUaHSvmxzJVWFf3/+duhPkz4GU601ubJ07m/1cOb3ZV37A0STAUQAeNo1ybENwjAQheF3iQEDKAUtLRIoU0TRdVQgCqdOBmAEGiQ3MIsPN44nYCvAWFz1vf9wCHidjBA9OkejhkZ/EczaJwh1gl8pWmSti590G8sGhOXX8zYie0QJsGzJHo1rrEl7YNmnHTRyAHcb2aUU9RWkGtuf/490vlJU1YHeN6fuUoD9ZJiC+QOZiyrSAAAAeNpjwAZSgNCVwZXp4P9XTKIMDDAaAFF8BtkAAHjaYmBg4GQoYmBmYGThBLIXATGEzcigBORB2EwMfAxHIGwgGcRwCcpmYTBiVIGyWRmcGMOgbDYkcV6mIsYZUDYfgwkLoFWySI4gimGo1nOK3oWZmZk5u9QwM98+bxRmLH/Qd8uyy+6Q1lRUSW2yppVUSjUF6lZUPdyjGsZmNGA0wg60rriq5hZ4ncFM4ylwx9WPZ8d4UF8qozf+qDyNbw9O2KorsMKKoZgnfg98Dr7WDZph5axXAZWISMM9VRxPnS9h/JvkLajmu4I/7nyDrn6W/bXewEvFX0Rc8qq4T9RCzhENsudANSwBp85ddHThvjMNs6bZY+r54Vz6fzCZjs68mrZBOhxWDf0Md4u3e6ZF8vzfBF9mzN6zwi84zzP3KwQz7boCd7bqfjY4Y3juJww6RCGP9+up+p/Ezv2qvlA5AyVATc+uo2aGNegerOp95jo45loCVxd39I72uY/IBPeF8v4LBabwwZ8x+KKyl3kDhdVgp/1vRTjxPetP2BlXdGJc0yxazAorgYewKmrMkHcNPMhG67HjQzoifv83MbfN8rvYAHjabMEFAYRAAACwvbd4dwMOt3QEhwJslsA4COYcsLC0cnVz9/D08vbx9fMXiSWCVCZXKFVqjVanXyx300rzMg0MHA0AXdgI8AABAAH//wAP\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-BoldItalic.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-BoldItalic.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff\:{\text\:\d09GRgABAAAAADhIAA4AAAAAX7gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAs9AAAAFYAAABgRt+RvGNtYXAAAC1MAAAAuAAAAQx7wyGGY3Z0IAAANVgAAAA6AAAAWgMLGdhmcGdtAAAuBAAABrwAAA4MYi79fGdhc3AAADhAAAAACAAAAAgAAAAQZ2x5ZgAAAUQAACkMAABE3Djz6PdoZWFkAAAraAAAADYAAAA2YydC2WhoZWEAACzUAAAAHwAAACQHTwOgaG10eAAAK6AAAAE0AAAB6hKhHFxsb2NhAAAqcAAAAPgAAAD4KH46gW1heHAAACpQAAAAIAAAACABLg6abmFtZQAANZQAAAGdAAAEjmNLfodwb3N0AAA3NAAAAQkAAAFv3QP6/HByZXAAADTAAAAAmAAAALJlwgKGeNrNvAWcG9e1Pz7n4pB4RlrBSlppJS2D0F702huv7TXbiR1OHMdBO+gwvKZuXqiUlLkPyxTmYvh9ysx5UEpT5lj+3zuwELv9//j3q2xldDWee+73Hviec66qIKWqKMpTyFawwhWlFqlFKrVIsfqmvdUqsg//rAofF/ccUBRQ0H1KRCkp6r2dMaagan8snkCcsUK5Il6NeqtZw81qIp6IW5xxVhSjFTH4J4pMioObgxhzRvHMCDmBxChCLEoH+m0GiKL7OGvXOAWg5CdPRy2MDn8LIRplO1mMIFBj/f0spggpSvAQ/JOQokMZFVKUMiaWUjRrzVotnrCdSQuOJK16sVJp/bUvypjAzAwm4gJlchhFY6EQ+/mxBtFHGRD8ytYKQAxhNDSIgB06ekjKNnlkCu8Ssp2rXCZku/j8gkQoUXBwacp53flr06jhX7aaQsRq3BZwMc6t2tEDCXnNi2IB9pJrVlzyWGcAGsUCZ8yqtVo/jHYU1CglW7Z0pdnJp1j2xReLiz+XSlhPRZMFHiN0/fp8Hw1Z4kYeEzdupen8KadYFvxQXFx/fZf3nRoVd66Tn6C6bj1AZf0669OpCL8iORUKITCynTqGteuwe/WKm2hCfHmwYyYYQpfexWMLH7DemQmIGwG7V96X7mPkB4Qw4DsQrBUaOHrkKfgxelFZq2xXdin6/bt2bF03YmKxy2W5ZIlPrSEwsm2pZwmLuztbKZSLFVuMuCCJvxKjSqMoVbPuoCq/q9UidQmUbYnraqzZqFd+NH96LdubDWFaHKazE1HQVBUzc2gEMYTywVzHcW8LpwQgMcRPXhOGKGCV6s1ZExDwQCQWJLCrXIZ86LLNZzVyAV0vV1TQSgalI1VVL2kAb9VZOL5m76OdWMuqELX08IBByDmIacNhBO+cCkTy2Viw/S9Wa7hTUajQo6fwEwIBXckoI8qMskUJrTI3rJlulDsTIRVotR+sYkFgURWLEiuNi5W05ErKxQJjdsxVDWVBkRTOSu7NEhtXe2JlDwTnX8K/3H3fO1GY3vs8sW2NFwpcs20yHO1gCOWYGY0kdXL4eWrAKe+EKFk9sDYfSA6suu95czWnlK82Kep++pkHwvBMLF/oJOHTTwuTbCF/+M5kxNAI+gI3E9FQgB2uUfVpcVfn4I27h+PhTjBHuiKrZiJdI9HREbHzw0d+igE9J3Z+t3K22PkzT94y16uInQd3HZwLeROJZsvdzHjCWYswb2f9CZt5mlARwwXPH7WmUEteNcUNBWfBdlyMijWLG3C5Iobcf9+Ck9efH8xdHS12D2r7BhlSYaQSFCLuNQCysdzYgGEyY7zeEV43R8O7Tt1yYYQ1Qt08rBGWO2t9WO3siTLgw/GYHWLpVaWsHVa1Ys1Ez521IZlftSVAB4cG1d1virKATpna9ZpzTDCoRbULGA4jvYLUPjw3GUvNVUNxqjMU2Lrp+Es1tKteabbCgFlXVy6fGVJxO7hmIj6eHaYoiBVQtsJDyvOOP2R3mxj+hi/c9t/q3cRTtxzhcEBoYFo8NYjEU6nFpTMvS0TdCVxFssOJOBzg67V3FFS18A4NoLvIjdPj6vXGi4TzQy+O3jn6y5s4aJgGD35m8oz2594WVEBoOINTvOcHwJW65oWNEPL3LhKW/12Du4v+44udBkaBa68NoBeQ6jz8xUMcECGIRt4CY7Di7RHMxfPXQAmeF8/fKJ7fg+Tz644x2Bazm9JrOgpVYFwaBCuWhc5Y8lsXsVa92WCcSSVyjMxVoJpQuESlLGT7eiHeUUlZHaWIkSl1wKVweUcpY0RKA6myGqhEGDrWd4A4DqDHYp0Zi8LlEIsXAlDO5ALdUArkMmUIFHrFMMsFUDag/ZUbuNoZGFMc/G7HKXSeUhDrS3Kxvla91SVkdU3c7vIChb+ghow3k13QjdRc1kDQLbz8nXciozOrozvv7PpzKvy617Nslr3+da5/9j+BKTXsyJuU55U7FzWs9d+lYbcfK1aCYioPwShElIjUAOepjvSu92bOY80UufzULI9EeOepl9PUfxU4AmKm0iYBxBUpmaI4koXFM5ginyGE8tTHEfLbmBA8U49gBFK0Owk+hDGAYCAzDFwcmRNrYuIJmnxC4hi+c180AQh2IRk8gbY/SMw/pyIMM3wXEfGO4vBLl5CojP/9R34Kf0bPKkmlIeJ/b9pUkPRdWSzVzndOddcZNRPCWTsWJBQv7rmwZqvuuHFQp3Y3OnUgxdatt7SKBDq6Ersvt4q9lkEQoKAVS3bErKC4pOjZ0uTefevCo/Tq2fPPn72ajoYv+Ptq98ClmaHEXH5fYlY9YcaKxayZE9TZxNmF4+WqNyoA3xR+tihWnZbWUbJ4V1loSbNVa9SLTtx0DL3lhc1IpBaHb6bbD4Q1HjsZZabiUZSg8bOqIY3wAYZ2pvtzBg/GoxH11782ovEuAwEZDQIkWfur7a+GxZwDYuIXxZxjYs7hqJgT6hIAHxXxcqdyQHdwqVW9kG0vcsmGIxLsaPbrbCZJdRpXSR4Rdfo1I0Mzm0eSM33kokOZ1SzHPHr5+KMxFcg7ZjMZ+O6KWTBOiGQ0WiE8eF04dXB+djK3opvsJSCZZjbnUE1md+bVf1o3XJVIDYkd/YOQeqWQOhVaKrVUe5+qeV6ksJRoVGWEGcYNoYbyD0wlu202XjDMdAqMTRfv27/HvPyGyy/cGYcQEEpCa3c3Kx3l4T5GCIxBZwmle/Jg9gXKJUb1TSeddNYk7bn2koMrQgQfT7hex42piXEVAVvPgPFVQvtyQgWZiAQjSktoX220oCO5s6wo3YCPs3QFBY+rRwWWAuRq1YVZ+A2xmkqjwjhPIGZ3pxCNkUqPZOoHD1IJ6LcMphNshmP6GpVxAqlu+xswsTE4/+lirNkScDuUvdWU76UyhX8xOAKKNT7yL5+Pxf71Pe94XQoEqiWB6otC0hUC1RwDyewqEQFcfnG3pdA1F0sx4jkZV0FqEtqKuw3740SNCMAc6cTb3rMQi7Pk6Y2xw3vWVPJxprHw6qGxAje6GjktDCnVgr0Wl/tN0xnxho6bJRgaYwd/O1MK4mYhVBqa3LwznlsZ4QJOb///TSkrKwWmoz26tGhaGEIuEU1UJekoOLyL28sUmGFHQpdnNl12BonZ06sWy/8HsSfTnFAtV1w5y3lhw6ah7nRI7+jaUqG2aaRSanAsH7QIi7fOvWrL2t6/RBBKn8KARjecZ2grBssnbpkfKHT2FuGfgAa2jK7uXgXhxLmrRgZdnf2dkPl+pV/GBsen+bmCEFkI6u5/3Us0fBMTImOhK18ze9LA950YhduyszzPXFzJiL6n7wmxqQhrj6t2yQh3RYxb/rTXAsdypuTOAxKKkk4G9V+0v1iJKtjD7lklqwwpqwSbaw73FiyEvVjsb7Sc3d1iR0QRX0uCmbnIubQWiwAswHPgtLNk8pyzBo33r4kGEEV4INn9H/95PsMw1IB0qpIOWsHkUENna0c7ECel9EqdA1JDacTOOBvsj+2u6AQQQCQ7tOH552/sQQhC6+Z7c4iy0tBYXz5Yax8/NL3OjsV77XXpdD4g9nvBBwyKVaj3rhjWwM04qzG5BA9O31NKiVutgjvsmFmz2WhSV3jJXj2iXr5s4uynEuSi2VNnR0JRRosGJpR3D0zmLIaB9M4NFgt1XQXQAUcSK00eCBRtsw7IRG9stV9qTjy/q9ZpBLi62sA8P5hd28PHwpH1A93zWiJEdhmR4c7t+xNJzNJXxc2m0AvkRkt4RgkoWbEOK6ghuQ4meJ3rtURExy+Ln89jcoi58RITvjyYwjQibKYRxojg9udfFlmRZA3ebGUxWypyrNn+Go9YNu3rj0Uqlk3+1F/JxpXTcAreLJhGSkgQCxBFSiAVv6sri8TWUTcSd7ls6bSuLIVNsMnQjfzhvV3RgPy0URAlmDUnNMRUQegC/2V2huLYzWfdORR4Gn1KrHFMzFHtyYSQFyPcFXleyw9qFpOx1YtixyqUQNXq2jYcUClB+fT6HeccqG+LImDBSo/JgNvro/uPrpwMdycaUYJ2YzVYmduxsWdqvVEq6IBYTzW1Y3us/epj1lEmj/wOvRt9UhlW1gjJJ0YDXEYLEQP84kK45LqGhKflnv9NlKW3izi22cJeMLSczNrVbPQWrs7t6ez/+AOwNlE1zuvvMEOQfOwb5dor8kyPFdT4D/dfs34yeL7OOjoSHECrBKL5alW/QCNUXR3j930MttoQWl2srjwwZj7wozNWbAGUMVH716+6LUXhRmR11PXN+tqoqkavvDTh7HWfePuEiCjdSlWsZqTPALkPLsDRRSutVLqko1tID0UEjMmLijPGa1UokteQhI6/GsX1Bo0bJBxu/6GA9CgbLIeY9hViPLRe4IjULO8x9uxB9yBELXL41Zrl+Ek+MorOQlGGAFEe0NGlxGqv/NamIFPNntPi1+UVrJyigMBd5mslpS68YrXcmWYyx225MVBms447XoiEQsKiLf2KZBS4Vp3CLeEh5eCV4gYLv/ldha1nbJwIvrVv8Iz8Ry7m62Zrs8nBRu1K2te3MhNHzRV88zyQBLoxqgJQY/fGyfkAzh/aONIMErQZ4FHM6/3l7nYWabHudHOlDvANBRwN+XuhIUMijlAZR6inFU7VJYRcTGXok8rgJNqtpiO9DH/wr/fcB5vt1fO1FBgmpphqI0MdvftP33NgYs0gZgQhYgBoEF2x0bj347AjakQ0zidXEaz2GfyaX15rdyGCASFK8D5C9VxMQQ563xHoWUpB7HMyoSrIR85nMiRi+ahFak0v1ZdISUwzpeijFmTveE34XTeq82vntmeuipIFcFC6/eg73xcCCUrbApY41DN02aWKAmJeBe1AdyuTAouOsGTMVWnW1doyerqcwxRYQdhRuVB0tm8ZtQGb/jaqGhSizDHl738vpoqdhA9R17aBmhob37QhmeKHXuVzm1cdugYDi7K8z1PRdVHVYTKdWRplAAD/KD8lO8QbuteTui6kHpA8KyGkhqNF+evCI6VNPd5HY+JKClqvuYK+Y1FQNIE/ujjtTTcdWzhPn+4SvnJUZgBISNMMu1TZYszTJl+ZWlVBU4eR8DhOgIi4PmnywXsuOSMImGITE0rCpbmV+/ectX8kjUolBggnd12ICUb0givufj/svWdIpRAuRIRChbrz1714nVqvARsaxhQIbv8SYTTq7+xj6D5HyzNu/cSN5E4e7dI851NYCuFR6K5F2E5hFqpXJRyQk0xpn+Oe/Yv2D33U0NtdPNh14n8+Uz58i39126233uYhJ6USaZryeyFVVNZflksV9mc+fmHmo+YQz118luQvHxTP6pL5O0gt8J4UEY9yjdgls9KKZdFFhKEyGa1K+UHbu23PpiDoOjbM/JpsH5ER5x5H5PYf27/jazf1MKo2x7ERbSUsChwoi/q4PipmbUkW6uWYzlyowPlyrfPQTkgP4lID8X0Qcw5x9Gh05QqmGl9BwyNOzOuT+of6+yQXhdcXNvaAESITY0EEzU3zmTQYOBHmCGlQHh465WQPBde4aVi9+dbXFtZXQMUQ1ICh5vyGdLp9B/XljQt5ZUUqojkWHk8cS85IRODzUyukSav41OMxdWEbkoeu1MMyi6SLk0qcXmz/ApA3B75CzDEr5uhavquSS1ZdbfOHFhUuEuEMM++jG8cKdniJBuK5jYEI1/auR3Onh9VwYNNa6mnhZkcdozd3ghoW/ZcIN3et1QEklj0VT2MYj4Tbv/t0HOPYp9pdYZUtV00QL2Nd+/0bQXwl7o3/7KEaOtL+s69iizZUE+vqXL6uaCJRjYSXG1HR6RYNIbGKyLJVrNrN4kHth1RdFF2CPD/VoYVUfuXFoKJlgiNsBdr5gAUI2MtMinBTO/wbZLUPLwqqIGXqyE/RtwWXjyl9In7k7SCRnDAsvflC7alLileSrsil7K5duKWZKRhAHYzd9c8holXbLxx6byoEf468fc1OUw/ZA72N3rXRCgE4Ac604M235xpzQ3+4dP+Kjz02P91/yp76XCZd6Fy5n5bMuoIc1F4hUEu4/bRkDCMPOd8JL/HOUO5HCyRAYvWmdxbufjB52k7f9uHU3Mr+ifETUt3ZmAMO0PxD93cSuOgi3wpK4d+remN0ZMRF4k3oO04NaF4yplJkEYl8RE7rEhCvZCVr6gVW9JFxgXG6KeWGQ9urVQFgNUsSiXhrASfYvtHK8HkcnV1DuaGaLEF4RXVAe6F0w5kDWWrOTIZCaCWOaFpnoMw1DavYxHFm2S6G7Vs+eHIyRvcRFuYINNAttRuQgPSlS3ZN3DRXWrfVwCcCYSEOGFQSop1oZMXBCzx0X+NUQyZk1tbMUhddnyb4GPMs9kuOrmUtAV3xeJakEQJzxu1UIfLh+D9VgufGo6RvdTpKscoiQyt0jrduPlVuRW1UbMXt3cNs47q5jXzIVdPwBaXKZcMqg/mDw3ldqCajAJiT17/ullu9zYH3nDHAAZ4BcCqbo0JPS+g5x1OMRh1vJLm1fMk3P61YDJ5FJ3h6u+JXo5x6VHMaubYHI+dCoE+frA50Hm/Ayokbx7bXIgvRNFg4rnHuFLmczp103cGe4q5NMfcrquoT88V9J0RIb5QGjVB07HQa3Fcft5Kce+E12J2dr9mQQfFr1l10GQsMGH7g1VbGNLGaHkURMeNjDg/pcKv9XfnFzKIsZC0uegIcKTK/TCHz0DUYeqDiODS1gPvtjdnMgtJnshvtfmwbKkLA0Ed9wpEEkS20f+VjG4YwAo0ZLJt1Y5NA9z1CN/qEPKWXxXzx103iBcKLg7btp6hevJfhB9TxqUujBJzAVFMpZQDQ1f59hXmBOKz+5FdkbOTExC9/rIYpkj48Zm+69sf6Vx7pvFDIkVYAfUrIUZTcw8XFndDpckmh/AIYkt5AwIEa9QHSaJKEiTcfrxN05hYwE3RoEEefR0byjSkDPe9E5zj99q8HzQR0fBvZ0i9a/PBtKKaqMYSu4JbEoENRsGQYG/zKNwhdQmhJQRZVynLViyOy6OULKJKqliehP5Kw/QH8fAzmd3HDYpNrDFMl1TkOgdUjzLTx+BizDPSvFq4VsG2SkU1Yne8h4s7xacPUSG2OJU4MUz1Byug+Pczb/9F+PCt2nrGg+mkI1Aise+kxw6KAaIyhg8SSfs5SH2h/raDHpiH/5oC8mYbUJ9q/HWGXwbbpgLhZrrckdPA+sd7jxHoHTdkriNXdAo3nEsQft7nYXEJCkBV13aC0uyEiO4suJMWysMcXLjyAUIjQYMTWQwXDCPC/O65XxwZnq6ajBJ9z1p8RRNauDaqbQ4moqSKkaT3hDZwaN4fysA1eexdmKMQBCP/E3okQ1gAZBqfs9bej9scJIqYBVD0YL6QjppgmOJm6jBNiGNjdPfRZsZqqWE23pzlxL1tPNGV9wV2HV2YLIbGT3Duk0XAdSAVPT/FExLioBACp+PnMTPNGE4eJeu2NoEVqgxGVY/SKVyCE7gVALGa+f4IiQLS/8C4W0hAAiTEWuOfhG663GCCVa/Ta6x57lGAedjorQsJzhYR1IWFFl/pFirKs4GuM3+jhvNuF3v28pHAm6CC8vX3YDqZCwCz88xeoGkKA4MMn7IJYhxrAxGIOP/j9H9xv0Ec+hNbhZCEtjQ9CKo7lGf7ttdcQEMoi0xCKnGGryMjvf+10ORlMie5Pp5DR8u3P80rFiH/pKr/gMOeRE0/TIhG1nMuV1UhEO223y7LQC4jKthR96Qn3v5KH4A+4PLhDzMHFHBm/zxWrL+dCnjOvReRlR4p8ws+4TjzVm6yLpNCni9yhNy+dwKLUmw6PIS5mOA8l4RG/A0wk0gUmPKisSS5izWWVGmJwgmzQ6hSfi1CzgeBsxvRiN2xHZ60H0Dm7CRDAjaqmA8xK6ZUjd6LSkZ8sdunso7p0KfLbz6yQTbrWZ35LU6vdJl065TbpkJIT1ehvwLdFHJ4WcXiyUY4tqZAxp0BaF7x/2dmEIdRoyIe79blWjTcnEWf+mQ2YSVd2ThtYxxpgRNGWPY/FQBLGgaSVYB3H909unRhYc15Q2ONFMdTNAg1oDFWmDKTu0DFFGBCUb9be/CaHJ6pWNJIfOHmmfzwYZ++xOhNdSBtX9ZEoFrI3j/weGU5O0CNkL3UG3Op/5Vi5i7iyrdKSgxgcZqabPEaHB50UYbDfiRna5I73tT+Vq0za4UBsIj+g96foshTlymtYz89/dTDXm9u+LV9JSc8lEHxaICgz1AHidkq91ljCsSDmxP4gdk8ySAlkMhd3Q1bp8yjB19f6KVY5ZjScq/UnizEDR7KRmD4/Y4KJQIXo/Ekv/PgHUbBilLG+smyyp2OhRG9Pdmp1UB0Woul4N6FqQUGOPH8RqBScE1iVYgxk5ZAt6dEk5H+P0vJKtdXwe55CVNg7ufbE4fr2/snjVuqIRcluP3MeHCKp7QPlbM9wR4iyYk+tNX7du1ZkuvlVB9XwMpbP0z3l3yU6won4bGpmSsiWPfJ7+AF8S+S6/UK2vu4sQg5ei2btgrQcI8FpXcHsWvbrkX71X1P0ttuS0Uz/9jlGTQQcwltPuv6VsIaWhzo7UvonfvQfIUg8VmYId88ErQbBAp4dmPLS1fdWB2PxCSJtp1O8XY8+5XS5RgzHuzj9VemWm17jxZGpXPFmX5RyacuzWOhEYctgnXeAykKkrygdjIr1zr5BA0G2qEcielenJCGDAzEVtB54rx1FA2PJAxqAhuloFTOkdubY1KTrNz7wAY8YffBDioKVyJEqisNXlXHn3I1+//EbZiYGwOnTCIFaXmBx+1wV3yO6thj3/PiCI3OPSoi3uNP/LBbEfXjJ+STxknb/hd1Nsz7OMWEMaVhPTGVW1U9f20BldvI+dX5jgF24Izp6+ZoNxSwLWLz3X05IJIfL8f6BVs/ubJyZK/iu7bQDBt6fZynApLuLcYR1rbzqxP5iwiS9AQSgDo9EEzNrOMoWNlTGTSPVWexSB5L9zZWVwVqz/Vy2S0tGUqaZUsE7TdAQby+h+5z6VJ/pRYNlYUmsTfx1M8NjljCemt6zdo46zmhokDgckSWSvXWXIy56AlkhuHlLa1p759vcvDWsvv3dNBqol+krblhetIiyW2UPSlGUL4ieXkoZlCcLskGnl5GlVtxyM0Upm9vOreGjS0X3Ih1xwAgTa79FEBghVU0H5heE8ZUH3Q8cGFKpYG2dmqnrJhVJBYb2H/1axuV+Mo2OPHikpvxYyBRz+s1DeQOkTEuaGn6fEcfdxHWRUUtQfUrtOvkzXlY4Q/SKvnTFcLEcGFUpBQYQe9X6qWAUMLoXSaY/Jf76Fy+9ZFvq2JN/kHgyzBA7zuq66XfazXnO8QyiCoj4o8AvZUXq6OqL8N+LXJtzobDuRaFQdA+UMbakZjUtcCt1O9s7vtoM8JUtpuN3bdmtorCqJY2uVBCtmmIJJlHtLsTUhWzgXz84NqVihGmAk7fDBVcZmEUoGLBrJ42zifElNbum2O+n/3/qf82jtu/Y9T+h13hY2PecrGwxn+Uklim3XKPvhtjfHhPq7oH2ufED+5N4/Nx1a9mCfgOA1j+SsfHfGKHxvgEnGN60fV7d2VrF3/U2T9x3vZvmCqmsYwTHHoC3hg3ZaE4uWCx8xeGYqYCLkl+6bXo85f/ffhu+PB3B0dXDTTtH/pYBw72eAIlOo8+Mda78WzasICUvqt5MRCRDyTl9UOpyCKn0rrpV6kNYYrwQmJoQ/fX5F0UGtSfejHS7lJ4O6WbYFt2+sGm8cOU1KnT84IXfdlcG7OBodn68FbLtUEtx2MoUMuBrSt7xEeWuDtVlK0dvnRP8vFiDC9xOeP65DGuOqy7u0sAgtZk2vpHE1lf63pKZLPWyTPdoKlE2Bvbs8b3U8QIOlmVlgtCKsVc+maXwyo7f0VRPadNxmxSHLUzBX4T2lZW6kGqg0kGQx2B8orBYjF48o+JexTzG12oMoWLpbmSQNaN6RB3tp4tMIcqQ2pwd6t33s52WNTxUDoQ67Re+HoFhzfSYePvL7a/4O7T3HD4QG4Fp8+/nKr39X4iGA561wV4hY7fQo3x4uR6J/XBlle5qmd40abzXIXU8tqoMJma6pjc3UvCt0deUzoyeG6TA9zHAK3vp/gsWbdPhK3fAtxyO0Cc1uOXUeQQGS0s8iyTPK0jKnVt+3ij+rZky3klH15R7d43P9KvIYXvBXKs/m+7iG1sbLo33nbLFPbzMSNfM9oGMCREUmq+Lf2FamLusz0jZoXhaJ4HgztaNcdqrUnlMmRW7hayWkPUg2uTIOurER0HQZYOmsaRSsozDCLFk6cwJCEEkJXY2d3XKQtFkFJiF+nrkVo6uUCMRdYXw8maonNWJqmkYa3jjibURTuAyO5mI1uuea6tWXRJz7t91hk2c5IBKOUYRQaUVjdzfXSLkrAt++hI84+TGYenvZEFXapSEdamsnr1NI4H0cu8Kb0nZoDbPml6rEynm0KDjr4jaZ/N6GMktlrrnaeFANBnSJlDfsPXhd3me/p8/qpkoOKbfcavPWNuXSx2Ue54Sb98U8slqWIE4GaE/vfzjN0GqHrNaMIvKEE6ZjJQqxDYl7zL68lRP0N5wOMDQZC5nJMjUNEkYAbO7lIS7eQBk4Wdubt264s3nmjZFVGdIe/bMPU5FyO7pveyKXV4lCH1eyDMu5FH9StDSQpBE71iFoHgi5meYYglu2QQ9HIPzsW6zSRkZWUeGAM52EDXBevuYrePzLZwfyKtr1SliVEcDZL5cQXoHKcEzepi1r2SWU74xzzx/pR4Yuvo05lavGNxCYyqY6fbvCz/T0mm1/QK8+jZiU3Dlhx8K+VfJHNWVXyqg7ea9TEZwp34dxG6Xv+AVFyp+/UeCnciihLMAeCBCXt/Tsx1pAT1QHla1UGkAIU0P8LLKdcGlQwDbNsOGeYSCeCSXDiCjN7UeuN6CZwyT8gdhtLoPBwMMY2vlLMaBsG1MGRwDYLH/5Ny9ACedRjALMTAg1MzvxYQ52cKRmqMVMpbp/iqk3S+yJP90kSe0X++xbDnqwg9PxDbtBGvzSDi1juohni1XbM3QTj01gvv6qG2E+0sApBnAAvOywDxKft7GtTmDhE6lGmV21ixmvvJ1NaABIB7puOTMCgOz8cEK86poOfH2kJCyLCuWmpTSE25J7xjZ7okXX24pGJj/GEiwSBrDRsq5yeA/PhFIWyn60Y/QFEWhDXAVYrpwlIAEkkmbo/a3AMVS3RwhtWRrKHamnP0k5Ql4GnY7p56Jr6kLxxCcvXWOYjkq6aEFn2YwXQ0Gc6VMMEGAyRPkhLDxwY54IuMOwW6VNTdjNWP16QwQUa3BNaoWt/o0VUawk9EOeFbwXNvJKSsp0zv/VROTi2W6s7pMN7Fgyf4pwKI86kWro3ECRni0N8w1ghB7zgiRkWEWYQgTlUd6R8KmoLSBEIRpIsYBUaaRERIaiMeZ405icaZyioBaQp4HUQo+6nDDTiFP2vblcVPKRdzjXv4lhh+J7sYBUk33bFML9VzPA535XDbTVUTXjUEwNjAVEu+DRnEkGEp0hATOX0NJeAbd556KBomzXC1nfu/OCYkwBrNrVATvxFDICEzNbUgScwgQdAsAUB69CmG5a7cfWQVTR37sPC0k/Z2PkoeRPBJWvv1UigtFzHJcD7F6jeB72GudNh5eH0kUCWDis2J45r+TFcNHj0peFHCzF/GskpQK5LOOmZo44T+xmMAceFkyYmqMUdaZK+oyVYGnjso9utIGkKiljsvU5H9zte4c+C08jF6v5BaeLZiLv3V+YVUwm2pzDMVFww6i7gwaZWcDajQROhfzAMJc03Vd4wihufUQ4OqNAIBuYgYDkKfH0Qh8E71h8dQ9OKcGiwunBuFLmBD82P5dyDkp+Dh6A8EnYAyICCfEwDm5j3rga163nSqOpIuK66iGb78Cc/hg/7bK/KbStko8oEE4tnE+FgbNRPeV5hKGkTiuommUICL+UE2TT1+Hdio/ldmy3Fv59FiWW/HFRNmN959HHDFEAAFm0QtjDCEWpg2RAks2QQnjGo1qYcZDLG7TEEPSF/wGpeAn/3229/v/Pts7CXWDyPz+V/s4dN/LfdzQ6iU+7gBKwlOOxVfEurpTYYYcXtJYaIWwEBIytI4eOhAEJjwBq/QiVOzG9P6XfUbd5nWIYFAJW30cIECYvXxg8fzF3UpW5nKebS/GlKO7hLIHDje4iUDUwkMdO/rKC+dg3rJ49ihoAGr/sv3LxYxsQlHwbuc8zJD054Ww3EPws0UlIZveBdbHyiL5FwRXaTQTQcStWrUh3TxcT9eNxY2QARBHUdPobc6u27F5x7rZZq9hRhEkQiezTSfTe+6GseNTTi+OR+jhNwVsCiACMLoIdbwq+LHnTAA49Oi0EEWeScBJ0evlwicMi/pbKRVSqVN/C3flI+JvyamlLWbicdysHpXYCp2eggvg4vZd7TvhwGWnb71ADe+q5yKJUwh5YeEQ1xXuFeyEq9q3tt948qteedudBgxlBsYuvO02ON1hqn39/lmK/j63h9Er9kaeW5GMNezEg9YYjtf8s5WLDUO3X+gI5Z+vBG6YhWwhDkkdP6ixSH8Dd+hkcJvO6msNFKTGSHeQaQ9iHd0rAeKH7zKCnCJ5+XZI7NLGHjocp0HEBI5BA+3ntjxZLuT5CPqY0JWmslMgtqE1kA8rWPrScsElfB7TX2wzc7GndDE2ezK692Fhvi8/z9dVKlfcc1HoMvsLqz4fD4RNDRBItctAevH8WzuJv/ZVH+CvfqDKKeXA7PgTxfzX41pg4Yxf+7vt7zkHdoV+9spWoMrKZS8ydZdYlMFNznWxW8IPFDNtsBRt/xghYPIO7/xuqczEXIsn1+5W8kujobPeyNKjQ13LbQaV6bEPqPlGw9qfaz/hawBYEGv/vP2Cbz1uX+873m83iiF5MqH7KOAcei1ydm8Tlu1BseSmNbAajksaYbYAz7+1P5/G6MrLgzecgjhISff4ILOI2X7dI6q19jr3AGSXIw7PaIy++lYUvnUf1rozy44b4s9rISO9Q8g7JUwsiZ51soNBDou/InZVwe33emzEDQ/HqIIJ8ys3fAvcHTIqoycGk+HjilET4WiPPdh99kTFCJ2ZAsjayUiRgA8qAIC2Aus1DCmk8mCsUakbKLS+UBOpd188Nl1pxII8aMesSPFg8DMPejg/d/GZwDR8VQAqdtDxER7qY8o6ZbvQ+E0bJ8a7QGr8ksRbZNsLQLOXNxHK5YXQVxWLFxuDwgs/UBGvlrgrIilIHU5Co8MSegyEoy9l0Njk1YgTwHJRoyNiUQTpYhxWinEdEWAcSLS3GIsPq9AObOQDQwzQvY4ulcsAyY+F7dNnVgUBymVvfZUeMfxxNbNnSg739ETbHTDAw6snp4slE8FndsZQ+yuB4SFtratxOCXWvlXs4JRzitVLLxZey1Yq3rxXo+nusv8SHry1rGXnv9BnE8VMSsUMgGXerpfZwkpDn8sQMYjVFJih0TGzqHMAGhyIcDFqSZyiDAGbCFEAbg4TdGmos0uDYGLDdOH9fYRXKt6Ke3pR8TO5lesTQdCLsRBn0RX5nfOZTbngj37k1Qz+/Uc4c1pyfmd+1gDnDJDY8x+LuLBNrLscdJmit1ly+e5yF37GU1s4F9S15Fd0R/+Gzqc/br3vjhN3anp/ORBM0Wuuikk5YkLgnshWq14KrsR5GHjd9vpYzl7RimyN9JAYcy1S3BxRUdzI1TnagQ5u2tld7Dt159BIfxeTi83l5X1Qnh2xd221Yl8dyZ6/ZnKyb/36rmU/tAuyaH06v/ZAU+86ft7pNiu/RCWYW+w2R/5/us2QWd5udp9B5sUzgjKP9p+R90725eUDSJCmUvTwnw7/2XsA4oWifFdA2QYPO7+mjvvcNlZpLOsMOL9XYXwXE+Fu4ecomGACD7NDrdbCT1AIPoSI8r/p99lIuU3wfFXK6dR6OxNi7K/KWjv28OuOWsJ5/02LOnrk/+X/V47/DyaL/+QAAQAAAHsAdAAFAAAAAAACAAAAGACNAAAAIA4MAAAAAAAAABIAEgASABIAVQCjAUYBxwJDAt0DCAM4A2gD2AQOBDkEWwR8BKME9wUxBYwF4gY3BowG5gcqB44H8ggpCGoInAj5CWAJtQoKClQKkArrCzILfQvIC+4MKQyBDLMNHw10DboN+Q5pDsgPLw93D7sP+RBxENgRKRF7Ea0R3hIMEi0SixLOExYTZBOqE/4UghTQFRoVchXIFe4WWxatFuIXLRd/F7wYEhhmGLYY/hleGcEaFBpTGo4ajhrWGwcbLhtTG3kbtRvjHBYcOBxnHJQcxR0AHUEddh2+Hg8eVx7aHxUfbR/QIE4gyiFDIWUhhCGtIdgiICJuAAEAAAABAACoidghXw889QAPA+gAAAAAAAAAAAAAAAAAAAAA/7n/BgRLAu4AAAAIAAIAAAAAAAB42kyQJVSFQRCF7+zi7u7uDgl3d4eEu/dApfI6iUQ/50/0iCbokKHg3EFf+M7dHZ/BM8oAQHoAPFM3sWGKkGldqDFZKPXwRI2tQ7GUoV9O0EfU3mTHUaM2xgeo0qb2fNJNCkgRSSaZ+nZH4xWtYbzJrYI8Mm1OUWPjqPtkltCnf+nCiPFm/ittLZi254R2UsucP2VOKXNyNI4a7xGMGGomiTFHnHkMfSSGcywTmEDOWIoquUcmNVM+kCT9SKQvlP9KAedN+nBMOOoEqLKzqFQ7/Sma95Wzx/xj5h0igv8KeUScuUMMVUmUG70DJvEMUKfMMhzqNXseaE2t/zPP4s/99D7tnPlB88jG184uVNtx1HKPXPqKfvavUZvuT62hlupeHt0Aa3wuEBw3egxdDKoAUn5O33jaY2BkYGB695+NIYrF5//O/5dZvIEiqKAKAKNnBvUAeNpjYGLczbSHgZWBgakLSDMw9EBoxgcMhoxMDEDAwQABDQwM7wUY3rxlgIKANNcUBgcGBQVZZoX/FgxRTO8YfikwMPTHMQN1n2LaBlSiwMAIACraEWUAAHjaZE9DXsZBGH6+eTtBdrPNtcm4R65bxBPUJtu2uc62fYg0/57m923SawOAsiyWva10ubUHXq1OgbZWIFKRjmzkowQV6MQgJjGLRVe8SlTralNdqVuplUZpkXbplB7plyHtrQN0CAlA295M5KLwX++a7b1QN1Lzo7dPBrWX9tfBJJ/5xEc+8J43XOEsxzjMAcZ+RjitTotT5VSac3NijsyB2Te7ZsdsPxQ95D/kuj/4GpkAAGc7UaR42qxW13rbTA4dqrlXlRSmgJnI6zWHitPdC8e0Nt31+8itpCXnfvcqz8B9GVDpd/toC5CSe/mbVTCDMsA5wNBCoQDFvu8FAG9+iNHtN1ja/auPz0ycDsKPEO/7mKtHP/tFv2i15IFpWSgCFFpudIQhdOg6aCiE8KODOSUtaTmYV9D+nK9UhauxrCEM3SRX0W5Sz2vM6b1PgMOSFjpqY2HrUyeXy9ExaB3esVjbGa0a7h2gpXQ7ZaNMNoliyz8MOjWDPR0sKMzbWNU+58Oa1l0HE9qA/9vCwtRfO9PGiPZaHpY838J8Pdj5m0/OZuwDbm2Rao28cY5Xc0EASeZNFU2TqrsDnGX7LHnSqT4QG3EEOLjlh6QBtg3y6gWvXoRmGASBSWzhsG6h2PFRvGFni/bmG7zHq3tvoh/josUeP4riIAjaUYCGHQRdBAG0CY90AweLCqiCQj0iTH16y8c+6WK/dKkDFBI6WErpJiagnfQduMBGhmtm5fM35kKvhcUZi4waYogpVzJbrBND2364ZUY7gS8DKwBc2/XJZhIvvVIc7FM4oO2OyGVt7qetdCWgkG6EuYOPaLSoEOybcXBAAVc7SrAK4gD4BFwLA3YJN9JqB1VnYFRoz52xjgZnSJ0epOHsFMOWpCfoIXixjKDdJVuY3BAEE9eOCKPWymgjSzFySTg+pChBURcFjaoU0OeRYZH3KIsprWCGhnhMJbmch+1ow8FxRa4AOKZf8wG0oA7hOO92aDee9mtC0SolBYiDFmXGCR1CHAJOEG0OTqo3e35SaG8ED3HkUH5ysKzebPtvdjOlaZG+nOorKhGTet9PJic1GpGLE3bAkHJ1Nxnjr3H6QqMmgZBs+QnTR3jdOAZOOz5jSQrrrc3MTiH0STUBIWlS/U3Snm7WJS1MhChL4kujWOkYhpF2q6pEInLeno+T0gUPR6WLI5JGzoXw+82bhpgQZeG6LjNQIZsRJZV+G/9rmw+IrhphrNoO3lCJwfIm8c3ylkryLG+rpMDSVEmR5R2VlFjeVUkfy3sq6Wd5XyUDLG0le/xjKSSmJTTQ+AffFgfVCWPtyPjvzOicME4dGf+TGUEJHLMvxUmgvmZQGedJfBbhA6rrAeFjKQkfy4eEj2Wd8LGcInws/0T4WE4TPpZ/JnwsZwgfy4aCpXRgHylKezMELWmruaUkscEzO6vwkY2P6D4+VgBNuKSbMpqT/GC/0sNk9E96LU5GSx5PHD6eSYpG1fNngxTl04yeK32eKXieVv5cia6Pdz4nGjbVcrFe1L4I/ttYkXPJM6PKWF8QH9C8pH4UOppz8KVq3FhycO46VzR0i9znqUWiVocGNFFIvi2v4rgpmzIC/4D4QEO6nTnDqFaI4QVFZeENcivU6Z26JcPCxSFtH8YNCbAU05mLp92gkZ2HJen2vAFDfqasbfufC1AE83Nhqng7cF0JOKghlmmE3AyxpM9e1xCInuy/UkGHbYlFHbXJXNCRSeuQn3RnYyIJ5D0lN6nHkjJsEk4SaZYQLkoiOYskS0gSi/WIPmed6EQuos5F5Om7+yQ9zkWDsNTjAkhbnOpyIZeIpuWeiTCn9k3Z5KTcxZWeLQWTMY1iz2/AkrRM0vSUdOhRK7BUp92rk79dsiZeNO3dbkke+dUTleheu0L+gXMWcq/Fa0pCg1ncxBva3zJ3Ah+WgkYya1To3q6fsu6YW6es7oWxV0VohQv2VQk3FC7aMdXGM0agLnWlhjZwliI8hpzO51TGfITD0s2g84BKWIKGnOuev6mSwULdpZDfMtLNP2qKGVNE6JYkPapOzIsVdOtsqkQs2D1W/kK7RduSXV7k3GkKXhEF1ezadwTf8HIDX9Atf32J/g0dZ1TK+JLWbxXOk3jHLHpEN2zGMuqx9V7xQOP/e66LtNihIIDCt56gS2DKjLAC3N21cWvctXH3xbRtkDpVIbP/5jtxH1AORYUQOhXDCgEjUUECGFUIGKPpUozTgAkaMEkDpqJiCKFNNa0SUyoqik+bUYlplk7QHJ1pns60QGdaZJ0diiWFgGXWCVYUAlZpuhVrNCBNA9ZpwAbrC+2qTZWYtlifaVslph06Qbt0pj060z6d6UCPcX1yAg9tlGtWHjlblMccdBu16ugkykvcnEJvzqyRuDnXmRuSpV4w8jky0Oe4hJ5f6XLi4Bp6cAM9uNW2MVneHSPP76HnD9DzR50zDp6gB8/Qgxdtm5LlvTLy/A16/g49/9A54+ATevAFPfiOCpX2ZZsrqSr8+/O3Q3+a9DGYaq3JlaVzf6uHM78v69ofY0wBR3jaYvDewXACUKM0HDgQhtE31hqXxWmZNBH9BcQ4zxSQDmKjljF7C0Yfn5p9g6KOA50KRIhQhwaEqvUPGsUYOe/iPUvLKf7hX+kES9VIAItrSLkypRqhfO2YBWAAYnxT60ZfL6/7MdeI8R9zX0QqgAzejb9YCsUxKLa8Vtu5EZfzKT6y9F3Rp84LnT0YNIjFaTwIuQChwiuQeNpjwA0kIJBpMwMDkygQn/n/CkQzTAfCKIYopm1AsW2MpxgY/tuB5Q8C5Q8y3vr/7b8xiA8ArVMQ9AAAeNpiYGDgZChiYGZgZOEEshcBMYTNyCAH5EHYTAwcDAcgbCDpwXACymZh0GAUgLJZGZwYLaBsNiRxXqY8xioom4/BhPkFoFW6WHobCII4/jv7KfYWNoSZmTm5pTbymqksQ76nD8zBFWYx9Px71CPXzC3sWRrqG1hJ9qsckBzV1nbGkbjqaEuuK+rQziTPVIaKmUpxWHInrpsavyR3HN+RT0vuGchBvaKSdRVTe+7Jnitee+NZKGrPlOD2XDU30XXT3Mwqzkt9JVya0fNZ6ReUIzvO7+pexrPaMHyTjqaOc5KVlZ5sbWVuYGgmvt0mVKc1HXPgD5M//PvZB+e8baxNU9nKwEj2TlPk46ID/3FGXzqOhUr+QvO582ENW8PoK3mqqCPPjaIr7aaZPJRNlV9OsKmh4XnkXX9BeGauZ2UrWwYpFCaGKiU44WptphvEFJ2VqL7jvuSRhWL2Bfn+F4TD0g/+iuYXnX3pm2Qb2dBE9tYknu2ykcPxiidxvXJWI+a0snBWS0utigwWVmrNcJ/s0m555Kb7f1PzAQ9atQAAAAB42mzBY0IkYAAA0PeNPWvbxuxm27brHP2c33WXfJPMk9QFek8EuC4ruc0qgoiomLiEpJS0jKycvIKiO+66574HHnrksSeeeua5F1565Y133vvgo08+++Krb7774adffvvjr5J//qtQqUq1GrXq1GvQqFmLVu06dOrSrUevPv0GDBoybMSoMeMmTJoybcasOfMWrISIdWVrzh2EqENXIebEqTNHLkI8JEIypEI6ZEI25EI+FELRpi279mzbSd6sNC/TwMDRAEwbGZtDaGdLVvfE3NxEMM/Y0oQ1JCO1JJHNJzE3KSWRKSKTKSCTNTgzHaggtKA4Myc/jzkgI5M5oDgTosHREgC22zqlAAAAAAEAAf//AA8\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff\:{\text\:\d09GRgABAAAAABlgAA4AAAAAL8QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAOpAAAAE4AAABgQ2GTJWNtYXAAAA70AAAAswAAAQQnEUkVY3Z0IAAAFuAAAAAKAAAADgAAAABmcGdtAAAPqAAABrwAAA4MYi75emdhc3AAABlYAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAAv1AAAXFMd1kY1oZWFkAAANwAAAADYAAAA2YgZC2WhoZWEAAA6EAAAAHwAAACQGkgLWaG10eAAADfgAAACJAAAAvnBQCWtsb2NhAAANXAAAAGIAAABid0pxhm1heHAAAA08AAAAHQAAACAAww7abmFtZQAAFuwAAAGiAAAEgF/RfrBwb3N0AAAYkAAAAMgAAAF+mPHTq3ByZXAAABZkAAAAegAAAJx+tju2eNrdWAV820ry3tldrWSRLVkQcOzITmwnTgPGUPOgcMUrXbkHhcfMjOkxc3/Hbf8Mx8zMzMzMzFFvV7Lzysf4G1u0u9/MNzOLCKMqQuid2EUEyQjVrJpVqlmF6tMOVKvYXfhOFV6EAB0Kj8J/kM3IRqiZsls1z3VkZqV8cS8UD912TYapL3yhyjLXNOFRMLGXEaq9PXxY+Mh3apSwh3CEAkeY4AgeQoMOlgv5YqPZalqpUrFUb9Zqnu/BxG3XGIaC1ec/X8WKYQxl/vM3bw8/sJfKkvZWuBlueasmKaSQfz9Ha4VHsUo2IRMhaNaqLkMyiyARfEnRXQh3U2YkDIB/Jys1j/zm7oRuqITejXjbd3NLHsUt4WzTVs0t8P+733iIM6QvKP/mcJnXaLbRk7y6w3FLRVQqcjW+h7DKYRkNdwPoqsko/Hv4atXQE/Ruoupa4jeRBi88ij7e1tDgzuR/741vPESGy7/ZVKYP5jUu4TZ8jtdYw6vLQgGXUr3BL0UhxUa92Yqk2YrvtVq1Wa3VfOF3JjNx4yL7nhDX8T1xg88xwxzcN5BUACik53KqTqmu5ubSFACUZOlKGzCmDJtMGVmnScByxXV6cnfelkDS1o0o4X8zrW/UDg53lS5V8VhgUsp0TpeawZieffSRrDORZcBMG+ujGfN5z2TlXLGbsv7R3gx75vPMzKiO7ePYreb8W1XhNy6+4wobI0NjEtx+JiTP6bbafNtPrcgP/Du/juICf7hSkiRjkZu+ZkRRRtboMa+BfQMZBsRdmnMYgGTndyf1PQOClPMgKjOQySbgvKzgiOAFkJs0iGUTYzLHSR0O7NE+jZkGpszJOt3sGc9kmd7RfkZz4zGtag4wwVYSwbFf4BKu428iByHI00Kp2IpC5FGf0ykVB8Bn4a8gkcBpe3XwWAIeSzAKUngMP/tG2wZVLdv3x0+ntiEBuRYBArwVD+MPozL31ByuVb1aFNBatdUSIfWZHKWfkEJelnlmlKC/sipPDDwwMTMoJWaWqTphAIF7/qzldZdnBiS1/Q1f25cPgPk9FOoJk8oYZ5M1SbYX3xEsvAeXkHIWPuF3/ig+Cx/DW4+FMR/4A/ksfOwvRwhhAH5J4F3xaBZYtUgAKi+u4F0L/yH+oodezWtV8I6Id0skpys6oFWwRKdqtJqwSpLXPUzS9603Ksb6fbo0jzcktBvH8QgdXKOHCvxSXzNIR/DIiViDXJfIXlfACMQGx4bJNsTGDuZD4Jeh0ga4fRFW2DXFsT6Et6MhYZdwnTCtGI0OMh+p+J0J6NhQxoSp3Ng7FEo3PncoZ5AhdeV5KlT0UlGSMiW9oi5boQ4RIzf0XHy/lJw4urtLkypgSfmG8vKXw1P14SmmDFf08DK4XGkGkgUVSevaHVsC3JIdaChmxQ2J+iUfLP14XHLjEUjYJoh6wlY4TjWo561s6954nH0rln0XLg8v62iGp7785Uoj39F89Hgjg6YY6Y8xcjP+PhpASPL8mhs0asKMwEof98YtKDQCt8A9Qmx9nRm+2VyZIuEVsPhMUitNcp5ZHpKfWaPlMq0oZG+4IdzYeanIFf6Eu3vRcToHuc4zaLGCU5T+9g0dRTAnFAE8+b6XZ56iiGvfQPYtqgU0ybV+g2vlOZBuBoGfxX5BdBAuQd71kO/JwHtStcmNEVLjiqV+MUhGfbY+hutLCfw3/NeQ6qvYcby957QuzIY/egSB5cBo+JRLLh+/cg299Jyrp1SjnJxMhjvCHYQReOWePa9+FeDv4it75/oYTG930jIGEi7DCRZuAqB2/65UUPmfYcBYJhR/+oor4NgxLcVtvio8Qn7LZ8osz5IqTwHUEtOkCwyLnl7ivdwkvCe0QIYLLwIIMdMtEn5r+lnLQE7pHMfqMRIYetb96vvfBxqoqsUWXnVL+NrH8AYLv9VdVQbomRExeeKxH6HX4utETNKRDk4ww5jjumJEaczi4ixt1uuNJ1ErKQEQ2yIA+EAyqSaCSmt62dyy6VYlSKgnf0AIC2x4RoS99vegt/5g1Z9vv1j22e34wz9EmRm+H+8jg2gZQl61PY/KTjzCNo8TniQeL2b5xewQA66oHYswnBdtGc50gUKJRlN+2ujSraSZ6qHdq7qzOCmNzWWiYkKTljfi6IZqphy1b2tPdlVWf1Kfk9WBAAYV6wmzOP6B19/7HvcJYykGZHbMy8TFGCRFr/dd8LDXzv9f/XnDxpzb6yEsWJDXRSwe/pfhMfB39QXc1C4TTW3zDE0pSab8v5wbM396ABAREZC62hF4z985Bv8Ccew0pSRu+rfpSZm/R/KQxTHoQnQ9OniG3GnFE1e8sJ/DLf4/awx543gjwx9NLMsmvS+g6TpHdzl4QyD4db7acKN4u1xX8+Rwp5JEogYs8xWlZ4uUtCiAqsDpA5FWFf+4ilhjelLtm4jC8jNlZOn4IGAl+bIl/QpgliIsVWycHK0lbx3CRIL86q580LUlwJSCKq2dk07vy5EnXogTvG6Q79Q1txfOqThzXZFzcQMTfX19dHma0cz+W+6o3C9FGe1d9VhXks01nZVJAn8f9SLkxz6MZ1zP9oX3hMcAyWyv3QUYzsVat2fgIxs34i7LTYZfDb/Nkr/usRhRyFOIa9Ow9o2vq9TqTpPh335OTkf4coQv1p9RXGWGO0t2MopFOIS6LPWbtggp/oLVjTduPIJN19Rkqj91cMsQYN/yTZjavHEOL71scjiFk/j7XTZVv/6NsEYtRVIz8H+X/PAGHKnGh7/19RfJz4fq4VtHSPo+jj9Aowh19gtWikeaE236nKoQKxUV1HEj3kpE+UcebRqy0qdh0F9xl5SgPUuW7Fu5TQWcyGU1jM3JrTctm5taz8s/1S2RLINZOFeZf74BGGs9q3beooRvDN/K+vovg+dfbmye3prLXHCeEb4OHeeXCkJpsc6x0r7XyfZW3W5wp8RGCeEGF2ObH6JbCgOcvPtBKfemrZMmxkZvfwKDum3t/vKB0hWHuHEy/r6mauHrwtcbO2818NbpLcbl8PzL+rMsfGv4RvnWnWu7VLXnv6+T4VyYZdnOCcab+P5a6pxgvPsXH4iPL26JTx/AiEuj0wfL+0U5OnqgDz+lrTj7KEdtf3NL+aS2vLTQ+Fr5F+F76MP5uQUCmOTK94u9VbyzgslKZz+1NzpT2RTtp4QvHELSthvFDuO6bcMBsfC76+677wLbYPjeu+66lx/MWHL4pfCLXL4kW5oMBcgqkIUCx1vP8W7kdjjReox72rYdjOOYp9MEr8dpXYpgsGTaIIDJuTZocvi58MtK+OXwczJHhxz0c8khRMTqmmZ5BPvRNFoVW+mJoHmdcaedau1Bqwn1xcRiYmyKoy2ycLDOL/w1Hsfg+p33Jym6JH/DGxtFHfLFJ+3d8ZB9W/c+uZjPF5+MX/GJZyYqXvnhb7QBrF0PfGz/UGvkxv91WegU+6hLu4PK8gp+TwFk5/GXbniQVjrwgL1PKhYKHOUBB/Zt2/ukcOt/fdUGyX/7E9Xl6iP3X9LFtOyLbu8fypUlwMBKffnhYSQdx66C6mgpWv4HMPTrgh4XOUgXCyUr4EXECnht3gRagcXrnJ3d94Hgi3c91QO4/gpdkeB6SL3xF+FjwFxdf8IWeC+Ej5Ge8q6zsXvHq0E974qXS3A1EZUf8f7ffg6ul27Zfe5GFa6UOJL1AXQCu1E0g9ainX8AO6k9r4h9a6kIzVaxJLdDCaU6i0rElFTnhaX2SVrUm89OGVaIcF6wwZw/eHDe3BVmD87PH0ysMACMFfhQonBOvvNuhj89OLuK17nOGXeu22WezQ8GSNasKqDUZQuXCGhj5w084DfshJ9pIEA7X64PD8/PrDqoLjcwNparCOHjxqYtf9zoBFHPct1a7MBCQVy5E4ULG/Hc22rVGvU/aBSDGbO7W5VuYV2eem4LSFfS9Am0zlW9LvnmP26ICz/skbQ6N0X13i6NTU0Tw0mbZHqKaV29Op2aO2485vOgxOSAW8z5xDStgHMT2cGfSUJzF67qkjEmninmgGGs9SU9gj/VKykuI89jhsWNWBWuglfCK1nWNlg4hn4Hoxv1hgAAAHjaY2BkYGAwYDjDwMoAAkxgshdE8PGASAAgbwGsAAAAAAAAEgASABIAEgAzAFoAeACJAKkAugEpAZYBlgG+Af4CJgJnAnoCoALGAwsDTwOJA8QEHgRTBIEE1gU5BfoHGAfWCAYISAiSCNkI6Aj3CQYJFQkiCUoJcwniClEK4AtaC4oAAAABAAAAAQAASsqbHF8PPPUADwPoAAAAAAAAAAAAAAAAAAAAAP3L/qIFGANSAAAACAACAAAAAAAAeNpVyiEIwkAUh/HvvVtaZ1mwXlLwzqjFdNlsNGnvWVgTluzF3tOZBXuyF2Eg+m6wsPDje/x59CwAJAG9NXM1c90S5Ea2rqyN7jgW5Uf976Mege/DPF0toh3nwtWsB3dCUc2I7s1JEq16WnnZvrT9QhjuzZRt2TRjtZNoPZhU7Ymj8kv4AwxlKA4AAAB42mNgZGBgDvq3iCGKpe/v6f9lrBJAEVSgDwCecAZtAHjaY2BiWsg4gYGVgYGpi2kPAwNDD4RmfMBgyMjEgAQaGBjeCzC8eQvjB6S5pjA4MChosTEr/LdgiGIOYoxTYGDoj2OGa1FgYAQA6fQOUQAAeNpjYGBgAmJmIBYBkoxgmoXhA5C2YFAAsiSApCaDPkMsQzVDLcMCpmNMd5iZFcQUJypOVryoeFlJUElKSVlJVUlP6bAyt/IF9ZdaTFosWmz//zMwAHVqAHVGI+lkQtLJD9WprXRAmQOo84UWA0Tn/8f/7/y//n/N//7/ff9z/rr/NfrLe//3vcZ7Dfec7zndY7/7/+73u9/ufrybcFfmTsQNx2va17SuaQLdTiYAACtoRGMAeNqsVtd620wOHaq5V5UUpoCZyOs1h4rT3QvHtDbd9fvIraQl5373Ks/AfRlQ6Xf7aAuQknv5m1UwgzLAOcDQQqEAxb7vBQBvfojR7TdY2v2rj89MnA7CjxDv+5irRz/7Rb9oteSBaVkoAhRabnSEIXToOmgohPCjgzklLWk5mFfQ/pyvVIWrsawhDN0kV9FuUs9rzOm9T4DDkhY6amNh61Mnl8vRMWgd3rFY2xmtGu4doKV0O2WjTDaJYss/DDo1gz0dLCjM21jVPufDmtZdBxPagP/bwsLUXzvTxoj2Wh6WPN/CfD3Y+ZtPzmbsA25tkWqNvHGOV3NBAEnmTRVNk6q7A5xl+yx50qk+EBtxBDi45YekAbYN8uoFr16EZhgEgUls4bBuodjxUbxhZ4v25hu8x6t7b6If46LFHj+K4iAI2lGAhh0EXQQBtAmPdAMHiwqogkI9Ikx9esvHPuliv3SpAxQSOlhK6SYmoJ30HbjARoZrZuXzN4rQa2FxxiKjhhhiypXMFuvE0LYfbpnRTuDLwAoA13Z9spnES68UB/sUDmi7I3JZm/tpK10JKKQbYe7gIxotKgT7ZhwcUMDVjhKsgjgAPgHXwoBdwo202kHVGRgV2nNnrKPBGVKnB2k4O8WwJekJegheLCNod8kWJjcEwcS1I8KotTLayFKMXBKODylKUNRFQaMqBfR5ZFjkPcpiSiuYoSEeU0ku52E72nBwXJErAI7p13wALahDOM67HdqNp/2aULRKSQHioEWZcUKHEIeAE0Sbg5PqzZ6fFNobwUMcOZSfHCyrN9v+m91MaVqkL6f6ikrEpN73k8lJjUbk4oQdMKRc3U3G+GucvtCoSSAkW37C9BFeN46B047PWJLCemszs1MIfVJNQEiaVH+TtKebdUkLEyHKkvjSKFY6hmGk3aoqkYict+fjpHTBw1Hp4ohEEboQfr950xAToixc12UGKmQzoqTSb+N/bfMB0VUjjFXbwRsqMVjeJL5Z3lJJnuVtlRRYmiopsryjkhLLuyrpY3lPJf0s76tkgKWtZI9/LIXEtIQGGv/g2+KgOmGsHRn/nRmdE8apI+N/MiMogWP2pTgJ1NcMKuM8ic8ifEB1PSB8LCXhY/mQ8LGsEz6WU4SP5Z8IH8tpwsfyz4SP5QzhY9lQsJQO7CNFaW+GoCVtNbeUJDZ4ZmcVPrLxEd3HxwqgCZd0U0Zzkh/sV3qYjP5Jr8XJaMnjicPHM0nRqHr+bJCifJrRc6XPMwXP08qfK9H18c7nRMOmWi7Wi9oXwX8bK3IueWZUGesL4gOal9SPQkdzDr5UjRtLDs5d54qGbpH7PLVI1OrQgCYKybflVRw3ZVNG4B8QH2hItzNnGNUKMbygqCy8QW6FOr1Tt2RYuDik7cO4IQGWYjpz8bQbNLLzsCTdnjdgyM+UtW3/cwGKYH4uTBVvB64rAQc1xDKNkJshlvTZ6xoC0ZP9VyrosC2xqKM2mQs6Mmkd8pPubEwkgbyn5Cb1WFKGTcJJIs0SwkVJJGeRZAlJYrEe0eesE53IRdS5iDx9d5+kx7kCB5d6XABpi1NdLuQS0bTcMxHm1L4pm5yUu7jSs6VgMqZR7PkNWJKWSZqekg49agWW6rR7dfK3S9bEi6a92y3JI796ohLda1fIP3DOQu61eE1JaDCLm3hD+1vmTuDDUtBIZo2K7eD6KeuOuXXK6l4Ye1WEVrhgX5VwQ+GiHVNtPGME6lJXamgDZynCY8jpfE5lzEc4LN0MOg+ohCVoyLnu+ZsqGSzUXQr5LSPd/KOmmDFFhG5J0qPqxLxYQbfOpkrEgt1j5S+0W7Qt2eVFzp2m4BVRUM2ufUfwDS838AXd8teX6N/QcUaljC9p/VbhPIl3zKJHdMNmLKMeW+8VDzT+v+e6SIsdCgIofOsJugSmzAgrwN1dG7fGXRt3X0zbBqlTFTL7b74T9wHlUFQIoVMxrBAwEhUkgFGFgDGaLsU4DZigAZM0YCoqhhDaVNMqMaWiovi0GZWYZukEzdGZ5ulMC3SmRdbZoVhSCFhmnWBFIWCVpluxRgPSNGCdBmywvtCu2lSJaYv1mbZVYtqhE7RLZ9qjM+3TmQ70GNcnJ/DQRrlm5ZGzRXnMQbdRq45OorzEzSn05swaiZtznbkhWeoFI58jA32OS+j5lS4nDq6hBzfQg1ttG5Pl3THy/B56/gA9f9Q54+AJevAMPXjRtilZ3isjz9+g5+/Q8w+dMw4+oQdf0IPvqFBpX7a5kqrCvz9/O/SnSR+DqdaaXFk697d6OPP7sq79ASXaAUF42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNjIwaEFoLhR6JwMDAzcSaycDMwODy0YVxo7AiA0OHREgforLRg0QfwcHA1AArCBSeqM6SGgXRwMDI4tDR3IITAIENjLwae1g/N+6gaV3IxODy2bWFDYGFxcAlBwqBwAAeNpjQAEAAA4AAQAAeNpiYGDgZChiYGZgZOEEshcBMYTNyCAG5EHYTAx8DDsgbCDpxnAMymZhUGPkgbJZGZwYjaBsNiRxXqY0xhIom4/BhPkWoFWyWG4gCGKozv6KuYWZmZk5t5SZmXb36/OqjWGsIXlKLY3Vqx0VVZKPa1pJpVST06CiGuKc1iRjSWOGplhOu4qratwCv25gprkpcMY1ys2R4XGFvlSe0mxXeZG7EzhhU92CFVYMxTz1J+Bb8KOe8EsrAE/pmj2punIK47CPV0E1Oyvcx81j3F68zHpfY+ylyjdZ94qzk4F5OhjjrBVQjZGAU+csKgWj0P7XDWMtsmY09MPMR7+fuumsqmljnPTCqqGf4fQ03s5mXUP/2J2Xjtk2K9zPeeE8qhDMtL3LWbJVy7PBHpPrdtLpXGGq4x92j2+McWs5V19U3oASoKb1C4U2I8dJYrCqbbc6OGb+zl4Ut+ojnXJekA/cF8qnLxRI/v2vgWUve9fXKawGK23fU4Sdu75Mwua4pSvDNS2jRX8YJfAEo4oafeN3DTzOQqub8oQuqD/9Tc0zsqKxrwAAeNpswUEBAUAAAMHdOwAAAIgAfygCXZQAX50oA7zNEPh5HZjzzxSQQCRPgRpLVqzZsjdw52E0YdKUaTNmOZvjxM28Ba4WLVm2YtWadRs2bdm2Y9eefQcOHTl+1yzXBgxEMQxAu/AwhmB3n/YIM+P4AVupnkGqP44bokCmkjTvm/18MTsdpr+LEPfrk+v19Hqcm+b89Dq2fJruH+fOf/zdrSFMrijswQQzLG4iyFCgmkpDOIIBRjeTOShD6LlABBkK7ML+B2CMU8wAAQAB//8ADw\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff\:{\text\:\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\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff\:{\text\:\d09GRgABAAAAABdcAA4AAAAAKHwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAM2AAAAE4AAABgRuZOfmNtYXAAAA0oAAAAhgAAALQub1TZY3Z0IAAAFOgAAAAKAAAADgAAAABmcGdtAAANsAAABrwAAA4MYi75emdhc3AAABdUAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAAorAAAP3quFQf9oZWFkAAAL9AAAADYAAAA2XyJC2WhoZWEAAAy4AAAAHwAAACQHMgKbaG10eAAADCwAAACKAAAAzJOmEFhsb2NhAAALjAAAAGgAAABoYcFl3m1heHAAAAtwAAAAHAAAACAAww5hbmFtZQAAFPQAAAGgAAAEgF/XfrZwb3N0AAAWlAAAAL4AAAGqQfMk4XByZXAAABRsAAAAegAAAJx+tju2eNq9VgWQGznTVbdkyeMZ2wOGXS/aTta53buAccPJYTi5XOBPjjl0TMG64DEzMzMzMzMzM4ZTu5780symsvnh4+8ruYYkv379+lVLBEmeEPICxgklgpCCVbByBSubP2+/fB7j1Z/zcCcB8mtHE67l75E6uTYmsplcS45YJpQr5UIhEROcomU6dlKuMW3gOXcs3F3roGXxyAN7H3HE3g90tHEOtDf8Sh+lD8NvjQ5w7nznPu+eVP2w+oF7kvv8dzJKuqMRW2WURkKcYqGQTyaSxAQusjybyWZKxUrZsS2TYq4l7QTDMg7c7Y7NcS4CgDHrht2XL9/9Bou/qslIrrP+BNfuTSFE429CEk7AUTgSToDkm3EiI7V3NLFnZaSYfCnnE/EYj3MiZJiWUrFcKhN2WijlAHTchppp2ABsIn/JsAxgIFYvY4atqyd9EQEIS2WGSyQhkax0PGsV4hCG4s8/dzTp949c/fHIbtHiKq+yyoskYyqoEpLkii3tZtgRyCYC2IapYcdtAPwB3THY6mUCGOi2wfRFAqjECnQ0QX8/nlNKW+lSwQpA0X3lZ37qyNUjR+o9CZAzJKdz5ZqxhIDI5lrUsKi6tuR606JMsVKWv0rFMeXVeyokJR0hpZTDMtVVJJLesEz/nohLzLS9cMd+YQSkQWfX4Sgp0dDwXZ0gRUBhts5O90mkOWh9d6lt5AD69NHjB/aqaZquA4RG9R6iQUdPrg2eMWo3A06DM83G+rGLWzEAMmyEB1sXj61vtOBMONXot9XB42trdW5ZjNVNLw4dobkL3UXa4tkTcj0aY5nZi/33ubsOzDBmdct4oqfwQExuIm8r5slGWo884+fHqUpPDeGX25fA2iRFS5deplRL/s6gmm7Gtm5ZkuYUAQKRfUagAETgdMQ+kQAAUl47rTI6FrU55YXcrjqANjWeK/XpV8jFp2oAYtZ4gfxxU4QSDXudGEsZ7hHuLaMapp67jUo9YAZ4ALc5d2rDKPdW93AjFZs9udwS4lZYsIat912hwTJYri2Ymcq0JWvaMqmZCzRYDsu0fS/vwziBjStxuDiYjldOJhmmMqqUexQSLJkUPC4NRu/mnVMgGKSU3ssYvRM5MgwCJY/Xhzj9HD4DLRzBIAFCcD+xF+1PBhICeelST8BCvlLuOYQWKtK0cSUaE55r1chmBA9EqFDvJSVdDzybpoIjZwyZlh3xX5X+z0A704MCUcig0cgk94/bxpWLvXcY3TXtvrDFNEyj7ZBq6m0kRXIfYEpio4HrWu0uiVBQb/nf32cSAuvPxOEk/Bfy75z4N+a//nLcb+PGfy7/jvx/On9ySEcj7ZTOr5cvtmNXPOIxIrhqmDmkXOQqlYRtw4evPjOLBsJCh+rblMYN1n71YJoaMxZmzOgczIayBPYL6iEhVs+hGkINDKAPzuOpC8+H6jXVa0hXp5snIwX8Tpe2IAxz3E/9PncW6epNh6kVfm/KWgGYM9LrS/rB/wuhIDEgPBKyCmD1WSO3/L83X4JeI91zOmboB8vORgCy1cPoaLZU7UKgNp54TKDMUHYuvyiqCjaUaTPYNg+9/HSUIsO27TAAND4BjhNsCXDKIu7nVdPll6SbDQBAu/D7+7QGPtSIirBxLVyJ+5AUIYEMl5tOJitr21IqmRWlbF76IW7F4FKw68JGnaYxBIbb6/EwBDQAoMbcW6E3ZQAnuNed4DFeKBmf2sVYekhyTtq29NKmXZS20GIZeuH2bZKr1fTMLSFuORAU7jl7NDNgpwCA0bz6LXdG9aTVEUY5BDV4CN9YA+0FW2neVD0Md5KaNHTbM52Es1kSaQJUbm2y9IjEhTkKN4DbefHqrz+zqZmyY3QJ6+5Y7bfOfbFgoxdz1TtwJI74udgWIAAvblyLO/1VXXC7v1EX0lhdKFlvoQsXCF2kVR+2nXKpCK9he8UvnztfBMFKIIrmpjOvr7ekMn7tOn9wc1oQODPaij/jSDjyzTWtBGBodQFeJHXZ7NahsKu7obpAiEkbxhK1Ql7OxumEEpK2CnJ+Ek6vXufNSHYXsWWbfSrnQFQXCrFh7CTVKasLYFcf2/J8DrtOYr0nrd/A7yYAghDYtRuu8HG9/y2EXbvhluSce231DX73+g0SFxZLlV+jy0hWzielQ7wNS91i8Zh69TuPLKm/Z+MLHLgYu78JDADM1iJSQDDOzW8fpsuUizgrXb8/0PozAqH+PVciQwAa/uxX7eEz+rQIAuSm6hxYz04gAzdVQfmy+96vjihZ0UqzftgcymtuEC1VJANJQRKBFThsKy+uvtewA3lw6Q5lAcCknWprarWgmjAfMACMaTPU9+M9M3z8o3bpsZOGscCEZfsdqv14x0Dv60c/GSBO1JDSoGrXqG332rHGT19TopTpXISvkRBp6Hai6fKeounTVU/4Gs/ql4xp4wCMFltNAICg2W+R4NC5jPNJF03ZPfQANCADZPjnGmN43/OnMA6Orz6shzJJdVeDi6zI+H73lfcTZuAnmdINmaV6gxIAhKIrju4F/sOFqBRWmLKizYQ4smN1U1XWUgF6mfjQt6Nl6ceNH+zph1typ0uBj1x86Azt17sHKeYrV29ibjuePtU5+Nr/rGTSltdkPY0rD3HB/0c1u592pJZ+Yt0L1r2Q/6vCx2+qmbvhf9Xs9oH/u8yhe6HGU6RzEayXlexBSM8tPScbYherckXdiiU5yptpicHjjtdNR3l+3P5RpZEGXYY+ZMaSkZw7lnL8DfsBNpzG9QE9/2Rqf+w8Gb+j13tVjbCszJ3kREtOboq241iOooDfAUfJwKhn7k5iMhfhsWP3nfsRhDQj2HmhnKM4KRKoxG8KBMMXX+K+655XnY0rcWU4KvFP6WjGx/l7Cr9SUvtvRZ4dZDuLcyJsR/hnfHrK2nUYjEAQI7Gd3YcnrloLjhkzcN1KGz/Dz2mYgfygreqsrKzmqq2a6VgUP5foB0r0C/m7pEb6R6pTKpOK5C9lUco5Tpyi4CeZzs6ww0SFG4skdFy3VgYzOpoVIH1p5Ur64ioPsJquZmx5SVOLAD4mT47f4WFEI4Rlcr4QFn6eEl7akQjkIR+OVi8j/lpWxN2JrtxVSSdiIm3xTA4fYwZMjUbdJ0VK4FiDyVv15UiEwMYfNrbBK2QuaSJE5Eqe0/IqgudGKYnnR3nJ2jw4ZvEBi6jNLARA09aOeqi/rTMRfZdnIytGDtGAd1mQg9hlRCLGUeKvlfgfSfw6otQo+EZKxpWFNp3NcrliMRRg+opjFo8JcisqWFP75IVDBpgIgxrrccTIFZEsR97etkNNWIZIKdaEwCswVnUZWvE6ixrdaHvYuZot0QCjU/fsWyOjwE4SsH+rD+hz7hGPykCKscT+SGI3er1dJe8Bet1U0vckKstE4B2lSE3fPadGfUFCDxzV3sQQbRjrKRKN91B0EymliL5Ha3+OpAv/IqkIJSRbSsdDcM3cueS/AbuQ91MAeNpjYGRgYDBmCGZgYgACKNkLIvh4QCQAFKoBMwAAABIAEgASABIARQB6AJ8AsQDXAOkBYgHfAd8CBAJfAoQC3wMUAyUDNQNFA1UDhgOuA98EEgQ6BGsEfASJBJkEqAS1BMUE/QVSBYQFrgXiBjcGbwafBs4G+wcRByoHWgeFB7MH4wfvAAEAAAABAAADxXpqXw889QAPA+gAAAAAAAAAAAAAAAAAAAAA+JH7HgduBtYAAAAIAAIAAAAAAAB42kXGIQyCUBRA0fv+g5HoJsW50WeyGU32TDIYyCTsM2A22O3ZYLP3TrEYmCOI74/pD3fn0rMEkC3Qg054WvPow8ptJB0l1pzGRw9JMbySAuB9si7aUrpaUlcT/9S9LELMzIc5dWdZh8BMvFrJQSuu3vCjUUapOUdrF2Xu5pP70Frd32bovgGrM3AAAHjaY2BkYGC79luOIYo98cfE/y/Y84AiqMAYAKWhBtIAeNpjYGLWYJzAwMrAwNTFtIeBgaEHQjM+YDBkZGJAAg0MDO8FGN68hfED0lxTGBwYFB6GMCv8t2CIYrvG8kiBgaE/jhmuRYGBEQDxww/sAAB42mNgYGACYmYgFgGSjGCahWEBkFZhUACyWICkJoM+QyxDNUMtwwKmY0x3mJmVpJS5ldcqb1d/+YDxYcj//wwMQFUaQFXRSKqYgKo4lGcDVb14wPAw4P///4//3/l//f+a//3/+/7n/HX/a/SX9+73u1x3qu8U3XBS0JG7B7KfMAAABe8uqQAAeNqsVtd620wOHaq5V5UUpoCZyOs1h4rT3QvHtDbd9fvIraQl5373Ks/AfRlQ6Xf7aAuQknv5m1UwgzLAOcDQQqEAxb7vBQBvfojR7TdY2v2rj89MnA7CjxDv+5irRz/7Rb9oteSBaVkoAhRabnSEIXToOmgohPCjgzklLWk5mFfQ/pyvVIWrsawhDN0kV9FuUs9rzOm9T4DDkhY6amNh61Mnl8vRMWgd3rFY2xmtGu4doKV0O2WjTDaJYss/DDo1gz0dLCjM21jVPufDmtZdBxPagP/bwsLUXzvTxoj2Wh6WPN/CfD3Y+ZtPzmbsA25tkWqNvHGOV3NBAEnmTRVNk6q7A5xl+yx50qk+EBtxBDi45YekAbYN8uoFr16EZhgEgUls4bBuodjxUbxhZ4v25hu8x6t7b6If46LFHj+K4iAI2lGAhh0EXQQBtAmPdAMHiwqogkI9Ikx9esvHPuliv3SpAxQSOlhK6SYmoJ30HbjARoZrZuXzN4rQa2FxxiKjhhhiypXMFuvE0LYfbpnRTuDLwAoA13Z9spnES68UB/sUDmi7I3JZm/tpK10JKKQbYe7gIxotKgT7ZhwcUMDVjhKsgjgAPgHXwoBdwo202kHVGRgV2nNnrKPBGVKnB2k4O8WwJekJegheLCNod8kWJjcEwcS1I8KotTLayFKMXBKODylKUNRFQaMqBfR5ZFjkPcpiSiuYoSEeU0ku52E72nBwXJErAI7p13wALahDOM67HdqNp/2aULRKSQHioEWZcUKHEIeAE0Sbg5PqzZ6fFNobwUMcOZSfHCyrN9v+m91MaVqkL6f6ikrEpN73k8lJjUbk4oQdMKRc3U3G+GucvtCoSSAkW37C9BFeN46B047PWJLCemszs1MIfVJNQEiaVH+TtKebdUkLEyHKkvjSKFY6hmGk3aoqkYict+fjpHTBw1Hp4ohEEboQfr950xAToixc12UGKmQzoqTSb+N/bfMB0VUjjFXbwRsqMVjeJL5Z3lJJnuVtlRRYmiopsryjkhLLuyrpY3lPJf0s76tkgKWtZI9/LIXEtIQGGv/g2+KgOmGsHRn/nRmdE8apI+N/MiMogWP2pTgJ1NcMKuM8ic8ifEB1PSB8LCXhY/mQ8LGsEz6WU4SP5Z8IH8tpwsfyz4SP5QzhY9lQsJQO7CNFaW+GoCVtNbeUJDZ4ZmcVPrLxEd3HxwqgCZd0U0Zzkh/sV3qYjP5Jr8XJaMnjicPHM0nRqHr+bJCifJrRc6XPMwXP08qfK9H18c7nRMOmWi7Wi9oXwX8bK3IueWZUGesL4gOal9SPQkdzDr5UjRtLDs5d54qGbpH7PLVI1OrQgCYKybflVRw3ZVNG4B8QH2hItzNnGNUKMbygqCy8QW6FOr1Tt2RYuDik7cO4IQGWYjpz8bQbNLLzsCTdnjdgyM+UtW3/cwGKYH4uTBVvB64rAQc1xDKNkJshlvTZ6xoC0ZP9VyrosC2xqKM2mQs6Mmkd8pPubEwkgbyn5Cb1WFKGTcJJIs0SwkVJJGeRZAlJYrEe0eesE53IRdS5iDx9d5+kx7kCB5d6XABpi1NdLuQS0bTcMxHm1L4pm5yUu7jSs6VgMqZR7PkNWJKWSZqekg49agWW6rR7dfK3S9bEi6a92y3JI796ohLda1fIP3DOQu61eE1JaDCLm3hD+1vmTuDDUtBIZo2K7eD6KeuOuXXK6l4Ye1WEVrhgX5VwQ+GiHVNtPGME6lJXamgDZynCY8jpfE5lzEc4LN0MOg+ohCVoyLnu+ZsqGSzUXQr5LSPd/KOmmDFFhG5J0qPqxLxYQbfOpkrEgt1j5S+0W7Qt2eVFzp2m4BVRUM2ufUfwDS838AXd8teX6N/QcUaljC9p/VbhPIl3zKJHdMNmLKMeW+8VDzT+v+e6SIsdCgIofOsJugSmzAgrwN1dG7fGXRt3X0zbBqlTFTL7b74T9wHlUFQIoVMxrBAwEhUkgFGFgDGaLsU4DZigAZM0YCoqhhDaVNMqMaWiovi0GZWYZukEzdGZ5ulMC3SmRdbZoVhSCFhmnWBFIWCVpluxRgPSNGCdBmywvtCu2lSJaYv1mbZVYtqhE7RLZ9qjM+3TmQ70GNcnJ/DQRrlm5ZGzRXnMQbdRq45OorzEzSn05swaiZtznbkhWeoFI58jA32OS+j5lS4nDq6hBzfQg1ttG5Pl3THy/B56/gA9f9Q54+AJevAMPXjRtilZ3isjz9+g5+/Q8w+dMw4+oQdf0IPvqFBpX7a5kqrCvz9/O/SnSR+DqdaaXFk697d6OPP7sq79ASXaAUF42mPw3sFwIihiIyNjX+QGxp0cDBwMyQUbGdidNjIwaEFoLhR6JwMDAzcSaycDMwODy0YVxo7AiA0OHREgforLRg0QfwcHA1AArCBSeqM6SGgXRwMDI4tDR3IITAIENjLwae1g/N+6gaV3IxODy2bWFDYGFxcAlBwqBwAAeNpjQAEAAA4AAQAAeNqtkgVqbEEURM+4D/5xeMh3d3d3i6Fh3N1nObOKrCCLyGpSXDruQtuhuV3Vr/oBMboE8AVj4hk49nGBmWM/aVYw1vyJVcdBLvmSjkO8891zHN62n/IXfX3HaR4E1nhPizYTuVYoUaaPxxVyXNV6jztqT7lpdFfD4wMFelbbxOM/OXFBnNN8QztfjW8RP1L5Lg82lZ9o77tqMqb6lpwoL8WGzn8Xz4mXWJZfhan4Af80lxhQJyOHT/Jq0re1q/2CedyyGz/T2F/j5k6VY1YtUNCsDMzT4y63NJ6L+mpF1Qy0tiiroum+emhVTzTuc/WEmd84fuqm84KRtVtKL0Nf+lWtY265bF5x9RxfZ6djzVVlttfscL5BXJUVu5dnyfYsz6HmvHbcS4p+kdHpwoGvp39Mbc5y7u04+V9UFI3svaTgKupac5Zbz7kNxHnz9+xGBTv9lR9af9O22u3KP3YoKPn9/wYNu9m+vh4ZhhoV+5+ymrW3LZOMOb7lr3GfZ9LS+6i1xbfVeuTs3dr0xbc0pLWZ8m1+6/yP05xZB9Kmsbt42mzBVQGDAAAA0bu5u7sW2L4nRZAuZKETpIECvEcNAIqEF1XegNSo02fAjC8//oTE1sjIrdsgtWnLth279uw7cOjIsROnzpy7cOnKtRu37tx78OjJsxev3rz78NkuW5prAwSiGADDNdtE7ll3vgfuDvOjf/XF8zxtRRr56WKTx/awWM7Px9m3Yi4ZCzbY/i1YOuxxwPFvI6ho6FhhwIgJMxZssMUO+d+mn2nIWL4OIoL6U4OgoqFj9QZTCFj7AAAAAQAB//8ADw\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff\:{\text\:\d09GRgABAAAAAD6cAA4AAAAAa6QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAzTAAAAFMAAABgRUuNwWNtYXAAADOgAAAAmgAAANyCRhu6Y3Z0IAAAO5AAAAA6AAAAWgJkF35mcGdtAAA0PAAABrwAAA4MYi79fGdhc3AAAD6UAAAACAAAAAgAAAAQZ2x5ZgAAAUQAAC/DAABRfFrBpzRoZWFkAAAyMAAAADYAAAA2YThCtmhoZWEAADMsAAAAHwAAACQFKAEZaG10eAAAMmgAAADCAAABDBReDwBsb2NhAAAxKAAAAQYAAAEGN/Ej4m1heHAAADEIAAAAIAAAACABNQ6ibmFtZQAAO8wAAAGiAAAEqGXfg0Bwb3N0AAA9cAAAASQAAAGkriEISnByZXAAADr4AAAAmAAAALJlwgKGeNrdfAWAHMeVdr/qrqpmhmHcnVmGweUVrmgFlgwRs+LEDPEf22HmYwodhnOxwzm+4EGY6ZiZw9bqr+qhleRjPlsadVfXdL/36r2vvnr1egQk1ARB+FUUCKJABaHu1J1q3SnXfvBCrYaCy39eg7ezPp8QBNiC7hRMISXI7/YtFaHauNto1cPQp5SQUqVa9cIw8Em5VGk2Wp8opqI8JsSZsglpJfKFVDJfRJlaAfK173/UlKn16Mafo1wyVcgn0wWBPeEh2A/fi+4SXGGYPSEXaPwJXqNVYzdlD6DsxtVKpVppX9/0UG4sT4koy74nyyKhb7/mHK36mXRgnDuepLJMk8fPmtec8+cPMQ3/FJ0X7hAeZs9/4K4bU+z57caK2K43W61mo1xlerVb9Xqrzf6vRZFPAr97Vq+FndNaxEWj5YDEF3OUC1ouByai3DDVRrtx9RlTYJg3xf35g4YQFXVYA2diIhmR6WlJUpEyoUhWo84P1cDwkZXOkESqXAJnfAIoIqKEIEGmp4CqYtzBrjcGx3MkgjxrcPjfjxCVijKI4osBgR6mKMoPr2HP06078OZDJCd9s9tNQhgRTKSkjBBsXSOsS/pW2HxIP454V/7BvGjhytvgM+g9wrrwBOGcoL731IkD+7dlxNo4dL2jXWXeEkRRGFuL0I6VStVqk12oVBr1eIDDKIrPY7NzM8fm598J+CdplLkLBH4U1qNGpcqt327BZzKpMGNKziwB9dh42JrYKipykKOguV57pR7mrKguasnMTOsm0UCFvKhkPFkRHyrKfweJaZm2QvWnZqpA/UX4cDqXjXyHFjV08oQY7KlM7KqPGpAuqXKYySAkezffmw/toE3h0wgb0YHJIy2gYOJsmrggq8W0dyJ1xxulkmvYkyn9I8WaceaMlhOwUL7y08zX3sN8vSA0hDXhJsHaot+wd9v8WDETmhjHjt+udbT1u47erpQrHX3bzB3F2JAtIXY+bj+BEhYa/HTzdxrVSrlECTcSs065OgSamA6Gh3OynguGT0mAkGmxv7YZAECIVN9iBxt/Jipvrg6JciYYGSpQPeOPPNEEIBQhSgEMNDO9XwEUVndN71bFaOR+GYleaVLln7nLpwMTIwl9EHv8AF9eIe7zZ/cqEFT2Tu3WkV/ZO2JCShlRUuAIzF8yV74Gf8awZa9wTLiV+cvFkzcfmEMiN0KsTddJwog7AdOI6dVkmvJLcXTxi1w/ZhVuC656tRpHGO/IvxMboloql2L78YgVK9US6VmzfWap7YbZUiko2/osjXKiCiAh2ZxrEdclyZRdS1N5qKTpQ76FW3bwJEOrL1WXTDVQhjJi9H1JUUQZA+nKlAypShJFopFSvUIGPrHzuGrurTVnC2VnaI/ROkRzAAQ7nk5FOkfF8RfN6spoxs67/oG03NC15sxEMTtTdcsZfdehBQMmldRUQ5kZkjYenZ9NSuHossVgoCyA8Ajk4STDq5RA3qkjYGjctxa3QC9smiVmiI8XUrqVLizPWqqaDQpjIlAUIadWwNrK+OqlrAIZjTnptnET2J1fz+L33cw7C+zONrA7Y79c6kViF+/iIekaMArh3RVLMpJHTh6rzKQ1yaogyXlphLLjF6xmFmF/5Zduf9WDs0M+RlmJqNqpX/CTR3bfu0UV2NNuYU+7xJ6WY09zJGCjzp/DNemNPB/JRvzcJnPnOwylaola5siJ9dndnh24ivGcDBkfQw/LmppDUsAe9op7ds/qbqjJx3+yMH7+6E38OTuEY/CrSBbuZM9pC9xeHLSp7xM/4NjR4nr1ZpYoh+qdyaw6hcol1sEP/YD5Vg+3G61Gk80Jpc4s1LU178sO2W3492usQ6PSaFaara8VIgQAaGJWUomdsKSzMKsnLbAiW5H12bLIL0aWHV7VSzwjXt8LyZ6ZzcqOoYkiJJm+kRtoqAkpYiq670YSyYYgiprhyNms5fnXdg5VaKLH7WxyK1WEG+CPkSfkmZVcPvbDHWDmDhDPfs0YYYJ+8MGo6wQGHDpEoogcOgRG4LjsJJFgJ7elUocPI9qg6PDhVOqnkFyTEXvGW688Bc4KLxOS7BkGZs8ocgN2jE+6cdvxszYoxepwbrSx1lSIlkHIBKPoY3O4mK8uTm455oppzVEBawmc5dLPgwWfg5sEyu5MOjHRLjI5i/NZOJPLbfwYJBqKWov97v0CwDqTQmN9Zd633ROBCfD+SrowVs0XhtdyI5VCvjLMv7HAUJvPax77hsI9KHocDD5l+wjBXqqGZoBg4z2ydiQwJRmjd5hBYIoyvnzACjjfGLvydfg9dIfgM5vL704HOnC+w43bA30ec9wwESFBF8BZBLC28ltGJ1NkfuLEXYfJGGlPnVh7UXv70NiCgue3rtZNA92QAW361E88+A4b4oOzP6xoLzh0Yc9h0H/k6P7nmXwUzjP9P8D4VpVpkzJ53DG7N+MZJLZ9yORwuoSm2B17NuVS8mLXJKZvSisVzZBcSZVbTeKGG5+NXNJsgSiNwhtVwwxshKyDgYQQws7lb4g0k9IUhnjv/2UkxmPVEAC+xFB/kT1/iHae33k8Z1PdOIxZEWvtzwLFAR3gtmCITrmxnpTI7qwPVcX1+wJ1yGvOPXzxkjujUISIufFiQ0HSJ6Ol0Dm2vZ1DWhp+KJds7XON9dVscbmVa0ydwaC5rkLNwhA2CDZdG5Ofdlvj+fL8zinsuIkMk3eCzVK/zeS9gcmbVbryxqDBp+n+HNU97M0+Xc/gg9cdu1J1swa8IcZRrsXTo6x00yqRUeKBGR/p89oYmdUBGQ/e+IT7FZQNg4IydNOxIWXHNB4tY0/BZrHpLziZlXYWmKp5+MVCqjEnA+B9hYLubp+QE3hkjrgJecfx7XM6iRifUf2hXV5iegkDollfISKS1ByzTdEFAHCVIMd8MysA/DW6W5gV2sw3mQoC58Id08eOUI5ds91yY9ev17uu0iG7PRemVYdD6Z8z+xOFVEae+1wbI6C/LRk6CtURi06M8el1bGKkwq6L4Q8Vn1s8B7H5FSyeAGLgZEqDs1gDam28SpRbsnhCxGycMsrfQ6vxiTpwP2Jx9CU2D66zcVnM8Diu9SzNDMvM3WMB9QXUqtW6pJxR9Fp7wC5IjG+9MPaZ+F+bu3l2WLfXR6juuliTAIiFJTvI5IacVwFFGIkA4TOeDur4QrXUXAP1aSdeMK3nwiAvIxuXt26fn96qiLMqRlSVXvsaycQAGEkiwbLEtHorDiz/4jaT7Lt0KjuTy4SuJiFbCpj1J7ueVhd2MesvNcZjZOiDE1en6/s8QmjQ0aMHG13mFwNHiVAGHDE36rpf5T1bdy+uZxK6NESyiuVPrbsKaFv2u3Z7pK6jTH6ynco79PzpvT9YPygmMrMKc/Oo7ITBMNo+vtBKZMCoYItIBGsHWkNYkkeROlLf5oZTK/lJk4D5huecevln5qfGploGcqPhZr4aBjaPHzZOv4PuE8bZOEUd9OzSiTK3eX+guDLFgS58gg7Ix8ZI6v4R+Y8UOelLGkaIlpkN9zsiwnbBezUBqtYmJn/51TVZcxUZYR1PTEqBrctUs1SrkPi5vyW6DAXONieZHL+N7mByNIUdjG0ut+pTyavZJumGci+WS5VezMbLTfYx3KiUGDaFtZZYi6OYjUYM0gsPHBiSd59ZnUAiG+rpVQWQ8cAbHzAQqNvriJNKfXQKdqyd273+hPWnzu/H2tr0/AGlDB/bcha0Y4sT2y0AhJC7dYS4kbzj2LEdcsRiZJvHwxNRb7U41KhVRmq1jR/bNqU7wzM7pkJvF/Oaqa7XTAjbmNfMTyUN5jUQ4xAXf7A0oF0fuRae2iJ3qViLnsvw5QO8aOHc+FympkMiu/XC4bn9yDk4PZcpHqpmslEiQ7ThWmmPWyuOVFL7FGXUC9Jj2y0ZkA7ibDJd206Ts8vZ3QsH3hOEz1iftBnbHY+yuVC1tEzzToCiWTmYD/xRWanmzMBStvC5MZ6b4RE2N0c822DK3VxAf352Hm+u7v0LT+pM2pWNx/qzNxIeYazjhvieZXbPyL7unt7AHtw6Pco5uH+7PZytVuerac00VbPoUGnwpPdqC/nq0vSBdtW0Uip1iqYIMSMR2vA5NBlzHQtxPtUJ4aGYTg31mQPGIXwuNIhMNt4iaZoER7Asm6GONr4EY/oxyxfFL0paThO/KEq+Zero539R51pVhA/CH8OPC7LgM61MhcRadVlPJeqmLPgjKll4QS61cV8qm01IH/lwKgfPSDEupCg/oaSSClh+Ut0kb4LJqwkcTUtc0OHhLq8NpRjlJUqOG4GGYGTjC5pnypTATZKuSxtvIbTt5zQmnmbZHhdaz+jSF0WRybrCDPIJ9CRhTGjyWWXS7Y/AwC1pl2L3VhqdCZJdZkHIu4adw5U7b7i3NVpVvYMeAtmOQlPB0UOWglB4aWdEs1PZZxVTLOvUyMFfLm2ZLM7OFGVtfEnJ5yyZmrmyf3JVNrCNhyPTCPK5jUvJQpyM4pkohlTfht9lcjZj/N2xMCNxOTcH0GByj9hBHPpxyPR79EB4qDcRdXqwDhMveiIxouCFSyOz9b2mevNqxjVpMnPkycd2y0FrWE+Hkmc09liRiZ/4UriznMaqKafy5bSUkDJQe/hRjcX0lQeWRg40iyMHH1J97H7XyRufb6GSiqhv6A1dBO1tR25eU5Fk7BgdZ/8ijWuVEQD+hvG9ZWGdabVrS4Mg5o1ddy938a3NsKxapiQg9Vq9i399pGBsx+3kvtgFN4x8ka3FY2X9WpPpCR9JOq508ECIiOZZlH43pSAizdMICg4elFwn6UF7XsQumcO+JM634a0A6YR0t5RIr9thWkY0Z0ka5UBXyOcLCAHVJCsrIzkd2ggeA0m2eArCkjceewwQ/BwFmnnJw0xD9eEXc2x3mI6/x7jApLAg7GPYvm21Nh0K4lXcxenNNPwsjGa6MM8Rv0s6qVjhLKbVodseh/yY1fAW1lbt8JkgigKiYqQY8NKX67Q0Zzm1Ma2+R7W2T2pJumPbygotTVQW0UwR79m5S7FaBojZcp/fwEdFrEq2y3mBiJTJXLE0uuZi9eZ2NjW+qCDko3cCUurF3NTGj40sYPgYsJ7qDEeVEYb1f8CwvsGilPIoxaU+wvMsSd8NuzBf7SM7g/UuyhECyduf//QTtrxSVzHzMjOUEZJsPykrXr7dnNyzPLM6ueiHCVe6X/vggw+/S0cVQhVX9fCx41inCtXSleXJXU+7Z21+25RrWOH6bczPbAHgD9kYZIQR5mdDRTvmjkyIvvG7ebw+afYasYWdOhO8EtrU831XtkN45jOU7dNru2a2qnesz5P6TKO5tAdoLqFx22mJHAVA1uqJl7z45iUTwcTRF6iw0QTzIW4hj0nxdXQ+ZuvbKfD47RNA9uBBhDabbGi72DZo7zX33b2z9mD9+lp4IQvqTGVkJvqkIyKENYlZjqLffoqbcImGey3KU77GjsgQb+KrkT0h0UiUSETEQctMBYPip2IdI5ka+dK77MgV2dnL4hYlsj86Ns4ORd72ImwQOWsbhGsfr2BDpuOfMR33cOb7b9Uxh7jvl69SLeSqZSsjs4nPblbt9x+8RrUH11RCFOPjXKVEKpV4PJV+6VqVfplIlsG8/mpdKsyj/4bnAHlOoJd36NOu2K9r1/p1dTO2dldYZaYuzw2GsVadyQRur25de0qk6+HFLbY8P01AVo2Bt8tINNOzMl7avzjrh+OpMJs1FMV4c2h7OjWDyMhU7ztZX5iv33S3goYly+4FgEzdYm4etJffdPDZSbU+VQTARkWnRtK30SOmrAkQR8NjbIxOML2YT16PRJ24yKHupMEHagBQm9qdQWKgvHkhFgzaOTBhRfaCwJMdH994hI2OGDd8gN1F4VD1pn5T3CKylvhL1O/2YS1MCc+ROgglJ/MU8QGzCGt45zvZdyWevOw3bTRZE7HYePa+9bGP9Vr4uO5m+n+I6T/Cs3t9/a/VHgd+X0euyWlDdcny6uoycQPpDa9HiogB9VqYhMR00nIsXzpHARFEiErSMpOGtbg6jZkX58PsyTWe36BxLmiwBESdB7JnPf5SvcVio/rroSTqdhCmjfsUShw5TAB2Tq2sHdVQJgpyUnFkJYOhVkP5JQqEWBpDpk++sWVMLUyPETuZzUaKaY4qM6//BDB5XL6mZvIc4lnV2BLXGyLsieWvoq6d+rJSGuZRd0auxN4xjQgNuhExGjkcNz3qRLC+L7Bl14ejtzimS9Z2ceHZAO9cK48dcD3shM8yFMMrLWVaaQ60wSZMzcqgp9jJvfuH4J67sekzo3Y1O3p0df/LAJCWyChsrANLXLpzdq10f/wtpl+SGf1PuvbOAPRyWZ2BvRZKKbN5vNUzCAROMyfwk57IUwLl4a/yNdwQ1mPQ/NRdC+MEU1GkSiGZLChURBSdRaLc4kM+Nk54N6wTDpEASKJyQaYUPkrZAdaZbOwvEphsNzHZxkgvxxyT707wRLVBarsbZE7MNfsLpTZToRpT1A7ykCC4toNTC20ft5Z9IlVGAeZCjDVtpUlcO7Ss0Halbdslfgy0OEz0JZ0MFylsvoAiZAVZinSdPvNlvgRS+md26yolzKkDC2002dW0jFB89nufoWN3PVtJJJRn3zVGP/N7m6/BR5nOPhuPb3bzIm3vH0GeTt7AjSLn8UGHf3b0RdXqJgga76EG6+n4DO5DFaUf1kSGPApGsvnqGGd4B1klqZyUUGj4kM4vPz7EINZj38ZrpjX44PUQgxzWESf9LXB2VttY6sMLEubYWv5z6A4WW2OMaxTDXg61Xrt66Y4rg+2eQTqkWrk0fNHctSs1NZXY9ZxdiSmo62Oj6xMEaTSdTSQaNUXDGK0XtXDyL/9qMtD1YPKv/jLn6WjysH/+oclchkiZkcmH7itOCChmHL/D7D0lLDJZWg2/x3uusni9VmvVmHi1Xs4wtnMvimMmVO1yz9EBUwhlOV0YdbPbxmG9XkXaLdvIzm2JiDrh29qjZHlpaZmMtmEwoyY5N6LbGlscc8vNCrxS5EELPzW2pDJuBqAuxbZ7ILZdSdjDs0xlHzF5MQcXvjsbf04hJnHPmrFPRGG10UvShCGfk1cQNyTrXaIm6tkXPmJsoRRlsrWtiaXAMNBU19CBWc3lfr5qoUJOgkDVkKjrCElulLk/Ms34KDf5gKYgihYWAGtjqZO7dvzlZDwCidcujDuLi2+HA9SSQIQRz8f2vpWl9cxKXdMic33LyoHUal2L18X2la8hNUbb00y7m47Me+j6COgr0t+HZofd//mGUA+yulm3akw4Ns+4Xn+w4vTaNRPwbU9NTa+ZNGRzFWBIqDE22VgChFVGCG00Wz3pIBDNaTw51pt9G/LE+PiEnJlQaP36mVhfGfczU+WcRwEwSua85QUl7SSxJoki9ae23io32/KICr/cCxLkIfglQLgYWN5QLc67s3nxS2wdeDPDhZUkxwWma7zQjoexZ5Soi4UxEvQXEf0dv87uXK8GIzCl2EL9LNOL6MvHEqMjtiE9W5pfX29NH5nRLIOQJEUIYbkmKzRxotpWka141sFdcnuHeGIbdc4vSCBLii6HMhKJkkzIyhsvebkLOU1COTBvXr6xkS/SEkE+fj0mkqJQ1fAOVfKylghNTXUd0Tu+ddcpBSoSQi5RJQ8fHqkwFFH4DJUSAP6O+cQ8R8QU07wVo3a5v1sep7T/UQrt9LnysxVj552IdnORIJuEhNnK6Gzic5vp8p0ddvzbhlfR2WRUyhs0zkwurzjS1Rx5o9nlxFiAK5eZ59pMyrUeT4ABW6Hd7UZu6mvJI78esJAMO3mG2Cm7ndgRfLtHYciuVr6w514KMbDA8aP8Ao0SwEw/lSUFkp2SJYivYspCqDv9v+URunrO1+88Qh95SwdguhceTY3da4mlWT75zJbs4g89yi4bJsF8FXblW/Atpss2pstkms+7PpMzhyJe29Fqthh6tMul7qwjdoh9WUT9WVYU2dWBml+2IgsZDp4XAcR5yTWQFVqy+UqKKULE8NzVVURNvIJNilZXPM8gKIT962wY0HJk4fZe72vjKouUsX9w981jK/J0KjFvUyxJpxtXNi5jEyPEPkAEoLpkcSUli/OHK9+K+cMtnMUTPial3vTJ6ZhISH+rgUtbJv0sazmOKrHcx5qAWyDg8RO0+wDDzcFPmvD0lOOSZxA3J5czMrFQEGBdFpUKQEURZR0HAbKInCnLuUDawsiwkwoMz2ASexbW13RseSJg1oIiK2LcjTGHsrhx+fNNqgDCBh17dFgGufK2MWpgBAptfh6YjZmerGNkSTvfd9s+3V09uc8IAmPfyVVX33fb+3ZKzAKZLns9yiwQCrBpZuM6VKsDb4zHseSHHEHanXVlX29K/TxiJ/2UU5sZp8pXcGEns0drfNILo4UmhWYrCjiM7t/Pxzcrp01TM5NKQTH3rxPXTUe12dUtUcgOpQMHwhwLes9z3bJEXFMxupPhw3cb4q23dsAzHmrmXU22Us22xLJjyLHWt94qPfQ04GQS0RzfZD9YZf8dBEC275hEiLkUxH68d6D9YAnGVLgmFktBPD/UuIKNcqUTgT22yKuWNk0h7+gxqfAoa6B2CAf2K5QUFInsRmu64hosCl+tqw5lNz0aXseg3jTz/lk2vXfjsSSBqv1YIIrhK1Ncfh6H1HRYmM6+f+ZNfeYEwgzT6HeZRqtMo9wmjYR2+x/Dw5zU2eKmm8l87Oi7TAUBjGH9tzaDIsZeslQeD96HNEQAwcYXsP7Xm3MhwELWxhh+kbhXgyOioqzJ7NLGNuJOTPQyIDvXsEGY7F9gFSO/j94T1yjIXHaWhHVsLtKg4q67HfmXNkXYwHfd1duxc8mhG244RNzwsOTDbXC7ZEmovy2XoeLl72KOoF67268j6Geqhai3DSdUKwueHWgU9iLkm5Eqb7wHEPo+vtF/+QC7nxEGFnoH5nPPKJO5xe4W8n2AjszXLf4ih9AtUU9Cn0ntStg5zHfN0T0izWQpUuzLoy63wRn4NXgrG78Cv193tRVGOdTLPnMOx8CUVHs5lMuiTHfbVQ9URVFNDebm4C7QTH4mvgSdRTAkByoQW7UdTAnk87BCKHbYOUG7OuvpH4fPXfnjQW1FeE1txc2d0goQHoWLcAq9ScjyXA7vCbG9+iHTZ75Bja/AYEs5YWnpwo5MSpJ1y+jVJ5Xhtak81lbHT+7IaAgsU+2WKBUFJMxc+TbS4b3CfJyj37ZYJCjekd9M6TiobMrXV6rdUp0VxM3d2yPmJQ1Rk38Gfmdl8IwwF+RvmpcXb5FhlOSo4kpDEyO2SEFdPrj92Pie/RNjFp4sKyUGNpJo/oL87PmgVZncpjBl82HWz4O61sB33YFBVr20jGRLlIEM3bJUbuZdScTJEQoQ0vRzh8Rh08mNlDOEc1aJ7Tv8BRvTMWGO6dSc9ATEM7vVXjSKTnnAWbl+/aN4yEmb7wnHLJbrAcPbG2IcjjpmwxlFsLLIA09p765Pz4VMmXzmyNrO+dKCKdnTY42DZCKkMiJxCRjQXFYGHnSnT7OHT+xPVzLSlrHq1G8u3jKcpg9PNI9wn9jGJP4MvE+YZiOt9vPQ8SDHa+tePXCzWupn6uqb83hQPvbC5twtEkXu3BY/4LvnKqSVyKxvObel7hIr8CRPnSLPOHNo6zYNQPeCbJjPBRgAaQcWVg83LAVRX/NPMPvlmU/IzH6V2H710aKJulU9bHrdbDqn3t/XaHb5XbsrWLvZSyrm775lpab0DKfKq2G4siq5SmtrtdjaduPO+o4hUQZnWXc0PLP1S0efVyAv6pnN2UBGMqMgOVLomJ28fffCLbuJJz615oogHxI6/gufYpYbEWpM1snRXLxybfc2XXiGJOLD2AXazSUlrCWqdKWk31RVctNZCqr+yh8RrWNLi34MsK4WHJ/b91DK3DZXfqsyPEwSs9WUBu8FdOstVHdMCur08pyGRVH21GBs9obtpdGVOzLOm8anFKimSmxsywLAu9GT4vqcSSVGmDgJwkevP7LVTuDE89nVKbziVXm+cVCMO4l1amUydLKBm0Vq04TtW3muZ+v2xQWe1Nv4JVNxycJiu0VceKmjybmqOz4nJrwoyIS2hMekXDaumdz4006SjxguTwJGoiyIQvZKGi7DzzKmuV84y3Z+nnBw38663N/Vj9qbyifKhAndPanGLtmKarUYLPqVszE5iT+rfLO/3N3tp4M1UD+JsHRhz2TFUKbGy9NpP22JCCTqR+f2jQ4rkmtRDFbe353acvDWXcniM3cOz2PJ8UgEuD4yPDN7YBbku0spK8q19rXOKMgOwN1xyqMkVcj62RQFkMtT287YWJWdNCAASd+xtLKuSdsr01vrkpwdToxplbGRmVqlOjPzN0CtKBv5xeEMwZGb4DEqCRBHxQ42jsMa8Iho169BEp8p0z3xg6ATHQOGw5WMvc1CvWtStLIJUpC5zVQyFyIMLEh+sbM95ocgZvLtYYMi3vrpqJLW4KMDXDl7uoLQUe9w1nuIh0pvV+zu+3EmMekm1FOneDPlscJzyJ9AFwQt3lGqRNft3IuddVy3QjGGxoEb/nopEZZLUbL4HMV46batYQhnTzsiWl6Kne71IZqOcvkgzOc34riIgC7FWxive13HzWgcrRl4KpNAjZFlZohyCSCWoCMAkySIOtHaanaxpr+O7IVvXDvSaAGOJQqTpR+PsnIxRacNDHv3hKEoaqbnJ/QnMvGwe2Z/bcGmkInlGyvkL780HxJAVsNq/dTHQM52Nlr+6O+DbXtRmLbMZIGPtiEAfIeN9hE22nvyvZVKn5dTzj7DKOqcddh5uxqTcNoP4lL1Gm7SdY0oYJQePL5CeeKTOCcPikV3zVlStyzGZ28NLU+f0ZIcqYoFzssvPVFiEV4o8jMka9J8i2iSCIsrcD5ensSUnDmEs905ZNzUPaM53wFYNUuyXCysxrwcya1uut/ChgSipEmPPrq0wPStM32/wvQtMn2D6/bAOkv2zsZd10XqAzO70vcrlIQbzw8xVb+PjUC8e6XYG4hT6YwiZzl9Zk4rM8te+QcBUALeFa+AUjjOm4R9G7Jbd4hWbChurn5RFguZQTz1WAfHkH/8wvMjO3hZZCccx8VONDpCDFwvziXJ6PJwGFEAh13/f4aSoYgoTrEqXd+wjsyQW5IngyOes09rInHyU3g0GdWk5z4zvsxirized3HUsOZHyMmjj9fWww+m9wrTO1K7FubRFdX/NYjR7KIOQw4WeQBLq7cP8AKr1+NFjDDwYia4HOCxq5FCUq9HihzDlwh4tDbY3PolNreGwhCL1nzSuLqytpfTib0c97A9RsD7tx+YHbnooeTsk21zsXHIQUiHbbvbzd1rc9mWmYUHV4P6A7a7MHXWQ6XGJXvIXr84f/jG9vKpYjTR4XBl+At4tzAhLLBnt6dLKhpYLGBz+WYRuI2Caw2Er2JxHXMp7RedcjljWzqfzuEpZbOFfmAThYvNRX1Myse2dhjbTSrKHz/RN9DXgH7/JgaHhNKVMioyecfirHV7MoE7nKld69AmjnGD4s5+EXij1KvT9rskpdnkuVFCSnccRKa0sym7icAiHRj4SgcFkLyw4+AdBhw51LTkpZwC+ZuV1t4vHn9QgVGiua5qXf7MINxPnyLjdxyQUytHkLHsZKOZs/QAR7iEAPDHTOI688eKxv0xh31mWyZon5VwytznJV0A6E96n0SdteCOs6sJkgm8lATjQbWGYcsqcYONX42ic7OzUQSPAAEsEqoQd8e4qTNy6olY83ZPkq0rDIl4eKV0iID/w3c6mdf9OrwvrjhYtIHX1vAw6C3AuEHjhPnmPez+FvYgqRp0L7H2XuK1h78hSE8rRrvXgpP56i0ooyymFaCq3d3IjlwAz5tt5lNGYvpM7rCDsHV6965pGURRn2B9qJIMZEKjtcXI0TVdLuwZz4+wq8xjVA/XZrFOGb2WNUv3DcWmtpJblR1Z9afqaYxJ4OHlpsuMIdnb+W4f0/aX0Ziw0EPD4T696icnY77YJftcsX7lrR91nQZ+KGmf374wXCYwO01cUIyzQG3f5qTi0X6R7ROeAHRhUQNFfo8RbD06XF4h99wuyllHk2t1Q+FsYnZ2c23tk+/AWw+6VObodeU7SGZVf22OXgqXs0P8q/287mYmFAWxZIM5vC96iGRO/w2szG5jwIX67EcSQV7Zl4xbeKwyyVfDSkZBxMGp3Vb1yc/qch5Jk171ytyslj16G/BYZGIzjmFwj77yGPwDk7HJMw1xxjeM7RSnEGmpVK52tmSuzffGGbZBhve3wjCVarSQ4quqqaq+glqNVDLy8ZEjce7XCyYng8Rk4MeJXXiEgwK87vWSiwGwK73+dUAZqUDdtO5LX7qy/6WDTK7NZHyMyXiWybiLQH+t3ecMQWynVrvz/6AgmdedNGOm3OUV3SilPiEDJGb3oiTgLYRryxsqrdAOpBtvIDF2SDgPIIYykiLPpboskQQ7z9AYYMjr4z3WTBYRXfZCdiMlBICETIN0wiWWlaFw3gl4mjMmEqnCzwYYtMKhlCiboqTT4MYhGSEiTrx5ROz04VuuDsDr3ihpRETUSZ5LUCpK2UuGKYOi3XTz6wA4GsWV8l27jMarpKjd4GC+ORnFVCuFceIzGlCGWjNmXeEmFsADpt3i7YPd2H5G9dP1GZpzyQ1HenHBzTIzC7lUu1SI6+ffHBqeNmHSfB5TzwzebCiEqNtazShdYz06pWpHDnOqxuxxbscOEMuMg23Ofm3dikZKu6FbYy9nfRvBNl+dmQFkBTE5MCyJ7NkDuaFt/eq1bl6VWyN1JRN7Mt9n39pZa/Ds6HVVLpTFWS8F3uiyzJ61GBqiuFP/paCAGTCMd9n+or7dTqeiCHq1LdR1EVKknUTUtgeebIdvHFgnkQL8EjSyOwjLM9kwyLlIRLSRlJIAL3h0vBOV/U1mAEIi9WdKWJv/deDbpepmuyB742Z8MSnXK1E2HYiYPWNJWecalwSArzKN+eqq2M+j8reGW73C9usTqTjwTaYjiTOpm3nJnCkDMDGjy+GnlE3bS9hLFYcmgp9HisgaAAgqbmi/rygJt5dKxWZAKZaY7tFfhkGmUwM/M8OTqVgkRKOqKlKx+FdauqjGiNloYoNwDWosz/lV9J44E1zlkY27NaFM6mnU5ML3JzGuFC8S5R+1fuhTymWnsRZRCG9Lux4ujGRv8xGI1j6phVSMEFZRS9pnieC/ks89sqLImTstQNqILI9oCAy+cqUIJHunevESzisggqhi18EqOwAlTy5eOk5BUUYUJX/xPJlKYJKYlM9dKDAd/oBlV0eZDgrTgfZrTxw+f/4BfyFNUiZ09OpU6vI48ZKs/2xX512s/1A/e8pdks/Dtf6GsIn4JOzTGIn7O1E1XibLTdCxS3PwUs9OqVjNLqwoAPohMZtCrsjUTmXFAyYA8m/LjGQMyhW/3RK54pLENBet2zPMGgS9iymvTI6UXlgaVhACkrUpUx0hZYg1qTttnhdXAl9W0vjCOXkyQZCYmCLnL0ppRfYDhfB3KYX74d2AhTLfp+rZoVuYzA+CWI8O5SjHQrPx/LSKyxlDsmZsQ1JNA6Kt42Op+FyXNH6+DCIa9cZt0zS1aKvYP1wUkHArovA6tjLWhSzjj0lfuaqmmz+kSyY7pdvsvHJrJvLxcDak7Y9GNsIAeiI3R8MsaoYJ0Ep+aspJihy+w6n0f8kT3g1/D7eg2wRDSLAneOa1T2B2imqdN26IH767VqgmnFphJHJusBMJ006l0FSmmHDcTDHpaLap23bK5pH1qisT8A6hFr/xkopz/lNo88tr1SlxsLrOo8HK4B0qJQo1h1byw8MpVZMJiDb2LNkG0OYCGYV3ZeY/h7Fl+DJFAFR2bA+BSPViWbQwEtVQk9xxO+nIO3WpV4X3CYZSGS5JjMv/VMZk9+MnSir/SHpEgE5+hN1/kueYklzTf01C5MK/JA1y/F+S/fiv3xU5B++HN6Ot8fsSTj/iuqv/zSVIrXtVha4sLS1Rg0qGpTzXfSG2dNRWE1EUyWJODbE0OSXiUMnx++5h8+gH2X1NvtsidCrWqoNJ9IyuAquBeJ1CaAj/gE2nSBDFtpbh+y8fYDU+P4zOD95T9UqDJUjvvao/sDxLeTEoohvqirh3N/zhkO1RMgooYWtsDMKI3el+dqe97E4uZ6YYNv8sQZ/s3++aIIs/iNn91N17xQDNW6EE45h69lAUdqp7D8I34RfR+dj/cMxwaxyKxlHHNt1q8FqHPMIPV1B5+Lhnrq4mXc9PE9FwX+kaDEoJOl8adl018JKuKVoSktgfXRT/FbtT/3nRfgt8Bt6Nzv9HYy86+/jY+394FutVks4wvdJdva6vxunTj8etI/30pzaX4nx1uMyXCZduTtPrqkivqcSJ2T/C15SQMr8px78Pcxfzmirzm3LWFrnf1GsxQY9Cl5u6wA3oxvszzcpsTIvqTLw/wdiiWaQSCuIbbLRxCtlvEJUmiEy5ndI3YWQLuhOASkSSLn/cUmUAWbVQXbLukyzAovXo3yroZV8UxE31juPCQbbLsWUq7+sgPn7NY68ij/8UAd/yjJNytLd7U+vVvwa9l0RKvZ3Sa6sik/3ivKlGdTIpi/zw3djzfUVBipwIDJmaQULunFjXVUwqg+K8UB+amEgd4CV7bzAUYCZGiFL29Qum3DuRTeYDOb6uYtbeznzA3VxvUmu2XDdeYXacwnWDsJtRKXdRjsVubIEq14iboDvjNHhtiePC3LwouxjbNBdIaGEOXFt2wh+LFJr0dFdqAjQlV/eSVAm7VSQIAICNIQaTShvf2dgAFFdUKhlPlQFB47DznSoBMrzhHG4Aind9VYGNV5Fp8efxju5e4SIbrxP7mpOGIPKaLtEPfb/3mn+zWeTGv/5lZbFTjxm38DmaXetFQplHAQ1Za/HqF+S7Uxt8WpRFLCLKq+02+m/OitQgOEgPV6ajXVHFkRCSnEr0kk2H90cOlPpvz583iQjERucRQVgimqay6JdlxZZlu7PKYEtwU4SNd3iarOMTWJc1D+PNJz8JZqDxF+x5hGH2eJ2UhiRDFja9H7H9X/p+xOO/B+Fsbr+mDPO3f+vf89LD9W84sC6DNq7DCNPhD5gOy0yHWrwH8Y8XEcbwTGl9U1avM2rxmHHPHUEBJn6mXJ0KP7IZw75RKGxHBD/jrxEdrPs27gkR+sEfQWg1LV9dU9ho3C4Z+pdKOZPG672HmOGVQMboMSx9g6NshUn9R+jOWOqq1p3bOSD0fwilB67xRjOhQWcUyt1ERbPCt8r5JY44laVJpTmtAoZoT33NwV7SQsj2FV7IBC2+zfJLfJelieQh4uJABLtmw1/Nrsk7liWfXFhvJBRkRIW8aB0vP/KTm/dffvIR6anMDvpsZBg8pkaZ3L/PrH1QOCXczmLqwpkTN8wQFlNut7q6v9UV1CO+q9svNykxl2GN/a0vrkS5zPSr9GKGcxveWI2a/X3eeApnNog3SWMQfWnIBihRtC7Eu165HEIIo7nTBkLGqXl2iNBSfOWjoWIssjMJzccXT8+zQ4Ry2UXkzSsKdeZUCV1gf5G74FInfo2ktyN2CkBeHlEsWx5dlgFO9ffGHJPya0tjsm0po0v8GvzRQlLVdFVNqeK94sJi0jfYMffMYZ4rZ7Y6ycZ4Z8DHmI2vHwZhrBVzx0F8dTOznSIInrIb/PhUr5TxWgfowFUnXcf67x8qEqZKwpEgnQpDOHOKD3s6DaKbcBEixaFIVgxeuu0XDioYbfYKrBws+BxnHR1Z8NVcCaXVyZqtvuIVHa7fcQh4xStUe3ZKTaNSDmTFd21s+SuVHb54ZrPHnBH9HZWVpEix7QcWt0NBAPgL5uvHmR0KCK75Zan+z4xsaip39vP6a7XNxc85FPX7xJy8xpC5n+wfeebxZHrPRUkeT6uq7w05Co2DeM8ekyCb8UZV2TKrG83dqqioGde2u1dtAkhJln1PVdOzGOD7jz4bW/fdkIga51ZyzLLaUPwDJTzAsS45+V1TEzurQ7n2PgWtzhhObqi6c3J8R9HhHYg9XMH+kMaMnlu5Z5kK/xVVWf+pv0n1WTgA84wPBOzOZn8EuyJ3OQ/789lsmLclQsQOgeOpL7QUZrOyoZ85nugQjMTxG4X49yieAr8jfFOYEgQcT5vV5hJqsZLwHjLXQp/PrayRtbV54jre7ITfkY2N/2cRAEAiKIamSCDCFhARUhIKwvCAI1Hzzbe4yUDXsAQIFEXyCkN/9EduwtdkzLmwgqQJpyj8f5syDjQAAAEAAACCAHwABQAAAAAAAgAAABgAjQAAACAODAAAAAAAAAASABIAEgASAEMAgwEoAbkCQALbAwgDPwNzBAYEOARlBHsElAS7BPsFOwWTBgkGXwbIBzMHdwfjCEkIcwiuCN4JBgk0CYgJ8wplCtkLJwtqC9wMQgyuDS4Naw2zDiMOcQ7rD10Pow/7EGoQ9xF0EccSLRKRExITkRP6FFgUixSyFNoVExUoFVoVxBYdFmQWuhcLF2IX7xhQGJEY5hleGZMaDxpoGqYa/htXG6McGhxuHMAdEh2eHiUenh7/H2EfeR/lIB4gTyBPIIAgrCDxISEhZSGeIcoh6CINIjEiYiJ3IqMi3CNII5Mj1SRKJK0lPiWgJfsmVybtJ3En8yglKFIoeyi+AAAAAQAAAAEAAJq59PJfDzz1AA8D6AAAAAAAAAAAAAAAAAAAAAD/9P8bAiECtgAAAAgAAgAAAAAAAHjaHcszQjUAAADg72H7kW3btq3xjRkHaOoq7S1ZB3jtGSfoCC1Z3/55UQ+BKYL/cGFDoXYFMu3bEjGo2I42Ue3KLWpUKUujKpWqVIva16ZYm26VMsUpFStBsmKxRrWJl+avRK0StIrVKP3zXYK/MiWq9aBdmTltDtQK65ejVoEsYaNq/dPw+SSsUVi+VKPShKWKlSVdvnqP6kSsYc2pzd81Z8GYM+tmtDkVUSdNgVbZ8sQqVaxMkVwH9t2q/AKRqCRgAAB42mNgZGBg2vZfmiGKiff/l/9vmBSBIqiABQCcQwZDAHjaY2Bi4mWcwMDKwMDUxbSHgYGhB0IzPmAwZGRiQAINDAzvBRjevIXxA9JcUxgcGBRUlJkV/lswRDFtY3iqwMDQH8cM1L2eKRmoRIGBEQDRyg/SAHjaVEo1YoJRDM6fdO5S32pr3Y7XO9TdXXGfcFlxl2vkER4O0c8AAPWS3ml9jc6fgKj+67Co0SQcwgN8gAlcxhYeYAQTmMcSndAFXdMdPdAzvdHn4sLi9uqKCAAsjuXDGMMsFul4JP9KH4vz3bw0JCA+scuf7De31LN6UmfqlKtc4gLnOMtpTnFrVx6kPfC7Ewd0HUkAALb9QmgAAHjarFbXettMDh2quVeVFKaAmcjrNYeK090Lx7Q23fX7yK2kJed+9yrPwH0ZUOl3+2gLkJJ7+ZtVMIMywDnA0EKhAMW+7wUAb36I0e03WNr9q4/PTJwOwo8Q7/uYq0c/+0W/aLXkgWlZKAIUWm50hCF06DpoKITwo4M5JS1pOZhX0P6cr1SFq7GsIQzdJFfRblLPa8zpvU+Aw5IWOmpjYetTJ5fL0TFoHd6xWNsZrRruHaCldDtlo0w2iWLLPww6NYM9HSwozNtY1T7nw5rWXQcT2oD/28LC1F8708aI9loeljzfwnw92PmbT85m7ANubZFqjbxxjldzQQBJ5k0VTZOquwOcZfssedKpPhAbcQQ4uOWHpAG2DfLqBa9ehGYYBIFJbOGwbqHY8VG8YWeL9uYbvMere2+iH+OixR4/iuIgCNpRgIYdBF0EAbQJj3QDB4sKqIJCPSJMfXrLxz7pYr90qQMUEjpYSukmJqCd9B24wEaGa2bl8zfmQq+FxRmLjBpiiClXMlusE0PbfrhlRjuBLwMrAFzb9clmEi+9UhzsUzig7Y7IZW3up610JaCQboS5g49otKgQ7JtxcEABVztKsAriAPgEXAsDdgk30moHVWdgVGjPnbGOBmdInR6k4ewUw5akJ+gheLGMoN0lW5jcEAQT144Io9bKaCNLMXJJOD6kKEFRFwWNqhTQ55FhkfcoiymtYIaGeEwluZyH7WjDwXFFrgA4pl/zAbSgDuE473ZoN572a0LRKiUFiIMWZcYJHUIcAk4QbQ5Oqjd7flJobwQPceRQfnKwrN5s+292M6Vpkb6c6isqEZN6308mJzUakYsTdsCQcnU3GeOvcfpCoyaBkGz5CdNHeN04Bk47PmNJCuutzcxOIfRJNQEhaVL9TdKebtYlLUyEKEviS6NY6RiGkXarqkQict6ej5PSBQ9HpYsjkkbOhfD7zZuGmBBl4bouM1AhmxEllX4b/2ubD4iuGmGs2g7eUInB8ibxzfKWSvIsb6ukwNJUSZHlHZWUWN5VSR/LeyrpZ3lfJQMsbSV7/GMpJKYlNND4B98WB9UJY+3I+O/M6JwwTh0Z/5MZQQkcsy/FSaC+ZlAZ50l8FuEDqusB4WMpCR/Lh4SPZZ3wsZwifCz/RPhYThM+ln8mfCxnCB/LhoKldGAfKUp7MwQtaau5pSSxwTM7q/CRjY/oPj5WAE24pJsympP8YL/Sw2T0T3otTkZLHk8cPp5JikbV82eDFOXTjJ4rfZ4peJ5W/lyJro93PicaNtVysV7Uvgj+21iRc8kzo8pYXxAf0LykfhQ6mnPwpWrcWHJw7jpXNHSL3OepRaJWhwY0UUi+La/iuCmbMgL/gPhAQ7qdOcOoVojhBUVl4Q1yK9Tpnbolw8LFIW0fxg0JsBTTmYun3aCRnYcl6fa8AUN+pqxt+58LUATzc2GqeDtwXQk4qCGWaYTcDLGkz17XEIie7L9SQYdtiUUdtclc0JFJ65CfdGdjIgnkPSU3qceSMmwSThJplhAuSiI5iyRLSBKL9Yg+Z53oRC6izkXk6bv7JD3ORYOw1OMCSFuc6nIhl4im5Z6JMKf2TdnkpNzFlZ4tBZMxjWLPb8CStEzS9JR06FErsFSn3auTv12yJl407d1uSR751ROV6F67Qv6BcxZyr8VrSkKDWdzEG9rfMncCH5aCRjJrVOjerp+y7phbp6zuhbFXRWiFC/ZVCTcULtox1cYzRqAudaWGNnCWIjyGnM7nVMZ8hMPSzaDzgEpYgoac656/qZLBQt2lkN8y0s0/aooZU0ToliQ9qk7MixV062yqRCzYPVb+QrtF25JdXuTcaQpeEQXV7Np3BN/wcgNf0C1/fYn+DR1nVMr4ktZvFc6TeMcsekQ3bMYy6rH1XvFA4/97rou02KEggMK3nqBLYMqMsALc3bVxa9y1cffFtG2QOlUhs//mO3EfUA5FhRA6FcMKASNRQQIYVQgYo+lSjNOACRowSQOmomIIoU01rRJTKiqKT5tRiWmWTtAcnWmezrRAZ1pknR2KJYWAZdYJVhQCVmm6FWs0IE0D1mnABusL7apNlZi2WJ9pWyWmHTpBu3SmPTrTPp3pQI9xfXICD22Ua1YeOVuUxxx0G7Xq6CTKS9ycQm/OrJG4OdeZG5KlXjDyOTLQ57iEnl/pcuLgGnpwAz241bYxWd4dI8/voecP0PNHnTMOnqAHz9CDF22bkuW9MvL8DXr+Dj3/0Dnj4BN68AU9+I4KlfZlmyupKvz787dDf5r0MZhqrcmVpXN/q4czvy/r2h9jTAFHeNpi8N7BcAJQozQcOBCG0TfWGpfFaZk0Ef0FxDjPFJAOYqOWMXsLRh+fmn2Doo4DnQpEiFCHBoSq9Q8axRg57+I9S8sp/uFf6QRL1UgAi2tIuTKlGqF87ZgFYABifFPrRl8vr/sx14jxH3NfRCqADN6Nv1gKxTEotrxW27kRl/MpPrL0XdGnzgudPRg0iMVpPAi5AKHCK5B42mPADSQgkCmZgZFJlIGBKe//NxDNEAKEPgw+YPFkxvUMjP+VwfIp/78ypTDu+P/rvwyIDwBTtg3zAAB42mJgYOBkKGJgZmBk4QSyFwExhM3IoADkQdhMDHwMhyBsIBnAcAHKZmEwYFSAslkZnBgDoGw2JHFepgLGSVA2H4MJCxOgVbJQkRiAgejgsF9R9Nzd3d0PPdZd639/j7B2roQ00zCdhEm1o7oaiplaVF4FeUwaVFpD1GlNEksaMzRFOtpVVq5xa7zdwCzSqVGzGqVzZHhcia+U0ZvtKi/SO4GTNNUtWEllUKzy/Qn4FvyoJ2qsBjg0VU9Z6jXPvHxVlORtn6k1eVZb9LM2bdx2Xya/Uht7qfdj/r11ccj2cDSlcXIF5BE5OD61rgKMWtuTwFiL5IyGfniR0R/cBB2tKrQYx9ukPPRL1Ejjbb/WNfSPt3s5sdxmJfs5LyaPKgGzaHs55qxrfgY8M3Ta1wWdo1Cl+/VF+ReJW3PcfaFxA8qBQrscWm1GhYp3sNz2XF81KmpgdjPuDb6eUi9sYu2F8ukLBW7wwX8x/mKzl3MdJRWQRfuzUjzp9bmTtIlbujLsaRktLkU0wBOEixo+8O6Bx0m0un5PsPm+Tn/zzTPxdLtOAAB42mzB02EkABQAwHlr62zbe1Zs22wl+5/yYlaSNJAZCeCipekqWwgJSSlpGVk5eQVFJWUVVTV1Dddcd8NNt9x2x1333PfAQ4889sRTzzz3wkuvvPbGW++898FHn3z2RdNX33z3w0+//PbHX//816Zdh05duvXo1affgEFDho0YNWbchElTps2YNWfegkVLlq1YtWbdhs1IRNK2lhO7kbLnPNKRiaxDR47tO41c5KMQxShFOSpRjVrUo+Fy2xi2MwozirCX5mUaGJi7QWhHAzBtZGwOoZ0tobQjlHZidU/MzU0E84wtTVhDMlJLEtl8EnOTUhKZIjKZAjJZgzPTgQpCC4ozc/LzmAMyMpkDijMhGhwt2XIz80pLUkFcIxMjYwAA/0ToAAEAAf//AA8\,\title\:\$:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff\,\type\:\font/woff\},\$:/plugins/tiddlywiki/katex/katex-logo\:{\title\:\$:/plugins/tiddlywiki/katex/katex-logo\,\text\:\$$\\\\KaTeX$$\\n\},\$:/plugins/tiddlywiki/katex/latex-parser.js\:{\title\:\$:/plugins/tiddlywiki/katex/latex-parser.js\,\text\:\/*\\\\\\ntitle: $:/plugins/tiddlywiki/katex/latex-parser.js\\ntype: application/javascript\\nmodule-type: wikirule\\n\\nWiki text inline rule for LaTeX. For example:\\n\\n```\\n\\t$$latex-goes-here$$\\n```\\n\\nThis wikiparser can be modified using the rules eg:\\n\\n```\\n\\\\rules except latex-parser \\n\\\\rules only latex-parser \\n```\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nexports.name \\\latex-parser\\\;\\nexports.types {inline: true};\\n\\nexports.init function(parser) {\\n\\tthis.parser parser;\\n\\t// Regexp to match\\n\\tthis.matchRegExp /\\\\$\\\\$(?!\\\\$)/mg;\\n};\\n\\nexports.parse function() {\\n\\t// Move past the match\\n\\tthis.parser.pos this.matchRegExp.lastIndex;\\n\\tvar reEnd /\\\\$\\\\$/mg;\\n\\t// Look for the end marker\\n\\treEnd.lastIndex this.parser.pos;\\n\\tvar match reEnd.exec(this.parser.source),\\n\\t\\ttext,\\n\\t\\tdisplayMode;\\n\\t// Process the text\\n\\tif(match) {\\n\\t\\ttext this.parser.source.substring(this.parser.pos,match.index);\\n\\t\\tdisplayMode text.indexOf(\\\\n) ! -1;\\n\\t\\tthis.parser.pos match.index + match0.length;\\n\\t} else {\\n\\t\\ttext this.parser.source.substr(this.parser.pos);\\n\\t\\tdisplayMode false;\\n\\t\\tthis.parser.pos this.parser.sourceLength;\\n\\t}\\n\\treturn {\\n\\t\\ttype: \\\latex\\\,\\n\\t\\tattributes: {\\n\\t\\t\\ttext: {\\n\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\tvalue: text\\n\\t\\t\\t},\\n\\t\\t\\tdisplayMode: {\\n\\t\\t\\t\\ttype: \\\text\\\,\\n\\t\\t\\t\\tvalue: displayMode ? \\\true\\\ : \\\false\\\\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n};\\n\,\type\:\application/javascript\,\module-type\:\wikirule\},\$:/plugins/tiddlywiki/katex/readme\:{\title\:\$:/plugins/tiddlywiki/katex/readme\,\text\:\This is a TiddlyWiki plugin for mathematical and chemical typesetting based on extKaTeX from Khan Academy|https://katex.org/ (v0.16) and extmhchem|https://github.com/mhchem/MathJax-mhchem through a extKatex extension|https://github.com/KaTeX/KaTeX/tree/master/contrib/mhchem.\\n\\nIt is completely self-contained, and doesnt need an Internet connection in order to work. It works both in the browser and under Node.js.\\n\\nSource code|https://github.com/TiddlyWiki/TiddlyWiki5/blob/master/plugins/tiddlywiki/katex\\n\},\$:/plugins/tiddlywiki/katex/snippets/logo\:{\title\:\$:/plugins/tiddlywiki/katex/snippets/logo\,\tags\:\$:/tags/KaTeX/Snippet\,\caption\:\KaTeX Logo\,\description\:\Display a Logo of KaTeX\,\preview\:\$$\\\\KaTeX$$\,\icon\:\$:/plugins/tiddlywiki/katex/katex-logo\,\text\:\$$\\\\KaTeX$$\\n\},\$:/plugins/tiddlywiki/katex/snippets/math\:{\title\:\$:/plugins/tiddlywiki/katex/snippets/math\,\tags\:\$:/tags/KaTeX/Snippet\,\caption\:\KaTeX mathematical formula\,\description\:\create a math block\,\preview\:\$$i \\\\sqrt{-1}$$\,\icon\:\$:/plugins/tiddlywiki/katex/katex-logo\,\text\:\$$\\\\KaTeX$$\\n\},\$:/plugins/tiddlywiki/katex/styles\:{\title\:\$:/plugins/tiddlywiki/katex/styles\,\tags\:\$:/tags/Stylesheet\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n/* KaTeX styles */\\n\\n{{$:/plugins/tiddlywiki/katex/katex.min.css}}\\n\\n/* Force text-rendering (see https://github.com/TiddlyWiki/TiddlyWiki5/issues/2500) */\\n\\n.katex {\\n text-rendering: auto;\\n}\\n\\n/* Reset Automatic Numbering on a per tiddler basis */\\n\\n.tc-tiddler-frame {\\n\\tcounter-reset: katexEqnNo;\\n}\\n\\n/* Avoid TW5s max-width: 100% */\\n\\n.katex svg {\\n\\tmax-width: initial;\\n}\\n\\n/* Override font URLs */\\n\\n@font-face {\\n\\tfont-family: KaTeX_AMS;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_AMS-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Caligraphic;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Bold.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Caligraphic;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Caligraphic-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Fraktur;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Bold.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Fraktur;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Fraktur-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Bold.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-BoldItalic.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Italic.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Main;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Main-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Math;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-BoldItalic.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Math;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Math-Italic.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Bold.woff>>) format(woff);\\n\\tfont-weight: 700;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Italic.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: italic;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_SansSerif;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_SansSerif-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Script;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Script-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size1;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Size1-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size2;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Size2-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size3;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Size3-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Size4;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Size4-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n@font-face {\\n\\tfont-family: KaTeX_Typewriter;\\n\\tsrc: url(\u003C\u003Cdatauri $:/plugins/tiddlywiki/katex/fonts/KaTeX_Typewriter-Regular.woff>>) format(woff);\\n\\tfont-weight: 400;\\n\\tfont-style: normal;\\n}\\n\\n\},\$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\:{\title\:\$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\,\text\:\\\\\define toolbar-button-stamp-inner()\\n\u003C$button tag\\\a\\\>\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\replace-selection\\\\\n\\ttext{{$(snippetTitle)$}}\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003C$view tiddler\u003C\u003CsnippetTitle>> field\\\caption\\\ mode\\\inline\\\>\\n\\n\u003C$transclude tiddler\u003C\u003CsnippetTitle>> mode\\\inline\\\/>\\n\\n\u003C/$view>\\n\\n\u003C/$button>\\n\\\\end\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/KaTeX/Snippet!hasdraft.ofsortcaption\\\ variable\\\snippetTitle\\\>\\n\\n\u003C\u003Ctoolbar-button-stamp-inner>>\\n\\n\u003C/$list>\\n\\n----\\n\\n\u003C$button tag\\\a\\\>\\n\\n\u003C$action-sendmessage\\n\\t$message\\\tm-new-tiddler\\\\\n\\ttags\\\$:/tags/KaTeX/Snippet\\\\\n\\ttext\\\\\\\\\$$snippet$$\\\\\\\\\\\n\\tcaption\\\description shown in dropdown\\\\\n/>\\n\\n\u003C$action-deletetiddler\\n\\t$tiddler\u003C\u003Cdropdown-state>>\\n/>\\n\\n\u003Cem>\\n\\n\u003C$text text{{$:/language/Buttons/Stamp/Caption/New}}/>\\n\\n\u003C/em>\\n\\n\u003C/$button>\\n\\nextKaTeX functions catalogue|https://khan.github.io/KaTeX/function-support.html\\n\\nextChemical equations reference|https://mhchem.github.io/MathJax-mhchem/\\n\},\$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex\:{\title\:\$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex\,\tags\:\$:/tags/EditorToolbar\,\icon\:\$:/plugins/tiddlywiki/katex/katex-logo\,\caption\:\katex\,\description\:\create and insert preconfigured KaTeX snippets\,\condition\:\\u003CtargetTiddler>!isimage\,\dropdown\:\$:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex-dropdown\,\text\:\\},\$:/plugins/tiddlywiki/katex/ui/config/macro\:{\title\:\$:/plugins/tiddlywiki/katex/ui/config/macro\,\tags\:\$:/tags/KaTeX/Config\,\caption\:\Custom macro editor\,\text\:\\\\\define katex-escape(text)\\n\u003C$vars t$text$>\\n\u003C$latex text{{{\u003Ct>search-replace:g:regexp(?\u003C!\\\\\\\\)#(\\\\d),{\\\\#_$1}}}}>\\n\u003C/$vars>\\n\\\\end\\n\\n\\\\define katex-create-macro()\\n\u003C$vars loc{{$:/temp/katex/new-macro-name}}>\\n\u003C$action-createtiddler $basetitle{{{\u003Cloc>addprefix$:/plugins/tiddlywiki/katex/macros/}}} tags\\\$:/tags/KaTeX/Macro\\\ type\\\text/plain\\\ caption{{$:/temp/katex/new-macro-name}} text{{$:/temp/katex/new-macro-command}} $overwriteyes/>\\n\u003C/$vars>\\n\\\\end\\n\\n\\\\define katex-edit-cell()\\n\u003C$reveal state\\\$:/temp/katex/edit-macro\\\ typematch text{{!!title}}>\\n\u003C$edit-text tiddler\u003C\u003CcurrentTiddler>> tag\\\input\\\ default\\\\\\/>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define katex-view-cell()\\n\u003C$reveal state\\\$:/temp/katex/edit-macro\\\ typenomatch text{{!!title}}>\\n\u003Ctt>\u003C$view fieldtext/>\u003C/tt>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define katex-edit-macro-button()\\n\u003C$reveal state\\\$:/temp/katex/edit-macro\\\ typenomatch text{{!!title}}>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\>\\n\u003C$action-setfield $tiddler\\\$:/temp/katex/edit-macro\\\ text{{!!title}}/>\\n{{$:/core/images/edit-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define katex-save-macro-button()\\n\u003C$reveal state\\\$:/temp/katex/edit-macro\\\ typematch text{{!!title}}>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\>\\n\u003C$action-deletetiddler $tiddler\\\$:/temp/katex/edit-macro\\\/>\\n{{$:/core/images/done-button}}\\n\u003C/$button>\\n\u003C/$reveal>\\n\\\\end\\n\\n\u003Ctable>\\n\u003Ctr>\\n\u003Cth>Macro\u003C/th>\\n\u003Cth>Command\u003C/th>\\n\u003Cth>Preview\u003C/th>\\n\u003Cth>\u003C/th>\\n\u003C/tr>\\n\\n\u003C$list filter\\\allshadows+tiddlerstag$:/tags/KaTeX/Macro!hasdraft.ofsortcaption\\\>\\n\u003Ctr>\\n\u003Ctd>\u003Ctt>\u003C$text text{{!!caption}}/>\u003C/tt>\u003C/td>\\n\u003Ctd>\u003C\u003Ckatex-edit-cell>>\u003C\u003Ckatex-view-cell>>\u003C/td>\\n\u003Ctd>\u003C\u003Ckatex-escape {{!!text}}>>\u003C/td>\\n\u003Ctd>\\n\u003C\u003Ckatex-edit-macro-button>>\\n\u003C\u003Ckatex-save-macro-button>>\\n\u003C$button class\\\tc-btn-invisible tc-btn-dropdown\\\>\\n\u003C$action-deletetiddler $tiddler{{!!title}}/>\\n{{$:/core/images/delete-button}}\\n\u003C/$button>\\n\u003C/td>\\n\u003C/tr>\\n\u003C/$list>\\n\\n\u003Ctr>\\n\u003Ctd colspan\\\4\\\ align\\\left\\\>Add a new macro\u003C/td>\\n\u003C/tr>\\n\u003Ctr>\\n\u003Ctd>\u003C$edit-text tiddler\\\$:/temp/katex/new-macro-name\\\ tag\\\input\\\ default\\\\\\/>\u003C/td>\\n\u003Ctd>\u003C$edit-text tiddler\\\$:/temp/katex/new-macro-command\\\ tag\\\input\\\ default\\\\\\/>\u003C/td>\\n\u003Ctd>\u003C\u003Ckatex-escape {{$:/temp/katex/new-macro-command}}>>\u003C/td>\\n\u003Ctd>\u003C$button actions\u003C\u003Ckatex-create-macro>>>\\n{{$:/language/EditTemplate/Fields/Add/Button}}\\n\u003C/$button>\u003C/td>\\n\u003C/tr>\\n\\n\u003Ctr>\u003Ctd colspan\\\4\\\ align\\\left\\\>\\n\u003Cdetails>\\n\u003Csummary>Import\u003C/summary>\\n\u003C$edit-text tiddler\\\$:/temp/katex/import-macro\\\ tag\\\textarea\\\ default\\\\\\ class\\\tc-edit-texteditor\\\ placeholder\\\You can type commands like \\\\def\\\\ZZ{\\\\mathbb{Z}} and import them automatically.\\\/>\\n\\n\u003C$vars macros{{$:/temp/katex/import-macro}} sep\\\%.*\\\\n|\\\\n+\\\ re\\\^\\\\\\\\g?def(^{*){(.*)}.*\\\>\\n\\n\u003C$button>\\n\u003C$list filter\\\\u003Cmacros>splitregexp\u003Csep>regexp\u003Cre>\\\ variableline>\\n\u003C$vars m{{{\u003Cline>search-replace:g:regexp\u003Cre>,$1}}} c{{{\u003Cline>search-replace:g:regexp\u003Cre>,$2}}}>\\n\u003C$action-createtiddler $basetitle{{{\u003Cm>addprefix$:/plugins/tiddlywiki/katex/macros/}}} tags\\\$:/tags/KaTeX/Macro\\\ type\\\text/plain\\\ caption\u003C\u003Cm>> text\u003C\u003Cc>> $overwriteyes/>\\n\u003C/$vars>\\n\u003C/$list>\\nImport\\n\u003C/$button>\\n\u003C$button>\\n\u003C$action-setfield $tiddler\\\$:/temp/katex/import-macro\\\ text\\\\\\/>\\nClear\\n\u003C/$button>\\n\\nPreview\\n\u003Ctable>\\n\u003C$list filter\\\\u003Cmacros>splitregexp\u003Csep>regexp\u003Cre>\\\ variableline>\\n\u003C$vars m{{{\u003Cline>search-replace:g:regexp\u003Cre>,$1}}} c{{{\u003Cline>search-replace:g:regexp\u003Cre>,$2}}}>\\n\u003Ctr>\\n\u003Ctd>\u003Ctt>\u003C\u003Cm>>\u003C/tt>\u003C/td>\\n\u003Ctd>\u003Ctt>\u003C\u003Cc>>\u003C/tt>\u003C/td>\\n\u003Ctd>\u003C$macrocall $namekatex-escape text\\\\u003C\u003Cc>>\\\/>\u003C/td>\u003C/tr>\\n\u003C/$vars>\\n\u003C/$list>\\n\u003C/table>\\n\\n\u003C/$vars>\\n\u003C/details>\\n\u003C/td>\\n\u003C/tr>\\n\\n\u003Ctr>\u003Ctd colspan\\\4\\\ align\\\left\\\>\\n\u003Cdetails>\\n\u003Csummary>Usage\u003C/summary>\\n\u003Cul>\\n\u003Cli>\\nYou can add entries like `\\\\ZZ`, `\\\\mathbb{Z}`, which will render as \u003C$latex text\\\\\\\mathbb{Z}\\\/>.\\n\u003C/li>\\n\u003Cli>\\nAn entry mapping `\\\\dd#1#2` to `\\\\frac{d#1}{d#2}` will create a macro with two arguments; `\\\\dd{f}{x}` will then render as \u003C$latex text\\\\\\\frac{df}{dx}\\\/>.\\n\u003C/li>\\n\u003Cli>\\nNote that the macros defined here have higher priority than those defined using `\\\\gdef`. Also, deleted macros will continue to exist until a full refresh.\\n\u003C/li>\\n\u003C/ul>\\n\u003C/details>\\n\u003C/td>\\n\u003C/tr>\\n\u003C/table>\\n\},\$:/plugins/tiddlywiki/katex/usage\:{\title\:\$:/plugins/tiddlywiki/katex/usage\,\text\:\!! Reference:\\n\\n# Mathematical typesetting: exthttps://katex.org/docs/supported.html\\n# Chemical typesetting: exthttps://mhchem.github.io/MathJax-mhchem/\\n\\n!! Syntax\\n\\nThe usual way to include ~LaTeX is to use `$$` (when copying code examples from the references above, you will need to change from `$` to `$$`). For example:\\n\\n```\\n$$\\\\displaystyle f(x) \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi$$\\n```\\n\\n$$\\\\displaystyle f(x) \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi$$\\n\\nchemical:\\n\\n```\\n$$\\\\ce{Hg^2+ ->I- HgI2 ->I- Hg^{II}I4^2-}$$\\n```\\n\\n$$\\\\ce{Hg^2+ ->I- HgI2 ->I- Hg^{II}I4^2-}$$\\n\\nSingle line equations will render in inline mode. If there are newlines between the `$$` delimiters, the equations will be rendered in display mode.\\n\\nThe underlying widget can also be used directly, giving more flexibility:\\n\\n```\\n\u003C$latex text\\\f(x) \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi\\\ displayMode\\\true\\\>\u003C/$latex>\\n```\\n\\n\u003C$latex text\\\f(x) \\\\int_{-\\\\infty}^\\\\infty\\\\hat f(\\\\xi)\\\\,e^{2 \\\\pi i \\\\xi x}\\\\,d\\\\xi\\\ displayMode\\\true\\\>\u003C/$latex>\\n\\nThe KaTeX widget is provided under the name `\u003C$latex>` and is also available under the alias `\u003C$katex>`. Its better to use the generic `\u003C$latex>` name unless you are running multiple ~LaTeX plugins and wish to specifically target KaTeX.\\n\\n!! Macro\\n\\nTiddlers with tag `$:/tags/KaTeX/Macro` will be recognized as global KaTeX macros. You can create new macro using the form in the config|$:/plugins/tiddlywiki/katex/config.\\n\},\$:/plugins/tiddlywiki/katex/wrapper.js\:{\title\:\$:/plugins/tiddlywiki/katex/wrapper.js\,\text\:\/*\\\\\\ntitle: $:/plugins/tiddlywiki/katex/wrapper.js\\ntype: application/javascript\\nmodule-type: widget\\n\\nWrapper for `katex.min.js` that provides a `\u003C$latex>` widget. It is also available under the alias `\u003C$katex>`\\n\\n\\\\*/\\n\\n\\\use strict\\\;\\n\\nvar katex require(\\\$:/plugins/tiddlywiki/katex/katex.min.js\\\),\\n chemParse require(\\\$:/plugins/tiddlywiki/katex/mhchem.min.js\\\),\\n\\tWidget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nkatex.macros {};\\nkatex.updateMacros function() {\\n\\tvar tiddlers $tw.wiki.getTiddlersWithTag(\\\$:/tags/KaTeX/Macro\\\),\\n\\t\\tregex /#\\\\d/g, // Remove the arguments like #1#2\\n\\t\\ttid, macro, cmd;\\n\\tfor(var i0; i \u003C tiddlers.length; i++) {\\n\\t\\ttid $tw.wiki.getTiddler(tiddlersi);\\n\\t\\ttry {\\n\\t\\t\\tmacro tid.fields\\\caption\\\;\\n\\t\\t\\tmacro macro.replace(regex, \\\\\\);\\n\\t\\t\\tcmd tid.fields\\\text\\\;\\n\\t\\t\\tkatex.macrosmacro cmd;\\n\\t\\t} catch(ex) {// Catch the bad ones\\n\\t\\t};\\n\\t};\\n};\\n\\nvar KaTeXWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nKaTeXWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nKaTeXWidget.prototype.render function(parent,nextSibling) {\\n\\t// Housekeeping\\n\\tthis.parentDomNode parent;\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n\\t// Get the source text\\n\\tvar text this.getAttribute(\\\text\\\,this.parseTreeNode.text || \\\\\\);\\n\\tvar displayMode this.getAttribute(\\\displayMode\\\,this.parseTreeNode.displayMode || \\\false\\\) \\\true\\\;\\n\\tkatex.updateMacros();\\n\\t// Render it into a span\\n\\tvar span this.document.createElement(\\\span\\\),\\n\\t\\toptions {throwOnError: false, displayMode: displayMode, macros: katex.macros};\\n\\ttry {\\n\\t\\tif(!this.document.isTiddlyWikiFakeDom) {\\n\\t\\t\\tkatex.render(text,span,options);\\n\\t\\t} else {\\n\\t\\t\\tspan.innerHTML katex.renderToString(text,options);\\n\\t\\t}\\n\\t} catch(ex) {\\n\\t\\tspan.className \\\tc-error\\\;\\n\\t\\tspan.textContent ex;\\n\\t}\\n\\t// Insert it into the DOM\\n\\tparent.insertBefore(span,nextSibling);\\n\\tthis.domNodes.push(span);\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nKaTeXWidget.prototype.execute function() {\\n\\t// Nothing to do for a katex widget\\n};\\n\\n/*\\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\\n*/\\nKaTeXWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes.text) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t} else {\\n\\t\\treturn false;\\t\\n\\t}\\n};\\n\\nexports.latex KaTeXWidget;\\nexports.katex KaTeXWidget;\\n\,\type\:\application/javascript\,\module-type\:\widget\}}}},{author:Tobias Beer,core-version:>5.1.9,created:20220505135225785,dependents:,description:Create popups, sliders or accordion menus with the appear widget.,documentation:https://tobibeer.github.io/tw5-appear,list:readme,modified:20220505135225785,plugin-type:plugin,requires:,source:https://github.com/tobibeer/tw5-appear,title:$:/plugins/tobibeer/appear,version:0.6.2,type:application/json,text:{\tiddlers\:{\$:/plugins/tobibeer/appear/defaults/button-class\:{\title\:\$:/plugins/tobibeer/appear/defaults/button-class\,\text\:\tc-btn-invisible tc-tiddlylink\},\$:/plugins/tobibeer/appear/defaults/default-state\:{\title\:\$:/plugins/tobibeer/appear/defaults/default-state\,\text\:\$:/temp/appear/\},\$:/plugins/tobibeer/appear/defaults/keep\:{\title\:\$:/plugins/tobibeer/appear/defaults/keep\,\text\:\yes\},\$:/plugins/tobibeer/appear/defaults/mode\:{\title\:\$:/plugins/tobibeer/appear/defaults/mode\,\text\:\block\},\$:/plugins/tobibeer/appear/defaults/show\:{\title\:\$:/plugins/tobibeer/appear/defaults/show\,\text\:\»\},\$:/plugins/tobibeer/appear/popup.js\:{\title\:\$:/plugins/tobibeer/appear/popup.js\,\text\:\/*\\\\\\r\\ntitle: $:/plugins/tobibeer/appear/popup.js\\r\\ntype: application/javascript\\r\\nmodule-type: utils\\r\\n\\r\\nAn enhanced version of the core Popup to support:\\r\\n* absolute popups\\r\\n* preview popups\\r\\n* popup z-index\\r\\n\\r\\n@preserve\\r\\n\\\\*/\\n(function(){\\\use strict\\\;var trequire(\\\$:/core/modules/utils/dom/popup.js\\\).Popup,erequire(\\\$:/core/modules/widgets/reveal.js\\\).reveal,se.prototype.refresh;t.prototype.showfunction(t){var e,st.domNode,p$tw.utils.hasClass(s,\\\tc-popup-absolute\\\),othis.popupInfo(s),ifunction(t){var et,s0,p0;do{s+e.offsetLeft||0;p+e.offsetTop||0;ee.offsetParent}while(e);return{left:s,top:p}},l{left:s.offsetLeft,top:s.offsetTop};eo.popupLevel;if(o.isHandle){e++}this.cancel(e);if(this.findPopup(t.title)-1){this.popups.push({title:t.title,wiki:t.wiki,domNode:s})}lp?i(s):l;t.wiki.setTextReference(t.title,\\\(\\\+l.left+\\\,\\\+l.top+\\\,\\\+s.offsetWidth+\\\,\\\+s.offsetHeight+\\\)\\\);if(this.popups.length>0){this.rootElement.addEventListener(\\\click\\\,this,true)}};t.prototype.popupInfofunction(t){var e,sfalse,pt;while(p&&eundefined){if($tw.utils.hasClass(p,\\\tc-popup-handle\\\)||$tw.utils.hasClass(p,\\\tc-popup-keep\\\)){strue}if($tw.utils.hasClass(p,\\\tc-reveal\\\)&&($tw.utils.hasClass(p,\\\tc-popup\\\)||$tw.utils.hasClass(p,\\\tc-popup-handle\\\))){eparseInt(p.style.zIndex)-1e3}pp.parentNode}var o{popupLevel:e||0,isHandle:s};return o};t.prototype.handleEventfunction(t){if(t.type\\\click\\\){var ethis.popupInfo(t.target),se.popupLevel-1;if(e.isHandle){if(s\u003C0){s1}else{s++}}this.cancel(s)}};e.prototype.refreshfunction(){var t,e,pthis.isOpen;es.apply(this,arguments);tthis.domNodes0;if(this.isOpen&&(p!this.isOpen||!t.style.zIndex)&&t&&(this.type\\\popup\\\||$tw.utils.hasClass(t,\\\tc-block-dropdown\\\)&&$tw.utils.hasClass(t,\\\tc-reveal\\\))){t.style.zIndex1e3+$tw.popup.popups.length}return e}})();\,\type\:\application/javascript\,\module-type\:\utils\},\$:/plugins/tobibeer/appear/readme\:{\title\:\$:/plugins/tobibeer/appear/readme\,\text\:\This plugin provides the $appear widget that can render popups and sliders (inline or block) as well as accordion menus.\\n\\n!! Attributes\\r\\n; type\\r\\n: set to `popup` to have the content appear as a popup\\r\\n; show\\r\\n: the button label\\r\\n; hide\\r\\n: the hide button label\\r\\n; mode\\r\\n: either `block` or `inline`, with respect to the inner content\\r\\n: any other mode is interpreted as block mode, without the default styles applying, e.g. drop-shadows\\r\\n; once\\r\\n: allows to click the button once, then hides it (unless the state is deleted)\\r\\n; $state\\r\\n: the widget calculates a state for you, use this to append a simple id\\r\\n; state\\r\\n: alternatively, specify a fully qualified state\\r\\n; keep\\r\\n: make popups sticky when `yes` or `true`\\r\\n; handle / handler / variables\\r\\n: allows to take the popup contents out of the flow and render them elsewhere on the page\\r\\n: required to properly create popups in table cells and other constained elements\\r\\n: specify variables to take along\\n\\n\u003Cbr>\\n\\n; documentation / examples / demos...\\r\\n: http://tobibeer.github.io/tw5-plugins#appear\\r\\n\},\$:/plugins/tobibeer/appear/styles\:{\title\:\$:/plugins/tobibeer/appear/styles\,\tags\:\$:/tags/Stylesheet\,\text\:\\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\\n\\n\u003Cpre>.tc-reveal.appear-block,\\r\\n.tc-popup.appear {\\r\\n\\tborder-radius: 5px;\\r\\n\\tpadding: 1px 1em;\\r\\n\\t\u003C\u003Cbox-shadow \\\2px 2px 4px rgba(0,0,0,0.3)\\\>>;\\r\\n}\\r\\n.tc-popup.appear {\\r\\n\\tpadding: 0 1em;\\r\\n\\tbackground: \u003C\u003Ccolour background>>;\\r\\n}\\r\\n.appear-reveal.appear-inline{\\r\\nmargin-left:5px;\\r\\n}\\r\\n.appear-reveal.appear-inline.appear-once{\\r\\nmargin-left:0;\\r\\n}\u003C/pre>\},\$:/plugins/tobibeer/appear/widget.js\:{\title\:\$:/plugins/tobibeer/appear/widget.js\,\text\:\/*\\\\\\r\\ntitle: $:/plugins/tobibeer/appear/widget.js\\r\\ntype: application/javascript\\r\\nmodule-type: widget\\r\\n\\r\\nUse the appear widget for popups, sliders, accordion menus\\r\\n\\r\\n@preserve\\r\\n\\\\*/\\n(function(){\\\use strict\\\;var trequire(\\\$:/core/modules/widgets/widget.js\\\).widget,efunction(t,e){this.initialise(t,e)},i{};e.prototypenew t;e.prototype.renderfunction(t,e){this.parentDomNodet;this.nextSiblinge;this.computeAttributes();this.execute();var i,s,r,a,h,n,l;if(this.handle){this.getHandlerCache(this.handle,1);this.refreshHandler()}else{s{type:\\\button\\\};s.attributesthis.setAttributes(s,\\\button\\\);is.attributes\\\class\\\.value.trim();s.attributes\\\class\\\.valuei+\\\ appear-show\\\+(this.handler?\\\ tc-popup-absolute\\\:\\\\\\);s.childrenthis.wiki.parseText(\\\text/vnd.tiddlywiki\\\,this.show,{parseAsInline:true}).tree;h{type:\\\reveal\\\,children:this.parseTreeNode.children};h.attributesthis.setAttributes(h,\\\reveal\\\);h.isBlock!(this.mode&&this.mode\\\inline\\\);if(h.attributes.type&&h.attributes.type.value\\\popup\\\){s.attributes.popuph.attributes.state;l.push(s);if(!this.handler){l.push(h)}else{s.attributes.handlerthis.handler}}else{h.attributes.type{type:\\\string\\\,value:\\\match\\\};h.attributes.text{type:\\\string\\\,value:this.currentTiddler};s.attributes.seth.attributes.state;s.attributes.setTo{type:\\\string\\\,value:this.currentTiddler};a{type:\\\reveal\\\,isBlock:this.block,children:s,attributes:{type:{type:\\\string\\\,value:\\\nomatch\\\},state:h.attributes.state,text:{type:\\\string\\\,value:this.currentTiddler}}};if(!this.once){r$tw.utils.deepCopy(s);r.attributes\\\class\\\.valuei+\\\ appear-hide \\\+(this.attr.button.selectedClass?this.attr.button.selectedClass:\\\\\\);r.attributes.setTo{type:\\\string\\\,value:\\\\\\};r.childrenthis.wiki.parseText(\\\text/vnd.tiddlywiki\\\,this.hide,{parseAsInline:true}).tree}n$tw.utils.deepCopy(a);n.children;if(!this.once){n.children.push(r)}if(!this.handler){n.children.push(h)}n.attributes.type.value\\\match\\\;l.push(a,n)}this.makeChildWidgets(l);this.renderChildren(this.parentDomNode,e);if(this.handler){this.addToHandlerCache(h)}}};e.prototype.executefunction(){var tthis;this.attr{map:{reveal:{\\\class\\\:1,position:1,retain:1,state:1,style:1,tag:1,type:1},button:{\\\button-class\\\:1,\\\button-style\\\:1,\\\button-tag\\\:1,tooltip:1,selectedClass:1}},rename:{\\\button-class\\\:\\\class\\\,\\\button-style\\\:\\\style\\\,\\\button-tag\\\:\\\tag\\\},button:{},reveal:{}};$tw.utils.each(this.attributes,function(e,i){var s;$tw.utils.each(t.attr.map,function(r,a){$tw.utils.each(Object.keys(r),function(r){if(ri){t.attraie;sfalse;return false}});return s})});this.currentTiddlerthis.getVariable(\\\currentTiddler\\\);this.showthis.getValue(this.attributes.show,\\\show\\\);this.hidethis.getValue(this.attributes.hide,\\\hide\\\);if(!this.hide){this.hidethis.show}this.oncethis.attributes.once&&this.attributes.once!\\\false\\\;this.$statethis.attributes.$state;this.modethis.getValue(this.attributes.mode,\\\mode\\\);this.handlethis.attributes.handle;this.handlerthis.attributes.handler;this.handlerVariables(this.attributes.variables||\\\\\\)+\\\ currentTiddler\\\;this.keep\\\yes\\\,\\\true\\\.indexOf((this.getValue(this.attributes.keep,\\\keep\\\)||\\\\\\).toLocaleLowerCase())>-1;if(!this.attr.reveal.state){this.attr.reveal.statethis.getValue(undefined,\\\default-state\\\)+this.currentTiddler+this.getStateQualifier()+\\\/\\\+(this.attr.reveal.type?this.attr.reveal.type+\\\/\\\:\\\\\\)+(this.mode?this.mode+\\\/\\\:\\\\\\)+(this.once?\\\once/\\\:\\\\\\)+(this.$state?\\\/\\\+this.$state:\\\\\\)}};e.prototype.refreshfunction(t){var ethis.computeAttributes();if(Object.keys(e).length){this.refreshSelf();return true}if(this.handle){this.refreshHandler()}return this.refreshChildren(t)};e.prototype.getValuefunction(t,e){var i,s,r{show:\\\»\\\,\\\default-state\\\:\\\$:/temp/appear/\\\};if(tundefined){ithis.wiki.getTiddler(\\\$:/plugins/tobibeer/appear/defaults/\\\+e);if(i){si.getFieldString(\\\undefined\\\);if(!s||s\\\false\\\){ti.getFieldString(\\\text\\\)}}}if(tundefined){tre}return t};e.prototype.setAttributesfunction(t,e){var ithis,s{};$tw.utils.each(Object.keys(this.attr.mape),function(r){var a,hi.attr.renamer;if(!h){hr}ai.getValue(i.attrer,r);if(h\\\class\\\){a\\\appear\\\,\\\appear-\\\+e,e\\\reveal\\\&&i.keep?\\\tc-popup-keep\\\:\\\\\\,i.mode?\\\appear-\\\+i.mode:\\\\\\,i.once?\\\appear-once\\\:\\\\\\,a||\\\\\\.join(\\\ \\\)}if(a!undefined){if(h\\\tag\\\){t.taga}else{sh{type:\\\string\\\,value:a}}}});return s};e.prototype.getHandlerCachefunction(t,e){var sit;if(!s||e){it{handled:{},handle:{}};sit}return s};e.prototype.refreshHandlerfunction(){var tthis,ethis.getHandlerCache(this.handle),se.handle;if(Object.keys(s).length){$tw.utils.each(s,function(e,i){t.removeChildNode(i);t.children.push(t.makeChildWidget(e));t.childrent.children.length-1.render(t.parentDomNode,t.nextSibling)});ithis.handle.handle{}}};e.prototype.removeChildNodefunction(t){var ethis;$tw.utils.each(this.children,function(i,s){if(i.children0.statet){i.removeChildDomNodes();e.children.splice(s);return false}})};e.prototype.addToHandlerCachefunction(t){var ethis,it.attributes.state.value,sthis.getHandlerCache(this.handler),rs.handledi,a{type:\\\vars\\\,children:t,attributes:{}};$tw.utils.each((this.handlerVariables||\\\\\\).split(\\\ \\\),function(t){tt.trim();if(t){a.attributest{type:\\\string\\\,value:(e.getVariable(t)||\\\\\\).toString()}}});if(a!r){s.handleia;this.wiki.setText(\\\$:/temp/appear-handler/\\\+this.handler,\\\text\\\,undefined,i)}};exports.appeare})();\,\type\:\application/javascript\,\module-type\:\widget\}}}},{author:Tobias Beer,core-version:>5.1.9,created:20220505135243990,dependents:,description:Shows a tiddler preview when hovering internal links,documentation:https://tobibeer.github.io/tw5-preview,list:readme config,modified:20220505135243990,plugin-type:plugin,requires:tobibeer/appear|http://tobibeer.github.io/tw5-plugins/#appear,source:https://github.com/tobibeer/tw5-preview,title:$:/plugins/tobibeer/preview,version:0.5.6,type:application/json,text:{\tiddlers\:{\$:/plugins/tobibeer/preview/config\:{\title\:\$:/plugins/tobibeer/preview/config\,\text\:\\\\\define default()\\r\\n\u003Cdt>$(defaults)$$(option)$\u003C/dt>\\r\\n\u003Cdd>\\r\\n//{{$:/plugins/tobibeer/preview/lingo/$(option)$}}\u003C$list\\r\\nfilter\\\$(option)$prefixtemplate\\\>\\r\\n{{$(defaults)$$(option)$}}\u003C/$list>://\u003Cbr>\\r\\n\u003C$edit-text taginput tiddler\\\$(defaults)$$(option)$\\\/>\\r\\n\u003C/dd>\\r\\n\\\\end\\n\\n\u003Cdl class\\\preview-defaults\\\>\\r\\n\u003C$vars defaults\\\$:/plugins/tobibeer/preview/defaults/\\\>\\r\\n\u003C$list filter\\\alltiddlers+shadowsremoveprefix\u003Cdefaults>sorttitle\\\ variable\\\option\\\>\\r\\n\u003C\u003Cdefault>>\\r\\n\u003C/$list>\\r\\n\u003C/$vars>\\r\\n\u003C/dl>\\r\\n\u003Cstyle>.preview-defaults input {width:90%;}\u003C/style>\},\$:/plugins/tobibeer/preview/defaults/class\:{\title\:\$:/plugins/tobibeer/preview/defaults/class\,\text\:\tc-popup-keep\},\$:/plugins/tobibeer/preview/defaults/delay\:{\title\:\$:/plugins/tobibeer/preview/defaults/delay\,\text\:\1500\},\$:/plugins/tobibeer/preview/defaults/exclude\:{\title\:\$:/plugins/tobibeer/preview/defaults/exclude\,\text\:\issystem allshadows !hastext\},\$:/plugins/tobibeer/preview/defaults/keys\:{\title\:\$:/plugins/tobibeer/preview/defaults/keys\,\text\:\CTRL\},\$:/plugins/tobibeer/preview/defaults/not\:{\title\:\$:/plugins/tobibeer/preview/defaults/not\,\text\:\tc-drop-down tc-sidebar-scrollable tc-topbar tc-tiddler-title\},\$:/plugins/tobibeer/preview/defaults/template\:{\title\:\$:/plugins/tobibeer/preview/defaults/template\,\text\:\$:/plugins/tobibeer/preview/template\},\$:/plugins/tobibeer/preview/keyboard.js\:{\title\:\$:/plugins/tobibeer/preview/keyboard.js\,\text\:\/*\\\\\\r\\ntitle: $:/plugins/tobibeer/preview/keyboard.js\\r\\ntype: application/javascript\\r\\nmodule-type: utils\\r\\n\\r\\nFixes $:/core/modules/utils/dom/keyboard.js by providing an alternative.\\r\\nDo not use as an API, lets fix the core.\\r\\n\\r\\n@preserve\\r\\n\\\\*/\\n(function(){\\\use strict\\\;var e{BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,INSERT:45,DELETE:46};exports.parseKeyDescriptorTBfunction(t){var l,r,y,st.toUpperCase().split(\\\+\\\),K{keyCode:null,shiftKey:false,altKey:false,ctrlKey:false};for(y0;y\u003Cs.length;y++){lfalse;rsy;if(r.substr(0,1)\\\!\\\){ltrue;rr.substr(1)}if(r\\\CTRL\\\){K.ctrlKeyl?null:true}else if(r\\\SHIFT\\\){K.shiftKeyl?null:true}else if(r\\\ALT\\\){K.altKeyl?null:true}else if(r\\\META\\\){K.metaKeyl?null:true}else if(er){K.keyCodeer}else{K.keyCoder.charCodeAt(0)}}return K};exports.checkKeyDescriptorTBfunction(e,t){var l!!t.metaKey;return(t.keyCodenull||e.keyCodet.keyCode)&&(t.shiftKeynull?!e.shiftKey:e.shiftKeyt.shiftKey)&&(t.altKeynull?!e.altKey:e.altKeyt.altKey)&&(t.ctrlKeynull?!e.ctrlKey:e.ctrlKeyt.ctrlKey)&&(t.metaKeynull?!e.metaKey:e.metaKeyl)}})();\,\type\:\application/javascript\,\module-type\:\utils\},\$:/plugins/tobibeer/preview/lingo/class\:{\title\:\$:/plugins/tobibeer/preview/lingo/class\,\text\:\css classes applied to the popup\},\$:/plugins/tobibeer/preview/lingo/delay\:{\title\:\$:/plugins/tobibeer/preview/lingo/delay\,\text\:\delay popup for this many milliseconds\},\$:/plugins/tobibeer/preview/lingo/exclude\:{\title\:\$:/plugins/tobibeer/preview/lingo/exclude\,\text\:\no preview for links to tiddlers matching this filter\},\$:/plugins/tobibeer/preview/lingo/keys\:{\title\:\$:/plugins/tobibeer/preview/lingo/keys\,\text\:\modifier keys to trigger popup directly on-hover (ctrl, alt+shift, meta, etc...)\},\$:/plugins/tobibeer/preview/lingo/not\:{\title\:\$:/plugins/tobibeer/preview/lingo/not\,\text\:\no preview for links inside elements with these classes\},\$:/plugins/tobibeer/preview/lingo/open\:{\title\:\$:/plugins/tobibeer/preview/lingo/open\,\text\:\view at \u003C\u003CWIKI>>\},\$:/plugins/tobibeer/preview/lingo/template\:{\title\:\$:/plugins/tobibeer/preview/lingo/template\,\text\:\the preview template\},\$:/plugins/tobibeer/preview/link.js\:{\title\:\$:/plugins/tobibeer/preview/link.js\,\text\:\/*\\\\\\r\\ntitle: $:/plugins/tobibeer/preview/link.js\\r\\ntype: application/javascript\\r\\nmodule-type: startup\\r\\n\\r\\nEnhances the link widget for on-hover previews\\r\\n\\r\\n@preserve\\r\\n\\\\*/\\n(function(){var e,trequire(\\\$:/core/modules/widgets/link.js\\\).link,it.prototype.render,ot.prototype.handleClickEvent;t.prototype.renderfunction(){i.apply(this,arguments);var tthis,othis.wiki,pthis.domNodes0,ro.getTiddler(t.to),n\\\$:/plugins/tobibeer/preview/defaults/\\\,u\\\$:/temp/tobibeer/preview-\\\,l$tw.utils.parseKeyDescriptorTB(o.getTextReference(n+\\\keys\\\,\\\\\\).toUpperCase()),so.getTextReference(n+\\\delay\\\).toUpperCase(),afunction(e){var i$tw.popup.popupInfo(e),pi.popupLevel;return o.getTextReference(u+p)&&o.getTextReference(u+p+\\\-tiddler\\\)t.to?null:i},ffunction(){var i,ra(p);if(r){ir.popupLevel;clearTimeout(t.previewTimeout);$tw.popup.cancel(i);i++;o.setText(u+i+\\\-tiddler\\\,\\\text\\\,null,t.to);if($tw.popup.findPopup(u+i)-1){setTimeout(function(){$tw.popup.triggerPopup({domNode:p,title:u+i,wiki:o});e0},50)}}},dfunction(){var e,i,r1,uo.getTextReference(n+\\\not\\\,\\\\\\);if(u){$tw.utils.each(u.split(\\\ \\\),function(e){var tp;while(t&&r){if($tw.utils.hasClass(t,e)){r0;return false}tt.parentNode}})}if(r){io.getTextReference(n+\\\exclude\\\,\\\\\\);ei?o.filterTiddlers(i):;if(e.indexOf(t.to)>0){r0}}return r};ss!undefined?parseInt(s):null;if(s!null&&isNaN(s)){s0}if(r){$tw.utils.addClass(p,\\\tc-popup-handle\\\);$tw.utils.addClass(p,\\\tc-popup-absolute\\\);\\\mouseover\\\,\\\mouseout\\\.forEach(function(i){p.addEventListener(i,function(o){var po||window.event;if(i\\\mouseover\\\){if(d()){if(!p.keyCode){p.keyCode0}if($tw.utils.checkKeyDescriptorTB(p,l)){if(!e){e1;f()}}else if(s!null){e0;t.previewTimeoutsetTimeout(f,s)}}}else{e0;clearTimeout(t.previewTimeout)}})})}};t.prototype.handleClickEventfunction(){o.apply(this,arguments);clearTimeout(this.previewTimeout);$tw.popup.cancel(Math.max(0,$tw.popup.popupInfo(this.domNodes0).popupLevel))}})();\,\type\:\application/javascript\,\module-type\:\startup\},\$:/plugins/tobibeer/preview/popups\:{\title\:\$:/plugins/tobibeer/preview/popups\,\tags\:\$:/tags/PageTemplate\,\text\:\\\\\define state(num)\\n$:/temp/tobibeer/preview-$num$\\n\\\\end\\n\\n\\\\define classes(num)\\ntc-popup appear appear-block appear-reveal tc-preview-tiddler tc-preview-tiddler-$num$ $(default-classes)$\\n\\\\end\\n\\n\\\\define level(num)\\n\u003C$reveal tag\\\div\\\ type\\\popup\\\ state\u003C\u003Cstate $num$>> class\u003C\u003Cclasses $num$>>>\\n\u003C$tiddler tiddler{{$:/temp/tobibeer/preview-$num$-tiddler}}>\\n\u003C$transclude tiddler{{$:/plugins/tobibeer/preview/defaults/template}} mode\\\block\\\/>\\n\u003C/$tiddler>\\n\u003C/$reveal>\\n\\\\end\\n\\n\u003C$vars default-classes{{$:/plugins/tobibeer/preview/defaults/class}}>\\n\u003C$list filter\\\1 2 3 4 5 6 7 8 9\\\>\\n\u003C$macrocall $name\\\level\\\ num{{!!title}}/>\\n\u003C/$list>\\n\u003C/$vars>\},\$:/plugins/tobibeer/preview/readme\:{\title\:\$:/plugins/tobibeer/preview/readme\,\text\:\The plugin $:/plugins/tobibeer/preview enhances the core \u003C\u003Cx LinkWidget>> to display a preview of tiddlers when hovering an internal link.\\n\\n\u003Cbr>\\n\\n; documentation / examples / demos...\\r\\n: http://tobibeer.github.io/tw5-plugins#preview\},\$:/plugins/tobibeer/preview/styles\:{\title\:\$:/plugins/tobibeer/preview/styles\,\tags\:\$:/tags/Stylesheet\,\text\:\.tc-popup.tc-preview-tiddler{\\r\\n\\tmax-width:600px;\\r\\n\\twidth:100%;\\r\\n\\tpadding:1em;\\r\\n}\},\$:/plugins/tobibeer/preview/template\:{\title\:\$:/plugins/tobibeer/preview/template\,\text\:\{{||$:/core/ui/ViewTemplate/tags}}\\n\\n\u003C$transclude mode\\\block\\\/>\}}}},{title:$:/plugins/tobibeer/preview/defaults/delay,created:20220505135343597,creator:soren,modified:20220505135454120,modifier:soren,type:text/vnd.tiddlywiki,text:500},{title:$:/plugins/tobibeer/preview/defaults/exclude,created:20220505135432323,creator:soren,modified:20220505135433494,modifier:soren,type:text/vnd.tiddlywiki,text:issystem allshadows},{title:$:/plugins/tobibeer/preview/defaults/keys,created:20220505135435971,creator:soren,modified:20220505135437221,modifier:soren,type:text/vnd.tiddlywiki,text:Ctrl},{title:$:/plugins/tobibeer/preview/template,created:20220505135633168,creator:soren,modified:20240611004644694,modifier:soren,type:text/vnd.tiddlywiki,text:\u003Cdiv class\tc-title\> \u003Ci class\fa fa-file-alt\/> {{!!title}}\u003C/div>\n{{||$:/core/ui/ViewTemplate/subtitle}}\n{{||$:/core/ui/ViewTemplate/tags}}\n\n\u003C$transclude mode\block\/>},{title:$:/plugins/tzk,description:TiddlyZettelKasten alpha system tiddlers,author:Soren Bjornstad,version:1.3.1,core-version:>5.3.8,source:https://github.com/sobjornstad/tzk,list:readme license,plugin-type:plugin,dependents:,type:application/json,text:{\tiddlers\:{\$:/tzk/Buttons/Checkpoint\:{\title\:\$:/tzk/Buttons/Checkpoint\,\caption\:\Checkpoint\,\condition\:\\u003CtargetTiddler>type \u003CtargetTiddler>typetext/vnd.tiddlywiki +first\,\created\:\20230727194531822\,\creator\:\soren\,\description\:\Save the current version of this tiddler so you can view it later\,\dropdown\:\$:/tzk/Buttons/CheckpointDropdown\,\icon\:\$:/core/images/timestamp-on\,\modified\:\20251011161016824\,\modifier\:\soren\,\shortcuts\:\((checkpoint))\,\tags\:\$:/tags/EditorToolbar\,\type\:\text/vnd.tiddlywiki\},\$:/tzk/Buttons/CheckpointDropdown\:{\title\:\$:/tzk/Buttons/CheckpointDropdown\,\created\:\20230727193610360\,\creator\:\soren\,\modified\:\20251011161010578\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure lingo-base() $:/language/Buttons/Excise/\\n\\\\procedure checkpoint-actions()\\n\\t\u003C$action-sendmessage\\n\\t\\t$message\\\tm-new-tiddler\\\\\n\\t\\t$param{{{ \u003CstoryTiddler>getdraft.of }}}\\n\\t\\ttitle\u003C\u003Cnew-title>>\\n\\t\\tcheckpoint-message{{{ \u003Cconfig-title>addsuffix/messagegettext }}}\\n\\t/>\\n\\t\u003C$action-deletetiddler\\n\\t $tiddler`$(config-title)$/message`\\n\\t/>\\n\\t\u003C$action-deletetiddler\\n\\t\\t$tiddler\u003C\u003Cdropdown-state>>\\n\\t/>\\n\\\\end checkpoint-actions\\n\\n\\\\procedure dropdown-body(config-title)\\n\\t\u003Cp>\\n\\t\\tCheckpoint the current version of this tiddler\\n\\t\u003C/p>\\n\\n\\t\u003Cp>\\n\\t\\tMessage: \u003C$edit-text tag\\\input\\\ tiddler`$(config-title)$/message` default\\\\\\ focus\\\true\\\ />\\n\\t\u003C/p>\\n\\n\\t\u003C$let\\n\\t\\ttid-to-duplicate{{{ \u003CstoryTiddler>getdraft.of }}}\\n\\t\\tnew-title{{{ $:/checkpoints/addsuffix\u003Ctid-to-duplicate>addsuffix/addsuffix\u003Cnow \\\UTCYYYY0MM0DD0hh0mm0ss0XXX\\\> }}}\\n\\t>\\n\\n\\t\u003C% if \u003Cnew-title>istiddler %>\\n\\t\\t\u003Cdiv class\\\tc-error\\\>\\n\\t\\t\\t\u003C\u003Clingo Caption/TiddlerExists>>\\n\\t\\t\u003C/div>\\n\\t\u003C% endif %>\\n\\n\\tCreating checkpoint tiddler: \u003C\u003Cnew-title>>\\n\\n\\t\u003C$button actions\u003C\u003Ccheckpoint-actions>>>\\n\\t\\tCheckpoint\\n\\t\u003C/$button>\\n\\n\\t\u003C/$let>\\n\\\\end dropdown-body\\n\\n\u003C$macrocall $name\\\dropdown-body\\\ config-title\u003C\u003Cqualify \\\$:/state/Excise/\\\>>/>\},\$:/tzk/Buttons/CopyPublicZettelkastenLink\:{\title\:\$:/tzk/Buttons/CopyPublicZettelkastenLink\,\caption\:\copy public link\,\created\:\20201120172611922\,\creator\:\soren\,\description\:\Copy a link to this tiddler in the public Zettelkasten\,\list-after\:\$:/core/ui/Buttons/info\,\modified\:\20251011161215499\,\modifier\:\soren\,\tags\:\$:/tags/ViewToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\u003C$button\\n\\tmessage\\\tm-copy-to-clipboard\\\\\n\\tparam`${ {$:/config/sobjornstad/PublicZettelkastenUrl} }$/${ {!!microlink}!isblank ~allcurrentaddprefix# }$`\\n\\ttooltip{{$:/tzk/Buttons/CopyPublicZettelkastenLink!!caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C% if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/permalink-button}}\\n\\t\u003C% endif %>\\n\\t\u003C% if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text\\\ \\\/>\\n\\t\\t\\t\u003C$text text{{$:/tzk/Buttons/CopyPublicZettelkastenLink!!caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C% endif %>\\n\u003C/$button>\},\$:/tzk/Buttons/CopyTitleReference\:{\title\:\$:/tzk/Buttons/CopyTitleReference\,\caption\:\copy tiddler title\,\created\:\20200419143537510\,\creator\:\soren\,\description\:\Copy the name of this tiddler to the clipboard\,\list-after\:\$:/core/ui/Buttons/info\,\modified\:\20251011161243856\,\modifier\:\soren\,\tags\:\$:/tags/ViewToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\u003C$button\\n\\tmessage\\\tm-copy-to-clipboard\\\\\n\\tparam{{!!title}}\\n\\ttooltip{{$:/tzk/Buttons/CopyTitleReference!!caption}}\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n>\\n\\t\u003C% if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t\u003Ci class\\\far fa-copy\\\ style\\\font-size: 160%; position:relative; bottom:-4px; left:-1px;\\\/>\\n\\t\u003C% endif %>\\n\\t\u003C% if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text\\\ \\\/>\\n\\t\\t\\t\u003C$text text{{$:/tzk/Buttons/CopyTitleReference!!caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C% endif %>\\n\u003C/$button>\},\$:/tzk/Buttons/NewSource\:{\title\:\$:/tzk/Buttons/NewSource\,\caption\:\new source\,\created\:\20200822190145295\,\creator\:\soren\,\description\:\Create a new source tiddler\,\list-after\:\$:/core/ui/Buttons/new-tiddler\,\modified\:\20251011161332415\,\modifier\:\soren\,\tags\:\$:/tags/PageControls\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure create-action()\\n \u003C$action-sendmessage\\n $message\\\tm-new-tiddler\\\\\n title\\\New Source\\\\\n tags\\\Source\\\\\n\\t\\tcaption\\\\\\\\n\\t\\tmedium\\\\\\\\n\\t\\turl\\\\\\\\n\\t\\treadstatus\\\unread\\\\\n\\t\\tauthor\\\\\\\\n\\t\\tcompleted\\\\\\\\n\\t\\tyear\u003C\u003Cnow YYYY>>\\n />\\n\\\\end create-action\\n\\n\u003C$button\\n\\tclass\u003C\u003Ctv-config-toolbar-class>>\\n\\tselectedClass\\\tc-selected\\\\\n\\ttooltip{{!!caption}}\\n\\tactions\u003C\u003Ccreate-action>>\\n>\\n\\t\u003C% if \u003Ctv-config-toolbar-icons>matchyes %>\\n\\t\\t{{$:/core/images/quote}}\\n\\t\u003C% endif %>\\n\\t\u003C% if \u003Ctv-config-toolbar-text>matchyes %>\\n\\t\\t\u003Cspan class\\\tc-btn-text\\\>\\n\\t\\t\\t\u003C$text text{{$:/tzk/Buttons/NewSource!!caption}}/>\\n\\t\\t\u003C/span>\\n\\t\u003C% endif %>\\n\u003C/$button>\},\$:/tzk/Buttons/ReadingInbox\:{\title\:\$:/tzk/Buttons/ReadingInbox\,\created\:\20210307212922834\,\creator\:\soren\,\modified\:\20251011161354590\,\modifier\:\soren\,\tags\:\$:/tags/PageControls\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$button to\\\$:/tzk/Tools/ReadingInbox\\\ class\u003C\u003Ctv-config-toolbar-class>> selectedClass\\\tc-selected\\\>\u003Ci class\\\fa fa-inbox\\\ style\\\font-size:140%; position:relative; bottom:-3px; left:-1px;\\\/>\u003C/$button>\},\$:/tzk/Buttons/excise-private-chunk\:{\title\:\$:/tzk/Buttons/excise-private-chunk\,\caption\:\Excise private chunk\,\condition\:\\u003CtargetTiddler>type \u003CtargetTiddler>typetext/vnd.tiddlywiki +first\,\created\:\20210522034413324\,\creator\:\soren\,\description\:\Create a new private chunk from the selection\,\icon\:\$:/core/images/locked-padlock\,\modified\:\20251011161258778\,\modifier\:\soren\,\shortcuts\:\((excise-private-chunk))\,\tags\:\$:/tags/EditorToolbar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$action-sendmessage\\n\\t$message\\\tm-edit-text-operation\\\\\n\\t$param\\\excisePrivateChunk\\\\\n/>\},\$:/tzk/Documentation/Functions\:{\title\:\$:/tzk/Documentation/Functions\,\caption\:\Functions\,\created\:\20240601191528446\,\creator\:\soren\,\modified\:\20251011201600952\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Click into a function to see an example of its usage and its definition.\\n\\nAll functions are in the `m2` namespace unless otherwise noted (e.g., `ff` should be written `m2.ff`).\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\width: 10em;\\\>Name\u003C/th>\\n\\t\\t\u003Cth>Description\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\alltiddlers+shadowsprefix$:/tzk/Functions/!prefix$:/tzk/Functions/_\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\\n\\t\\t\\t\\t\u003C$text text{{{ allcurrentremoveprefix$:/tzk/Functions/ }}}/>\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/td>\\n\\t\\t\u003Ctd>{{!!description}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\u003C/table>\},\$:/tzk/Documentation/Macros\:{\title\:\$:/tzk/Documentation/Macros\,\caption\:\Macros\,\created\:\20210523143205876\,\creator\:\soren\,\modified\:\20251011201608896\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Click into a macro to see an example of its usage and its definition.\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\width: 10em;\\\>Name\u003C/th>\\n\\t\\t\u003Cth>Description\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\alltiddlers+shadowsprefix$:/tzk/Macros/tag$:/tags/Macro!prefix$:/tzk/Macros/_\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ allcurrentremoveprefix$:/tzk/Macros/ }}}/>\u003C/$link>\u003C/td>\\n\\t\\t\u003Ctd>{{!!description}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\u003C/table>\},\$:/tzk/Documentation/Procedures\:{\title\:\$:/tzk/Documentation/Procedures\,\caption\:\Procedures\,\created\:\20240601191438937\,\creator\:\soren\,\modified\:\20251011201904038\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define local.table-list(prefix)\\n\\t\u003C$list filter\\\alltiddlers+shadowsprefix$prefix$!prefix$prefix$_\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\\n\\t\\t\\t\\t\u003C$text text{{{ allcurrentremoveprefix$prefix$ }}}/>\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/td>\\n\\t\\t\u003Ctd>{{!!description}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\\\end local.table-list\\n\\nClick into a macro to see an example of its usage and its definition.\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\width: 10em;\\\>Name\u003C/th>\\n\\t\\t\u003Cth>Description\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C\u003Clocal.table-list \\\$:/tzk/Procedures/\\\>>\\n\\t\u003C\u003Clocal.table-list \\\$:/sib/Procedures/\\\>>\\n\u003C/table>\},\$:/tzk/Documentation/ViewTemplates\:{\title\:\$:/tzk/Documentation/ViewTemplates\,\caption\:\View templates\,\created\:\20210523143729032\,\creator\:\soren\,\modified\:\20251011201917127\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define local.table(prefix)\\n\\t\u003C$list filter\\\alltiddlers+shadowsprefix$prefix$tag$:/tags/ViewTemplatesortsub\u003Clastbit>\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ {!!caption}!isblank ~allcurrentsubfilter\u003Clastbit> }}}/>\u003C/$link>\u003C/td>\\n\\t\\t\u003Ctd>{{!!description}}\u003C/td>\\n\\t\\t\u003Ctd>{{!!transcludedin}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\\\end local.table\\n\\n\\\\define lastbit() {!!caption}!isblank ~split/last\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\width: 15em;\\\>Name\u003C/th>\\n\\t\\t\u003Cth>Purpose\u003C/th>\\n\\t\\t\u003Cth>Transcluded in\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C\u003Clocal.table \\\$:/tzk/\\\>>\\n\\t\u003C\u003Clocal.table \\\$:/sib/\\\>>\\n\u003C/table>\},\$:/tzk/Documentation\:{\title\:\$:/tzk/Documentation\,\created\:\20210523144533696\,\creator\:\soren\,\modified\:\20251011201548833\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C\u003Ctabs \\\alltiddlers+shadowsprefix$:/tzk/Documentation/\\\ default:\\\$:/tzk/Documentation/Macros\\\>>\},\$:/tzk/EpistemicStatus/Display\:{\title\:\$:/tzk/EpistemicStatus/Display\,\created\:\20210508223048629\,\creator\:\soren\,\description\:\Show the epistemic status|EpistemicStatuses of the current tiddler, if any. The status is editable in the private edition.\,\modified\:\20251011201416856\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All idea tiddlers|ZettelkastenCardType: those that are not tagged with a red type tag and are not system tiddlers, except that index tiddlers are included.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\function color-string() alltiddlers+shadowsprefix$:/tzk/EpistemicStatuscaption{!!es}getcoloraddprefixcolor: addsuffix;\\n\\n\u003C% if m2.ffEpistemicStatus %>\\n\u003C% if allcurrent!issystem %>\\n\u003C% if allcurrenttagIdea allcurrenttagIndex %>\\n\\n\\t\u003Cdiv style\\\float: right; vertical-align: center;\\\>\\n\\t\\t\u003C% if m2.private %>\\n\\t\\t\\t\u003C$link to\\\EpistemicStatuses\\\>\\n\\t\\t\\t\\t\u003Cspan style{{{ functioncolor-string }}}>\\n\\t\\t\\t\\t\\tepistemic status\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C/$link>: \\n\\t\\t\\t\u003C$select field\\\es\\\ default\\\\\\>\\n\\t\\t\\t\\t\u003C$list filter\\\alltiddlers+shadowsprefix$:/tzk/EpistemicStatushascaptionnsortstackorder\\\>\\n\\t\\t\\t\\t\\t\u003C$set name\\\itemColor\\\ value{{!!color}}>\\n\\t\\t\\t\\t\\t\\t\u003Coption style`color: $(itemColor)$;` value{{!!caption}}>{{!!caption}}\u003C/option>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$select>\\n\\t\\t\u003C% endif %>\\n\\t\\t\u003C% if m2.public %>\\n\\t\\t\\t\u003C% if allcurrenthases %>\\n\\t\\t\\t\\tepistemic status|EpistemicStatuses: \\n\\t\\t\\t\\t\u003Cspan style{{{ functioncolor-string }}}>{{!!es}}\u003C/span>\\n\\t\\t\\t\u003C% endif %>\\n\\t\\t\u003C% endif %>\\n\\t\u003C/div>\\n\\n\u003C% endif %>\\n\u003C% endif %>\\n\u003C% endif %>\},\$:/tzk/EpistemicStatus/confident\:{\title\:\$:/tzk/EpistemicStatus/confident\,\caption\:\confident\,\color\:\#0000ff\,\created\:\20210508225005508\,\creator\:\soren\,\modified\:\20251011192256209\,\modifier\:\soren\,\section\:\main\,\stackorder\:\10\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I would vouch for this idea without qualification in a public blog post or speech. That said, I could still be wrong|IntellectualHumility, and Im willing to hear why Im wrong and change my mind|ChangeYourMind if warranted.\},\$:/tzk/EpistemicStatus/likely\:{\title\:\$:/tzk/EpistemicStatus/likely\,\caption\:\likely\,\color\:\#007700\,\created\:\20210508225031010\,\creator\:\soren\,\modified\:\20251011192308180\,\modifier\:\soren\,\section\:\main\,\stackorder\:\20\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I believe this idea is more likely than not to be true, but perhaps with some qualifications. I may be suspicious that the effect size is smaller than claimed, or that it may be true only in a more specific case; or I may just not have finished thinking through enough implications or doing enough research to be fully confident about it.\},\$:/tzk/EpistemicStatus/mythological\:{\title\:\$:/tzk/EpistemicStatus/mythological\,\caption\:\mythological\,\color\:\#610061\,\created\:\20210508225357539\,\creator\:\soren\,\modified\:\20251011192313454\,\modifier\:\soren\,\section\:\auxiliary\,\stackorder\:\120\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Judging the tiddlers correctness is a nonsensical operation or misses the point. Includes jokes, fiction, aphorisms, stories whose main purpose is not to tell what happened|SoWhat, and so on.\},\$:/tzk/EpistemicStatus/personal\:{\title\:\$:/tzk/EpistemicStatus/personal\,\caption\:\personal\,\color\:\gray\,\created\:\20210508225329258\,\creator\:\soren\,\modified\:\20251011192323603\,\modifier\:\soren\,\section\:\auxiliary\,\stackorder\:\110\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The tiddler describes me on a subjective level, so it is difficult or impossible to get an objective assessment. I am probably the best expert on myself but still not very good|PeopleDontKnowWhatTheyWant.\},\$:/tzk/EpistemicStatus/possible\:{\title\:\$:/tzk/EpistemicStatus/possible\,\caption\:\possible\,\color\:\#0596c7\,\created\:\20210508225155649\,\creator\:\soren\,\modified\:\20251011192328857\,\modifier\:\soren\,\section\:\main\,\stackorder\:\30\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I withhold judgment|NoOpinion on the idea; I am merely reporting it.\},\$:/tzk/EpistemicStatus/probably-wrong\:{\title\:\$:/tzk/EpistemicStatus/probably-wrong\,\caption\:\probably wrong\,\color\:\#ff0000\,\created\:\20210508225317301\,\creator\:\soren\,\modified\:\20251011192334174\,\modifier\:\soren\,\section\:\main\,\stackorder\:\50\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I would bet against this idea, or think it is so wild that I would be embarrassed to bring it up in a more formal context, but I think its worth recording anyway.\},\$:/tzk/EpistemicStatus/unlikely\:{\title\:\$:/tzk/EpistemicStatus/unlikely\,\caption\:\unlikely\,\color\:\#d9cd27\,\created\:\20210508225252519\,\creator\:\soren\,\modified\:\20251011192340802\,\modifier\:\soren\,\section\:\main\,\stackorder\:\40\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I find this idea interesting or worth recording, but suspect it is flawed or incorrect.\},\$:/tzk/Fonts/SourceSansPro\:{\title\:\$:/tzk/Fonts/SourceSansPro\,\text\:\/*! Generated by Font Squirrel (https://www.fontsquirrel.com) on March 20, 2021.\\n\\n+------------+--------------------------+-------------+------------+\\n|to get: | font-family | font-weight | font-style |\\n+------------+--------------------------+-------------+------------+\\n|regular | Source Sans Pro | normal | normal |\\n|italic | Source Sans Pro | normal | italic |\\n|bold | Source Sans Pro | bold | normal |\\n|bold italic | Source Sans Pro | bold | italic |\\n|semibold | Source Sans Pro Semibold | normal | normal |\\n+------------+--------------------------+-------------+------------+\\n\\nTW font embed instructions: https://groups.google.com/g/tiddlywiki/c/7HPSS67j4uU\\n\\nCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name Source. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.\\n\\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\\nThis license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL\\n\\n-----------------------------------------------------------\\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\\n-----------------------------------------------------------\\n\\nPREAMBLE\\nThe goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.\\n\\nThe OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.\\n\\nDEFINITIONS\\n\\\Font Software\\\ refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.\\n\\n\\\Reserved Font Name\\\ refers to any names specified as such after the copyright statement(s).\\n\\n\\\Original Version\\\ refers to the collection of Font Software components as distributed by the Copyright Holder(s).\\n\\n\\\Modified Version\\\ refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.\\n\\n\\\Author\\\ refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.\\n\\nPERMISSION & CONDITIONS\\nPermission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:\\n\\n1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.\\n\\n2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.\\n\\n3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.\\n\\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.\\n\\n5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.\\n\\nTERMINATION\\nThis license becomes null and void if any of the above conditions are not met.\\n\\nDISCLAIMER\\nTHE FONT SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.\\n*/\\n\\n\\n@font-face {\\n font-family: Source Sans Pro;\\n src: url(data:application/font-woff2;charsetutf-8;base64,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) format(woff2),\\n url(data:application/font-woff;charsetutf-8;base64,d09GRgABAAAAAIPUABMAAAABXCwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABCQVNFAAABqAAAAEoAAACIY2hbkEZGVE0AAAH0AAAAHAAAAByEc38sR0RFRgAAAhAAAAAiAAAAJgAnARBHUE9TAAACNAAAIUUAAK/Yp2QXJEdTVUIAACN8AAABVwAAAwp/oHQPT1MvMgAAJNQAAABZAAAAYGui315jbWFwAAAlMAAAAYEAAAHS5blCBGN2dCAAACa0AAAAPgAAAD4VUw9gZnBnbQAAJvQAAAGxAAACZVO0L6dnYXNwAAAoqAAAAAgAAAAIAAAAEGdseWYAACiwAABRTgAAkdxYE5Z+aGVhZAAAegAAAAA2AAAANhTBiLVoaGVhAAB6OAAAACAAAAAkDxsFoWhtdHgAAHpYAAACOwAAA6i6yEupbG9jYQAAfJQAAAHKAAAB1hnu9uhtYXhwAAB+YAAAACAAAAAgAgcBsm5hbWUAAH6AAAAC7wAAByDWmdjXcG9zdAAAgXAAAAHuAAAC3DdTOjNwcmVwAACDYAAAAHMAAACI47XnkHjaY2BkYGDgAGIWBj4GpsyU1Pyi/Nw8BhYXN58QBqnkyqIcBoP0otRsBrecxJI8hhgGNgYQYGRgAuriYWD8t4QBZALFogB9LRGrAAAAAAABAAAAANXtRbgAAAAA0goY4QAAAADcfCCSeNpjYGRgYOABYjEGOQYmBkYgfAnELEARJiBmhGAAGZUBOAAAeNrtXXuMVNd5/1geHtYbWGAbvCYY1jZJxg4GjG1sA8Ym+BFMrHRN7Wazdt2YuAmGxDGlxLFQYjvbjdsSSjdCyLEIQgg5KJmSjbVaUbSRs6mm2xVaVSt3SqfOdEXIyNLIGlmrFcofe/o73zn33HNfM3ceu4Dd+TSvO3fOPY/vfO/vuzSDiBrp+3ScZm15aNt2uv7Zl17cRZ/9qxe/9jxt2PWXf/1N2kqzcA4JQQ14m4GzZzzevnk53t1j3jNupNkPdDy4nG78fPt2vD72+Bfx+vijj+N1e/ujeLXObXj+ay9+k+bt+cZ3v0YtfIS4tR3kPGTr8ty5dB3tbGhquHdm4lO9X+j8xr8dO4PfHuKzZ9FCWk630AaaSSnaQqfpGfolng34tAyfNuOMFCXpnymBIx048vf4bT610Q14zuD/J+ke+go1zDgqW5zRMKORrgWQyIgCICuGGf6DQh/ivfDjtOaqOzpDr0ID5vvTgFmY11vwejtgFt0BmIVZfwQz/QXADODHVpzbDphJ2wEz6UnAbPoyYA7muoOuoU5Agl4HzKIf0xG8vgGYRT+jX+D8t6kfr2cAM+nXgAS9A0jQbwCzaBAwk/5AeVxL9esWXvPrgUczcB3C2mQAedNz+9lA/85nn0Fbs2kBzi6KNK2gFVjLnBjE66DI+tYya87Ihp8RigHPiZMiZb4Vnf/g/xJ7MuaXAn6biHFG6Gha35SjWfz76+ZQK30XR1rx7/dEp3hb7BOnRZfclR+/B2ZsP+Zg+8dy7MBW0YvXA2KnGMU+6OVPgyLFv4zhSBrPA6Ifs9SH1zReM+LQVT/uYX4dNd/dTwV+zXt/EeOYD95nYvwKHpWkNxa1ERvr1vJ2l8J8rPZHRpyk18Q+SoBC7hdjtAaYge+8M04CI8bwy/6P3KgPO/xdfNvL7/EL7x1zfHr7lZY8Uu5Q8FgfDXdffb+kFJ3zryu/tTIF/LkYjH19yW1/jtcUPg8qKjKN489/DHZcPnwdXY6F5xj2XQRND2ktrzldSgzhvQ/PvfIptpmz9vJrn/62DWuckZijsEQMMReUfLCPMSCvP/ehzTx4Y68YML8PXBlcfdolqCzzx8IVhEfbqFOsx/v6yUl9CN+l5CLXXb6b4/a/tkIKJrHH+eZ+9v8u+vk7XkUP5KJ2QA9+xacSnUqwBHFS6xyp2GM5Gd1ipastcg71szUOu736YpwYwR5R1LYRrSfqsLIjel+fjCuTsNTWiPPHeQ18Mpxsr77UWI+5hfnmSkDcR0vZMe+PP2Z5dZZNWmil/19TMOYzZswrpf5bhzGf0WPeXtGYV7Im1wINPBNsb2q57uWRii4znf04jvll+v9H+MxMVHDyPJ/8Pi9G+6nob94jks/JVzEBySzHVtg0f+criU7aJF/BiSeiqYvoCUo6hocWIq0KzAvFOWmlu3IlOsxErqLzI8Yix+mRLeo35tx0jVnKdFMuIWfsWaxmbOJi9EqwvlIM2wm8JumQfzwxDWNOe8Z8roo2itHYz3YA75gHy2iDV8U6a221GCXhhK+zsk9QA82mhYBFoG+b8PlZwBx6CTCXXgFcizM+j+Oz6ROQxxvxOh8wl5oB+2gBYC7dCGikmwGd7MPZzT6c3SzJ7mFPzm725OymuwBP0TrAerobsIHuAdxH9wLux7H19Bc4toE200bAM7QFsJP9P7vY//M8+3/upm2AF+mLgHvZF7SLfUG72Be0l/4c8DfsEdrIHqFN9BXA0+wXegDXfwqj2w34Dn0LsI/2A5L0KnXjd+k12k3/BFjHvqPd7DvaTT+ho+jXTwGb6Ti9hV5Jb9IuStEv0RPpU9rFPqVd9C80gKtLz9ID7Fl6gD1Lu9mztIt+C9hM79J/4roZwLX0X4AmOg+YS/8NuJaygCb6H8Bc+h1gLv0v4Ds0Bkiyb+p59kUtxMiexVheoYbPvSA9NcmWW47To5gvZacflt4nMYD3k5eZyxv7vzjAsnabGGQOO4492YQxJaEL9IkxkapW5q5gn+xki1AW1+s2PpwV1IpeJICL5KF+S9G/JJ5L8fo+uEGRmjGn4/i0He2kxCaxuz78y3jnsuyrK0qvHK5V0FQrNjevSJ7y0V5xUXkJoe8OUov4gO2dLQEbaEAPk5YcamU/YtaMQ1G181F0qRxN5H6k48g3oXKVPQtNgXGeqU06Aq5+UK5nJc+w5pG9Y/0xr9uHK0vccHjEQtOWsZKI3b7/vK1XKKslUdcPfAlY7cyIsl/28awXYuPLMPv4pKw8UloCxN6xVgT7Z1zLGePaEjCmJeEM90P2oEVZbMWH1fD/KKnS/FooP76wFYvxPz/OtmB28vH2v16hE9HXqdhe+gR9D89O8OHQ+AvbOmTGWHQxCp/XsE2qHTzrObK0G6xowUOzCuDRCeBUfDr8iLNToVFJGveM1vESHj3PuUYdvah8NeCguOBIRGKtbyW2WPSlV+P7EOuDZ9ibxXZ9Q18Wy7fJD3DGII5ntdR1Xvq+dBtHxWnskxC9UZx35U/XvxBPq3J9t/j0LbEDveqZennVoSf1toWVbOXNmltI1/TvPj3q4+Utoe6KanrrrFjC9x7kZPLT0/z7PRX17gNNVYseDJ8Gn47k04amjmobbgukhkSEHJL0fFvs46rvV29VqPMjRlxTeVo33V612A/pVWkE3WqGphf2a/S32rClQu+3ktMNhRsuZRVgebmWR6uZl8ZYUW2JKd1XqTD6c5l0twGel4SRCUIpqeHPiTjjiXnlfsXPQGMGpJwchsfuzITqAZY1RUbg+OTXdvbtZ8GZz1UqWUEubWYP9geawksdlm0tzjXLW3K8Mxk/Xkr0cKxogWNKjwoZabxSSzRSzh83eralD8lIBh4r5BecN8ySzFH2RqcdWq11tpw4zPzjfUnbnXmpj0Tq5Y2BR0cJaTEbh6pWh2dX/WNxBSvQqmidiuE1Fs5G5buQ8Q8upXaizMXpKInIQyXiXX9INIqnRbf4ErDspslj3JejOsrmdX3OEh8PUNLX28D7Xq1d9+C/YxjDksk/unsJ2HpBnGTPdyGUNoXsQMZ0uY8y1Xq4q9nBJR/NzIuqtHxDV9sMerC1zFnJGkeqpPqtDPV8JKd8r7SUkyuj5TrgSTfT+APMjz4sTQ0dm4d+ZS7BFtmiuARe1Bft+3L8NnHlXk23R2XksY45Pq93lOztuTAdTOoM8XwNgbMSkftI9WME/CXNVEZKl4nQnie8MoPMdwloW4f8O8rtCXSFQjzpGiuV1P1KKyolVoXNaMkIwktV75MLdtvilGjE7ibWk3gGJi0ccizfHhzKWjJCm3qbfA9jPwKK9S5mOuOlO+INQFkqFGqbnCe2WTHsac8czTMS8Ty2ByVAY9TvOxnj2Ffu9WMxHsTVf5rFRefa4j0zW/1+/2vJNao6khBzfFFKh7qVNmkvBmYmyFi/3bZDcDnBXgEziwY/L7A9vCAGlY8RZ2XL7WWOGuV9hD17rjaLRSW0L67lJxAfpWjahMcmVWqNxqvToAxuZTU1Wyo9R8BJy87gu+4yz7elYb2wZMoV9m6taE5O16rllV9l8Y5jgwyzvuh1CNcPE9hXQftuIcI6t8a32tJDlvdZYS/F3XHA+1tNL2XWgyNbtjh4qPNkSkhd4pRHexsoJf+LY8FRmV4fAt1dCMkTHBJUSUZnL1QR3PzrfuzWLuBYF1veRwCjwDJXHkyqmRFzcPQkzt6B5wGm5vtNzMReXkvTX7FP6Vt43GnN7z3l9xg94tmvLebTV2kP7aXXSv79Tnou4pe1MTFSjXkPQ0yqEEtK6SjTzKZ4krVHg89ZrSft/kZgSLq0HdOJBqmcCkyp9aXg16wi7C9TlOnBFD5r6P2IwchGv0WP177FgwMJHT3nbfGA49UOkzVLxAtnXKt2qK2nqwJNbJ2Wyp3sINdqkzY+jkyYHB6xRoe8K8F9kXSjUcVyR2cb1S6/WHw9wSM5hCs3sQ7J2hTo1R9di5pD2x25jVpYV3Cu/nXaxyu+n33w0CO0R3YQ0uaQ0eCzYXFFlh6QjlyjJ8qN2Nq7ixW3cWK0LMly2JKpY1t9JXW3JXqWt6XlLKH4fymPfR0fCc3ZkuwnacX1m738nXdAc8A2bdPyx1yOxyMpOPhlbOTFErLUCK+48mq+G7oHM9418q+U4ud6jSbsK7JdMu3RSqN0gLYQOjMe8EI7rYzb2FFyHw1XaVMdtkYtqVartOeyTXXMxFGmrBkYNjELBeWHNZakAq9hUkstWd2ijq3wWDLHS9C6Yin9vByt80TdrNM4l7JmuqhxQdt3K/DbF8R21ybMVOAZUlkrzj7KlLXSpsN2fHltEVpv1qzQBHvh14J+ZRgHV3B+3RLX7i12qIgWcVD08LynsZa91nXW0BMcc70WVG4U0t9BUEqpz8qM9kOOVMmrlnLXwlo9Jb+OxaHpXpnComRFozcmfLM8XANXaPJE21wKytmOxaiU/B4iF8aJf/GvZpv5ZxMt8WOvzABysr1knAzzzrQlzST1PhoBB8qL96HPjLB990JpGx4/ZtDN9FtqoFl0DVqRkauL6JN0HV0PffBGfPokjt6K523AhDtpPd1HD9AWejhg0fyMrPqB9bmWFtBNfGQJLcenm/DLZyDTf45WgSbfQxsgxW6mBz0SfG2PBgsaMYpGDddpSPIYHJCztV7Dw3S7LzsigVEkjCfPeagxKCAejYIH8flBzr97uC4jWc5Vb36Plj9tjslPd3NvFmIFFtK9of+UEcbqIa2J63n2Sa+CfHzOnLlEP1ditm6gmbjeTRjzbTyuu/U51+G5mqGVpB1wC6ijfMho49X6+Sn09Q5aRrJy0M1af7s7cmS3MyX5bOD4Iv1+lzmy3oLNtCS0tSUG5OcbNMzWfbdhtYEtGoj774Ac5x0absa3m9Heat1SqccawArg2kL9ylGGGOVdxj4vpZYGmosWN/IMPoQd9Qg9il31GD2F/f4qHUEbb9AvcPRX1E+ddAb78KuUB+ymhuVfl5HKy1LL+oAND7PEKiXRnCulXiGPFhlRI2NhxSETpXxguuKUjcZVMJbupLG5OnHK3S4n5ZjkUzJWme02Mjp5O3pZ12gZ9ixko2Sq8jEKYdpg/bRUJw5RxU0biaykVFFttHQUr1eRq0E5R2lRHi7V4sa3uLyWvUP1iSfPQKZJ29q04eE5j8fAleW0DiJ1AqzyqLOmXL8gq+qSUZuuHpV1bLIV9krFJvTb2qPcY15pOGzNSscOVdIX3f9hrE6rtvpnXF0fOGrnx5zAmY6cn/PWK1D+CY/+ktMzpqIw9sTeU5nqrTdGgj83JftqWOKmwZGdZSSuqbB+FZRNwRx5yXx6zqY4wKm9rNH0M1309DQiYiwXrk9F9uWc9EaJs9VG9Tk7m23hDqXS9jW/NaNSKuC3xgSj4EOtMYUyFCQ2tcY+SStwqF8JO15fSauPotp5iy7ZLSU1TvTEme/aaUVdcBgUBVgTbu06W8EOP2va+9CPwdXwVWi8gz59sDXok9N8IGdHZrhx7YGzDwdnGNcZjbJkQLYaApwXA/5qeiIz+XOPxWVYHOH3AW/vxAppgZCyj3gMWJMS+5SVAN/+VcY6if3Q4bvoTanVuf8Fvg4HPU867yoTIhW0gfOVl2+yYZjn2lsqxpt+BptO9WhdLiGtHaHcZMDQA+2XFm9pnTpneiPtPu1sHTlXOSUXHyprucpUc3R0b+xjuO2qtK8z4F0+V8KKOczWnh7OznMjhJ3Yx6N29CPbgCaAZSpast/D34eDPByjOKyrYhbiRTehZblOJ0LGLPFmezmOYWxLBzzWuaItMVv5QcWyeHP2SqQ3NkUxo7osNQK962RZ9HJlPBJluI27bpXmK3l4d07v4dzU8q+AVT+sSkCng5k2tWQ/ed5Ir5eMZlFUMdsySybe3Ht+6Y3wbGZcrNWS+NkpwYoqa/OJdZ7qn9lwyYexfi/TolGdYasknVFQmpQe5ylqV74eU1muUFqaknXkLP5tRbeVoxOVxbTZXFdTh3TI/nHiH5rFhWB8m+c/3qgBKbO/BBw7wrqn0Vr524jmLW+Ys/25ESleuSfUGaDF5wFeL1C3kSX7Qq3wMp5TxmR+iPUplNIZarOeGDzQ8Zk8Lh2hWX3tEh81C8RiuRnCYZ4nrElIhKaev4Tljxtx/6H097h0JYhFen1ba57SZFXtTH2McXyNJBHJw3O1VbPRFMHQkfiZz2VbHsE+uVRSwxurdnfEoVece5sWhz1y3IDFLWzf6CtMZ0+x/JvRnrC0V8NVuibzrrwnk11KtReCnqapk1mY1o2aHTc6TVg5PVmKTQbfw7MOS+yGOo0z78grgbEnOAI4EyoL9/nxmil21sZLJ0dF2knL44mf80IHtmvxu5GSVqxkODbY8ZHBHQielvVdZ7SEbUvGRubxn0P6rIW80zlW0ql3q/fMadbp056xnpeVw8HDs+Kk2MHt7MCu6+XooyFZUxI8NoUdu0f1xB0B/jFkqNI8XVe35lg2zfn664I3ygeTrwXvpmKfMdXKSXu8JxLDE4sRgdXpMhbprN8G65vXgiWzS4n2iPQ5OTiLfzuxGBMePTxrKoy4euRxWRkR8sRZYN9B9lkcZDwhfpcRHDuBkVl60yexpTy9vFVH/94UXudZ41YcX0+rnkFHWsvpZ9bo6EEevjiOBFIuj7JKG14FOMV+hkwUDfBEoKXjao7MNQseuTqedHWTOAF4KdSm1gi86algpXqpFePKaWtOrycT5WXPLJVfqSaPLHHJL/uW2FODZWSm+Lb0tIyDYUtem1W7aIlrT7XOPQ69Je/kAfg5BX65yHwgr1fqIuSZETOe3fqckXB6xQ/3vjZLaRZgDVeCu4GjUG5A75poA30CsIyrws3nqnCrOWZjPleVexD/u4HmcYW4T3GFueV0P2ADPQPYwFXYbucqbKvpBcBdXHluAVdkW8tV0lZzlbSlXCWtmaukzecqaUu5SlozV0mbz1XS5nOVtNu5Stpa1eu7PpCxBnd+/84f4lovOvGJsur65a+JNqWyziHHngh6fJjasPptXGtN1l3LcyRDYXojGeots3Idt5RTw433irS2Jj07POGp5NYnOvF7m6zlBm4gPRptqpYbz0YO+JDQ1d6SsvY/uNj72FetQmJZUuXW0z1u3bdpGGWvzo2OW826YHMZJ5KdqWLRcLPBinpQqFc8QkmpfKDi+uLJ0tbXONf1XbFlylezX3mlnSx3ZSuEJJ1yNPX6yKvWFQ8E7TpTo72Cvx0Va8XLoK07vNIE8CcfblnFuc9YM5HT/o6ctO5yRY7OOFVPxG6Hjjv+IpbXsxwF1YdjfZzbX4e6EOwZlJaHCnIzp/n+FnXHYXucKiPErGog83PaRpuotRYc33ll0M0lNdaHVq5IGpYnWVDe5xAKs0zbpCqrg+KLy9BVP539v6Je+qLO3imqCCO1E6Fzn+Gjea8uVh8LV/C/8r6HEfJ7q9dnXLk1FTQi42ZqWvfu6QqjgE5mgrLt68gbUA03M0gciHXvRcvjZeyqyg+zk6nPy2zl7/VcNVc7H2U+OcQZWJK3J/XqRnp86rsfvZFxfotWbddyrazSpiX3Gu+3Fbpegt+PdEbz031G3unC56yHWmWqw1r1afI9zgw5bLhbxuzUN6RfyvVGxZZXC3YMaHl9PuTeSIna4lVZFnSytQJ7zl8T140YqYV3WPE7+dKj92ff1Ur9QuPd+sLWoBKpS9qDZZSR/rrQ0JeEprZOjpWlHTh3BdPfjpqWslzTKFuLtdPCy4IZY7bWapcxrrs2aDtiL64T0dzliVgpxNyPKldoE2NjiXuDgf6N+OkBY1u2cprGu6qL5cgTeA6Kicm3NUWLtBX5+VlFnppkjPYy+r6Jh6vT2kw7511fHPTWIY6VY9li8qC6ji/GbjtHdjwmNoqDYr84KY6IW/FZ3iN0iO1IQ+JDu85C+ZGyV0BVoD4G/Gib7Ob9kFLZq6KVPQOnNAXfLx4zPZHWwZE4I+R8VpW3/27kGnvi3RlLtuhvE37LNntOKrvPyXBUXJTyFKnKZO7ZrlVZ4XwFtd05R1bF5FsSnrfi+nhpOlgzXc1GyJnDUVJI7FnMmPvttDp0VYxhPFLOcfzYdgbucasvCSXD6RzcMb53eiYeBQjlFFntQ8s5tEvTVeUVGK/GO8+ZE+lS9dIDusH7kfg8HrbWJa9+xiuvhkpJXHO9PhYCrYt7MnCkLSB8pFOjPQfz1jWu1tpu2pJYW3xVRfNhayurQVmYpeqbnbCozqVq+4T/XgjT1svOY7m69Cv1c13E72t8uhVnvJsWl+rPrboVVYMpTqTOy1xt5xD32s1VTfrvD+j2vg72yXaP/thKHWIHjm1hyaCD/NWkan8Eo4o7omgt7552HmM10REv8+iWAfbo9oz/R3TKcQFfO312UUl/ZRUk585EKfZeLTW4tCWWxLrHqXakJTNH7nkFsqMabQfa70DbffYcWPXw/bL6PVXsDkcev4z1k6fcGjYQXZdZ05fxKaGmda+1q+6sED/2UldJ2KIlowkvj6xKHzjrVuV0ax8bWS7t05EdWe5ctTNq6W8TDgWSNe0u3327ndo+NbUx6Inx8epqY8Z2lvZYZCX/WMuYvAz6VFJJ6KrSj8xArYz6efzhuYD01Gek1US4NSSGXVXWgk1F1YEN0QWMLMeVS9JGJixa2R4xItBV7dg68b2KrGNuHBNWZFTFKXpjmEto2TVLk4F605W2mYi0iaXdurXWT3PKREldUHqAqlmm69cmXAuMNXetHlo8HLj/k2tDVtqF8t33hFROK9jrYB0fN/gkPV+HAplU+9m+keF7O8eb7xGL6mUsynA8bAyRrRyTsoWuEVv0R5FNCab2a/+j7WPNite1xCNtd/1xddqYV9wR0ofylYyqyQe8gBW8VRzAKI4F6GfGm+tvcRh5brNlT27ieC2Hw52MdW+qY7JSvN1veV9Bre2c4IiarFtfrSbvkcV9rqw6jB+fR/3voms9mrhuZKWaTOIKnamMq81HyOYXg74lJ/+Rnyk/Pa9g9yzWHsFQuqqjbb1tZyE9ZKundzJSHdTtjK7fcau2k6/X17Wi1cMkv1ozGkBzRsOsdJDBTlXKWbxWbNb7Hc/YIcgB+7iCr5RxGtU9Fn0x8Pt53p+TmeWgf2fEabFFHFQ1gzkyfgTzXFEsD8ewKa/0EHse5yiarjFE1Rs+p7VxGWGv+yJOAYYiW93nm6tSGlvS55loZlrfbh2502PZK1ZJTw6X5Yh+D0lLxXjiVAPa6tpaWP5Yw/HCdY9oix1z5lYCWFe9Fs4RD6YOYmCM/nVskzkCWMetKkISZ2xW56vY7QqiC51Rqtqkzh352iK1nqTv96TvXP8/J9QRXauxL1hv/iPIa52YwOfcGE2sYpfOAJcRbP3l8a0SfA6p4XM2RlXHauTVLOjgDlntWcvknpFE1OQZFq+EHj+nW4wVs43521HKxuT/VNvOL4el3tpCTjSQZY3I+e/eXhl/lvGIHikg5V01fzUS8KZiDTYrqU/1opVeroy1VuukO6LybvxjqY324oqDEVpD1tg5q/M/Ks0jwTFpMsN0r8PxJ4s6zmq9B3vSXAuvC3BcHJXVxESn2OvcM0F5usLv2hDF3VizyxoLQlI0yirALAP0yMgSXVmsAKlSxr2nLKlssGzGTtp5rcB/T96sJX+NpnjYX8/Vr9wC6EiMOl5V1l5otmJSpjjzNTLXqqaqg+Ii+5EHzX3aXRm/xY6i8vklL5D3TuhN6n7tqg6huBAr7jHknut6Ns8HdZe6xK86/PGoR+tKaXtOPsKeUwNlD4mZL4burmbyV2mvRn/ch13fo7hawJ6TCZX+Tvqu2+zpaVesdRwy8bFFS3Ikfa+WonMv9prX0c0eW8/ZY89y9tgmzh7bxNljT3L22DWcO7aIs8faOXtsEWePfYWzxxZy9thsuhnwDfo0YBXdAlhFKwHP0+2AVVzndhXk6nX4djfgDq5jvI6r7d5LGxhkld9dnIV2P8OT9AXAStoGeAHfnoR+8GXAndQJWM85ak9yjtrjnKPWzjlqD3CO2p9wjtqX6FXqRq9eB6yiH9MRvL4BWEU/oaPow08BGyhFv8T/fg1YT+8A1tNvAKvot4ANnOXWzllu93GW2xzOclvEWW73cZbbHM5yW8RZbos4y+1xznL7Ev0esJn+QHmMgmd63v0y463phaYP6Vr6R63XJSFjnJDcjTnciY++XF3BQ97bvt1jY0owVVtDW1gH6ZvqWMor/CFnpx08ZitTh/1K2+T5aRdLMD9LJt8CfvWAju3Es0schiwo/UPfEwchHWYwfyc5o+6AWGcd/zbn3LlnDel/SutSL75/W9BkZvKPrAtK+aYPUtbxac6miauPy5jBVp6dPi2lZVQkIeev73D1djsWEWMfY6uO0Wl0Hpg+7kgQzjfrnyXvfiFt8ZyTX1B1evh7lqPOiqxPZjgHtk9lTH+kdevDV12P+9RdQY1Udci+s5BTb1FzZ7mqXN/b4E/GOp61tLWUkdWHNY4Uo3k65wpl3egb5QHU+Ukjtt1bV0TOcu5sjjP4svr1kL+GRI3zou8DxHcoHjb36brEnsWdtt5r7ZIRMQCakwvo3+p41v7m31/2vRoDFvBh7e1Su0zNjBUXAol0kPdcPiynlS3E5l5muDY/r1bb1VXRyxFxArxFYvFmMaHvq7OZ7ehdHIkxYWWL6Upp7hppLB/RLVjHcWQksHIJ67WUVpqzIkBy+hrdnn3uRpTLWodSDg3ECJrq0UXwzG5QjHV4vcR9HdFZcR2sYchfsxzP14Bv58GPs6LBtDJg5qfN3GFAVi09yrPS5p1L/f6Oz8L8jo4r9Bz3nVXJmuUC9wjK+aJNc15Ll/VL2LFjogPY2iFCoiwxI/LXPCSQ/skhOT96BS4BRjVV4QhJNx+E6wofMFWagvMz5rda6fkZ8x+tXNowtosRnxSy0z6nUkkJslsmzDZs24xFZrKo70bqejwboAfNYpCanXN/GqnNNbA2N5O1uQbW42awHncN61OzWZ+ayTrUHNaAZrIGlGANaC5rQA2sASVYA5rLGlADa0ANrAHNZg1oDr6t82iVUp9cyD3o5mt3s974GuuK19JdgI4QLfFeBqkrdrKmuIB1xaf4viqv0kP0CN3GuuIP+I7nXfRFQCP0rz+lH7GEfBs0ssfxeTvgNvozwI/oCcDfsla5WmuVHYC7odVKUBrmU4CD0Iufpb+jVwD/wPrka/RDwCuWDrmAjtNb+O1n9Au0/yvAj+ht6sfnM4DbPLrlIOA21i0X8Jxu5Dm9j+e0m+d0I8/pfTyn3Tyn3axD/gBrdD2vZSPmSlZzWcArdyPOfRqr9i2sllyrDNo7j3ay+P/vsBZj/wduD6PRAAAAeNqdkc1LQlEQxX/z/CgkQqREXImEq5BqZUFBZRFoLXzSQlpkj2qRhegTjFa1jhYtIlq1bNE6Wkt/Rn9HW5t3/YBM7IPHO/fcM3Pm3pmLACHuecef3cwXiTvntQrp49rhCVuVsnvGHn7Nod0moItg4VMlhNiFtYSug5Fh2UkCq6WNBMn1QlFxx95WtHO2YrGQU/zmCJTLFZeEs1B3SDnOaZXZo1rZIVNvVOusmEwMei5/3+cpQYNjjBMhToo5lshTZN94hF2T4aNEkxvDLZ3AS5e1+DAsKJbEJC1ZKUm14xS345Sm3MpTV3vtnyhcalWPTeofN8zPNXc8a3UxZ/aikW4Ho1WLMNF+LdEufvJ4e0+nq1g6nxmWlV1pj3EeeGRee2yR4U2/xSGe/9z0N3f5q/p1rmIm0cvwXvtgZEWLKWLKwwM1vZlMaPwCl4bufZo3TfQTSPU7cAB42mNgZpFm2sPAysDCasxyloGBYRaEZjrLkMaUAKS52ZmZWZiZmFgSGJi+MzEwMDJAgaOLkz+DAoPCbxY2hn9APocQ03oFBsb5IDnGD0xTgJQCAzMAdgINQAAAAHjaY2BgYGaAYBkGRgYQOAPkMYL5LAwbgLQGgwKQxcFQx/CfMZixgukY0x0FLgURBSkFOQUlBTUFfQUrhXiFNYpKqn9+s/z/D9ShwLCAMQiqkkFBQEFCQQaq0hKukvH///+P/x/6X/Df5+//v68eHH9w6MH+B/se7H6w48GGB8sfND8wv3/o1kvWp1BXEQUY2RjgyhmZgAQTugKgV1lY2dg5OLm4eXj5+AUEhYRFRMXEJSSlpGVk5eQVFJWUVVTV1DU0tbR1dPX0DQyNjE1MzcwtLK2sbWzt7B0cnZxdXN3cPTy9vH18/fwDAoOCQ0LDwiMio6JjYuPiExIZ2to7uyfPmLd40ZJlS5evXL1qzdr16zZs3Lx1y7Yd2/fs3ruPoSglNfNuxcKC7CdlWQwdsxiKGRjSy8Guy6lhWLGrMTkPxM6tvZfU1Dr90OGr127dvn5jJ8PBIwyPHzx89pyh8uYdhpae5t6u/gkT+6ZOY5gyZ+5shqPHCoGaqoAYAIpLiH4AAAAAAAP4BTcA/gDsAPYBBQEtAS0BNQCsAKoAvwDPAPAAvADeARwA2wDWAMkAjwCaAKUBEAENAQIAZgBkAEQFEQAAeNpdUbtOW0EQ3Q0PA4HE2CA52hSzmZDGe6EFCcTVjWJkO4XlCGk3cpGLcQEfQIFEDdqvGaChpEibBiEXSHxCPiESM2uIojQ7O7NzzpkzS8qRqnfpa89T5ySQwt0GzTb9Tki1swD3pOvrjYy0gwdabGb0ynX7/gsGm9GUO2oA5T1vKQ8ZTTuBWrSn/tH8Cob7/B/zOxi0NNP01DoJ6SEE5ptxS4PvGc26yw/6gtXhYjAwpJim4i4/plL+tzTnasuwtZHRvIMzEfnJNEBTa20Emv7UIdXzcRRLkMumsTaYmLL+JBPBhcl0VVO1zPjawV2ys+hggyrNgQfYw1Z5DB4ODyYU0rckyiwNEfZiq8QIEZMcCjnl3Mn+pED5SBLGvElKO+OGtQbGkdfAoDZPs/88m01tbx3C+FkcwXe/GUs6+MiG2hgRYjtiKYAJREJGVfmGGs+9LAbkUvvPQJSA5fGPf50ItO7YRDyXtXUOMVYIen7b3PLLirtWuc6LQndvqmqo0inN+17OvscDnh4Lw0FjwZvP+/5Kgfo8LK40aA4EQ3o3ev+iteqIq7wXPrIn07+xWgAAAAABAAH//wAPeNq1vQtgFOW1OD7fzM6+s9nZZzabTXazSZawJEt2SZbIU95vQnhDCAiIICAiAlJERIqIiIgIoiIiUqRo6cxmQaTWR5GqVa/XUrBeL7XWqqXF3j6o12Iy/M/5vtndJATrvff3V5Kd3SQz55zvfOd9zsfx3BCO4+eLkzmBM3DVCuFifVMGXeDLuKIX/7NvSuDhklME/FjEj1MGfXFr3xTBzxNSSCoPSaEhfFAtI3vUheLky88N0b3LwS25Q1e+4B1iE2fi8rnhXMrIcdG0oOcsuiiR7TGZO5cWTZxXF9VeWqwiZ4wq+YYLcn5MsRouKBKJKtZ8ydEiGIx8mbee61mT7FUX97hd+tIKZ8hCwsKhhXsXwr8SErNEX48ebFyypLFh6VLRqP6lbRu/gqNw7OXPCrK4jhM5C1fNybqYbEqkOT1n0EVlfZzI1pgsnlN4eC5vVyzwTCM8O49E4XHsIYR+30ti5r4H+5CP8PWZvuI69S/qQrKH2Nkre9YwjhNaxQTn50rIbC5VCDin3B5fIpGQuViLy1vgL/Mm0kTHuQFhXioKlHnjAFGLYC8uwZ+I7Cd6kzkPfgIEN0dbBooGUzRltFjjcYA2GJMLz6V9BqRji8FXaIymjfRNymDEXzboTFHZZ1c8JJp2sx+4PfgDt9MUbbG4PfAHVvq5EiJRua7w5IDvf13KuaPmkwO2fD0aL+RCewtfaHBGWwT6XY/f4Z4tJp8RLjz2FrPHAhdue0ue2wq/YKffJfrdhd/xd7z0d+CvCuhfwT39mfsUZe4TwN9pKc78Zgl+Lgy08wISwC4hvYoCxSXVnf6TBxbi4tQmkuHahDMh0C932ABfQtiJX0n40bCjRU+fjD5feRa+Dpz0P38qdrTqDHy9caboLFn/6u9eJY3qUfyCS3UDWY9fr/4O15FwDVdKhJfFr7ge3EZOrowh35qBXQpjaQe9InJVTLadU4qAa4rsSiVQUoqnuxk4CX7LGZe72RU9cFIZcFI1vBbZJIdiJvX1SrdKuBIK4apMLzlSHm+wvr4ethd+zEXq6+VCqYXYvGXA7rLDoUie+vqeNQOIJxGvq+1VLdb2qkvWJtwer6GahEvdrmIRNoPBHa6tJg0bn7p38oS+s29fMbvvDx5+49n7H73upgGP9p29At4ffOKNOac2v7162PDuI5P1QxvXjt79ZuDMe94dz9fWbIwMStQOmbRh/KPvh86+a5kA+Itc7ZUv9IfFBti7EufmSrgI9yaXKgZulh2JdJgyKUgGeOtMpCX6Nm3MKxby4IW980XoOx99R+RudL+bGX3MdiUfuFNk70TGq0H2LmhXyuGdn75DuipmDkjDG4E0+ZLsqJdFR0owuIFqStADFHQWFMO1XC7JrnrZ71B8AaSnMQxiw+MPlgMdFckHb0TOnA9vgG161QVRhAQrki4PUrXUSRImctWntSdIt5Mn1V+feH/ILUO+Osy/f7QtRlIdPhSOvP67371++rPPTt975533qt8MEBddfpR0/BD5SeASV74Qa4CepVyUq+M2cakg0rIooVToLsj+eMoMtEz30nEBJFYyJhvOpXsYuALY4uEeBpCKHPAZF1PC8NLDrtQAhfIYhXoDhcIGySGL9XIPSe5eL9c4WszBCgcyUJ6kuLohOSqC8BvF9XIvKc0Z8rpXa4TozycrgKMSKFJtvMHjrUuG9PBiqIjow6UV5S5guyRcO13e/qS2V0W4VJ+oGNFQ1/jGM7tTVVMn91v25M09iWPMzi3NIw6mXrj4/kUSuGX6pIlPr5ixLjpxanV1r6Fk/uAVM4eGH1+78+0f3N9/2Zwh3Tes2PLC5beG2S6VLrjvo2OjZ9dueqiBrxoxraa5f01yAuw9kNfkbSqvAyitNVFNZH1GTiuGdsJZE8sZcQx/v1PdwTeLnwDvejgim2MyOZfWU2KidIc/dNgdSS9vdxoqdm6596UPPnjpXtKLN5M3Pxqnbmwdpm4c9xGVAXPhPlXt78OfSxva38fpsAtJj8POG+Z++OFP773vvnvVj8mdwkvkznEfqfVtl9T6j/A+4/i3hRliirNxxXCf/JgsnEvrmAS2w+rpBFgbCyo3Z9KbTHiTXoPXEDFEkuNiX/r3FV6sOb9m3cFD69bomh+p+eulXo/MPzvj+PEZZ5mcGsa9JlzSbQbNNpkDBpENCYUAR4nxFEdQ6HNmUB2Ew0simKJU2ZnPyXw8bWL7TRdPmcz4YxMqGbMJL82cKZpRgLUhCZS8OySFpWFk4XmySH30PF9/lqxRN59V7yN3AAzN6greSuZydi5B18us56y4XhLFlPFpSsiDO3MCPERxwJ0Vsw6wzgMuBM6KAK9l2FBvaL71e7w05uYlDTcu+WnLnyObxjWNGzNn1+Yjf6+DZ00je/kGfjnsqFLEF5HFLwLPVTjYFYKJMwFdxQzw7mnka7L37Fmk1borX5ALAKeJq+1gjXS0TMxXWybacudsj3XM6siYG3Bvv3qCXyseBbgmcggM3kNgFBbsCgHIeLZfRaZz+8/66z5UtTqZq5b5apmzK4L1n2iAEOs/+RaO8IKm6AgiQhLET544rc5XT+i/+qeZ2Rpjrnwh/FmsAnwC3BiGkZIPi18QUwQkSTFCoZhBZIDAdQGnibB1StpLVEV0oTYyoIgoAENLETlUN067I+iQ7HyQJ65iPhHvz9ur+XCpTRjzDXn+m2/USd+QoqJE/26V/RJ+f6JfZTARCzr57WQImaEeUl9Sf6I+SeaRoXenb6isvKGF8MqsCk+fOXtxDbaDMHxbdAG/NnApDiEm4gXZhDaQZvvIhhjlUv6cYjJcSJl4ypwWYE6eMicPzAnfdYxFFRMPfGTA3ZMAVg3X1iUTUsK9nfgvnbz//KVL/H/9pKzxm99ewmf3g2d/DPQqgTVK5eOz8wTQ3hq1wK7ynVP08Ei9D5+jz4dH+vR46bObqLHEKXlIJIsE+qZIgt8rQc0jOGQOidafZORoXQI2TG1/PZOYhn43vrX5tS8HbVzX/P3JRN+6dOr8+8dMryqeO2Xgkr665sXzP/3JuCPHH5pnV59vnLNl6rIJ0yLNNw0byPZ3FazxWYC5gruDS5UjzALQywL2MSy0I6YUIOiRmKw/p4RgoUN22R88J2WMaD9gk+9HFPKBgEo3oJcfrA4lUExtjnIJQZctkkJCgIiV/UB2SIrbD68FDtnT3vjgw7X4SnGKsN1qcBcTQJmEg1Vb7330httKRj+w8NC2SWOuv3Xwoz/79TuXPlz1wKYPN6m/3v/yxgkjqwcmfGdnTBoypnefE4deOny6yVj6zJqVP56KvBzhOJ0R+MLMObgZXMqE2hF2oj6hWABRXVzmgSucYLmfk61xNNBlIZ4yUoYw6mGhTNT2NaHgQk43mgA1O+BoMcMFqZd5Sc7HRaolIM/cYeq21PZKhgETMOiX79qlfqH+mTisxshgknxPsLWZPlffIsnPz/T4atJmWIcYrMMHAF8xN4FLBTLrYIqlXVRng6xTbAIsRQldCh9stCCA4UNi59spsQOM2CYpRaw+5BuXQ8lztLfuGGGdwDvAQfFinhE2tvmBbQtW3jorObr/5jL+d2qpZ9D4yY+sGHTvuQ3qxX0vb1g0d84if2QKv6PtUkl8zr75D/xyEdBzEsD7F+CbYq47t4hL+RDiUqBkt5jigBdrDJw7ADdKRQRyS0lczqeml+IG4HvAazl6Xla9w4eWhFtSTEbEo1sp4OGmTMLlU6aRTfWyXpKNzKIQEnFmm+oNmQ0Bb6oFsZhkkZxUP3fznkmf7tlXtiy5coehZteAH/9q9anVY7etb6ojfueS0SOaZo5P3sQv3fanZ5b32puO1L5yrv/ot3++8RcLq2985D+kh+66edHcGQNwf8yAPf0prIuNC3IpC3INKgVcCWB/O25ZAsJOFuqZNrCJhlAhSc4Qtoy+ZVxN0K5X33fubtF5207MfOa5ve++/AAZT/79a5DiU4B+XwD9PFw30GrruJQLdUQhW+yaGFq51FTrRSW918CVoCULWy9dya69djT80xZqL8gB3JQSELYWCOsVASK+XqkGm7/FVRgxoo1qAf5QbPlI4ppCyXGMEy1SpIdmpyVr2+lHN3zXhUvLqHVGnYIINdHAemPknXL+6B9OtPx6zqhPrnDvvK5eIfztk8fNsUk9ioaXVtsM82uXLR8/aeSAiWTMm6uN35cP/uzU09N29TR+7z/2vvvmq5PmTRzvrSwpdZXmu/TCLPLFqKbozHljmsZq/i3Q5VOgSxHsWOArG/KVC3ZCYUwJAl+Va8KUmvtKAPgqYFe8oPLCcZTm1J4PoPaxowz1Si02l1CInr3istEdC+6PLNXLQYdi8jKrnmMmO2wIwe3ikZkiScpLSbxmNmpdEtSTftg/Xxi3bf2suqm7Xlz0yd79pbcmV2031Dwy4OhZ4pg1PrmwrOzZ4bOENaf/qwqYaJOsXnx2yt50Rd0rH/Qf887P584ceD3JX4w4UjtBuAx61cn16Wgp5BG4dmiWgguRlM1xzUqQ8zNXiruTvSB1thw62g/8F41LlzY2LFnCaEztKXi+nSvkbgTOw2f66DPbW1f+mCydkw3xtIc93WOX85D/MlZHLOMhFAHNBQlYzWx30r3sAa+gABnt2jaYkAW4gzVWwuDuYJTp3swBj/boWbBH1wLtOJC17jz6b5hwVH1UvUhcZBE/4H2y+OvVc4xzVn9N+YmMES4JrTT2VMSlRMBV0ekuaKYdkY0xxZS15Qh8wb1aG4WjZMzZs+QjZte1e2aytorgP3gmWUjc6p/UPcLRs9rz1F3vU/qibGwWV1Iensu0ajrI6OuLoVyn/Bs4ly5lcSlPaQA8MIPGvh7YqMfsguSjvqVcKtFdKxuoDa/4wNFKGfKLqGEg5QwDqiZFb6iiv6AJeqdGYqD7pNFv3r78yMLS2oH94j5R/W9Lj4ZJ/UYNqJ1abV+wd9GicWNv0p2cOn/E0ysTs0cNHzZyZs24Bxc2NVf2H9yzunVDxgblufnqfv1ZcQY3mBvHPcvJ/WPpemZR5cfS5ezKgxwyjF2PjqUD7KoqltZrfvp4Ks8SjIcSdsUHMmwIezfEjgaE5sMrDUCKbkMkx0CTPt8TqKrv238k3cf1/YGn+lJfvU+9Ug4eOvjsyuhhkiNt9oEsRZoFpFRJqLSempq9HP1JWSKuc6DlBLSIhOm2ru2FVPMmkglBn7E+wAB1u4pBwSS9QLVqni93wbUTqGkj82c/9znx7P4PMkqZvOXAxOkbJLH71oHf27X4tduW9NQV/aQ5uuWGnQPvOb9j0dvy5rEDlj0q37DvsUHp8+s+Pb1jIv/gzYOG1pQMuG5WFTl4mPT47NDUk+rxs5vPbx4xcUSfMYcfWPf5wwumqP3k9w7c9rMnZwy59/hfN686/cAN1Q0H5/ZZl+auPLmlibj6ztlI9+8VMDZ1B8QkcLTEjWZWriwkUgRdfL2RI3lRRY+87aBC0mC6IBvsig53qemC4kSPEPz5Fp4YTZSixAg0tAGtwiREQkJIcIYi1XwkzBus5AC5mRxQX21UFzVuJ4ESe3nUaproFpOX3yL91FN85do+D6di6r4xNAaxD+DaCXDZuQIuxC3nUnaU3pLuQooH0JSQ7kLaV2DnATwfgldKwQOlJfvissQ8CAu8s9hlHaozKt1jAOwFJYxAoythoDZCgUQ9Wtkn0Q/kkEPWAfzgRwYlVGB0M/DhSCIOeyFKaplhECX7yJvk4uzxSzY2PPjisp8d+XrN+iPbFi+8ccl2Makem3Wo2Fj01Pp5jzXHLhybMu7jxtFjBzMbufnKF7q1YgNIy35cykNx0l9IiYiTRX+BSkpAxAbELUKDQEKedKHZm+JMTtyookOzXhzUZPEacIO6afDDqw+VVhO+ecHR369f8+7op1av3PaTH+/avnL/EfXy3b89Mo/f+TSxynNuGPva4j++/s7nd750evphYmByHOmdpnzg4K7jUgaEzChq1HagmHFSyNCaNdoVK3poAKQLgXTAois6sV4jG6xZKKLtA6TTGtKPzFEPqO831R/7ee3CTdPrgUQvts1Xn7/0i9+v/EFzd6QLPF/4Cp5v4UZpvpZJuEDZUNEJF9IiY0URjSUrBQQ0NI0HcBmXC74LJi02oAUEWDCAfe0TBrf9kfxcvY6PwuPVS63qu6r23C/guSZuIHtu7plGkT7TiM80d/HM3NMsnZ62TxjZ9nvynlqDT3pbbbucW/uDsPYl3Fou5e+89mm3xy/C89wic/AYG8g2O26zdIGBqwCd7izARzvdzMdTnGCIpCyiHxmjQILFQY6W/MAzBfWKx41WGjjJwD3AM8g5hhznaIYv45zaMPij1PYF9rkpdfHey0ee7Hfr+H2nXn5xds1vyB9GXrh365fKjfzOA8Qizzn6Wm3dH37+77/r9vlXbY8Nn6kxEaWl7g26hgM0SWJgkkQWE2nBTKkp6LMriPuTj8MWVYwEYztUa2UXLvv/PlJF3iUx9X01ISbbVJ6//BZf1XaGPY+8Dc8TQELk1k6LaCgC3A2/xOwd4U4obSisIdCra+FvJS6m+dc6WAsj/XsHhjQxFoGU5xRdPvOGjBI4Z+gBMe8Absi0QOjdshtqJ08gVb0WPLv40fc/3DNo8MINwtzWTfOevWfkao0uyNtWrqdGF2OWLkTOo9BaKTEUW8YLUASztp+kBAmZQJoaEH4j2UbGqEvJefW4evIJoMd5Ptx2sfU8n3hXfTyzjz6CZ4lcD20fCdo+ojFJRpeUQDlYEIGNDDmCu+EBvF1MfvOGmllPEWkU5qZpcOdpcFsA7jKqfcMGrgr0bdiOoCt5QDN0y8KIgR8MC9kmtfCWAmrK5TkUtwcZlOKnd2v4OYuJN9GfJJ242OCTJcMWgv+KdW7AeOQH+b0sRmtN/hkyQv1SNBttvHHJK4deXmzkbUazCBQ4Gv1hqOzZ7nwj6JEL5TOXjlrnVE+pPFFJP+e6UUtnlqtebQ1Qvrm5Rg0Xq4aLGXDxUMqAMym77WjDIW+iK6C4Oc0pBl9Y4fNwLzFRp2Ghy9ewIM5ENY88ESJCGNxhAL2WNG008l4LKQYZcHCjUXBbAdxF6oeB3z4znHwAbPw4Ke32ywPD1YhmS1/5QvSDfDBzLrATaVxBsQFXYu5CceLGcbONY0LFRuOxepDBHni1W0AQGE0Czc+gVFD0WnSMA4Es2cHjJC5PEFVXUN9MRhMncZCxaqrtN2oLqX2a2J/er/55P3+ADCJL1J3qK+pPMV5KBr/15ZdvvfHppzkdgfyQz3m5QdqOo/rBC9rYZudQG9tQGxdkPXU79dSdWp7Sh9zttUtMhQHVqJ9kAy3hI5p+3Ud+MfPx+2YnJ+54cemhnV+tX79VTPoH3PDI7NvkJXVqHz599sYZzO/YKs4BWnkAsykcI1GJ/gLGNqwoQEMUBC9QCpzbIo1SpZjd8gKlBJcJRaZeUqwSUsyKRkB+vVwipfWczeVjrqxGO96AG57acWWRCr4LOn56Orqvaczw2mk731F/NerDVlK7nzj2d6Lof6tP9R480PNR1RsHq8De9/7qr3/9FZKW0fUUtXV83Mwcd1LSgnWTzpcoafORtIUULzuQVorLdjt6b5S0fmRWOzW+QFApljyqCfIztk0HgusNIE7CPpIzZT6Ztuv7TbV33Up6qkevcIeeWL1uzVqQLr6+sx6atf21mrYL5BO1hH//xrmzMecxAvRYFdA+zi3kUj0zstON4PqRSxMx2XFOKQYYi+0oX5Qo0L4XvBY7cDcR9ECkY7o8t7+iJwqGqEMp8CG8up5M0vqlFuLwRWksB1VZTuiCSRGpiJFqUturrJ31U8x7i/kSotlqpWUjnh91dELTbGffiqTNcPT2PcT63qpPJz92/9bxMwt6J2Ki3qx7/u77ht712u2b1G8Ovzdw9JB+gcqIw6sXRsWO33f4s5mTX1k8sN4fDRc4eUHgh/aSN0/cfdvg+UyPJ2C9BlBbCSwlfdZm4AQM9KEbiGE1EcSsSCOyIhgKKb1I47QY88v5iCjxEjqr+rD6vq5eVb95Q1eP998N9D1JdVNS0016/YWcsHJkxDhG61FYWZmmAouJcjHeHJWTR9NSlI13k9htK1etIqXq1+pl4MW/8zfz77a5Xz7wzE/5P7Ul1GPqm6Q3R678DXDbAM/OQ/s0D3HjMs+10ecS2FLErphRSMKy5mOInsCyWinHcXk0u9ezRgg5PQ5vos4Bcp2EbGTAfvdgl8k52LWPJNRl6i6QhA+PUj8fMZz4R/G3oFImXIDj9Avg2QHugha3dBclEhQAxexIJDJZAg0EBxpALEtAsxR/uHQdLQgoqrbJvlcVfd4/ZdOrJ1/b99c0fizKbvjc86pis/1Ttr6Kv14Pn1tkvb3FoDc5oy1G/C4X2Vv8RT5nNAUfBu8P3h/WgzSFPVWfgo/higMn0mS1eXx+gzGb4ycDLfihGz4tavcxy4mwqF6gXnE6qDEPVML4mVhABXQ7Ojk9zkSdn7pN4FrqDUIoQGqbjOVGk7XW9hDhtutHGc1Vs0jwS3XTxoKAKWJfB1Iw2fbQYPWzEQNJ0Sj+1raHAurqCWQyfyuol+bFv7g4su0A5VkvrOsKqv8qcrqcz+k/1HacwlPNLFGdBjaH1wOQDaDmhwaRl9ymHiQNK81TjNXdFpPr1UNkuSpv6tbPaB23jj/Kb2l1vr5uRmvborY5xD7l3uBL6l/onrkCL7ohlK/iXMqa5Ssj4ysrtQYpM1msSBsdZSa4pM4YMBPSCFkJ+ZkMXr3AYJxWsIb0VZeoZ8DIflf9s/uLgSTRelAtJzSPOQqeZ6d2fbVmBxnADtLxzCBCg55a7YqBozF3ltjUI961JIThm5B7FD+u7YKwpS3FTzoubFSPt65T2f5PqW/xc8UjsP/7c7IhmwvSxdK8FpkwUtvIYKJ1GHxcqx7AhJ+Z1vFkZADYXGEp4U4R+b331Lf0n+y/3PwUe0a9eoLf2ylHR1hsA1hfuCpH99oP//r9Tjk6wnJ0Qlc5ugQJ158m+06LR2mCDvOib/E2itNwihPHcBJiaV0OJ8M5EHBpvYaFPQtQDN9oyAmZIJg3IaFXEWp+/30iqw17xAP7/1lCn7WArxHO0ForDpOFzN5bQPr/jfT7urnJOKsZfh5tPUv0NCh2mf6NT/1E+OLKVqBHgEOoGHzaC82oMjvfC1LVJ/xba3zlEbZWup38Cf1e+Lsg/Tui54y6jI+Q5k34LpOBTRJD6m3SZ6d49g116yPM5sHY+ss6O+ybYm4Jk8YpJ7JTge5CyowRQFHHUikgmDwgkz121MVAJ2oMY2LFw2nBBtBrKdFMvfg8hyxl8pg0vCyCg2+gkThzxsEvKwflpiWvpDBsPxpBxgByrY1MIWD+mXct27fkP8/9/N1/uI0P79pyiIRW9hzZY889xP90quSRpp9v+v3nbScXbpAfn9O9R8o9GfHZBLplmLgXvPwi7gbNhqOBcXA7U3rEp1AE6RojcoCi5GROmtOuFKCGAYlfjGKX2r525nXqbbhZ0VLWYuKYY8lGUSTMD2kBs0jY4KRayQ6IbQJvZt32E78eccdjE7d/z1hw/fCZExfJMyaJe9WnnrhV/cMf1/9qy+h7l5KSQbt3Eecs3NOwFtt1aCWBbnIj0HYAmoZhzWLWNsozUWuIU+zg/8pOICiQ1ujQYicGrZYEHeD2kROM0Y2a8vDLNz97z7YR1y/dsH7+1Dmr7v/5zS9sHkta176zacSSU32f/P49T406vWbEvW8z3mgAWtqBlphpm6dpSweC5c2AVQS0NMcy7OE2Uf8CrGDZFKdam+bd0E0XHZieAg+eJlW8eVp+RS7CsGwu5oNwe7wRoGqYxR75cjuALyEmDcNXPzqhYXl9HqkCdui9ffjLvyO1J+YPGn7D2EWkdc07m0b1qttLZlyeP7/3UFL8jXq+iewf9DDigXT9EOjqgb01j2WP0I5nKPjBAPVaXGJeNO3V8kighQvOYSFfgS6aKqDJzAI0bDBdbywA89qMLA142FwS8jnGH4AzvA7FyJwSigfwhCHELGvEhCMhGmseNeHe55ve/9jatt+1ddHSW+aPe2Xmb9XfkCBZNnHqqKWk9Y53No1W//rrifHFSwYfr+tHSsj86Qvn071eA8hcFtOAxzTGHyk7YCCThOLEKH0cXG3FiLvVG5PdWFeiuDD1HE+53IiDywF2mttFyw8RnQKaRLczExqcfzPNyyVrc9wTICw9W7O5csoj8+ctTPbrsfKFF9QzgvW35uSkLUv7lZ93P9zvYuslwYoxzWFqgy4CdK7i+nBDuT9xKQmzJUMoVWnmRPEAnN1j6RomfHvHlDBWXMXSAzQxN4yqyr5YX4XB8WqWsKu2y0F8m6lRi2Xq0/raletZ7AizfL0wEBoBrhsO61QtwjrxRnSDlL5YcHVdvXy99II/EO5ek+wtoendy6GUOekWlz31cgS8dxcuau8a+MsIV40bKiyleOE6vPIDDwfhdYAEbmgAP/E4WqwFfa+nrpRXywoma9Fyp/QDzccyChEbWO2ePgQTDDoMYCa1XCF4JqU0V0jflOqH7WgemOgzfuiqXZNmDCErDoQ+VvoMdNuHTzz46inwsNW1P7n9v9feNH/T6IZFzTW9+4+9cyz8O7q20dj/lrobw6ZuD0ya/uC0WMFH9WOe/bHLESyMlN957/53eq2+t3e/EbVVYWuc/6/GadMax06dDLy0CewHH+xtZzYqbk4w+ZgvMPno6iQfsRgXY0ZuTT6CAETG1wPJ9PlSR3kIAj0ksdSKBHLQ9sS+p59Qz/QZVDshieLv+NZfnW7bwjcsnlzdq62RypqlwOBviW+AzszD+hkzcrcFudtI6z1dyB02Vj1m4opBM7KXljw9MUZZXU2MaiS0sfLMIF+MQj26Cg6aR8OFEACmpfNGj71h7pjRo0mV7vP7p069f/o3K4SvW400V7BHXUbeBRjQ/5/ApQz4eBtNosKOSjs1KAqo+2MyXGgp1ku2aNpNAUGpp5j0kqPF4fR4aa5AsDFvz8DiakLS0z6s5sCUk0tfurA2FuoTI1XlDTvm37xj3u5583arW8/bxk4VLrfapm5bMVC/msKprdkUWLMOcTaRioBYV3E2sas4m2BwbyLlRnDbh6t7yXr15GcbxL2tb5JH1Oa2I2TrDi2WC3qUr4Fn5XERlsvHGgX6HFs2+oikFrhswZzmk1FlUwGrXuJx28v7ND2ygfTR3fDNzmil7mOfzDE89HN0GLNZqtmu9gLwgwhgwohuTSgB4EJ3PBPnCAJWQapZlAK4LLDTcnS7gYU8gho3+iRQf1gpAwpakmQrBrECGA3RmeoZERIYiYPNyaohNB41ZF83feUyjXpw5psNDY807X8SGXbMXPw+rln4euOoCUcap519nfHt3LZG7SWzlwAfJ3JuZi9RbDIbqv1u+vatRNBiEnRZcDtvJoBw/w+ym0n4esNjnbYS03dUDueDJTGK6W3FmVHZBZolQc4pEuhriRb8UsMHQywezE3rrHki5eACJ7wjRhNHhZwDBFu8mAfuBSHmsCM32wGqUY33p36m3N/YeL/ys9T9nzY3zZwzZ2YT2fAVGBUjNr3z1bvfHzny++Q99W+PP05sj1MbTd2sGwbwoY02j8uZZzmSoY3GZW00B1ItLjs62miOLmw0W3sbjWQI6dQImbHSvD6Ss9KAoFt3nTiHVtqG5WZqo02dqm4Wl9+4Tv3DxbvObBm9+ID6Ab9Hs9KoXQTw2wF+tIvAxsyaRGgu5+yivM52UR7YRb6cXZTXhV3kYGE6ZhWZO1pFiSRu4mRXVlHj+n5G35/UM3m19w2+yirqe/2Nl7eT2r3A+e2sIm0fCjWAh50bkckv4O4zJeguVKwY65Iy8Tj0x7DaFqMSdp7yLKdYkXnNQGqpPc/SLSbkGLbusQkje9b06TXwe+XC16l5N7nUVvvM2W0phCEKtlkjwNCDu4lLdafxfLDMHIRFXWllfz6t4cI2CvBjqILHKn4fbhQroa5FWnB4g91Rp4MWd7lpiVd3Jny9UgvJd0dYBb/sylR40UqdMlpjQS0dLN73FutYCUB089a1G8x+d41vgFW9dFb+yfOb75i9wlzgrvL1zasaMi5eev70vLMrX7p5is3ntXvMBeKC0w/+eEN6SoPN6853md2iPVjbd0bd9hfHUTqHQZb+WQT1wa3W8rwWzfpE281IbbeUaMzG0ngOsxnumOzMpeSc2bJgJy20c4IFJ5vsWGFSwLxS3MaCk1YzcYolGyqlNSVg1jkTtNbOlRHQtVL4ifDlS5c2dq/rufamYz8Em85KbOrfLqqLDrg+Kv/3k+QJhH0tyBKj8DWTbTkPQC+w7UqjK66uAnbuTMDOgQyOYTtFnzH72wXwkllbP7iWVPUd3HtcNan6yqMfumeeepps4Fe3yYunJPrz+1uN2xonMb71gbz1AkwWrhvTTSmOaLEWa0w2UqLRRJvCWTTDxBlyupwswhLykdjGBmOsZBMJqWn1oPC1GiLqG2+sIB9TO4Da2Xod3D/AvdEhTodMaWofpzN0Gaf7+6XlHeJ0+f+Uja+efO1Xf/llhzhdnv2fsuXVk/1f+fsCGqfLBubgey4wxx3XGy15Hp8/G4kz4Qc0Evc/isJhFqqOBuG0bFQuCldDonNNxQZjpWM50a1wVIGBa7qBeC6p+5v8Raay/BnqYSBSZd1b1V8MIx+olaM+jb+ZIB+0Gsnuuw//ukG9mcU2dRzQzNsh/pbhkIIYy42w+Juji/hbpJogF+STAEmqH5EhM0p7GcnQoaS3+iGpV1+aax9oNxp72xp4O/nDwRELdEcOtn2lOg4HVgUcd5Ye1vhCXaFzUBiiXIYlsPTQxXI2DARXPvPZOEnROTIRSi34ZhOwoA3YcgABJtlhG2Tsa15Lgur+irGLNk8fM6TuOtOmqnygxZge/2grI+lv1Bu3LIi5Ps/bVEd7C0CeroPnt4vJwT7XESbUvlNMbhw5om7i/6ZOIScO8Ddf3N/2yEWG2wAtJtedu5OTS8EDYi4UF9P610DdpC2aFxWNyRW0Gi3AhIM9Lgfs2OVAewxicrdEKkB72QJWECKhOK0wDehgaTxeGpcEf0kprKinch0/wtSmwUmJVUt7T0Bw9iFuFl5wZ6pI9NTNcbPatV4VA5omu9du3RAZUGUc0dAwwlg1ILJh61r3ZPKJLEztP+BXow9s2N9nUt2vBy5f4jS6bl4+8Nd1k/s8teHAqHN3TmE4yypHVuo5GhPrWMevvWQCW1JCkk+rnJH7Ohvr20BpdTuH7qYW6wtlqeaOpT05WunOybZ4uoLRqpBSDQkVjqd0AaSSzg1U4nJUAoXHKSEa9EIaBSXFAja27AbZVog08jLvLusO1mUKazyMRl63jVCyRUlzZGCVCalj6nE9Usc1qalpkguotqfPZKTMzS6jcwmlzHX7NxwY/asB/acKsjDlznOjDmxgNOpDLgqq0MS5sd+D+f8tTmMe+EQ8slwm8O3MY5XCRglkIgDLO5i7T0s5MwEi4H5Dny3PxaZc32dgScPgvfc9F5s6sC9e8lvOBKurgqvW/BJfVmM/qbqXd4De1vpJBfT0jd/ST5pP+0k1Py1f6yfNN2NtlcEosH5SZ7bQ0c8n/CTTTmqOvh61CJMalixpaFyy5JvHiZ1f0baNBt550E/PC5+J/TgP2JJgQWAAnOZIYeNJVlw9yQmrZ9FKrJk96TXQrCmmlITCeDztYP0/oiUeR8uSpUuVfBetLElzJluhH+0HPdiTRq1OTuv7q4hIdUA77Pmr4MthaSX92r+fPvTkDVv69R498o4Vjx16+0tSPnrETn7lGWIL/fzl/PknavRtZ/L6vDLfdeqUn9g/mvX9Ep67nvU4AatfFqu4Mm6vJj9KwQvSx2R/Im1inOuLg7ZV8hGXchorAVxSVi8iakWLwGuXizFUoqPlNBiyL2aFNcV0wxeXYU1Psd8UVSqwTMzKzDevpGAJoFzskH3A26VMPmEhua5ecZnQ0HKwlj+JSiuUAZFwbTJRkbOggLMxNs3EQcg9d84a3bsPWENfvfbLhw4Onzmp2Uti6n+L0TjvPBk9tMhZJptvHPDKZ4cOTpkzp675ZJV15OLeRpX5L5XcEbCvH+cKgRL3cCC508Ws1jscS5u1GF057WfyMzT9drSo0xJ9RzHzg2g9RkSD0YcVzbBHU94CM0Zt4GNrXr7T7aEOTnEB/prTxXloBUdYUiSBhqiPiXqj1ab1KGJfXjKS9CKqSa8BWy28hoi+NGLIBW8q1w0bsnbXgzfcunjBtl3rhg1bt2t78++aH/rxjbtvhH9k0PrZ379n1vo9DyUSD+1Z37Tx7nnr9+yoqdlBLs9YtmzG9Ftvzdg1IdEFnHwbi1Ji3YaUwLhkHi1pRr8tL5H2s/eWODaZmRKUrV3n5II49S9t8ZSTBvmcEjCENZ5yUdvR5TGhdGPhbVoeyHJQ/pyFlLEMSAIWkGVvQS3B/wkfqV04qNyYP8R5Eyzjmcvq66Sv+rp6Rn0DlPMbl0WX+pf0tMixnsTednj78u3qGVIFL7iWORlu4MIczbII58Ci1dI7sj5zlUkZJSTM3IM8P32aHGht1q0XNrSuz/RYTRL+LG4C7TqAe4YDI0wp013IBj0HUqkTY2JczDTexOxKEljDyz72ai054ETIEdqSgwFEGiiRQ/VyDNwY3Af5DiXaH14jUjrPWFzWF3kj6VCcvWiOQ7H4sF6e6YGyYvanedIx0eIvre2Pv2vUpCtogIqOPgawjlZnHElmOgaSrmIB2wWqdRH9mGlj+r7+wzd+uOXWm27pN3fV6rn9DsfeO7nq3KCjC77Xr18f7B/uo3ZrGLuqfFhJbMyQOaHh/N4xD1QPm//Ajza9NLch0KsqMaTxrtGHFw2buv3YtEmPL+rZLVjXo+egxvXzy/vWlCdc0XEldRWVge5SjNH0Dd024XkxRevrazlcHmA4Qc8V6ZB3tKuMiS8C2USWG89nJn4HqV2evXpj4t2NjXdPJK/CN7gUQ/0nTuw/cNLkAfg6YPIk1ofbdOXP4gGQ3U4uxF3HPcF8I+xSBu5O6bFCN0iv073jdn0evLCcWEUP+q5C0+B96Lq7qAyXXXaMCCEXIHPB4gdY3wfK974Adgw7ZoJY9TzQlG8v0JdUVNb1pqIg3ht+Uod9u8ctrgBX2r0WV7LCIVdme2mKiYN2PQSrCQ+Lxsf787W9uCDn7dW5VLWO+VhNw+/64VtL77v04tKlL15S//KPk0u3Ttxx+rend0xU31V7qe8eujW9cMr6+uWDRzQvumlKbGSPuVs2Hf0N//idH+6//brmH6rq40+orT+aM+dHRPfE2jM7JkzYcWbtf5O4+m//vP347IH164atbV54Zzi8dfF5upZ9+L/w28U02AJF3DJOdsbSBUxriFRuUmpRDZj2MPp47EohzeVl2hOKO6TzCq9K5znRgbNn0nn+Duk84PWr0nlJdDdr9X1eeNM0c+iKMY89tGn7EZdxyqJZt709JlafFl5asto5o9/WGY8/qq4bNmXVov51tzoZX87nVggLhd2cnsuj3QtewWnQXuYT562ffnrrLeyFPH6WRGaqb6lvzSCR7GWuH1ewcSLaRqyJIdOJqzOxekFdxqJM6QRq63HZkkHstg1Lw4Sj2GLb1kLuoPf83/e86rhB/DphmXiC9vEXcxHuZ7jf0nlMmgdi6RLG+YESapuDkpYdcRBT2NaWR9va0gK9oi0R5JzG11gqBy4oKnp8VxLHqqQwk3kW1vyEDf56tgkqM2VKkpXlN4xFWFQH4qzFnuejdg6o+UJY7ACYjC16C2fDz0oksAzkiEOGa5fUIprzCYsJ2nG97bDWvN0TrLNXBAWJNSN6gQXc2WryQRefO3Lx4pHn7vwB0T3zjNpadnxU0/BJa/v3iQaCwUBUWEgW/PGP6uN/4qPq5z/6ESl8HtTGzqGDRof3rV37btDnLQbaE7PuJWGhuBZo343LeT7aS/sVMGRXALtUiJlv1r30yissdifE+P3iOlgDNze+Pf2dOep6KHXNjHxmWoiYIR/WTNqz2QVqVrcQUc91IobgynURNjx3513PPXfXnXlj+/YbM6Zf37HCOcI9++wV7lkSGTx50pBBkyZps0qwd1wAe3p+phsXuy1jsiWBOXjZBP4ILbLS2UzRdsNIqL1tO4ealO1i2RhP5dnwx3kC8JA5nrJhv/dAGxqIujha3qxDF3t4cg3l2MuTaSo/e5afcZZMUw+fVf9IPMj3SYHjn9cnwc6ew8nWjDwBvZCtCfFiD5SWo0uJEgUP/MuURIGW8ljGURElzYMyW1mIygVSBidrUKeE05wS1rubwM5dNuvAkFx7/N6nS4b2rf1bm5w+0i85cqS48+D29dVN80ded2L1zmND+wyag3DyX/ApgDPE3c/JJXRNEU5YZxNbZzsSVLbRXUXhLsV8TrqIka7ILnvRfrawt5YY7iJEyEJtbIsRsMAGC69eYrayUJIpnlYI1gOb8GOQkZK2VajF7NR0fbg2zpCJaO2YBuo3o6DcNHxezaCXn66rvn7QuiGbm1YcXHl9wwt3LTwibFk0r7bHwvVzu1U3LBtx/fduvH1I4fzBSx6YBPvhpG6n8Np3q/0wES/8Pun7trpNjJCVb6gvY/xX3a07LnzNlWD3oJ/amwma5pHiueBekKYKBNqVSttMBK04DgwAG3xhmb4ZAxl+LIamhY6yBZuVOUUPtmWL01UQQAlCJNo30z7wp+dz1QlUX0Q83k2kqs+gXhMjJMY7qnsUh8Pj5/0qbhz9wNRugqTuFue2yYum9R/Bbx3Q9tG8WMT6cejIU7GPn8/UKzTpGmkNlgQ+BLUg5PxMQWHaSOUCNndgJbekVb8z3d6HSFgggdVXDXWz7t09fUbjLa88NJE/S6qEZTc+edPgotam/refaJ0tfnS5nOqBdeQMuSCMo7EeLUdp0X2XwQXOzu2H/PZ2PXtkkurlMZJh47pzyKWcJpPYpAorU9NYGW0VUAqZaI6T0E0SSSYoP4lk0qpZQ6fPk68bP1Zdom7XV0ZD3S1vbXKOGHA6D2HfC3u5Rl8CT8GeELSzCNM82mwKqhxNdO6JnnG/gRZ6GlA54trrDSz+z+JBSTDZpb3jZyflj8UB91kiFa2f8ANwPWrAHnkL7BELyNppHDZo52elhqDtPlqZruElW2leT5MhVNbSBAOP6Tza8oyVIkI9C+Jl5iOwWTE2wjLrmjtWc4o4TjXvlnc3f1h/e58+t9frGp4+derpxc80Nj6zeOoNc6dMmz+f8swysDNWZOyMpFNIEjcpZy/L0Lpwql8SSbt4lyRJcqb64Vn1wxm5S+Q9Hda26xeKDUBTK+flAlyadT9hMkXHqhDT3gKTLi/azqFzxlMFVKwU4EwDorMHX80teHHX9Jf1NGEn++I4UEqi0b12M6VSHlrq4cnTylVwpRRMf8oeKW22WPMLtKLjIjTnvEwCcxJs1Ux0j64mlq2Va+357nBtJFGbDBuax89Jyr+9ic3e2UVCxLlq1emDB63GRt20zbjsv+MHfLMdp+68vYyoavihVOqhSf+1j9n6SJ+lGn3C3HOs+p+2wiM1cIJRhkz5ISSTxiqdqVJ2baqA7YqRHPyBoxh/4PABPYodNO5RCPQo70CPYukY0CMvn+XqvT4mwUJS2uDQF4epHeTQcic5ophIl7qJUWYEo8yfOyiq/skRIzuTh3/+KsVFeagGaLQGaBTiyrmeXB33NZeKIQ+VJlIuJE44kbYxk6dnTakLWKl7It2TsVKPeKqmJ2JaU2mKpksE/DHak/jLJiN9Z9JImGyv7yyo7K5ScThFKwZMFo9jCQ7+XmU8VR3DH1f3AKLGqvEyVmFiI49QGSq+8vp6JVYEEj9c1q0G6VctKb1qaQ89lr1H6qmuTHH4WSd9iYrD7qVjGL6jvjR1xaA1VIm+ciCrRJ+5nSlRMpgtzRpgWsfq1aefeSbP2MgfWDi3V49FOc26anDhPNSsbTu75GGem6JuFLBuAeNSd3CpYox5hlmvckGMNRGWx2T/uXRQi3kG/blpUeAwtxjxAxz2U5IJU7Hkv2ICefZCnsFRECguDbOAFbWRHAUSqlK00zmjmxYxgLMpRkIebL/NOZo5pTKltHbggBq/SPS0cXl0/9qp1YcOfvLjcxcWobZZFEg0Y9vyDK1tud+QntV7Tiq6oBZdxb3KemYNEc5AJfekzl2z1lzXrKerrlmU2zTFYayXddJxnphwo7H2WStNCGbbZy0gRg1Cly20w/aT5s0Hru6j1c8/pX7yaOuJbDft/xN4scv3OHb5MkixXdzcBbyCk3jFruHdQJr3q1vWdAGwkZSc+ns7gHM01h8FmPPbdcVkYbbnYC7sCmZ/Bxq/gDS25ttpWZvAmt+JXWIjY3KkDnkNWKHaJfgDXyTDX9x41nR2zNUYiG9/+mnD88+3Hu1Mc/37AH8APNmnOsNfnIEf/NqWvIDHFk3bWQzXT/NUAc2LNZ7LpFsCdtmAoTnORLcL4htgjq1TS1zhTxF3dGEdAdgwvKgnFg/OakR8MRBXVq/4Mevpw3lKmANXHDRtlaUBbf/nMzWZ2Md+DXqsMTywvKapvp/nesvPMpcDLUO7IM6RXQ+XV5XPtz2yE19at7VfZ51GpxPaOoe4PddcaTTxggnslJWL4tQtMZ3DirYWQ54JxUiOLnm0BFspgZ/pSlDEIFXQKzFgqN6MdbV5UhpoY7MjQ/gdihuFq05K86JUFKL+vEMJBOu7YBOB1+rSsmTJFKp1IM+UhrsmTLhrV44crzXc1dBwV5Yof7pzwoQ7J7RuzxBDGE4/aEcTul+xAqiCe6YzTZxZmkgxLQYIkhX5hmqwSPsdYQIOCTBXPcCCfzb2zpbbLThrKQC0SekJDWeVSi1SQaEFCWFzpETeRat5iZP6dEpQYvuqHD0W9GVM7cjjyIzlACc/Q6FcFqADjRIbFi3ccM9Ni8pzVPLGR8ThX1Y08CeW3jKzaVnr7iydTnaLx7tFarDU98qnHKefRvsR3Th7xEon6iQ6No7b7FbC2hLTotGa7SEHQZd3Dvy4bP0IjQCY+ExLN2spZ7lBomu/T7IN5fAlOEMS4Bfg1wqfqxx2OfCu1lfUXVu/Ipxpc2G2z5zUqO/xfr5efbme5V+9dAZAN242l23/lovoiAu6gJXtu78xc1PILP7uWMxnAxOiKBCmQzcLpbQoWbR6SpzKk+JMhbTSXfqWKQH5tFFOjGheUbVw9cSAB9+pGj9GXepdNWvI9CnLX9nReNXsgGf8i6nDdAdzn36cf+Oz/2C9jMJXwLsWWJVJ/6qT3/4dOvkxD2riMg1mHXv6UTu26+tv/eop0IlZqjNN2Ammxv+XMGEJZUeITKD/2kHU9hLVejmQqK7jMjCBfrNwTuxf/XaYXN8BJrcGU8qah3v4Kkox5daeWq0nyIgTG88az2bB0xSZNn8D4DtB4fNz678dQpwNUZhQ8oGLPSCai/41uLLJLkuosECAY4YKJ3eYWDcrziMLIDJYDZXvuAoVTpO3Zdpre5Q+o2KXrKYvObSYtGX/QG6cgU34PvAD5ty6cSkdeloi7ZA3YsQb5xBgjTBWahl0dCAXh+XJYIlJIakK7a7nSRXjrsvb6UQBnsPCzT3XvifWR+B4g473pNYS3PNxyiUb4aaUP7Sb0pprcJ/5HdQOsmClMc53SpnofVkpl4WVcikWnMEh6usZqJolA7eOZBZ5EKnSlvfyJnp74copuPdhqntxlae3u7tsiMmOBA5rkG1xyn/sUS2ixQj6lBZ2xTDd1ZJHP5C0gjYjdoIKAIUiWTAV4qTwZFUmwJO57kf14VZSNWgCVYxsiS4vQNC0N9SnqAVd+AWdKVHI3a71xFtFrZPPI15I8xYaNfAlMNCKitAbp1NU6OBQWu7tiaesdGqoFR1eszUzNRTDKXZqFWjDVrD1ECukedqu4mG1R87aJJtpUkkkkp1qgrxYuzc32kRdTaoy000Id4XjF95n5vuxKSf8QvUBNuhEPf5wdtYK2IZuDkvwOk8jkKNgEUbLwCLUsvqVMcz5UYuwR7s5BXIUfdNMpiqWjrKr3AAD1hQSYqqjCvvDPZlhBlEJg0ZBMATL6GgDcOTl0FWDDZTKKFxFPHDlA+tRCYauNexA6MJu7HIAwmHDNrAVe+fMRnp5rbEInWxHLU4i+mGfmTkbV8CN1zjCkZmS4MWaXB8bPwDqM59NAsLe/0JMyrJifNklHTOarIKNOV1YVXz1uATsBrzmyIRWFALqz641N0EUUTa01WSnJ7SH29UO7o7THXxdTXco1KY7AMSC20PDU3pJ9n6HMQ8oXa456uFBKnKuOfCBf4oqKg1ukD9maotO0eD2ZOCm/f5ap6DpQqZNUN+uTRDpXSAdB3rn5TsEVicEdiOn+D1dgq/JLuGa0yr4jCfWcC3y65ZQOdcW6Ux/2HNmeEZ37ocaHmUZPCpB0gVh3wV9sO+cbN8VxzCcFNCq4ADDkIkOLQ12TIBovVYhO41Y6LGWPbcxaVFcMCTRngu3dNwm+MJl3Sq11LkRyFBZppFBKcaywiILXNkwj+z2dObILjbZNcn0Vs4pO5Vz1aZck2SjO+y0Nn1u8IdOo90JjQew5uhqLsAkQjiBDC2XxGmch7FEi9WJhW12Q3vmaCnVF8CHdEJETCkF5YGkswPW6TyTw02zrMUS6Ei5wJE2egqDYbpRu+aYjP+VI0XGQuhEkotU5RgyJCDrqOa5ihIPUOXTZszshHs0ZYT1Z58JH+jmgC7inCaSBFvPRAwmMpeE1fO7STkp36WeJ+Fd6kfqR2QdvI88qn5Iv6kf7SERjIQLXOOV58UR4lZqVYWxjonWuxcDJfV03AfupzLMZSgu4CSXneaPsKUVo7MuAew74qA+Wkhqseu9RWywTsposlAfrdiOv8HRblef1JIneMJsy6WMZks9G+BagRMhWKUWXtEyLS9BB4E15/aKNG5bj6Q788jmvXuXqyn1v376yPrDheTUyCVbnto8tOm+px1h+SRxI+GWHl7z6lFVRdrN28d/dcssPjbs07aX6r98q2kU6jo6ywLkHk7mH9TVNAtPV8Xx3kznlAO1U0u+0+XWSiCvGmyBcvqq4RbyU2T2fV1NuBCHaj7B/x4uLNpvyXc4ESKs3Hd1DRd6AlfBRVYxsdsFZLoLzDXIwAYyV+J83MiuYCvsCjZ/B5qlgWasaM+Kha3XIB2TtVeBeTxjNHYJ6PPMSRA0OE9QODGffBWkqNGCCcWdC9lkwaZpZNbvFaMFpzlMWkqsGNDxG7D1FaM4NHaDrRuKi1aWSYq7gLWc5uvZZKYiHAmdidl0haqjk9NwFcpPUWFAVlHPoUu032nvRFDbnM60AB7KY5NaOk61cGD5KVjP1EJ3aoMtUqKOdUZfY7SFAEzTebyFPuNCdhxyoavK8gvak9u1WYmj201Cw8FBhA0OSgsFbPyaLmtnYHcgL8XpFCE0krAppBDNYDoR0cQsPbc22xlMXreUHdFUdfK2YzsbcETTycP/WHPnYTH5ix5zjqxaoSyuayUXz944NdsjqftAlLneyBsUKjr0LqS7IPeKseBtPQWlNyx1b3pSBHUy7JYaWP8eeHxEDMFsKaMfFACA18Gv9OjNzoeokVL6kl4o6eyOlD/UDa/KMCalFFi0Fg+sQmdHSaQsBSVakyPtF2NYaWeSdCg3xP5kVpniljb1XfmTNQueWVAb7xPvNmDs2AHdft4y+aGGhfNn9+rXbcA4eF9dVz2sf9Mc4bP5h+4cWj/ne4MHrRg8rtRfXVGZHLJw4MMvV8feGZmMltRWVsb7zEjWzh00O95/3OY1rf20uc0v6/eCBPJxpagLctMlijpMlwhTKhUCQQrttI1Gmy5RBtQoRJ/fYKQFIiVSWjQ7vZlpaxIdnFvUccZE8F/OmECJKnzrnIlpOCXjSNezJsT+ODyjdV9m5EQHPIsBzxXXnqIR7nqKBrZglHUapIGIlpRmEA3W/5+GaYCl/O0DNQaQvr9QH7zGWA3hBCsYyeEqXgJcA1wF9rPlcA12wJUFabUhWeHcmmIsthgQbYE1DbCi62O4qH5N1bdIBT42hTrYEd+yf4mvn4SchvKw6PzWxV34G5I4v+IKZ7zCDet6iXUNJE/9+80vvdSa1lY5g/cFwLs7l+Beb493VTu8sTUnQI3qlkig1BjFCszcbHIlCuToHpej9pxfC2+UnjlWCMblPHu6hP20JEZnlHu0RE+U9jf3dBwHehX4yyOsMK8lXwqUUoJVdSRYTZZgSqQUm3u6g+ldgOmRkmD9tXeHI2OE88wG1xu+nZ4zTP/oMTnZ19XX+pJ2VVKqN1+Dsn6SrKypXG5W34KX2r6tW7LbCOxwRuMUPeOoGxfHrFKOyqXtqVwck3smcA43lilH43Qkm+ccVak4OIL2i/vZBH2hMs4Yr9rAhrRlqBmUUgZ2XJHfkfI5A+zgopRoxmHIcjUoXzo6r7QjUSv+tXjJnYqWoRvJpWe7ouDSiXdPmHD3xLRGM+uEuydNunvCVbS7Xyuibh2v7ctUtppao52+StuX1Vh/0vXOxELT7iySVB3Tiq2JHMvs1hZvMfgzeHgW5lDY1lWEKKMh9ltgFWRPTPpnhJXSrRgkdEHAqQ3MEINmRlRgTF/Rt+9kpbo7SAJvod+jDdfviqAOrPBx6YNZme3AfEuvitIuifn+NsI/+KCq9mPUXJAYlUiMuoqW80/eccfJO1qPMkrq3NN6957WG+XbHPAFVZ2di3A9webZzyaSo5HXHUhXGGczKewJmpyqjadrvOWWvKg20ITIvSkZuwH3dbMrcRLFsnRsmq7HAd2cVrAlx6WBZr3F7i0Mlgs9aKmEy5HyFAWo5dS9HM8EKWUT+bmibnjsgFwDpmGMDXTEFiQc0mmyZfYwzrllJMMOFUx9tJ87E9Em8+PhUTGiK2dTaOaQPFIpjmxYsm/xf77etKPq3mfvOTnN2nZc2jhn2voF416Z/m87bj5+0+ZDpGTljdM9ekG9yFeSKeMaRs4jvmeOFQ8fDbRsGPnYpo+2jY0vWDzqVF2/fZNH/viJOVMGjIh2e+6GWxbRGWWql84zKsfsVWaMESaAizSuq8gMNMKUJuh9PEkPgwoR9AmzI1ZLJKU0jP6e45hRtJu11h1zEWaDjD4tG3StuUedckEVVw9BuunBnuPH0lTQ0OlTXvx9p2lITa6lHdJAAeKmepDOFAKd7+EKwTe4aqpQCZikfjZVyK9pAPAOirJThYpot3cRp5WTGouuOVXI/+1Thagx822ThdCWeeTINacL6d5Dc6btAzZjqD1eAcDrxu8wLan0GtOSwtq0pDTgVRKka/a/mZeEtsu3z0yKkz5vq9uuNTmJn6NZLxpuYLt4wE4rvxq3MOBWwnAr0XADBg1mcQtS3IKIGzKoMchwo82BnXEr+XbcspbKt63cwvOkl2aoDL3m+gmfaLZK25dsCUEXMDxTdHZshKvhXuiMaTlgGmKYhlgssCQmxxLpQqZQu4NCjcdkb/ZERbTZquCyyi4bMfZXyrqpwNbRSFNKSVOKpEloM2gVC/qs3fBUEZEdzuBQuveEj6qklD0aozVgDsUsXc3xoX/B8e1OHaXUy2nXrum4ZBKq10lpRkPuiqZeu9gLfk3Dtt2HjDMj16zEX9kJAi1Fa60NmKdi+S/SIaeWTX4pAl/fPqW29G3S95ENpIrN3ftmKRs4xOP8Df5A7p7ZCRzafEU6Y8ekRT0UnSGTKZSwmHsTqVL/SBkf75ap6eavHMR8GvB4h3wauUY+TS8yOJ0aN8K9m86DdXwbZbpbSJXuC427vtlIgRauHIb7b6P9Ynmcl2vqOKlJdmd7x+xxOinJzEpYxDxzrhIO02o2+oGTzUxmZ6DhyWe0oUKxexhYuYXG0EH23TTWXHaeVI3q1F72TTElRii7cHS+oc4lXgRp1h3PF6FnL4VEevYSdVOi7d0U6oRpJy5RH8VsoT2g4HYfE00Gq8SObHGkHC6ag1a6hdCu5q5SQRUREXQN+NzeciyudHFoSmfOCIrQc4GGrdzVsKWhdo16ftyfB63euG8dKR/3FXGp//zN7OfvGUMcd0yfsYgff8esW8iZm1tuHzjlyRU7Nq2O9XthQvMjm9apF9RFrerPhq37yS0rN+59rH/JtLWMn3Q+8FGcsPJHrzGJCOtoPMxB8XvKjbTFLpA9FJQGrCI47gstF4mWarcbWNRSbLYYo9mKLdpcnDkZlPaU6njWM633+MJ00wdAh7M6o8xcI6Uc0wCuCFx5/NrxZ13POhI6eyKGTtOPXtX8jT7Wn2pX/SydJyLpUu09juUZHaeLwL7LB0oFsIojr/NQQ1p+TbKTewq1sUNYUe0mGVu2UDqGk5KcDir/UeZdY1YS6mj+GvOSPBhqONT10CQxRHXzX7KjkzrA7msHe8fpTsVdTXcq0aY7UZgLqedtkqiB9R3nPAmoiLuc9RSmfSXXmvjEm5ls0mAH2YTz1UJcswa7PwN7UGQHnQDsPhOd91OswY6mhI/S3Usrt19AHBySh4aoTQ7gPcQi6L8mFhl9e62pVZHz2ZjAqK7XQpfQJKGqzy1HFqcLgFMZeF07NZy6ZXCqEmnhE7OVWkLeItg+Dm3HxSiqFYBqWVyusKftWj1/DN4oUTYsCrDPFEeh0xWtkBwM+aIQK4qq6pZDWgkVIY3AvVIcqIF9dBxFR1a82ru/Fk0K2vn1l3pMYX69rWvqCGpHv77toxyRdBqNUpRnw1wV95hGpUCGSqUiHpQpRxM4ZA+1RwVoj2pKHr8JPXmacqRJNnuMlgewjn8kj1yGP6oEqR3Dgmpa84nRc7fUkqdzeqn01hyqoNRiFSuoQ1XpUCJR6t4Hrr1tsxonR6LcZx2JFWU66YRGniNMMXXmoaUZ++LpzN7Q5WwMgRvG7RYu6VJwhbq1F+2zM9Cpg1qnKZZBSLkxhHRwCaWBM06H22gnc3Vx1Nkw4WjbxtkPzs7+4+vPnlUvD50+feiQ6dOFcu0iw9Pv6iK6GMCAZ03fzKWkTACGrlYgd6icNoyvXEvRoB4o4NhU2nKpRRL9QS1DY0BSS3hCtJtGcgOwFFwhjWCJjpTBZK7PGXzajAU6qs0AarS8U/YOKX/Dzjtn3DpnJRD/ht13Tls+53YStpGaqmGzlk2JDW9aZmNe3Phbpq1++JdrgfiNS6asfvD3jUmyLvKEekvlE3dPSnLa/JAvdEY9zsH04lTVa0y4KugqIeXLmGY4cQzPknTgrByK7neYdoVK4eqJV8N+AabiVWOvxD9rA5s7wjvpfw4vJvfAemFwSql8uhr/ElY0OLuYzjWOOV5XQTswGy/W4AWZj/ng5mvCW9QVvIEsff2Uvi0ON5vmYXW05Hu8BVT+/QvIM4L/auin5AzdqzHgNGHP9gPDIUWthQi37RpYIBLlibSXSbBgPLNHtHygD8UUzuN1xeg4uxyidGILniZO94+AdpTXT/PbmOosxjItJWwCMZWXH6z4Lkh3NZHhagLM0GY0vDYBZdWEq4lw3dVDG3g2Ywv4zwvr2cWUraIYLtt3nrKFzv23TNrSaQ5OF/O2RGuGybR5krmZ31eP++Zi7SZ+OzAv6Iz/z+dJajO/nZ1mfneYJkmqjKvue+VjOk1ymTE7TdLgVp/aPl+bJ3nDng7zJAVGU+AvtIqieOZIR6piC25lIu1njFUWp2VyBdkTPUu1oYhYARcowNy9i3i10xDxnAHs2jfWf+clEbpgnm9Zor8w5xq5CL3qrtdK35mTeJAFnH4rPa8hxC3WqkTwBGh/nFWMG+E6EE+brHY8M8wkZM/Aa3fkDeZLsNe9iPa606r2PFqHm2dj8SdOseaxRmwwdTlP9ozDRLsq99JqocxVzNMOYBtpXvDif+8RFqt6ckSdwttal9/+1rN3DCK19UsemBmLNd2/lD9wmHD7xmuVt4kl+37TdvHI3B5CQ+WsjD2oH6WzU2uwlnuYSwXRCytMoEkou+Js6qM5QQ3DRDwdk4IYhYlp8eM6imIF4FVBs0LYy4C9YknAtifafqLZVRiUusdo64KUslONA34o+lTeAM43klKeiu4o3mPa4WhVklIevWo4fOYczPahlYoIq7visuaOqMWnxn7/Rze8u67/s033/GR6Xtsx6Z4509YvGvfajKbnB1z/zC1zn9swmtQ0NU6cPXtiI+/X4sRUA6cmz9r00baRdTfdjDHi5skzpo/c9Dbh1UtP7CXmva9hoFhgdQb6E2D1YPbito6VBjgHsyiBJ8nJBXHq27DDNFqcFqsxmjlc24mZC/qBXztX3ZqPlUIStnYoXqd25obip+dIFQS+rUiB71RL0blg4Xy2CJt2vHSuW7B3qqMg3CndOkGmMZkQnj0h6xLYqm9hh07QuUcKMWjnymQU1qmcR5INwuC90rrdNA/p4qYz+5B5FpIBcMcKYepZuDMjcSQ2EseUOyqUuoOoYngrPUEJTyPhgEgKj52xJjosugsnId2VM9DRt67t23E+Ctdh+sn/7WeHhPX8AnY2RpdzP9qNWxEi5NCrr2b+Tm/7rn8nHs/+3XI+Tc6Kqzk7zo2xxXCuHTW56SxcbRJISo91/5weu2gcuIJGNu0bS/fKYTe5s21CFctJ6aDmGXrboKbpQ5vnCq+Rym0bY3dO5ycOHj1rGz5vB/8++VrcyZ4nxtKW3POEc1o7U0rAiR6cYMw8zyJqJ5E6+5Nafe7AYLu4o3mmPm/wjKnDZs1XPxIm4aMah4yZ+cDd6ofbKX471ENA3oX/y+d5v/V5H3R+HGxjoKdwktIzBDYrDhAvSWhEpdXspV3TFZu6pewcm5QXR4pw3qKMaEeCK5xU3xXJy799DchnJHw9vM0fNHP6kOZ5nZbkbtLtQe3dmKZtAD+sj3Cerg+FX4zJroRGtEzdV1d0w+YmF8Bfwn7gwrE+nMuXgR8JqthK6rtawvJvpTE5CLBbh8yYNmzWvKtWeGPnBeBxvYXzdL3/f4Lf+3+B/4NvBx/4tZFr5ZcLtZwFZ22Y6KwNI5u1QcedWBn70HEn2ot2zKYz16xX0fjEituffPL22/byvu8dOPC9NQcPUn2998oXhilkLp1/RuNpRnpuqT+R0GZ5KFZPPN7+3HFt+m/moHE2Dy2drx07zkjmYxM/SjodPV7exdVebQrIYe31B6xPO3MceUOnV6THfG4F+YLOrAhxBBUKg8auo1UkxsxAO21AR/uZWe2GZcF9lsF9/tbxPvQwJ3qr3H0I3ifZcSbGux3nX9A53rqIWMVVovymAxPDtcm63Bl2BpwoSCdEtjtsMLqM55etj5HSf5v140GHp02futJHjqu9eXK7ur9o1ZTFEw499p+vqxeqyIkHjY5wuf0B86etk8Y8Pe2uVXuilY7Hl6+65Ymf/vW3lMeN/GfiMHEh6Fg/0yBhKSwRKVFCEgMIntSUDAvwv9dt5COpU+Td8w1Vxp5jf3vMa1y5dYXRozueSqkx8r4a4zf+YvPmX7StO31RPUoaL54G3JBRvhK+Qt1Ug5kIuG41w7sasFsOi2/QPFsZxbuLs1O4DudPdD5JhX8kdyBFF6eqkP/odEYFzojQXaRnwFzziaTDQQxXPXEzqWYnM8x6ZEMXj1Rj7Q5roDgazIBjd64X17vzE/UBEuoCgFAXaPeYvmf+bTckew1ODiIzshDdfvy4+kv1kHpG95VGh1GMDrEJ9y7qU/6xZ9jQWG1H+LoiC6OLYQXQpfv/CMrOpPoXUIr5mVMtZj1y978GswMp/z/cM4IEAAAAAQAAAAIFHonbJZJfDzz1AB8IAAAAAADSChjhAAAAANx8IJL/k/4AB3MHJwABAAgAAgAAAAAAAHjaY2BkYOAQ+hvIwMB+6f/k/5PZixmAIijgFQCQpgbMeNptk01oE1EUhU/e3HkRFyIiavxZiIEiQcIQQhmKCOJfo5RYQygiRUIM3WjTIiJKFy5mIVlICBWVkJUYdSESikhxUdqCuNVFERcuFEQUFFFcuBjPHacQSwc+Du/nzrtzzjzzFUfAxzwGEnepz/FATqItPo6Ron2HvFtGztTQNgtokYrTxYiuc27cdDFGnTHPsItzp8gtcpAcIAMkS0rkLCnHdTNaG58R4cyhlPRRldnwp6ygI12Mu1upFeKh4+7kuIqOmeB4C/bKZ2oaHbuDa6fJVb5vOdZPXJvGCZLj2m2ZDn/YG9gjN7FdcuF3OYMCv6PHnn2q9lETICV19GSQPc4icF6gQC3yjIKZhydH2WcTgcnjovHDO+wrMMMI6E8gLVKP9gda42RZ30DG2Yx90sB1ySJl83zHbvaQQcp5ghGee8ik8TQ+fyjxKPbe534fFbKfpHRP5GsdLy1wzrzHkLNCn9RHeu/0cFjqiY3mC3tVHw0GFc7NywICdxuK6jfHJc63zR94rJ+09MkukwbHc/rN9H0d7GL4QbOIcujDTIRvmMU96luy5B7nfxLnsBb9HuqoZtFPlMU31myib+r7OthhnI+ySP+PyYctZsE8wvvkoVzj/tUc1qL/mKpm0Q+ziDKj2t/0osU92lMdS2TOaQHJAWBVTYV35BXx/oGP1EvUC1zTexBDf8dsLboXU6Sp8E5NEdWmWcRo8jXaWmvKqJJJfS/7zLiXscH5BfDf91yBl7xCmNFfEjTUpwB42mNgYNCBwgKGZYxdTFxMm5g9mDOYe5g3MN9jUWAJYylhWcRyh9WMtYT1HJsT2yS2V+xx7F0cYhwdHCc41TjtOBM4KzifcK3g+sKdwL2G+w2PBk8czzleNl4V3ijeCbzb+GT48vj28bPwZ/EfEnASKBLYIPBOcI7gHSERISehEqE1Qo+E/ghLCFsILxD+J+ImskqUTzROzESsRmyfOJ+4i3iR+C0JJYkiiUuSZpIVkq+kPKQmSR2SjpGeJ31PhkemTWaRrIRsCBDOkP0n1yT3Tz5Dvk/BQqFMUU6xRXGZ4gXFd0p9ShuU/ij7KC9QEVMxU5mnckWVQdVINU11h+odtRy1f+rnNJw0Zml80QzRfKFVpM2mnaR9QUdKJ0Vni66Sro9uhe4y3R96SfoM+jH6OwxkDHYZ2hkmGN4wUjEqMjpm7GbcZXzNJM3klmmA6RmzOnMZ8wMWaRZXLB0s11kpWZ2x+matYB1gvcJGzmaTrYBtnu0Nuyy7f/ZO9jscBBwyHE45BjjOcvzlVOL0wLnK+ZWLgEsCDpjnUuPS5bLM5ZDLL1cj1yzXU25abl1uO9yFgNDMPQYI57ifcr/mIeDh4THH4x0ANBKUZQAAAAEAAADqAE8ABQAAAAAAAgABAAIAFgAAAQABXwAAAAB42p1Uy05TQRj+2tIKMbIwxqALMzEuWOihyCUG3NQLgYgUOShxSek19mZ7CuLK5/AJfAyXXhL3blz5GC78/m+mlLKBkJMz881/v80AuI4/yCA1MQXgBn+PU7jDk8dpTOJhwBmsYSXgCcziU8BZdPEl4BzupWYCvoKvqccBT2Ix9S/gKcyk8wFfxcP0esDXMi79MeBpLGY/B/wNN7O/Av6OfPZvwD8wnRvG+RO53F2Pf2dwOzeLGAl62EcDNdSJHZqkdTAg9QAVnmNy2+gTbZPWwRP+TZSZb4Q81zxWUcAz0otEp3WHml7vwYmmly/y/PwcX+5E5w35PXIaPLdJP+19m3pDyiqz6DCPA8kdkj4veoRHWCa3RQ/vaMtkqqQ2abEk3SX+y1jAIqWXL5THeOwNxb3P31e0TKp569Gfo2SVa4HUDv35XI+pkUjKNDfow6LucU46smC8siy3ZbUuvdc8NU541j8v6b23SZ2TvlOOddXNyfKAXIutIenoUtFsEw2YvWMHI67rwarNTkLZFXqfw5G+SFXwHiJZa5GX0FOXlF3q+JqtqVeJorA6JdS1uo2qal2yKlsXfN4DZepzG1YmZtSb3Iuy3x6zvDlm4T4pZyfK5mReOY0iG/c76vGhbkyTa4mrcY7Uk3qYgDXW9pVwwoq4M9Xp06Z1oUua9aEvW5HqXCO/SP3NM5GcX6Oydt/fEusznBCfnU2GczOMK1Z3Y3dLt6ugqsWqyB7RLjta5Izt6lzADr8Ctnje0G216u5wfcp9izOwIY5hz1vTlG/hLfcX5JiM2a6E+viOVfCB2fc0h33F2FMeLVKbms+y8o+JKpfqsGONOmPT0ZfOAaWqknTqX5sVH3CvhanoKsKWajmcjdHN8hPRUi7W2xG/RnQo3bbua4204/A+2LT6mPwrkFygq9GlZmaPmiVl7q36ty9WrA4vZdvp1bR1nraX+C6u8M1bCHSj2r2qhnueaL47Y5G+J6dBSxZn8z9c1yMOAHjabdBHTJNxGMfx7wOlhbL3xr3X+75tGe4WqHtvcaFAW0XAYlVcaNwzGhM9aVwXNe4ZjXpQ40aNI+rBszse1JuJhffvzd/lk+c5PHnyI4K2/AlQw//yGSRCIonEQhRWbEQTg51Y4ogngUSSSCaFVNJIJ4NMssgmh1zyyKeAdrSnAx3pRGe60JVudKcHPelFb/rQl35o6Bg4cOKikCKKKaE/AxjIIAYzhKG48VBKGeV4GcZwRjCSUYxmDGMZx3gmMJFJTGYKU5nGdGYwkwpmMZs5zGUelWLhGBvZxE3285HN7GYHBznBcYliO+/ZwD6xio1dHGArd/gg0RziJL/4yW+OcpqH3OcM81nAHqp4TDUPeMQznvCUFj6F23vJc15wFh8/2MsbXvEaP1/4xjYWEmARi6mljsPUs4QGgjQSYinLWB5ueQUraWIVa1jNNY7QzFrWsZ6vfOc65zjPDd7yTmLELrESJ/GSIImSJMmSIqmSJumSwQUucoWr3OUSl7nHFk5JJre4LVmSzU7JkVzJk3wpsPpqmxr8uolhC9UFNM2tKctMPWrvcShLWjU0TVPqSkPpUDqVLmWhskhZrPx3z22qq7u6bq8J+ELB6qrKRr+5MrymLq+lPBSsbxtc3tJWvR7zj7CG0qF0/gXXRJ1lAAB42tvB+L91A2Mvg/cGjoCIjYyMfZEb3di0IxQ3CER6bxAJAjIaImU3sGnHRDBsYFZw3cCs7bKBVcF1E3MrkzaYwwLksLpCOWwgmbkQDuMGdqh6DgXXXQzs9f8ZmLQ3MruVAUU4geo4JsG4kRtEtAFtqijyAA) format(woff);\\n font-weight: bold;\\n font-style: normal;\\n\\n}\\n\\n\\n\\n\\n@font-face {\\n font-family: Source Sans Pro;\\n src: url(data:application/font-woff2;charsetutf-8;base64,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) format(woff2),\\n url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n font-weight: bold;\\n font-style: italic;\\n\\n}\\n\\n\\n\\n\\n@font-face {\\n font-family: Source Sans Pro;\\n src: url(data:application/font-woff2;charsetutf-8;base64,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) format(woff2),\\n url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n font-weight: normal;\\n font-style: normal;\\n\\n}\\n\\n\\n\\n\\n@font-face {\\n font-family: Source Sans Pro Semibold;\\n src: url(data:application/font-woff2;charsetutf-8;base64,d09GMgABAAAAAGZ8ABMAAAABXfQAAGYQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYEIP0ZGVE0cGiYbguJSHIYKBmAAg1IIVAmEZREICoKhJIKCYAuDVgABNgIkA4coBCAFjyYHhVwMgm9bi0txgG3TuIfdrVRFhEfanmzcgbtVTQChCBQdsGHjAGDr/avM/v+/JjeGiNqByrZ2MJPsZBoLxoYh95lxPoTI0NhQmKCh2SDju7OLgxkFxQXhZgxPQuJEYXtBwcx7P6FDd2Tc3CeqooxrGFcUH5YXU0lZMzVY8L50y3WBZZMcvLEG+IMqLx8O7VTMD+jkLWjczVhY4Wbs9P5M65tS0B/0ncm0D5ZZdfB342kZ/8oqMHaZjVgnKl6+8tC3Bvpndm4DQBeVFEkGZRHAVSIqQqH6ogro6qLYtnwDtM0OWoyccxjDKkSxwaAMxADEwMAJNlgYldMZPXNmTPfOta7j58qVuv7v7U/d/5vQEltHli3b9/In0I8ccvClzPwuwG2akrhqtt2ifOVStzM+/p1mM5JhMyMFyvhFAA8sa7MKQQksv4LkFA0F5gOgLAns6Bi+j091ORFq7+vUuU9EmzFADiA8b7ryhX94dHZgIo10QBPyjm+dPR8xhqEkrqPUB106rkr612tpSr3PtPJ1X3ErXyn161jyVdqmK+nrvukiLEEEYZR0pQuzGGHEMQRhBiOOASGW4RiCOAYxLOJ4LIMZl4cYzHAIQ/+0VpU1tANU1VgNPIS9lIftTjj74ufvJXUk9AqfBxLIyv3epBohhctc+SX9toCQFGk8kO6fOLUtSxSKSMkO6qySLAKTyECJnfBMZoEOuWiL+++qK/8Znte9rwd9XWBFVuQMKzJwt7uT/ToWHGPCRws/LICBsBT3HyraHVDjgVBgmNEv1Mc968Hn5pNGFlAQgOy+Owq5JsgycWrKrO1EjtUxln5NVgChfwDyhD8gB2B5nu/e1P3nAd3zhRaHeE02pc5aWsevGUorJhGMQEAiGqFQMBrD8v/rsreVLPt7Jj/O/glgBdilKHc5xB3S6T33Pc1d6Ukjr2fWY/yAqKcn6Uk8Y3uXvSGijqhM01MF2CVtijqnHwe9rj5SUwb6Mv9n02xnZO9pnTudIwdxQ1B03F+KFppi9s/Yq53RxiswrMCkA8GBIh/o2HBA6wPchDsAki8kB5Eq7IhqLvP6tG1SJXXKtEWqOlUX//9NNdv7/h+Q70PhCNxI2bkLseggQdyzLlPl0k01+H+ASRhiMDMAhQFlU4AiIG0AKR/Fw7Rcg5QD5RBTUW0Isd2id+VqO7t1WbkorW5JpHLNZz5CKCJDRGTcnUjx/9J6G9glZ61Vq6qqKioqLyJGjDHmj4i1/GPNsEAf+4qNZSmjjCa/fNPv9v2teu2oLyOGlBBKh2ZCjlW4b7Frv8EXHcpDIoXe1fHv7hKXdoRx+4QJGySzjAvC8/T9BMBMgCIDfMPVs+uX11fXgG7f2dID+qrMyyvgrkueXeZ/8/p6rxEMDkAAQ5IC+v89IMDKzOtH/nag9hYA/Dxb5SCA3x+mdwAIYC7AchrAQEDeA4ECJEAML2cr0B94DEJEBz0y/ToyQp2ddWZVeq4sH9t8VQtsy4W16WhtY/WUU9mtzvLodjar+f6+8+Cbrrm8hsx/xwZKiwp4aq8GgKnQ8ePPoiI2pazj8+e6mP5Zb/v8BgBxAQUoCjCMEEFMMTdDbJYY2AxTs1xATTE0Tc6McLPKgck6RMMhIFAKDNkJAo7nQQGRSCBJEqCoghCQfxM1gQDPWvtXnXJbyYghqdBroIxAWYCyLKFcuIFwB0IHxgLhC8IfTCA4LoRgSJUDVLO20qGjHDUJYsHK2ipAnIZ0BtJZUOfUPDfEjrdAIZFAvhJgNS0gMMD0fFLB9Ibn83tNG6AAn1oBIwcQmo4oowySUXEUcUiiA1vDEMSdx7EE+TTd3vp/Ct6Nqi/53JY4/NoNPuv2T/8Ap7odtCz8/y1DBV8uSOf+tyUaGxrkIEO3oXXWmK+mXrjNVMjqlKWaofZH5hDDVXZ1Ps21lMNA7TXFEYJxtS0U2GqVA4jhbvLzmfi4pUXlvi6VpKe8FM+YLLaYj05YvR8kr0mMGyfM6vmIoTMNM9jclt94jAKB6r32BHzTl8DQWupZd/W72g5MpjoZqizL8Ns0IQrt4MndslLnbtnY5yClixW3VEiVmSZeMv00Je+rqFFi4Iu2Dx50TlercMoHkNqrV7eWtOqDZWXO2/pTY8CIb8PnDvpz41VIGAEJEDywKqC5kB+05Jlw2/IA85ZTq4x3+vKR83uSMJqRm3irIqeviulRvvIVTc9mzLFMqeyEWBVDLpIx8RZioiuaCZVH0ekrKmfbbyk5TSVBTfnOGN62BQtJMBjZY9f4zURqzvuScd1N0ar/4plyuU0pm2t8ihQb36b93NjPw3D+kt4towwt31yD02DXwGNyRoq3SB5Kzb2l4NHc36rXvYYfZpI6WQkOFgtJZuLFhPWroiBc87SIiZ58tGFDo28Oo2IqplVZDLVaS1ZsF9YNyx/NjWkU0uDzGj22/vrnugeF+efGa5IDMkHjJ+lSeEAc3QVUax1JOjYgnghOZF13XbH523SX+dRsCJ1qWpVliull4R7acCjVyWIAg1EQJU5g+OAyoRSOSwEjg5GGIk2WBDnp5EnQgqIjmB4RIyKmUlgQsSRiLYQNe7YI7Diw54SAh4jEQRhqjRW5Ikzcng0GiHmywyLkSyhAmkBEXI6ChArmLEQmkQwJ0uWWhoqUC1ZJ5Gi1lsYiuijSqQdBL1qSfifEimWt0JRZYskswlZozbo04SzOcY5oT+h8K0nuuS/dA5IekvKIhMckPSHlKQm/k7Atw4tqKL2N4haS9VYnfJkKgY/oABRwyPvGtnhwFST2GtcRV2uSf/mf3I7h1MVtSetVtXXarmI2S2OM4G/Oc43AB8Nnl0IrAYygZ9KpgL3Z+eA24PQdP89wXJYpssXjI5414YJyJpwBb0eJHbJGZoA66WdT6K2bueHrU6p8NoCWn0lizRcNo0xOI3B4IfCwFpbCBkXiJ7+IVzLyANSuHfEdz1O1dcpyH1R2NIu+MiculoiCzyinYJ+5yEKsFHaOs/9K3eUa53ZMUCI7hLOL8pJfT1UduBLkjNFwqmQqxwwHLqCJAF5B4+R1lrwKWD3Mgi2TzZ+Y3W0UiAMNKeARUeayEv0i9BkvEMNcStBH8bknfttLuYp9RU5mkHvS3HBW+Aa4XVdjPehTADAlfhD0vHpn9ZWmg2V1JSr3GS+MoVw61w/oAVHYXoj9iev2Jag5gsohhLX5WmuUZqNVwVFxx6wuqnn+JkSzy9Wq2GKWPukReCtwlOc0gPHkTWb/dgMjpTRHYwfAsozEuSe5wZNIASmvQqZVhnRBt2hvDdDt2iXjOiZo8X6jyOfBJdm8PihQ7IH6jSc6/xewsTWz6PxNujhcTeXckmoS9YCAtyo1sKB377hOlcPBq01JkoedrkTObjVfqiwzXt0nzVVbGJf8elDrCox/5pUgw4O0cToUI/4JQTUx5oLxiS45Ti6VXp6vVGogmIZgXwEud4QotAK8KnR2w1dH76fRhqrDsA9RJNUyR3qPUIHhhWfndSg0vxj/wGdIC6hhFEg2l3T1+f2jlrP6mgywjdm8yYpVCIvuig07nNX6z9zke9xs3Ro3942LMfdvSh2gfP4Wc0+cUtvtwMcrnk1sxXRX+Qx0F1AA1p9pa0veFHpF5vEtMAFOQwZEAe6uCqws3AevOY2y06/LPu4OQ7vdjUygCN955/1jpqdTkJQTU0fkOvk60Wd6yqzRvf9757KV71FHuSB99uivb9yVfuSWEPnxE8IbopNaaM7+qFGp8Jg32BJ8GU6mfNATyHGU0Oirl/ARvJrQGwI+PK2u9nVkLF5Wjb1ytGKcaJ4pl1NbHwSYquJjj0xH8lNR4pOg017HFdHW6Lp6K4MM443jAkDUW9yvo+AwUEyrihILioB74nOeYi61hLfVruRub6KZtdxfuJfHOEP+wI3Was7fzWyQ7CMPQM+qE82G4s27j+iExiBKSP5YD02Nd8uNhUWldw9hbGcBvLKEsvSz8Z2LS9jBUEsxyGSd1ifsfk3bgYtts+LBACRFZqrilB12z1JT7yRMq1XtCZi3RInK8G206juBpbQyQprpjY8GecvQNW+WjPllA7TZOdE+rWbKuSddHNOunbRWeLFgg/1AeiVHS1ciLQxGDQBAMlLmhibgcSt3X3cVJPC2OJHNS7qt/22WWB4jVcyiCN+ssozvRPQZKXV5IWuqlFXWZKPIfadxWyuaF0L+KoaWxHpUrYbQV/egL9oSL0ksBITvfJ/CzbA9DhVnzzkqDq8TgabGDpvFx5SjdKj4JjxQVZxGs3HpvYinjU+FS61WXrnfW2q1p2+6a82FuvSUsflvs0PF0QAUMPTwxNJHkvG/BNsSoayZ57ugdOA+iObDDtgvP/RFBR0rLiuliBJaeBmfX5JUGl5wo6bDQ1hME3/TMfzzQSb9J0ntNNjAxV6TffkMXhh47G5PHjJNsb2zVPVya0hvEeT8ozidG30RLvlCmlpQEqwK7aEUYBawIlcQG4ygo2hZqD6MTpObUe7sP+/cFc6YSs9umqd5zA3pHpyzSiZBzjLhJ5tIUpET7nd2t73l2SvkliPHzbNl9jWBN1r+UJcqY0N2Rdm2LjAPIKSqXzO5ZJoZSclvvC3P/qimMJpDeLSoyDtPo9qDFDGe9GxUbRczbCu+fUZlcJfyjdC82wArxHRCk6lSYh2F4oLMSgqphqKN4LtiTbW5DMxkk+XeQq/aoyVi2WyEuFNW+ThNcvSsAFdivwcEY5NvgTYeYBZxdS8Q8AUTtcAMqo7uScwIt+Fuw7HHAORGVS8+lVOBillrKI2CUqkEIhVcRma/NN/zBbvKbn/sVEeUmzw1QWHHgG1Bh1Wezzw1pLVfGwZf5g7zq1ZzqsrQ45ZiIgseAmTYwl5UXg8jvlFtgQCDJS1JP23VXuBP2Ea0E1XAV5Xnr7Q3NpyZCCVPjjlRM7FlB/qX6DyXgXOUTdEOitjRtKeT24nGppnC0L5TuqaACzrOA4NCMIQiTZEyFWjqtCjDMmTMdw/LnBUCRyRUruiDdxPYpmeSJE87tQaGdmD9fyXsmDCDZ4fICRmNGzdtGgUFASWpcMPwNaMADkEgfacWZPBMA2ncABuZUQCb2Fk0+jyeoyC5cuc0AoF6zZ7BEibvKZAHv5gFBXWUwiLyRs8l11rt3XgEYM6eF3QksMMgoMzA6CE0LwBaGXLM/YzRcADb2QJQPhvmz482dSAaMDRp0WENwCkjPm6lYxlJjCVv6aQlWfW3S2RqAPdaBbDWYS8MsO2VbnOJyoHQNaMAjqFh6QCoq217BwYY8LFD9CEovATwNI67Aj7sP4yshgYmQYcDwHYu0Nx4UOclhKYibcx1mORm3opgq84L99ZbIuDxegAK2PDx4SXAjitAFnUuJi4yuUjhNLk1QsX0byS27bAXEJaCI2H7QyQcRkFQyylGmt0HSmlWWmOFOEh+TFAvKfoHgpL6z00I+m0y4YO/Osz6zfG42fEJpiU3zmCyor7qHLkJmJM/pZc4kO5t0To/oryxXBw6T0kU2Rba8NqyRZVWFdMfqmouWEinRO5A4WwNFRDvy8f9JGjD8fAmk5rt+rwcJpRmzeYA708QmYuWiyiX24royBD/EueknAABSQWIOxHYDl1KxLdGv98LaQ1gixpyCpSfTWYZZX1BdZEbxmBFccHRo+I8Lr/Fw9CKAshaXpI0F7FgRRfYIoAD7g2c8/x+/o3XlAQhAY+1zDPeEJXmM17B68T8QlqYNiT5vDdnCFgFps2wy64rGAUUgFEBCxpucUdrj9bWW0p6ew1yZ1/bUy2a/GmhSA1tf/IIb+6sjjpQPGEc7flTH7FBgnq3wbuogS3JOSte8TTvjNsulud3zIdjHME95KMWbLsUdMkoOMWrOs41x+0J1F1eFqWYPSxsgzy6N1/KulloOWNyNt4ttzVTPSVaMdOsa3FZczzqImZuLNrxgfWqrw5YqQXzcfvjE4KeshNWalOtWF25gG049TbFONtn8pGwkPSSbhboECSlN9AQJWac1/iYDBXvRzirwJzvUY2kSUrOc+YZHgAwXDb26KIIoXD4NkCSoDqtKkENHwDKLsvTLV6jQi4hkGiP7iWjaS6XKZwriUXcFi9WyoEh9FIV5aimVTglo9htmjXTOa5veFxE4QEGPCEpoc5oyY0QYmEv9jDOaSjh/eGZS9fAFxgdMmEWmn05dBCrvo41nLRIMQ9cdsTtyPIL9oUbiVR7nMfjNUicqMizyVwX1x0WDB9HL2x+6YwwESOtJL2KOqby7Eo/vvXzn/cLUNtIm8C24Wm+6uWx4B+W6DoNoIY+qdQWiEbCaeMxp+/0ypFC2y4rsBlAWhP3oNtnEOpOvJpVBCnMrcHZuJJihZ5LvI5nl7dcOcPPVW9kxFUhNffAkcqG9qjgw00zS0ItyzjOhgQhdyVJ/s7zLAEEtWTi5aiTfwKkRNWYCp3B7xumlagE9QHzxn4vmgnEYS+IG9BwrvQcwhyrbb9UtuXfDKnmDZ0falq58qUcgdiYZa7bgp6yFdYnmlNKfj/Zi5/BvmVrl5eyXeQ3cUF/BXpKtHgQ5ebQLqtKtUhIzxJkFNFFGtSHL4TXoXrK7rCMoJeZv0JV2QQdJfo0Bo814bA+h4dphZH0YxTflDHU9iODefG6NA3uRtK92TV6QiykfpBfStN5119lBsG8uSGhFgMtl3kSaBZl9j0V4/h29WRgrAezTSrMbAFajO6wYBi8BhnHAt3PTGjz7D4podRRIwFe2WEIV6YdTsUcD/x3j99Ovq1DllExFN1bjWNTmyX9BOju9oaymxGGcrDdp+BNUZxY91E47czQI35I98ZiGK466VBOOjYx2NYYepIeSjMUZCTXxuIsYxRwHCq0Xgwduteirei1VFQ1R0C7iaHh6DE5+Fqzf55HxtLq5lRNiEnGKptUYwyfeh7RmiH5mc/hJUVfkv+akGoeqDnzqoeh7J29ytm7Gx8uvjhB0Y8PsRz7lfLuKqXb/+l1SI+pTCiyNSS+fFcrfdvyOlNsTKbYmJi8tWjrXcDVE7vLoujxKE6L2ytmjqUosC5tf5u4LsPeby0/2SmXfg7TKvKIoF1dc1BJSCc4vaPcMRZpq1T3kJT7yk0yQ1bSY2UAJn1gto5OJalk9jkFyP2k8yADphegqcD+cys9t13aZl2UEkojHRjrC2xbJXRy0yukiv0t7qq66AKjDQ8WVwuPc0Wg47QY/ey2y8WraJTBh2lBg6Dz4Ug+Kz0WKcR5JPta01P79UjzGKEJUsWyySrneFGwjPIZ+18ssTUU3F7NDyQCEXZCZOjLYDJaQp+AssnNxi+MBGrnlI/oQmcd+yt/sUkGr55DtYr2vys5XwhYd6/W05MB2gevl3Qx8dhCxAdhX6POJSD7R4/QnMXSXxGdJNJkdXQKa6aZMCv/AGt/pWH6QomJRbqpN05rxyrLNK2Zw8s1YjbaRyI1gD+kBgrAUTrxicgZx5yXueKuSGZyPvCwEL6OoEk05I+kRs5RHSqo3U/xgk+/ddvjNSy+Ae5JpO1xzgIdox+v9z7DUodCRrJye7QZ7064KMWTovLBfag9OH5zrYZFZ8GiWD8366RHAM4QuuvCUwx5WhQalSuAlDSv680t9CGzbjgdYBalk1Fygr5FiP1+PZIdKt4iehNnUQLJGVr0VY/s6JacNTDFXsDmGv6TBu2o0iAv2kW4z9uHF3Q/d9Qx4/hmgrAYVtDEa5V9Lm3/esNeqRrByVvIQteA2CrQEz9Qieu4WP2n+82//XBxlUCTYTwEUISws9VMYe0MJ6xB+St3gLrNOLwtVj9o7LYO+A2Iw4ftNpHwLdvtQaGEvz9AILpky925PqAvZiQj981ZYMHH8W43ZvrqM/pwBS4gLsmWmyJ0pgqlCPTu2BKQsitrwgYxxRl9NK+G4qzeKJEgWpl5UfeAVoAZW7Iz4rJfCDbNSuWJJRxFSC1FYpxxG2LVaMIl41CoQ2GiVlwnC6SW5YwHadAFX5IaUcBnW7uFao0I6MTQog1+OQXvgu0cMx2Y/C/udFzHqr6x+o2jsKqyuCM2yAOE1jjwJBWF847qJg3VOG28oupyCvoALa53Kc1k2mUeM7YcZCQibUjhRDBfkTLt3af6eEMkTbgHPNnjPQfnrd08kEVQkldbFhPVLZER0jNqphVR7g/2Iek1dXzkKaO6crWgqVzXJKjwhvyPeqliyVR5XQYwHury7K9TnWvJFzZeKfxYh6m+op4pJOBrcDEUhSwyYSbldWi1Nhc5oDJnPXlz5+2/6NRvyrMcm3mo3ryJUmmHfZpvMchy8ZA3llikCh8nFk8JMNrP/XsJMlJZUa3UoUq2e+frY7g4RymgSECFnKc3RVUUXoFqRhabLOrdxvJ7Oboe4bKyKEd6Ra5Jm4SwUhGt77QtB6bOpc7mdlKcWz+XovDpvJoZSJ7ElJOxFJv3k7VJL9kw2Za2PVnkZTnVbZKknWdHwjeOunJETs/QYc26fnsCDXM/0g3KuXi250iXC9qiECDqc8rWWrf9pnTClsZRFp3CByUJfNySzBFFubrkUjzOfzV/4NRiTElJhgUWxabmlFPyHiH85gcdDkMT8/gajG0emLEBecxzR4ahD6bL4Lvzx8qNzu2Kvktt0UWg6aKf5NX00fm5IJPDH37WLWVZjIlkOaagU5ypZGc03SIIN8+ahH5oxAs8Sk9u0c3x9EtLWl6qqjyYa1fNee6WmX2uP3uwaKHWzZXNZlefBl1zp5V+evXOFxaLFmxVUryWrNRdpfAFqTSoXouFsdcKkjDd0ZSsxZWw/PYyP6Y+g2p1/y29Zdb1H4/ytVIpfFvIQkNfYU3Vmwxx3rNK6KWX9DHMKyzE3XpJ1Def+8vjJiJgo/cpK7vUAQchU1MPUa4LLlSQs6rjLehTV/3mZQnLtZG0Ry9OQcjaU46snaDeeW20a1g3wgUSLfL8rYfrG+WU/ho2sCzOIwX/EXHxlnxHvYa7q6THp1MJ2cVCe17PO4VqrRlypiqt/2zW7QRPlSS8sO3kMc9bwtMcJ+M8n+4GOqipPhcu+TfHXawHbI5zEjRw9RgsKlj/ZF+ab258NcSqJiDxOmwcD+H+vxSXLsNj7ajAExZWcJYv34JJ1riWC9yzFS22+OvPUoAq06ZEriNEBRGDNN1wuqZmSaprg9pwnLP2ixfKKPAxqVz9661VcQsQkjzSMacyzaWzX5jW++1ep7GKP5M50wKB4G0CsawZ2hh+V0HVzL3y0cEplsWcwYCFqe65JYpiGWkwsjKNqS13eo1KuYVYRV+7xDM97XrASvDMlw8hklLpQpuo9GN1b8Dhvj/D7MvGXfxKj1N9MT6mpVsByAgkQl4FwfyYGO0MT5fGe7Ad/MRUKywO0mujMnWrHe5BcEOrz/Xy6a60hlM56WEqktGWVofGCcjlbIxKT06mJm+Qwj2owPC9fpji6Zgct6DiG8dGMMWZSlnK0pd98dIVL0NJ29tTtiyUK+i0oHOWCgUlBaWEFUoWS1VsuRLFlfYrlXcV+mp0rhYX6+caFDWiqAl9repuXVcXVXTLse7Vjt+YyEINfmAiQYIkLxa30XYX+xaK+qGon4J+1+IGt3SlNHvjpTR748VL915Hf6DBuSv7579zUa6els9OevaKg70Khjma6UtlgyeZ/kZ09Fc29gKhLDi6ONcFpu5rbHnOfP3veejKQzyw78em1mX3OXfvQlb6E36j/uMmfnLURbUfTBykMImLWbGH1/Y8mt1h14fOOpOj1Dz5Ide4H3EQdDPFrOrqBXOkEt9DZkyG0GDSBcvpw/FEmZcJzlfnU1jfojGd2SOQtXlg5jrkOwIEg1qAEgkHxdQcLFBKoJKGujN4X3MxuZtTsxxJTdRg68kptCdx6igpGCPzSIL1cE0B16wTh3R9pu9fG9EZbVv5YurDtybROVVGkiwbHYohT2rN6bQyctu1JMdMA4eRrvTw2YztkgLRGpN3gSTzSDDgWgxmvXHIxPD9sd+kuNpRYDQKcMfNuy9Uo0PYVoC/G0I/VvFcfXM3c/IcJHcmFmSw9VyrhD5FSE40TKNLGqYHe7DSw7hG9nvsoIfoKxghxZ89Ih/qPxJuw42nj7U/XUn8XaSNZ0v+fQKjqZgN0+YNcWyKXMAGg74TxvblsErS2VUPThGbcz6cDZhmtKlJrcl+TFOrfl3Rcw1uEkYuNiOQEM99qc/EyzNHjsqaKtE68+zZNSrbZmwayu+6rNpX1eFDcXvCtnM12Z7RS6RJTZvD1+Rwj3wrTQIfuvifsH+uhfk2s88Y64JUPFVSnhKK0wHQPwU2AqXK1sDkahDyDEzhNBBDUCkNxiD0icHJjwbRkJqEBtaQmoQG1sAa7GQ4MJtzD+XEnKikpsDKDSunjKyYJk5JslYalyAyewNjWIIjvxeCilr0K0zBpmSvlCdaFB9MdWYPiw11fGFx1PFTxh9OICvc3lZQF4wgRD2+KoUUWQ2VnCpWgWghfWTyP8GkFU1hzQerMxqWYWmlRpgiOBcMa6LyhFJzXLtcc9TKWTl9VEsYOo2XRJEkS4580kaz5ih0JkFumv6UDzz0yGNPPPW7bS+AAGZr8/RnijWs5jYcrPG3BIOA/lIxvyreGfz3ivndv0/YFVesXAVzlcUVPnpX8VcvYvL///xrYHtX6sUrOAIE4FaDAfQjZMHgrx8/ApICND049hh8hQEBBD9wgIYrQx04QGqzNN3jrD8+fw8LdwpsUIMbiYfuGjeeJxpxNE4snc+fdjJIIYipktHQPzlUjRYTloAAG5pCHuABZego+1kaCGM/zGFwAPbGhn3rp/aktlM69DFnMDTbFDvs5uE5GdwNCSFelM6CKMeiQLKHo43ymhKVJLkZl9sPkKRAZEuRCgRCyQHKIO1/GQAGOhxR1wBeCTaW34lMrjmnwh/akm1ZpQngPxIAAgBs2V7VDmD8B8PhJ8CMPdk+AqA3AcS+bAYYQQAbYy1MfOs2XHqhZh6ozTCgkPL8Ah0jIy9mcz/FoDBKGDRGA6OF0cOYYewxPMyEppbuf/9Cf/2CEeiTLKPNAxg5jApGzW2HQN9ZTbv96UVb/v/6/8P2pe2z26e317fXtle2Z7ZHtou3bZ6fffwe9gaA3x0sgbMTAs9TRo4MAA0KgyN+0/Sq3zm96rfP/8ujqaWto6unb2BoZGxiijXDmVvgLa2sbWzt7AlEB0cnZxKZQqW5uLq50z0Ynl7ePkwW25fj5x8QyA0KDgnlhR0Byk4rq5vaegb6B4eHRkbHxyYmp6dmZucXF5ZWlk+t/bYOJAsiYp5lHE9Udfm3Ny/BvU8DNwDM3wIArNwKb36xkH81AKze9vOp1l2tZ7+VZmtF3v8CfOPb8Jtf/ur3f4Bw8NO4UvJscW1VfUNj3bEWoPm17k7gwq5LAvAgAO3gQLClWbs+c5atOetGSMG+1cNjygNPPPfae/u++y901ao0bMEGoUJlXrrtmvMCcVCHw5QGZIAy+jEw4tC36yG4ORdN5Br97a1+4ukVMqM61wIb+kZiZEFM/5jrZK8tqNnOJdyMOI0bb8FMum4060P3p655RWly/+pzkMwEL66Grl1PprxcC26S5ma2y9qYs6uMjzhQ/Js5BeQthDm7e+1uyZYmPY1qY32LMnSSQ/Endc0TaGkvE1hZH0RtOqyHZdKta5TWXoWLkjGam187Vp+qUmMiEsbQ86P47HE5YhDRnCPq5q7lHXK0tpIeTLizqiqTwhkKJodD3MmLc8YmWoxapQY8wtd7Kl14K902vudqakXvoX/MtUN6CWjSLaGT1LeGLypzJr6Y6x9XGti7AFzWy9UEfB8avqzZgBiseXgGOJ1D4XH6dkUeXnysplsqBfSaOkPhxf/wWXbfGgcB0laDukPPM5kL1CJb2tpk/22qoGIHCYOfOtXNR45XCIjblELY55nvJu/uXJAYrradS5J8ZNAq8tYL7Fi9AWIxNLd82a0QEznYC/Er8RzL3rLxKWDEzlj+OMOjHgZNrOI5GdCN00ypUtNuF4LpUG5sOIkyFDgIBkzhBs4Sq+PGO6U0ZUhXSvFwDPj4pAiNB1RpeOFDJTdULdUQL8U0UZs0PIoRqVD747NZjDmltMdPUmIpVqGoUrkuMcdS6nk1fF6MTaUbFRelkBjLxL/h4LkQneBazhoXho7BSsOjNOLBCzsnLznmEuMga5GcCczfvHISG23s7KJ10qvyTUrtHEd9w7egaaRbZ3uMH5WWVTlmwRjFWtpMLoZOK5sNFrlQkjGBFXWBtAJvchFcyzzoUm9Nc1mws8YkpKXEGD8I4a2NDsFK3PNxgaRPupTjvMCCrMWktNjyt4HJIHHgqx5ByE3TqtkB87LAiJhDMrzkoF2KcuVK46q5iraClbHWKeDwi6yE+1Iry7S0iu81s1LyiJe9Stlyi7Er1fSyN+3RXPyj2ZuAzUg45Q45eZx30ihpN1mspw1GrVaj+nTKR/ZJ9+Zab6BlyNd1eWytU+7kGGdLsp9nrpEhlWJLRu0EolQRlkwEEF4hw3sX9d1Ml2kaUnEQoeHGfJi+In1+SiZ+CVqQO/dVnndhKnPNfbHliEwl1E5ocUcHM4hQ9RuBPVbw/OKuQsu+1fJIRb3CXqnrdHBnXxgtNc+mFBKp4jpA12bLBcciW+a5etgmr6HCRxd8cik8w41gpegNrFa/u+a3epCy5lGb0a0SwhHwOhdMXkjyUM45Mor5krk0rfBSjLB361fJgwL8c8V+SV0fjVthIIvsKdeONT2Zhj1W7oUqGAGnNvWnVkjHAx+pmSXFV8+ZXYYI3lGnOp2m7m9wTNFOkIrC92ONZaX2NY9C4o2sZtn5j+/AAwZ3O8+3VINZoJ+YCqW/QqagTmAlBde0aNWpMphxRq4W2lOABiYmYHISfBzTdC9H4/Q0Tk1hCIbQJSRlvjT+mXJMPy7y33Dvd1Y05J9Q9PUkD+aTIay5lnideof3KyRUGV3yxK+ztWvkE/Cz8uUj44ZUd2qBq7I69QUbt2f5RW+NhqKwlnAfCeIiB5Ai0QP6EA2yRBnAMr+zWr91APUrDiXRMRiuaHUjcDJKYKgrmhrJJnRLSRYCPgiXRsocUnm4FKKwKixWufLsddylvOwuhM6SsFSwLuMHc8c/SrfnF/I9A/fWQ8c+1dbThjo9laaQwfiix89nGSJ6S4h47liw8oeiPmv393406BUYr3X7bNwHKB2RVeZeeevJdvUFgTeqDOAQ9iWLzhKVyv15LcGLn+9YHbv8+tHq12/Xb0iueq795OjWa0fJWpC0M5le66yjoaDMlai8L6R0p9Nt8ng6kJwXuwbccExUlcMX8nzfIIz2FvpNbcgUJWK9w8tLrvdeehDn2ueFRaf+fnawuketyV4qBxzyVjQsshnNMI5pjIBnXKCQwXBIkg2hGzpB59+r16lWk2MwavSs8OPfTH/r/kyJFNWZS6/AJGHDlsAbg/rpta9yoVMBVOmRL8naI9f9F/0+bEV6mbI5RJNribaNdJSjv2e34TRFw5U6HweoMZ4QP7wW4CBQhaoytU+cgqvZwKILlN7H1ZvvAsZWNTevSXePIv/sobYbtY2w1ahnlagsJhclk3UB5Ox4WOVKTf9g5L2GeF3LaZfdslO992AVnndnFp05YflXcfQenh8ov3/Qr7JkZYyxEUzbFM9maCOBUeEae9Lu1BJbvhlKPEPsONs57EqrfOacu25VrH+QrTcd1kUNOseJ7564BffMD9XjO3yxC7c4z/XYvd4b3frCUY9N5w/8IE03m3rCoPYbiReJ+AKZruzatl/mUjXMy1zxaBUZMzz+VLp3vEZ7Rm/8mDf6ustfSnf+Sex6vP5ytoeg2j3nWKaSn2k/QfPMLKns9FiYpvtcunutv2/vFGHvM/Jp9BGMyw6OwIILPpZJLXXKcJRt2xJPfS+gRMKIjGc4lBese0MT18pcJWlcQkIfJQpmoe4naanjq3PWNihAlwEyiAsg0JypUk6i/b9+rYhEtJywbAehCDVbtgfpgvMcRMmlMAK+7k2t7gXzTseOpBB1bTB0OjHzRMa8wfbprd70QzNvdtBFR/JXoUJDVa4Eca65GJthiSG8ZyiPiy0oRmjYEjjuS0nZN1ejxyf/Dmw4qP7Na6xYKSJy+UGrz39BA82wqtcIb+Q0l+V6MD/lEGBQo355SwVxW03c0ShGwHlZ88RTToBjRTYaaZtdIB/vGZ/oJp79wxX6+pGSFAFy52uF6ygyOAL/bpHVdagluL22AT1tLraw6VIXhrHagA6BT1RJOARnVcX7AebljGfiO/JTiPKbljtqi8TBA2kuQlxBIr6wsjYMWr6Y5RNVmlnVTxiM9VMoRhkgAm2b83G0X9ezMDP9pJEBcNxmv/g0LrPFQECoGDWJgSy3mLapQeoi44qM69P99uE0cZXvSBb7DRABjcJuAAlPYPFqzXk5QfLesRSKREjGmtJYm5nDLiAEAQGKbPwqUgJjxkUw+e9oc/5ut8ZbqE24ZGzUJr4/lt0yJf1DoY0lfGWrmYNE4XDNazT1rPgMJvK7upn8d1TVmX4FFhdrGA7NvJy4aNBA+LhIPT4dF6AuY5g5p+yBLmDvA/H4sK0PHLRfgZ799emZlxNUXp4m3YhzGuR+mIisM+nPz5nPNC9nZsXcjNaZfYtWSPjHs7eVCCJ5y5yNjafytRYYKxQFgen9Hczw3KX7AjKROh6Yivp9ioH/FKQAcsju8NCS7rhNSfSNKgw1Q8/I5jeXks18TbcIqEAukl8IuwLBMqhWfljM+OzFVhA21Hu7/eQrPzhUVoPxd3UO1+Su7z7I3c3UJf1HjjZ3tmK8pb1pL1kCw6jSejJTexjrGqAoAJ+ifM6whjXBzUtb78ZglAUOFlPru5nHGbhcoo9x/vKFVIRalSvmzHOzOWP14PyLQL9EyxJtT87UhNId/hJyWorfWVG/G7XzVrCZaikvwpzJTV9PrX71i1yARYll3IgkAFoF+wgGG7bpGsA4EYE4/IJwdlsUSTinvnmAY67tENHqeyNeCP6ik8HWydkyHcn5LdDb2uw+IdYFmwh/g9kT71L9xeRC+OULBVtNXLI4SywJfFGl/UsAlGR3f2y1X64djuEqdd1Cso8errUXyw7N7BitbV2161Ekhb2v4QI/ngYg6LpXx442YFYGW/DEnl6nuvDR7Za9toT84j0+3zT9eqfzycFoEEeNLaGkfzzrMFfHeKPRl9BPY7wroc7/sEFwEeGC8yhEO2/ubQeAuLBZdqbZMkvJGettXHrw86Ya1UkCVsd6yzh+QwNWHB2/qb3Kq9eRABxObDjOo2EcRopYODFc6kwoy/7LYFzRJ5S2a23YUVJVALeIw63imHxIROoe4h1mtdteSAAKVvgFtoNNKzdJ6905XG2sa13XFAYx3LVqwq814n/G8quN+INdSxjEVNcGtq6BmZ9wgrB7uLfzKwbx9Vfol7LY3t68+nA+l2NN9A93TLNPpYQziTletQOnq1RuDV4bUCypzqh4GIOn+Yb4epsTvcNt0myuC/gSS3ybhi+2qN75cnOHItdZnZA7UxemtzFTzy9emnqJmX45erGRWV/hU9/Y4FNTwayRUvI3XRTVmx4TnUdJ68PU1V+4NG1dU/U+dRXMxDAbAt/zY7Y8sn4yI4RJK+X0VNSubrSW93YW4rV4OFeODwVPzTkxXylut9p6TAd1XG/wC1MgbAwZ9ERO1L899+7+i5mQQnFEdLz36eM5UwVRNThfy4RwB36cq70l1dbJm9foryLq3XhUxcWSR0edt/N23jjzKCnUK/obKfnNjtzkTE7oqKAiXKdYL+t3C+WdQmXUZ/EucDsobTPao22uc24lvjs8zXMivniuOGEigX0RWbxv4bqiEhBDwSnAm+wc5ENmB+cnt448a7XEcSYn3k5oFTzJ/0GZqbiq3/+jT33nDzazgfoxsGuXS3HZ43fs8rdpX+a+lGucJog8cBaPaG1ntAI+Nc1rZbjO+AFnPKHUyNCIjfD8te2HS7aHU6i59PjMuvA4D59RGTOnrcTK2Kj83I7jviKfbM1I8+iEzKjsokYvXG9iS1XdWFxJTJCVjqcvoVVdNOF7ixkZzC0sycpoODlw7fTOwsDtlwHIjMPNIzmTsCtnlaJ1vPswFP1D8gNLAz6/+3AW/fQdUDclCsOWubhOYcvRqp6EmtIUcVGBiMjBvEtw0SteubR7iOBv5MtpxCWFOfVERtPH8xMGiEHItEB+k82X0IHi+KMWrJvVR/PqCUnWdniOBsPFRqg5BI62celguU1fu3ZxfW9vwqvKLF3g14S7sw2UI3l9fI6oKCU5NjW8JAY26HMproGbmHeHecF8/+Bb+OBn+bCejyfBGLbnzQ+5yPnC6a5nv41P3dzoDYzodsUjo+0zejLav2+d3/h76/oCryI9kpceE2igQZLxNvXWilxgOmM9cuz1zHTp3vY++u+EwtSAKFGgp4AnhJ4rXd/9OHFkhFHUQv+zd5mNrh+eZ0ffqGnKqwtKsCI4R5n7Cs3XIUU21E6m2+S1qw9tXsel8R2y6DgP+aGC43x2DNMtsKYQ6pkrkByziK8mDpDOSaPCxjTmhO2X8ItV1UpHkDPZdncR+CFqoj7Xr6wWmvYJRYouRZVya08AMJ1z7bOPhjZnBlxJxYFRAdFWxQi365Is02PseA7fKcaCHhDomRIaA7mLrPJDhwI+w4URx6/V8b7sUcoWHPNKCbGWy/75SdwsYwdupo8UHfqswpOUXN9f6U+Yiqpu9/OLteRD0ewW/xn8tY6InifT6ZStss7H/rVlPxMunE/XG2sK+Th07KFX/ol2tnXRQuT9Dqmw60vp2pxlJsmLwODEWpqYuJTFRVnWt0JVaYSDrumfqJhz8lnUo+OHHVALCQpCkmXwYx5jAIww8dw9nN/PUUeKD1Ufh5bPv2S1bi9vtnTFJ0S3H2nfnBsrLwrnhuWzy6bE/PY+nsTw9O+8/LRLPKp7XntKSuXIDdjz1xdhY715FXnNo2f/zX8SNDAegnDI9lJF2rK9Xd19uNiSjejrjz59e3Ai2jZsafqbdn4vtl5Ue27Rz+89w01C9tutt2bO/PbjR5Cj0295pZ+HRvPaW3OJ/gsPodvvboMu5ZEImJ/n7ni5uLwIKK7YCToxEQrPSJneR2ug94MES4PldKW6y66JuzyQwagtCQtKqy7ebw3FdodkddIi5YwjzzsM/pSH7JTQ0DaHx6ad/lSOC2lJNt0ymfYktVcHcjrvhey3nf+5UyebXeongjR1PDLO+klg7dPAWGukqsIFiXpbQZ/huXzv+1yphtSTPyvRSaG9Ht8sx79UqCIN5dYlWil0Fn/AiZoogaIlOJNdsiSQtKxvpJdrksR57ZfPV0GOnAp/74bh3f4W9VxBPrUVE7CxOzal/z2rWdA5RAZefaVvMddNjRnDjAhPipLRtL9e/obSSXLnEz2I8Jv6h1VZR+7/gOby+8fPhY+1zTWnc4wcsSiM5FWprfWqBnFSYk1o3XqQ53jVcXfqMoubmBnsfXDlqWNS1lPssrdM0tfjv/J/4odcL6/01orkjrBkX3fl+//mJo5VmS56FNpUn6gchb1+Uv5fZDTEV7z5fbNYvC+2H/D4tAe+WTNXVNI4fwP8+lPEP//ZAKX1/631KZA8NA6ykWguk5hzsu87GkZQcQBzCN/F/SbKSs3IHq0ptbrfB/pvDPTL0e21niFRdCMNJCml/5UcjKA3tKE/p1iIVBs43HB8Q/OXVTmzggpkk4EcuQKEtC7Wdq0x+E9wNGcEOWAP0OrpSJMYq6Qeez2gtP5nA4c0apmDjPkX1cD56xDe/ev+VwtWvYH4NWNTXG/Q9Kp2C7tsDcBfHC3cBsjz7UICeHGqT/2PP/rYnovPAfL8eWEjAH/RSE20V2zSvKA4r3kpwSpcEclTTLQCVIqu114/KH3szkCniSBFjOFJHz80a6UJPz8rHgnndN8our566tld33Oy8ci+8taSwf5XLSQvJ7J9uOXDl+dVhiNLWwDY8MdU2EhtzrG1W4of8lxuZpS3u/s2FBXBFWNw/4ezbxYtDDk/ihEn8tk/spiXq4oWXSMGihOS21nunKzWldaW5uX0qCgOr7Mma+2uHNrB/0e6y1ZaSbs7i5lm9SeiT7QLkOFzskKJ0tKW078f/PZXf+q4KDE88R6PLRKUzMaxf6R7bhWWDLkHXnoIfUibzJcp7mnKTk928z46JJx7oKL6knU6PaooIqS0OAQixs+UoaKH+8+MC3w1TaajbPPHhBfWLuB38QHMxby6AGSgXbyNY9gXZCa9xnd458ywJ+1gzPSKLTmy//7CsAsZXZqJMaVjA+ZPLqUXtOltfck6aSNKP59BqWRkpLfxyLZ+xkGVPj0Mgu3bUL6Q4REuDA06EtvGj9mk6OZAnHGntfmEWten7wZku0f5Oh6xo5LXaYhFbSKTnseiE+1ZG4FbEbTwfv/jvlNIlcl0gTrJ3D9Ed09T7BQoAd8isDwcndkeBHtfupMji+6W5cPibTk85TrYvz2LDYDmu+cB3DHQ4McZg3sHFBU1pnXomXGN+i37Z2UrJVqOd12hz/twOkICutuvnk3fC8hyj/bhiXPWP7IKejSTJyU7auUSDI8uNq+IBX3Y2d+9LhcXjbuG8pxZUhQIlG2VyLxQUirWT2nLXRTF5y+2tecvxYv4neR6rAaAZZ+VjZVoK2pZvam4G2E6xcwXBueaUgoK42EjhOoIdkR01Zgm4qlvhV1s9xOuGLZ28rJ33REjbfUUeo/HOPnsnZOwDGuJ8XGdN7iaj6PkC4xiImm45PiW+oQybx9nG12y45oLepB50wXjhbfXYuPKLg2PzHZlCOtSOVFudKKFMvV97AYRh2GS5LRIahwrtHagdfn1mRXBVc9IcBN+phOlKn9BAVgTz2dqLWkGk4k6wc6i5ylVaaT8jrhGs0kCJzv67Mf9DYWjcBd2h/8Raz9Q0/6nXhTH4em/yKOaWWoRl3tRrw7w9+UcIIr7+xkoCF4VqT6IySpGPShBvTO7h0Nmy/MOiHkZqGdykP1DKXfP62+lIlX7Dxcn3Zb95dkcJY1e/Exct47WcUauWiZf4a1/N/jX8cvPzItOyfFIC4EOI/ainr2X7OTeY7vTv4ZGzM/cbN17pXxelbKystxJdlYyWu7WqLcdx1q45D+eH167lvtw4f0pLOlLfQjADHAmK+x49KTllCYUmrnjXULsJF5R4pxi3BSQbgpOMbEUiVd2IXgXd7PChNK07B4PhR0SmRkgXvwFAfQIJKDuuZjGHbuNOBSPclaW3yE7h0KAcQWZJH+9s0vj40gl2Rd7sH6aJLPnZM3DHFJGDi/zfC+Wo0k2u3GVNkcNRFO+1kS5FJdeHtiyEfYec7J7ftoh3nvlpN36CP9N/Xr5ZhtCKBQ1uDj4INMDEFyP8Oa02F7FrfIr51TewF+7v47sClENCNHwj27kW6TOxSsina/WVUioGJXRl17cX7lc2ltUwA6L4MUmRblp5hDbDvljAy1yqpGGW01Y27wCV0Fxiatgz87IqqoLc/zMzNq6US8sySXFuDCrtj7EKTvTFa6pP/oqOqM4IDC9ODrGmYEBoVgqmHPwe5GVCKWE1Atyn9dZ+w7JspnU11azqTZ7NuRscubTXSp5cbxnoie2padFmz3O5FZ4mRLJEQUz/T2L/TmiZhEvgUq2MdN9Fo5Ls0gnhXs7ZDFOjAosqaEl50eHEy+ynBlVWTExxS6ejniDG2FmKbhUpzAvYvblYGMTmp+Vv362dcRfplQrXSyDaUo/LDDR4tl1yyi9i3VxtbahucaqmI116AvJ6KiIGe+nRRxoefRrSHnZl5CdBALZkKXJr2Fl5a7I8iRK9SfnUVPzZfbrTTaQN4H8+01HN5nJ4i3m/gzg+0+9ftjjm+OYHhTp5cGMzKgQpqXUhFuz9f/0TiqNrz7x8Ek9lHIlbk18XdHIk8BMdHZIaPSvzitsrKuqlHNFhvpHByckDApYPGcXSv0bdBpvckIJF+Lx0f4jMcTdGzeh2Hg/2H8YD6B5TtSbzRU3kwpCmtXn3uwMj7x6Mz/nzJHhkBU2U3tiDtqsXVt/Yh76Z7CG0zbmziVRdXIcA48LKSUupTfMtAtsSbrmc/I6FzodO7Vg2h++93a96+v63tf5Tu0Azce/gOlPc2UGFPgEsFzG6sdsvwrG4hPmEhLGEpzmnI5AaRPJveMFbVW5hmocbZIP3zZbs4XIP39iZJVBdWU4sTxifCDfuuI57sJEgpeTDTHRMTY6gE+yMyPZ2Xi4BkRyidRikl9iezo/J49MU/bnuwony7P5/b5RqqUoE8FAZxARc0wIwII+BqS7C32cI2iWQR17sr0sX9bhJxrTZDXWKc0FpLFvjp+HDUNtBAzI9Alg2rmZjOnaiFlsAreSkbhqWxfvPWMingZgz/f4AMOCBloDwwwsOu42A35aJjzU2FSXZuwnGXK63r7EU9GDSjyZLKuPKk2Id5UM1v1We3guiABJCetb/U3m5G99vaunysr59Z3sOcJIqvNIOsL3ENcxxOT4i++I7+yDPA7gJg7gEO5nSJk0AwCEUjrKCBpzXJigoVVfZOQJ1xp073V6Rvq57nNnlyNPkthBBvXNGvaFKA2BzCT1TNK8MS1nlgDeJYVjz/3EdtgPdF1JpYJdxXDxjwx8GS5JpouiBtNjoqKibLXn3Jn0s0moHYlL+yjIgohNprK9Qp18dZJFt1As7DF2vF+b6GK5B3K9RPzYkoy+2VvDmzOyUEcKx6T9uBQXP+/OQNhMeUXATlJeh7NiVJqUOLjBMsuerZkkMBAjKd6Zl/8ng49QgHbtwsufF19GUJ7MIx/PQ9iC7K4qpHQBXpJXHYkPNihwNlB1k07tkISX5l4diQcqBTJfnHo7jr0fwBJbk6lCKtXaikoRkimogS3DpPQ5rjXlDJMReQ8olArg+4OA+wVkxIbxMmMD/DOjeWEZ0eBvjwff5kDzq1yBoUFEQLq+4XG44RtC66aq34WtC9W4LfXgytEgiLJZPFKTliv3Ka61NlLtwJVD2Fj5hhUjKjZ2eTW8h5Ikz0bUjzL/Dm6vvQqmaUl5HSTF6DTfsIQW7C9n2mdAV03YA9cuMnwBPSYwI98Y8QdNmOKiDJq3tKbSMoRKKQAtWYpLWBW27OK6Ehes1MGGbucEcywQiMNLK0P3QB9izURc+t7+xAlK087pTAKJOUndCFqULavJOlCcu7c2OJSlKpkqsa29I4EPLcBLcmWDOvstyauxdaJBGNbYq/S2XBOF76ZU9MlTISV34fsjaekk6d6SussSuxPBhmZnq9leHayX8M44LZzOj8daYC0zsrDWOOt1VZwlzoJkYwBBKvWLxcvqGS/1TlNK0VDekabVrAXZHD5u12uTCwaK9tpNkhHN/v7Fvaugigw2O7dnTfJljV5MYkM0JgWvEs7MyBGxg2nyVahT5ZCM2JHSzNyj9zKqjHiBdjsrmVQ0BryGR8LS5PCr2b17/3eLGCeqopbw8fcO3jur/z2zPqL1rEcLeOvN/v25iytltlpHLKhYLQq5hWLgY8i0plAMo8lV64uDzS1hnL5Ir2gSg26r30s2ZRr54Mj2hoG2ZhhfLMnMGeNj6uoZ4BohOlb9vIqoxuA/3DmtU0acSlm7tIrjxuADHROxzfoUk3eZL5X257WD/P++jXSC5sMTsdf86S8nTEcPWituS9CjaTD+k1GmSVW2IqA1Ke3xWD9s9E+0m2QFwC9Pbsc9cCBSQpGeE8zP3zgUmzKgn71LSWVLfV8PLk55N68dzC1J2XGC2NeuoyPuPLToCeixwPd5N2Ok+1XmcIeH5SbFA7+InIqoD9XzK1xcWbuCeERrj5LMb29MiM7yZHcPCWdu1I1vjp8vHR54c4zEcCITCx3T1WlgvuNJlaFI+yfDOeHlRwJyKjsMCW8rIaxRAStkKHpQHE4mySpFwJtjjzm0fOiVQrDJIIZIudly6j45aQ+mlKYhzHdoLTZDU5mL/XBdK2/yeZu8z8317U2d1qq5r+eyUG3K+Aj0gnbnMiAGW/Y/7htIWKFMBf2dQUSEzr9Hgb5+8kppL30LWVKMOA2hVHpgSVj2MQfo+7t4fyYMPHK1WnzvlCipKzAe/1tDrVaTo/DvPIZtIS2qYSJQFKhzzDH+/wKlg/3//GdzN2iImpvlvvLwM7KuLyoxe3VUF0IKTa1OOqJxOBfk9xlobXJbgp6LBmNXoyPgFiRWk2bivz+VWxsDJokYJEKz2PPa79VOdCVTmxFOyqzPyfmKA0I1fHIqfO1IwkbwF/cOqOlnz5+X9KxMduplmeu1dR3OS330s3M5+9cmL+JTeRNstL03nUB0+fZEL7oDwdtDLcYevTwGYNk/srI76+7MQF5KiHtEXkLNvaxUk51Z3NDk/OJH5iTWvn4WrcZM2foYFF+5HLpyNTiharEpTs9qrPkkBivdra9ZPfKOhGKpton6TvI6Cyb4/kppb/YHN8OsCt93iOAHQLE0Mmy/ybgSA1n+VI53Yn+sBkDgP6ZCuquSqzce6L12pjgnEtJrPzDmvSgz+JSsX90M/gA1imUbuqnid3brbLXpVv5FvZZhi2+Pvr35dJe++kpGsH9k05FLVzTiGho/G28TQeDPJPJ/u4F4ZN4tGnr7JMVe3IWoxUR7fu7dl6HDrrnF7pufMluzlyKi3EZa27KXoyJeLz2kseyIijBuTmUxEtjL0nfNMdL+kqVTnvSN6G+IpuT5GWVnHG4fB3594GKXcdfByaA+wPyICPxXqf9LbKP8LZjp/kwpe0+qvTPDk8BgpeOQTZUvVG0ZivtP6cVOF0r9KslVPDyrjFqaUNpnQosZiVtnY6Yxnxl1GfTMtE97XjN6rbE+7Z6JTm5sjY452pos3sdio103dtJRuAgf7t9xD91JXJOff3eaJleTU5CKxkbyqckFCIMPB+BXgkY59u4lBdzoSPuX1X6V5uc5u4d1sModudWq9TVdUZkhBSVZTev311E/DXYAcPWDxsONZ/Z799f28lf9H+ObkRbNnMer+U378tvIElFqiQgpv70PgP27u4DZfaHYT4Zv3++eLwyn3dbX58hHCRiY2JhJ9dL5/8dFHTRnNz92QO5d9An+lOvlH/G5+F08/ctnjsSUTAxi9/5lcY5x1HxwVw2o/1juO/8k4uaJziAqXxljx99vUv7/VojYJYEEObOsOf2vJHypxhCKHFlyWItoi+AmmfL9E0XyxCimy5iChDNRmk1lSXsaSRdXr2+aHCvKSpVQ00q3nRgen4JwkVgcWCCaLq0F9UFFNrOUyQIKxnnKGqwXb6W1KETmh3q5XAqU5HK3v+gsgRzJYDBcdJ6FS0JhNP6JyCxVjp/QCHOavibcqjFTP01XF3Euarc2Ml7RBBhW559yY5KQGY7FixQsX/SD8h14Ug2tGZYH1Lv501c//V9O62b/mPn7/+yLYhtSNr/oPAjRI1Et6HgS065AKMnhAL5r+sPTsNiXJZxzLSOaMFGgne9YTPVi6KSRSEzDzUtIM/2TULpJ/xcCO93f9PR1a1c6vXxdF5AEKPjFksGqWNQWrz+0KMtvytUiPhXZzSFlhsAFq8rqZ08vqUt11TkHvRdbyj7vb2DwUgmuuoDkqnMEzTGKghb2cVsk5BiD/7AC4KIICfrZ2aLtUs46CatcYoa718awiAR4VJeWu+UmK1zu6R6he5rhWgQ2pQcyBJxPGAgl2mFHRwwtb/aJcy2VI2HS7qITRUD6ydmNZSW/6gje7saTNvpQAX6vrFI6zM5JYHBsVbt0luiGtJJiwXDJUYK+moQ3ydsGw4citnlvkfXZC6OAlAGFdbvoHniFFTMyhuLZFLMf+dPf75YV5EmMegVJXi4aXPOos5XOmp/HsWxXvjgNa+B4KStNq96CA2H0QTupVTux7RTNZJlkp1CATNtyjayM62Q8KRdHDJCfQFtxwKMYB1OppOaPbKgEPhUoYgtQAFIN4HRhIHOD6I0hCospH2AjqwgPcE1RaCVYUSqWwCS9Y8IS0sKGJW8YvOwacpQSoAyVPSrJCkbv6ftg6B4W4KujKexhhTBbX8w2KGyH8I7CKgGOqIuLPN3gqxAApp59yiB5f/CL/39PPEUewXNlzwUCiF9LmAe3CxISwFmWbGFySLyFtklVMm5xcEErO2H6KevjItAVs0RMqx+obEgA6QkEYKgTUbWMCfMJK461LbbYwUpCSmbI9COwYb9cEKnEVmVEyTmlgRRmtGM05aUzHdMyt7Z547adsNicc3h0TBejBkigaceJEOwYMdJQsRbbeF1UFgJLrKAve3LAnj+fNg5uWKFeKrp9NbCuZxUAT2ND/xirjtlOXQJchU4ECR1uoImScdRXVgpBTyM2dIV3GVSNa86c9kxIewAkuObyCEoqFWtAoTKFLMyZzo/KQ7BrqlZZKmc0bsmf+fd/4+Jonx9Hc3vYPfc/XtXtBRPv74sf46Wa96NfTdP1yIOB1nGlAIN2FP0pOl6ld7HsxT10gWq0uAFcVcXMUlUVME6R7nyMw6SbXv9gmAAhpw4uxUOBse9BlQVTibobci4kTZZoczy7B/lMMkSp0FDgpeCuweuAVzC8AximkCE+88/H8RR4jEPVgvH72arLvrf3Po9lBSJ8/AHJ7853pXr/GMk9v95duAZctc/vA0UYqtHR4h2tQgJnAoBwqt6fqLXCIXvJJmRFbewomW5zkhpcu1h5iw4FFqR/7AhwtMacP6+8uDpCeRnfABUzhY/J++1V4YlJxIJDixLs+l3NMVmor8EjUWvEJLsV8oVMxxCahx2mHH2odxUV2mlUpT0tiZ7Y6hwYf5/p0Or1YQ2iH0v34GvA7/gyI2YQY8xKoAjhO8Pn/J7B+tsWeO/E35N+6Zfnr4H3ht/rGV7Ry8ar7kjf4JvmCQi1+GPk0wcPtxK26A3v3nzx1XdWVu/fwSfYl/Zx5ftNKiqIUb+Uv3y8DM+XFwzRpsssqAk8kdBikNATp5KwUUVKFsyyxyxhRiOVCotBho3lpqAM9TRkx8glNtPzIWeJpnycspJsHi6sOHdLqSqHoI5O9H0VhE/9Piz1Bby13JXH631ZwUVQcmwHKP2ZQMRGmqMwPxG4NIJ46ugNnYihzdk+BlQ5BG6e+gZUPRsB8ZBb59tCq5oVuo2FoDy3EZUe2fQwVaiQ0EgAKqCHj6zEZYrQSP+70zwlgqquEjXZucNkDYM9nAteQa6lLagdO92vrR/626z4KHackGFtHScgJfXIhuueCWOu/cgUn0TH1qzN5c6OllZCv3exiA8UiDttggWMxZaJLI70qUJGalZuKatSAK7zlpnbWGebKDGQvjcYwI0iRoaYCUNQX5xSmcNo9ZzEsdvkctiVMAChFp1grxVE+5A204JKOE/30kUWZkQMDnPZFgwpOaYDVAOybGJjajUH/272vj6hjyHI34qbK+htyN7t3JgOlv+/k26kV8TgtG9vFSg/Kt7dJqQGxHEclwXLTNcr7zeRMjJEP2dl6uRtpFUjKQP7BE+CVUJcwFfkoQAyN5t2zJjXHLMXt0JwboDsA67OjnWGpnIvzaq0iaD0yrV7KSLgpNO4U6hylP5KKelJw0CjMLmOUBVwTkY7nDHpvr6gdd3gmL1oo1487bjPfUNpz0Hvo4CG6uo0mrc5gVPkXb3oRImR63D+cKFQulqyFA8jDBJrwBhoppu3I626I+BkPdugsxkeqHh0GInRhV6yMYKZyxmscWj1L+7KMS6lNF0eD+BnVwDjHSQY6+ujwGeiFtGktQKgB6qgmOjIYUmzkCaUUL7HFNyAyCaibpzIgpGzEGkqA7FwgK13/46B8dIyHAFJssqUs8Q52sm+AFyNFNMgHpdL6uPItDTWLDO5BZ/Q2ju+/Mc/v9D4FN2tZP9PFLevP2/Y1z91ixgVEucaevbLf/5L7WEPIgmJctu5SexRcPtBj/fPZgC6ZGwT2D2b3/TzP0kYDwzHPhtdk5h6Trt8NbT64duttT//Z3YNK01s3Qz7w52WYb9ez4uL3/UHaqfRoZvYyuE0nFyE0/eC5ySGFRmpfio0CdHKEGEv65raExaHzpRzvlJ2D2FkJRZgyCgWHzRQU0lRBdTB1M4yMaIYadwJo7Clq1Mfer0bcigyy6ZwkGR1zV7/BLTRKsyCgIdHn+tvFt+nBQ+PtCJgFgAqwyvZBqpOT2+nAdgFFl+XaT8r1Ud9APvrPhzo5/6UO7SLzrrKO2RLUMoTq93GjVQSX0YUig6N/Q5HTM4ckhcs9UCwusvGebuleemsHJCDVkY9GNHQA/mwXANNuUwLWJytEFghtJ5ASk7ASVn2OqFYkUDr2Stizzmt+/YWV35r1NsTLDINXEeNsQcRoLA+8+hL2sA6ox4awnOhFcFK6jDtL5qcY4+LPlGt0EkDskJOkpFxFqbzkRr9UWQBOcHluHCai9eyqk9S025G+nOjmqQIwFDO0fWwraN2C4A0UbetFDDeSjSYDsRRocGAOOIhb1w/iihG5IHJUJZUZTuUoVp9LIS47gjrVgWcyy6nOUVdGEf0LK03C5vr3Kpucq5Cz+qIoUBO62JF1i/iglzN4Xf0ry1fLnYCnArPXOMdLwpN8EUU4Qdo/hT7YxVAwXxrvU8dkYQUc/Rn8HW0MuS8GlZcg0c/8o3nlsl576n5+pNUK1nW/ens8uHV2xMqkoWKegcbUCMH9a6UNnQ7rgUsox9/nm0i5Ki9L7IZISd/z8Wkhy9WUyakYjjLqfKVO614pFg68qnqlPh0gLWDUCAjVlgzr0VkMY+s01UL8vvR1at0hNFGm2x1jQANCYXi01EDCO2bt/uGPdcTtYFg8XuKwTI/z0Bw+meCTRFqQLGsP4QIFdEeJ22E5MsQ0q/V41wiz0tDUPdTPYIv0lO9LGYAf7rVyVq63CP2QIYKzh0twdR+gJE8unoxgKPQJrwE7jEOM7O+OQi6teKenFQ2vEZ1wlABSyxoi2gxd4gRBJ2BuYBcZVRRSoImTjHFwkbu+vMJKJm0kyCPOGi3DHQyOaCcHbF0ZdSjqBmuJqe13zDRqtCilN0ElFNUlEg6wmLoYsp32YG+MsMsqB1zWHpIWoqmpwhJPEsRK4bDbUoSMIVoSyj+gjb0sFGUsNEJNAq5vdASglyAIKl4YSQC/2nVCrxBlQ4dgSDKTx3ethlQIegHIdfrLZ7CJyagW7L1StBiwn3dexlRGAxba9VHF3hYBqhGJB4kPMgQipRjoqKUzWjYlRVVmvR2UYufm0ZhFIpBZoKjAAs+YcZ+UTGlgA4+3NlBym39oD/vwWWzuhWoq4THDGAI1MiBonSkSKOohio9NPPaDcCDTe0Islu9B+6a6NSavXRU38nFT/3fbwSc2M1/f25QQHsvc/inkFCLX/3jF46H+pLq9sAFeWrvmZ2ElBAHpOI0qV+hHctQN87tzzBt0GgU+mm+/UdZZWvWP2NS8b/OSK3SeZ7m9sZrgOJFhrQctzs983kO6mF978GJb1XSah+j0X4zQEp1W9PhGwgfChhxOu2lsQFqXCOdyAEHyH0qRa77pgC62howSkrgOSjs5Wz0d2CeSaQ0WtfwYOhLhna61v0oP3voJYd4seFRW1bDOlXVDGtnGnXLTGdu7/cE4dqRwdfr7Alwtd9czNi8wtH+Upg1d3YyEWQBhuWj99qN1uFQDd+VQuGr5XllLUmtFqTYA8xKGvg9dn4o1YVMIJx05sRQsFON7/JA3VUY9F0y6fWnDF8GbjvXg24vJlaZp9KNfnHukgO6dZmbnKH8QRg72TImNeadb2nF57JjcBZAmpJ5meoL0Pz87FUZeSZo0OWw7x55Ysteau/c9vvsKHQuZ7oFwf14U+UKedvBBjwaQ97RKszjtrpiMtQYFGFRqpPePY7puqgza5BwIOoNO+4itpZrNztGNWqHAAXNcYqjBhGBA0wpI54ZG7BukPlwdGMtt4NMF2aKvIBscn0aOirVGvKWGfUWHew0I9XAK0ofoKxvN1tnAmMuu9kateolrZDIiW8fPIncTmXFLt7UwLJdLKqTy1Yw4+nYaiEBNMcLe/xZIWq1rkfo9dRU4G9frWGBU7NhTUDABzNPrv6nS5QwpZsYoAOuauG39XzFI+SQF2G3FDwi4/70U6HUjxEnDWm9fkv8zlCqKxq74QNAd6rFZup2c/kJ1kYuzl59Uw4rP0Zz5i1CfLSN1BWy7fQ1z9A+iJjp/PXK57iWXe+G1QKy+XfAIxxgTMesQecFLsZJr+tIPZZj1wgJcur7h3rMGZZ9YOjh6QWHfPgsmbR1VWhUQvszzx48C3SZy1LC509DV8rqvR22F+dXr982Nr9686Xo3aobrBS0jmKv35hfvzoPDlFnycdd8YZRKfO8oDLDCIBInyE2OvrIuT+RBy+k8IqRJhEVV+hmqOmiEBUlkQeUnYkealK4POpuXmCj6yQMX8R0HwZbd82ekyieq6a383JNbTe6qd0yCXV4lEkXdwKNiwtgCztxwjbEXjuNMu2tGrLTXc4vI0nNYMn7oYfzbahv4rJZvPEuprqdT0o4LWHi4vVqP+hbCaNncG12xU84fl5XnPJdMEtNFNKiArQ4OBlJzIiXGGn/uKlpZUlhIPB+RgjUnE2aAjARI1EN89KGrYe8gJlhemQ3aA0z8HhN0Xg2KJaMitYpCxJct0bc0LagHrFYrIghoVpGPJbEZAMD6CSHd+ZipTxyGQ10lMAAt2XjYhShaY0QBElHARcCcw3z6KWxPDdNS53eA2kPqf5zLxVANbEgGA+2rHOJWn8STbZ25RVOYiaIfjRVhogqIY3ZKzORNylJ0bYNzPBM53NWDcN4ZAOOA86AGpvPlyYtetFglh5VOLdN1KyRbvgBRBloymYweMD1wRioPU7QTo817wEQ0A21EDgUwSceHfJlzYkZMPnKqKATzrCXY5mT3jE6Sc/KQ6HQDZ4YJA8MPxQkDC4dNxQhC4jAsCQXCy9uxj3Hnkqnfgd1taRknMLfAOow+T5P1xsFTER7sJ5vah5Y36uinnML/V8c2IxeigqBrwng0tTNkLoEPfUiF1qIuJfuSDiWLU6sLnIxv8bk6YbiHcmms/UrpFiduBqnNvUNniY3cpCqNME64L0WiHbovR3yAcy1dxaLOpcbal0syPOE20LB0NOyaB+pbot3yhJPxdcP+bXmvtDXWiykolQuft35Y2/SlgK8nNOb6o8qxbX4eEU97oovL9TLkT6ppuHuwVFejn6YtvvXy+vsA/RevX6YnleuNeYAj6/fvAKpO2YhWpBYjx3lomFmUIKxxt56KBM1Y+OUw44OcfCWq00taqVH4YJd/p5aafcHk2kaGHeJ1fZKC8Sm7uYyW9EVPK0XXc1HstcrYrqj5M02VCQr6bJQMZU3N1ehpFDJFY4mkOIa1SCFmezqL3EY8K1DY/cTO+x6osmsM3MCDzKvXyvhrtJp05Grw9XvM15WSX80PoZHDJXTDWMPDoa2/1Cqrtqnop6DhsuCsuFxZpwPuQ74B4U5SWDQLjHlbPederSxEQOHjavQtlpe5eH8XMY7w6lcFK8XZJhO7bLgtI7WSVlXzdqKB6+Vk64U2kmrWyiwe2UuElGdTgKkIeO7mMqxPhAMtpj12mjghzPH1V1cTxPS0fIDBBYr/4wNh4lV7v7pGvFus1HWs3Qyk4wUpUUw92HsQGgO13F/nr74kN9t5wvNWeu9a3j2K9cEBsP5oooTU3utn8FhYEC1OvofF8Q9FeZaGHfgPLLu/W8kt9VE5uqaXrK5dtWvp/1AObdhMspuLfahQJAembnMEAiLdBlwJMKqClKssp/PsyZs6tMQrhRvfg8Q9q5Z/9cKvUNwKaDBSZEJ1JopnwiadUkyeYbUKaouxjP0nwlxrgODpLH/QW3Gr1CauyEczUKnGGLVlchGh9iRD317Zl1+VHHxTgdNfTXCh8pBQgauaIwysagcKT1mUAmW2hqRyH5zBkEMT6VzoWmQcbraVdbhcfLm13CNrufPZ4OfqFK//rk23CFhfnVi4Q/Ccx40K/Cy1Zsj1dyFgNl5CYPocr7rVXiimuO3Nl9CIyq2hQ4p7IMJN/pfjqPiWD4dST214aL1AEt5gxB+Z7GrtGUf73LhgL6GWrXWfbZ9ipVic1hTIxOx4jlcrnwv2my8OLu63uLiZN1lmr3SF5WnbyXkfOnde48Ljf2dXS3ipYhuf8zoRkl/e09sBadrpxt6KWYWNNcWe+uG5SAKGgVFY6bBJrJkGtdBI8917OgJg7FhSzuXimYwCAMfGFfVYMxj6AKivryBNTSc9edverTAXN8Hn4yKjrxCKCjaa5ysDxpleH9+mQW1nxVD+SdJg6p1xbS9yZ48bXZi+SyialsaPFFWAzBypYISeTdpu1CarKX2ZFuYqjdEsMXxlO1S591rY2UbCB4u1wleEdNVoYZ9M4lHB3js0T7Qzv2ZPhRuMBBrlsz8k7GMRQcB75GFG08SkfUbov8o4K/Kt94bao83oQdcxFKOEbe7Pj1CGG1sIKHJsUXg3ZDjq2Vl1r/iDobnxxgXFWCPqaTy4BhOhESnPXof61FiqbeB18KhQ9lFrtSirTjTRi0s7cfe4q/7Vqf7Q8ONpoeKy9b9J+a2Hm4jX5jMRUhlzbxb86RYL8qhS9k9eaIRY8WVzjQiZf2hadd/N+rlO+vvxWaeXua00UNN5LKtQS6ns11Wt07Eslfle7r/zq3qHgbb6scuXou8a1fPVe8M1sawE32o0ES8lWlxktexcW+qh5cjsPJ01lWaD/ErvHHGbxWecnPSjbBRnrbvy7nwwIzi1iu6yzdjc8qJ5yGB+xHztkPlJ3qgL76Ov3ctPMYaobdRLIicl/fRmm4U5/mhEb2J8wru64bBo3iv0/vKx63nIfM7APJeedmsK4gIqV/KfKMoeEYmstuoEK6iL3E5l91MOjbome/sa2PyMZqD7WJLBejy6tlF1g11QoMeiTmp9FivufLlbDQNST+MJh7KRWu4aiIGVCG3mObaDZ/iBVaSuKbXHU43z4/XD6miubmv0iHtTuP1KIF5ca2PsEdVPQNhJGLJuM0d8yHMUqMr9PJABoYmaujIkxukbj8bAVY24CTs9xaBJXK/2Seb67GgIRqtVrRYrE52ohO7I9vJdqs+SRWXwo6SpuqbXjdPmHbWKEZs1iQnMYkDTuTfrO7tj2ik1Zox695pPdMFL4i6T6LHqcW99e6D4LwELFoKuYglehWW20OdTfb9ZLttqqphNl9KorssLP5NJFRvYXY5Ujk2YTrro00/0gVUuE90qhyX9b9vkJefRwtboaxELynDEZDpKPN9bhSYpHBTpUiY9ew/gRfS0IgR+0V8dwrGCXhGaH6oPbzHsvSh0T04zvtg8Nbx3CuPgLdTz6BgmE1oXzof5ogbhgo1bx45U9fM3ZC025XQoasy68qoT8+fnIrPuH69T1E/sTzskm5YkaZQdEc4FQ97p7Ow7UZvWpNm2AEiGCTgZGkqIg04UERP/SPbbfeaid8wTUFHm3svVdwV9vBj8/FUF3q92Y9J2PkxNrHKQ41jRMuajtxhx5B65QJr2zU73e1E7QL74ZcF1uOdbqoj40uDHHZTMBw1aYlX8i2dg9PS3ZqFvauqfGQ8p50wzCJybPPOx2H52vbbq9vnKrrTq6c5h4uMeGgeTvpehmNNTE3YNA8dPha8VYleEV8JgT5PvX+gvJEGgWinFt0nvS7grAm797Qlvq7eYN8maR4/Q7J8cVYa2BWvLz55O2l78xeYxRItNKq2Yd+HUYzklAmW7TUPQ87vRi0MDm5zfRKijazQWSTUKzdIJZ9Mdib0jXeQWF075vHIWY3mi1ikUGLK3Vf/pjkklyQJFyTvG4cTrgt0+rLGbnjcYpVa8QJMrr4WYTuHPhqk7+N28UjeqXt7zRt1ONrWs9G79x4Wou0stZbayC15+0btmHmi9TlMWv9wwzoKJM7Uq7gP22WTmN4WXTFKKssv5/G2uXfSdI+hh9Luwk29lFw/xnUBjDcInm1mtzs+n7jpNvde1OHWm4mjjY/vvSx0Nt3qYIwmHcdpAFKLmedkphTsY/b07DQuK1XjdDBPxQB7YDPa8PZ489yYaIWiwFdzClM6Fqsz7R/QV4xS6w6XFKBiKDVVgwEPpLpKAe0ssWSm24AUqMk0+lBnhxqICMU3Pfa6+jPU4GLhmS1Y5b1r7B9UzWxYnsqPO1e/J6Zbj8qrBzN9YoVBSOeJJkSUHPa36zmm5M7VB6IbZl9vBtCMaDgtlDYYy8wGjlYgTm0zo5p1v/wPqJ3IhMHMDon2OEBBq0PypekyGOQH8XliREjE/M20UxvWXVj6RaDwSWRBHFOaUo1AIrrEbf0PrEDKUcPs2WxNUy0wtAopVnYzrwaQrzQ8Bxvxx/QBQMkVKdrfKMW9BCCR+iiQZYvI76dcKX7H29DWCnEZN5coEw0DacRnixE4DzrsRT0JgHjcJWe7uv5OBEO0UodBjH626E6dVMemFP9/tKdVKLwJLCmk0HoRC/ac39YsCiV2Hjssl74HfwAZn59/HMJUyiDDJ5uppqNiP803y3Ika5IHduZ5kNZuvKKKzMnqCIdrlAX/CwESCWT+8/3x98g//8OMdzN3wD+97g3+mv6EOG7GIYCZwAAEYMae/2TAjK8H/pXr6frlP//e3EUFkO8D4mVAPmOsPdFXaG6FFtxXOQxq7BKvL1v1ZKuAVii80FwSLyyb+CVeYW44VGisQmsrNGqhmReabhBxN+QbMEw1TMPrmxfZarFmAMC1lTb9hy8aq06CARi+J6DUGuBr9eUkDdo35vE+9OT/MDmdFxDUSIBT/4IVzKtCWQ0OBst9+otG0i021QL/v8dMrGy1khuMs5VXoSUVAKwqgUeFEVaFWtoc3yoWUDLgm5VsygCr0rSkiuxET1OoqZY01tLXtVSWlhKYBi3mcf7LP74lM89XDOuhq9sPh4Z/mbdH1E+P2qq5ZCtyomDJ9iI5Bmivhp8Lir4xuRl1EE8pO3OBF8PfwvImahugDWhvatXs8EQo5KZa1iX/Vq077WOuVK+WuoxFtbrqglNPJ/IbmzYgoQdL6t3OTUFotYIp71S10InpKg/AgaapMqc3TNZVNj0Zem0w56A6VKFCBzyYh3aaqtyrxuquFso71YnuKlbPQEatnCrTWVlT2ZQPW4PGCuegIwWUQAA8tNuAAr4gGKs/J+gDfN2xBB44farVAOpSVUfOS+TYFY4jdcBu4JvQ1cBDlZbbA7lHrpJ4YlflKu0JsatyjGzHmrFkCtacW4SBJ2BewlrNdHAFb38B1DdsaoHNDCQQ+gEAAtiLAQZAAgFTBgTQRQCw1B8gQDUEgKWAkwKCo6SAyaAqEF5YCpSzPgUm0bYCZxI+CsJG5ChIlklUJKhkoiLJIisU6bZXrioyLIeh8rESpLqMAr67ifIvoROVf3t0lvIfthet/1+0N1yDR8jcWxz5XJhKpvABY7eEgJeN4sARZvGAHZeYfvk4k4oQDMwBJwsYMFdBRk5BTlPfyMBWE0/rs/52pxlE37Jrx27MCAb6pW3d5VEJVjvHGneON2M3KQQfNdFDluRTGTUVtjZhOh6fkWQY9gD25laWUVFUklMpY0flEmqZ4hiwIdgM3L9gHRAkoI8RCA16ksI3AFB0znI86rJ3AocLhiosRKFAhp1Z1A5wz4ywh3GEyULBHjOnJ0HdFJZbQjXs+owj0R3MSwqMZGDMEEF2xIxta8jKilaNGRhdZJAsU7aPn7BxJwpdkQkBpw54BUlElGmEAlNAMDDBykwt+lm5NFLGPppbAVvs6S3U6Vdg9N+xqFCebgQ41YnNdvyKsLaBOL2E4QURuMDYz0z07U8kR42OiIl6KANRmz8QHo7IUDy2LGtrYuXEFKNHsIBx20gE4mAl43jXalyp78hs7nHUwOAS+mX+9esc+2Rm6+ykt953cNC3EfOaDMTqh7KGtgc0glB6YjM0oaa5d2BpHk9xl+RUIWa4mO248PpMqpbKPAhDmpixN4au5+zGgISowYRnnqFUkpEA7oT1NhPHZEGU2Nis9mSh1SomBohhNa7tLCMTQhiyKGIMJG8NVKjMHaJLpMlktMszcpmMN9qO+/o1Y4RkX3uzBABciLUTAt5mYbfxvIayml4iC4M+1EBDekMQfk2YXpSptSOgcvuG8ZU8yFj6j4FOlxPuBUSiDZB/s+XfiZAkoEiSIk2GLDnyFChScoCyg1QcgqZKjToNh2Fo0qJNhy49+gwYMmLMhCksMzjmLOBZsmLNhi079giIHDhy4oyEjIKKxoUrN+7oPDB48uLNBxMLmy8OP/4CBOIKEixEKJ4wRwIKA0qU+k2Ld8rUqdZt1GDAoMpjxZoCjlWo1arCOb8HEnqM+eG7P/SbtOWSKeH4GghcEWHTZTdcdc1170W646ZbpkX5rNF9d90T7aM9lWLFiCMiFK9PgiSJkomlSpEm3QcZsmTKlivHiuPy5SlQaNe+VTNmrXnoUUggIaODLg7jCI6GfCiEYijFgVA2Z96SZectWHRBufE4aN3pUIlDagIdqqEW6qHRo26+dXHBvYwf7ku9dTGRqMT1SqmeKgsJ77IzwwSvVJKTQqlASkqRdEFKSYVSXFrpcYmwO/B/oew/M3ll4Toc1qlIVAf9b4bTGQmcokJ1VS5AIIVSwTVOfgX9CmZAtTw+5T7nb0PQ/Rfw447x+ZpbcoEeW471ayoIHG5ll+niAGYaZscMMt4+IzE75lBPGp9h4ZH+mHuELWYejsXUw3Qw8VA0xh7yDCsPOoV1H3UwDpqZZxl72dxp/gzici+xq/O557gudyxclde2qBxlFShEgxEqGudKfYXz8uIwtuW5Mg9p+5F+bMKxPJzBqTxycdM3HWgJ3HLGAA) format(woff2),\\n url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n font-weight: normal;\\n font-style: normal;\\n\\n}\\n\\n\\n@font-face {\\n font-family: Source Sans Pro;\\n src: url(data:application/font-woff2;charsetutf-8;base64,d09GMgABAAAAAFY4ABMAAAAA3QQAAFXOAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYEIP0ZGVE0cGiYbtl4cgxwGYACDUghYCYRlEQgKgs9AgrIkC4NSAAE2AiQDhyAEIAWOIAeFSAyCaxtLyyfQbdtRLUp3Eqy7bK3uFUYihI0DBIFXc40MBBsHIKBdA7L//z9p2ZDj/wr/qjIb8/FAk/TIkJFB9yL2TG8gzGmoo+9VvfbRshgnaOQ1XbprROhUuWKog3qfU4tS+ReYPjdz9/9H3kZqE4QJglS4hXo/5eUygrrxOswUPit/5/LOzVST7sMXBzVS/U1b5JQniFvkyW4XuiG6WZZJp3zGJBqoJVKYFsYxtBINkRjNBEGCKl9Rd+RIQd3hOH7S7x7Cxa595yW58FS4ftPPwLaRP8nJy/P/v9//5t7n/u9Jkwl0QsKbN6rZ6ERSpkWSNdNQiI+1KEclaQ/kJGoy9O8J0iZoALZZOJVhzAIxTh3a08ZIRAUJERBpKVERxSpCsbB7OrFqoYvSRbaruL2Lq/2G9vP1APBh4CcFEm4gtCs4PyqMoH4/2J78h1poYiVY6Ew3SSbZtDGExBASCc/iDW+a9Udd9UqWbEkWPtmWPZ7hpbubO2tP/uT/g9ARdGkKgipFjyVWG2KHacMdToouPOm0EgiyMFmEkCxsHPLep9AU3TfFz/YAgQGsP+fed1Mq5z+CIi6wS1LgNAUSTmxqCQ5Q3wAgGAIPdan8SUlKN0Q66Z5gLG+BLd06rDQSTgGCs+S3gpD//gD+P/fz0vLRzrO3SkqOwjUlR2nzeJa84yMZ6r+/7pcO9YT9+khuLAFQAUlE7ACrjvCNmkvTjatGZDU1mx24gyVIfiT4EFLRuS099r9UNcLO/2MJw6l2767yzF+8BRbgMki5dFryO2HUUXKX4t1NH8qQp78MQXcsL6QCFISkXVc3iTkMCLabpfr5r/5+3zdMC8ltir8WVlG7RS276Ey6TQfRSVfVaST4+arl/0rLTdwjFagYbpcbxUt0Sr0rw3Xjpn5vZiQBrtwUBxf9d8oC/H82K9NfaulNz+H0jJFk4ImcAlLqIOz+XdOlqlKLF9St8WpnbtcLKB3P3j11q3Urvt0j4oEj8OwaGELGyBnnhLnDDR06ygEjDoLYSWr//03V2vv+ANb7IHlWQ9GB3JCLcnulXG1qynUHvBnOB/4MQHBmmAZUgqgEiDYFSFag9yxA0hQoaVNKneTNsV0XVbeuZKi61V/ZuVGb+LEiZGO49s7+dtGITQqU4AWap/9il79XOwmD+nJGGQ/lfJRSgoW8FhuxEXuKhmjo++t1jO3f4df3I2JGYnF4pGBsfYyp1XSk63/7c5oEcaKwD7iT9DWngEVgIon23HOzIksZaG258lbBcltVkYD3rmI3hu/z2joDLiD4eaFyYeLw32vr1TwQV498+HZ9n7rJ29kWV0c/ntJOGVzfVWCLjU0Qek4DB9qGncqXWWHYhFwaoO23opVLzPw6pbTvfsHAYAlzALE3R3P3aGoMtB2DOJOCoqKab5KwWEMwYE2QDpFBl8nb4jrW+dpjMzMMiBuB/mSWzI1U4id8ucSkn0Ci7IUZl5+EdWMBNpS9CSHDHms90IWhurWE7gHlt77z00hGyC5k64h+mXg5OcTS2Q/wflwrUCFKs+ExfRzKbW7hJoL4oSFZDUhX05KibVKlaWq6U23EjINmwFCDctWgPDQzcA3KT4MK0AzZatrsNCB7DcRB0+WoGQvT9DlrJtCDITBwIPCaqRgNgqhpidAgaBoEU7PA0iyxtc0SNB2JmhHuYD3N6hjo0qA6B2sY1Q9qcDDUkBFAC4P1LZsGMbMQbNYi5FccUPwQDoY4bJWlNU3PcU3PCQ3qpAZxStN3Q9vi9v9obfHMG6Y0COFk2UFKJlNp04proAXW79VGCOIBoI081IjTiukwl7v4sCHJEs8TfQQZMMIBwZn5yTKSOBLsmEkkMtHo6Zqfc2SlcaPOTSKIT2NWCsRwWnvUIJwMImNJaoD2fhMSpsettZ8uSNKwSFQynwCCowhroPXQxgd6Jqmc3QsRJNxQ0gs0UaHBIE+AmvlwUCvLKZ5Y8YSDJH9oQOxNLilMQzgFw42NGsx0xW84OiE0Zh2MwKrSbbe4j4CPEm/qNoBg1a+bKj793CI7VK/GeeqfK60SeBd7nj1JOENrcLLBUn42cRjGZJOaBhvBhjKTZ5bZKrbU7w1XM8FBPkoz2OfUx++aIaIHzOa6F+NdN3JNujUA5zhBGIOMCEYSnir73fgEdTyNFBXiIYj9+S5xv/bYxpNpB53qOhkLrF02r6dpQ7H7cR0Kceftc9ggfen9VaHpgfXcSto03I0Y2jZMSFfJf4LEnouQRJaoPOaAyKtua7tq3HAkSiMsfNUqSUwcCEo1Y262NuUaAx/iezLQhTU0rFkH967JNXYC530sePGlZvOw+vUkFHHgKeg5qlMTiwUickZRZoGX0rwST7eScTQyax7xzWICCa6dXm/AObpbGiX5bIWidWlWXHjw3FgDjEmCesC2jNY8qJgRAOx+qRk/d3V1G+LyQfbwrwbbEIQIGctaNy5KzmUMgpyfuw/7FgrQBrNgG6AtE9BMOQ813FYNFb8xUmnzO0Y3pakqRxEPfCF9iHhWAsDqTKKoNuHExoyIZyWGR9k0yy3iw5B1jP3GpDj3ptWN+dqineHOADHhHrNcW+hzJjyxfbFYsvULu9wyYMyoyhJmnCjnc7i3YDm3vwmLv/vNMFsJnLV06OIyq6sL70CXjRFIXM1b6m7hyFhX2tNIkM01MW/neiCHHujJMcGIh/2hMPOEW0kZYzkYu30LWzhu9H/IY47FMqkKNxUQcEvSqzQBGMXGbMZpIaqM7KJbqrCmRLV6eAPj4PoRSLCvRePLy+AU46gvewOTvRaTBaOx1VJQqOhcyaXFvXx2Tes/rRVEWIcsg8Eo8+2ZdJZXEkKucW/vgp5BkRVas1vX+GUwhvcBx7CiRl4htb32nkWbwmMm+QBp2tCeobtR0YgNW9q1mixLs8POl7K8/l5m5pdtmilFl2x/A9+15IOktLBvsQ+lezcvlgbZ9zCKnxjy0JbxIihXGUq668WgoKKN6VzYzrjIza4bY0G2SskupJ9cWqtUYSaZHPrSTafaHE1yikHoduK/Jwgef+zLRILtExCnrjYN5ZUBeRVPFlJqpdBeD46tKxDK/Un6oWEj0XE58DZyrwSV5QhRWO0UFXfbzObmN8n55aw0epMFcbA5i8StoSX2LgUB86TwNJNgOpRztQ5lsLc6OtkGFcfVQoCP1TvcTFbfIMV2ZDIKwGZ69puWDEe5HO9BN0wCDsAyzD8iAA4g9GhwwTlfelDIagmCcumWgVF/VhIVnrUbNn8Xn60rMP5uVgDvSJ5EJEEzZwG6VEr9jY5rI4CBUQOgyrcxlFgJrmXE8yvakfr61kA0ywmYWgAAcNs7kctjP7iRFnk/561aMg/8RY+IIiAYjUL3vteHLcoI8AwM75RCViznAu4uhuYH4RIRqGZbtH3xQU7ejS1keqzc4P9bCbMAtBbjnGsI7uohDyx2kjgazhgahg0cAlskJI7i8DnJksVfjhwBypQJVKVOkAYNwnXqhNStX4RBi6ItO4DtkOMETjpF7LZH0j3xRJ5nnsunASyzk/SNtR4bBTen7kmzbXdTDpA/z07vvJeDZbwEBwCsFfb8cgLEKYJx4QcINDOk80ACqVtaq7HDbhc8o9G3P9hjPNiqQKW9ei3YN1o5osgmYWB5kwa1cFCQDP4OuzhkQ7VuTYA+BIBX+lkaNMrnmyky6NsoMtg8rGjRsRskA9EBo6rJM6+TPjJHY8UxNQoVkTZdeaagNOtz1U4bn8bpch4abNZbU16WmjSAnpMTQonI6A5gAYTqN9r5LUcBNGj/JkH0D1i439n7oHEDgPra3QD2aYLX9radfIMbu5qW3fxsz9tDi7B6v+t2SftMP9oXhW3ALGE2MDuYE8wLFgITaG/XyR3/+93/Cdg3GvHqbgG2EGYOs+oJhvreTX7kRAoTNPP3leaRupFqRxy0z24bWtje/+rPLnhFg07XGKwWUhD3DmrZ6LxgPwZj/UCM9aNxf5fb2tk7ODo5uzTU9cM4zcuerIfjdjpfrrf74/l6fw7H0/lyvd0fz9f78xVESVaMxRZwZeXrZhRChAnUnmlo6uofGR+bmJqcnp2fW1jcubRr9/LelX0H9h85fHQVkL/dDX+lS4Xxf3E21N8EFAA8PAoAPDsFM3crkxkAeH76L6m5re/ESVf71nilHX/E1t+PTk0z2btHTHWxuqWxrb2jtacX0H1reAhw+skbAHgJgPFpDqmORBEZhXLVWtw0pkilGs36bTdizJQF9z3UpZ1IrkG9CpRIliAWlxAaRrY0E9ub4oA0UEIbgroZASsWoKpSUXhcYfuv8W1LL8AJhakGWNMXlGeQ6bZeblBWGhC9lEp4VjdLPMsaUD1tHKnkBv/arRU9Rf6zT089SSHP3hQ+K1bfX/pUg1xHjQ4bFHrv4N/tZmjvvmFUAFkDpvfOP+5xW5Hr+DgqKXqOCE3bN5j2jd1aAsluUQSa0wroZpfmkkiUFwsprXAdpde8WbxENjtWxIY6GZWanh7L+ilNRWDeKBM1qcapZWKanZ6OJkI7NViK3CtwMaWz7uxWQl05BTdhNBmOdIu50uiXxsm4FW+pUgp6cy/t5WlpCwEN4JLykqVWK3q7sW4vi9v6hAS27HaHclpUsz7EXizElDQVamMR7ikgXsDsib9vXrj3McUaJr3Aslhpcqt475KlWmeX2Qwk8+XioniltT5A1f7q2lp/26m0z/bVeGHmlSzGeRmraQJStYIBjlmIPSsdbx/Id5qp3Ufy49ahPQOVuQw3+UajkFdAD2GepW8M/p/8CH8d1KfO6jLA1nYAHG94CXHwO7+iF3ouEnjW8r2vp4aQYIasE6JNsSpFhO5fpGNeOCZqsmwBONgxwqt4kSecE26ze+Bee9Z4x5vhYCPaAmOdAAKYX6FQe/gMXZ1K9qIALVhAike6oNl/v8/xShEpnlwwISR2IHLk6uJ11WJa/fiWyI4OcFz8UqRXmTtHtyVyMLXvc9BFjnqUwlVNTiAOmLCEWeFUyyKMYGDo9kNmCSXk83QI61bdBZfRcG43c86BbyL7vOi8tQaZUUCCdY8hgEkzrVV4Ax338GZBESgQqBmyzGd77Y/BAQU0XqE8xr71GUcQaEZl4dS5gjElxY1JSPqdEAUItAxZll+8XkaFAKmEK1+GoWVCgIj2BrCwqg4Y100GsqKESva6iZpIaROLuevyYkjCV5e1J5mggKXz/9nfNChnk6I1Yr+XIb7siyhYonq1sWODpj0RjZ0ZYCGNfJqC0ZMAnSv2jdNqrZu0wXcm66R8q/mSGFcWGQKIoQZFjhH7XZ3oqGo03jQYXngaU4FyvP4gj6AuxEMH1vgEPdRxq5N9hI9uOOtQTeDoRujZA3mnc973Ln1M2/V7wxH7T+6DbOdl+8H/F7S+QpdlB4IKe3BhOkDxQiEk5jgfMwMG6Lj0BmnZ5/Jo4GFk0UqDytG39iGD1Xu4w/aiPQGjhB45GjH8b0E9mgEFnKmL8GhZljA6Uxza8jxx76IMDOD5CF8SgXIMxdlMjX9rNnKayJfBspBJ6gq8fPaeHce0lMoMD5aZHdiUpc+KkAuaUVrN46IP301+Kg1GZ0DI2C27bX/6VPW967v+fIbOSzxwZZFGVLIWHcSdp1YWkyOLDjl8KRqIyvqi1n/hPQ9cfiLRwVgGdjLwSa46yc3ZzpAU02Q+uFrDz0tc2KSMpsuPQUuZcaGOZhVaQxHSmBwddr/gNxmuL84IeasaV1jcei9eHbLoH8P6cOU5VanbNcVvKzgBq5nzjIvdmraLRc4S/l2UR6G1t5buU4LYZjJXjvnv9vHDyYw3MiU7bstLZc1k6IykLpM2W4fI0NEDIF1MN0ph6tRyCsfhOgscKQxrZ0eeIINMj3Fs+3ybt+a0s+ZKvHYJNyX73QkT9Uhui0YVHcHURfOSVwgkFj1260w28Ahx3vHI/1yrtIkEfCBGrdYC+NnUAaWHRR36OP2g0NCoxPVl/pdVRfphNOJd7r6NFXGwolfMi6S+xVtL6l/YpX73Hk3otKT5VfIKvUQKUu88It5+WNp0Ae7t0aHLWrRIHwUj3R5x+dhdT6dx1fNWQ9ULvYETrCmX7x0ApxlrCgQdIpf8TEo1QpGFFWMdWAkmhjWysCLnpGFeEUpJHbjW5kcCRSRbVSD0vgZOjAdVJFAAVvD5l8yzhur0ldvwJdpZcX2U4at1D+SbXPYBNM46B7yNfYflICwUnfOZiFhh86+Mbu+dwSZloKbQOy1fwir0RPO8ID4RIdHto55YzDUu7/JaQ5UI2q3+7GfMVthpS8TWZEwT2XQDvWJ2FerWqC1As7b4IN6GIljYj91ruRB5J6zOR94xm8Q9LWU9qDDOFlKtcGu/OktPP16uVfVNwt5uLa1fMb0TocsCBqAXB248LV6OFnHzGnuIU8O7o07yh+aomZB9b4T3ckdtmJ7RoSin3YrtY7msuBfFWknFspX/a6gGhPVZLEqTp5SPJRyaIhPkkoB9/MCKQIZlMMV3tImUGMx5DtMZgz00cFFIee7Mm96qmq05TOJkl9ajgc7HLuGdB78QD/APSb5pUEWfXhYlCnyMPfKKehgo4s6JqMltuhYIeUoG75wI9MZJCGDtXGkk7Rq5mIFPdLAAUtDiI+J1hY5DTJUrreA0IzBIYUZcdpJXayNiy0gqWvejS97zKTp7mk9d3drr/dR9S9N7Hv+YqyLxNXfe5M+eoYFBJfSsWZV5t7TijEmmTWEqklX8tWWr7SXrda78LHSFotbOW6IWDYpIncJVc0xLN6+tlfJUEpK8+XF3JqHS63W9aJgLeRlwjklucnQa66aLOCmyCjTer7AQs3GlB6X3JX73d4ZmYrw4qBHFCU1lV0wSjmnTrjlFPPIq55RFeoLigu5jfUBKSajHVqtQ9CI0pegiDxNhkPeLrYKbFUpZmz2x/Kmoyp1h1wHW+XZQMEBiM4lFZov52DB8QEPLWM05aR2U3FbpsTBTjpFHHnzdDZxJfL9/qmFmx7NHYNyVgpJMWGbVdlLKVlXpLd8i9kJQCdVn3v0CP3QotaROh2TuwxSHPl3rjQW+27xLrpANPIwXE7rWoe8EHXyBUj4/5syO6UA93wfrPAgRm8Jnrp8DCauK70GqzE8AwVWbk4bmGK+qeEtSWbzXysrSKNRWoxuFk1tjAex2rYQOqtZCVTv7wCgLAtb4kc0NrG/atXXZWLv8E5nWYp0Zm3m2RXggbzeRCNXZWnlwCEn1WGRDdWKNvHpKoB77eXlD+Jgl7Npu5rzKylYd5jxgll9TwWLgiJkz0VH0AWv2E1FX1pQ9ktjkctS1FcHOZzprdUHcRDfqqqvrqqkDwaxa7VWYrlB6Sd9Bce/VW9NZJ33VxC8nlYv/mGGAM14Zx7WaX1zdnDRqJ7jFLyfI+pqyZYIEJ4zUViQAgF7zhLw2CTbHSCDgFbPgUI2L2SMGe/SZHXeBDYusQXgC+Mp1KgqecDcTONH7I4EyC8EKSuzIqAJntxVGaXCqgTyvkiRX2Pbb11gPTS56lY6GomHkGnUZxeYzGmLYxhYPHYMAicjBQIQOPEhGkN4H8uKpG+W3jvRf0wSqGNBT3YsdF7Y8fe4AtuoKVjqYYL0IXfjLqhVZU1F57WdgA1lcC5j2lPdrwtyTXKg7gtmcdS9k6J1+s9HZYGomX/yPOspUbn9WX/XMBm/0Kp27dl69DznvQ96qPs1Fj/SQ0+sBjBZBJsN3ixW2o7KirxRGCLcXtgNby1gcxDz7GDuqSFxyOh9L/GZmhV49R9PZgnzhtcFJeSXyfJWt7rclVP/lfk8mMYDMCna38AyMZQS5s6U5oC5jm8MjTof1wMbFRslpnsEBDDr04Dfn3gHH6zDoPW6ZM8PznbDKWZDK04rlAAXpmTGrT8DUiktV4xmq8U0Akg+txhwtvq/2b647nSyEozsSGHmtqvQwr1QigYvl4ogkr0xk77kzIyCXcwWuN9odBZUizqqUiEouK+TCvVixKC6KS4ileclwY9cfz+k4ny1wucYwHki6vPkmrpr2dWkir7BusUEIP8oZahMw3BUuSduT0UU4fF5NwKooObqk+jzyX9NYvxquLZMgvsvAgRZKNPi7Kehi258ba802sAjHglAWj8FCjDsU5c9cfdaekSdNcjej2EUisREJkZNetJtTe1p7i7XaW7x3HsllC+wilKUuyszDPZcHDswPqvmF+fzG5sz5o+ynmfjiLsvoGCgP5cIIZca7cvzgXr6s4sFsel/8BJUh82PUF08OfK+bvNcjdFuOyNG3ISIWxoYvO5UNugVEIaf32lHmx8gv3q5GWpcdKBdQ8HvszYYPrlsZMG8giWconpLl8cGIkOblYGF6kbhd0Z5alNan6IsP/8q3L5JvidHyWvHwxxFD/IOxyN79L/tcHbFnzEqOW5bYeq6E/wa6hXgEkhjB7sH2ndjA2h8lgft+gF350jX598+2lI5i3LmKFTqp/fvpzoz++Z/Dq63ceW7qni+ijIOtvAWOaPnPtIwof8sqa33UzTdg0Ry0ACszeNmva1ZFhxjyEl2Z5GurGGWAMIWfVSwua60iC4+o94wf2N2GgBU7CTJqcLT9M+k8ZRba1t+8NsL4nJjiR+xL4jft7i/OWSk/bVZcuODFp7glwNnpElFoQ+BOsni2Ym1sWd1QPnSoexsow17aJTqo9+S68loZxVBsInE7iVvQRfktWCjnsOIunDhDWUOoknrsqQeltgRgjm8+JaL6xdXy0lVrJwYVSmVWKNs62hHlN54msqx7LKmgurAGjuyZ7G388FhWpTwuyxOrgSNq6NvFFfFkOjW6uHDofxYuv5C4KRKuc35lR3nW/RNVRZOnf3SttUoXU7OHz1cUSKpEYUPkCLoNe8tKl1WdMyQ1iTu6Jj3FPYK7Bz9hIZ3gqvRtP32AYUNw3mVMQRr2A2guWEYce3J8lNGK5DYnvfy7GYTxSuvnz///+t7gLAthAJ7klttKzW6tTM+baiyyWLy9WeK4J9LxKio3XN5/eOvfK1oMOlmxgNvLYvBqy3Idmuc5dcnAFx+Xf5GY8Vhs18I/060smjr1vZ5LG/3yvL5qr854faGkMiVsUH20kK3ShVS8QoDuTeCEC/K17Q6EegS0F8eqvW9Z6TR6tWJ44hK/44yaHeO/hcK/nYXReoCwvwhX5Fe5txBXaCkE16tHf6WCfgnV4zW8UAI45hRc+2IZIX87b3I482WSyG6b7qtGuZVgOAw6k05g+uWSavU1o71LsVwanUpEEV15vjQeP75ImMbkECcEPnOfnyyDBPVHTYebDXd1YD9J+/opNJyQugULzK4vS6rvLpdKnh1qzUj0T9OyYKanHoYmw3PJWcu6j/LCDstaTpMqm4xVt5+ponbXxN9vbTpKyBxQEDx5k8w51Uvm3FjiT8hTNoGH5HJK8XhvDo5YWYCevJnlMYk8oHMaOeUw/vDOuKlNG/il/fQWEP9yyZtQnNFpZOqph33tFbtXpJbmOZZ1tdlZ1Km+1HNw+c/Sd2cftPeLRxWdn6GFxw6tNhWfdDzUVqg9IvLe9WVzZ1/2lMSPk01ldzTwpiiKJs6yx5mk49PPl1paS7Ci3UNXX/zj7Hv1l+AfU3vjfzbm82IuP9tZtWteY74Ofvb4rZvnchJHLvqVhQpHX/5sVfte/DNBJdL7b3nOjU8WtR/lgsRC7Yrwn4o7s+Mv+RWPis7kUBkdXUlL8eWNvGXPM0k8525KQVM4X5VIIeRBLaqmCtETDfe+aNjLr3Llo/kB/PyAEaPbyB0VSoFSOfrW8F9apOZeMdM6ppBCTa7ssazTO7lrVB98xn7vjYczRTNZzEvWRdULVPeu/GRgcOiUxi0zY+6JuqFSQ4cD/ha10e1ra7XwlrspqM209daa0W3kwOB3w9Xgizqjrk3nEkrPubuCXIIMKX3fX08ZH+zLpZuBHPzMi5vPDkQv/ojJRgITBrIGwKbabqTLLeVhXwuvb1df5uY++Z/nJkXY/6QyNh0vteGlwXfb0w4o5KcwfxZfHno7VMBJgQb9xlSceToyI2PsH8m9EVR9V2JVM3zi2t1xdUGfpO9qQfWdSHHg24xLHepVUZqOLX2GneuONtApxUDDd24s+OyYdly2Vb93EyL/wy/v9OPesZV7r3fbfcDOPQp6nxvUdPDC6tXp9syepL7TNea3CpjlRx+UjTflR9NS4uGDvMSQrB7J0Of7y4WnUyNpYn5px0RWTSXTxyc+yrdqkCsKTenMXAG+uWTD1Xu5z7J+wbK+zuDbvlFDrX0x6lYSOLfvz8WB38YJGA8j+Z5TLtd1kwOHdAsQAVBNzaOXH9zt1a1BjgW8tQgFloHUNHhK/tsFt+/IVeFJDUfkBOTFNt1t2mTQRnOYbTzpRafxC41mZ5BNfLGbn92LEbse5EXA+jasPQIKzNaEbvgLYzT3P6pdyE82c2q4D0xu8v/Gm3nZ+Xl+QSaVu7dMA8PpjCrt3Be6k8gJTtUt17UFkOwMgvurYs4e7CvRGxbr7dwEFgQUJoitVI4QXoBWwpRNradhABT6PMGA8wbcu+0VlEPWi17KMPjxI5uYHADmrINfb3tlyOFDgc85syiTZfNyk2XzalUGx2izwKgqA4D/CxXNQERm1ref1qa8kwjxMDL50ADix3IDqSzOHg1yKi3XT16vNOwExZCWuZyagSPqk0pBOWOmfZV9OK5LJtzdnfF9CGniv2eErHI/pbXSNVx/8RaaE3532wlJKqk0zh692bk09hexq0y4q1vyo6705hseM8WMxnMJxVkh59KHGgsnEIyBNClHWE7aFpy0uyHzfU19UWtRegErOrW/cHrq7E3EjD4HRCnREQWEnSCqhk1Ee9SDT3a9e+YQauu5n3tHj3KTMpsSQ7ZnsG3T6nlAaQiKyGnJzKeHiXsk8ys3HixKdXu9BZyylJzVPeks3fWUSmihSgc2aTOwY7qUF+8dkJsfWOW4ajd73kx58dV7y5BmJD6zvrhNsX27bRP81vT0nqqRvTM1rB8dS2tpyURlnD0a6FRauQVi4nzmy63DB7TtY0q4cjp+MgEVz5xldBXy51vF7zEL9qoXPoOVggQUNZ328a9QI6JSPiQXGdJgg90ly8vNx64j9QvWR/S71rVOG8AxaG/XTjcNUZfdzv7VAy88CA+M5kO4Bn5JI3LqxIjw1wybgAu+aBTc5RLXpaMA/r1En/pY69eWvS0jX1CjR1++euv3bytbbLdseOrbiJHWf75gR3s9zCbpNf9IVFQeUp+6XrmlG3Rgse2S+YlLJ7o+/uVuxFXKh0vntEKHZy+HyhTx7QhXaPPuSYhnicTGlGNNpE6wGV68Y/eQixsSNnqmjieKxo/fPtjA2eidPpEoGlu7M4w3yGoTc6ZqxO8NsjrECVO1aPC48WRdpV4V8ODQiGrw6DyTPksEBdE5UsvhFjK6dpjYpnaZsMbaazGerBuJikZsaBFJewUJ6ij4aSGWq+S+mf9D1fQoqOXOtPeNgEYjP8JQFaK4tDBz87iQ6BWlIhEYpUK0P4GYHlwSkVEaX3V2qnW6TMVm8oR55ExOhHW5YmAq2acKm6qkNl6fHU9ay+RuXk4xLRzSwZvUBJj8Z64EFNrRHJFD0fZoG7vcFHemIl+WAtIVFXj35z+JMsQo5SOlIiP2HwPdssXl5rXt+gXrlYZ9ID51kkv9sLS5a30IH042OUcGxY5i6uzDR2zt14/WgzbWt8Nwm5o3NYDMiYeF2rhBW5wV8OBW0JXY4zWauC4r1PpJK5i5tj7oKfWK6CvsSGXCUcODN0bpjwDBU6Ab7MKcxUdz/d8ufBpjvy34I0Z5CARPr1r74KRshRdEOuJrpH7pDljd8VfbYz2NsgwPgTJz1s/aeA45TAQyJ07sUYXAIYbsbVTdUxbKRiPONioIZK70jNQ2TZ22HZ2132QYYz0sLSrlQzj+JBwLIp52+HkVkkLOxhiD2DZ8vGQU6W8Q4QPmcAQ0IiMudySw4O2J30Q2gCilBxhz/Ml4uon4qtPfvaappCyMsQ7bWoBLH0EGGob7QjgJiXQyLS5HHZzdBk2ds1bPOWgaErYOlRTIv3AqvBPKE1BwcQAmkhHgwEKWMoO8Eyo4Udvi7SN9b0Xa28T/CvJzlTsd0dM0ygGNG1kf0ex+H0SgBbsHeQSSWCFuurk7CMmBuxNVZSnNQTigyzWRyw2ZUWqRgJOB8bzTfCETmEcJkBB9moJpWq53Ul3vNUFGrg6eKqL3UKEtx5XQA68/g0x4rZi+HxPGp02zJnX0qgOvvN04uC9tVkIllOYWdO7pD9STIcxKtgKaGFc5LDMTs1oeNLJdaYOnHJSrBKXsGGFFNrFMQSF0V2DpPRUwDG2lsDKzkYnPbiqkl1fhyV0VqxXpnFxG9q6TjWncXEbWrpOFQXgTOtK8OdyECT3YM0pNM5M5DAHVgFv/pQ0f7IGCmQjLZiSYHhGB347C7zmxLFmRxO2S7LL+TBU1NeIwxDQOxs0bTwoQ+AvCSNHeIoSkeEjkqoNQLY7VzTX1MDmpxbIofny0s3c0KVAQJIggxXiLw/MyGzO8p4NrDi92cnbH9bwPjuULA1soQvwf+ARSUEwiL7SFnjMQVW2pDfIMi3Jz/Ozs8cXN4WGpY+fGV5w9r1y2Fx4mRb2tOru77x2j6rN76N8f6juVOvD+j8MnVwRT8/GG0Y2mH1VTpxP/rXz8zfBW0/eqyVOCf66UZMYeVEh70ISi+LSY6FBsnE9qAI3r3xCbKSngO8RYnLsEJ2PgSr/YunG1Qvel7oFHoFaxVyLIisytaE/UE4DScxSstFJpFSmMnJKNuuBv7MMh8PovtlEumSqRnk124Ut4rHsh6nDJi3iMO0CYVYTTV/R57yI/JHSS/6QjRtMUAwRGw8mTgB5GuDpDPhBDbzx2ImaktGVUWr/2oFfRNiJtOHJPGkAdrgtDI4I9/bFPgtTx7q3RNq2ulzw8uY4IlO9XS9VVcJaOSZat/jdWyfB8Nl9eJirZPp+VaMYXpCHQ5DAst4gUjqaYPwnS2KQSXIlfVU2JuEBRkFqSplAohLqa27YQgQevP5SERUZFElkCDO6XNAqbVV6QjPQqlCgaStLJJIg4XGd9hRoaJS8iJJHQkRlxOcbU8mJulG8UIoRGRwVQ8yk1IoU4IVYoZVpGmuGSgwqmauX8Fg7PrvD/zCCBPMcCBq41jpY8Y/UW7xoY1Ke+1mdny+ucxBazofDnOsnB4rD59JJW6pgTK0nPPntr2Vly6aS1ZobJ3vURk9vrbHVj4H7n3cIzkEgPdg+ynVa+B4FEzpHbCED50RxqI8YkHQXkn0yd3AQ1nZwxJBP1Eu1giTrrWxVKJXlzty0/XJ2aUYlA56iaSl2fOKN6/OyqpsJKGpodldi8qiJXEiFsWY3wPAULX8Tj3a/7Ax9TBqEBWVJulAIMt8wYkmPrDQtfjXro44jvsoxwbdmNrwaovRo1wk+FxswC13vZrvceMD/ZDPk9AtXP/7a8YN6CGy2uVvfxytix0M2D/zExYzAJYSxUTE3lq9V9rRISWLzEWz4hyZB5HyZKICntSSKT81o5B1TbO0ff/VUCte/oBg+Zn3dotTkf5VaM4dDXjBqvVm+wAsuj0+OJaJJK5WxPwU+P44VFTCwyR3v/0ErXgecty8M/LiHI3ZK+pvs41UA15af+bcMmIHKcx+3fwz8SZIJL4eer94VfL/bMvybD9x8FgdaQhb4jlhw0K65Tcb3jPH48tqG41WdsNiupreY5RVl/mPul4hSBAUfm9nYcKtAjHOVq/9HZTaPxMT/e+pKze1hUu4XlflJC62QgTVmcECumkhhlBRxiKoVHd9tw9cJi4G7fXL0x2E50yGlkkJXKi75827L2pvhnpEXtU1Jzj16zUI/VeAgYRLvqLh9a057EVMdxnYgM3M/SJEvEqZNMHra8ZENf0H6MwD/a8lP/smET0lMcfcd/uLCriZeIa06/Cn4fCX5gVzevpS+B1up6INgWQYQRodDE4HJ3VONMWx4iEtTvLgVo+g/lY4xMcIn4babjVW4jrQQ9abdrMZo/63xBnwm1Vbs4dpm/LE3VB4ecfiLevHk+h3PRF8yGb18Hu4baq2K0snOU9YfBXyrs3jPDW3aGocVyAQL+qhQ7A7Zq4Y91rsLsDCQyx/CkD3NBZ3U0sF/17WHghH89CBT7alydqYRwJBS67TKV2BPhGUahnDq/CCrFO8wbQaV6Ij9OCsA+fiVCdZTeh/VMNrTvBA57+lZY1QG6V3df3jW//1pykRnz2Cdy7dTlMsxinHJHRw6vxJQtWfcXLCeviXKnAzkLdkWhOO90lOwNGm2kADXn38/mpgTpaPP8jsGoDupznDB9iOzEGZ3GjXp++LB2b3RaxjgwnHcrqOo+IoC9//j1e5OjBd3p3XebkFtUvg67XryeqpxsqsYEFpPjSNjAeBaCyIpi4hG5mLoThzp2KFMxYjE1h5KTQvRwj0MHkpDoEHeaT2hgKpl46OqLdBgez4hNaV+2atgCMTi4n+AYFHzdjHhiJ+HVDhhs5KMc0LkWkyW/WMtfWFjO7YWRkMc+gew+zVV+HgVrFhXyHqHzxlg+2Mo9jGFIyNlsXpYQpzO0vTUTNv6qwX3XHbd0nlWPp3v0xYe1jW/o68VvUKUxsllkfpP59XMmS0LzCPT0JTDD3JmevnjGeuQ9eSNk2INH4SaU7GC75h8UzYqrk4wE0Zw9qbzM5sTQ7RmJDsJMC3XDheqcHDpC3CGZTV/IsaddP3U+q7OivwPDImOjJtgU+haZcd4L7b9Vxaf/HN4m4JalCJeX+zZ/ljZnDQEjLSE5EdYiEac2Y7rSvO+SYofnMFnsHdp3UtCpBm9zdbWwUu65j+fb1YKzVdy0LCzn9sHIeOpqUdndmBC6akpMbQ/N2NSze5ckf2dDPPUEkexNh3a9E4n4pN0KFK3LfqxWzBS05/x6ONGCr4x1Rxl8zBp2L4VRIfmx9CICntfFEBW4yLdSDXO67tl3YUCVF8+UlPSfv926O1vRK0kcaGN9BHWIhlWi0VLKmtceUYlOypJFhUxtyJ4iw3Yslw+UKnozYGs1OqBif4P2kXI17xnSLVLxGVd1WLZTkbUsHjG1W3GVdhfgoKboVkNDuxEH5qJQrFpfsSK9ELfDrItu7hdZh6Fuh1gX3NyvsI566lbVwnn1NC5vip+pqLhX3+zJqWzkbPTG3wWm7uCnSktnd2LXjWHB9NzkxQ7RO9/YIGJmylK76G1F1K7MTaxPQNPTf9WmvJUI8YeKFSxFZsa7wyNkxODbe0tj3U9GrnV4ovAS41e2nggWhX8riF6Pp135sPl1bVtfzzGDEuW5FnDwuJmYsfnt2a7c9+6EtgMGXXlNZd/Mile6mj3qMqEleXK9b/O5nvD79x+qrczl81a1p8U//a1qdU3tjdVax27ePB+3pTu0YxO8uIpc3MDe6JpaTUz+EaYRUXK+IW20++Rksj1fbLq3cZ8iM58eIu6Q7JSqm62q0coHHdKRw3eGT9RltYlZ4/iaMLIiLrkGceQG9d1uf8N0GEULu2udjv2sYf9/d2Xvj80gpuhwuZmmLEmCjdhyaQ54vvNLpln6ZllmRZYRwFS82g0gWnXdZ2W+W4lsN3F9mK57uasPApUYhncx8L2b4J7eEKrrWeHmhYz28Q6NiazraZvtYfwiq6bVg0efdzhaDcOHeoPVtBsoEWftESjsBm8CaU2gbOXuqWfBC0Wg/k7vmsqk58p4GfUTElZuiefsD5D7iIzg3ax2/9iI3OFqAt0f+ZCEunwAx2WDtHEG2HRjSqY2+r23zf410cligm00A4cqu3QnYCfAhK11AUhdgnCGAQfrz0rl0kKiQN13ZOWyHuCHSuf0JlPR/8Gi0+ngvHSwC1gpa/Z8bzoJokx2vG8pleUFW0e8Av2pxhHVIOirEOs6wPO9U/+fvUzRol+wPqxfva619wci4bH9q/4NKlk3/VMPFefkxb6LLyA57p//4KYf/DZSKL4nPL38eUsu/+OlYVbMKajYi8IXx/+ZQ/3XIiKUG5QIarmHEQFuyXUBegLniLQtoPi/3uEj1SrQxDlO/bdv9de/kp/VbnZDDGWuUV0c47XZVTHW3e8Lnop5IfHxPRGCFOIEDgAn9/jkACK40WiJBD0K5CJtt76Vv42+JYSgLMn4kUCfACJZfRN0FPCRYtmVBScOHOQZKt0Zvfz7myvjG9qBmttPgZkT6hAoeIirpNmVoqzsn3mVPkqvXkjxkcvFDr2iKACiWm13sMwKUvlJaRiOltkWTFToxpM4Ysc5UeqbPdII/5Ye/HeeI8Y5bR2UbzpRboJGVS2H7SjjwEEps04vPR/7+UsYQ79/8MoCvvzpfnoLDBn2Aprr1VVK9yfNXOGj4krNZ1RcRBuwK4Vz2NuV5iJRLXB0WH6248AL3Qrwa0ETj4QqmtW4kEq6q+5TPJeKac2PQqU66Ngl4Mj/C9lyf+OD+bvp9UkKZgIGsBNlHsAECg0MzPubhf3d6i1jHxA79LvvEw46YIjs9dd58hi5BmvGw0q5h+sVr898Ly8OA6xBlV33E6sj6rKpixX3x38uVs5zN6hxbDZz9M/t9r1WrN2JJKmxImCn/5zi5iKGtIQxSU1em/bkDv8ORf73STCYea9GKAcf0WzeW6UyXc6XWSk0NHUgGnmgEjNNQ+NGFTxi2nHyeCkXqzpSxQN8HfxMWWV/YU9ntNN8y9+FbZIqouvpMit5vl7G44u7yRlHNLJmdufxdbz2LsaBZUH6oUqk9+lZEDlDR95FQJkbj4YEJhaELunOtKYJH+fOb+5vwQVUPnRu3/62nae7LkvH+70k3QNutvP7Iusr8uTJjwwwaZEHk+EPlVxOm46QGoxhSH10wAL8MmZOqgoUHU3KDZzJAmJpXSYyh349aDRWaBo8ySjKDBz8Er41ElwUiQHLTkIgJS0Hx4ydFpDlbnJgCbjq/37QJACXR/0DbHEUiN4YEs9o1dXtcDpR6haQgiy1ZAUlWKEZ2m4gTCiJIsSb+S1tF5Lwy49hkBrHJmFxus88CAMyQx17E9IG1tLajxjvvmrTyf4BZhawRBJ+8jjy/M4AwcGx45zChZyms7skJdFDn16qiwGXykqzFDFKPXhePJLSE3iEGCkGZnfit6+TW6T/8gAxADlKOO4WjhiOTBHhQma8LinAG4FSHic40nQusjOxJOW+6YfdrAbgtQqUK+2RbZ9Vh4io61wj21mH86Z1r4KDruBN4W3TUVFuanx2BTTw3JlyTtzWDgM2ZhAj3L+Pl2NBzU8kKm2BhjvvUeSbyFsKCKmL36AAvZBZmDWzPA+elXBS5cofS9m6qrPkW3NU7HY//N+HxrnamNAFyrPYXvPzy9wEPzm1Lr7Ssl1eQlmpPktkLFVKzRjp/OAGRlctgqgGcdB1JKI9cc5keHg9mzP68b8e/13wQww315nKY4w8D7pK073KWd808FEnZ2HjHxjhUN7KTxAj7YZHgy7y4FFCBrWcLLqMETZcaK44X9XF/qI4smg/hhxDmyf20t9YjWqZOVKjdKDyOM9xm0Z5PXy2xolDQiLWFKsB/Ts1FxS711HOCgKqSAyBr2ClSFKwE3KrD6jqzdOHl+90iW+HizsgXCeaFDPlEIRIIUqtMbRTaJCUsQnUqez1ULiswSJZIMCcy1VTkW8mraW6y7CjqUoMFwhGUzl/YTidjrkOXq8bdZqwKc2S4aFqi3N+NKs6IuhwWnAcFDWI+U5hPS1DcU7/zVCAUl+WcDwsnSN6rsxosE0PIcJ5R9fXVh2pCmUzvmJJ2oLXAOpjDg3UXQ6fr0YBprb96ZoZqEvFgu8LNTz4TCN1lmxWDj/3lW2KPyohwWQ5y+X8w6vGSi5/7fBFLUu6+q9cjr3mf4dfb05n5ssj9rN3Wn/7ldaKqB5Fu9pZup9/8ZttD96DS26fvfqgNsPG3et33us3n5/2d+I2QQVcJ/7xc1y6l1DVfb5Nh3g2BMSTSuD3A45CZehoHEdYH8khBhqYS7AJ1OWDIIUU9ORI8WcNlRPtVwlTiSBvWNBX1UGOAriFfEDCoGVWnViOePRL38J9AQbkA4CjAaJ80EQ9j3fq+3kz1yB8l+oOYN8fzPVI3bHiUV+JACjyydhcMoyitXzgFhKEdsVqdQw3HrSiCtzlknX9PU2g05BhegXASCVuABUdoM2GGQVe+jtVLYaTBYAMwGqNrOH6AsBl1TmdS787CpBUECQ1Ci5T0mePdvyAYQAQAliHpGHRzC4V1IpHAePtaM6FmUDI9dsIFQAsq6qmNfZN5J43o2R/81bDvhN7DoKaYqSfWJaTxm/GNnIRATN53BhdvdPY8YnvW2+dQ4wxi5vGpr0w1m83FsMRL4FtNiOieeqlVYWwRlUinMuxGJnhNJQXecPlhuN1iIkLY7kUKV0F29aOEB+JlAREhMor4IQCYyzv/w61+tz/he9Y49a2FMusyiGgj/A8o/IEk0AhKE+OqSi9qlMGNHqQLhDcg5Gqh+kzq7hsziJuZUScEwmBixVUJPZ/i4rGeEkoeJD+kULXK+gaAAM2TKEOQJ1arulRTBVsenVfHKJcZi9FwPRhlWVUPxKptPoleHLEkvomWLpEeOk0ZP0URQBOTQUwwAAi1WZcDAECEMgvOYQqAQF3uciyLUYS4spQO0AnSpXQcqJbxLNKaZvf5+tfSSjWb9DAx5KZmR0R5+FS5oJy9FyPuGh1b3wJBILUjK6M7DRVyWD4FYRLirp50B5TCWmzQx2h2T6ciTp+xIhD1TrvIZeG6CKWQTWsoMASEUpSI0C0xRAbs1AwAjEWII3AC+salHgoQwuoqaMME618ra5l7MHSRaojoVr8VexJ24y+YFTvzUESpTA33aw8mNbqRmu+pYkZRaZVvn/s9+mRPTCorlbNDquaU1I3qvRlVXv3eN1Cj0wMOx9ox55/0Ed+rNvKbN82gzq1qJ2vwSRq9b3THtlc0yJVb3waMkYbHvaG2VawlJj6qSE3BhvaD4vmGh12OB0eVSY0mLQyk/5jp1KICIMJfL31YcNz3QiesDwVJrFLVxX4StrZD1ZbU507XLrOeLlrXT3Lttm4EWvwjVhXrZll45OnZYAZCYtbQUTMsOXlju/SFjLlArpA5mpjzwKsJSNGuCVEm/HeqcwVOOEKuUCsDc/hq63pxS9/Zywu4DKaQOp0Loz+jCPSc2Uzwl3tZ6coV2GE+ejNYbY0o/Q8MhYJQEU6FsBZCNWBY+agUu4Tn91/AmKAVd2IAfWcRrgiqteyiom8+WVBVA57I975Fuv68M7ZIhAMXZoIdZY6e5MaHRIywbFQL+FMyZ45V8rNGUeImMtsHzR+ms6OQqEClhhACQ76gzy7kJtf6JsFv1BEnc+FhhU/XYQP0zBa++NMCYm6hbRWTFwrN/grG6uKvOzpAQkwFtgkRfnivmFyHymmTLt6YzDS647+B2Z6tCcFUWuEnFy1MsJ/oQR8aO3CZqHSPoOjGKqpAJdF8A7CwsFAT3w58q9vk9bwycw5RZEnimtFWFC/qRK9dO0O5dIQ2oX+r/onu4ucnIRMhe86idW06MjDVw96ScA4kz/oNEjRVziCSiH96AchZlXdodGpG6bbcOsyMs3NCgssB4YaUOFteulz6/8DECIAEABDCvTzMf1nRQHOSCcSkjklkwwtgqXIUMDq+6PUxh1f+c4GAgNivgPTePf2iBTMGynQ0insBhGei8DRIFdnJgK084U18wBaR3RFF0EkjqA0wdg8SBqAi0Ihk2jjylnpNcHkr2Nf+I7HUnrVOddH4OytkZHZs6m7lUA2XGYwiramKT14nAbt9zTAmdF6YFZ8myxvC44GYNSKgIwqIFrzihHuMJLbdnZwrMw3meNx2DfSklapHU1SJubrFWdtBRW4CZXOnW1Ac1OAaGAfyzREsHR8xctDeL0U7nGTIjpXqqhk2RgYUqRxy2ibHhj13VGnAXW2H3yK1IvhvRuxptbDOU0xXcYXldWHFwrADspuo52lpRe9m9eZvM76kFo3xuSWTcSgbvDSgwFGqaIomwrO1wqEkZDDbE5mZbAYkLGZTABQlAU/172GQrTmCdVRFjfUVzbXraojteu8Dql5H9cE+rmgjIgwqC2FnhHgsHLDscSur36KgDUSczjFXmYn3sJgr/Md9sElhefu4+r2iTBl1gSbVQscZ/LoOcDoAPXmNzTAQLBysa22hMh4tuwircNhXFolKz5H//NlKop1pq8/JQ3i4lCxtYasZa+3FSvbqL3gY2C3i12IPIODfIfnnGSOWU+5JC/7gxwHd8BGcgkSCCeaeCdsiVmcVZ0HYwDIuIoHXiOquZZGU46jmZEeZDQdJCa4FbaXNMS53bKAB9JxcDCIDjk7MrH2R5iwwuIqhKCxBAC/EwyNmGJ/TMzDTp6qNfv9M/+17ynVEFQNIHDFB6iPVHOgNeNYmhFDEJ1nrkALHDGXxsWyFQDf78FuqVlW5ypE+TE1R9ZF9qaMy0RghXnX6y8WfzRTYXJ4JU8SUBN3XvjucSdICIiWyixgUr7BqJN6VUWUwukQ6fVMHq1a/B6dY4T73G2eflHX4Zo2xHj578PfFxAQrTfoy84cdAGfmv/cP1M1plhwluei2bodgKIByr2+pfPrFFOulqJrdONzS9z3IKKmQsn38xmFUEIA8TjKl6DM99T4EKa/a6gowYLsc1daTrSpeZD367APixQFSWzTWnsUU1GzOkNRTBPLCitPkDoLhT1jhwAS+cc5znSIcuhmen2d1gYRZbwD4OK3lh2tgzKGs/hjFrqI0nWdm+qZapVaVZbcK/Z+OhKatGeTZz76S4BqFX3+u1evzLTjEI2OZSUCqiNmTJ6xEoLWw+S10X9k3k9XtoLZjX0LJQw216qVXWsW29vu8iqbYpfDG3kfPLJpGkxdPqapxFhWAzdiy2E+jZTM+1SMfT6ny2fk837AKEcjSL74F08e/Fqz5RM46hmiHkwKFao10g9LA4N4/lYdgSM4yGh7ssKtkHfDlT7qm3PKGR2ffT4sCtGBmYRyWaQpKZOgGyHneSyRXtbqC8jEVd2vrN3IoQ5MOqTjFEcdkRAR01Riuupq1q/T2sIwF3RQWLtKRVHj3jPrhxZuqoSjCg8pnWtXVqGYoYiiAlc+NFYLmUG7hD/x/193gakBhILdKMqlvA8qJixBia6HMt9cCDCNBT4KXBLp0GeelG0AQfgDCwAYaJeJz7X/304AzHgIWzD+Oe9z5z1x7t3UBUm5hVXVlblSx9m6LYq8W+ISI5CwGrDa5Zl4HTRj7f4gcLXPf7b8TWMsOgOuS2h2QDiCtnbOUJYbeR4qk8uAfiznynWAI+Qt3HhGQ9J0RCiflqu1wHEcHQCNeTSgUHg7/45xSADmgobKBGvEFd4HrkxO4uIcvjfj54fwKh5axG/VtdtEOV9MEu0SHiNXe25JfDtnRj/039nfU7t5DDHYXOOyPEpaYlc9nOKLBlIlCX2Y7dUqZTWd1xWp9sGH1d7fjhHv3hEprH+W9PqraPd9r6/NYxmjDjBteJy3AYF1gRg/EljeGP/LVt5zDSAHccmfN7hb+MTdDNjcuI6xGI7H/vFR5InqjeEBGrO8gyGvlZBBiG8Xcja879RLRVp6Zy34gpikJl/g5S/eJveRy/lh1Tixq8Xy/mXqDz/xb8wA6GhI63OnjUQdcr3YzhdFfkLRwOJyixN9xlGYPg0CCjN/DbCnksl1YJPdRAJo0yqYwnDikCWmG06DLRt79O8fBAhq6kG80N6vRiDVuICHcaTn6rZEwJkWYMuPZESCBp4Wbx4bRmodAWK7Qg8IWiaftvgTlhgIB6EBY6jvy1xXBPxMWQf9oLuyjUJfO0E1gSmoyZ7/oZpZXc93sV4uWWZfHnKZ87bbG5UnYcK6Tm8yzRzDMkUujk+rRhdeM4rxBsFyKx3ZiwCekv5seenfWQ2lIMZi8yfEJXeTxYWyJxyP5Zz0PkC5GglEWXfbhRF55onzVOVGEJg2bHTLR95Il8G8YL3+6wAVoXv2SQLYRVu1IsZ8dme1oM4f4DEBc1s9Q3llXBl6tYSTisFjKcsJ2TxRswnT07hOHZohJiIK+Wgj3j3Lh4pFP8rh02q05XyBOkn/emspOzgtM5kuqhLcFuqitdlRy8/U+jOrO0TqdneAaCPewSZHnq8RXy5YMSQZSIosJWDvTNbckqnhT6y8rboz/Ak/iVJACbALxAmqESPd0Ezzh0lXOzWc1LfsZeofXn7wIeKLR9Zhzmpx8/orbp6M4YMwoO98ALju9W9ff5hhv0mMsEdCOdj0LsjzMBfAERoyQs3ZAonZgyvJeTpipGYgwlDhDZAzIkMQEqLRZPADkhY+DfoPs+hvaIw216U64vqgEQ4i6tPr+c2b0qRsYYuSN0Btc6tHMHCac/PAHfxM8XDMKk28zG/WpzbKwjqcE8ZEyILPZklpy0BqeiBA1onaSsDeA4AKKF/Qy7WBqUNdKDCEGTJum4DZ0i0O+/7zFq2P01tSopl9XSY2F8Grsv3srDkNGsLUuq/Q0exkF7Xa30eUao+gkVr10WY0Q6Pa8oexL3xf/9ZwqCOaa+zOjvXJrO3dp2auvZJIjw7vPqXRnZsn4ef67lll9WLZ3jIDysmxtShRxT3o2x+UeOJ9WYKaZjDyKo58sbxsnqLPMDBV3Fln5AwMJYd5VZyU464EV7tIUNwQmESvLECPg6h8AVtkimAaQqmVDdbwCHoZjK0ui5aCNdZa4FCx01+xQ7KkB+LUCi0FHFZYFDFIg0HmcKANtrZFk6Q18FcSUTrPdwmv81p4hqIsDIfzYgNgM4eOzPDQeCw5QmKdQTLbCMgYrp65Th3q++QJJt71fOczZfOGOY8hzvvrUq4brFO1DgA6ABb+6M84OFDLMd+pZn1jOeOQXdxUwlyrAukDdcJ898wdIKJqtWm28sUa4ISmAAsOkzib9gGTT97jCMs8qCe1t7GTHtq6kwKNLFXF0QV4JwcmUV0HDQEH7gvnRlGW8ku4EExjQFcLEO4QEfyhyN8KvwU9pfK1qvf5azd8qEPMNbLin86fdRkuz74ZptxraslGZqW4E0UQ/mwDLXL6MM0NC6TakmyKIoUBetF2ndplynFRdL555dImMua9HlcIT0Hqpt9x9wyI5HHwkYIdl+q9nh2iugz5VLPSbq2zUB/qjdoTCTzzJTcGsc662O2+77/d2bkuX1YEe5X5sjLWDzJncc4p6Lb3dd8uZYzS1NlAiTadogorjOWH7IMOUJZhmbtSushlW2oXwfMNUt71HCGDF2hSUBR5N/nH2I+ZJU1GqS45Vx1V5HJIqlLgI/BWR9hDnukWnn6+43WRZ34WZuyJLb2seshGyoMJ6mR5XRQiaRFHXGHt+HR2WeLxkaLzR1EvqXC4ow837SEZ3P+FSB5f3syjSsPur4K6jwgVfYa3DplpA6ET9hjc8Tp3l+scxF0fvrLHuqey25cVwb6ssN4e69gP9x+2Lz71jBeT7qy0d4ukLh/uNNBN2QBosnltJ4ag+PI+Dx1+pCWCuaumy3RLh/GgKC06ZCJHcJWxhtf968sqhey0onoc8JBtnMS3zcrbF0j7cr/J/7hfYJub974DQvtWub+EONLVKK3ZUL71cgzkp4F25P1DHtKNF+huMq522CzQPHcu7gcbPlXoBfhsyiRJ99AYB2AK0zykNLyuUJdipzM7GBBWaCcMYZlW3wEITC66Jy6Tk8yicqgmj5ta6EogpNzBInFuMUM1PpJpXAbTjm0h7WerHrDXR9fMWG31PZxJxL4/GLGJnTCSWdW5C1QdIjtethFT7uEIjffcj1d0DBnHHzZ5yZK4Vnkb67h6oC6mSmMHDMZHk9ypikILOFO9Dkf0dnE4qnqXYZV3QPeWXvbrzVXXDlIW/VkwrffjuECn/XOkYSIc6PhicRSUh71eSI72WdeRXp6wGhoYTgGJhj7CbW5DxuHThQLt4GBWboB4uUexJ7lIjFJxgD+9dALy4M0NQwK0oYb2aPZoQ0zVg0yIaEQsyvUbFBj58hzJZc78btvBm6oyDIOHQV3MqpDaEtn2IWXnw2RnTfyanZjElNyfnQdDWlJ9xMqB6LNoHB3ZchjDYL9qVDnhdHLohGFcpIhrFYFzh8lGV5M9KSJKm7Y7iHvG2L1UdEkJV3hlKeusibmQOw3kyQxRuhMH4iPIEUV5RiU/+KOnj0hZZlS0l8S4uCmFtq9cbz3eCMFyj3W+gdoDns+8uA1NkKWLFQrjw0V5oD32Ow8jy/W+VStAIgemcUb1yTzuh80wpzxQMunNEoOPo3yA/In3MqOOJJX80XcGVlePv1ndg3uZ5NecR1by60jyuJ2Ucm7DVMtApkcRdeM5YOZjsPffVw6E1eYKzMCoMGU/ZPL4Wl1WmGol2mQAMQOSD58G0tQi64iprhsDKBYjwia0gmyqdTbjVyVwoIhx3fPhXWLxQ1Qm0uW+eA+PfwG1bRvTvHhRYIos7IRJn/4O0LZ9iR6u+GIk6+2jK4Hqa/qRrvxWyuQxMUr200EICNqcaWNIlJwFZNyEh2PmIgwS3xALVPaWy3tmtxFy516aL3nrYg473dkwxboxHQo/GWw/maQjgEe/6t9KkjPn6HmaqlWMlgtNFiq1oyrne1QVatsartgmloa5ArH2PGCf0SSFrx5pu+Gxnp4ICJWsABTVWxCIGEYwEkcAdMtmtiBWKgQlg5QDBWL3BcvOde46Y/kwa0jtKgV2TNOfbdROuc9o+U4zAqgbbIEqWKIJwNsMEue+lPuxUrt0OttDkrNy/4XIH8r9/y9zuQU4eYO9RADeGzmD+9Lux87Zp7PNNezUYbXGsZSWL5/FebnnU/ZJWBTsrrDueri4RNslFO7l2nKMvuHPHCTRZdFAFG72+2128UIkhs3VNxb+7mO5LzNzKUmZPvH60gnYPGK+E4Xn+GBGS4TmNdvIQn7dkjwuHaOU65Cry+u1rHK6jWLRYez0XVZe99O1mqKmbG3kJKLMzCrGKGayKRnyCwsfX3K8OXyltoAQ2Jxivc7xqDHSqmt9yOW2GClxk7mSoj9qGd1vKbO6fhjL7Sto/ezl5XP2gcFPpN4i17tgk70EoTyyZpgEcVc2fOb56luy42J9cXlMDDaPDvQEzBFajM0doKNzim3BNZ/vXvxIztJjezxb156E6ywGuttseLz0kIdtMLBZtjUjn1lJiQ2gH9BWCfnttc2Qv5eRREt72OlIg0Z5GhrYjzXkb/5v58DqMrZ0VsyuN77WxTpo7yIxATe+zeeBrFmqNG6KRh3VUs6WEula9ataVbAN5QE+HFgLrWw6+4Hmracdsp+zWqcwMN0EI1F7u0+X2/dcHcDZHtu7dzzmVlAJwG7Pw7oywpzcVIaRtk79bSwt3pdXlsJ0haMeUuu26Ot66YvEcP2wb1Vl//CyhevitU0cYydP1br47ASiyt/SCXbzm3rusMgu+BOCSQ/3prC29/L6MZH+wz7Xau1TRnRspqguUNBgJmINOzFJ7CILmWMTG3BBOFmTgjw9ZMBe0Y9GXmHJRdq7vGxiPLcsWU7C9VkTlx46TBlQFVrf64xUPqD7fMioDFEOvci7oYHw6+snwyDFyUU/ermUSJw5HDxey78SlPaHlh1wzXtM8xksW40mS/NzBUCMcN78A5EGV/sa7bHcUrGVm31pjHflvrFmbjpNoyusut+bXBJbTfHdtsMLcaveyutrOx14OtbI4vHQ6n4pLFkOHzmNFdhRMt9K4tne5aqOir6GjEzk1w7J43hyk+sYyBlJ5nQn8RM3cvPOieIqi2aC9umyWGg/IYeH3U+AikSCc3UAz+oyMST00lhsV6dH5TFylQvuCBEHp6YgnpkaUtXgwSoU0ExYfDCDWpD0bFFj/FZHsKO0Jf31oJVq77bCEe8f/+EILmIR6RiCJYbY3scIRQ0MpvjFqtW5HiiyAqpOZ9rU6/0TH+hkiVYo98PtCLbcHQyXWeuPp9dLcfDlYaQn09X3MPNCmMNw17BTIpFt655668/GFffR5MJphEfJI9sVUS8m55jbZKRUe2h13AAae1u4F9FaWyhNqYlfYLVuwcm2ag+SlPyFYqIcrO2wriTK1I7hmI6NzNuIsrtKEZCBuQZObgfpgwyN+Wq9wpS2sLYt970lnZANDImQVl8zjQzkU03y2PfQHMQUmJAUqOQ+WKK2ICTgRsyyTlBSgtFD31ifdiFyAk4JmAfT5YF8u92aIK04RYEUlSrDgH/K6AAewA+J7AzBUfgSBzIvrqCYleu4ujtf4vuGLM2iZTUMPLkdiEeaDJr0t4RAor5jS7a4rvWLJXB3OauQ0Zoq1rbldf+Aj8SpdO3uONn8z+Q9pROroacA9rIGCho53lw8muG4pMqdk220PtQoRuRyOdKQT1h4T03csRg5KtshQqLGWXiptmBkRtVVdS4A7buTT/qXgYy4OHXhCGA6IXmKkJ0JQzXGBYKWBSbMotWnLRVaOgad+KwprxHubPRGirc3+qPQ0clU5IRFrk8FiQoYtCGIVXodsYK/i1JDAWtNGKWUynXe3D8sO4x2N5763S4MpOAWcKUXCt1xOxCLr+HIqf5w3ilFEskLL1l9t9sLgVepVI5CoWy47s7y3h7T/hbRbpphmD04Nd8x4h4YUiKHduxMiSE5r+6LguY3n3653bCJD4wiXdcl4UlHd8/xN3xWkfMm4if3SYbljiQ4rFuA0UaxyChMaPM0npO+GZbmYK/i8Eo+C1fVtSofCatDI/ErXm0eXg9zpfGczLqJx5F9cQDQkstBJUKoFNQRwsbi+rmUNp3XkmiEcdh2GzZgKtVAiVBXDSskhsdm2wCDnOfE4co9HciwpECTOkiUajDvEtclnHg+79WDrFFrqRLKvD2tNF220d3RjUuhwk2G8/eK420vwfkQsia2Ab7hYSZJVYeHQRrvl5i9elzPLuRZHs/819W7UR631ajCl2J4sRIGRjSQy2FfBB1wcBxt9lTVW4diRVL3FPqzmRRoy/8iHTriWyn2yePJ9yL0xC2xOpJkayZe3aZD22Iczir1HZh/ViANAzrMDpczB4Cm2r6oaTiWiNBQQnMDujzLHojIxM4sEBlfjT6DCtSSc40XTFUEUmH/hLUWAXv9au3fPP/pP8FXC0BEhBFAgYX7s2GAhTuhaLelANPvvn/zIzQAfRugzgH0RqyKLCD5FZ+6y35QlfW0rfGlgNnL1SQr6wQXgL2RFF9yvFPg4guvPJC8cRej7vKvu3kzwDuVkZofvdLIQ4ITjqZoZwDhy6TieYt2fFTjNiTtzsJ1qqI+Ym4NRH51jq+E8Hdvai2czB9eCbE9oE7j6d6AqBFFp0Lue1TrI5WGWO1PxuqnzaGPTtZG9rDLXJvnn2IY5QErycost8zV4+zRrh5PBHGNhyy52MaKq/ti6RinkfnlhpDx6lz4JjR+grf6V8JISbcvcJs7DjZvbHvzyHUNzCdNUXSwguohm6a1VXbWXT5N9FxtU0TFfSeTlXHu4tLO3ZCPngREzETw+LTqmq1tV6NzFDF5y1IRxNOFtM8tpN7y4pmudLV/xzeM5hUjr+F2nvzDJ6ze+GKs7czk/Uroc2RF4DX968swdnFY4Vd0flBe9TRaZg6FAYAe8VBSa34/lxgCX7G9uqtmMsp34RGm4Mp7Ti4kZVWLkQEVVWAIPBKFR8xvHyzhK5ASwwhAGDwFCiIWY6qjGEpxePJ2lUd2zBjVAAsDgVR7a7ruQ3hd2lcgu+AuhsGSaq1kh1NM8OcA63eSdyPSc1jXYXvNRZuxYM5ubjeKQGEKOc3xxrZet72eA0wrsRqBRSNCFyPSVqYhWUURoOABr65uzROasAUCGwBtFGmCRIk4iyjjITzKGamICii0EBWkHVZRIcciLCrMKv6LilBO76gYi8RFJWrX8qgkq2kweg50uhI9z3t6Gb3AYNS3uwg4Dt/HfjcAqsPld05RKRAhX6CCJBSZWsHmQhQEU0JEhcxDhUiEbFMjE2tLewdnR4K9LatoJYeCmnFBdHJx04hUXucWeOl41tGIHOdFSqLM8ntB1a3YJslGLRzZWInyFBFzx13PCFhSO77ElVfmFiamFh/8cMsQMydAyXQdrhNeCIIGe5ADR0b95D2XlYEshWRo3QKvJRnmDofQBJSBzXINExYYOmpESkJcx9gW3VFzbKWNUzJcMjTs/ggJF+3UtQRyNoLcAZE3hljI7YwPpZ0zQsDlCCifGpN8j8/DqoAueQ0RqaRCkVtpKWOE0tAbHBj12XQYd/xipCxUPLyJFKAbGWjj2xoG1ZmEJ4FQVXHpDa9sooUnCqg5yFuBGPCILp0DqTVS2PkR45bsALhcpWQJI0cUj/WNCa7eKHYyeqTT0NDOoWp2UM8Eqcu6AyWwpUoNcuxi1WvADTtWdSfQqHLwgUx28JWPSEViuazyJ0IBzjhotvQIV9OUW8Z9eYwj7F5dIRMXuzocuSwrytXFoRSnG1GLkZ+G7b4b3ALiATI7WZpzu0N6RhhYJCTvq43tM0LhJE2WvGBRRdmAIzTiKo/ct7KxA2YCFpA+NSBTKR6Dh7xaA9r9EV+4catAeYAs5WHawo78wGKClJOaT9FdWgt7OYQVxpTtxbisuN2YoeR50Q0V7yZI/JCvzCitqnf8ty4DcDWQP5/lvRQnlCRFMyxHZzBZbJjD5fEFQpFYIpXJFUqVWqPV6Q1Gk9lij1gTNtn+bXJ2cXVz9/AUe8IhRYgUBQUtGgYWDl4MglhEJGRxKOJR0dAxMLGwJeDg4uETSCQMLbRCpcZRvd6q1arJsFkToY26PVCtK4CYoT596p30JEBo3pzvvvhm2aLzzlqSJFm7FBeJnHPBVZdcdsU7qW665rqdxP405I5bbkvzwScNJNJlyJIp26gceXLlK1CkULES70nJySiUKXWAWjmlCpU++uyQXXY77J77oYNLLLHCGhtssSvjMilwQcq0oPZYts9+p6zY67Q682Fm1VqYl4XmsKw/ympe/KznwfT9DmdCRS/CiVmkWRn22jTKImIZso/NmO0tIj4ReMQ34hfxjwREAiNBkeBw5KY+3jkf3b/1ZAuHlMHHOThGOP4Y/hcKm8d+a4xn9nrEgPLFtjiAv29rtFisDcLdvIf+VrvnE/FYwtk2yPey4rttJpJ1HWWfFzWAefUQoYZzeMcJXrjKsRqEOCLf8wou8UaY+CugYs+HiF6ihL+Crqo+/sa4K7kr7B7xCw4k0pX8rVdEpzcTHCe8w4PlgJLF78Da7Xa51fAurlqk2ldn21zfRHdbM1pf/a9djg) format(woff2),\\n url(data:application/font-woff;charsetutf-8;base64,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) format(woff);\\n font-weight: normal;\\n font-style: italic;\\n\\n}\\n\,\type\:\text/plain\,\created\:\20210320220143398\,\creator\:\soren\,\font-family\:\source_sans_pro\,\modified\:\20251011192358274\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\},\$:/tzk/Functions/ff\:{\title\:\$:/tzk/Functions/ff\,\created\:\20240601140936743\,\creator\:\soren\,\description\:\Return `yes` if the specified feature flag|$:/tzk/Tools/FeatureFlags is enabled for the current edition, and nothing otherwise.\,\example\:\\u003C% if m2.ffViewerPublicLine %> The viewer public line is on in this edition. Transclude it here. \u003C% else %>The viewer public line is off in this edition.\u003C% endif %>\,\modified\:\20251011163407137\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function m2.ff(flag) $:/config/zettelkasten/FeatureFlags/addsuffix\u003Cflag>get{$:/config/sib/CurrentEditionPublicity} -no\},\$:/tzk/Functions/public\:{\title\:\$:/tzk/Functions/public\,\created\:\20240601151609755\,\creator\:\soren\,\description\:\`m2.public` or `m2.private` yields `true` if in the appropriate edition, and nothing otherwise. Consider using a feature flag|$:/tzk/Tools/FeatureFlags if you might want to configure the behavior for either edition, or condition on the existence of a tiddler if whether something might be public might change.\,\modified\:\20251011163421555\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function m2.private() $:/config/sib/IsPublicEditiontexttrue\\n\\\\function m2.public() $:/config/sib/IsPublicEdition!texttrue\},\$:/tzk/Functions/separate-number\:{\title\:\$:/tzk/Functions/separate-number\,\created\:\20240601203238907\,\creator\:\soren\,\description\:\Add commas (or another separator character) to a large number. Use `separate-number-input` at the end of a filter pipeline.\,\example\:\\u003C\u003Cm2.separate-number 5000000>>\,\modified\:\20251011163432525\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define local.separate-number.regex() (\\\\d)(?(\\\\d{3})+(?!\\\\d))\\n\\\\define local.separate-number.replacement() $1$(separator)$\\n\\n\\\\function m2.separate-number-input(separator:\\\,\\\)\\n\\tsearch-replace:g:regexp\u003Clocal.separate-number.regex>,\u003Clocal.separate-number.replacement>\\n\\\\end m2.separate-number-input\\n\\n\\\\function m2.separate-number(number:\\\\\\, separator:\\\,\\\)\\n\\t\u003Cnumber>m2.separate-number-input\u003Cseparator>\\n\\\\end m2.separate-number\},\$:/tzk/GettingStarted/Copyright\:{\title\:\$:/tzk/GettingStarted/Copyright\,\caption\:\Copyright\,\created\:\20210523153031971\,\creator\:\soren\,\modified\:\20251011192419434\,\modifier\:\soren\,\tags\:\Meta\,\type\:\text/vnd.tiddlywiki\,\text\:\If youre sure you will never share any part of your Zettelkasten with others, you can skip this step. Otherwise, take a moment now to decide under what terms you will share your content.\\n\\nThe built-in licensing model for this edition involves two different licenses: one on the //content// (your actual notes) and a second on the //system tiddlers// (the custom logic that sits behind the wiki).\\n\\n\\n\u003C$details summary\\\Easy mode: Keep the existing terms\\\>\\n\\nIf you take this option, heres what youre letting other people do:\\n\\n* Your notes will be all-rights-reserved: people who have access to the notes can read them and use them under fair use|https://en.wikipedia.org/wiki/Fair_use in your jurisdiction, but cant do anything else with them.\\n* Your changes to system tiddlers will be licensed under the MIT license|https://en.wikipedia.org/wiki/MIT_License (others can freely copy and reuse them in their own wikis).\\n\\nAssuming you are comfortable with that, this method is recommended if you are unfamiliar with open-source licensing or copyright law; simply filling in the copyright notice below will automatically ensure your stake in your content is recognized and meet your legal obligations under the MIT license of this edition.\\n\\nWhat should your copyright notice look like? This will normally be something like `Copyright © 1995 Your Name Here.` If you want the copyright date to automatically update, use `\u003C\u003Cnow YYYY>>` in place of the year.\\n\\n//Your copyright notice//:\\n\u003C$edit-text tiddler\\\$:/config/zettelkasten/copyright/UserNotice\\\ tag\\\input\\\ class\\\sib-copyright-input\\\/>\\n\\n\u003C/$details>\\n\u003C$details summary\\\Or alter the notices yourself\\\>\\n\\nIf you dont like the built-in model, you can freely change the license used for your notes by editing the tiddler $:/config/zettelkasten/copyright/Content. For instance, maybe youd like to make your notes available under a Creative Commons|https://creativecommons.org/ license.\\n\\nIts possible to use a different license than the MIT license for your modifications to system tiddlers, including forbidding anyone else from using them at all, by editing the $:/config/zettelkasten/copyright/System tiddler, but you must do so in a way that is compatible with the MIT license and preserves the original copyright notice. Doing this correctly requires background knowledge and some attention to detail, so if you are not familiar with open-source licensing, you are probably better off sticking with the defaults and adding a copyright notice using the text box above, or having a quick chat with someone who is more familiar.\\n\\nYou can change the copyright notice that appears in the footer of the public edition in $:/tzk/Templates/Automatic/StoryRiverFooter.\\n\\n\u003C/$details>\\n\\n!! Preview\\n\\nVisit CopyrightNotice to see what the notice will look like.\\n\\n\\n\u003Cstyle>\\ninput.sib-copyright-input {\\n\\twidth: 100%;\\n}\\n\u003C/style>\},\$:/tzk/GettingStarted/NextSteps\:{\title\:\$:/tzk/GettingStarted/NextSteps\,\caption\:\Next steps\,\created\:\20210828133924602\,\creator\:\soren\,\modified\:\20251011192425176\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\Where do you go from here?\\n\\nI recommend starting by adding some notes! Add a couple of tiddlers for the ideas rolling around in your head. Read a book, add a source tiddler for it, and link to it in some idea tiddlers.\\n\\nOnce youve gotten a few notes into the system, you will be in a good place to decide what elements of this edition you like and what things youll want to change. If you want to get into customizing the wiki and you dont have much experience with TiddlyWiki, check out Grok TiddlyWiki|https://groktiddlywiki.com/read, a complete textbook and reference designed for learning how this stuff works from the ground up.\\n\\nAt any time, you can watch an hour-long walkthrough video|https://www.youtube.com/watch?v9X_T-DVie8o showing the most important features of tzk.\\n\\nAt any time, you can click the tools button {{$:/core/images/theme-button}} on the page toolbar (upper-right corner of the wiki, right under the title) to access a wide variety of tools, settings, and documentation related to the Zettelkasten edition.\\n\\nIf you have questions, comments, or suggestions, please feel free to get in touch at `zettelkasten@sorenbjornstad.com`.\},\$:/tzk/GettingStarted/ReferenceExplorer\:{\title\:\$:/tzk/GettingStarted/ReferenceExplorer\,\caption\:\Finding related content\,\created\:\20210920161148251\,\creator\:\soren\,\modified\:\20251011192431171\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{ReferenceExplorer}}\},\$:/tzk/GettingStarted/ThingsToDo\:{\title\:\$:/tzk/GettingStarted/ThingsToDo\,\caption\:\Keeping track of things to do\,\created\:\20210828132735971\,\creator\:\soren\,\modified\:\20251011192437449\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\A Zettelkasten is never complete and always full of new things you could work on and existing things you can improve. As such, tzk has a variety of tools for keeping track of what you might want to work on next, so youll always be ready to do something useful whenever you have time to work.\\n\\nThese tools are gathered together on the Write tab of the sidebar.\\n\\n; Stubs\\n: Tag a tiddler \u003C\u003Ctag Stub>> to indicate that youve decided this topic deserves a tiddler, but havent had time to write much of significance about it yet. If I have an idea but no time to write about it, I commonly add a tiddler with just a title, or a title and a sentence or two explaining what would go in it, then tag it as a stub and save it.\\n\\n; Missing\\n: All tiddlers that youve linked to but not created appear here. Just because you linked to a tiddler doesnt mean you //have// to create it -- often its sufficient just to gather a list of things that link to that person, place, or idea, which works just fine without ever creating the tiddler -- but this list often contains things that could be promoted to stubs or full-blown tiddlers, so its good to skim through it from time to time.\\n\\n; Needing attention\\n: If you have a tiddler that obviously needs some work -- for instance, it no longer represents your opinion, its full of errors, half of it consists of text you copied and pasted from somewhere else, and so on -- tag it \u003C\u003Ctag NeedsAttention>> to add it to this list.\\n\\n; Needing excision\\n: The \u003C\u003Ctag NeedsExcision>> tag is a more specific version of //Needing attention// which indicates the tiddler is too long and should be broken out into atomic units|https://groktiddlywiki.com/read/#Slicing%20Up%20Content. For instance, if you took a bunch of notes on a book but left them sitting in the tiddler about the book rather than splitting them up into separate tiddlers for each idea, you might add this tag to the book tiddler as a reminder to come back and think more clearly about the boundaries between ideas.\\n\\n; To-do items\\n: If you need to be more specific about what needs to be done in a tiddler than the on-or-off NeedsAttention tag allows, in the text field of that tiddler, link to `TODO` and follow the link with a sentence ending in a period. For instance, ``TODO: Find a reference for this claim.`` A link to the tiddler containing the todo and the text of the todo item will then appear in this tab.\\n\\n; Open questions\\n: Similar to to-do items, tiddlers containing a link to `OpenQuestion` appear here. Open questions are ones that you dont know how to answer, but think are important and hope that with more study or life experience you might be able to understand better.\\n\\n; Tray\\n: If you have some tiddlers you want to keep “front of mind,” but you dont want to keep them open in the story river, you can drag and drop them into this tab, where theyll stay until you manually remove them.\},\$:/tzk/GettingStarted/Title\:{\title\:\$:/tzk/GettingStarted/Title\,\caption\:\Title\,\created\:\20210825150825394\,\creator\:\soren\,\modified\:\20251011192444754\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure set-favicon-actions() \u003C$action-sendmessage $message\\\tm-rename-tiddler\\\ from{{{ $:/Importlinksfirst }}} to\\\$:/favicon.ico\\\/>\\n\\n\\\\procedure favicon-cell()\\n\\timg width24 $:/favicon.ico\\n\\t\u003C$navigator>\\n\\t\\t\u003C$browse accept\\\ico,png,gif\\\/>\\n\\t\u003C/$navigator>\\n\\t\u003C$list filter\\\$:/Importplugin-typeimport\\\>\\n\\t\\t\u003C$button actions\u003C\u003Cset-favicon-actions>>>\\n\\t\\t\\tchange favicon\\n\\t\\t\\t\u003C$action-sendmessage $message\\\tm-perform-import\\\ $param\\\$:/Import\\\/>\\n\\t\\t\u003C/$button>\\n\\t\u003C/$list>\\n\\\\end\\n\\n\u003C!-- Thanks to Saq for helping figure out how to import/replace the favicon:\\n https://talk.tiddlywiki.org/t/importing-a-tiddler-with-a-specific-name/680 -->\\n\\t\\t \\n\\nLets start with some basic information.\\n\\nWhat do you want to call your Zettelkasten? The title and subtitle will appear at the top of the sidebar and in your web browsers title bar.\\n\\n\u003C$let tv-auto-open-on-import\\\no\\\>\\n\\t\u003C$navigator>\\n\\n|!Title |\u003C$edit-text tiddler\\\$:/SiteTitle\\\ tag\\\input\\\/>|\\n|!Subtitle |\u003C$edit-text tiddler\\\$:/SiteSubtitle\\\ tag\\\input\\\/>|\\n\\n\\tThe favicon appears next to the title in tabs, bookmarks, and other places throughout your web browsers interface.\\n\\tYou can upload a new favicon in ICO, PNG, or GIF format.\\n\\n|!Favicon |\u003C\u003Cfavicon-cell>>|\\n\\n\\n\\t\u003C/$navigator>\\n\u003C/$let>\},\$:/tzk/GettingStarted/Warning\:{\title\:\$:/tzk/GettingStarted/Warning\,\caption\:\WARNING and DISCLAIMER\,\created\:\20210828134445553\,\creator\:\soren\,\modified\:\20251011194335470\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\tzk should be considered alpha software. The underlying platform, TiddlyWiki, is extremely stable, and it is highly unlikely you will lose any data as a result of using tzk, nor will the system become obsolete or unusable in the near future. However, there may not be an obvious upgrade path to newer versions, I cannot guarantee support if you encounter problems, and the edition remains primarily focused on my specific needs.\\n\\nIn other words, its //safe// to use tzk for your production Zettelkasten, but you should expect to have to dive into some system tiddlers to make the edition work the way you want, and you may have to do some manual merging and copy-pasting of tiddlers if you want to backport features that I add to tzk in the future to your wiki. Think of the current version of tzk as a piece of hardware that you bought: you get it as-is, and if you want changes or upgrades to it, you have to make them yourself. If youre not willing to take on that responsibility, please do not use tzk for real work.\\n\\n!! Why?\\n\\nI need to preserve my ability to rapidly make changes to my tooling|https://mosmu.se/#ReflexiveSystemDevelopment. Worrying about backwards compatibility, upgrades, supportability, and changing things so they work well for other users and not just me reduces iteration speed and mental flexibility. If I tried to supply these things, I wouldnt be able to publish this at all. (Ordinarily I would just keep the tools to myself, but I have gotten so many curious people casting jealous looks at my \u003Ca href{{$:/config/sobjornstad/PublicZettelkastenUrl}} class\\\tc-tiddlylink-external\\\>public notes\u003C/a> that Im making an exception.)\},\$:/tzk/GettingStarted/ZettelkastenCardTypes\:{\title\:\$:/tzk/GettingStarted/ZettelkastenCardTypes\,\caption\:\Card types\,\created\:\20210827233526864\,\creator\:\soren\,\modified\:\20251011192500200\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{ZettelkastenCardType}}\},\$:/tzk/GettingStarted\:{\title\:\$:/tzk/GettingStarted\,\created\:\20210523150144006\,\creator\:\soren\,\description\:\Guided wizard that walks you through basic settings and the most important things to know about this edition.\,\list\:\$:/tzk/GettingStarted/Warning $:/tzk/GettingStarted/Title $:/tzk/GettingStarted/Copyright $:/tzk/GettingStarted/ZettelkastenCardTypes $:/tzk/GettingStarted/ReferenceExplorer $:/tzk/GettingStarted/ThingsToDo $:/tzk/GettingStarted/NextSteps\,\modified\:\20251011194335475\,\modifier\:\soren\,\tags\:\Meta Tool\,\tooltype\:\configuration\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure go-back() \u003C$action-setfield $tiddler\\\$:/config/zettelkasten/GettingStartedWizardCurr\\\ text{{{ enlist{$:/tzk/GettingStarted!!list}before{$:/config/zettelkasten/GettingStartedWizardCurr} }}}/>\\n\\\\procedure go-forward() \u003C$action-setfield $tiddler\\\$:/config/zettelkasten/GettingStartedWizardCurr\\\ text{{{ enlist{$:/tzk/GettingStarted!!list}after{$:/config/zettelkasten/GettingStartedWizardCurr} }}}/>\\n\\\\procedure wizard-navbar()\\n\u003Cdiv style\\\margin: auto; text-align: center;\\\>\\n\\t\u003Ch2 style\\\margin-bottom: 5px;\\\>{{!!caption}}\u003C/h2>\\n\\n\\t\u003C% if enlist{$:/tzk/GettingStarted!!list}before{$:/config/zettelkasten/GettingStartedWizardCurr}!isblank %>\\n\\t\\t\u003C$button actions\u003C\u003Cgo-back>>>\\n\\t\\t\\t← Back\\n\\t\\t\u003C/$button>\\n\\t\u003C% endif %>\\n\\t\\n\\t\u003C% if enlist{$:/tzk/GettingStarted!!list}after{$:/config/zettelkasten/GettingStartedWizardCurr}!isblank %>\\n\\t\\t\u003C$button actions\u003C\u003Cgo-forward>>>\\n\\t\\t\\tNext →\\n\\t\\t\u003C/$button>\\n\\t\u003C% endif %>\\n\u003C/div>\\n\\\\end\\n\\nWelcome to ~TiddlyZettelKasten, usually known as tzk (pronounced /təziːk/, tuh-ZEEK). tzk is an occasionally updated version of MosaicMuse|https://mosmu.se in a format that you can use as a launching point for your own Zettelkasten or similar wiki.\\n\\nYou are expected and encouraged to make tzk your own by changing its conventions, tools, tags, and so on as you learn more about the Zettelkasten approach to note-taking. Rather than a full-service application, tzk is a framework you can use to build your own system (although it works out of the box if you happen to like Sorens highly opinionated approach).\\n\\nIts recommended that you have a basic understanding of TiddlyWiki before getting started with tzk. Grok TiddlyWiki|https://groktiddlywiki.com is a free online textbook you can use to learn TiddlyWiki; completing at least chapters 1 and 2 is recommended before getting too serious with tzk. (Jumping in first is totally fine, but if you find yourself with lots of questions about how things work or start getting frustrated, check //Grok ~TiddlyWiki// first!)\\n\\nIf youre viewing this page on the web, you have two options for installation:\\n\\n\u003C$details summary\\\As a single file\\\>\\n\\nYou can start out by downloading the wiki as a single HTML file and working with it directly in your browser:\\n\\n{{$:/snippets/download-wiki-button}}\\n\\nYou will need a way of saving changes to this file as you work. You can view the full list of options at tiddlywiki.com|https://tiddlywiki.com/#Saving; if youve never used TiddlyWiki before and arent sure what to pick, I recommend TiddlyHost|https://groktiddlywiki.com/read/#Installing%20TiddlyWiki.\\n\\nYou can always convert your single-file wiki to Node.js later using the `tzk convert` command.\\n\\n\u003C/$details>\\n\u003C$details summary\\\Through Node.js (full-service)\\\>\\n\\ntzk is primarily designed for use with Node.js and has an associated helper command-line interface. Using tzk this way is more involved and technical but offers the following features you cant get in the single-file version:\\n\\n* Instant setup of your wiki on Node.js.\\n* Highly configurable builds, allowing you to publish different versions of your wiki -- a common use case is publishing some of your content on the web and keeping some of it private.\\n* Space-efficient backups and version history with Git.\\n\\nFull instructions for installing and initializing the tzk command-line tool can be found on Read the Docs|https://tzk.readthedocs.io/en/latest/.\\n\\nIf youre familiar with command-line tools like tzk, you can get a quick start by making sure you have Git, NPM, and Python 3.6 or greater installed, then running:\\n\\n```\\n$ pip install tzk\\n$ mkdir my_wiki_folder\\n$ cd my_wiki_folder\\n$ tzk init\\n$ tzk listen\\n```\\n\\nIf everything goes well, this will launch a web server and tell you what URL to enter into your web browser, and when you go there youll have your wiki waiting for you.\\n\\n\u003C/$details>\\n\\n\\n-------\\n\\nOnce you have a copy of tzk, open it up on your computer and get started with the following quick-start wizard!\\n\\n\u003Cdiv style\\\border: 1px solid gray; padding: 0.5rem;\\\>\\n\\n\u003C$tiddler tiddler{{$:/config/zettelkasten/GettingStartedWizardCurr}}>\\n\u003C\u003Cwizard-navbar>>\\n\u003C/$tiddler>\\n\\n\u003C$transclude tiddler{{$:/config/zettelkasten/GettingStartedWizardCurr}}/>\\n\\n\u003C\u003Cwizard-navbar>>\\n\\n\u003C/div>\},\$:/tzk/Macros/camel-wrap\:{\title\:\$:/tzk/Macros/camel-wrap\,\created\:\20231128025419053\,\creator\:\soren\,\description\:\Insert `\u003Cwbr>` tags into a string to suggest that the browser break long CamelCase strings at word boundaries rather than at random characters. Mostly used automatically when rendering titles.\,\modified\:\20251011162759896\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!-- \\nA problem with long CamelCase titles is that if theyre too long for their container, they break at any character. Wed prefer them to break at a word point.\\n\\n\u003Cwbr> is a “word break opportunity”. So if we call in to this macro with the current tiddler set to some CamelCase title when we want to display a neatly wrapping title, we can have the macro insert \u003Cwbr>s at each word.\\n\\nBased on https://heap.ch/blog/2016/01/19/camelwrap/.\\n-->\\n\\n\\\\define camelwrap_myreg() (a-z0-9)(A-Z)\\n\\\\define camelwrap_wbr() $1\u003Cwbr>$2\\n\\\\define camel-wrap(humpytext) \u003C$wikify name\\\mytext\\\ text{{{ \u003C__humpytext__>search-replace:g:regexp\u003Ccamelwrap_myreg>,\u003Ccamelwrap_wbr> }}} output\\\html\\\ mode\\\inline\\\>\u003C\u003Cmytext>>\u003C/$wikify>\},\$:/tzk/Macros/ff\:{\title\:\$:/tzk/Macros/ff\,\created\:\20210622002240940\,\creator\:\soren\,\description\:\Deprecated: Use the m2.ff function|$:/tzk/Functions/ff instead.\,\example\:\\u003C$list filter\u003C\u003Cff ViewerPublicLine>> variable_ emptyMessage\\\The viewer public line is off in this edition.\\\>The viewer public line is on in this edition. Transclude it here.\u003C/$list>\,\modified\:\20251011163408360\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define ff(tid) $:/config/zettelkasten/FeatureFlags/$tid$get{$:/config/sib/CurrentEditionPublicity} -no\},\$:/tzk/Macros/float-image\:{\title\:\$:/tzk/Macros/float-image\,\created\:\20210510222933926\,\creator\:\soren\,\description\:\Deprecated: Use the $m2.float widget.\,\example\:\\u003C\u003Cfloat-image \\\freezer-example.jpg\\\ width:200 side:left>> Text next to the float. \u003C\u003Cclarify>>\,\modified\:\20251011162832416\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define float-image(tiddler, width:\\\400\\\, side:\\\right\\\)\\n\\timg width$width$ class\\\$side$-float\\\ $tiddler$\\n\\\\end\},\$:/tzk/MediaRating/Display\:{\title\:\$:/tzk/MediaRating/Display\,\created\:\20210606221940244\,\creator\:\soren\,\description\:\Show the rating|MediaRating of the current source tiddler, if any. The status is editable in the private edition.\,\modified\:\20251011201530481\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All non-system tiddlers tagged `Source`. (Unlike the source details box, this doesnt go on sinks because I dont claim to be capable of rating my own work!)\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\function colorize-rating() alltiddlers+shadowsprefix$:/tzk/MediaRating/caption{!!rating}getcoloraddprefixcolor: addsuffix;\\n\\n\u003C% if m2.ffMediaRating %>\\n\u003C% if allcurrent!issystem %>\\n\u003C% if allcurrenttagSource %>\\n\\n\\t\u003Cdiv style\\\float: right; vertical-align: center;\\\>\\n\\t\\t\u003C% if m2.private %>\\n\\t\\t\\t\u003C$link to\\\MediaRating\\\>\\n\\t\\t\\t\\t\u003Cspan style{{{ functioncolorize-rating }}}>rating\u003C/span>\\n\\t\\t\\t\u003C/$link>: \\n\\t\\t\\t\u003C$select field\\\rating\\\ default\\\\\\>\\n\\t\\t\\t\\t\u003C$list filter\\\alltiddlers+shadowsprefix$:/tzk/MediaRatinghascaption!nsortstackorder\\\>\\n\\t\\t\\t\\t\\t\u003C$set name\\\itemColor\\\ value{{!!color}}>\\n\\t\\t\\t\\t\\t\\t\u003Coption style`color: $(itemColor)$;` value{{!!caption}}>{{!!caption}}\u003C/option>\\n\\t\\t\\t\\t\\t\u003C/$set>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/$select>\\n\\t\\t\u003C% endif %>\\n\\t\\t\u003C% if m2.public %>\\n\\t\\t\\t\u003C$list filter\\\allcurrenthasrating\\\>\\n\\t\\t\\t\\trating|MediaRating: \u003Cspan style{{{ functioncolorize-rating }}}>{{!!rating}}\u003C/span>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C% endif %>\\n\\t\u003C/div>\\n\\n\u003C% endif %>\\n\u003C% endif %>\\n\u003C% endif %>\},\$:/tzk/MediaRating/average\:{\title\:\$:/tzk/MediaRating/average\,\caption\:\average\,\color\:\#ffd500\,\created\:\20210606220650099\,\creator\:\soren\,\modified\:\20251011191937961\,\modifier\:\soren\,\section\:\main\,\stackorder\:\30\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The work is entertaining or useful in some way and is worth working through quickly if the subject matter / summary interests you (or maybe slowly if its primarily for entertainment purposes and this is more entertaining). It is not difficult to understand, unless perhaps you are unfamiliar with the subject, and there is little reason to come back to it again.\},\$:/tzk/MediaRating/classic\:{\title\:\$:/tzk/MediaRating/classic\,\caption\:\classic\,\color\:\gray\,\created\:\20210606230345519\,\creator\:\soren\,\modified\:\20251011191943961\,\modifier\:\soren\,\section\:\auxiliary\,\stackorder\:\3\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\I cannot, on my own subjective judgment at this time, countenance giving this work a rating of “good” or above, but because the work has stuck around for so long and is so well-known, I assume there must be something to it, so I compromise by assigning this status. I may come back to it later and see if I like it better.\},\$:/tzk/MediaRating/distinguished\:{\title\:\$:/tzk/MediaRating/distinguished\,\caption\:\distinguished\,\color\:\lightgreen\,\created\:\20210606223811463\,\creator\:\soren\,\modified\:\20251011191950847\,\modifier\:\soren\,\section\:\main\,\stackorder\:\35\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\These works are “average plus”: they may not quite rise to the level of providing significant insights on subjects of enduring interest needed to obtain a //good// rating, but they are of noticeably higher quality than their peers and are worth calling out as such. They may be somewhat more work to read or watch, have a particularly fine prose style or visual effect, have particularly enjoyable or beautiful subject matter, have a particularly high concentration of useful information, or some combination of these. They most often fall out of the “good” bracket by dint of having insufficient lasting importance (for instance, they talk about current issues in a way that will not be relevant in thirty years), or by covering an insufficient amount of insight-bearing territory. To a greater degree than other ratings, the distinction between //average// and //distinguished// is subjective.\},\$:/tzk/MediaRating/good\:{\title\:\$:/tzk/MediaRating/good\,\caption\:\good\,\color\:\green\,\created\:\20210606220541565\,\creator\:\soren\,\modified\:\20251011191956897\,\modifier\:\soren\,\section\:\main\,\stackorder\:\40\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\These works “convey to the reader significant insights about subjects of enduring interest to human beings.” They are somewhat challenging to process, and might be worth revisiting if you dont feel you picked everything up the first time, but you may be disappointed on returning to them. This is an Adler and van Doren term, and one must be careful about applying it: //good// is such a nondescript word that it is easy to accidentally apply it to works that should rather be termed //distinguished// in this model. Since it may be difficult to judge “enduring interest” for current topics, a work should in most cases not be labeled //good// if it was published in the last ten years; indeed, this may be overly liberal. (It can plainly be //distinguished// the day after publication, though.)\},\$:/tzk/MediaRating/great\:{\title\:\$:/tzk/MediaRating/great\,\caption\:\great\,\color\:\dodgerblue\,\created\:\20210606201123409\,\creator\:\soren\,\modified\:\20251011192004986\,\modifier\:\soren\,\section\:\main\,\stackorder\:\50\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\These works do everything that good ones do, and additionally they “grow with you”: they will always be worth revisiting, and every time you do so you will find new insights. When you put a great work back on the physical or virtual shelf, no matter how carefully you studied it, you have a sneaking suspicion that it has more to give – you havent fully understood it because its above your level and probably always will be, not because you didnt read or watch it closely enough. There are probably fewer than a thousand of these in the whole world (Adler and van Doren claim there are fewer than a hundred, but the definition seems too fuzzy and subjective for me to be that confident).\},\$:/tzk/MediaRating/irrational\:{\title\:\$:/tzk/MediaRating/irrational\,\caption\:\irrationally enjoyed\,\color\:\white\,\created\:\20210606220802580\,\creator\:\soren\,\modified\:\20251011192010001\,\modifier\:\soren\,\section\:\auxiliary\,\stackorder\:\5\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The work isnt //great// or //good// or maybe even //distinguished// by a traditional definition, but nevertheless I (and sometimes others) find it unexpectedly pleasurable and come back to it over and over again, with a tenacity and enjoyment that seems difficult to justify on the works merits.\},\$:/tzk/MediaRating/poor\:{\title\:\$:/tzk/MediaRating/poor\,\caption\:\poor\,\color\:\orangered\,\created\:\20210606220736962\,\creator\:\soren\,\modified\:\20251011192015645\,\modifier\:\soren\,\section\:\main\,\stackorder\:\10\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The work has insufficient merits to be worth your time unless you have somehow run out of other options.\},\$:/tzk/MediaRating/skimmable\:{\title\:\$:/tzk/MediaRating/skimmable\,\caption\:\skimmable\,\color\:\#ff6600\,\created\:\20210606220706034\,\creator\:\soren\,\modified\:\20251011192022877\,\modifier\:\soren\,\section\:\main\,\stackorder\:\20\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\The work contains some interesting ideas, but as a whole is not particularly worthwhile. You will want to skim over most of it or watch it on high speed, and you might prefer to read someone elses summary or select a different work that touches on the same ideas.\},\$:/tzk/Overrides/CodeMirrorPopupFix\:{\title\:\$:/tzk/Overrides/CodeMirrorPopupFix\,\text\:\/* Fix CodeMirror hints appearing behind the story river.\\n https://groups.google.com/g/tiddlywiki/c/wznyIhGJd9U */\\n\\n.CodeMirror-hints {\\n\\tz-index: 1000;\\n}\,\created\:\20210205231937423\,\creator\:\soren\,\modified\:\20251011191752407\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/tzk/Overrides/details-background-color\:{\title\:\$:/tzk/Overrides/details-background-color\,\created\:\20210920202013745\,\creator\:\soren\,\modified\:\20251011193458986\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure details-background-color() \u003C\u003Ccolour tiddler-info-tab-background>>\},\$:/tzk/Procedures/check-item\:{\title\:\$:/tzk/Procedures/check-item\,\created\:\20210626162736737\,\creator\:\soren\,\description\:\Create a single item on a persistent checklist. State for the checklist in a given tiddler is stored in a data tiddler called $:/checkify/TiddlerName.\,\example\:\\u003Cdiv class\\\checklist\\\>\u003C\u003Ccheck-item One>> \u003C\u003Ccheck-item Two>> \u003C\u003Ccheck-item Three id:3>>\u003C/div>\,\modified\:\20251011163555256\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\\\procedure check-item(text, id:\\\\\\)\\n\u003C$let\\n\\tcheckbox-index{{{ \u003Cid>!isblank ~\u003Ctext> }}}\\n\\ttiddler-key{{{ allcurrent!isdraft ~allcurrentgetdraft.of }}}\\n\\t>\\n\\t\u003C$checkbox\\n\\t\\ttiddler{{{ $:/checkify/addsuffix\u003Ctiddler-key> }}}\\n\\t\\tindex\u003C\u003Ccheckbox-index>>\\n\\t\\tchecked\\\yes\\\\\n\\t\\tunchecked\\\no\\\\\n\\t\\tdefault\\\no\\\\\n\\t> \\n\\t\\t\u003C\u003Ctext>>\\n\\t\u003C/$checkbox>\\n\u003C/$let>\\n\\\\end\},\$:/tzk/Procedures/clarify\:{\title\:\$:/tzk/Procedures/clarify\,\created\:\20210522021311753\,\creator\:\soren\,\description\:\Insert an empty div that clears any floats. Useful after large images, or to separate blockquotes using the `>` syntax.\,\example\:\\u003C\u003Cfloat-image \\\freezer-example.jpg\\\>>Text wrapping beside the float \u003C\u003Cclarify>>Text forced after the float by clarification.\,\modified\:\20251011163617029\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure clarify() \u003Cdiv class\\\clarify\\\/>\},\$:/tzk/Procedures/conference-session\:{\title\:\$:/tzk/Procedures/conference-session\,\created\:\20240718025806003\,\creator\:\soren\,\description\:\Create a stretchtext node for a session of a conference, placed in the conference or journal tiddler.\,\example\:\\u003C\u003Cconference-session ConnectingWithOurParts>>\,\modified\:\20251011164813892\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure conference-session(tiddler)\\n\\t\u003C$macrocall\\n\\t\\t$name\\\stretch-template\\\\\n\\t\\ttiddler\u003C\u003Ctiddler>>\\n\\t\\tsmallTemplate\\\$:/tzk/Templates/Topical/ConferenceSessionStretch\\\\\n\\t\\tlargeTemplate\\\$:/tzk/Templates/General/IdentityTemplate\\\\\n\\t/>\\n\\\\end conference-session\},\$:/tzk/Procedures/fnote\:{\title\:\$:/tzk/Procedures/fnote\,\created\:\20210719234454927\,\creator\:\soren\,\description\:\Create a footnote at the current location. Based on Refnotes (https://kookma.github.io/TW-Refnotes/), but doesnt use the plugin.\,\example\:\This is my body text.\u003C\u003Cfnote \\\This is my footnote.\\\>>\,\modified\:\20251011163646744\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure fnote(note)\\n\u003Cdiv class\\\refnotes-tooltip refnotes-footnote\\\>\u003Cdiv class\\\refnotes-tooltiptext\\\>\u003C\u003Cnote>>\u003C/div>\u003C/div>\\n\\\\end\},\$:/tzk/Procedures/jsub\:{\title\:\$:/tzk/Procedures/jsub\,\created\:\20230405171215676\,\creator\:\soren\,\description\:\Link a subtiddler of a journal tiddler in a stretchtext node, with the caption or title as the small text.\,\example\:\\u003C\u003Cjsub RemNoteFiasco>>\,\modified\:\20251011164838638\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure jsub(subpart)\\n\\t\u003C$macrocall\\n\\t\\t$name\\\stretch-template\\\\\n\\t\\ttiddler{{{ allcurrentisdraftthen{!!draft.of}else\u003CcurrentTiddler>addsuffix/addsuffix\u003Csubpart> }}}\\n\\t\\tsmallTemplate\\\$:/tzk/Templates/Topical/JournalSubtiddlerStretch\\\\\n\\t\\tlargeTemplate\\\$:/tzk/Templates/General/IdentityTemplate\\\\\n\\t/>\\n\\\\end\},\$:/tzk/Procedures/privateperson\:{\title\:\$:/tzk/Procedures/privateperson\,\created\:\20210522022034880\,\creator\:\soren\,\description\:\Show the provided string of initials, linking to the `PrivatePerson` tiddler. Ordinarily not used in the private Zettelkasten; names of people whose tiddlers are not public may be automatically replaced with calls to this macro by the build process for the public wiki.\,\example\:\\u003C\u003Cprivateperson \\\R.A.B.\\\>>\,\modified\:\20251011163729827\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure privateperson(initials) \u003C$link to\\\PrivatePerson\\\>\u003C\u003Cinitials>>\u003C/$link>\},\$:/tzk/Procedures/speaker\:{\title\:\$:/tzk/Procedures/speaker\,\created\:\20210522025359296\,\creator\:\soren\,\description\:\Create a line of dialogue. To be used inside a div with the `dialogue` class.\,\example\:\\u003Cdiv class\\\dialogue\\\>\u003C\u003Cspeaker \\\Mother\\\ \\\Did you look for cars before you ran across?\\\>>\u003C\u003Cspeaker Girl \\\Nope. I just ran!\\\>>\u003C/div>\,\modified\:\20251011163743872\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure speaker(name, txt) \u003C\u003Cname>>: \u003C\u003Ctxt>>\u003Cbr>\},\$:/tzk/Procedures/star-rating\:{\title\:\$:/tzk/Procedures/star-rating\,\created\:\20210817143607812\,\creator\:\soren\,\description\:\Show a rating out of 5 stars, with filled stars up until the argument and empty stars to fill out the total of 5.\,\example\:\\u003C\u003Cstar-rating 4>>\,\modified\:\20251011163810822\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\define open-star() \u003Ci class\\\far fa-star\\\/>\\n\\\\define filled-star() \u003Ci class\\\fa fa-star\\\/>\\n\\n\\\\procedure star-rating(stars)\\n\u003C$list filter\\\range\u003Cstars>\\\ variable_>\\n\\t\u003C\u003Cfilled-star>>\\n\u003C/$list>\\n\u003C$let remainder{{{ 5subtract\u003Cstars> }}}>\\n\\t\u003C$list filter\\\range\u003Cremainder>\\\ variable_>\\n\\t\\t\u003C\u003Copen-star>>\\n\\t\u003C/$list>\\n\u003C/$let>\\n\\\\end\},\$:/tzk/Procedures/subreddit\:{\title\:\$:/tzk/Procedures/subreddit\,\created\:\20210522021038565\,\creator\:\soren\,\description\:\Create a web link to a named subreddit, with the link text \\\/r/yoursubreddit\\\.\,\example\:\\u003C\u003Csubreddit TiddlyWiki5>>\,\modified\:\20251011163824016\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure subreddit(name)\\n\\t\u003C$m2.extlink\\n\\t\\turltemplate\\\https://reddit.com/r/$1$/\\\ \\n\\t\\tslotvalue\u003C\u003Cname>>\\n\\t\\ttext`/r/$(name)$`\\n\\t/>\\n\\\\end\},\$:/tzk/Procedures/summarize\:{\title\:\$:/tzk/Procedures/summarize\,\created\:\20230329151407581\,\creator\:\soren\,\description\:\Render a link to the specified /tiddler/, followed by its description (or another specified summary /field/)..\,\example\:\\u003C\u003Csummarize PeopleDontKnowWhatTheyWant>>\,\modified\:\20251011163834198\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure summarize(tiddler, field:\\\description\\\)\\n\\t\u003C$link to\u003C\u003Ctiddler>>/>: \\n\\t\u003C$wikify name\\\text\\\ text{{{ \u003Ctiddler>get\u003Cfield> }}}>\\n\\t\\t\u003C\u003Ctext>>\\n\\t\u003C/$wikify>\\n\\\\end\},\$:/tzk/RawMarkup/ClockTicker\:{\title\:\$:/tzk/RawMarkup/ClockTicker\,\created\:\20210627133302793\,\creator\:\soren\,\modified\:\20251011192525603\,\modifier\:\soren\,\tags\:\$:/tags/StartupAction/Browser\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure clock-ticker()\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/time/ticker\\\ text\u003C\u003Cnow UTC0hh0mm0ss>> />\\n\\t\u003C$action-setfield $tiddler\\\$:/temp/time/pomodoro-remaining\\\ text{{{ $:/temp/time/pomodoro-remaininggettextsubtract5 }}}/>\\n\\\\end clock-ticker\\n\u003C$action-timeout interval5000 actions\u003C\u003Cclock-ticker>> />\},\$:/tzk/RawMarkup/SplashScreen\:{\title\:\$:/tzk/RawMarkup/SplashScreen\,\created\:\20200605141146097\,\creator\:\soren\,\modified\:\20251011192628940\,\modifier\:\soren\,\tags\:\$:/tags/RawMarkupWikified/TopBody\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\import $:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of\\n\\\\rules only filteredtranscludeinline transcludeinline macrocallinline\\n\\n\u003C!-- Spinner mechanism shamelessly stolen from https://tiddlywiki.org. -->\\n\\n\u003Cdiv class\\\tc-remove-when-wiki-loaded\\\>\\n\u003Cstyle scoped>\\n\\n.tc-splash-text {\\n font-family: -apple-system, BlinkMacSystemFont, \\\Segoe UI\\\, Helvetica, Arial, sans-serif, \\\Apple Color Emoji\\\, \\\Segoe UI Emoji\\\, \\\Segoe UI Symbol\\\;\\n font-size: 16px;\\n text-rendering: optimizeLegibility;\\n -webkit-font-smoothing: antialiased;\\n\\tmargin: 20px auto 0;\\n\\twidth: 200px;\\n\\ttext-align: center;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-splash-text img {\\n\\twidth: 150px;\\n\\t\u003C\u003Cbox-shadow \\\2px 2px 10px rgba(0, 0, 0, 0.5)\\\>>\\n}\\n\\nhtml body.tc-body {\\n\\tbackground: \u003C\u003Ccolour page-background>>;\\n}\\n\\n/*\\nSpinner from https://github.com/tobiasahlin/SpinKit/ by Tobias Ahlin\\n\\nThe MIT License (MIT)\\n\\nCopyright (c) 2015 Tobias Ahlin\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of\\nthis software and associated documentation files (the \\\Software\\\), to deal in\\nthe Software without restriction, including without limitation the rights to\\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\\nthe Software, and to permit persons to whom the Software is furnished to do so,\\nsubject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all\\ncopies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n*/\\n\\n.tc-splash-spinner {\\n\\tmargin: 20px auto 0;\\n\\twidth: 70px;\\n\\ttext-align: center;\\n}\\n\\n.tc-splash-spinner > div {\\n\\twidth: 18px;\\n\\theight: 18px;\\n\\tborder-radius: 100%;\\n\\tdisplay: inline-block;\\n\\t-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;\\n\\tanimation: sk-bouncedelay 1.4s infinite ease-in-out both;\\n\\tbackground-color: #f88;\\n}\\n\\n.tc-splash-spinner .tc-splash-bounce-1 {\\n\\t-webkit-animation-delay: -0.32s;\\n\\tanimation-delay: -0.32s;\\n\\tbackground-color: #8f8;\\n}\\n\\n.tc-splash-spinner .tc-splash-bounce-2 {\\n\\t-webkit-animation-delay: -0.16s;\\n\\tanimation-delay: -0.16s;\\n\\tbackground-color: #88f;\\n}\\n\\n@-webkit-keyframes sk-bouncedelay {\\n\\t0%, 80%, 100% { -webkit-transform: scale(0) }\\n\\t40% { -webkit-transform: scale(1.0) }\\n}\\n\\n@keyframes sk-bouncedelay {\\n\\t0%, 80%, 100% { \\n\\t-webkit-transform: scale(0);\\n\\ttransform: scale(0);\\n\\t} 40% { \\n\\t-webkit-transform: scale(1.0);\\n\\ttransform: scale(1.0);\\n\\t}\\n}\\n\u003C/style>\\n\\n\u003Cdiv class\\\tc-splash-spinner\\\>\\n \u003Cdiv class\\\tc-splash-bounce-1\\\>\u003C/div>\\n \u003Cdiv class\\\tc-splash-bounce-2\\\>\u003C/div>\\n \u003Cdiv class\\\tc-splash-bounce-3\\\>\u003C/div>\\n\u003C/div>\\n\\n\u003Cdiv class\\\tc-splash-text\\\>\\n\\t{{$:/config/zettelkasten/SplashScreenMessage}}\\n\u003C/div>\\n\u003C/div>\},\$:/tzk/Reviewer/Dateops\:{\title\:\$:/tzk/Reviewer/Dateops\,\created\:\20201229225912046\,\creator\:\soren\,\modified\:\20251011191846913\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\define g(y,m,d,offset:\\\0\\\)\\n\u003C$set namem value{{{ \u003C__m__>add9remainder12 }}}>\\n\u003C$set namey value{{{ \u003Cm>divide10floornegateadd\u003C__y__> }}} >\\n\u003C$set namey4 value{{{ \u003Cy>divide4floor }}}>\\n\u003C$set namey100 value{{{ \u003Cy>divide100floor }}}>\\n\u003C$set namey400 value{{{ \u003Cy>divide400floor }}}>\\n\u003C$set namem306 value{{{ \u003Cm>multiply306add5divide10floor }}}>\\n\u003C$set nameresult value{{{ 365multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>add\u003Cm306>add$d$add$offset$subtract1 }}} >\\n\u003C\u003Cresult>>\\n\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\\n\\\\end\\n\\n\\n\\\\define d(g)\\n\u003C$set namedaysperyear value\\\365.2425\\\>\\n\u003C!-- y (10000*g + 14780)/3652425 -->\\n\u003C$set namey value{{{ 10000multiply\u003C__g__>add14780divide3652425floor }}}>\\n\u003C!-- ddd g - (365*y + y/4 - y/100 + y/400) -->\\n\u003C$set namey4 value{{{ \u003Cy>divide4floor }}}>\\n\u003C$set namey100 value{{{ \u003Cy>divide100floor }}}>\\n\u003C$set namey400 value{{{ \u003Cy>divide400floor }}}>\\n\u003C$set namedddtest value{{{ 365multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>negateadd\u003C__g__> }}} >\\n\u003C$set nameprioryear value{{{ \u003Cy>subtract1 }}} >\\n\u003C$set namey value{{{ \u003Cdddtest>prefix-then\u003Cprioryear> \u003Cdddtest>!prefix-then\u003Cy> }}} >\\n\u003C$set nameddd value{{{ 365multiply\u003Cy>add\u003Cy4>subtract\u003Cy100>add\u003Cy400>negateadd\u003C__g__> }}} >\\n\u003C!-- mi (100*ddd + 52)/3060 -->\\n\u003C$set namemi value{{{ 100multiply\u003Cddd>add52divide3060floor }}} >\\n\u003C!-- mm (mi + 2)%12 + 1 -->\\n\u003C$set namemm value{{{ \u003Cmi>add2remainder12add1 }}} >\\n\u003C!-- y y + (mi + 2)/12 -->\\n\u003C$set namey value{{{ \u003Cmi>add2divide12flooradd\u003Cy> }}} >\\n\u003C!-- dd ddd - (mi*306 + 5)/10 + 1 -->\\n\u003C$set namedd value{{{ \u003Cmi>multiply306add5divide10floornegateadd\u003Cddd>add1 }}} >\\n\u003C\u003Cy>>, \u003C\u003Cmm>>, \u003C\u003Cdd>> \u003Cbr/>\\n\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\u003C/$set>\\n\\\\end\\n\\n\\\\define daysfrom(y,m,d,o)\\n\u003C$wikify namefuture text\\\\u003C\u003Cg $y$ $m$ $d$ $o$>>\\\>\\n\u003C$macrocall $name\\\d\\\ g\u003C\u003Cfuture>>/>\\n\u003C/$wikify>\\n\\\\end\\n\\n\\\\define datestampFromOffset(y, m, d, o)\\n\u003C$wikify nameresult text\\\\u003C\u003Cdaysfrom $y$ $m$ $d$ $o$>>\\\>\\n\\t\u003C$vars\\n\\t\\tyear{{{ \u003Cresult>split,nth1trim }}}\\n\\t\\tmonth{{{ \u003Cresult>split,nth2trim }}}\\n\\t\\tday{{{ \u003Cresult>split,nth3trim }}}>\\n\\t\u003C$vars\\n\\t\\tpaddedmonth{{{ \u003Cmonth>addprefix0 }}}\\n\\t\\tpaddedday{{{ \u003Cday>addprefix0 }}}>\\n\\t\\t\u003C\u003Cyear>>\u003C$text text{{{ \u003Cmonth>minlength2else\u003Cpaddedmonth> }}}/>\u003C$text text{{{ \u003Cday>minlength2else\u003Cpaddedday> }}}/>1200\\n\\t\u003C/$vars>\\n\\t\u003C/$vars>\\n\\t\\n\u003C/$wikify>\\n\\\\end\\n\\n\\\\define daysFromDatestamp(datestamp, offset)\\n\\t\u003C$vars\\n\\t year{{{ \u003C__datestamp__>splitfirst4join }}}\\n\\t month{{{ \u003C__datestamp__>splitfirst6last2join }}}\\n\\t day{{{ \u003C__datestamp__>splitfirst8last2join }}}>\\n\\t\\t\u003C$macrocall $namedatestampFromOffset\\n\\t\\t\\ty\u003C\u003Cyear>> m\u003C\u003Cmonth>> d\u003C\u003Cday>> o\u003C\u003C__offset__>> />\\n \u003C/$vars>\\n\\\\end\\n\\n\\n\u003C!-- First 4 macros are from here: https://groups.google.com/g/tiddlywiki/c/y_GjM302u60/m/H0eGNUQCCgAJ -->\\n\},\$:/tzk/Reviewer/SchedulableTemplate\:{\title\:\$:/tzk/Reviewer/SchedulableTemplate\,\created\:\20210119015940853\,\creator\:\soren\,\description\:\Show buttons that exponentially postpone a tiddler from the reading inbox to a later date.\,\modified\:\20251011191858979\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers tagged \u003C\u003Ctag Source>> that are marked unread or partially read.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define rescheduleme()\\n\\t\u003C$macrocall $nameinbox-postpone ivlExpr{{$:/temp/NextReviewTime}}/>\\n\\\\end\\n\\n\u003C$list filter\\\allcurrenttagSourcereadstatusunread allcurrenttagSourcereadstatuspartial\\\>\\n\u003Cdiv class\\\schedule-next\\\>\\n\\n!!! ExpoPostpone\\n\\n\u003C$list filter\\\{!!due}!isblankfirst\\\ emptyMessage\\\Not scheduled for review.\\\ variable_>\\n\\tThis item has been postponed until \u003C$view field\\\due\\\ format\\\date\\\ template\\\YYYY-0MM-0DD\\\/>.\\n\u003C/$list>\u003Cbr>\\nBump to:\\n\u003Cdiv>\\n\u003C$button>\\n\\t\u003C$action-setfield due\\\\\\ ivl\\\\\\/>\\n\\tnow\\n\u003C/$button>\\n\u003C$button>\\n\\t\u003C$macrocall $nameinbox-postpone ivlExpr\\\1\\\/>\\n\\ttomorrow\\n\u003C/$button>\\n\u003C$button>\\n\\t\u003C$macrocall $nameinbox-postpone ivlExpr\\\5\\\/>\\n\\tin 5 days\\n\u003C/$button>\\n\u003C$button>\\n\\t\u003C$macrocall $nameinbox-postpone ivlExpr{{{ allcurrentgetivlelse5multiply2 }}}/>\\n\\tlater\\n\u003C/$button>\\n\u003C$button>\\n\\t\u003C$macrocall $nameinbox-postpone ivlExpr{{{ allcurrentgetivlelse5multiply3 }}}/>\\n\\teven later\\n\u003C/$button>\\n\u003C/div>\\n\u003C/div>\\n\\n\u003C/$list>\\n\\n\u003Cstyle>\\n.schedule-next {\\n\\tpadding: 5px;\\n\\tborder: 2px solid \u003C\u003Ccolor \\\tag-background\\\>>;\\n\\tmax-width: 500px;\\n\\ttext-align: center;\\n}\\n\\n.schedule-next h3 {\\n\\tmargin-top: 0.5em;\\n}\\n\u003C/style>\},\$:/tzk/Reviewer/SchedulerMacros\:{\title\:\$:/tzk/Reviewer/SchedulerMacros\,\created\:\20210119014145169\,\creator\:\soren\,\modified\:\20251011191907601\,\modifier\:\soren\,\tags\:\$:/tags/Macro\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define inbox-setdue(newIvl, newDueDate)\\n\\t\u003C$action-setfield\\n\\t\\tivl\u003C\u003C__newIvl__>>\\n\\t\\tdue{{{ \u003C__newDueDate__>trim }}}/>\\n\\\\end\\n\\n\\\\define getNextDueDate() \u003C$macrocall $namedaysFromDatestamp datestamp\u003C\u003Cnow YYYY0MM0DD>> offset\u003C\u003CnextInterval>>/>\\n\\n\\\\define daysFromToday(days) \u003C$macrocall $namedaysFromDatestamp datestamp\u003C\u003Cnow YYYY0MM0DD>> offset\u003C\u003C__days__>>/>\\n\\n\\\\define inbox-postpone(ivlExpr)\\n\\t\u003C$set namenextInterval value$ivlExpr$>\\n\\t\u003C$wikify namenextDueDate text\\\\u003C\u003CgetNextDueDate>>\\\ mode\\\inline\\\>\\n\\t\\t\u003C$macrocall $nameinbox-setdue\\n\\t\\t\\tnewIvl\u003C\u003CnextInterval>>\\n\\t\\t\\tnewDueDate\u003C\u003CnextDueDate>> />\\n\\t\u003C/$wikify>\\n\\t\u003C/$set>\\n\\\\end\\n\\n\\\\define read-status-selector()\\n\\t\u003C$select field\\\readstatus\\\ default\\\\\\>\\n\\t\\t\u003Coption value\\\unread\\\>unread\u003C/option>\\n\\t\\t\u003Coption value\\\partial\\\>partial\u003C/option>\\n\\t\\t\u003Coption value\\\read\\\>read\u003C/option>\\n\\t\\t\u003Coption value\\\reread\\\>reread\u003C/option>\\n\\t\u003C/$select>\\n\\\\end\},\$:/tzk/Reviewer/Tiddlers due for review\:{\title\:\$:/tzk/Reviewer/Tiddlers due for review\,\created\:\20210119013649056\,\creator\:\soren\,\list-before\:\$:/core/ui/PageTemplate/sidebar\,\modified\:\20251011191922037\,\modifier\:\soren\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define hasReviewsFilter(frag:\\\\\\) !days:due-1 days:due0 +tagSpacedRepetitionhasdue$frag$\\n\\nPlease retag this $:/tags/PageTemplate to use\\n\\n\u003C$list filter\\\allcurrent!isblank\\\>\\nTiddlers due for review:\\n\\n\u003Cul>\\n\\t\u003C$list filter\u003C\u003ChasReviewsFilter \\\sortdue\\\>> emptyMessage\\\Congratulations! Youre all caught up.\\\>\\n\\t\\t\u003Cli>\u003C$link to\u003C\u003CcurrentTiddler>>/> (due \u003C$view format\\\date\\\ template\\\YYYY-0MM-0DD\\\ field\\\due\\\/>)\u003C/li>\\n\\t\u003C/$list>\\n\u003C/ul>\\n\u003C/$list>\\n\\n\u003C$list filter\\\allcurrentthenelsedummy!isblank\\\>\\n\u003Cdiv class\\\review-notification\\\>\\n\u003C$list filter\u003C\u003ChasReviewsFilter \\\first\\\>>>\\n\\tYou have tiddlers due for review.\\n\\t\u003C$link to\\\$:/tzk/Reviewer/Tiddlers due for review\\\>Click here\u003C/$link> to see them.\\n\u003C/$list>\\n\u003C/div>\\n\\n\u003Cstyle>\\n.review-notification {\\n\\ttext-align: center;\\n\\tbackground-color: \u003C\u003Ccolor message-background>>;\\n\\twidth: 50%;\\n\\tmargin: auto;\\n}\\n\u003C/style>\\n\u003C/$list>\},\$:/tzk/Search/TypeSearch\:{\title\:\$:/tzk/Search/TypeSearch\,\caption\:\Types\,\created\:\20240528200914205\,\creator\:\soren\,\first-search-filter\:\!issystemsearch:title\u003CuserInput>regexp:tags\u003CtypeRegexp>sorttitlelimit250\,\list-before\:\$:/sib/Search/Locator\,\modified\:\20251011191826597\,\modifier\:\soren\,\second-search-filter\:\!issystemsearch\u003CuserInput>regexp:tags\u003CtypeRegexp>sorttitlelimit250\,\tags\:\$:/tags/SearchResults\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\define state-tiddler() $:/temp/MeSearchState\\n\\\\define type-shortlist() Idea PAO Place Source Date Journal\\n\\n\\\\define type-check(fieldName)\\n\\t\u003C$checkbox\\n\\t\\ttiddler\u003C\u003Cstate-tiddler>>\\n\\t\\tlistField\\\text\\\\\n\\t\\tchecked\u003C\u003C__fieldName__>>\\n\\t>\\n\\t\\t\u003C\u003C__fieldName__>>\\n\\t\u003C/$checkbox>\\n\\\\end\\n\\n\\\\define all-full-action() \u003C$action-listops $tiddler\u003C\u003Cstate-tiddler>> $field\\\text\\\ $filter\\\color#ff0000istag\\\ />\\n\\\\define all-minimal-action() \u003C$action-setfield $tiddler\u003C\u003Cstate-tiddler>> text\u003C\u003Ctype-shortlist>> />\\n\\\\define none-action() \u003C$action-setfield $tiddler\u003C\u003Cstate-tiddler>> text\\\\\\ />\\n\\n\\\\define searchResultList()\\n\\n\\t \u003C% if \u003Cstate-tiddler>getexpandedmatchyes %>\u003C$button actions\u003C\u003Call-full-action>>>All\u003C/$button>\u003C% else %>\u003C$button actions\u003C\u003Call-minimal-action>>>All\u003C/$button>\u003C% endif %> \u003C$button actions\u003C\u003Cnone-action>>>None\u003C/$button> \\n\\t\u003C% if \u003Cstate-tiddler>getexpandedmatchyes %>\\n\\t\\t\u003C$button\\n\\t\\t\\tsetTitle\u003C\u003Cstate-tiddler>>\\n\\t\\t\\tsetFieldexpanded\\n\\t\\t\\tsetTo\\\no\\\\\n\\t\\t>Less\u003C/$button>\\n\\t\u003C% else %>\\n\\t\\t\u003C$button\\n\\t\\t\\tsetTitle\u003C\u003Cstate-tiddler>>\\n\\t\\t\\tsetFieldexpanded\\n\\t\\t\\tsetTo\\\yes\\\\\n\\t\\t>More\u003C/$button>\\n\\t\u003C% endif %>\\n\\t\u003Cbr>\\n\\t\u003C% if \u003Cstate-tiddler>getexpandedmatchyes %>\\n\\t\\t\u003Cdiv class\\\sib-search-type-checkboxes\\\>\\n\\t\\t\\t\u003C$list filter\\\color#ff0000istag\\\>\\n\\t\\t\\t\\t\u003Cdiv>\\n\\t\\t\\t\\t\\t\u003C$macrocall\\n\\t\\t\\t\\t\\t\\t$name\\\type-check\\\\\n\\t\\t\\t\\t\\t\\tfieldName\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t\\t\\t/>\\n\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/div>\\n\\t\u003C% else %>\\n\\t\\t\u003Cdiv class\\\sib-search-type-checkboxes\\\>\\n\\t\\t\\t\u003C$list filter\u003C\u003Ctype-shortlist>>>\\n\\t\\t\\t\\t\u003C$macrocall $name\\\type-check\\\ fieldName\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\\t \\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/div>\\n\\t\u003C% endif %>\\n\\n\\t//\u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>//\\n\\n\\t\u003C% if \u003CuserInput>minlength1 %>\\n\\n\\t\\t\u003C$let typeRegexp{{{ \u003Cstate-tiddler>gettextenlist-input +addprefix\\\\baddsuffix\\\\bjoin| }}}>\\n\\t\\t\\t\u003C$list filter{{{ \u003CconfigTiddler>getfirst-search-filter }}}>\\n\\t\\t\\t\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-primaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\\n\\t\\t\\t\u003C$transclude tiddler\\\$:/tzk/Search/TypeSearchItemTemplate\\\/>\\n\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$let>\\n\\n\\t\u003C% endif %>\\n\\n\\t//\u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>//\\n\\n\\t\u003C% if \u003CuserInput>minlength1 %>\\n\\t\\n\\t\\t\u003C$let typeRegexp{{{ \u003Cstate-tiddler>gettextenlist-input +addprefix\\\\baddsuffix\\\\bjoin| }}}>\\n\\t\\t\\t\u003C$list filter{{{ \u003CconfigTiddler>getsecond-search-filter }}}>\\n\\t\\t\\t\u003Cspan class{{{\u003CcurrentTiddler>addsuffix-secondaryList -\u003CsearchListState>gettext +thenelsetc-list-item-selected }}}>\\n\\t\\t\\t\u003C$transclude tiddler\\\$:/tzk/Search/TypeSearchItemTemplate\\\/>\\n\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/$let>\\n\\t\\t\\n\\t\u003C% endif %>\\n\\t\\n\\n\\\\end\\n\\n\u003C\u003CsearchResultList>>\\n\\n\\n\u003Cstyle>\\n.sib-search-type-checkboxes {\\n\\tpadding-top: 2px;\\n\\tpadding-left: 0.5em;\\n\\tfont-size: 80%;\\n}\\n\\n/*\\n.tc-block-dropdown.tc-search-drop-down a {\\n\\tdisplay: inline-block;\\n}\\n*/\\n\u003C/style>\},\$:/tzk/Search/TypeSearchItemTemplate\:{\title\:\$:/tzk/Search/TypeSearchItemTemplate\,\created\:\20240528220838333\,\creator\:\soren\,\modified\:\20251011191826576\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\u003Cdiv class\\\tc-menu-list-item\\\>\\n\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\\n\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\u003Cdiv style\\\font-size: 80%; padding-left: 0.5em; float: right;\\\>\\n\\t\\t\\t\u003C$list filter\\\allcurrenttagscolor#ff0000\\\>\\n\\t\\t\\t\\t\u003C$macrocall $name\\\tag-pill\\\ tag\u003C\u003CcurrentTiddler>> />\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/div>\\n\\t\u003C/$link>\\n\u003C/div>\},\$:/tzk/SideBar/Explore/Bibliographies\:{\title\:\$:/tzk/SideBar/Explore/Bibliographies\,\caption\:\Bibliographies\,\created\:\20200913180810431\,\creator\:\soren\,\modified\:\20251011162532709\,\modifier\:\soren\,\tags\:\$:/tags/MoreSideBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cdiv class\\\sib-tab-description\\\>\\n\\n\u003C/div>\\n\\nRecently Read|RecentlyRead\u003Cbr>\\nBlogroll|Blogroll\u003Cbr>\\n\u003C$list filter\\\tagBibliography!hasdraft.of\\\>\\n\\t\u003C$link to{{!!title}}>{{!!bibliography}}\u003C/$link>\u003Cbr>\\n\u003C/$list>\\n\\n\u003Cstyle>\\n.sib-tab-description {\\n\\tfont-style: italic;\\n\\tmargin-left: 2em;\\n\\tmargin-right: 2em;\\n\\tmargin-bottom: 2ex;\\n}\\n\u003C/style>\},\$:/tzk/SideBar/Explore\:{\title\:\$:/tzk/SideBar/Explore\,\caption\:\Explore\,\created\:\20200913180105683\,\creator\:\soren\,\description\:\Curated public navigation menu for those less familiar with TiddlyWiki.\,\extras\:\$:/core/ui/MoreSideBar/Tags $:/core/ui/MoreSideBar/Recent $:/tzk/SideBar/Explore/Bibliographies $:/core/ui/MoreSideBar/All $:/core/ui/MoreSideBar/Explorer\,\modified\:\20251011162632303\,\modifier\:\soren\,\tags\:\$:/tags/SideBar\,\type\:\text/vnd.tiddlywiki\,\text\:\//To learn about navigation options, visit the PublicHomepage.//\\n\\n\u003Cdiv class\\\tc-more-sidebar\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList\\\enlist{$:/tzk/SideBar/Explore!!extras}\\\ default{{$:/config/DefaultMoreSidebarTab}} state\\\$:/state/tab/moresidebar\\\ class\\\tc-vertical tc-sidebar-tabs-more\\\ />\\n\u003C/div>\},\$:/tzk/SideBar/Journal\:{\title\:\$:/tzk/SideBar/Journal\,\caption\:\Journal\,\created\:\20230830210720848\,\creator\:\soren\,\modified\:\20251011162428476\,\modifier\:\soren\,\tags\:\$:/tags/MoreSideBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!-- TODO: Split into years/months? -->\\n\\n\\\\define day-journal-regexp() ^0-9{4}-0-9{2}-0-9{2} A-Za-z{2}\\n\\nToday: \u003C$link to\u003C\u003Cnow \\\YYYY-0MM-0DD ddd\\\>>/>\\n\\n\u003C$let theYear\u003C\u003Cnow YYYY>> theMonth\u003C\u003Cnow MM>>>\\n\\t\u003C$macrocall $namecalendar year\u003C\u003CtheYear>> month{{{ \u003CtheMonth>trim:prefix0}}} opts\\\journals\\\ />\\n\u003C/$let>\\n\\nMore|JournalCalendar\\n\\n----\\n\\n\u003Cdl>\\n\\t\u003C$list filter\\\tagJournal!sortregexp:title\u003Cday-journal-regexp>\\\>\\n\\t\\t\u003Cdt>\u003C$link/>\u003C/dt>\\n\\t\\t\u003Cdd>{{!!description}}\u003C/dd>\\n\\t\u003C/$list>\\n\u003C/dl>\},\$:/tzk/SideBar/Write/Stub\:{\title\:\$:/tzk/SideBar/Write/Stub\,\caption\:\Stubs\,\created\:\20200516155336361\,\creator\:\soren\,\list-after\:\$:/core/ui/MoreSideBar/Missing\,\modified\:\20251011162539592\,\modifier\:\soren\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\tagStubsort -$:/TagSaver\\\ emptyMessage\\\No stubs right now! Youre awesome!\\\>\\n\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003Cbr/>\\n\u003C/$list>\\n\},\$:/tzk/SideBar/Write\:{\title\:\$:/tzk/SideBar/Write\,\caption\:\Write\,\created\:\20201203015757977\,\creator\:\soren\,\description\:\When you have some time to work on your Zettelkasten but dont have a particular task in mind, come here to see what needs doing.\,\list\:\$:/tzk/SideBar/Write/Stub $:/core/ui/MoreSideBar/Missing NeedsAttention NeedsExcision TODO OpenQuestion $:/tzk/Tools/Tray\,\modified\:\20251011162539596\,\modifier\:\soren\,\tags\:\$:/tags/SideBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cdiv class\\\tc-more-sidebar\\\>\\n\u003C$macrocall $name\\\tabs\\\ tabsList{{$:/tzk/SideBar/Write!!list}} default\\\$:/tzk/SideBar/Write/Stub\\\ state\\\$:/state/tab/writesidebar\\\ class\\\tc-vertical tc-sidebar-tabs-more\\\ />\\n\u003C/div>\},\$:/tzk/Snippets/Example/prefix\:{\title\:\$:/tzk/Snippets/Example/prefix\,\created\:\20250211045610890\,\creator\:\soren\,\modified\:\20251011162338664\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.x number\\\1\\\>\\n\},\$:/tzk/Snippets/Example/suffix\:{\title\:\$:/tzk/Snippets/Example/suffix\,\created\:\20250211045625744\,\creator\:\soren\,\modified\:\20251011162344349\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\n\u003C/$m2.x>\},\$:/tzk/Snippets/Example\:{\title\:\$:/tzk/Snippets/Example\,\caption\:\M2 example\,\created\:\20250211045514079\,\creator\:\soren\,\modified\:\20251011162333186\,\modifier\:\soren\,\tags\:\$:/tags/TextEditor/Snippet\,\type\:\text/vnd.tiddlywiki\},\$:/tzk/Snippets/TiddlyRememberDetailsWidget\:{\title\:\$:/tzk/Snippets/TiddlyRememberDetailsWidget\,\caption\:\~TiddlyRemember collapsible\,\created\:\20210307213447524\,\creator\:\soren\,\modified\:\20251011162353735\,\modifier\:\soren\,\tags\:\$:/tags/TextEditor/Snippet\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$details summary\\\Flashcards\\\>\\n\\n\\n\\n\u003C/$details>\},\$:/tzk/StorySaver/Saver\:{\title\:\$:/tzk/StorySaver/Saver\,\created\:\20201126014757319\,\creator\:\soren\,\modified\:\20251011165219120\,\modifier\:\soren\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!-- Eric Shulman, https://groups.google.com/g/tiddlywiki/c/2WWN0Lf0G-E, alt. -->\\n\\n\u003C$set namesavedStoryTag value\\\$:/tzk/StorySaver/SavedStory\\\>\\n\u003C$set namesavedStoryPrefix value\\\$:/tzk/StorySaver/saved/\\\>\\n\u003C$button popup\\\$:/state/popup/savestory\\\> {{$:/core/images/save-button}} save story \u003C/$button>\\n\u003C$reveal type\\\popup\\\ state\\\$:/state/popup/savestory\\\ class\\\tc-drop-down tc-popup-keep\\\ style\\\min-width:auto;padding:0.5em;\\\>\\n Enter a new story name:\u003Cbr>\\n \u003C$edit-text tiddler\\\$:/state/popup/savestory\\\ field\\\storyname\\\ />\u003Cbr>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>limit1\\\>\\n or, select an existing story:\u003Cbr>\\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\\n \u003C$select tiddler\\\$:/state/popup/savestory\\\ field\\\storyname\\\ size\\\5\\\ class\\\savedStoryList\\\>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>\\\>\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\\n \u003C/$select>\\n \u003C/$list>\\n \u003C$button style\\\text-align:center;\\\> save\\n \u003C$action-setfield $tiddler{{{ {$:/state/popup/savestory!!storyname}addprefix\u003CsavedStoryPrefix> }}} list{{$:/StoryList!!list}} tags\u003C\u003CsavedStoryTag>> />\\n \u003C$action-deletetiddler $tiddler\\\$:/state/popup/savestory\\\ />\\n \u003C/$button>\\n\u003C/$reveal>\\n\u003C$button popup\\\$:/state/popup/loadstory\\\> {{$:/core/images/storyview-classic}} load story \u003C/$button>\\n\u003C$reveal type\\\popup\\\ state\\\$:/state/popup/loadstory\\\ class\\\tc-drop-down tc-popup-keep\\\ style\\\min-width:auto;padding:0.5em;\\\>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>limit1\\\ emptyMessage\\\no saved stories\\\>\\n select an existing story:\u003Cbr>\\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\\n \u003C$select tiddler\\\$:/state/popup/loadstory\\\ field\\\storyname\\\ size\\\5\\\ class\\\savedStoryList\\\>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>\\\>\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\\n \u003C/$select>\\n \u003C/$list>\\n \u003C$button style\\\text-align:center;\\\> load\\n \u003C$action-setfield $tiddler\\\$:/StoryList\\\ list{{{ {$:/state/popup/loadstory!!storyname}addprefix\u003CsavedStoryPrefix>getlist }}} />\\n \u003C$action-deletetiddler $tiddler\\\$:/state/popup/loadstory\\\ />\\n \u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$button popup\\\$:/state/popup/exportstory\\\> {{$:/core/images/export-button}} export story \u003C/$button>\\n\u003C$reveal type\\\popup\\\ state\\\$:/state/popup/exportstory\\\ class\\\tc-drop-down tc-popup-keep\\\ style\\\min-width:auto;padding:0.5em;\\\>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>limit1\\\ emptyMessage\\\no saved stories\\\>\\n select an existing story:\u003Cbr>\\n \u003Cstyle> .savedStoryList { width:100%; } \u003C/style>\\n \u003C$select tiddler\\\$:/state/popup/exportstory\\\ field\\\storyname\\\ size\\\5\\\ class\\\savedStoryList\\\>\\n \u003C$list filter\\\tag\u003CsavedStoryTag>removeprefix\u003CsavedStoryPrefix>\\\>\u003Coption>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\\n \u003C/$select>\\n \u003C/$list>\\n\\t \u003C$macrocall $name\\\exportButton\\\ exportFilter{{{ {$:/state/popup/exportstory!!storyname}addprefix\u003CsavedStoryPrefix>getlist }}} lingoBase\\\$:/language/Buttons/ExportTiddlers/\\\/>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/$set>\},\$:/tzk/StorySaver/saved/KEEPER DATING\:{\title\:\$:/tzk/StorySaver/saved/KEEPER DATING\,\created\:\20250307040212777\,\creator\:\soren\,\list\:\TheGoodWeird CommunityIWant WeirdnessAlpha UniversalValues LifeValues LifePartnerSearch MyIdealPartner MySexualOrientation MyGender RomanticRelationshipsByStage Dating WhoImAttractedTo DatingStruggles\,\modified\:\20251011165116134\,\modifier\:\soren\,\tags\:\$:/sib/StorySaver/SavedStory $:/tzk/StorySaver/SavedStory\,\type\:\text/vnd.tiddlywiki\},\$:/tzk/Templates/Automatic/CheckpointList\:{\title\:\$:/tzk/Templates/Automatic/CheckpointList\,\created\:\20230727200534052\,\creator\:\soren\,\modified\:\20251011164104834\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define expand-checkpoints() \u003C$action-setfield $tiddler\\\$:/temp/ShowCheckpoints\\\ $index\u003C\u003CcurrentTiddler>> $value\\\yes\\\ />\\n\\\\define contract-checkpoints() \u003C$action-setfield $tiddler\\\$:/temp/ShowCheckpoints\\\ $index\u003C\u003CcurrentTiddler>> $value\\\no\\\ />\\n\\n\u003C$let checkpoint-prefix{{{ $:/checkpoints/addsuffix\u003CcurrentTiddler>addsuffix/ }}}>\\n\\t\u003C$list filter\\\prefix\u003Ccheckpoint-prefix>first\\\ variable_>\\n\\t\\t\u003Cdiv class\\\checkpoint-list\\\>\\n\\t\\t\\t\u003C$reveal stateTitle\\\$:/temp/ShowCheckpoints\\\ stateIndex\u003C\u003CcurrentTiddler>> type\\\nomatch\\\ text\\\yes\\\>\\n\\t\\t\\t\\t\u003Cdiv class\\\checkpoint-message\\\>\\n\\t\\t\\t\\t\\t\u003C$let num-checkpoints{{{ prefix\u003Ccheckpoint-prefix>count }}}>\\n\\t\\t\\t\\t\\t\\t\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ actions\u003C\u003Cexpand-checkpoints>>>\\n\\t\\t\\t\\t\\t\\t\\t{{$:/core/images/right-arrow}} Previous checkpoints\\n\\t\\t\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\\t\\t(\u003C\u003Cnum-checkpoints>>)\\n\\t\\t\\t\\t\\t\u003C/$let>\\n\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C/$reveal>\\n\\t\\t\\t\u003C$reveal stateTitle\\\$:/temp/ShowCheckpoints\\\ stateIndex\u003C\u003CcurrentTiddler>> type\\\match\\\ text\\\yes\\\>\\n\\t\\t\\t\\t\u003Cdiv class\\\checkpoint-message\\\>\\n\\t\\t\\t\\t\\t\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ actions\u003C\u003Ccontract-checkpoints>>>\\n\\t\\t\\t\\t\\t\\t{{$:/core/images/down-arrow}} Previous checkpoints of this tiddler:\\n\\t\\t\\t\\t\\t\u003C/$button>\u003Cbr> \\n\\t\\t\\t\\t\u003C/div>\\n\\t\\t\\t\\t\u003Col>\\n\\t\\t\\t\\t\\t\u003C$list filter\\\prefix\u003Ccheckpoint-prefix>!nsort\\\>\\n\\t\\t\\t\\t\\t\\t\u003C$let timestamp{{{ allcurrentsplit/last }}}>\\n\\t\\t\\t\\t\\t\\t\\t\u003Cli>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C\u003Ctimestamp>>\u003C/$link>: {{!!checkpoint-message}}\\n\\t\\t\\t\\t\\t\\t\\t\u003C/li>\\n\\t\\t\\t\\t\\t\\t\u003C/$let>\\n\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C/ol>\\n\\t\\t\\t\u003C/$reveal>\\n\\t\\t\u003C/div>\\n\\t\u003C/$list>\\n\u003C/$let>\\n\\n\u003Cstyle>\\n.checkpoint-list {\\n\\t/* background-color: \u003C\u003Ccolor wikilist-background>>; */\\n\\tpadding: 1em;\\n\\t/* width: 80%; */\\n\\tmargin: auto;\\n}\\n\\n.checkpoint-list .checkpoint-message {\\n\\ttext-align: center;\\n}\\n\\n.checkpoint-list ol li {\\n\\tlist-style-type: none;\\n\\t/* display: inline-block; */\\n}\\n\u003C/style>\},\$:/tzk/Templates/Automatic/Clock\:{\title\:\$:/tzk/Templates/Automatic/Clock\,\created\:\20210627025415569\,\creator\:\soren\,\modified\:\20251011164111868\,\modifier\:\soren\,\tags\:\$:/tags/TopRightBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure reset-pomodoro() \u003C$action-setfield $tiddler\\\$:/temp/time/pomodoro-remaining\\\ text\\\1500\\\/>\\n\\\\procedure introspect-pomodoro()\\n\\t\u003C$let \\n\\t\\t\\tminutes{{{ {$:/temp/time/pomodoro-remaining}divide60floor }}}\\n\\t\\t\\tseconds{{{ {$:/temp/time/pomodoro-remaining}remainder60 }}}\\n\\t\\t\\tzeroedMinutes{{{ \u003Cminutes>addprefix0 }}}\\n\\t\\t\\tzeroedSeconds{{{ \u003Cseconds>addprefix0 }}}>\\n\\t\\t\u003C$text text{{{ \u003Cminutes>lengthmatch1then\u003CzeroedMinutes>else\u003Cminutes> }}}/>:\u003C$text text{{{ \u003Cseconds>lengthmatch1then\u003CzeroedSeconds>else\u003Cseconds> }}}/>\\n\\t\u003C/$let>\\n\\\\end\\n\\n\u003C% if m2.ffClock %>\\n\\t\u003C$let ticker{{$:/temp/time/ticker}}>\\n\\t\\t\u003Cdiv class\\\sib-clock\\\>\\n\\t\\t\\t\u003Cdiv class\\\sib-clock-item\\\>\u003C\u003Cnow \\\0hh12:0mm AM\\\>>\u003C/div>\\n\\t\\t\\t\u003Cdiv class\\\sib-clock-item\\\>\\n\\t\\t\\t\\t\u003C$button\\n\\t\\t\\t\\t\\tactions\u003C\u003Creset-pomodoro>>\\n\\t\\t\\t\\t\\tclass\\\tc-tiddlylink tc-btn-invisible\\\\\n\\t\\t\\t\\t\\ttooltip\\\Reset pomodoro to 25 minutes\\\\\n\\t\\t\\t\\t>\\n\\t\\t\\t\\t\\t\u003Ci class\\\fa fa-stopwatch\\\/>\\n\\t\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\t\u003C% if {$:/temp/time/pomodoro-remaining}compare:number:gt0 %>\\n\\t\\t\\t\\t\\t\u003C\u003Cintrospect-pomodoro>>\\n\\t\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\t\\t done\\n\\t\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C/$let>\\n\u003C% endif %>\\n\\n\u003Cstyle>\\ndiv.sib-clock {\\n\\tbackground-color: \u003C\u003Ccolor tiddler-background>>;\\n\\tpadding: 5px;\\n\\twidth: 5rem;\\n}\\n\\ndiv.sib-clock-item {\\n\\ttext-align: center;\\n}\\n\\ndiv.sib-clock-item button {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\u003C/style>\},\$:/tzk/Templates/Automatic/FrozenTiddlerEditWarning\:{\title\:\$:/tzk/Templates/Automatic/FrozenTiddlerEditWarning\,\created\:\20230407030211378\,\creator\:\soren\,\modified\:\20251011164140500\,\modifier\:\soren\,\tags\:\$:/tags/EditTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrenttagFrozen\\\>\\n\u003Cspan style\\\color: gray; margin-left: 0.25em;\\\>\u003Ci class\\\fas fa-icicles\\\/> This tiddler is frozen. Edits should be limited to links, metadata, and copyedits.\u003C/span>\\n\u003C/$list>\},\$:/tzk/Templates/Automatic/JournalNavigation\:{\title\:\$:/tzk/Templates/Automatic/JournalNavigation\,\created\:\20230405164752085\,\creator\:\soren\,\description\:\Show the previous and next journal entries.\,\modified\:\20251011164830843\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers tagged \u003C\u003Ctag Journal>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrenttagJournal\\\>\\n\\n\u003C$vars\\n previousEntry{{{ !issystemtagJournalsortbefore\u003CcurrentTiddler> }}}\\n nextEntry{{{ !issystemtagJournalsortafter\u003CcurrentTiddler> }}}>\\n\\t\\n\u003Cdiv style\\\display: flex; justify-content: space-between;\\\>\\n\\t\u003Cdiv style\\\display: inline-block;\\\>\\n\\t\\t« Previous: \u003C$link to\u003C\u003CpreviousEntry>>/>\\n\\t\u003C/div>\\n\\t\u003Cdiv style\\\display: inline-block;\\\>\\n\\t\\tNext: \u003C$link to\u003C\u003CnextEntry>>/> »\\n\\t\u003C/div>\\n\u003C/div>\\n\\n\u003C/$vars>\\n\\n{{||$:/tzk/Templates/Topical/JournalPersonPlaceExplorer}}\\n\\n\u003C/$list>\},\$:/tzk/Templates/Automatic/MacroProcedureFunctionWidgetDescription\:{\title\:\$:/tzk/Templates/Automatic/MacroProcedureFunctionWidgetDescription\,\created\:\20210522021355703\,\creator\:\soren\,\description\:\Provide a summary of the purpose, usage, and definition of the global macro defined in the current tiddler.\,\modified\:\20251011164215648\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers within the $:/sib/Macros namespace that are tagged \u003C\u003Ctag $:/tags/Macro>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C% if allcurrentprefix$:/sib/Macros/ allcurrentprefix$:/sib/Procedures/ allcurrentprefix$:/sib/Functions/ allcurrentprefix$:/sib/Widgets allcurrentprefix$:/tzk/Macros/ allcurrentprefix$:/tzk/Procedures/ allcurrentprefix$:/tzk/Functions/ allcurrentprefix$:/tzk/Widgets %>\\n\\n!! \u003Ccode>\u003C$text text{{{ allcurrentsplit/last }}}/>\u003C/code>\\n\\n; Purpose\\n: {{!!description}}\\n\\n; Example\\n: \u003Cpre>\u003Ccode>\u003C$view field\\\example\\\/>\u003C/code>\u003C/pre>\\n: {{!!example}}\\n\\n; Definition\\n: \u003C$codeblock code{{{ allcurrentgettext }}}/>\\n\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/MissingTiddlerCreationNotification\:{\title\:\$:/tzk/Templates/Automatic/MissingTiddlerCreationNotification\,\created\:\20201204132021892\,\creator\:\soren\,\modified\:\20251011164246554\,\modifier\:\soren\,\tags\:\$:/tags/EditTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrentgetdraft.ofprefixNew \\\ variable\\\draftof\\\>\\n \u003C$list filter\\\allcurrentgetdraft.titlebacklinksfirst\\\ variable_>\\n Creating missing tiddler \u003C$link to{{!!draft.title}}/>. The following tiddlers will link here when you save:\\n \u003C\u003Clist-links \\\allcurrentgetdraft.titlebacklinks\\\>>\\n\\t\u003C/$list>\\n\u003C/$list>\\n\},\$:/tzk/Templates/Automatic/MissingTiddlerQuickCreate\:{\title\:\$:/tzk/Templates/Automatic/MissingTiddlerQuickCreate\,\created\:\20230131043004421\,\creator\:\soren\,\description\:\Show options to quickly create an empty tiddler with a given tag from a missing title.\,\modified\:\20251011202250997\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All missing tiddlers.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define new-item(tag) \u003C$action-createtiddler $basetitle\u003C\u003CcurrentTiddler>> tags\\\\\\\\\$tag$\\\\\\\\\/>\\n\\n\\\\define stub-type(type) \u003C$button class\\\tc-btn-invisible\\\ actions\u003C\u003Cnew-item \\\\\\\\\$type$\\\\\\\\\>>>\u003C\u003Ctag-pill \\\\\\\\\$type$\\\\\\\\\>>\u003C/$button>\\n\\n\u003C$list filter\\\allcurrent!isshadowismissing\\\>\\n\\tCreate stub:\\n\\t\u003C\u003Cstub-type PAO>>\\n\\t\u003C\u003Cstub-type Place>>\\n\u003C/$list>\\n\},\$:/tzk/Templates/Automatic/OpenTopBar\:{\title\:\$:/tzk/Templates/Automatic/OpenTopBar\,\created\:\20210626221212233\,\creator\:\soren\,\modified\:\20251011164359855\,\modifier\:\soren\,\tags\:\$:/tags/TopLeftBar\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C% if m2.ffOpenTopBar %>\\n\\t\u003Cdiv class\\\sib-quick-tiddler-jump\\\>\\n\\t\\t\u003C\u003Clist-links-draggable \\\$:/StoryList\\\>>\\n\\t\u003C/div>\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/PrivateChunkParentNotice\:{\title\:\$:/tzk/Templates/Automatic/PrivateChunkParentNotice\,\created\:\20200516175612822\,\creator\:\soren\,\description\:\Show a notice that this is a private chunk of another tiddler, and provide another link to the parent tiddler.\,\modified\:\20251011164407763\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers tagged \u003C\u003Ctag PrivateChunk>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrenttagPrivateChunk\\\>\\n\\t\\t//This is a PrivateChunk of the public tiddler \u003C$link to{{{ allcurrentsplit/first }}}/>.//\\n\u003C/$list>\},\$:/tzk/Templates/Automatic/Publicity/EditorPublicLine\:{\title\:\$:/tzk/Templates/Automatic/Publicity/EditorPublicLine\,\created\:\20200511015953198\,\creator\:\soren\,\modified\:\20251011164619029\,\modifier\:\soren\,\tags\:\$:/tags/EditTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C% if m2.ffEditorPublicLine %>\\n\\t\u003Cdiv style\\\float: right; color: #5E81AC; margin-top: 1ex;\\\>\\n\\t\\t\u003C$checkbox tagPublic> Publish this tiddler\u003C/$checkbox>\\n\\t\u003C/div>\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/Publicity/LevelDisplay\:{\title\:\$:/tzk/Templates/Automatic/Publicity/LevelDisplay\,\created\:\20200508004653657\,\creator\:\soren\,\modified\:\20251011164626007\,\modifier\:\soren\,\tags\:\$:/tags/EditTemplate\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function editingSystemTiddler() allcurrenthasdraft.ofgetdraft.titleissystem\\n\\n\u003C% if m2.public %>\\n\\t\u003Cdiv style\\\color: orangered; font-weight: bold\\\>\\n\\t\\tWARNING: You are editing the public Zettelkasten. Your changes will not be saved unless you export them manually.\\n\\t\u003C/div>\\n\u003C% else %>\\n\\t\u003C% if functioneditingSystemTiddler %>\\n\\t\\t\u003Cdiv style\\\color: #d08770; float:left;\\\>\\n\\t\\t\\t\u003Cdiv style\\\width: 16px; float:left;\\\>{{$:/core/images/theme-button}}\u003C/div>\\n\\t\\t\\t\u003Cdiv style\\\padding-top: 5px; padding-left: 20px;\\\>\\n\\t\\t\\t\\tYou are editing a //system tiddler//. System tiddlers are intrinsically public.\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C% elseif allcurrent!tagPublic %>\\n\\t\\t\u003Cdiv style\\\color: #81a1c1; float:left;\\\>\\n\\t\\t\\t\u003Cdiv style\\\width: 16px; float:left;\\\>{{$:/core/images/locked-padlock}}\u003C/div>\\n\\t\\t\\t\u003Cdiv style\\\padding-top: 5px; padding-left: 20px;\\\>\\n\\t\\t\\t\\tYou are editing a //private tiddler//.\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C% elseif allcurrenttagPublic %>\\n\\t\\t\u003Cdiv style\\\color: #d08770; float:left;\\\>\\n\\t\\t\\t\u003Cdiv style\\\width: 16px; float:left;\\\>{{$:/core/images/globe}}\u003C/div>\\n\\t\\t\\t\u003Cdiv style\\\padding-top: 4px; padding-left: 20px;\\\>You are editing a //public tiddler//.\\n\\t\\t\\t\u003C/div>\\n\\t\\t\u003C/div>\\n\\t\u003C% endif %> \u003C!-- editing system tiddler -->\\n\u003C% endif %> \u003C!-- public/private -->\},\$:/tzk/Templates/Automatic/Publicity/PrivateEditionTemplate\:{\title\:\$:/tzk/Templates/Automatic/Publicity/PrivateEditionTemplate\,\created\:\20240523231042655\,\creator\:\soren\,\description\:\Show options .\,\modified\:\20251011164632764\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All $:/PrivateEdition/* tiddlers.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define .add-tiddler() \u003C$action-createtiddler $basetitle\u003C\u003CcurrentTiddler>>/>\\t\\n\\n\u003C% if allcurrentprefix$:/PrivateEdition/ %>\\n\\t\u003C$let thisEditionKey{{{ allcurrentremoveprefix$:/PrivateEdition/ }}}>\\n\\t\\t\u003C% if m2.private %>\\n\\n\\t\\t\\t\u003C% if allcurrentismissing %>\\n\\n\\t\\t\\t\\tPrivate edition not created yet. Click to create.\\n\\t\\t\\t\\t\u003C$button actions\u003C\u003C.add-tiddler>>>Create Private Edition\u003C/$button>\\n\\n\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\t\\tOtherwise private tiddlers included\\tin this edition:\\n\\t\\t\\t\\t\\t\\t\u003Cul>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$list filter\\\contains:edition\u003CthisEditionKey>!tagPublic\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Cli>\u003C$link/>\u003C/li>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\\t\\t\u003C/ul>\\n\\n\\t\\t\\t\\t\\t\u003C% if contains:edition\u003CthisEditionKey>tagPublic %>\\n\\t\\t\\t\\t\\t\\tThe following tiddlers are explicitly included in this edition, but are now public and no longer require this metadata:\\n\\n\\t\\t\\t\\t\\t\\t\u003Cul>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$list filter\\\contains:edition\u003CthisEditionKey>tagPublic\\\>\\n\\t\\t\\t\\t\\t\\t\\t\\t\u003Cli>\u003C$link/>\u003C/li>\\n\\t\\t\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\\t\\t\u003C/ul>\\n\\n\\t\\t\\t\\t\\t\u003C% endif %> \u003C!-- any public tiddlers marked -->\\n\\t\\t\\t\u003C% endif %> \u003C!-- tiddler missing/exists -->\\n\\n\\t\\t\u003C% else %> \u003C!-- \\\public\\\ (special public edition) -->\\n\\n\\t\\t\\t\u003Cdiv style\\\background-color: lightgreen; padding: 1em;\\\>\\n\\n\\t\\t\\t!! Welcome {{!!caption}}!\\n\\n\\t\\t\\tThis is a special magic edition of Mosaic Muse generated especially for you,\\n\\t\\t\\tin order to offer you access to topics that are not shared with the rest of the web.\\n\\n\\t\\t\\tTo protect Sorens and your privacy, please do not share the URL of this page with anyone --\\n\\t\\t\\tit is the only means of securing access, and therefore should be treated like a password.\\n\\n\\t\\t\\tFind the public edition at {{$:/config/sobjornstad/PublicZettelkastenUrl}}.\\n\\n\\n\\t\\t\\tThe following tiddlers are included in your edition but not in the public edition:\\n\\t\\t\\t\\t\u003Cul>\\n\\t\\t\\t\\t\\t\u003C$list filter\\\contains:edition\u003CthisEditionKey>!issystem!tagPublic\\\>\\n\\t\\t\\t\\t\\t\\t\u003Cli>\u003C$link/>\u003C/li>\\n\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\u003C/ul>\\n\\n\\t\\t\\t\u003C/div>\\n\\n\\t\\t\u003C% endif %> \u003C!-- private/public -->\\n\\t\u003C/$let>\\n\u003C% endif %> \u003C!-- private edition tiddler -->\},\$:/tzk/Templates/Automatic/Publicity/ViewerPublicLine\:{\title\:\$:/tzk/Templates/Automatic/Publicity/ViewerPublicLine\,\created\:\20200508002211355\,\creator\:\soren\,\description\:\Show a checkbox to make the tiddler private or public while viewing it.\,\modified\:\20251011164639332\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All non-system tiddlers, in the private edition. Never, in the public edition.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!-- Clear any outstanding floats or things will look really weird. This also clears for the Reference Explorer since the public checkbox is floated, so it comes outside the list widget. -->\\n\u003C\u003Cclarify>>\\n\\n\u003C!-- System tiddlers are always public -- dont show anything if system. -->\\n\u003C% if allcurrent!issystem %>\\n\\n\\t\u003C% if m2.ffViewerPublicLine %>\\n\\t\\t\u003Cdiv class\\\sib-viewer-public-line\\\>\\n\\t\\t\\t\u003C$checkbox tag\\\Public\\\> Publish this tiddler\u003C/$checkbox>\\n\\t\\t\u003C/div>\\n\\t\u003C% endif %>\\n\\t\\n\\t\u003C% if m2.private %>\\n\\t\u003C% if allcurrentgetedition!isblank %>\\n\\t\\t\u003Cspan class\\\sib-viewer-private-editions\\\>Included in Private Editions\u003C/span>:\\n\\t\\t\u003C$list filter{{!!edition}}>\\n\\t\\t\\t\u003C$link to{{{ allcurrentaddprefix$:/PrivateEdition/ }}}>\\n\\t\\t\\t\\t\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/$list>\\n\\t\u003C% endif %>\\n\\t\u003C% endif %>\\n\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/Source\:{\title\:\$:/tzk/Templates/Automatic/Source\,\created\:\20200808023836194\,\creator\:\soren\,\description\:\Display a table of fields and other information about the source described by this tiddler.\,\modified\:\20251011164805967\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers tagged \u003C\u003Ctag Source>> or \u003C\u003Ctag Sink>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define isbnsearch(isbn) https://isbnsearch.org/isbn/$(isbn)$\\n\\n\u003C% if allcurrenttagSourcemediumconference %>\\n\\n{{||$:/tzk/Templates/Topical/ConferenceSessionDetails}}\\n\\n\u003C% elseif allcurrenttagSource allcurrenttagSink %>\\n\\n\u003Ctable class\\\sourceDeetsTable\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Title\u003C/th>\\n\\t\\t\u003Ctd>{{!!caption}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Author\u003C/th>\\n\\t\\t\u003Ctd>{{!!author}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Publication year\u003C/th>\\n\\t\\t\u003Ctd>{{!!year}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Medium\u003C/th>\\n\\t\\t\u003Ctd>{{!!medium}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C$list filter{{{ allcurrenthasuniverse!universenonfiction }}}>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Universe\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$link to{{!!universe}}/>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>URL\u003C/th>\\n\\t\\t\u003Ctd>{{!!url}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\allcurrenthasisbn\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>ISBN\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$set nameisbn value{{!!isbn}}>\\n\\t\\t\\t\\t\u003Ca href\u003C\u003Cisbnsearch>> class\\\tc-tiddlylink-external\\\>{{!!isbn}}\u003C/a>\\n\\t\\t\\t\u003C/$set>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Bibliographies\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$list filter\\\allcurrentenlist{!!bibliography}\\\>\\n\\t\\t\\t\\t\u003C$link to{{{ tagBibliographybibliography\u003CcurrentTiddler> }}}>\\n\\t\\t\\t\\t\\t\u003C$text text\u003C\u003CcurrentTiddler>>/>\\n\\t\\t\\t\\t\u003C/$link>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Status\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C\u003Cread-status-selector>>\\n\\t\\t\\t\u003C$list filter\\\allcurrentreadstatusread\\\>\\n\\t\\t\\t\\ton \u003C$view field\\\completed\\\ format\\\date\\\ template\\\YYYY-0MM-0DD\\\/>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C$list filter\\\allcurrentreadstatusreread\\\>\\n\\t\\t\\t\\t(last read \u003C$view field\\\completed\\\ format\\\date\\\ template\\\YYYY-0MM-0DD\\\/>)\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\u003C/table>\\n\\n\u003Cstyle>\\n.sourceDeetsTable tr th {\\n\\ttext-align: right;\\n}\\n\u003C/style>\\n\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/SpoilerBanner\:{\title\:\$:/tzk/Templates/Automatic/SpoilerBanner\,\created\:\20210606181123394\,\creator\:\soren\,\description\:\Show a banner to public users warning them that spoilers may be present in tiddlers related to a work of fiction they may not have read.\,\modified\:\20251011164441112\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers that have a `universe` field which is not set to `nonfiction`, if this is the public edition.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure hide-action() \u003C$action-setfield $tiddler\\\$:/config/sib/HideSpoilerBanner\\\ text\\\yes\\\/>\\n\\\\procedure dont-show-again-button() \u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\ actions\u003C\u003Chide-action>>>dont show again this session\u003C/$button>\\n\\\\procedure universe-link() \u003C$link to{{!!universe}}>\u003C$text text{{{ {!!universe}getcaption }}}/>\u003C/$link>\\n\\n\u003C% if m2.ffSpoilerBanner %>\\n\u003C% if $:/config/sib/HideSpoilerBanner!textyes %>\\n\u003C% if allcurrenthasuniverse!universenonfiction %>\\n\\n\\t\u003Cdiv class\\\sib-spoiler-banner\\\>\\n\\t\\t\u003Cdiv style\\\display: inline-block; vertical-align: center; margin-top: 6px; margin-left: 1em;\\\>\\n\\t\\t\\t\u003Cspan style\\\height: 44px; fill: yellow;\\\>{{$:/core/images/warning}}\u003C/span>\\n\\t\\t\u003C/div>\\n\\t\\t\u003Cdiv style\\\display: inline-block; margin-left: 1em; margin-right: 1em;\\\>\\n\\t\\t\\t\u003C% if allcurrenttagSource %>\\n\\t\\t\\t\\tThis tiddler is about a work of fiction. Absolutely no attempt is made to avoid or\u003Cbr>\\n\\t\\t\\t\\tmark spoilers; read at your own risk. (\u003C\u003Cdont-show-again-button>>)\u003Cbr>\\n\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\tThis tiddler may contain spoilers for //\u003C\u003Cuniverse-link>>//.\u003Cbr>\\n\\t\\t\\t\\tRead at your own risk. (\u003C\u003Cdont-show-again-button>>)\u003Cbr>\\n\\t\\t\\t\u003C% endif %>\\n\\t\\t\u003C/div>\\n\\t\u003C/div>\\n\\n\u003C% endif %>\\n\u003C% endif %>\\n\u003C% endif %>\\n\\n\u003Cstyle>\\n.sib-spoiler-banner {\\n\\tbackground-color: \u003C\u003Ccolor message-background>>;\\n\\tdisplay: block;\\n\\tborder-radius: 10px;\\n\\tpadding: 5px;\\n\\tmargin: 0 auto;\\n\\twidth: 35rem;\\n}\\n\u003C/style>\},\$:/tzk/Templates/Automatic/StoryRiverFooter\:{\title\:\$:/tzk/Templates/Automatic/StoryRiverFooter\,\created\:\20210825140429794\,\creator\:\soren\,\modified\:\20251011164450395\,\modifier\:\soren\,\tags\:\$:/tags/BelowStory\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C% if m2.ffCopyrightFooter %>\\n\\n\\t\u003Cdiv class\\\zk-footer-row\\\>\\n\\t\\t\u003C% if $:/config/zettelkasten/copyright/UserNoticehastext %>\\n\\t\\t\\t{{$:/config/zettelkasten/copyright/UserNotice}}\\n\\t\\t\u003C% else %>\\n\\t\\t\\t{{$:/config/zettelkasten/copyright/InitialNotice}}\\n\\t\\t\u003C% endif %>\\n\\t\\tSee the content copyright notice|CopyrightNotice for details.\\n\\t\u003C/div>\\n\\t\u003Cdiv class\\\zk-footer-row\\\>\\n\\t\\tZettelkasten edition of TiddlyWiki|https://sobjornstad.github.io/tzk/\\n\\t\\tby Soren Bjornstad|https://sorenbjornstad.com.\\n\\t\u003C/div>\\n\\n\\t\u003Cstyle>\\n\\tdiv.zk-footer-row {\\n\\t\\tcolor: \u003C\u003Ccolor muted-foreground>>;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\tdiv.zk-footer-row a.tc-tiddlylink, div.zk-footer-row a.tc-tiddlylink-external {\\n\\t\\tcolor: \u003C\u003Ccolor muted-foreground>>;\\n\\t\\ttext-decoration: underline;\\n\\t}\\n\\t\u003C/style>\\n\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/Subtiddler\:{\title\:\$:/tzk/Templates/Automatic/Subtiddler\,\created\:\20211120164840100\,\creator\:\soren\,\description\:\Navigate to the parent or a sibling of the current subtiddler. Subtiddler names are separated from that of their supertiddlers by a / (and are not system tiddlers).\,\modified\:\20251011164457990\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers whose titles contain a slash and are not system tiddlers.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define expand-siblings() \u003C$action-setfield $tiddler\\\$:/temp/ShowSiblings\\\ $index\u003C\u003CcurrentTiddler>> $value\\\yes\\\ />\\n\\\\define contract-siblings() \u003C$action-setfield $tiddler\\\$:/temp/ShowSiblings\\\ $index\u003C\u003CcurrentTiddler>> $value\\\no\\\ />\\n\\\\define siblings-filter() prefix\u003CparentTiddlerPlusSlash>!match\u003CcurrentTiddler>\\n\\n\u003C$list filter\\\allcurrent!issystemregexp:title/\\\ variable_>\\n\u003C$set name\\\parentTiddler\\\ value{{{ allcurrentsplit/butlastjoin/ }}}>\\n\u003C$set name\\\parentTiddlerPlusSlash\\\ value{{{ \u003CparentTiddler>addsuffix/ }}}>\\n\u003Cdiv style\\\text-align: center;\\\>\\n\\nThis is a subtiddler of \u003C$link to\u003C\u003CparentTiddler>>/>.\u003Cbr>\\n\\t\u003C$reveal stateTitle\\\$:/temp/ShowSiblings\\\ stateIndex\u003C\u003CcurrentTiddler>> type\\\nomatch\\\ text\\\yes\\\>\\n\\t\\t\u003C$list filter\\\prefix\u003CparentTiddlerPlusSlash>!match\u003CcurrentTiddler>first\\\ variable_ emptyMessage\\\This is the only subtiddler.\\\>\\n\\t\\t\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ actions\u003C\u003Cexpand-siblings>>>{{$:/core/images/right-arrow}} Siblings of this subtiddler\u003C/$button> (\u003C$count filter\u003C\u003Csiblings-filter>>/>)\\n\\t\\t\u003C/$list>\\n\\t\u003C/$reveal>\\n\\t\u003C$reveal stateTitle\\\$:/temp/ShowSiblings\\\ stateIndex\u003C\u003CcurrentTiddler>> type\\\match\\\ text\\\yes\\\>\\n\\t\\t\u003C$button class\\\tc-btn-invisible tc-tiddlylink\\\ actions\u003C\u003Ccontract-siblings>>>{{$:/core/images/down-arrow}} Siblings of this subtiddler:\u003C/$button>\u003Cbr>\\n\\t\\t\u003C$list filter\u003C\u003Csiblings-filter>>>\\n\\t\\t\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ \u003CcurrentTiddler>removeprefix\u003CparentTiddlerPlusSlash> }}}/>\u003C/$link>\u003Cbr>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$reveal>\\n\\n\u003C/div>\\n\u003C/$set>\\n\u003C/$set>\\n\u003C/$list>\},\$:/tzk/Templates/Automatic/TypeTagChecker\:{\title\:\$:/tzk/Templates/Automatic/TypeTagChecker\,\created\:\20211120170347843\,\creator\:\soren\,\description\:\Show a warning on tiddlers that dont have a type selected.\,\modified\:\20251011164547626\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers that exist, arent system tiddlers or subtiddlers, and dont have at least one tag of the color #ff0000.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!-- System tiddlers, missing tiddlers, and subtiddlers are exempt from the warning. -->\\n\u003C$list filter\\\allcurrent!issystem!ismissing!regexp/\\\>\\n\u003C$list filter\\\allcurrenttagscolor#ff0000 ~Oops +matchOops\\\ variable_>\\n\\t\u003Cdiv style\\\display: inline-block; vertical-align: center; margin-top: 6px; margin-left: 1em; fill: goldenrod;\\\>\\n\\t\\t\u003Cspan style\\\height: 44px\\\>{{$:/core/images/warning}}\u003C/span>\\n\\t\u003C/div>\\n\\t\u003Cdiv style\\\display: inline-block; margin-left: 1em; color: goldenrod; font-weight: bold;\\\>\\n\\t\\tThis tiddler does not have a type tag (type tags appear in red). You should probably attach one.\u003Cbr>\\n\\t\\tSee ZettelkastenCardType for details on the available options.\\n\\t\u003C/div>\\n\u003C/$list>\\n\u003C/$list>\},\$:/tzk/Templates/Automatic/Untitled\:{\title\:\$:/tzk/Templates/Automatic/Untitled\,\created\:\20210307160101458\,\creator\:\soren\,\description\:\Display buttons enabling a workflow where you paste content directly into TiddlyWiki and then use a custom form to turn it into a tiddler.\,\modified\:\20251011164510292\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\Tiddlers whose name begins with `Untitled` (the name you get when you paste text into TiddlyWiki).\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define make-source()\\n\u003C$action-sendmessage $message\\\tm-close-tiddler\\\ $param\\\$:/Import\\\/>\\n\u003C$action-setfield $field\\\tags\\\ $value\\\Source\\\/>\\n\u003C$action-setfield $field\\\url\\\ $value{{!!text}}/>\\n\u003C$action-setfield $field\\\text\\\ $value\\\\\\/>\\n\u003C$action-setfield $field\\\type\\\ $value\\\\\\/>\\n\u003C$action-setfield $field\\\medium\\\ $value\\\article\\\/>\\n\u003C$action-setfield $field\\\year\\\ $value\u003C\u003Cnow \\\YYYY\\\>>/>\\n\\\\end\\n\\n\\\\define finish-import()\\n\u003C$action-setfield $field\\\title\\\ $value{{$:/temp/RenameTitle}}/>\\n\u003C$action-sendmessage $message\\\tm-close-tiddler\\\ $param\u003C\u003CcurrentTiddler>>/>\\n\u003C$action-deletetiddler $tiddler\u003C\u003CcurrentTiddler>>/>\\n\u003C$action-navigate $to{{$:/temp/RenameTitle}}/>\\n\u003C$action-deletetiddler $tiddler\\\$:/temp/RenameTitle\\\/>\\n\\\\end\\n\\n\u003C$list filter\\\allcurrentprefixUntitled\\\>\\n\u003Cdiv class\\\import-options\\\>\\n\u003Ch3>Import Options\u003C/h3>\\n\\n\u003C$button actions\u003C\u003Cmake-source>>>Create Source\u003C/$button>\\n\u003C$reveal type\\\match\\\ state\\\!!tags\\\ text\\\Source\\\>\\n\\n|!Tiddler Title |\u003C$edit-text tiddler\\\$:/temp/RenameTitle\\\ default\\\\\\ tag\\\input\\\/>|\\n|!Source Title |\u003C$edit-text field\\\caption\\\ default\\\\\\ tag\\\input\\\/>|\\n|!Author |\u003C$edit-text field\\\author\\\ default\\\\\\ tag\\\input\\\/>|\\n|!Medium |\u003C$radio field\\\medium\\\ value\\\article\\\> Article\u003C/$radio> \u003C$radio field\\\medium\\\ value\\\book\\\>Book\u003C/$radio>|\\n|!Year |\u003C$edit-text field\\\year\\\ default\u003C\u003Cnow \\\YYYY\\\>> tag\\\input\\\/>|\\n|!Read status |\u003C\u003Cread-status-selector>>|\\n|!Completed |\u003C$edit-date field\\\completed\\\/>|\\n\\n\u003C$button actions\u003C\u003Cfinish-import>>>Import\u003C/$button>\\n\\n\u003C/$reveal>\\n\u003C/div>\\n\u003C/$list>\\n\\n\u003Cstyle>\\ndiv.import-options {\\n\\tpadding: 5px;\\n\\tborder: 2px solid \u003C\u003Ccolor \\\tag-background\\\>>;\\n\\twidth: 100%;\\n}\\n\\ndiv.import-options h3 {\\n\\ttext-align: center;\\n\\tmargin-top: 5px;\\n\\tmargin-bottom: 0;\\n}\\n\u003C/style>\},\$:/tzk/Templates/Automatic/UpdateStatus\:{\title\:\$:/tzk/Templates/Automatic/UpdateStatus\,\created\:\20230407023231664\,\creator\:\soren\,\modified\:\20251011164603394\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure mark-ok() \u003C$action-setfield $timestamp\\\no\\\ reviewed\u003C\u003Cnow \\\YYYY0MM0DD\\\>>/>\\n\\\\function is-stale() \u003CcompareAgainst>compare:date:lt\u003Cstale-date>allcurrenttagNeedsAttention allcurrentlinksmatchTODO\\n\\n\u003C!-- transcluded in $:/core/ui/ViewTemplate/subtitle -->\\n\u003C% if allcurrenttagIdea %>\\n\\t \\n\\t\u003C$wikify name\\\stale-date\\\ text\\\\\\\\\\\n\\t\u003C$macrocall $name\\\dateadd\\\ basedate\u003C\u003Cnow \\\YYYY0MM0DD\\\>> months\\\-6\\\/>\\n\\t\\\\\\\\\>\\n\\t\\t\u003C$let compareAgainst{{{ {!!modified}splitfirst8joinmax{!!reviewed} }}}>\\n\\t\\t\\t(\\n\\t\\t\\t\u003C% if allcurrenttagFrozen %>\\n\\t\\t\\t\\t\u003C$link to\\\UpdateStatuses\\\>\\n\\t\\t\\t\\t\\t\u003Cspan stylecolor: blue;>frozen\u003C/span>\\n\\t\\t\\t\\t\u003C/$link>\\n\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\t\u003C% if functionis-stale %>\\n\\t\\t\\t\\t\\t\u003C$link to\\\UpdateStatuses\\\>\\n\\t\\t\\t\\t\\t\\t\u003Cspan stylecolor: tomato;>stale\u003C/span>\\n\\t\\t\\t\\t\\t\u003C/$link>\\n\\t\\t\\t\\t\\t\u003C% if m2.ffMarkStaleUpdated %>\\n\\t\\t\\t\\t\\t\\t; \\n\\t\\t\\t\\t\\t\\t\u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\ actions\u003C\u003Cmark-ok>>>reup?\u003C/$button>\\n\\t\\t\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\t\\t\u003C$link to\\\UpdateStatuses\\\>\u003Cspan stylecolor: green;>maintained\u003C/span>\u003C/$link>\\n\\t\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t\u003C% endif %>\\n\\t\\t\\t)\\n\\t\\t\u003C/$let>\\n\\t\u003C/$wikify>\\n\\n\u003C% endif %>\},\$:/tzk/Templates/Automatic/ViewTemplateDescription\:{\title\:\$:/tzk/Templates/Automatic/ViewTemplateDescription\,\created\:\20210523140149097\,\creator\:\soren\,\description\:\Provide a summary of the purpose, usage, and definition of the view template defined in the current tiddler.\,\modified\:\20251011164611045\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers within the $:/sib namespace that are tagged \u003C\u003Ctag $:/tags/ViewTemplate>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrentprefix$:/sib/tag$:/tags/ViewTemplate\\\>\\n\\n!! \u003Ccode>\u003C$text text\u003C\u003CcurrentTiddler>>/>\u003C/code> view template\\n\\n; Purpose\\n: {{!!description}}\\n\\n; Transcluded in\\n: {{!!transcludedin}}\\n\\n; Definition\\n: \u003C$codeblock code{{{ allcurrentgettext }}} language\\\html\\\/>\\n\\n\u003C/$list>\},\$:/tzk/Templates/General/IdentityTemplate\:{\title\:\$:/tzk/Templates/General/IdentityTemplate\,\created\:\20210303032019619\,\creator\:\soren\,\modified\:\20251011164704003\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{!!text}}\},\$:/tzk/Templates/General/TabCaptionTemplate\:{\title\:\$:/tzk/Templates/General/TabCaptionTemplate\,\created\:\20240211233105836\,\creator\:\soren\,\modified\:\20251011164713483\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{{ \u003CcurrentTab>getcaptionelse\u003CcurrentTab> }}}\},\$:/tzk/Templates/TableColumns/BookRating\:{\title\:\$:/tzk/Templates/TableColumns/BookRating\,\created\:\20210606231459712\,\creator\:\soren\,\modified\:\20251011164725312\,\modifier\:\soren\,\tags\:\$:/tags/table/BodyTemplate\,\tbl-column-list\:\rating\,\tbl-noedit\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Ctd>\\n\\t\u003Cspan style{{{ \u003CcurrentRecord>getratingaddprefix$:/sib/MediaRating/getcoloraddprefixcolor: addsuffix; }}}>\u003C$text text{{{ \u003CcurrentRecord>getrating }}}/>\u003C/span>\\n\u003C/td>\},\$:/tzk/Templates/Topical/BibliographyList\:{\title\:\$:/tzk/Templates/Topical/BibliographyList\,\created\:\20200808152932642\,\creator\:\soren\,\modified\:\20251011164739663\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define biblioFilter(sortSnippet)\\n\\tcontains:bibliography{!!bibliography}$sortSnippet$ -\u003CcurrentTiddler> -\u003CcurrentTiddler>getdraft.of\\n\\\\end\\n\\n\u003C!-- TODO: Add sort radio button options -->\\n\\n\u003Cul>\\n\u003C$list filter\u003C\u003CbiblioFilter \\\sorttitlesortcaption\\\>> >\\n\\t\u003Cli>\\n\\t\\t\u003C$set nameitemTitle filter{{!!caption}} value{{!!caption}} emptyValue{{!!title}}>\\n\\t\\t\\t\u003C$link to{{!!title}}>\u003C$text text\u003C\u003CitemTitle>>/>\u003C/$link>\\n\\t\\t\u003C/$set>\\n\\t\\t\u003C$list filter\\\\u003CcurrentTiddler>getmedium\\\ variable_>\\n\\t\\t\\t({{!!medium}}\u003C$list filter\\\\u003CcurrentTiddler>getyear\\\ variable\\\year\\\>, \u003C\u003Cyear>>\u003C/$list>)\\n\\t\\t\u003C/$list>\\n\\t\\t\u003C$list filter\\\\u003CcurrentTiddler>hasurl\\\ variable_>\u003Ca class\\\tc-tiddlylink-external\\\ href{{!!url}}>full text\u003C/a>\u003C/$list>\\n\\t\\t\u003C$list filter\\\{!!description}\\\>\\n\\t\\t\u003Cul>\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\u003C/ul>\\n\\t\\t\u003C/$list>\\n\\t\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\},\$:/tzk/Templates/Topical/CaptionDescriptionStretch\:{\title\:\$:/tzk/Templates/Topical/CaptionDescriptionStretch\,\created\:\20240305141719206\,\creator\:\soren\,\modified\:\20251011164747675\,\modifier\:\soren\,\tags\:\Public\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cstrong>\u003C$transclude $field\\\caption\\\>{{!!title}}\u003C/$transclude>\u003C/strong>: {{!!description}}\},\$:/tzk/Templates/Topical/ConferenceSessionDetails\:{\title\:\$:/tzk/Templates/Topical/ConferenceSessionDetails\,\created\:\20240718011917219\,\creator\:\soren\,\modified\:\20251011164805961\,\modifier\:\soren\,\tags\:\Public\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Cstyle>\\ntable.conference-session {\\n\\tmargin-left: auto;\\n\\tmargin-right: auto;\\n}\\n\\ntable.conference-session td {\\n\\tvertical-align: top;\\n}\\n\\ntable.conference-session tr td:first-child {\\n\\ttext-align: right;\\n\\tfont-weight: bold;\\n}\\n\\n/* override non-bold style */\\ntable.conference-session > tr > th a.tc-tiddlylink {\\n\\tfont-weight: bold;\\n}\\n\u003C/style>\\n\\n\u003Ctable class\\\conference-session\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth colspan2>\\n\\t\\t\\tSession at\\n\\t\\t\\t\u003C$link to{{!!conference}}>\\n\\t\\t\\t\\t\u003C$transclude $tiddler{{!!conference}} $field\\\caption\\\>\\n\\t\\t\\t\\t\\t\u003C$text text{{!!conference}}/>\\n\\t\\t\\t\\t\u003C/$transclude>\\n\\t\\t\\t\u003C/$link>\\n\\t\\t\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>Title\u003C/td>\\n\\t\\t\u003Ctd>{{!!caption}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>Time\u003C/td>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$wikify name\\\dayText\\\ text\\\\\\\\\\u003C$view field\\\at\\\ format\\\date\\\ template\\\YYYY-0MM-0DD ddd\\\ />\\\\\\\\\>\\n\\t\\t\\t\\t\u003C$link to\u003C\u003CdayText>>>\u003C\u003CdayText>>\u003C/$link>\\n\\t\\t\\t\u003C/$wikify>\\n\\t\\t\\t\u003C$view field\\\at\\\ format\\\date\\\ template\\\0hh:0mm\\\ />\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>Presenter(s)\u003C/td>\\n\\t\\t\u003Ctd>\u003C$list filter{{!!author}}>\u003C\u003CcurrentTiddler>>\u003Cbr>\u003C/$list>\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C% if allcurrenthasblurb %>\\n\\t\u003Ctr>\\n\\t\\t\u003Ctd>Blurb\u003C/td>\\n\\t\\t\u003Ctd>{{!!blurb}}\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003C% endif %>\\n\u003C/table>\},\$:/tzk/Templates/Topical/ConferenceSessionStretch\:{\title\:\$:/tzk/Templates/Topical/ConferenceSessionStretch\,\created\:\20240718024006740\,\creator\:\soren\,\modified\:\20251011164818285\,\modifier\:\soren\,\tags\:\Public\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$view field\\\at\\\ format\\\date\\\ template\\\0hh:0mm\\\/> {{!!author}}: {{!!caption}} {{||$:/tzk/Templates/Topical/ReadingList/Rating}}\},\$:/tzk/Templates/Topical/JournalPersonPlaceExplorer\:{\title\:\$:/tzk/Templates/Topical/JournalPersonPlaceExplorer\,\created\:\20230822195251601\,\creator\:\soren\,\modified\:\20251011164830820\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>People\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$list filter\\\allcurrentlinks prefix\u003CcurrentTiddler>links +tagPAOsorttitlesortcaption\\\>\\n\\t\\t\\t\\t\u003Cspan class\\\journal-item-intersep\\\>\\n\\t\\t\\t\\t\\t\u003C$link>\u003C$transclude field\\\caption\\\>{{!!title}}\u003C/$transclude>\u003C/$link>\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Places\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$list filter\\\allcurrentlinks prefix\u003CcurrentTiddler>links +tagPlacesort\\\>\\n\\t\\t\\t\\t\u003Cspan class\\\journal-item-intersep\\\>\\n\\t\\t\\t\\t\\t\u003C$link/>\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\u003C/table>\\n\\n\u003Cstyle>\\nspan.journal-item-intersep:after {\\n content: \\\·\\\;\\n}\\n\\nspan.journal-item-intersep:last-child:after {\\n content: \\\\\\;\\n}\\n\u003C/style>\},\$:/tzk/Templates/Topical/JournalSubtiddlerStretch\:{\title\:\$:/tzk/Templates/Topical/JournalSubtiddlerStretch\,\created\:\20230405170908983\,\creator\:\soren\,\modified\:\20251011164838627\,\modifier\:\soren\,\tags\:\Public\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ allcurrentgetcaption ~allcurrentsplit/butfirstjoin/ }}}/>\u003C/$link>\},\$:/tzk/Templates/Topical/PublicHomepageTab\:{\title\:\$:/tzk/Templates/Topical/PublicHomepageTab\,\created\:\20200917013705104\,\creator\:\soren\,\modified\:\20251011164853176\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{{ \u003CcurrentTab>removeprefixPublicHomepage/ }}}\},\$:/tzk/Templates/Topical/ReadingList/LargeTemplate\:{\title\:\$:/tzk/Templates/Topical/ReadingList/LargeTemplate\,\created\:\20210123155242287\,\creator\:\soren\,\modified\:\20251011193014541\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\{{!!text}}\\n\\n\u003C$set namestoryTiddler value\u003C\u003CcurrentTiddler>>>\\n{{||$:/tzk/refexplorer/ReferenceExplorer}}\\n\u003C/$set>\},\$:/tzk/Templates/Topical/ReadingList/Rating\:{\title\:\$:/tzk/Templates/Topical/ReadingList/Rating\,\created\:\20210703174501801\,\creator\:\soren\,\modified\:\20251011164926424\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\allcurrentgetrating!isblank\\\ variable_>\\n\u003Cspan style{{{ allcurrentgetratingaddprefix$:/sib/MediaRating/getcoloraddprefixcolor: addsuffix; }}}>{{!!rating}}\u003C/span>\\n\u003C/$list>\},\$:/tzk/Templates/Topical/ReadingList/SmallTemplate\:{\title\:\$:/tzk/Templates/Topical/ReadingList/SmallTemplate\,\created\:\20210123155216014\,\creator\:\soren\,\modified\:\20251011164926433\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$link to{{!!title}}/> //{{!!caption}}// ({{!!year}}), {{!!author}}.\\n{{||$:/tzk/Templates/Topical/ReadingList/Rating}} \u003C$list filter\\\allcurrentcontains:bibliographyLifetimeReading\\\ variable_>(LT|LifetimeReading)\u003C/$list>\},\$:/tzk/Templates/Topical/TitleDescriptionStretch\:{\title\:\$:/tzk/Templates/Topical/TitleDescriptionStretch\,\created\:\20210303031840037\,\creator\:\soren\,\modified\:\20251011164901434\,\modifier\:\soren\,\tags\:\Public\,\type\:\text/vnd.tiddlywiki\,\text\:\{{!!title}}: {{!!description}}\},\$:/tzk/Tools/FeatureFlags\:{\title\:\$:/tzk/Tools/FeatureFlags\,\created\:\20210622001737586\,\creator\:\soren\,\description\:\Selectively hide and show interface elements or other features.\,\modified\:\20251011163408360\,\modifier\:\soren\,\tags\:\Meta Tool Public\,\tooltype\:\configuration\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure edit-this()\\n\\t\\\\procedure act()\\n\\t\\t\u003C$action-sendmessage $message\\\tm-edit-tiddler\\\ $tiddler\u003C\u003CcurrentTiddler>>/>\\n\\t\\\\end act\\n\\t\u003C$button actions\u003C\u003Cact>> class\\\tc-btn-invisible\\\ style\\\font-size: 80%;\\\>\\n\\t\\t\u003Ci class\\\fa fa-pen\\\/>\\n\\t\u003C/$button>\\n\\\\end edit-this\\n\\nFeature flags allow many elements of the wiki to be selectively enabled and disabled. Feature flags may be set to different values in the private and public editions of your wiki.\\n\\nTo add your own feature flag, create a new tiddler under `$:/config/zettelkasten/FeatureFlags` and set its `caption` and `description` fields to the values youd like to see in the table below. You can then check the feature flags value using the m2.ff function|$:/tzk/Functions/ff or ff macro|$:/tzk/Macros/ff (deprecated).\\n\\n\u003Ctable class\\\ff-table\\\>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>\u003C/th>\\n\\t\\t\u003Cth>Feature\u003C/th>\\n\\t\\t\u003Cth>Private\u003C/th>\\n\\t\\t\u003Cth>Public\u003C/th>\\n\\t\\t\u003Cth>Description\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\prefix$:/config/zettelkasten/FeatureFlags/sortcaption\\\>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Ctd>\u003C\u003Cedit-this>>\u003C/td>\\n\\t\\t\\t\u003Ctd class\\\ff-table-feature\\\>{{!!caption}}\u003C/td>\\n\\t\\t\\t\u003Ctd class\\\ff-table-check\\\>\u003C$checkbox field\\\private\\\ checked\\\yes\\\ unchecked\\\no\\\/>\u003C/td>\\n\\t\\t\\t\u003Ctd class\\\ff-table-check\\\>\u003C$checkbox field\\\public\\\ checked\\\yes\\\ unchecked\\\no\\\/>\u003C/td>\\n\\t\\t\\t\u003Ctd class\\\ff-table-description\\\>{{!!description}}\u003C/td>\\n\\t\\t\u003C/tr>\\n\\t\u003C/$list>\\n\u003C/table>\\n\\n\u003Cstyle>\\ntable.ff-table td.ff-table-feature {\\n\\twidth: 9em;\\n}\\ntable.ff-table td.ff-table-check {\\n text-align: center;\\n\\tpadding-bottom: 1ex;\\n}\\n\u003C/style>\},\$:/tzk/Tools/FieldEditor\:{\title\:\$:/tzk/Tools/FieldEditor\,\created\:\20240305142054053\,\creator\:\soren\,\description\:\Edit chosen metadata fields on a set of tiddlers in a table.\,\modified\:\20251011161513710\,\modifier\:\soren\,\tags\:\Wide Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\Filter: \u003C$edit-text tiddler\\\$:/temp/FieldEditorFilter\\\ default\\\\\\ tag\\\input\\\/>\\n\\nField names (as tiddler list): \u003C$edit-text tiddler\\\$:/temp/FieldEditorFields\\\ default\\\\\\ tag\\\input\\\/>\\n\\n\u003Ctable class\\\sib-field-editor\\\>\\n\\t\u003Cthead>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Cth>title\u003C/th>\\n\\t\\t\\t\u003C$list filter{{$:/temp/FieldEditorFields}} variable\\\current-field\\\>\\n\\t\\t\\t\\t\u003Cth>\u003C\u003Ccurrent-field>>\u003C/th>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/tr>\\n\\t\u003C/thead>\\n\\t\u003Ctbody>\\n\\t\\t\u003C$list filter{{$:/temp/FieldEditorFilter}}>\\n\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\u003C$link/>\\n\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\u003C$list filter{{$:/temp/FieldEditorFields}} variable\\\current-field\\\>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$edit-text field\u003C\u003Ccurrent-field>> default\\\\\\ tag\\\input\\\/>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\u003C/tr>\\n\\t\\t\u003C/$list>\\n\\t\u003C/tbody>\\n\u003C/table>\\n\\n\u003Cstyle>\\ntable.sib-field-editor {\\n\\twidth: 100%;\\n}\\n\\ntable.sib-field-editor input {\\n\\twidth: 100%;\\n}\\n\u003C/style>\},\$:/tzk/Tools/LowLinkTiddlers\:{\title\:\$:/tzk/Tools/LowLinkTiddlers\,\created\:\20210118021217305\,\creator\:\soren\,\description\:\Find non-subtiddler idea tiddlers that have fewer than a specified number of outbound links.\,\modified\:\20251011161527310\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function sorty() linkscount\\n\\nFind non-subtiddler idea tiddlers that have fewer than \u003C$edit-text tiddler\\\$:/temp/LowLinkTiddlers\\\ tag\\\input\\\ default\\\\\\/> outbound links:\\n\\n\u003Cul>\\n\u003C$list filter\\\!issystemhastexttagIdea!search:title/sortsub\u003Csorty>\\\>\\n\\t\u003C$list filter\\\allcurrentlinkscountcompare:number:lt{$:/temp/LowLinkTiddlers}\\\ variable\\\count\\\>\\n\\t\\t\u003Cli>\u003C$link to\u003C\u003CcurrentTiddler>>/>: \u003C\u003Ccount>> outbound links\u003C/li>\\n\\t\u003C/$list>\\n\u003C/$list>\\n\u003C/ul>\},\$:/tzk/Tools/MissingPeople\:{\title\:\$:/tzk/Tools/MissingPeople\,\created\:\20200309202554627\,\creator\:\soren\,\description\:\Show all missing tiddlers that have the naming convention for people.\,\modified\:\20251011161536135\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define personRegexp() ^(Mr|Ms|Mx|The)A-Z\\n\\n\\\Missing\\\ of course meaning that the ZK doesnt know about them, not that nobody in ConsensusPhysicalReality knows about them...\\n\\n\u003Cul>\\n\u003C$list filter\\\allmissingregexp\u003CpersonRegexp>sort\\\ emptyMessage\\\No references to nonexistent people/organizations right now!\\\>\\n\\t\u003Cli>\u003C$link>\u003C\u003CcurrentTiddler>>\u003C/$link>\u003C/li>\\n\u003C/$list>\\n\u003C/ul>\},\$:/tzk/Tools/Publicizer\:{\title\:\$:/tzk/Tools/Publicizer\,\created\:\20240509110255630\,\creator\:\soren\,\description\:\Show a list of tiddlers that you could plausibly have wanted to be public, and allow checking a box to mark them so.\,\modified\:\20251011161625623\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$list filter\\\!issystem!tagPublic!tagPrivateChunk!tagJournal!tagDate!prefixδ!prefixWr:\\\>\\n\u003C$checkbox tag\\\Public\\\>\u003C$link/>\u003C/$checkbox>\u003Cbr>\\n\u003C/$list>\},\$:/tzk/Tools/ReadingInbox\:{\title\:\$:/tzk/Tools/ReadingInbox\,\created\:\20210215024632766\,\creator\:\soren\,\description\:\Show sources you might want to read soon.\,\modified\:\20251011161422682\,\modifier\:\soren\,\tags\:\Tool Wide\,\tooltype\:\aggregator\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define tableRow(dueFragment)\\n\u003Ctr>\\n\\t\u003Ctd>\u003C$list filter\\\allcurrenthasurl\\\>\u003Ca href{{!!url}} class\\\tc-tiddlylink-external\\\>go\u003C/a>\u003C/$list>\u003C/td>\\n\\t\u003Ctd>\u003C$link to\u003C\u003CcurrentTiddler>>>open\u003C/$link>\u003C/td>\\n\\t\u003Ctd>//{{!!caption}}//\u003C/td>\\n\\t\u003Ctd>{{!!author}}\u003C/td>\\n\\t\u003Ctd>{{!!medium}}\u003C/td>\\n\\t\u003Ctd>{{!!bibliography}}\u003C/td>\\n\\t\u003C!--\u003Ctd>$dueFragment$\u003C/td>-->\\n\\t\u003Ctd>\\n\\t\\t\u003C\u003Cread-status-selector>>\\n\\t\u003C/td>\\n\\t\u003Ctd>\\n\\t\\t\u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$macrocall $nameinbox-postpone ivlExpr\\\1\\\/>\\n\\t\\t\\ttomorrow\\n\\t\\t\u003C/$button> |\\n\\t\\t\u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$macrocall $nameinbox-postpone ivlExpr\\\5\\\/>\\n\\t\\t\\tin 5 days\\n\\t\\t\u003C/$button> |\\n\\t\\t\u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$macrocall $nameinbox-postpone ivlExpr{{{ allcurrentgetivlelse5multiply2 }}}/>\\n\\t\\t\\tlater\\n\\t\\t\u003C/$button> |\\n\\t\\t\u003C$button class\\\tc-tiddlylink tc-btn-invisible\\\>\\n\\t\\t\\t\u003C$macrocall $nameinbox-postpone ivlExpr{{{ allcurrentgetivlelse5multiply3 }}}/>\\n\\t\\t\\teven later\\n\\t\\t\u003C/$button>\\n\\t\u003C/td>\\n\u003C/tr>\\n\\\\end\\n\\nThis table first lists anything in progress; try to limit this to a handful of works. Then it lists items that are unread and potentially interesting, but have not been postponed. Postponing uses //exponential backoff//, to use MrAndyMatuschaks term: if you pick //later// or //even later//, the time until you see the item again doubles or triples from its previous value. This allows you to get items that presently seem of low value out of your way without requiring you to decide you will certainly never read it; perhaps some time later, they will look interesting again.\\n\\nThe table does not include lifetime reading items|LifetimeReading unless theyre currently in progress, as it would then become miles long and cease to function effectively as an “inbox”; those items are a separate queue.\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\width: 3.5em;\\\>Text\u003C/th>\\n\\t\\t\u003Cth>Tiddler\u003C/th>\\n\\t\\t\u003Cth>Title\u003C/th>\\n\\t\\t\u003Cth style\\\width: 15%;\\\>Author\u003C/th>\\n\\t\\t\u003Cth>Medium\u003C/th>\\n\\t\\t\u003Cth>Biblio\u003C/th>\\n\\t\\t\u003C!--\u003Cth style\\\width: 6.2em;\\\>Due\u003C/th>-->\\n\\t\\t\u003Cth style\\\width: 6.5em;\\\>Status\u003C/th>\\n\\t\\t\u003Cth style\\\width: 18em;\\\>Postpone\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\!days:due-1 days:due0 +sortdue !hasdue +tagSourcereadstatuspartial!isdraft\\\>\\n\\t\\t\u003C\u003CtableRow \\\\\\\\\(reading)\\\\\\\\\>>\\n\\t\u003C/$list>\\n\\t\u003C$list filter\\\!days:due-1 days:due0 +sortdue !hasdue +tagSourcereadstatusunread!bibliographyLifetimeReading!isdraft\\\>\\n\\t\\t\u003C\u003CtableRow \\\\\\\\\\u003C$view field\\\due\\\ format\\\date\\\ template\\\YYYY-0MM-0DD\\\/>\\\\\\\\\>>\\n\\t\u003C/$list>\\n\u003C/table>\\n\\nSee also RecentlyRead for completed items.\},\$:/tzk/Tools/RelationshipValueTool\:{\title\:\$:/tzk/Tools/RelationshipValueTool\,\created\:\20200401230406669\,\creator\:\soren\,\description\:\Show all values used for a particular field in the wiki.\,\modified\:\20251011161637347\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\This tool shows you what values have been used for a particular field. For instance, when filling out the `medium` field on a Source, you might want to know what values youve already used for this field.\\n\\nIf youre not sure what field youre looking for, expand the list of all fields:\\n\\n\u003C$details summary\\\List of all fields\\\>\\n\\n\u003Cul>\\n\\t\u003C$list filter\\\fieldssort\\\>\\n\\t\\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\\n\\t\u003C/$list>\\n\u003C/ul>\\n\\n\u003C/$details>\\n\\n----\\n|!Field to search |\u003C$edit-text tiddler\\\$:/temp/field-list-tool\\\ default\\\\\\ taginput/>|\\n\\nThe following values have been used for the \u003Ccode>{{$:/temp/field-list-tool}}\u003C/code> field in this wiki:\\n\\n\u003Cul>\\n\\t\u003C$list filter\\\!issystemeach:list-item{$:/temp/field-list-tool}sort\\\>\\n\\t\\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\\n\\t\u003C/$list>\\n\u003C/ul>\},\$:/tzk/Tools/SmartOrphanList/Table\:{\title\:\$:/tzk/Tools/SmartOrphanList/Table\,\created\:\20210522014752620\,\creator\:\soren\,\modified\:\20251011161741448\,\modifier\:\soren\,\tbl-add-records\:\\,\tbl-anything\:\\,\tbl-button-actions\:\\u003C$action-setfield $tiddler\u003C\u003CcurrentRecord>> $field\\\hideorphan\\\ $value\\\true\\\ modified\\\no\\\ />\,\tbl-button-icon\:\{{$:/core/images/delete-button}}\,\tbl-button-tip\:\Exclude this tiddler from the smart orphans list\,\tbl-caption\:\{{!!title}}\,\tbl-checkbox-actions-selected\:\\,\tbl-checkbox-actions-unselected\:\\,\tbl-checkbox-field\:\\,\tbl-checkbox-tag\:\\,\tbl-checkbox-tip\:\\,\tbl-checkbox-value-selected\:\\,\tbl-checkbox-value-unselected\:\\,\tbl-class\:\tbl-style-default\,\tbl-columns\:\tbl-expand title modified tags tbl-button\,\tbl-expand\:\\,\tbl-filter\:\isorphan!field:hideorphantrue!tagImage!tagAttachment!tagTemplate!tagMeta!tagTool!tagStub!tagPrivateChunk!tagBibliography!tagJournal!search:title/!tagIndite\,\tbl-limit\:\25\,\tbl-mode\:\normal\,\tbl-page-marker\:\ThreePersonTeam\,\tbl-show-caption\:\true\,\tbl-show-colgroup\:\false\,\tbl-show-edit\:\true\,\tbl-show-footer\:\false\,\tbl-show-header\:\true\,\tbl-show-mode\:\true\,\tbl-show-pagination\:\auto\,\tbl-sort-by\:\title\,\tbl-sort-negate\:\false\,\tbl-sort-type\:\nsort\,\tbl-style-colgroup\:\\,\tbl-style-container\:\\,\tbl-style-table\:\width:100%;\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C\u003Ctable $:/sib/Tools/SmartOrphanList/Table>>\},\$:/tzk/Tools/SmartOrphanList\:{\title\:\$:/tzk/Tools/SmartOrphanList\,\created\:\20200325215908710\,\creator\:\soren\,\description\:\List of orphans that excludes types of tiddlers that wouldnt be expected to have hardlinks; you can also permanently hide items.\,\modified\:\20251011161730234\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\The following list of outstanding orphans excludes images and attachments (as they dont hard-link when used), templates, meta items, stubs (as they havent been filled out yet), and any items that have been manually excluded.\\n\\n{{||$:/tzk/Tools/SmartOrphanList/Table}}\},\$:/tzk/Tools/Statistics\:{\title\:\$:/tzk/Tools/Statistics\,\created\:\20200516031757915\,\creator\:\soren\,\description\:\General information about the number of tiddlers accumulated in the wiki.\,\modified\:\20251011162117835\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\(Caution: Having this tiddler open will make large wikis run slowly. Since a lot of changes made within your wiki will change the counts here, TW has to do a bunch of extra recalculations with it open. Close it as soon as youre done.)\\n\\n!! Tiddler counts\\n\\n* \u003C$list filter\\\!issystemcountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> (non-system) tiddlers\\n** \u003C$list filter\\\tagIdeacountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> ideas\\n** \u003C$list filter\\\tagPAOcountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> people\\n** \u003C$list filter\\\tagSourcecountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> sources\\n** \u003C$list filter\\\tagSinkcountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> sinks\\n** \u003C$list filter\\\alltags!issystemcountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> tags\\n** \u003C$list filter\\\!issystemtagJournalcountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> journal entries\\n* \u003C$list filter\\\tagPubliccountm2.separate-number-input\\\>\u003C\u003CcurrentTiddler>>\u003C/$list> public tiddlers \u003C\u003CpublicAmount>>\\n\\n!! Word counts\\n\\nA “word” is a space-separated unit within a tiddlers wikitext. This means that formatting-related code within tiddlers is counted as words, but transcluded content will not be, and so the word count determined here wont necessarily match the number of words displayed when rendering the tiddler. Additionally, the individual type counts will not sum to the total count because occasional tiddlers have multiple types (e.g., a tiddler can be both an Index and an Idea).\\n\\n\u003Ctable>\\n\\t\u003Cth>Tiddler type\u003C/th>\\n\\t\u003Cth>Count\u003C/th>\\n\\t\u003C$list filter\\\istagcolor#ff0000!issystem\\\>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Ctd>\u003C$link/>\u003C/td>\\n\\t\\t\\t\u003Ctd>\u003C$text text{{{ tag\u003CcurrentTiddler>gettextsplit splitregexp\\\\n!isblankcountm2.separate-number-input }}}/>\u003C/td>\\n\\t\\t\u003C/tr>\\n\\t\u003C/$list>\\n\\t\u003Ctr>\\n\\t\\t\\t\u003Ctd>//Total//\u003C/td>\\n\\t\\t\\t\u003Ctd>\u003C$text text{{{ !issystemgettextsplit splitregexp\\\\n!isblankcountm2.separate-number-input }}}/>\u003C/td>\\n\\t\u003C/tr>\\n\u003C/table>\\n\\n!! Private/Public word counts\\n\\n* Public: \u003C$text text{{{ tagPublicgettextsplit splitregexp\\\\n!isblankcountm2.separate-number-input }}}/>\\n* Private: \u003C$text text{{{ !issystem!tagPublicgettextsplit splitregexp\\\\n!isblankcountm2.separate-number-input }}}/>\},\$:/tzk/Tools/TagReplace\:{\title\:\$:/tzk/Tools/TagReplace\,\created\:\20200225231807460\,\creator\:\soren\,\description\:\Do a find and replace to merge tags. (Pure renames can be accomplished by editing the tag tiddler.)\,\modified\:\20251011161754349\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\maintenance\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!--\\nhttps://groups.google.com/forum/#!msg/tiddlywiki/OCntQ79DuwM/_vYCTYRXfaUJ\\n\\nVersion taken from the linked \\\TiddlyWiki Magic\\\ post\\n-->\\n\\n|!Search tag: | \u003C$edit-text tiddler\\\$:/temp/RenameTags/search\\\ tag\\\input\\\ type\\\text\\\/> |\\n|!Replace by: | \u003C$edit-text tiddler\\\$:/temp/RenameTags/replace\\\ tag\\\input\\\ type\\\text\\\/> |\\n\\n---\\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\\\$:/temp/RenameTags/replace\\\>\\n\\nApply the tag \u003C$tiddler tiddler{{$:/temp/RenameTags/replace}}>\u003C$transclude tiddler\\\$:/core/ui/TagTemplate\\\/>\u003C/$tiddler> to the following tiddlers:\\n\\n\u003C$list filter\\\!hasdraft.oftag{$:/temp/RenameTags/search}!tag{$:/temp/RenameTags/replace}sortcreated\\\>\\n\u003C$checkbox tag{{$:/temp/RenameTags/replace}}> \u003C$link to{{!!title}}>\u003C$view field\\\title\\\/>\u003C/$link>\u003C/$checkbox>\u003Cbr/>\\n\u003C/$list>\\n\u003C/$reveal>\\n\\n\u003C$reveal type\\\nomatch\\\ text\\\\\\ state\\\$:/temp/RenameTags/search\\\>\\n\\nRemove the tag \u003C$tiddler tiddler{{$:/temp/RenameTags/search}}>\u003C$transclude tiddler\\\$:/core/ui/TagTemplate\\\/>\u003C/$tiddler> from the following tiddlers:\\n\\n\u003C$list filter\\\!hasdraft.oftag{$:/temp/RenameTags/search}tag{$:/temp/RenameTags/replace}sortcreated\\\>\\n\u003C$checkbox tag{{$:/temp/RenameTags/search}}> ~~\u003C$link to{{!!title}}>\u003C$view field\\\title\\\/>\u003C/$link>~~\u003C/$checkbox>\u003Cbr/>\\n\u003C/$list>\\n\u003C/$reveal>\},\$:/tzk/Tools/Tray/Template\:{\title\:\$:/tzk/Tools/Tray/Template\,\created\:\20210711192716590\,\creator\:\soren\,\modified\:\20251011161822310\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure remove-tiddler()\\n\\t\u003C$action-listops $tiddler\\\$:/tzk/Tools/Tray\\\ $field\\\list\\\ $filter\\\enlist{$:/tzk/Tools/Tray!!list} -allcurrent\\\/>\\n\\\\end\\n\\n\u003C$link/> \u003C$button actions\u003C\u003Cremove-tiddler>> class\\\tc-btn-invisible\\\>\u003Cspan style\\\fill: white;\\\>{{$:/core/images/delete-button}}\u003C/span>\u003C/$button>\},\$:/tzk/Tools/Tray\:{\title\:\$:/tzk/Tools/Tray\,\caption\:\Tray\,\created\:\20210701023215046\,\creator\:\soren\,\description\:\Items were currently working on but dont need to leave open. Drag and drop a link to a tiddler to add it.\,\list\:\SoloRoadTripTips Autofocus WhatIsRomance SexRomancePolyamoryAndRelatingCluster EverythingForeverOrNothingEverAgain Values 2024BowmansSsi PlaceFascination\,\modified\:\20251011161830425\,\modifier\:\soren\,\tags\:\Meta Tool\,\tooltype\:\aggregator\,\type\:\text/vnd.tiddlywiki\,\text\:\Stuff Im working on but dont need to keep open:\\n\\n\u003C\u003Clist-links-draggable \\\$:/tzk/Tools/Tray\\\ itemTemplate:\\\$:/tzk/Tools/Tray/Template\\\>>\},\$:/tzk/Tools\:{\title\:\$:/tzk/Tools\,\created\:\20210825121854435\,\creator\:\soren\,\description\:\Tools to manage your Zettelkasten.\,\modified\:\20251011202226664\,\modifier\:\soren\,\tags\:\Meta\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function sorter() split/lastsort\\n\\n\\\\widget $local.tooltype(caption, type:\\\\\\)\\n\\t\u003Ch2>\u003C\u003Ccaption>>\u003C/h2>\\n\\t\u003C% if \u003Ctype>!match %>\\n\\t\\t\u003Cul>\\n\\t\\t\\t\u003C$list filter\\\alltiddlers+shadowstagTooltooltype\u003Ctype>sortsub\u003Csorter>\\\>\\n\\t\\t\\t\\t\u003Cli>\\n\\t\\t\\t\\t\\t\u003C$link to\u003C\u003CcurrentTiddler>>>\\n\\t\\t\\t\\t\\t\\t\u003C$text text{{{ allcurrentsplit/last }}}/>\u003C/$link>: {{!!description}}\\n\\t\\t\\t\\t\u003C/li>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/ul>\\n\\t\u003C% else %>\\n\\t\\t\u003C$slot $name\\\ts-raw\\\/>\\n\\t\u003C% endif %>\\n\\\\end $local.tooltype\\n\\n\\n\u003C$local.tooltype caption\\\Documentation\\\>\\n\\n* $:/tzk/Documentation: Documentation on the macros and view templates available within the Zettelkasten.\\n* OurNamingConventions: Naming conventions for tiddler titles; youre expected to edit this tiddler to match the conventions you wish to use yourself.\\n* ZettelkastenCardType: The types of red tags you can assign to tiddlers to get specific effects.\\n\\n\u003C/$local.tooltype>\\n\u003C$local.tooltype caption\\\Configuration\\\ type\\\configuration\\\ />\\n\u003C$local.tooltype caption\\\Aggregation\\\ type\\\aggregator\\\/>\\n\u003C$local.tooltype caption\\\Maintenance\\\ type\\\maintenance\\\/>\},\$:/tzk/Widgets/example\:{\title\:\$:/tzk/Widgets/example\,\created\:\20240610235017528\,\creator\:\soren\,\modified\:\20251011161945603\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.x(number)\\n\u003Cdiv class\\\sib-examples-indented-div\\\ data-number\u003C\u003Cnumber>>>\\n\\t\u003Cdiv class\\\sib-examples-indented-div-inner\\\>\\n\\t\\t\u003C$slot $name\\\ts-raw\\\/>\\n\\t\u003C/div>\\n\u003C/div>\\n\\\\end\},\$:/tzk/Widgets/extlink\:{\title\:\$:/tzk/Widgets/extlink\,\created\:\20240601145401225\,\creator\:\soren\,\description\:\Create a link to a reference point on an external site, where part of the URL can be filled in by a reference number or key. Use a positional parameter `$1$` in the location that must be filled. Intended for internal use by procedures, such as `\u003C\u003Crt>>` or `\u003C\u003Csubreddit>>`.\,\example\:\\,\modified\:\20251011161956008\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.extlink(urltemplate, slotvalue, text)\\n\\t\u003C$let href{{{ \u003Curltemplate>substitute\u003Cslotvalue> }}}>\\n\\t\\t\u003Ca class\\\tc-tiddlylink-external\\\ href\u003C\u003Chref>>>\\n\\t\\t\\t\u003C!-- Text could be in CamelCase and break the link. -->\\n\\t\\t\\t\u003C$text text\u003C\u003Ctext>>/>\\n\\t\\t\u003C/a>\\n\\t\u003C/$let>\\n\\\\end\},\$:/tzk/Widgets/float\:{\title\:\$:/tzk/Widgets/float\,\created\:\20240601142205284\,\creator\:\soren\,\description\:\Show an image floated to the side of the text of a tiddler. This widget is often used with the `clarify` macro, which forces further content to come after the float.\,\example\:\\u003C$m2.float source\\\freezer-example.jpg\\\ width200 side\\\left\\\ />Text on the right side of the float.\u003C\u003Cclarify>>\,\modified\:\20251011162015418\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.float(source, width:\\\400\\\, side:\\\right\\\, caption:\\\\\\)\\n \u003Cdiv class`$(side)$-float`>\\n\\t\\t\u003C$image source\u003C\u003Csource>> width\u003C\u003Cwidth>>/>\\n\\t\\t\u003C% if \u003Ccaption>!isblank %>\u003Cbr>\u003Cdiv style\\\text-align: center; font-style: italic; margin-bottom: 1ex;\\\>\u003C\u003Ccaption>>\u003C/div>\u003C% endif %>\\n\\t\u003C/div>\\n\\\\end\},\$:/tzk/Widgets/fnote\:{\title\:\$:/tzk/Widgets/fnote\,\created\:\20240617234017130\,\creator\:\soren\,\modified\:\20251011162025423\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.fnote()\\n\u003C$wikify name\\\fnote-body\\\ text\\\\\\\\\\u003C$slot $name\\\ts-raw\\\/>\\\\\\\\\ output\\\html\\\ mode\\\inline\\\>\\n\\t\u003C$transclude $variable\\\fnote\\\ note\u003C\u003Cfnote-body>>/>\\n\u003C/$wikify>\\n\\\\end\},\$:/tzk/Widgets/iex\:{\title\:\$:/tzk/Widgets/iex\,\created\:\20240601143344568\,\creator\:\soren\,\description\:\(i)f (ex)ists: Render the widgets content only if something exists. Pass either a tiddler name or a filter (using a filter, content appears if the filter has no results).\,\example\:\\u003C$m2.iex tiddler\\\ThisTiddler\\\>This Tiddler exists!\u003C/$m2.iex>\,\modified\:\20251011162041745\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.iex(tiddler:\\\\\\, filter:\\\\\\)\\n\\t\u003C% if \u003Cfilter>!isblank %>\\n\\t\\t\u003C$list filter\\\subfilter\u003Cfilter>first\\\ variable_ >\\n\\t\\t\\t\u003C$slot $name\\\ts-raw\\\/>\\n\\t\\t\u003C/$list>\\n\\t\u003C% elseif \u003Ctiddler>istiddler %>\\n\\t\\t\u003C$slot $name\\\ts-raw\\\ />\\n\\t\u003C% endif %>\\n\\\\end\},\$:/tzk/Widgets/prevnext-navigation\:{\title\:\$:/tzk/Widgets/prevnext-navigation\,\created\:\20240601160913985\,\creator\:\soren\,\description\:\Show \\\previous\\\ and \\\next\\\ links for tiddlers in a sequence, conditioned on whether were at the beginning or end. Pass filters that retrieve the previous and next items in the sequence from the current tiddler.\,\modified\:\20251011162052476\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\whitespace trim\\n\\n\\\\procedure prevLink() \u003C$link to\u003C\u003Cprevious>>>\u003C\u003CpreviousText>>\u003C/$link>\\n\\\\procedure nextLink() \u003C$link to\u003C\u003Cnext>>>\u003C\u003CnextText>>\u003C/$link>\\n\\n\\\\widget $m2.prevnext-navigation(previousFilter, nextFilter, previousText:\\\previous\\\, nextText:\\\next\\\)\\n\\t\u003C$let\\n\\t\\tprevious{{{ subfilter\u003CpreviousFilter> }}}\\n\\t\\tnext{{{ subfilter\u003CnextFilter> }}}\\n\\t>\\n\\t\\t\u003C% if \u003Cprevious>!isblank %>\\n\\t\\t\\t\u003C% if \u003Cnext>!isblank %>\\n\\t\\t\\t\\t\u003C\u003CprevLink>>, \u003C\u003CnextLink>>\\n\\t\\t\\t\u003C% else %>\\n\\t\\t\\t\\t\u003C\u003CprevLink>>\\n\\t\\t\\t\u003C% endif %>\\n\\t\\t\u003C% else %>\\n\\t\\t\\t\u003C% if \u003Cnext>!isblank %>\\n\\t\\t\\t\\t\u003C\u003CnextLink>>\\n\\t\\t\\t\u003C% endif %>\\n\\t\\t\u003C% endif %>\\n\\t\u003C/$let>\\n\\\\end\},\$:/tzk/cascade/icon/Idea\:{\title\:\$:/tzk/cascade/icon/Idea\,\created\:\20240829025648158\,\creator\:\soren\,\modified\:\20251011192155180\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagIdeathenfar fa-lightbulb\},\$:/tzk/cascade/icon/Journal\:{\title\:\$:/tzk/cascade/icon/Journal\,\created\:\20240829025710100\,\creator\:\soren\,\modified\:\20251011192201324\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagJournalthenfar fa-calendar-alt\},\$:/tzk/cascade/icon/Mr\:{\title\:\$:/tzk/cascade/icon/Mr\,\created\:\20240829024436718\,\creator\:\soren\,\modified\:\20251011192206511\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagPAOregexp^Mrthenfas fa-male\},\$:/tzk/cascade/icon/Ms\:{\title\:\$:/tzk/cascade/icon/Ms\,\created\:\20240829025309878\,\creator\:\soren\,\modified\:\20251011192212249\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagPAOregexp^Msthenfas fa-female\},\$:/tzk/cascade/icon/Mx\:{\title\:\$:/tzk/cascade/icon/Mx\,\created\:\20240829025353978\,\creator\:\soren\,\modified\:\20251011192218266\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagPAOregexp^Mxthenfas fa-user\},\$:/tzk/cascade/icon/Place\:{\title\:\$:/tzk/cascade/icon/Place\,\created\:\20240829025450675\,\creator\:\soren\,\modified\:\20251011192224458\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagPlacethenfas fa-map-marker-alt\},\$:/tzk/cascade/icon/Sink\:{\title\:\$:/tzk/cascade/icon/Sink\,\created\:\20240829025632398\,\creator\:\soren\,\modified\:\20251011192233293\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagSinkthenfas fa-pen-fancy\},\$:/tzk/cascade/icon/Source\:{\title\:\$:/tzk/cascade/icon/Source\,\created\:\20240829025530016\,\creator\:\soren\,\modified\:\20251011192239898\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagSourcethenfas fa-book-open\},\$:/tzk/cascade/icon/The\:{\title\:\$:/tzk/cascade/icon/The\,\created\:\20240829025410147\,\creator\:\soren\,\modified\:\20251011192247436\,\modifier\:\soren\,\tags\:\$:/tags/TiddlerIconFilter\,\type\:\text/vnd.tiddlywiki\,\text\:\tagPAOregexp^Thethenfas fa-users\},\$:/tzk/gis/AddInfo\:{\title\:\$:/tzk/gis/AddInfo\,\created\:\20201129183646538\,\creator\:\soren\,\gis-lat\:\44.96207385173792\,\modified\:\20251011192054384\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure add-gis-actions()\\n\\t\u003C$action-setfield $field\\\gis-lat\\\ $value{{{ $:/temp/AddValuesgetlatlongsplit,firsttrim }}}/>\\n\\t\u003C$action-setfield $field\\\gis-long\\\ $value{{{ $:/temp/AddValuesgetlatlongsplit,lasttrim }}}/>\\n\\t\u003C$action-setfield $field\\\gis-zoom\\\ $value{{$:/temp/AddValues!!gis-zoom}}/>\\n\\t\u003C$action-deletetiddler $tiddler\\\$:/temp/AddValues\\\/>\\n\\\\end add-gis-actions\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Latitude, Longitude\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$edit-text\\n\\t\\t\\t\\ttag\\\input\\\\\n\\t\\t\\t\\tdefault\\\\\\\\n\\t\\t\\t\\ttiddler\\\$:/temp/AddValues\\\\\n\\t\\t\\t\\tfield\\\latlong\\\\\n\\t\\t\\t/>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth>Zoom\u003C/th>\\n\\t\\t\u003Ctd>\\n\\t\\t\\t\u003C$edit-text\\n\\t\\t\\t\\ttag\\\input\\\\\n\\t\\t\\t\\tdefault\\\\\\\\n\\t\\t\\t\\ttiddler\\\$:/temp/AddValues\\\\\n\\t\\t\\t\\tfield\\\gis-zoom\\\\\n\\t\\t\\t/>\\n\\t\\t\u003C/td>\\n\\t\u003C/tr>\\n\u003C/table>\\n\\n\u003C$button actions\u003C\u003Cadd-gis-actions>>>\\n\\tAdd\\n\u003C/$button>\},\$:/tzk/gis/DrivingDirections\:{\title\:\$:/tzk/gis/DrivingDirections\,\caption\:\Directions\,\created\:\20201129175445792\,\creator\:\soren\,\modified\:\20251011192125140\,\modifier\:\soren\,\tags\:\$:/tzk/gis/MappingTools\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define dirUrl(lat, long) https://www.google.com/maps/embed/v1/directions?key$(gmapsApiKey)$&origin$(sourceLoc)$&destination$(lat)$%2C$(long)$\\n\\n\u003C% if allcurrenthasgis-lat %>\\n\\n\\t\u003Cdiv style\\\margin-bottom:1ex;\\\>\\n\\t\\tDirections from \u003C$link to\\\PrivateMetadata\\\>home\u003C/$link> or:\\n\\t\\t\u003C$edit-text tiddler\\\$:/temp/CurrentDirectionsSource\\\ taginput default\\\\\\ size56 />\\n\\t\u003C/div>\\n\\n\\t\u003C$let directionsSource{{{ {$:/temp/CurrentDirectionsSource}!isblankencodeuri ~{PrivateMetadata##Address}encodeuri }}}>\\n\\t\\t\u003C% if \u003CdirectionsSource>!isblank %>\\n\\t\\t\\t\u003C$let\\n\\t\\t\\t\\tgmapsApiKey{{$:/config/zettelkasten/gis/GMapsApiKey}}\\n\\t\\t\\t\\tlat{{!!gis-lat}}\\n\\t\\t\\t\\tlong{{!!gis-long}}\\n\\t\\t\\t\\tsourceLoc\u003C\u003CdirectionsSource>>\\n\\t\\t\\t>\\n\\t\\t\\t\\t\u003Ciframe\\n\\t\\t\\t\\t\\twidth\\\600\\\\\n\\t\\t\\t\\t\\theight\\\450\\\\\n\\t\\t\\t\\t\\tframeborder\\\0\\\\\n\\t\\t\\t\\t\\tstyle\\\border:0\\\\\n\\t\\t\\t\\t\\tsrc\u003C\u003CdirUrl>>\\n\\t\\t\\t\\t\\tallowfullscreen>\u003C/iframe>\\n\\t\\t\\t\u003C/$let>\\n\\t\\t\u003C% else %>\\n\\t\\t\\tPlease enter an address to start from,\\n\\t\\t\\tor set the `Address` index of the `PrivateMetadata` data tiddler to a default address.\\n\\t\\t\u003C% endif %>\\n\\t\u003C/$let>\\n\\n\u003C% endif %>\},\$:/tzk/gis/Info\:{\title\:\$:/tzk/gis/Info\,\caption\:\Info\,\created\:\20201129181525887\,\creator\:\soren\,\modified\:\20251011192125142\,\modifier\:\soren\,\tags\:\$:/tzk/gis/MappingTools\,\type\:\text/vnd.tiddlywiki\,\text\:\|!Address|{{!!gis-address}}|\\n|!Latitude|{{!!gis-lat}}|\\n|!Longitude|{{!!gis-long}}|\\n|!GMaps zoom level|{{!!gis-zoom}}|\},\$:/tzk/gis/MappingTools\:{\title\:\$:/tzk/gis/MappingTools\,\created\:\20201129175820541\,\creator\:\soren\,\description\:\Show the mapping tools available for place tiddlers with location information, or prompt the user to add such information.\,\list\:\$:/tzk/gis/SatelliteMap $:/tzk/gis/DrivingDirections $:/tzk/gis/Info\,\modified\:\20251011192138882\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All tiddlers tagged \u003C\u003Ctag Place>>.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\procedure no-gis-info()\\nThere is no GIS information available for this place, but you can add it (try from Google Maps|https://www.google.com/maps):\\n\\n{{||$:/tzk/gis/AddInfo}}\\n\\\\end no-gis-info\\n\\n\\\\procedure no-api-key()\\nTo use the mapping tools on Place tiddlers, you must configure a Maps Embed API key in Google Cloud Platform (GCP), then set the text field of the $:/config/zettelkasten/gis/GMapsApiKey tiddler to this API key. The Maps Embed API is free to use. Documentation on the API may be found here|https://developers.google.com/maps/documentation/embed/get-started.\\n\\nIf you dont want to see this message again, disable the //GIS// feature flag|$:/tzk/Tools/FeatureFlags.\\n\\\\end no-api-key\\n\\n\u003C% if m2.ffGisTools %>\\n\u003C% if allcurrenttagPlace %>\\n\\t\u003C% if allcurrenthasgis-lat %>\\n\\t\\t\u003C% if {$:/config/zettelkasten/gis/GMapsApiKey}!isblank %>\\n\\t\\t\\t\u003C\u003Ctabs \\n\\t\\t\\t\\ttabsList:\\\list$:/tzk/gis/MappingTools\\\\\n\\t\\t\\t\\tdefault:\\\$:/tzk/gis/SatelliteMap\\\\\n\\t\\t\\t\\tretain:yes\\n\\t\\t\\t>>\\n\\t\\t\u003C% else %>\\n\\t\\t\\t\u003C\u003Cno-api-key>>\\n\\t\\t\u003C% endif %>\\n\\t\u003C% else %>\\n\\t\\t\u003C\u003Cno-gis-info>>\\n\\t\u003C% endif %>\\n\u003C% endif %>\\n\u003C% endif %>\},\$:/tzk/gis/SatelliteMap\:{\title\:\$:/tzk/gis/SatelliteMap\,\caption\:\Satellite\,\created\:\20201129174511282\,\creator\:\soren\,\modified\:\20251011192138856\,\modifier\:\soren\,\tags\:\$:/tzk/gis/MappingTools\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\function mapUrl() https://www.google.com/maps/embed/v1/view?keyaddsuffix{$:/config/zettelkasten/gis/GMapsApiKey}addsuffix&zoomaddsuffix\u003Czoom>addsuffix¢eraddsuffix\u003Clat>addsuffix%2Caddsuffix\u003Clong>addsuffix&maptypesatellite\\n\\n\\\\define changebutton(operation, faClass)\\n\\t\\\\procedure set-zoom-action()\\n\\t\\t\u003C$action-setfield $field\\\gis-zoom\\\ $value{{{ {!!gis-zoom}$operation$1 }}}/>\\n\\t\\\\end set-zoom-action\\n\\t\\n\\t\u003C$button actions\u003C\u003Cset-zoom-action>> class\\\tc-btn-invisible tc-tiddlylink\\\>\\n\\t\\t\u003Ci class\\\fa $faClass$\\\/>\\n\\t\u003C/$button>\\n\\\\end changebutton\\n\\n\u003C% if allcurrenthasgis-lat %>\\n\u003C$let\\n\\tlat{{!!gis-lat}}\\n\\tlong{{!!gis-long}}\\n\\tzoom{{!!gis-zoom}}>\\n\\t\\n \u003Ciframe\\n width\\\600\\\\\n height\\\450\\\\\n frameborder\\\0\\\\\n style\\\border:0\\\\\n src\u003C\u003CmapUrl>>\\n allowfullscreen>\\n\\t\\t\u003C/iframe>\\n\u003C/$let>\\nEdit map zoom: \u003C\u003Cchangebutton add fa-search-plus>> \u003C\u003Cchangebutton subtract fa-search-minus>>\\n\u003C% endif %>\},\$:/tzk/gui/KillPhrases\:{\title\:\$:/tzk/gui/KillPhrases\,\created\:\20210731165017938\,\creator\:\soren\,\description\:\Configure phrases that should cause public builds to fail.\,\modified\:\20251011162702560\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\configuration\,\type\:\text/vnd.tiddlywiki\,\text\:\//Kill phrases// are an extra measure of security to ensure you dont accidentally publish something that was supposed to be private. After building the public wiki, if the source of any tiddler therein contains any of the words or phrases below in any field, the build will fail and point out the location where a kill phrase ended up in the output.\\n\\nEnter kill phrases below, one per line.\\n\\n\u003Cdiv class\\\kill-phrase-entry\\\>\\n\\t\u003C$edit-text\\n\\t\\ttiddler\\\$:/config/zettelkasten/Build/KillPhrases\\\\\n\\t\\tdefault\\\\\\\\n\\t/>\\n\u003C/div>\\n\\nEach line is treated as a Python-dialect regular expression (documentation|https://docs.python.org/3/library/re.html#regular-expression-syntax of this dialect).\\n\\nKill phrases are case-sensitive. If you want to kill the build on multiple cases of a word, use a //character class// (`sSecret` to allow both `secret` and `Secret`), or begin the phrase with `(?i)` to make the entire regular expression case-insensitive.\\n\\nKill phrases match substrings: that is, “kill” will also match “skillet” and “killdeer”. If you want to match only a whole word, use `\\\\b` (a //word boundary// marker) before and after the word, like `\\\\bkill\\\\b`. (This still ignores punctuation, so it will find `kill,` -- but thats probably what you want.)\\n\\nYour list of kill phrases will not be published so long as you do not alter the build filter (if you do, watch out -- system tiddlers, including the one which stores your kill phrases, are published by default).\\n\\n\u003Cstyle>\\ndiv.kill-phrase-entry textarea {\\n\\twidth: 100%;\\n}\\n\u003C/style>\},\$:/tzk/gui/SidebarTabSelector\:{\title\:\$:/tzk/gui/SidebarTabSelector\,\created\:\20210731162946420\,\creator\:\soren\,\description\:\Choose which top-level tabs you want to show in the sidebar in your public and private editions.\,\modified\:\20251011162725666\,\modifier\:\soren\,\tags\:\Tool\,\tooltype\:\configuration\,\type\:\text/vnd.tiddlywiki\,\text\:\{{!!description}}\\n\\n\u003Ctable>\\n\\t\u003Ctr>\\n\\t\\t\u003Cth style\\\min-width: 6em;\\\>Tab\u003C/th>\\n\\t\\t\u003Cth>Private\u003C/th>\\n\\t\\t\u003Cth>Public\u003C/th>\\n\\t\\t\u003Cth>Description\u003C/th>\\n\\t\u003C/tr>\\n\\t\u003C$list filter\\\allshadows+tiddlerstag$:/tags/SideBar!hasdraft.of\\\>\\n\\t\\t\u003C$list filter\\\allcurrentaddprefix$:/config/zettelkasten/SideBar/Visibility/\\\ variable\\\vizTiddler\\\>\\n\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\u003Ctd>\u003C$link to\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/$link>\u003C/td>\\n\\t\\t\\t\\t\u003Ctd>\u003C$checkbox tiddler\u003C\u003CvizTiddler>> field\\\private\\\ checked\\\yes\\\ unchecked\\\no\\\/>\u003C/td>\\n\\t\\t\\t\\t\u003Ctd>\u003C$checkbox tiddler\u003C\u003CvizTiddler>> field\\\public\\\ checked\\\yes\\\ unchecked\\\no\\\/>\u003C/td>\\n\\t\\t\\t\\t\u003Ctd>\u003C$transclude field\\\description\\\>(//built-in tab//)\u003C/$transclude>\u003C/td>\\n\\t\\t\\t\u003C/tr>\\n\\t\\t\u003C/$list>\\n\\t\u003C/$list>\\n\u003C/table>\},\$:/tzk/js/ListSubscriptionsWidget\:{\title\:\$:/tzk/js/ListSubscriptionsWidget\,\text\:\/*\\\\\\ntitle: $:/tzk/js/ListSubscriptionsWidget\\ntype: application/javascript\\nmodule-type: widget\\nPull details on all subscriptions for a given user into the TiddlyWiki.\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nlet ENDPOINT \\\https://0tkdn6wpl9.execute-api.us-east-1.amazonaws.com/default/SubscribeToZettelkastenTiddler\\\;\\n\\nfunction gfv(id) {\\n\\t\\treturn document.getElementById(id).value\\n}\\n\\nfunction sendRequest(widget, url, params, callback) {\\n\\t\\tlet xhr new XMLHttpRequest();\\n\\t\\txhr.open(POST, url, true);\\n\\t\\txhr.responseType json;\\n\\t\\txhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded);\\n\\n\\t\\txhr.onload () > {\\n\\t\\t\\t\\tlet status xhr.status;\\n\\t\\t\\t\\tif (status 200) {\\n\\t\\t\\t\\t\\t\\tconsole.log(xhr.response);\\n\\t\\t\\t\\t\\t\\tif (xhr.response\\\status\\\ \\\success\\\) {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(null, xhr.response, widget);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(status, xhr.response, widget);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tcallback(status, xhr.response);\\n\\t\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t// Turn the data object into an array of URL-encoded key/value pairs.\\n\\t\\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\\n\\t\\tlet urlEncodedDataPairs , name;\\n\\t\\tfor (name in params) {\\n\\t\\t\\t\\turlEncodedDataPairs.push(encodeURIComponent(name) + + encodeURIComponent(paramsname));\\n\\t\\t}\\n\\t\\txhr.send(urlEncodedDataPairs.join(&))\\n};\\n\\nfunction getSubscriptions(widget, user, token) {\\n\\t\\tvar params new Object();\\n\\t\\tparams.user user;\\n\\t\\tparams.token token;\\n\\t\\tparams.operation \\\list\\\;\\n\\n\\t\\tsendRequest(widget, ENDPOINT, params, (err, data, widget) > {\\n\\t\\t\\t\\tif (err ! null) {\\n\\t\\t\\t\\t\\t\\tif (datareason \\\Invalid token\\\) {\\n\\t\\t\\t\\t\\t\\t\\talert(\\\Your access code is invalid or missing. Please choose send a new one and try the new access code you are emailed.\\\)\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\talert(\\\Unknown error viewing subscriptions. Please contact zettelkasten@sorenbjornstad.com for assistance.\\\);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tvar subs datasubscribed_tiddlers;\\n\\t\\t\\t\\t\\t\\tvar tiddlerList \\\\\\ + subs.join(\\\ \\\) + \\\\\\;\\n\\t\\t\\t\\t\\t\\twidget.wiki.setText(\\\$:/temp/Subscriptions\\\, \\\list\\\, undefined, tiddlerList);\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t});\\n}\\n\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FeedbackWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFeedbackWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nFeedbackWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nFeedbackWidget.prototype.execute function() {\\n\\tthis.user this.getAttribute(\\\user\\\);\\n\\tthis.token this.getAttribute(\\\token\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nFeedbackWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\name\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nFeedbackWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar self this, options {};\\n\\treturn getSubscriptions(self, this.user, this.token);\\n};\\n\\nexports\\\action-refreshsubscriptions\\\ FeedbackWidget;\\n\\n})();\,\type\:\application/javascript\,\module-type\:\widget\,\created\:\20210612152514906\,\creator\:\soren\,\modified\:\20251011163103829\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/SendFeedbackWidget\:{\title\:\$:/tzk/js/SendFeedbackWidget\,\text\:\/*\\\\\\ntitle: $:/tzk/js/SendFeedbackWidget\\ntype: application/javascript\\nmodule-type: widget\\nAction widget to call an API.\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nlet ENDPOINT \\\https://351uof5dxh.execute-api.us-east-1.amazonaws.com/default/startZettelkastenConversation\\\;\\n\\nfunction gfv(id) {\\n\\t\\treturn document.getElementById(id).value\\n}\\n\\nfunction sendRequest(url, params, callback) {\\n\\t\\tlet xhr new XMLHttpRequest();\\n\\t\\txhr.open(POST, url, true);\\n\\t\\txhr.responseType json;\\n\\t\\txhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded);\\n\\n\\t\\txhr.onload () > {\\n\\t\\t\\t\\tlet status xhr.status;\\n\\t\\t\\t\\tif (status 200) {\\n\\t\\t\\t\\t\\t\\tconsole.log(xhr.response);\\n\\t\\t\\t\\t\\t\\tif (xhr.response\\\status\\\ \\\success\\\) {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(null, xhr.response);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(status, xhr.response);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tcallback(status, xhr.response);\\n\\t\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t// Turn the data object into an array of URL-encoded key/value pairs.\\n\\t\\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\\n\\t\\tlet urlEncodedDataPairs , name;\\n\\t\\tfor (name in params) {\\n\\t\\t\\t\\turlEncodedDataPairs.push(encodeURIComponent(name) + + encodeURIComponent(paramsname));\\n\\t\\t}\\n\\t\\txhr.send(urlEncodedDataPairs.join(&))\\n};\\n\\nfunction submitFeedback(tiddler, email, comment) {\\n\\t\\tvar params new Object();\\n\\t\\tparams.tiddler tiddler\\n\\t\\tparams.email email\\n\\t\\tparams.comment comment\\n\\n\\t\\tsendRequest(ENDPOINT, params, (err, data) > {\\n\\t\\t\\t\\tif (err ! null) {\\n\\t\\t\\t\\t\\t\\talert(\\\Error sending mail: \\\ + data.reason);\\n\\t\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\talert(\\\Thanks for getting in touch! Youll receive a copy of your message and I will write back to you when I am able.\\\);\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t});\\n}\\n\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FeedbackWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFeedbackWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nFeedbackWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nFeedbackWidget.prototype.execute function() {\\n\\tthis.tiddlerName this.getAttribute(\\\tiddler\\\);\\n\\tthis.email this.getAttribute(\\\email\\\);\\n\\tthis.comment this.getAttribute(\\\comment\\\);\\n\\tthis.debuginfo this.getAttribute(\\\debuginfo\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nFeedbackWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\name\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nFeedbackWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\treturn submitFeedback(this.tiddlerName, this.email, this.comment);\\n};\\n\\nexports\\\action-sendfeedback\\\ FeedbackWidget;\\n\\n})();\,\type\:\application/javascript\,\module-type\:\widget\,\created\:\20210102234204312\,\creator\:\soren\,\modified\:\20251011163122843\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/SubscriptionManagementWidget\:{\title\:\$:/tzk/js/SubscriptionManagementWidget\,\text\:\/*\\\\\\ntitle: $:/tzk/js/SubscriptionManagementWidget\\ntype: application/javascript\\nmodule-type: widget\\nAction widget to call an API.\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nlet ENDPOINT \\\https://0tkdn6wpl9.execute-api.us-east-1.amazonaws.com/default/SubscribeToZettelkastenTiddler\\\;\\n\\nfunction gfv(id) {\\n\\t\\treturn document.getElementById(id).value\\n}\\n\\nfunction sendRequest(url, params, callback) {\\n\\t\\tlet xhr new XMLHttpRequest();\\n\\t\\txhr.open(POST, url, true);\\n\\t\\txhr.responseType json;\\n\\t\\txhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded);\\n\\n\\t\\txhr.onload () > {\\n\\t\\t\\t\\tlet status xhr.status;\\n\\t\\t\\t\\tif (status 200) {\\n\\t\\t\\t\\t\\t\\tconsole.log(xhr.response);\\n\\t\\t\\t\\t\\t\\tif (xhr.response\\\status\\\ \\\success\\\) {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(null, xhr.response);\\n\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tcallback(status, xhr.response);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tcallback(status, xhr.response);\\n\\t\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\t// Turn the data object into an array of URL-encoded key/value pairs.\\n\\t\\t// https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest\\n\\t\\tlet urlEncodedDataPairs , name;\\n\\t\\tfor (name in params) {\\n\\t\\t\\t\\turlEncodedDataPairs.push(encodeURIComponent(name) + + encodeURIComponent(paramsname));\\n\\t\\t}\\n\\t\\txhr.send(urlEncodedDataPairs.join(&))\\n};\\n\\nfunction subscribe(tiddler, user, token, operation) {\\n\\t\\tvar params new Object();\\n\\t\\tparams.tiddler tiddler;\\n\\t\\tparams.user user;\\n\\t\\tparams.token token;\\n\\t\\tparams.operation operation;\\n\\n\\t\\tsendRequest(ENDPOINT, params, (err, data) > {\\n\\t\\t\\t\\tif (err ! null) {\\n\\t\\t\\t\\t\\tif (datareason \\\Invalid token\\\) {\\n\\t\\t\\t\\t\\t\\talert(\\\Your access code is invalid or missing. Please choose send a new one and try the new access code you are emailed.\\\)\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\talert(\\\Unknown error managing subscriptions. Please contact zettelkasten@sorenbjornstad.com for assistance.\\\);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn false;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\tconsole.log(\\\Subscription operation returned success.\\\);\\n\\t\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t});\\n}\\n\\n\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\n\\nvar FeedbackWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\n\\n/*\\nInherit from the base widget class\\n*/\\nFeedbackWidget.prototype new Widget();\\n\\n/*\\nRender this widget into the DOM\\n*/\\nFeedbackWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\n\\n/*\\nCompute the internal state of the widget\\n*/\\nFeedbackWidget.prototype.execute function() {\\n\\tthis.tiddlerName this.getAttribute(\\\tiddler\\\);\\n\\tthis.user this.getAttribute(\\\user\\\);\\n\\tthis.token this.getAttribute(\\\token\\\);\\n\\tthis.operation this.getAttribute(\\\operation\\\);\\n};\\n\\n/*\\nRefresh the widget by ensuring our attributes are up to date\\n*/\\nFeedbackWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(changedAttributes\\\name\\\) {\\n\\t\\tthis.refreshSelf();\\n\\t\\treturn true;\\n\\t}\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\n\\n/*\\nInvoke the action associated with this widget\\n*/\\nFeedbackWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\treturn subscribe(this.tiddlerName, this.user, this.token, this.operation);\\n};\\n\\nexports\\\action-managesubscription\\\ FeedbackWidget;\\n\\n})();\,\type\:\application/javascript\,\module-type\:\widget\,\created\:\20210612035906052\,\creator\:\soren\,\modified\:\20251011163135326\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/dateadd.js\:{\title\:\$:/tzk/js/dateadd.js\,\text\:\/*\\\\\\ntitle: $:/tzk/js/dateadd.js\\ntype: application/javascript\\nmodule-type: macro\\n\\nCourtesy of stobot, adapted from Jed Carty:\\nhttps://groups.google.com/g/tiddlywiki/c/y_GjM302u60/m/u_aZ6GhEBwAJ\\nhttp://inmysocks.tiddlyspot.com/#$:/inmysocks/macros/add-time.js\\n\\nTakes a base date and adds days, months or years\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\n/*\\nInformation about this macro\\n*/\\n\\nexports.name \\\dateadd\\\;\\n\\nexports.params \\n {name: \\\basedate\\\},\\n {name: \\\days\\\},\\n {name: \\\months\\\},\\n {name: \\\years\\\},\\n {name: \\\template\\\}\\n;\\n\\n/*\\nRun the macro\\n*/\\nexports.run function(basedate, days, months, years, template) {\\n \\n //Make each date object.\\n \\n if (basedate \\\\\\) {\\n var newdate new Date();\\n } else {\\n var baseyear basedate.substr(0,4);\\n var basemonth basedate.substr(4,2);\\n var baseday basedate.substr(6,2);\\n var newdate new Date(Number(baseyear), Number(basemonth)-1, Number(baseday), 0, 0, 0);\\n }\\n\\n var new_year Number(newdate.getFullYear())+Number(years);\\n var new_month Number(newdate.getMonth())+Number(months);\\n var new_day Number(newdate.getDate())+Number(days);\\n\\n var output_date new Date(new_year, new_month, new_day, 0, 0, 0);\\n\\n var result (output_date.getFullYear()*10000) + ((output_date.getMonth()+1)*100) + (output_date.getDate());\\n\\n if(template \\\\\\){\\n return result;\\n } else {\\n return $tw.utils.formatDateString(output_date,template);\\n }\\n};\\n\\n})();\,\type\:\application/javascript\,\module-type\:\macro\,\created\:\20230407020448179\,\creator\:\soren\,\modified\:\20251011163032836\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/excise-private-chunk.js\:{\title\:\$:/tzk/js/excise-private-chunk.js\,\text\:\/*\\\\\\ntitle: $:/tzk/js/excise-private-chunk.js\\ntype: application/javascript\\nmodule-type: texteditoroperation\\n\\nText editor operation to excise the selection to a new private-chunk tiddler.\\n\\nSIB 2021-05-21: Copied from the standard excise operation and modified as needed.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nexports\\\excisePrivateChunk\\\ function(event, operation) {\\n\\tvar editTiddler this.wiki.getTiddler(this.editTitle),\\n\\t\\teditTiddlerTitle this.editTitle;\\n\\tif(editTiddler && editTiddler.fields\\\draft.of\\\) {\\n\\t\\teditTiddlerTitle editTiddler.fields\\\draft.of\\\;\\n\\t}\\n\\tvar excisionTitle this.wiki.generateNewTitle(editTiddlerTitle + \\\/p\\\);\\n\\tthis.wiki.addTiddler(new $tw.Tiddler(\\n\\t\\tthis.wiki.getCreationFields(),\\n\\t\\tthis.wiki.getModificationFields(),\\n\\t\\t{\\n\\t\\t\\ttitle: excisionTitle,\\n\\t\\t\\ttext: operation.selection,\\n\\t\\t\\ttags: \\\PrivateChunk\\\\\n\\t\\t}\\n\\t));\\n\\toperation.replacement \\\{{\\\ + excisionTitle + \\\||PrivateChunk}}\\\;\\n\\toperation.cutStart operation.selStart;\\n\\toperation.cutEnd operation.selEnd;\\n\\toperation.newSelStart operation.selStart;\\n\\toperation.newSelEnd operation.selStart + operation.replacement.length;\\n};\\n\\n})();\,\type\:\application/javascript\,\module-type\:\texteditoroperation\,\created\:\20210522033305614\,\creator\:\soren\,\modified\:\20251011163044009\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/filters/isoweek.js\:{\title\:\$:/tzk/js/filters/isoweek.js\,\text\:\/*\\\\\\ntitle: $:/tzk/js/filters/isoweek.js\\ntype: application/javascript\\nmodule-type: filteroperator\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\n\\nfunction dateFromString(str) {\\n // Extract individual components\\n var year str.slice(0, 4);\\n var month str.slice(4, 6) || 1;\\n var day str.slice(6, 8) || 1;\\n var hour str.slice(8, 10) || 0;\\n var minute str.slice(10, 12) || 0;\\n var second str.slice(12, 14) || 0;\\n var millisecond str.slice(14) || 0;\\n return new Date(year, month - 1, day, hour, minute, second, millisecond);\\n}\\n\\nfunction getWeek(date) {\\n date.setHours(0, 0, 0, 0);\\n // Thursday in current week decides the year.\\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\\n // January 4 is always in week 1.\\n var week1 new Date(date.getFullYear(), 0, 4);\\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\\n return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\\n}\\n\\n/*\\nExport our filter function\\n*/\\nexports.isoweek function(source,operator,options) {\\n\\tvar results ;\\n\\t\\n\\tvar field operator.suffix;\\n\\tvar week parseInt(operator.operand);\\n\\tsource(function(tiddler, title) {\\n\\t\\tvar dateFieldValue tiddler.getFieldString(field);\\n\\t\\tif (getWeek(dateFromString(dateFieldValue)) week) {\\n\\t\\t\\tresults.push(title)\\n\\t\\t}\\n\\t});\\n\\t\\n\\treturn results;\\n};\\n\\n})();\\n\,\type\:\application/javascript\,\module-type\:\filteroperator\,\created\:\20241025010454024\,\creator\:\soren\,\modified\:\20251011163145196\,\modifier\:\soren\,\tags\:\\},\$:/tzk/js/thirdparty/TiddlyTools/Time/action-timeout.js\:{\title\:\$:/tzk/js/thirdparty/TiddlyTools/Time/action-timeout.js\,\text\:\/*\\\\\\ntitle: action-timeout.js\\ntype: application/javascript\\nmodule-type: widget\\nauthor: Eric Shulman elsdesign@gmail.com\\nrevision: 1.4\\n\\n$action-timeout invokes actions once after a specified delay, or repeatedly at a specified interval\\n\\n\\\\*/\\n\\n(function(){\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\use strict\\\;\\nvar Widget require(\\\$:/core/modules/widgets/widget.js\\\).widget;\\nvar TimeoutWidget function(parseTreeNode,options) {\\n\\tthis.initialise(parseTreeNode,options);\\n};\\nTimeoutWidget.prototype new Widget();\\nTimeoutWidget.prototype.render function(parent,nextSibling) {\\n\\tthis.computeAttributes();\\n\\tthis.execute();\\n};\\nTimeoutWidget.prototype.execute function() {\\n\\tthis.delay this.getAttribute(\\\delay\\\, \\\1000\\\);\\n\\tthis.interval this.getAttribute(\\\interval\\\,\\\1000\\\);\\n\\tthis.actions this.getAttribute(\\\actions\\\, \\\\\\);\\n};\\nTimeoutWidget.prototype.refresh function(changedTiddlers) {\\n\\tvar changedAttributes this.computeAttributes();\\n\\tif(Object.keys(changedAttributes).length > 0) { this.refreshSelf(); return true; }\\n\\treturn this.refreshChildren(changedTiddlers);\\n};\\nTimeoutWidget.prototype.allowActionPropagation function() { return false; };\\nTimeoutWidget.prototype.invokeAction function(triggeringWidget,event) {\\n\\tvar selfthis;\\n\\tif (self.delay) setTimeout( function() { self.invokeActionString(self.actions,self,event); }, self.delay);\\n\\tif (self.interval) setInterval(function() { self.invokeActionString(self.actions,self,event); }, self.interval);\\n\\treturn true; // Action was invoked\\n};\\nexports\\\action-timeout\\\ TimeoutWidget;\\n})();\,\type\:\application/javascript\,\module-type\:\widget\,\author\:\Eric Shulman elsdesign@gmail.com\,\revision\:\1.4\,\created\:\20150728060155235\,\creator\:\soren\,\modified\:\20251011163155555\,\modifier\:\soren\,\tags\:\\},\$:/tzk/refexplorer/All\:{\title\:\$:/tzk/refexplorer/All\,\caption\:\All\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging +!title\u003CstoryTiddler>sort\,\created\:\20200329160001633\,\creator\:\soren\,\modified\:\20251011192850648\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/All!!condition}}\\n\\tcaption\\\Reference Explorer (all types)\\\\\n/>\},\$:/tzk/refexplorer/Footnotes\:{\title\:\$:/tzk/refexplorer/Footnotes\,\caption\:\Footnotes\,\condition\:\searchfnote\,\created\:\20210719234943395\,\creator\:\soren\,\modified\:\20251011192900740\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define find(text, begin, end, output:\\\simple\\\, mode:\\\all\\\)\\n\u003C$vars \\n fulltext\u003C\u003C__text__>>\\n start\u003C\u003C__begin__>>\\n stop\u003C\u003C__end__>>\\n output-macro\u003C\u003C__output__>>\\n>\\n\u003C$list variable\\\p1\\\ filter\\\\u003Cfulltext>splitbefore\u003Cstart>\\\>\\n\u003C$list variable\\\p2\\\ filter\\\\u003Cfulltext>removeprefix\u003Cp1>\\\>\\n\u003C$list variable\\\p3\\\ filter\\\\u003Cp2>splitbefore\u003Cstop>removesuffix\u003Cstop>\\\>\\n\u003C$macrocall $name\u003C\u003Coutput-macro>> p\u003C\u003Cp3>> />\\n\u003C$reveal type\\\match\\\ text\\\all\\\ default\u003C\u003C__mode__>> >\\n\u003C$macrocall $name\\\find\\\\\n text{{{\u003Cp2>removeprefix\u003Cp3>removeprefix\u003Cstop>}}}\\n begin\u003C\u003Cstart>>\\n end\u003C\u003Cstop>>\\n output\u003C\u003Coutput-macro>>\\n/>\\n\u003C/$reveal>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/$list>\\n\u003C/$vars>\\n\\\\end\\n\\n\\\\define simple(p)\\n\u003C$text text\u003C\u003C__p__>> />\\n\\\\end\\n\\n\\\\define simple-list(p)\\n\u003Cli>\u003C$text text\u003C\u003C__p__>>/>\u003C/li>\\n\\\\end\\n\\n\\\\define showfnotes(filter:\\\\u003CcurrentTiddler>\\\, title:\\\Empty\\\ class:\\\fnote-list\\\, emptyMessage:\\\\\\)\\n\u003C$vars leftDelimiter\\\\u003C\u003Cfnote \\\>\\n\u003C$list filter\\\subfilter\u003C__filter__>search:text:regexp\u003CleftDelimiter>limit1\\\ variablenull emptyMessage\u003C\u003C__emptyMessage__>> >\u003C!-- check to see if there is any footnote -->\\n\u003C$reveal tag\\\div\\\ type\\\nomatch\\\ default\\\Empty\\\ text\u003C\u003C__title__>> >\\n\u003Ch2>$title$\u003C/h2>\\n\u003C/$reveal>\\n\u003Col class\\\$class$\\\>\\n\u003C$list filter\u003C\u003C__filter__>> >\\n\u003C$macrocall $name\\\find\\\ \\n text{{!!text}}\\n begin\\\\u003C\u003Cfnote \\\\\n end\\\>>\\\\\n output\\\output-fnote\\\\\n/>\\n\u003C/$list>\\n\u003C/ol>\\n\u003C/$list>\\n\u003C/$vars>\\n\\\\end\\n\\n\\\\define output-fnote(p)\\n\u003C$vars output$p$>\\n\u003Cli>\u003C\u003Coutput>>\u003C/li>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C$tiddler tiddler\u003C\u003CstoryTiddler>>>\\n\u003C\u003Cshowfnotes emptyMessage:\\\There are no footnotes in this tiddler. (Use the `fnote` macro to create a footnote.)\\\>>\\n\u003C/$tiddler>\\n\\n\u003C!--\\nBased on https://kookma.github.io/TW-Refnotes/.\\nCopyright (c) 2019--2021 Mohammad Rahmani.\\nCopyright (c) 2021 Soren Bjornstad.\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\Software\\\), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n-->\},\$:/tzk/refexplorer/GlobalJournalSubtiddlerFilter\:{\title\:\$:/tzk/refexplorer/GlobalJournalSubtiddlerFilter\,\created\:\20230405172618948\,\creator\:\soren\,\modified\:\20251011193313838\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\define global-journal-subtiddler-filter() tagJournal tagDate split/firsttagJournal split/firsttagDate\},\$:/tzk/refexplorer/Ideas\:{\title\:\$:/tzk/refexplorer/Ideas\,\caption\:\Ideas\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging +tagIdea!title\u003CstoryTiddler>sort\,\created\:\20200321225433677\,\creator\:\soren\,\modified\:\20251011192918587\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Ideas!!condition}}\\n\\tcaption\\\Idea Explorer\\\\\n/>\},\$:/tzk/refexplorer/Journal\:{\title\:\$:/tzk/refexplorer/Journal\,\caption\:\Journal\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging +filter\u003Cglobal-journal-subtiddler-filter>!title\u003CstoryTiddler>sort\,\created\:\20221205033543222\,\creator\:\soren\,\modified\:\20251011193315478\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\import $:/tzk/refexplorer/GlobalJournalSubtiddlerFilter\\n\\n\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Journal!!condition}}\\n\\tcaption\\\Journal Explorer\\\\\n/>\},\$:/tzk/refexplorer/LinkGraph\:{\title\:\$:/tzk/refexplorer/LinkGraph\,\caption\:\Link graph\,\condition\:\links\,\created\:\20210301193644181\,\creator\:\soren\,\modified\:\20251011192935125\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!--\\nDepth: \u003C$range tiddler\\\$:/temp/OutboundLinkDepth\\\ index\u003C\u003CcurrentTiddler>> min1 max4/> \u003C$text text{{{ $:/temp/OutboundLinkDepthgetindex\u003CcurrentTiddler>!isblankelse2 }}}/>\\n\\n\u003C$tidgraph start\u003C\u003CcurrentTiddler>> mode\\\linking\\\ maxdepth{{{ $:/temp/OutboundLinkDepthgetindex\u003CcurrentTiddler> }}}/>\\n-->\\n\\n\u003C$tidgraph start\u003C\u003CcurrentTiddler>> mode\\\linking\\\ maxdepth3 />\},\$:/tzk/refexplorer/LinkTypeTemplate\:{\title\:\$:/tzk/refexplorer/LinkTypeTemplate\,\created\:\20200322005021864\,\creator\:\soren\,\modified\:\20251011192942561\,\modifier\:\soren\,\tags\:\\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C!--\\nHere:\\n\\tcurrentTiddler: The tiddler for which the ReferenceExplorer is being displayed\\n\\tcurrentRecord: The related tiddler which is being processed\\n-->\\n\u003Ctd>\\n\\t\u003C$list filter\\\\\n\\t\\t\u003CcurrentRecord>\\n\\t\\t-\u003CcurrentTiddler>tagging +elseTagged\\n\\t\\t-\u003CcurrentTiddler>links +elseLink\\n\\t\\t-\u003CcurrentTiddler>backlinks +elseBacklink\\n\\t\\t-\u003CcurrentTiddler>backtranscludes +elseTranscluded\\n\\t\\t-\u003CcurrentRecord> +elseSubtiddler\\n\\t\\\ variable\\\inferredType\\\>\\n\\t\\t\u003C\u003CinferredType>>\\n\\t\u003C/$list>\\n\u003C/td>\},\$:/tzk/refexplorer/PAO\:{\title\:\$:/tzk/refexplorer/PAO\,\caption\:\People\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging \u003CstoryTiddler>getpeopleenlist-input \u003CstoryTiddler>getauthorenlist-input +tagPAOsort\,\created\:\20200321230153705\,\creator\:\soren\,\modified\:\20251011192953282\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tcaption\\\Person/Animal/Organization Explorer\\\\\n\\tfilter{{$:/tzk/refexplorer/PAO!!condition}}\\n/>\\n\},\$:/tzk/refexplorer/Places\:{\title\:\$:/tzk/refexplorer/Places\,\caption\:\Places\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging \u003CstoryTiddler>getplacesenlist-input +tagPlacesort\,\created\:\20200329145138606\,\creator\:\soren\,\modified\:\20251011193001524\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Places!!condition}}\\n\\tcaption\\\Place Explorer\\\\\n/>\},\$:/tzk/refexplorer/ReferenceExplorer\:{\title\:\$:/tzk/refexplorer/ReferenceExplorer\,\created\:\20200321225156394\,\creator\:\soren\,\description\:\Display the Reference Explorer, a table that shows related topics, for the current tiddler.\,\modified\:\20251011201747725\,\modifier\:\soren\,\tags\:\$:/tags/ViewTemplate\,\transcludedin\:\All non-system tiddlers.\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\import $:/tzk/refexplorer/GlobalJournalSubtiddlerFilter\\n\\n\\\\procedure ref-explorer()\\n\\t\u003C$let\\n\\t\\ttabList{{{ alltiddlers+shadowstag$:/tags/ReferenceExplorerTab :reduce\u003CstoryTiddler>subfilter{!!condition}then\u003CcurrentTiddler>addprefix addprefix\u003Caccumulator> }}}\\n\\t\\tmyDefaultTab{{{ \u003CstoryTiddler>hasrefexplorer-starttabgetrefexplorer-starttabaddprefix$:/tzk/refexplorer/ ~enlist\u003CtabList>first }}}\\n\\t>\\n\\t\\t\u003C% if \u003CtabList>!isblank %>\\n\\t\\t\\t\u003C$macrocall\\n\\t\\t\\t\\t$name\\\tabs\\\\\n\\t\\t\\t\\ttabsList\u003C\u003CtabList>>\\n\\t\\t\\t\\tdefault\u003C\u003CmyDefaultTab>>\\n\\t\\t\\t\\tclass\\\sib-reference-explorer\\\\\n\\t\\t\\t/>\\n\\t\\t\u003C% endif %>\\n\\t\u003C/$let>\\n\\\\end\\n\\n\u003C% if allcurrent!issystem %>\\n\\t\u003C% if {!!refexplorer-hide}match %>\\n\\t\\t\u003C\u003Cref-explorer>>\\n\\t\u003C% else %>\\n\\t\\t\u003C!-- If collapsed: -->\\n\\t\\t\u003C% if $:/temp/sibrefexplorer-showsgetindex\u003CcurrentTiddler>matchshow %>\\n\\n\\t\\t\\t\u003C\u003Cclarify>>\\n\\t\\t\\t\u003Chr>\\n\\t\\t\\t\u003Cdiv>\\n\\t\\t\\t\\t\u003Cspan style\\\font-size: 50%;\\\>\\n\\t\\t\\t\\t\\t\u003C\u003Cfa-lbox fa-info>>\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\\tExperiencing poor performance? Try hiding the reference explorer on this tiddler.\\n\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C$button\\n\\t\\t\\t\\tsetTitle\\\$:/temp/sibrefexplorer-shows\\\\\n\\t\\t\\t\\tsetIndex\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t\\tsetTo\\\hide\\\\\n\\t\\t\\t>\\n\\t\\t\\t\\tHide Reference Explorer\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\u003C\u003Cref-explorer>>\\n\\n\\t\\t\u003C% else %>\\n\\n\\t\\t\\t\u003C\u003Cclarify>>\\n\\t\\t\\t\u003Chr>\\n\\t\\t\\t\u003Cdiv>\\n\\t\\t\\t\\t\u003Cspan style\\\font-size: 50%;\\\>\\n\\t\\t\\t\\t\\t\u003C\u003Cfa-lbox fa-info>>\\n\\t\\t\\t\\t\u003C/span>\\n\\t\\t\\t\\tThis tiddler does not display its references automatically, likely because there are a large number of them which could slow the wiki down.\\n\\t\\t\\t\u003C/div>\\n\\t\\t\\t\u003C$button setTitle\\\$:/temp/sibrefexplorer-shows\\\\\n\\t\\t\\t\\t\\t\\t\\t setIndex\u003C\u003CcurrentTiddler>>\\n\\t\\t\\t\\t\\t\\t\\t setTo\\\show\\\>\\n\\t\\t\\t\\tShow Reference Explorer\\n\\t\\t\\t\u003C/$button>\\n\\t\\t\\t\\n\\t\\t\u003C% endif %>\\n\u003C% endif %> \u003C!-- system tiddler -->\},\$:/tzk/refexplorer/Sinks\:{\title\:\$:/tzk/refexplorer/Sinks\,\caption\:\Sinks\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging +tagSinksort\,\created\:\20200329154311717\,\creator\:\soren\,\modified\:\20251011193035840\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Sinks!!condition}}\\n\\tcaption\\\Sink Explorer\\\\\n/>\},\$:/tzk/refexplorer/Sources\:{\title\:\$:/tzk/refexplorer/Sources\,\caption\:\Sources\,\condition\:\\u003CstoryTiddler>backlinks \u003CstoryTiddler>links \u003CstoryTiddler>tagging +regexp:tagsClass|Publication|Sourcesort\,\created\:\20200321225758173\,\creator\:\soren\,\modified\:\20251011193044554\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Sources!!condition}}\\n\\tcaption\\\Source Explorer\\\\\n/>\},\$:/tzk/refexplorer/Subtiddlers\:{\title\:\$:/tzk/refexplorer/Subtiddlers\,\caption\:\Subtiddlers\,\condition\:\alltiddlersprefix\u003CstoryTiddler>!field:title\u003CstoryTiddler>sort\,\created\:\20201206210345097\,\creator\:\soren\,\modified\:\20251011193053180\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/Subtiddlers!!condition}}\\n\\tcaption\\\Subtiddler Explorer\\\\\n/>\\n\},\$:/tzk/refexplorer/TranscludedIn\:{\title\:\$:/tzk/refexplorer/TranscludedIn\,\caption\:\Transcluded in\,\condition\:\\u003CstoryTiddler>backtranscludes +sort\,\created\:\20250204171605659\,\creator\:\soren\,\modified\:\20251011193101720\,\modifier\:\soren\,\tags\:\$:/tags/ReferenceExplorerTab\,\type\:\text/vnd.tiddlywiki\,\text\:\\u003C$m2.reference-explorer\\n\\tfilter{{$:/tzk/refexplorer/TranscludedIn!!condition}}\\n\\tcaption\\\Transclusion Explorer\\\\\n/>\},\$:/tzk/refexplorer/Widget\:{\title\:\$:/tzk/refexplorer/Widget\,\created\:\20240601195324030\,\creator\:\soren\,\modified\:\20251011193114293\,\modifier\:\soren\,\tags\:\$:/tags/Global\,\type\:\text/vnd.tiddlywiki\,\text\:\\\\\widget $m2.reference-explorer(caption, filter)\\n\\t\u003Ctable class\\\ideas-table\\\>\\n\\t\\t\u003Ccaption class\\\ideas-table-caption\\\>\u003C\u003Ccaption>>\u003C/caption>\\n\\t\\t\u003Cthead>\\n\\t\\t\u003Ctr>\\n\\t\\t\\t\u003Cth>Title\u003C/th>\\n\\t\\t\\t\u003Cth>Type\u003C/th>\\n\\t\\t\\t\u003Cth>Tags\u003C/th>\\n\\t\\t\\t\u003Cth style\\\width: 8rem;\\\>Modified\u003C/th>\\n\\t\\t\u003C/tr>\\n\\t\\t\u003C/thead>\\n\\t\\t\u003Ctbody>\\n\\t\\t\\t\u003C$list filter\u003C\u003Cfilter>> variable\\\currentRecord\\\>\\n\\t\\t\\t\\t\u003Ctr>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$link to\u003C\u003CcurrentRecord>> style\\\color: white;\\\/>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\\t{{||$:/tzk/refexplorer/LinkTypeTemplate}}\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$list filter\\\\u003CcurrentRecord>tagssort\\\ variable\\\currentTag\\\>\\n\\t\\t\\t\\t\\t\\t\\t\u003C$macrocall $name\\\tag-pill\\\ tag\u003C\u003CcurrentTag>>/> \\n\\t\\t\\t\\t\\t\\t\u003C/$list>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\\t\u003Ctd>\\n\\t\\t\\t\\t\\t\\t\u003C$view tiddler\u003C\u003CcurrentRecord>> field\\\modified\\\ format\\\date\\\ template\\\YYYY-0MM-0DD 0hh:0ss\\\/>\\n\\t\\t\\t\\t\\t\u003C/td>\\n\\t\\t\\t\\t\u003C/tr>\\n\\t\\t\\t\u003C/$list>\\n\\t\\t\u003C/tbody>\\n\\t\u003C/table>\\n\\\\end $m2.reference-explorer\\n\},\$:/tzk/styles/ExampleWidget\:{\title\:\$:/tzk/styles/ExampleWidget\,\created\:\20240611044049361\,\creator\:\soren\,\modified\:\20251011162147281\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\.sib-examples-indented-div {\\n position: relative;\\n padding-left: 2.0em; /* Adjust this value as needed for indentation */\\n /*margin-left: 1em; Adjust this value to control the main bodys horizontal offset */\\n}\\n\\n.sib-examples-indented-div div.sib-examples-indented-div-inner::before {\\n\\tcontent: \\\\\\;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: 0.59em;\\n\\twidth: 1px;\\n\\tbackground-color: #00a;\\n\\tz-index: 1;\\n\\tmargin-top: 5px;\\n\\tmargin-bottom: 5px;\\n}\\n\\n.sib-examples-indented-div blockquote {\\n\\tmargin-left: 0;\\n}\\n\\n.sib-examples-indented-div::before {\\n content: attr(data-number);\\n position: absolute;\\n left: 0px; /* Adjust this value to position the circle horizontally */\\n top: 50%; /* Start positioning from the middle of the parent */\\n transform: translateY(-50%); /* Translate back by 50% of its height to center vertically */\\n background-color: #ffffff; /* Background color of the circle */\\n border: 1px solid #00a; /* Border color of the circle */\\n border-radius: 50%;\\n width: 20px; /* Adjust this value for circle size */\\n height: 20px; /* Adjust this value for circle size */\\n line-height: 18px; /* Match line height to circle size for perfect vertical alignment */\\n text-align: center;\\n color: #00a;\\n font-size: 12px; /* Adjust this value as needed for number size */\\n font-weight: 600;\\n z-index: 2;\\n}\},\$:/tzk/styles/FiveColMode\:{\title\:\$:/tzk/styles/FiveColMode\,\text\:\/* FIVE COLUMN MODE */\\n.fivecolumns {\\n display: block;\\n column-count: 5;\\n column-gap: 0em;\\n}\\n\\n/*\\nThis appears to have become standard, keeping here for now just in case\\n\\n.fourcolumns {\\n display:block;\\n -moz-column-count:5;\\n -moz-column-gap:0em;\\n -webkit-column-count: 5;\\n -webkit-column-gap:0em;\\n}\\n*/\,\created\:\20200221170525425\,\creator\:\soren\,\modified\:\20251011162227320\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/css\},\$:/tzk/styles/General\:{\title\:\$:/tzk/styles/General\,\created\:\20201121015759457\,\creator\:\soren\,\modified\:\20251011162236794\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\.left-float {\\n\\tfloat: left;\\n\\tmargin-right: 30px;\\n}\\n\\n.right-float {\\n\\tfloat: right;\\n\\tmargin-left: 30px;\\n}\\n\\n.clarify {\\n clear: both;\\n}\\n\\n.sib-private-chunk {\\n\\tborder-left: 3px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding-left: 0.5em;\\n}\\n\\n.color-splotch {\\n\\tfloat: left;\\n\\twidth: 10px;\\n\\theight: 10px;\\n\\tmargin: 5px;\\n\\tmargin-left: 0px;\\n\\tborder: 1px solid rgba(0, 0, 0, 0.2)\\n}\\n\\n.dialogue {\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tpadding: 1rem;\\n}\\n\\n.dialogue p {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\n.checklist p, .checklist p span {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\n.epistemic-color-box {\\n\\twidth: 10px;\\n\\theight: 10px;\\n\\tmargin: 5px;\\n\\tmargin-left: 0px;\\n\\tborder: 1px solid rgba(0, 0, 0, 0.2);\\n\\tdisplay: inline-block;\\n}\\n\\n.rt-fake-codeblock pre {\\n\\tbackground-color: unset;\\n\\tborder: unset;\\n}\},\$:/tzk/styles/OpenTopBar\:{\title\:\$:/tzk/styles/OpenTopBar\,\created\:\20210627163819671\,\creator\:\soren\,\modified\:\20251011162256108\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\div.sib-quick-tiddler-jump {\\n\\tbackground-color: \u003C\u003Ccolor menubar-background>>;\\n\\tposition: fixed;\\n\\tz-index: 850;\\n\\tdisplay: inline-block;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tleft: 0;\\n\\ttext-align: center;\\n\\theight: {{$:/config/sib/TopBarHeight}};\\n\\toverflow: auto;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolor muted-foreground>>;\\n\\tpadding-bottom: 3px;\\n\\tpadding-top: 3px;\\n\\tfont-size: 12px;\\n}\\n\\ndiv.sib-quick-tiddler-jump a {\\n\\tcolor: \u003C\u003Ccolor menubar-foreground>>;\\n}\\n\\ndiv.sib-quick-tiddler-jump a.tc-tiddlylink-shadow {\\n\\tfont-weight: normal;\\n}\\n\\ndiv.sib-quick-tiddler-jump ul {\\n\\tlist-style-type: none;\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\n/* Droppable placeholders take up no space until we drag something there. */\\ndiv.sib-quick-tiddler-jump ul li.tc-droppable div.tc-droppable-placeholder {\\n\\theight: 0;\\n}\\n\\n/* TW inserts this as a placeholder after the last item. We have to resize it to match the rest. */\\ndiv.sib-quick-tiddler-jump ul > div.tc-droppable div.tc-droppable-placeholder svg {\\n\\theight: 0;\\n\\twidth: 1rem;\\n}\\n\\ndiv.sib-quick-tiddler-jump .tc-dropzone.tc-dragover:before {\\n\\tdisplay: inline-block;\\n}\\n\\ndiv.sib-quick-tiddler-jump ul > li.tc-droppable div,\\n\\t\\tdiv.sib-quick-tiddler-jump ul > div.tc-droppable div {\\n\\tdisplay: inline-block;\\n}\\n\\ndiv.sib-quick-tiddler-jump .tc-droppable.tc-dragover > .tc-droppable-placeholder {\\n\\tdisplay: inline-block;\\n\\tbackground-color: green;\\n\\tborder: 0px;\\n\\twidth: 1rem;\\n\\theight: 1rem;\\n\\tmargin-bottom: 0;\\n\\tmargin-top: 0;\\n\\tpadding-bottom: 0;\\n\\tpadding-top: 0;\\n}\\n\\ndiv.sib-quick-tiddler-jump ul li, div.sib-quick-tiddler-jump ul > div.tc-droppable {\\n\\tdisplay: inline-block;\\n}\\n\\n.sib-quick-tiddler-jump ul li div:nth-child(2):after {\\n\\tpadding-left: 5px;\\n\\tcontent: \\\·\\\;\\n\\tpadding-right: 5px;\\n}\\n\\n/* not last-child because theres a dropzone after it */\\n.sib-quick-tiddler-jump ul li:nth-last-child(2) div:after {\\n\\tcontent: \\\\\\;\\n}\},\$:/tzk/styles/Publicity\:{\title\:\$:/tzk/styles/Publicity\,\created\:\20210825185232587\,\creator\:\soren\,\modified\:\20251011162306034\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\.sib-viewer-clarify {\\n\\tclear: both;\\n}\\n\\n.sib-viewer-private-editions {\\n\\tcolor: orange;\\n}\\n\\n.sib-viewer-public-line {\\n\\tfloat: right;\\n\\tcolor: #5E81AC;\\n\\tmargin-top: 1ex;\\n}\\n\\n@media print\\n{\\n\\t.sib-viewer-public-line {\\n\\t\\tdisplay: none;\\n\\t}\\n}\},\$:/tzk/styles/ReferenceExplorer\:{\title\:\$:/tzk/styles/ReferenceExplorer\,\created\:\20210721020857476\,\creator\:\soren\,\modified\:\20251011162313072\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\table.ideas-table {\\n\\twidth: 100%;\\n\\tcaption-side: top;\\n}\\n\\ntable.ideas-table th {\\n\\tbackground-color: #aaaaaa;\\n}\\n\\ntable.ideas-table th, table.ideas-table td {\\n\\tborder: 0;\\n\\tborder-right: 1px solid #777777;\\n\\tborder-left: 1px solid #777777;\\n}\\n\\ntable.ideas-table th {\\n\\tborder-top: 1px solid #777777;\\n}\\n\\ntable.ideas-table tr:last-child {\\n\\tborder-bottom: 1px solid #777777;\\n}\\n\\n.ideas-table-caption {\\n margin: 0 0 0 0;\\n padding: 2px 7px 2px 7px;\\n text-shadow: none;\\n /*color: #FFFFFF;*/\\n background-color: #aaaaaa;\\n vertical-align: middle;\\n border-top: 1px solid #777777;\\n border-right: 1px solid #777777;\\n border-bottom: 0px solid #777777;\\n border-left: 1px solid #777777;\\n text-align: center;\\n}\\n\\ntable.ideas-table tr {\\n background-color: #eeeeee;\\n}\\n\\ntable.ideas-table tr:nth-child(even) {\\n\\tbackground-color: #cccccc;\\n}\\n\\ntable.ideas-table a {\\n\\tcolor: \u003C\u003Ccolor foreground>>;\\n}\\n\\n@media print\\n{\\n\\t.sib-reference-explorer {\\n\\t\\tdisplay: none;\\n\\t}\\n}\},\$:/tzk/styles/Subtitle\:{\title\:\$:/tzk/styles/Subtitle\,\created\:\20210611020047183\,\creator\:\soren\,\modified\:\20251011162321806\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\.tc-title { font-size: 0.9em; color: \u003C\u003Ccolor tiddler-title-foreground>>; }\\n\\n.tc-subtitle { font-size: 0.9em; color: \u003C\u003Ccolor tiddler-title-foreground>>; }\\n\\n.tc-subtitle .tc-tiddlylink { margin-right: 0; }\},\$:/tzk/styles/body\:{\title\:\$:/tzk/styles/body\,\created\:\20210615030339909\,\creator\:\soren\,\modified\:\20251011162140284\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\/* Allow the story river to get a good bit wider than the text since this gives useful space to the navbars and balances out any empty space more nicely, but not so long that it looks ridiculous. */\\ndiv.tc-tiddler-frame { max-width: 60em; margin-left: auto; margin-right: auto; }\\n\\ndiv.tc-tiddler-edit-frame { max-width: 90em; margin-left: auto; margin-right: auto; }\\n\\ndiv.tc-tiddler-body { max-width: 50em; margin: auto; }\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview {\\ngrid-template-columns: 69% 29%;\\n}\\n\\n.tc-tiddler-preview-preview {\\n z-index: 1;\\n}\\n\\n/*\\n.tc-tiddler-frame .tc-tiddler-preview {\\n/*.tc-edit-texteditor */\\n width: 69%;\\n}\\n\\ndiv.tc-tiddler-preview-preview {\\n\\twidth: 29%;\\n}\\n*/\\n\\ndivdata-tiddler-title*\\\$:/tzk/Tools/ReadingInbox\\\ div.tc-tiddler-body, divdata-tags*\\\Indite\\\ div.tc-tiddler-body {\\n\\tmax-width: 100%;\\n}\\ndivdata-tiddler-title*\\\$:/tzk/Tools/ReadingInbox\\\,\\ndivdata-tags*\\\Indite\\\ {\\n\\tmax-width: 90em;\\n}\\n\\ndivdata-tiddler-title*\\\LifetimeReading\\\ div.tc-tiddler-body {\\n\\tmax-width: 100%;\\n}\\ndivdata-tiddler-title*\\\LifetimeReading\\\ {\\n\\tmax-width: 90em;\\n}\\n\\ndivdata-tags*\\\Wide\\\ div.tc-tiddler-body {\\n\\tmax-width: 100%;\\n}\\ndivdata-tags*\\\Wide\\\ {\\n\\tmax-width: 75em;\\n}\\n\\nh2:not(.tc-title) { \\n\\ttext-align: center;\\n}\\n\\n\\n/* The standard title-bar styling handles multi-line titles very poorly; this improves the spacing. */\\n.tc-titlebar {\\n\\tline-height: 1.1em;\\n\\t/*padding-bottom: 0.2em;*/\\n}\\n\},\$:/tzk/styles/footnote\:{\title\:\$:/tzk/styles/footnote\,\created\:\20210719234124096\,\creator\:\soren\,\modified\:\20251011162154318\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\/*\\nBased on https://kookma.github.io/TW-Refnotes/.\\nCopyright (c) 2019--2021 Mohammad Rahmani.\\nCopyright (c) 2021, 2023 Soren Bjornstad.\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \\\Software\\\), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n\\nTHE SOFTWARE IS PROVIDED \\\AS IS\\\, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n/*\\n\\n/* Automatic counter for fnote macro. The counter resets at the begining of each tiddler. */\\n.tc-tiddler-frame {\\n counter-reset: fnote-count;\\n}\\n.refnotes-footnote {\\n counter-increment: fnote-count;\\n}\\n.refnotes-footnote:after {\\n content: counter(fnote-count);\\n font-size:small;\\n\\tvertical-align: top;\\n\\tfont-size: 0.8em;\\n /*vertical-align: super;\\n line-height: 1.5;*/\\n margin-left: 0em;\\n color: \u003C\u003Ccolor footnote-number>>;\\n}\\n.refnotes-footnote.refnotes-update:after {\\n color: deepskyblue;\\n}\\n\\n\\n/* tooltip class used for ref, fnote and other macros */\\n.refnotes-tooltip {\\n position: relative;\\n display: inline-block;\\n cursor: pointer; \\n}\\n\\n.refnotes-tooltip .refnotes-tooltiptext{\\n font-size: 0.90em; /* change if it is too small */\\n}\\n\\n.refnotes-tooltip .refnotes-tooltiptext {\\n visibility: hidden;\\n background-color: #fff;\\n color: #222222;\\n text-align: left;\\n border-radius: 2px;\\n padding: 5px 10px;\\n max-width: 30vw;\\n max-height:20em;\\n overflow-y: auto;\\n cursor: auto;\\n width: max-content;\\n width: -moz-max-content;\\n width: -webkit-max-content;\\n width: -o-max-content;\\n\\n /* Position the tooltip */\\n position: absolute;\\n z-index: 9999;\\n bottom: 100%;\\n left: 50%;\\n margin-left: -40px;\\n box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19);\\n}\\n\\n.refnotes-tooltip:hover .refnotes-tooltiptext {\\n visibility: visible;\\n /*opacity: 0.9;*/\\n}\\n\\n/* for small screens */\\n\\n@media screen and (max-width: 960px) {\\n.refnotes-tooltip .refnotes-tooltiptext {\\n /* Position the tooltip */\\n \\tposition:fixed;\\n top:0;\\n left: 0;\\n margin-left: 0px;\\n bottom: unset;\\n width:100%;\\n max-width: 100vw;\\n z-index: 9999;\\n} \\n\\n.refnotes-tooltip:hover .refnotes-tooltiptext {\\n opacity: 1;\\n} \\n \\n}\\n\\n/* Footnote class*/\\n\\n.fnote-list{\\n/* color:blue;*/\\n font-size:90%;\\n}\\n\\n.fnote-pretty{\\n display: block;\\n margin: 0.5em;\\n margin-right: auto;\\n width: 100% !important;\\n border-collapse: collapse;\\n padding: 15px 15px 15px 25px; /*left padding25px*/\\n border-width: 0px;\\n border-style: solid;\\n border-left-width: 1px;\\n background-color: rgb(255,248,220);\\n color: rgb(91,49,7);\\n line-height: 1.2em; \\n font-size:0.9em;\\n}\},\$:/tzk/styles/hr\:{\title\:\$:/tzk/styles/hr\,\created\:\20210624125244567\,\creator\:\soren\,\modified\:\20251011162243974\,\modifier\:\soren\,\tags\:\$:/tags/Stylesheet\,\type\:\text/vnd.tiddlywiki\,\text\:\/* Based on: Flaired edges, by Tomas Theunissen\\n https://css-tricks.com/examples/hrs/ */\\n\\n.tc-tiddler-body > hr, .tc-tiddler-preview-preview > hr {\\n overflow: visible; /* For IE */\\n height: 30px;\\n border-style: solid;\\n border-color: \u003C\u003Ccolor primary>>;\\n border-width: 1px 0 0 0;\\n border-radius: 20px;\\n\\t\\tmargin-bottom: -15px;\\n\\t\\tmax-width: 80%;\\n\\t\\tmargin-top: 30px;\\n}\\n.tc-tiddler-body hr:before, .tc-tiddler-preview-preview hr:before { /* Not really supposed to work, but does */\\n display: block;\\n content: \\\\\\;\\n height: 30px;\\n border-style: solid;\\n border-color: \u003C\u003Ccolor primary>>;\\n border-width: 0 0 1px 0;\\n border-radius: 20px;\\n margin-top: -31px;\\n}\}}}},{title:$:/sib/Buttons/NewDate,caption:new date,created:20230405212651539,creator:soren,description:Create a new date tiddler,list-after:$:/tzk/Buttons/NewSource,modified:20251011161332436,modifier:soren,tags:$:/tags/PageControls,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\n\\procedure create-action(datedate)\n\t\u003C$action-sendmessage\n\t\t$message\tm-new-tiddler\\n\t\ttitle`δ${ {CurrentDefaultRomanticInterest} }$:${ \u003Cnow \YYYY-0MM-0DD ddd\> }$`\n\t\ttags\Date\\n\t\tri-date-summary\\\n\t\tri-date-with{{CurrentDefaultRomanticInterest}}\n\t\tri-date-interest-delta\\\n\t/>\n\\end create-action\n\n\u003C$button\n\tclass\u003C\u003Ctv-config-toolbar-class>>\n\tselectedClass\tc-selected\\n\ttooltip{{!!caption}}\n\tactions\u003C\u003Ccreate-action>>\n>\n\t\u003C% if \u003Ctv-config-toolbar-icons>matchyes %>\n\t\t\u003Ci class\fas fa-user\ style\position:relative; bottom:-1px; left:0px;\/>\n\t\u003C% endif %>\n\t\u003C% if \u003Ctv-config-toolbar-text>matchyes %>\n\t\t\u003Cspan class\tc-btn-text\>\n\t\t\t\u003C$text text{{$:/sib/Buttons/NewDate!!caption}}/>\n\t\t\u003C/span>\n\t\u003C% endif %>\n\u003C/$button>},{title:$:/sib/Buttons/Tools,caption:tools,created:20210825121643555,creator:soren,description:Open the Zettelkasten tools,list-after:$:/core/ui/Buttons/control-panel,modified:20251011163300835,modifier:soren,tags:$:/tags/PageControls,type:text/vnd.tiddlywiki,text:\u003C$button class\u003C\u003Ctv-config-toolbar-class>> selectedClass\tc-selected\ tooltip{{!!caption}}>\n\t\u003C$list filter\\u003Ctv-config-toolbar-icons>matchyes\>\n\t\t{{$:/core/images/theme-button}}\n\t\u003C/$list>\n\t\u003C$list filter\\u003Ctv-config-toolbar-text>matchyes\>\n\t\u003Cspan class\tc-btn-text\>\u003C$text text{{$:/sib/Buttons/Tools!!caption}}/>\u003C/span>\n\t\u003C/$list>\n\t\n\t\u003C$action-navigate $to\$:/tzk/Tools\/>\n\u003C/$button>},{title:$:/sib/indite/ChildListItemTemplate,created:20210415020141514,modified:20210421012848006,tags:,type:text/vnd.tiddlywiki,text:\u003C$link to\u003C\u003CcurrentTiddler>>/> ({{!!indite-class}})},{title:$:/sib/indite/InditeChildren,created:20210410004529968,creator:soren,modified:20250802220040115,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\\define copy-me() \u003C$button message\tm-copy-to-clipboard\ param{{!!text}} class\tc-btn-invisible tc-tiddlylink\>wikitext\u003C/$button>\n\n\\define copy-rendered()\n\u003C$set name\hideNotes\ value\yes\>\n\u003C$wikify name\copyText\ text\{{!!text}}\ output\html\ mode\block\>\n\t\t\u003C$button message\tm-copy-to-clipboard\ param\u003C\u003CcopyText>> class\tc-btn-invisible tc-tiddlylink\>html\u003C/$button>\n\u003C/$wikify>\n\u003C/$set>\n\\end\n\n\\define copies()\ncopy \u003C\u003Ccopy-me>> · \u003C\u003Ccopy-rendered>>\n\\end\n\n\\define editmode()\n\u003C$radio field\editmode\ value\view\>view\u003C/$radio> \n\u003C$radio field\editmode\ value\edit\>edit\u003C/$radio> \n\u003C$radio field\editmode\ value\both\>side-by-side\u003C/$radio>\n\\end\n\n\\define remove-action() \u003C$action-listops $tiddler\u003C\u003ClistingTiddler>> $filter\\u003ClistingTiddler>getlistenlist-inputremove\u003CcurrentTiddler>\/>\n\n\\define remove() \u003C$button class\tc-btn-invisible tc-tiddlylink\ actions\u003C\u003Cremove-action>>>remove\u003C/$button>\n\n\\define move-up-action()\n\u003C$let previousTiddler{{{ \u003CcurrentTiddler>previous\u003ClistingTiddler> }}}>\n\t\u003C$action-listops \n\t\t$tiddler\u003C\u003ClistingTiddler>>\n\t\t$filter\\u003ClistingTiddler>getlistenlist-inputremove\u003CcurrentTiddler>insertbefore\u003CcurrentTiddler>,\u003CpreviousTiddler>\/>\n\u003C/$let>\n\\end\n\n\\define move-down-action()\n\u003C$let nextTiddler{{{ \u003CcurrentTiddler>next\u003ClistingTiddler> }}}>\n\t\u003C$action-listops \n\t\t$tiddler\u003C\u003ClistingTiddler>>\n\t\t$filter\\u003ClistingTiddler>getlistenlist-inputremove\u003CcurrentTiddler>insertafter\u003CcurrentTiddler>,\u003CnextTiddler>\/>\n\u003C/$let>\n\\end\n\n\\define toggle-expanded-action() \u003C$action-listops $tiddler\u003C\u003ClistingTiddler>> $field\expanded-children\ $subfilter\+toggle\u003CcurrentTiddler>\/>\n\n\\define cycle-state-action() \u003C$action-listops $tiddler\u003C\u003CcurrentTiddler>> $field\indite-state\ $subfilter\+cyclescratch draft final\/>\n\n\\define moves() \u003C$button class\tc-btn-invisible tc-tiddlylink\ actions\u003C\u003Cmove-up-action>>>up\u003C/$button> · \u003C$button class\tc-btn-invisible tc-tiddlylink\ actions\u003C\u003Cmove-down-action>>>down\u003C/$button>\n\n\\define expand-collapse() \u003C$button class\tc-btn-invisible tc-tiddlylink\ actions\u003C\u003Ctoggle-expanded-action>>>\u003C% if \u003ClistingTiddler>contains:expanded-children\u003CcurrentTiddler> %>collapse\u003C% else %>expand\u003C% endif %>\u003C/$button>\n\n\\define cycle-state()\n\t\u003C$button class\tc-btn-invisible tc-tiddlylink\ actions\u003C\u003Ccycle-state-action>>>\n\t\t\u003C% if allcurrent!hasindite-state %>\n\t\t\tunset\n\t\t\u003C% else %>\n\t\t\t\u003C% if {!!indite-state}matchscratch %>\n\t\t\t \u003Cspan style\color: red;\>\n\t\t\t\t\t\u003C$text text{{!!indite-state}}/>\n\t\t\t\t\u003C/span>\n\t\t\t\u003C% elseif {!!indite-state}matchdraft %>\n\t\t\t \u003Cspan style\color: gray;\>\n\t\t\t\t\t\u003C$text text{{!!indite-state}}/>\n\t\t\t\t\u003C/span>\n\t\t\t\u003C% elseif {!!indite-state}matchfinal %>\n\t\t\t \u003Cspan style\color: purple;\>\n\t\t\t\t\t\u003C$text text{{!!indite-state}}/>\n\t\t\t\t\u003C/span>\n\t\t\t\u003C% else %>\n\t\t\t \u003Cspan style\color: red;\>\n\t\t\t\t\t\u003C$text text{{!!indite-state}}/>\n\t\t\t\t\u003C/span>\n\t\t\t\u003C% endif %>\n\t\t\u003C% endif %>\n\t\u003C/$button>\n\\end\n\n\\define tidblock(typeName, viewBlock:\\\\u003C$transclude mode\block\/>\\\)\n\t\u003C$set name\thewidth\ value{{{ allcurrenteditmodeboththenindite-halfwidthelseindite-fullwidth }}}>\n\t\t\u003C$list filter\\u003ChideNotes>matchyesthenelseyes!isblank\ variable_>\n\t\t\t\u003Ctitle-block>\n\t\t\t\t\u003C\u003C__typeName__>>: \u003C$link />\u003Cbr>\n\t\t\t\tstate: \u003C\u003Ccycle-state>>\u003Cbr>\n\t\t\t\t\u003C\u003Cremove>> · \u003C\u003Cmoves>>\u003Cbr>\n\t\t\t\t\u003C\u003Ccopies>>\u003Cbr>\n\t\t\t\t\u003C\u003Cexpand-collapse>>\u003Cbr>\n\t\t\t\t\u003C% if \u003ClistingTiddler>contains:expanded-children\u003CcurrentTiddler> %>\n\t\t\t\t\t\u003C\u003Ceditmode>>\n\t\t\t\t\u003C% endif %>\n\t\t\t\u003C/title-block>\n\t\t\u003C/$list>\n\t\t\n\t\t\u003C% if \u003ClistingTiddler>contains:expanded-children\u003CcurrentTiddler> %>\n\t\t\t\u003C$list filter\allcurrenteditmodeview allcurrenteditmodeboth allcurrent!haseditmode\>\n\t\t\t\t\u003Cdiv class{{{ indite-sbs-vieweraddsuffix addsuffix\u003Cthewidth> }}}>\n\t\t\t\t\t\u003C% if allcurrenthascaption %>\u003Ch2>{{!!caption}}\u003C/h2>\u003C% endif %>\n\t\t\t\t\t$viewBlock$\n\t\t\t\t\u003C/div>\n\t\t\t\u003C/$list>\n\n\t\t\t\u003C$list filter\\u003Ctr-rendering>!matchyes\ variable_>\n\t\t\t\u003C$list filter\allcurrenteditmodeedit allcurrenteditmodeboth\>\n\t\t\t\t\u003Cdiv class{{{ indite-sbs-editoraddsuffix addsuffix\u003Cthewidth> }}}>\n\t\t\t\t\t\u003C$edit-text tiddler\u003C\u003CcurrentTiddler>> field\caption\ tag\input\ />\u003Cbr>\n\t\t\t\t\t\u003C$transclude tiddler\$:/core/ui/EditTemplate/body/editor\/>\n\t\t\t\t\u003C/div>\n\t\t\t\u003C/$list>\n\t\t\t\u003C/$list>\n\t\t\u003C% else %>\n\t\t \u003Cdiv class{{{ indite-sbs-vieweraddsuffix addsuffix\u003Cthewidth> }}}>\n\t\t\t \u003Ch2>{{!!caption}}\u003C/h2>\n\t\t\t\u003C/div>\n\t\t\u003C% endif %>\n\t\u003C/$set>\n\\end\n\n\\define add-here-action() \u003C$action-listops $subfilter\enlist{!!list}insertbefore:childTiddler\u003CactionTiddler>\/>\n\n\u003C$let listingTiddler\u003C\u003CcurrentTiddler>>>\n\u003C$list filter{{!!list}} variable\childTiddler\>\n \u003C!--\n\t\u003Ctitle-block>\n\t\t\u003C$droppable actions\u003C\u003Cadd-here-action>>>(//drop to insert tiddler here//)\u003C/$droppable>\n\t\u003C/title-block>\n\t-->\n\t\u003C$tiddler tiddler\u003C\u003CchildTiddler>>>\n\t\u003C% if \u003CchildTiddler>indite-classchapter %>\n\t\t\u003C\u003Ctidblock \Chapter\>>\n\t\u003C% elseif \u003CchildTiddler>indite-classepigraph %>\n\t\t\u003C\u003Ctidblock \Epigraph\ \\\\u003Cblockquote>\u003C$transclude mode\block\/>\u003C/blockquote>\\\>>\n\t\u003C% elseif \u003CchildTiddler>indite-classscene %> \n\t\t\u003C\u003Ctidblock \Scene\>>\n\t\u003C% elseif \u003CchildTiddler>indite-classnotes %>\n\t\t\u003C\u003Ctidblock \Notes\>>\n\t\u003C% elseif \u003CchildTiddler>!hasindite-class %>\n\t\t\u003C\u003Ctidblock \Other\>>\n\t\u003C% else %>\n\t ERROR: Unknown indite class \u003C$text text{{{ \u003CchildTiddler>getindite-class }}}/>\n\t\u003C% endif %>\n\t\u003C/$tiddler>\n\t\u003Cbr>\n\u003C/$list>\n\u003C/$let>},{title:$:/sib/indite/macros,created:20210410020513999,modified:20210410031557381,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\define indite-note(txt)\n\t\u003C$list filter\\u003ChideNotes>matchyesthenelseyes!isblank\ variable_>\n\t\t\u003Caside>$txt$\u003C/aside>\n\t\u003C/$list>\n\\end},{title:$:/sib/indite/Sidebar,created:20210410005234756,modified:20210410005104788,tags:,type:text/vnd.tiddlywiki,text:This is the sidebar.},{title:$:/sib/indite/Stylesheet,created:20210410003437115,creator:soren,modified:20250802214449520,modifier:soren,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki,text:divdata-tags*\Indite\ div.tc-tiddler-body {\n\tdisplay: none;\n}\n\ndiv.indite-text {\n\tfont-family: \Bitstream Charter\, Garamond, Georgia, serif;\n\tfont-size: 16px;\n\tmax-width: 80rem;\n\twidth: 80%;\n\t/*margin-left: 30%;*/\n\tmargin-left: 20%;\n}\n\ndiv.indite-sbs-viewer > h2 {\n margin-top: 0;\n\tpadding-top: 0;\n text-align: left;\n}\n\ndiv.indite-sbs-viewer {\n min-height: 1.5in;\n}\n\ndiv.indite-text > p > div.indite-halfwidth {\n\twidth: 49%;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\ndiv.indite-text > p > div.indite-fullwidth {\n\twidth: 100%;\n}\n\ndiv.indite-text > p > div.indite-fullwidth.indite-sbs-viewer {\n\tmax-width: 40em;\n\tmargin-left: 2em;\n\tmargin-right: auto;\n}\n\ndiv.indite-text div p:first-child {\n\tmargin-top: 0;\n\tpadding-top: 0;\n}\n\ndiv.indite-text div.indite-sbs-editor div {\n\tfont-size: 12px;\n}\n\n.hide-notes title-block, .hide-notes aside {\n\tdisplay: none;\n}\n\ntitle-block, aside {\n\tfont-size: 12px;\n\tfont-family: \Bitstream Vera Sans\, \Bitstream Sans\, Arial, sans-serif;\n\tvertical-align: top;\n\tdisplay: block;\n\tfloat: left;\n\t/*position: absolute;*/\n\tpadding-left: 2rem;\n\tpadding-right: 1rem;\n\tmargin-left: -50%;\n\t/*left: 0;*/\n\twidth: 50%;\n\ttext-align: right;\n\tlist-style-type: none;\n\tclear: both;\n\tmargin-bottom: 1rem;\n}\n},{title:$:/sib/indite/ViewTemplate,caption:Indite view template,created:20210410004824597,creator:soren,description:Tiddlers that are part of the Indite writing system (under development) hide the normal view template via CSS and use this one instead.,modified:20210924153731019,modifier:soren,tags:$:/tags/ViewTemplate,transcludedin:All tiddlers tagged \u003C\u003Ctag Indite>>.,type:text/vnd.tiddlywiki,text:\u003C$list filter\allcurrenttagIndite\ variable_>\n\n\u003C$reveal tag\div\ class\indite-body\ type\nomatch\ stateTitle\u003C\u003Cfolded-state>> text\hide\ retain\yes\ animate\yes\>\n\n\u003Cdiv style\border: 1px solid;\>\n\u003C$count filter\allcurrentlist\/> children (drag and drop to add or reorder):\n\n\u003C$macrocall $name\list-links-draggable\ tiddler\u003C\u003CcurrentTiddler>> itemTemplate\$:/sib/indite/ChildListItemTemplate\/>\n\n\u003C/div>\n\n\u003Cdiv class\indite-text\>\n\n\u003C$transclude mode\block\/>\n\n\u003C/div>\n\n\u003C/$reveal>\n\n\u003C/$list>},{title:$:/sib/Macros/unote,created:20230822142501088,creator:soren,description:Create an Update Footnote at the current location (for use in journal and frozen tiddlers). Identical to `fnote` except for its color and beginning the text with //Update//. This currently doesnt work – it doesnt appear in the footnotes list and gets misnumbered.,example:This is my initial statement.\u003C\u003Cunote \This is my update.\>>,modified:20230822145024147,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\define unote(note)\n\u003Cdiv class\refnotes-tooltip refnotes-footnote refnotes-update\>\u003Cdiv class\refnotes-tooltiptext\>//Update:// $note$\u003C/div>\u003C/div>\n\\end},{title:$:/sib/Procedures/_delta-interest,created:20230416155348451,creator:soren,description:Color and symbol for specified change of sentiment toward a romantic interest.,modified:20240601142928215,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\procedure delta-interest()\n\t\u003C% if {!!ri-date-interest-delta}matchgrowing %>\n\t\t\u003Cspan style\color: lightblue;\>🡕\u003C/span>\n\t\u003C% elseif {!!ri-date-interest-delta}matchwaning %>\n\t\t\u003Cspan style\color: tomato;\>🡖\u003C/span>\n\t\u003C% elseif {!!ri-date-interest-delta}matchtrudging %>\n\t\t\u003Cspan style\color: yellow;\>🡒\u003C/span>\n\t\u003C% elseif {!!ri-date-interest-delta}isblank %>\n\t\t—\n\t\u003C% endif %>\n\\end},{title:$:/sib/Procedures/ap,created:20220923035826684,creator:soren,description:Create a web link to an item in attopublish, with the link text \ap #whatever\.,example:\u003C\u003Cap 23>>,modified:20240601150228386,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\procedure ap(refnum)\n\tap|attopublish \n\t\u003C$m2.extlink\n\t\turltemplate\https://ap.sorenbjornstad.com/#post-$1$\\n\t\tslotvalue\u003C\u003Crefnum>>\n\t\ttext\u003C\u003Crefnum>>\n\t/>\n\\end},{title:$:/sib/Procedures/cb,created:20210807150635941,creator:soren,description:Create a reference to an entry in Chrono Book, linking to the ChronoBook page and showing the UOF (Unified Occurrence Format) afterwards.,example:\u003C\u003Ccb \10.15\>>,modified:20240601140226793,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\procedure cb(uof) CB|ChronoBook \u003C\u003Cuof>>},{title:$:/sib/Procedures/colorsplotch,created:20210522022802823,creator:soren,description:Display a small box of color, the color being any CSS color. This macro usually only works properly at the beginning of a line.,example:\u003C\u003Ccolorsplotch \#ffffff\>> White,modified:20240601140837836,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\procedure colorsplotch(color) \u003Cdiv class\color-splotch\ style`background: $(color)$;`>},{title:$:/sib/Procedures/rt,created:20210522020717636,creator:soren,description:Create a web link to an item in RandomThoughts, with the link text \RT #whatever\.,example:\u003C\u003Crt 12345>>,modified:20240601150128837,modifier:soren,tags:$:/tags/Macro,type:text/vnd.tiddlywiki,text:\\procedure rt(refnum)\n\tRT|RandomThoughts \n\t\u003C$m2.extlink\n\t\turltemplate`https://randomthoughts.sorenbjornstad.com/#$1$`\n\t\tslotvalue\u003C\u003Crefnum>>\n\t\ttext\u003C\u003Crefnum>>\n\t/>\n\\end},{title:$:/sib/RawMarkup/SimpleAnalytics,text:\u003C!--\nThis snippet sends pageviews to Simple Analytics, a privacy-friendly analytics service.\nIt records only aggregate statistics and cannot identify you.\n-->\n\u003Cscript>window.sa_eventwindow.sa_event||function(){a.slice.call(arguments);sa_event.q?sa_event.q.push(a):sa_event.qa};\u003C/script>\n\u003Cscript async defer src\https://scripts.simpleanalyticscdn.com/latest.js\>\u003C/script>\n\u003Cnoscript>\u003Cimg src\https://queue.simpleanalyticscdn.com/noscript.gif\ alt\\\n/>\u003C/noscript>,type:text/html,created:20200913152403709,modified:20210522015229611,tags:$:/tags/RawMarkup},{title:$:/sib/refexplorer/RT,caption:RT,condition:{$:/RtLinks}jsonextract\u003CstoryTiddler>,created:20230416184506246,creator:soren,modified:20251011194509434,modifier:soren,tags:$:/tags/ReferenceExplorerTab,type:text/vnd.tiddlywiki,text:\u003Ctable class\ideas-table\>\n\t\u003Ccaption class\ideas-table-caption\>Random Thoughts Explorer\u003C/caption>\n\t\u003Cthead>\n\t\t\u003Ctr>\n\t\t\t\u003Cth style\width: 6em;\>Index\u003C/th>\n\t\t\t\u003Cth>Content\u003C/th>\n\t\t\t\u003Cth style\width: 6em;\>Created\u003C/th>\n\t\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t\t\u003C$list filter{{$:/sib/refexplorer/RT!!condition}} variablelinksfor>\n\t\t\t\u003C$list filter\\u003Clinksfor>jsonindexes\ variable\index\>\n\t\t\t\t\u003C$vars rt-id{{{ \u003Clinksfor>jsonextract\u003Cindex>jsongetid}}}>\n\t\t\t\t\t\u003Ctr> \n\t\t\t\t\t\t\u003Ctd>\n\t\t\t\t\t\t\t\u003Ca href{{{ https://randomthoughts.sorenbjornstad.com/#addsuffix\u003Crt-id> }}}>\u003C$text text\u003C\u003Crt-id>>/>\n\t\t\t\t\t\t\t\u003C/a>\n\t\t\t\t\t\t\u003C/td>\n\t\t\t\t\t\t\u003Ctd class\rt-fake-codeblock\>\n\t\t\t\t\t\t\t\u003C$vars linksfor{{{ {$:/RtLinks}jsonextract\u003CstoryTiddler> }}}>\n\t\t\t\t\t\t\t\t\u003C$codeblock code{{{ \u003Clinksfor>jsonextract\u003Cindex>jsongettexttrim }}}/>\n\t\t\t\t\t\t\t\u003C/$vars>\t\n\t\t\t\t\t\t\u003C/td>\n\t\t\t\t\t\t\u003Ctd>\n\t\t\t\t\t\t\t\u003C$text text{{{ \u003Clinksfor>jsonextract\u003Cindex>jsongetcreated_date }}}/>\n\t\t\t\t\t\t\u003C/td>\n\t\t\t\t\t\u003C/tr>\n\t\t\t\t\u003C/$vars>\n\t\t\t\u003C/$list>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>\n\n\t\t\n\t\t\n\u003C!--\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to{{!!title}} tooltip\u003C\u003CthisTooltip>> style\color: white;\/>\u003C/td>\n\t\t\t{{$:/tzk/refexplorer/LinkTypeTemplate}}\n\t\t\t\u003Ctd>\u003C$list filter\allcurrenttagssort\>\u003C$macrocall $name\tag-pill\ tag\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field\modified\ format\date\ template\YYYY-0MM-0DD 0hh:0ss\/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$vars>\n\t\t\u003C/$list>\n-->},{title:$:/sib/Savers/microlinks,created:20240611030927237,creator:soren,modified:20240611035352961,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C$list filter\hasmicrolink\>{{!!microlink}}:{{!!title}};\u003C/$list>},{title:$:/sib/SideBar/Dates,caption:Dates,created:20240211232533020,creator:soren,modified:20251011164713500,modifier:soren,tags:$:/tags/MoreSideBar,type:text/vnd.tiddlywiki,text:\u003C!-- TODO: Split into years/months? -->\n\nTable of romantic interests|RomanticInterest\n\n\u003C$macrocall\n\t$name\tabs\\n\ttabsList\!issystemtagRomanticInterestsortri-date-initial\\n\tdefault{{CurrentDefaultRomanticInterest}}\n\ttemplate\$:/sib/Templates/Topical/DatesWithRomanticInterestSidebarTab\\n\tbuttonTemplate\$:/tzk/Templates/General/TabCaptionTemplate\\n\tclass\tc-vertical\\n/>},{title:$:/sib/SideBar/InfoLinks,created:20210623014041787,creator:soren,list-after:$:/core/ui/SideBarSegments/site-subtitle,modified:20251011194522317,modifier:soren,tags:$:/tags/SideBarSegment,type:text/vnd.tiddlywiki,text:\\procedure go-random-action() \u003C$action-navigate $to{{{ tagIdea!tagPrivateChunk!regexp/!tagStubshufflefirst }}}/>\n\n\u003C% if m2.ffSidebarInfoLinks %>\n\n\tabout|PublicHomepage ·\n\treading|RecentlyRead ·\n\tfavorites|Favorites ·\n\t\u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Cgo-random-action>>>random idea\u003C/$button>\n\n\t\u003Cstyle>\n\t.gtw-sidebar-links a, .gtw-sidebar-links button {\n\t\tcolor: \u003C\u003Ccolor sidebar-foreground>>;\n\t\ttext-decoration: underline;\n\t}\n\t\u003C/style>\n\t\n\u003C% endif %>},{title:$:/sib/SideBar/WeeklyReflections,caption:Weeklies,created:20250902020658452,creator:soren,modified:20251130011138875,modifier:soren,tags:$:/tags/MoreSideBar,type:text/vnd.tiddlywiki,text:\u003C!-- TODO: Split into years/months? -->\n\n\u003Cdl>\n\u003C$list filter\prefixWr:!sort\>\n\t\t\u003Cdt>\u003C$link/>\u003C/dt>\n\t\t\u003Cdd>{{!!description}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>},{title:$:/sib/Templates/Automatic/Date,created:20230405220851883,creator:soren,description:Display information about a date.,modified:20240601162630021,modifier:soren,tags:$:/tags/ViewTemplate,transcludedin:All tiddlers tagged \u003C\u003Ctag Date>>.,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\\function local.sorted-dates-with(ri) tagDateri-date-with\u003Cri>sort\n\n\u003C% if allcurrenttagDate %>\n\n\t\u003Ctable class\date-summary-table\>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Person\u003C/th>\n\t\t\t\u003Ctd>\u003C$link to{{!!ri-date-with}}/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>When\u003C/th>\n\t\t\t\u003Ctd>\u003C$link to{{{ allcurrentsplit:last }}}/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Date #\u003C/th>\n\t\t\t\u003Ctd>\n\t\t\t\t\u003C$count filter\local.sorted-dates-with{!!ri-date-with}compare:string:lteq\u003CcurrentTiddler>\/>/\u003C$count filter\local.sorted-dates-with{!!ri-date-with}\/>\n\t\t\t\t \n\t\t\t\t(\u003C$m2.prevnext-navigation\n\t\t\t\t\tpreviousFilter\tagDateri-date-with{!!ri-date-with}sortbefore\u003CcurrentTiddler>\\n\t\t\t\t\tnextFilter\tagDateri-date-with{!!ri-date-with}sortafter\u003CcurrentTiddler>\\n\t\t\t\t/>);\n\t\t\t\t \n\t\t\t\t\u003C$tiddler tiddler{{!!ri-date-with}}>{{||$:/sib/Templates/Topical/RiStatusLine}}\u003C/$tiddler>\n\t\t\t\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Interest\u003C/th>\n\t\t\t\u003Ctd>\u003C\u003Cdelta-interest>>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Goal\u003C/th>\n\t\t\t\u003Ctd>\n\t\t\t\t{{!!ri-date-goal}}\n\t\t\t\t(\u003Cspan style{{{ {!!ri-date-goal-result}regexpachievedthencornflowerblue ~tomato +addprefixcolor: }}}>{{!!ri-date-goal-result}}\u003C/span>)\n\t\t\t\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Summary\u003C/th>\n\t\t\t\u003Ctd>{{!!ri-date-summary}}\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/table>\n\n\n\t\u003Cstyle>\n\ttable.date-summary-table th {\n\t\ttext-align: left;\n\t\tvertical-align: top;\n\t}\n\t\u003C/style>\n\n\u003C% endif %>},{title:$:/sib/Templates/Automatic/Event,created:20230912033953383,creator:soren,modified:20251011164132279,modifier:soren,tags:$:/tags/ViewTemplate,type:text/vnd.tiddlywiki,text:\u003C$list filter\allcurrenttagEvent\ variable_>\n\n\u003Cdiv class\sib-event-info\>\n\n\u003Cdiv class\sib-event-title\>{{!!caption}}\u003C/div>\n\u003Cdiv class\sib-event-dates\>\n\t{{{ {!!startdate}format:date{$:/config/NewJournal/Title}}}} -- {{{ {!!enddate}format:date{$:/config/NewJournal/Title} }}}\n\u003C/div>\n\n\u003Cdiv class\sib-event-when\>\n\nJournal entries:\n\n\u003Cul>\n\t\u003C$list filter\tagJournal :mapsplit firstsplit-joinaddsuffix1200 +compare:date:gteq{!!startdate}compare:date:lteq{!!enddate} +format:date{$:/config/NewJournal/Title}\>\n\t\t\u003Cli>\u003C$link />\u003C/li>\n\t\u003C/$list>\n\u003C/ul>\n\nMonths included:\n\n\u003C$let\n\tstartyear{{{ {!!startdate}splitfirst4join }}}\n\tstartmonth{{{ {!!startdate}splitfirst6last2jointrim:prefix0}}}\n\tendyear{{{ {!!enddate}splitfirst4join }}}\n\tendmonth{{{ {!!enddate}splitfirst6last2jointrim:prefix0}}}>\n\t\n\t\u003C$list filter\range\u003Cstartyear>,\u003Cendyear>\ variable\year\>\n\t\t\u003C$list filter\range\u003Cstartmonth>,\u003Cendmonth>\ variable\month\>\n\t\t\t\u003C$macrocall $namecalendar year\u003C\u003Cyear>> month\u003C\u003Cmonth>> opts\event\ />\n\t\t\u003C/$list>\n\t\u003C/$list>\n\u003C/$let>\n\n\u003C/div>\n\n\u003Cdiv class\sib-event-who-where\>\n\n\u003C$list filter\allcurrenthaspeople\ variable_>\n\n\tPeople (\u003C$count filter{{!!people}}/>):\n\n\t\u003Cul>\n\t\t\u003C$list filter{{!!people}}>\n\t\t\t\u003Cli>\u003C$link />\u003C/li>\n\t\t\u003C/$list>\n\t\u003C/ul>\n\n\u003C/$list>\n\n\u003C$list filter\allcurrenthasplaces\ variable_>\n\n\tPlaces (\u003C$count filter{{!!places}}/>):\n\n\t\u003Cul>\n\t\t\u003C$list filter{{!!places}}>\n\t\t\t\u003Cli>\u003C$link />\u003C/li>\n\t\t\u003C/$list>\n\t\u003C/ul>\n\t\n\u003C/$list>\n\n\u003C/div>\u003C!-- sib-event-who-where -->\n\n\u003C\u003Cclarify>>\n\n\u003C/div>\u003C!-- sib-event-info -->\n\n\u003Cstyle>\ndiv.sib-event-info {\n\tborder-bottom: 1px solid gray;\n}\ndiv.sib-event-title {\n font-weight: bold;\n\ttext-align: center;\n\tborder-top: 1px solid gray;\n}\ndiv.sib-event-dates {\n\ttext-align: center;\n\tborder-bottom: 1px solid gray;\n}\ndiv.sib-event-when {\n\tfloat: left;\n\twidth: 50%;\n}\ndiv.sib-event-who-where {\n\tfloat: right;\n\twidth: 50%;\n}\n\u003C/style>\n\n\u003C/$list>\n},{title:$:/sib/Templates/Automatic/ReaderActions,created:20210608021806427,description:Provide links that allow users to get in touch with the author, share content, or otherwise interact with it.,modified:20210622002447440,tags:$:/tags/ViewTemplate,transcludedin:All non-system tiddlers, if this is the public edition.,type:text/vnd.tiddlywiki,text:\\define startConvoAction()\n\t\u003C$action-createtiddler $basetitle\$:/temp/Conversation\ $savetitle\$:/temp/ConversationCollector\ target\u003C\u003CcurrentTiddler>> email{{$:/config/sobjornstad/UserEmail}} comment\\/>\n\t\u003C$action-navigate $to\StartAConversation\/>\n\\end\n\n\\define subscribeAction()\n\u003C$action-setfield $tiddler\u003C\u003Cqualify \$:/temp/SubscribeSection\>> text\open\/>\n \u003C!--\u003C$action-managesubscription tiddler\u003C\u003CcurrentTiddler>> user\greata@sorenbjornstad.com\ operation\subscribe\/>-->\n\\end\n\n\\define complete-subscription-action()\n \u003C$action-managesubscription tiddler\u003C\u003CcurrentTiddler>> user{{$:/config/sobjornstad/UserEmail}} operation\subscribe\/>\n\t\u003C$action-setfield $tiddler\u003C\u003Cqualify \$:/temp/SubscribeSection\>> text\\/>\n\\end\n\n\u003C$list filter\allcurrent!issystem\ variable_>\n\u003C$list filter\u003C\u003Cff ContactButtons>> variable_>\n\u003Cdiv style\text-align: center;\>\n\u003C$button class\tc-btn-invisible tc-tiddlylink\ tooltip\Send Soren email about this idea or note.\ actions\u003C\u003CstartConvoAction>>>\n\t\u003Ci class\fa fa-envelope\/> start a conversation\n\u003C/$button> \n\u003C$button class\tc-btn-invisible tc-tiddlylink\ tooltip\Get emails whenever this idea or note is updated.\ actions\u003C\u003CsubscribeAction>>>\n \u003Ci class\fa fa-bell\/> subscribe\n\u003C/$button>\n\u003C/div>\n\n\u003Cdiv class\sib-subscribe-info\>\n\u003C$reveal state\u003C\u003Cqualify \$:/temp/SubscribeSection\>> type\match\ text\open\>\n \u003C$list filter\allcurrentismissing\>//This tiddler doesnt exist yet. Youll be notified if and when it is created.//\u003Cbr>\u003C/$list>\n\tSubscribe with email: \u003C$edit-text tiddler\$:/config/sobjornstad/UserEmail\ tag\input\ default\\/>\n\t\u003C$button actions\u003C\u003Ccomplete-subscription-action>>>Subscribe\u003C/$button>\n\u003C/$reveal>\n\u003C/div>\n\n\u003C/$list>\n\u003C/$list>\n\n\n\u003Cstyle>\ndiv.sib-subscribe-info {\n\ttext-align: center;\n\tmargin-top: 0.5rem;\n}\ndiv.sib-subscribe-info input {\n\twidth: 20em;\n\tmax-width: 50%;\n}\n\u003C/style>},{title:$:/sib/Templates/Automatic/RomanticInterest,created:20230405210835121,creator:soren,description:Display information about a romantic interest (dates we went on, etc.).,modified:20240602163043832,modifier:soren,tags:$:/tags/ViewTemplate,transcludedin:All tiddlers tagged \u003C\u003Ctag RomanticInterest>>.,type:text/vnd.tiddlywiki,text:\u003C% if allcurrenttagRomanticInterest %>\n\n!! Dates\n\n\u003Ctable class\date-list\>\n\t\u003Ctr>\n\t\t\u003Cth>#\u003C/th>\n\t\t\u003Cth>When\u003C/th>\n\t\t\u003Cth>Summary\u003C/th>\n\t\t\u003Cth>ΔI\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter\contains:ri-date-with\u003CcurrentTiddler>!isdraftsort\ counter\counter\>\n\t\t\u003Ctr>\n\t\t\t\u003C!-- https://talk.tiddlywiki.org/t/counter-attribute-of-the-list-widget-not-working/6754/6 -->\n\t\t\t\u003Ctd>\u003C\u003Ccounter>>\u003C/td>\n\t\t\t\u003Ctd>\n\t\t\t\t\u003C$link to\u003C\u003CcurrentTiddler>>>\n\t\t\t\t\t\u003C$text text{{{ allcurrentsplit:butfirst }}}/>\n\t\t\t\t\u003C/$link>\n\t\t\t\u003C/td>\n\t\t\t\u003Ctd>{{!!ri-date-summary}}\u003C/td>\n\t\t\t\u003Ctd>\u003C\u003Cdelta-interest>>\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>\n\nOutcome: {{||$:/sib/Templates/Topical/RiStatusLine}}\n\n\u003C!--\n\u003C\u003Cstretch-template-links \contains:ri-date-with\u003CcurrentTiddler>sort\ smallTemplate:$:/sib/Templates/Topical/DateSummaryStretch largeTemplate:$:/sib/Templates/General/IdentityTemplate>>\n-->\n\n\u003Cstyle>\ntable.date-list td {\n\tvertical-align: top;\n\t}\n\t\ntable.date-list td:nth-child(2) {\n\twidth: 8em;\n}\n\u003C/style>\n\n\u003C% endif %>},{title:$:/sib/Templates/Export/SabbaticalUpdateCabCrosspost,created:20210807200136273,modified:20210807205025301,tags:,type:text/vnd.tiddlywiki,text:\\import $:/core/ui/PageMacros allshadows+tiddlerstag$:/tags/Macro!hasdraft.of\n\n\u003Cdiv id\__title\>{{!!title}}\u003C/div>\n\u003Cdiv id\__caption\>{{!!caption}}\u003C/div>\n\u003Cdiv id\__slug\>{{!!cab-slug}}\u003C/div>\n\n\u003Cdiv id\__content\>\n\t\u003C$transclude mode\block\ />\n\u003C/div>},{title:$:/sib/Templates/TableColumns/ThanksgivingDate,created:20201203034806153,date:20201128,modified:20210522013921371,tags:$:/tags/table/BodyTemplate,tbl-column-list:at,tbl-noedit:,type:text/vnd.tiddlywiki,text:\u003Ctd>\n\u003C$view tiddler\u003C\u003CcurrentRecord>> field\at\ format\date\ template\UTCMMM 0DD\/>\n\u003C/td>},{title:$:/sib/Templates/Topical/AnkiPattern,created:20210312221833396,creator:soren,modified:20240601154947258,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\\procedure transclude-section-with-name(sect, name, isopen:\\)\n\u003C$details summary\u003C\u003Cname>> open\u003C\u003Cisopen>>>\n\t\u003C$tiddler tiddler{{{ allcurrentaddsuffix/addsuffix\u003Csect> }}}>\n\t\t\u003C$list filter\\u003Cisedit>matchyes\ variable_>\n\t\t\t\u003Cdiv style\float: left; width: 49%;\>\n\t\t\t\t{{||$:/core/ui/EditTemplate/body/editor}}\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv style\float: right; width: 49%;\>\n\t\t\t\t\u003C$transclude mode\block\>\n\t\t\t\t\tNone.\n\t\t\t\t\u003C/$transclude>\n\t\t\t\u003C/div>\n\t\t\t\u003Cdiv style\clear: both;\/>\n\t\t\u003C/$list>\n\t\t\u003C$list filter\\u003Cisedit>matchno\ variable_>\n\t\t\t\u003C$transclude mode\block\>\n\t\t\t\tNone.\n\t\t\t\u003C/$transclude>\n\t\t\u003C/$list>\n\t\u003C/$tiddler>\n\u003C/$details>\n\\end\n\n\\procedure transclude-section(sect, isopen:\\) \u003C$macrocall $name\transclude-section-with-name\ sect\u003C\u003Csect>> name\u003C\u003Csect>> isopen\u003C\u003Cisopen>>/>\n\n\u003C% if m2.private %>\n\t\u003C\u003Ctabs \$:/sib/Templates/Topical/AnkiPattern/View $:/sib/Templates/Topical/AnkiPattern/Edit\ default:\$:/sib/Templates/Topical/AnkiPattern/View\>>\n\u003C% else %>\n\t\u003C$transclude tiddler\$:/sib/Templates/Topical/AnkiPattern/View\/>\n\u003C% endif %>},{title:$:/sib/Templates/Topical/AnkiPattern/Common,created:20210313002520118,modified:20210522013653257,tags:,type:text/vnd.tiddlywiki,text:\t\u003C\u003Ctransclude-section \Formula\ \open\>>\n\t\u003C\u003Ctransclude-section \Examples\ \open\>>\n\t\u003C\u003Ctransclude-section \Advantages\ \open\>>\n\t\u003C\u003Ctransclude-section \Disadvantages\ \open\>>\n\t\u003C\u003Ctransclude-section \Cautions\ \open\>>\n\t\u003C\u003Ctransclude-section-with-name \UsageNotes\ \Usage notes\ \open\>>\n\t\u003C\u003Ctransclude-section \Contributors\>>},{title:$:/sib/Templates/Topical/AnkiPattern/Edit,caption:Edit,created:20210313002532320,modified:20210522013659519,tags:,type:text/vnd.tiddlywiki,text:\u003C$set name\isedit\ value\yes\>\n{{||$:/sib/Templates/Topical/AnkiPattern/Common}}\n\u003C/$set>},{title:$:/sib/Templates/Topical/AnkiPattern/View,caption:View,created:20210313002551320,modified:20210522013709625,tags:,type:text/vnd.tiddlywiki,text:\u003C$set name\isedit\ value\no\>\n{{||$:/sib/Templates/Topical/AnkiPattern/Common}}\n\u003C/$set>},{title:$:/sib/Templates/Topical/Build2020SessionDetails,created:20200518210455646,creator:soren,modified:20210825162854523,modifier:soren,tags:Public,type:text/vnd.tiddlywiki,text:\u003Cstyle>\ntable.msbuild-session {\n\tmargin-left: auto;\n\tmargin-right: auto;\n}\n\ntable.msbuild-session tr td:first-child {\n\tfont-weight: bold;\n\ttext-align: right;\n}\n\n/* override non-bold style */\ntable.msbuild-session > tr > th a.tc-tiddlylink {\n\tfont-weight: bold;\n}\n\u003C/style>\n\n\u003Ctable class\msbuild-session\>\n\t\u003Ctr>\u003Cth colspan2>MicrosoftBuild2020 Session Details\u003C/th>\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Title\u003C/td>\n\t\t\u003Ctd>{{!!caption}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Time\u003C/td>\n\t\t\u003Ctd>\u003C$view field\at\ format\date\ template\DDD YYYY-0MM-0DD 0hh:0mm\ />\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Presenter(s)\u003C/td>\n\t\t\u003Ctd>{{!!presenter}}\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Ctd>Session URL\u003C/td>\n\t\t\u003Ctd>\u003Ca class\tc-tiddlylink-external\ href{{!!url}}>Go\u003C/a>\u003C/td>\n\t\u003C/tr>\n\u003C/table>},{title:$:/sib/Templates/Topical/DateSummaryStretch,created:20230405210328425,creator:soren,modified:20230405212531511,modifier:soren,tags:Public,type:text/vnd.tiddlywiki,text:\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ allcurrentsplit:butfirst }}}/>\u003C/$link>: {{!!ri-date-summary}}},{title:$:/sib/Templates/Topical/DatesWithRomanticInterestSidebarTab,created:20240211234241511,creator:soren,modified:20240530233044908,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C!--\n\u003C$tiddler tiddler\u003C\u003CcurrentTab>>>\n{{||$:/sib/Templates/Automatic/RomanticInterest}}\n\u003C/$tiddler>\n-->\n\n\u003C$tiddler tiddler\u003C\u003CcurrentTab>>>\n\t\u003Cdiv class\sidebar-ri-status-line\>\n\t\t\u003Ch2>\u003C$link to\u003C\u003CcurrentTiddler>>>{{!!caption}}\u003C/$link>\u003C/h2>\n\t\t\u003Cdiv>\n\t\t\t\u003C$let numDates{{{ contains:ri-date-with\u003CcurrentTiddler>!isdraftcount }}}>\n\t\t\t\t\u003C\u003CnumDates>> date\u003C% if \u003CnumDates>!match1 %>s\u003C% endif %>\n\t\t\t\u003C/$let>\n\t\t\u003C/div>\n\t\t\u003Cdiv>Status: {{||$:/sib/Templates/Topical/RiStatusLine}}\u003C/div>\n\t\u003C/div>\n\u003C/$tiddler>\n\n\u003C$list filter\tagDateri-date-with\u003CcurrentTab>\>\n\t\u003Cdl>\n\t\t\u003Cdt>\n\t\t\t\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ \u003CcurrentTiddler>split:butfirst }}}/>\u003C/$link>\n\t\t\u003C/dt>\n\t\t\u003Cdd>{{!!ri-date-summary}}\u003C/dd>\n\t\u003C/dl>\n\u003C/$list>\n\n\u003Cstyle>\ndiv.sidebar-ri-status-line div {\n\tmargin-top: 0;\n\t/*margin-bottom: 4ex;*/\n\ttext-align: center;\n}\ndiv.sidebar-ri-status-line h2 {\n\tmargin-top: 0;\n\tmargin-bottom: 1ex;\n}\n\u003C/style>},{title:$:/sib/Templates/Topical/MaudWikiImport,created:20200115233038885,creator:soren,modified:20221129234135365,modifier:soren,tags:,type:text/vnd.tiddlywiki,text://This tiddler was originally part of MaudWiki.//},{title:$:/sib/Templates/Topical/MinnesotaStateParkInfo,created:20201129205832011,creator:soren,description:Display information about the Minnesota state park or recreation area described by the current tiddler.,modified:20240601160045146,modifier:soren,tags:Public $:/tags/ViewTemplate,transcludedin:All tiddlers tagged \u003C\u003Ctag MinnesotaStatePark>>.,type:text/vnd.tiddlywiki,text:\\procedure dnrInfo(id)\n\t\u003C% if \u003Cid>isblankthenoops %>\n\t\t//Please specify the `foreignid` field//\n\t\u003C% else %>\n\t\t\u003C$m2.extlink\n\t\t\turltemplate\https://www.dnr.state.mn.us/state_parks/park.html?idspk$1$#information\\n\t\t\tslotvalue\u003C\u003Cid>>\n\t\t\ttext`spk$(id)$#information`/>\n\t\u003C% endif %>\n\\end\n\n\\procedure dnrMap(id)\n\t\u003C% if \u003Cid>isblankthenoops %>\n\t//Please specify the `foreignid` field//\n\t\u003C% else %>\n\t\t\u003C$m2.extlink\n\t\t\turltemplate\https://files.dnr.state.mn.us/maps/state_parks/spk$1$.pdf\\n\t\t\tslotvalue\u003C\u003Cid>>\n\t\t\ttext`spk$(id)$.pdf`/>\n\t\u003C% endif %>\n\\end\n\n\\procedure newTitle(suffix) \u003C\u003CcurrentTiddler>>\u003C\u003Csuffix>>\n\n\\procedure detailsPart(suffix)\n\u003C$list\n\tfilter\\u003CcurrentTiddler>addsuffix/addsuffix\u003Csuffix>istiddler\\n\tvariable\sectionTitle\\n>\n\u003C$details summary\u003C\u003Csuffix>>>\n\n\u003C$transclude tiddler\u003C\u003CsectionTitle>> />\n\n@@margin-block-end: 0;\n\u003C$button>\n\t\u003C$action-sendmessage $message\tm-edit-tiddler\ $param\u003C\u003CsectionTitle>> class\tc-btn-invisible\/>\nedit\n\u003C/$button>\n@@\n\n\u003C/$details>\n\u003C/$list>\n\\end\n\n\\define buttonPart(suffix, moreTags: \ Public\)\n\u003C$list filter\\u003CcurrentTiddler>addsuffix/addsuffix\u003Csuffix>!istiddler\ variable_>\u003C$button>\n \u003C$action-sendmessage $message\tm-new-tiddler\ title\u003C\u003CnewTitle \/$suffix$\>> tags\Subplace$moreTags$\/>\n\t{{$:/core/images/add-comment}} add \u003C$text text{{{ $suffix$lowercase }}}/>\n\u003C/$button>\u003C/$list>\n\\end\n\n\n\u003C!------------------ Start of template ------------------>\n\n\u003C% if allcurrenttagMinnesotaStatePark %>\n\n\t\u003C% if m2.public %>\n\t//Please note: Campsite preferences (jealously guarded!) and visits are private and will never appear in the public wiki.//\n\t\u003C% endif %>\n\t\n|!{{!!caption}}|\u003C|\n|!Park info |\u003C$macrocall $namednrInfo id{{!!foreignid}}/>|\n|!Park map |\u003C$macrocall $namednrMap id{{!!foreignid}}/>|\n|!Park office |{{!!phone}}|\n|!Make reservations |https://reservemn.usedirect.com/MinnesotaWeb/|\n|!Problems with reservations |(866) 857-2757|\n|!Check-in/out at |16:00 / 16:00|\n\t\n\t\u003C\u003CbuttonPart Travel>> \u003C\u003CbuttonPart Amenities>> \u003C\u003CbuttonPart Campsites \\>> \u003C\u003CbuttonPart Visits \\>>\n\n\t\u003C\u003CdetailsPart Travel>>\u003C\u003CdetailsPart Amenities>>\u003C\u003CdetailsPart Campsites>> \u003C\u003CdetailsPart Visits>>\n\n\u003C% endif %>},{title:$:/sib/Templates/Topical/RiStatusLine,created:20230405223858862,creator:soren,modified:20230405224032570,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003Cspan style{{{ {!!ri-outcome}matchpendingthencornflowerblue ~{!!ri-outcome}regexp.*mutual.*thenorange ~tomato +addprefixcolor: }}}>{{!!ri-outcome}}\u003C/span>},{title:$:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation,created:20210807194134012,description:Show links to the chronologically previous and next sabbatical update tiddlers.,modified:20210807194948834,tags:$:/tags/ViewTemplate,transcludedin:Subtiddlers of SabbaticalUpdate.,type:text/vnd.tiddlywiki,text:\u003C$list filter\allcurrentprefixSabbaticalUpdate/\ variable_>\n\n\u003Cdiv class\sab-upd-navigator\>\n\u003Cdiv style\text-align: left;\>\n← Previous: \u003C$list filter\prefixSabbaticalUpdatesort!field:titleSabbaticalUpdatebefore\u003CcurrentTiddler>\ variable\prevTiddler\ emptyMessage\//(at first update)//\>\u003C$link to\u003C\u003CprevTiddler>>>\u003C$text text{{{ \u003CprevTiddler>getcaption }}}/>\u003C/$link>\u003C/$list>\n\u003C/div>\n\u003Cdiv style\text-align: right;\>\nNext: \u003C$list filter\prefixSabbaticalUpdatesort!field:titleSabbaticalUpdateafter\u003CcurrentTiddler>\ variable\nextTiddler\ emptyMessage\//(at last update)//\>\u003C$link to\u003C\u003CnextTiddler>>>\u003C$text text{{{ \u003CnextTiddler>getcaption }}}/>\u003C/$link>\u003C/$list> →\n\u003C/div>\n\u003C/div>\n\n\u003C/$list>\n\n\u003Cstyle>\ndiv.sab-upd-navigator div {\n\tborder-top: 1px solid \u003C\u003Ccolor table-border>>;\n\tpadding-top: 10px;\n\tmargin-top: 6ex;\n\twidth: 50%;\n\tfloat: left;\n}\n\u003C/style>},{title:$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten,created:20210807191548391,modified:20210807192805541,tags:,type:text/vnd.tiddlywiki,text:If youre currently on Control-Alt-Backspace, you can \u003C$link to\u003C\u003CcurrentTiddler>>>read this post on Sorens Zettelkasten\u003C/$link>.},{title:$:/sib/Templates/Topical/WhoIAmTab,created:20201121012833365,creator:soren,modified:20251011193014540,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C$tiddler tiddler\u003C\u003CcurrentTab>>>\n\u003C$set name\storyTiddler\ value\u003C\u003CcurrentTab>>>\n\u003C$transclude mode\block\/>\n\n\u003C$link to\u003C\u003CcurrentTiddler>>>\u003Ci class\fa fa-expand\/> Explode this section\u003C/$link>\n{{||$:/tzk/refexplorer/ReferenceExplorer}}\n\u003C/$set>\n\u003C/$tiddler>},{title:$:/sib/Timeline/EventIcon,created:20241025014314067,creator:soren,modified:20241025015902110,modifier:soren,tags:$:/tags/Global,type:text/vnd.tiddlywiki,text:\\procedure event-icon(eventKey) \u003Ci class{{{ $:/sib/Timeline/EventTypeDbgetindex\u003CeventKey> }}}/>},{title:$:/sib/Timeline/EventTypeDb,text:train: fas fa-train\nfriend: fas fa-user-friends,type:application/x-tiddler-dictionary,created:20241025014251364,creator:soren,modified:20241025015521449,modifier:soren,tags:},{title:$:/sib/Tools/EventEditor,created:20241025020132263,creator:soren,modified:20241025023823236,modifier:soren,tags:Wide Tool,tooltype:maintenance,type:text/vnd.tiddlywiki,text:\\procedure .new-event()\n\t\u003C!-- TODO -->\n\\end\n\nTODO: Set up .new-event() button\n\nTo be used with the Timeline of my life!\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth>Tiddler\u003C/th>\n\t\t\u003Cth>Date\u003C/th>\n\t\t\u003Cth>Type\u003C/th>\n\t\t\u003Cth>Caption\u003C/th>\n\t\t\u003Cth>Source\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter\hasevent-date\>\n\t\u003Ctr>\n\t\t\u003Ctd>\u003C$link/>\u003C/td>\n\t\t\u003Ctd>\u003C$edit-text field\event-date\ tag\input\/>\u003C/td>\n\t\t\u003Ctd>\n\t\t\t\u003C$select field\event-type\ tag\input\>\n\t\t\t\t\u003C$list filter\$:/sib/Timeline/EventTypeDbindexes\ variable\et\>\n\t\t\t\t\t\u003Coption>\u003C\u003Cet>>\u003C/option>\n\t\t\t\t\u003C/$list>\n\t\t\t\u003C/$select>\n\t\t\u003C/td>\n\t\t\u003Ctd>\n\t\t\t\u003C$transclude $variable\event-icon\ eventKey{{!!event-type}}/> \n\t\t\t\u003C$edit-text field\caption\ tag\input\/>\n\t\t\u003C/td>\n\t\t\u003Ctd>\u003C$edit-text field\source\ tag\input\/>\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>\n\u003C$button actions\u003C\u003C.new-event>>>\n\tNew Event\n\u003C/$button>},{title:$:/sib/Tools/PaletteBrowser,created:20210329204050908,creator:soren,description:View all the colors in the current palette and conveniently copy their hex codes or `\u003C\u003Ccolor>>` macros for use elsewhere in the wiki.,modified:20240601203042149,modifier:soren,tags:Meta Tool,tooltype:maintenance,type:text/vnd.tiddlywiki,text:\\procedure colorsplotch(col)\n\t\u003Cdiv class\color-splotch\ style`background: $(col)$;`>\n\\end\n\n\\procedure copy-hex() \u003C$action-sendmessage $message\tm-copy-to-clipboard\ $param\u003C\u003Chexvalue>>/>\n\\procedure copy-mac() \u003C$action-sendmessage $message\tm-copy-to-clipboard\ $param`\u003C\u003Ccolor $(currentTiddler)$>>`/>\n\n\u003Cdiv style\text-align: center;\>Current palette: \u003C$link to{{$:/palette}}/>\u003C/div>\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth>\u003C/th>\n\t\t\u003Cth>HTML color code\u003C/th>\n\t\t\u003Cth>TiddlyWiki name\u003C/th>\n\t\t\u003Cth>Copy to clipboard\u003C/th>\n\t\u003C/tr>\n\u003C$list filter\{$:/palette}indexes\>\n\t\u003C$list filter\{$:/palette}getindex\u003CcurrentTiddler>\ variable\hexvalue\>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$macrocall $name\colorsplotch\ col\u003C\u003Chexvalue>>/>\u003C/td>\n\t\t\t\u003Ctd>\u003C\u003Chexvalue>>\u003C/td>\n\t\t \u003Ctd>\u003C\u003CcurrentTiddler>>\u003C/td>\n\t\t\t\u003Ctd>\n\t\t\t\t\u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Ccopy-mac>>>`\u003C\u003Ccolor>>` macro\u003C/$button> -- \n\t\t\t\t\u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Ccopy-hex>>>hex code\u003C/$button>\n\t\t\t\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/$list>\n\u003C/$list>\n\u003C/table>\n\n\u003Cstyle>\n.color-splotch {\n\tfloat: left;\n\twidth: 20px;\n\theight: 20px;\n\tborder: 1px solid #000000;\n\tmargin: 0;\n}\n\u003C/style>},{title:$:/SiteSubtitle,created:20200118003902418,creator:soren,modified:20200118003906515,modifier:soren,type:text/vnd.tiddlywiki,text:Soren Bjornstads public notes},{title:$:/SiteTitle,created:20200118003822985,creator:soren,modified:20240316202241738,modifier:soren,type:text/vnd.tiddlywiki,text:Mosaic Muse},{title:$:/status/RequireReloadDueToPluginChange,text:no},{title:$:/StoryList,text:,list:PublicHomepage},{title:$:/tags/EditorToolbar,created:20210928031136148,creator:soren,list:$:/core/ui/EditorToolbar/do-thing $:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/linkify $:/core/ui/EditorToolbar/transcludify $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/tzk/Buttons/excise-private-chunk $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type $:/plugins/sobjornstad/TiddlyRemember/toolbar/rememberq $:/plugins/sobjornstad/TiddlyRemember/toolbar/remembercz $:/plugins/tiddlywiki/katex/ui/EditorToolbar/katex,modified:20251011161258783,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/EditTemplate,created:20201204132628163,creator:soren,list:$:/core/ui/EditTemplate/controls $:/tzk/Templates/Automatic/Publicity/EditorPublicLine $:/tzk/Templates/Automatic/Publicity/LevelDisplay $:/core/ui/EditTemplate/title $:/plugins/bimlas/locator/edit-template/locator-referencess $:/tzk/Templates/Automatic/MissingTiddlerCreationNotification $:/core/ui/EditTemplate/tags $:/tzk/Templates/Automatic/FrozenTiddlerEditWarning $:/core/ui/EditTemplate/shadow $:/core/ui/ViewTemplate/classic $:/core/ui/EditTemplate/body $:/core/ui/EditTemplate/type $:/core/ui/EditTemplate/fields,modified:20251011164626028,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/PageTemplate,created:20210626221416384,creator:soren,list:$:/core/ui/PageTemplate/topleftbar $:/core/ui/PageTemplate/toprightbar $:/core/ui/PageTemplate/sidebar $:/core/ui/PageTemplate/story $:/core/ui/PageTemplate/alerts $:/core/ui/PageTemplate/drafts $:/core/ui/PageTemplate/pluginreloadwarning $:/tzk/Templates/Automatic/OpenTopBar,modified:20251011164359874,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/ReferenceExplorerTab,created:20200329153524761,creator:soren,list:$:/tzk/refexplorer/Ideas $:/tzk/refexplorer/PAO $:/tzk/refexplorer/Places $:/tzk/refexplorer/Sources $:/tzk/refexplorer/Sinks $:/tzk/refexplorer/Journal $:/sib/refexplorer/RT $:/tzk/refexplorer/Subtiddlers $:/tzk/refexplorer/TranscludedIn $:/tzk/refexplorer/LinkGraph $:/tzk/refexplorer/Footnotes $:/tzk/refexplorer/All,modified:20251011194509427,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/SideBar,created:20201203015851994,creator:soren,list:$:/core/ui/SideBar/Open $:/core/ui/SideBar/Recent $:/core/ui/SideBar/Tools $:/core/ui/SideBar/More $:/tzk/SideBar/Write $:/tzk/SideBar/Explore,modified:20251011162444932,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/Stylesheet,created:20210127230406756,modified:20210127230518943,tags:$:/tags/Stylesheet,type:text/vnd.tiddlywiki},{title:$:/tags/TiddlerIconFilter,created:20240829024619976,creator:soren,list:$:/config/TiddlerIconFilters/icon-field $:/tzk/cascade/icon/Idea $:/tzk/cascade/icon/Place $:/tzk/cascade/icon/Mr $:/tzk/cascade/icon/Ms $:/tzk/cascade/icon/Mx $:/tzk/cascade/icon/The $:/tzk/cascade/icon/Source $:/tzk/cascade/icon/Sink $:/tzk/cascade/icon/Journal $:/config/TiddlerIconFilters/default,modified:20251011192247440,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/tags/ViewTemplate,created:20201129183705439,creator:soren,list:$:/core/ui/ViewTemplate/title $:/core/ui/ViewTemplate/unfold $:/core/ui/ViewTemplate/subtitle $:/tzk/EpistemicStatus/Display $:/tzk/MediaRating/Display $:/core/ui/ViewTemplate/tags $:/core/ui/ViewTemplate/classic $:/tzk/Templates/Automatic/Publicity/PrivateEditionTemplate $:/tzk/Templates/Automatic/CheckpointList $:/tzk/Templates/Automatic/JournalNavigation $:/tzk/Templates/Automatic/Subtiddler $:/tzk/Templates/Automatic/TypeTagChecker $:/tzk/Templates/Automatic/SpoilerBanner $:/tzk/Templates/Automatic/Untitled $:/tzk/Templates/Automatic/PrivateChunkParentNotice $:/tzk/Templates/Automatic/Source $:/sib/Templates/Topical/MinnesotaStateParkInfo $:/tzk/Templates/Automatic/MacroProcedureFunctionWidgetDescription $:/sib/Templates/Automatic/Date $:/core/ui/ViewTemplate/body $:/sib/Templates/Automatic/RomanticInterest $:/tzk/Templates/Automatic/MissingTiddlerQuickCreate $:/sib/indite/ViewTemplate $:/tzk/Reviewer/SchedulableTemplate $:/sib/Templates/Automatic/Event $:/tzk/gis/MappingTools $:/sib/Templates/Topical/SabbaticalUpdates/DateNavigation $:/tzk/Templates/Automatic/Publicity/ViewerPublicLine $:/plugins/danielo515/2click2edit/ui/ViewTemplate $:/tzk/refexplorer/ReferenceExplorer $:/tzk/Templates/Automatic/ViewTemplateDescription $:/sib/Templates/Automatic/ReaderActions,modified:20251011193014541,modifier:soren,type:text/vnd.tiddlywiki},{title:$:/TagSaver,created:20210827213731043,creator:soren,modified:20231016023752916,modifier:soren,tags:Attachment Bibliography Class Conversation Idea Image Index Journal Meta Notes PAO Place Publication Sink Source Tool PrivateChunk Public NeedsAttention NeedsExcision Stub $:/TagSaver Wide Frozen,type:text/vnd.tiddlywiki,text:! Apologies for the noise, please read here\n\nThis tiddler exists to ensure that all tags foundational to the Zettelkasten continue to be displayed in the “Tags” bar even in an empty edition. Once youve used all of the tags on this tiddler on real tiddlers, or if you feel you do not need them displayed there anymore, you can delete this tiddler.\n\nAll the noise is because the tags cause a bunch of templates to be transcluded. :-)\n\n! End of the important part},{title:$:/Templates/Automatic/TiddlerTypeIconFa,created:20240829024214012,creator:soren,modified:20240927111227086,modifier:soren,tags:$:/tags/Global,type:text/vnd.tiddlywiki,text:\\whitespace trim\n\\parameters (faspec)\n\n\u003Ci class\u003C\u003Cfaspec>> style\font-size: 80%; position: relative; top: 0.2em; transform: translateY(-50%); margin-right: 0.2em;\/>},{title:$:/theme,created:20200118003448758,creator:soren,modified:20210205020036977,modifier:soren,type:text/vnd.tiddlywiki,text:$:/themes/tiddlywiki/vanilla},{title:$:/themes/tiddlywiki/snowwhite,name:Snow White,author:JeremyRuston,core-version:>5.0.0,plugin-type:theme,description:Emphasises individual tiddlers,dependents:$:/themes/tiddlywiki/vanilla,plugin-priority:0,version:5.3.8,type:application/json,text:{\tiddlers\:{\$:/themes/tiddlywiki/snowwhite/base\:{\title\:\$:/themes/tiddlywiki/snowwhite/base\,\tags\:\$:/tags/Stylesheet\,\text\:\\\\\define sidebarbreakpoint-minus-one()\\n\u003C$text text{{{ {$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffixpxsubtract1addsuffixpx ~{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint} }}}/>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n.tc-sidebar-header {\\n\\ttext-shadow: 0 1px 0 \u003C\u003Ccolour sidebar-foreground-shadow>>;\\n}\\n\\n.tc-tiddler-info {\\n\\t\u003C\u003Cbox-shadow \\\inset 1px 2px 3px rgba(0,0,0,0.1)\\\>>\\n}\\n\\n@media screen {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow \\\1px 1px 5px rgba(0, 0, 0, 0.3)\\\>>\\n\\t}\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\t\u003C\u003Cbox-shadow none>>\\n\\t}\\n}\\n\\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\\n\\t\u003C\u003Ctransition \\\fill 150ms ease-in-out\\\>>\\n}\\n\\n.tc-tiddler-controls button.tc-selected,\\n.tc-page-controls button.tc-selected {\\n\\t\u003C\u003Cfilter \\\drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\\\>>\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\>>\\n}\\n\\n.tc-edit-tags {\\n\\t\u003C\u003Cbox-shadow \\\inset 0 1px 8px rgba(0, 0, 0, 0.15)\\\>>\\n}\\n\\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\\n\\t\u003C\u003Cbox-shadow \\\none\\\>>\\n\\tborder: none;\\n\\toutline: none;\\n}\\n\\ntextarea.tc-edit-texteditor {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\ncanvas.tc-edit-bitmapeditor {\\n\\t\u003C\u003Cbox-shadow \\\2px 2px 5px rgba(0, 0, 0, 0.5)\\\>>\\n}\\n\\n.tc-drop-down {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\2px 2px 10px rgba(0, 0, 0, 0.5)\\\>>\\n}\\n\\n.tc-block-dropdown {\\n\\tborder-radius: 4px;\\n\\t\u003C\u003Cbox-shadow \\\2px 2px 10px rgba(0, 0, 0, 0.5)\\\>>\\n}\\n\\n.tc-modal {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\0 3px 7px rgba(0,0,0,0.3)\\\>>\\n}\\n\\n.tc-modal-footer {\\n\\tborder-radius: 0 0 6px 6px;\\n\\t\u003C\u003Cbox-shadow \\\inset 0 1px 0 #fff\\\>>;\\n}\\n\\n\\n.tc-alert {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\0 3px 7px rgba(0,0,0,0.6)\\\>>\\n}\\n\\n.tc-notification {\\n\\tborder-radius: 6px;\\n\\t\u003C\u003Cbox-shadow \\\0 3px 7px rgba(0,0,0,0.3)\\\>>\\n\\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\\n}\\n\\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\\n\\tborder-top: none;\\n\\theight: 1px;\\n\\t\u003C\u003Cbackground-linear-gradient \\\left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\\\>>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\t\u003C\u003Cbackground-linear-gradient \\\left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\\\>>\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\t\u003C\u003Cbackground-linear-gradient \\\left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\\\>>\\n}\\n\\n.tc-message-box img {\\n\\t\u003C\u003Cbox-shadow \\\1px 1px 3px rgba(0,0,0,0.5)\\\>>\\n}\\n\\n.tc-plugin-info {\\n\\t\u003C\u003Cbox-shadow \\\1px 1px 3px rgba(0,0,0,0.5)\\\>>\\n}\\n\}}}},{title:$:/themes/tiddlywiki/vanilla,name:Vanilla,author:JeremyRuston,core-version:>5.0.0,plugin-type:theme,description:Basic theme,plugin-priority:0,version:5.3.8,dependents:,type:application/json,text:{\tiddlers\:{\$:/themes/tiddlywiki/vanilla/themetweaks\:{\title\:\$:/themes/tiddlywiki/vanilla/themetweaks\,\tags\:\$:/tags/ControlPanel/Appearance\,\caption\:\{{$:/language/ThemeTweaks/ThemeTweaks}}\,\text\:\\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\n\\\\define replacement-text()\\nimg$(imageTitle)$\\n\\\\end\\n\\n\\\\define backgroundimage-dropdown()\\n\u003Cdiv class\\\tc-drop-down-wrapper\\\>\\n\u003C$set name\\\state\\\ value\u003C\u003Cqualify \\\$:/state/popup/themetweaks/backgroundimage\\\>>>\\n\u003C$button popup\u003C\u003Cstate>> class\\\tc-btn-invisible tc-btn-dropdown\\\>{{$:/core/images/down-arrow}}\u003C/$button>\\n\u003C$reveal state\u003C\u003Cstate>> type\\\popup\\\ position\\\belowleft\\\ text\\\\\\ default\\\\\\ class\\\tc-popup-keep\\\>\\n\u003Cdiv class\\\tc-drop-down\\\ style\\\text-align:center;\\\>\\n\u003C$macrocall $name\\\image-picker\\\ actions\\\\\\\\\\\n\\n\u003C$action-setfield\\n\\t$tiddler\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\\\n\\t$value\u003C\u003CimageTitle>>\\n/>\\n\\n\u003C$action-deletetiddler $tiddler\u003C\u003Cstate>>/>\\n\\n\\\\\\\\\/>\\n\u003C/div>\\n\u003C/$reveal>\\n\u003C/$set>\\n\u003C/div>\\n\\\\end\\n\\n\\\\define backgroundimageattachment-dropdown()\\n\u003C$select tiddler\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\ default\\\scroll\\\>\\n\u003Coption value\\\scroll\\\>\u003C\u003Clingo Settings/BackgroundImageAttachment/Scroll>>\u003C/option>\\n\u003Coption value\\\fixed\\\>\u003C\u003Clingo Settings/BackgroundImageAttachment/Fixed>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\\\\define backgroundimagesize-dropdown()\\n\u003C$select tiddler\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\ default\\\scroll\\\>\\n\u003Coption value\\\auto\\\>\u003C\u003Clingo Settings/BackgroundImageSize/Auto>>\u003C/option>\\n\u003Coption value\\\cover\\\>\u003C\u003Clingo Settings/BackgroundImageSize/Cover>>\u003C/option>\\n\u003Coption value\\\contain\\\>\u003C\u003Clingo Settings/BackgroundImageSize/Contain>>\u003C/option>\\n\u003C/$select>\\n\\\\end\\n\\n\u003C\u003Clingo ThemeTweaks/Hint>>\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\>\u003C\u003Clingo Options/SidebarLayout>>\u003C/$link> |\u003C$select tiddler\\\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\>\u003Coption value\\\fixed-fluid\\\>\u003C\u003Clingo Options/SidebarLayout/Fixed-Fluid>>\u003C/option>\u003Coption value\\\fluid-fixed\\\>\u003C\u003Clingo Options/SidebarLayout/Fluid-Fixed>>\u003C/option>\u003C/$select> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/options/stickytitles\\\>\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler\\\$:/themes/tiddlywiki/vanilla/options/stickytitles\\\>\u003Coption value\\\no\\\>{{$:/language/No}}\u003C/option>\u003Coption value\\\yes\\\>{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/options/codewrapping\\\>\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler\\\$:/themes/tiddlywiki/vanilla/options/codewrapping\\\>\u003Coption value\\\pre\\\>{{$:/language/No}}\u003C/option>\u003Coption value\\\pre-wrap\\\>{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\>\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/settings/fontfamily\\\ default\\\\\\ tag\\\input\\\/> | |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\>\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/settings/codefontfamily\\\ default\\\\\\ tag\\\input\\\/> | |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\>\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\\\ default\\\\\\ tag\\\input\\\/> | |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\>\u003C\u003Clingo Settings/BackgroundImage>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimage\\\ default\\\\\\ tag\\\input\\\/> |\u003C\u003Cbackgroundimage-dropdown>> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\\\>\u003C\u003Clingo Settings/BackgroundImageAttachment>>\u003C/$link> |\u003C\u003Cbackgroundimageattachment-dropdown>> | |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\\\>\u003C\u003Clingo Settings/BackgroundImageSize>>\u003C/$link> |\u003C\u003Cbackgroundimagesize-dropdown>> | |\\n\\n! \u003C\u003Clingo Metrics>>\\n\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\>\u003C\u003Clingo Metrics/FontSize>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\>\u003C\u003Clingo Metrics/LineHeight>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\>\u003C\u003Clingo Metrics/BodyFontSize>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\>\u003C\u003Clingo Metrics/BodyLineHeight>>\u003C/$link> |\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\>\u003C\u003Clingo Metrics/StoryLeft>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryLeft/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/storyleft\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/storytop\\\>\u003C\u003Clingo Metrics/StoryTop>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryTop/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/storytop\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/storyright\\\>\u003C\u003Clingo Metrics/StoryRight>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryRight/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/storyright\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\>\u003C\u003Clingo Metrics/StoryWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryWidth/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/storywidth\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\>\u003C\u003Clingo Metrics/TiddlerWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/TiddlerWidth/Hint>>//\u003Cbr> |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\>\u003C\u003Clingo Metrics/SidebarBreakpoint>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarBreakpoint/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\ default\\\\\\ tag\\\input\\\/> |\\n|\u003C$link to\\\$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\>\u003C\u003Clingo Metrics/SidebarWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarWidth/Hint>>// |^\u003C$edit-text tiddler\\\$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\\\ default\\\\\\ tag\\\input\\\/> |\\n\},\$:/themes/tiddlywiki/vanilla/base\:{\title\:\$:/themes/tiddlywiki/vanilla/base\,\tags\:\$:/tags/Stylesheet\,\list-before\:\\,\code-body\:\yes\,\text\:\\\\\define custom-background-datauri()\\n\u003C$set name\\\background\\\ value{{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\\n\u003C$list filter\\\\u003Cbackground>isimage\\\>\\n`background: url(`\\n\u003C$list filter\\\\u003Cbackground>!has_canonical_uri\\\>\\n`\\\`\u003C$macrocall $name\\\datauri\\\ title{{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\\\`\\n\u003C/$list>\\n\u003C$list filter\\\\u003Cbackground>has_canonical_uri\\\>\\n`\\\`\u003C$view tiddler{{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field\\\_canonical_uri\\\/>`\\\`\\n\u003C/$list>\\n`) center center;`\\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\\n\u003C/$list>\\n\u003C/$set>\\n\\\\end\\n\\n\\\\define sidebarbreakpoint()\\n\u003C$text text{{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\\n\\\\end\\n\\n\\\\define sidebarbreakpoint-minus-one()\\n\u003C$text text{{{ {$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffixpxsubtract1addsuffixpx ~{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint} }}}/>\\n\\\\end\\n\\n\\\\define if-fluid-fixed(text,hiddenSidebarText)\\n\u003C$reveal state\\\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\\\ type\\\match\\\ text\\\fluid-fixed\\\>\\n$text$\\n\u003C$reveal state\\\$:/state/sidebar\\\ type\\\nomatch\\\ text\\\yes\\\ default\\\yes\\\>\\n$hiddenSidebarText$\\n\u003C/$reveal>\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define if-editor-height-fixed(then,else)\\n\u003C$reveal state\\\$:/config/TextEditor/EditorHeight/Mode\\\ type\\\match\\\ text\\\fixed\\\>\\n$then$\\n\u003C/$reveal>\\n\u003C$reveal state\\\$:/config/TextEditor/EditorHeight/Mode\\\ type\\\match\\\ text\\\auto\\\>\\n$else$\\n\u003C/$reveal>\\n\\\\end\\n\\n\\\\define set-type-selector-min-width()\\n\u003C$set name\\\typeLength\\\ value{{{ allshadows+tiddlersprefix$:/language/Docs/Types/getnamelengthmaxall }}}>\\n\\n\\t.tc-type-selector-dropdown-wrapper {\\n\\t\\tmin-width: calc(\u003C\u003CtypeLength>>ch + 4em);\\n\\t}\\n\\n\\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\\n\\t\\tmin-width: \u003C\u003CtypeLength>>ch;\\n\\t}\\n\\n\u003C/$set>\\n\\\\end\\n\\n\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\\n\\n/*\\n** Start with the normalize CSS reset, and then belay some of its effects\\n*/\\n\\n{{$:/themes/tiddlywiki/vanilla/reset}}\\n\\ninputtype\\\search\\\ {\\n\\toutline-offset: initial;\\n}\\n\\nbutton:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {\\n\\toutline: 2px solid \u003C\u003Ccolour primary>>;\\n\\toutline-offset: -2px;\\n\\tborder-radius: 0.25em;\\n}\\n\\nbutton:-moz-focusring, input:-moz-focusring, textarea:-moz-focusring, select:-moz-focusring {\\n\\toutline: 2px solid \u003C\u003Ccolour primary>>;\\n\\toutline-offset: -2px;\\n\\tborder-radius: 0.25em;\\n}\\n\\n/*\\n** Button default styles. Makes them look consistent for all browsers\\n*/\\nhtml button {\\n\\tline-height: 1.2;\\n\\tcolor: \u003C\u003Ccolour button-foreground>>;\\n\\tfill: \u003C\u003Ccolour button-foreground>>;\\n\\tbackground: \u003C\u003Ccolour button-background>>;\\n\\tborder-color: \u003C\u003Ccolour button-border>>;\\n\\tcursor: pointer;\\n}\\n\\nbutton:disabled {\\n\\tcursor: default;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nbutton:disabled svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n/*\\n** Basic element styles\\n*/\\n\\nhtml, body {\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\\n\\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\\n\\t-webkit-font-smoothing: antialiased;\\n\\t-moz-osx-font-smoothing: grayscale;\\n}\\n\\nhtml:-webkit-full-screen {\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n}\\n\\nbody.tc-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\\n\\tword-wrap: break-word;\\n\\t\u003C\u003Ccustom-background-datauri>>\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n\u003C\u003Cif-background-attachment \\\\\\\\\\\n\\nbody.tc-body {\\n\\tbackground-color: transparent;\\n}\\n\\n\\\\\\\\\>>\\n\\n/**\\n * Correct the font size and margin on `h1` elements within `section` and\\n * `article` contexts in Chrome, Firefox, and Safari.\\n */\\n\\nh1 {\\n\\tfont-size: 2em;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n\\tline-height: 1.2;\\n\\tfont-weight: normal;\\n}\\n\\npre {\\n\\tdisplay: block;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\tword-break: normal;\\n\\tword-wrap: break-word;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: \u003C\u003Ccolour pre-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour pre-border>>;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\ncode {\\n\\tcolor: \u003C\u003Ccolour code-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour code-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour code-border>>;\\n\\twhite-space: pre-wrap;\\n\\tpadding: 0 3px 2px;\\n\\tborder-radius: 3px;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\\n}\\n\\nblockquote {\\n\\tborder-left: 5px solid \u003C\u003Ccolour blockquote-bar>>;\\n\\tmargin-left: 25px;\\n\\tpadding-left: 10px;\\n\\tquotes: \\\\\\\201C\\\\\\\\\\201D\\\\\\\\\\2018\\\\\\\\\\2019\\\;\\n}\\n\\nblockquote > div {\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n}\\n\\nblockquote.tc-big-quote {\\n\\tfont-family: Georgia, serif;\\n\\tposition: relative;\\n\\tbackground: \u003C\u003Ccolour pre-background>>;\\n\\tborder-left: none;\\n\\tmargin-left: 50px;\\n\\tmargin-right: 50px;\\n\\tpadding: 10px;\\n\\tborder-radius: 8px;\\n}\\n\\nblockquote.tc-big-quote cite:before {\\n\\tcontent: \\\\\\\2014 \\\\2009\\\;\\n}\\n\\nblockquote.tc-big-quote:before {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: \u003C\u003Ccolour blockquote-bar>>;\\n\\tcontent: open-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n\\tleft: -50px;\\n\\ttop: 42px;\\n}\\n\\nblockquote.tc-big-quote:after {\\n\\tfont-family: Georgia, serif;\\n\\tcolor: \u003C\u003Ccolour blockquote-bar>>;\\n\\tcontent: close-quote;\\n\\tfont-size: 8em;\\n\\tline-height: 0.1em;\\n\\tmargin-right: 0.25em;\\n\\tvertical-align: -0.4em;\\n\\tposition: absolute;\\n\\tright: -80px;\\n\\tbottom: -20px;\\n}\\n\\ndl dt {\\n\\tfont-weight: bold;\\n\\tmargin-top: 6px;\\n}\\n\\ntextarea,\\ninputtypetext,\\ninputtypesearch,\\ninputtypenumber,\\ninputtypepassword,\\ninputtypeemail,\\ninputtypetel,\\ninputtypeurl,\\ninputtype\\\\\\,\\ninput:not(type) {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\ninputtype\\\checkbox\\\ {\\n\\tvertical-align: middle;\\n}\\n\\ninputtype\\\search\\\::-webkit-search-decoration,\\ninputtype\\\search\\\::-webkit-search-cancel-button,\\ninputtype\\\search\\\::-webkit-search-results-button,\\ninputtype\\\search\\\::-webkit-search-results-decoration {\\n\\t-webkit-appearance:none;\\n}\\n\\n.tc-muted {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nsvg.tc-image-button {\\n\\tpadding: 0px 1px 1px 0px;\\n}\\n\\n.tc-icon-wrapper > svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\nkbd {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px 5px;\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tvertical-align: middle;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tborder: solid 1px \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: inset 0 -1px 0 \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n::selection {\\n\\tbackground-color: Highlight;\\n\\tcolor: HighlightText;\\n\\tbackground-color: \u003C\u003Ccolour selection-background>>;\\n\\tcolor: \u003C\u003Ccolour selection-foreground>>;\\n}\\n\\n.tc-inline-style {\\n\\tbackground: \u003C\u003Ccolour highlight-background>>;\\n\\tcolor: \u003C\u003Ccolour highlight-foreground>>;\\n}\\n\\n/* Markdown uses mark element to highlight */\\n\\nmark {\\n\\tbackground: \u003C\u003Ccolour highlight-background>>;\\n\\tcolor: \u003C\u003Ccolour highlight-foreground>>;\\n}\\n\\nform.tc-form-inline {\\n\\tdisplay: inline;\\n}\\n\\n/*\\nMarkdown likes putting code elements inside pre elements\\n*/\\npre > code {\\n\\tdisplay: block;\\n\\tpadding: 0.5em;\\n\\tborder: none;\\n\\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\\n\\tbackground-color: inherit;\\n\\tcolor: inherit;\\n\\toverflow-x: auto;\\n}\\n\\n/*\\nTable defaults\\n*/\\n\\ntable {\\n\\tborder: 1px solid \u003C\u003Ccolour table-border>>;\\n\\twidth: auto;\\n\\tmax-width: 100%;\\n\\tcaption-side: bottom;\\n\\tmargin-top: 1em;\\n\\tmargin-bottom: 1em;\\n\\t/* next 2 elements needed, since normalize 8.0.1 */\\n\\tborder-collapse: collapse;\\n\\tborder-spacing: 0;\\n}\\n\\ntable th, table td {\\n\\tpadding: 0 7px 0 7px;\\n\\tborder-top: 1px solid \u003C\u003Ccolour table-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour table-border>>;\\n}\\n\\ntable thead tr td, table th {\\n\\tbackground-color: \u003C\u003Ccolour table-header-background>>;\\n\\tfont-weight: bold;\\n}\\n\\ntable tfoot tr td {\\n\\tbackground-color: \u003C\u003Ccolour table-footer-background>>;\\n}\\n\\n/*\\nTable utility classes\\n*/\\n\\n/* Remove borders from table as used in eg: GettingStarted*/\\n.tc-table-no-border,\\n.tc-table-no-border th,\\n.tc-table-no-border td {\\n\\tborder: initial;\\n}\\n\\n/* First column in table width will fit to text.*/\\n/* This rule makes most sense with tc-first-link-nowrap*/\\n.tc-first-col-min-width td:nth-child(1) {\\n\\twidth: 1%;\\n}\\n\\n/*\\n** Utility classes work well with tables but also for other containers\\n*/\\n\\n/* First link A element will not wrap */\\n.tc-first-link-nowrap:first-of-type a {\\n\\twhite-space: nowrap;\\n}\\n\\n/* Move the table to the center of the container */\\n.tc-center {\\n\\tmargin-left: auto;\\n\\tmargin-right: auto;\\n}\\n\\n.tc-max-width {\\n\\twidth: 100%;\\n}\\n\\n.tc-max-width-80 {\\n\\tmax-width: 80%;\\n}\\n\\n/* Allow input and textarea to look like the ControlPanel inputs */\\n.tc-edit-max-width input,\\n.tc-edit-max-width textarea {\\n\\twidth: 100%;\\n\\tpadding: 3px;\\n}\\n\\n/*\\nCSV parser plugin\\n*/\\n\\n.tc-csv-table {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-csv-table th,\\n.tc-csv-table td {\\n\\twhite-space: pre-line;\\n}\\n\\n/*\\nTiddler frame in story river\\n*/\\n\\n.tc-tiddler-frame img,\\n.tc-tiddler-frame svg,\\n.tc-tiddler-frame canvas,\\n.tc-tiddler-frame embed,\\n.tc-tiddler-frame iframe {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-tiddler-body > embed,\\n.tc-tiddler-body > iframe {\\n\\twidth: 100%;\\n\\theight: 600px;\\n}\\n\\n:root {\\n\\tcolor-scheme: {{{ {$:/palette}getcolor-scheme ~light }}};\\n}\\n\\n/*\\n** Links\\n*/\\n\\nbutton.tc-tiddlylink,\\na.tc-tiddlylink {\\n\\ttext-decoration: none;\\n\\tfont-weight: 500;\\n\\tcolor: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\\n\\t-webkit-touch-callout: none; /* Prevents long presses from bringing up a link preview */\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink {\\n\\tcolor: \u003C\u003Ccolour sidebar-tiddler-link-foreground>>;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour sidebar-tiddler-link-foreground-hover>>;\\n}\\n\\nbutton.tc-tiddlylink:hover,\\na.tc-tiddlylink:hover {\\n\\ttext-decoration: underline;\\n}\\n\\na.tc-tiddlylink-resolves {\\n}\\n\\na.tc-tiddlylink-shadow {\\n\\tfont-weight: bold;\\n}\\n\\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\na.tc-tiddlylink-missing {\\n\\tfont-style: italic;\\n}\\n\\na.tc-tiddlylink-external {\\n\\ttext-decoration: underline;\\n\\tcolor: \u003C\u003Ccolour external-link-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background>>;\\n}\\n\\na.tc-tiddlylink-external:visited {\\n\\tcolor: \u003C\u003Ccolour external-link-foreground-visited>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background-visited>>;\\n}\\n\\na.tc-tiddlylink-external:hover {\\n\\tcolor: \u003C\u003Ccolour external-link-foreground-hover>>;\\n\\tbackground-color: \u003C\u003Ccolour external-link-background-hover>>;\\n}\\n\\n.tc-drop-down a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n}\\n\\n/*\\n** Drag and drop styles\\n*/\\n\\n.tc-tiddler-dragger {\\n\\tposition: relative;\\n\\tz-index: -10000;\\n}\\n\\n.tc-tiddler-dragger-inner {\\n\\tposition: absolute;\\n\\ttop: -1000px;\\n\\tleft: -1000px;\\n\\tdisplay: inline-block;\\n\\tpadding: 8px 20px;\\n\\tfont-size: 16.9px;\\n\\tfont-weight: bold;\\n\\tline-height: 20px;\\n\\tcolor: \u003C\u003Ccolour dragger-foreground>>;\\n\\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n\\tbackground-color: \u003C\u003Ccolour dragger-background>>;\\n\\tborder-radius: 20px;\\n}\\n\\n.tc-tiddler-dragger-cover {\\n\\tposition: absolute;\\n\\tbackground-color: \u003C\u003Ccolour page-background>>;\\n}\\n\\n.tc-page-container > .tc-dropzone {\\n\\tmin-height: 100vh;\\n}\\n\\n.tc-dropzone {\\n\\tposition: relative;\\n}\\n\\n.tc-dropzone.tc-dragover:before {\\n\\tz-index: 10000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: \u003C\u003Ccolour dropzone-background>>;\\n\\ttext-align: center;\\n\\tcontent: \\\\u003C\u003Clingo DropMessage>>\\\;\\n}\\n\\n.tc-droppable > .tc-droppable-placeholder {\\n\\tdisplay: none;\\n}\\n\\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\\n\\tdisplay: block;\\n\\tborder: 2px dashed \u003C\u003Ccolour dropzone-background>>;\\n}\\n\\n.tc-draggable {\\n\\tcursor: move;\\n}\\n\\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\\n.tc-links-draggable-list .tc-droppable-placeholder {\\n\\tline-height: 2em;\\n\\theight: 2em;\\n}\\n\\n.tc-sidebar-tab-open-item {\\n\\tposition: relative;\\n}\\n\\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\\n\\tfont-size: 0.7em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n/*\\n** Plugin reload warning\\n*/\\n\\n.tc-plugin-reload-warning {\\n\\tz-index: 1000;\\n\\tdisplay: block;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbackground: \u003C\u003Ccolour alert-background>>;\\n\\ttext-align: center;\\n}\\n\\n/*\\n** Buttons\\n*/\\n\\nbutton svg, button img, label svg, label img {\\n\\tvertical-align: middle;\\n}\\n\\n.tc-btn-invisible {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\tcursor: pointer;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\nbutton:disabled.tc-btn-invisible {\\n\\tcursor: default;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-btn-boxed {\\n\\tfont-size: 0.6em;\\n\\tpadding: 0.2em;\\n\\tmargin: 1px;\\n\\tbackground: none;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-controls-foreground>>;\\n\\tborder-radius: 0.25em;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed svg {\\n\\tfont-size: 1.6666em;\\n}\\n\\n.tc-btn-boxed:hover {\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\nhtml body.tc-body .tc-btn-boxed:hover svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-btn-rounded {\\n\\tfont-size: 0.5em;\\n\\tline-height: 2;\\n\\tpadding: 0em 0.3em 0.2em 0.4em;\\n\\tmargin: 1px;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 2em;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded svg {\\n\\tfont-size: 1.6666em;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-btn-rounded:hover {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\nhtml body.tc-body .tc-btn-rounded:hover svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-btn-icon svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n\\n.tc-btn-text {\\n\\tmargin-left: 7px;\\n}\\n\\n/* used for documentation \\\fake\\\ buttons */\\n.tc-btn-standard {\\n\\tline-height: 1.8;\\n\\tcolor: #667;\\n\\tbackground-color: #e0e0e0;\\n\\tborder: 1px solid #888;\\n\\tpadding: 2px 1px 2px 1px;\\n\\tmargin: 1px 4px 1px 4px;\\n}\\n\\n.tc-btn-big-green {\\n\\tdisplay: inline-block;\\n\\tpadding: 8px;\\n\\tmargin: 4px 8px 4px 8px;\\n\\tbackground: \u003C\u003Ccolour download-background>>;\\n\\tcolor: \u003C\u003Ccolour download-foreground>>;\\n\\tfill: \u003C\u003Ccolour download-foreground>>;\\n\\tborder: none;\\n\\tborder-radius: 2px;\\n\\tfont-size: 1.2em;\\n\\tline-height: 1.4em;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-btn-big-green svg,\\n.tc-btn-big-green img {\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tvertical-align: middle;\\n\\tfill: \u003C\u003Ccolour download-foreground>>;\\n}\\n\\n.tc-primary-btn {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-sidebar-lists input {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-sidebar-lists button {\\n\\tcolor: \u003C\u003Ccolour sidebar-button-foreground>>;\\n\\tfill: \u003C\u003Ccolour sidebar-button-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini {\\n\\tcolor: \u003C\u003Ccolour sidebar-muted-foreground>>;\\n}\\n\\n.tc-sidebar-lists button.tc-btn-mini:hover {\\n\\tcolor: \u003C\u003Ccolour sidebar-muted-foreground-hover>>;\\n}\\n\\n.tc-sidebar-lists button small {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\nbutton svg.tc-image-button, button .tc-image-button img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n}\\n\\n.tc-unfold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 100%;\\n\\twidth: calc(100% + 2px);\\n\\tmargin-left: -43px;\\n\\ttext-align: center;\\n\\tborder-top: 2px solid \u003C\u003Ccolour tiddler-info-background>>;\\n\\tmargin-top: 4px;\\n}\\n\\n.tc-unfold-banner:hover {\\n\\tbackground: \u003C\u003Ccolour tiddler-info-background>>;\\n\\tborder-top: 2px solid \u003C\u003Ccolour tiddler-info-border>>;\\n}\\n\\n.tc-unfold-banner svg, .tc-fold-banner svg {\\n\\theight: 0.75em;\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-hover>>;\\n}\\n\\n.tc-fold-banner {\\n\\tposition: absolute;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tbackground: none;\\n\\tborder: none;\\n\\twidth: 23px;\\n\\ttext-align: center;\\n\\tmargin-left: -35px;\\n\\ttop: 6px;\\n\\tbottom: 6px;\\n}\\n\\n.tc-fold-banner:hover {\\n\\tbackground: \u003C\u003Ccolour tiddler-info-background>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-unfold-banner {\\n\\t\\tposition: static;\\n\\t\\twidth: calc(100% + 59px);\\n\\t}\\n\\n\\t.tc-fold-banner {\\n\\t\\twidth: 16px;\\n\\t\\tmargin-left: -16px;\\n\\t\\tfont-size: 0.75em;\\n\\t}\\n\\n}\\n\\n/*\\n** Tags and missing tiddlers\\n*/\\n\\n.tc-tag-list-item {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-tags-wrapper {\\n\\tmargin: 4px 0 14px 0;\\n}\\n\\n.tc-tags-wrapper .tc-tag-list-item {\\n\\tmargin-right: 7px;\\n}\\n\\n.tc-missing-tiddler-label {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n\\tdisplay: inline-block;\\n\\tfont-size: 11.844px;\\n\\tline-height: 14px;\\n\\twhite-space: nowrap;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n}\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n\\tdisplay: inline-block;\\n\\tpadding: 0.16em 0.7em;\\n\\tfont-size: 0.9em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.2em;\\n\\tcolor: \u003C\u003Ccolour tag-foreground>>;\\n\\twhite-space: break-spaces;\\n\\tvertical-align: baseline;\\n\\tbackground-color: \u003C\u003Ccolour tag-background>>;\\n\\tborder-radius: 1em;\\n}\\n\\n.tc-sidebar-scrollable .tc-tag-label {\\n\\ttext-shadow: none;\\n}\\n\\n.tc-untagged-separator {\\n\\tborder: 0;\\n\\theight: 1px;\\n\\tbackground: \u003C\u003Ccolour tab-divider>>;\\n}\\n\\nbutton.tc-untagged-label {\\n\\tbackground-color: \u003C\u003Ccolour untagged-background>>;\\n}\\n\\n.tc-tag-label svg, .tc-tag-label img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tmargin-right: 3px;\\n\\tmargin-bottom: 1px;\\n\\tvertical-align: bottom;\\n}\\n\\n.tc-edit-tags button.tc-remove-tag-button svg {\\n\\tfont-size: 0.7em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-tag-manager-table .tc-tag-label {\\n}\\n\\n.tc-tag-manager-tag {\\n\\twidth: 100%;\\n}\\n\\nbutton.tc-btn-invisible.tc-remove-tag-button {\\n\\toutline: none;\\n}\\n\\n.tc-tag-button-selected,\\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n/*\\n** Page layout\\n*/\\n\\n.tc-topbar {\\n\\tposition: fixed;\\n\\tz-index: 1200;\\n}\\n\\n.tc-topbar-left {\\n\\tleft: 29px;\\n\\ttop: 5px;\\n}\\n\\n.tc-topbar-right {\\n\\ttop: 5px;\\n\\tright: 29px;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-topbar-right {\\n\\t\\tright: 10px;\\n\\t}\\n\\n}\\n\\n.tc-topbar button {\\n\\tpadding: 8px;\\n}\\n\\n.tc-topbar svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-topbar button:hover svg {\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\\n\\t\\ttransform: rotate(-90deg);\\n\\t}\\n\\n}\\n\\n.tc-sidebar-header {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n\\tfill: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-sidebar-header .tc-sidebar-lists p,\\n.tc-sidebar-tools-item {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-sidebar-header .tc-missing-tiddler-label {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-advanced-search input {\\n\\twidth: 60%;\\n}\\n\\n.tc-search a svg {\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-page-controls {\\n\\tmargin-top: 14px;\\n\\tmargin-bottom: 14px;\\n\\tfont-size: 1.5em;\\n}\\n\\n.tc-page-controls .tc-drop-down {\\n\\tfont-size: 1rem;\\n}\\n\\n.tc-page-controls button {\\n\\tmargin-right: 0.5em;\\n}\\n\\n.tc-page-controls a.tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-page-controls img {\\n\\twidth: 1em;\\n}\\n\\n.tc-page-controls svg {\\n\\tfill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\\n\\tfill: \u003C\u003Ccolour sidebar-controls-foreground-hover>>;\\n}\\n\\n.tc-sidebar-lists .tc-menu-list-item {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-menu-list-count {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-menu-list-subitem {\\n\\tpadding-left: 7px;\\n}\\n\\n.tc-story-river {\\n\\tposition: relative;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-sidebar-header {\\n\\t\\tpadding: 14px;\\n\\t\\tmin-height: 32px;\\n\\t\\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\ttransition: min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\\n\\t}\\n\\n\\t\u003C\u003Cif-no-sidebar \\\\\\\\\\\n\\n\\t\\t.tc-sidebar-header {\\n\\t\\t\\tmin-height: 0;\\n\\t\\t\\tpadding-top: 0;\\n\\t\\t\\tpadding-bottom: 0;\\n\\t\\t}\\n\\n\\t\\\\\\\\\>>\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-message-box {\\n\\t\\tmargin: 21px -21px 21px -21px;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tposition: fixed;\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\toverflow-y: auto;\\n\\t\\toverflow-x: auto;\\n\\t\\t-webkit-overflow-scrolling: touch;\\n\\t\\tmargin: 0 0 0 -42px;\\n\\t\\tpadding: 71px 0 28px 42px;\\n\\t}\\n\\n\\thtmldir\\\rtl\\\ .tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tposition: relative;\\n\\t\\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\\n\\t\\tpadding: 42px 42px 42px 42px;\\n\\t}\\n\\n\u003C\u003Cif-no-sidebar \\\\\n\\n\\t.tc-story-river {\\n\\t\\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\\n\\t}\\n\\n\\\>>\\n\\n\\t.tc-story-river.tc-static-story-river {\\n\\t\\tmargin-right: 0;\\n\\t\\tpadding-right: 42px;\\n\\t}\\n\\n}\\n\\n@media print {\\n\\n\\tbody.tc-body {\\n\\t\\tbackground-color: transparent;\\n\\t}\\n\\n\\t.tc-sidebar-header, .tc-topbar {\\n\\t\\tdisplay: none;\\n\\t}\\n\\n\\t.tc-story-river {\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 0;\\n\\t}\\n\\n\\t.tc-story-river .tc-tiddler-frame {\\n\\t\\tmargin: 0;\\n\\t\\tborder: none;\\n\\t\\tpadding: 0;\\n\\t}\\n}\\n\\n/*\\n** Tiddler styles\\n*/\\n\\n.tc-tiddler-frame {\\n\\tposition: relative;\\n\\tmargin-bottom: 28px;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-border>>;\\n}\\n\\n{{$:/themes/tiddlywiki/vanilla/sticky}}\\n\\n.tc-tiddler-info {\\n\\toverflow: hidden;\\n\\tpadding: 14px 42px 14px 42px;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-info-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tiddler-info-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tiddler-info-border>>;\\n}\\n\\n.tc-tiddler-info p {\\n\\tmargin-top: 3px;\\n\\tmargin-bottom: 3px;\\n}\\n\\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-info-tab-background>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tiddler-info-tab-background>>;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\n\\t.tc-tiddler-info {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t}\\n\\n}\\n\\n.tc-view-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-view-field-name {\\n\\twidth: 1%; /* Makes this column be as narrow as possible */\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-view-field-value {\\n\\tword-break: break-all;\\n}\\n\\n@media (max-width: \u003C\u003Csidebarbreakpoint-minus-one>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 14px 14px 14px 14px;\\n\\t\\tmargin-bottom: .5em;\\n\\t}\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -14px 0 -14px;\\n\\t}\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\t.tc-tiddler-frame {\\n\\t\\tpadding: 28px 42px 42px 42px;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\\n\\t\\tborder-radius: 2px;\\n\\t}\\n\\n\u003C\u003Cif-no-sidebar \\\\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\\>>\\n\\n\\t.tc-tiddler-info {\\n\\t\\tmargin: 0 -42px 0 -42px;\\n\\t}\\n}\\n\\n.tc-site-title,\\n.tc-titlebar {\\n\\tfont-weight: normal;\\n\\tfont-size: 2.35em;\\n\\tline-height: 1.35em;\\n\\tcolor: \u003C\u003Ccolour tiddler-title-foreground>>;\\n\\tmargin: 0;\\n}\\n\\n.tc-site-title {\\n\\tcolor: \u003C\u003Ccolour site-title-foreground>>;\\n}\\n\\n.tc-tiddler-title-icon {\\n\\tvertical-align: middle;\\n\\tmargin-right: .1em;\\n}\\n\\n.tc-tiddler-title-icon svg {\\n\\twidth: 0.9em;\\n\\theight: 0.9em;\\n}\\n\\n.tc-system-title-prefix {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-tiddler-lazy-loading {\\n\\theight: 4px;\\n\\twidth: 100%;\\n\\tbackground: no-repeat linear-gradient(\u003C\u003Ccolour background>> 0 0),no-repeat linear-gradient(\u003C\u003Ccolour background>> 0 0),\u003C\u003Ccolour primary>>;\\n\\tbackground-size: 60% 100%;\\n\\tanimation: animation-loading-progress 3s infinite;\\n}\\n\\n@keyframes animation-loading-progress {\\n\\t0% {background-position:-150% 0,-150% 0}\\n\\t66% {background-position: 250% 0,-150% 0}\\n\\t100% {background-position: 250% 0, 250% 0}\\n}\\n\\n.tc-titlebar h2 {\\n\\tfont-size: 1em;\\n\\tdisplay: inline;\\n}\\n\\n.tc-titlebar img {\\n\\theight: 1em;\\n}\\n\\n.tc-subtitle {\\n\\tfont-size: 0.9em;\\n\\tcolor: \u003C\u003Ccolour tiddler-subtitle-foreground>>;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-subtitle .tc-tiddlylink {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-tiddler-missing .tc-title {\\n\\tfont-style: italic;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-controls {\\n\\tfloat: right;\\n\\tpadding: 3px; /* make space for outline */\\n}\\n\\n.tc-tiddler-controls .tc-drop-down {\\n\\tfont-size: 0.6em;\\n}\\n\\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\\n\\tfont-size: 1em;\\n}\\n\\n.tc-tiddler-controls > span > button,\\n.tc-tiddler-controls > span > span > button,\\n.tc-tiddler-controls > span > span > span > button {\\n\\tvertical-align: baseline;\\n\\tmargin-left:5px;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\\n.tc-search button svg, .tc-search a svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\\n\\theight: 0.75em;\\n}\\n\\n.tc-search button svg, .tc-search a svg {\\n\\theight: 1.2em;\\n\\twidth: 1.2em;\\n\\tmargin: 0 0.25em;\\n}\\n\\n.tc-tiddler-controls button.tc-selected svg,\\n.tc-page-controls button.tc-selected svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n}\\n\\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\\n.tc-search button:hover svg, .tc-search a:hover svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-hover>>;\\n}\\n\\n@media print {\\n\\t.tc-tiddler-controls {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.tc-tiddler-help { /* Help prompts within tiddler template */\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tiddler-help a.tc-tiddlylink {\\n\\tcolor: \u003C\u003Ccolour very-muted-foreground>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-texteditor {\\n\\twidth: 100%;\\n\\tmargin: 4px 0 4px 0;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor {\\n\\tpadding: 3px 3px 3px 3px;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tline-height: 1.3em;\\n\\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\t-webkit-appearance: none;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame select.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-background>>;\\n}\\n\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n.tc-tiddler-frame .tc-edit-fields input.tc-edit-fieldeditor,\\n.tc-tiddler-frame .tc-edit-fields select.tc-edit-fieldeditor,\\n.tc-tiddler-frame .tc-edit-fields textarea.tc-edit-fieldeditor {\\n\\tmargin: 0;\\n\\tpadding: 2px 3px;\\n}\\n\\n.tc-tiddler-frame .tc-binary-warning {\\n\\twidth: 100%;\\n\\theight: 5em;\\n\\ttext-align: center;\\n\\tpadding: 3em 3em 6em 3em;\\n\\tbackground: \u003C\u003Ccolour alert-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour alert-border>>;\\n}\\n\\ncanvas.tc-edit-bitmapeditor {\\n\\tborder: 6px solid \u003C\u003Ccolour tiddler-editor-border-image>>;\\n\\tcursor: crosshair;\\n\\t-moz-user-select: none;\\n\\t-webkit-user-select: none;\\n\\t-ms-user-select: none;\\n\\tmargin-top: 6px;\\n\\tmargin-bottom: 6px;\\n}\\n\\n.tc-edit-bitmapeditor-width {\\n\\tdisplay: block;\\n}\\n\\n.tc-edit-bitmapeditor-height {\\n\\tdisplay: block;\\n}\\n\\n.tc-single-tiddler-window .tc-tiddler-body,\\n.tc-tiddler-frame .tc-tiddler-body {\\n\\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\\n\\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\\n}\\n\\n.tc-titlebar, .tc-tiddler-edit-title {\\n\\toverflow: hidden; /* https://github.com/TiddlyWiki/TiddlyWiki5/issues/282 */\\n}\\n\\n/*\\n* Tiddler in a new window.\\n* Also see: .tc-single-tiddler-window .tc-tiddler-body, above\\n*/\\n\\nhtml body.tc-body.tc-single-tiddler-window {\\n\\tmargin: 1em;\\n\\tbackground: \u003C\u003Ccolour tiddler-background>>;\\n}\\n\\n.tc-single-tiddler-window img,\\n.tc-single-tiddler-window svg,\\n.tc-single-tiddler-window canvas,\\n.tc-single-tiddler-window embed,\\n.tc-single-tiddler-window iframe {\\n\\tmax-width: 100%;\\n}\\n\\n/*\\n** Editor\\n*/\\n\\n.tc-editor-toolbar {\\n\\tmargin-top: 8px;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-editor-toolbar,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden .tc-editor-toolbar {\\n\\tgrid-area: toolbar;\\n}\\n\\n.tc-editor-toolbar button {\\n\\tvertical-align: middle;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n\\tcolor: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n\\tmargin: 2px 0 2px 4px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\\n\\tmargin-left: 1px;\\n\\twidth: 1em;\\n\\tborder-radius: 8px;\\n}\\n\\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\\n\\tmargin-left: 11px;\\n}\\n\\n.tc-editor-toolbar button.tc-selected {\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-editor-toolbar button svg {\\n\\twidth: 1.6em;\\n\\theight: 1.2em;\\n}\\n\\n.tc-editor-toolbar .tc-drop-down button.tc-btn-mini {\\n\\tpadding: 2px 4px;\\n}\\n\\n.tc-editor-toolbar button:hover {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-controls-foreground-selected>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\\n\\twhite-space: normal;\\n}\\n\\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\\n\\tdisplay: inline-block;\\n\\tpadding: 3px;\\n\\twidth: auto;\\n}\\n\\n.tc-editor-toolbar .tc-search-results {\\n\\tpadding: 0;\\n}\\n\\n.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down > p {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n}\\n\\n.tc-editor-toolbar button.tc-editortoolbar-stamp-button + .tc-popup .tc-drop-down a.tc-tiddlylink {\\n\\tfont-weight: normal;\\n}\\n\\n/*\\n** Adjustments for fluid-fixed mode\\n*/\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\u003C\u003Cif-fluid-fixed text:\\\\\\\\\\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 0;\\n\\t\\tposition: relative;\\n\\t\\twidth: auto;\\n\\t\\tleft: 0;\\n\\t\\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\\n\\t\\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\t.tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t.tc-sidebar-scrollable {\\n\\t\\tleft: auto;\\n\\t\\tbottom: 0;\\n\\t\\tright: 0;\\n\\t\\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\\n\\t}\\n\\n\\tbody.tc-body .tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 42px);\\n\\t}\\n\\n\\\\\\\\\ hiddenSidebarText:\\\\\\\\\\\n\\n\\t.tc-story-river {\\n\\t\\tpadding-right: 3em;\\n\\t\\tmargin-right: 0;\\n\\t}\\n\\n\\tbody.tc-body .tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: 100%;\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n\\\\\\\\\>>\\n\\n}\\n\\n/*\\n** Toolbar buttons\\n*/\\n\\n.tc-page-controls svg.tc-image-new-button {\\n\\tfill: \u003C\u003Ccolour toolbar-new-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-options-button {\\n\\tfill: \u003C\u003Ccolour toolbar-options-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-save-button {\\n\\tfill: \u003C\u003Ccolour toolbar-save-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-info-button {\\n\\tfill: \u003C\u003Ccolour toolbar-info-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-edit-button {\\n\\tfill: \u003C\u003Ccolour toolbar-edit-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-close-button {\\n\\tfill: \u003C\u003Ccolour toolbar-close-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-delete-button {\\n\\tfill: \u003C\u003Ccolour toolbar-delete-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-cancel-button {\\n\\tfill: \u003C\u003Ccolour toolbar-cancel-button>>;\\n}\\n\\n.tc-tiddler-controls button svg.tc-image-done-button {\\n\\tfill: \u003C\u003Ccolour toolbar-done-button>>;\\n}\\n\\n.tc-page-controls svg.tc-image-layout-button {\\n\\tfill: \u003C\u003Ccolour toolbar-options-button>>;\\n}\\n\\n/*\\n** Tiddler edit mode\\n*/\\n\\n.tc-tiddler-edit-frame em.tc-edit {\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n\\tfont-style: normal;\\n}\\n\\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-type-selector .tc-edit-typeeditor {\\n\\twidth: auto;\\n}\\n\\n.tc-type-selector-dropdown-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n\u003C\u003Cset-type-selector-min-width>>\\n\\n.tc-edit-tags {\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tpadding: 4px 8px 4px 8px;\\n}\\n\\n.tc-edit-add-tag {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-add-tag .tc-add-tag-name input {\\n\\twidth: 50%;\\n}\\n\\n.tc-edit-add-tag .tc-keyboard {\\n\\tdisplay:inline;\\n}\\n\\n.tc-edit-tags .tc-tag-label {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-tags-list {\\n\\tmargin: 14px 0 14px 0;\\n}\\n\\n.tc-remove-tag-button {\\n\\tpadding-left: 4px;\\n}\\n\\n.tc-tiddler-editor {\\n\\tdisplay: grid;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview {\\n\\tgrid-template-areas:\\n\\t\\t\\\toolbar toolbar\\\\\n\\t\\t\\\editor preview\\\;\\n\\tgrid-template-columns: repeat(2, minmax(0px, 1fr));\\n\\tgrid-template-rows: auto 1fr;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden {\\n\\tgrid-template-areas:\\n\\t\\t\\\toolbar\\\\\n\\t\\t\\\editor\\\;\\n\\tgrid-template-columns: 1fr;\\n\\tgrid-template-rows: auto 1fr;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-tiddler-preview-preview {\\n\\tgrid-area: preview;\\n\\toverflow-wrap: anywhere;\\n\\tword-break: normal;\\n\\tborder: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n\\tmargin: 4px 0 3px 3px;\\n\\tpadding: 3px 3px 3px 3px;\\n}\\n\\n\u003C\u003Cif-editor-height-fixed then:\\\\\\\\\\\n\\n.tc-tiddler-preview-preview {\\n\\toverflow-y: scroll;\\n\\theight: {{$:/config/TextEditor/EditorHeight/Height}};\\n}\\n\\n\\\\\\\\\>>\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview .tc-edit-texteditor,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden .tc-edit-texteditor {\\n\\tgrid-area: editor;\\n}\\n\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview canvas.tc-edit-bitmapeditor,\\n.tc-tiddler-frame .tc-tiddler-editor.tc-tiddler-preview-hidden canvas.tc-edit-bitmapeditor {\\n\\tgrid-area: editor;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-edit-fields {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-fields.tc-edit-fields-small {\\n\\tmargin-top: 0;\\n\\tmargin-bottom: 0;\\n}\\n\\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\\n\\tborder: none;\\n\\tpadding: 4px;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-fields-odd>>;\\n}\\n\\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\\n\\tbackground-color: \u003C\u003Ccolour tiddler-editor-fields-even>>;\\n}\\n\\n.tc-edit-field-name {\\n\\ttext-align: right;\\n}\\n\\n.tc-edit-field-value input {\\n\\twidth: 100%;\\n}\\n\\n.tc-edit-field-remove {\\n}\\n\\n.tc-edit-field-remove svg {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\\n\\twidth: auto;\\n}\\n\\n.tc-edit-field-add-name-wrapper {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-edit-field-add-value {\\n\\tdisplay: inline-block;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-edit-field-add-value {\\n\\t\\twidth: 35%;\\n\\t}\\n\\n}\\n\\n.tc-edit-field-add-button {\\n\\tdisplay: inline-block;\\n\\twidth: 10%;\\n}\\n\\n\\n/*\\n** Tiddler editor dropzone\\n*/\\n\\n.tc-dropzone-editor {\\n\\tposition:relative;\\n}\\n\\n.tc-dropzone-editor.tc-dragover .tc-editor-toolbar::after{\\n\\tz-index: 10000;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\theight: 100%;\\n\\tbackground: \u003C\u003Ccolour dropzone-background>>;\\n\\tcontent: \\\\u003C\u003Clingo DropMessage>>\\\;\\n\\tpointer-events: none;\\n\\tposition: absolute;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n\\tbackground-color: \u003C\u003Ccolor background>>;\\n\\tborder: 4px dashed \u003C\u003Ccolor modal-border>>;\\n\\tfont-weight: bold;\\n\\tfont-size: 150%;\\n\\topacity: 0.8;\\n\\tcolor: \u003C\u003Ccolor foreground>>;\\n}\\n\\n.tc-editor-importpopup {\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\n.tc-editor-import {\\n\\tposition: absolute;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tbackground: \u003C\u003Ccolor pre-background>>;\\n\\tbox-shadow: 2px 2px 10px \u003C\u003Ccolour foreground>>;\\n\\tpadding: 10px;\\n\\twidth: 96%;\\n\\tborder: 1px solid \u003C\u003Ccolor tiddler-controls-foreground>>;\\n\\ttext-align:center;\\n}\\n\\n.tc-editor-import img {\\n\\tmax-height: 500px;\\n}\\n\\n/*\\n** Storyview Classes\\n*/\\n\\n.tc-viewswitcher .tc-image-button {\\n\\tmargin-right: .3em;\\n}\\n\\n.tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\tposition: absolute;\\n\\tdisplay: block;\\n\\twidth: 100%;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-page-container.tc-page-view-zoomin .tc-tiddler-frame {\\n\\t\\twidth: calc(100% - 84px);\\n\\t}\\n\\n}\\n\\n/*\\n** Dropdowns\\n*/\\n\\n.tc-btn-dropdown {\\n\\ttext-align: left;\\n}\\n\\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\\n\\theight: 1em;\\n\\twidth: 1em;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-drop-down-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-drop-down {\\n\\tmin-width: 380px;\\n\\tborder: 1px solid \u003C\u003Ccolour dropdown-border>>;\\n\\tbackground-color: \u003C\u003Ccolour dropdown-background>>;\\n\\tpadding: 7px 0 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\ttext-shadow: none;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-drop-down {\\n\\tmargin-left: 14px;\\n}\\n\\n.tc-drop-down button svg, .tc-drop-down a svg {\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-drop-down button:disabled svg {\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-drop-down button.tc-btn-invisible:hover svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drop-down .tc-drop-down-info {\\n\\tpadding-left: 14px;\\n}\\n\\n.tc-drop-down p {\\n\\tpadding: 0 14px 0 14px;\\n}\\n\\n.tc-drop-down svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-drop-down img {\\n\\twidth: 1em;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n\\tdisplay: block;\\n\\tpadding: 0 14px 0 14px;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\tmargin-bottom: 0px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-drop-down .tc-prompt {\\n\\tpadding: 0 14px;\\n}\\n\\n.tc-drop-down .tc-chooser {\\n\\tborder: none;\\n}\\n\\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\\n\\tfont-size: 0.4em;\\n\\tpadding-left: 1.2em;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper {\\n\\twidth: 100%;\\n}\\n\\n.tc-drop-down .tc-file-input-wrapper button {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button {\\n\\tbackground-color: \u003C\u003Ccolour dropdown-tab-background>>;\\n}\\n\\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour dropdown-tab-background-selected>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour dropdown-tab-background-selected>>;\\n}\\n\\n.tc-drop-down-bullet {\\n\\tdisplay: inline-block;\\n\\twidth: 0.5em;\\n}\\n\\n.tc-drop-down .tc-tab-contents a {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-block-dropdown-wrapper {\\n\\tposition: relative;\\n}\\n\\n.tc-block-dropdown {\\n\\tposition: absolute;\\n\\tmin-width: 220px;\\n\\tborder: 1px solid \u003C\u003Ccolour dropdown-border>>;\\n\\tbackground-color: \u003C\u003Ccolour dropdown-background>>;\\n\\tpadding: 7px 0;\\n\\tmargin: 4px 0 0 0;\\n\\twhite-space: nowrap;\\n\\tz-index: 1000;\\n\\ttext-shadow: none;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down {\\n\\tmargin-left: -12px;\\n}\\n\\n.tc-block-dropdown a {\\n\\tdisplay: block;\\n\\tpadding: 4px 14px 4px 14px;\\n}\\n\\n.tc-block-dropdown.tc-search-drop-down a {\\n\\tdisplay: block;\\n\\tpadding: 0px 10px 0px 10px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item-plain,\\n.tc-block-dropdown .tc-dropdown-item-plain {\\n\\tpadding: 4px 14px 4px 7px;\\n}\\n\\n.tc-drop-down .tc-dropdown-item,\\n.tc-block-dropdown .tc-dropdown-item {\\n\\tpadding: 4px 14px 4px 7px;\\n\\tcolor: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-block-dropdown a.tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-background>>;\\n\\tbackground-color: \u003C\u003Ccolour tiddler-link-foreground>>;\\n\\ttext-decoration: none;\\n}\\n\\n.tc-search-results {\\n\\tpadding: 0 7px 0 7px;\\n}\\n\\n.tc-image-chooser, .tc-colour-chooser {\\n\\twhite-space: normal;\\n}\\n\\n.tc-image-chooser a,\\n.tc-colour-chooser a {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\ttext-align: center;\\n\\tposition: relative;\\n}\\n\\n.tc-image-chooser a {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 2px;\\n\\tmargin: 2px;\\n\\twidth: 4em;\\n\\theight: 4em;\\n}\\n\\n.tc-colour-chooser a {\\n\\tpadding: 3px;\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-image-chooser a:hover,\\n.tc-colour-chooser a:hover {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n\\tpadding: 0px;\\n\\tborder: 3px solid \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-image-chooser a svg,\\n.tc-image-chooser a img {\\n\\tdisplay: inline-block;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tmax-width: 3.5em;\\n\\tmax-height: 3.5em;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmargin: auto;\\n}\\n\\n/* Make search dropdown visible on small screens. issue #7003 */\\n@media (max-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-sidebar-search .tc-block-dropdown-wrapper {\\n\\t\\tposition: initial;\\n\\t}\\n\\n}\\n\\n/*\\n** Modals\\n*/\\n\\n.tc-modal-wrapper {\\n\\tposition: fixed;\\n\\toverflow: auto;\\n\\toverflow-y: scroll;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 900;\\n}\\n\\n.tc-modal-backdrop {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tleft: 0;\\n\\tz-index: 1000;\\n\\tbackground-color: \u003C\u003Ccolour modal-backdrop>>;\\n}\\n\\n.tc-modal {\\n\\tz-index: 1100;\\n\\tbackground-color: \u003C\u003Ccolour modal-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour modal-border>>;\\n}\\n\\n@media (max-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 1em;\\n\\t\\tleft: 1em;\\n\\t\\tright: 1em;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n@media (min-width: 55em) {\\n\\t.tc-modal {\\n\\t\\tposition: fixed;\\n\\t\\ttop: 2em;\\n\\t\\tleft: 25%;\\n\\t\\twidth: 50%;\\n\\t}\\n\\n\\t.tc-modal-body {\\n\\t\\toverflow-y: auto;\\n\\t\\tmax-height: 400px;\\n\\t\\tmax-height: 60vh;\\n\\t}\\n}\\n\\n.tc-modal-header {\\n\\tpadding: 9px 15px;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour modal-header-border>>;\\n}\\n\\n.tc-modal-header h3 {\\n\\tmargin: 0;\\n\\tline-height: 30px;\\n}\\n\\n.tc-modal-header img, .tc-modal-header svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-modal-body {\\n\\tpadding: 15px;\\n}\\n\\n.tc-modal-footer {\\n\\tpadding: 14px 15px 15px;\\n\\tmargin-bottom: 0;\\n\\ttext-align: right;\\n\\tbackground-color: \u003C\u003Ccolour modal-footer-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour modal-footer-border>>;\\n}\\n\\n.tc-modal-prevent-scroll {\\n\\toverflow: hidden;\\n}\\n\\n/*\\n** Centered modals\\n*/\\n.tc-modal-centered .tc-modal {\\n\\twidth: auto;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%) !important;\\n}\\n\\n/*\\n** Notifications\\n*/\\n\\n.tc-notification {\\n\\tposition: fixed;\\n\\ttop: 14px;\\n\\tright: 42px;\\n\\tz-index: 1300;\\n\\tmax-width: 280px;\\n\\tpadding: 0 14px 0 14px;\\n\\tbackground-color: \u003C\u003Ccolour notification-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour notification-border>>;\\n}\\n\\n/*\\n** Tabs\\n*/\\n\\n.tc-tab-set.tc-vertical {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tab-buttons {\\n\\tfont-size: 0.85em;\\n\\tpadding-top: 1em;\\n\\tmargin-bottom: -2px;\\n}\\n\\n.tc-tab-buttons.tc-vertical {\\n\\tz-index: 100;\\n\\tdisplay: block;\\n\\tpadding-top: 14px;\\n\\tvertical-align: top;\\n\\ttext-align: right;\\n\\tmargin-bottom: inherit;\\n\\tmargin-right: -1px;\\n\\tmax-width: 33%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n}\\n\\n.tc-tab-buttons button.tc-tab-selected {\\n\\tcolor: \u003C\u003Ccolour tab-foreground-selected>>;\\n\\tbackground-color: \u003C\u003Ccolour tab-background-selected>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-border-selected>>;\\n}\\n\\n.tc-tab-buttons button {\\n\\tcolor: \u003C\u003Ccolour tab-foreground>>;\\n\\tpadding: 3px 5px 3px 5px;\\n\\tmargin-right: 0.3em;\\n\\tfont-weight: normal;\\n\\tborder: none;\\n\\tbackground: inherit;\\n\\tbackground-color: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-top-right-radius: 2px;\\n\\tborder-bottom-left-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tmargin-top: 3px;\\n\\tmargin-right: 0;\\n\\ttext-align: right;\\n\\tbackground-color: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-right: none;\\n\\tborder-top-left-radius: 2px;\\n\\tborder-bottom-left-radius: 2px;\\n\\tborder-top-right-radius: 0;\\n\\tborder-bottom-right-radius: 0;\\n}\\n\\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour tab-background-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour tab-background-selected>>;\\n}\\n\\n.tc-tab-divider {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-divider>>;\\n}\\n\\n.tc-tab-divider.tc-vertical {\\n\\tdisplay: none;\\n}\\n\\n.tc-tab-content {\\n\\tmargin-top: 14px;\\n}\\n\\n.tc-tab-content.tc-vertical {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-top: 0;\\n\\tpadding-left: 14px;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\t-webkit-flex: 1 0 70%;\\n\\tflex: 1 0 70%;\\n\\toverflow: auto;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons {\\n\\tmargin-bottom: -1px;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background-selected>>;\\n\\tcolor: \u003C\u003Ccolour sidebar-tab-foreground-selected>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour sidebar-tab-border-selected>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-buttons button {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background>>;\\n\\tcolor: \u003C\u003Ccolour sidebar-tab-foreground>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour sidebar-tab-border>>;\\n}\\n\\n.tc-sidebar-lists .tc-tab-divider {\\n\\tborder-top: 1px solid \u003C\u003Ccolour sidebar-tab-divider>>;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background>>;\\n\\tborder-top: none;\\n\\tborder-left: none;\\n\\tborder-bottom: none;\\n\\tborder-right: 1px solid #ccc;\\n\\tmargin-bottom: inherit;\\n}\\n\\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\\n\\tbackground-color: \u003C\u003Ccolour sidebar-tab-background-selected>>;\\n\\tborder: none;\\n}\\n\\n/*\\n** Manager\\n*/\\n\\n.tc-manager-wrapper {\\n\\n}\\n\\n.tc-manager-controls {\\n\\n}\\n\\n.tc-manager-control {\\n\\tmargin: 0.5em 0;\\n}\\n\\n.tc-manager-control select {\\n\\tmax-width: 100%;\\n}\\n\\n.tc-manager-list {\\n\\twidth: 100%;\\n\\tborder-top: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-right: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item {\\n\\n}\\n\\n.tc-manager-list-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 3px;\\n}\\n\\n.tc-manager-list-item-heading-selected {\\n\\tfont-weight: bold;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n\\tbackground-color: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-manager-list-item-heading:hover {\\n\\tbackground: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-manager-list-item-content {\\n\\tdisplay: flex;\\n}\\n\\n.tc-manager-list-item-content-sidebar {\\n\\tflex: 1 0;\\n\\tbackground: \u003C\u003Ccolour tiddler-editor-background>>;\\n\\tborder-right: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-manager-list-item-content-item-heading {\\n\\tdisplay: block;\\n\\twidth: 100%;\\n\\ttext-align: left;\\n\\tbackground: \u003C\u003Ccolour muted-foreground>>;\\n\\ttext-transform: uppercase;\\n\\tfont-size: 0.6em;\\n\\tfont-weight: bold;\\n\\tpadding: 0.5em 0 0.5em 0;\\n}\\n\\n.tc-manager-list-item-content-item-body {\\n\\tpadding: 0 0.5em 0 0.5em;\\n}\\n\\n.tc-manager-list-item-content-item-body > pre {\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tborder: none;\\n\\tbackground: inherit;\\n}\\n\\n.tc-manager-list-item-content-tiddler {\\n\\tflex: 3 1;\\n\\tborder-left: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-right: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-bottom: 0.5em solid \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-manager-list-item-content-item-body > table {\\n\\tborder: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n}\\n\\n.tc-manager-list-item-content-item-body > table td {\\n\\tborder: none;\\n}\\n\\n.tc-manager-icon-editor > button {\\n\\twidth: 100%;\\n}\\n\\n.tc-manager-icon-editor > button > svg,\\n.tc-manager-icon-editor > button > button {\\n\\twidth: 100%;\\n\\theight: auto;\\n}\\n\\n/*\\n** Import table\\n*/\\n\\n.tc-import-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-import-table svg.tc-image-edit-button {\\n\\tmax-width: unset;\\n}\\n\\n.tc-import-table th:first-of-type {\\n\\twidth: 10%;\\n}\\n\\n.tc-import-table th:last-of-type {\\n\\twidth: 30%;\\n}\\n\\n.tc-import-table .tc-row-disabled {\\n\\tbackground: \u003C\u003Ccolour very-muted-foreground>>10;\\n\\topacity: 0.8;\\n}\\n\\n.tc-import-table .tc-row-warning {\\n\\tbackground: \u003C\u003Ccolour diff-delete-background>>50;\\n}\\n\\n/*\\n** Alerts\\n*/\\n\\n.tc-alerts {\\n\\tposition: fixed;\\n\\ttop: 28px;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tmax-width: 50%;\\n\\tz-index: 20000;\\n}\\n\\n.tc-alert {\\n\\tposition: relative;\\n\\tmargin: 14px;\\n\\tpadding: 7px;\\n\\tborder: 1px solid \u003C\u003Ccolour alert-border>>;\\n\\tbackground-color: \u003C\u003Ccolour alert-background>>;\\n}\\n\\n.tc-alert-toolbar {\\n\\tposition: absolute;\\n\\ttop: 7px;\\n\\tright: 7px;\\n\\tline-height: 0;\\n}\\n\\n.tc-alert-toolbar svg {\\n\\tfill: \u003C\u003Ccolour alert-muted-foreground>>;\\n}\\n\\n.tc-alert-subtitle {\\n\\tcolor: \u003C\u003Ccolour alert-muted-foreground>>;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n\\tmargin-bottom: 0.5em;\\n}\\n\\n.tc-alert-body > p {\\n\\tmargin: 0;\\n}\\n\\n.tc-alert-highlight {\\n\\tcolor: \u003C\u003Ccolour alert-highlight>>;\\n}\\n\\n@media (min-width: \u003C\u003Csidebarbreakpoint>>) {\\n\\n\\t.tc-static-alert {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t.tc-static-alert-inner {\\n\\t\\tposition: absolute;\\n\\t\\tz-index: 100;\\n\\t}\\n\\n}\\n\\n.tc-static-alert-inner {\\n\\tpadding: 0 2px 2px 42px;\\n\\tcolor: \u003C\u003Ccolour static-alert-foreground>>;\\n}\\n\\n/*\\n** Floating drafts list\\n*/\\n\\n.tc-drafts-list {\\n\\tz-index: 2000;\\n\\tposition: fixed;\\n\\tfont-size: 0.8em;\\n\\tleft: 0;\\n\\tbottom: 0;\\n}\\n\\n.tc-drafts-list a {\\n\\tmargin: 0 0.5em;\\n\\tpadding: 4px 4px;\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\tborder: 1px solid \u003C\u003Ccolour background>>;\\n\\tborder-bottom: none;\\n\\tbackground: \u003C\u003Ccolour dirty-indicator>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drafts-list a:hover {\\n\\ttext-decoration: none;\\n\\tbackground: \u003C\u003Ccolour foreground>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-drafts-list a svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: text-bottom;\\n}\\n\\n/*\\n** Control panel\\n*/\\n\\n.tc-control-panel td {\\n\\tpadding: 4px;\\n}\\n\\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\\n\\twidth: 100%;\\n}\\n\\n.tc-control-panel-setting {\\n\\tborder-top: 1px solid \u003C\u003Ccolour blockquote-bar>>;\\n}\\n\\n.tc-plugin-info {\\n\\tdisplay: flex;\\n\\ttext-shadow: none;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tfill: \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tmargin: 0.5em 0 0.5em 0;\\n\\tpadding: 4px;\\n\\talign-items: center;\\n}\\n\\n.tc-sidebar-lists a.tc-tiddlylink.tc-plugin-info {\\n\\tcolor: \u003C\u003Ccolour tiddler-link-foreground>>;\\n}\\n\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info {\\n\\tmargin: 0.5em;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator {\\n\\tmargin: -16px 1em 0 2em;\\n}\\n\\n.tc-plugin-info-sub-plugin-indicator button {\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tbackground: \u003C\u003Ccolour foreground>>;\\n\\tborder-radius: 8px;\\n\\tpadding: 2px 7px;\\n\\tfont-size: 0.75em;\\n}\\n\\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\\n\\tmargin-left: 1em;\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-plugin-info-disabled {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\\n}\\n\\n.tc-plugin-info-disabled:hover {\\n\\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n\\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover {\\n\\ttext-decoration: none;\\n\\tbackground-color: \u003C\u003Ccolour primary>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n\\tfill: \u003C\u003Ccolour foreground>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk .tc-plugin-info-stability {\\n\\tborder: 1px solid \u003C\u003Ccolour background>>;\\n\\tcolor: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-chunk {\\n\\tmargin: 2px;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon {\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\tline-height: 1;\\n\\theight: 2em;\\n\\twidth: 2em;\\n\\tdisplay: grid;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description {\\n\\tflex-grow: 1;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability {\\n\\tmargin-right: 4px;\\n\\tpadding: 1px 3px;\\n\\tfont-size: 0.8em;\\n\\tborder-radius: 4px;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-stable {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-stable>>;\\n\\tcolor: \u003C\u003Ccolour stability-stable>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-experimental {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-experimental>>;\\n\\tcolor: \u003C\u003Ccolour stability-experimental>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-deprecated {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-deprecated>>;\\n\\tcolor: \u003C\u003Ccolour stability-deprecated>>;\\n}\\n\\n.tc-plugin-info-chunk .tc-plugin-info-stability-legacy {\\n\\tborder: 1px solid \u003C\u003Ccolour stability-legacy>>;\\n\\tcolor: \u003C\u003Ccolour stability-legacy>>;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tflex-grow: 0;\\n\\tflex-shrink: 0;\\n\\ttext-align: right;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\\n\\tfont-size: 1em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-description div {\\n\\tfont-size: 0.8em;\\n\\tline-height: 1.2;\\n\\tmargin: 2px 0 2px 0;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n}\\n\\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\\n\\tmax-width: 2em;\\n\\tmax-height: 2em;\\n\\tmargin: auto;\\n}\\n\\n.tc-plugin-info-dropdown {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tmargin-top: -8px;\\n}\\n\\n.tc-plugin-info-dropdown-message {\\n\\tbackground: \u003C\u003Ccolour message-background>>;\\n\\tpadding: 0.5em 1em 0.5em 1em;\\n\\tfont-weight: bold;\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-plugin-info-dropdown-body {\\n\\tpadding: 1em 1em 0 1em;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-plugin-info-sub-plugins {\\n\\tpadding: 0.5em;\\n\\tmargin: 0 1em 1em 1em;\\n\\tbackground: \u003C\u003Ccolour notification-background>>;\\n}\\n\\n.tc-install-plugin {\\n\\tfont-weight: bold;\\n\\tbackground: green;\\n\\tcolor: white;\\n\\tfill: white;\\n\\tborder-radius: 4px;\\n\\tpadding: 3px;\\n}\\n\\n.tc-install-plugin.tc-reinstall-downgrade {\\n\\tbackground: red;\\n}\\n\\n.tc-install-plugin.tc-reinstall {\\n\\tbackground: blue;\\n}\\n\\n.tc-install-plugin.tc-reinstall-upgrade {\\n\\tbackground: orange;\\n}\\n\\n.tc-check-list {\\n\\tline-height: 2em;\\n}\\n\\n.tc-check-list .tc-image-button {\\n\\theight: 1.5em;\\n}\\n\\n/*\\n** Message boxes\\n*/\\n\\n.tc-message-box {\\n\\tborder: 1px solid \u003C\u003Ccolour message-border>>;\\n\\tbackground: \u003C\u003Ccolour message-background>>;\\n\\tpadding: 0px 21px 0px 21px;\\n\\tfont-size: 12px;\\n\\tline-height: 18px;\\n\\tcolor: \u003C\u003Ccolour message-foreground>>;\\n}\\n\\n.tc-message-box svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: text-bottom;\\n}\\n\\n/*\\n** Pictures\\n*/\\n\\n.tc-bordered-image {\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tpadding: 5px;\\n\\tmargin: 5px;\\n}\\n\\n/*\\n** Floats\\n*/\\n\\n.tc-float-right {\\n\\tfloat: right;\\n}\\n\\n/* Float tc-clearfix. Needs to be used by elements that allow float:right in their content.\\n** So the floating element does not overflow\\n*/\\n\\n.tc-clearfix:after {\\n\\tcontent: \\\\\\;\\n\\tclear: both;\\n\\tdisplay: table;\\n}\\n\\n/* Fix overflow toc, manager and testcase output */\\n.tc-tiddler-body .tc-tabbed-table-of-contents, .tc-manager-list-item-content, .tc-test-case-output {\\n\\toverflow-x: auto;\\n}\\n\\n/* A wrapper to fix table overflow */\\n\\n.tc-table-wrapper {\\n\\toverflow-x: auto;\\n}\\n\\n/*\\n** Chooser\\n*/\\n\\n.tc-chooser {\\n\\tborder-right: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour table-header-background>>;\\n}\\n\\n\\n.tc-chooser-item {\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour table-header-background>>;\\n\\tpadding: 2px 4px 2px 14px;\\n}\\n\\n.tc-drop-down .tc-chooser-item {\\n\\tpadding: 2px;\\n}\\n\\n.tc-chosen,\\n.tc-chooser-item:hover {\\n\\tbackground-color: \u003C\u003Ccolour table-header-background>>;\\n\\tborder-color: \u003C\u003Ccolour table-footer-background>>;\\n}\\n\\n.tc-chosen .tc-tiddlylink {\\n\\tcursor:default;\\n}\\n\\n.tc-chooser-item .tc-tiddlylink {\\n\\tdisplay: block;\\n\\ttext-decoration: none;\\n\\tbackground-color: transparent;\\n}\\n\\n.tc-chooser-item:hover .tc-tiddlylink:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-drop-down .tc-chosen .tc-tiddlylink,\\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\\n\\tcolor: \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-chosen > .tc-tiddlylink:before {\\n\\tmargin-left: -10px;\\n\\tposition: relative;\\n\\tcontent: \\\» \\\;\\n}\\n\\n.tc-chooser-item svg,\\n.tc-chooser-item img{\\n\\tmax-width: 1em;\\n\\tmax-height: 1em;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-language-chooser .tc-image-button img {\\n\\tmax-width: 2em;\\n\\tmax-height: 1em;\\n\\twidth: auto;\\n\\theight: auto;\\n\\tvertical-align: -0.15em;\\n}\\n\\n/*\\n** Palette swatches\\n*/\\n\\n.tc-swatches-horiz {\\n}\\n\\n.tc-swatches-horiz .tc-swatch {\\n\\tdisplay: inline-block;\\n}\\n\\n.tc-swatch {\\n\\twidth: 2em;\\n\\theight: 2em;\\n\\tmargin: 0.4em;\\n\\tborder: 1px solid #888;\\n}\\n\\ninput.tc-palette-manager-colour-input {\\n\\twidth: 100%;\\n\\tpadding: 0;\\n}\\n\\n/*\\n** Table of contents\\n*/\\n\\n.tc-sidebar-lists .tc-table-of-contents {\\n\\twhite-space: nowrap;\\n}\\n\\n.tc-table-of-contents button,\\n.tc-table-of-contents .toc-item-muted {\\n\\tcolor: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents svg {\\n\\twidth: 0.7em;\\n\\theight: 0.7em;\\n\\tvertical-align: middle;\\n\\tfill: \u003C\u003Ccolour sidebar-foreground>>;\\n}\\n\\n.tc-table-of-contents ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n}\\n\\n.tc-table-of-contents ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-table-of-contents li {\\n\\tfont-size: 1.0em;\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li a {\\n\\tfont-weight: bold;\\n}\\n\\n.tc-table-of-contents li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.4;\\n}\\n\\n.tc-table-of-contents li li a {\\n\\tfont-weight: normal;\\n}\\n\\n.tc-table-of-contents li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n\\tline-height: 1.5;\\n}\\n\\n.tc-table-of-contents li li li li {\\n\\tfont-size: 0.95em;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-tabbed-table-of-contents {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents {\\n\\tz-index: 100;\\n\\tdisplay: inline-block;\\n\\tpadding-left: 1em;\\n\\tmax-width: 50%;\\n\\t-webkit-flex: 0 0 auto;\\n\\tflex: 0 0 auto;\\n\\tbackground: \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tdisplay: block;\\n\\tpadding: 0.12em 1em 0.12em 0.25em;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-background>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-background>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-background>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\\n\\ttext-decoration: none;\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tbackground: \u003C\u003Ccolour tab-border>>;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\\n\\tborder-top: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-left: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tmargin-right: -1px;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\\n\\ttext-decoration: none;\\n}\\n\\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\\n\\tdisplay: inline-block;\\n\\tvertical-align: top;\\n\\tpadding-left: 1.5em;\\n\\tpadding-right: 1.5em;\\n\\tborder: 1px solid \u003C\u003Ccolour tab-border>>;\\n\\t-webkit-flex: 1 0 50%;\\n\\tflex: 1 0 50%;\\n}\\n\\n/*\\n** Dirty indicator\\n*/\\n\\nhtml body svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-clean {\\n\\tvisibility: visible;\\n}\\n\\nhtml body svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-dirty {\\n\\tvisibility: hidden;\\n}\\n\\nhtml body.tc-dirty svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-clean {\\n\\tvisibility: hidden;\\n}\\n\\nhtml body.tc-dirty svg.tc-image-save-button-dynamic .tc-image-save-button-dynamic-dirty {\\n\\tvisibility: visible;\\n}\\n\\nhtml body.tc-dirty span.tc-dirty-indicator, html body.tc-dirty span.tc-dirty-indicator svg {\\n\\tfill: \u003C\u003Ccolour dirty-indicator>>;\\n\\tcolor: \u003C\u003Ccolour dirty-indicator>>;\\n}\\n\\n/*\\n** File inputs\\n*/\\n\\n.tc-file-input-wrapper {\\n\\tposition: relative;\\n\\toverflow: hidden;\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n}\\n\\n.tc-file-input-wrapper inputtypefile {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tfont-size: 999px;\\n\\tmax-width: 100%;\\n\\tmax-height: 100%;\\n\\tfilter: alpha(opacity0);\\n\\topacity: 0;\\n\\toutline: none;\\n\\tbackground: white;\\n\\tcursor: pointer;\\n\\tdisplay: inline-block;\\n}\\n\\n::-webkit-file-upload-button {\\n\\tcursor:pointer;\\n}\\n\\n/*\\n** Thumbnail macros\\n*/\\n\\n.tc-thumbnail-wrapper {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\tmargin: 6px;\\n\\tvertical-align: top;\\n}\\n\\n.tc-thumbnail-right-wrapper {\\n\\tfloat:right;\\n\\tmargin: 0.5em 0 0.5em 0.5em;\\n}\\n\\n.tc-thumbnail-image {\\n\\ttext-align: center;\\n\\toverflow: hidden;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-image svg,\\n.tc-thumbnail-image img {\\n\\tfilter: alpha(opacity1);\\n\\topacity: 1;\\n\\tmin-width: 100%;\\n\\tmin-height: 100%;\\n\\tmax-width: 100%;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\\n\\tfilter: alpha(opacity0.8);\\n\\topacity: 0.8;\\n}\\n\\n.tc-thumbnail-background {\\n\\tposition: absolute;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-thumbnail-icon svg,\\n.tc-thumbnail-icon img {\\n\\twidth: 3em;\\n\\theight: 3em;\\n\\t\u003C\u003Cfilter \\\drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\\\>>\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\\n\\tfill: #fff;\\n\\t\u003C\u003Cfilter \\\drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\\\>>\\n}\\n\\n.tc-thumbnail-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tdisplay: -webkit-flex;\\n\\t-webkit-align-items: center;\\n\\t-webkit-justify-content: center;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n\\n.tc-thumbnail-caption {\\n\\tposition: absolute;\\n\\tbackground-color: #777;\\n\\tcolor: #fff;\\n\\ttext-align: center;\\n\\tbottom: 0;\\n\\twidth: 100%;\\n\\tfilter: alpha(opacity0.9);\\n\\topacity: 0.9;\\n\\tline-height: 1.4;\\n\\tborder-bottom-left-radius: 3px;\\n\\tborder-bottom-right-radius: 3px;\\n}\\n\\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\\n\\tfilter: alpha(opacity1);\\n\\topacity: 1;\\n}\\n\\n/*\\n** Diffs\\n*/\\n\\n.tc-diff-equal {\\n\\tbackground-color: \u003C\u003Ccolour diff-equal-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-equal-foreground>>;\\n}\\n\\n.tc-diff-insert {\\n\\tbackground-color: \u003C\u003Ccolour diff-insert-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-insert-foreground>>;\\n}\\n\\n.tc-diff-delete {\\n\\tbackground-color: \u003C\u003Ccolour diff-delete-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-delete-foreground>>;\\n}\\n\\n.tc-diff-invisible {\\n\\tbackground-color: \u003C\u003Ccolour diff-invisible-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-invisible-foreground>>;\\n}\\n\\n.tc-diff-tiddlers th {\\n\\ttext-align: right;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tfont-weight: normal;\\n\\tfont-style: italic;\\n}\\n\\n.tc-diff-tiddlers pre {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tborder: none;\\n\\tbackground: none;\\n}\\n\\n/*\\n** Errors\\n*/\\n\\n.tc-error {\\n\\tbackground: #f00;\\n\\tcolor: #fff;\\n}\\n\\n/*\\n** Tree macro\\n*/\\n\\n.tc-tree div {\\n\\tpadding-left: 14px;\\n}\\n\\n.tc-tree ol {\\n\\tlist-style-type: none;\\n\\tpadding-left: 0;\\n\\tmargin-top: 0;\\n}\\n\\n.tc-tree ol ol {\\n\\tpadding-left: 1em;\\n}\\n\\n.tc-tree button {\\n\\tcolor: #acacac;\\n}\\n\\n.tc-tree svg {\\n\\tfill: #acacac;\\n}\\n\\n.tc-tree span svg {\\n\\twidth: 1em;\\n\\theight: 1em;\\n\\tvertical-align: baseline;\\n}\\n\\n.tc-tree li span {\\n\\tcolor: lightgray;\\n}\\n\\nselect {\\n\\tcolor: \u003C\u003Ccolour select-tag-foreground>>;\\n\\tbackground: \u003C\u003Ccolour select-tag-background>>;\\n}\\n\\n/*\\n** Translink macro\\n*/\\n\\n.tc-translink {\\n\\tbackground-color: \u003C\u003Ccolour pre-background>>;\\n\\tborder: 1px solid \u003C\u003Ccolour pre-border>>;\\n\\tpadding: 0 3px;\\n\\tborder-radius: 3px;\\n}\\n\\ndiv.tc-translink > div {\\n\\tmargin: 1em;\\n}\\n\\ndiv.tc-translink > div > a:first-child > h1 {\\n\\tfont-size: 1.2em;\\n\\tfont-weight: bold;\\n}\\n\\nspan.tc-translink > a:first-child {\\n\\tfont-weight: bold;\\n}\\n\\n/*\\n** Classes for displaying globals\\n*/\\n\\n.tc-global-tiddler-body {\\n\\tpadding: 0.25em;\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 3px;\\n}\\n\\n.tc-global-tiddler-body-heading {\\n\\tmargin: 0 0 0.25em 0;\\n\\tfont-weight: normal;\\n}\\n\\n.tc-global-tiddler-body-type {\\n\\tmargin: 0 0 0.25em 0;\\n\\tborder-bottom: 1px solid \u003C\u003Ccolour foreground>>;\\n}\\n\\n.tc-global-tiddler-body-details {\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-global-tiddler-body pre {\\n\\tmargin: 0;\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n}\\n\\n/*\\n** Utility classes for SVG icons\\n*/\\n\\n.tc-fill-background {\\n\\tfill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-network-activity-background {\\n\\tfill: \u003C\u003Ccolour network-activity-foreground>>;\\n}\\n\\n/*\\n** Test Cases\\n*/\\n\\n.tc-test-case-wrapper {\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour muted-foreground>>;\\n\\tborder-radius: 6px;\\n}\\n\\n.tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-1>>;\\n}\\n\\n.tc-test-case-wrapper .tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-2>>;\\n}\\n\\n.tc-test-case-wrapper .tc-test-case-wrapper .tc-test-case-wrapper {\\n\\tbackground-color: \u003C\u003Ccolour testcase-accent-level-3>>;\\n}\\n\\n.tc-test-case-header {\\n\\tfont-weight: normal;\\n\\tmargin: 0.5em 0;\\n\\tpadding: 0 0.5em;\\n}\\n\\n.tc-test-case-divider {\\n\\tx-background-color: \u003C\u003Ccolour muted-foreground>>;\\n}\\n\\n.tc-test-case-result-icon {\\n\\tfill: #fff;\\n\\tpadding: 0.25em;\\n\\tdisplay: inline-block;\\n\\tline-height: 0;\\n\\tborder-radius: 1em;\\n\\tvertical-align: text-bottom;\\n\\tmargin-right: 0.25em;\\n}\\n\\n.tc-test-case-result-icon-pass {\\n\\tbackground-color: green;\\n}\\n\\n.tc-test-case-result-icon-fail {\\n\\tbackground-color: red;\\n}\\n\\n.tc-test-case-result-icon svg {\\n\\twidth: 0.5em;\\n\\theight: 0.5em;\\n}\\n\\n.tc-test-case-header > h2 {\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tpadding: 0.25em;\\n}\\n\\n.tc-test-case-header > h2,\\n.tc-test-case-source > pre {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-header > h2 a.tc-tiddlylink-missing {\\n\\tfont-style: normal;\\n}\\n\\n.tc-test-case-toolbar {\\n\\tfloat: right;\\n}\\n\\n.tc-test-case-toolbar svg {\\n\\tfill: \u003C\u003Ccolour tiddler-controls-foreground>>;\\n}\\n\\n.tc-test-case-toolbar .tc-drop-down {\\n\\tfont-size: 0.8em;\\n}\\n\\n.tc-test-case-result-fail {\\n\\tborder: 1px solid \u003C\u003Ccolour foreground>>;\\n\\tbackground-color: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tmargin: 0 0.5em;\\n\\tpadding: 0;\\n}\\n\\n.tc-test-case-result-fail-header {\\n\\tbackground: \u003C\u003Ccolour diff-delete-background>>;\\n\\tcolor: \u003C\u003Ccolour diff-delete-foreground>>;\\n\\tborder-top-left-radius: 4px;\\n\\tborder-top-right-radius: 4px;\\n\\tpadding: 4px;\\n}\\n\\n.tc-test-case-result-fail-body {\\n\\tpadding: 4px;\\n}\\n\\n.tc-test-case-source > pre {\\n\\theight: 100%;\\n}\\n\\n.tc-test-case-narrative {\\n\\tpadding: 0.5em;\\n}\\n\\n.tc-test-case-panes {\\n\\tdisplay: flex;\\n\\talign-items: stretch;\\n\\tflex-wrap: wrap;\\n\\tpadding: 0.5em;\\n\\tborder-bottom-left-radius: 6px;\\n\\tborder-bottom-right-radius: 6px;\\n}\\n\\n.tc-test-case-source {\\n\\tflex: 1 0 49%;\\n\\tmin-width: 250px;\\n}\\n\\n.tc-test-case-source .tc-tab-content {\\n\\tbackground: inherit;\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-source .tc-tab-content .tc-field-table {\\n\\tbackground: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-test-case-source .tc-field-table {\\n\\twidth: 100%;\\n}\\n\\n.tc-test-case-source table.tc-field-table {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-source .tc-tiddler-frame .tc-edit-texteditor {\\n\\tmargin: 0;\\n}\\n\\n.tc-test-case-divider {\\n\\tflex: 0 0 1.5%;\\n}\\n\\n.tc-test-case-source .tc-tab-buttons {\\n\\tpadding-top: 0;\\n}\\n\\n.tc-test-case-footer-toolbar {\\n\\tdisplay: flex;\\n\\tjustify-content: flex-end;\\n}\\n\\n.tc-test-case-output {\\n\\tbox-shadow: inset 2px 2px 10px 0px \u003C\u003Ccolour muted-foreground>>;\\n\\tbackground: \u003C\u003Ccolour background>>;\\n\\tborder-radius: 4px;\\n\\tborder: 1px solid \u003C\u003Ccolour muted-foreground>>;\\n\\tflex: 1 0 49%;\\n\\tmin-width: 250px;\\n\\tpadding: 0.25em 1em;\\n}\\n\\n/*\\n** Flexbox utility classes\\n*/\\n\\n.tc-flex {\\n\\tdisplay: -webkit-flex;\\n\\tdisplay: flex;\\n}\\n\\n.tc-flex-column {\\n\\tflex-direction: column;\\n}\\n\\n.tc-flex-row {\\n\\tflex-direction: row;\\n}\\n\\n.tc-flex-grow-1 {\\n\\tflex-grow: 1;\\n}\\n\\n.tc-flex-grow-2 {\\n\\tflex-grow: 2;\\n}\\n\\n/*\\n** Other utility classes\\n*/\\n\\n/* Horizontal gaps */\\n\\n.tc-tiny-gap {\\n\\tmargin-left: .25em;\\n\\tmargin-right: .25em;\\n}\\n\\n.tc-tiny-gap-left {\\n\\tmargin-left: .25em;\\n}\\n\\n.tc-tiny-gap-right {\\n\\tmargin-right: .25em;\\n}\\n\\n.tc-small-gap {\\n\\tmargin-left: .5em;\\n\\tmargin-right: .5em;\\n}\\n\\n.tc-small-gap-left {\\n\\tmargin-left: .5em;\\n}\\n\\n.tc-small-gap-right {\\n\\tmargin-right: .5em;\\n}\\n\\n.tc-big-gap {\\n\\tmargin-left: 1em;\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-big-gap-left {\\n\\tmargin-left: 1em;\\n}\\n\\n.tc-big-gap-right {\\n\\tmargin-right: 1em;\\n}\\n\\n.tc-word-break {\\n\\tword-break: break-all;\\n}\\n\\n/* Vertical gaps */\\n\\n.tc-tiny-v-gap-bottom {\\n\\tmargin-bottom: 3px;\\n}\\n\\n\},\$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\,\text\:\15px\},\$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\,\text\:\22px\},\$:/themes/tiddlywiki/vanilla/metrics/fontsize\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/fontsize\,\text\:\14px\},\$:/themes/tiddlywiki/vanilla/metrics/lineheight\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/lineheight\,\text\:\20px\},\$:/themes/tiddlywiki/vanilla/metrics/storyleft\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/storyleft\,\text\:\0px\},\$:/themes/tiddlywiki/vanilla/metrics/storytop\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/storytop\,\text\:\0px\},\$:/themes/tiddlywiki/vanilla/metrics/storyright\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/storyright\,\text\:\770px\},\$:/themes/tiddlywiki/vanilla/metrics/storywidth\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/storywidth\,\text\:\770px\},\$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\,\text\:\686px\},\$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\,\text\:\960px\},\$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\:{\title\:\$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\,\text\:\350px\},\$:/themes/tiddlywiki/vanilla/options/stickytitles\:{\title\:\$:/themes/tiddlywiki/vanilla/options/stickytitles\,\text\:\no\},\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\:{\title\:\$:/themes/tiddlywiki/vanilla/options/sidebarlayout\,\text\:\fixed-fluid\},\$:/themes/tiddlywiki/vanilla/options/codewrapping\:{\title\:\$:/themes/tiddlywiki/vanilla/options/codewrapping\,\text\:\pre-wrap\},\$:/themes/tiddlywiki/vanilla/reset\:{\title\:\$:/themes/tiddlywiki/vanilla/reset\,\type\:\text/css\,\text\:\/*! modern-normalize v2.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\\n\\n/*\\nDocument\\n\\n*/\\n\\n/**\\nUse a better box model (opinionated).\\n*/\\n\\n*,\\n::before,\\n::after {\\n\\tbox-sizing: border-box;\\n}\\n\\nhtml {\\n\\t/* Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) */\\n\\tfont-family:\\n\\t\\tsystem-ui,\\n\\t\\tSegoe UI,\\n\\t\\tRoboto,\\n\\t\\tHelvetica,\\n\\t\\tArial,\\n\\t\\tsans-serif,\\n\\t\\tApple Color Emoji,\\n\\t\\tSegoe UI Emoji;\\n\\tline-height: 1.15; /* 1. Correct the line height in all browsers. */\\n\\t-webkit-text-size-adjust: 100%; /* 2. Prevent adjustments of font size after orientation changes in iOS. */\\n\\t-moz-tab-size: 4; /* 3. Use a more readable tab size (opinionated). */\\n\\ttab-size: 4; /* 3 */\\n}\\n\\n/*\\nSections\\n\\n*/\\n\\nbody {\\n\\tmargin: 0; /* Remove the margin in all browsers. */\\n}\\n\\n/*\\nGrouping content\\n\\n*/\\n\\n/**\\n1. Add the correct height in Firefox.\\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id190655)\\n*/\\n\\nhr {\\n\\theight: 0; /* 1 */\\n\\tcolor: inherit; /* 2 */\\n}\\n\\n/*\\nText-level semantics\\n\\n*/\\n\\n/**\\nAdd the correct text decoration in Chrome, Edge, and Safari.\\n*/\\n\\nabbrtitle {\\n\\ttext-decoration: underline dotted;\\n}\\n\\n/**\\nAdd the correct font weight in Edge and Safari.\\n*/\\n\\nb,\\nstrong {\\n\\tfont-weight: bolder;\\n}\\n\\n/**\\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\\n2. Correct the odd em font sizing in all browsers.\\n*/\\n\\ncode,\\nkbd,\\nsamp,\\npre {\\n\\tfont-family:\\n\\t\\tui-monospace,\\n\\t\\tSFMono-Regular,\\n\\t\\tConsolas,\\n\\t\\tLiberation Mono,\\n\\t\\tMenlo,\\n\\t\\tmonospace; /* 1 */\\n\\tfont-size: 1em; /* 2 */\\n}\\n\\n/**\\nAdd the correct font size in all browsers.\\n*/\\n\\nsmall {\\n\\tfont-size: 80%;\\n}\\n\\n/**\\nPrevent sub and sup elements from affecting the line height in all browsers.\\n*/\\n\\nsub,\\nsup {\\n\\tfont-size: 75%;\\n\\tline-height: 0;\\n\\tposition: relative;\\n\\tvertical-align: baseline;\\n}\\n\\nsub {\\n\\tbottom: -0.25em;\\n}\\n\\nsup {\\n\\ttop: -0.5em;\\n}\\n\\n/*\\nTabular data\\n\\n*/\\n\\n/**\\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id999088, https://bugs.webkit.org/show_bug.cgi?id201297)\\n2. Correct table border color inheritance in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id935729, https://bugs.webkit.org/show_bug.cgi?id195016)\\n*/\\n\\ntable {\\n\\ttext-indent: 0; /* 1 */\\n\\tborder-color: inherit; /* 2 */\\n}\\n\\n/*\\nForms\\n\\n*/\\n\\n/**\\n1. Change the font styles in all browsers.\\n2. Remove the margin in Firefox and Safari.\\n*/\\n\\nbutton,\\ninput,\\noptgroup,\\nselect,\\ntextarea {\\n\\tfont-family: inherit; /* 1 */\\n\\tfont-size: 100%; /* 1 */\\n\\tline-height: 1.15; /* 1 */\\n\\tmargin: 0; /* 2 */\\n}\\n\\n/**\\nRemove the inheritance of text transform in Edge and Firefox.\\n*/\\n\\nbutton,\\nselect {\\n\\ttext-transform: none;\\n}\\n\\n/**\\nCorrect the inability to style clickable types in iOS and Safari.\\n*/\\n\\nbutton,\\ntypebutton,\\ntypereset,\\ntypesubmit {\\n\\t-webkit-appearance: button;\\n}\\n\\n/**\\nRemove the inner border and padding in Firefox.\\n*/\\n\\n::-moz-focus-inner {\\n\\tborder-style: none;\\n\\tpadding: 0;\\n}\\n\\n/**\\nRestore the focus styles unset by the previous rule.\\n*/\\n\\n:-moz-focusring {\\n\\toutline: 1px dotted ButtonText;\\n}\\n\\n/**\\nRemove the additional :invalid styles in Firefox.\\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\\n*/\\n\\n:-moz-ui-invalid {\\n\\tbox-shadow: none;\\n}\\n\\n/**\\nRemove the padding so developers are not caught out when they zero out fieldset elements in all browsers.\\n*/\\n\\nlegend {\\n\\tpadding: 0;\\n}\\n\\n/**\\nAdd the correct vertical alignment in Chrome and Firefox.\\n*/\\n\\nprogress {\\n\\tvertical-align: baseline;\\n}\\n\\n/**\\nCorrect the cursor style of increment and decrement buttons in Safari.\\n*/\\n\\n::-webkit-inner-spin-button,\\n::-webkit-outer-spin-button {\\n\\theight: auto;\\n}\\n\\n/**\\n1. Correct the odd appearance in Chrome and Safari.\\n2. Correct the outline style in Safari.\\n*/\\n\\ntypesearch {\\n\\t-webkit-appearance: textfield; /* 1 */\\n\\toutline-offset: -2px; /* 2 */\\n}\\n\\n/**\\nRemove the inner padding in Chrome and Safari on macOS.\\n*/\\n\\n::-webkit-search-decoration {\\n\\t-webkit-appearance: none;\\n}\\n\\n/**\\n1. Correct the inability to style clickable types in iOS and Safari.\\n2. Change font properties to inherit in Safari.\\n*/\\n\\n::-webkit-file-upload-button {\\n\\t-webkit-appearance: button; /* 1 */\\n\\tfont: inherit; /* 2 */\\n}\\n\\n/*\\nInteractive\\n\\n*/\\n\\n/*\\nAdd the correct display in Chrome and Safari.\\n*/\\n\\nsummary {\\n\\tdisplay: list-item;\\n}\\n\},\$:/themes/tiddlywiki/vanilla/settings/fontfamily\:{\title\:\$:/themes/tiddlywiki/vanilla/settings/fontfamily\,\text\:\-apple-system, BlinkMacSystemFont, \\\Segoe UI\\\, \\\Noto Sans\\\, sans-serif, Helvetica, Arial, \\\Apple Color Emoji\\\, \\\Segoe UI Emoji\\\\},\$:/themes/tiddlywiki/vanilla/settings/codefontfamily\:{\title\:\$:/themes/tiddlywiki/vanilla/settings/codefontfamily\,\text\:\ui-monospace, \\\SFMono-Regular\\\, \\\SF Mono\\\, Menlo, Consolas, \\\Liberation Mono\\\, monospace\},\$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\:{\title\:\$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\,\text\:\fixed\},\$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\:{\title\:\$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\,\text\:\auto\},\$:/themes/tiddlywiki/vanilla/sticky\:{\title\:\$:/themes/tiddlywiki/vanilla/sticky\,\code-body\:\yes\,\text\:\\u003C$reveal state\\\$:/themes/tiddlywiki/vanilla/options/stickytitles\\\ type\\\match\\\ text\\\yes\\\>\\n``\\n.tc-tiddler-title {\\n\\tposition: -webkit-sticky;\\n\\tposition: -moz-sticky;\\n\\tposition: -o-sticky;\\n\\tposition: -ms-sticky;\\n\\tposition: sticky;\\n\\ttop: 0px;\\n\\tbackground: ``\u003C\u003Ccolour tiddler-background>>``;\\n\\tz-index: 500;\\n}\\n\\n``\\n\u003C$list filter\\\range100\\\>\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text\u003C\u003CcurrentTiddler>>/>`) {\\nz-index: `\u003C$text text{{{ 200subtract\u003CcurrentTiddler> }}}/>`;\\n}\\n`\\n\u003C/$list>\\n\u003C/$reveal>\\n\}}}},{title:$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize,created:20210512223132839,modified:20210512222944307,type:text/vnd.tiddlywiki,text:16px},{title:$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint,created:20200118003537759,creator:soren,modified:20210615030640584,modifier:soren,type:text/vnd.tiddlywiki,text:70em},{title:$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth,created:20200118003510457,creator:soren,modified:20210615030637328,modifier:soren,type:text/vnd.tiddlywiki,text:35em},{title:$:/themes/tiddlywiki/vanilla/metrics/storyright,created:20200118003517900,creator:soren,modified:20210615030746421,modifier:soren,type:text/vnd.tiddlywiki,text:1100px},{title:$:/themes/tiddlywiki/vanilla/metrics/storywidth,created:20200118003525524,creator:soren,modified:20200118003527568,modifier:soren,type:text/vnd.tiddlywiki,text:900px},{title:$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth,created:20200118003521373,creator:soren,modified:20200118003529130,modifier:soren,type:text/vnd.tiddlywiki,text:900px},{title:$:/themes/tiddlywiki/vanilla/options/sidebarlayout,created:20200402134512912,modified:20200913202515610,type:text/vnd.tiddlywiki,text:fluid-fixed},{title:$:/themes/tiddlywiki/vanilla/options/stickytitles,created:20200118003611689,creator:soren,modified:20210627195923430,modifier:soren,type:text/vnd.tiddlywiki,text:yes},{title:$:/themes/tiddlywiki/vanilla/settings/backgroundimage,created:20210220212625107,modified:20210220213159398,type:text/vnd.tiddlywiki},{title:$:/themes/tiddlywiki/vanilla/settings/codefontfamily,created:20210512223028998,modified:20210512222846850,type:text/vnd.tiddlywiki,text:\Fira Code\,Inconsolata,Consolas,\Liberation Mono\,Menlo,Courier,monospace},{title:$:/themes/tiddlywiki/vanilla/settings/editorfontfamily,created:20200118003620709,creator:soren,modified:20200118003640548,modifier:soren,type:text/vnd.tiddlywiki,text:\Fira Code\,Inconsolata,Consolas,Courier,monospace},{title:$:/themes/tiddlywiki/vanilla/settings/fontfamily,created:20210512223039511,modified:20210512222852786,type:text/vnd.tiddlywiki,text:Source Sans Pro, system-ui, -apple-system, \Segoe UI\, Roboto, Helvetica, Arial, sans-serif, \Apple Color Emoji\, \Segoe UI Emoji\},{title:$:/themes/tiddlywiki/vanilla/sticky,created:20210626223253788,modified:20210627201302480,type:text/vnd.tiddlywiki,text:\u003C$reveal state\$:/themes/tiddlywiki/vanilla/options/stickytitles\ type\match\ text\yes\>\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: ``{{$:/config/sib/TopBarHeight}}``;\n\tbackground: ``\u003C\u003Ccolour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n\u003C$list filter\range100\>\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text\u003C\u003CcurrentTiddler>>/>`) {\nz-index: `\u003C$text text{{{ 200subtract\u003CcurrentTiddler> }}}/>`;\n}\n`\n\u003C/$list>\n\u003C/$reveal>\n},{title:$:/tzk/AutoRefresh,text:(function() {\n \use strict\;\n\n exports.name \tzk-auto-refresh\;\n exports.after \startup\;\n exports.synchronous true;\n\n exports.startup function() {\n // Only run in browser with server sync\n if (!$tw.browser || !$tw.syncadaptor) return;\n\n var initialBootId $tw.wiki.getTiddlerText(\$:/tzk/boot-id\);\n if (!initialBootId) return;\n\n setInterval(function() {\n fetch(\/recipes/default/tiddlers/\ + encodeURIComponent(\$:/tzk/boot-id\))\n .then(function(r) { return r.json(); })\n .then(function(data) {\n if (data.text && data.text ! initialBootId) {\n location.reload();\n }\n })\n .catch(function() {}); // Ignore errors during server restart\n }, 2000);\n };\n})();\n,module-type:startup,type:application/javascript},{title:$:/tzk/boot-id,text:1769360984.792441,type:text/plain},{title:$:/tzk/SideBar/Journal,caption:Journal,created:20230830210720848,creator:soren,modified:20251130011240505,modifier:soren,tags:$:/tags/MoreSideBar,type:text/vnd.tiddlywiki,text:\u003C!-- TODO: Split into years/months? -->\n\n\\define day-journal-regexp() ^0-9{4}-0-9{2}-0-9{2} A-Za-z{2}\n\nToday: \u003C$link to\u003C\u003Cnow \YYYY-0MM-0DD ddd\>>/>\n\n\u003C$let theYear\u003C\u003Cnow YYYY>> theMonth\u003C\u003Cnow MM>>>\n\t\u003C$macrocall $namecalendar year\u003C\u003CtheYear>> month{{{ \u003CtheMonth>trim:prefix0}}} opts\journals\ />\n\u003C/$let>\n\nMore|JournalCalendar\n\n----\n\n\u003Cdl>\n\t\u003C$list filter\tagJournal!sortregexp:title\u003Cday-journal-regexp>\>\n\t\t\u003Cdt>\u003C$link/>\u003C/dt>\n\t\t\u003Cdd>{{!!description}}\u003C/dd>\n\t\u003C/$list>\n\u003C/dl>},{title:$:/tzk/Templates/Topical/ReadingList/Rating,created:20210703174501801,creator:soren,modified:20251211031144326,modifier:soren,tags:,type:text/vnd.tiddlywiki,text:\u003C$list filter\allcurrentgetrating!isblank\ variable_>\n\u003Cspan style{{{ allcurrentgetratingaddprefix$:/tzk/MediaRating/getcoloraddprefixcolor: addsuffix; }}}>{{!!rating}}\u003C/span>\n\u003C/$list>},{title:2021-sabbatical-spending-totals.png,type:image/png,created:20220118032357841,creator:soren,modified:20220118032409646,modifier:soren,tags:Image Public,_canonical_uri:./extimage/2021-sabbatical-spending-totals.png},{title:2024AreasOfExploration,created:20240104222036067,creator:soren,description:What am I trying to learn and experience this year to improve my life?,es:confident,modified:20240221003813685,modifier:soren,tags:Idea Frozen Public LifeDirection,type:text/vnd.tiddlywiki,text:Here are eight broad ideas that, as of January 2024, Im fascinated by and trying to deeply understand and explore, organized in accordance with the PeoplePlaceMission model.\n\nSee also Questions.\n\n\n!! Place\n\n!!! Understanding the goodness of places\n\nWhat makes certain places conducive to human thriving, and others uninspiring, dull, and depressing? Why are some places better for certain people, and others better for others? Wheres the balance between finding new places that are good for you, and committing to and getting to better know ones you already know you love? How can we improve the places that exist?\n\nFor some time, Ive been a fan of the NewUrbanism movement, an interest which started when I was trying to figure out where I wanted to live in the TwinCities and what things were most important. Thinking critically about all this has helped me find what I think is a remarkably walkable, livable place for the Midwest United States, and by far the best place for my needs right now that Ive ever lived. In some ways, Ive tapped out these ideas, but theres so much more to explore in the design of places!\n\nLately Ive been diving into the work of MrChristopherAlexander, most importantly APatternLanguage1977, which is in large part about the similarities great places have to each other and how you can recognize and hopefully reproduce them.\n\n!!! Becoming committed to the best places\n\nIve never before found myself in a place that I really felt I would like to stay for the rest of my life, but now I do, and I want to learn how to do that well. One way is to make it hard to change your mind, and I made a big step there in the final days of 2023 by buying into a housing co-op here.\n\nThis has produced all kinds of interesting new feelings of this being //my// place, which Id like to dig into and deeply understand, and then learn to take advantage of. It seems it produces skin in the game|SkinInTheGame2018, which is easy to underrate. Ill also now be able to explore some of the questions about creating good places through physical experimentation. As a preview, heres something I wrote in a comment thread recently:\n\n> Ive been living here for only about a week so far, and its fascinating how different I feel about it already. Ive been way more careful about not scratching the nice hardwood floor while moving in than I was in my rental apartment across town, for instance. And its not that I dont want to have to pay to refinish the floor, its much deeper than that. Before the floor was just like a part of some abstract “the place Im renting,” which I was just passing through, like you treat a city where youre staying for a couple nights. Here its //my// floor and damaging it would be somehow emotionally painful, like seeing a destructive forest fire sweep through a place you grew up in.\n\n\n!! People\n\n!!! Living and working in community\n\nIm exploring ideas surrounding communities and cooperative organizations, concepts that have disappeared from American life for most practical purposes but that Im convinced remain extremely powerful and important to human thriving, and trying to find some for myself.\n\nThese organizations (whether formal or informal) are among the best ways to meet new people and form strong social relationships (both of which have enormous downstream effects opening up all kinds of new possibilities), and they usually get things done far more effectively than alternatives. Having people working together to achieve something that will have a direct positive impact on all of them just works in a way that other structures dont.\n\n(Case in point: The first thing I noticed about the co-op I now live in when I walked in the door for a first showing was that the common areas were impeccably maintained -- by residents, through assigned weekly responsibilities. I had never before in my entire life seen an apartment building which normal people could afford whose common areas were beautiful, clean, and in good repair. This makes sense, once you think about it; the incentives are just wrong when you have a landlord, or even a traditional condo organization. When youre a landlord, you want to spend as little as possible on upkeep, and how neat your common areas are has a pretty limited impact on the market rent you can charge. When youre the one hired to clean the place, you have no skin in the game and just want to get the job done (see AmateurAdvantage). And when youre a tenant, youre not going to spend time improving property you dont own, if the landlord even lets you. But in a co-op, that space is yours -- you own some portion of it, about a one-eighteenth share in my case -- and your neighbors are counting on you to help keep it up. Everyone cares, and everyone knows if they dont step up, it just isnt going to happen and everyone else will know whose fault it is, so everyone does it.)\n\nTanner Greer writes, in “On Cultures That Build|https://scholars-stage.org/on-cultures-that-build/”:\n\n> In the 21st century, the main question in American social life is not “how do we make that happen?” but “how do we get management to take our side?”\n\nThis is a depressing and ineffective way to live. Management doesnt have skin in the game, so they will never care in the same way you do. How can we get back to taking responsibility for making things happen? The answer is, in some sense, simple -- when you encounter a problem youre highly motivated to solve, get up off your rear end, find some other people who are also motivated to solve it, and go do a thing that addresses it together -- but restoring the social structures and attitudes that support this behavior and make it easy is a non-trivial undertaking. Nevertheless, there do still remain pockets of space in society where these structures and attitudes remain, and with careful effort its possible to work oneself into them. My immediate goal is to understand where these are and how they work and get myself into them.\n\n\n!!! Experiencing romantic relationships\n\nUntil last year, I had never been in a romantic relationship or even been on a single date, and didnt much care. For various reasons, it just hadnt been a priority, and that was fine with me, but at age 27 I started to feel like I was missing an important part of being an adult human,\u003C\u003Cfnote \This is not meant to imply that if youre aromantic you arent an adult. But I am not (completely|DemiPerson) aro, and although I think connections that are specifically romantic and sexual are much less of a need for me than they are for many others, not even //trying// to see if I might enjoy them seemed like a major error that I needed to rectify. If you try it, or do all the mental work needed to be sure that youre just not interested, and conclude its not for you, then great, you can be done. And I think I envy you a little bit, because thats a lot of complication you get to avoid!\>> and thought it was time to sit down and start addressing the last big part of growing up Id been avoiding. Last year was, I think, wildly successful here, as I went from being extremely uncomfortable with the whole thing to being basically comfortable with it. But although thats a huge achievement, I still have approximately the romantic experience of your average 18-year-old, and I still need to do a lot more experimenting and deliberate practice.\u003C\u003Cfnote \Fortunately I dont have the emotional maturity or logical thinking skills of a teenager, which means I ought to be able to catch up pretty quickly.\>>\n\nThis is a mostly experiential area of exploration (not that reading some science and advice is a bad idea, and I have in fact done so). So there isnt too much to say about it intellectually, and for hopefully obvious reasons most of the ~60,000 words I wrote on the topic last year is private. I do hope some of the most interesting insights can become public sooner or later; the ReprogrammingMyIdentity quasi-essay is probably the most interesting thing yet.\n\n\n!!! Searching for deep friendships\n\nI still dont have enough deep friendships for my taste. I last year wrote up AmazinglyAwesomeFriend. While Ive found a number of new people I //like// this year -- we could even call them “awesome” -- the person who inspired me to write that tiddler (“Beth”) is still the only person I know here who quite lives up to the “amazingly awesome” bar I set. Theres room in my life for a couple more amazingly-awesome friends,\u003C\u003Cfnote \Deep friendships take serious effort, both in time and in personal energy, and Im an introvert. Quality is far more important than quantity, but Im 95% certain I can add at least one or two more without compromising the quality at all. Its also a lot safer to have more than one; losing your only close friendship is always a possibility no matter how committed you are to each other, and it //really// sucks.\>> and statistically, the people must exist in the TwinCities, so how can I find them?\u003C\u003Cfnote \Fermi estimate: Even if only 1 in 10,000 people could be amazingly awesome friends with me, which seems thoroughly pessimistic, there are more than 350 candidates in the metro area. Id guess the actual number is more like 1 in 100 -- there are a lot of ways that someone can become a great friend -- which would give me 35,000 candidates.\>>\n\nThe answer is likely closely related to the ideas discussed in “Inversion of control as a life strategy,” below. However, technological systems might plausibly be involved, too (subject to MaslowsHourglass; they would presumably be some kind of what Ive there termed an “introducing app”). Someone recently introduced me to Plexus|https://plexus.earth/, which matches strangers who are thinking about similar things, and which my mother said sounded like “a better dating app than a dating app,” an intriguing realization.\n\n(The problems of finding romantic partners and finding friends are tightly related, but because of differing social expectations, the processes tend to look substantially different: for instance, you cant usually evaluate new friends by having intensive one-on-one experiences and then saying yes or no to ever seeing them again. I wrote briefly about this in \u003C\u003Crt 13171>>.)\n\n\n!! Mission\n\n!!! Turning InversionOfControl into a life strategy\n\nMany if not most important, enjoyable, and beautiful things seem to happen by accident|AccidentsMakeTheWorldGoRound – but we can obviously increase our chances of experiencing good accidents, as well as our ability to notice they have occurred and profit from them, by various means. Rather than directly seeking what we want, it seems that in many cases its better to live in a way that encourages what we want to come to us. When is this strategy effective, and when isnt it? How do you make yourself more open to being controlled by the world? How can you make your intentional actions and the accidents and randomness you seek dance together?\n\nIve recently concluded that putting myself in a frame of mind to recognize that something interesting is happening and then run with it, even if bears little similarity to what I was expecting to do, is something I do far too rarely. I want to explore strategies for being more intuitive and living as much of my life as possible in this receptive mode.\n\n\n!!! Making education worth the time\n\nMost classes -- probably most parts of our kids formal education -- seem to be a complete waste of time. And the way people grow up seems to be producing people unprepared for the world. Are these things, in fact, true? If so, is there any way to fix this structural issue? If we have to really restructure society to do it, which seems entirely plausible, what does that look like, and could we combine that with other beneficial reforms, or would we have to make sacrifices that seem of unclear worth?\n\nI know comparatively little about this topic and am unsure whether or how I could directly be of service in this problem, but its adjacent to a lot of other things Im interested in, and a wide variety of intelligent people I know have recently expressed this sentiment to me, so it seems like something that sits so close to the intersection of me and the zeitgeist that I need to explore it to understand if its something I should have an opinion on or even try to take part in. Im not yet sure exactly what form that will take.\n\n(Obviously, I do touch on this topic at RemNote – but in a very specific way, focusing on the part of remembering things you learn. This reduces wasted time, and is plainly helpful and maybe even life-changing for folks like those who make up a majority of our market right now who are studying for something specific that they need for a specific purpose that solves a problem in their life, like a medical school exam. But I worry that the societal problem is upstream, that most parts of our education system, most of the time, are trying to do something that should not be done at all|WorthlessEfficiently. Making it easier for people to remember things that they dont care about and that arent useful to them is just polishing a turd.)\n\n\n!!! Building and understanding mission through written reflection\n\nThe three main ways I identify problems and solutions in my life, determine where it is going, and make meaning out of it are (1) writing, (2) talking to other people, preferably the tiny handful of people I feel able to be painfully honest with, and (3) meditating (here to be read: any practice that gets you to stop thinking about other things and listen for intuitive inspiration rather than trying to run your mouth/writing fingers).\n\nAll of these benefit further, in a VirtuousCircle, from having notes about my experiences and conclusions retrievable in some kind of structured way for later revisiting. But a system that actually works here seems painfully elusive. The system must be simple and fast enough to use that you actually keep up with it, flexible enough to cover any of your retrieval needs, and capable of supporting both searches for specific information and serendipitous discovery of similar ideas (because often you dont know there //is// something in your past thoughts to look for -- one reason I find reading old journals both humbling and valuable is that I discover ideas that I thought were new and brilliant were actually ideas I had ten years ago).\n\nI really do believe some effective system here is //possible//, but after years of record-keeping and exploration, I still dont understand exactly what it looks like, probably because of a lack of both a complete survey of what others have tried and a lack of experimentation. I want to dig further in so I can build the next-generation system for myself. To paraphrase something MrAndyMatuschak wrote recently, I am sure this next-generation system wont work that well either, but hopefully it will fail in interesting ways that suggest the next system.\n\n\n!! Daily crib sheet\n\nSome of the areas of exploration above require me to sit down and do focused work at a desk. But others cant be approached that way at all, and instead require me to look around and think as I go about my life (and then reflect more later). Here are some simple questions I can ask myself that might help me remember to do this:\n\n* Whats special about this place? Or, whats wrong with this place?\n* How can I make this place mine?\n* Is this group a true community?\n* Would some new romantic advance or action here teach me something about myself?\n* Am I listening to the opportunities around me right now?\n},{title:AbbreviationDefinitionPattern,caption:Abbreviation/Definition,created:20210308214043328,description:Given an abbreviation, word, or term, the reviewer provides its basic definition.,es:confident,hideorphan:true,modified:20210522013404057,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}}\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:AbbreviationDefinitionPattern/Advantages,created:20210313134517821,modified:20210313134356558,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Very easy to create.\n* Provide a strong foundation for more complex cards; rather than having to define terms or abbreviations on those cards, you can use them freely, secure in the knowledge that another card is testing this knowledge.},{title:AbbreviationDefinitionPattern/Cautions,created:20210313134528829,modified:20210313134407567,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Used alone, these prompts are difficult to remember and susceptible to becoming orphans.\n* If you dont understand the significance of the abbreviation or term beyond its definition, you will likely find it difficult to remember and the knowledge wont be particularly useful. Always pair these prompts with other kinds of questions.\n* Its easy to become overreliant on these cards, especially as a beginner to spaced repetition. That will lead to a weak memory of the topic composed of disconnected facts that arent too useful in themselves. Make sure this pattern is only one part of your learning strategy, and dont add abbreviation/definition cards on a topic at all unless youre willing to add some cards that test your overall understanding as well.},{title:AbbreviationDefinitionPattern/Contributors,created:20210313134538658,modified:20210313134417388,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad.},{title:AbbreviationDefinitionPattern/Disadvantages,created:20210313134522833,modified:20210313134401579,tags:Public Idea,type:text/vnd.tiddlywiki,text:* When the back side of the card is much more complicated than the expansion of a three-letter acronym, it may be difficult to be clear on exactly what answer should be provided.\n* These cards dont, in themselves, help you build an understanding of the topic, they only provide a foundation on which you can build such an understanding.\n* Its often possible to be more specific than just asking what \the definition\ of a particular concept is. Usually more specific cards are more memorable.},{title:AbbreviationDefinitionPattern/Examples,created:20210313134512287,modified:20210313134351031,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210308215915563\\n\t\Azure storage: What does LUN stand for?\\n\t\Logical Unit Number\>>\n\t\n\u003C\u003Crememberq \20210310032717479\\n\t\In the formula for the Ideal Gas Law, what does $$T$$ stand for?\\n\t\Temperature.\>>\n\t\n\u003C\u003Crememberq \20210310032737528\\n\t\What does Benfords Law state?\\n\t\The initial digits found in many types of data sets skew towards 1.\>>},{title:AbbreviationDefinitionPattern/Formula,created:20210313134505794,modified:20210313134344505,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** A concise //context//, explaining the discipline or situation in which the abbreviation or word would be used.\n** The item to define.\n* Answer:\n** An expansion of the abbreviation or basic definition of the term.\n\nThis type of card can optionally be presented as a cloze deletion, where the definition is a sentence and term or abbreviation is occluded.},{title:AbbreviationDefinitionPattern/UsageNotes,created:20210313134533567,modified:20210313134412304,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Describing the context is //required// for abbreviations and recommended for other item types. This makes the card much easier to remember; without the context, youll have to memorize that as well as the true meaning of the term in context. You will virtually always know the context in real life, so you are not giving anything important away.},{title:AberdeenWashington,created:20250626182922819,creator:soren,modified:20250626182923620,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AbileneParadox,created:20200217162407847,creator:soren,es:confident,modified:20210608212155574,modifier:soren,tags:Definition InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:An effect where a group can decide collectively to do something that nobody wants to do, because none of them feel particularly strongly about it and the perception is that others want to.\n\nhttps://en.wikipedia.org/wiki/Abilene_paradox\n\n!! References\n\n> Ronny was not enthusiastic about the picnic, but, then, no more were the ladies -- no one was enthusiastic, yet it took place.\n> ---//A Passage to India//, p. 139},{title:Abilify,created:20251011160244187,creator:soren,modified:20251011160250880,modifier:soren,tags:Idea Drug Definition Public,type:text/vnd.tiddlywiki},{title:AbstractAndConcreteThinking,created:20200410152520652,creator:soren,es:possible,modified:20211027034922198,modifier:soren,tags:Productivity Psychology Public Idea,type:text/vnd.tiddlywiki,text:Reasoning and planning can be divided into two basic types, concrete and abstract. Concrete is more limited but also more down-to-earth and often does a better job at getting things done. Abstract thinking has the potential to do all kinds of things that concrete thinking cannot, but it also makes it easy to get caught up in details and get nothing done at all|ShippingIsAFeature, or miss the point of the exercise.\n\nFor this reason, people who are in the habit of thinking concretely much of the time (probably most of the population) often end up being more successful even though their preferred mode of thinking is in the general case less powerful. This is similar to how KnowledgeWork, carelessly done, tends to be less satisfying|HigherOrderContributor than more concrete and seemingly more boring physical work; it is inherently more difficult to manage and enjoy, even though the rewards are potentially greater (in that its output can reach more people). People who like thinking abstractly, or who have need to do it periodically, need to take special care.\n\nIn one (parabular) example of this, WhoMovedMyCheese calls out the mice as being more successful at changing because they dont overthink it and stick to the facts.\n\nThe IdeationStrength would seem to label me an abstract thinker in general (obviously, programming forces you to be one at least for the time you spend doing that).\n\nSource: RoguelikeBook.},{title:AbstractionsLeak,created:20200322142025560,creator:soren,es:confident,modified:20200326003614698,modifier:soren,tags:TheControlAltBackspace Design Logic Code Public Idea,type:text/vnd.tiddlywiki,text:MrJoelSpolsky explains that, while abstractions are fundamental to programming and design in general, inevitably they will fail to completely hide all of the details, and they become masks that prevent you from solving the problem rather than helpful tools for removing details.\n\nI wrote about this on TheControlAltBackspace, particularly about how it relates to the imperative to AvoidScale when possible, and how it contributes to our modern situation of having frustrated-sheep users instead of ComputingCitizens.\n\nJoels article: https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/\n\nMy article: https://controlaltbackspace.org/simplicity/scales-skills-and-leaky-abstractions/},{title:ABTest,created:20230405203348640,creator:soren,es:confident,modified:20230405203425748,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:A method of TryItAndSee where you push different versions of a product to different users, serially or (ideally) simultaneously and randomly selected, and see what works better.},{title:ACapellaPitchDrifting,created:20200831015855209,es:likely,modified:20201015013506833,tags:Music Public Idea,type:text/vnd.tiddlywiki,text:There are //many// reasons for the seemingly inevitable loss of pitch when singing unaccompanied. Heres a complete collection of all the reasons Ive heard cited, in rough order of how big a factor they are for least experienced to most experienced choirs.\n\n* Insufficient breath support, or “pushing” too hard.\n* Certain people, or certain voice parts, can disproportionately sing off-pitch and drag others away. The less pitch sense the rest of your choir has, the worse this problem will be.\n* “Lazy” singing in general (as one commenter in reference one called a whole series of habits like poor breath support, slouching, disinterested faces, etc.).\n* Bad listening.\n* Poorly unified vowels. Different vowels have different harmonic profiles and as such can be susceptible to weird effects that make it difficult to hear pitch differences.\n* Poor acoustics. If you cant clearly hear all the other notes, its hard to sing right on the pitch.\n* When a piece moves around between different keys or sections or the singing transfers between different choirs or voice parts, especially when the acoustics are bad, a minor error can suddenly \settle\ into a different key a half step off from the original.\n** Anecdote: in one StOlafChristmasFestival I participated in, we had a horrendous collage piece which one night ended a whole step flat and the next night a step and a half sharp. I understand the CD track cut back and forth between the four takes almost 30 times to find something that approximated tolerable.\n* People tend to undersing fifths and certain other intervals. With fifths in particular, during a cadence the resolution can come in just a few cents flat, which is enough to ruin the pitch by the end of the piece. C.A.|PrivatePerson was always harping on this one. Related to how TuningDoesntWork (below).\n* Long series of rising or falling notes often result in slightly compressing or spreading intervals, which can add up to a noticeable difference.\n* The natural breaks in a singers voice can make certain keys inordinately difficult to keep in tune (I suspect this is tightly related to breath support being particularly difficult in some places). Some keys can wind up difficult for an entire choir.\n** In my experience and in a general consensus of many people Ive spoken to, F major seems especially terrible for almost any group -- perhaps it is in the cracks for most voice ranges. (I am generally anti--F major; its awkward on violin/mando, too, and it has the bizarre property of being the only flat key that doesnt have a flat in the name.)\n* TuningDoesntWork. Two half steps is not equal to a whole step; twelve fifths is not equal to eight octaves, and so on.\n** Unaccompanied, a choir is unlikely to sing in equal temperament but rather something in between that and just intonation and whatever other standards your ear might come up with on the spot from listening around you. Certain chord progressions can result in losing pitch (see reference 5 on the “comma pump”). Therefore, even if all intervals are //perfect// and internally consistent, the choir can come out at the end of the piece in the wrong key!\n** Some people argue that this is fine; I think ending in a different key than you started is generally unacceptable and a really good choir has to figure out how they want to compromise. This said, the vast majority of singers and directors have no idea this is even a problem, much less know how to spot it, which makes it tricky to identify a compromise. (Fortunately, the vast majority of choirs have more important things to work on anyway.)\n** Reference 6 argues this is basically a myth. Point granted, it is indeed not a major reason why your garden-variety twelve-voice church choir loses two whole steps during a psalm. However, it may well sometimes be the reason why TheStOlafChoir or a professional a capella ensemble is having pitch problems.\n\n!! Miscellaneous observations\n\n* Some pieces are far more difficult than others: because they are more difficult to provide breath support for, other parts are harder to hear and compare to, they are in worse keys, and their chord progressions lead to greater error.\n* Chant is a particular problem for losing pitch, perhaps because of middling range and lower dynamics, creating poor breath support; and because there is constant motion with no time to prepare for troublesome intervals. See reference 2. See also NowhereToHideTheMistakes.\n* Its entirely possible for a choir to sing off-pitch even //with// accompaniment, particularly if the acoustic environment makes it difficult to hear the accompaniment.\n* Most choirs tend to go flat, but sharping can be a thing too, albeit rarer. In general, IMO if youre going sharp thats a //great// problem to have, so I think its totally fine to automatically lean upwards into the pitch (or even raise your eyebrows) if you feel like its not easily right on point. Im reminded of MrJamesBobb on a similar topic:\n*> If I had to tell you to back off on the shaping, it would be a victory for all humankind.\n*> ---\u003C\u003Crt 7433>>\n\n\n!! References\n\n# https://forum.musicasacra.com/forum/discussion/7653/pitch-drifting-when-singing-gregorian-chant.-any-help/p1 (snapshot|https://web.archive.org/web/20161109064303/https://forum.musicasacra.com/forum/discussion/7653/pitch-drifting-when-singing-gregorian-chant.-any-help/p1)\n# http://media.musicasacra.com/publications/sacredmusic/pdf/sm138-2.pdf, pp. 32-37 (Also draws an oddly beautiful Catholic analogy between \fallen nature\ and \fallen pitch\, in that without the help of grace, both go down!)\n# https://music.stackexchange.com/questions/243/why-choirs-consistently-go-flat-or-sharp-in-certain-keys?rq1\n# https://johnthemathguy.blogspot.com/2012/07/you-can-tune-piano.html\n# https://music.stackexchange.com/questions/12535/is-there-a-sound-theoretical-reason-why-a-capella-choirs-drift-off-of-the-star?rq1\n# https://music.stackexchange.com/questions/99454/is-acapella-xenharmonic-by-default?noredirect1&lq1\n\nOverheard in the StOlaf music building:\n\n> That sounded so under pitch it hurt my heart.\n> ---\u003C\u003Crt 5798>>\n},{title:Accelerate2018,author:Nicole Forsgren ~PhD, Jez Humble, & Gene Kim,caption:Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations,completed:202106301200,created:20201222202607997,medium:book,modified:20210701040102842,rating:poor,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2018,text:Never trust a book with two subtitles. I think thats how some ancient proverb goes, anyway.\n\n!! Summary\n\nAn overview of DevOps principles by MsNicoleForsgren, MrJezHumble, and MrGeneKim.\n\n* Part 1 is essentially a long version of the principles and results of DevOps that gives a small amount of information on what survey scores back up the fact that theyre effective (this is done quite convincingly, though, to the extent that one can trust studies at all|FallibilityOfStatistics).\n* Part 2 is a description of the research methodology (actually, its mostly an introduction to statistics and research methods with occasional explanations of how it applies to their research).\n* Part 3 is a case study -- or not even exactly a case study in the traditional sense, mostly just a picture of life at one company thats adopted some of these ideas. It was written by several guest authors and barely seemed to fit at all; I skimmed over the second half of it, and felt the book would have been better off without it.\n\nI already have quite a lot about DevOps in the ZK, and I dont think there were any strictly new ideas in the book for me, so Im not going to spend much time on idea tiddlers today.\n\n\n!! Should you read this?\n\nProbably not, unless you need something quite specific.\n\nThis book was //poor// for me. It might be //skimmable// or maybe even //average// for others, but you need to make sure youre the intended audience. That might be tricky because I cant quite figure out who the intended audience actually //was//, and Im suspicious thats because the authors werent entirely sure either.\n\nPart 1 seemed like it was targeted at managers who wanted to know why they should care about DevOps, and probably did an OK job at that except for not being very engaging, but then theres part 2. I feel like anyone who is statistics-savvy and rationalist enough to be interested in part 2 was already convinced that they should care about DevOps in about 2015 already -- or if not, its because they know more than the rest of us do, either locally or globally. Maybe Im overly pessimistic about others desire to learn about statistics, though, I dunno. (And to be clear, I dont think everything under the \DevOps\ umbrella is the gospel truth and necessarily applies everywhere; I do think it has many important insights, and components of it are almost unassailable, and most folks who have looked into it with an open mind should agree.)\n\nAs a summary of DevOps principles, I think this book was actually pretty good. It was more verbose than it needed to be for me, but I think if you have little background in DevOps and want some, this would be much better than reading through a bunch of web sources because you get both descriptions of the practices and related statistics at the same time. I already have plenty of background and I read the State of DevOps Report every year, so there wasnt a whole lot of new information for me. If youre like me, dont bother reading it.\n\nI would also struggle to recommend this to someone who doesnt know anything about DevOps at all because Im not sure its exciting enough to make people actually read it. So perhaps the sweet spot is where youre already curious/excited but dont have much information yet.},{title:AccidentsMakeTheWorldGoRound,created:20200812025613943,creator:soren,description:Most important events are unplanned and unexpected.,es:likely,modified:20240105032558552,modifier:soren,tags:PhilosophyOfLife LifeDirection Creativity Public Idea,type:text/vnd.tiddlywiki,text:We arent as smart, or as intentional, as we think we are. Most of the most important things in our lives and in world history happen purely by accident, by randomness. Most scientific discoveries have been made by someone pursuing a different goal, or just exploring something for the fun of it, and noticing something unusual along the way.\n\nIf you doubt that, try a couple ThoughtExperiments: How many of your friends did you meet by trying to meet new people? Have your most successful romantic relationships been with people you would have thought youd love, if someone had described them to you ahead of time? Have you gotten most of your jobs by actively deciding what kind of new job you wanted and searching for it? Maybe, but what about the jobs that made the biggest difference to your career? Did you plan the turning points in your life?\n\nYou probably planned or actively sought to achieve //some// of them, of course. But most of the events that happen to us are random, and so the random ones end up accumulating most of the hits, not to mention teaching us the most valuable lessons about ourselves|PeopleDontKnowWhatTheyWant.\n\nEnjoy accidents, and take advantage of them. Being alert and recognizing whats in front of you|ExploringTheFuture when it shows up may be the most important life skill: when the accident happens, your response will decide whether you create value from it or not.\n\nCf. BlackSwan, FlaneurMethod, InversionOfControl.\n\n\n!! References\n\nMrIsaacAsimov:\n\n> The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but rather “Hmm...thats funny...” (\u003C\u003Crt 575>>)\n},{title:AcmQueue,created:20201222202142759,modified:20201222202459101,tags:Publication Public,type:text/vnd.tiddlywiki,text:Bimonthly electronic magazine published by TheAcm.},{title:ACompleteDefinitionOfBadness,created:20200219215141835,creator:soren,modified:20211027033215886,modifier:soren,tags:Sink TheControlAltBackspace Public,type:text/vnd.tiddlywiki,text:TheControlAltBackspace post on all the considerations one must take into account when deciding whether or not to use a technology or approach to a task. Specifically, these are:\n\n* Perfect time -- whats the amount of time it takes to use this tool when everything works right?\n* Potential for unexpected problems -- how likely will we not have everything work right, and how hard is it to fix when it doesnt?\n* Frustration -- if its hard to deal with, that has major impacts on both results and peoples emotions\n* Externalities -- miscellaneous effects of a new implementation like fragility, atrophy of human skills, loss of sense of worth, or vulnerability to obsolescence.\n\nToo often, we only look at Time and make terrible decisions as a result.\n\nhttps://controlaltbackspace.org/simplicity/things-that-dont-work/\n\nCf. AnyBenefitMindset.},{title:ActiveLearning,created:20200302234612948,es:confident,modified:20210611023505251,tags:Learning Public Idea,type:text/vnd.tiddlywiki,text:A type of learning/memorization that involves attempting to produce the concept or object of recall oneself without aid from an external process. This occurs when producing the answer to a test question, studying flashcards, etc.\n\nThe opposite, passive learning, involves simply encountering the material again without effort (e.g., reading the information somewhere).\n\nArguably, ActiveLearning is the only useful way because it is so much more effective than passive options. Nevertheless, the DisuseOfActiveLearning is pervasive throughout not only students but educators as well. Passive learning //feels// effective (see tiddler).},{title:ActivityPlasticity,created:20201205045049711,creator:soren,es:likely,modified:20211229031818649,modifier:soren,tags:Information Psychology Creativity Public Idea,type:text/vnd.tiddlywiki,text:When you do a lot of an activity, in many cases the activity builds on itself, because your brain and your thought patterns are easily changed. This often leads to counterintuitive|CounterintuitiveCorrelation results.\n\n* When I am busy writing lots of notes in my ZettelKasten, I end up bursting with lots of new ideas. When I get busy with other things and stop working on it, I have fewer ideas.\n* Doing lots of meaningful, carefully balanced things creates SelfPerpetuatingEnergy and you dont get tired. Doing nothing makes you worn out.\n* WritingFreesHeadspace: By writing down ideas that are rolling around in your head, you end up producing //more// ideas (perhaps because youre giving yourself permission to forget the first set).\n* PhoneAnxiety: rarely doing a slightly awkward thing, such as making a business phone call, makes it uncomfortable, while doing it regularly makes the anxiety disappear. (Result: more willingness to make phone calls, staving off the anxiety.)\n\n{{ActivityPlasticity/p||PrivateChunk}}},{title:ActualRequirements,created:20200322142702543,creator:soren,es:confident,modified:20210731154157316,modifier:soren,tags:Creativity Design TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:It is unfortunately common not to get back to //actual requirements// when designing an addition to an existing system. You get overly focused on what you already have and design a poor duct-taped solution. Or you fall victim to the XyProblem and go after something thats only slightly related to your requirement.\n\nActualRequirements should always be the first step of SoftwareAnalysis, and are the fundamental part of it. It is entirely possible for figuring out your actual requirements to be the hardest part of the software development process! It probably wont take the most time, but oftentimes the actual development, debugging, and testing is relatively straightforward when given to someone with the right skills. Figuring out what you should be making never ceases to be a challenge when working with a medium where you can do essentially anything.\n\nI wrote about the need and the process on TheControlAltBackspace: https://controlaltbackspace.org/design/why-and-how-to-focus-on-requirements/.\n\nOf course, sometimes we get the requirements wrong. This is a fact of life (see AgileHumility), and we can use an IterativeProcess to refine our requirements. The closer we can get from the start, at least for the initial iteration of the project, however, the better.},{title:AdagioOolongSampler,created:20210711225933851,creator:soren,es:personal,modified:20220127160858408,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Tea sampler I got from TheAdagioTeas, as I dont currently drink much oolong and want to see if thats really because I dont like it that much or because I just havent found the kinds I like best.\n\n\nThe samples are in the box in alphabetical order, so thats the order Im doing them in.\n\nI drink oolongs without milk or sugar unless otherwise noted.\n\n; ali shan \u003C\u003Cstar-rating 2>>\n: 3 minutes at approx temp listed. Extremely cloudy, sea-green. Minimal aroma. Unremarkable tea-y taste, completely free of bitterness or unwanted flavors. Entirely unobjectionable but not remarkable at all.\n\n; almond oolong \u003C\u003Cstar-rating 3>>\n: 3 minutes at boiling, as indicated. Deep, impenetrable dark green. Strong smell and almost overpowering taste of almond, reminiscent of marzipan. Oolong difficult to taste, but possibly because I didnt put in the full packet (2 teaspoons seemed overkill). Nevertheless, enjoyable.\n\n; coconut grove pouchong \u003C\u003Cstar-rating 2>>\n: 3½ minutes at approx temp listed. Light and transparent green. Smell almost entirely of coconut. Oolong again somewhat difficult to taste in among the coconut, which also lacked sweetness and tasted oddly one-dimensional without sugar in the tea. Better with sugar, but the sugar stood out instead of fully blending into the taste of the tea. Would drink again but not if I had better oolongs around.\n\n; formosa oolong \u003C\u003Cstar-rating 4>>\n: 3 minutes at boiling as listed. Impenetrable coffee-like color and an earthy, roasted smell also reminiscent of coffee or nuts, plus the typical full-bodied oolong flavor. Tastes exactly like it smells, with an odd but pleasant “powdery” mouthfeel. Would buy this, at least for a change.\n\n; fujian rain \u003C\u003Cstar-rating 2>>\n: 2½ minutes at approx temp listed. Sea-green but clear and translucent. A weak nutty aroma I found vaguely disagreeable. Strong and heavy on oolong flavors even with the short brew time -- too much for my taste -- with a tinge of oddly chemical bitterness (its possible I steeped it slightly hotter than the 195° it indicated -- I didnt check with the thermometer -- but I dont think it could have been more than 200°, and if its //that// delicate I would mess it up every time!). A complex but not particularly pleasant aftertaste that evolves over a few seconds. Some extremely fine sediment appears to have made it through my infuser basket. Happy to finish the cup but wouldnt drink again.\n\n; golden flower \u003C\u003Cstar-rating 2>>\n:3 minutes at approx temp listed (started with 2½, added more time after tasting). Leaves expanded dramatically during brewing. Color almost as light green as a green tea. Gentle oolong smell with a faint minty note. Very weak even at the upper end of the time range (possibly brewed it a little cold?) Aside from the color and smell, only distinguishable from hot water with effort. Unobjectionable but wouldnt bother drinking again.\n\n; jade oolong \u003C\u003Cstar-rating 4>>\n: 3 minutes at 180°F. Extremely transparent but sea-green color. Floral aroma, vague tones of rose or hibiscus. Some similarity in taste to a traditional jasmine tea, but with a distinctive but subtle oolong flavor. Relatively weak flavor, but in a delicate way, not a deprecatory “dirty water” way. Very clean, crisp mouthfeel, almost as clean as water (but not in a bad way). No hint of bitterness. Would definitely buy this.},{title:AddAnotherRule,created:20210414030701290,creator:soren,description:When someone exploits the rules, dont add another rule; use the existing rules to handle the situation or make the existing rules better.,es:likely,modified:20250731131455120,modifier:soren,tags:Systems Design Public Law Idea,type:text/vnd.tiddlywiki,text:Antipattern in which, whenever someone does something slightly wrong, you add another rule explicitly saying they cant do it, or even completely change your entire policy to eliminate the possibility of ever having it done wrong again, no matter the cost. This is an antipattern for a number of reasons:\n\n# Its unnecessary for good outcomes. If you have a decent ruleset to begin with, chances are that you didnt need the rule. You dont need a law|https://ncleg.net/EnactedLegislation/Statutes/HTML/ByArticle/Chapter_14/Article_16.html making the “larceny of ginseng” illegal (scroll down to §14-79), because stealing things is already illegal (indeed, it is plainly made illegal earlier in the section!).\u003C\u003Cfnote \\\\nPresumably the goal of this particular law was to set a clear and slightly different penalty for ginseng larceny than whatever category it would otherwise fall into. This doesnt make it less of an antipattern; the law should simply allow for appropriate valuation of the stolen item and human judgment on the penalty, which will be more just and useful anyway.\\\>>\n# An accumulation of rules makes life harder and processes slower in the future. An extra law is something everyone has to wade through in the future when trying to figure out whats legal and what isnt (though I have to say, coming across “larceny of ginseng” is at least entertaining). And when the rules have to do with procedures people carry out, they result in armies of people having to spend their time in soul-destroying labor over books and databases, not to figure out what the right thing to do is, but what the right levers to pull are to //technically// do things right.\n# Once a sufficient number of rules have built up, people will have to start bending the rules to get anything done. This is confusing and makes it hard to tell which rules actually matter and which dont. Worse, eventually some unlucky person will get raked under the coals for “breaking the rules,” even though everyone else has been doing this as well.\n# Because a CostBenefitAnalysis is (by definition) not carried out when following this antipattern, added rules are often net negative even in themselves, without taking into account the bureaucratic slowdown -- but its difficult to prove it|MetricBlackHole.\n\nIts worth expanding on this last item in particular. Some degree of waste, cheating, and corruption is inevitable, and oftentimes its better to accept this than deal with the reduced efficiency and other downstream effects of having more annoying rules. Some people abuse store return policies, but that -- fortunately for the rest of us -- isnt enough to convince stores not to let us return things when they dont work out, within reasonable bounds. Similarly, the optimal amount of credit-card fraud is non-zero|https://www.bitsaboutmoney.com/archive/optimal-amount-of-fraud/: we could make fraud a great deal more difficult, but this would also make it a great deal more difficult to buy things. The more fields and checks you put in the checkout process, the more people bounce before they buy, so even if the merchant eats the cost for fraudulent purchases -- which they often do -- its frequently more profitable for them to keep the process simple and more exposed to fraud. These tradeoffs repeat at every layer of the system.\n\nWhen I was at StOlaf College, the general habit was to leave your things lying around campus when you didnt want to bring them into a room with you or needed to step out for a minute -- coats and bags in the hall, laptops in the library, whatever. Almost nobody ever abused that. Then my sophomore year, someone stole my coat. Did I start carrying my coat with me into the cafeteria? Nope; having your coat stolen on an otherwise high-trust campus is a freak accident that was almost certain never to repeat, while having to lug a heavy coat around with you everywhere is an enormous pain.\n\nSchools are unusually prone to adding more stupid rules because of their nearly complete inability to impose significant consequences on those who dont follow the rules unless the rules are overspecified; see SchoolFlawsAsCaringLevelCollapse. The antipattern is presumably popular in other institutions for similar reasons: adding another rule is a great way to cover your ass and avoid needing chutzpah or SkinInTheGame to penalize people who do something wrong -- something which becomes more important the more dysfunctional and worse-managed an organization is. You never know what the CEO will do if some process youre working on loses the company $10,000 and they find out, but if you can point to a rule you implemented to stop it, the buck passes to someone else. (This is probably a ViciousCircle.)\n\nCf. LargeGovernmentVsVoluminousLaws: in an ideal world, the government would do impressive things, but a limited number of them at a time, simply expressed.\n\n\n!! References\n\n\u003C$m2.x number\1\>\nI heard a story once in which a company allowed employees to purchase any books they would find useful on their company cards, no questions asked, figuring that the encouraging effect on professional development was worth a great deal more than the price of a few books.\u003C\u003Cfnote \Pro tip: This is a good policy for yourself, too. Its pretty rare to see a book, think it would be useful to you, and then later determine it wasnt worth $20!\>> Then some dingbat decided to abuse this policy to buy hundreds of novels for his personal library. In response, the company permanently ended the book policy in response...rather than, you know, disciplining the employee who did something even the densest person would know ahead of time was abuse of the policy and company funds.\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\nIn the US, after the infamous “Underwear Bomber” incident|https://en.wikipedia.org/wiki/Umar_Farouk_Abdulmutallab, most airline passengers have to go through full-body scanners. The funny thing is that not only was the Underwear Bombers plot foiled without such scanning (because it turns out that smuggling and setting off working explosives in your underwear is tricky), this check likely wouldnt have even found the explosives! In general, airport screening is an exercise in adding a rule for everything that someone tries -- which just means the next terrorist comes up with a new thing that nobody has tried before. Meanwhile, the TSA finds less than ten percent of guns and bombs in random checks|https://loweringthebar.net/2015/06/tsa-detected-four-percent.html -- would that //just maybe// be a more useful thing to focus on?\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\nEffect (3): In the UnitedStates, STOP signs are overused, placed even at low-speed intersections with clear visibility where a complete stop is usually unnecessary. As a result, most drivers roll almost every STOP sign, often unintentionally including ones where a complete stop is actually crucial to safety.\n\u003C/$m2.x>},{title:AddictiveDesign,created:20200203141946033,creator:soren,es:confident,modified:20210509010231767,modifier:soren,tags:Design Definition Public Idea,type:text/vnd.tiddlywiki,text:Things which are purposefully designed to make the user interact with them more, to the users detriment. BigTech (and some small tech) regularly uses addictive design to get users to spend more time on the platform so they see more advertisements and the designers make more money...even when spending more time on the platform makes users unhealthy, depressed, antisocial, etc. As technologists, I believe many of us are only just beginning to (2020) understand the consequences of our actions.\n\nOne of the MultipleOpposites of AppropriateTechnology. A MicrotransactionalDystopia involves AddictiveDesign, but also has the characteristic that even when you recognize you are being manipulated by AddictiveDesign, the addictive tools are the only way to accomplish something you need and there is no practical way to opt out (or doing so is just as problematic as the tool itself), so there is little you can do about it.},{title:ADefenseOfNonsense,caption:A Defense of Nonsense,created:20200226000126441,creator:soren,medium:article,modified:20220309124412367,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://nonsenselit.com/g-k-chesterton-a-defence-of-nonsense/,text:Brief essay by MrGkChesterton defending the ultimate value of NonsenseLiterature. He argues that because life is intrinsically nonsensical, nonsensical stories are delightful and help us understand the world.\n\nConclusion:\n\n> The well-meaning person who, by merely studying the logical side of things, has decided that ‘faith is nonsense,’ does not know how truly he speaks; later it may come back to him in the form that nonsense is faith.\n\nI ran across it while researching and then referenced this article in a paper I wrote on AliceInWonderland, MyNonsenseMythAndDreams.},{title:ADHD,created:20240402011045473,creator:soren,modified:20240509110750769,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki},{title:AdjacentPossible,created:20200712162433985,es:likely,modified:20210509004420740,tags:Information Creativity Systems Public Idea,type:text/vnd.tiddlywiki,text:The adjacent possible is the area of knowledge and practice in a given field currently available to be easily discovered and implemented. If you imagine the set of all possible things, known and unknown, and the links between these ideas|ConceptWeb, in a graph, as global knowledge and experience expands, nodes gradually end up within reach on the graph which were not connected to any known nodes before. The set of things currently just beyond the frontier is the adjacent possible.\n\nThis concept explains why multiple people often make discoveries at the same time or nearly the same time -- the world and their field was primed for discovering that thing at that moment. (It still feels a little mystical sometimes, but at least it makes sense!)\n\nWhen attempting to create new things, especially ones that are remarkable|LawOfRemarkability, it makes sense to target the A.P., as the ideas in this area are both attainable and new/valuable. Critically, you need expertise to know what, exactly, might be in the A.P., however.\n\nIn the ImportantNeglectedTractable model, the adjacent possible is always //tractable// to the right people and is often important. I suspect that good identification of its neglected components can often make the difference between a memorable and an average career.\n\nPopularizing source: MrCalNewport, SoGoodTheyCantIgnoreYou. Originally by S.K.|PrivatePerson.\n\nAnother source: https://sirupsen.com/adjacent-possible/\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20200712213432745\\n\t\Why, according to Cal Newport, are discoveries often made by multiple people at the same time?\\n\t\These things are part of the //adjacent possible// and were thus particularly easy to discover.\>>\n\t\n\u003C\u003Cremembercz \20200712213548867\\n\t\The set of discoveries in a field which are {just beyond the current state of the art} make up the {adjacent possible}.\>>\n\n(Relationship between this and ImportantNeglectedTractable: q.v.)\n\t\n\u003C/$details>},{title:AdministrativeDebris,created:20201205043117479,es:possible,modified:20210522224403196,tags:Information Design Public Idea,type:text/vnd.tiddlywiki,text:Concept of MrEdwardTufte, expanded upon by MrRyanTomayko in AdministrativeDebris2008. Anything on the screen that does not fit naturally with the content, or is not a part of it, is //administrative debris//. This would seem to include, e.g., menus, scrollbars, status bars, and so on.\n\nAn interface that avoids administrative debris, according to the concept, is more usable. The downside to me seems to be that debris can apply across websites and systems and thus reduce the need to learn new things, more than a non-debris-bearing (debrisiniferous? non-debriferous?) system could. But maybe a debrisless system is so intuitive that isnt a problem.\n\nTomayko says that Hypertext is the least debriferous (?!) medium he knows, and that the web, when this aspect of it is not circumvented by using Flash or some kind of silly design, actually scores extremely well on this. Tufte pointed out though that the browsers interface is often full of administrative debris.\n\nDuploInterfaces are not a successful way of reducing administrative debris; they just change the administrative debris into a slightly less obvious, but also less useful, form, rather than eliminating it.\n\nPerhaps this suggests that administrative debris is not all bad, but should be used AsMuchAsNeededAndAsLittleAsPossible, with as narrow a definition of “needed” as the content, context, and technology allow.},{title:AdministrativeDebris2008,caption:Administrative Debris,created:20201205043144872,medium:article,modified:20201205050910333,tags:Source Public,type:text/vnd.tiddlywiki,url:https://web.archive.org/web/20130116034638/http://tomayko.com/writings/administrative-debris#comment-78033,year:2020,text:Describes AdministrativeDebris and how to design an interface that doesnt involve it (hint: Hypertext).},{title:AdmiralCloudberg,author:MsKyraDempsey,blogroll:Blogroll,caption:Admiral Cloudberg,created:20250905205012888,creator:soren,modified:20250905205246612,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://admiralcloudberg.medium.com/},{title:AdobeInDesign,created:20201201035021855,modified:20201201034949128,tags:Software Public Idea,type:text/vnd.tiddlywiki},{title:AdventureDefined,created:20200131204223219,es:possible,modified:20201204041546383,tags:Imagination Definition Public Idea,type:text/vnd.tiddlywiki,text:What makes something an adventure? A few ideas...\n\n* Involves going somewhere, whether physically or mentally.\n* Involves experiences atypical for you.\n* Changes your normal life by challenging your perspective and providing you with powerful memories.\n* Often involves companionship and bonding (though solitary adventures are possible and can be fun too).\n* Shares aspects with narrative (see \u003C\u003Ctag FictionTheory>>, and cf. DreamsAsLiterature) and even myth: an adventure must have a beginning, middle and end, often is told as a story afterwards, if meaningful becomes part of ones PersonalMythology, and often follows something approximating the RaglanMythPattern.},{title:AdventuresOfHuckleberryFinn1884,author:Twain,bibliography:LifetimeReading,caption:Adventures of Huckleberry Finn (+),created:20210703170128000,genre:Literature,medium:book,modified:20210705214033711,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1884},{title:AdventuresOfIdeas1967,author:Whitehead,bibliography:LifetimeReading,caption:Adventures of Ideas,created:20210703170128000,creator:soren,genre:Philosophy/History,medium:book,modified:20210909025845239,modifier:soren,priority:1,readstatus:partial,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1967},{title:AdversarialNeuralNetworks,created:20200322014752285,creator:soren,es:confident,modified:20210511011126635,modifier:soren,tags:Psychology Math Code Public Idea,type:text/vnd.tiddlywiki,text:Technique for MachineLearning in which two networks are trained at the same time and pitted against each other. For instance, when trying to create DeepFakes, one network is trained to build the fakes and the other is trained to determine whether the content produced by the first is real or deep-faked. Or when trying to create a chess or Go engine, different networks with random mutations play against each other in an evolutionary|Evolution approach.},{title:Aeon,created:20200421175254810,modified:20200822020736017,refexplorer-starttab:Sources,tags:Publication Public,type:text/vnd.tiddlywiki,text:Publication for various contemporary, accessible philosophy.},{title:AgainstInterpretation1966,author:Sontag,bibliography:LifetimeReading,caption:Against Interpretation,created:20210703170128000,genre:Misc,medium:book,modified:20210705214033859,priority:3,readstatus:unread,recommended-by:Time,tags:Source Public,type:text/vnd.tiddlywiki,year:1966},{title:AgileDeclineEffect,created:20200817030909829,es:possible,modified:20210515034326330,tags:Public AgilePhilosophy Code Business InterpersonalRelations SocialMedia Idea,type:text/vnd.tiddlywiki,text:I predict we will soon (2020) hit the point where mass-market-customer-focused AgilePhilosophy practices will begin to exhibit a DeclineEffect. Why? Simple reason: //Agile relies on customer interaction.// Its great for you to get your customers involved, and customers love it...to a point.\n\nIm reaching that point. I now get survey after survey all the time asking me to fill out a NetPromoterScore or something of that nature. I liked giving feedback when some enlightened company asked me for it in an intelligent, polite, and sensible way and listened to my thoughts, but now that Agile is the methodology du jour and even the least enlightened companies are starting to pick up some of its practices, I cant possibly respond to or even entertain all of them. A company asking me for my thoughts is becoming obnoxious, instead of enjoyable.\n\nNow, this doesnt spell the demise of Agile-ish methodologies and practices. For one, it doesnt need to apply in more constrained areas, like within a company -- people will still provide feedback when a custom tool is being developed //for them//! For another, there are other ways available to determine whether customers are satisfied. Just putting a change out there and seeing how many bug reports and support requests are filed is a method that wont become obsolete anytime soon -- indeed, it might get you much better results than you expect compared to the direct requests because of UsefulFriction. But it does mean that the reach-out methods may soon become //far// less useful than they once were, at least unless they start compensating customers in some way, which comes with its own bias problems.\n\nCf. ReviewYourApp on reviews and surveys.},{title:AgileFallbacks,created:20200326133824421,es:likely,modified:20210509012442463,tags:AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:If anything goes wrong in a WaterfallMethodology process, the deadline and the project plan are wrecked and have to be rebuilt, and if the project never finishes all the way as originally envisioned, you never get anything at all. In an AgilePhilosophy-based process (especially e.g., ScrumMethodology), if the project never finishes, you just have a slightly less polished product thats missing a few of the features you wanted. \n\nThis could be seen as a form of adjusting the original process based on ContingencyPlanning.\n\nWaterfall is clearly more fragile|AntiFragility.\n\nPointed out in AgileInTheRealWorld.},{title:AgileHumility,created:20200119005220349,creator:soren,es:likely,modified:20240319015112849,modifier:soren,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:AgilePhilosophy is a philosophy fundamentally based on intellectual|IntellectualHumility and functional humility. A WaterfallMethodology //would// be more efficient, if we got everything right. But as Agile practitioners, we accept that we wont get everything right (a lesson most of us have learned through the SchoolOfHardKnocks). And with this in mind, its far more effective and, indeed, efficient to start with the 80%-right idea and let our mistakes come out right away.\n\nThe mistakes might be implementation mistakes. They might also be non-ActualRequirements, caused due to mistaken analysis or the simple fact that PeopleDontKnowWhatTheyWant.\n\nIts fun, too, once we get over our hubris. And when you accept youre going to make mistakes and plan to fix them quickly, they dont hurt (the insight behind BringThePainForward). This is, in effect, AntiFragility.},{title:AgileInTheRealWorld,caption:Agile in the Real World,created:20200325185358104,creator:soren,medium:video,modified:20200808142426217,modifier:soren,tags:Source Public,type:text/vnd.tiddlywiki,text:PluralSight course by MrJeremyJarell which suggests solutions to problems often encountered when trying to implement the ScrumMethodology (despite being called “Agile”, it is really about Scrum, and Jarell claims -- thoroughly incorrectly in my opinion -- that they are basically the same in practice).\n\n* ScrumProductOwnerAbsent\n* DeadlinesInScrum\n* ScrumBugsAndDebt\n* Team composition questions:\n** TwoPizzaTeam\n** CommunityOfPractice\n** SprintSynchronization\n** ScrumBacklogDivision\n\nA complete outline of the course can be found at AgileInTheRealWorldOutline.},{title:AgilePhilosophy,color:#6c6cff,created:20200121015137769,creator:soren,es:likely,icon:$:/core/images/list-bullet,modified:20230419165600949,modifier:soren,tags:Productivity Process Systems Design Code Public Idea,type:text/vnd.tiddlywiki,text:Agile is often described as a software development methodology, or sometimes by the slightly more enlightened as an approach that can be implemented with different methodologies. But it really isnt either of these things -- its a straight-up philosophy that affects the whole way you see the world once you grok|Grokking it. And while the typical formulation and the Manifesto that led to its wide acceptance is about software development, its really not about software either. Judge for yourself.\n\nIf you want a software development methodology in accordance with this philosophy, the most popular is ScrumMethodology.\n\n!! The Manifesto\n\n(This is taken directly from the Manifesto, which is kind of hard to get a copy of nowadays without poking around and giving your email address to somebody.)\n\n\u003C\u003C\u003C\nWe are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:\n\n* IndividualsAndInteractions over processes and tools\n* WorkingSoftware over comprehensive documentation\n* CustomerCollaboration over contract negotiation\n* RespondingToChange over following a plan\n\nWhile there is value in the items on the right, we value the items on the left more.\n\u003C\u003C\u003C\n\n\n!! The 12 Principles\n\nThese are a kind of addendum to the main portion of the manifesto.\n\n\u003C\u003C\u003C\n# Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.\n# Welcome changing requirements, even late in development. Agile processes harness change for the customers competitive advantage.\n# Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.\n# Business people and developers must work together daily throughout the project.\n# Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.\n# The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.\n# Working software is the primary measure of progress.\n# Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.\n# Continuous attention to technical excellence and good design enhances agility.\n# Simplicity -- the art of maximizing the amount of work not done|MaximizingWorkNotDone -- is essential.\n# The best architectures, requirements, and designs emerge from self-organizing teams.\n# At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.\n\u003C\u003C\u003C},{title:AGroupIsItsOwnWorstEnemy200304,caption:A Group Is Its Own Worst Enemy,created:20200130201238927,creator:soren,medium:article,modified:20210727232109682,modifier:soren,rating:average,readstatus:read,tags:Psychology InterpersonalRelations Source Public InternetTheory,type:text/vnd.tiddlywiki,year:2003,text:Article / lightly edited version of a keynote presentation by MrClayShirky. As the title says, from 2003 so the ideas about the Internet are old, but it seems to have held up very well as I read it in 2020.\n\nArticle was shared by a user on StackOverflow Meta as part of the ongoing StackOverflowCommunityDebacles.\n\nhttps://web.archive.org/web/20191122004739/http://www.shirky.com/writings/group_enemy.html\n\n\n!! Summary\n\n!!! Patterns\n\nSocial interactions can be divided into multiple PatternsOfCommunication. Here were looking at two-way, many-to-many patterns, which have been basically limited to face-to-face conversation before the internet. That means were largely in uncharted territory.\n\n\n!!! Group cohesion\n\n\Social stickiness\ is a powerful effect -- people who dont seem like they should have any reason to feel cohesion nevertheless do. For instance, youre at a party and youre not enjoying yourself, but you dont want to leave until other people decide to leave. (See AbileneParadox.) Basically, groups form to protect things they think are good.\n\nGroups also however often work against themselves: GroupIntraEnemy.\n\n!!! New ideas\n\nAuthor is very happy with blogs in 2003 and interested in LiveJournal and Wikipedia. It would be interesting to think about how whats happened with those compares to whats happened now in 2020.\n\nAlso suggests a really interesting idea of facilitating meetings by live-editing a wiki about the ideas and decisions that come up in them, thus both making it easier to focus on whats going on and producing an institutional memory of what happened. I almost want to try this now, because it certainly isnt something thats caught on anywhere Ive been but sounds exceedingly useful. He says he tried it with TheLibraryOfCongress and three weeks later they couldnt imagine life without it!\n\n!!! Conclusions\n\nThe article describes seven critical OnlineCommunityLessons that are poorly understood and followed even today.},{title:AiContinuation,created:20210516211127727,es:likely,modified:20210516223235328,tags:Public InterpersonalRelations Neuroscience Futurism Idea,type:text/vnd.tiddlywiki,text:In KlaraAndTheSun2021, the Mother wants Klara to practice and absorb necessary information so that Klara can become her daughter Josie if Josie dies, and the Mother will continue being able to interact with her (at least in private).\n\nIts unclear how well this would work. The Mother apparently tried it with Sal, and Josies friend Ricks mother evidently saw the two of them out playing one day several years prior to the time of the novel. But it didnt work; Sal wasnt real enough. According to Mr. Capaldi, though, Josie-AF will be much more complete and real (its unclear if this is because the tech has improved or because theyll be able to gather better data this time, or both).\n\nAfter Klara has been let in on the plan, the Father has a conversation with her about whether she can really grow to simulate Josie. Klara believes there is nothing ultimately “mysterious about the human heart” -- it could be broken down structurally into enough parts|Reductionism that eventually its all understood -- and she wants to believe she can serve Josie by “continuing” her if it becomes necessary. The Father, being an engineer through and through, believes it but doesnt want to believe it. The Father thinks the Mother wants to believe it, but never truly could|Metafaith. And I think the reader is expected to not believe its possible and not want to believe it, completing the set. At least that was how I felt.\n\n(Its not clear whether Ive overattributed emotions to Klara. She is able to feel some emotions, and to want the best for Josie; but its clear that she is primarily limited to the set of thoughts and expressions that are useful in helping her assigned human -- for instance, she is unable to smell|Anosmia and at one point has a discussion about how necessary that is. So while she does seem to be capable of metacognition|Metacognition, I dont know if she can really “want to believe” something.)\n\nN.A.: I felt a strong affinity with the Fathers perspective and think my mind works a lot like his. I dont think, for instance, that theres any reason in principle that we couldnt create an intellectually and morally equivalent intelligence to humans, and I think thats pretty scary! I also dont think were ever likely to accomplish that, but thats a different question. And I dont think I want to be continued|DeathIsNecessaryForMeaning.\n\nLiterally a couple of days after I read KATS, I ran into Replika and its inspiration as described in SpeakMemory2016. I wonder if MrKazuoIshiguro has heard of this: it is basically the exact same idea, right down to the casual use of the term “continue” for having an AI take the place of a dead human; but then again, the Internet is a big place, and you can also totally imagine it being a case of ConvergentEvolution.},{title:AiFlashcardsGenerationShortcut,created:20240602163246001,creator:soren,es:possible,modified:20240927193150983,modifier:soren,tags:Idea AI Business Shortcuts Public,type:text/vnd.tiddlywiki,text://Note:// This tiddler was initially extracted from the frozen reflection LongcutsInBangkok, which I wrote at a pretty depressed and downcast moment in my life. It makes several oblique references to OnShortcutsAndLongcuts2024. I have a follow-up after working a lot more on this at WhyAiFlashcardsAreHard; I think I understand the problem better now, and am less skeptical that the problem is inherently unsolvable, having worked with better LLMs for longer, but I also dont see an obvious path forward to doing a really good job, and still do not think it is merely a problem of not having tried hard enough or not having good enough models that use the same approach. I dont fundamentally disagree with anything I wrote here, but I also think it may be a little more focused on LLMs being fundamentally unable to do this compared to the specific difficulties of the problem, than is useful.\n\nAt RemNote weve been trying to teach a talking dog|LlmsAsTalkingDog how to write the flashcards to train our worlds future doctors, because we dont have the resources or time to do it ourselves. What could be more shortcutty|Shortcuts?\n\nIve been deeply skeptical of the project from the beginning, though Ive been trying to keep an open mind because I have low confidence that my intuition is right when it comes to AI these days. The skepticism is deeper than not believing well be able to get it working to an acceptable standard of quality. Its not that I think its //morally// wrong or distasteful, or that it would be bad if it worked, but that I think, on some intuitive level, that seriously entertaining the possibility of this working at all requires a lack of understanding of all that goes in to learning, much like I complained about in ReplaceabilityOfHumanTeachers. To borrow a metaphor Ive used elsewhere, it feels to me like the team is going looking for groceries at the hardware store. Theres nothing wrong with the hardware store, Im glad its there and I shop there myself, but in this case we just arent going to find what were looking for there, and it seems silly to try.\n\nNot to bash M.S.|PrivatePerson -- hes a very smart guy -- but I think his working mental model of LLMs leans towards being a magic intelligent box rather than a stochastic language model (though I must admit the more time I spend with LLMs, the more I tend to behave as if this model is true as well). Not that he doesnt understand what LLMs do, but he doesnt seem to take that understanding into what he believes can be done with them; it is the Ineradicable ElizaEffect all over again. Or maybe he just has a case of SiliconValleyOptimismitis. And Im not sure trying is all bad. Im glad there are people who are unreasonably optimistic about such things, but Im mildly frustrated to be involved in it.\n\nIn my own AI prompt-writing parts of the project, Ive found that its been nearly impossible to get it to understand hierarchies|Hierarchy, or to write precise flashcards|FlashcardPrecisionGptStruggles. My conclusion is that the meaning of hierarchies and how its most useful to group them is not fully expressed in patterns of language, its a different kind of intelligence. While Im not sure I would have guessed correctly on whether this problem would be hard from the beginning, the result doesnt seem particularly surprising, and I think “wrong kind of intelligence” is the right conclusion for any problem that resists LLM solutions even after substantial prompt-engineering effort.\n\nI actually //was// able to get GPT-4 to understand what makes up a good spaced-repetition flashcard well enough to write cards I would consider solid, by giving it a lightly modified version of MrAndyMatuschaks Focused-Precise-Consistent-Tractable-Effortful explanation from `/prompts`. It took a couple of tries to find the right way to frame it, but it basically succeeded. But I wasnt able to get it to write new flashcards that actually matched the purpose of the incoming (imprecise) flashcard, that would impart the desired changes to the structure of the learners thoughts. They had the right form, but the wrong goal and content: again, exactly what you would expect from a talking dog.\n\nPart of the problem may be that I dont understand how //I// figure out the goal and content, and for all I know, maybe I am actually wrong a large portion of the time. I certainly often have to edit prompts Ive created because theyre unclear or dont end up reinforcing what I wanted to know in some way, even when I put some effort into it the first time. And it tends to be non-obvious when you havent quite captured the critical point; when you eventually notice that youre lacking that understanding -- if you ever do at all -- its far outside of the context of your spaced-repetition flashcards app, and seldom does anyone try to trace back why they dont understand something to their learning process.\n\nComing back to shortcuts, I think its kind of rich to expect to teach a talking dog how to do something I cant even do myself, dont you?\u003C\u003Cfnote \Its not just that I cant //explain// it myself; talking dogs are fairly good at doing things you cant explain how to do, if you can give examples and reinforce what you want the result to be. (See Clever Hans|https://en.wikipedia.org/wiki/Clever_hans.) But here I dont even fully understand //what// I want it to do, beyond “I (think Ill) know it when I see it.”\>> And of course, its not just that Im the wrong person for the job. The small set of people in the world who have spent quite a long time thinking about this -- which includes me -- collectively have developed nothing better than a bunch of moderately helpful heuristics. Probably there is a great deal of TacitKnowledge involved in being human and having some vague Metacognition about how one goes about learning, that has not been expressed in humanitys collective use of language well enough for GPT to grok it.\n\nThe longcut of iteratively reading and noting down what seems most important|IterativeReading, from various sources, bypasses the //need// to understand this. The journey takes you where you need to go to learn.\u003C\u003Cfnote \\\\nKarlsson gets at this in his longcuts essay|OnShortcutsAndLongcuts2024 when he notes:\n\n\u003Cblockquote>\nAn essay is not a vehicle of knowledge transmission; it is a landscape to think in, and a path to get there.\n\u003C/blockquote>\n\\\>A human-expert-written MnemonicMedium can plausibly achieve a fairly similar thing, by crafting that path Johanna-garden-style. If we think about Matuschaks `/prompts` again, it doesnt promise a shortcut, a set of prescriptive algorithms, where if you follow the steps one to five you will have a great prompt that teaches you exactly what you want to know.\u003C\u003Cfnote \Even though it has some points which are presented as rules or guidelines, you dont //follow the guidelines// directly to produce a flashcard; you change the way you think about flashcards by grokking the guidelines, and then you write better flashcards.\>> It promises that, if you read the article thoughtfully, try the exercises, study the flashcards, and keep iterating, you will be changed in some useful way that causes you to be better at creating good flashcards. A lot of the process happens in //you//, and what you learn is implicit and not written anywhere on Matuschaks page. And what makes an excellent flashcard on a given topic for you will by necessity be different than what makes one for me, because the flashcards themselves are a way to change your own mind in some useful way, and what flashcard accomplishes that change depends on the initial conditions there. (See SpacedRepetitionAsThoughtManagement.)\n\nAnd, like I think all longcuts, its more human, more aesthetic, and yields better feelings when you have someone who deeply understands the topic and good flashcards write the cards. I expect the AI-generated cards are like plastic objects on the desk|https://ap.sorenbjornstad.com/#post-168; they will just feel subtly crappy|SubtleCrappification.\n\nWho knows, maybe some day the talking dog will get smart enough to make them feel good. Seeing what AI art looks like today, though, its kind of hard to feel that it will ever count in the same way that a human touch does. (Its undoubtedly //cool//, but its not //meaningful// in the same way. At least to me. See also LiveMusicViaWatchhouse and my reflections on hearing Ruth Moody|MsRuthMoody in 2024-05-29 Wed.) Even just knowing a dog wrote it might be enough to make it feel a little crappy, the same way that the same wine tastes worse if you put it in a cheaper bottle. Also consider the way that a handmade object can feel better than a mass-produced one even if its objectively worse at its job. (This isnt a contradiction, or even surprising. An object may have a PrimaryPurpose that we call its “job,” but it has many other purposes and effects as well, and the handmade object, being more complex, richer in imperfections and secondary associations, will naturally do better at these additional purposes.)\n},{title:AiPinball20200519,at:202005200215,caption:Beat the brain: AI-enabled Pinball,created:20200518213558400,medium:video,modified:20210522015801714,presenter:MrJackSkinner,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/bfa89c65-8afc-4dfe-bc31-3df73365e33e,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\n* Lightly modified pinball machine\n** Cameras pointed at the table and scoreboard\n** RaspberryPi and motors wired to flipper\n\n* Machine starts playing purely randomly and learns patterns over time\n** A day gets some scores\n** A couple days gets some high scores\n** A week or so it starts doing trick shots\n\n* Interesting problems and lessons\n** When they moved the pinball machine, the model got screwed up because there was different lighting on the machine!\n** Once broke a flipper at 2am and was training on bad data for hours -- GarbageInGarbageOut!\n** Training time is affected significantly by board tilt (higher incline makes high scores easier, as it does for people).},{title:AirBnb,created:20231017152815239,creator:soren,es:confident,modified:20231017152834690,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:Popular short-term rental marketplace.},{title:AirTag,created:20231017015000471,creator:soren,modified:20231017015002287,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:Albany,created:20240410124653578,creator:soren,modified:20240509110757920,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AlbertLea,created:20240402014925536,creator:soren,modified:20240509110800068,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AlburghDunesStatePark,created:20240410124604597,creator:soren,modified:20240509110800667,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AlburghVermont,created:20240410124554329,creator:soren,modified:20240509110801068,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AlcoholicsDontHaveAlcohol,created:20200821034520783,creator:soren,description:People with no alcohol in their home are usually either alcoholics or teetotalers; people with lots are moderate drinkers.,es:likely,modified:20221129230033900,modifier:soren,tags:Design Reasoning Sociology Public Idea,type:text/vnd.tiddlywiki,text:One of the many seemingly silly but actually profound nuggets of wisdom Ive learned from TheReddit, and one of those things thats obvious once someone has pointed it out but unintuitive until someone does: people who have lots of alcohol around the house actually tend to be the ones who rarely drink. Teetotalers presumably have the least alcohol, but after that its alcoholics, then heavy drinkers, with occasional drinkers having most of all.\n\nBasic idea: If you drink a lot, the alcohol gets used up way faster, and if youre getting drunk every day, youre not going to have a collection of fancy wine and liquor, youre going to have a big jug of bottom-shelf vodka. Meanwhile, if you like alcohol but dont drink very often, its pretty easy to buy it faster than you drink it, especially if you receive it as a gift or buy it while youre on vacation, and youll probably enjoy having it on display.\n\n\nThis could be seen as a kind of negative manifestation of the millionaire effect (people who actually have plenty of money often dont look it, driving ordinary cars and living in ordinary houses and wearing ordinary clothes with 2 million dollars in the bank, while those who show off their status are often in mountains of debt).\n\nCf. AppearancesOverReality: sometimes the counterintuitive truth doesnt matter!},{title:AlexanderTechnique,created:20250617164013858,creator:soren,modified:20250617164016104,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:AliceInWonderland,caption:Alices Adventures in Wonderland,created:20200225235646739,creator:soren,format:hardcover,isbn:9780393245431,medium:book,modified:20210628024901876,modifier:soren,owned:yes,rating:irrationally enjoyed,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:AliceInWonderland,year:1865,text:Delightful work of NonsenseLiterature by MrLewisCarroll. Considered a childrens book, but just as entertaining and mind-bending if not more for adults (cf. ChildrensHdm). I tend to reread it at least every couple of years.\n\nProperly titled //Alices Adventures In Wonderland//, but nobody calls it that. By the community of scholars and fans, //Alice// conventionally refers to ThroughTheLookingGlass, which is tightly related, in addition.\n\nIf you love //Alice//, make sure to pick up at least one of the editions in the //Annotated Alice// series. As the introduction to the original says, there is something preposterous about an annotated //Alice//, but also, you start spotting fun things you never would have before.\n\nCarrolls original illustrations for his handwritten draft that he gave to Alice (entitled //Alices Adventures Under Ground//) were recently published online|https://publicdomainreview.org/collection/carroll-illustrations-for-alice-undergound and are well worth looking at. Though less classic and less detailed, they have a clarity and simplicity that Tenniels lack.\n\nI also wrote a paper on it for a mythology class in college, MyNonsenseMythAndDreams.\n\nMy edition is //The Annotated Alice: 150th Anniversary Deluxe Edition//, ed. MrMartinGardner and MrMarkBurstein.\n},{title:AllMapsLie,created:20200909013903177,es:confident,modified:20201201034805047,tags:Expression Information Design Metaphor Public Idea,type:text/vnd.tiddlywiki,text:Age-old wisdom: its impossible to make a model of something that is exactly true in all respects. The model will be wrong in some meaningful respects. With a map, this is easy enough to see: if the map retained all the detail of the area it mapped, it would be //as large as// the area it mapped, in which case it would cease to have any value as a map (arguably, it would no longer //be// a map, but now weve strayed into Ontology).\n\nSimilarly, a statistical model makes some (rather, many) incorrect assumptions about the shape of the data it models, which is necessary to allow people to make meaning out of it and offer any predictive value.\n\n(Models have the curious property, though, that they appear objective to the uninitiated, and even to many people who should know better. See FallibilityOfStatistics for a more careful assessment.)\n\nMetaphors are arguably models of a sort as well. The FamiliarizingMetaphor leaves out some detail as a way to compare two things and link them together|NotesMustLink into our overall MentalModel of the world (see, its even called a model!). In so doing, it makes inaccurate assumptions; hopefully theyre not important ones for the circumstances.\n\nThats probably the most important point. Your map, model, or metaphor should be true in the respects that are important for the RetrievalContext in which it will be used.\n\nThe aphorism //the map is not the territory// is often used to describe the flaw in reasoning in which one assumes that the map is an exact representation of its referent.\n\n!! References\n\n> All models are wrong. Some models are useful.\n> ---MrGeorgeBox, \u003C\u003Crt 5708>>},{title:AllWhoAreWeary,author:Emmy Kegler,caption:All Who Are Weary,completed:202208181200,created:20220716195848278,creator:soren,medium:book,modified:20221107042029372,modifier:soren,rating:skimmable,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2021,text:Book on living with and/or helping others understand mental illness, in particular how to usefully involve a Christian perspective in the discussion. Read this with the young adult group at B.L.|PrivatePerson.\n\nI wasnt, overall, a fan of the book. It did a great job at creating discussion between us, so in that sense it did its job. And there were some wonderfully snarky and even lucid moments. But my overwhelming impression was that Kegler wanted to write a book about mental illness and the church, and she had some interesting things to say, but then she wanted to make it comprehensive, so she ended up having to come up with something to say about every mental-illness-related topic. This meant a lot of times it felt like she was grasping at straws to find some way to connect a mental illness, a Biblical passage, and an action a church should take. Maybe the connections made more sense to her, but many of them didnt make a ton of sense to us.\n\nThis could have been several excellent essays, but it was weak as a book.},{title:AlmModel,created:20200322152814285,creator:soren,modified:20200323003159945,modifier:soren,tags:Code Process Public Idea,type:text/vnd.tiddlywiki,text:Software development practice in which the whole development process, from project planning to testing and maintenance, is linked together into a traceable system -- so you can see what requirements spawned the creation of something, what lines of code and changes that traced to, what verifications and tests it passed, and when and where it was released.\n\nAzureDevOps offers this at TheFederatedInsurance, but many tools, both CompleteIntegration and UnixPhilosophy-style, are available. I would argue some degree of system is all but a requirement in todays environment. (TheyWriteTheRightStuff shows this was considered revolutionary in 1996; its now 24 years later.)},{title:AlternateAndAlternative,created:20200529225716387,creator:soren,es:confident,modified:20220202175510488,modifier:soren,tags:EnglishGrammarTrick Public Idea,type:text/vnd.tiddlywiki,text:* An alternate is a thing that replaces another thing.\n* An alternative is one of a set of options that one chooses between.\n\nThe difference is semantic and often cannot be identified by listing phrases. For instance, the source notes that you might travel an //alternate route// if the normal route is blocked and cant be taken, but an //alternative route// if you decide on a whim to go to work a different way.\n\nSource: DreyersEnglish2019 p. 169.\n\nCf. ContinualAndContinuous.},{title:AlternativeFacts,created:20200410210057724,creator:soren,es:confident,modified:20210511010943085,modifier:soren,tags:Expression Politics Public Idea,type:text/vnd.tiddlywiki,text:Phrase that became popular after MrDonaldTrumps inauguration, when incorrect statistics were bandied around by the administration regarding how many people had attended. They were able to be objectively proven false, but when confronted about this, MsKellyanneConway said that the press secretary had merely been providing “alternative facts.”\n\nArguably the moment where recognition of the DeteriorationOfReality became mainstream.},{title:AlwaysSometimesNeverPattern,caption:Always/Sometimes/Never,created:20210307215914292,description:Given a statement, the reviewer indicates whether it is always, sometimes, or never true, and explains why this is the case.,es:confident,hideorphan:true,modified:20210522013404154,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:In an Always/Sometimes/Never card, given a statement, the reviewer indicates whether it is always, sometimes, or never true, and explains why this is the case.\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:AlwaysSometimesNeverPattern/Advantages,created:20210313134408057,modified:20210410124710663,tags:Public Idea,type:text/vnd.tiddlywiki,text:* A quick and effective way of producing questions for math and logic-based topics, or indeed for anything where recognizing the relationships between concepts is important.\n* An easy way to turn a yes/no question (an antipattern) into something more effective.\n* Requires explaining //why// rather than //what//, and leads to reflection on the internal logic of the system the question is about.},{title:AlwaysSometimesNeverPattern/Cautions,created:20210313134418933,modified:20210313134257675,tags:Public Idea,type:text/vnd.tiddlywiki,text:None. This pattern is difficult to badly misuse once understood and usually produces memorable cards.},{title:AlwaysSometimesNeverPattern/Contributors,created:20210313134430533,modified:20210313134309235,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Soren Bjornstad},{title:AlwaysSometimesNeverPattern/Disadvantages,created:20210313134413683,modified:20210313134252427,tags:Public Idea,type:text/vnd.tiddlywiki,text:* While the method is straightforward, if you have never encountered one of these prompts before, you may not know that youre supposed to give an explanation. Unless you want to include a baroque description of how to answer in the prompt, these could therefore be misunderstood/frustrating if youre planning to distribute the cards to others.\n* The same knowledge can usually be tested with a more complex series of cards that focus on the implications of the always/sometimes/never situation and examples in which you would need the knowledge, which may be more similar to a real-life test of the knowledge. Over-reliance on A/S/N-type questions may discourage this kind of development.},{title:AlwaysSometimesNeverPattern/Examples,created:20210313134401531,modified:20210313134240281,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210307221057904\\n\t\Lua: A/S/N: Are `func()` and `func(nil, nil)` different?\\n\t\\\//Sometimes.// Ordinarily, they are not. However, the built-in `select()` function counts nils when the first parameter is `#`.\\\>>\n\n\u003C\u003Crememberq \20210307221415473\\n\t\A/S/N: When using Azure Backup, you are billed for a data transfer.\\n\t\//Never//. Billing is based purely on data being stored, and neither inbound nor outbound data transfer has an associated cost.\>>},{title:AlwaysSometimesNeverPattern/Formula,created:20210313134356268,modified:20210314140444667,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** “A/S/N”.\n** A statement, presented as fact, or a question whose answer would be “yes” or “no” if presented without the “A/S/N” tag but can also be answered “always”, “sometimes”, or “never”.\n* Answer:\n** The word //Always//, //Sometimes//, or //Never//.\n** An explanation of why the answer is what it is, especially important if the answer is //Sometimes//.},{title:AlwaysSometimesNeverPattern/UsageNotes,created:20210313134423946,modified:20210725170731729,tags:Public Idea,type:text/vnd.tiddlywiki,text:* The //why// is actually the key fact youre trying to remember using this pattern; stating whether its always, sometimes, or never true is merely a convenient way of phrasing the question and reinforcing the truth value of the statement. The answer of //always//, //sometimes//, or //never// should be immediately obvious if you understand the //why//. Thus, a variant of this pattern is to simply ask about the explanation in some other way.\n* A corollary of the previous point is that if you remember that something is, say, always true, but you cant explain why, you should fail the card and relearn the related concept.\n* You are likely to reach for this pattern most often when the answer is //Sometimes//, when youll be trying to find a way to remember the conditions under which something will and will not be true. Surprisingly, this doesnt seem to lead to false positives (i.e., answering the card correctly just because you were biased towards thinking the answer was //sometimes//, even though you dont actually know the answer); this is presumably because the main point of the question is not whether its always, sometimes, or never true but //why// it is. Nevertheless, it might be worth thinking about adding more //Always// and //Never// prompts.\n* Two variations on the choices //Always//, //Sometimes//, and //Never// may be useful. In any case, the parts about explaining the reasoning remain the same.\n** Almost Always/Sometimes/Almost Never: When working with more real-world questions that dont operate in certainties, you can hedge and make the card more probabilistic -- //AA// indicates the statement is true in at least (say) 99% of cases, while //AN// indicates in less than 1% of cases.\n** Always/Often/Sometimes/Rarely/Never: When its valuable to understand the frequency at which something occurs. The dividing lines in this case could be 100%, 80%, 20%, and 0%, for instance.},{title:AlwaysUnderpromiseAndOverdeliver,created:20210916135501400,creator:soren,description:Make promises that are intentionally just a little bit more conservative than necessary, then profit from exceeding peoples expectations.,es:confident,microlink:uo,modified:20240611044737957,modifier:soren,tags:Idea PhilosophyOfLife InterpersonalRelations Business Public Favorites,type:text/vnd.tiddlywiki,text:A useful mind trick for making yourself look good and making other people happy, simultaneously (what a bargain!): be reasonable but slightly more conservative than necessary in what you promise, with regards to deadlines, outcomes, skills, and so on, then beat what you promised.\n\nThis technique works because people accept the conservative promise, whether cheerfully or slightly grudgingly, reconfigure their expectations and MentalModel of the situation to accommodate the new data you give them, and become content with this state of affairs. Then you deliver something better or faster than they now expect, leaving them pleasantly surprised.\n\nIn my experience, its rare for people to conclude youre padding your estimates or underestimating your expected outcomes, unless you make unreasonably bad promises; unless youre working within a formal estimation framework, people dont keep records of how often you hit your targets! So the “reasonable” part is still key, but otherwise this seems to work more or less indefinitely, even if youre interacting with the same person over and over again. If youre doing similar things repeatedly, you may want to move the promises a little bit closer in over time, since youre presumably getting better at them; this will maintain the margin at around the same amount.\n\nUnderpromising and overdelivering is engaging other people in a mild NegativeVisualization.\n\n\n!! Alternatives\n\nDelivering //exactly what you promise//, no more and no less, might be better in some circumstances -- for instance, giving a conservative estimate for responding to an emergency may be undesirable. But if your results are quantifiable at all (e.g., ambulance response time), its usually extremely difficult to //exactly// hit your promise, so the cases where this is the right strategy are few and far between, even when it comes to emergencies. It never looks impressive to be a fantastic estimator and deliver exactly what you promised; it always looks impressive to do better than someones expectations, and you can easily manage their expectations by underpromising slightly.\n\n//Overpromising and underdelivering// is universally a bad look and should be avoided like the plague (though it will probably happen occasionally|TimingMantra no matter how good your practices are). Indeed, this might be the best reason of all to adopt underpromise-and-overdeliver: its the only way to ensure that you have some breathing room if you perform worse than you expect.\n\n\n!! Examples\n\n* You get a mildly urgent assignment Monday afternoon and think it will take you about five hours to finish. You promise it by midday Wednesday: youll lose some time to meetings, interruptions, breaks, and so on, so youre probably only working two-thirds of your work hours even on an urgent project, and it might take you a couple of hours longer than you expected. So twelve hours of time on the clock looks like the maximum it could reasonably take. You end up delivering it just before you leave on Tuesday, to everyones delight, and you even managed to make sure the formatting was perfect.\n\n* You send in a support ticket and receive an automated email saying youll have a response within three hours. You actually get a reply after an hour.\u003C\u003Cfnote \\\\n\tYou have to be careful with the difference between expectations and reality on this one. If your policy says that tickets will be responded to within, say, eight hours, but the de facto truth is that tickets are responded to within one hour, this will promptly lose its effectiveness for experienced users, and theyll be peeved when it takes four hours even though you said it might take eight hours. But eight hours/one hour isnt a reasonable split; three hours/one hour is.\n\\\>>},{title:AmateurAdvantage,created:20231117001645297,creator:soren,description:Sometimes amateurs are able to do a better job at some task than professionals possibly can.,es:confident,modified:20231118002228665,modifier:soren,tags:Idea Process Public,type:text/vnd.tiddlywiki,text:Much of the time, professionals do a better job at some task than amateurs. But sometimes, for various structural reasons, amateurs are actually positioned to do a better job.\n\nUsually this is some combination of:\n\n* The professional has no personal stake in the outcome.\n* The professional would have to charge a price nobody would pay to do an excellent job, while the amateur, not having to do a cold cost-benefit analysis, can enjoy taking the time to do a good job because they have such a personal stake.\n* The environment in which professional work is done makes perfection impossible, because there is insufficient time or attention available to go around.\n\n\n!! Examples\n\nJ.W.|PrivatePerson re-tiled his shower around a year ago. Hed never done it before, so he was learning as he went and made a few mistakes, but overall did a bang-up job. Shortly after that, he was over at the house of a friend who had had his shower re-tiled by a contractor at about the same time, and when he went to the bathroom he took a look at the shower tiling and found that it had been done noticeably worse. The reason, he realized, is that when youre going to be standing in the shower staring at the tiles for the next 20 years, you have a lot of motivation to take the time to do it right to the absolute best of your ability. The contractor only cares to do a good enough job that the homeowner walks into the shower, glances at it, says “Good tile job,” and pays them. The amount of additional time and effort to do the tiling //perfectly// just wont pay off -- while a nearly perfect|Perfection job might be worth a little more money and a little more reputation than a solidly good job, its not enough more to justify it.\n\nMrMarkDominus notes|https://shitpost.plover.com/p/potatoes-2.html that a restaurant cannot make a really good baked potato, because you need to bake the potato for at least an hour, and he prefers more like two. Unless the restaurant somehow kept a series of potatoes in various stages of doneness cycling through their ovens, timed to finish just as each patron who wants a baked potato sits down and places their order, its physically impossible to both bake the potato perfectly while also delivering it to the table within a reasonable amount of time.\u003C\u003Cfnote \I suppose you could call ahead and tell them you were going to be coming in for dinner in two hours and five minutes and wanted a baked potato...\>> Even if someone figured out a way to make the cycling method work, its subject to the same problem as the tiling:\n\n> If the restaurant did go to all that trouble, what then? They wouldnt be able to charge enough to pay them back for the time and trouble, because it is just a potato, and who is going to pay a lot of money for a potato?\n\nMany kinds of eggs are similarly hard to do well in a restaurant. Ive basically given up on ordering scrambled eggs at restaurants because they are virtually always overcooked. Fried eggs over easy have the same problem for the same reason, but are maybe even more sensitive. When I make them at home, they come out perfect every time, but thats because I dont even light the burner until my table is set and Im sure the rest of my food will be plated within the next three minutes. Melt butter over high heat, crack eggs into pan, flip when theyre solid enough to get the spatula under, then count off seconds corresponding to the level of doneness you like (I like my yolks just tending on over medium, still fully liquid but a little thickened, so I do 20 seconds, then cut the heat, wait a few more seconds, and flip them out of the pan onto my plate). Then I salt and pepper them, take them out to the table, and eat them //immediately//, because if they sit for more than a couple of minutes they will continue cooking on the plate and be overdone. Very few restaurants have the kitchen coordination to ensure all fried eggs in a partys order get done at exactly the same time and can then be carried to the table immediately with no delay, much less the amount of attention required to cook them exactly the right time! At home, standing over a pan with two eggs in it, its trivial.},{title:AmazinglyAwesomeFriend,created:20221229212048700,creator:soren,description:A small number of people will make vastly better close friends for you than others. Its worth looking for them.,es:likely,microlink:aaf,modified:20240611030835592,modifier:soren,tags:Idea InterpersonalRelations LifeDirection Public Friendship,type:text/vnd.tiddlywiki,text:There are a lot of people in the world.^^citation needed^^ If youre an agreeable person, you can get along with the vast majority of them and be friends with a smaller majority. But a tiny minority of the people in the world will be //great// friends for you. Finding these people and building good relationships with them should be one of the most important projects in your life, right up there with finding a good job, a good romantic partner,\u003C\u003Cfnote \Obligatory “if you want that.” Aromantic people are valid!\>> \u003C\u003Cfnote \Almost everything in this tiddler also applies to romantic relationships. But people seem to implicitly understand this idea in that context in a way they dont with friendships -- perhaps because romantic relationships are usually exclusive and (ideally) permanent, making optimizing the one person in that slot more obviously important -- so Ill be focusing on the underappreciated context here.\>> and a CoherentPhilosophyOfLife.\n\nThe universe offered me a nearly perfect demonstration of the difference between people you can get along with and people you really like recently. In two successive weeks, I attended a regular happy hour I go to and ended up in an extended one-on-one conversation with one person each week because barely anyone else showed up. Well call them Alice and Beth. The first week, my conversation with Alice was fine; I certainly dont dislike her, and it was nice to unwind and talk a little bit. But it was kind of boring, maybe even a little bit awkward at times, and at the end I felt no different about myself, her, or anything we talked about. The second week, my conversation with Beth was amazing|ConversationalEase. Without any effort to speak of, we proceeded to engage in a series of animated exchanges about systemic racism, our experiences of bureaucracy, and the Holocaust and the theology of evil, among other things -- in a way that also commented on who we were ourselves and connected us -- and eventually noticed that everyone else had left and we had been the only people in the bar for half an hour after its official closing time.\n\nI realized, after hastily apologizing to the staff and heading home the second week, that over the past few years I hadnt known //anyone// I connected with like Beth, except a couple of people who had moved away and I had kept in touch with. Moreover, I had been giving equal energy to people I knew who could have been pretty good (if a little short of Beth) if I had followed up more aggressively and tried to get to know them better, and people like Alice, who are nice to talk to sometimes but would never significantly improve my life.\n\nThe lesson is twofold. First, people like Beth -- outliers in terms of their suitability for friendship with you, or perhaps we could call them “amazingly awesome friends” if we want something that sounds less impersonal -- exist. Some people are generally more likable and sociable than others, but every person is different and these outlier pairings mostly happen because of well-aligned attributes of both people, so the set of outliers is different for every person. For you, the outliers probably make up only 1%, or maybe even 0.1%, of the general population.\u003C\u003Cfnote \N.B.: This doesnt mean only one in a thousand people you actually meet will qualify. Pairs of people who meet each other organically turn out to be well-matched much more frequently, because the people in such pairs tend to do similar things and live in similar places.\>> But its not actually that hard to find them, assuming you live in a place with enough people that you dont run out of prospects. Youve likely met someone like Beth for you at some point in your life, and its normally pretty obvious when you have. You just need to meet a bunch of new people while paying attention to how you feel about them, and jump on the opportunity when you find it. (Both of these things are vaguely uncomfortable for most people. TrivialInconveniences strike again.)\n\nSecond, given the existence of and feasibility of finding people like Beth, you should not waste your time and energy on people like Alice. If youve just moved to a new place, you might need to cozy up with some kind-of-okay friends for a little while to avoid getting lonely, but your long-term goal should be to find people you really like. When outliers are out there waiting for you to find, trying to cultivate average prospects is a dangerous distraction, because no amount of dedicated relationship-building will make an Alice into a Beth -- you cant make a racehorse out of a pig, even if you can make a pretty fast pig. Dont spend your time training pigs when you could be starting with horses.\u003C\u003Cfnote \See the Ben Kuhn post linked in the References section for detailed discussion.\>>\n\nOf course, this is not to cast shade on Alice -- its not her fault that she doesnt happen to be the right friend for you! Nor is it saying you should not //interact with// anyone who isnt a Beth. That would be silly, entrench you deeply in a PersonalBubble, and most likely alienate you from groups you want to be part of. Weak ties are important too. But building serious, long-term friendships is a lot of effort,\u003C\u003Cfnote \I think English needs a different word for these relationships, compared to average people you hang out with occasionally. “Best friend” is the closest I can come up with, but that comes with a bunch of weird baggage. Still better than German, where you cant even directly differentiate between a girlfriend/boyfriend and a friend of that gender!\>> and it offers a disproportionately large reward when you pick the right people to do it with. Give that effort only to prospects who really deserve it, and if you havent found enough people who really deserve it yet, keep looking until you find them. Then when you do find them, go all in. As MrDerekSivers says, say “hell yeah” or “no”|https://sive.rs/hyn.\n\nLife can be //okay// spent with Alices, but it is immeasurably better with Beths. You only get one life; dont fall for the good-enough trap.\n\n\n!! References\n\n\u003C$m2.x number\1\>\nSearching for Outliers|https://www.benkuhn.net/outliers/ (Ben Kuhn)\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\nOn Friendship and on Finding Your People|https://guzey.com/personal/friendship/ (Alexey Guzey)\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\n\n> I used to think I disliked social interaction. I have since realized – and it blew my mind – that I only disliked social interaction with people who aren’t awesome.\n> ---MrScottAlexander, \u003C\u003Crt 12902>> (qtd. in above)\n\n\u003C/$m2.x>\n\n{{AmazinglyAwesomeFriend/p||PrivateChunk}}},{title:AmazonWebServices,created:20200425024139830,creator:soren,es:confident,modified:20211107182701666,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:TheAmazons cloud offering, everything from platforms to VMs. Runs TheControlAltBackspace, along with just about everything else on the web. This ubiquity makes it nearly impossible to do anything in the modern world without using an Amazon product (even unknowingly).\n\nAzure is a distant second offering, with everyone else even further down the list. Amazon got a huge jump on everyone else.},{title:Ambassadors1903,author:Henry James,bibliography:LifetimeReading,caption:The Ambassadors,created:20210703170128000,genre:Literature,medium:book,modified:20210705214033878,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1903},{title:AmberSpyglass,author:Philip Pullman,caption:The Amber Spyglass,created:20200127015822633,creator:soren,format:paperback,isbn:9780375823350,medium:book,modified:20221020220255069,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2000,text:Third book of HisDarkMaterials. Preceded by SubtleKnife.\n\nThe least satisfying book of the set in my opinion. It continues to be great until the last 50 pages, but then the end doesnt wrap things up very well and includes a thoroughly childish presentation of some pseudoscientific materialist metaphysics which is apparently supposed to do this wrapping-up. That said, its still very worth reading!\n\nOur hope is that the final book of the BookOfDust may help to bring some of the ideas that were left unclosed to a more satisfying end, but MrPhilipPullman has left himself a very tricky challenge that Im not entirely convinced hes up for. Im crossing my fingers because hes a much better storyteller than he was when he wrote TAS (in 2000; Ive been waiting almost my entire life for the end of this thing!), but well see.},{title:American1877,author:Henry James,bibliography:LifetimeReading,caption:The American,created:20210703170128000,genre:Literature,medium:book,modified:20210705214033912,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1877},{title:AmericanRevolution,created:20201205232647151,modified:20230912032639443,tags:Public Idea,type:text/vnd.tiddlywiki},{title:ampersand-hierarchy.jpg,type:image/jpeg,created:20201018035121490,modified:20201018173129001,tags:Image Public,_canonical_uri:./extimage/ampersand-hierarchy.jpg},{title:Amsterdam,created:20210812020805866,modified:20210812020807985,tags:Place Public,type:text/vnd.tiddlywiki},{title:AmsterdamBarAndHall,created:20240402011545288,creator:soren,modified:20240402011547211,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AmtrakTips,created:20231108032341942,creator:soren,es:likely,modified:20251011160317045,modifier:soren,tags:Public Idea Travel,type:text/vnd.tiddlywiki,text:Miscellaneous collection of observations for traveling on Amtrak|TheAmtrak, something I do pretty frequently and am often asked about. Not comprehensive, contains the things I have both thought about writing down and wanted to write down.\n\nI live in the Midwest and so travel primarily on long-distance Superliners (the double-decker trains); some amenities and processes are slightly different for other trains. Let me know if I assert something as a general truth that isnt true on a line you frequent!\n\n\n!! Buying tickets\n\n* Pricing:\n** Breath of fresh air compared to airline pricing; generally far more legible.\n** As far as I can tell, generally there is a base fare for coach, and then as the train fills up, the price will jump up to a higher tier at some threshold percentage.\n** For sleeper tickets, each person pays the current coach fare, and then an additional flat fee is added for the compartment (irrespective of the number of people in it). You are always buying out the entire compartment (theyll never put a stranger in it with you, unlike many sleeper trains in other parts of the world), so to get the best price, bring a friend.\n** Buying earlier as soon as you know your travel plans is uniformly better; prices dont get discounted later on. Definitely book early for heavy travel periods like Thanksgiving or Christmas. On many routes, the fare jumps when you book late are larger than the cancellation fees during such periods, so it can make sense to book early even if youre not sure youll end up using the ticket (of course, if you can get a cheap Flex ticket, which is fully refundable, that might be even better).\n**At some point Value tickets will become unavailable, and only more expensive Flex tickets will be left. (The only difference is refundability.)\n** Once upon a time, Amtrak refund policies were wildly generous (if I recall correctly, in some fare classes you used to get 100% of your money automatically refunded if you no-showed!). They have slowly gotten more and more restrictive over the past two decades, but theyre still reasonable and better than many airlines. Nowadays, the basics are:\n***Value tickets: Changes or cancellations forfeit 25% of the ticket price, no matter when you cancel. This often isnt a big deal since these tickets tend to be for shorter trips and not that expensive to begin with (I frequently buy Value tickets between Chicago and St. Paul, and this amounts to 15--20 bucks). If youre planning a long trip and arent sure the dates are good, its probably worth upgrading to a Flex ticket.\n*** Flex tickets: 100% refundable as long as you cancel or change before the train leaves your departure station. Changes pay the difference in fare price at the time of the change (usually it costs something since youre booking closer to the travel date, but occasionally it will have become cheaper and youll get money back). It appears to me that these have less of a comparative difference in price to Value tickets than they used to now that the Value policy has gotten more restrictive.\n*** Sleeper or business class: No change fee. Changes pay the difference in fare price at the time of the change. Free cancellation up to 120 days before departure, 25% penalty after that (and if youre particularly late theyll only give the remaining 75% back to you as a voucher).\n* Amtrak Guest Rewards isnt particularly lucrative unless you travel Amtrak a whole lot, but its also easy to sign up for and use and the points dont expire, so its worth doing if you expect to ride more than a few times per lifetime.\n* Youll often be presented with multiple options for a given trip. Sometimes the same exact trip will have several choices with different prices! Other times ridiculous itineraries will be presented (maybe involving multiple connecting buses and a longer trip). Read carefully and pick the lowest price that takes you on a convenient route.\n* If unsure whether you want to ride coach or in a Roomette on a long-distance route, dont forget that all meals are included in sleeper classes. If you were going to buy food on the train anyway, this often makes the difference much smaller than youd expect. Occasionally when you book late and coach has filled up fast but the Roomettes have filled up more slowly, you can upgrade for something like $10 once you consider the cost of meals.\n* Be sure to sign up for text delay alerts (more on that later).\n\n\n!! Classes\n\n* “Coach” on Amtrak is a significantly better experience than first class on a domestic airline, even on regional trains and especially on long-distance trains. If the trip isnt overnight, you only need to upgrade to sleeper if youre trying to work and need to concentrate, or youre after the experience but dont want to take a longer trip. (People are rarely disruptive in coach though; you can probably work fine there too unless youre quite sensitive or youre taking calls all the time.) Business class is just slightly nicer seats and a free drink on the routes Ive seen; I wouldnt pay more than a 20% premium or so for it.\n* If youre on a multi-day trip, you probably wont get good sleep in coach unless youre unusually good at sleeping in weird places. I wake up a couple times a night in a sleeper, but otherwise sleep totally fine, excellently for being on a moving vehicle! Its definitely worth the upgrade if you can afford it. Plus, as mentioned in the pricing section, your meals are included; bringing your own meals works great on short trips but will be a challenge on multi-day ones.\n* The website makes it slightly tricky to find the option, but you absolutely can book part of a multi-seat trip in sleeper and part in coach. This often makes sense if you have one long train with an overnight or two and one connecting train that runs a few hours during the day, and it can save a substantial amount of money.\n* If your //next// segment is in sleeper, you can use the lounge at larger stations that have one. How much of an upgrade this is depends a lot on the station. (If I had more than a couple hours layover at Chicago Union Station, say, I would pay for a day pass; CUS is a nice station but its quite busy, has uncomfortable seats, and sometimes has people coming around asking you for money while youre trying to work or read or whatever, and the lounge is really nice and has all sorts of free food and drinks, lots of different seating options including great desks, better wifi, etc. When I used the lounge at Portland recently, it was pretty much just slightly nicer chairs and free coffee and bags of chips.)\n* Roomettes are delightfully efficient, but be aware that they are //small//. Theyre very comfortable for one person. They can still be pleasant for two, but you need to know the other person; youre sitting staring each other in the face from a couple of feet away, changing will require someone to step out of the room to make space, and if someone needs to use the bathroom during the night the other person is definitely going to wake up. Family or best friend -- fine, no problem. Coworker you dont know well -- very awkward!\n\n\n!! Luggage\n\n* Carry-on:\n** The baggage policy officially allows two generously sized carry-ons and one personal item, which is around the maximum most people can carry.\n** This likely depends somewhat on what train youre riding (a half-empty Superliner is different from a packed Acela at Christmastime), but in 15 years of riding Amtrak, Ive never once seen or heard of someone getting denied boarding for having more or larger luggage than the baggage policy limits, and Ive personally carried larger-than-allowed items on numerous occasions without trying to hide it, including large musical instruments and fully-loaded hiking backpacks. They say the policy is “strictly enforced” on the website and in announcements, but this is complete B.S.\n** In general, the baggage policy can be reduced to “bring whatever you want on board, just be sensible.”\n** There are limitations on what items you can bring in your luggage, but theyre common sense (e.g., no guns in your carry-on). You do not have to go through a security checkpoint (there are security personnel in most stations and you can theoretically get spot-checked if someone is suspicious, but this is very uncommon\u003C\u003Cfnote \Its never happened to me in 50+ Amtrak trips, nor have I ever seen it happen to someone else. Im white and apparently look confident when I travel -- e.g., I often get asked for directions in places Ive never been before -- but Im also a young guy with a slightly unconventional appearance who usually travels alone, so Im guessing Im average to slightly below average likelihood of arousing suspicion.\>>), and nobody will confiscate your scissors.\n** In coach, there are three places you can put your luggage:\n*** Overhead luggage racks. On Superliners, these are surprisingly narrow compared to the general roominess of the train and they have an extremely large lip that blocks some items that would otherwise fit from getting inside. Theyll work for anything thats carry-on-sized on an airline and for some larger soft-sided items. If your bag will fit, its good manners to bring it up here to save space in the luggage racks for larger items. On regional trains, these are larger and the main place to put your luggage.\n*** Under the seat / at your feet. On regional trains, you wont want anything larger than a small day pack here; the seats are quite low to the ground and youll want the space between the seats for your feet. On Superliners, theres so much extra legroom you could put a full-sized carry-on at your feet if you wanted.\n*** Lower-level or car-end luggage racks. On single-level trains, there are racks at one or both ends of the car. On Superliners, there are some downstairs next to the main entrance. In either case, you can shove larger items here before going to your seat, and pick them up again when you get off.\n**** Do not start digging through your luggage at the luggage rack when you board -- the passage is very narrow and you are preventing other people from boarding! If you forgot to take something out that you need during the trip, go to your seat and come back in a few minutes after the train leaves.\n* Checked:\n** Checked baggage service isnt available on all trains, and even for trains that offer it, it often isnt available at all stations. The carry-on allotment is generous enough youll probably be fine if its not offered, but dont get caught out by not checking availability ahead of time.\n** You can check two items for free, with additional items available at a very reasonable price. Sizing rules are similar to most domestic airlines.\n** Generally, checking items only makes sense if you need a ridiculous amount of stuff (e.g., youre moving), or youre in a fully loaded sleeper compartment (see below).\n** On multiple occasions, Ive had the checked baggage counter close earlier than they said it would. If this happens, theyre going to tell you to take the bag as a carry-on, even if its larger than allowed (they know nobody will give you trouble!). Still, if you want to keep your large suitcase out of your sleeper compartment, you should plan to arrive a little earlier than they say to be sure this doesnt happen.\n** Ive never heard of Amtrak losing somebodys bag, although Im sure it happens occasionally; theres a lot less to go wrong than at an airport. At many stations you check your baggage trainside, so it cant get on the wrong train, and in any event there are fewer places for something to get misrouted or misplaced. That said, it is often kind of a pain to figure out where to check and claim it, and its sometimes quite slow to arrive. As always, its ideal to travel light enough that you dont have to check anything.\n* Perhaps unexpectedly, if youre in a sleeper you will want to bring less carry-on luggage. There is only a tiny luggage rack external to your sleeper, and no overhead space because thats got a bunk in it, so you have to cram all your luggage in the room with you.\n** Ive let my luggage ride in the upper bunk when in a Roomette alone before, but you end up with very little headroom during the day if you keep it there, so this isnt ideal.\n** Particularly in Roomettes, if you have more than two pieces of luggage per person it will be sitting in your lap, and limiting it to two total will make life much easier.\n\nSee also MiscellaneousLifeTips.\n\n\n!! Schedule\n\nNever expect a long-distance Amtrak train to be on time. Its not really a big deal when a 50-hour train ride is a couple hours late unless you have the wrong expectations -- you werent taking a train across the US if you were in a terrible hurry anyway, right? -- but you do need to be aware of it when booking, especially if youre taking a short ride of just a few stations near the end of a multi-day route, where there will have been plenty of time for any delays to accumulate. (Most of the timetables have a fair amount of slack in them, so its usually possible for minor delays to be made up; but not all delays are minor.) Certainly never schedule an appointment just after youre timetabled to arrive somewhere on Amtrak!\n\nIf you took my booking advice earlier, you signed up for text delay alerts. If youre driving or using reasonably high-frequency public transit to get to the station, should there be a delay, youll be informed that the train will be late by text, sometimes as early as the night before, and you can simply wait an extra hour or two to leave for the station.\n\nWhile Amtrak is infamous for being late, and not without good reason, the heuristic “Amtrak is late” masks a great deal of variation between routes and even seasons (trends in construction, weather, and freight traffic can all make a big difference). To estimate what the real timetable will likely look like for your trip, check out the third-party ASMAD|https://juckins.net/amtrak_status/archive/html/home.php (Amtrak Status Maps Archive Database) site as your departure date approaches, which will let you see how your specific train has performed in the few weeks prior.\n\nAs a rule of thumb, I prefer to avoid booking connections that require less than 3 hours of turnaround time after a long-distance segment, as theres a real chance youll miss it. Amtrak will rebook you for free if youre connecting with another Amtrak train, of course, but sometimes there simply arent any good alternatives for a while. (Also be aware that theyll find or charter a bus if theres no viable train connection within a reasonable amount of time, but if you get impatient and book one yourself without first checking with customer service, you may not get a refund.) On the other hand, if you check ASMAD when planning your connection and find the train has made it within an hour of the scheduled time on 98% of recent trips, you might go for a one-hour thirty-minute connection with little fear. Just do be aware that if you book in winter and are leaving in summer, say, the performance might be different then!\n\n\n!! On board\n\n* If its your first time trying to find your way around a train, remember to pay attention to which way youre walking with respect to the direction of travel -- look out the window and check whether youre going forward or backward. That way youll know which way to go back to your seat.\n* You can only make your way between double-decker Superliner cars on the top level. If youre downstairs, you have to go up first or youll be very confused.\n* Always use the handles to stabilize yourself when crossing between cars. There are a lot of pinch points that you very much dont want part of your body to end up in if the train hits a bump and you lose your balance.\n* If youre in sleeper, its nice, though not mandatory, to tip the attendant -- especially if they go out of their way to help you with something. $5--$10 a day is typical. Bring cash; they dont run charges for anything, so you wont be able to pay any other way. The easiest way is to hand it to them and thank them for a nice trip when you disembark.},{title:AmusingOurselvesToDeath1985,author:Postman,bibliography:LifetimeReading,caption:Amusing Ourselves to Death,created:20210703170128000,creator:soren,genre:Sociology,medium:book,modified:20211027034146660,modifier:soren,priority:2,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1985,text:Book by MrNeilPostman, I believe from the 90s-ish, and focusing on the TV and news culture of the time (probably even more relevant now).},{title:AnalogLove2023,author:Jesse Crossen,caption:Analog Love,completed:2025-10-09,created:20251010015505419,creator:soren,medium:article,modified:20260118032304935,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://hinterlander.substack.com/p/analog-love,year:2023,text:Article by MrJesseCrossen about his handfasting with Alex. A whirlwind tour through a lot of important ideas, beautifully written:\n\n* One of the problems with current dating culture, related to but not quite the same as the escalator|RelationshipEscalator, is that people feel like they must either be doing “casual” things where expressing any form of commitment is seen as a weakness, or “serious” things where they are laser-focused on finding someone to spend the rest of their life with, come hell or high water. (Is this the MissingMiddle of romance? Hmm.)\n* People often push to categorize relationships and to determine whether they will be Platonic or Romantic. But: “On the PLATONIC train you might stop finding the erotic in the ordinary, and on the ROMANTIC train you might stop welcoming the ordinary into the erotic. Between is play, alive and nourishing to connection. Maybe the conversation we need is not ‘what are we?’ but ‘how are we?’” Much more on this; I think this is a very important idea. Cf. RelationshipAnarchy (a distinct thing, but related).\n* An account of the handfasting ceremony (cf. TermMarriage).},{title:AnalysisParalysis,created:20200423175011055,es:likely,modified:20200712041552114,tags:Psychology Reasoning Public Idea,type:text/vnd.tiddlywiki,text:A cognitive issue that arises when one fails to come to a decision on something because the right answer is not obvious and one (seemingly) wants more information. (In reality, its more likely the decider knows at least subconsciously what the right answer is and just doesnt want to admit it.)\n\nCoinFlipClarity is an extremely helpful technique for resolving binary decisions that have fallen into paralysis. Another trick, especially for more complex issues, is to decree that the decision needs to be made in the next ten minutes.\n\nMrTeddyRoosevelt (\u003C\u003Crt 5661>>):\n\n> In any moment of decision, the best thing you can do is the right thing, the next best thing is the wrong thing, and the worst thing you can do is nothing.},{title:AnatomyOfMelancholy,author:Burton,bibliography:LifetimeReading,caption:The Anatomy of Melancholy,created:20210703170128000,genre:Literature,medium:book,modified:20210705214033959,priority:2,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:You do not need to read the whole thing to enjoy.\n\nLength: !!},{title:AndTheBandPlayedOn1987,author:Randy Shilts,bibliography:LifetimeReading,caption:And the Band Played On,completed:202208081200,created:20210703170128000,creator:soren,genre:History,medium:book,modified:20221108131844955,modifier:soren,priority:2,rating:good,readstatus:read,recommended-by:Time,tags:Source Public,type:text/vnd.tiddlywiki,year:1987,text:History of the HIV/AIDS epidemic from 1980 to 1985 by MrRandyShilts, from the first inklings that something was wrong to the point that it had exploded out of control and was widely known to the public (really coalescing at Rock Hudsons death in October 1985).\n\nThis is one of the most engaging books of history Ive ever read; even though you know roughly how its going to turn out (there are a lot of //oh, shit// moments early on where you can see the consequences of some minor discovery and the people involved cant), and a lot of it is about political maneuvering, it also follows people and their personal struggles and bounces back and forth between different places and angles in a way that keeps it exciting. I highly recommend it to anyone interested in epidemiology – which I feel like a lot of people suddenly are what with COVID having just happened! There are both many similarities and many important differences to what happened with COVID, and it seems likely to remain important as a way of understanding the dysfunction of government and public-health agencies in situations that should be emergencies and arent treated as them.\n\nThis landed on my lifetime reading list from a list of the best nonfiction books ever written; it deserves that place.},{title:AndyMatuschakNotes,bibliography:Zettelkasten,caption:Andys Working Notes,created:20200423021556245,description:Public ZettelKasten-like note-taking system, though he does not explicitly call it that (rather EvergreenNotes) and it incorporates some other ideas.,medium:website,modified:20210611024141535,rating:average,tags:Source Public,type:text/vnd.tiddlywiki,url:https://notes.andymatuschak.org/,text:Public ZettelKasten-like note-taking system, though he does not explicitly call it that (rather EvergreenNotes) and it incorporates some other ideas. This appears to be roll-your-own and based on Markdown, but involves some of the basic principles of TiddlyWiki (and I found out about it from a discussion on the TW forums).\n\n{{!!url}}},{title:Anecdote,color:#ff4d00,created:20200329174747346,modified:20200913014326415,tags:Meta Public,type:text/vnd.tiddlywiki,text:Tag for brief stories that make a point.\n\nThe plural of anecdote is not data, as the statistics saying goes; but one can still learn from anecdotes.},{title:AngelasAshes1996,author:McCourt,bibliography:LifetimeReading,caption:Angela’s Ashes (+),created:20210703170128000,genre:History/Literature,medium:book,modified:20210705214033990,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1996},{title:Anki,created:20200326021705987,modified:20200811221155921,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular SpacedRepetition software written by D.E.|PrivatePerson. Anki MakesMemoryAChoice.\n\nI did tech support for it from 2013 to 2017 during late high school and college, which was a wonderful little job. \n\n//Anki// means //memory// in Japanese.},{title:AnkiBibliography,bibliography:Anki,created:20200808152907607,creator:soren,modified:20251011164739681,modifier:soren,tags:Bibliography Public,type:text/vnd.tiddlywiki,text:\\procedure .top-hitter(headline, tiddler)\n\t\u003Cdt>\n\t\t\u003C$let url{{{ \u003Ctiddler>geturl }}}>\n\t\t\t\u003C\u003Cheadline>> (\u003C$link to\u003C\u003Ctiddler>>/>) \u003Ca class\tc-tiddlylink-external\ href\u003C\u003Curl>>>link\u003C/a>\n\t\t\u003C/$let>\n\t\u003C/dt>\n\t\u003Cdd>\n\t\t\u003C$transclude tiddler\u003C\u003Ctiddler>> field\description\/>\n\t\u003C/dd>\n\\end .top-hitter\n\n\n(Completeness status: There are valuable sources I know of and use from time to time that havent been added here. Everything that //is// on here should be complete and correct however.)\n\n\n!! Top hitters\n\nThese are the articles I find myself sending people constantly when they ask about spaced repetition. You should strongly consider reading them if youre serious about memory systems and you never have.\n\n\u003Cdl>\n\t\u003C\u003C.top-hitter \Andy Matuschak, `/prompts`\ HowToWriteGoodPrompts202012>>\n\t\u003C\u003C.top-hitter \Michael Nielsen, `/ltm`\ AugmentingLongTermMemory201807>>\n\t\u003C\u003C.top-hitter \SM 20 Rules\ TwentyRules>>\n\t\u003C\u003C.top-hitter \Gwern, `/spaced-repetition`\ SpacedRepetitionForEfficientLearning200903>>\n\u003C/dl>\n\n!! Full bibliography\n\n{{||$:/tzk/Templates/Topical/BibliographyList}}\n\n\n!! Tool help\n\n* Getting started with spaced repetition in RemNote|https://help.remnote.com/en/articles/6022755-getting-started-with-spaced-repetition\n* Understanding spaced repetition|https://help.remnote.com/en/articles/9337171-understanding-spaced-repetition (RemNote angle, but general)\n\n\n!! Misc\n\n* Various articles by me, Anki perspective, starting with: https://controlaltbackspace.org/know/},{title:AnkiCardAdditionProcess,created:20210104020930410,creator:soren,es:likely,modified:20210917204721410,modifier:soren,tags:Memory Process Public Idea,type:text/vnd.tiddlywiki,text:There are many different approaches one can take to collecting material for Anki cards. Im going to try to start gathering them here.\n\n!! When reading\n\nOne of the daily activities that will likely generate the most Anki cards is Reading. There are a lot of different ways you can handle it. Im currently (Jan 2021) actively experimenting with ways of handling this, but I think its unlikely a single \best\ way will emerge for all situations, even for me.\n\n* Read a portion of a book, then go back over it and add cards to Anki.\n** //Pros//: Least distracting as you read. Potentially gives you a chance to review what youve read again, which is probably good for comprehension.\n** //Cons//: You can easily forget what you intended to add or miss important items. (Marking spots in the book improves but does not entirely prevent this, unless you start writing questions in the margin, in which case youre basically taking notes and see that part.) Very easy to get lazy and never actually add anything at all, or do the first chapter and then skip the rest. Less effective than taking notes in helping you filter out which ideas are important and which arent.\n\n* Write directly into Anki as you read.\n** //Pros//: Immediate access to the text as you write. Cant get behind on doing it.\n** //Cons//: Takes away focus from the book. Makes it more likely that material that proves not to be that important ends up in your collection. Discourages you from reading at all because its extra work.\n\n* Take some notes as you read, then use the notes to decide what to add to Anki.\n** //Pros//: Allows a second layer of filtering out things you dont care about. Encourages more ActiveReading. Only moderate level of distraction from the text.\n** //Cons//: Slows down reading. Slows down entry because you typically have to cross-reference with the source text -- the notes are rarely sufficient to write all the cards you want. Notes can end up in a three-foot stack|ThreeFootStack on your desk rather than in Anki.\n\n* Run a VoiceRecorder in the background as you read and dictate questions and notes, then add them into Anki.\n** This is a newer technique Im just starting to try, mostly using https://otter.ai, which gives you a (rough) transcription and lets you quickly jump past silence.\n** //Pros//: Less distracting from reading than writing directly into Anki (but surprisingly a little bit more than taking notes, since you have to switch your brain into spaced-repetition-card-formulating mode and out of reading mode). Can easily make notes while lying in bed or in the bath. Comparatively fast and easy, so doesnt discourage reading as much.\n** //Cons//: Doesnt work well if reading in public. You still have to remember and take the time to cut and paste the text into Anki, edit your most poorly thought-out questions, and correct all otter.ais goofs. (Today it transcribed \Also on page 101, a word ‘rapine’\ into \Also on page 1018 word repaying our API nd.\ `nd` isnt even a word!). Thats faster than going from notes, but still takes some effort, and they can still pile up.\n\n\n!! For random life stuff\n\nHere I think its less about alternatives and more about ideas for how you can get yourself to remember to identify cards and add them.\n\n* Add immediately: Walk over to the computer or pull out your phone and punch something in when you have an idea. (I always keep Anki running in the background to make this easier. Sometimes I dont even bother tagging new notes and just go through the list of recently added things later.)\n* Write down a note reminding you to add something: This works, but I think it should be a last resort, because this often falls victim to the “three-foot stack of papers on the desk” effect described in the reading section above.\n* Stop and reflect on what you just learned: This is my favorite method and one I think a lot of people overlook. When you solve a problem or complete a task, take a minute or two to look back over it. What didnt go well? What new things did you have to learn? Are there a couple of prompts that could come out of that?},{title:AnkiCardPatterns,created:20200708013029321,description:Those creating spaced-repetition flashcards may find this pattern language helpful for identifying possible ways to ask questions.,es:confident,modified:20210623015618634,tags:Memory Public Design Metaphor Favorites Idea,type:text/vnd.tiddlywiki,text:Card patterns for spaced repetition are possible ways to structure a card or ask a question. Or, put more simply, theyre //kinds of things you can ask in a prompt//. Writing good prompts is difficult, and its difficult to know when youve written a good one, so learning some types of prompts people have found to work consistently can help.\n\nI suspect a good list of patterns, contributed by a wide array of people, will be valuable to newbies and experts alike. I am considering moving this out into a self-contained wiki where other folks could contribute and we could do more categorization. For now, this is what Ive got -- click a pattern to view its profile.\n\nIm trying to start with somewhat discipline-independent patterns, but ones for areas like language learning, math, medicine, etc., could be equally valuable if not more valuable for people studying those things.\n\n\u003Cdl>\n\u003C$list filter\tagSrPromptPattern!isdraftsortcaption\>\n\t\u003Cdt>\u003C$link to{{!!title}}>{{!!caption}}\u003C/$link>\u003C/dt>\n\t\u003Cdd>{{!!description}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n\nIf youre reading this on the web and have patterns to contribute or related ideas, please shoot me an email, {{$:/config/PublicContactInfo##email}}. I love to talk about spaced repetition!\n\n-----\n\nFor plans/ideas for this project and previous iterations of this tiddler, visit AnkiCardPatternsBackstage.},{title:AnkiCardPatternsBackstage,created:20210307231339450,creator:soren,es:possible,modified:20240302194643824,modifier:soren,tags:SpacedRepetition Memory Public Idea,type:text/vnd.tiddlywiki,text:See AnkiCardPatterns for the project/listing itself! If you havent been there yet, thats probably where you meant to go.\n\n\n!! The idea, and sources for more\n\nLike SoftwarePatterns, the SpacedRepetition community should put together some Anki/SRS flashcard patterns. Possible sources:\n\n* J.H.|PrivatePerson listed out some that he did for his German study -- UjAnkiCardTypes.\n* SiversSrProgramming201301 lists a few for programming.\n* AugmentingLongTermMemory201807 has some too, though not broken out in quite so nice a way I dont think.\n* JankiMethod, especially the second //Refined// post, discusses some interesting ones.\n* I can probably identify some from working through my collection, though I dont think Ive done virtually any work to actually codify these.\n* TwentyRules is not dissimilar to patterns.\n\nTheres a synergy/isomorphism with software patterns in that this is an orthogonal concept to note types, just like software patterns dont necessarily use language features designed for said patterns (though sometimes can be replaced by them).\n\n\n!! Pattern candidates\n\nThis is a real rough list, not complete in any way, shape, or form.\n\n* Relationship -- how do two things relate? (Complete graph and network mesh; tiddler list and filter expression)\n* Disambiguator -- call out several things in other cards you have difficulty keeping straight -- also, using one as a mnemonic for the other even; saying NOT X is not all that effective\n* Emphasizer -- pull out a piece of another card that you get wrong frequently (this is really more of a refactoring pattern than a design pattern)\n* Image occlusion or highlight asking what something is called (via SM)\n* Dual cloze (word/definition)\n* Example as paradigm (esp. with code in my experience; also language)\n* Integration (e.g., NATO phonetic alphabet spell-out cards)\n* Identifying a mistake youve made in the past (JankiMethod, among others)\n* Consequences/examples (OutSystems translates things to SQL, ergo you cant use actions in them)\n* Deenumeration -- instead of asking what the components of something are, simply make sure that you understand each component\n* Dealing with multiple names for the same thing? Multi-cloze generally does not work so well. Is there a better way?\n* Relate ideas (e.g., how does the z-score relate to the \\Sigma)\n* What does so-and-so think about such-and-such?\n* Produce mnemonic / use mnemonic\n* Multiple ways of asking the same question / redundancy\n* Cardinality (like AlwaysSometimesNeverPattern, its like yes/no or has/doesnt have but more detailed so better)\n* Items for fiction etc.: Actors; overlapping cloze for plot (or does this lack life? TryItAndSee)\n* Something for streets: whats an OK route, and whats not an OK route? (thinking of the spot where you cant turn right on 22nd & Hennepin, a mistake Ive made too many times)\n\nAspects of a topic:\n\n* attributes and tendencies, parts and wholes, causes and effects, significance and implications (h/t https://andymatuschak.org/prompts)\n\n\n!! Random thoughts\n\n* Do, or can, patterns help you to avoid AnkiOverfitting?\n* Would it make sense to tag patterns in my collection, for educational purposes? (Educational being educational related to the topic of Anki patterns. Anything Anki is educational in some sense!)\n* Like Indexing, its comparatively easy to make good Anki cards for yourself because you have more context|ImplicitFictionalContext and are more likely to know what you meant (though theres still you three years from now to consider). Creating cards that will also work well for others would seem a real skill. See GoodSharedFlashcards.\n\n!! Other stuff\n\nThere are a few other types of content we should include, like an explanation of the goal (creating paths between ideas/neurons, expressing relationships) which helps to motivate many of the patterns.\n\nModelsChoicepointsAndRelationships could become a pattern or something like it.},{title:AnkiCardQuality,created:20200705002305000,es:possible,modified:20210623015421291,tags:TheControlAltBackspace Memory Public Idea,type:text/vnd.tiddlywiki,text:A framework of Anki card quality.\n\nLow-quality cards:\n\n* Contain information you want to learn\n* Are largely correct and readable\n\n(Cards that dont meet this standard are awful-quality cards and should not be accepted into your collection under any circumstances.)\n\nIn addition, medium-quality cards:\n\n* Contain correct and useful information you want to learn\n* Are free of errors and typos\n* Ask only about ideas you fully understand\n\nIn addition, high-quality cards:\n\n* Cite relevant sources when appropriate\n* Are formulated according to the TwentyRules\n* Ask you to recall only information for which you have an obvious use in mind\n* Are formulated in a personally relevant way\n* Include mnemonics or examples devised by you when appropriate\n\nIts clear that high-quality cards will never be found in shared material, because they have to be //personal//. The better shared material will reach medium quality and perhaps partly into high quality, and it might be possible to upgrade it to high quality with some work on your part.\n\n----\n\nLow-quality material is generally not useful. Even if it could serve as a starting point, youll likely do better simply starting fresh and creating your own material -- that will help you learn the material better and yield a better product.\n\nMedium-quality material has its place. If youre going for volume and the subject matter is comparatively simple (e.g., vocabulary, capital cities, keyboard shortcuts for a software application), importing medium-quality content can be a useful time-saver and get material into your collection that you might never have gotten around to adding yourself. If youre creating your own content, though, do your best to start it at high quality.\n\nHigh-quality material, is, of course, the goal. The better quality your material, the more value you will get out of each card and the less time you will spend reviewing.\n\nSee also GoodSharedFlashcards on the difficulty of doing this for someone else.},{title:AnkiCatchingUp,created:20200705011531723,creator:soren,es:likely,modified:20211107173613387,modifier:soren,tags:Memory TheControlAltBackspace Psychology Public Idea,type:text/vnd.tiddlywiki,text:We know from WhenToLearnWithAnki that you should be reviewing every day. But it happened: you missed a day, or a few days, or a month. Life happens. Unfortunately, when you come back, youll likely have quite a mess to deal with. (Thank your memory for forgetting things at random when you dont review them.)\n\nAn important note: if youre using Anki and you havent messed with the settings much, you might actually not notice a scary number immediately -- it might just say you have 200 reviews and leave it at that. By default, Anki decks have a //daily limit// of 200 reviews per day to avoid scaring people in exactly this situation -- if there are more, the number doesnt show up. But youre already reading this page and know not to be freaked out into giving up on Anki forever. To figure out how to best handle your backlog, youre going to want to know what youre dealing with. So if you have a daily limit set on your deck, lift it: open your deck options, choose the Reviews tab, and up maximum reviews per day to 9999. In some strategies, you might want to drop it down again, but you dont want to just blindly leave it at the default or you might not realize that you havent actually caught up!\n\n\n! What not to do\n\nFirst, in the immortal words of MrDouglasAdams, dont panic. No matter how far behind you are, you absolutely can get caught up again. It probably wont even be as hard as you think, and we can use some planning and psychology to make it easier.\n\nSecond, dont reset your deck and remove the scheduling history for all the cards that are behind. Although it may be tempting since it gets rid of all the overdue cards, this is absolutely never a smart move, because no matter how far behind you are, there are going to be //some// cards that you remember well, and you lose their progress when you reset the deck. For weeks or months afterwards, youll be wasting your time clicking \Easy\ on \new\ cards you already know! Resetting history makes things look better but makes your situation even worse.\n\n! Strategies by backlog severity\n\n!! One day\n\nIf you just missed a day, my favorite strategy is the Nike strategy: //Just do it//. Your number looks a little higher than it should, but so what? Put on some good music that doesnt distract you too much, grab yourself a hot beverage, and sit down and do the reviews. Youll be through it soon enough. No big deal...but enough of a deal that youll try not to do it again.\n\n!! A few days\n\nIf you get up to a couple of days and you use Anki more than lightly, you probably wont be able to get through the entire backlog in one sitting, or even one day. (I once did over 2,000 reviews in one day because I was way behind and just wanted to get it done with, but it took me almost the whole day, and I was being pretty crazy!)\n\nI think this timeframe is the most suited for improvisation in catch-up methods, so pick from these three or make up your own.\n\n!!! Daily limit\n\nThe simplest option is to set the daily limit (see the beginning of this tiddler) to a number of cards you can stomach, and do that number of cards every day until youre caught up. If youre just a couple of days behind, this will probably work fine, and its easy.\n\n!!! Suspend overdue cards\n\nA more complicated but potentially more attractive option is to suspend all of the cards that are overdue, pretending they dont exist, and review all the cards that are due on each day going forward. Then every day you unsuspend and review as many of the overdue cards as you can handle until you have them all back in circulation again. This is particularly nice psychologically: it matches the \stop the bleeding\ philosophy used in many systems that are susceptible to CascadingFailures. For example, if an airline is suffering flight delays or cancellations, they will usually avoid rerouting or delaying any passengers who havent already been affected to get someone whose flight has been canceled to their destination. This means the people who are delayed might have to wait even longer, but it contains the failure, preventing the mess and misery from causing further issues at other airports down the line. In a similar way, you can carry on with your Anki reviews as if nothing is wrong, preventing you from getting discouraged and stopping your reviews (thus making the problem even worse), and work in the overdue cards where you can. Youre more likely to forget the overdue cards, but at least you wont get any further behind.\n\n(To suspend all overdue cards, search for `prop:due\u003C0` in the browser, give all those cards a tag so you can find them to unsuspend them later, and suspend them.)\n\n!!! Relative overdueness\n\nIf you can handle a little less psychological safety, its possible to do better than either of these methods. Anki shows you cards in normal decks in totally random order, so you might end up reviewing cards that you have very little chance of forgetting (say, ones with an interval of years) before cards that you urgently need to see immediately (ones with a three-day interval that are due today). This means youll likely end up forgetting some cards you wouldnt have had to forget.\n\nAn easy way to address this issue is to create and study from a filtered deck sorted by \relative overdueness.\ This orders the cards due for review by the ratio between the number of days theyre overdue to their total interval. So a card that has an interval of 5 years and is overdue by 10 days will come well after a card that has an interval of 3 days and is overdue by 1 day, because the first card is only about 0.5% late, while the second card is 33% late.\n\nThis method is particularly useful if you know you arent going to have enough time to make much progress on your backlog today but do have a chance to do something: you can at least arrest the forgetting of the most vulnerable cards, making it less harmful to leave the remaining ones.\n\nThe downside of this approach is that unless you take other actions to hide it, you can still see all the cards that youre behind on, and you dont get a chance to get \caught up\ again until you clear your entire backlog. If you dont mind moving some of your cards into different decks temporarily, you could combine this with the suspend method, but it gets messy because filtered decks dont select cards that are suspended.\n\n\n!! A couple of weeks\n\nIf you use Anki seriously, now you have more than a thousand reviews. (If you have fewer than five hundred, go back to \A few days\ -- the strategies there will work fine for you.)\n\nYour first step is to prioritize -- are there decks or tags that youre more likely to forget, or that you need more in the short term? If so, those are your first priority. You also may want to think about balancing the difficulty of your material; if some material is way harder than other material, its probably best to mix it in rather than leaving it to the end, or you might struggle to ever catch up on it.\n\nIf you have some material in your collection you dont really care about anymore, now is also a good time to delete it -- theres no point in spending effort to relearn something that you dont want to remember anyway!\n\nAt this point, our overriding concern is making sure we see our progress and dont get discouraged. What were going to do is take all of our content out and gradually reintroduce it as the workload becomes manageable. Start by moving all of your decks under a new superdeck called \Unused\ or \Inactive\ or something to that effect. Change the options group on that deck to have 0 reviews and 0 new cards per day: voila, you now have 0 cards due! Now, pull your highest-priority deck out of the Inactive superdeck again and work your way through that. Every day, do all the reviews that show up except for the one deck youre busy trying to work your way through, then dig as far into that one as you can. When you catch up on that deck, grab another one. As long as you keep doing this every day, soon enough, youll be done.\n\nIf you have a large deck with many hundreds of cards due, you might want to either apply one of the strategies from the \A few days\ section, or simply create a second deck with the same name and gradually move chunks of cards from the unused deck into the active deck until youve moved them all.\n\n\n!! Enough to make most of your collection due\n\nYou left spaced repetition alone for a few months or years, and now youre coming back. You might find that now a majority of your collection is due, and that could be thousands of cards. Hopeless?\n\nWell, were beyond panic at this point, its more like resignation. But its not time to declare bankruptcy, because theres still a lot of useful information in that collection! Further, since so many of our cards are already due, its already close to as bad as its going to get: unlike when were only a day or two behind, a rather low number of additional cards -- maybe low enough to count on one hand, depending on exactly how far behind you are -- become due each day. Coupled with the fact that whatever cards you still remember (which is likely more than you think) will immediately get high intervals that prevent them from coming back until youve finished catching up, this means you can actually work through the backlog much faster than you might expect -- your daily due reviews contain almost exclusively the cards youve forgotten and are relearning, and the backlogged pile isnt growing.\n\nFor the most part, the strategy in \A couple of weeks\ will still apply to you. However, prioritization is even more useful now. Since youve been away for months, take this opportunity to look over your collection with a discerning eye and remove any material thats outdated or no longer useful to you. A couple of hours now could save you a lot of pain and relearning time. Also, consider removing leeches or near-leeches and material with low eases (say, below 160%) -- these will be the hardest cards to relearn, so if you can determine many of them are not worth it, your journey will get much easier.\n\nAnother useful trick is to pull all the cards that //arent// due from the delayed decks first. This way, you dont get any further behind on those.\n\nIt may also be nice to start with the decks or categories of material that are smallest to help you see your progress. This is a long journey, so it helps to get some positive feedback along the way.\n\nGood luck!},{title:AnkiDebtPlan,created:20200703221708553,modified:20200828174359136,tags:Information Memory Psychology Public Idea,type:text/vnd.tiddlywiki,text:I currently have just over 17,000 cards due (thats roughly half my collection of 34,140). The most Ive ever come back from is a couple thousand. This calls for a new plan, besides \blast through it\, which has worked well in the past but seems exceedingly unlikely to succeed here. (Ive managed deficits of 2,000-3,000 cards with the \blast through it\ method.)\n\nI see this as rather like getting out of monetary debt. Lets consider those tools as a counterpoint.\n\nOf course, one option would be to declare bankruptcy, but theres still a lot of stuff in here that Id like to know, so I dont think thats a good option. And as well see by the end, even this backlog is not remotely insurmountable.\n\n!! Negotiate\n\nTheres probably some stuff I dont //need// to pay down, because I dont want to remember it anyway. Lets start by whacking that stuff. More precisely, Im going to move it to a superdeck and export it, just in case I ever need to reference it again.\n\n!!! Decks\n\nThe easiest thing to discard are decks I dont need anymore:\n\n* Lojban (a few dozen; its been so long that if I ever want to learn anything about the language Ill have to start over anyway)\n* Emacs (I dont use it anymore)\n* A set of very difficult cards about abstract algebra\n* Information on a former job at the StOlaf IT Helpdesk (e.g., faces and phone numbers of staff, how to use the voicemail system)\n* Some stuff I once imported thinking I might want to integrate it into my collection\n* Results of some experiments with the Anki IncrementalReading add-on\n* Technical information about NetHack, which I no longer play frequently enough to make it worth memorizing this info\n* A deck of cards I believed to be incorrect (why I didnt just delete these is beyond me)\n* World geography -- I liked these, but in retrospect they took much more time to learn than theyre worth to me.\n* Some encrypted questions about my security setup -- the encryption made these a giant PITA to review.\n* Briefs from my MachineStenography dictionary. Ive had to stop doing steno, in all likelihood permanently, because it seems to not fit my body very well (damaging my elbows). Its a shame because I really liked it as an input method and it was actually pretty fun too, but definitely not worth my health!\n* Flashcards for an insurance certification that no longer makes sense to sit for in my current job.\n\nThis brought my collection down to 24,568 cards, 14,905 of which are due. So it didnt cut the due cards down that much, but still good riddance to some stuff I didnt need anymore. Its important to do some deleting in your Anki collection just like in your brain. :)\n\nI further did a full database check, empty-cards check, and deleted all the now-unused media, and did a full upload to AnkiWeb (this being required after the preceding).\n\n!!! General cleanup\n\nNext, my structure of decks and tags and note types may not be most appropriate for me anymore. Time to clean that up.\n\n* Removed many tags that are not particularly useful.\n** MinimalTagging for my philosophy here.\n** E.g., I had a lot of tags that indicated what part of a college class or what exam the cards were associated with, which was very useful while I was taking the class but will never again be relevant information.\n** Others were just things I wouldnt need to search for, or which need is better served in a different way (e.g., listing the authors of poems).\n\n* Deleted note types I no longer need.\n** Incremental Reading\n** IT Personnel\n** A junk LPCG type probably created by a bad sync\n** Steno\n** Old copies of the TiddlyRemember stuff\n** Geography\n\n* Merged note types. For a while I think I was using them as an organizational method, but I dont think this makes much sense anymore -- witness all the items which can be moved to a simple one-sided note!\n** APUSH > 1Side\n** APUSH::Timeline > 1Side\n** Computers > 1Side\n** English > 1Side\n** English::Misspelled Words > 1Side\n** German::VHS > 1Side\n** German::Gender Roles > 1Side\n** Speedwords::Grammar > 2Side\n** Speedwords::Words > 2Side\n** `German::OldSystem`:\n*** Ones with the `Reverse` field filled: > Basic2Side\n*** Otherwise: > Basic1Side (some of them are bad clozes, but not worth fixing them)\n\n* Review high-lapse cards.\n** `prop:ivl\u003C120 prop:lapses>12`\n*** Aside from 4 I deemed unremovable (3 of them being fragments of poetry), these got flat-out deleted with the remainder of their notes.\n** `prop:ivl\u003C120 prop:lapses>8`\n*** I tagged about a quarter of these `Criticality::Unremovable` or `Criticality::Useful` and whacked the rest.\n** Cleared the `leech` tag from all cards, swapping it to `FormerlyLeech`.\n** All suspended cards were then unsuspended.\n\nFrustratingly, after this, while my collection went down to 24,205 cards, I now have 15,555 cards due...a significant //increase//. Thats because of all the unsuspensions.\n\n!!! Deck trimming\n\nWent through my decks of miscellaneous information, sorting by ease, and considered removing anything of less than 180% ease. I skipped over some of the languages for now -- Latin is going to be hard going in particular here.\n\nCollection reduced to 23,732, 15,113 due.\n\nThis didnt cut down the //numbers// as much as I would have liked, but I am hopeful that since I removed some of the most difficult cards, catching up will be easier than it might look now from the numbers.\n\n!!! Deck reorg\n\nTo make it easier to pick decks to include, Ive at least temporarily flattened the tree of decks for all except Latin and Speedwords (which I might actually want to flatten, too), leaving only topic decks like \Applications\ and \Acoustics\ and so on, no discipline subcategories. I also merged some decks, something that I tend to do over time anyway since I often eventually stop adding to decks that Im not currently studying, and studying a bunch of decks with a handful of due reviews every day is really annoying.\n\n\n!! Stop the bleeding\n\nAn important principle here is the following: once a card gets out of the stack of \behind\ cards, it needs to not go back in that stack. If we were paying off lines of credit, we would stop charging anything there once we paid it off. Similarly, if we were an airline dealing with flight delays, we would do everything in our power not to allow any additional passengers to get delayed -- if theres nothing preventing a flight from leaving on schedule with all the original passengers, it goes, nobody gets bumped to make room for people who are delayed. We figure out how to get the delayed people where theyre going without dragging additional people into the mess.\n\nThis suggests that we need to gradually move cards into a \review\ rotation. An easy way to limit the number of cards we do per day is the \daily limit\ functionality. This works fine when there are only a few hundred cards total and were motivated to work through them for a few days, but this isnt very workable with 15,000 overdue cards with several thousand in some decks, because Anki doesnt order the cards with the \dug-out\ ones first. Thus, you might remember one, and then itll be weeks before you see it again, causing you to forget it again. While this probably wont be an //infinite// cycle, it will cause us to pay way more than we have to.\n\nThus, we need a clear way to gradually move not just decks but individual cards into the rotation.\n\n!! Ordering\n\nIf we think in debt terms again, I think a snowball method is most appropriate here, to a point. While our decks probably do have different \interest rates\ in that some of them will be more quickly forgotten than others, I dont think I have any way to compute this, and anyway many of the cards in them are so far gone that the differences probably converge on just about nothing. The quick win of getting caught up on decks is much more useful. So doing the decks with fewer overdue cards first is probably a smart idea.\n\nHowever, as much as I would like to order the cards by inverse difficulty to smash through more cards, for instance by ordering by highest intervals first, I think this is a profoundly stupid idea: itll go great for a while, and then itll get infuriatingly difficult and Ill never finish (and there wont be any way to make it easier again). Better to spread the pain out here.\n\nOne interesting strategy Ive used in the past is to slam through cards, setting aside any that Ive forgotten to go over later, with the intent of getting through as many that I still remember as possible and getting them back in the cycle. I dont think this is a good plan here, for two reasons: one, most of the ones I remember are at this point so far gone that a few more weeks isnt likely to make a significant difference to my memory (of course there will be //some// that Ill forget that I would have remembered, but not all that many), and two, it has a similar problem to the inverse-difficulty situation mentioned above.\n\nSo, Im thinking cards in random order within decks released in batches, relearn them as they need to be relearned, and decks introduced, generally, smallest first. However, that order may be modified by difficulty and urgency.\n\nIve already started a few decks:\n\n* English\n* German\n* Otralin\n* People\n* Poetry\n* Rust\n* Sociology\n* TiddlyRemember\n\n(Rust and TiddlyRemember are actually new since my hiatus.)\n\nHowever, only Otralin, People, Rust, TiddlyRemember, and Sociology are actually paid off; English and German have giant backlogs of thousands of cards hiding behind a 60-card daily limit. Ill need to address that. (Poetry isnt paid off either, but it only has about 100 lurking cards, so if I do nothing at all Ill pay it off within a couple of days, not long enough to bother changing anything.)\n\nI separated the collection into three top-level decks: Collection (debt has been paid off, should be reviewed in full every day), Paying (accruing interest, however many cards you can handle get moved in to the matching Collection deck every day), and Waiting (not being pulled into Paying yet). I moved English and German back out of Paying into Waiting since my approach is being reconsidered.\n\nPaying and Waiting are set to an Inactive options group with 0 reviews and new cards, so as to make the daily due numbers show useful figures (otherwise it will always just say 1000+ on my phone, for instance).\n\nHeres my rough ordering on the decks (depending on the balance of when cards were added, the values may change a wee bit between now and when I get to pulling them). I might tweak them a little too just depending on what I feel like.\n\n* X SR Theory (64)\n* X Alphabets (196)\n* X Acoustics (136)\n* X Architecture (168)\n* X Coding (241)\n* X Statistics (385)\n* X Applications (428)\n* X Kitchen Sink (489)\n* X History (842)\n* . Psychology (710)\n* . English (2614)\n* Systems Design (728)\n* Speedwords (1666)\n* German (3062)\n* Mnemonics (207)\n* Latin (2844)\n* Procedures (29, but not traditional cards, things like tying knots)\n* Algebra (227, not even entirely sure I want to bring this back in)\n\n!! Daily routine\n\n# Complete all cards in Collection that are due today. This will be comparatively quick.\n# Open the decks in the Paying section and use \Change Deck\ to move some due cards into the deck of the same name in the Collection section, to make about 300 reviews for the day. If you can handle more, cool, go for it!\n# If you run out of due cards in the Paying section, move any non-due cards into Collection as well and delete the deck from Paying. Then pull a new deck from Waiting. It may be psychologically helpful to have more than one deck, so you can pick what seems most interesting.\n\nWhen moving a new deck into Paying, any cards that are `prop:due>0` (in other words, not yet due) should be immediately moved into the Collection deck. This will allow them to still be reviewed on time no matter what. This wont make a very big difference since only a handful of cards are still becoming due at this point, but it takes about 15 seconds to do, so if it saves a single forgotten card its worth doing.\n\nIm interested in what rate of pull-through I get. It depends on the fail rate of what Im pulling in, of course.\n\n!! Calculations\n\nI have 15,000 due cards in the due section. Almost all of them are due already, which means they wont continue to increase very much! In fact, lets just suppose they //all// become due by the time I get to them. Thats about 16,600.\n\nI am betting I can pull around 150 new cards per day. Right now I have 60 due cards tomorrow in Collection, but I can expect that to grow somewhat as more cards get pulled in. If I can maintain 150 review plus 150 paying every day -- which I think I can, at many points in my life Ive done about 300 reviews per day -- thats 110 days or about 4 months if I study (almost) every day. Even if it goes a bit slower than expected, Ill be caught up by the end of the year.\n\nChallenge? Yes. Doable? Surely.\n\nI might throw in some extra study, too; the nice thing is that studying more cards will scale just about linearly since nearly all the cards are due! But I need to be careful to leave off while I still want to do more whenever possible. The PowerOfKonsistency is going to be way more important with this many cards than the raw number of cards I work through on any day.},{title:AnkiLeeches,created:20200704204023276,es:possible,modified:20200728222753228,tags:Memory TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:One of the foundational principles of SpacedRepetition is separating easy cards from hard cards. We can then review the easy cards rarely and the hard cards more often. This is great.\n\nUnfortunately, some cards are not just hard, but //really// hard -- so hard that if we dont do something about them, they can consume a ridiculous amount of our study time. This is an example of the EightyTwentyPrinciple; a few percent of the most difficult cards can end up taking fully half of our review time. The spaced-repetition community calls these cards //leeches// because they suck away your study time.\n\nAnki identifies a card as a leech for you when it notices that youve learned and then forgotten the card a total of eight times (this threshold is adjustable). By this time, youll likely have reviewed the card several dozen times. It will then tell you it found a leech and suspend the card so it doesnt show up for review again until you take some action. At this point, its up to you to decide what action is appropriate.\n\nI like to use David Allens 4 Ds of Time Management as a framework for leech management. People have different preferences about the ordering of the 4 Ds, but this is the best ordering for leech management:\n\n* Delete\n* Delegate\n* Defer\n* Do\n\n!! Decision framework\n\nHeres a set of questions to ask yourself, in order, when processing a leech. You dont have to follow it exactly, but it cant hurt to keep the list by your desk until you develop an intuitive understanding of how to handle leeches.\n\n* Is there an obvious reason I am frequently failing this card?\n** For instance, perhaps its unclear what the question is asking, or it does not follow the Minimum Information Principle. If so, fix that by making the card more precise. \n** //If so//: Edit the card and put the original card back in review. Occasionally, you may also have to add several new cards, if the question was too large.\n\n* Can I shore up this question by adding additional cards?\n** Leeches often occur when you dont have a clear handle on the difference between two words or other similar items (technical term: //memory interference//). You may regularly give the answer to one for the other, causing both of them to become leeches. But if you add another card asking you to distinguish between them, suddenly all three cards may become easy. This feels magical, but it often works.\n** You may also be missing some basic context needed to understand the topic well enough to answer the question (rule #1: Do not learn if you do not understand!). In this case, doing a little bit of research and adding additional cards to complete your understanding can rescue your leech.\n** Sometimes a part of the question can be extracted. For instance, I kept forgetting the German word //halbkugelig//, meaning \hemispheric\. 31 reviews and 8 lapses later, I realized that I didnt know that a //Kugel// was a sphere or ball, and once I learned that, the original card became dead easy.\n** //If so//: Add one or more new cards, and put the original card back in review.\n\n* Is this card really asking what I want to know about the topic?\n** Perhaps youre asking the question in a difficult way (for instance, as an enumeration), but you could recast it in an easier way without missing out on much. If so, edit the card appropriately and put it back into review, or create new cards and delete this one.\n** //If no//: Add one or more new cards, and/or edit and put the original card back in review.\n\n* Is this card critical?\n** If theres no obvious problem with the card -- its just //hard// -- consider whether you cant just chuck the card and reallocate your scarce study time to material you can learn more easily instead. Often its not worth continuing to hammer something into your head that just isnt taking. More on this below.\n** //If not//: Delete the card and dont look back.\n\n* Do I need to know this card //now//?\n** Especially if youre trying to learn a large amount of information before a looming deadline, if this card isnt particularly high-priority, you might prefer to suspend it temporarily until youve worked your way through the higher-priority material.\n** //If not//: Leave the card suspended and yourself in a state of ignorance until you have time to find a better way to learn the card.\n\n* Can I develop a mnemonic for this card?\n** If the card is critical, doesnt have anything wrong with it, and you urgently need to know it, do some work devising a good trick to remember it, and perhaps add other cards to help you remember the mnemonic.\n** In practice, youll rarely get to this point (though this is not to say you cant or shouldnt consciously apply mnemonic devices to help you remember cards that dont become leeches).\n** //Solution//: \n\n\n!! Edit\n\nMany cards become leeches because theyre not precise enough. As you get more practice with using Anki, youll likely start noticing these cards and fixing them before they become leeches. But sometimes you wont, and at the beginning it may not be so obvious.\n\n!! Delete\n\nAt first, many people find the idea of simply deleting difficult material to be strange or even absurd. To some degree, it may feel like dishonorably \giving up\ as soon as we encounter resistance. But I suspect its mostly because our experience with organized studying is typically in an academic context, where were likely to be graded on our knowledge of a specific ordained set of material. Thus, we feel that if we have created flashcards for the material, wed better learn that material.\n\nThis is rarely how it works in the real world, though -- and actually, its often not how it works even when youre studying for an exam. The primary goal is usually volume: you want to learn as much useful information as possible in the amount of time youre willing to put towards studying. This means that if one card is taking up an unreasonable amount of your time, and by deleting it you can learn several other useful pieces of information, thats probably a good trade, unless this card is unusually important.\n\nHeres the math. SuperMemo’s theory page|https://www.supermemo.com/articles/theory.htm finds that removing the most difficult 10% of your material can improve your learning efficiency by up to 300%. Think about that for a moment -- by punting on the hardest tenth of your material, you can learn three times the amount of material in the same amount of time. Moreover, removing the most difficult material will make your study sessions more pleasant and keep you motivated. That hardest tenth of the material had better be pretty darn important to make it worth keeping!\n\nSo, unless a leeched card is critical, you should probably just delete it. Generally, there are two ways a card might become critical:\n\n* The particular piece of information the card contains is critical in itself (e.g., youre certain youre going to be tested on it, or its an important building block for many other things you need to know).\n* The piece of information is an essential part of a larger whole that you want to memorize (for instance, a line of a poem).\n\nIf your card is critical, youll need to keep moving. I like to also tag the note as `Critical` -- this way, if I am looking through leeches or otherwise-difficult cards again in the future, Ill know that this card should be excluded from any mass deletions I might consider running.\n\n\n\n!! Delegate\n\nYou probably cant actually hand your card off to someone else to memorize for you, but you can edit it (or heck, have someone else edit it) to make it easier on yourself. If your card is poorly formulated, it may be needlessly difficult. You may be able to fix the problem by changing the card or creating several new cards to replace it.\n\n\n!! Defer\n\nIf you dont feel comfortable deleting a card and editing it doesnt seem practical or likely to help, it may make sense to leave the card suspended and come back to it later. For instance, suppose youre trying to learn 2,000 items for a professional certification exam youre taking in three months. You probably dont know for sure what your workload will look like over those three months and how much time youll have to study, so if you find leeches, it makes sense to set them aside so you can keep crunching through the rest of the material as quickly as possible. If you work your way through all the other items with time to spare, then you can unsuspend the leeches and decide whether to relearn them, reformulate them, or just delete them and accept that you might miss those few questions if they come up. If you dont make it to the end, then youll have learned more material and youll presumably do better on the exam than if you tried to keep working on the leeches.\n\nLeeches can also occasionally be caused by memory interference, where some other card youre studying feels similar but has an entirely different answer. In this case, deferring one card until youve learned the other thoroughly may actually fix the problem.\n\n!! Do\n\nIf youve exhausted all your other options, then you might choose to simply unsuspend and keep reviewing the leech. This is a last resort; the majority of leeches put back into circulation without any action will just keep consuming time and become leeches again. If youre going to take the //Do// approach, its wise to at least come up with a good mnemonic for the card.},{title:AnkiLesson,created:20200410144142244,creator:soren,es:likely,modified:20201205034656274,modifier:soren,tags:Employment PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:I learned a lot of useful things from helping out on the Anki forums during my late high school and college years. Certainly, plenty about software, but also about InterpersonalRelations and running an OpenSourceSoftware project and so on.\n\nThe UniversalSuggestionResponse is one of my favorite insights. I have not had a whole lot of opportunity to apply it since leaving, but Im sure it will come in handy some day.\n\nAnother important realization, which everyone knows to some extent but perhaps only intellectually|KnewItIntellectually, is that you cant PleaseEveryone under any circumstances.},{title:AnkiLifetimeCardCost,created:20200802220712561,modified:20200802223344296,tags:Memory TheControlAltBackspace Math Public Idea,type:text/vnd.tiddlywiki,text:* Gwern runs up with a lifetime acquisition cost of 1.8 minutes. https://www.gwern.net/Spaced-repetition#how-much-to-add\n* SuperMemo says 200-300 items/year/min, which is 0.54 - 0.82 items/day/min, suggesting 1.2-1.9 minutes. (Gwern uses this source as well)\n\nWhat about experience? Heres a quick summary of my collection on many of the data points, considering only cards with an interval of greater than 365 days:\n\n```\n ReviewTime Reps Lapses Ease Interval SecondsPerRep \n Min. : 0.03055 Min. : 2.00 Min. : 0.0000 Min. :1300 Min. : 366 Min. : 0.3137 \n 1st Qu.: 0.30125 1st Qu.: 6.00 1st Qu.: 0.0000 1st Qu.:2366 1st Qu.: 1156 1st Qu.: 2.6412 \n Median : 0.56088 Median : 7.00 Median : 0.0000 Median :2650 Median : 1796 Median : 4.0236 \n Mean : 0.94442 Mean :10.69 Mean : 0.8194 Mean :2631 Mean : 2195 Mean : 4.9184 \n 3rd Qu.: 1.14410 3rd Qu.:11.00 3rd Qu.: 1.0000 3rd Qu.:2953 3rd Qu.: 2737 3rd Qu.: 6.1427 \n Max. :20.50447 Max. :99.00 Max. :36.0000 Max. :3603 Max. :13012 Max. :138.4567 \n```\n\nI chose a year because at that point its safe to assume a majority of the cards lifetime review cost has already been paid; the theory page suggest as low as 14% might remain.\n\nSo far, my review time is average 0.94 minutes per card. With the above assumption, that strongly suggests its reasonable to assume 2 minutes as an upper bound on the average.\n\nIts interesting to note that the median number of lapses is 0. A large proportion of cards //never// lapse (again, this isnt lifetime yet, but its 10 years in, and other people who have gone before me have shown that the characteristics do not seem to change in the far end). 75% of cards have lapsed no more than once.\n\nIn fact, reps, lapses, review time, and interval are all strongly right-skewed. Of course, reps, lapses, and review time are positively correlated pretty strongly. Ease has an interesting distribution, generally left-skewed but with a jump at 130% because ease is artificially floored at 130%.\n\n\n!! Data appendix\n\nI got the data from a SQL query:\n\n```sql\nSELECT CAST(SUM(revlog.time) AS FLOAT)/60000 as t, notes.id, notes.tags, decks.name, cards.reps, cards.lapses, cards.factor, cards.ivl\nFROM revlog\nINNER JOIN cards\n ON cards.id revlog.cid\nINNER JOIN notes\n ON notes.id cards.nid\nINNER JOIN decks\n ON cards.did decks.id\nWHERE cards.ivl > 365 -- 1 year\nGROUP BY cid\nORDER BY t DESC;\n```\n\nProcessed with some Awk magic:\n\n```\nsqlite3 Soren\\ Bjornstad/collection.anki2 \u003C~/test | awk -F | BEGIN { OFS FS; print \ReviewTime|NoteId|Tags|Deck|Reps|Lapses|Ease|Interval\; } { gsub(/^_/, \::\, $4); print } >~/records-1yr.psv\n```},{title:AnkiMaintenanceSteps,created:20200810191301101,es:likely,modified:20210522230843749,tags:Memory PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Like your car or bicycle, its helpful to do some regular maintenance on your Anki collection to keep it smoothly feeding your brain with good input. Here are some tasks to think about in particular.\n\n!! Once a week\n\n* Fix cards that youve marked as problematic.\n** Search for `tag:marked`.\n* Decide how to deal with any AnkiLeeches that have been flagged and suspended.\n** `tag:leech`\n\n!! Once a month\n\n* Check the database, clear empty cards, delete old media.\n* Look for cards that have been added recently and have already accumulated more than a couple of lapses.\n** e.g., `added:60 prop:lapses>2`. Pick your own values based on what makes sense.\n** This might make you go \Oh yeah, Ive been having trouble with that one,\ and point out gaps in your understanding or cards you could stand to rewrite.\n\n!! Twice a year\n\n* Scan through your list of note types and merge any that are essentially the same or that are no longer used. (This can happen when you import many shared decks.)\n* Check that your add-ons are up-to-date and disable any that you dont use (cf. NoCodeAtAll).\n* Review whether your deck and tag structure is still serving your needs.\n* Review whether you have content in your collection that you no longer care about remembering (cf. WhatToLearnWithAnki).\n** You can either suspend or delete this information. If you suspend it, you can always choose to relearn it later, or treat it as reference material you can search for. But if you really dont care anymore and dont expect you ever will again, you can just delete it. (A good idea in that case is to export it to an apkg file before deleting -- then if you realize you made a mistake, you can always import it back.)},{title:AnkiMobile,created:20200711235404526,modified:20200711235448057,tags:Product Memory Public Idea,type:text/vnd.tiddlywiki,text:The iPhone app for Anki (specifically, its called //AnkiMobile Flashcards//). Notable for costing $25, rather more than most apps. An excellent app, however, and Ive probably gotten 100 times that value out of it over the past 8 years or so.},{title:AnkiOverfitting,created:20200708155830847,creator:soren,modified:20211208165119445,modifier:soren,tags:Memory Public NeedsAttention Idea,type:text/vnd.tiddlywiki,text:Anki optimizes your memory of the information you put into it. However, it is a strongly GarbageInGarbageOut algorithm. If you put in material that isnt useful or doesnt test the things you want to know, it wont help anything at all. In fact, its interaction with your memory is rather like the proverbial genie: specify what you want to know in the wrong way, and youll remember something thats of no practical use|Overfitting.\n\nFor instance, I recently found a card with an interval of several years in my collection asking how you make the `cp` Unix command ask for confirmation before overwriting existing files. I easily and correctly answered, “use `cp -i`”, but I had completely forgotten that `cp` //had// such an option in the first place, so I would never have thought to use the option and this knowledge had no value.\n\nIts also fairly common for the phrasing of a question or a weird artifact on an image to be what you remember rather than the actual material. To avoid this, you try to keep your cards as clean as possible; its also helpful to make sure youre asking about the same information in several different ways (providing that would be useful).\n\n* yes/no questions are often suboptimal: instead, what do you really want to know about it?\n** Does OutSystems support composite primary keys?\n** What kind of primary key is not supported by OutSystems? (potentially ambiguous -- probably not here, but more useful, and also more memorable)\n** Or how about //why//, or what are the consequences?\n\n* OutSystems: A potential architectural liability of using SQL statements rather than Aggregates is that the SQL statements {{c1::are DBMS-specific}}.\n** OutSystems: From an architectural standpoint, why are Aggregates more future-proof than SQL statements? / SQL statements are DBMS-specific, while OutSystems can generate appropriate SQL for any database from an Aggregate.\n\n* egg salad: thought I didnt put it away because it wasnt in a bowl with a place over it\n\n* What are some examples of items in the Orchestration Layer of the OutSystems 4LC?\n** Items such as processes, dashboards, or portal home pages make up the {{c1::Orchestration}} Layer of the OutSystems 4LC.\n\n* Should make sure it is unambiguous what the answer to a card is/whether youve gotten the card right (e.g, \Give some examples of...\)\n\nTODO: Clean this up for the blog post, https://controlaltbackspace.org/memory/designing-precise-cards/, and add a tiddler therefor. Also then link into GoodSharedFlashcards.},{title:AnkiSrGlossary,created:20200704211856762,modified:20200714015045285,tags:Memory TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:Published, and the authoritative version is now at, https://controlaltbackspace.org/memory/spaced-repetition-glossary.\n\n------\n\nThis glossary is Anki-centric since thats what I know best, but many of the terms are used in other spaced-repetition tools as well.\n\n!! General terms\n\n; Cloze deletion\n: The process of creating cards by hiding some portion of a sentence or image, producing a \fill in the blank\ type of card. Cloze deletion cards are favored by many users because theyre often faster and easier to create than other types of cards.\n\n; Learning\n: Many SRSs, including Anki, have a \learning\ mode, as opposed to the standard \review\ mode, to help you initially acquire new material or to relearn //lapsed// material. When material is deemed \learned\ by finishing this process, it is said to have //graduated// and is scheduled for its first review.\n\n; New\n: Cards that you have never studied before, in //learning// or in //review//, are called new cards.\n\n; Occlusion\n: The portion of a //cloze deletion// that is hidden.\n\n; Review\n: The act of studying cards that are //due// and providing //ratings// for them. Reviewing a card stops the natural process of forgetting it, strengthens your memory, and reschedules it in your SRS for its next review based on your performance.\n: \u003Cp>One repetition of a particular card may also be called a \review\, e.g., \I did 200 reviews today.\\u003C/p>\n\n; SRS\n: Spaced-Repetition System, the general term for any application that implements spaced-repetition algorithms.\n\n; Scheduling\n: The process by which an SRS guesses when you will next forget a card and presents it again for review just before youre about to forget it.\n\n!! Units of information\n\n; Card\n: A unit of information studied in an SRS, with a front (prompting you with something to remember) and a back (explaining what you should have remembered). Each card is scheduled separately.\n\n; Collection\n: All of the flashcards you have controlled by an SRS, particularly Anki.\n\n; Deck\n: A subdivision of a collection used in most SRSs. Decks allow you to organize information or separate topics that might be confusing if reviewed together, e.g., vocabulary for two different languages. However, many people say its better to review everything together (see DontPartitionKnowledge), whether or not this means putting it in the same deck.\n\n; Note\n: In Anki, a note is a set of fields of information that is used to generate one or more cards. In many cases, a note generates exactly one card, but it can also generate several; for instance, you might want to study some cards, like foreign-language vocabulary, forwards as well as backwards, so you have to produce the associated word both in the foreign language and your native language.\n\n; Tag\n: In addition to decks, many SRSs support tagging cards to allow for additional organization. (To be precise, in Anki you tag notes, not cards.) In Anki, you can use tags to find or manage cards or to temporarily select cards matching some criteria to study from multiple decks at once.\n\n\n!! Scheduling\n\n; Bury\n: In Anki, burying a card hides it until the next day or until you choose to unbury all cards. You can manually bury a card if you cant review it at the moment (for instance, if youre studying in a public place without headphones and the card requires sound), if you accidentally flip the card and see the answer, etc. Anki also automatically buries cards that are closely related to other cards under some circumstances, so that you dont see them immediately after one another and have an artificially easy time answering the question.\n\n; Due\n: A card is //due// for //review// when your SRS thinks youre about to forget it. A card is due when its last review date plus its interval is equal to the current date.\n\n; Ease\n: A number describing how difficult a card is. The ease is used to calculate how much larger the next interval should be when you review the card.\n\n; Graduated\n: When a card leaves learning mode and enters review mode, it is said to have //graduated//.\n\n; Interval\n: The amount of time between reviews of a card, typically expressed in days. A cards interval is recalculated every time you review it, based on its previous interval and its //rating// at that review time. Intervals typically grow over time, unless you forget the card, at which point the interval is zeroed out or reduced substantially.\n\n; Lapse\n: When you forget a card you previously knew, it is said to have //lapsed//. Lapses should not be considered failures and do not mean you did anything wrong: forgetting and therefore spaced repetition algorithms are probabilistic, so the algorithm will necessarily put the due date too late on occasion. In fact, the algorithm is tuned to produce a certain percentage of lapses, usually 10% by default. You can adjust the parameters of most good SRS systems to reduce the percentage if you wish, but this comes with diminishing returns. See //retention//.\n\n; Leech\n: An unusually difficult card that takes up an unreasonable amount of your study time. Its important to take appropriate action when your SRS identifies a leech, or you will spend a large fraction of your study time on a tiny handful of cards. See AnkiLeeches.\n\n; Mature\n: A card with an interval of at least 21 days. Mature cards generally have the highest retention percentage, as they are least subject to small fluctuations in your memory or review time. You can think of a mature card as one that youve fully learned and are now merely focused on maintaining.\n\n; Overdue\n: A card which has a due date in the past. In other words, you theoretically should have reviewed it on a previous day but did not. Allowing cards to become overdue substantially increases your chance of forgetting them, so is to be avoided whenever possible.\n\n; Rating\n: A subjective description of how difficult a card was to remember, provided by the user after looking at each card. Most SRSs use two (forgot/remembered), four (forgot/hard/good/easy) or six (totally forgot/glimmer of recognition/almost remembered/hard/good/easy) ratings. Anki uses four.\n: \u003Cp>The easier you rate a card, the longer it will be before you see it again and the faster its interval will grow in the future.\u003C/p>\n: \u003Cp>Many SRSs sometimes represent ratings as numbers, starting with the most \forgotten\ rating as 0 or 1. For instance, Anki labels Again as 1, so if a rating is shown as `2`, that is equivalent to a \hard\ rating.\u003C/p>\n\n; Reschedule\n: The act of manually changing the scheduling of a card. You might want to do this if you have information the SRS doesnt (for instance, you just imported a bunch of material you already know very well), or if you change a card so completely it doesnt make sense to allow it to maintain its review history.\n\n; Retention\n: A measure of the percentage of material you remember at the time it is due; in other words, the percentage of reviews which are not //lapses//. Higher percentages mean you remember more material both at review time and at any moment youre called upon to produce it, but they also mean you have to spend significantly more time studying. \n\n: \u003Cp>Most SRSs aim for about 90% retention with their default settings, but a good SRS will let you tweak the parameters in an attempt to change this percentage, if youre so inclined. Maximum learning efficiency in terms of material remembered per unit of time spent comes around 85% retention. Aiming to increase the percentage beyond 90% may make sense for extremely critical information, but doing so for all your cards is a bad idea, as it leads to diminishing returns: aiming for 99% retention, for instance, would likely result in having to review all of your cards almost every day.\u003C/p>\n\n: \u003Cp>Keep in mind that the retention figure is //not// the percentage of your material you remember at a given moment in time -- thats significantly higher. To understand why, notice that because your memory decays monotonically over time until you review (i.e., under normal circumstances you wont become //more// likely to remember a card by waiting longer to review it), the due date is the moment youre least likely to remember the information, provided that you dont allow cards to become significantly overdue. It follows that if you pick a card from your collection at random, chances are its before its due date and youre more likely to remember it than if it were currently due. But retention is always calculated when your card is due or overdue, so your retention percentage will underestimate your chance of knowing the card at the point of this random test. If you run the numbers, if your overall retention is 90%, it turns out that you typically know about 95% of your material.\u003C/p>\n\n; Suspend\n: Suspended cards never appear for review even when they are due. You might want to suspend material if you arent ready to study it yet, or you arent willing to spend the time on it right now but theres a chance it might become much more important to you later, or you suspect its incorrect or not worth learning but dont have the time to deal with it yet. Anki automatically suspends leeches|AnkiLeeches under many circumstances.\n\n; Young\n: A card that has //graduated// from //learning// but hasnt yet become //mature//.},{title:AnkiStartingGuidelines,created:20210613210234539,es:possible,modified:20220504200826436,modifier:soren,tags:Memory Public Idea,type:text/vnd.tiddlywiki,text:A list of steps you can take when getting started with Anki, hoping to get people started on a good course at DevelopingIntrinsicSrMotivation and understanding how Anki works.\n\nThis is something I threw together very quickly for a presentation I gave at TheFederatedInsurance, because I realized there were no obvious next steps after my presentation.\n\n\n# Install the program and pull in the cards from the data modeling course. Study every work day for a week.\n\n# Find another deck or two that interests you (from Anki’s shared decks system or any other place) and study that regularly for another two weeks. For the best results, it should be something you already know about or are currently learning – trying to memorize the contents of flashcards that you don’t fully understand will be much less efficient. (Current research into a MnemonicMedium, as seen in this example about spaced repetition|https://andymatuschak.org/prompts/ by Andy Matuschak or my book GrokTiddlyWiki, aims to solve this problem by integrating the learning directly with the flashcards.)\n\n# At the same time as #2, develop a standard, personalized practice of how and when you review. For instance, at various times in my life, I have done my daily reviews on the bus, right before bed, and in the morning over a cup of tea. If you can tie your Anki reviews to some other part of your day, you will have a much greater chance of remembering to do it.\n\n# Spend some time reading about creating good cards: start with the Wozniak article|TwentyRules and my Designing Precise Cards|https://controlaltbackspace.org/memory/designing-precise-cards/. Most of the other resources listed below are relevant reading as well, but reading all of it at once may be overwhelming, so you might want to interleave this step with step 5.\n\n# Start creating some of your own cards for material you are currently learning, at work or in your personal life.\n\n# If you haven’t done so already, download (and purchase, if necessary) the mobile app so you can review in what I like to call FoundTime (when you’re waiting in line, for instance).\n\n# If you like understanding the details of the systems you’re using, check out Spaced Repetition From The Ground Up|https://controlaltbackspace.org/memory/spaced-repetition-from-the-ground-up/ and the Anki manual|https://docs.ankiweb.net/.\n\n# After a couple of months, go back and reread the resources about creating cards – at minimum, the Wozniak article. It takes a few iterations to pick everything up.},{title:AnkiTagPlan,created:20200703232517521,modified:20200910023128120,tags:Information Public Memory Idea,type:text/vnd.tiddlywiki,text:Proposed types of tags:\n\n* Content organization -- identifies a group of notes that belong together in some way.\n* Quality:\n** Imported\n** Targeted (created by me, about a specific thing I want to remember)\n** Collection (part of a large group of things I want to learn)\n* Criticality:\n** Unremovable -- cant be deleted (e.g., part of a whole, just very important)\n** Useful -- would like to keep it, but can be removed if needed\n\nCf. AnkiDebtPlan.\n\n-------\n\n* Technology::{~TheTech}\n* Topic::{~TheTopic}\n** `KeyboardShortcuts`\n** `TipsAndTricks`\n* Sources},{title:AnkiWeb,created:20200819134548814,modified:20200819134612997,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Sharing and quick-online-review component of Anki.},{title:AnkiWowFactor,created:20200729131101835,creator:soren,es:likely,modified:20220525122757389,modifier:soren,tags:Memory Psychology Reasoning Business Public Idea,type:text/vnd.tiddlywiki,text:Getting people excited about adopting something often requires something of a “wow” factor. We might look to MrCalNewports LawOfRemarkability: if people dont remark on it, who cares?\n\nThe problem comes when something //is// remarkable, but doesnt look like it right away. Like Anki. It takes at least several weeks of using it the right way (not just using it, and not for just a couple days -- certainly not for the course of a 30-minute presentation) to really grok|Grokking how revolutionary it is. Im not actually sure I can think of a whole lot of other things that follow this pattern -- though perhaps I just dont know about them, because they dont wow people and never spread!\n\nOpenQuestion: Is there a way to make SpacedRepetition “wow” immediately? It seems to me like it is intrinsically unwowy, or delayed-wowy, but perhaps some façade of wow (theres a band name) could be bolted onto it to assist with the initial marketing.\n\nIve tried in the past to showcase my Anki-assisted memory of sets of pointless facts (e.g., asking people to give me any country in the world and producing the capital city) to produce a “wow” factor, but nowadays Im not sure this is advisable -- while it does wow, it emphasizes Ankis ability to pack lots of facts into your head, rather than its more valuable and exciting ability to improve your everyday cognition. That gives the impression that Anki is mostly useful for memory nerds or people in medical school, which could not be more wrong. Giving the //wrong kind of wow// can actually hurt your case if its not the kind of wow that your audience emotionally connects with. (There was also the time someone volunteered “Africa” when I asked for a country, and was confused when I told them that was a continent and didnt have a capital. Kind of took the focus off my presentation.)},{title:AnkiZettelkastenIsomorphism,created:20200728034756285,es:likely,modified:20210515033819114,tags:Memory Information Public Idea,type:text/vnd.tiddlywiki,text:The more I look, the more I spot principles and effects that are exactly the same, or at least isomorphic or similar, between the ZettelKasten and Anki/SpacedRepetition disciplines. While remarkable at first glance, this actually makes perfect sense in my view. The best practices in both are attempting to mimic the way we naturally think, but putting it into a new medium -- one that preserves and extends our memory in some way or another, whether its by allowing us to choose exactly what we want to remember naturally or by outsourcing the storage to a more reliable and clarity-producing|WrittenLucidity medium while not losing all of the interconnectedness intrinsic in \online\ thoughts in our minds.\n\nSome examples:\n\n* Extracting concepts into atomic units is the foundation of both, although the exact scale of atomicity required differs (see TwDynamicNoteGenerationExample, for a medical student who wanted to make flashcards with the titles of tiddlers as the front and the contents as the back: romantic but probably not effective).\n* Identifying the boundaries of ideas and how they relate to other ideas is a critical part of developing an effective ConceptWeb and results in ElaborativeEncoding that improves your memory (your natural memory or the links explicitly defined in your external memory).\n* You should not partition your knowledge|DontPartitionKnowledge.\n* Both, properly practiced, result in boosting your memory (natural or external) of various concepts and in more readily seeing the relationships among them.\n* OrphanQuestions behave similarly in both systems, though the consequences and best practices surrounding them are different.\n* Both allow you to spread out your learning or research over a longer period of time with greatly reduced losses, making it practical to dive shallowly into a greater number of things without worrying about losing your touch on the most important ones. This makes them particularly valuable tools in Polyspecialization, though useful for many (probably not all|SpacedRepetitionPersonality).\n\nThe relationship|AnkiZettelkastenRelationship between the two, or which should be used for what purpose, is something Im still trying to figure out.\n\nCompare DataAsKnowledgeGraph for more isomorphisms.},{title:AnkiZettelkastenRelationship,created:20200714141052629,creator:soren,es:possible,modified:20220118022357438,modifier:soren,tags:Learning Memory PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Anki and the ZettelKasten are both memory aids, or aids for thinking, thinking by bringing relevant information to our attention|SpacedRepetitionAsAttentionManagement that we might otherwise not have seen. There is a strong AnkiZettelkastenIsomorphism.\n\nHow should they interact? Obviously, in a way that capitalizes on the strengths of each. This is an OpenQuestion, but some initial thoughts:\n\n* Anki is more for fact-ish things that can be easily broken down into ideas and dont change as frequently.\n* ZettelKasten can contain fact-ish things, but also vague ideas that change rapidly and arent so memorable.\n* TiddlyRemember can help to bridge the gap where the ZK contains tidbits of factual information that itd be nice to bring to the next level.\n\nRemNote aims to take bridging notes and spaced repetition to its limits, allowing the notes to literally //be// the flashcards where this makes sense. This approach often (though not always) works well.},{title:AnnaKarenina,caption:Anna Karenina,created:20200809024752738,format:paperback,isbn:9780143035008,medium:book,modified:20230406024800142,modifier:soren,owned:yes,rating:great,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:AnnaKarenina,year:1878,text:Classic work of Russian literature by MrLeoTolstoy. If Im forced to pick one, I would likely say its my favorite novel (cf. FavoriteBooks). It is cerebral, discursive, challenging, emotional, political, and probably many more things. Quite the hunk of paper to get through (something like 850 full pages). I think my first read took me about a year since I was in college and didnt have a lot of extra time to read novels! \n\nObviously I dont know Russian so what do I know about how faithful it is, but on a readability and style level, I thought the ThePevearAndVolokhonsky translation was fabulous.\n\nStupid and only tangentially related, but hilarious: Spoilers: tragic in any century.|https://abstrusegoose.com/164},{title:AnnArborMichigan,created:20231120222518835,creator:soren,modified:20231120222519419,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:annie-on-the-shore.jpg,type:image/jpeg,created:20220323022444625,creator:soren,modified:20220323022448026,modifier:soren,tags:Public Image,_canonical_uri:./extimage/annie-on-the-shore.jpg},{title:annie.png,type:image/png,created:20210508165437256,modified:20210516165341532,tags:Image Public,_canonical_uri:./extimage/annie.png},{title:Anosmia,created:20201117232606202,modified:20201117233049921,tags:Health Public Idea,type:text/vnd.tiddlywiki,text:Condition of having no sense of smell, temporarily or permanently. Common (and highly unusual, as illnesses go) symptom of The 2020 Pandemic|PandemicMood.\n\nPeople dont tend to think about their sense of smell very much, so anosmia flies under the radar, but its actually quite serious. From what Ive read, anosmia doesnt cause as much difficulty with daily life as blindness or deafness, but people who go permanently blind or deaf actually recover much better psychologically. Aside from being unable to properly taste food or get the powerful memory effects of smells, there are even the practical things you dont normally think about: how do you cook, or tell if your trash needs to be taken out or you left the gas on, if you cant smell?\n\n{{Anosmia/p||PrivateChunk}}},{title:AntelopeIslandStatePark,created:20230822200901057,creator:soren,gis-lat:41.031602033516066,gis-long:-112.2292062117942,gis-zoom:10,modified:20240509110832702,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Antidebt,created:20210611223939138,description:In an antimoney economy, antidebt allows you to sell things when you have insufficient antimoney on hand.,es:mythological,modified:20210611223856771,tags:Economics Math WhatIf Public Idea,type:text/vnd.tiddlywiki,text:In an antimoney|Antimoney economy, in order to continue selling things when one is at !$0.00, one may take on antidebt, borrowing someone elses antimoney so as to be able to give it away to others and put oneself further in the black. Antidebt, much like normal debt, is a contract in which one obtains antimoney and agrees to give it back to the other person at some later time with the addition of more antimoney in interest.\n\nNotice that antidebt is in a normal-accounting sense an asset, not a liability, because one borrows antimoney to be able to get rid of more antimoney than one has, and one “pays off” antidebt by returning the antimoney, making the lender poorer and the borrower richer.\n\nThe repayment schedule one would negotiate for antidebt is unclear. Presumably the lender would not usually want to be repaid, since they become richer by lending and will be poorer than they started when they are paid back with interest. Thus, they would have no incentive to foreclose or require the antimoney to be paid back at a certain time. But the borrower might not want to pay the antimoney back on a regular schedule either, because that might make them temporarily unable to transact if they were low on antimoney at that time! Nevertheless, there is an incentive to pay back antidebt since the borrower can give back the antimoney with interest, so perhaps the repayment schedule would allow optional //late// payments (with interest ceasing to accumulate past the original payment date) and forbid or penalize //early// payments.},{title:AntiFragile2012,caption:Antifragile: Things that Gain from Disorder,created:20200819030504857,format:ebook,medium:book,modified:20210606224103504,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2012,text:By MrNassimNicholasTaleb},{title:AntiFragility,created:20200121003257564,creator:soren,es:confident,modified:20240227185102158,modifier:soren,tags:Systems Design Public Idea,type:text/vnd.tiddlywiki,text://Antifragility// is a term coined by thinker MrNassimNicholasTaleb in his eponymous book|AntiFragile2012 for systems which are strengthened by minor stresses or other kinds of disorder. For example, the Evolution of life is a straightforwardly antifragile process. Indidvidual humans are antifragile too, both physically and mentally. MrDonaldTrump is an antifragile president (actually, Trump is //super//-antifragile: even major stresses make him stronger). People often think the opposite of fragile is “robust,” but robust things are those which merely arent affected by stress. Antifragile things are actively improved by stress.\n\nI try to point out antifragility when I see it. Not only is it an extremely interesting concept, but as Taleb points out in his book AntiFragile2012, it has major implications for what kinds of systems we should design and invest in.},{title:AntifragilityByCuration,created:20200326003932066,es:likely,modified:20210611002428102,tags:Religion Systems Public Idea,type:text/vnd.tiddlywiki,text:AntiFragility requires that mistakes occur and the failures be removed. Often this happens automatically (e.g., evolution, businesses). Its also possible for an entity to do the pruning to create an antifragile system. I was thinking about this in church the other day when we looked at the metaphor of MrJesusChrist as the vine and the people as the branches: we are improved by this trimming.},{title:Antimoney,created:20201203042556912,description:In an antimoney-based economy, the less antimoney you possess, the richer you are.,es:mythological,modified:20210623032004163,tags:Imagination Humor Math Economics WhatIf Public Favorites Idea,type:text/vnd.tiddlywiki,text:Antimoney is a concept that featured in an otherwise nondescript dream|Dreaming I had once and is curious enough that Ive continued to think about it. As the name suggests, antimoney is the opposite of money: with normal money, the more money you have the wealthier you are, whereas with antimoney, the //less// antimoney you have the wealthier you are.\n\nOn a very basic level, you can imagine antimoney as bills with negative numbers printed on them; that is, units of exchange that make the person possessing them have a lower net worth. (This is not quite the same as negative normal-money, because of problematic facts about the nature of negative numbers, about which more below, but you will get the correct intuitive idea of the effect of antimoney from treating it this way.) The symbol for antimoney used here is !$, the common symbol for boolean negation followed by the dollar sign.\n\n!! What antimoney isnt\n\nAntimoney brings up some curious facts about negative numbers, debt, and money:\n\n* Antimoney is not negative dollars: -$ ≠ !$. Thats because negative dollars are a mathematical concept used to represent debt, while antimoney is a thing in itself: a medium of exchange which one does not want to possess. Antimoney is like antiducks|NegativeNumberOntology, which are not the same thing as negative ducks.\n* Antimoney is not debt|WhyAntimoneyIsNotDebt: antimoney is a medium of exchange, while debt is not. Additionally, an antimoney economy has no positive money at all (except, see //antidebt// momentarily, which still isnt really positive money except to the extent that normal debt can be considered “negative money”, which is again wrong); the only exchanged unit is antimoney.\n* Debt is not negative money|DebtIsNotNegativeMoney, either.\n* Antidebt is distinct from debt, positive money, and negative money.\n\n\n!! Working with antimoney\n\n* One uses antimoney|UsingAntimoney to purchase something by accepting both a product or service //and// a quantity of antimoney from the seller, thus making the seller richer and the buyer poorer.\n* It is unclear how antimoney is created or distributed|CreatingAntimoney.\n* Antimoney is (surprise!) impractical|ImpracticalityOfAntimoney for several reasons.},{title:AntiquesBelAir,created:20230514123333011,creator:soren,gis-lat:44.966271563663106,gis-long:-93.28896689011513,gis-zoom:17,modified:20230515140141431,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AntonyAndCleopatra,author:Shakespeare,bibliography:LifetimeReading,caption:Antony and Cleopatra,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034005,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:More difficult},{title:AnyBenefitMindset,created:20210606163601030,es:confident,modified:20210606172939171,tags:LifeDirection Psychology Public Idea,type:text/vnd.tiddlywiki,text:Term of MrCalNewport introduced in DigitalMinimalism2019: a maladaptive way of thinking about technology in which you adopt a new technology or practice because it offers //any// benefit whatsoever, rather than because it has a positive CostBenefitRatio.},{title:AnyHarmMindset,created:20231009230903465,creator:soren,description:Maladaptive mindset where one tries to prevent anything bad from happening, regardless of the cost.,es:confident,modified:20250213200827200,modifier:soren,tags:Idea Definition Risk PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:The opposite of the AnyBenefitMindset, often applied by fearmongers: if there is any harm possible from some action, that action becomes a terrible thing and should never be done. (In some sense, of course, these are the same thing: the any-benefit mindset is applied to the act of prohibiting the action.)\n\nThe typically applied any-harm mindset is arguably even more toxic than the any-benefit mindset in my opinion. An any-benefit mindset encourages you to add things that arent healthy or conducive to thriving. An any-harm mindset encourages you to throw away things that you already know make life good, because they have a tiny chance of causing something mildly bad! (And more or less everything bad is absolutely fine|Stoicism.)\n\nAddAnotherRule is a specific and common case: if a rule can prevent any harm at all, even in theory, it is added without consideration for the cost of having a new rule.\n\nThe correct way is to recognize that refusing to do something on account of a risk may have the benefit of reducing that risk, but it also has a cost -- at minimum, an OpportunityCost, and sometimes a direct one as well. If the cost is greater than the benefit, you should cheerfully do it anyway regardless of the risk.\n\n\n!! Examples\n\n\u003C$m2.x number\1\>\n\nConcerns about liability are frequently examples of an AnyHarmMindset: if there is a 1:1,000,000 chance of somebody getting hurt and suing you, and you could conceivably improve your chance of a successful defense by 10%, some people will decline to do something valuable, or prohibit something obviously beneficial -- at the cost of human relationships, community engagement, etc. (Sometimes the rules even open up further liability, making them directly counterproductive. For instance, teaching children to never trust strangers under any circumstances can put them in greater danger if they end up in a situation where they need help.)\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\nRequiring IRB review for harmless research:\n“My IRB Nightmare”|https://slatestarcodex.com/2017/08/29/my-irb-nightmare/, MrScottAlexander\n\n(See also: “Do you need permission from the government to do independent research?”|https://dynomight.substack.com/p/irb Apparently the answer is frequently “technically, yes, someone could prosecute you for this, its just unlikely anyone ever will.”)\n\n\u003C/$m2.x>\n},{title:AppalachianTrail,created:20201203024127827,modified:20201203042000041,tags:Place Public,type:text/vnd.tiddlywiki,text:Trail running north to south across almost the entire east side of the UnitedStates, from Georgia to Maine.},{title:AppearancesOverReality,created:20200130141240323,creator:soren,es:confident,modified:20210307155540172,modifier:soren,tags:Politics Reasoning PhilosophyOfLife Public Ontology Idea,type:text/vnd.tiddlywiki,text:In far too many places, it doesnt matter what really is, it matters what people //think// is. Particularly relevant in \u003C\u003Ctag Politics>> and \u003C\u003Ctag InterpersonalRelations>>. One must not make the mistake of making sure reality is correct while not worrying about appearances at all; even if reality is perfect, if people think it sucks youre in trouble.\n\n!! Advantages\n\nWhile its easy to think this is a lie-back-and-think-of-England reality, its not strictly a bad thing unless perhaps youre a very strictly logical materialist. Sometimes we dont actually know what really is, in which case the best thing we can do is attend to and manipulate appearances. Indeed, our entire thinking may be based on the FamiliarizingMetaphor, which to some degree //relies// on unreal appearances. See especially AllMapsLie: many tools are only useful to the extent that they gloss over some aspects of reality.\n\n!! Problems\n\nOne place AOR becomes bad (which happens to be the place in which we selectively apply|SelectiveApplication the concept most often) is when someone stubbornly ignores an obvious, empirically-supported reality and sticks to their opinion, in the manner of AlternativeFacts. It can also be exploited by bad actors in the manner of IdeologyMicrotargeting.\n\nMrZviMowshowitz discusses the thing and the symbolic representation of the thing|SymbolicRepresentationOfTheThing, which is a (common and important) special case of appearances/reality that can result in good things being unpromotable (see esp. ToolsForThinkingDontWow) and bad things looking good.\n\n\n!! Misc\n\nMsLyraSilvertongue demonstrates both the power of appearances (and lies) and the fact that they can be used for good or evil.},{title:AppleNotes,created:20200425170223839,es:confident,modified:20210731153821891,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Apples notes app. A few more features than SimpleNote, but not too much. A notebook does a better job at quick notes, really!},{title:AppropriateTechnology,created:20200128145039695,creator:soren,es:likely,modified:20210509005408616,modifier:soren,tags:TheControlAltBackspace Futurism Public Idea,type:text/vnd.tiddlywiki,text:Its easy to use technology just because its cool and new. But oftentimes the “cool new, improved” stuff isnt actually very useful (cf. PoopSandwich). The point of technology (as described in TheControlAltBackspace manifesto) is to work for people. Too often, it doesnt. Technology that actually works for people and is well-suited to the problem it aims to solve (these things go together) is AppropriateTechnology.\n\nWhats appropriate undoubtedly depends on the person, the situation, and the era. But its not actually very hard to determine whether a technology is appropriate if were educated about the issues (consider BigTech and AddictiveDesign, other \u003C\u003Ctag Design>> considerations, personal needs, the need to AvoidScale, miscellaneous externalities|https://controlaltbackspace.org/simplicity/things-that-dont-work/#externalities) and stop to think about it for a moment.},{title:AreaOfAcquaintance,created:20201207032157045,creator:soren,description:A field or topic one understands at a relatively superficial level, sufficient to follow literature about the topic, make interesting connections, and determine what one does and does not know about the topic.,es:likely,modified:20220122155120144,modifier:soren,tags:Employment Learning Public Idea,type:text/vnd.tiddlywiki,text:A field or topic in a polyspecialist|Polyspecializations portfolio of knowledge which he understands at a relatively superficial level, coming between the AreaOfIgnorance and the AreaOfFocus on the spectrum of knowledge. He has a BasicLearningFoundation in the topic, and his understanding is sufficient to make interesting connections with other areas of knowledge and follow discussions or mid-level articles or books on the topic, but generally insufficient to make large-scale novel contributions to the topic, follow expert-directed literature, or offer advice without qualifying it with a warning about his lack of expertise.\n\nOne might also consider an area of acquaintance to correspond to the valley in the Dunning-Kruger curve|DunningKrugerEffect (TODO), where the polyspecialist has learned enough to see the limits of his knowledge but not enough to underestimate himself. It is possible that some areas of acquaintance will not quite reach this point, however.\n\nAreas of acquaintance serve an important role in the polyspecialists approach to life. Aside from providing useful insights and intellectual pleasure in their own right, they represent his future possibilities, and even more importantly, his awareness of what he might be missing in adjacent fields. If the polyspecialist is working on some project and useful connections are available in an AreaOfIgnorance, he is unlikely to ever find out about them unless he happens to discuss the project in detail with someone who does know that field. If the connections are available in an area of acquaintance, he will probably have an inkling that there is something worth exploring over there and can do some further research or contact an expert.},{title:AreaOfFocus,created:20201207033736015,description:A field or topic which one understands at a high level, but somewhat less thoroughly than a single-field specialist.,es:confident,modified:20210509004957450,tags:Employment Learning Public Idea,type:text/vnd.tiddlywiki,text:A field or topic in a polyspecialist|Polyspecializations portfolio of knowledge which she understands at a high level, although somewhat less thoroughly than a single-field specialist. She will nevertheless be capable of making contributions, following expert-level literature, and confidently offering advice on the topic. Her primary job will normally involve two or more of these areas.\n\nThe degree of knowledge and skill required to make an area qualify as an area of focus is vaguely defined. Some areas of focus may be ones where the polyspecialist knows plenty to get things done but is still at a relatively intermediate level, while she may have true expertise in others. She will tend to continue to grow naturally in these areas for her entire life, provided she continues using them regularly.\n\nA polyspecialist will have several of these areas, and has the potential to upgrade areas of acquaintance|AreaOfAcquaintance to areas of focus on relatively short notice if a significant change of direction is required, perhaps within a few months.},{title:AreaOfIgnorance,created:20201207034119837,description:A field or topic one knows little or nothing about, perhaps not enough to understand ones lack of knowledge or even enough to know the topic exists at all.,es:likely,modified:20210509004945793,tags:Employment Learning Public Idea,type:text/vnd.tiddlywiki,text:A field or topic which a polyspecialist|Polyspecialization -- or anyone else -- knows little or nothing about, perhaps not enough to understand their lack of knowledge, or even enough to know the topic exists at all.\n\nWith as little as a month or two of consistent part-time study, an intelligent person can upgrade an area of ignorance to an AreaOfAcquaintance. The polyspecialist would like to do this to as many areas as practical, but must by definition leave some areas in a state of ignorance because overworking this level will mean they neglect their areas of expertise|AreaOfFocus and become a generalist instead of a polyspecialist.},{title:ArendtGreatLeveler,created:20200822014808280,es:possible,modified:20210515033936532,tags:Ethics PhilosophyOfLife History Public Idea,type:text/vnd.tiddlywiki,text:In TheGreatCon, we read MsHannahArendts EichmannInJerusalem1964, and we got on a long discussion which continued into lunch of her conclusion that there was nothing specially evil about the Nazis or the German populace during the Holocaust: all of us more or less would have the capacity to fall into the same pattern. Indeed, what happened was that people were led to a perverted state of morality: in a normal society, turning your neighbor in to the police and getting them killed is felt to be deeply wrong, even if you might sometimes be tempted to do it, whereas in a perverted society -- which you can construct, if you know what youre doing -- you really dont want to turn them in, but you feel on some level that its the right thing to do.\n\nMost of us were feeling pretty demoralized about that. Are we -- am //I// -- really that evil? That gullible? But then J.B.|PrivatePerson said something thats been gnawing at me ever since, in a good way: actually, we ought to be encouraged by this. All people are fundamentally equal in their capacity for good and evil, saints and sinners|SaintAndSinner. Those people are not //bad people//, they are only people that unfortunately landed in a situation that led them to behave badly. In some ways, this way is actually easier to accept, as there is no Evil Force to reckon with...though, it is us, which might be hard for some!\n\nThis approach requires a good dose of humility, but it has a lot to recommend it.\n\nI riff on this in MyMaudiverseHeroMyth, which I wrote for a class the year after this discussion:\n\n\u003C\u003C\u003C\nOur parents cannot be restored. But neither can Dembra Domuri Ellmoris Stina’s life and reputation and self-respect. His mistake was a catastrophe for all involved. Yet, as we mentioned in the introduction, we think that either of us, Maud or Elibemereth, would have had a fair chance of making exactly the same mistake in the same situation. And Dembra was followed by trouble for his entire life. Further, without the battle and his leadership, the two of us might not have met each other|WouldntGoBack. It is for all these reasons that we have taken the step—which may seem unorthodox or even outright weird to some—of erecting a monument to Dembra in our courtyard. It reads:\n\nFor Dembra Domuri Ellmoris Stina (22891 – 23286 Y.P.):\nwho only wanted to get home.\n\u003C\u003C\u003C\n\n(“Only wanted to get home” and the situation that in the story led to this epitaph derives from a series of vignettes|https://acbetekhtin.wordpress.com/2015/10/16/take-the-train-home/ by other Great Con friend A.C.B.|PrivatePerson.)},{title:ArendtPandemic,created:20200516025217263,creator:soren,es:likely,modified:20211107180105104,modifier:soren,tags:PandemicMood Sociology Public Idea,type:text/vnd.tiddlywiki,text:Perhaps a manifestation of the theory in ArendtGreatLeveler, namely that what is morally right and encouraged is actually quite flexible to serve the present circumstances. Normally, interacting with other people is considered normal and encouraged (to some degree, American society is arguably biased against introverted actions in general). During the pandemic, it suddenly has become selfish, to be avoided when possible, and even evil in some cases.},{title:AreYouAwake,created:20210807022017416,creator:soren,description:Are you awake right now?,es:likely,modified:20210910032529161,modifier:soren,tags:Dreaming Psychology Public Idea,type:text/vnd.tiddlywiki,text:A challenging|Challenges question to ask yourself: //am I awake right now//?\n\nThis is a deceptively simple|DeceptiveSimplicity question which may seem just plain dumb at first glance: //Duh, Im awake. Thats obvious. Are you high or something?// But it is the beginning of wisdom in LucidDreaming.\n\nThe problem is, for about a third of your life youre not awake. During that time your brain is still working, and for much of that time youre dreaming. And while it may be obvious that youre awake //while youre awake//, its decidedly not obvious whether youre awake when youre //not// awake. If you never ask this question while youre awake, when the answer ought to be obvious, how can you have any hope of doing it while youre dreaming?\n\nEveryone is different, but I find getting into the habit of asking this question is almost all I need to start recognizing that Im dreaming with some regularity. In some sense, it seems the only reason we never realize that were not awake is because we assume that we are always awake -- a self-fulfilling prophecy.\n\nThis question is also valuable as a reminder to look around you and pay attention, which is just a good habit in terms of staying happy and engaged.\n\nIf you like experimenting|TryItAndSee as much as I do and want to try for yourself, I recommend the following routine:\n\n# Periodically throughout the day, pause and ask yourself whether youre awake. You can do this anytime you think about it, but its particularly useful to work towards having this thought when something unusual or inexplicable happens, since such events occur frequently during dreams.\n# Whenever you ask yourself whether youre awake, perform some kind of test (often known as a //reality check//) to confirm your answer. Critically performing this step prevents you from blowing off the question (//duh, Im awake!//) -- if you start doing that, you will promptly start doing exactly the same thing when youre dreaming, for exactly the same reason you otherwise automatically assume that youre awake at all times. To avoid doing the reality check mindlessly, start by assuming that you are //not// awake. In theory, almost anything that has consistent results in ConsensusPhysicalReality but potentially different ones in a dream can work as a reality check, but a handful of particularly easy and effective ones have been popularized in the last half-century or so. A couple I like:\n#* Try to read some text or the screen of a digital watch or mobile device. If youre dreaming, it might be oddly difficult to read or even total nonsense. If it looks normal, look away and back once or twice and see if you can make it change.\n#* Pinch your nose and try to breathe out through it. In a dream, you can usually breathe even with your nose blocked.\u003C\u003Cfnote \\\Amusingly, when Im dreaming I often have trouble remembering which result means Im dreaming, but I usually figure it out eventually!\\\>>\n#* Look around you and consider: is this a place you recognize? Why are you here? What were you doing just before this? If youre dreaming, you may find yourself unable to answer these seemingly easy questions, or realize that you are in a patently absurd situation that cannot possibly be your normal waking life.\n# If you really are awake, spend a moment thinking about what would be different if you were dreaming instead, and if you like, anything you would like to remember next time you notice youre dreaming (for instance, you might want to try to perform some specific experiment).\n\nMost people see results after a week or two, though the time varies from a day to several months.},{title:ArmTemplates20200520,at:202005201200,caption:Infrastructure as code -- build Azure applications with ARM templates,created:20200518213727886,medium:video,modified:20210522015801761,presenter:MrAngelPerez,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/50da8304-bb38-4a78-aeee-4d431bf3331d,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis session didnt actually explain how you create Azure applications with ARM templates, which is what I would have expected from the title...but it did share some interesting information about where ARM templates are going in the future.\n\nNew stuff recently:\n\n* Deployment script steps that run with PowerShell or Bash, logs output\n* ARM Testing Toolkit -- security and best practices checker\n* What-if functionality in all deploy functions; cleaned up noise\n* 0.10 release of VisualStudioCode extension\n** Create Parameter File\n\nTemplate Specs (upcoming):\n\n* Method to share template pieces to where others can use them\n* Package an ARM template with supporting files and package and deploy it to Azure\n* Will be a new resource type, in a versioned private registry\n\nResource Lifecycle Management:\n\n* Method to define a collection of resources, independent of resource group, and do various operations on them as a unit\n\nLanguage Revision (upcoming):\n\n* Working on eliminating JSON, or rather, making it optional (this system will likely compile to JSON)\n* Also, generally making more readable/writable, with a DomainSpecificLanguage designed for resource templating\n* First-class modularity, multi-file support\n* Preview coming in the next couple of months\n\nQ&A:\n\n* Why use template specs over just plain Git repositories?\n** Remove extra steps\n** Make available to clients who you dont want to give repo access to\n** More options for security if needed\n\n* Regex validations for parameters?\n** They dont know, but could be considered\n\n* YAML?\n** Not planned. New version will be a custom language.\n\n* How do Deployment Scripts work?\n** A last resort -- have to deal with idempotency etc. yourself!\n** Just to do things the ARM template does not support\n\n* Migration path to the new language?\n** Both methods will continue to be supported\n** Should be possible to auto-convert (maybe not super-cleanly though)},{title:arrival-diagram.png,type:image/png,created:20221201143131461,creator:soren,modified:20221201143139831,modifier:soren,tags:Image Public,_canonical_uri:./extimage/arrival-diagram.png},{title:Arrival2016,author:,caption:Arrival,completed:,created:20221008031848450,creator:soren,medium:,modified:20240616040921011,modifier:soren,readstatus:unread,tags:Source Film Public,type:text/vnd.tiddlywiki,url:,year:2022},{title:ArtificialGeneralIntelligence,created:20200322015800789,creator:soren,es:confident,modified:20230406022950257,modifier:soren,tags:Futurism Code Public AI Idea,type:text/vnd.tiddlywiki,text:A hypothetical scenario in which consciousness, or something allowing the same functioning as consciousness, arises within a computer. A moderately advanced AGI might also be able to bring about a Singularity through the involvement of MachineLearning.\n\nSome people are unsure whether an AGI can be conscious. While I dont consider myself a strict materialist, I also dont see any theoretical reason consciousness couldnt arise within a computer system: however it does happen, why would the phenomenon need to be limited to the brains of animals on planet Earth? (Cf. PanPsychism.)\n\n{{ArtificialGeneralIntelligence/p||PrivateChunk}}\n\nAGI could certainly be valuable, but it has a whole lot of possible nasty effects too. In my opinion, we are rushing headlong towards attempting to build AGI without stopping to think very hard about these effects.\n\nI used to think AGI was incredibly difficult to achieve, so this would probably not ever become an issue. As of recently, this seems much less like a safe bet; see March2023AgiOpinions.},{title:ArtificialIntelligence,created:20200409013728744,creator:soren,es:likely,modified:20210710125149638,modifier:soren,tags:Futurism Code Public AI Idea,type:text/vnd.tiddlywiki,text:General term for making computers do human-like “intelligent” tasks involving decision-making and discrimination. What makes the boundary between “AI” and good general programming is unclear; theres a running joke among developers that if you include “if” statements in your program, you have created artificial intelligence.\n\nAI absolutely can be but often is not AppropriateTechnology, as it is too often applied in cases where it is of relatively little benefit and has extreme costs.\n\nSee ArtificialGeneralIntelligence for the “strong” form.},{title:ArtificialZero,created:20240220133648866,creator:soren,description:To maintain slack, set a fake “zero” point which you commit yourself not to falling below except in extraordinary circumstances.,es:confident,modified:20240221003331938,modifier:soren,tags:Idea Definition Psychology Systems Public,type:text/vnd.tiddlywiki,text:An artificial zero is a technique for maintaining Slack in the face of SlackGobbling. Because we tend to push up against the limits, we carefully change the limits so that when we push up against our limit, theres actually still a comfortable amount of room left.\n\nMaking good use of artificial zeroes requires two skills:\n\n# Stubbornly insisting that, under normal circumstances, you never go below the artificial zero into your slack.\n# Recognizing extraordinary circumstances that suggest you //should// dig into it, and then doing so confidently (this can be hard once you get used to #1!). If you truly never use it, theres little point in having it.\u003C\u003Cfnote \You do still get some peace of mind knowing that you //could//. But I think if you have slack and you never use it, youre probably missing valuable opportunities because youre scared to use it.\>>},{title:ArtOfMemory1966,author:Yates,bibliography:LifetimeReading,caption:The Art of Memory,created:20210703170128000,genre:History,medium:book,modified:20210705214034022,priority:3,readstatus:unread,recommended-by:ML,tags:Source Public,type:text/vnd.tiddlywiki,year:1966},{title:ArtOfNamingFiles,created:20200423000548716,modified:20200509031513218,tags:Sink Public,type:text/vnd.tiddlywiki,text:TheControlAltBackspace sub-series about, well, naming files, and the way I do it in my FilesystemCabinet.\n\n* Mechanical Considerations:https://controlaltbackspace.org/filesystem/the-art-of-naming-files-mechanical-considerations/\n* Naming Conventions: https://controlaltbackspace.org/filesystem/the-art-of-naming-files-conventions/},{title:ArtOfPersonalIndexing,created:20200716174637914,modified:20200716174718081,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://thetechnicalgeekery.com/2013/06/the-complete-guide-to-indexing-your-paper-notes/,text:Blog post for MyTechnicalGeekery many years back.\n\n{{!!url}}},{title:ArtOfWar,author:Sun Zi,bibliography:LifetimeReading,caption:The Art of War,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034030,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:AScannerDarkly,author:Richard Linklater / Philip K. Dick,caption:A Scanner Darkly,completed:202103061200,created:20210307130302263,medium:film,modified:20210809202159485,rating:average,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,url:,year:2006,text:Semi-dystopic MrRichardLinklater film about drug abuse and surveillance. The entire film is rendered on rotoscope, acted live and then drawn over, which gives it a slightly surreal but still very grounded effect.\n\nWatching this in early 2021, I wasnt really fazed by the surveillance part, which I find actually scary. Im something of a privacy advocate|NothingToHide myself, and even I do what I think we all do and consider the extent of electronic surveillance today “out of sight, out of mind.” You almost have to if you dont want to spend your whole life trying to thwart everyone from collecting information about you. We talk about it being ridiculous, but then live resigned to it and dont really do a whole lot about it. Im reminded of something MrNathanRobinson wrote about the Holocaust (\u003C\u003Crt 9648>>):\n\n> I almost think that in order to get on with your life, you have to operate in some state of quasi-denial: affirming intellectually that the Holocaust happened, but avoiding feeling viscerally what that actually means.\n\nTheres also the fact that in the film we only see the tech used against people who are plainly “criminals” (distributing/abusing drugs), and only in a very limited manner.\n\nI was going to say that the “criminals” are sort of the protagonists, but now that I think about it, Im not sure. I dont think anyone was portrayed as such. The Substance D users are victims of circumstance; the law enforcement agencies are doing terrible things, including essentially destroying Bobs life without his consent, in the name of restoring order. And, as we learn at the end, the drug rehabilitation agency is also producing and distributing the drugs, which (also scarily) doesnt feel even the slightest bit out of place in my world in 2021.\n\nSubstance D is of course not a real drug, and the progression shown in the film is of course fictional, but nevertheless watching the deterioration of everyone on it serves as a valuable reminder of the reality of many drugs out there. With the recent liberalization of American attitudes toward drugs, at least in my circles, its easy to forget. (Pot|Cannabis and psychedelics|PsychedelicDrug seem to provide a reasonable CostBenefitRatio for many people, but its easy to subconsciously extrapolate if youre not careful. I may be in even more danger of this mistake than many people because Im just not really interested in cheap thrills, so dont think I would ever come close to any of the really nasty drugs.)\n\nDonna and the law enforcement agencys treatment of Bob has echoes of EndersGame, although even worse since theyre getting him to harm himself instead of others.},{title:AsciiDoc,created:20210628021907913,es:confident,modified:20210628022224238,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Alternative to ReStructuredText and Markdown (more similar to the former -- better suited for large documents than Markdown).},{title:ASeriousMan,created:20240402014950909,creator:soren,modified:20240509110844181,modifier:soren,tags:Source Public,type:text/vnd.tiddlywiki},{title:Asexuality,created:20210308031852436,creator:soren,description:A spectrum of experiences where one does not feel sexual attraction, or feels it only under very specific circumstances.,es:confident,modified:20231010023524948,modifier:soren,tags:Idea Definition Romance Public Sexuality,type:text/vnd.tiddlywiki,text:The state of not experiencing sexual attraction. There is also gray-asexuality (sometimes “grey-ace” or “grace”) and demisexuality|DemiPerson (me, q.v.), which are partway between this “complete” asexuality and a typical experience.\n\nAsexuality is distinct but often conflated with //aromanticism// (sometimes intentionally if the differences are unimportant), which is the state of not experiencing romantic attraction. That is, one can be uninterested in sex //per se// (asexual) but still be interested in forming pair bonds, marrying, and so on (not aromantic) -- or vice versa.\n\nAsexuality is also distinct from libido; one can have a high sex drive but not be interested in satisfying it with any particular person, and such a person is still considered asexual by this definition. And asexual people can and often do have sex, and even enjoy it – for those who do, they just want and enjoy it for reasons other than sexual attraction (e.g., it feels good physically, its very intimate, it makes their partner happy).\n\nBeingAsexual2019 is a super-interesting read about how all these things differ from each other and what we can learn about people of “normal” (SociologicalQuotationMarks) sexuality from the fact that these differences exist.\n\n\n!! Messy terminology \n\nThere is significant ambiguity surrounding the terms, especially the word “asexual”, which can be taken to mean either fully asexual or the entire spectrum. As a demi person, throughout my Zettelkasten and other writings, I typically use the word “asexual” to mean fully asexual, and “ace” to mean the entire spectrum. If this seems unclear in context, Ill clarify with “fully asexual” or “ace spectrum” (or sometimes “ace-spec”), respectively. “Aromantic” (or “aro”), to me, always implies totally aromantic.\n\nI consider “gray-ace” (or “gray-A”, or “gray*” if Im also talking about grayromanticism) to be a superset of demisexuality/demiromanticism, and so will sometimes describe myself this way, too; but I tend to avoid this if I think its unclear, even if the alternative is ugly.\n\nI sometimes write “demi/gray” as a vague umbrella term for all combinations of demi-, gray-, -sexual, and -romantic.\n\nI sometimes just describe myself as “on the asexual spectrum” in social situations where I dont want to have a long conversation about it; explaining what demisexuality is can be a real chore! Most people have at least a rough idea of what “the asexual spectrum” means -- even if their idea is somewhat wrong, its usually close enough that Ill get my point across in the vague situations where this is needed, and I find people rarely ask more questions with this descriptor.},{title:AsILayDying1930,author:Faulkner,bibliography:LifetimeReading,caption:As I Lay Dying,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034038,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1930},{title:AskScottGuthrie20200520,at:202005201730,caption:Ask Scott Guthrie, with Scott Guthrie,created:20200518214229213,medium:video,modified:20210522015801770,presenter:MrScottGuthrie,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/e5c81ba2-c901-4293-a27a-ea9c000b58c,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nQ&A session with MrScottGuthrie (duh). The questions were presented and vetted ahead of time, of course, but they were submitted by attendees.\n\nThe name of this session has been endorsed by the Department of Redundancy Department.\n\n!! Product-focused questions\n\n* Where is Azure growth headed in the next few years?\n** Driven by IoT, new ways to use data\n** Continued need to focus on development/deployment methodology (see DevOps)\n** Cloud will be “the next big enabler for the world”\n\n* Azure quantum computing roadmap\n** Still an “emerging technology”\n** MS has a team researching Azure services and development tools (“Quantum Developer Kit”)\n\n* How is M.|PrivatePerson maintaining energy efficiency with the spike in Azure utilization?\n** 2030/2050 commitment (see SustainableDataCenters20200520 and DataCenterSustainability in general)\n** Azure dashboards for customers\n\n* Easiest way to move from TFS on-prem to AzureDevOps Services?\n** Hah, I know a little about this one...\n** For those who arent me, theres a handy migrator tool.\n\n* Why DotNet over something else?\n** 20 years old this year!\n** CSharp is a nice balance of high-level productivity capabilities and performance/type-safety\n** .NET Core is even more of the same -- some MS apps have doubled in performance while reducing memory usage when being moved.\n** VisualStudio is a good IDE SIB: when it works!\n\n* What does the future of .NET look like?\n** Make sure it works on all OSs/systems\n** Blazor!\n*** Although he said Blazor compiles down to JavaScript, which it does not...oops.\n** .NET as an API layer\n** Focus on publishing apps as part of MicrosoftTeams\n\n* How do the Azure services provide an argument for building something vs. buying it?\n** Maybe actually suggests an in-the-middle approach...use pre-built apps available on the platform that have excellent extension points.\n** This combination has the potential to deliver more than a “buy” solution faster and more efficiently than a “build” solution.\n\n* Whats holding us back in developing the next level of ArtificialIntelligence/MachineLearning? Algorithms? Hardware? Where do you see AI by 2030?\n** The more network and CPU you throw at it, the better it does, for sure. So hardware is a meaningful issue.\n** Data models are more of an issue than learning algorithms. Getting good data is a giant issue cf. DataIsDangerous. Bias and unintended consequences|RoadToHell lead to incorrect answers. GIGO is as true as always. What tools can we provide data scientists? See also Fairlearn and ModelInterpretability -- need the ability to understand why decisions are made to combat these issues.\n** Connecting existing data models to AI training is going to be a big area for improvement. The likes of MicrosoftGraph and development of a common data model that can be placed in a data lake. (In this system, a contact in Office is the same as in Dynamics, which is the same as a model you can pull into a .NET application...so you dont have to spend all your time figuring out how to convert data.)\n*** SIB: How might this affect our thinking, to have the same fields on everything? Could be good, could be bad. Or, probably, both.\n\n\n!! Personal lightning round\n\n* What would you do if you werent at MS/in tech?\n** History professor.\n\n* Advice for people trying to get into tech\n** Find joy in tech\n** Keep learning\n\n* Random Twitter scroll: WinForms is now available for .NET Core\n\n* If MS re-released one old tech from the past, what should it be?\n** DotNet (and we did it...with .NET Core)\n** Facilitator: \The right answer was Zune!\\n\n* Personal projects right now?\n** Working on some PowerPoint extensions (lol)\n\n!! The future of Microsoft\n\n* WFH will be more common in the future. Whats your vision for remote collaboration with the effects of working in person (new hires, pair programming, etc.)?\n** How do we make people productive? -- Live Share, CodeSpaces, TheGitHub. This part is going well.\n** How do we make our lives fun and human? -- Not about “getting code written faster.” Some work on PR model, even silly things like emoji and GIFs. Trying to make the tools have a human element.\n\n* Will SSIS and database projects be getting more attention in the future? Getting left behind: build support, testing, deployment, code reviews...\n** Managed SQL instances work with SSIS now\n** SSIS hasnt mapped that well in the cloud, but is being worked on\n** Data Factory and PowerBi options as well. Ideally, we have to do less SSISing to accomplish things.\n\n* Is the mixed/augmented reality market stalled?\n** Demand is continuing to rise.\n** Big struggle is actually just making enough HoloLenses to meet demand!\n** Demand is high because the tech is getting better. Wider field of view in 2nd-gen, more comfortable to wear. Flippable lens.\n** Has been helpful during pandemic for helping/seeing people remotely.\n*** Medical training and skilled installation via ~FedExd HoloLens! Could be quite useful in non-pandemic times too. \n*** SIB: See discussion of financial planner in Mankato.\n** Tech goes through a “pre-chasm” phase where theres trouble getting uptick beyond early adopters. If you lose track or give up too early, it can take over the world while you arent looking.\n*** Suspecting 2022-ish broad usage as a result.},{title:AsLongAsLoveShallLast,created:20251020034546039,creator:soren,description:“Until death do us part” considered harmful and actually weaker than “as long as love shall last.”,es:likely,modified:20251118125655420,modifier:soren,tags:Idea Romance Public Essay Favorites,type:text/vnd.tiddlywiki,text:Somewhere on the internet I ran across a couple who said they got married|Marriage more or less traditionally, but instead of “until death do us part,” they said, “as long as love shall last.”\n\nPresumably many if not most people see that as cheapening the commitment -- maybe it looks like a version of the selfish marriage|HypotheticalCommitmentTypes/SelfishMarriage Ive proposed -- but the more I think about it, the more I think this version is just //better//. On reflection, to me its actually a more beautiful, more humane, more serious, and maybe even stronger promise.\n\nBefore we get into why that is, lets make an attempt to pin down what this means, because both //love// and //last// have many interpretations. I would not, for instance, want to mutually promise to stay with someone “as long as love shall last” if it meant “until I dont feel infatuated with you anymore”; that really would cheapen the commitment. On the other hand, I also wouldnt want it taken to refer to love between two people in some cosmic eternal sense, which I think its both pleasant and defensible to believe never really goes away. And I certainly wouldnt want it to mean the end of caring about the other person. Relationships can and often do become untenable without ever losing that, and if I actually stuck it out until I no longer cared about someone Id once cared about enough to marry, I would almost certainly judge myself in retrospect to have waited far too long.\n\nThere is no single “right” interpretation here, of course; it will be different for every couple.\u003C\u003Cfnote \Id argue this is true even if you plan to read your vows right out of the Roman Rite, and not explicitly discussing what you mean in advance until you come to a unified interpretation is an enormous mistake, but thats a separate argument.\>> But if I were ever to make this promise to someone, heres what I think I would mean: The love being spoken about is a question of the space between the two of us that belongs to neither of us and both of us. Its not “until I dont love you anymore,” its “until the space between us is no longer alive and luminous and full of possibility, and shows no sign of reopening.” That leaves lots of room for the shared space to temporarily wither, for us to make major sacrifices for it, for us to maintain relentlessly optimistic|RelentlessOptimism hope for its reinvigoration. It still demands working tirelessly to keep the space alive and waiting to judge it dead until theres no alternative. Yet it also leaves room to recognize when the relationship is unsalvageable and act accordingly, without having to feel like failures or bad people. Life is random and unfair; sometimes we can do everything right and still lose.\u003C\u003Cfnote \That is not a weakness, that is life.|https://www.youtube.com/watch?vt4A-Ml8YHyM\>> Sometimes we make very human mistakes which unfortunately cause unrecoverable damage. However it happens, if we come to find the space between us is really and truly dead (that is to say, still beautiful and meaningful in the past but permanently cut off from the present and future), the best course of action -- the //loving// course of action -- is to cut our losses proudly and move on. It would be foolish to compound them by pretending the space is still alive or feeling guilty about acknowledging its death, and if anything we should promise not to do that.\n\n-----\n\nWhats good about this promise?\n\nFirst, compared to the traditional one, it has positive psychological effects on how you think about the relationship youre entering into. It reminds you, every time you think about it, that intimate relationships are an ongoing job|DiplomaVsToothbrushingProblems, not something you find once and then have finished; that your partner is a process you need to stay synced with|ProcessOfYou; that everything in this world is inherently temporary and everything eventually returns to dust and there are a lot of ways that can happen besides physically dying, and you can and should do your best to keep them going if you still care about them but you might not succeed, and thats OK|HappyAbsolutelyFine2016.\u003C\u003Cfnote \Believing strongly in a B-theory of time where the apparent ontological privilege of a present is an illusion legitimately helps me a lot with dealing with change and continuing to appreciate things that are “over forever.” I highly recommend this.\>> These are all important things to remember, things that will make your relationship stronger, not weaker.\n\nIn contrast, I think committing to continue a relationship no matter what anyone does, what it looks like, or even whether the people in it want to remain in it at all, poses a large risk of convincing you to take it for granted in a way that can easily destroy it. Your partner promised to stay with you until one of you died no matter what, so do you really have to do your best at taking care of them and making them happy? Is it worth learning to take their needs fully into consideration and continuously improve your relationship skills? Why not just do the minimum necessary to stay happy yourself and prioritize other things that you might still lose? Obviously thats pretty cynical -- the obvious rejoinder is that you wont do that because you //care// about your partner, or if youre thinking more broadly and using positive-sum thinking, because you think youll have a better relationship yourself if you take care of your partner -- but then, if that was really all it took, if it was that easy, why bother getting married at all? Clearly, making the commitment is still doing something useful, so shouldnt you align that commitment with what you want it to help you do? (Cf. StrongerRelationshipWithoutNeed.) \n\nSecond, I find it highly desirable to explicitly exclude situations where someone is abusive or simply cannot discharge their own responsibilities in the relationship from the commitment, and I think “as long as love shall last” is a major improvement on that front. Its one thing if someone is sick or needs extra help or whatever; wanting to stick with it in those situations is part of why marriage is both a personal and social good for many people. Its quite another if someone proves incapable, for whatever reason, of doing any of the things they promised to do, so that the shared space dies and the relationship is no longer mutually beneficial. Its a high bar for a relationship to not be mutually beneficial, for me, but it can certainly happen. I think it is plausibly morally wrong to enter a commitment that risks putting your partner in a position where they are being deeply, actively harmed by keeping a commitment they feel bound to keep. That is a lose-lose situation; do you really want to put this person you love in it?\n\nIn practice, what usually happens is that the person put in that situation eventually reneges on their commitment, but feels extremely guilty about it even if theyre sure its the right thing to do, and takes much longer than they should have to make the decision. And the truth is that everyone knows, deep down, that they might have to do this when they make the commitment, even if on the surface they choose to irrationally believe it can never happen to them\u003C\u003Cfnote \To be clear, I mean this in the most positive way possible. Such irrational beliefs are often extremely adaptive!\>> -- which means in some way youre making possibly the most serious commitment of your entire life without quite meaning it. I think this is really bad! It might seem like a minor point, but I think if youre going to say something that serious to another person, you should stand 100% behind it without any reservations whatsoever, not 98%, and if you cant do that, you should change what youre saying until you can say what you mean. The idea of starting out a life with someone else by essentially lying to them -- even a little bit -- is deeply disturbing to me.\u003C\u003Cfnote \Not that I had ever thought about it like this before pondering the questions in this tiddler. Which just goes to show you how powerful and unquestioned the social script for marriage is.\>>\n\n(I think its worth pausing to underline this implication: my reluctance toward the making of the traditional promise is specifically //because// I take the promise being made extremely seriously. This should give pause to anyone whose immediate reaction is that the shift is cheapening the commitment. I think it is wrong to make promises of this caliber that you do not mean with every fiber of your being, and I think it is somewhere between exceedingly difficult and impossible to actually mean it if you dont take the ways you might be left unable to keep the promise into your account of what you mean. By narrowing the scope just a little bit, you make room for what is left to be fully honest, and thus far //more// serious.)\n\nFinally, I think if you vow “as long as love shall last” in the context of a wedding, youre still implying very strongly that you believe it will last forever, or at least for a very long time.\u003C\u003Cfnote \Maybe even that your commitment will outlast the lives of one or both partners, in a timeless cosmic sense. Which I like.\>> But this time, youre in some way staking your commitment on the strength of your belief in the relationship, in a way that is self-referential and reinforces itself. I think that optimism and that linking together of all the facets of the relationship and what you want to do with it is deeply beautiful in a way that saying “yeah, everything forever or nothing ever again|EverythingForeverOrNothingEverAgain until someone kicks the bucket” is not.\n\n!! References\n\n\u003C$m2.x number\1\>\nCounterpoint: Oaths arent about oaths, theyre about performative speech acts|https://thingofthings.substack.com/p/oaths-arent-about-oaths-theyre-about, in which MxOzyBrennan argues something like my interpretation is implicit anyway. But I think everyones implicit understanding is slightly different, and this leads to a great deal of suffering. Also, why not make this a time when you say what you actually mean? I mostly agree with Ozy that its fine to take an oath to uphold the values of the Freemasons or whatever and not mean what you say 100%; marriage feels different.\n\u003C/$m2.x>},{title:ASMAD,created:20240530223819114,creator:soren,modified:20240530223823623,modifier:soren,tags:Idea Software Definition Public,type:text/vnd.tiddlywiki},{title:AsMuchAsNeededAndAsLittleAsPossible,created:20200202004921884,creator:soren,es:confident,modified:20211005150804442,modifier:soren,tags:Design PhilosophyOfLife Expression Public Idea,type:text/vnd.tiddlywiki,text:A useful philosophy in many areas of life: dont shy away from doing something when it provides real, identifiable benefits, but dont go overboard on it because excess can be very dangerous. A few examples:\n\n* Information organization: folders and tags (see MinimalTagging).\n* Digital devices (phones, computers, whatever)\n* Spending money (on anything).\n* Writing code (see NoCodeAtAll).\n\nPerfectionIsSubtractive: its obtained by taking as much as possible away.\n\nI sometimes call this “as few as you can get away with.”\n\n!! References\n\n> The right amount of complexity is whatever creates optimal simplicity.\n> ---MrDavidAllen, GettingThingsDone},{title:AssistiveTechForColorblindness,created:20210917142924864,creator:soren,es:likely,modified:20240509110928283,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:TODO: I appear to have forgotten to integrate this into ExperienceOfColorblindness?\n\n!! Assistive technology\n\nGiven the huge strides that such technology has made in many other areas, Im actually sometimes surprised how poor the tooling for colorblindness is. I suspect the main reason is that its just not that big a deal, so most people arent willing to spend a lot of money on it or wear anything special.\n\nSeveral apps are available to either identify colors or alter similar colors to make them more distinguishable, either on a computer screen or through a smartphones camera. I find that camera-based color identification is poor in anything except bright outdoor light, which makes it mostly useless; its uncommon to need to identify a color name outside, at least in a situation where you could pull out your phone and point it at the object. The alteration function is somewhat more useful. Some companies also make (much more expensive) glasses that operate on the same principle, either tinting everything in one direction or selectively removing narrow bands of wavelengths that create difficulty distinguishing colors. None of these tools actually restore any vision a color-blind person doesnt have or increase the range of colors they can see; they just alter the colors to make them easier to tell apart.\n\nThe most useful color-related app function I have is the simulation tool, which alters colors in the reverse direction, making them more difficult to distinguish for people with normal color vision. I used to spend a lot of time trying to give friends unsatisfying visual descriptions of what being color-blind is like; now I can just pull my phone out of my pocket and let them look around at the room in AR. (Simulations are not a true representation of what a color-blind person sees for several reasons, but they do a solidly good job at demonstrating the functional impairment.)\n\nIf Im working on the computer, I often use the color name and hue|https://www.color-blindness.com/color-name-hue/ tool to produce a certified-understandable-to-people-with-normal-color-vision color name from a hex color (you can get the hex color of any pixel on your screen from the color picker tool in any graphics program).\n},{title:AstonishingExistence,created:20220816024953581,creator:soren,description:That something exists, and that you are in it, is impossibly unlikely, yet here you are.,es:confident,modified:20231112011953282,modifier:soren,reviewed:20250208,tags:Religion Ontology Idea Public,type:text/vnd.tiddlywiki,text:PhilosophyRift: every single one of your millions of ancestors figured out a way to survive in a crazy world long enough to reproduce. 100.00%. Thats pretty crazy.\n\nOf course, this is a statistical tautology. There is no other way you could be here observing anything; the uncountable number of potential people who //didnt// end up existing simply arent here to think about this. But somehow this doesnt diminish the impact (at least for me). Your existence is utterly astonishing|https://aeon.co/essays/think-about-it-your-existence-is-utterly-astonishing in that, if any single one of those ancestors had done something even slightly different, or before that the universe had expanded in a slightly different way, you wouldnt be here. Out of a practically infinite number of alternate ways the world could have developed, one happened that includes you, and me, and Zettelkästen, and the Grand Canyon.\n\nActually, even the fact that anything exists at all is crazy. Why should there be //something// at all, rather than nothing?\u003C\u003Cfnote \\\Dont try to say //God//, because...then why should there be God, rather than no God? E.g., “because God is good” presupposes that there exists some system of value judgment, which can only be created by divinity or consciousness.\\\>> (See WhyDoesTheWorldExist2012.)},{title:AstoriaMeglerBridge,created:20250626182926368,creator:soren,modified:20250626182927203,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AstralCodexTen,author:MrScottAlexander,blogroll:Blogroll,caption:Astral Codex Ten,created:20240402014957720,creator:soren,modified:20250905203313765,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.astralcodexten.com/,text:Blog of MrScottAlexander, succeeding SlateStarCodex, on TheSubstack.},{title:AsWeMayThink1945,bibliography:Zettelkasten,caption:As We May Think,created:20200808025045395,description:A 1945 article in TheAtlantic about the Memex and the authors vision of information science at the time. All these years later, and with the proposed physical manifestation of the memex ancient history with the advent of powerful digital computers, the ideas in the memex continue to reverberate throughout the community of information organization and memory augmentation. It directly inspired the Web and many other designers of critical technologies.,medium:article,modified:20200808143318841,tags:Source Public,type:text/vnd.tiddlywiki,url:https://theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/,year:1945,text:A 1945 article in TheAtlantic about the Memex and the authors vision of information science at the time. All these years later, and with the proposed physical manifestation of the memex ancient history with the advent of powerful digital computers, the ideas in the memex continue to reverberate throughout the community of information organization and memory augmentation. It directly inspired the Web and many other designers of critical technologies.},{title:AsYouLikeIt,author:Shakespeare,bibliography:LifetimeReading,caption:As You Like It,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034051,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:AtlasShrugged1957,author:Rand,bibliography:LifetimeReading,caption:Atlas Shrugged,created:20210703170128000,genre:Politics,medium:book,modified:20210705214034060,priority:3,readstatus:unread,recommended-by:Penguin,tags:Source Public,type:text/vnd.tiddlywiki,year:1957,text:Length: !},{title:Attachment,caption:Any embedded file that is not an Image.,color:#ff0000,created:20200122024451228,creator:soren,icon:$:/core/images/tag-button,modified:20210825155401976,modifier:soren,refexplorer-hide:yes,tags:Meta Public,type:text/vnd.tiddlywiki,text:The //Attachment// tag is applied to any file embedded within the wiki as a tiddler that is not an Image.},{title:AttentionEspeciallyToIncidentalDetails,created:20200127030025543,description:To produce something complete and beautiful, one must pay even more attention to the small stuff than to the large stuff.,es:confident,modified:20210623015757666,tags:Design Typography Public Favorites Idea,type:text/vnd.tiddlywiki,text:MrRobertBringhurst argues in ElementsOfTypographicStyle that even “incidental details” like footnotes, copyright pages, and so on need the same careful treatment as the “important” text of a book: they have just as much potential to ruin the impression, and in typography thats in fact all youre trying to do, avoid doing a bad job at something so that the meaning of the text shows through without distraction. (Cf. SingingLessWrong and UnthankableSystem: sometimes “distance away from bad” is the metric at issue.)\n\nFurther, there is a strong temptation to ignore incidental details because they dont seem important, especially when youre already short on time, which means they get the least attention and likely end up looking the worst unless you consciously prioritize them.\n\nHe finishes by restating:\n\n> Perhaps the principle should read: Give full typographic attention //especially// to incidental details.\n\nIve found musicians often make the same mistake: see NoRehearsalFallacy. The LogicalInversionError is related too -- with the exception that the missed detail is not so incidental!},{title:attopublish,author:Soren Bjornstad,caption:attopublish,created:20230222040649007,creator:soren,es:confident,modified:20230222040727160,modifier:soren,tags:Idea Software Sink Public,type:text/vnd.tiddlywiki,text:My minimalistic microsite generator and eponymous microblog at https://ap.sorenbjornstad.com.},{title:AttractivenessAsymmetry,created:20211027021729403,creator:soren,description:When there is little downside to being found unattractive, strive to be extremely attractive to a few rather than moderately attractive to many.,es:likely,modified:20250929154609823,modifier:soren,tags:Romance Idea InterpersonalRelations Public Sexuality,type:text/vnd.tiddlywiki,text:A convenient and surprisingly rarely-noted asymmetry is found in the process of searching for a romantic partner (or for that matter, a friend, a business partner, or an employer): it is much more useful to be extremely attractive to a few people than to be moderately attractive to many people. The upside of someone finding you extremely attractive is obvious. The downside of someone not finding you attractive is almost nonexistent (in most cases, you never even find out, or you chat for five minutes, see you have no chances, and leave; in a handful, you get directly rejected, which hurts very briefly and then disappears).\n\nTo state the obvious, you only need to find //one// good-quality partner, or if its more your style, a few dozen in a row, or a couple at a time; theres no benefit to tens of thousands of people near you finding you attractive except a slight ego boost.\u003C\u003Cfnote \In fact, theres a downside: it makes it harder for you to choose!\>> Perhaps the one exception would be if theres someone in particular youre trying to impress; but this does not seem a winning strategy in the general case.\n\nConsequence: you should probably be less afraid to display the more unusual aspects of yourself than you think, physically or otherwise. Quirks dont have to be harmful to your prospects, especially if they help filter out people you wouldnt have been that interested in either. Not only cant you PleaseEveryone, you shouldnt even want to.\n\nThe practical consequences are yet another form of EightyTwentyPrinciple.\n\nBeing moderately attractive to everyone is an example of the TyrannyOfAverages -- having a mathematically high “attractiveness average” is completely useless since people are indivisible.\u003C\u003Cfnote \At least in a form youd like to go out with.\u003Csup>citation needed\u003C/sup>\>> You need to get one person over a high threshold, not a bunch over a low one.\n\nOne advantage of the polyspecialist|Polyspecialization is her ability to take advantage of this asymmetry by positioning herself alone in a niche needed by only a few people in the world, but which those people cant do without.\n\n\n!! References\n\n> Its a little counter-intuitive at first; you would think that being more broadly attractive would benefit you overall. However, being broadly appealing tends to mean that theres not a lot of depth to that appeal; its the difference between someone seeing you as “wouldnt kick them out of bed” level of attractive vs. “NO TIME TO TALK, GET YOUR CLOTHES OFF.”\n> ---Reddit comment, \u003C\u003Crt 5569>>\n\nAn informal study by OKCupid|https://web.archive.org/web/20170221092553/https://theblog.okcupid.com/the-mathematics-of-beauty-51bd25ae9a75#.gdad7cosd provides support for the quote above.\n\n> You can either build something a large number of people want a small amount, or something a small number of people want a large amount. Choose the latter. Not all ideas of that type are good startup ideas, but nearly all good startup ideas are of that type.\n> ---MrPaulGraham, “How to Get Startup Ideas|https://paulgraham.com/startupideas.html”},{title:AuditedTyping,created:20200118044215113,creator:soren,es:mythological,modified:20211228002830224,modifier:soren,tags:Humor Anecdote Public Idea,type:text/vnd.tiddlywiki,text:At one of my TheGreatCon cohorts many lunches together, we got into a debate about whether it would be worthwhile to audit a philosophy class, or if you wouldnt really learn much without doing most of the work.\n\nA.B.|PrivatePerson, in apparent support of the idea that you can audit anything, said that her mother audited //typing//. Presumably she at least had a typewriter even though she wasnt officially taking the class, but still. Im not sure I can think of anything less conducive to auditing, except maybe playing a musical instrument; its a combination of motor skills and a particularly small amount of useful theory you can pick up by listening.},{title:AugmentationVsAutomation,created:20210627023127938,description:Augmentation involves having people and computers work together in a partnership.,es:possible,modified:20210627041452507,tags:Employment AI Public Idea,type:text/vnd.tiddlywiki,text:OnlyHumansNeedApply2016 argues for an approach to AI development and automation they term augmentation: rather than completely automate things so they dont involve people at all, we should aim to produce systems that involve humans and computers working together, involving the strengths of both. \n\nThis is quite a TheControlAltBackspace approach and I like it. Its a good way to think about our goals when trying to introduce more computer logic into processes.\n\nWhile I think augmentation is clearly the best approach socially, and would probably produce the best outcomes in most situations, I am not convinced that adopting it actually provides a sufficient economic advantage that it will be widely used across all industries. We certainly know that many products are not as good as they could be and are produced with crappy labor practices today -- why would it be different later? Indeed, little emphasis seems to be given to, for instance, helping people think|TransformativeToolsForThought with computers, although perhaps that is a poor example because the incentives are particularly terrible in that field.\n\nThe economic incentives can even be perverse; see ShadowWork, where we end up doing extra work for corporations (and reducing BigPictureProductivity) because that gets the work off the companys balance sheet.\n\nFurther, its not clear whether augmentation is a feasible career path for everyone|IntelligenceAndAugmentation. It may provide only part of the solution for a coming lack of work.},{title:AugmentingLongTermMemory201807,author:Michael Nielsen,bibliography:Anki,caption:Augmenting Long-Term Memory,created:20200707233033311,creator:soren,description:A variety of observations, tips, and patterns on how to use Anki for learning complicated material.,medium:article,modified:20240829192321791,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:http://augmentingcognition.com/ltm.html,year:2018,text:Article by MrMichaelNielsen about Anki and some observations on how to practically use Anki for working in technical disciplines, with complex ideas. There are also thoughts on kinds of cards you may want to make, and a discussion of the meaning and value of atomicity in Anki cards.\n},{title:AugspurgerMountainTrail,created:20250621165015820,creator:soren,modified:20250621165016803,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AureliusMeditations,author:Marcus Aurelius,bibliography:LifetimeReading,caption:Meditations,created:20210703170128000,creator:soren,genre:Philosophy,medium:book,modified:20220821203326400,modifier:soren,priority:2,readstatus:read,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:AusterGhosts,author:Auster,bibliography:LifetimeReading,caption:Ghosts,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034083,priority:,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:AustinMinnesota,created:20200322151915231,creator:soren,modified:20240509111105250,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Australia,created:20240402011557020,creator:soren,modified:20240509111107185,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:AutobiographyOfMalcolmX1965,author:Malcolm X/Haley,bibliography:LifetimeReading,caption:Autobiography of Malcolm X,created:20210703170128000,genre:History,medium:book,modified:20210705214034091,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1965},{title:AutobiographyOfRed,author:Anne Carson,caption:Autobiography of Red,completed:20220630,created:20220701082615053,creator:soren,medium:book,modified:20220728220808594,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1998,text:Something somewhere between a poem, a novella, and a weird mythological art piece by MsAnneCarson. \n\nRecommended to me by P.|PrivatePerson, and almost as soon as I opened it I could see why he loved it. Personally, Im glad I read it but was not quite sure what to make of it! Consequently, I think I have to call this average, even though it surely merits distinguished on some dimensions.\n\nThe myth part is about Geryon, a red devil with wings (Geryon makes an appearance in NetHack, as I recall, but as with all such cameos, one cannot be too sure what parts of the cameo to believe, even when youre not already dealing with a body of myth that isnt always internally consistent\u003C\u003Cfnote \\\I was commenting to James at the 2022 RemNote offsite that almost everything I know about Oxford (except what I learned from K.B.|PrivatePerson) I learned from Philip Pullman|MrPhilipPullman novels, so I am never entirely sure if something I \know\ about it is fictional or not! Similar here.\\\>>). Then the novel-ish part is about a Geryon who is basically human, but also not in a slightly-more-than-magical-realist way; he clearly has actual wings, and at the end it appears he can actually fly with them. His mother is, in the myth, a nymph, and this is repeated in the story, though what this means is unclear because she seems to be a person. Geryon is a weird kid and grows up into a strange life as a young and confused photography enthusiast.\n\nGeryon is gay and there is a gay love triangle involved, with some actually kind of romantic parts. I enormously appreciated this; its the only book I think Ive ever read that contains people being gay\u003C\u003Cfnote \Except as a side note about their character. I mean an actual depiction of love or a relationship.\>> without the book being actually //about// being gay. The latter is OK for what it is, but its never going to produce actual “representation” as we say, and, well, its usually boring. How many books about identity can we take?|IdentityIntegrationDivide (And I just realized writing this, this book was written in freaking 1998. That in 2022 I feel like the current literary world is being upstaged in normalization of queerness by a book from the nineties is astounding, and disappointing.)\n\nI expected Geryon to die at the end, as in the myth, killed by Hercules, though I wasnt sure how this would happen (literally? metaphorically?). He gets in a fight with a dude named Hercules, but essentially wins it. And then the book just ends abruptly without, for me, any real closure -- to the point that I flipped the (virtual) pages a couple of times to be sure I hadnt missed something, a la M.|PrivatePerson in //Salem Falls//. I didnt feel like it was //wrong// to leave it here, but it was definitely not what I expected and didnt leave me with enough understanding to feel like I knew what to make of the book, as I said further up.},{title:Autofocus,created:20240201193028062,creator:soren,description:Technique for deciding which todo items to do next based on a subjective feeling of rightness or salience.,es:likely,modified:20251230033443576,modifier:soren,tags:Idea Productivity Process Public,type:text/vnd.tiddlywiki,url:http://markforster.squarespace.com/autofocus-system/,text:System by MrMarkForster ({{!!url}}) for deciding which to-do item to do next. It aims to ensure that you are always doing something that you want to do, while gradually breaking down resistance to things you initially dont want to do and preventing any task from getting stalled indefinitely.\n\nAutofocus is not a complete methodology for managing work. It doesnt say much if anything about managing projects, how you get items onto your to-do list, how you handle things youre waiting for, how you deal with time-sensitive or calendar-based tasks, or anything like that. But it fits neatly into most workflows for these other things that you might have.\n\nOne of Autofocuss strengths is its simplicity. It uses minimalistic tools and requires almost no setup. You just have to follow a few straightforward, prescriptive rules and pay attention to how you feel about your tasks, and everything else takes care of itself.\n\n\n!! What is the right task to work on?\n\nThe key insight of Autofocus is that, so far as is possible, at every moment of your day, you should aim to be doing a task that you want to do and feel fully capable of doing.\n\nThe most obvious benefit of this is that youre usually happier when youre doing something you want to be doing. But there are other benefits too. When your current desires and capabilities are mismatched with your task, you have to use willpower to start and keep working on it, youre less efficient, youre more likely to be distracted and less likely to get into flow, and youre unlikely to put forth your best effort. In contrast, when youre doing something you //want// to be doing, work (to include creative leisure tasks, household chores, etc.) is easy, joyful, and efficient.\n\nPeople often prioritize what they work on primarily by whats most important or urgent (see the popular EisenhowerBox taxonomy). These factors are, of course, worth attending to; if you spend all your time on unimportant, non-urgent tasks, youll be deeply unproductive and your life will fall apart. But human factors are deeply underrated in prioritization. Suppose you have two tasks you could be working on, neither of which is terribly urgent.\n\n* Task A: 4/5 importance; you have strong resistance to working on it.\n* Task B: 3/5 importance; youre excited about working on it.\n\nPrioritization by importance would suggest you should do Task A first (and many people will actually push themselves to do it first). But in reality, you should almost certainly do Task B first. Sure, that means itll take you longer to get around to the slightly more important task. But Task B is still plenty important. Moreover, Task B will be //much// easier to get yourself to do, and youll probably do a better job on it than Task A and get more of it done in the same amount of time.\n\nAnd thats not even the end of the benefit of doing it this way! Its not just possible but //common// that after you finish Task B, Task A will look more attractive and youll no longer have a strong resistance to it. If so, youll be ready to tackle Task A as well, and youll enjoy completing both tasks and get them done faster than if youd completed them in the “theoretically correct” order. Well talk more about why this happens in the next section.\n\nSo in theory, when leaving out human factors, doing your tasks strictly in order of urgency or importance could make sense. But because, in practice, people are not equally productive when working on things theyre unhappy doing and things theyre excited about doing, most peoples throughput increases substantially when they instead optimize for what theyll be most effective working on at any given moment, which more than makes up for getting to the most important tasks slightly slower.\n\n\n!! Chasing salience\n\nIt turns out that we are surprisingly good at figuring out what the most motivating and highest-value task is at any given moment, considering both our current capabilities and the tasks importance and urgency. It doesnt require math or ratings -- we just need to look at a clear list of the possibilities to review, and get out of our own way so we can notice how we feel about the tasks. (MrDavidAllen has also noted this in GettingThingsDone.) Autofocus helps us notice the signal from our unconscious mind that a particular task is a good fit at this moment.\n\nWhat does that signal feel like? Salience (literally //jumping//) is easy to recognize, but hard to describe. Forster describes salience\u003C\u003Cfnote \“Salience” is my term. Forster does not give this concept a specific word in his original method.\>> as a “feeling of release about an item”: the task is //ready// to be done now. A salient task stands out from those around it. It feels eminently doable, youre motivated to do it, and you have the impression that this is the single best thing from the set of items you considered that you could be working on at this particular moment. You might feel like youre itching to start on it and do something productive instead of messing around in your Autofocus notebook. If you continue scanning through other tasks, you might notice yourself looking back up towards the salient task. \n\nThe salience of a particular task is remarkably transient and unpredictable. A task that is salient now might not be salient ten minutes from now after youve done another task in between, and an item that makes you go “Ugh!” now might be salient tomorrow. But its always easy to listen for a tasks current salience using a simple method (which well discuss in the next section).\n\nMany people assume that the fundamental goal of Autofocus, to work only on salient tasks, is impossible because most difficult tasks will never become salient. Surprisingly, most difficult tasks actually do become salient eventually. There are a few ways seemingly unpleasant and intractable things can become salient over time:\n\n* Many tasks that initially seem difficult are not actually intrinsically difficult, but are rather difficult because of a mismatch between the task and your current state. Whether you want to do a task is a function of, among other things, your mood, how tired you are, and what else youre thinking about. If youre feeling creative and have a bunch of great ideas about an important project, responding to emails probably wont be salient. But if its 4pm on a Friday, youve just finished a project, and you just have enough time to empty your inbox and start the weekend with everything accounted for, responding to emails probably will be salient. So if you regularly consider whether its time to do the task, after a few days you may chance upon a moment when it feels easy.\n* Completing an easy task that youre excited about usually builds confidence and momentum, making you feel more capable of taking on a harder task.\n* Completing an easy task of a given category often makes you interested in following up with harder tasks of the same category (e.g., if you sweep the kitchen floor, maybe youll get into a “cleaning” mood and feel up to doing the dishes or cleaning the bathroom too). Conversely, if youve been working on the same type of task for a long time and are feeling tired, a task in a completely different category might become more salient (and reinvigorate you when you do it).\n* Whether a task feels hard or easy is somewhat relative to the other choices its juxtaposed with. If your choices are ordering a box of paperclips on Amazon or doing your taxes, doing your taxes probably feels pretty hard. If your choices are doing your taxes or figuring out how to tell your spouse you want a divorce, doing your taxes probably feels pretty easy. As you knock the easy tasks off your to-do list while constantly re-scanning your list of choices, the hard ones will start to feel easier. (If youre wondering how newly added easy tasks wont prevent the hard tasks from ever looking easy, Autofocus has a clever solution -- well get there!)\n* If a task has a deadline, even a soft one, it will almost invariably become more salient as the deadline draws nearer, as it starts to feel more relevant and important to work on it right away. Whether something feels motivating and worth doing depends not only on how enjoyable it is, but also what the consequences are of not doing it.\n* Repeatedly encountering a task and choosing not to do it seems to, over time, create cognitive dissonance where you start to get slightly exasperated with yourself for not having done it yet and want to prove to yourself you can finish it: “Dont be silly, I can do this.” This might seem like a silly mind trick, but the resulting motivation is real and makes you legitimately want to do the task!\n\nSome tasks really wont ever become salient. This often happens because you dont actually believe the task is worth doing. In that case, you can simply remove it from your list and not do it. If, upon sober examination of what you really think, rather than what you think you should want, the task still seems worth doing, failure to reach salience usually means that there is some underlying emotional challenge or practical problem preventing you from doing the task, and this is your cue to figure out what that is and correct it.\n\n\n!! The method\n\n!!! Physical manifestation\n\nTo use Autofocus, you need only:\n\n* A notebook or binder with grid or ruled paper. Each page should have somewhere between 25 and 35 lines.\n* A pen or pencil.\n* A highlighter.\n* Some kind of sticky flag or device that can clearly mark a single line on a single page, the task youre currently working on (I use a Book Dart|https://www.bookdarts.com/).\n\nThere is a current page at all times, marked by the flag. When youre working, youll point the flag at a current task on that page. The current page starts at the first page of the notebook and will be updated from time to time.\n\nNo categories, tabs, tags, color-coding, or other organizational tools are required, though of course you may find it helpful to include such features in your own system once you get to know it and figure out how to adapt it to your workflow.\n\nIm not aware of any Autofocus software, though someone could definitely build a digital version. Personally, I find having my list of tasks as a separate physical object extremely helpful: it effectively separates the action of planning what Im going to do next from actually doing it, and the repetitive nature of scanning pages and copying tasks helps me to think about the tasks and sort out what needs doing. (Working in the notebook feels rather like doing algebra: to solve your problem, you abstract it and do some symbolic manipulations on it, and suddenly the right answer is obvious.)\n\n\n!!! Adding tasks\n\nAny time you think of a task you need or want to do -- including while youre working on another task -- write it on the first blank line at the end of the last non-empty page. You can add anything you want, and you do not need to be sure you actually want to do a task to include it -- the system has provision for filtering tasks that turn out not to be worth doing. Personally, I maintain a separate “Someday/Maybe” list for things I want to hang onto as possibilities or things to do much later, but dont want to consider working on right away, but some people dont even do that.\n\nAutofocus is not designed for, and does not work for, extremely urgent or time-specific tasks (say, ones you need to finish today, or ones that need to be completed on October 10 precisely). Rather than entering such tasks into your Autofocus list, you should put them in a calendar, a tickler file, a “today” list on your desk, or something of that sort.\n\n\n!!! Doing tasks\n\nWhen you want to do some work:\n\n# Open your Autofocus list to the current page.\n# Quickly scan through the tasks on the current page that arent yet completed, to get an idea of what your choices are.\n# Scan through the list of tasks again, going slowly this time and pausing to consider each one. When you encounter the first salient task, move the flag to that task and start working.\n#* If you finish your slow scan without finding any salient task on the current page, move on to the next page. If the current page is the last page, cycle back around to the first page that has incomplete tasks on it.\n#* If you have just entered a page and find that none of the tasks are salient (i.e., you dont want to do even one task on the page before moving on to the next one), dismiss all remaining incomplete tasks on the page before moving on to the next one (more on this in a moment).\n# When you complete the task, get tired of working on it, need to go to an appointment, finish working for the day, or otherwise cannot continue, cross it off the list (even if its not done yet). Stopping in the middle of the task is not only allowed but //encouraged// if the task stops feeling salient.\n# If the task isnt done yet, re-enter it at the end of the list (that is, on the first blank line of the final active page). Or if youve completed it but theres a follow-up or a new next action on the project, add that at the end of the list.\n# If youre ready to work on another task, return to step 2.\n\n\n!!! Dismissing tasks\n\nAs noted in the previous section, when you enter a new page and dont find any salient tasks on it at all, all remaining tasks on that page are dismissed. You indicate that a task has been dismissed by highlighting it.\n\nIts best to let dismissed tasks sit for a little while, perhaps a few days, before deciding what to do with them. This keeps the tasks that are causing the most friction out of your backlog and gives you some space to sort out why you had trouble completing it.\n\nFollowing the rules on dismissing tasks is important! Do not just immediately re-enter dismissed tasks at the end of the list or move to the next page without dismissing them -- if you get loosey-goosey about this, your backlog will fill up with tasks you feel bad about not doing and the system will lose its sense of joy and salience. (Personally, I admit one exception to this. If the only incomplete tasks on the page are not presently doable due to practical limitations rather than mental obstacles -- e.g., because they require calling someone whos only available during business hours and its 4pm on a Sunday -- I have the option, but not the obligation, to proceed to the next page without dismissing those.)\n\nWhen you come back and look through your dismissed tasks, spend some time trying to understand why each task was causing so much friction that you repeatedly avoided it, and address that. Tasks usually get dismissed for one of four reasons:\n\n# You dont actually believe the task is necessary or valuable; maybe it was aspirational or seemed like something you “should” do, but its not important enough to you to be worth doing right now.\n# You feel threatened by the task (e.g., you dont feel capable of doing it or youre scared about something youll learn by doing it).\n# You described the task in terms that make it sound unnecessarily difficult, annoying, or threatening.\n# There is some blocker or dependency that is making it impossible or impractical to do the task (e.g., you wrote “write report” but youre waiting on a coworker to send you the data, or you wrote “fix bike”, but you havent ordered the necessary parts).\n\nMany dismissed tasks can simply be let go. If the task turns out to be important after all, chances are it will cross your path again! But if you still feel the task is worth doing, dont just re-enter it -- address the cause. This is done differently for each cause, respectively:\n\n# Try to connect your task better to the needs and goals that led you to put it on your list in the first place. In the process, you might well discover that this task isnt the most effective way to meet those needs.\n# Consider why youre finding the task difficult. Can you make the next step of the task smaller, or add a new task to do some research on the best approach, write a quick reflection, or ask someone for help?\n# Make your phrasing of the task crisper and focused on its leading edge (more on this later).\n# Figure out what your next step is to unblock the task, and add a task to accomplish that.\n\n\n!!! Marking completed pages\n\nOnce youve completed or dismissed all items on a page, put a + or X in the outer corner of the page to indicate that the page is done. I also mark the first page that contains any incomplete tasks with a circle in the same location (you can put the X inside it when its complete). This makes it quick and easy to figure out where to return to when you cycle back to the first page.\n\n(Forster instead uses the circle on the last page that has all its tasks completed, so that the X is always applied to a page before the circle instead of vice versa. I think my method is more efficient, because if the first page with incomplete items is a left page you can see that this is your target page without flipping the page over. But either way works fine, as long as youre consistent.)\n\n\n!!! Marking the last few tasks\n\nOnce a large majority of the items on a page are crossed out, scanning for incomplete salient tasks may become annoying, slow, and error-prone. When I notice this happening, usually when there are around 6 items left, I mark the incomplete ones with a dot in the left margin. If Im looking at a page with dots in the left margin, I know I can completely ignore any lines that dont have dots on them.\n\n!! Leading Edge & Next Actions\n\nTODO here\n\nMore often, in general, I think I should focus on what I can unblock – can we let someone else do the next bit now? even make things easier for Future Self?\n\nrephrasing is a way of working on the task - so its ok to re-enter it at the end\n\n* Check MerleFest 2026? Maybe not with plans? Charlotte / late April > Look at promo materials for MerleFest 2026\n* Chat with AW someone I havent talked to in several years? > Find AWs contact info\n* Fix extHD backup > Run extHD backup again and ask Claude about the error if it fails\n* M. Session Link > Process anxiety around M. session link -- what is the problem?\n* Bleach humidifier > Find docs on bleaching humidifier\n* Begin abyss-gazing > Create 2025 abyss-gazing document\n* Filing (on printer) > File documents sitting on printer\n\n\n\n{{Autofocus/p||PrivateChunk}}\n\n!! tips & Notes\n\n* Similarly, when you get close to finishing a page, you may be motivated to complete the last couple of items on it so you can put an X in the corner of the page and close it out, or so you wont have to dismiss some items that feel worthwhile.\nRemember also that starting a task does not commit you to completing the entire thing! If you want to make a task feel more salient so you can work on it, consider whether you can work on it for 2 minutes and then give yourself permission to cross it out and re-enter it at that point. Chances are youll want to keep going, and even if you dont, starting on the task will break down a large portion of your resistance, and when you come to the re-entered tasks chances are it will be closer to reaching salience.\n\n\n!! Challenges\n\nWhile Autofocus does a great job of allowing you to unconsciously prioritize the most important things, the system can struggle with appropriately managing particularly high-priority items. There are two ways this can happen:\n\n* Sometimes things that are important and/or urgent can languish because they dont seem salient. However, I think persistent lack of salience of something you consciously think is important or urgent points to an underlying problem with the things youre working on not feeling important, valuable, or doable; or perhaps the formulation of the difficult tasks is poor. (This second point bears repeating. Items are far more likely to reach salience if they are crisp NextActions.)\n* Sometimes a lot of things on certain pages will seem salient, and youll spend your day sitting on one or two pages, while a distant page contains urgent items that you dont get to. I think this “limited to a certain page while there are other things I want to do” phenomenon is actually largely a good thing, because it provides me with incentive to keep working so I can get to that page -- but it can obviously be a problem sometimes as well. Forster says you should aim to cycle through all your pages at least once a day; maybe I need to adjust my definition of salience if there are things further on that I need to get to?\n\nStill, a separate connected system for keeping urgent tasks at the top might also be helpful, though complicating (my current system consists of writing them on an IndexCard next to my keyboard, which doesnt seem ideal).\n\nC.B.|PrivatePerson mentioned that he uses an EisenhowerBox rating system to solve this problem.\n\n\n!! My implementation tips\n\n* When a page has reached the point of containing mostly crossed-out items (maybe five or so left), I put a small dot in the margin next to the ones that //arent// crossed out; this makes it much easier to scan for the ones that are still active.\n* I use a BookDart on the edge of the page to mark the item Im currently working on, so I dont lose my place. This has the added advantage of automatically bookmarking the current page when you shut the notebook.\n\nForster has come up with several newer systems, all seemingly based on the idea of eliminating the need to scan between every item. However, I have been unwilling to try them because the way they eliminate scanning is by essentially having you pre-decide which items you most want to do. I find the kind of item I most want to do changes from minute to minute, and think this would just lock me in to suboptimal choices. Forster has also said that the first system is ultimately his favorite.\n\n\n!! References\n\n> My friend and I had an idea for an app that would work like this: whenever you clicked something on your computer or your phone, instead of opening, it would be appended to the bottom of your to-do list. You’d click on a YouTube video of Alan Watts talking about what reality is, and your to-do list would open. To proceed to the video, you’d have to manually upvote watching the video past hanging with your girlfriend and paying your bills to confirm that the video was a higher priority for you than anything else you knew of.\n> We never built this torture machine, but...we often already know which problems matter if we just stop to think about it.\n> --What problem should you be working on now?|https://www.henrikkarlsson.xyz/p/problem-selection, MrHenrikKarlsson},{title:AutomationIsExecutableDocumentation,created:20201207002258396,es:confident,modified:20210616232542719,tags:Code PersonalDocumentation Information Process AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:ManualWorkIsABug2018 declares that automation is just executable documentation, or ExecutableEvergreenNotes. (Actually, documentation is executable as well, just only in your head instead of on a silicon CPU. This is another manifestation of the CodeDataEquivalence.) Just like porting instructions from one ProgrammingLanguage to another is straightforward, translating thorough and specific natural-language documentation into working code (or vice versa) is straightforward.\n\nConsequence: DontWaitToAutomate.\n},{title:AvoidOverreading,created:20200908222105441,es:possible,modified:20200908222532517,tags:Reading Reasoning Identity Public Idea,type:text/vnd.tiddlywiki,text:Reading too much can result in having no space to form your own opinions. You turn into an encyclopedia instead of a thinker. Downtime is often better spent thinking than reading, and learning without doing and experimenting at all is a great way to become detached from the real world.\n\nRepeatedly noted in FightingInformationOverload2020, among other places Ive read. See InsufficientlyReflectiveWriting for the effect of this kind of overemphasis on ones writing (a natural extension of ones thinking).},{title:AvoidScale,created:20200222125619503,creator:soren,es:likely,modified:20240316212315051,modifier:soren,tags:Software Systems Public Idea,type:text/vnd.tiddlywiki,text:The larger a system, the more complex it is (and the easier for it to get complected|Complection). More complex systems cost more, are harder to maintain, and are less reliable. So if a small system can do most of the work of a large system, thats almost always the right way to go. Do we really need an online service to scribble a few lines of notes? Do we really need a word processor rather than a text editor? Do I really need a car for this trip rather than a bike?\n\nAvoiding scale is unpopular because it feels like we are eschewing shiny new technology and because its difficult to articulate to stakeholders why its important. Its also easier to add than to take away. But the best technology is the appropriate|AppropriateTechnology one, and PerfectionIsSubtractive.\n\nThe MarkdownPhilosophy allows a tool to be selectively made more complex when and if its required.},{title:AwkwardAnnie,created:20210426211638108,creator:soren,es:confident,modified:20240601142631988,modifier:soren,tags:Object Public Idea,type:text/vnd.tiddlywiki,text:\u003C$m2.float source\annie.png\ width300 sideleft/>\n\nA twelve-foot solo\u003C\u003Cfnote \\\\nI have two seats, but the boat has a stunningly low weight limit of 300 pounds because its so short. I weigh about 155 pounds, so if you weigh less than 145 or so and its a calm day, you can fit in it with me without swamping. Most Americans are too heavy.\n\\\>> packboat I bought in 2021 from Adirondack Guide Boat|https://adirondack-guide-boat.com. This boat almost feels too good to be true: it combines the best attributes of kayaks, canoes, and rowboats, and its reasonably priced, easily carried by one person, doesnt need a trailer, looks beautiful, rows like a dream. I can make four miles an hour easily in calm water, usually blazing past people in canoes and kayaks.\u003C\u003Cfnote \On one memorable occasion I passed some people in a motorboat. They were stuck at no-wake speed and I wasnt legally limited, but still!\>>\n\nI cant figure out why rowing (technically “sculling,” if its one person with two oars) has gone out of fashion for recreational boating in favor of paddling in recent years. Paddling works fine, sure, but rowing is faster, easier to get good at, and less work, particularly on lakes -- since the oars are physically connected to the boat, they act as levers and you get mechanical advantage, and unlike paddling it doesnt require much skill to engage most of your body in the power stroke, so one person rowing can move about as fast as two people paddling.\u003C\u003Cfnote \Rowboats with sliding seats, like the ones used in competitive rowing, even let you use your legs to propel the boat. But on a twelve-foot boat, having a sliding seat just makes the boat wobble like crazy since your center of gravity is shifting dramatically, so this boat doesnt have one.\>> Subjectively, rowing also makes me feel like Im part of the boat|Handlessness, a whole system moving through the water, while paddling feels like Im trying to awkwardly shove myself through the water.\n\nA nice rowboat also handles easier than a canoe, especially for a novice; the boat wants to go straight instead of curving, even in moderate wind, and instead of doing steering corrections with “trick” strokes, you just pull harder on the side of the boat you want to turn your stern towards. It can even effortlessly turn in place (pull one oar forwards and the other backwards).\n\nAA also paddles quite nicely if you need to go through a narrow passageway (the boat is as wide as it is long with the oars stretched out all the way!) or youre on a fast-moving river and need to be facing forwards, but once youre used to rowing it, it feels like youre working twice as hard to move half as fast!\n\nFun fact: The auxiliary paddles on guideboats are called //sneak paddles// because when people hunted in them back in the day, you would use them to quietly reposition your boat to get a better shot at whatever you were hunting.\n\nSee also Boating and BoatPurchasingNotes.\n\n\u003C\u003Cclarify>>\n\n\u003Ccenter>\nimg width500 annie-on-the-shore.jpg\n\u003Cbr>\nOn the beach of Big Island of the Rollie Johnson Recreational Area, on the Whitefish Chain in central Minnesota.\n\u003C/center>\n\n\u003Ccenter>\nimg width800 soren-and-annie-outing.jpg\n\u003Cbr>\nAt a cabin near Outing, MN at sunset.\n\u003C/center>\n\n!! References\n\nOn Making a Small Splash|http://peterselgin.com/on-making-a-small-splash/ (Peter Selgin)\n\n\u003C$details summary\Technical details (private)\>\n\n{{AwkwardAnnie/TechnicalDetails}}\n\n\u003C/$details>},{title:AxesOfReality,created:20200821030946849,es:likely,modified:20201015021815410,tags:Imagination Public Ontology Idea,type:text/vnd.tiddlywiki,text:Different types of non-real things contrast to create different meanings of //reality//. As defined by TheWhyOfReality2019:\n\n* Reality vs. appearance; and there are three types of appearances:\n** Manifestations (what we experience isnt //truly// reality, its the model of the world constructed by our minds)\n** Mere appearances (e.g., movies)\n** Illusions|OpticalIllusion\n* Real vs. imagined|Imagination or dreamt|Dreaming\n* Essential nature vs. contingent attributes of a thing\n* Things which once existed vs. things which never have|FictionTheory\n\nI would add at least:\n\n* Real vs. faux or ersatz\n* Real vs. deceptive\n* Real|ConsensusPhysicalReality vs. computerized/virtualized (cf. SoftwareIsEatingTheWorld, and PhysicallyIntensifier)},{title:Azure,created:20200425024101889,modified:20200521135018042,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons cloud services offering, competitor of AmazonWebServices. Becoming more popular lately, likely owing to its greater CompleteIntegration potential; but still second because of TheAmazons giant head start.\n\nAzureDevOps often does but confusingly does not have to run on Azure. Theres also been a rash of people at TheFederatedInsurance calling AzureDevOps just “Azure” because they dont know any other products, like some early PC users called MicrosoftWord (or some other random MS product) “Microsoft”, which is a total PetPeeve.},{title:AzureFunctions,created:20200521214034885,creator:soren,es:confident,modified:20211107181235711,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons Azure serverless infrastructure. Upload a little piece of code and easily front it with an API, and pay by the gigabyte-second for compute power. Automatically scales as necessary to handle demand, and from experience using it for an integration with AzureDevOps, really convenient!\n\nA handy demo of using AzureFunctions to build an app was part of MicrosoftBuild2020: PythonAzureApps20200520. I have also used this with the TFS Aggregator. Also mentioned in \nEventDrivenApps20200521.\n\nMuch like any kind of Microservices, deciding how to divide AzureFunctions apps may be challenging. \nEventDrivenApps20200521 suggests that you should keep related app components together until you want to scale or deploy them separately.},{title:AzureSecurityForDevs20200521,at:202005211215,caption:Azure Security Center for Developers,created:20200518214550493,medium:video,modified:20210522015801780,presenter:MrDeanBryen MrGiladElyashar,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/cbc67739-c951-4475-9a86-534b39bb2bea,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis had very little useful content. Im not deleting my notes, but theyre kind of randomly scattered...\n\n* Security Center -- does container scanning\n** Should be a big part of DevOps\n\n* Azure Security Benchmark\n** General guidelines for how one should secure an app in Azure\n** Now integrated into Security Center so it can identify best practices for you -- map policies to requirements for given regulatory regimes, see what is noncompliant\n** Offers one-click remediation for many things\n\n* SSH and RDP are a popular way to attack cloud servers\n** New feature for just-in-time requests for connections so the ports can be left 100% closed the rest of the time -- can time-limit and IP-limit access.\n** These just-in-time openings are also audited.\n\n},{title:AzureStaticWebApps,created:20200521213949238,modified:20200521214135822,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePerson system for hosting a webapp on Azure based on a static HTML site with API backends running in AzureFunctions. So its only partly static...static in that you dont have to set up a full web server.\n\nAnnounced at MicrosoftBuild2020.},{title:BaconEssays,author:Bacon,bibliography:LifetimeReading,caption:Essays,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034099,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:BadAzureAdministratorCourse,created:20210701022349899,creator:soren,description:How and why is Microsofts learning material for its certification exams so terrible?,es:likely,modified:20220815182933655,modifier:soren,tags:Idea Learning Business Essay Public,type:text/vnd.tiddlywiki,text:Some months ago, at the behest of a committee at my workplace at the time, I studied for and took a certification exam to become a Microsoft Azure Administrator. The whole thing was a deeply frustrating experience which seems to have a great deal to say about both the process of learning and how learning is seen by certain corporate and societal interests.\n\nThis will be a bit of a rant. If youre not in the mood for a good rant, probably stop reading here!\n\n!! I\n\nStudying the material was, almost without exception, extraordinarily boring and slow. Thats because I had absolutely no emotional connection to it, nor did any really seem possible: it was unclear how I was ever going to use the information (indeed, I still have not used any of it, nor do I think Im likely to in the near future), and none of it was intrinsically interesting.\n\nMuch of it also consisted of esoteric trivia rather than useful knowledge. Heres a sample question from my SRS|SpacedRepetition:\n\n\u003C\u003Crememberq \20220628215154374\\n\t\Azure App Service: What is the maximum number of instances of the webapp supported by a Standard app tier?\\n\t\10.\>>\n\t\nThe correct answer to this question is “I have no fing clue, nor will this information be useful to know.” Now yall know I think people underestimate the need to memorize facts|RoteLearningAsFoundationOfThought, but this is just plain useless to the vast majority of people working with Azure. If\u003C\u003Cfnote \Not //when//. The exam is giant and comes as a package deal, so you cant skip topics that you know will never be useful to you, if there are some; you just have to cram them even though the knowledge is worthless.\>> Im creating an app on Azure App Service, I will go look at the documentation to figure out which app tier I need to buy. I am always going to do this even if Ive memorized fifteen of these cards and launched twenty apps on Azure App Service, because there might be unusual things about this particular workload that create unusual considerations, and the chance that Ill recognize this ahead of time without scrolling through all of the nuances is tiny. Even supposing I questioned the wisdom of leaving my memory up to the documentation on this, how often am I going to create a new app on Azure App Service? For most people who take this exam, this probably happens like once a year. Spaced repetition can keep memories viable for this length of time, but it only works when you manage to capture all the things you need to know as flashcards. Good luck capturing all the nuances of this topic.\n\nIf I have to look at the documentation anyway to review the requirements for an app, its pretty hard to see why this information is worth even hearing in a lecture, except in passing as part of a demonstration -- much less remembering through an exam.\n\nHeres another only slightly less dumb one:\n\n\u003C\u003Crememberq \20220628215056888\\n\t\As of early 2021, Azure Files does not support what method of authentication?\\n\t\Standard Kerberos over SMB.\>>\n\nNote that I added the tag //As of early 2021//; the course didnt mention this at all. Is it always going to be this way? It sure seems likely that theyll add this common form of authentication later, and trying to memorize material thats constantly changing is a risky maneuver that can make you stupider instead of smarter. The smart move is to hit the documentation as I decide how I want my users to authenticate to my file share, even if I “know” this fact already -- just to make sure that its still true and double-check that Im not missing any gotchas that have never been an issue before with other projects but might be with this one. If I instead start by wondering “what forms of authentication can I use with Azure Files again?”, then proceed to look it up, find the immediate answer in the first table on the page, and continue as above, its hard to see how that makes me less competent.\n\n(On the other hand, if I have to visit the documentation for “Whats the syntax in Python for an //if//-statement?”, that really does make me less competent, because Im asking that question in the middle of a process thats very demanding of short-term memory, which imposes a major cost on stopping to look something up. At the moment when I need to know about Azure Files authentication, I am virtually always going to be in the planning stage, where research is natural and has little cost. Knowing the fact that Kerberos is not available could also help me remember that I need to //think// about authentication methods and do the research in the first place, but here if Im really failing to think about how people will authenticate to a globally distributed file share when I set it up, there is something extremely fundamental about Microsoft Azure that Ive failed to grasp, and //thats// what I need to be targeting.)\n\nNow, just because some of the things I had to learn are terrible doesnt mean all of them were. Most of the cards Im left with are actually good and useful in providing an understanding of how the platform works, and Im still studying them because its reasonable to think I might use Azure again some day in the future and find this basic background knowledge useful. But even a small percentage of dumb questions you have to cram sucks all of the joy and playfulness|PlayfulKnowledgeManagement out of learning.\n\n\n!! II\n\nHeres another stupid fact I had to learn:\n\n\u003C\u003Crememberq \20220628215120730\\n\t\Azure AD: In a JSON role definition, removing permissions is done through what property?\\n\t\//~NotActions//\>>\n\t\nFirst of all, Azure should probably improve its interface so I dont have to manually write JSON from scratch to configure permissions, because that sucks. But that aside, this particular is probably a good thing to learn. The main problem is that it was taught out of context. If youre trying to memorize APIs and keywords and all that, you need to actually be //using// the system for real work, or it will be challenging to remember.\u003C\u003Cfnote \Again, this was challenging //with a spaced repetition system//, which is expressly designed to help humans effectively maintain memory of lots of facts. I dont even want to imagine how annoying this would have been without it.\>> The course I took, and the process for becoming certified in general, lacks a reasonably accessible context of real use:\n\n# It does have exercises|NoExercises, but they suck; they arent real exercises, they are step-by-step lists of where to click and what to type. We might call these “monkey-see, monkey-do” exercises. Unless you are working hard to avoid this and challenge yourself (and good luck while studying such a boring course -- youll need it), youre going to mindlessly follow the directions and learn approximately nothing. Actual exercises require the student to use what theyve learned to actively figure something out for themselves, because //thats how exercises create learning//: they force you to think about the implications of what you learned and connect the different facts youve learned together. Monkey-see, monkey-do exercises often dont require you to use your memory or what you just learned at all, much less actively think about the concepts! I can only conclude that either the people who design courses for Microsoft, a multi-billion-dollar company, literally dont understand the point of exercises, or that someone doesnt actually want these courses to be effective or doesnt care whether they are effective. (Well come back to this in part IV.)\u003C\u003Cfnote \\\For anyone who writes exercises and for whom this comes as news: a real exercise should have a clear prompt for what the learner should accomplish, a clear solution explaining how theyll know theyve accomplished it, and potentially a couple of hints if you need to give a small amount of background knowledge that wasnt covered in the text, or you want to try something that might be a little bit above the learners head at the moment. Writing these exercises does require you to use your brain, but it may well be less //effort// than writing bad exercises since you dont have to type out a bunch of boilerplate for every one. I direct anyone with even a passing knowledge of technology to //The C Programming Language// by Kernighan and Ritchie to see the power of learning through proper exercises (see also NoExercises).\\\>>\n# Even actual exercises arent sufficient to provide a full context for permanently memorizing facts like this; theyre an excellent start, but to fully reinforce them you need to do a real project that youre excited about. Because the Azure Administrator exam tries to cover the basics of nearly every major part of Azure, the chance that a person taking the exam will be able to actually get real experience in everything is practically zero -- in a small company, the company wont have reason to use most of the features, and in a large company, someone else will be responsible for half of them.\n\nAgain, all this leaves you to cram things you dont fully understand and often have no use for -- both a pointless waste of time and a fantastic source of frustration and ennui.\n\n\n!! III\n\nEven after studying the course produced by Microsoft to prepare for the test produced by Microsoft, and memorizing everything that seemed important, the practice tests were difficult, and the actual exam might have been the most difficult exam Ive ever taken; I was not at all sure that I was going to pass during the test, and I used almost all of the time, which I virtually never do. I remember slightly panicking when I finished my first pass through the first section and realized that I had marked all 13 questions in the section for later review!\n\nIt seems relevant here that I, among other things, graduated college //summa cum laude// and scored a 2310 on my SATs. While its always wise to question the applicability of grades and standardized test results to various real-world outcomes, it seems hard to dispute that, in formal educational environments, I am generally good at identifying what I need to learn, learning it, and supplying the correct answers on tests to achieve numbers that look impressive|SymbolicRepresentationOfTheThing on a report|HighSchoolWritingHorror, and I do not generally suffer from test anxiety or find taking straightforward exams like these at all difficult.\u003C\u003Cfnote \One weekend my senior year of high school, having already scored that 2310 on my SAT, I took the practice version for fun, attempting to get the //lowest// score possible. Doing really well at this is harder than it sounds, particularly on the math section, where you usually have to do most if not all of the problem to be sure youre picking a wrong answer. You cant just leave everything blank, because on the SAT you get negative points for answering incorrectly (at least you did at the time -- I think they may have changed this recently), so to get a minimum score you must specifically give a wrong answer to each question. I succeeded in scoring 600, which is the minimum possible score; as I recall I got two questions on the reading section right by accident, but this wasnt enough correct answers to be worth any points on the curve.\>> So what went wrong with this silly Microsoft certification?\n\nFirst, I did have some beefs with the test itself:\n\n* The testing interface was terrible. Only half the screen was used for actual content, in some cases forcing me to scroll back and forth between the question and the answer. Some of the more detailed questions caused substantial short-term memory pressure because you had to refer to four or more exhibits which you could not put on the screen at the same time.\n* Many of the questions either consisted entirely of or were impossible or nearly impossible to answer correctly without explicitly knowing pieces of esoteric trivia, as discussed earlier -- so that if you dont happen to know it, you cant possibly get the question right. This is silly; the point of a test for an Azure Administrator certification should be to figure out whether you have the skills to effectively administer Azure, and your memory of esoteric trivia is an almost insignificant amount of that.\u003C\u003Cfnote \In case you didnt notice, youre always sitting in front of a computer with an Internet connection when working with Azure, for those moments when the trivia slip your mind.\>> The test would be much better served by questions where you could reason your way into the correct answer if you had successfully learned the central ideas surrounding the questions (including basic facts learned by rote!) but didnt happen to remember the esoteric part. (The lack of such questions is probably a key part of why I had so much trouble; I am usually good enough at this kind of reasoning and have enough general background|Polyspecialization that I can guess my way out of a substantial portion of the questions I dont know the answers to, even on a well-written test.)\n* There was lots of information on both the practice tests and the real test that I swear wasnt mentioned in the course -- again, a course which is designed to help you prepare for this specific test and produced by the same company that produces the test.\n\nUltimately, though, I also didnt effectively learn much of the information that was presented to me. To some extent this was my fault, but it was also the result of a large number of broken incentives: I had no reason to //want// to learn this information in the first place except that somebody told me I was supposed to. And the course design actively discouraged understanding; the quizzes were trivial to answer correctly if you read the page, and the exercises were, as discussed earlier, not exercises. This means there was almost no active learning|ActiveLearning involved, except for what I created for myself with spaced repetition – and that was great, but since I created all that material myself, I never got a reality check on what specifically Microsoft thought I should learn. That probably does mean I have chosen a better set of things to remember for real-life purposes, so this is not all bad, but it sure didnt do me any favors on the exam.\n\nObviously Microsoft has limited control over whether I want to learn about Azure -- but I do think that if they had chosen a better set of things to teach, they could have piqued my interest at least a little bit at some times. For instance, they could have included more commentary on how the system works behind the scenes. I know part of the benefit of cloud services is that you dont have to think about this if you dont want to, but being taught a small set of those details is likely to both help you use the system better (because AbstractionsLeak) //and// make it more memorable and interesting.\n\n!! IV\n\nMostly, Im just curious as to why Microsofts courses are designed this poorly. I am fairly confident I could write a better Azure Administrator course than the one Microsoft has available if I put my mind to it, and Im some dude on the internet (though I have admittedly written a textbook|GrokTiddlyWiki).\n\n* Are the people designing these courses lacking any background in education? Do they not realize, e.g., that their exercises are not exercises?\n* Does Microsoft not make anything better because they dont know how?\n* Or is it because its too expensive and theres nothing in it for them? Assuming Im not //completely// wet on being able to do a better job at this course than whats out there currently: Hiring enough copies of me to keep up to date on all of the products they offer on Microsoft Learn really could get expensive at Microsoft salaries. Im guessing they have lowest-bidder technical writers hack these out, followed by a limited review process. Is having excellent learning resources on your own product worth millions of dollars more than having mediocre ones? Not sure how youd even evaluate that except by trying it, and I can see why theyre skeptical. Still, its painful to see a truly high-quality system paired up with learning resources that look good on the surface but lead to such poor outcomes.\n** I wonder how these free online classes Microsoft provides compare to third-party ones. The cynic in me suspects the expensive third-party ones probably arent much better on average -- but there probably are some gems that are nearly impossible to find.\n* Are other people unable to evaluate whether this system works and why, as I have? Or do they just write snarky things about it in their Zettelkästen and not report their frustrations anywhere, like me, because what are you actually going to change? After all, this isnt a typo on the page (which is already hard to report!), its a fundamental design problem with the entire course, and presumably //all// of their courses.\n* I think there is a general lack of appreciation for how complicated teaching things well is|ReplaceabilityOfHumanTeachers, which may contribute to all this. (Very similar to writing prose, a skill which may be more obvious to many readers: doing a superficially OK job is easy, at least in your native language, while doing a really good job is quite difficult. Moreover, its often hard to explain what makes the really good job good, and even harder to explain to someone how they can turn themselves from an OK writer into a really good one.)},{title:BadCable,created:20200427025922991,creator:soren,es:confident,modified:20211122174900507,modifier:soren,tags:TechBook Public Idea,type:text/vnd.tiddlywiki,text:The number of times weird computer or other electronics problems can be attributed to bad cables is astounding. Most people dont even think about the cable as a source of the problem that the monitor is green, or the audio is cutting out occasionally, or the computer wont turn on.\n\nSo, if you have a spare cable...//always// try it before you JumpToConclusions about an expensive problem. Even if you dont have a spare, go buy one and try it first.\n\nElectrical-power anomalies are a similar cause of issues: a flaky PSU or battery can cause totally wacky problems that are next to impossible to track down unless you think about this possibility. On one memorable occasion, a laptop I looked at didnt work for someone demonstrating the problem, then I sat down and it worked -- because we plugged it into the mains in between!},{title:BagOrdinance,created:20211208024436332,creator:soren,es:likely,modified:20240509111312930,modifier:soren,tags:Idea Environmentalism Systems Public,type:text/vnd.tiddlywiki,text:Minneapolis|Minneapolis, like many other US cities, recently passed an ordinance charging customers in city stores 5 cents for every disposable plastic shopping bag used. The point of this ordinance is (judging by the content of the PSAs) to encourage people to use reusable bags, thus reducing the resource cost of producing disposable bags and the associated plastic waste. But I believe that exclusively using reusable bags for your purchases //doesnt actually do either of these things//, at least not if were looking at the whole picture|LocalOptimization and you behave sensibly. That makes me resent the ordinance, since Im now being targeted with an environmental penalty for being more environmentally friendly!\n\nLet me explain.\n\n\n!! Disposable bags might actually have a lower carbon footprint\n\nOn a bag-for-bag basis, reusable bags have a massive carbon footprint compared to disposable plastic bags. Bags sturdy enough to be reused more than a few times are usually made of heavy cotton, or at any rate some kind of textile -- one of the more carbon-intensive materials out there. Plastic bags are a marvel of modern engineering and use practically no material at all (theres a reason theyre so cheap that grocery stores that arent subject to a bag-fee law will put 2 items in each one|PurposeOfBags and not charge you for them). So while reusable bags can be used many more times than disposable ones, it takes a //lot// of uses to break even on emissions -- likely somewhere between a hundred and several thousand uses of a cloth bag, depending on whose numbers you believe and what assumptions you make.\n\nIve had plenty of reusable bags. Ive seen many of them fall apart before reaching even a hundred uses, and thats assuming you dont lose them, get them caught and torn in something, or just get tired of using reusable bags and give up on them. While it is certainly possible to come out ahead, it doesnt seem at all like a foregone conclusion that an average person with an average reusable bag will reach the break-even point.\n\nReusable bags can also get dirty over time, and then you have to launder them, which adds more carbon cost. I dont know how much of a factor this is. My instinct says it shouldnt be that much, especially if you let them air-dry, but since were probably not dealing with a whole lot of carbon savings in typical use to begin with, even a small carbon cost in laundry could make a big difference to the outcome.\n\nThis isnt a slam-dunk for either option.\n\n\n!! Disposable bags used in moderation dont have to increase waste\n\nOn the other hand, theres still the waste problem to worry about, as well as the fact that the petroleum-based plastic usually used for shopping bags is a non-renewable resource.\n\nBut hold on. We are all using disposable plastic bags for another important task of modern life: dealing with our trash. Unless you want to have your trash can very quickly get slimy, rotten, and stinky, or touch your pets waste with your bare hands, you are going to be using some thin plastic bags, at least until someone invents a replacement. And, importantly, your plastic shopping bags can be reused for many of these applications once you get your shopping home. This isnt a silly thrifty-environmentalist hack -- many if not most households I know already do this.\n\nI personally use my shopping bags as liners for small trash cans at about the same rate that I bring them home. So if I follow the new ordinances nudge and stop taking plastic bags home from stores, I will instead have to buy plastic bags in a box at the store to put my trash in -- consuming exactly the same number of plastic bags but with extra steps, cost, and environmental impact.\n\nJust to make the absurdity clear, tell me which of these options makes more sense:\n\n# Go to the store without worrying about bags. Carry your purchases home in cheap disposable plastic bags. Reuse the bags as trash liners when you get home.\n# Buy reusable bags, at noticeable carbon and financial cost. Remember to bring them with you every time you shop, and possibly drag them around for a while if you run some other errands at the same time.\u003C\u003Cfnote \Side note: having to bring reusable bags with you disproportionately penalizes people who walk to the store. Driving to the store instead of walking there is surely way worse for the environment than taking a couple of plastic bags, even if you just chuck them in the trash without reusing them. I would not be at all surprised if having to carry bags around all the time adds a few car trips on the margin.\>> Additionally buy (on average) the same number of plastic bags at the store that you would have carried your purchases home in. Use these virgin plastic bags as trash liners when you get home (and also throw away the packaging the plastic bags came in).\n\nIn option 1, we use a disposable item twice and gain convenience. In option 2, we use an equivalent disposable item just once, lose convenience, //and// have to buy an extra item with a substantial carbon footprint. In what world does option 2 make any sense?\n\nWell, it could make sense if you get more plastic bags from shopping than you use for trash. Even then, though, using only reusable bags isnt necessarily the best solution. It would make more sense to buy a few reusable bags and use them for a little while when your collection of plastic bags gets unreasonably large, then go back to plastic when you start running low again. (Or use them for a particular subset of errands where theyre most convenient, if youd prefer not to have to switch habits repeatedly. There are plenty of options.)\n\nAnother factor worth pointing out is that Minneapolis is rolling out a municipal organics recycling (aka industrial composting) program, which will likely substantially reduce the amount of landfill-bound trash that most people produce. For your organics, you have to use special biodegradable bags. This program isnt available at my home yet, but in the future I might need to buy these and then use reusable shopping bags more often to even out my disposable-shopping-bag inputs and outputs. Then again, presumably this wouldnt be a problem if stores just switched to using appropriate biodegradable shopping bags.\n\n\n!! So...\n\n...here I am in Minneapolis, doing what I (I think quite reasonably) believe to be the optimal thing for the environment, only now Im getting charged 5 cents for every bag I take home from the store, and I feel like I dont care about the environment in the checkout line because Im not using reusable bags like good people who dont want to get penalized do.\n\nOf course, its not a big deal. No reasonable person with a sense of perspective is actually judging anybodys bag choice, and the bag fee is not exactly going to break the bank (its cheaper than buying the corresponding trash bags in a package). But its still frustrating.\n\nThe bag fee does have one excellent side effect: the folks at the grocery store have stopped committing one of my pet peeves|PetPeeve and spreading my cart of groceries over 500 bags|PurposeOfBags, because their customers would get angry if they had to pay for all of them. Honestly, its almost worth the fee just for this!\n\nI will say that if most people really are just throwing away all of their disposable shopping bags without putting trash in them and buying other bags for all of their trash uses, and theres no way to convince these people to switch to reusing their shopping bags for the applications where that works well, //and// these same people would happily switch to reusable bags, we could conceivably come out ahead. But thats a lot of conditions, especially since the people who care enough about the environment to change their bag habits substantially are likely not the ones currently doing the least environmentally friendly thing.\n\nThe whole thing also feels very piss here, save the world|PissHereSaveTheWorld to me. Interventions like this carry the risk of making people focus on them to the exclusion of other, potentially more effective, changes (see StatisticalMurder). This has arguably already happened with recycling, a closely related issue: the zeitgeist has been that as long as you throw your trash into the correct bin, youre doing the right thing, whereas it would make way more sense to reduce the amount of trash were creating in the first place.\u003C\u003Cfnote \Once, long before I started thinking carefully about this issue, someone actually criticized me for reusing my shopping bags for trash rather than recycling them in the drop-off bin at the store. That I would otherwise be buying a second trash bag which would still not get recycled was apparently lost on them.\>> I appreciate that the city is looking for small things they can do that might have a big aggregate impact, but ones that require substantial changes to peoples lives and thus consume much of their environmental energy may not be the right place to start.\n\nIm not going to say confidently whether I think the ordinance is //wrong//. Im not even certain whether I would have voted for it, because I would have tried to consider the impact on the whole city and not just on me. But I think for me, its penalizing the best behavior, and as such its a great example of unintended consequences in complex systems.},{title:BainbridgeIsland,created:20250627154414593,creator:soren,modified:20250627154415577,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Bali,created:20230823150026986,creator:soren,modified:20230823150030189,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BaliPackingListRetrospective,created:20230913083935081,creator:soren,description:How did my lightest-packed serious trip ever go?,es:confident,modified:20240104232010403,modifier:soren,tags:Idea Travel Frozen Public,type:text/vnd.tiddlywiki,text:Im just rounding out a two-week trip|2023RemNoteBaliOffsite to Bali for a RemNote offsite. Due to airline restrictions, I packed much lighter than I ordinarily do, in a single 25L backpack. How did that go?\n\nThis kind of travel is a great microcosm of EfficientLife; Ive gone back and talked about that in TravelingLightAsSpiritualDiscipline. (While researching tips for descending from my normal light packing to this level of ultralight packing, I encountered someone who said he had gone backpacking across the world for half a year or so, and when he got home had a small existential crisis upon seeing the sheer amount of //stuff// he had lying around. I think you do need more household things to live a normal life at home than you do traveling, where you use someone elses -- kitchen supplies, bedding, etc. -- and because most people move so rarely there are also things you wouldnt need but would just like to have, and are worth having, like a couple hundred books. But the point that almost everyone has far more stuff than they really need or probably even want seems good.)\n\n\n!! Overall impressions\n\nI didnt forget anything, and I never wished I had brought more stuff, writ large. My specific underpackings were very minor, but I do have some suggestions for things that would give me slightly more comfort, ease, and margin for error in the future. My overpackings were also of no consequence, but tightening up there will give room to fix the underpackings.\n\nI had only one negative feeling throughout the trip about the project of having minimal luggage: I felt like I looked like I was re-wearing the same stuff fifteen times, maybe without washing it (and to be fair, sometimes I was; once or twice I was forced to actually wear the same exact shirt and pants two days in a row because of laundry logistics). However, a startup offsite is an unusual case where Im spending two weeks running with people whose fashion opinions I care about; in the more typical travel case, when Im alone or with good friends or family and seeing different strangers every day, or on a shorter trip if its businessy, I would not really care. Nevertheless, I might consider going just a touch heavier on shirts and shorts in the future. As it was, it felt like, paradoxically for the fact that I had only 22 pieces of clothing with me (including, e.g., 6 individual socks -- I can count in my head!), I was having to think about what I was going to wear a lot.\n\nOn the other hand, there were a large number of extremely positive feelings! Ive never packed this light on an international trip (or even a domestic trip longer than a long weekend), and not having to worry about luggage was freaking amazing. With one 25L backpack, you basically dont //have// luggage -- I carry the backpack I brought on this trip to the coffee shop and to my friends houses all the time (albeit not loaded quite as heavily). Ive never checked baggage on an international trip, and only rarely done it on a domestic trip, but in the past Ive always taken close to maximum (generous) carry-on allotment, usually with a rollaboard or sometimes a heavy duffle. Just having that second piece of slightly bulky luggage, with a significantly higher total weight, puts a real crimp in what you can do between hotels and stops. Like, D.W.|PrivatePerson and L.D.|PrivatePerson are going to have ~8 hours between when we have to check out of the villa and their flights tomorrow, and without even thinking I suggested they could hang out at the beach or something. But of course they both have enormous suitcases and they cant really do that; the image of someone pulling a four-wheeled, 75-linear-inch checked suitcase across the sand is indeed quite comical.\n\n(As someone whos never used a suitcase larger than a “small” to “medium” checked bag, I legitimately have no clue what people pack in those things for a trip like this! They have fewer useful / luxurious items than I do, and it feels like my entire closet would fit in like one and a half of those; if I was lugging that much around, Id want a desk, a mini-fridge of beer and Apfelschorle, and a nice body pillow and weighted blanket in it. Or something like that.)\n\nMeanwhile, I was able to trivially stroll out of LAX and go have some tacos and watch the sunset during my 8-hour layover on the way. I comfortably walked 6 miles with all my stuff! I didnt have any trouble cramming my luggage in the extremely full shuttle on arrival in Bali. Maneuvering through three airports with just a 25L backpack was //ridiculously// easy and freeing; it almost made flying feel less than terrible. And paradoxically, I not only feel more independent and capable, but feel like I have //more// of the stuff I want with me, because I was forced to spend time maximizing each item for what I really needed and wanted. This will only get better if I keep doing it! Im not saying Ill never bring any more than a backpack on a trip again (my SanFrancisco trip approach, where I brought a medium checked bag so I could have a nice computer setup, some books, a musical instrument, and a medium-sized wardrobe also made a lot of sense given that I was staying for a whole month in a single place with no stopovers), but I will definitely always strongly consider the ultralight option when it makes sense. For leisure travel with multiple stops and no car,\u003C\u003Cfnote \Exception: if I went to a “base camp” location for say a month and then took some small excursions from there, it could still make sense to bring a backpack on the excursions and bring a bit more for the base camp. I did exactly this for my weekend trips in SF.\>> or if I were to do, e.g., another concert tour, there is no way Im ever doing anything else again (barring medical issues or something).\n\nI had been feeling little worried about doing a remote-work trip to Boston next year with a Roomette-sized luggage allotment for three weeks. Now that feels like itll be a piece of cake. Heck, I did two weeks here just fine with just my laptop and no keyboard or monitor -- I previously thought that was impossible, being worried about KeyboardingTendinosis getting bad, and its been no problem at all; the MacBook actually has pretty good ergo. The elbow straps are still critical though (and Im glad I didnt lose them at the MSP security checkpoint!)\n\nNow, how was my packing list?\n\n\n!! Clothes\n\nUnderpacked:\n\n* I wanted a second wool undershirt; I could have had cleaner shirts while doing sink laundry one fewer time. But I knew I wanted two ahead of time -- I just wasnt able to order a second before I left by the time I had tried on the first and knew I liked it. Also, I accidentally left my cheap cotton undershirt on a snorkeling boat about three-quarters of the way through the trip, so I guess the universe was looking out for me; I wont even notice Im down one of those, but I would have been pretty peeved about losing a brand-new $75 merino-wool undershirt.\n* Mentioned earlier: with only two shirts that I could wear multiple times between washes, I sometimes ended up wearing the same one two days in a row, which made me look and feel unlaundered. I think having three would solve this problem, and changing the T-shirt I brought into a technical version I could wear multiple times would probably be enough to solve the issue.\n\nPossibly overpacked:\n\n* I only wore my sweater once outside of the plane; it never got below 72 degrees Fahrenheit outside. It might have been better to rely on my blanket for extra warmth while sitting still in cold planes / cars or outside on chilly evenings, and bring a lighter long-sleeved shirt instead. That was what I did in Turkey, and I found myself chilly often enough that I decided on a sweater this time -- but I didnt carry a blanket on that trip, so the calculus may be different now. On the other hand, it was nice to have the giant pockets on that sweater in the airport for my passport, items I took out at security, etc.\n\nJust right:\n\n* 4 pairs underwear\n* 3 pairs socks\n* 3 handkerchiefs\n* 1 belt\n* Watch, hairties,\u003C\u003Cfnote \Actually, believe it or not, I have been using a //single// hairtie for the entire trip. Goody Ouchless are the bomb. I guess you could argue that means I should only bring 2 or something, but, like, they weigh 1 gram apiece, come on.\>> pocket items\n* 1 pair sturdy shoes, 1 pair water shoes/sandals\n* 1 pair shorts, 1 pair jeans, 1 swimsuit that could double as shorts for a partially beachy day\n** I might consider replacing one or both of these with a more technical version long term; but these were perfectly serviceable.\n* Blanket (the real MVP here|TravelBlanket; onebag.com dude isnt kidding about sarongs, etc. being useful).\n\n\n!! Toiletries\n\nUnderpacked:\n\n* Having only a nail file and no clippers was obnoxious. I dont think any airlines on this trip would have given me trouble if Id had clippers, so I will check carefully next time to see if there is an issue before doing this.\u003C\u003Cfnote \The security in Turkey last year didnt allow them, so I overcorrected.\>> Or just bring a $3 pair and hope they dont confiscate them; Im not going to get arrested for having nail clippers and should just get over not wanting to be mishandled at a foreign security checkpoint (especially since that happens //anyway// on most trips!).\n* I would have felt a little more secure having some Imodium even though I didnt need it.\n* I brought only a small tube of DEET spray because I figured Id buy some here. Surprisingly, they didnt sell it in convenience stores here -- they only had a couple of vastly worse repellents. And I didnt even actually use what I brought because I didnt want to smell like a campsite the entire trip. Granted, there were only occasional mosquitoes and I dont recall any time when I actually noticed I had been bitten. Nevertheless, next time I come to a tropical location I should bring a substantial container of concentrated picaridin; it may be a bit worse than DEET, but Ill actually use it regularly.\n\nOverpacked:\n\n* I think I could actually have gotten away with single 100ml bottles of shampoo and conditioner each, to my surprise. I was being more conservative with them than I would have been at home, but my hair wasnt dirty or unconditioned.\u003C\u003Cfnote \I suppose this means I use excessive amounts at home, hmm...\>> I just scraped the bottom of my 90ml conditioner bottle. And my hair is pretty long right now; Im planning to cut it a couple inches shorter soon (thus using less conditioner). I washed 5 times here, so expenditure of a little less than 20ml per wash in conditioner. (This is worth micro-optimizing because cramming everything in a 3-1-1 bag can be tricky and its much easier to keep it as sparse as possible.)\n* I could have gotten by with a single bar of All-One|https://www.drbronner.com/ (I brought a half-used one plus a new one and my new one is still only about half used). In Turkey, on a trip that was just a touch longer, I just barely made it, so I was overly cautious this time; but its so trivial to buy a bar of soap at the convenience store if you run out that I should just bring one per two weeks next time unless Im going to be in the boonies for days at a time.\n\nEverything else was just right.\n\n\n!! Handy little things\n\nUnderpacked:\n\n* I wasnt able to make my paracord work as a laundry line, it was too slippery when the line wasnt perfectly level! I should get an actual one. I didnt otherwise use the cord, but I dont consider that overpacking; its just a smart thing to have regardless and its small and weighs 10 grams.\n* I didnt bring a plastic garbage bag, and found myself wanting one a couple times (once to send my laundry to the laundry service -- I ended up packing it in a grocery bag I found in the villas kitchen -- and once when Dennis was puking in a van). The only reason I didnt bring one was because I could only find a scented one and didnt want to run to the grocery store; nevertheless, I should make sure I bring one in the future.\n* To improve my security checkpoint experience, I want to bring a small, empty packing cube when flying, which Ill O-ring into the top of the main compartment. While Im waiting in line at the checkpoint, all the stuff in my pockets goes in there so I dont have to chuck it in sixty-three bins at light speed and then sort it all out again on the other side.\n\n\n!! Accessories\n\nPossibly underpacked:\n\n* I didnt bring anything for rain protection. It only rained once, briefly, and I wouldnt have had my umbrella with me even if Id brought one (I went out for a morning photography walk with just my camera and my phone, and I didnt have any idea it was going to rain). But I felt a little uncomfortably unprepared at times not having an umbrella or rain jacket, and if you feel like youre uncomfortable or missing something important, IMHO youre doing ultralight travel wrong. I still think not bringing anything was a sensible choice given the weather forecast and my expected itinerary -- being OK getting a little wet is a perfectly valid rain protection strategy under the right conditions -- but I might look into ultralight-friendly options for future trips.\n\nOverpacked:\n\n* I did not need six KN-95 masks. I wore one out in each direction for transit and had no plans to use them anywhere else. Three or four would have been more than enough.\n* (Maybe?) I enjoyed having my camera, but I would have done fine without it, and it was so heavy and annoying to pack and repack in the bag as I traversed different baggage rules and security checkpoints that Im on the fence about it. (This might be less annoying if I improve my checkpoint hygiene though.) Maybe the big-brain move would be to upgrade to a compact mirrorless camera, but thats a mighty expensive solution to an occasional minor problem!\n\nJust right:\n\n* Cap, sunglasses, and water bottle.\n\n\n!! Documents\n\nI did everything right here as far as I can tell. I only used my itinerary pages once and I could have referred to the TripIt app, but its not worth the risk your phone will be dead or get dropped in the ocean at the wrong time.\n\n\n!! Electronics and entertainment\n\nUnderpacked:\n\n* Was unable to transfer pictures off my camera because the micro-USB tip didnt transfer data. Will try to get a better one.\n* The crossfeed cable worked fine for charging my phone and laptop together overnight, but I wonder if Anker makes a 65W adapter that also has a USB-A connector, or even just a second USB-C connector; it might come in handy.\n* I didnt desperately need it, and it might not have been too useful with the power plugs being different here, but I would like a small three-way cube splitter to replace that beast of a Belkin splitter which I never bring anywhere because its a beast. (Whoever decided to market that as a “travel” splitter was insane. I mean Ive used it that way on trips where I packed heavier, but its such overkill.)\n\nPossibly overpacked:\n\n* To my great surprise, I barely used my mouse! It seems ridiculous not to bring a mouse on a trip where youre working on your laptop eight hours a day, but my workflow is keyboard-based with occasional interjections of mousing, for which the touchpad is actually //more// efficient when using a laptop without an external screen or keyboard, even when theres plenty of room for the mouse -- I can often do these interjections with my thumb and not even take my hands off the keyboard, and its a shorter distance there than the external mouse. The mouse is 150 grams and got in the way in my bag a lot, plus it was an extra thing to keep track of on site. I might skip it in the future.\n* I didnt use the headphone adapters...but theyre so light Id bring them anyway.\n* I didnt use the pencil. I knew I wouldnt but brought it anyway for some reason. It wasnt a burden, but scratch in the future unless bringing paper. I always carry a four-color pen and pencil combo in my pocket, which is a little chunky but perfectly serviceable for occasional writing needs.\n* I didnt use the playing cards much -- only for one game of solitaire. We already had other cards and I didnt have much free time at a table. I might omit these on certain trips in the future, but I dont feel like I made an error bringing them.\n* I also never played the Mille Bornes card game I brought. We brought a zillion games between all of us and played a bunch of rounds of just three of them; EightyTwentyPrinciple here. Ill let other people lug the games around in their desk-sized suitcases in the future.\n* It would be worth considering grabbing single-country power adapters instead of my large universal one. Its not that heavy, but its pretty bulky with a lot of plastic that doesnt serve any core function, so it feels a little wasteful unless youre expecting to go to multiple countries with different connectors. (On the other hand, some of the cheap single European adapters dont properly fit into recessed sockets, and this one has a special extender that makes it fit snugly everywhere Ive tried it.)\n\nJust right (everything not mentioned was just right too, this is just for items deserving comment):\n\n* I didnt use the eraser much, but I did use it a couple times as a fidget toy. I need to have something to fidget with -- otherwise if Im sitting still and feeling restless, I wind up messing with my hair and skin instead -- and this eraser is extremely light and multifunctional as those go. Keep.\n* The (newly purchased) cheap earbuds were a great compromise. I didnt use them too much, but it was nice to have music on occasion and it definitely wasnt worth bringing my good over-the-ear headphones. The earbuds are practically microscopic and weigh 15 grams, so theres no good reason not to bring them.\n},{title:BangkokThailand,created:20240503023243623,creator:soren,modified:20240531171735865,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BanTargetedAdvertising,created:20200422025717829,es:possible,modified:20210511010927555,reviewed:20250309,tags:Economics Design TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:This sounds dumb, but targeted advertising is almost certainly (a) much more dispensable, and (b) much more crucial to many of the worst practices of BigTech and MonetaryAlgorithmOptimization, than we think it is. Why dont we just make it illegal? TheBasecamp suggested about as much in a recent congressional hearing.\n\n(By //targeted advertising//, to be clear, we mean advertising that tracks and adapts to the individual user its being displayed to across multiple contexts. Its OK to serve ads relevant to the content thats otherwise being displayed on the site, and its OK to track your own customers on your physical and web properties to determine what else they might be interested in, as long as youre open about what you collect and how you can break the tracking should you wish to, e.g., by creating a new account. That last one is probably only //mostly// OK, but we wont get into that here.)\n\nOn part (a), consider: Even 10 years ago (that would be 2010), advertising was only starting to be targeted to the extent it is now, where Facebook followed you around the web. In 2005, there was plenty of advertising on the web, but most of it was based on the clientele of websites or what you typed into the search box //on that site//, not what you were doing last week at your grandmas house. And guess what? Advertising still sold things, and it still made money for websites. Google isnt going to go under by returning to search query-based advertising!\n\nOn part (b), here are some things that wouldnt happen to the same degree without targeted advertising:\n\n* IdeologyMicrotargeting and associated abuses of politics and contributions to the DeteriorationOfReality (you cant get the data you need)\n* Invasive tracking (if you cant use it to target advertising, most companies have little other use for it)\n* Some types of data breaches (the impact would be reduced, anyway)\n* Clickbait (theres far less useful information to target based on without watching customers across the web!)\n* Various kinds of discrimination enabled by microtargeting (forms of HiddenSystemicRacism and other -isms like not showing people of color ads for real estate)\n* The general decline of journalism -- placing those types of ads might well become more popular again, after advertisers cannot so easily pay to microtarget people.\n\nSource: WhyNotBanTargeted20200322.},{title:Bash,created:20200529195809345,creator:soren,es:confident,modified:20211107174933979,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:The ubiquitous Linux and Unix shell. Frequently used on Windows too, though PowerShell is more useful there if youre trying to hook into the operating system instead of automating cross-platform tools.\n\nMany other shells, such as zsh or fish, are more full-featured and fix some of Bashs issues, but Ive found bash is Good Enough™.},{title:BASIC,created:20200410164803312,creator:soren,es:confident,modified:20211229150230987,modifier:soren,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:Programming language of the 60s-80s. Intentionally simple and a crappy language from a structural, theoretical, and architectural perspective -- but revolutionary because it was something anyone could grasp and would maybe get them interested enough to move onto something better later on.},{title:BasicLearningFoundation,created:20200708003536132,creator:soren,es:confident,modified:20220505183927147,modifier:soren,tags:Memory Learning Public Idea,type:text/vnd.tiddlywiki,text:Knowledge builds on other knowledge (this is part of the idea of the ConceptWeb; when youre trying to get the knowledge into your head or into someone elses head, it has to start with easier things to find metaphors for|FamiliarizingMetaphor). Learning basic knowledge seems trivial, but may be the most important part of the process of learning something: it allows you to recognize what more complex material means, whether and why its important to you, and add it to your MentalModel of the topic. Thus, its worth prioritizing.\n\nA musical analogy might be the mastering of scales or standards; thats probably not how youre going to differentiate yourself as a musician, and theyre not always terribly interesting, but having that foundation can be incredibly helpful. Further, there is always plenty to learn among the basics; its hard to do them well because there is NowhereToHideTheMistakes.\n\nAn AreaOfAcquaintance is one in which one has mastered the basics and has this necessary foundation to learn more or to begin to understand ideas in the field that one hasnt previously encountered.\n\nCf. LuckyTenThousandLearners.\n\n\n!! References\n\n> I now believe memory of the basics is often the single largest barrier to understanding.\n> ---MrMichaelNielsen, AugmentingLongTermMemory201807\n\n\u003C\u003Cclarify>>\n\n> Do not neglect the basics. Memorizing seemingly obvious things is not a waste of time! Basics may also appear volatile and the cost of memorizing easy things is little.... Basics are usually easy to retain and take a tiny proportion of your time. However, each memory lapse on a basic fact can be very costly!\n> ---SuperMemo, TwentyRules of Formulating Knowledge in Learning, #3: “Build upon the basics”\n},{title:BasilicaOfStMary,created:20230514125237916,creator:soren,gis-lat:44.973056106589574,gis-long:-93.28625957856855,gis-zoom:15,modified:20230515174630576,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BatchSize,created:20201201214206930,creator:soren,es:likely,modified:20211204153915852,modifier:soren,tags:AgilePhilosophy Process Public Idea,type:text/vnd.tiddlywiki,text:Is it better to produce or do a large number of the same thing at once, or a small number?\n\nThis is a tradeoff which is often not recognized as one:\n\n* Large batch sizes allow improved economies of scale; you can usually complete each unit faster and cheaper (you get into a groove, the physical or mental framework only has to be set up once, etc.).\n* Small batch sizes allow improved flow between stages; you can usually finish a complete manufacturing process or project faster and with less waste|WorkWaste.\n\nThe LeanMethodology generally targets reducing batch size, although perhaps only because at the time it was introduced, most people were leaning towards overly large batch sizes.\n\nMakingWorkVisible2017 suggests that large batch sizes are disproportionately bad in KnowledgeWork; there tend to be fewer available economies of scale, reduced switching costs (though still substantial if done improperly|DeepWork), more details that youll forget if you dont do something for a long time due to a larger batch size, and a larger number of harder-to-understand dependencies|OverlargeDependencyWeb. This last one is particularly important because the time to complete the project increases faster than linearly with the number of dependencies causing a delay.},{title:BathroomRule,created:20200321224754085,creator:soren,es:likely,modified:20210509011942359,modifier:soren,tags:PhilosophyOfLife InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:The Bathroom Rule states that you should not criticize anyone at an event until you have left the event. The name comes from an anecdote in which someone was badmouthing another participant to a friend at a choir event while washing her hands in the venues restroom and said participant walked out of a stall on cue.\n\nI learned of the rule in this form from C.A.|PrivatePerson.\n\nSee also the TwentyFourHourRule and DontRushCommunication: such a rule can be beneficial to your own thinking and that of the people youre griping to as well.},{title:BattleForWesnoth,created:20201201030023025,modified:20201201030002096,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular OpenSourceSoftware military strategy game with a fantasy theme.},{title:Baudolino,caption:Baudolino,created:20200322040333527,creator:soren,format:paperback,medium:book,modified:20210607011016765,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:Baudolino,text:Book by MrUmbertoEco in which the title character is involved in a vast number of unsolved mysteries and anonymous Latin works of the medieval period. We read this in our MedievalLatin course at the end of the semester and it did a fantastic job at tying everything together.\n\nDiscusses the FormsOfExistence fairly extensively.},{title:BayCityOregon,created:20250626183026302,creator:soren,modified:20250626183026986,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BdeMakaSka,created:20230901033208727,creator:soren,gis-lat:44.9421741617855,gis-long:-93.3121010913511,gis-zoom:13,modified:20240110025557097,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Largest and most urban lake in Minneapolis (which is saying something, since its “The City of Lakes”). A little windy and quite open compared to other lakes. Fairly developed, with condos, a beach, food, etc. Hydrologically and navigably connected to CedarLake, BrownieLake, and LakeOfTheIsles by canals.\n\nThe name means “Lake White Earth” in the Dakota language; it was formerly known as Lake Calhoun, but that was named after John C. Calhoun, so we decided to change it. Pronounced /bəˈdeɪ məˈkɑː skɑː/. “Bde” means “Lake,” and I have no idea why they decided to translate the name of the feature in contravention of every established rule about how you incorporate foreign names of places.\n\n{{BdeMakaSka/p||PrivateChunk}}},{title:BDFL,created:20200426164952686,es:confident,modified:20210509005249680,tags:Definition Politics Public Idea,type:text/vnd.tiddlywiki,text:Benevolent Dictator for Life, a term commonly used in software, especially OpenSourceSoftware, to describe a style of managing the project where the project belongs ultimately to one person who has authority to decide what goes in it and make those sorts of decisions. Very common and seems to scale much better than you might think, perhaps partly because there is always the option to fork the project and take it in a different direction in open-source, should it end up going sideways in the opinion of most other contributors; that pressure probably tends to keep the BDFL reasonably aligned with the community as well as providing an out should it fail.\n\nLinux is the best-known project that operates this way. The alternative is usually to have some sort of design committee, which can make sense and is especially popular for ProgrammingLanguages.},{title:BearingFalseWitness,at:202407131500,author:MsAjLevine,blurb:,caption:Bearing False Witness: How Christian Preaching and Teaching Malign Jewish Practice and Belief,conference:2024WildGooseFestivalTrip,created:20240718032406571,creator:soren,medium:conference,modified:20240723025234556,modifier:soren,rating:average,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:A bit hermeneutical-nerdy for my level of knowledge about such things, but AJ is a very smart woman with a wonderful and silly stage presence. Forgot to bring a chair, sat on the ground for a bit and that was fine. ~5 folx from TheSpiritGarage there -- people who had gone to her talk yesterday highly recommended her.\n\nI probably should have taken notes, because Ive already forgotten most of the actual content.\n\nChoice quote:\n\n> HOWEVER, if after 40 minutes with me you continue to step in it, YOU WILL GO TO HELL!},{title:BeautifulMess,created:20200123032536798,creator:soren,es:mythological,modified:20220505184126387,modifier:soren,tags:Design Expression SorenConcept Idea Public,type:text/vnd.tiddlywiki,text:BeautifulMess is an expression I often use for things that are pleasing but jumbled up without a formally classified order. This does not however mean that they are truly without order. Typically the beauty comes from the fact that they match the way people think or live. Indeed, beautiful messes are often much more beautiful than conventional order.\n\nFor instance, RolvaagLibrary at StOlaf is a beautiful mess due to its age and continual renovations to meet needs; to a lesser extent all of StOlafMagic is. Many types of RecordsProject and CommonPlace books end up in beautiful messes.},{title:BeaverCreekValley,created:20201129174805341,foreignid:00112,gis-address:15954 County 1, Caledonia, MN 55921,gis-lat:43.643699233965016,gis-long:-91.58086332687408,gis-zoom:13,hideorphan:true,modified:20210807151728033,phone:(507) 724-2107,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki,text:An extremely peculiarly shaped park tucked into the untouched portions of the valley. Only a few miles of trails, but they are surprisingly hard for southern Minnesota due to all the bluffs. In some places you have to be careful not to walk over the edge. You can hear running water almost everywhere in the park and the climate is always agreeable. Some mosquitoes at appropriate times, but generally not terrible; always tolerable with some DEET in your backpack.\n\nThis is a fantastic place to spend a quiet weekend recharging. It is highly underrated.},{title:BeaverCreekValley/Amenities,created:20201129214545676,hideorphan:true,modified:20210807145420235,tags:Public Subplace Idea,type:text/vnd.tiddlywiki,text:Good firewood can be purchased in the park. No ice or other concessions available, but a gas station in Caledonia is a 15-minute drive if you forget something. Quillins is a nice small-town grocery store with very reasonable prices only a little bit further away. Private, clean, free, and reasonably hot showers in the middle of the campground; no rules about cart-in campers being unable to use them.\n\nCell service is spotty at best. You will likely have service at some places in the park, particularly on the rim trails, but can never count on it being available in any particular location.\n},{title:BeaverCreekValley/Travel,created:20201129214535870,hideorphan:true,modified:20210807145531778,tags:Public Subplace Idea,type:text/vnd.tiddlywiki,text:From southern Minnesota, take 90 east to 76 and follow it south (gorgeous country drive!) and take a short jog west on 1 into the park.\n\nWhen returning home, the left turn from 1 onto 76 onto the downstroke of the T is unmarked and with no stop sign, so look out for it. Driving past it is thoroughly annoying as its several minutes before theres a good place to turn around.},{title:BebeZito,created:20250621164614248,creator:soren,modified:20250621164615365,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BeBold,created:20211228152244632,creator:soren,description:Act boldly even if youre not entirely sure what will happen; you wont know what you can do until you go too far.,es:confident,microlink:bold,modified:20240611044828266,modifier:soren,tags:Idea Business LifeDirection PhilosophyOfLife Expression Public Favorites,type:text/vnd.tiddlywiki,text:Wikipedia encourages|https://en.wikipedia.org/wiki/Wikipedia:Be_bold everyone|WikipediaPhilosophy to “be bold” in editing it. That is, instead of sitting and wishing the encyclopedia didnt have a problem, carefully considering whether youre sure youll be improving an article, or asking for permission, you should just go make it so. Theres always a small chance youll be wrong and it will turn out worse, but thats OK -- someone else will come change it back or make it even better eventually|EventualConsistency, and in the vast majority of cases youll be making it better.\n\nThis philosophy works pretty much everywhere, not just on Wikipedia, for a simple reason: people tend to be overly conservative, focusing on the possible negative consequences of some action and greatly underestimating the chances that everything will go swimmingly, or at least well enough to make it worthwhile. In most cases, getting the change made right away is worth much more than getting it slightly better but delivering no value until then (see ShippingIsAFeature).\n\nEven if you turn out to be wrong, you gather far more information from bold experiments than from doing nothing (see TryItAndSee and TrustAsymmetry). As long as youve ensured the worst possible case is acceptable|ContingencyPlanning, its fine for some of the experiments to be less than successful. As the Wikipedia meta page says:\n\n> Think about it this way: if you dont find one of your edits being reverted now and then, perhaps youre not being bold enough.\n\nThis brings up an even more important point: in most places in life, the limits arent written down, so until you push up against them, youll never know what they are. Thus, for maximum effectiveness, you //must// skirt them now and then. Most people tend to somewhat underestimate the limits, so even its preferable not to hit them for some reason (usually it doesnt matter as long as you dont cross too far over the line!), it would be helpful to assume theyre a little higher|CountOnYourPartnerForOne than you think they are.\n\nCorollary: LetBadThingsHappenSometimes. The optimal number of failures or oversteps is not zero.\n\nEspecially important corollary: If a little of something works, boldly try doing more of that (MoreDakka).\n\nLazyConsensus is a decision-making philosophy for small groups of people that encourages everyone to act boldly.\n\n!! References\n\n\u003C$m2.x number1>\n\n> Sin boldly, grace abounds.\n\n---MrAntonArmstrong, encouraging people to sing out even if they werent sure it was right yet\n\n\u003C/$m2.x>},{title:BedOfProcrustes2010,author:Nassim Nicholas Taleb,caption:The Bed of Procrustes: Philosophical and Practical Aphorisms,completed:202110261200,created:20211027125438044,creator:soren,medium:book,modified:20211027141518619,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2010,text:Collection of aphorisms by MrNassimNicholasTaleb, focused around Talebs view of large portions of civilization as attempting to fit people to the realities of the world instead of vice versa (see also the Cult of the Fantasy Pedestrian|CultOfTheFantasyPedestrian20190814). Part of the //Incerto// series (book 3).\n\nProcrustes, in myth, would stretch short travelers and trim the legs of tall travelers so they fit perfectly in his guest beds. (Theseus eventually put Procrustes to bed and decapitated him to make him fit, putting an end to the myth but not to the human tendency.)\n\nThis took me only about an hour to read for the first time; its about 100 pages and each page has 3--5 aphorisms on it. But its in the nature of aphorisms that reading it once is not enough to absorb much, nor can they be realistically summarized into flashcards or Zettel so you can find them again later (your interpretation will be different when its really important!). This will be best used as continuing bathroom reading to maximize the chance of happening to stumble across something useful when its useful.},{title:BehaviorDesign,created:20210912005556206,creator:soren,es:possible,modified:20210912010404001,modifier:soren,tags:Idea LifeDirection Psychology Public,type:text/vnd.tiddlywiki,text:Method for identifying ways to improve your life from TinyHabits2020. An extremely analytical method. I havent gotten a chance to see how well the results //last//, but it does seem to be helpful already in terms of generating ideas. Heres how it works:\n\n# Clarify your aspiration -- what are you hoping to accomplish? Go to the root of it|SevenfoldWhy, if possible, instead of focusing on one particular outcome, so you dont end up solving the wrong problem|ActualRequirements.\n# Explore behavior options -- Brainstorm ten or more things you could try to do to come closer to that aspiration. They can be practical or absurd.\n# Match with behaviors -- Write down each behavior on an IndexCard or sticky note, then “graph” them on two axes, //impact// (how effective would this behavior be?) and //feasibility// (do I have the resources and motivation to realistically do this?). This will help you see which behaviors are a good fit for you -- because they may be different from other peoples! Grab the items from quadrant I and explore whether you can implement those.},{title:BehindTheName,created:20200423021128233,modified:20200423021312256,reviewed:20250611,tags:Resource Public Idea,type:text/vnd.tiddlywiki,url:https://behindthename.com,text:Fantastic resource for finding names for people/characters or researching the meanings and histories of names and how they are related. Like an etymological dictionary for proper names. First/given names only, right now anyway.\n\n{{!!url}}},{title:BeingAndNothingness1943,author:Sartre,bibliography:LifetimeReading,caption:Being and Nothingness,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034113,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1943},{title:BeingAsexual2019,author:Natasha ~McKeever,caption:What being asexual or aromantic tells us about sex and romance,created:20210308032027313,creator:soren,medium:article,modified:20240616040655935,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://aeon.co/essays/what-being-asexual-or-aromantic-tells-us-about-sex-and-romance,year:2019},{created:20221003172736370,creator:soren,text:,title:BeingJohnMalkovich1999,tags:Source Public,modified:20240320132508886,modifier:soren,type:text/vnd.tiddlywiki,caption:Being John Malkovich,medium:film,url:,readstatus:read,author:Spike Jonze / Charlie Kaufman ,completed:201612201200,year:1999,bibliography:SharedConsciousness,telepathy-description:People can temporarily join John Malkovich inside his head.,rating:distinguished},{title:BeliefAsInstrument,created:20200821034428501,creator:soren,description:Consciously choosing to believe potentially or actually false things can be adaptive.,es:likely,modified:20221229211555519,modifier:soren,tags:Psychology Imagination LifeDirection Public Idea,type:text/vnd.tiddlywiki,text:Many people want to believe only true things. This sounds like a great goal, but sometimes it can be overly limiting. For instance, determining the truth value of many statements may be difficult or impossible. So sometimes the truth is useful only in an academic context, or something that is theoretically false may be true for all practical purposes.\n\nIn these case, a secondary rule can come into play: what are you hoping to accomplish with your belief? If there is no overwhelming evidence against something, and you can make the case that the belief is adaptive or useful, believe it and dont look back! Indeed, even believing something you think is probably false doesnt have to be anathema if it leads to consequences you value highly.\n\n(Maybe you dont think its possible to believe something because you think its convenient. I call beliefs on this topic Metafaith, and I think its possible, though not always easy.)\n\nIn more cases than one might imagine, and more than the intriguing but trivial experiments involving optical illusions and whatnot, belief can precede truth. While this can rapidly become New Agey in a cringy and maladaptive way if youre not careful about it, there is a middle ground to find here. We can here distinguish between believing that magical outcomes not under your control will happen (e.g., the classic “believe you deserve a new car and one will come to you”) and believing that you are capable|PeopleDontThinkTheyCanDoThings of doing something. Since you are under your own control, this has a real chance of working, and its easy to unnecessarily limit yourself|SelfBelief.\n\nA couple of examples:\n\n* GoalImagination\n* The LifeHack instrument CountYourselfUp operates purely on belief.\n\nRelated: one can choose to accept things without believing them|AcceptanceVersusBelief.\n\n\n!! References\n\n\u003C\u003C\u003C\nBelief is an instrument to do things, not the end product.\n\n---MrNassimNicholasTaleb, SkinInTheGame2018, p. 213 (\u003C\u003Crt 11294>>)\n\u003C\u003C\u003C\n\n> Music is not the end in itself; it is but a means of grace. \n> ---MrAntonArmstrong, on the occasion of MsSigridJohnsons retirement-reunion concert (\u003C\u003Crt 5510>>)\n\n\u003C\u003Cclarify>>\n\n> I dont believe it but Im sticking with it. Thats my definition of faith.\n> ---WhenGodTalksBack2012, \u003C\u003Crt 7111>>\n\n\u003C\u003Cclarify>>\n\n> If your belief is working for you, if it’s helping you navigate a crazy world and find solace, and if it’s not hurting anyone else, it’s doing what it’s supposed to do. Often, beliefs are about finding human connection and a way to tell ourselves about our place in the world, not as an accurate predictive insight as to what’s actually happening. And beliefs are almost always about community, about being part of something.\n> ---MrSethGodin, \u003C\u003Crt 11347>>\n\n\u003C\u003Cclarify>>\n\n> This blog is a practitioner’s blog: it is interested in what is useful, not what is ‘true’.\n> ---MrCedricChin, https://commoncog.com/blog/how-to-learn-tacit-knowledge/\n\n\u003C\u003Cclarify>>\n\nMake Believe|https://sive.rs/mb (Derek Sivers)},{title:BellJar1963,author:Plath,bibliography:LifetimeReading,caption:The Bell Jar,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034121,priority:3,readstatus:unread,recommended-by:GR,tags:Source Public,type:text/vnd.tiddlywiki,year:1963},{title:Beloved1987,author:Morrison,bibliography:LifetimeReading,caption:Beloved,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034136,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1987},{title:BemSexRoleInventory,created:20200911020054866,creator:soren,es:confident,modified:20230908121204759,modifier:soren,tags:PersonalityAssessment Idea Public,type:text/vnd.tiddlywiki,text:Common measure of gender roles. Repeatedly found to be well-correlated with most traditional gendered behaviors.\n\nParticipants rate themselves on Likert scales of various traits and statements, some of which are masculine-coded and some of which are feminine-coded. The results fall into four categories:\n\n* Masculine: Scored above median\u003C\u003Cfnote \Wrt a comparison group.\>> on masculine-coded traits and below median on feminine-coded traits. (Test below is normed at 100.)\n* Feminine: Vice versa.\n* Androgynous: Scored above median on both categories.\n* Undifferentiated: Scored below median on both categories.\n\n\n!! My results\n\nUsing the Open Sex-Role Inventory|https://openpsychometrics.org/tests/OSRI/ version, July 2023:\n\n* Masculinity: 107\n* Femininity: 111\n\nThat puts me squarely in the Androgynous category, if relatively close to the boundaries on both sides:\n\nimg width500 osri2023.png\n\nThis matches how I see myself. As far as //gender identity// goes Im straightforwardly a man, but Ive always been pretty intermediate as far as specific behaviors and personalities. I like most masculine things, but am not scared to do feminine things or even play with the boundaries a bit. And Im not particularly “jagged” in the sense that most of my personality traits and preferences are very strong; Im usually a moderate person|ModerationBias.\n\nI notice that I scored slightly more masculine than feminine last time I took the test (see below), which I think was probably 3–5 years ago, and now I score slightly more feminine than masculine. I think this tracks with my life experience, too! I believe Ive (partly intentionally) become more emotionally driven and intimate/caring with other people over that time. That said, I see on Wikipedia that the short form (which Im guessing the OSRI is based on) tends to yield somewhat higher femininity coefficients, so maybe thats all thats going on.\n\nBems theory is apparently that the androgynous quadrant (moderately high on both scales) is the healthiest personality, so I guess by that theory Im doing well!\n\n!!! Previously\n\nI found the following results recorded completely without any context from a previous test:\n\n* 60.83/100 masculine\n* 51.67 feminine\n* 54.17 androgynous\n\nUnfortunately Im not sure exactly how to compare these results, because different versions of the BSRI have been scored differently over the years and I dont know how this is scored! I //think// the masculine and feminine numbers are percentiles, whereas the OSRI version below is normed with 100 being the average, but Im not sure, and I also dont know how the androgyny figure was calculated (some versions use a t-score, but that doesnt seem like this one since high androgyny would be close to zero; other versions have actual “androgyny”-aligned characteristics that might be used to create a percentile score here).\n\nFor future retests Im inclined to use the OSRI. Although that also has a notice on it saying not to rely on it not changing, so, umm...? I also like this version because it uses only a five-point Likert scale and has only 20-30 questions, rather than a seven-point scale with 60, which makes it considerably less annoying to take. They have an optional section where you answer more questions, which they presumably use to test the noninferiority of the shorter version.\n\n{{BemSexRoleInventory/p||PrivateChunk}}},{title:BeneficialDiscomfort,created:20200129162750486,creator:soren,es:confident,modified:20250209020045436,modifier:soren,tags:Psychology PhilosophyOfLife Health Public Idea,type:text/vnd.tiddlywiki,text:Being comfortable can be problematic. Im not one to bash things like having hot water or beds, but seeking comfort in all aspects of life, physical or mental, can be dangerous. Comfort easily becomes equated with complacency.\n\nBeing uncomfortable is often a sign that youre actually doing the right thing. For instance, you will probably feel uncomfortable trying something new, or helping someone whos in a bad way and needs help, or forming new social connections -- all of which things are important and even necessary. Often the way out of a LocalMaximum towards something better passes through uncomfortable territory|https://ap.sorenbjornstad.com/#post-65.\n\nDiscomfort can also be good for our bodies, as noted in MrNassimNicholasTalebs ideas on AntiFragility -- vigorous exercise, as one obvious example, consists of damaging the body in such a way as to induce it to put energy into rebuilding and improving the resilience of certain parts of itself. I suspect temporarily doing without or stressing many things can be beneficial in the same way.\n\nNegativeVisualization is the imagined version of this.},{title:BenKuhnBlog,author:MrBenKuhn,blogroll:Blogroll,caption:Ben Kuhn,created:20250905204506463,creator:soren,modified:20250905204523074,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.benkuhn.net/},{title:Beowulf,author:Anonymous,bibliography:LifetimeReading,caption:Beowulf,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034144,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:M. recommends the Seamus Heany translation},{title:BerkeleyCalifornia,created:20241126010915978,creator:soren,modified:20241126010917529,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BespokeSoftware,created:20240316212537421,creator:soren,description:Write your own software rarely, as a last resort; but when theres nothing else for it, bespoke will have an extremely positive impact.,es:confident,modified:20240523130217658,modifier:soren,tags:Idea Business Productivity Process Public,type:text/vnd.tiddlywiki,text:General rule about writing your own full-service software: it takes so long and is so much work that it is relatively rarely worth it, but when it is, there is no way anyone elses software can ever hold a candle to your own.\n\n(Sometimes all the “software” you need is a fifteen-line Python script. In that case, absolutely write your own software, dont rely on someone else to provide something that maybe almost works.)\n\nFor good results, you must work out which tools are the force multipliers where having excellent software will make up for the cost of development and ongoing maintenance. For instance, writing your own email client is probably not worth it, even though you probably could do a better job if you set your mind to it. Its a big task, its hard, its full of terrible edge cases, and if you screw it up some of your emails wont be sent or received or will look weird or your inbox will be full of spam, and nobody will be sympathetic because everyone else uses off-the-shelf email clients that always work. On the other hand, writing your own task management app likely is worth it if you have an idiosyncratic workflow and havent been able to find anything else that works well. Its a quick task because the app is simple, there are few edge cases, theres little to go wrong (and even if it does you can very likely easily fix it), the only other systems you have to interface with are things like third-party calendars which are designed for easy integration with bespoke apps, and you are likely to have unique insights into your workflow that enable you to do a vastly better job.\n\nNote that hiring someone else to write bespoke software may produce good results, but rarely produces great results. To get the full benefit of bespoke software, you must write it //yourself//, as in, the specific person who uses the software should write the software|ReflexiveSystemDevelopment, and they should write it only for them and not for anyone else, so other peoples workflows and feature requests have no influence. (See also CodeDataEquivalence.) If thats not possible, someone else in your organization should write it. By the time you hire an external agency, youve lost a significant chunk of the benefits and youll still be spending gobs of money.\n\n\n!! References\n\nM2 itself is a great example. Several people in the RemNote sphere have asked me when Im going to move M2 to RemNote, and the answer is “when hell freezes over.” M2 is already optimized for exactly the way I think, and because its familiar and written in the excellent TiddlyWiki low-code environment, it takes me practically no time to experiment|AgilePhilosophy with new ideas. RemNote is great, and not even bad for linky writing, but come on, you cant beat bespoke.},{title:BetteridgesLaw,created:20210101003651423,description:Any headline that ends with a question mark can be answered with the single word “no”,es:likely,modified:20210623120223446,tags:LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:Betteridges Law of Headlines: {{!!description}}.\n\nIt isnt //always// true, and its certainly prone to ConfirmationBias, but it works more often than you might expect! (See also YoOhSoNo.) Journalists have a tendency to go for “hot takes” in their articles, which means that the cynical/skeptical/lazy answer is commonly appropriate.\n\nThere is an entire subreddit, \u003C\u003Csubreddit qtwtain>>, dedicated to headlines to which this law applies. Some of my all-time favorites, in order of most to least absurd in my opinion:\n\n* Will having gay sex soon be required for all American citizens (excluding Muslims)?\n* Has a cash register been spotted on Mars?\n* Should you do electroshock therapy on yourself at home?\n* Is DIY dentistry something to sink your teeth into?\n* Could an emoji save your life?\n* Is it time to drop the cannibalism taboo?\n* Dimming the sun: The answer to global warming?\n* Should //Harry Potter// be included in the canon of Holocaust literature?\n* Were Adam and Eve black transgender refugees?\n* Are you a psychopath for drinking gin and tonics?\n* Is now the time to buy a dam for your house?},{title:BetterIdiot,created:20200322033422837,creator:soren,description:Some failure modes will always exist, and the pursuit of unattainable levels of idiot-proofing can make a design worse.,es:confident,modified:20231118005240663,modifier:soren,tags:Design PhilosophyOfLife Public Expression Idea,type:text/vnd.tiddlywiki,text:> If you make something idiot-proof, someone will make a better idiot.\n\nAs a designer, remember that there is NoSuchThingAsCommonSense. No matter how hard you try to PleaseEveryone, someone will be upset, or unable to use your product, or even hurt themselves. Do your best and take reasonable steps, but the vision of perfect is impossible. Someone can always go further (cf. NegativeInterestRates).\n\nIts particularly important to remember that trying too hard can make you believe perfection is additive and if you just add one more rule|AddAnotherRule youll make it idiot-proof. In actuality, PerfectionIsSubtractive.},{title:BetterLateThanNever,created:20200122024337037,es:confident,modified:20210611030305984,tags:Expression PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:SunkCosts are a bitch. Its often emotionally hard to miss something at the beginning, but just as often that beginning turns out to be such a minor component that missing it barely mattered.\n\nFor a different take, see MrWestonNoble, as once reported by M.A.|PrivatePerson on the first day of TheNordicChoir rehearsal after someone arrived late: “Better late than never, but better never late!” He claims nobody was ever late again that year. (\u003C\u003Crt 9637>>)\n\n!! References\n\n> The best time to plant a tree is 20 years ago. The second-best time is today.\n> ---proverb\n},{title:BeverlyClearySculptureGarden,created:20250623162355283,creator:soren,modified:20250623162356017,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BiasedWorldDesign,created:20201026164154319,creator:soren,es:likely,modified:20221216235627769,modifier:soren,tags:Idea Identity Public Design,type:text/vnd.tiddlywiki,text:Across a wide variety of dimensions, the world is biased in a hidden way against certain categories of people (usually ones that are in the minority, or not average|TyrannyOfAverages, because groups in the majority are likely to speak loud enough to change things). Were all familiar with the types of bias that have to do with peoples socially constructed opinions (e.g., racism), but often the results are much deeper, and this pattern occurs along dimensions most people dont consider.\n\nUnexpected examples:\n\n* Most institutions are biased against introverted people|IntroversionAxis: they overemphasize live, in-person collaboration, consider socializing the default, and accept overly noisy and nosy people but reject quiet people. A few probably fall the opposite way; TheBasecamp for example strikes me as one, with its all-remote office and focus on LongFormWriting. (Cf. QuietPower2012.)\n* Most physical spaces are designed for people of a fairly narrow range of heights: people who are shorter cant reach things and people who are taller bang their heads on doorways or have to hunch over.\n* Dating culture is biased against asexual-spectrum people: those who lack sexual or romantic attraction or have it develop in uncommon ways, but still want to find a partner, have an extremely confusing world to navigate, in which most people dont understand them and they have to violate social norms to accomplish anything.},{title:Bible,author:Various,bibliography:LifetimeReading,caption:The Bible (complete),created:20210703170128000,genre:Religion,medium:book,modified:20210705214034157,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:Length: !!\n\nCopy: H},{title:Bibliography,caption:An aggregation of sources that might be useful to someone studying a particular topic the ZK touches on.,color:#ff0000,created:20200808024704618,creator:soren,icon:$:/core/images/tag-button,modified:20210827233651142,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:A bibliography provides a concise list of useful Sources for someone whos unfamiliar with a topic thats treated at length in the Zettelkasten, without requiring the reader (or the author, hoping to find them some references!) to aimlessly wander through the ConceptWeb hoping to find more sources.\n\n\n!! Current bibliographies in this Zettelkasten\n\n\u003C\u003Clist-links \!issystemtagBibliography\>>\n\n\n!! How bibliographies work\n\nEach bibliography has its own tiddler:\n\n* The tiddler can be named anything, but conventionally ends with the word `Bibliography`.\n* It should be tagged `bibliography`.\n* It should have a `bibliography` field containing a //bibliography key//, which will be used to connect it to sources. The bibliography key is usually a short string of letters and numbers, but may contain other characters if needed for some reason.\n* The body of the tiddler can contain information about the bibliography, or even interactive features, as desired. Where the sources contained in the bibliography should be displayed, transclude the bibliography-list template: `{{||$:/sib/Templates/Topical/BibliographyList}}`.\n\nA source (or a Publication) is placed in a bibliography as follows:\n\n* The bibliography key (see above) is added to the `bibliography` field of the source. `bibliography` is a list field, so a source can be contained in multiple bibliographies if appropriate; all the bibliography keys are added to this field, separated by spaces. If the bibliography key itself contains spaces, it should be placed in double square brackets, like `my bibliography key` (as with any other list field).\n* A short summary of the source should be added to the `description` field of the source; this will be used on the list.\n* The `caption`, `year`, `medium`, and, if available, `url` fields will also be used on the bibliography list and should be filled out with appropriate metadata; see Source for details.},{title:BicycleHelmets,created:20211002125546954,creator:soren,description:Is it worth wearing a helmet when you ride a bike? Considering all factors, it seems that nobody really knows.,es:likely,modified:20231023162343728,modifier:soren,tags:Risk Science Driving Idea Public,type:text/vnd.tiddlywiki,text:As a longtime casual cyclist, having spent years hearing various arguments for why people should or should not wear bicycle helmets, I decided to spend an afternoon in October 2021 digging through and evaluating all of them. I came into this as someone who had always worn a helmet except in extenuating circumstances (e.g., I left mine at home by mistake), and left as someone who is a bit more flexible.\n\n\n!! Executive summary\n\n* Its almost certainly better to have a helmet on than not have a helmet on if you get in an accident, even just on priors, although the scientific evidence is weaker than youd expect. //Ceteris paribus//, wear a helmet.\n* That said, helmets dont appear to be as effective as one would hope. They do a great job at preventing minor injuries, but are unlikely to save your life in a serious accident. And the type of minor accidents they help most in are the kind that most adults are rarely worried about.\n* Also, a massive increase in helmet-wearing doesnt seem to have resulted in many fewer head injuries.\n* And head injuries as a result of bicycle accidents are much rarer than the constant refrain to wear a helmet would lead you to expect -- by many estimates, not much higher than for driving or walking.\n* Wearing a helmet makes riding look and feel more dangerous and complicated, creating a negative effect on public health and bicycle culture and possibly discouraging you from riding. And mandatory helmet laws are bad for public health.\n* Wearing a helmet can be seriously obnoxious in some circumstances -- for instance, if you want to use a bike-share bike for part of your trip, or you dont have anywhere to put your helmet on arrival where it wont be stolen (e.g., riding a bicycle to the lake and then walking around the lake, or running errands with a bunch of stops). In others, its easy.\n\nAll this considered, nowadays I typically wear a helmet when its easy to do so and/or my trip is particularly dangerous (e.g., when riding in heavy traffic or on an unpaved trail Im unfamiliar with), and dont wear a helmet when its not. While this may be unconventional, I think this approach lets me get most of the benefit of wearing a helmet at a tiny fraction of the cost.\n\nI should also point out, even though this tiddler is about bicycle helmets, that I would never even consider riding a //motorcycle// without a helmet, unless maybe it was an emergency and I didnt have one. Not only is motorcycling quite a lot more dangerous and likely to result in a head injury, you can wear a much more effective helmet in relative comfort, making the benefit much higher; part of the reason bike helmets arent worth as much as youd think is that providing enough protection to actually save your head in a really serious accident requires a heavy, enclosed helmet that would be so uncomfortable when engaging in a highly physical activity that nobody would wear it.\n\n\n!! Introduction\n\nHeres my understanding of what I learned (sorry, no sources, I didnt think far enough ahead to record them formally -- but dont treat this as a formal scientific review anyway!).\n\nThe most obvious thing I took from this, something I already believed but now believe even more strongly, is that mandatory helmet laws are a really bad idea, regardless of whether most people //should// wear a helmet. This is because they pretty plainly discourage people from cycling -- when they were implemented in Australia, cycling rates fell between 25% and 50%, and 30 years later they remain depressed significantly from where infrastructure and social factors would suggest they should be. And a wide variety of studies have found that the health benefits of cycling exceed the accident risk by a rate of twenty to one or more; thats even without mentioning the environmental, traffic, or livability benefits. (Cycling just one mile -- thats about 5 minutes -- can add an hour or more to your average expected lifetime, depending on whose figures you use.) So an intervention that is, at best, of fairly limited health benefit and also is sufficient to discourage that many people from cycling is statistical murder|StatisticalMurder. No mandatory helmet laws, period.\n\nThe trickier question, and what Im examining here, is whether a person who already cycles or wants to start, and who thinks they would bike whether they wear a helmet or not, should wear a helmet. This had always seemed obvious to me -- duh, wear a helmet unless its going to stop you from getting on your bike -- but now Im not sure its that simple.\n\nGoing off what I could easily find on the internet, the anti-helmet camps science and reasoning impressed me more. A large portion of the pro-helmet camp appears to be primarily people repeating the same old facts and statistics over and over -- some of which have been shown to be highly misleading -- or making it sound like the benefits of helmets are a foregone conclusion and dont even need to be discussed. Although there are good studies, much of the frequently-quoted “evidence” is anecdotal, which seems like an indicator for “possibly false idea thats being mindlessly repeated.” This divide made me much more suspicious of helmets than Ive been in the past even before I had read a whole lot.\n\n\n!! What do helmets protect against?\n\nHelmets are pretty effective in one situation: they prevent minor injuries to your head when you lose control of or fall off your bike and your head goes linearly into an obstacle. The Styrofoam in the helmet will crush and absorb enough of the impact to make a concussion less likely, and because your head doesnt strike the ground, your scalp wont get scraped up and bruised or need stitches. If this seems like a likely accident and one youd like to avoid, it makes good sense to wear a helmet.\n\nUnfortunately, its downhill from there. Helmets dont do much to protect against rotational forces, if you dont hit your head straight (your brain rotating inside your skull is almost always what causes disability and death), and they really dont provide all that much protection in general. If you hit your head on a fixed obstacle like a tree or car while moving quickly, a bicycle helmet doesnt have nearly enough capacity to absorb that impact and a large majority of it will still be transmitted directly into your head. (Motorcycle crash helmets are substantially more effective, but they are too hot and heavy to be practical to wear when cycling.)\n\nThe data on how likely helmets are to reduce the severity of head injury in a serious crash arent particularly consistent. Some people throw out percentages (80% less likely to die!) but the percentages range from 25% to 90%, and exactly what this statistic means isnt clear (is it making the difference between having an IQ of 50 and being dead? do people die of something other than the head injury? are people who died systematically different in some way other than wearing the helmet?). Theres also a lot of room for a BaseRateFallacy given that head injuries on bicycles arent actually that common, as discussed later. So its difficult to draw strong conclusions from this; Ill go with “helmets probably reduce the severity of impact to the head in a serious crash by a nonzero amount, but Im not sure whether this implies that wearing a helmet is worthwhile.”\n\nBike helmet tests and safety standards are remarkably poor compared to, say, those for cars. There is really only one test for linear impact, which probably shouldnt inspire confidence. (Vehicle manufacturers are notorious for improving their vehicles to meet the safety standards and little more -- for instance, after the driver-side small-overlap test was added, many manufacturers cheerfully reinforced only the drivers side of the car, such that when the NHTSA later added a passenger-side small-overlap test, most cars failed miserably.)\n\nThe takeaway for me is, if you have a high-speed collision with a vehicle or fixed obstacle, //you need to not hit your head//, or at least allow some other part of your body to absorb the impact first. Anything else is a distraction: if you do hit your head, youre probably screwed whether youre wearing a helmet or not. Its certainly possible to learn how to avoid accidents and hit things more safely, but most bicycle safety campaigns instead focus on wearing helmets, which seemingly dont help that much in comparison.\n\n\n!! What else happens when you wear a helmet?\n\nAt this point, were thinking that helmets are less of an improvement in safety than we like to believe, but they couldnt make things //worse//. Unfortunately, there are side effects that might in fact make things worse, though its unclear whether they add up to enough effect to be conclusively worse.\n\n* People stop yelling at you for not wearing a helmet (this ones a positive): I havent experienced this myself because I normally wear a helmet, but I understand that many people feel the need to tell cyclists theyre stupid for not wearing helmets, and if someone without a helmet gets in an accident, this is used as an excuse to blame them for it (whether or not the helmet would have done anything to prevent it). Probably not that important, but it could certainly be annoying and might get you an unfair judgment in court.\n\n* Risk compensation: People who are wearing helmets may feel safer and take more risks when riding. This would merely erode our gains if helmets were actually broadly useful, but if they are only a minor improvement in certain accidents, this could exceed the gains altogether. And in any event, helmets only protect the riders head; clearly its more useful to avoid getting into an accident altogether than to get into an accident but not injure ones head.\n** Its not clear to what extent this occurs because its hard to study, but risk compensation itself is a well-known phenomenon and it seems reasonable to think it could apply here. I personally feel that I ride more carefully when not wearing a helmet, but that might not be a useful data point because I very rarely ride without a helmet. One study I saw suggested that people who normally wear helmets ride slower when theyre not wearing helmets, but the inverse wasnt true (but perhaps it takes longer than the period of the study to develop an effect?).\n\n* Driver risk compensation: Several studies conducted in the UK have found that drivers pass cyclists more closely on average when theyre wearing helmets, including a higher frequency of dangerously close passes. This is certainly a quality-of-life decrease when cycling, and it can cause accidents too. (Some people have suggested these studies were flawed, and other people have suggested the rebuttals were flawed. Ill treat this as intuitively plausible and with a nonzero evidence base, but not by any means certain.)\n\n* Possible increase in certain types of injuries: Some helmets, in some circumstances, could convert linear forces on your head, which mostly result in superficial damage and recoverable concussions, to rotational forces, which often result in long-term brain injury and death. The data on when and whether this happens looks to be unclear, and even if this sometimes happens it doesnt by itself mean you shouldnt wear a helmet (other injuries that helmets protected against could add up to more risk exposure), but its a scary possibility. Similarly, helmets are known to somewhat increase the risk of neck injury (from having your neck twisted or your helmet getting stuck under another vehicle).\n\n* Your head gets bigger: This sounds dumb, but it means youre more likely to hit your head on something in the first place.\n\n* Utility cycling becomes significantly more annoying: Wearing a helmet isnt a big deal on a recreational ride out in the country on the weekend, where you put your helmet on once, go for a ride, and then take your helmet off again. But when youre running errands or wandering around town on a bike, having to constantly take your helmet on and off, carry it into buildings with you so it doesnt get rained on and nobody steals it, and make sure you dont leave it behind anywhere is a significant bother. Having to deal with locking your bike is already annoying; adding dealing with a helmet to it is even worse. And if you use a floating bike-share program and you want to wear a helmet when you ride, you have to carry a helmet around town with you all the time in case you might want to hop on a bike later.\n** I dont //think// Im usually discouraged from choosing to bike somewhere by having to deal with a helmet, but as I write all this out, I wonder if I sometimes am without realizing it. I could imagine that if I didnt have to lock my bike or wear a helmet and could just walk outside, get on the bike, put the kickstand down at my destination, and walk into the store, I would run more errands on my bike. That saves a good minute and a half at each end and removes a bunch of extra steps. (Not that I would ever leave my bike unlocked in a public place for more than a couple of minutes at most. Bike theft is a sad reality -- there may be nothing easier to steal than an unlocked bicycle -- and theres nothing I can do about the need to lock up. But I do have control over whether I wear a helmet.)\n** Since every mile you cycle lengthens your life on average, anything that discourages you from getting on your bike is net negative, unless you have a particular aversion to bicycle accidents compared to other causes of injury or death. (I dont.)\n\n\n!! Evidence helmets are more helpful than this picture\n\nMany people say that wearing a helmet saved their life, which sounds pretty great. But this is usually based on looking at what happened to their helmet after they hit their head. They might not have hit their head at all if they werent wearing a helmet, and even if they would have, it doesnt take a whole lot of force to crack a helmet, and your skull is actually pretty good at protecting your brain from light impacts -- thats what its for! If the foam didnt compress, as it often doesnt depending on how exactly the helmet struck the obstacle, the impact wouldnt have been significantly greater without a helmet.\n\nThe helmet might have protected their head from getting scraped up, but at least now that we have antibiotics, some scrapes to the head usually means a couple of unpleasant weeks, not a life-changing event -- probably painful enough to make it worth wearing a helmet if its //likely// this will happen to you, but hardly a slam-dunk.\n\nOverall, we should be pretty skeptical about these claims since its impossible to compare your own accident with and without a helmet, especially knowing that helmets often crack on impact without having provided any significant protection. A much better way to determine if helmets save lives is by looking at the whole-population statistics.\n\nDoctors who work with people with head trauma are usually in favor of people wearing helmets. The anti-helmet camp tells us we should be careful of this because their picture is skewed: they only see the tiny segment of the population who were unlucky enough to injure themselves sufficiently to need an ER visit. Again, its probably more useful to look at population-wide risk.\n\nA problem with the skew argument is that I dont understand why ER docs would see more patients who werent wearing a helmet and got a head injury than people who were and got one anyway, if helmets dont help that much. It seems plausible that they //dont//, and they are selectively noticing people who theyre aware werent wearing a helmet, but theres no way I can know that.\n\nWhat we can definitely take away from this is that //if// its a given that you crash and hit your head, its better to be wearing a helmet than not to be wearing one (ignoring possible linear-to-rotational-injury conversion). This was hopefully obvious already. Since its unclear that helmet-wearing and your odds of crashing and hitting your head are independent, though, this may not be as good an endorsement for helmets as you might think.\n\nSeveral studies have found dramatic reductions in head injuries from wearing a helmet. A number of these have been discredited but are still quoted; one of the most popular involved a tiny cross-section of people in Seattle, where there were systematic differences between helmet-wearers and non-helmet-wearers that make causality impossible to determine. (One article I read pointed out that, from the same data, you could claim that wearing a helmet makes you just as likely to injure your head, but seven times as likely to fall off your bike.) Many of the studies are funded by the helmet industry.\n\nBesides the helmet-industry influence, the main reason Im skeptical of these studies -- and indeed all the evidence in this section -- is that from 1980 to the present, helmet use in the US has gone from almost zero to about half of cyclists, yet the rate of head injury appears to be almost unchanged. If helmets are really making people dramatically safer on a population level, this should be impossible. One possibility would be that were reporting more head injuries now, but my impression is that the head-injuries-are-really-serious realization didnt take off until the late 2000s and early 2010s, so this probably cant explain the whole thing. Another would be that the roads have gotten more dangerous for cyclists, but that seems unlikely. Or maybe people who are already safe and careful riders and rarely hit their heads make up almost all of the helmet-wearers?\n\nThis said, the results do look good, it seems intuitively obvious that having something padding your head would reduce the impact on your brain when you hit it on something, and I dont have the time to go into the actual papers and see if I can criticize them, especially with little background in the topic, so Im not willing to discount this argument. But with everything put together, Im sufficiently suspicious of the studies that Im going to treat them as a weaker result.\n\n\n!! Is cycling really that dangerous?\n\nThe data appears frustratingly contradictory on the relative risk of cycling compared to driving and walking. I found many studies that suggested the rate of injury was higher for pedestrians than for unhelmeted cyclists. Others seem to find cycling is more dangerous. Part of the difference is the metric you use -- injuries per mile? injuries per unit of time?. Im not sure which is more sensible here: injuries per mile is potentially misleading because bicycles are usually used for longer distances than walking, but if we go by unit of time and ignore distance, then we seem to be giving up the whole idea of transportation as a means of getting from one fixed point to another. In any case, it appeared that the conclusions of different studies overlapped with either metric.\n\nRegardless of which is strictly more dangerous, the rates of head injury appear at the very least not to be too much higher for cycling than walking or driving. If we dont think people should wear helmets for those activities, its worth considering whether it really makes sense to wear helmets on bicycles. But this isnt an objectively airtight argument by any means; maybe its easier to wear a helmet on a bicycle than while walking, and that makes it worthwhile, for instance. This probably comes down to each persons risk tolerance and attitude toward the idea of wearing a helmet.\n\nThere is also the fact, as mentioned earlier, that cycling is really good for you, way more than good enough to cancel out the risk of injury. I dont think this is a persuasive argument for not wearing a helmet if you already cycle and wear a helmet, though.\n\nIn most countries with a strong bicycle culture, practically nobody wears a helmet and injury rates are extremely low. This is strong evidence that, in theory, helmets arent necessary for safety, but it would be silly to extrapolate this to the US, which doesnt have such a culture and where more people are injured on bikes, so this probably doesnt impact any individual persons decision-making unless theyre considering which country to move to.\n\n\n!! Conclusions\n\nOverall, this is a complete muddle. Im kind of shocked how unclear things are.\n\nIm going to seriously consider ditching the helmet for casual city riding in places Im familiar with. While I still think its probably safer to wear a helmet than not to wear one overall, Im no longer convinced that the benefit exceeds the cost|CostBenefitRatio. As mentioned earlier, its annoying and logistically difficult to wear a helmet for this kind of riding, and the evidence that its helpful in terms of preventing serious injuries I would be highly concerned about preventing appears inconclusive; it probably would help prevent minor injuries if I lost control of my bike and fell off unexpectedly, but that hasnt happened to me since I was a kid (thats a good decade and a half of regular riding). It also doesnt appear that not wearing one is particularly more dangerous than other activities Im comfortable participating in on a daily basis. Further, I suspect I would end up paying more attention to safe riding skills if I wasnt wearing a helmet, which would likely be more useful. And I would like to encourage more people to ride bikes, and making it look less dangerous is a useful way to do that.\n\nIm not sure Ill actually do this because it still feels less safe, though. I dont always trust my own reasoning!\n\nEven if I do forgo the helmet most of the time, I will certainly continue to //own// a helmet, and I would be inclined to wear it when riding in unfamiliar places or environments that are more dangerous. Certainly if youre mountain biking or racing, or youve just learned to ride a bike, the minor single-vehicle into-the-ground crash that helmets are effective in is much more likely and a helmet is a smart idea.\n\nBike helmets could conceivably improve substantially in the future. They have a tough job to do to protect against serious crashes, but materials science has done some amazing and unpredictable things, and there have been a handful of interesting innovations in the last few years. If they do, that might be a reason to consider wearing them again even if you decide not to now. On the other hand, assuming that cycling continues to expand in the US -- as it ought to, given the realities of ClimateChange and increasing urban population -- cyclist safety is likely to continue to improve due to the safety-in-numbers effect, and if our conclusion is that cycling is already safe enough that we dont need to worry about head injuries caused by cycling, maybe it wont. Or maybe driving, walking, and similar activities will be so much safer as well that our tolerance for risk will decrease and it will again.\n\n//Update (Oct. 2022)//: My current rule is “wear a helmet unless its really annoying to, then dont worry about it.” This translates to wearing a helmet maybe 80--90% of the time, getting most of the benefit with a small fraction of the cost. The only thing I dont like about this approach is that if I happen to get in an accident while not wearing a helmet, I might be pretty peeved, but overall Im pretty happy with it.},{title:BidirectionalLinks,created:20200423231310718,es:likely,modified:20210510224636283,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Proper links used in networks|HierarchiesVersusNetworks used to link ideas into a ConceptWeb with EmergentStructure should be //bidirectional// -- that is, when I link to EmergentStructure in this tiddler, EmergentStructure also links back here. It might not be quite so tightly integrated, since I didnt necessarily go edit the text of EmergentStructure to mention this tiddler, but it will be listed there.\n\nThe WorldWideWeb uses unidirectional links. This makes links into a vaguely useful kind of reference: its a faster way to go find something. Thats all well and good, but true linking does so much more! Half-links cant create structure; they create isolated islands of blog posts and directories and Clickbait, each of which pulls in the things that its author happened to be thinking about at the time. Those other things remain happily oblivious. Their webmasters might go look at their analytics, I suppose, but they arent going to go change their pages because of it! The idea seems preposterous for sure because of the scale of the Web, but think what kinds of insights we could develop on the right kinds of pages that way.\n\nBidirectional links are not necessary|NecessityOfBacklinks for a ZettelKasten or similar system, but they are extremely valuable and well worth doing some work to get into a system.\n\nWhen the destination shows that a link was applied at a source, the connection back to the source is often called a //backlink//.},{title:BigBallOfMud,caption:Big Ball of Mud,created:20200226202245356,creator:soren,medium:article,modified:20200808142450279,modifier:soren,tags:AgilePhilosophy Code Design Source Software Public,type:text/vnd.tiddlywiki,url:http://www.laputan.org/mud/,text:Famous article about the software architecture that often prevails in practice, even though it is detested in theory.\n\nBBOMs exhibit patterns like these:\n\n* Lack of DRY|DryPhilosophy; information is haphazardly scattered and duplicated.\n* Lack of architectural separation, for instance via DefinedInterfaces.\n* Code that wasnt intended to stay there but does.\n\n\nReFactoring, of course, is the way to reverse the muddiness.\n\nThe AgilePhilosophy prescribes avoiding big balls of mud, since they reduce agility.\n\n{{!!url}}},{title:BigLebowski,caption:The Big Lebowski,created:20200322161615160,creator:soren,medium:film,modified:20210723003822146,modifier:soren,rating:distinguished,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,text:Ridiculous CultClassic movie involving a case of MistakenIdentity between “The Dude” and the rich guy Lebowski.},{title:BigPictureProductivity,created:20200226024942419,creator:soren,es:likely,modified:20200410220338649,modifier:soren,tags:Productivity Process Public Idea,type:text/vnd.tiddlywiki,text:A critical component of the LeanMethodology (thence DevOps) is that team productivity is the metric to optimize for -- not individual productivity (which too often leads to LocalOptimization). Management often has a very tough time getting on board with this part of Kanban: workers may end up doing low-value work, or God forbid, sitting idle and reading a book, for a while as the rest of the system catches up with them. So unproductive! But if you dont let the system catch up, then that worker may well create an OverfullFunnel for 10 other people. The entire system needs to be understood to identify the impact.\n\nThis is also why you focus on the WorstBottleneck. The worker who is idle is not the bottleneck, the actual bottleneck is the bottleneck; its only when you identify the actual bottleneck and fix it that that idle worker will be less idly again. This takes advantage of bringing the pain forward|BringThePainForward for PROFIT (literally, for once).\n\nOverall data is needed to do this correctly; unfortunately, without active effort, productivity often falls into the MetricBlackHole. Lack of data may also result in an intuitive application of, say, worker overtime, leading to a bad OvertimePhilosophy and decreased productivity.},{title:BigRiverGrill,created:20250621165007553,creator:soren,modified:20250621165008604,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Bikeshedding,created:20221129230417113,creator:soren,description:In politics, teams, and bureaucracies, the least important things are often the hardest to agree on.,es:likely,modified:20221201043633766,modifier:soren,tags:Idea Sociology Business Reasoning Public,type:text/vnd.tiddlywiki,text:The act of arguing about trivial things in a bureaucratic framework at length, while giving no mind to much more complicated and important things. The quintessential example and namesake is a committee approving the plans for a nuclear reactor with little discussion, but arguing for the rest of the meeting about the bike shed to be placed out front for its employees.\n\nA major cause of this phenomenon is that everyone understands|TyrannyOfAverages a bike shed and feels like they can contribute; the same is not true for a nuclear reactor, so one ordinarily just assumes that the engineers knew what would make a good nuclear reactor and signs off on it, as long as nothing looks obviously bad.\n\nAnother likely factor is that people have a threshold of “thought about this enough” which doesnt scale proportionally to the magnitude of the decision (and to an important extent, this is rational, because there are diminishing returns to doing excessive amounts of research; its only in pathological cases like the bike shed that it becomes stupid). You might think its reasonable to spend 10 minutes deciding on the best iPhone app for some simple task, and 10 hours deciding what car to buy. But a car costs 3–4 orders of magnitude more than an iPhone app, and you can buy another iPhone app in 60 seconds at minimal cost if you dont like your first choice, while selling your car and buying another one will take hours and cost several thousand dollars.\u003C\u003Cfnote \Realistically, the startup cost of switching cars is so great that you will will never do it in the same way that you would for an iPhone app. You might give up on your car a bit sooner than you otherwise would if you dont like it, but nobody sinks their costs and sells their car after a year because theyre kind of unhappy with their decision -- even if they could easily afford to do so. Its just too much bother and feels too petty.\>> Proportionally, if spending 10 hours researching your car is about right, you should only get somewhere between 4 and 40 seconds to decide on the app (considering only price).\n\nThe “thought about this enough” threshold is likely subject to RegressionBias: because you need to spend more time thinking about larger decisions, if you have a relatively fixed probability of erroneously concluding that youve got enough information and are ready to proceed, there is a larger window of time in which you can draw this conclusion for larger decisions, and youre more likely to stop too early.\n\nAlso known as the law of triviality (see Wikipedia|https://en.wikipedia.org/wiki/Law_of_triviality).},{title:Bingen,created:20250618153255553,creator:soren,modified:20250618153346519,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Bittersweet2022,author:Susan Cain,caption:Bittersweet: How Sorrow and Longing Make Us Whole,completed:202404301200,created:20240811151906691,creator:soren,medium:book,modified:20240811154328751,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2022,text:The second MsSusanCain book (after Quiet|QuietPower2012) thats really her defending her own personality. I dont mean that in a bad way, its a perspective that works very well and is quite moving even, and her personality //needs// defending in todays world. I think Im less introverted than Cain is, but I loved //Quiet// and found it quite affirming nevertheless (I thought it was maybe even a little over-the-top in its defense, but thats what is needed|RelativeAdvice to counter the cultural narrative, so thats not a criticism), and was really excited to read this.\n\nFortunately, it delivered. Actually it was kind of annoying to read because I kept crying; its pretty heavy stuff! Id say the main thesis is that many people try really hard to avoid sadness, but actually its the thing that makes us human. It is usually the source of connection. After reading this I started going back through my life, and sure enough, either actively being sad or struggling together with someone or discussing past loss and longing is very reliably a noticeable inflection point in all of my close relationships. Its funny how hidden something like this can be; you experience it all the time, but somehow miss bringing the pattern to conscious awareness.\n\nCain ends with a coda in which she asks you, “What are you longing for?” She tells a personal story about how she got misdirected into trying to be a lawyer, and when she didnt get promoted as she was expecting, she quit, ended a seven-year-long romantic relationship that “had always felt wrong,” and goes searching for some new meaning, and at one point her friend asks her this. And just like that, she realizes the misdirection and where her life should be going. So this seems to have an interesting metaphorical connection to the previous paragraph, and Im still working on that one myself.\n\nIm also planning to skim back through the whole thing and make some flashcards, because it feels like a critical angle on the world to be reminded of|SpacedRepetitionAsThoughtManagement.},{title:BlackDeath,created:20200422202937721,creator:soren,es:confident,modified:20230912032645893,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Plague that returned many times during the medieval period. In its worst period, thought to have killed half of Europe.},{title:BlackElephant,created:20200604212014389,creator:soren,es:confident,modified:20210916230101145,modifier:soren,tags:Psychology Humor Public Idea,type:text/vnd.tiddlywiki,text:A black elephant is a disaster of monumental proportions that everyone plainly sees coming, but refuses to talk about or deal with. Later, everyone claims they couldnt have seen it coming (see BlackSwan). Perhaps the best modern example is ClimateChange.\n\nLearned about this beautiful term in a piece by MrThomasFriedman in TheNewYorkTimes about the increasing fragility of the world (cf. AntiFragility, OverlargeDependencyWeb) and how it relates to the pandemic|PandemicMood.},{title:BlackElkPeak,created:20250621165504225,creator:soren,modified:20250621165505059,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BlackSwan,caption:The Black Swan,created:20200406030349075,creator:soren,format:ebook,medium:book,modified:20210606222615648,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Book by MrNassimNicholasTaleb about chance events that, from someones perspective, come out of nowhere (Black Swans) and the impossibility of calculating the probability of such exceedingly unlikely events. Nevertheless, these events are also highly consequential -- to the point that often //only// the black swan events are important. For instance, just a handful of days have accounted for more than half of the gains in the stock market in the last half-century. And Taleb invites you to think about the most important decisions in your life and the most important connections youve made: how many of them were planned out and went exactly the way you thought they would? No, most of them come seemingly out of nowhere|AccidentsMakeTheWorldGoRound. I met N.S.|PrivatePerson because she sat behind me in English class in sixth grade and hacked my website (yes, really). I started working at TheFederatedInsurance because I did a mock technical interview with a recruiter on a whim and the job practically fell in my lap. I probably ended up in TheStOlafChoir because I attended TheLutheranSummerMusic and sang in C.A.|PrivatePersons choir one year.\n\nThere are good Black Swans (like these) and there are bad ones (like losing all your money because you invested it in something that turned out to be riskier than you thought).\n\nThe takeaway: the only sensible way to behave in light of this uncertainty is to (a) expose ourselves to as much upside risk as possible, looking for opportunities to be surprised|SurpriseMe and taking gambles where there is little risk and high potential reward, and (b) make decisions about downside risk based on the effect if it does happen, rather than the probability. What //will// happen if this ToolGoesTooFar, not how likely is it. How should I prepare for a SolarFlare or a car accident, not can I expect it to happen. Cf. ContingencyPlanning.},{title:BlamelessCulture,created:20200323024327550,creator:soren,es:confident,modified:20250209005708313,modifier:soren,tags:InterpersonalRelations Business Politics Process Design Public Idea,type:text/vnd.tiddlywiki,text:A blameless culture, in a team context, is one where individual people are not blamed for incidents that they were implicated in. This is because they typically are not truly at fault, but rather the process they followed and the system they were in was at fault and needs to be improved (see DesignApproach). Avoiding blame allows the focus to be on the system, which is what will prevent a recurrence -- not shaming the person who happened to draw the short straw that day.\n\nGreat relationships have this property (at least //most// of the time!). For instance, instead of focusing on how you dont like the other person, you explain how what happened made you feel and see if the two of you together can find a way to avoid that happening in the future (whether that involves the other person doing something different, you thinking differently about it, more information being shared, or anything else).\n\nAn avoidance of blame provides PsychologicalSafety, which has many benefits.\n\nBlameless cultures often conduct BlamelessPostmortems.},{title:BlamelessPostmortem,created:20200312211315851,creator:soren,es:confident,modified:20240503033344262,modifier:soren,tags:Process Politics Public Idea,type:text/vnd.tiddlywiki,text:When reviewing what went wrong in a situation, rather than blaming someone else in a game of OrganizationalPassTheBuck, or worse firing someone, one should analyze the situation in detail without blaming everyone and figure out, from an objective standpoint, what can be done to prevent it from happening again. Enormously useful, but/and both requires and strengthens the organizations PsychologicalSafety.\n\nDescribed well in UnicornProjectPartTwo, around page 200 (see synopsis). Particularly notable is that MrBrentGeller is not even supposed to blame himself, because thats no more productive than blaming someone else (just less likely to offend).\n\nObviously, BlamelessPostmortems are associated with a BlamelessCulture; that particular element of culture is necessary but not sufficient for effective BPs.\n\nThe results of a postmortem should be shared as widely as possible (DevOpsInTheRealWorld). Many enlightened companies share them publicly on their company blog as a way of apologizing, explaining, and showing that theyre learning from it and improving. Failing that, somewhere on the intranet or department website is a start.\n\n!! My writing\n\nI spent some time on this myself in 2019 after getting my car caught in a blizzard in AustinMinnesota, leading to a pair of TheControlAltBackspace posts. Specifically right here|https://controlaltbackspace.org/prevention/a-blizzard-postmortem-analysis/:\n\n\u003C\u003C\u003C\nRemember that a proper postmortem analysis is //blameless//. Blame might feel good, at least when you can pin it on someone else, but it never fixes anything, and it does cause emotions to get in the way of an accurate analysis. If you screwed up, no problem – you’re not getting blamed, just tell it as it happened!\n\nState all of the facts as facts, without invoking any kind of value judgment. If you or someone else made a bad decision, state what decision was made, what went wrong as a result of that decision, and why you think that decision was made. If something out of your control happened or contributed, simply state that it happened – even if it wouldn’t have been a problem were it not for a factor in your control, the fact is that it contributed and was part of the problem.\n\u003C\u003C\u003C\n\n!! References\n\nWhy Youve Never Been in a Plane Crash|https://asteriskmag.com/issues/05/why-you-ve-never-been-in-a-plane-crash?refthebrowser.com},{title:BlanketTheory,created:20200509175831516,creator:soren,es:mythological,modified:20221007182955204,modifier:soren,tags:Humor SorenConcept PersonalMythology Public Idea,type:text/vnd.tiddlywiki,text:I like using large stacks of blankets on my bed during the Minnesota winter, and they need to be loose so I can totally engulf myself in them. The problem with this is that they always end up at different heights, sliding around, etc. The art of arranging blankets for optimal comfort (sometimes requiring a minute or two) is the discipline of blanket theory.\n\nHeres the quick way to align blankets, for example:\n\n# Get into bed. You can try to do this while standing over the bed, but its usually harder.\n# Push all the blankets to the bottom of the bed in a heap.\n# Pull the flat sheet (or whatever the closest layer to you is) up and get it in roughly the right place, but just slightly further away from your head than you want, to leave some slack.\n# Repeat with remaining layers, leaving each layer an inch or two further away from your head. (If you get a layer too close to your head, it is difficult to fix given the friction between the layers, while its usually easy to pull it closer. Youll probably end up pulling it closer accidentally while doing the next layer.)\n# Even up the layers, leaving a very small gradient to prevent the top layers from folding over the bottom layers and crunching them against your neck.\n\nThe order of blankets also matters. You want material that breathes somewhat for the first couple of layers -- this way a bubble of warm air can form underneath the heavier blankets or comforter, but itll have enough space to move around without getting stagnant and sweaty.\n\nI recently realized that adding lighter blankets on top, when it doesnt get in the way of other ordering concerns, is often beneficial, as it makes it easier to fine-tune the degree of warmth as needed if the temperature of the room changes.},{title:Blazor,created:20200529204507704,modified:20200529214457828,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Blazor is a CSharp framework that builds to WebAssembly and creates a webapp with full-stack DotNet.\n\nBenefits:\n\n* Consistent ecosystem and stability\n* Open-source\n* Officially released in BlazorWebAssembly20200520 as part of .NET Core 3.1.\n* Can also serve an app as a static site, if no server-side stuff needed.\n* Automatic compression and dead-code removal to improve start time.\n\n* ProgressiveWebApplication support.\n** Can set this up easily when creating the project in VisualStudio.\n\n* C# code is exported into the browser devtools (Chromium supported, Firefox planned).\n** Can debug either from the browser or VisualStudio.\n** Prod deploys dont contain the debug symbols.\n** However, someone could still disassemble your code, just like they could in JavaScript or a Windows client app. Super-secret stuff like credentials should stay on the server.\n\n* Client, server, and shared components in the project -- so you can use the same classes end-to-end!\n** Can use JavaScript components in the system too via JavaScript Interop!\n\n* Easy localization\n\n* Various partners have developed UI components\n\nResources and further reading:\n\n* https://blazor.net\n* https://aka.ms/blazor-in-action\n* https://aka.ms/awesome-blazor\n\nSource: BlazorWebAssembly20200520\n\n\u003C\u003Cremembercz \20200529214428008\\n\t\{Blazor} is a Microsoft web framework that runs in the {C#} language and compiles to {WebAssembly}.\>>},{title:BlazorWebAssembly20200520,at:202005201345,caption:Modern Web UI with Blazor ~WebAssembly,created:20200518213930139,medium:video,modified:20210522015801792,presenter:MrDanielRoth MrSteveSanderson,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/633bbb04-8020-4ea9-8543-b78d47cdf9b9,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis was an introduction to the new Blazor web development framework. It was so much that that I extracted everything into the Blazor tiddler, so take a look there!\n\nProduction-ready as of the day of this presentation.},{title:BleakHouse1953,author:Dickens,bibliography:LifetimeReading,caption:Bleak House,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034165,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1953,text:See also BBC miniseries},{title:BlessedAssurance,caption:Blessed Assurance,created:20200518034911624,medium:music,modified:20200808142500142,tags:Song Public Source,type:text/vnd.tiddlywiki},{title:BlockedAndReported,created:20221002162302040,creator:soren,modified:20221002162331448,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,text:Podcast about internet nonsense, cancel culture, and defense of classical and moderate liberalism by MrJesseSingal and MsKatieHerzog.},{title:Blogroll,created:20250905202349469,creator:soren,es:confident,modified:20250926174108548,modifier:soren,tags:Idea Index Public,type:text/vnd.tiddlywiki,text:A few of my favorite blogs (and other flavors of regularly-updated-writing-sites) around the web.\n\nUse the “go” link to go see the site itself. The internal links to blog and author pages in the //Name// and //Author// columns mostly contain no information, but may sometimes have links to related ideas Ive written about here.\n\n\u003Ctable>\n \u003Cthead>\n\t \u003Ctr>\n\t\t \u003Ctd>\u003C/td>\n\t\t \u003Ctd style\text-align: center;\>Name\u003C/td>\n\t\t\t\u003Ctd style\text-align: center;\>Author\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/thead>\n\t\u003Ctbody>\n\t \u003C$list filter\tagPublicationblogrollBlogroll\>\n\t \u003Ctr>\n\t\t \u003Ctd>\u003Ca href{{!!url}} class\tc-tiddlylink-external\>go\u003C/a>\u003C/td>\n\t\t\t\u003Ctd>\u003C$link to\u003C\u003CcurrentTiddler>>>\u003C$text text{{{ allcurrentgetcaptionelse\u003CcurrentTiddler> }}}/>\u003C/$link>\u003C/td>\n\t\t\t\u003Ctd>\u003C$link to{{!!author}}>\u003C$text text{{{ allcurrentgetauthorgetcaptionelse{!!author} }}}/>\u003C/$link>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$list>\n\t\u003C/tbody>\n\u003C/table>},{title:BloodSpeed,created:20210330022610526,description:Different people process events and move through life at different speeds, and no speed seems generally best.,es:possible,modified:20210714022053963,tags:SorenConcept Sociology Psychology Public Idea,type:text/vnd.tiddlywiki,text:Some people seem to inherently think and act much faster than others. I like to call this blood speed: we might call people fast-blooded and slow-blooded. Perhaps this is a personality trait (can I find a way to assess|PersonalityAssessment it?).\n\nPart of it is age, for sure -- older people are surely much slower on average mentally and physically -- but there are other elements as well. For instance, K.B.|PrivatePerson is slow-blooded: she takes quite some time to work out whats going on around her, moves unhurriedly, settles conversations into a remarkable calm rhythm, but is unexpectedly thoughtful when given the time and is an amazing listener. I on the other hand am fast-blooded: I see the answers to problems before some people have even started understanding them|StrategicStrength, I type at 120 words per minute, I walk faster than everyone else, I talk fast, I jump in on the slower folks in conversations.\n\nBoth ways of being (to use the MrCatStevens/MsMaudeChardin phrase) have significant advantages and significant disadvantages. Being faster-blooded means you solve problems quickly, get more measurable things done, and I suspect react to adverse situations more quickly if not better. Being slower-blooded is more relaxing, less stressful, poses less risk of ordinary injury, and allows you to pick up on things the faster-blooded never saw at all because they were already two miles down the road at the time. I think the advantages of the latter often go unappreciated, though.\n\nI suspect many people of each type wish they could be the other! Im not sure if I really wish I could be slower, but I do see some significant advantages. I also suspect that being fast-blooded and not seeing the disadvantages would also be a predictor of single-minded business success, burnout, and a boring life.\n\nI suspect there are more fast-blooded men, but I might be making that up. It feels like a more masculine trait at any rate.\n\nPossibly related to levels of the IntellectionStrength?},{title:BloomsTwoSigmaProblem,created:20200707234001692,creator:soren,es:likely,modified:20220623010059668,modifier:soren,tags:Sociology Learning Psychology Public Idea School,type:text/vnd.tiddlywiki,text:Psychologist MrBenjaminBloom found that students who learn via one-to-one tutoring consistently perform two standard deviations better than those in typical classes. In some ways this hardly seems surprising (duh, being able to ask any question that seems relevant at any time and move at exactly your ideal pace will help you learn), but its still a shockingly large difference. Perhaps just a testament to how inefficient normal schooling really is.\n\nOf course, giving everyone their own tutor in every subject seems rather impractical on a societal scale, and avoiding scale|AvoidScale would be even more problematic, so much research has been done on how some of the benefits could be brought over. Personalized electronic tools would seem to hold promise, but in practice seem to mostly suck|ReplaceabilityOfHumanTeachers for (for me) insufficiently explained reasons.\n\nQuestions have also been raised on the magnitude of the difference; later research has seemed to suggest that the difference is probably not quite 2 sigmas (see DeclineEffect), but is nevertheless meaningful and substantial.\n\nThe implications for class divisions seem rather troubling; cf. RelationshipSuccessDivide. You actually wonder why more wealthy people dont hire tutors for their children if the difference is this great. Or maybe more do than I know.\n\nWikipedia: https://en.wikipedia.org/wiki/Blooms_2_sigma_problem},{title:BmoTower,created:20240530230538036,creator:soren,modified:20240530230539189,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BoccisPeaceAndPasta,created:20250623162315964,creator:soren,modified:20250623162316783,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BoeChapel,created:20200125232835027,creator:soren,modified:20211221022902149,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Chapel at StOlaf College. Cozy, beautiful, homely. Nice acoustics for choir. A little too small for some things, but just the right size for others (holds about 750 people fully packed up to the ears).\n\nSunday morning services are bombastic yet casual. You will rarely find a better group of congregational singers anywhere in the country than you will if you wander into church on an average day.\n\nMentioned in StOlafBackdropEssay for its flags.},{title:BoilingFrogDevelopment,created:20200130153627386,creator:soren,es:likely,modified:20200428182858412,modifier:soren,tags:Design Code Psychology Public Idea,type:text/vnd.tiddlywiki,text:A common objection to introducing SourceControl, UnitTesting, architectural constraints, and other good practices: the project is too small to benefit or to \need\ them.\n\nObjection to the Objection (OttO) 1: Its unlikely these things are going to be more of a hindrance than a help. They might be a hindrance, and they might not get you a lot of additional utility, but probably on balance it will be at worst a wash (or maybe just a //slight// slowdown).\n\nOttO 2: Using it for everything means you get better at using the tools and become a stronger thinker.\n\nOttO 3: You never have to decide whether a project is large enough to benefit or what level of tooling you need. In short it makes things easier.\n\nOttO 4: But the most important (titular) reason: Most projects end up scaling up over time. That means at some point the tooling actually //will// be helpful...but you probably wont notice. Even when you do, youre entrenched in what youre doing and nobody wants to take time off from their project to set up unit tests and write all the tests they really should have been writing all along, or do a dumpy \initial commit\ with 500 lines of code. That means it gets put off even further and you end up really missing out on utility and making mistakes because of it. (This is just an expanded version of ~OttO 3.)\n\nContinuousDelivery describes the problem for componentization thus:\n\n> Many projects have evolved into an unmaintainable morass of code because nobody made the decision to create discrete components when it was cheap to do so. The point at which small projects change into larger ones is fluid and will sneak up on you. Once a project passes a certain threshold, it is very expensive to change the code.},{title:BoilingFrogFaucet,created:20200516165457792,modified:20200516165758539,tags:Psychology Anecdote Public Idea,type:text/vnd.tiddlywiki,text:At CrystalApartment, my faucet very gradually started leaking when it was on (from underneath the tap). At first it was a few drips every once in a while. Then it was enough that I started hearing water go through the hole around the drain plunger into the cardboard box below, but still not enough to be worried about. Then it increased to the point that the box got soaked and some of the contents were damaged, before I realized I really needed to get it fixed!\n\nMoral of the story, minor problems become major problems when you become accustomed to the minor problem and dont realize its worsening.\n\nCf. BoilingFrogDevelopment.},{title:Bolvangar,created:20210628021941977,creator:soren,modified:20240509111716948,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials},{title:BookList,created:20201119175235041,es:likely,modified:20210703161630317,tags:Index Public,tbl-add-records:,tbl-anything:\u003C$link to{{{\u003CcurrentRecord>gettitle}}}>{{{\u003CcurrentRecord>getcaption}}}\u003C/$link>,tbl-button-actions:,tbl-button-icon:{{$:/core/images/menu-button}},tbl-button-tip:,tbl-caption:{{!!title}},tbl-checkbox-actions-selected:,tbl-checkbox-actions-unselected:,tbl-checkbox-field:,tbl-checkbox-tag:,tbl-checkbox-tip:,tbl-checkbox-value-selected:,tbl-checkbox-value-unselected:,tbl-class:tbl-style-tight,tbl-columns:title caption year rating isbn owned readstatus format,tbl-expand:,tbl-filter:regexp:rating{BookList!!tbl-sib-rating} rating{BookList!!tbl-sib-rating-classic} rating{BookList!!tbl-sib-rating-irrational} !has{BookList!!tbl-sib-rating-unrated} +tagSourcemediumbooksubfilter{!!tbl-sib-showonlyunread},tbl-limit:9999999,tbl-mode:normal,tbl-page-marker:,tbl-show-caption:true,tbl-show-colgroup:false,tbl-show-edit:true,tbl-show-footer:false,tbl-show-header:true,tbl-show-mode:true,tbl-show-pagination:auto,tbl-sib-rating:good|great,tbl-sib-rating-classic:_,tbl-sib-rating-irrational:_,tbl-sib-rating-unrated:title,tbl-sib-showonlyunread:is,tbl-sort-by:title,tbl-sort-negate:false,tbl-sort-type:nsort,tbl-style-colgroup:,tbl-style-container:,tbl-style-table:width:100%;,type:text/vnd.tiddlywiki,text:A version of the SourceList that includes only books and lists some additional book-specific metadata.\n\n|!Filter|\u003C|\n|Show only unread or partially read books|\u003C$checkbox field\tbl-sib-showonlyunread\ checked\!field:readstatusread\ unchecked\is\ default\\/>|\n|Show only books rated|MediaRating at or above|\u003C$radio field\tbl-sib-rating\ value\poor|skimmable|average|distinguished|good|great\> poor\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\skimmable|average|distinguished|good|great\> skimmable\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\average|distinguished|good|great\> average\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\distinguished|good|great\> distinguished\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\good|great\> good\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\great\> great\u003C/$radio> \u003C$radio field\tbl-sib-rating\ value\_\> (no ordered ranking)\u003C/$radio>|\n|And also include those rated|\u003C$checkbox field\tbl-sib-rating-classic\ checked\classic\ unchecked\_\> classic\u003C/$checkbox> \u003C$checkbox field\tbl-sib-rating-irrational\ checked\irrationally enjoyed\ unchecked\_\> irrationally enjoyed\u003C/$checkbox> \u003C$checkbox field\tbl-sib-rating-unrated\ checked\rating\ unchecked\title\>unrated\u003C/$checkbox>|\n\n\u003C\u003Ctable \BookList\>>},{title:BookOfDust,author:Philip Pullman,bibliography:SharedConsciousness,caption:The Book of Dust,created:20200122030335681,creator:soren,medium:book,modified:20221004031545746,modifier:soren,tags:Public Publication,telepathy-description:Continuation of HisDarkMaterials, with more detailed exploration of the metaphysics of daemons.,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2017–,text:Fantasy series by MrPhilipPullman comprising LaBelleSauvage2017, SecretCommonwealth2019, and an as-yet-nonexistent and untitled third book. The first is a prequel to HisDarkMaterials, and the other two are a sequel bound tightly together.},{title:Borealis,created:20240530221830594,creator:soren,es:confident,modified:20240530221924068,modifier:soren,tags:Idea Travel Definition Public,type:text/vnd.tiddlywiki,text:Daily train between Chicago and StPaul. Small chunk of the route of the EmpireBuilder, with a couple of extra stops to match the HiawathaService between Chicago and MilwaukeeWisconsin.},{title:Boston,created:20240306173201349,creator:soren,modified:20240306173202067,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BoswellLondonJournal,author:Boswell,bibliography:LifetimeReading,caption:Journal (London Journal),created:20210703170128000,genre:Misc,medium:book,modified:20210705214034173,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:BradyStreet,created:20240530223851908,creator:soren,modified:20240530223853213,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BrainerdMinnesota,created:20240127192834872,creator:soren,modified:20240127192835672,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BraveNewWorld,caption:Brave New World,created:20200123030315444,format:hardcover,isbn:9780062696120,medium:book,modified:20210607011034202,owned:yes,rating:good,readstatus:read,tags:DystopianVision Source Public,type:text/vnd.tiddlywiki,universe:BraveNewWorld,year:1932,text:Short novel by MrAldousHuxley. Often contrasted with NineteenEightyFour, and has been labeled the more accurate of the two in the modern era, namely because you dont really have to use force to land people in a dystopia, if youre smart about your social engineering you can make them never realize anything is wrong at all (see BigTech for some of the unfortunate accuracy).\n\nPerhaps the most important message is that there is NoMeaningWithoutFailure. There are also several TypesOfHappiness, and it is easy to focus on one at the expense of others, even just because the names are similar.\n\nI really like Huxleys writing style -- simple and transparent, but a little snarky and quite evocative.\n\n!! Summary\n\nRoughly the first third of the book gives you a picture of Huxleys modern world: families and romantic relationships are taboo (while casual sex is everywhere), babies are born in bottles, everything is about short-term pleasure and industrial efficiency, anything natural is eliminated, society is extremely caste-based, people are conditioned from birth to happily accept everything the way it is. Whatever cant be right from the start can be dealt with by taking //soma//, seemingly the perfect recreational drug.\n\nCharacters Bernard and Lenina then go on a week-long holiday to New Mexico, where they visit the Savage Reservation (exactly why and how these came to be left around is not fully explained and is actually a little hard to believe; also, not surprisingly, the 1930s view of race can be a bit uncomfortable!). Lenina finds the whole thing perfectly disgusting; Bernard is rather fascinated. They find a white mother and child, Linda and John, there, who were abandoned by Bernards current Director (who, in a //very convenient// touch, just happened to mention the day before Bernard left that he had once lost a woman he was dating there). They are brought back to the Modern World™ when Bernard and Lenina return in a couple of days.\n\nLinda, having once lived in the Modern World, is happy to be back and spends the rest of her brief life overdosing on //soma// and near the end of the book dies in the elder-care center. She is only in her mid-forties, but appears decrepit and diseased by the standards of everyone around her, since they have their youthful looks, metabolism, etc., artificially prolonged until the time they die around sixty.\n\nJohn is taken around and more or less hates it, as a sensible outsider would. He, Bernard, and Bernards friend Helmholtz, the odd ones, have some conversations, culminating in one with the World Controller after a ridiculous attempt at rebellion started by John (see \u003C\u003Crt 11150>> for a comparable level of incompetence in ConsensusPhysicalReality), about the things that are wrong with the world. A second subplot consists of Lenina and John being attracted to each other but having such wildly different conceptions of sex and romance that they end up horrifying each other (Lenina cant even tell he actually likes her, and John is horrified by her forwardness to the point that he hits her).\n\nBernard and Helmholtz are shipped off to islands (not a punishment as the Controller points out, though it may look like one: they get to hang out with all the people who were individual enough to get banished to islands). John is less lucky; he attempts to start a hermitage, but gets so inundated by the paparazzi (and then curious people) visiting and sensationalizing his Savage-ness that he commits suicide.\n\nJohn is constantly quoting MrWilliamShakespeare because a portable Shakespeare was the one book that he was able to get his hands on as a child, which adds another hilarious and oddly beautiful contrast between the two colliding worlds, even in his everyday speech.},{title:BreakableSoftware,created:20200325205300052,es:likely,modified:20210515034854791,tags:Expression Language Systems Code Public Idea,type:text/vnd.tiddlywiki,text:In one ComputerStupidities anecdote, the submitter describes a user who has told him that the software he installed “broke,” and asks rhetorically how software can break.\n\nAnd its true: software doesnt break. Its made of bits -- unless it gets corrupted, it isnt damaged and it doesnt change. Yet we all know software //does// break. One day its working and the next day it isnt.\n\nI think software “breaks” in a much different form than other things. Its not the software itself that breaks but its dependencies -- thus leaving the software expecting other things to be in a different state than they actually are. Unfortunately, given the OverlargeDependencyWeb of modern software, this happens all the time!\n\nIts rather like if the tap on your kitchen sink suddenly got magically disconnected from the plumbing. The tap didnt change, but you could still reasonably say that the tap “broke.”},{title:BreakfastOfChampions1973,author:Kurt Vonnegut,bibliography:LifetimeReading,caption:Breakfast of Champions,completed:20220818,created:20221106220356735,creator:soren,medium:book,modified:20221107031824292,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1973,text:Novel by MrKurtVonnegut, in which Dwayne Hoover becomes convinced that Kilgore Trouts books are speaking directly to him and takes them seriously, which leads him to go on a rampage.\n\nThis book was paced weird, and for this reason it was one of my least favorites so far. This is a general issue with many of Vonneguts books, but I thought this one suffered from it somewhat more than most. The plot, overall, lacked style and unity.\n\nNevertheless, this was a real hoot to read because of the deadpan satirical descriptions of everyday life, written as if to aliens and accompanied by crude line drawings by Vonnegut. E.g., theres a recurring gag about “wide-open beavers” (as an advertisement for porn), with drawings of a beaver (the rodent) and a vulva.},{title:BridalVeilFalls,created:20250618153322252,creator:soren,modified:20250618153323186,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BriefHistoryOfTime1988,author:Hawking,bibliography:LifetimeReading,caption:A Brief History of Time,created:20210703170128000,genre:History,medium:book,modified:20210705214034197,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1988},{title:BringThePainForward,created:20200202025024603,creator:soren,modified:20200712171216630,modifier:soren,tags:PhilosophyOfLife AgilePhilosophy Design Process Public Idea,type:text/vnd.tiddlywiki,text:An AgilePhilosophy/DevOps principle that suggests that if something isnt working right or is really hard, you should do it //more// often and make the pain felt. Counterintuitive but extremely effective. You might get slowed down and frustrated for a bit, but making the pain felt means you cant just ignore the issue, which would otherwise get swept under the rug for months or years or even forever. Youre forced to practice doing the thing so you get better, and find technical or process changes that can improve the situation.\n\nReleasing software hard? Release it every day, or several times a day. Sounds insane, but its CounterintuitiveEfficiency. In order to get to releasing every day, you have to figure out how to make it quick and easy, and then releasing isnt hard any more. Magic!\n\nA form of BeneficialDiscomfort.},{title:BrokenAcademicWritingProcess,created:20200228021623609,creator:soren,description:The traditional writing process uses a waterfall that forces people to decide on a topic before they know anything about it.,es:likely,modified:20240307142727764,modifier:soren,tags:Reading Learning Writing Public Idea School,type:text/vnd.tiddlywiki,text:Traditionally composed of steps like these:\n\n# Decide on a topic. (Often with no guidance on how to do so.)\n# Research the topic.\n# Create an outline of what youre going to write about.\n# Write a draft from your outline.\n# Revise and publish the draft.\n\nHowToTakeSmartNotes points out this is ridiculous. You cant decide on a topic before you have done any research, and this version of the WaterfallMethodology encourages confirmation bias|WaterfallEncouragesConfirmationBias in a dramatic way. Further, it makes it far more likely that youll end up hating what youre working on|HighSchoolWritingHorror. With a functional writing process, you hone in on the topic youre interested in as you go along, adjusting to work on something slightly different as your understanding increases. With the academic process, youre locked into working on whatever you half-randomly guessed might be an interesting topic days or weeks ago.\n\nPerhaps the writing process as taught in schools and universities needs a complete overhaul. After all, every teacher and writer //tells// you that writing is an IterativeProcess and youll have to go back and change things -- who publishes their first draft? And who learns everything relevant about a topic the first time they do research, and then is an expert on the topic and never looks at sources again? But the way we teach students to write, our structure of deliverables and deadlines, and the way writing is used in the classroom all encourage the opposite. Having to go back and find more sources, or even worse, change your topic, is seen as an “I screwed up bad” event, even by teachers, because in one way or another it is -- it certainly adds a substantial amount of time to the assignment compared to getting it right the first time, or convincing oneself that one has. Students are busy, and they have little inclination or even ability to plan for how long a writing assignment will take, while the deadline is immovable. (Yet another way that school is stricter than life|UnrealisticStrictnessOfSchool: truly immovable deadlines are extremely rare for anything of great importance, especially when its obviously a difficult thing to plan for!)\n\nThe ZettelKasten is presented by HowToTakeSmartNotes as a solution to this problem. And in some way it is; it allows you to invert the process|InversionOfControl, deciding what to write after youve already learned about and decided what you think about it, which is a huge boon, and bringing existing insights to new projects just by adding a few links. But it would seem to have limited value for teaching since it requires a tremendous investment of time to reach the critical mass where it can actually spawn and support projects of its own accord. Unless every student already had a middle-aged ZK upon entering a class, its hard to imagine them accumulating sufficient material during the course of a semester to write from it. (Ive been Zettelkastling for four years, and while its definitely changed me in useful ways and made my thinking and writing more productive, I still have yet to reach the point where I can trivially connect ideas from across it to write other kinds of sources. I do expect that will happen eventually, and achieving this is not my only reason for working in a ZK anyway, so thats fine, but someone aiming to reach this goal in a couple of months will surely be disappointed.)},{title:BrokenWindowsTheory,created:20220113190547197,creator:soren,es:possible,modified:20220115144752839,modifier:soren,tags:Definition Sociology Psychology Idea Public,type:text/vnd.tiddlywiki,text:The broken windows theory states that when a neighborhood has high incidence of minor crimes or looks shabby and poorly maintained, people are encouraged to commit more crimes; ergo, the best way to prevent major crimes is to crack down on minor ones.\n\nIn general, in criminology this theory doesnt seem to have been borne out by the evidence; some of the studies that have found evidence for it appear to have had major methodological flaws|https://podcasts.apple.com/us/podcast/the-stanford-prison-experiment/id1380008439?i1000503166756, and later studies have mostly found that observed improvements in crime would have happened anyway. Taking this approach to policing also disproportionately punishes minorities (as does everything).\n\nThe theory does have some intuitive plausibility, though, and I often apply it to other areas of life. For instance, if I let my living room get messy, Im much more likely to throw something on the couch instead of putting it away properly, and conversely if everything is perfectly neat, Im unlikely to want to disturb that, so Ill go put it away.},{title:BrooklynPark,created:20240402011646236,creator:soren,modified:20240402011655569,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Northwest suburb of the TwinCities.},{title:BrooksLaw,caption:,created:20200326201637731,creator:soren,description:Adding more manpower to a late software project makes it later,es:confident,modified:20210623120247926,modifier:soren,tags:Productivity Economics ScrumMethodology Public LawOfCynicism Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20200511013749498\\n\t\What is Brooks Law?\\n\t\{{!!description}}.\>>\n\t\nAdding new members to a team forces the team to reorganize (see TuckmanPhases). The new members reduce the productivity of everyone else on the team while they orient themselves. And the number of connections and effort of communication increases faster than linearly as you add more members to a team (see TwoPizzaTeam). All of which means this law has been empirically proven over and over again...and yet somehow people still persist in adding more manpower to late software projects!\n\nAfter MrFredBrooks in MythicalManMonth.\n\n\u003C\u003Crememberq \20200511013827138\\n\t\In what popular software development book was Brooks Law first formulated?\\n\t\MrFredBrooks MythicalManMonth.\>>},{title:BrothersKaramazov1880,author:Dostoevsky,bibliography:LifetimeReading,caption:The Brothers Karamazov,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034211,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1880,text:Length: !},{title:BrownFairyBook,author:ed. Andrew Lang,caption:The Brown Fairy Book,completed:202107011200,created:20210703160229858,creator:soren,medium:book,modified:20210909195907451,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1904,text:Collection of 32 fairy tales|FairyTale, mostly from international (aka not American/European) sources. Part of a large series of colored books; I own five and havent read any of them since I was a kid. Im not sure Ive ever read this one all the way through (thats why I picked it to reread). I read one or two of these before bed for a month or so.\n\nBeing published in 1904, the preface doesnt exactly have an attitude towards these cultures we appreciate today, and we are told:\n\n> All the rest of the stories in this book are told by Mrs. Lang, who does not give them exactly as they are told by all sorts of outlandish natives, but makes them up in the hope white people will like them, skipping the pieces which they will not like.\n\nIn spite of the racist attitude, altering fairy-tales as the storyteller is very much in the tradition (indeed, I think you could argue //not// doing so is a violation of tradition), so Im ultimately cool with this.\n\nA number of the stories violate what I would consider the normal narrative form, usually by failing to tie off all the loose ends and explain what happened at the end in a satisfactory way, or by containing several parts that seem almost entirely unrelated (a common form is to have part A, part B, part C connected to part B, and then part C and the story ends without ever bringing part A in again -- e.g., in “Tale of a Tortoise and of a Mischievous Monkey,” the tortoise does some mischief, then the monkey does some mischief, then the monkey and the puma face off, and then...thats the end of the story). Im not sure if this is because Mrs. Lang was bad at adapting them, or because the stories actually were like that originally, or because I am missing some deep metaphorical connection (but one certainly should not have to find such connections to understand a fairy-tale!).},{title:BrownieLake,created:20240402011702835,creator:soren,modified:20240402011704518,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BryantLakeBowl,created:20231205033558338,creator:soren,modified:20240509111907128,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BudgetingPhilosophyContradiction,created:20200519010945605,es:likely,modified:20210515034747844,tags:Economics Public Idea,type:text/vnd.tiddlywiki,text:There are two philosophical approaches to budgeting:\n\n* Be careful not to waste money on the small stuff -- it adds up!\n* The real gains are to be found in big things. Dont worry about the small stuff, its not worth it and serves mainly as a distraction.\n\nSomehow, both of them are right, and impossibly wrong at the same time.\n\nFor instance, I ran the math one time for saving $5 per day in a tax-sheltered index fund instead of buying a fancy coffee, after reading someone completely ridicule the coffee thing. It added up to //hundreds of thousands of dollars// over the course of an adult life, even with conservative assumptions! MrMitchDaniels has also found stunning success with this approach as the governor of Indiana and as the president of ThePurdueUniversity.\n\nOn the other hand, your big life decisions like how much to spend on housing self-evidently make more of a difference on your balance sheet than how many coffees you buy. And theyre a lot easier to control, since you only have to stop the bleeding once.},{title:BuffaloNationalRiver,created:20240127192823611,creator:soren,modified:20240127192824762,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:BugFireLane,created:20200326204122249,creator:soren,es:possible,modified:20211216023034679,modifier:soren,tags:Code ScrumMethodology Process Public Idea,type:text/vnd.tiddlywiki,text:Resource-management technique suggested by AgileInTheRealWorld. Inevitably, some critical support or bugs will come in during the course of a sprint|Sprint that cant wait to be scheduled in the next sprint. The \fire lane\ involves assigning a single team member, the firefighter or OnCallEngineer, to triage these bugs and fix them if needed (or else wait until the next sprint to schedule). This person can then be the only one bothered by unscheduled interruptions and can have capacity reduced and be assigned to less critical items to compensate.\n\nIn reality, of course, the firefighter will not always be able to solve everything completely by themselves, but at least they can //help// to protect their teams attention.\n\nIts important not to pawn this role off on developers new to the team, as it actually requires a lot of expertise, both to understand whether bugs are important and to actually go fixing them all over the codebase in places you arent so familiar with. However, it does do a great job of creating exposure and expertise; pairing a junior and senior developer might be a good workaround here.\n\nDefining what constitutes a showstopper bug as best as possible may be helpful in making the firefighters job easier.},{title:BugPrioritization,created:20200326204935211,es:possible,modified:20210811182110504,tags:Process ScrumMethodology Code Public Idea,type:text/vnd.tiddlywiki,text:Thoughts from AgileInTheRealWorld on prioritizing|Prioritization bugs:\n\n* Start your prioritization by ordering by time. If a bug hasnt seen any updates for a year, you probably have no need to worry about it -- if it were really important, it wouldnt be open anymore.\n* Lay out with the x-axis being severity and the y-axis likelihood of being hit.\n** Q1 bugs come first, Q2 bugs next.\n** Q4 bugs should be questioned -- is it worth fixing something thats severe but highly unlikely to ever come up, especially if it could be fixed at that time?\n** Q3 bugs should usually just be thrown in the garbage. If its unlikely to arise and doesnt really matter if it does, you have better things to spend your time on.\n* As with features, bugs should be reprioritized every sprint.\n\nCounterpoint/addition: There is someone who argues that if you have a giant bug database built up over years, you should literally just throw the entire thing away and start over. If the bug is important, someone will file it again. I cannot now remember who this is.\n\nDevOpsInTheRealWorld also suggests that when you get new bugs, you might consider a policy of scheduling them for this Sprint (Q1), next sprint (Q1, possibly Q2/Q4), or //never//. This way you dont end up with the giant backlog in the first place. If a buggy behavior is not bad enough to fix next sprint, is it really a problem at all?\n\n\u003C\u003Crememberq \20200511015123271\\n\t\On what two dimensions can bugs be scored to allow easy prioritization?\\n\t\Severity and likelihood.\>>},{title:BuildImagineCup2020,at:202005191540,caption:Imagine Cup,created:20200518211853732,medium:video,modified:20210522015801800,presenter:MrCoreySanders MsKateYeager,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/100aef59-68ee-41c6-8a28-dec23ef89f20,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis was an entrepreneurship shark-tank sort of thing, with the motto “Dream it -> Build it -> Live it”. Seems to be an annual event. There are thousands of competitors and 6 finalists shown here...and 3 of even those get eliminated after a 30-second presentation, based on the whim of the judges!\n\nThe teams were as follows:\n\n* ~RedWalls\n** Alzheimers app\n* The Knights\n** Weeding robot\n* Deeptector\n** Deepfake detector tool (using deep learning, ironically enough, and this isnt lost on them...)\n* Tremor Vision\n** Parkinsons detector\n* Hollo\n** Mental health app\n** Tracking and communication with health provider\n** Winner\n* Syrinx\n** Wearable voice box for partial voice loss, actually reads your throat\n\nThey didnt show the people who got eliminated, of course.\n\nRandom interesting things to check out, potentially:\n\n* MS pledge: carbon-negative by 2030. See related sessions with more: SustainableDataCenters20200520, SustainableSoftwareEngineering20200520.\n* Instafluff: live coding},{title:BuildingToolsToWork20200519,at:202005191800,caption:Building the tools to work and learn, with Jha and guests,created:20200518213056895,medium:video,modified:20210522015801808,presenter:MrRajeshJha MsYinaArena MrKevinGallo MsArchanaSaseetharan,tags:MicrosoftBuild2020 NeedsExcision Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/828faeb1-b24f-427f-bfce-078b8c0f4fd5,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nHost, MrRajeshJha.\n\nMsArchanaSassetharan:\n\n* Teams apps\n** Apps can be built on PowerPlatform or VisualStudioCode\n** \Seamless app discovery\ (coming this summer)\n** Can request apps for environment\n* Rajesh mentions \context\ as a benefit...whether they understand it in the Basecamp way I am not sure.\n\nGraph, with MsYinaArena:\n\n* Graph is “the API to your organization”\n** Users:\n*** SharePoint/OneDrive\n*** Outlook\n*** Teams\n** Rest API and a variety of SDKs\n** Like Power BI, pieces can be Microsoft-approved\n** Graph services:\n*** Connectors\n*** Security/Compliance\n*** Knowledge Generation\n\n* Cortex\n** “Knowledge network” for the organization\n** Shows automatic info about a term that someone used in an email!\n** Will be accessible through Graph this coming summer\n\n* Vegas Stream (MAGIX)\n** Satya mentioned this\n** Todor talking again\n** Graph pulls data about the org\n\nThe thing whats his name used on the lighting effect is Graph powered. Yina has one too.\n\nFluid Framework\n\n* Components that can be inserted into Teams, emails, etc. Support real-time editing and collaboration.\n* Seems like OLE Components that (maybe) actually work\n* Web API for developers, synchronizes in the background\n* Will be open-source (no better way to improve collaboration than collaboration!)\n\nMrSamBroner thereon:\n\n* Does merging of changes and distributes server data to the client!\n* Replaces a JavaScript map storing data with a Fluid map\n** Can even work with a text editor...just a bit more sync code.\n** And...it works\n** SDK will be available soon\n\nMsMayaRodrig and MrDanCostenaro on how it gets used in 365:\n\n* New menu in Outlook and Teams for components, like lists, agendas, etc.\n* Demo\n\nMrKevinGallo on Windows app development:\n\nWindows app development is a mess...so:\n\n* Unifying app development (present and future)\n** Project Reunion: Making Win32 and UWP available through a middle layer of APIs\n*** Can use new APIs with users on old OSs via automatic polyfills\n*** In preview today\n*** WebView is no longer locked to a specific version of Windows\n\n* New opportunities for 365\n** Graph linked to Windows search! Can see, e.g., files you worked on with a specific person\n\n* “Leaning into the cloud”\n** Windows Virtual Desktop (WVD) can run these apps, for instance, to get it running on an iPad (demoed)\n** MSIX AppAttach -- will make WVD faster/cheaper\n},{title:Bullshit,created:20230901033225084,creator:soren,modified:20240509111903262,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki},{title:Bulverism,created:20200827023745574,creator:soren,description:A logical fallacy in which you assume your opponent is wrong, then explain why.,es:confident,modified:20221201234424214,modifier:soren,tags:Reasoning Logic Public Idea,type:text/vnd.tiddlywiki,text:A logical fallacy in which one begins by assuming ones opponent is wrong, then explaining in great detail how the opponent made the mistake, perhaps using //ad hominem// attacks; e.g., because they are a woman, or a man, or they belong to some particular group, or they werent smart enough to go to college, or they havent had the right experience|HaveToExperienceItToUnderstand, or they were trying to promote their self-interest or maintain institutionalized racism. While sometimes this explanation may well be accurate, the argument itself lies completely untouched! It is a form of circular reasoning, or more specifically BeggingTheQuestion.\n\nHeuristic for avoiding: While one may be rightly led to consider carefully certain aspects of the argument based on the identity of the person making it and how they present it (//invited inference//), one must recognize the validity of the argument is the same regardless of who makes it.\n\nTerm coined by C.S. Lewis. See also https://en.wikipedia.org/wiki/Bulverism.\n\n\u003C$details summary\Flashcards\>\n\u003C\u003Crememberq \20200827024442263\\n\t\What author coined the term //Bulverism//?\\n\t\C.S. Lewis\>>\n\t\n\u003C\u003Crememberq \20200827024452460\\n\t\What is the core assumption of Bulverism?\\n\t\That your opponents argument is wrong.\>>\n\t\n\u003C\u003Cremembercz \20200827024506758\\n\t\Once a Bulverist assumes her opponent is wrong, she explains {why he came to make that mistake}.\>>\n\u003C/$details>},{title:BureaucraticPsychosis,created:20231009230032026,creator:soren,es:likely,modified:20241026222229955,modifier:soren,tags:Idea Sociology Systems Business Public,type:text/vnd.tiddlywiki,url:https://www.experimental-history.com/p/bureaucratic-psychosis,text:Concept of MrAdamMastroianni, describing how organizations do absurd and sometimes disastrously bad things while everyone acts as if everything is normal.\n\nAs described by Mastroianni:\n\n> If we were just two friends and I as described earlier in the post showed you shoddy evidence and claimed I was doing you a favor, or lectured you about button-makers when you were about to visit someone in the hospital, or barred you from talking about science because you formatted a Word document incorrectly, I would be totally bonkers and you’d be pretty upset. But if we were coworkers, it would just be another day on the job.\n\nGenerally occurs because incentives are misaligned, and normal, good people try to do a good job within the system of broken incentives without pausing to consider|HammeringHarder whether it makes sense on a broader scale. (Sometimes they would even get fired for doing that.)\n\nArticle: {{!!url}}\n\n\n!! Personal examples\n\n* The time someone stole my bike, but I was sitting|2023-10-04 Wed right across the street from someone who had it, and the Minneapolis police\u003C\u003Cfnote \To be fair, in the early 2020s there is no police department in the United States of America of which I have //lower// expectations. Managing to handle a routine interaction with a random dude who allegedly used a counterfeit $20 bill so badly that it starts nationwide riots tends to do that.\>> wouldnt come to recover it until I had filled out an online police report (a process which took over 30 minutes because I was trying to do it on mobile hotspot and the website basically didnt work|EverythingsBroken).\n\n{{BureaucraticPsychosis/p||PrivateChunk}}},{title:BurndownChart,created:20200428194532504,creator:soren,es:confident,modified:20211216023037576,modifier:soren,tags:ScrumMethodology Process Math Public Idea,type:text/vnd.tiddlywiki,text:A combined area-line plot that shows the amount of work completed during an iteration, Sprint, or other period of a project. The x-axis is time and the y-axis is effort, in StoryPoints or estimated hours. The area portion shows the remaining effort on each day, while a line with a fixed slope shows the target amount of work to have on each day. If your area chart is to the left of the line (almost never happens!), that means youre ahead of schedule for the sprint; if its to the right, youre behind.\n\nThe line actually doesnt always have a fixed slope; good software can instead make the slope a stepwise function to account for team capacity that isnt constant throughout the period (for instance, if people are on vacation for part of it).},{title:Business,color:,created:20200323023241152,creator:soren,modified:20210828140750083,modifier:soren,tags:Public,type:text/vnd.tiddlywiki,text:Tag for parts of business/corporate life or influence.},{title:BusinessIntelligence,created:20200326022043737,modified:20200326022651258,tags:Business Public Idea,type:text/vnd.tiddlywiki,text:General term for software and departments whose goal is to provide data to decision-makers in business.\n\nData is great, right? Im not opposed to BI as a general rule. But I am a bit skeptical of BI the way it is being thrown away nowadays, especially with regard to self-service, etc. Because DataIsDangerous if you dont know anything about data. I can still be plenty dangerous with data and Ive had three college courses in statistics. Lots of this is going at people who think correlation implies causation|https://xkcd.com/552/ and have no clue how to identify alternative explanations or read a graph!},{title:BusyIsBad,created:20201027162008288,creator:soren,description:If you dont have slack, you counterintuitively produce less value in the long run.,es:likely,modified:20240319020611368,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:People who are booked solid are neglecting work|NeglectedWorkThief that should be done. Busy means you are over capacity. Busy means that when something wildly high-value comes up, you cant afford to do it. Busy is bad.\n\nPeople who look busy are often thought to be productive, but progress needs to be measured by value produced|WorkingSoftware. If you arent paying careful attention, much of the stuff that fills up your time will be low-value anyway.\n\nInstead of trying to “keep busy,” work to maintain Slack, for you and those you love or manage. The default state is being busy, there is no need to seek it out!\n\nA CounterintuitiveCorrelation.},{title:ButtholeLocation,created:20200202033106264,creator:soren,description:Major technology companies often leave us with no recourse when something ridiculous happens and the system handles it improperly.,es:mythological,modified:20220910010206586,modifier:soren,tags:Information TheControlAltBackspace Business Public Idea,type:text/vnd.tiddlywiki,text:I ran across a post on \u003C\u003Csubreddit legaladvice>> recently, the headline of which ran, “My butthole has been a location on Facebook since 2012 and I cant get it removed.”\n\nOf course this is hilarious as long as you arent that guy, but its also quite instructive about modern life I think. Hes been trying for ages to get F.|PrivatePerson to remove it. Facebook apparently thinks its a business (hes tried to claim it as //his// business -- because as your mother told you, your butt is nobody elses business -- but has been unsuccessful). The thing is, if he could actually get in touch with someone from Facebook in charge of the feature and explain the problem, nobody in that position would possibly try to defend the internets right to have a business page called “So-and-sos Butthole” thats not an actual business at that location. They would laugh, apologize, and fix the problem...but theres no way to do that!\n\nAccording to the legal advisors, the CCPA apparently //might// give him the right to have it removed, if it applies to his jurisdiction (which I believe it did), but otherwise its not illegal, just stupendously dumb.},{title:ButtInSeatMetric,created:20201202022706905,es:confident,modified:20210728001952102,tags:Process Employment Public Idea,type:text/vnd.tiddlywiki,text:Metric for assessing Productivity that counts the amount of time an employee spends with their butt in a seat at their desk. An extremely poor measure, given that the productivity associated with an hour of screen time can easily differ by an order of magnitude depending on motivation and mental state. Also has the negative property of penalizing people who do a particularly good job and are thus able (occasionally or always) to complete their assigned work in a shorter amount of time, which may also encourage them to promptly complete their employment with you.\n\nCommits the fallacy of assuming that KnowledgeWork and physical work can use the same metrics. If youre building tables, if youre not in the workshop with a tool in your hand, youre not working. If youre writing a software application, you might have your most important insights, the ones that make the rest of your work take a tenth the time, outside the office. (OK, I shouldnt be too sure about carpentry. Im sure some work gets done without tools in the hand...just, not very much of the core value.)\n\nOn the other hand, butt-in-seat time //is// easy to measure, you cant deny that. Other methods of measuring productivity are more likely to end up in the MetricBlackHole. Prioritizing OutcomesOverActivities works and is generally better, though.},{title:C,created:20200520024542443,modified:20200520024634396,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:Systems programming language, the base of Linux and Unix. A very easy way to shoot yourself in the foot, but very fast and runs on basically any computing device ever created since the 1970s.\n\nCPlusPlus is based on C, not to its benefit.},{title:C2AMFT,caption:Composite 2-Axis Masculinity/Femininity Test,created:20241022015949862,creator:soren,es:personal,modified:20241030130314680,modifier:soren,tags:Idea PersonalityAssessment Public,type:text/vnd.tiddlywiki,text:{{!!caption}}, mentioned in the test authors https://www.lesswrong.com/posts/4NPfBfdBmYZDEBgWb/towards-a-comprehensive-study-of-potential-psychological. Link: https://www.onlinetests.me/test/c2amf.\n\nThe first time I took the test, I felt like I was going to score more masculine than I feel I actually am, but I actually came out as “Pure Feminine,” so then I took it again still trying to be accurate but to lean more in the other direction if in doubt, and I came out “Androgynous” (with a slight feminine slant but not much of one, similar to my score on other tests like the BemSexRoleInventory). I was surprised to get that much variance; the test-retest reliability may be poor in general, not sure. I found the fact that I was that far off on what the test was going to say interesting though; is it the test, or am I super miscalibrated on what an average man is like? (I bet I am, the tests biases aside; I dont spend a lot of time with masculine men and I bet the average man is more masculine than I think.)\n\n* First score: 0.47 Masculinity, 0.71 Femininity.\n* Second score: 0.53 Masculinity, 0.59 Femininity.\n\nThe tests description of what its trying to measure:\n\n\u003C\u003C\u003C\nThe Masculinity axis measures your dominance, rationality, and wildness/toughness. These are considered masculine traits, especially when present in men. Those high on masculinity will be predisposed to succeed independently, but may at times be excessively aggressive.\n\nThe Femininity axis measures your emotionality, fashionability, and romanticism. These are considered feminine traits, especially when present in women. Those who score high on Femininity tend to be cheerful and emotionally intelligent. As a downside, they can be pushovers.\n\u003C\u003C\u003C\n\nThe test also makes this interesting point:\n\n> “Masculinity/femininity” is conventionally defined along the lines of “having traits associated with being male/female”. However, I think this definition is flawed, because because theres much more nuance to what people normally think of as masculine/feminine than just sex differences. For instance, women are more likely than men to be feminists; does that make feminism a particularly feminine viewpoint? I think this contradicts common sense, and instead I have constructed this test with the aim of matching common-sense masculinity/femininity, by taking items from a variety of tests that correlate particularly with the commonsense notion of masculinity/femininity.},{title:CafeMeow,created:20230416032534102,creator:soren,modified:20230416032536940,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Caffetto,created:20230313123547438,creator:soren,gis-lat:44.9609141045327,gis-long:-93.28856282769539,gis-zoom:17,modified:20231205032714970,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Neighborhood coffee shop at 22nd and Lyndale in LowryHillEast. I often hang out and work here on weekdays when I want to get out of the house.\n\nTheir espresso is amazing and is the standard by which I judge other coffee shops nowadays.\u003C\u003Cfnote \Im not sure Ive ever had a better Americano. Once in a while I forget to put cream in and I dont even bother to go back.\>> Oddly, their hot chocolate is weak and frothy and not to my taste (which is too bad because I would love to get mochas more often in the winter; maybe I should get into syrup-flavored lattes instead), and their pastries are fine but not nearly as good as the coffee. The tea has been solid on the rare occasions Ive gotten it.\n\nDelightful warm, somewhat steampunk anarchist vibe. Its not exactly me, but I fit right in. (C.S.|PrivatePerson, of course, immediately fell in love with it the first time I brought them there.) Ive seen a few people review the place and complain that the seating is falling apart without realizing that this is //obviously// intentional (and it works). They do a great job of providing Different Seats (a useful Alexander pattern|APatternLanguage1977) and placing and aligning them in a way that you can feel comfortable almost anywhere, though of course I have my favorite spots. Downstairs walls are covered in graffiti and there are a bunch of pinball machines, which I play much too rarely.\n\nThis is a great spot either to hang out alone or to meet someone. Surprisingly it doesnt seem to do as good a job at encouraging strangers to meet and talk, despite physical cues that it would, which is a minor downside for me; Id like my public work space to have some more water-cooler-y vibes if it could. I //recognize// regulars and I chat with the baristas while theyre making my coffee sometimes, but besides that I dont really know people despite being there a couple times a week. Maybe its more about the kind of people who go there than anything else -- I cant claim to be very good at this myself!\n\nMinor peeve: during the summer there are always houseflies buzzing around, presumably because they keep the doors open a lot of the time.},{title:Calendar,created:20200910023535549,modified:20200910024256642,tags:Design PersonalDocumentation Index Public,type:text/vnd.tiddlywiki,text:Formal system for keeping track of time, on a scale longer than a day. A traditional Gregorian calendar is used across most of the world of ConsensusPhysicalReality, but an infinite number of systems are possible, and a large number of them could be practical were it not for the obstacle of acceptance (since a good part of the benefit of calendars is communication).\n\nCalendar-related ideas:\n\n* The DoomsdayRule is a method for identifying the days of the week of given dates in the Gregorian calendar (also suitable for working in reverse in certain cases).\n* DateNarrowing is a method for expanding SignificantFigures into calendars.\n* DoableFrequencies explains that recurring items on the day scale are much easier to do regularly when placed at specific frequencies.\n* Crosslife is a proposed syntax and search system for machine-readable, metadata-rich personal journaling.\n* LogicalTomorrow is a term for the next day on which the currently-occurring event, e.g., a class or meeting, will recur.},{title:CalendarFriction,created:20210809185505704,description:It should be hard to schedule appointments at work, especially when they involve lots of people.,es:possible,modified:20210809190304056,tags:Idea Employment InternetTheory Productivity MeetingTheory Public,type:text/vnd.tiddlywiki,text:Calendar tools that let you instantly book time with someone else or see when theyre at their computer make it too easy to take someone elses time. Scheduling a one-hour meeting with six people //should// be a massive pain, because youre taking six hours of peoples time at a moment they dont get to choose. Interrupting someone else should be a massive pain, because youre costing them half an hour of productivity|InterruptionsAndProductivity.\n\nDont offer these tools. The difficulty they exist to solve is UsefulFriction.\n\nSource: CrazyAtWork2018.\n\n\u003C\u003Crememberq \20210809190202628\\n\t\Why does TheBasecamp refuse to use shared calendar tools for scheduling meetings?\\n\t\Scheduling large meetings should be difficult, so that people avoid having them unless absolutely necessary.\>>},{title:CaliforniaZephyr,created:20250617163924448,creator:soren,modified:20251011160324856,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Amtrak|TheAmtrak train between Chicago and SanFrancisco, across the middle of the country, south of the route of the EmpireBuilder.},{title:CallOfTheVoid,created:20201201025129351,es:confident,modified:20210731153902275,tags:Definition Psychology Public Idea,type:text/vnd.tiddlywiki,text:A curious psychological phenomenon also known by its French equivalent, //lappel du vide//: many people occasionally have an urge to do something disastrous, epitomized by wanting to jump off a cliff or building. Slightly disturbing and very mysterious.\n\nThe most convincing theory I know of is that this is adaptive: combined with our ability to imagine the outcome, it serves to remind us how bad it would be if we actually ended up doing it, by mistake or otherwise, and thereby keep us careful.\n\nI dont experience this with true heights, but frequently have it at other times (e.g., driving into oncoming traffic on the highway).},{title:CamelCase,created:20200516004935805,creator:soren,es:confident,modified:20210825154940033,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Words that are not separated by spaces but with each word capitalized, ~LikeThisOne.\n\nIn programming, CamelCase usually refers to words with initialLowerCase, but the term is somewhat ambiguous. PascalCase unambiguously means CamelCase with an initial uppercase character.\n\nFor the use of CamelCase links in a wiki context, particularly the context of //this// wiki, see WikiCamelCase.},{title:Camping,created:20210710035434608,modified:20210710035231629,tags:Public Index,type:text/vnd.tiddlywiki},{title:CampingAndBoredom,created:20210807153245450,creator:soren,description:Why am I only able to be bored and deeply thoughtful while camping, despite this being incredibly productive?,es:possible,modified:20230427031808131,modifier:soren,tags:Idea Psychology Imagination Productivity Public,type:text/vnd.tiddlywiki,text:In a discussion with F.I.B.C.|PrivatePerson once upon a time, S.W.|PrivatePerson and I discussed how the only time we feel like it is OK to be bored is while Camping, or at the cabin. This is both problematic and curious: problematic because being bored occasionally is good for you (I know MrCalNewport mentions this in one of his books, but in summary its important to have some idle time to garbage-collect your mind and think of new things), and curious because boredom is typically thought to be a negative thing, so why is it more prevalent on vacation when youre supposed to be doing only things you like?\n\nTheres a nuance to the idea of boredom here: not only is boredom OK, it takes on a different sense in which it isnt even boring. Youre doing actual nothing, but theres no negativity attached, because in this context, things arent //supposed// to have a purpose and youre not //supposed// to be keeping busy; if things you do or think about end up accomplishing a purpose, leading to insights or knocking books off your reading list or keeping you warm or whatever, thats fine, but if they dont, thats fine too.\n\nI am always thinking big thoughts, dreaming up stories and worlds (e.g., M.|PrivatePerson), and making big decisions when I go camping. I think this is because of the boredom. Of course this is easier for me to pull off nowadays because I usually go alone, but back when I went camping for two weeks with my parents every year, we usually made big family decisions and thought big collective thoughts as well (and I had plenty of individual ones anyway during the times I spent apart). Camping and its associated boredom almost inescapably -- at least for me -- creates a context where these kinds of thoughts are easier. I think that my amazing productivity in these areas compared to normal life is why I like being bored while camping...and also a significant part of why I like camping.\n\n\n!! Characteristics of boredom-conducive contexts (BCCs)\n\n(I put this together while in such a context!)\n\n# No advance plans, except general ones. Specific plans (e.g., ones made at the start of a day) can be thrown out at any moment if you find something youd rather do.\n# Nothing else you “should be doing” in the back of your head at any point.\n# Few to no interruptions, or things you suddenly and unexpectedly have to handle; there are basic tasks to be accomplished all the time (e.g., fetching water, chopping wood), but you can see them coming hours away.\n# No time pressure. The clock barely even matters except to ensure youre home before dark and you eat at something approaching a normal time, and you could dispense with it entirely if you wanted.\n# No purpose-oriented obligations. You do things because you want to and they feel rewarding, or theyre necessary to sustenance and being comfortable, with immediately visible results in both cases. No pressure to make the time you spend worth something.\n# No attempts to impress anyone or seek approval. Youre only dealing with yourself and maybe a couple of people you love.\n\n\n!! Can we make this happen elsewhere?\n\nIt seems to take a long time to enter a BCC, to go from a context in which boredom is avoided (e.g., by looking at your phone when you have 15 seconds free) to one where its a normal part of life (e.g., where you have no electronics and enjoy sitting alone and staring at the fire or the night sky for 45 minutes). Perhaps this is not surprising because it would seem from the statements that the person who constantly looks at his phone must be totally different from the one who stares for 45 minutes at the fire, but both of these people are totally me!\u003C\u003Cfnote \I dont think I actually pull out my phone this quickly or this often. Certainly not as much as many people -- not because of personal virtue but because I deliberately keep social media, games, and other addictive apps off my phone to the greatest extent I can, so that it is not a fabulously entertaining device. Still, I clearly actively avoid boredom in my everyday life, sometimes with my phone, so this seems like an appropriate characterization overall.\>> Nevertheless, it always happens when I go camping; I find it usually takes 1–2 days.\u003C\u003Cfnote \This reminds me of a comment by MrAndyMatuschak that it takes him a long time to switch between a research and a coding context, making the kind of iterative research-improvement cycles that would seem an effective way to develop new tools for thought frustratingly difficult.\>> Last time I went up north, I actually had to leave my phone in my car to prevent myself from checking it repeatedly the first day, but after the first day I could have it with me and completely ignore it unless I wanted to look something up.\n\nI guess it is OK to simply commit to going camping regularly to make sure you continue to have these thoughts when you need them. But it also seems kind of silly that I cant have them at other times. Like, why not? Shouldnt I just have more boredom in my everyday life, make my everyday life one where boredom is OK? But I think there may not be much of a middle ground. The demands of a typical modern life are just not compatible with a BCC, or with sitting around and zoning out randomly; there is too much to do and too little time in which to do it, unless you set aside a long and uninterrupted block of time explicitly to sit around (or walk around, or row around) and zone out -- which is more or less exactly what my camping trips are already. Its really a form of DeepWork, and one that cant be entered effectively for short periods of time.\n\nBut then, I also wonder whether I have really tried that hard. Have I tried to block out an hour on my calendar and sit down and think about something? Im not sure I have. That feels incredibly weird and not something you can summon on demand, but maybe it actually is? Probably this is a TryItAndSee, although I get the feeling that if I fail Ill just wonder if there was some important factor that I forgot to consider. Going for a walk is probably the closest thing you can pull off.\n\nA few more thoughts on this: \u003C\u003Ccb \62.57--60\>>.\n\n{{CampingAndBoredom/p||PrivateChunk}}},{title:CampingAndStoicism,created:20201028220600933,creator:soren,es:likely,modified:20240220032455464,modifier:soren,tags:PhilosophyOfLife Psychology Public Idea,type:text/vnd.tiddlywiki,text:Camping often seems to me like it forces a certain degree of Stoicism, or making do with the circumstances (even when you may have caused the circumstances!). Like I arrive in the middle of the woods and it turns out I forgot to bring a fork...well, too bad, I just //dont have a fork//. Even with a car at the site, Im not about to drive an hour to the nearest store to get a fork, so Im just going to find a way to eat without one. And somehow thats not upsetting; in fact, its funny and turns into a good story, while it would merely be frustrating at home. (Gives new meaning to the StoicFork. I honestly did not intend that to be a pun when I started writing this paragraph.)\n\nMight contribute to making camping a divisive activity. I appreciate the creativity forced by lacking options (see GenerativeRestriction), but the L.|PrivatePersons of the world probably find it more frustrating than anything else.},{title:CanaryCoffeeBar,created:20240530223843203,creator:soren,modified:20240530223844039,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CanDisagreeWithYourMother,created:20200324032954582,es:confident,modified:20210306151811810,tags:LifeDirection PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:I had this realization shortly after I turned 24 and had been out of college for a couple of years: its OK to disagree with my mother about things sometimes.\n\nIts not like I believed the opposite before, but it was one of those things where I KnewItIntellectually but not intuitively and didnt always act on it. Like I think I realized I was sometimes policing my thoughts based on what my parents would think of them. Not that this is all bad -- my parents are smart people -- but it also shouldnt be the //only// reason you think something. “Because she told me to” isnt exactly a great rational|Reasoning reason.\n\nCf. SelfSelfConsciousness.\n\nAlso cf. \u003C\u003Crt 8679>>: “You know youre an adult when you start quoting your mother.” (Selectively!|SelectiveApplication)},{title:Cannabis,created:20210307132347236,modified:20210307132230964,tags:Drug Public Idea,type:text/vnd.tiddlywiki},{title:CannonBeachWashington,created:20250626182929053,creator:soren,modified:20250626182930253,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CannonFalls,created:20240227032321790,creator:soren,gis-lat:44.50682283969645,gis-long:-92.90574900215047,gis-zoom:9,modified:20240227032348147,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CannonRiverWinery,created:20240227032408629,creator:soren,gis-lat:44.507687447298345,gis-long:-92.90661803783352,gis-zoom:15,modified:20240227032414334,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CanonicalNumber,created:20200116033224665,creator:soren,es:personal,modified:20200118003342740,modifier:soren,reviewed:20250609,tags:Dreaming RecordsProject Public Idea,type:text/vnd.tiddlywiki,text:Canonical Number, or C.N. indicates a dream number obtainable from DreamDir via ID. So a reference \(C.N. #1200)\ means you should look up dream 1200 through Dreamdir or whatever other mechanism.},{title:CantBlamePlatformDesignersForNatureOfInformationStreams,created:20200817025611977,description:We are allowed to disclaim responsibility for a system we take part in because the systems weaknesses are an inherent part of the system.,es:unlikely,modified:20210611223620585,tags:Information SocialMedia Psychology Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:An argument against blaming platform designers for AddictiveDesign promulgated by|https://twitter.com/vgr/status/1047925106423603200 MrVenkateshRao, among others: they arent really responsible because even without them, there would still be a firehose of information coming at you.\n\nThats fair. The whole system is out of control and frictionless|UsefulFriction, and its also very tempting to lay the blame on platform designers and then refuse to do anything ourselves to improve our relationship (e.g. HowToSlowDown2019). We shouldnt do that. Yet, I also dont buy that it absolves the designers of responsibility, as some seem to think it does (not accusing Rao of this, as he didnt say enough in his Twitter thread to judge -- just piggybacking off his treatment of the idea to talk about it at large).\n\nLets say you participated in the ManhattanProject, a pursuit of ambiguous moral value. When confronted with the fact that you designed a device that killed several hundred thousand people in a new and horrifying way, you dont get to say, “Well, bombs just kill people, thats the end of it.” Similarly, your platform might just be allowing the freedom of information streams as already at large in the world to take their course -- an information platform on the Internet may just //be// problematic -- but thats not the end of it. You have to justify yourself some other way.\n\nFor both the platform and the Manhattan Project, I think thats possible, or at least Id be willing to entertain arguments for it. Even “someone else was going to do it anyway” doesnt seem //entirely// ridiculous. But I dont buy “the system is just like that and theres nothing I can do about it.”},{title:CanterburyTales,author:Chaucer,bibliography:LifetimeReading,caption:The Canterbury Tales,created:20201119204111423,due:202107301200,format:paperback,genre:Literature,isbn:9780199599028,ivl:90,medium:book,modified:20210703174959358,owned:yes,priority:2,readstatus:unread,tags:Public Source,type:text/vnd.tiddlywiki,universe:CanterburyTales,url:,year:,text:Book by MrGeoffreyChaucer.\n\nThe referenced edition is a translation into modern English. One of these days Id like to try at least part of it in the original.},{title:CantNotCommunicate,created:20200410202327478,creator:soren,es:confident,modified:20230416230414720,modifier:soren,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:HowBasecampCommunicates points out that you cannot choose to //not// communicate. The act of refusing to address something everyone knows about //is// communicating. Its up to you to do the best job you can under the circumstances (and thats usually addressing something awkward as soon as possible|ImmediatelyAwkward).\n\nSimilarly:\n\n* Refusing to make a decision is a decision.\n* Refusing to add restrictions is a restriction|NoRulesNoFreedom. },{title:CantStepInTheSameRiverTwice,created:20201209003049541,creator:soren,es:mythological,microlink:river,modified:20240803140646333,modifier:soren,tags:Ontology PhilosophyOfLife Public Expression Idea,type:text/vnd.tiddlywiki,text:Proverb recorded for the first time in the Western canon by Heraclitus. You cant step in the same river twice because both (1) the river and (2) you have changed by the time you try again. There is no going back, there is only going forward. An element of EverythingIsEffectiveAndPermanentAndThatsOk: you cant do anything without changing yourself.\n\nPart of what makes people people and worth living with (and that includes yourself). Also one of the reasons that PeopleDontKnowWhatTheyWant; by the time you get to what you think you want now, youll be a different person.\n\nAnd, as always, ThisTooShallPass. Something will be lost and something will be gained with every step in the river, and thats more or less the end of it. MsNadiaAsparouhovas thought below brings up an interesting point, though: if were lucky, we can produce some manner of artifact or ripple with each stage we pass through which preserves the best parts of it.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\nIt’s strange to think about how I’d be literally incapable of writing the same book if I’d started it in 2020, bc I’m not in the same mental space anymore. It’s just weird that ppl can produce these bodies of work or writing or thinking, but then be unable to do that same thing X number of years later. We say this person is the “author” of that work or like an “expert” on the topic, but it was really only in their head for a fleeting amount of time, so is it really about them at all? Or were they just a transient translator of an idea?\n\n---Nadias Notes|https://nadiaeghbal.com/notes/, 2020/09/19 (\u003C\u003Crt 11444>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\nIf you listen carefully to this story, at the end youll be someone else.\n\n---Vyasa, The Mahābhārata|https://en.wikipedia.org/wiki/Mahabharata (\u003C\u003Crt 7165>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number\3\>\n\n\\\\nWhere you gonna run? Tell me where will you roam\nWhen you can’t go home (you can’t go home)\nYou can’t go home (you can’t go home)\nOh pilgrim, you can’t go home.\nSo keep rolling, rolling down that road that you’re on,\nKeep rolling, rolling, rolling on...\n\\\\n\n---“Pilgrim (You Cant Go Home)”, David Rawlings Machine|TheDavidRawlingsMachine\n\n(See this review|https://www.wordonfire.org/articles/fellows/an-american-pilgrimage-a-review-of-dave-rawlings-machines-nashville-obsolete/ of the album for some more interesting thoughts on this pilgrimage.)\n\n\u003C/$m2.x>\n\u003C$m2.x number\4\>\n\n\\\\nYou longed for home, but while you yearned\nThe black ships smoldered on the coast.\nYou cant go back, its time you learned\n\nThat even if you had returned\nYoud only be a kind of ghost.\nYou cant go back, its time you learned\nThat what is burned is burned is burned.\n\\\\n\n---“Burned,” A.E. Stallings\n\n\u003C/$m2.x>\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20201217230915794\\n\t\What Western philosopher was first said to have explained that you cant step in the same river twice?\\n\t\Heraclitus\>>\n\t\n\u003C\u003Crememberq \20201217230939822\\n\t\For what two reasons can you not step in the same river twice?\\n\t\(1) The river has changed.\n\t (2) You have changed.\>>\n\t \n\u003C/$details>},{title:Capital1883,author:Marx,bibliography:LifetimeReading,caption:Capital,created:20210703170128000,genre:Politics,medium:book,modified:20210705214034219,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1883,text:Length: !!},{title:CaptiveAndFree,caption:Captive and Free,created:20200303120911098,medium:music,modified:20200808142510824,tags:Source Music Public,type:text/vnd.tiddlywiki,text:A small oratorio by MrEgilHovland notable largely for its inclusion of StayWithUs.},{title:CarbonImpactOfTravel,created:20240922150629332,creator:soren,es:likely,modified:20240928223115679,modifier:soren,tags:Idea Travel Environmentalism Public,type:text/vnd.tiddlywiki,text:My rough guess is that a heavy travel year|Travelogue, like 2024, a bit less than doubles the impact on the climate I would have if I stayed at home full-time.\u003C\u003Cfnote \Note that I dont count work travel in my personal footprint. I havent tried to pencil out whether being full remote and having an annual long-distance offsite comes out better than having a small office, but my guess is its fairly similar. Anyway, I think the footprint should accrue to the company, not to its employees personally -- though you might still want to have a think about your career if you find your work travel burning dozens of tons of carbon every year.\>> That should give anyone pause for thought, at the very least.\n\nHere are a few things I do to help.\n\n!! Budget\n\nI have an annual travel carbon budget, which I track with a Google Sheet. Right now the budget is 4 tonnes CO,,2,,e of fuel burn per year. My estimate is that the actual impact is probably about twice that once you count embodied energy in vehicles, airline operating costs, etc., etc. (For comparison, the average Americans carbon footprint is about 15 tonnes per year.) Unless there is, e.g., a long drive in a rental car after arriving, I assume that transit at the destination in excess of what I would ordinarily use at home is rounding error and ignore it. There is also some impact from, e.g., hotel stays, but this is very hard to estimate.\n\nI intend to adjust the budget as I go. 4 tonnes has little thought put into it, it just seemed like a level that wont be wildly restrictive but also wont allow it to explode out of proportion. I definitely dont think I want a 4-tonne annual budget for the rest of my life; 8 tonnes of additional carbon impact per year is a lot in a world rapidly affected by climate change. But the season of life Im currently in is likely the one in which I will have the highest ability and desire to burn a lot of carbon traveling, and the one where it will be most beneficial.\u003C\u003Cfnote \I have enough money to do a lot, but also have a lot of flexibility and minimal commitments, and I can use the relationships I develop and the things I learn for the rest of my life.\>> It makes sense to plan thoughtfully how you spread the emissions across your lifetime, and not just make it flat; my family didnt use much when I was a kid, and Ill likely have no use for even 1 tonne when Im 85 either, so going a little heavier right now seems rational.\n\nHaving the budget helps me think clearly about which trips are worth it. It also means that if I want to take a really high-impact trip (e.g., spending a month touring Europe), Ill have to cut back for the rest of the year. I havent decided if I should allow some unused budget to roll over to the next year; I can see good arguments for both.\n\n\n!! Overall\n\n* Outside of my travel habits, I try to do the big things right (not just throwing glass bottles in the recycling). I live in a small apartment that costs less than 20% of my income, I live in a walkable neighborhood and often dont move my car for days at a time, I buy things that last and try to buy things used, I eat relatively little meat, etc.\n* When making long-distance trips by any mode of transportation, I try to stay at least a week -- ideally more -- and do as many things as practical. If I can stop and visit someone on the way, I do that. I do not fly to New York for the weekend (except perhaps under extreme circumstances; to quote Dave Carroll on airlines|https://www.youtube.com/watch?v5YGc4zOqozo, “to save the world I probably would”). A good test here is, if you werent able to fly, would you still go? That the answer is no doesnt necessarily mean you cant go, but if you find yourself repeatedly answering no to relatively low-value trips, you are probably flying too much.\n* I buy travel gear that will last for most of a lifetime,\u003C\u003Cfnote \I bought a Red Oxx Air Boss|https://www.redoxx.com/products/air-boss?srsltidAfmBOooD-KygndyV-MiKk8JcEMGKo5ruPFsAgZ0FXDDpAIVtsXh7wCUE duffel bag when I was 19, and it still looks brand-new. I wiped it once with a wet rag, and I had to trim off some triple-stitched thread that pulled loose once.\>> and the vast majority of the time I bring only what fits in a day pack|TravelingLightAsSpiritualDiscipline. Luggage is a pretty small part of the impact of travel, to be sure, but the savings do amount to something: nobody ever has to cart my bag around, the plane is a tiny bit lighter, I can always ride public transit (and almost always do), and Im much more able to get value out of the layovers and awkward gaps in my schedule.\n\n\n!! Mode choice\n\n* I take medium-distance trips by train rather than plane, unless it is infeasible (e.g., Minneapolis to Kansas City|https://ap.sorenbjornstad.com/#post-187, despite being only 500 miles, requires 16 hours on the train and an overnight in Chicago, while a flight takes just over 1 hour). I prefer the train anyway!\n* If multiple people are in the car, going by car makes sense. But I normally dont make long-distance trips on my own by car -- it has much worse carbon impact than a train and a similar one to flying, while being much more dangerous and less pleasant.\n* When multiple modes are feasible, I do a quick back-of-the-envelope calculation to see if one option is much better than another. Rules of thumb: driving alone in a 30mpg vehicle is about 0.3 kilograms per mile, diesel Amtrak trains are half that. (Electric ones would be much less, but we dont have those in the Midwest. Notice that the train may require somewhat more miles than the highway, depending on route.) For flying, I use the Google Flights estimator, but I multiply its figures by 1.9 because they do not presently account for contrails and radiative forcing effects.\u003C\u003Cfnote \There was a recent NYT article which claimed, on the strength of these underestimated figures, that riding Amtrak cross-country in coach had a larger carbon footprint than flying. No it doesnt. (Im not sure about sleeper. It seems very plausible that at least sleeper rooms with low occupancy could be higher-impact than an economy flight.) Google is correct that we dont have a particularly good understanding of these effects, and its particularly hard to come up with a solid number for any individual flight (for instance, contrails only occur at all on about 10% of flights, and some are worse than others, so that a tiny percentage of flights account for almost all of the warming due to this effect; theres some hope that having a better understanding of the weather could allow us to avoid routing flights through areas and at altitudes where disastrously-warming contrails would form). But surely the right answer to an imprecise understanding is not to pretend the effects dont exist and systematically, dramatically underestimate the impact numbers! Thats why I use the IPCCs estimated multiplier.\>>\n\n\n!! Offsets\n\nDespite the real and serious issues with carbon offsets, I think it is still worth attempting to do something on the other end as well. I have in the past donated to preserve the rainforest -- not necessarily through a carbon offset company specifically but through someone I trust reasonably well with a rough estimate of impact -- and plan to do so again, though I have not yet worked out the details. While it doesnt always work as well as people would hope, its also fairly hard to imagine that it would result in major climate //losses//, and there are other good reasons to try to preserve forests! So at worst it should do minimal harm, and at best might actually help. Improving carbon offsets is a developing story / area of research, so Ill also continue to check in on that periodically and see if there are new best practices emerging.},{title:CareerCapital,created:20200712160009331,es:confident,modified:20210509010859302,tags:Employment LifeDirection Economics Public Idea,type:text/vnd.tiddlywiki,text:In a world of BullshitJobs and underpaid jobs, how do you get a job that lets you be a craftsman|CraftsmanMindset and provides you with decent compensation? According to MrCalNewport in SoGoodTheyCantIgnoreYou, the most important factor is career capital. You cant get a great job if you dont have anything to offer; on the other hand, if you can make yourself invaluable to an employer, you can get pretty much anything you want.\n\nIn the pursuit of career capital, you pick a field (you probably already have one, so no benefit in changing it unless you strongly dislike it or a quick look at the future shows its a dead end) and then take whatever job or position seems to hold some kind of intermediate-timeline promise for you. Maybe thats moving closer to where youd like to end up, or getting to know important people in the field, or working with a new tool or method of analysis, or whatever it may be. Bonus points are given if the benefits are uncommon but potentially valuable (you might not always know whats valuable ahead of time, so uncommon is a good sign already).\n\nCertain JobDisqualifiers may eliminate otherwise appropriate jobs from the list, however.\n\nOne particularly effective way of obtaining career capital may be Polyspecialization.},{title:CareerMission,created:20200712161851509,es:likely,modified:20210509004409054,tags:LifeDirection PhilosophyOfLife Creativity Employment Public Idea,type:text/vnd.tiddlywiki,text:According to MrCalNewport in SoGoodTheyCantIgnoreYou, after the CraftsmanMindset, a job that pursues a mission is the biggest source of happiness and meaning (p. 150). However, people rarely reach this state of affairs by defining a mission and then fearlessly pursuing it, as many self-help resources advocate (cf. PeopleDontKnowWhatTheyWant). In fact, this method is usually //backwards//. Unless you already have a highly specific mission you believe strongly in -- and most people dont, and dont know how to identify one -- its better to proceed in a way that will eventually lead you to a mission that youre already poised to contribute to (see FlaneurMethod, InversionOfControl).\n\nYou should look for missions in the AdjacentPossible of whatever field you are in (related: pick ones that are important, neglected, and tractable|ImportantNeglectedTractable). In order to succeed in finding one, though, you first have to develop CareerCapital; otherwise, you simply wont know what the A.P. is and when youve found a good mission in it. (p. 157)\n\nYou explore potential missions by making little bets on ideas, connections, and projects that seem interesting (see IterativeProcess, BlackSwan). Its often difficult or impossible to see what will work out in advance, so dont worry about it (see DefaultToOpen). Eventually, one of them might become promising and lead you down a path for several years or your entire career; the leads dont have to work out often. (p. 177)\n\nOne might remark that this is essentially the philosophy of the ZettelKasten: rather than trying to come up with an idea up front and then write about it / explore it, you first write and explore, and eventually some of that work may emerge|EmergentStructure into an idea or a project or a book. This could be considered a type of InversionOfControl.},{title:CarletonCollege,created:20230406024923541,creator:soren,gis-lat:44.461218160116694,gis-long:-93.15585129339006,gis-zoom:14,modified:20240509111913111,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CarleyStatePark,caption:Rice Lake State Park,created:20210129161204153,foreignid:00130,gis-lat:44.11168327831448,gis-long:-92.17279561595487,gis-zoom:13,hideorphan:true,modified:20210515035320186,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki,text:Small MinnesotaStatePark near RochesterMinnesota. About five miles of hiking trails, winding along a small river. Very quiet. If going to WhitewaterStatePark during the busy season, this is a nice place to camp -- much less busy, campground is nicer, and only 10-15 minutes away. Be aware there is no running water though, so if you are staying for a longer time and want to shower, it may not be a great choice.\n\nA little bit gnatty even in midsummer, but mosquitoes are rare.},{title:CarpeDiem,created:20200401224623771,creator:soren,es:confident,modified:20211204154150909,modifier:soren,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Sentiment of Horace: //Seize the day//, you never know how much longer you have. Cf. CouldWakeUpTomorrowDead.\n\nKnown for being featured heavily in the film DeadPoetsSociety and (in my PersonalMythology) for the SilviaRarum story ~FishOfGod.},{title:CarPlay,created:20240402015154412,creator:soren,modified:20240509111916500,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:CarsHaveKeys,created:20200125210218000,es:likely,modified:20240320214749222,modifier:soren,tags:Anecdote Public Idea,type:text/vnd.tiddlywiki,text:In the real world, even in 1971, you need a key to open and start a parked car, or at the least you need a couple of minutes to break in and hot-wire it. If youre unusually lucky, the car you randomly want to take might have been left open and running, but this hardly happens regularly. If you are MsMaudeChardin in HaroldAndMaude1971, apparently, cars do not have keys, at least not keys that have any security value whatsoever: she never has the slightest bit of difficulty taking any vehicle off the street, even before the currently-present owner notices, and can reliably use this ability as a get-out-of-jail-free card (literally, in //multiple// cases).\n\nThere is one of those if-you-blink-you-might-miss-it moments in which she explains that someone once gave her a set of keys and shes had to update it for the latest models since then, but of course she is never seen on screen using such a key ring, because there is no way you could conceivably carry one of the requisite size! (But I guess what do I know, maybe there were car bump keys in 1971 that were general enough to work on nearly all locks or something.)\n\nOne could call this a PlotHole, but I think its so funny that I dont care. Its also curious that I didnt even notice this until long after I watched the movie for the first time: Maudes presence and air of implausibility|ImplausibleCharacter fits so naturally that you dont even notice.},{title:CastleRock,created:20250623173855791,creator:soren,modified:20250623173856813,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CatcherInTheRye,caption:The Catcher in the Rye,created:20200326000814635,medium:book,modified:20210607011057552,owned:no,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:CatcherInTheRye,text:Psychological novel by MrJdSalinger about a somewhat-messed-up teenager and DislikableCharacter MrHoldenCaulfield. A divisive novel like GreatGatsby; many people think its great and other people absolutely cannot stand it. Unlike Gatsby, I fall more closely into the former camp.},{title:CathedralOfOurLadyOfTheAngels,created:20230916011113389,creator:soren,modified:20240509111945980,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Catholicism,created:20240402011741652,creator:soren,modified:20240402011758320,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Religion, large organized part of Christianity.},{title:CatsCradle1963,author:Kurt Vonnegut,bibliography:LifetimeReading,caption:Cat’s Cradle,completed:202204211200,created:20210703170128000,creator:soren,genre:Literature,medium:book,modified:20240402024406810,modifier:soren,priority:2,rating:distinguished,readstatus:read,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,year:1963,text:Novel by MrKurtVonnegut. One of his most popular, and in my opinion also one of his best.},{title:CedarLake,created:20251010143917944,creator:soren,gis-lat:44.95937396499222,gis-long:-93.32151264389759,gis-zoom:14,modified:20251010143952649,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CeliloPark,created:20250621164643248,creator:soren,modified:20250621164645015,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CenterOfExcellence,created:20200716210151688,modified:20201204041546488,tags:Systems Definition Politics Public Idea,type:text/vnd.tiddlywiki,text:Roughly, a formalized, non-self-organizing version of a CommunityOfPractice, centered around a particular discipline or topic and providing leadership, guidance, exploration, etc., to the rest of an organization or world. Often referred to simply as ~CoE. Google turned \Cloud COE\ into an industry buzzword in their literature on cloud adoption.\n\nA rather vague term; as Wikipedia snarkily puts it:\n\n> Due to its broad usage and vague legal precedent, a \center of excellence\ in one context may have completely different characteristics from another.\n\n\u003C\u003Crememberq \20200716210422085\\n\t\In the context of organizations, what does `CoE` stand for?\\n\t\Center of Excellence.\>>\n\n\u003C\u003Crememberq \20200716210511315\\n\t\A Center of Excellence is a bureaucratic and power-infused version of what Scrum concept?\\n\t\The Community of Practice.\>>},{title:ChakraUi,created:20200521213608964,modified:20200521213648871,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Web component library built on the React framework.},{title:Challenges,created:20210623030719088,creator:soren,modified:20251011164901448,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:This tiddler gathers together (via backlinks) challenging ideas that one should continue to wrestle with, rather like OpenQuestions.\n\n\u003C\u003Cstretch-template-links filter:\allcurrentbacklinkssort\ smallTemplate:\$:/tzk/Templates/Topical/TitleDescriptionStretch\ largeTemplate:\$:/tzk/Templates/General/IdentityTemplate\>>},{title:ChangeByLaughing,created:20200506160011556,modified:20200712163536417,tags:PhilosophyOfLife Psychology Public Idea,type:text/vnd.tiddlywiki,text:The fastest way to start changing, or to give up on something that hasnt worked out, is to laugh at yourself. You realize that youve been doing it dumbly, or something to that effect, laugh, and move on. No harm done, but time to move on.\n\nAnd hey, its fun.\n\nSource: WhoMovedMyCheese p. 70.},{title:ChangeOverNothing,created:20200506184242114,es:possible,modified:20210809173656993,tags:LifeDirection PhilosophyOfLife Reasoning Public Idea,type:text/vnd.tiddlywiki,text:When things are bad (e.g., all the cheese is gone -- see WhoMovedMyCheese, p. 61), its better to be looking for a new opportunity than to sit around moping and mourning the loss of an old one, even if you dont like looking. See also AnalysisParalysis and MrTeddyRoosevelt on this matter. Looking for something new and better is freeing and comparatively easy when youre being forced to do it because your current situation sucks.\n\nThis is almost (but not quite) a sort of BringThePainForward.\n\nAnd its also worth keeping in mind, even if changing is painful at first, things often end up better afterwards; you may have been in a LocalMaximum. You get a chance to reimagine things.\n\nThis is not to be confused with the mistaken belief that if youre not growing youre dying, or you //must// always be changing things that currently work. Its definitely possible to make things that work worse by changing them (see IfItAintBrokeDontFixIt and CrazyAtWork2018). Changing things that work is to be done with caution and in ways that can be backed out if necessary. Changing things that are already obviously broken may be done with more confidence.},{title:ChangeYourMind,created:20210812020841294,description:When you become wiser, you should change your mind.,es:confident,modified:20210812024613739,tags:Idea PhilosophyOfLife Reasoning Public,type:text/vnd.tiddlywiki,text:Opinions, beliefs, and philosophies should be subject to continuous revision|ContinuousImprovement just as products or processes are. Even the worlds most smart and careful people still discover they were wrong about things from time to time, and when they do, they should admit they were wrong and change their mind, publicly if necessary. Its uniformly better to have been wrong at one time than to have been wrong at one time and //still// be wrong.\n\n(In fact, the worlds smartest people are typically wrong //more// often and more spectacularly than average people, simply because they think about more things and take more sides|https://slatestarcodex.com/2019/02/26/rule-genius-in-not-out/. As MrTeddyRoosevelt said, the only man who never makes mistakes is the man who never does anything.)\n\n!! References\n\n> A man should never be ashamed to own he has been in the wrong, which is but saying, in other words, that he is wiser today than he was yesterday.\n> ---MrAlexanderPope, \u003C\u003Crt 7029>>\n},{title:Character,color:#ff4d00,created:20200116031738566,creator:soren,modified:20200329174005678,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:A person who doesnt exist in real and waking life but rather in literature, dreams, or some other imaginative or hypothetical form. Generally should also be tagged PAO.},{title:CharlesAllisArtMuseum,created:20240530224225203,creator:soren,modified:20240530224227246,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CharlotteNorthCarolina,created:20240718010755138,creator:soren,modified:20240718010758289,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ChatGpt,created:20230406021632593,creator:soren,modified:20230406021648215,modifier:soren,tags:Idea Public Software,type:text/vnd.tiddlywiki},{title:Checklist,color:#ff4d00,created:20210729032108497,modified:20210729031917238,tags:Public Index,type:text/vnd.tiddlywiki},{title:ChekhovStories,author:Chekhov,bibliography:LifetimeReading,caption:Short stories,created:20210703170128000,creator:soren,due:202207261200,genre:Literature,ivl:10,medium:book,modified:20220716195609948,modifier:soren,priority:2,readstatus:partial,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:ChestertonsFence,created:20201201030315705,es:likely,modified:20201201131525168,tags:PhilosophyOfLife Reasoning Metaphor Public Idea,type:text/vnd.tiddlywiki,text:Parable by MrGkChesterton arguing for practical conservativism and understanding of history (cf. ContextStrength). According to the parable, one must not try to get rid of something one perceives to be useless or backwards unless one first understands why it was put there in the first place; only then can one determine whether that reason is still valid.\n\nThe skeptic of this rule would argue that the original reason is irrelevant today. It may be, of course; but things are also not usually put in place for no reason at all, which means that if you cant see what the original reason was, you are potentially missing something very important. Your attitude towards that possibility should depend on your risk tolerance.\n\n\n!! References\n\n\u003C\u003C\u003C\nIn the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, \I dont see the use of this; let us clear it away.\ To which the more intelligent type of reformer will do well to answer: \If you dont see the use of it, I certainly wont let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it.\\n\nThis paradox rests on the most elementary common sense. The gate or fence did not grow there. It was not set up by somnambulists who built it in their sleep. It is highly improbable that it was put there by escaped lunatics who were for some reason loose in the street. Some person had some reason for thinking it would be a good thing for somebody. And until we know what the reason was, we really cannot judge whether the reason was reasonable. It is extremely probable that we have overlooked some whole aspect of the question, if something set up by human beings like ourselves seems to be entirely meaningless and mysterious. There are reformers who get over this difficulty by assuming that all their fathers were fools; but if that be so, we can only say that folly appears to be a hereditary disease. But the truth is that nobody has any business to destroy a social institution until he has really seen it as an historical institution. If he knows how it arose, and what purposes it was supposed to serve, he may really be able to say that they were bad purposes, or that they have since become bad purposes, or that they are purposes which are no longer served. But if he simply stares at the thing as a senseless monstrosity that has somehow sprung up in his path, it is he and not the traditionalist who is suffering from an illusion.\n\n---Chesterton\n\u003C\u003C\u003C},{title:Chicago,created:20230424030626806,creator:soren,modified:20230424030627875,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ChicagoIllinois,created:20210516224204403,gis-lat:41.87575470614588,gis-long:-87.62432960178066,gis-zoom:9,modified:20210516224039239,tags:Place Public,type:text/vnd.tiddlywiki},{title:ChoirsOfStOlaf,created:20200314213816857,es:confident,modified:20210807033531142,refexplorer-starttab:PAO,tags:Music Index Public,type:text/vnd.tiddlywiki,text:StOlaf has five main choirs:\n\n* TheStOlafChoir\n* TheStOlafChapelChoir\n* TheStOlafCantorei\n* TheVikingChorus\n* TheManitouSingers},{title:ChoralDay,created:20200512033217807,creator:soren,es:confident,modified:20230912032703600,modifier:soren,tags:Music Public Idea,type:text/vnd.tiddlywiki,text:Yearly event at StOlaf that brings the ChoirsOfStOlaf together with choral groups from nearby communities for a 1000-voice concert in SkoglundGymnatorium. A good event to have but often very trying, and consumed the entirety of Sunday -- including church, often on All Saints Day. Many highly amusing quotes and happenings can be found in my journal entries for those days during that time, probably as a coping mechanism!\n\nOne of my favorite C.A.|PrivatePerson quotes is about Choral Day (\u003C\u003Crt 4484>>):\n\n> I have always been trying to reform Choral Day. But its a bit like trying to steer an aircraft carrier with a tongue depressor.\n},{title:ChristianDoctrine,author:Augustine,bibliography:LifetimeReading,caption:Christian Doctrine,created:20210703170128000,genre:Religion,medium:book,modified:20210705214034249,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Christianity,created:20200516011543491,modified:20200516011543994,tags:Religion Public Idea,type:text/vnd.tiddlywiki},{title:christianity-and-javascript.png,type:image/png,created:20200403022700249,creator:soren,modified:20200403022709962,modifier:soren,tags:Image Public,_canonical_uri:./extimage/christianity-and-javascript.png},{title:ChristmasMusic,created:20241026225305557,creator:soren,es:possible,modified:20241026230631568,modifier:soren,tags:Idea Productivity Creativity Public,type:text/vnd.tiddlywiki,text:> Anyway, I eventually discovered a life changing life-hack which I have now used for years to force myself to finish and release music. It’s called “Christmas Music”.\n> ---“Six things I sort of believe about making music|https://www.johnwhiles.com/posts/music-production-lessons,” John Whiles\n\nAccording to the author, writing Christmas music makes producing music vastly easier for three reasons:\n\n# It massively narrows your options on the theme (GenerativeRestriction), so you have a nice cozy space to work within and its easy to get started.\n# It is low-stakes: people dont take Christmas music that seriously, so you dont feel like it has to be perfect.\n# There is an obvious deadline (next Christmas).\n\nIt seems worth asking, what are the equivalents of Christmas music in other domains? And can we apply these principles to something we care about more than Christmas music? (Surely the only principle that could actually be in conflict is #2.)\n\nIll try to remember to note if I come up with some.},{title:ChroniclesOfNarnia,caption:The Chronicles of Narnia,created:20200126001902372,format:hardcover,medium:book,modified:20210706205500178,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:ChroniclesOfNarnia,text:Seven-volume work of fantasy and Christian Allegory created by MrCSLewis. I reread it shortly after graduating college and found it surprisingly enjoyable.\n\nThe fictional telekinese (?!) MsMatildaWormwood complains that C.S. Lewis doesnt put any “funny bits” in his books, but at least as an adult, once in a while there are some rompers. Maybe my favorite that I remember is at the end of //The Silver Chair//:\n\n> After that, the Heads friends saw that the Head was no use as a Head, so they got her made an Inspector to interfere with other Heads. And when they found she wasnt much good even at that, they got her into Parliament where she lived happily ever after. (\u003C\u003Crt 8270>>)\n\n(See also PeterPrinciple.)},{title:ChronoBook,created:20200122025926349,creator:soren,es:confident,modified:20230427023951616,modifier:soren,tags:RecordsProject Public Idea,type:text/vnd.tiddlywiki,text:The fancy name for my journal: A chronologically-ordered hand-written register of events in my life, and anything else I think needs to be talked about daily and doesnt go in anywhere else.\n\nWhy is it worth doing?|WhyTheJournal},{title:Chunking,created:20200712171953566,modified:20200712225652865,tags:Neuroscience Reasoning Psychology Public Idea,type:text/vnd.tiddlywiki,text:The process of combining small pieces of information into larger ones so as to think about them more effectively. For instance, we dont think about letters when we read, we think about words, and sometimes sentences. And when we summarize what weve learned from a book, we think in terms of sections and chapters, not in terms of words.\n\nChunks allow seeing the relationships between things that only appear on a higher level. They are also often discussed in memory; they can take up less space in ones short-term memory and can be elaboratively encoded|ElaborativeEncoding more effectively.\n\nNaming things|PowerOfNames is one form of chunking, as is identifying patterns, e.g., SoftwarePatterns.},{title:ChurchLeft,created:20200322155730711,creator:soren,es:likely,modified:20210909034212562,modifier:soren,tags:Identity Metaphor Process Politics Public Idea,type:text/vnd.tiddlywiki,text:Magnificent term coined by B.S.|PrivatePerson in a piece|https://benjaminstudebaker.com/2018/04/28/the-left-is-not-a-church/ about how the American left is getting sidetracked on IdentityPolitics and questions of group identity. Specifically, theyre excluding|GroupIdentityIsFoundedOnExclusion many who belong in their group and including many who //dont// belong in their group if theyre aiming for results, treating the political movement more like a social way to identify themselves as righteous rather than a means to achieve useful change.},{title:CircleOfLife,created:20200228012723513,creator:soren,es:likely,modified:20240320214749222,modifier:soren,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Life happens. People are born, they live, and they die. Many people think death is terrible and have a FearOfDeath. But as Clara says in HouseOfTheSpirits:\n\n> Just as when we come into the world, we are afraid of the unknown. But the fear is something from within us that has nothing to do with reality. Dying is like being born: just a change.\n\n(Counterpoint: G.|PrivatePerson once argued that we need care less about our death than others deaths, because when we die we dont have to worry about it anymore. We wont be grieving ourselves!)\n\nMsMaudeChardin tells MrHaroldChasen in HaroldAndMaude1971 that she loves going to funerals because the circle of life is beautiful. I can almost understand it. I think of course shes also looking forward to her own death and coming to terms with that, but those things dont contradict each other, at least if you understand Maude (to the extent that one can, because shes quite the strange cat).\n\nCf. CouldWakeUpTomorrowDead, ThisTooShallPass.},{title:CityIsNotATree,caption:A City Is Not a Tree,created:20200326005255952,creator:soren,medium:article,modified:20200808142534244,modifier:soren,tags:NeedsExcision Source Public,type:text/vnd.tiddlywiki,text:Article by MrChristopherAlexander.\n\n* The actual structure of social interactions and cities is a sublattice. Modern civic design creates a tree.\n* Likely due to a cognitive deficit: it is easier to think in trees. No solutions are presented (tools? methods of organization/process?)\n* Tools vs. Process: places where we have cognitive deficits can make tools more important.\n* Is this a cause of social isolation? Though youd think that would make social media less antisocial... SocialMediaIsAntisocial},{title:CivilDisobedience1849,author:Thoreau,bibliography:LifetimeReading,caption:Resistance to Civil Government,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034267,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1849},{title:Class,caption:A metasource|Metasource representing a class or course which uses multiple Sources.,color:#ff0000,created:20200312153108522,creator:soren,icon:$:/core/images/tag-button,modified:20230405211410333,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}},{title:Clickbait,created:20200401231202660,modified:20200401231451612,tags:Business Information Public Idea,type:text/vnd.tiddlywiki,text:Website that contains little to no useful content (a low SignalToNoiseRatio) and a more-than-healthy amount of advertising, and often uses barely-legal deals with other websites for advertising to drive traffic. The name comes from the inflammatory or leading headlines that cause people to click on them just because theyre curious whats coming next. Typically, the answer is “5 minutes of wasted time and maybe some nice malware.”\n\nSee also Clickhole (a site making fun of clickbait).},{title:Clickhole,created:20200401231336202,modified:20200509032301415,tags:Publication Public,type:text/vnd.tiddlywiki,text:TheOnion has a parody arm called Clickhole|https://www.clickhole.com/, which makes fun of Clickbait (and is itself clickbait).},{title:ClickUp,created:20240402011826523,creator:soren,modified:20240402011829236,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki},{title:ClimateChange,created:20200326023349801,creator:soren,es:likely,modified:20210916230129295,modifier:soren,tags:Economics Environmentalism Public Idea,type:text/vnd.tiddlywiki,text:Its a liberal conspiracy!\n\nSeriously, what it is is an increasingly urgent BlackElephant. Conspiracies are just one form of the elephant denial.\n\nClimateChange and EconomicRealities are intertwined issues, both resulting from and causing the scarcity of certain resources.},{title:ClockworkOrange1962,author:Burgess,bibliography:LifetimeReading,caption:A Clockwork Orange,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034278,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1962},{title:Clojure,created:20200410161121502,creator:soren,modified:20200410161203147,modifier:soren,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:A Lisp dialect that runs on the JVM. Created by MrRichHickey.},{title:ClozeDeletion,created:20200517135748552,modified:20201218213644521,tags:Memory Public Idea,type:text/vnd.tiddlywiki,text:Technique for quickly generating flashcards for SpacedRepetition or otherwise, consisting of //occluding// (hiding) parts of a sentence. For instance, rather than writing out:\n\n\u003C\u003C\u003C\n\\\\nQ: What is cloze deletion?\nA: The occlusion of parts of a sentence to create flashcards.\n\\\\n\u003C\u003C\u003C\n\nYou can simply say:\n\n> Cloze deletion is {the occlusion of parts of a sentence to create flashcards}.\n\nThe braced part would then be shown as ... or similar on the front side of the card.\n\nDoing this tends to be significantly easier and faster than rephrasing information as a question, so its a very convenient feature. Cloze deletion cards are, however, prone to becoming UngeneralizableOcclusions; the example above is a relatively poor cloze deletion card (q.v.).\n},{title:COBOL,created:20200312153419564,creator:soren,es:confident,modified:20211206160446098,modifier:soren,tags:Software ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:\Common Business-Oriented Language\, or as J.T.|PrivatePerson would say, \Crappy Old Basically Outdated Language\. One of the first popular high-level programming languages, designed as the name suggests for businesses. The world still runs on COBOL, which is kind of scary...but also, IfItAintBrokeDontFixIt, right?},{title:Code,created:20200312152229616,creator:soren,es:confident,modified:20230407031415186,modifier:soren,refexplorer-hide:true,tags:Public Index,type:text/vnd.tiddlywiki,text:Tag about writing software code via various ProgrammingLanguages. Includes issues of logic expression, design, and SoftwareDevelopmentLifeCycle.\n\nNot to be confused with Software, which marks specific pieces of software or software considered from the user perspective.},{title:CodeByItselfIsWorthless,created:20200226204403494,creator:soren,es:confident,modified:20211204003119902,modifier:soren,tags:AgilePhilosophy Code Public Idea,type:text/vnd.tiddlywiki,text:According to a definition I gave with F.I.B.C.|PrivatePerson in UnicornProjectPartOne, a build is what turns code from a bunch of buttons pressed on the keyboard to something that provides actual business value...because you dont get any value at all until youre deployed and your users can use your code. Up until then, youve been pouring an insane amount of money into developing your software with zero return.\n\nIn a related issue, even once code is deployed and runs in the way its intended to, its worthless without proper integration into culture and workflow. The tools are usually the least important part. See WorkflowSupremacy.\n\nAgilePhilosophy declares WorkingSoftware as its very first value. Code being worthless by itself is also a prime reason that the philosophy is based around an IterativeProcess (WorkingSoftware faster and testable), and a prime reason that it succeeds at RespondingToChange.},{title:CodeDataEquivalence,created:20201206043509589,creator:soren,description:Code and data, and the acts of developing and using software, need not and should not be treated as distinct entities.,es:likely,modified:20240317023124009,modifier:soren,tags:Code Sociology Information Public Idea Ontology,type:text/vnd.tiddlywiki,text:The world of computing activities is often divided into “coding” and “using,” and the world of digital content into “code” and “data.” While straightforward and conventional, Id like to engage in a bit of TaxonomySmashing and say these divisions are actually harmful and maybe not even all that natural.\n\nCode is just executable data. Configuration is data that affects the execution of code; code is data that affects the data produced by a computation. Automation is executable documentation|AutomationIsExecutableDocumentation. There is an extremely deep interplay among all of these types of data, and anyone using a computer ought to have control over as many of them as practically possible, because all of them are critical parts of the act of computation (computation: the art of evolving data into a more useful form by producing new data from old).\n\nIn particular, users deserve to participate in the creation of their own systems, using ReflexiveSystemDevelopment. It adds skin in the game and creates the best tools for a particular use case.\n\n\n!! Tyranny of the dichotomy\n\nWhat prevents us from achieving a code-data equivalence in our systems design? We have created a strict dichotomy between code and data by various means:\n\n* The cultural mythology that people are either “developers” or “users,” and the only people who would work with code are these professional developers, who have magical computer-using brains and have studied for decades. Anyone else cannot use “code” because it is too “technical.”\n** This involves both unwillingness of many “technical” people to make “coding” more accessible and unwillingness of “non-technical” people to learn any paradigms that differ from what theyre already used to.\n* The provision of code-signing, walled gardens, and proprietary software that prevents users from having access to tweak code, or even makes it //illegal// to do so.\n* The failure to teach average people what computers are capable of doing, or what one might term //computer literacy// if the term hadnt been taken over. Literacy does not need to involve the ability to use a computer for a specific task, but merely an understanding of how computers work and what they are capable of doing, a demystification of computing and the BasicLearningFoundation to easily get started with whatever computer-related skills they later need or want to pick up.\n** N.B.: This could hardly be more different from “everyone should learn to code.” That popular movement is seemingly targeted at making everyone into a professional software developer using the tools appropriate for that, and it actually perpetuates the idea of programming a computer as a mythical skill distinct from using a computer, possessed only by Smart Computer People; it just purports to turn everyone into one of them. Because that is impractical and probably even useless (if wildly successful, it would just massively depress the wages of software developers and still leave a bunch of people who had spent months or years studying software development without jobs), the movement as is seems doomed to failure. (Maybe this is just what has happened in the popular imagination and not what those pushing the initiative were really after, but at this point the movement seems poisoned.)\n\nPopular computing has turned into something more like TV than anything else: most people use computers as consumption devices, or as SocialMedia access points. They do not use computers to help them think, or even for the most part to evolve data and produce things. This seems incredibly wasteful and sad.\n\n!! References\n\nCollapse the Distinction Between User and Programmer|https://subconscious.substack.com/p/collapse-the-distinction-between, citing Hundertwasser.},{title:CodeMirror,created:20200118024936029,modified:20200728025427444,tags:Meta Software Public,type:text/vnd.tiddlywiki,text:We use the CodeMirror JavaScript web editor to make editing nice and clean in this wiki.\n\n!!! Problems with the Vim keybindings\n\n* <Escape> often gets caught by other things. The worst offenders Ive found are (1) Vimium and similar browser extensions, (2) the TiddlyWiki keymappings themselves (Keyboard Shortcuts section of the control panel), and (3) Vivaldi, which seems to use Escape to jump you out of the selected text field in an un-overridable fashion, which means I have to use Chrome for TiddlyWiki!\n\n* To enable Vim mappings after installing the plugin, you have to set the value of the shadow tiddler $:/config/codemirror/keyMap to vim. Otherwise, you will be astonished|PrincipleOfLeastAstonishment, as nothing different at all will happen!\n\n* In order to get gk and k and the same for j swapped the way I do in standard Vim, so that scrolling up and down works nicely on soft-wrapped source lines, I simply edit the source. If you upgrade the plugin, you might have to redo this, but its pretty obvious what to do. On EmilyComputer, with the NodeJs edition, the file is at /usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/codemirror-keymap-vim/files/keymap/vim.js.},{title:Codenames,created:20230914032004738,modified:20230914032946630,tags:Idea Game Definition Public,type:text/vnd.tiddlywiki},{title:CodeSpaces,created:20200521135522459,modified:20200521194520284,tags:Software Code Public Idea,type:text/vnd.tiddlywiki,text:Potentially groundbreaking tool unveiled by M.|PrivatePerson at MicrosoftBuild2020 (and subsequently used in just about every demo anyone could find a place to put it into, where it //usually// worked). Takes advantage of VisualStudioCodes JavaScript/ElectronFramework-based nature to spin up a complete development environment in a Docker container within a cloud system, so that you can start writing code on any device by simply clicking a `Code` button in a TheGitHub repository. It even syncs your settings.\n\nI am told that it may be coming to AzureDevOps as well in the future and we should “stay tuned,” though this was a side note in the event chat so probably isnt exactly a commitment.},{title:CogIsNotTheCause,created:20200226203443281,es:likely,modified:20210509003719254,tags:PhilosophyOfLife Politics AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:No one person is at fault for an organizational system being broken, and that includes the person who just gave you an unhelpful response and closes your helpdesk ticket after its sat for two weeks (see MsMaxineChambers attempts to get set up in UnicornProjectPartOne). Recognizing this actually makes the whole thing less frustrating, as well as reducing organizational tensions.\n\nIn Maxines case, she gets angry at the dude from helpdesk for closing her ticket at one point (though not to his face) and then later finds out //he doesnt even know what the ticket did// and he was just doing his job as laid out. He certainly was not being //malicious// (see HanlonsRazor). Then she takes him out to lunch, because Maxine takes everyone out to lunch.\n\nBecause of the blame laid on people by this mentality, we often end up in a game of OrganizationalPassTheBuck.},{title:CognitiveBias,created:20200322041500429,creator:soren,es:likely,modified:20211107181517222,modifier:soren,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Situations that our brains parse poorly and cause us to make crappy decisions. Most biases are also difficult to defend against: even when you know theyre a thing, you can still fall victim to them. (See RoguelikeRegret and VocalProblemAttacking.)},{title:CognitiveSearch,created:20200602141624795,es:confident,modified:20210511011141367,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:CognitiveSearch is a general-purpose MachineLearning search and data-processing tool by M.|PrivatePerson thats intended to be usable by people without experience in the math and data science involved. It has a sort of LowCode-style DeclarativeProgramming setup.\n\nSeems like a useful way to create a helpful (read: not terrible) search over large amounts of proprietary data.\n\nAn overview of the tool was presented in CognitiveSearch20200520.},{title:CognitiveSearch20200520,at:202005201600,caption:Cognitive Search: The pocket-knife for knowledge mining,created:20200520160130649,medium:video,modified:20210522015801822,presenter:MrLuisCabrera,tags:MicrosoftBuild2020 Source Information Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/e35f1659-e98c-4824-ba9a-422fcfcf04c6,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nSession on M.|PrivatePersons CognitiveSearch.\n\n* Offerings include:\n** Spelling corrections\n** Suggestions/auto-complete\n** Filters and facets\n** Ranking\n** Geospatial queries\n** Paging\n** Snippets and highlights\n\n* Ingest -> Enrich -> Explore\n** Ingestion: “Document cracking” -- getting content of document in a searchable form\n** “Extensible enrichment pipeline” -- a sequence of “skills” forming a “skillset” that can structure or add information to the content\n*** Examples:\n**** Key phrase extraction\n**** Location extraction\n**** Face detection\n**** OCR\n**** PII masking\n**** Azure ML integration\n**** Etc.\n**** Can add custom ones as well\n*** Now understands dependencies so it doesnt have to run steps that only feed into components that dont apply to some documents\n*** Defined declaratively as a JSON file\n*** A debugger for the pipeline has recently been introduced\n**** View a graphical representation of the pipeline, fix issues, and commit them back to SourceControl\n*** Can “project” parts of the resulting documents into the Knowledge Store as tables, files, or structured data, starting in June. Will be available from services like PowerBi and Azure ML from there.\n\n* Security\n** Encrypted at rest\n** Options for connecting via VNet, etc.\n** Managed Identities and Service Tags available for keeping the sources secure as well.\n*** Managed Identity creates an Azure AD user that you can then add to your data source, eliminating the need for you to store or deal with credentials.\n\n* Q&A:\n** BM25 similarity algorithm yielding more relevant results -- rolling out publicly in July\n** SDKs under development for popular languages (.NET, Java, Python, JavaScript)\n** Be careful to set the language your documents are in...relevance suffers immensely if it has to fall back to the general-purpose algorithm.\n\nOn-demand learning on ACS: https://channel9.msdn.com/Search?termbuild2020%20knowledgemining&lang-entrue},{title:CoherentPhilosophyOfLife,created:20210916134314577,creator:soren,description:To avoid wasting or regretting ones life, one should seek appropriate terminal values for oneself and develop a strategy for attaining them.,es:confident,modified:20220527135618044,modifier:soren,tags:Idea PhilosophyOfLife Identity Public,type:text/vnd.tiddlywiki,text:According to MrWilliamIrvine in GuideToTheGoodLife2009, most people dont have a coherent philosophy of life. By this, Irvine means that (1) you understand your terminal values|SevenfoldWhy and associated goals -- what you want to get out of life, more or less -- and (2) you have an effective strategy for attaining those goals. He believes that Stoicism both suggests sensible terminal values (namely virtue and tranquility) which you might choose to accept in the absence of other preferences, and offers a highly effective, if thoroughly forgotten and misunderstood, strategy for achieving them; but there are many other coherent philosophies of life which may be better for some people.\n\nThe world has more or less forgotten about the idea of philosophies of life, which is perhaps odd. The closest thing we now have are religions|Religion. These teach people what to do to be good, moral people (to someones standard), why they exist|WhyWeAreReal and what their place in the cosmos is, and what can or will happen to them after they die|FearOfDeath. But they dont, for the most part, explain what makes a good life on earth, or what ones purpose in living|PersonalMotto should be. (Irvine claims, probably accurately, that even when religions do propose such things, they tend to be framed more as suggestions than obligations or directives, so most people will simply ignore them.) Only a small number of adherents of any religion will devote their whole life to it -- helping the poor on the ground, becoming a priest, etc. -- so everyone who isnt called to such a life still needs more guidance. And a growing number of people now have no religion at all, which leaves them without even this small amount of prefabricated guidance: they have to find or make their own somewhere else.\n\nLacking a philosophy of life is a big deal, because it means you have a high likelihood of reaching the end of your life and realizing that youve wasted it doing something you consider meaningless.\n\nThere is almost certainly no single philosophy of life that makes sense for everyone|ThingsArentGoodForEveryone, and many peoples will be contradictory. Yours might even change over the course of your life. This is okay; the world would be a boring place if everyone wanted the same things|IndividualDistinctionIsIndividualValue! But this doesnt diminish the need to discover what yours is – in fact, it augments it, because it means if you just pick one at random without thinking about it, theres no reason to believe it will be any good for you.},{title:CoinFlipClarity,created:20200324030215668,creator:soren,es:confident,modified:20240305192128091,modifier:soren,tags:Creativity Psychology Public Idea,type:text/vnd.tiddlywiki,text:Method for making difficult decisions and identifying your preferred course of action when you probably have all the information you need but it isnt consciously available (see AnalysisParalysis). Pull out a coin and call the result, and ask yourself if youre wishing for a particular result. If not, flip it and see if you like or dislike the result.\n\nUsually at this point you realize that youre subtly rooting for a particular result, or that you like or dislike the result of the flip, and there you have your decision. If you find you really dont have an opinion, then it probably doesnt matter much and you can run with your random choice!\n\nCf. SurpriseMe, SevenfoldWhy, WeightedAnalysis.},{title:ColdWar,created:20200322031757630,creator:soren,modified:20201204041546510,modifier:soren,tags:History Politics Definition Public Idea,type:text/vnd.tiddlywiki,text:Period of American history between WorldWarTwo and the fall of TheSovietUnion in 1991.},{title:ColdwaterSprings,created:20250623173852991,creator:soren,modified:20250623173853791,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Colitas,created:20250623173846989,creator:soren,modified:20250623173847791,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Collectors,author:Philip Pullman,caption:The Collectors,created:20201201025518945,creator:soren,medium:story,modified:20221002152826469,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:“The Collectors” is a gap-filler short story by MrPhilipPullman as part of the HisDarkMaterials universe, almost entirely outside the normal story arc. Primary genre is a ghost story. MsMarisaCoulter is involved in the frame story told by the men in the narrative present, easily identified by the golden monkey, and a statuette of the monkey is bought by one. Then spooky things happen and one of the men dies under suspicious circumstances, as has befallen almost everyone whos come into contact with it.\n\nIrritatingly if youre a book collector (pun intended by Pullman?), this was only available as an eBook on Amazon for many years. It was finally released in hardback in late 2022, so now I have that one too.},{title:ColorblindPerson,created:20201202230549569,creator:soren,description:I am red-green colorblind.,es:confident,hideorphan:true,modified:20210917141247887,modifier:soren,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}} (Protanopic/red-weak, fairly bad.) My color boundaries are significantly different from other peoples, but only in certain regions, so that people can go for years without realizing they differ until the one time we peg something as a different color and suddenly cant communicate properly.\n\nMore details on what this is like in practice.|ExperienceOfColorblindness},{title:Colorization,created:20200116030259066,creator:soren,description:Certain concepts or objects are strongly and arbitrarily associated with certain colors in my mind.,es:personal,modified:20240601140824692,modifier:soren,tags:SorenConcept Public MyUnusualMentalExperience Idea,type:text/vnd.tiddlywiki,text:Colorization is my term for a mental phenomenon I have|MyUnusualMentalExperience, where colors become associated with objects or, more commonly, concepts. If we consider it \synesthesia,\ its extremely mild; I never see things that color in my visual field when they dont otherwise have a color, and I dont even always think of it when I think of the object/concept, although sometimes I do. If I try to characterize that thing or think of a color to associate with it, its always going to be that color, though.\n\nI have no idea how it develops. Sometimes I notice that something has taken on a color; its at that point that I usually start exploring nearby and similar things (say, other languages). These often can get assigned colors as well, but its a bit more artificial since I have to think about what color they \are.\ Its still not an arbitrary thing, though.\n\nI do find it ironic that Im color-blind|ColorblindPerson and have this phenomenon. Although, theres rarely any interference where Im not sure what color something is; for the most part these colors are very well-defined specimens of their color for me. The one exception in the example lists below is Latin (and Italian), which I could call either a neon green or a yellow -- but thats just because those colors basically //are// the same to me.\n\nFor //people// who are colorized, I often associate a combination of red and white. No other color ever forms a combination like this.\n\n!! Examples\n\n!!! Languages\n\n* \u003C\u003Ccolorsplotch #5C5CFF>> English: A dark blue, perhaps a recycling-bin blue.\n* \u003C\u003Ccolorsplotch red>> German: Fully saturated red.\n* \u003C\u003Ccolorsplotch #8686ff>> French: A sky blue.\n* \u003C\u003Ccolorsplotch #136413>> Spanish: Forest green.\n* \u003C\u003Ccolorsplotch #ffe800>> Latin: Bright yellow or green.\n* \u003C\u003Ccolorsplotch #ffe800>> Italian: Same as Latin.\n* \u003C\u003Ccolorsplotch red>> \u003C\u003Ccolorsplotch white>> Greek: Red or white.\n* \u003C\u003Ccolorsplotch white>> Asian languages: White.\n* \u003C\u003Ccolorsplotch #e300e3>> Norwegian: Purple.\n* \u003C\u003Ccolorsplotch #ffe800>> Swedish: Yellow.\n* \u003C\u003Ccolorsplotch white>> Esperanto: White.\n* \u003C\u003Ccolorsplotch #ffe800>> Lojban: Yellow.\n\nI dont notice this color when I read or hear the language or anything; I have to think about or categorize them. Also, if theres an associated country, I would prefer it to be that color on a map, and would certainly pick that one if I were coloring it.\n\n!!! Gender\n\n* \u003C\u003Ccolorsplotch #8686ff>> Female: Blue.\n* \u003C\u003Ccolorsplotch red>> Male: Red. (But not as clear as above.)\n\nNote this doesnt match the overtly associated colors in my culture!\n\n!!! Latin declensions\n\n* \u003C\u003Ccolorsplotch red>> First: Red.\n* \u003C\u003Ccolorsplotch white>> Second: White.\n* \u003C\u003Ccolorsplotch #c0c0c0>> Third: Silver.\n* \u003C\u003Ccolorsplotch #136413>> Fourth: Forest green. (I think. This is the least clear one.)\n* \u003C\u003Ccolorsplotch #900090>> Fifth: Royal purple.\n\nI think these have some relationship to their sounds -- I dont pretend to understand or explain how color and sound can be related, as thats certainly not part of my normal experience. But there seems to be some subconscious connection.\n\n!!! Days of the week\n\n* \u003C\u003Ccolorsplotch #800000>> Monday: maroon\n* \u003C\u003Ccolorsplotch green>> Tuesday: green\n* \u003C\u003Ccolorsplotch #ff0f00>> Wednesday: bright red\n* Thursday: ?\n* \u003C\u003Ccolorsplotch #ffe800>> Friday: yellow\n* \u003C\u003Ccolorsplotch white>> Saturday: white\n* Sunday: ?\n\n!!! Personal names\n\n* \u003C\u003Ccolorsplotch red>> Maggie: red (brought this category to my conscious awareness)\n* \u003C\u003Ccolorsplotch #ffe800>> John: yellow\n* \u003C\u003Ccolorsplotch gray>> Greg: gray\n\n{{Colorization/p||PrivateChunk}}\n\n{{Colorization/p2||PrivateChunk}}\n\n\n!! Other notes\n\n* Sometimes characters in books who I dont see or know much about gain clear colors (probably in some way related to the “Personal names” category?). This makes some sense; its presumably an attempt to give them something concrete for my imagination to latch onto and keep track of them.\n* I havent noticed any orange, for whatever reason. Its kind of an oddball color.\n\n{{$:/sib/Templates/Topical/MaudWikiImport}}},{title:ColumbiaRiverGorge,created:20250621164632398,creator:soren,modified:20250621164633266,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ColumbusOhio,created:20200511022045426,creator:soren,modified:20240509112050642,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CommittingToMinneapolis,created:20231022210016720,creator:soren,description:I love Minneapolis, in the deep sense of that word, and I want to stay here; what now?,es:personal,modified:20240305184105815,modifier:soren,tags:Idea Frozen Cities LifeDirection Public,type:text/vnd.tiddlywiki,text:Ive been commenting to anyone who will listen lately that I really like Minneapolis and I dont understand why. (I like Minnesota in general, especially when Im out in nature, but I think I particularly like Minneapolis.) It feels like home to me in a way that nowhere else Ive lived has. Being out in the city reliably makes me happy. And I remember remarking just a few weeks after arriving that it already felt like home. Now Im almost two years in.\n\nI still want to try to explain it. But I also had the realization a couple of days ago that maybe this is IrreducibleWoo. Considering PeoplePlaceMission, can we compare this situation to loving a person? In light of this comparison, the whole task almost seems a little bit odd. Like would I need to explain why I, say, love my mother|PrivatePerson, or my best friend C.S.|PrivatePerson? I can give a list of things that I like about either of them, which is probably a useful exercise for multiple reasons.\u003C\u003Cfnote \I actually have a “Things I like about” section on a lot of my person tiddlers here.\>> But ultimately it isnt getting at the root of the love.\n\nSince it seems almost axiomatic that one loves ones mother unless she is an astoundingly terrible person (maybe to ones detriment in some cases!), lets look at C.S.|PrivatePerson here, who I chose of my own accord out of hundreds of people around me I had no particular ties to; thatll be a fairer comparison. If I say I love C.S.|PrivatePerson because they have an inimitable spirit, and make me feel delightfully extraverted when I hang out with them, and we share all these weird experiences, and they have such young-soul energy which counterbalances me so well, and theyre the first person Ive been able to meet some emotional needs I didnt even know I had before with, well, thats all true, but it doesnt get to the bottom of it. Indeed, it feels like it still doesnt have any explanatory power at all! Its like those psychology studies where we find people just make up stories about how they know something that have nothing to do with the real truth -- except here it is completely transparent that thats whats going on. Also, I feel like if all of those true facts somehow became false overnight, I would //still// love C.S.|PrivatePerson. That might plausibly not actually be true in such a hypothetical world, but it feels to me like it would be nevertheless, and the irrationality of that belief is in fact an argument for this being irreducible woo. (See also FriendshipDefined.)\n\nSo, all that is to say, maybe I just love this place and thats the end of it, and its OK that thats the end of it. Statements about things I love about it are useful, but they are not explanations, and trying to use them as explanations is a category error.\n\nBut if it is true that I love this place, I think I should marry it. I want to dive in and learn everything about it, learn to love every part of it, and make it hard to change my mind, or even to want to change my mind.\n\nA quick gut check: The TwinCities arent perfect, of course. But theyre really pretty good on an absolute scale, according to the statistics, as far as the US goes (except for the pesky climate, but you know what, even that isnt so bad; a big slice of the year is gorgeous, and I like //some// winter, I just wish it were two months instead of four months). To continue the person comparison, I feel this is just like a human relationship, where you are inevitably choosing a particular set of UnresolvableProblems to live with. Its all very fine to criticize these problems, especially when you love a place and want it to be better, but its also not at all clear to me that any specific set of unresolvable problems could be any better overall here, and I feel confident from experience that I, personally, handle this set of unresolvable problems pretty well. This feels quite different from the Federated/Owatonna situation, where I left because I thought|ConvinceMeToStay there were obviously better opportunities elsewhere even though the situation I found myself in was pretty good; its plausible I could find a slightly better situation elsewhere now, but its also entirely plausible I could spend years of my life floating from place to place hoping the next one was better, maybe even without improving at all in the end -- meanwhile missing out on the ability to make the commitments|LongFriends that make a good life good. Its better to say you know what, this is about as good as I expect to get|Satisficing, and even though there probably is a better place somewhere else, its not worth trying to find it, because making a serious commitment here and now improves this place, and investing earlier is worth more in total. The exploration phase is over, the optimization phase is on. And the metro is big enough that I can change and need and want significantly different things without needing to look elsewhere. It can grow with me.\n\nAt this point, Id leave the TwinCities if I got an unsolicited, truly amazingly awesome, job offer somewhere else that I couldnt reasonably refuse or negotiate to remote, or if I fell in love with someone who had no choice but to go somewhere else for their own reasons,\u003C\u003Cfnote \This is a pretty fair dealbreaker; its about the kind of life you want for yourself, just like having kids. So Im absolutely going to try to avoid getting attached to people who know this, and I already swipe left on people who say openly that they want to move, but sometimes the universe just gives you a kick in the side of the head and theres nothing you can do about it.\>> or of course if the city somehow became vastly less livable (for me or for everyone). Otherwise...I think I want to be here for the rest of my life. I dont know what 30 years from now will hold, so I am not going to claim to know that, but I am going to confidently say that I do not foresee anything changing my mind. Ive never lived in a place where I felt that before; its always felt, at best, like I was a guest who might with a small chance decide to stay for a long while. So this is a little bold and scary, but its worth it.\n\n------\n\nThe question is, then, what form does my commitment take? A few things off the top of my head:\n\n* (Done) Ive been thinking for a while that I should get a 612 phone number. People dont really care about this anymore, and its kind of a pain to change your number, but its for precisely those reasons that I think its a useful symbolic move. It says, Ive thought about this, and Im pretty sure Im going to be here for a long time, and its worth going through the bother for a totally minor thing to feel like I completely fit. And maybe almost like Ive always been here.\n* (Done) I should own my home here. Im not sure yet if this makes financial sense, or even entirely flexibility sense, but it would help a lot psychologically in making me feel like I dont just belong here, but I accept that fact and am offering something in return.\u003C\u003Cfnote \The place/person comparison might fall apart here a bit because you cant give back to a place in quite the same way that you can to a person. Obviously you can contribute to its improvement and its community, but its not nearly as reciprocal.\>> (See also Alexanders|APatternLanguage1977 “Your Own Home.”) Perhaps Murphys Law says that if I buy a home, the next day Im going to meet someone I fall in love with and want to move in with somewhere else, but you know what, Id take that trade! I dont want a traditional house at this stage in my life,\u003C\u003Cfnote \Actually, as a single person living alone I actively like apartment living. It makes more sense to be near other people. As long as your neighbors arent complete assholes, but everyone here is nice and reasonably quiet. I dont think thats usually a terrible problem in Minnesota if you pick the right place.\>> but I would go for a condo or co-op if I found the right one, or some more unusual arrangement. I think there are good options here, and Ill be casually looking and learning and thinking.\n* Maybe I really should get a cat (Ive been thinking idly about this for a while). This ties me down a bit, but thats the point. And I mean, I like them. \n* I should tell my friends Im staying. C.S.|PrivatePerson and I have talked about this and committed to being here with each other as best we can without making claims about the future we cant back up. I should do this with more people. It commits me to staying and it lets them know they can count on me to stay.\n* And, on that note, I should make more friends. Its worth investing very seriously in relationships when you know youre going to be around for the long haul. Ideally, I have a conversation about my plans early on and work more seriously on relationships with people who have the same plans.\n* I should get to know every part of the city and its surroundings as well as possible. Memorize the street layout, go to every restaurant, walk around every neighborhood, and so on. This is a huge project but its worth it. I will not run out of novelty -- the city changes, thats why its a human-centered place worth being -- but when you know the old stuff, the new stuff is more exciting and meaningful.\n* And I should learn more history, and talk about this with more people who have been here for a long time. Maybe write some of that down. Make flashcards.\n* (Done, but continuing) I should talk publicly about this. Ill write something up.\n\n{{CommittingToMinneapolis/p||PrivateChunk}}\n\nIts funny to note that part of committing for me here is, ironically, getting to know a greater variety of new places and social contexts in the city. Because that helps me find my favorite things and discover myself, it will help me feel even more rooted.\n\nA particular thing worth exploring before deciding exactly how best to target my commitment is exactly which neighborhood is my home|Minneapolis2024HousingSearch. I do love the Wedge|LowryHillEast, but I also really like downtown energy lately (though I worry I would get tired of it; living near downtown and going there often is also a good option). Should I live closer in for a year? Or try to do a couple short-term rentals to experience other areas, popping back to my real apartment occasionally? I feel like the area between downtown and Lake Street and west of I-35W is my area, but thats still a fairly wide range. And I guess I havent that seriously considered the east bank. I think thats not my kind of walkable urban space, but Id like to be more confident Im not ruling that out wrongly. And theres always near north, too, which is also cheap. Hmm.},{title:CommonKnowledge,created:20221218031929926,creator:soren,description:When all parties not only know something, but recursively know the others also know it.,es:likely,modified:20230922033534296,modifier:soren,reviewed:20230711,tags:Idea Definition Sociology InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:Useful technical definition: something is common knowledge if two or more parties not only know a fact, but also know //all other parties know they know it//, and that all other parties know they know they know it, and so on to infinity.\n\nCommon knowledge has important implications for various social situations, both in terms of cognition and appropriate behavior; there are often actions you can only safely take if youre sure not only that both you and some other person know something, but that they also know you know it.\n\nEntertaining read: It Was You Who Made My Blue Eyes Blue|https://slatestarcodex.com/2015/10/15/it-was-you-who-made-my-blue-eyes-blue/: fiction takeoff on the puzzle of an island society where if you learn your eye color, you are religiously required to kill yourself, and people gradually are forced to discover through logic involving common knowledge that they have blue eyes.},{title:CommonPlace,created:20200122031359825,es:confident,modified:20201203005145607,tags:RecordsProject Reading Public Idea,type:text/vnd.tiddlywiki,text:A commonplace book is an old concept used to store notes collected from reading. Its a BeautifulMess of quotations and commentary on them, generally in no particular order except the order you wrote them in.\n\nHighly useful before the internet and critical to serious scholarship and thinking before the rise of good libraries, but still useful today. RandomThoughts is a modern-day commonplace book of sorts.\n\nZettelKasten is related, but far more structured, and focused on paraphrase with quotations as an occasional aside (a commonplace generally focuses on quotations with the readers words as an occasional aside).\n\nTODO: Have a look at that Greer article, might be worth squeezing some of that in too.},{title:CommonPurpose,created:20200225031905750,creator:soren,es:confident,modified:20250201145119798,modifier:soren,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Groups are defined by a common purpose. This could be really transcendent or really mundane, but groups do not form without some kind of purpose. Maybe a common identity, or a task that lies before you, or as I spoke of in MyWhatWillCasandraRemember, the fact that you happen to be sitting on a train together and need to pass the time:\n\n> But of course I know that we would never be friends if it were not for all the coincidences that brought us here, and that our connection is based entirely on that serendipitous proximity and the fact that we happen to be sitting inside a big, enormously expensive hunk of metal hurtling towards our destination at sixty-five miles an hour and judge that we have nothing better to do than talk to one another, to engage in the fine tradition of the oldest and simplest and yet most powerful and versatile and inexhaustible form of social entertainment there is.\n\nGroups often forget or stray from their common purpose because of the GroupIntraEnemy effect, which helps to split groups apart over time.\n\nEven groups of two need to find a common purpose. Some of the worst arguments are caused by people not sharing a common purpose; the way to fix this is to realize that youre arguing because you are trying to achieve or talk about different things, then collaborate to create one that satisfies both of you. (Occasionally this is impossible, and the issue is unresolvable. This is, however, rare.)},{title:CommonSense,created:20200224183903383,es:likely,modified:20210509003902713,reviewed:20230914,tags:Reasoning Psychology Definition Public Idea,type:text/vnd.tiddlywiki,text:An attractive notion, but in the end mostly not a thing. See NoSuchThingAsCommonSense.},{title:CommunicatingWithSlipBoxes,bibliography:Zettelkasten,caption:Communicating with Slip Boxes: An Empirical Account,created:20200831012543531,description:Description of the subjective experience of having a ZettelKasten after many years by the originator MrNiklasLuhmann himself. Gets to feel like conversation, full of surprises, according to him.,medium:article,modified:20210616165636203,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://luhmann.surge.sh/communicating-with-slip-boxes,year:2020,text:Translation of a fascinating short sociological article by MrNiklasLuhmann on the way in which a full ZettelKasten can act like a conversation partner by providing ConversationalDifference. Almost has a whiff of ImaginaryFriend in there.},{title:CommunitiesDestroyedByScale,created:20210728005446499,creator:soren,description:Online communities are naturally pulled apart and ruined when they grow too large.,es:likely,modified:20240109030933453,modifier:soren,tags:InternetTheory SocialMedia Public Idea,type:text/vnd.tiddlywiki,text:If youre part of any online communities at all, or ever have been, from social networks to obscure Discord groups, which were or are your favorites? What did you like about them?\n\nDid you say you really loved, say, Twitter|TheTwitter? Sure, its //useful//, and it keeps you connected, and all that, but is it your favorite? Do you enjoy it? Now what about that obscure Discord group?\n\nCommunities are really formed from small groups of people who are interested in similar topics. Trying to pull //everyone// in the world into one community is silly. It reduces the community to average|TyrannyOfAverages, making most of the discourse uninteresting, the norms lowest-common-denominator, the governance impossible except by administrative fiat. Expressing unpopular opinions (not just unpopular among the people who are interested in them, unpopular among the whole population, because everyones in the community and can participate!) will get you flamed because people who dont know you will show up and react and share, creating a feedback loop. Familiarity breeds safety.\n\nThe Internet and most software for the purpose of creating online communities is not designed to foster these small groups. Because everyone //can// participate, we assume that everyone //should// participate (see EnablerAndDemander), so we make it open. The AOL users can just flood right in as in the EternalSeptember, make the community too large, and destroy its norms. Theyre not acting maliciously -- communities designed on a human scale just dont respond well to these pressures. Theyre designed to change slowly. Physical communities moderate themselves, maintaining a stable equilibrium with occasional raging conflicts that result in incremental changes. Internet communities naturally consist of raging conflicts; they have to be kept in shape by force and artificial barriers to be useful. And we often dont do that: just look at your social media feed in 2021.\n\nWhat we should get out of the Internet is the ability to incrementally improve on physical communities by removing the need for physical co-location. Nowadays useful and meaningful communities can be formed from people sharing far less common interests. Even if there are only five hundred people in the world interested in something, they can quickly and easily talk to each other at no cost. The Internet serves to help them find each other, which would have been nigh on impossible before.\n\nActually, the communities with rare interests are lucky. Except for the occasional troll who drifts in and finds the topic weird, they naturally moderate because there arent enough people interested to create a problem. The more mainstream systems need to erect artificial barriers to participation; see OnlineCommunityLessons. Communities should AvoidScale.\n\n(Arguably, forms of social organization that have thousands of people arent meaningfully //communities// at all. They have almost nothing in common with small ones where people all know and care about each other.)},{title:CommunityOfPractice,created:20200326210428480,es:confident,modified:20240721045531434,tags:InterpersonalRelations ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:A community of practice, in the context of a ScrumMethodology-focused organization, is a self-organizing group of people who share some common interest and meet periodically to exchange ideas or tackle problems related to this interest. The \interest\ may be a topic (e.g., software testing) or a current problem in the organization.\n\nCommunities of practice should involve a recurring cadence if possible, and people should not hesitate to disband them if there is no longer interest or the problem they target is no longer relevant. Nothing kills interest in communities of practice faster than zombie communities that people feel pressured to continue participating in.\n\nF.I.B.C.|PrivatePerson is probably the closest thing to a ~CoP that Ive participated in. It has been suggested by a few folks I know that a spaced-repetition or card-creation ~CoP would be valuable.\n\nCf. CenterOfExcellence.},{title:CompanyIsAProduct,created:20210810184308846,creator:soren,es:confident,modified:20231201033231305,modifier:soren,tags:Idea LifeDirection Productivity Process AgilePhilosophy Public,type:text/vnd.tiddlywiki,text:Idea from CrazyAtWork2018: you should treat your company itself (people, processes, tools, etc.) like its a product which you can analyze and improve. Improving your company is just as important as – or maybe more important than|ImprovementOfDailyWork – improving its products, because a good company acts as a force multiplier for the product. Often we know the tools and attitudes that help us improve a product, but fail to apply them on the meta-level. \n\nThis extends to individuals as well as companies: e.g., figure out whats not working well about yourself and fix it|LifeDebugging.},{title:ComplainFirst,created:20210126204533044,creator:soren,description:Complaining is OK so long as you dont get hung up on it: its the first step in making something better.,es:likely,modified:20220728220443027,modifier:soren,tags:Public InterpersonalRelations Imagination Sociology Politics Idea,type:text/vnd.tiddlywiki,text:The first step of ContinuousImprovement is noticing something that stinks, and then letting someone who can improve it know about it (that might be yourself, your partner, your coworker, or a multinational company).\n\nThese steps are often the //hardest part// of improvement, just like identifying the bug is is the hardest part of Debugging. Fixing the bug is usually straightforward. So its odd that complaining is often seen so negatively, including by me. Certainly, complaining about something repeatedly when //you// are the one who can improve it is maladaptive and annoying, but you still have to bring it up the first time. And complaining to someone else, as long as it isnt done in a whiny or entitled|UniverseDoesntOweUsAnything way, is how you make the world better.\n\nIdeally, you can present a solution when you complain|PresentingProblemsWithoutAnswers, but even if you cant, thats OK.\n\n\n!! References\n\n> They say if you dont vote you cant complain. Theyre wrong. Complaining is prior to voting. It is deeper and more powerful than voting. It is the original act of politics.\n> ---TheReason article on why you should focus less on politics (\u003C\u003Crt 11397>>)\n\n\u003C\u003Cclarify>>\n\n> I like complaining about stuff I can control but dont.\n> ---H.|PrivatePerson, \u003C\u003Crt 1463>>},{title:Complection,created:20200410160940663,creator:soren,es:confident,modified:20211107180418711,modifier:soren,tags:Information Code Metaphor Public Idea,type:text/vnd.tiddlywiki,text:Concept due to MrRichHickey, creator of Clojure (the word is an archaic form borrowed for its ability to add a new connotation; but its the same things as \complex\ etymologically). Complection is when parts of your program get twisted together so that they rely on each other, in violation of principles of abstraction (cf. DefinedInterfaces).\n\nFunctionalProgramming is presented as the solution, as always.},{title:CompleteIntegration,created:20200322003011175,creator:soren,es:likely,modified:20210509012503072,modifier:soren,tags:Software Systems Public Idea,type:text/vnd.tiddlywiki,text:A largely mythical type of software system that contains all relevant data and functionality.\n\nThe alleged benefit is that you never need to integrate it with other software or manually copy data between systems, and you get all kinds of nice linking of information. \n\nThe downside is that the system never exists. If you do find a system that can actually contain and link all the relevant information -- which is uncommon in itself; once you think youve found everything you usually end up spotting something else youd like -- it typically performs some functions poorly compared to purpose-built software, often so poorly that you end up having to break out into different systems again.\n\nTheApple does have a //good// completely integrated system for the average home technology user. Not a //great// one, but its good enough that it can be pretty seductive and even appropriate|AppropriateTechnology in many situations.\n\nA loosely federated system like that espoused by the UnixPhilosophy is most likely the best solution, and the antifragile|AntiFragility one.\n\nHaving to occasionally transfer between two systems, even manually, is generally OK. Once you get any more, though, some kind of integration is more or less required to avoid extreme frustration; this is the RuleOfTwo.},{title:CompleteRewrite,created:20200223145550180,es:possible,modified:20210509010012525,tags:Code Design Public Idea,type:text/vnd.tiddlywiki,text:A much-too-common impulse in software.\n\nProbably sometimes necessary (e.g., when the system is written in COBOL on a mainframe and you want to take advantage of more modern infrastructure), but often leaped to unnecessarily. A complete rewrite gives the opportunity for design changes, but it also means rewriting things that //already work// just fine. The existing software probably has years of experience and bugfixes behind it, and youll be throwing most of that away in a rewrite.\n\nAlso, because especially in business you often cant push a new tool that has the same functionality as an existing one until it replicates //all// of that functionality, doing a complete rewrite can force a WaterfallMethodology project when it isnt a wise project-management move.\n\nI have seen it argued (e.g., by MrJoelSpolsky in ThingsYouShouldNeverDo20000406, on this very topic) that people are driven to rewrite things because its easier and more fun to create new products than slog through fixing existing ones.},{title:CompleteTagging,created:20200304020936083,creator:soren,es:likely,modified:20240227180756851,modifier:soren,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:When creating an index or a tag-based system, for instance with tags in a ZettelKasten, its tempting to always tag everything that could be conceivably related to a topic with that tag. However, this tends to be counterproductive:\n\n* It becomes difficult to keep track of which items are supposed to be in which tags, as you tend to inflate the number of tags.\n* It becomes difficult to usefully browse the tags or find relevant indexed entries, because there are hundreds of instances.\n* The tags start to feel less “crisp.” This is a subjective issue, but a serious one; they start to feel primarily like a chore you carry out in order to Keep Organized rather than a useful feature of the system.\n* In the case where youre trying to create serendipity|ThreeFunctionsOfNotes through your index, having to “get concrete faster” (as HowToTakeSmartNotes describes it) may help you spot connections because youll have to navigate through a related idea or two rather than landing directly on the single idea you were looking for.\n\nIn general, PerfectionIsSubtractive in indexes as in other areas of life: the fewer references the better, provided they are selected well. Also related, if more specific, is FriendsVsTripAdvisor, in which we note that having fewer recommendations curated by a human whose tastes are similar to your own often works out better than having an enormous public list of even fairly well-prioritized recommendations.\n\nI have not integrated this idea well into my ZettelkastenProcess yet. I decided to start with something close to complete tagging when the system was small, with the idea that Id figure out what approach felt best as it grew once I had some material to play with, and its now at the point where I can start doing that and I havent yet gotten around to it.\n\nAn obstacle to using tags or index references more sparsely is that it feels like youre going to lose track of items when you start removing them from your index, or not adding them there in the first place. Tags make people feel like things are organized and findable, even if they almost never actually use them that way (this is related to StructureAnxiety). Effective ways to get rid of this anxiety are an OpenQuestion for me.\n\nOne powerful system for managing large indexes or tags is to add sub-indexes. I first encountered this idea in MrLionKimbros MindHacker entry “Write Magnificent Notes|MindHacker/WriteMagnificentNotes,” and its also suggested by the popular notion of Index tiddlers in a ZettelKasten system. For instance, you might have an index on a specific book, or theme within a book, or project. You can have some top-level items that will get you to these smaller indexes if you forget they exist, and then do most of the work down there; then you can be more detailed without cluttering up the larger index, and more concise without later confusing yourself about what context the entries were intended in.\n\n!! References\n\nHowToTakeSmartNotes, pp. 109--10.},{title:CompleteThoughtMapping2003,bibliography:Zettelkasten,caption:How to Make a Complete Map of Every Thought You Think,created:20200323114001269,creator:soren,description:A book by MrLionKimbro about using a series of three-ring binders to take notes on and organize all your thoughts. Focuses on mind-maps, hierarchical subject divisions, and indexes as the organizing principles.,format:ebook,medium:book,modified:20220107010854744,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://users.speakeasy.net/~lion/nb/book.pdf,year:2003,text:{{!!caption}} -- a book by MrLionKimbro about using a series of three-ring binders to take notes on and organize all your thoughts. Focuses on mind-maps, hierarchical subject divisions, and indexes as the organizing principles. Very stream-of-consciousness, so some people cant stand it, and doesnt do the hierarchy-busting I personally think is critical to an effective system of this type, but full of fascinating ideas nonetheless, and its important to see those contrasting hierarchical opinions to clarify ones beliefs that theyre not the right way to go.\n\nIts worth noting that Kimbro doesnt use this system anymore, it was one of many (probably still ongoing) experiments from which hes taken the best parts.\n\nReferred here, once upon a time, by MindHacker. Also mentioned by LessWrongZettelkastenMethod, the only other place Ive ever seen it linked.},{title:ComplexNotesSystemsOk,created:20221113043539375,creator:soren,description:Its reasonable to choose a complex system with lower expected longevity for your permanent notes, so long as you do so intentionally.,es:likely,modified:20221113044632209,modifier:soren,tags:Public Idea PersonalDocumentation Productivity Systems,type:text/vnd.tiddlywiki,text:Sometimes people say that you should avoid using any system except $SIMPLE_THING to manage your permanent notes (ZettelKasten, journal, etc.; $SIMPLE_THING is typically a PlainTextFile, a handwritten notebook, a MicrosoftWord document, or something similar), because other tools might not last. This seems wrong to me.\n\nOf course, //ceteris paribus//, a simpler system|PerfectionIsSubtractive that will stay around longer is better; there are fewer things to go wrong and less effort will be required to keep it up to date. Im a big fan of plain-text files when they make sense! But presumably people usually choose organizational systems that have lower expected longevity|LindyEffect because they provide some advantage over the more established systems. Saying that you should not use these systems because they might not be available forever seems to me rather like saying that you should never get into a friendship or a romantic relationship because it might end eventually. That something might end does not necessarily make it not worth doing, even when the ending could be very painful! (See also PermanenceUnnecessary.)\n\nFurthermore, unlike with human relationships, unless youve chosen a system that intentionally creates VendorLockin (which is quite rare in this field, because people wont stand for it), you can ordinarily migrate your notes to a new system if your current one goes under. This might be a pain, and you might lose a few details specific to that system, but ultimately youre just not going to lose all your notes this way.\n\nDont get me wrong, I think you should do the CostBenefitAnalysis and seriously consider whether what youre gaining is worth the expected value of the time, effort, and reduction in fidelity that will be lost if you have to migrate in the future. (See A Complete Definition of Badness|https://controlaltbackspace.org/doesnt-work/.) But I dont think its clear that simple systems always win.},{title:ComputerStupidities,caption:Computer Stupidities,created:20200326024800231,medium:website,modified:20200808142622766,tags:PersonalMythology Humor Source Public,type:text/vnd.tiddlywiki,text:Giant collection of old and often hilariously funny computer anecdotes. A big part of my PersonalMythology.\n\nhttp://rinkworks.com/stupid/},{title:ComputingCitizen,created:20200410163655439,creator:soren,es:likely,modified:20210511010755518,modifier:soren,tags:TheControlAltBackspace Business Politics Sociology Software Public Idea,type:text/vnd.tiddlywiki,text:Concept of MsJoyLisiRankin as outlined in PeoplesHistoryOfComputing. A computing citizen isnt sold anything, she has a right to computing resources. And she is able to create and interested in creating things with the system, she is not a consumer. The computer is a tool for accomplishing things and furthering humanity.\n\nMost people could barely be anywhere further from being computing citizens today, sadly. User empowerment is not a goal, making money is. And computers are a tool for capitalists to more effectively surveil and extract resources from users; they serve as EnablerAndDemander, leaning heavily on the demand side. (Cf. CodeDataEquivalence on the disempowerment of users.)\n\nContinuousImprovement heavily involving computers probably does not strictly require but would benefit enormously from users being some manner of computing citizen. This works great with developers now, but Im not sure how it would with average folks.\n\nOn the flip side, users exercise their citizenship rights when making careful decisions about AppropriateTechnology.\n\nThe SpreadSheet is one place where some of the ideas of computing citizenship remain today. Others like TiddlyWiki provide opportunities. BASIC was the central tool of computing citizens back in the day; perhaps simple Python or PowerShell or some similar improved shell could serve as the general-purpose language in the future.\n},{title:ConcentrationCamp,created:20200220155238636,creator:soren,es:confident,modified:20230908135644516,modifier:soren,tags:History Idea Public,type:text/vnd.tiddlywiki,text:Hopefully, you know what this is. Mostly a conceptual-linking node.\n\nInteresting references:\n\n* MsMaudeChardin seems to have spent some time in one (unwillingly; that sounds strangely optimistic, though knowing her maybe it wasnt so far off!).\n* S.|PrivatePerson of MyLillianAndSylvia notes in the first chapter that their situation is like being about to die and having the choice between spending your last days in hospice or in a concentration camp.},{title:ConceptHandle,created:20201228044606410,es:confident,modified:20210515034706573,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:MrScottAlexanders name for an IdeaApi, q.v.},{title:ConceptShadowing,created:20200116025927148,creator:soren,es:confident,modified:20211204030527650,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Concept shadowing occurs when two concepts are made similar in ones mind due to similarity of the language used to refer to them. This is a double-edged sword: it is very closely related to and likely both a beneficiary and a contributor to \u003C\u003Ctag Metaphor>>, without which we certainly could not think in anything like the way we do (see FamiliarizingMetaphor), but it certainly has the potential to cause confusion and illogic as well.\n\nFor instance, I have at least four distinguishable M.|PrivatePersons, but their attributes tend to blend together a bit. You might carry baggage from an old job where a term meant one clearly definable thing, and in the new job it means a different clearly definable thing. The shadowing might well mean you dont even realize that theres a confusion of terminology.\n\nNamePersonalityRelationship is likely a similar concept.},{title:ConceptWeb,created:20200325223120634,creator:soren,es:confident,modified:20250204200135231,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:SorenConcept for the data structure that results from appropriate application of a ZettelKasten or other link-based note system (for the necessity of this for certain note systems, see NotesMustLink). You can jump from idea to idea just like in your brain -- only it can remember different things than you do. (Im sure Ill learn this to a greater extent as I continue using the system. Its still in its infancy for me.) Term of course inspired by the WWW.\n\nA concept web may include ImplicitlyDefinedNodes -- that is, nodes that have no data of their own, but are defined by their backlinks to other elements in the web. It is usually better to fill in things as they are needed than to strive for completeness; see MissingTiddlerPhilosophy.},{title:ConfederacyOfDunces1980,author:Toole,bibliography:LifetimeReading,caption:A Confederacy of Dunces (+),created:20210703170128000,genre:Literature,medium:book,modified:20210705214034293,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1980},{title:ConfigurationAsCode,created:20200322162655493,creator:soren,es:confident,modified:20200325231232758,modifier:soren,tags:Systems Code Public Idea,type:text/vnd.tiddlywiki,text:Tool for managing computers in which the configuration of (virtual?) hardware and software is stored in a DeclarativeProgramming or ProceduralProgramming form that describes what the configuration should be or how to create it, for best results in a SourceControl system. The configuration is then applied automatically by software, rather than manually by a person clicking buttons or typing commands, and one can determine what configuration a system ought to have by looking at the authoritative representation in SourceControl.\n\nConfiguration as code helps avoid replication errors and keeps configuration DRY|DryPhilosophy.},{title:ConfirmationBias,created:20200410161511091,creator:soren,es:confident,modified:20211107181919234,modifier:soren,tags:Reasoning Psychology Public Idea,type:text/vnd.tiddlywiki,text:Pervasive type of CognitiveBias in which we give special weight to things that we already know or believe. One could argue we are selectively applying|SelectiveApplication the new information we see.\n\nAlmost impossible to avoid, but of course we can actively seek to find disconfirming evidence in an attempt to fight it.},{title:ConflictingPrioritiesThief,created:20201027161424081,modified:20201027161654280,tags:Public Idea,type:text/vnd.tiddlywiki,text:The fourth of FiveThievesOfTime.\n\nProgress should be measured by completed features; your software must be working|WorkingSoftware, or it is not done|DefinitionOfDone. People looking busy or producing non-functional documentation does not equal productivity.\n\nIneffective Prioritization makes people take on too many tasks. This then makes prioritization less valuable -- as the saying goes, if everything is number one, nothing is number one. A lot of things can be important, but only one can be the //most// important. And everyone should agree on the priorities (we all know how often that happens).},{title:ConnectingWithOurParts,at:202407121500,author:D.W.|PrivatePerson M.S.|PrivatePerson,blurb:Have you ever wondered why it seems like you’re being pulled in two different directions? Why the narratives inside your head don’t always match up with what you believe? Why it’s hard to practice self-compassion? Ever wondered who you really are? Us too. Join us for a conversation and some experiential exercises to dive into the work of exploring, understanding, and befriending all the parts of ourselves. This practice enables us to move with all of life’s ups and downs and everything in between. Beginning with a you-turn, this workshop will serve as a trail guide to navigate the ways our internal landscape (thoughts, feelings, and body sensations) is reflected in our families, our communities and our world. Our hope is to provide some skills and practices to take with you and develop as you continue your own journey towards healthy and thriving connections, inside and out.,caption:Connecting with our parts: A journey inside from an IFS perspective,conference:2024WildGooseFestivalTrip,created:20240718012023555,creator:soren,medium:conference,modified:20240723022241422,modifier:soren,rating:skimmable,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:We had a really brief introduction to the idea of parts work, then we did a role-play and discussed. I agreed to do a “Logical” part. Im not sure I developed the role all that well, but a bunch of people came up to me and made interesting comments about my part in the story saying it had taught them something, so I guess it cant have been that bad.\n\nLots of thought on being open to new experiences there. I was pretty anxious and tense volunteering to do that actually! Im proud to say I thought about being open to new experiences, connections, etc., today quite a few times and got myself to do almost all of them. The environment does feel easy to do this in, which helps a lot.\n\nNot sure the session informationally taught me anything I didnt already know. But it reminded me I should definitely do more of this, and I think it was useful to see some of the roles they brought up (e.g., Fixer, Exile, Firefighter) and how some people see the process working. The middle-aged gal next to me who played the Exile (unloved five-year-old) was fantastic at it; I unfortunately dont remember her name.},{title:ConsensusPhysicalReality,created:20200125182521922,creator:soren,description://Consensus physical reality// is a precise term for the form of existence we physically share with each other and agree upon the basic properties of.,es:confident,modified:20210611025558049,modifier:soren,tags:Dreaming Imagination FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Consensus physical reality (often abbreviated CPR) is the world around us, often referred to as “real life”, “objective reality”, or just “reality”.\n\n“Real” is often plenty good enough, but I feel this term falls significantly short when discussing Dreaming, Imagination, FictionTheory, Mythology (including PersonalMythology), and so on. All of these things are “real” in one sense, to the one who has the experience or in their effects on the society or group to whom the story belongs, such that calling them “fake” or “fictitious” or “myth” or “imaginary” sometimes doesnt sit entirely right with me. And stories //are// part of reality, just not the events depicted in them (though at the same time, those events can sometimes be more likely to have happened in one form than not, and they illuminate “reality” regardless).\n\n{{ConsensusPhysicalReality/p||PrivateChunk}}\n\nAs Karimov says to MrMalcolmPolstead in SecretCommonwealth2019 on the topic of whether a legendary beast really exists:\n\n> There are many FormsOfExistence, monsieur. I would not say that it was this one or that one, or any other. Possibly one we know nothing about.\n\nWhen Im in this situation, I find the more precise descriptor “consensus physical reality” helpful.\n\nI borrowed the term from some dreaming book or online resource once upon a time, but I no longer remember where.},{title:ConservationOfProblems,created:20200326022749757,creator:soren,description:Serious problems are not solved, they are transformed into different problems.,es:likely,modified:20220817225751383,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:With any really big problem, you can never actually solve it, you can only make it change into a different form, which may or may not be better.\n\nFor instance: weve “solved” rampant infectious diseases (spoken as the coronavirus pandemic|PandemicMood rages outside my apartment, so with a certain amount of qualification!) so that were less likely to wake up dead|CouldWakeUpTomorrowDead, but now we as a society struggle mightily with chronic conditions, which leave people alive but unhealthy and often unhappy. Weve “solved” overt racism, but now HiddenSystemicRacism predominates. Weve harnessed the earths energy to keep ourselves unprecedentedly comfortable and well-fed, but now ClimateChange, EconomicRealities, and scarcity threaten the whole façade.\n\nThis does not mean that technological advancement is necessarily worthless. Some problems are better ones to have than others (and which ones are better may change over time and between contexts). The problem is that we often unfortunately fail to analyze this and assume the new problem is better because its a high-tech one, or we dont even consider what problem were trying to solve and end up trading something big for a SurfaceProblem without hitting the TargetProblem. This problem is a major topic of TheControlAltBackspace.\n\nTechnology often provides particularly potent examples of the conservation of problems. For instance, see EnablerAndDemander: as technology makes things possible that were not possible before, it also creates new requirements.\n\n(I wrote my SAT essay about this topic, bizarrely enough. I got a 5/6 on it from both reviewers, so I guess it was decent. I actually even have a copy of it somewhere still -- they send it back to you with your score sheet! Cringe.)\n\nCf. FewNewSolutionsUnderTheSun.\n\n!! References\n\n> Since you cant avoid problems, just find good problems.\n> ---MrDerekSivers, HowToLive2021},{title:ConservativeMind1953,author:Kirk,bibliography:LifetimeReading,caption:The Conservative Mind,created:20210703170128000,genre:Politics,medium:book,modified:20210705214034305,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1953},{title:ConstellationsOfInstances,created:20210106034554164,creator:soren,description:Ideas are constellations of instances,es:possible,modified:20211026030824561,modifier:soren,tags:Ontology Creativity Metaphor Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}}. That is, they are models, even MentalModels, of a series of things that exist in the real world...but perhaps they dont exist in themselves.\n\nThis may seem not a groundbreaking concept at first, but as I write this the notion of considering an idea to actually //consist// in all of its instances, rather than just mapping to them in some way, seems quite interesting and new to me.\n\nThis strikes me as a statistical|Statistics way of thinking about ideas. That line of thinking would suggest that you can use ideas in at least three distinct ways, similar to how you can use statistical models:\n\n* Descriptively, to label things that you witness and understand them better; as names|PowerOfNames that eliminate HypoCognition.\n* Predictively, to guess how new events or things will work. If idea I consists of the pattern found amongst instances A, B, C, D, and E, and a hypothetical instance F arises that fits neatly into the pattern of I, it is a good inference that F will be much like A, B, C, D, and E were.\n* Creatively, to create entirely new instances by extrapolating from the existing elements of the pattern, new instances which match idea I but differ in some slight way from the existing ones.\n\nI got here through something in Sertillanges:\n\n> Ideas are in facts, they do not live of themselves as Plato|PrivatePerson thought....\n> Now everywhere on its path action finds assimilable elements and “slices of life” which give form and shape to abstract ideas. It will even find an uncountable number of them, for the real is a sort of infinite which no analysis, no rational estimate can exhaust.\n> ---MrAgSertillanges, IntellectualLife1946, pp. 64--5\n\nHe also comments on how much more life there is in an instance than an idea, though this seems more an element of AllMapsLie than anything else:\n\n> Put an artist in front of a tree, he will make endless sketches of it, without ever imagining that he has completely rendered what nature expresses; put him before a sketch of a tree, even a tree by Claude Lorrain or Corot, when he has conscientiously copied it he has exhausted the model.\n\nFor Whitehead|MrAlfredNorthWhitehead, as explained in AdventuresOfIdeas1967, the laws of nature are defined by all the instances to which they apply, which has the important consequence that the laws can sometimes be changed over time by altering the behavior of their instances. (Obviously, this doesnt work with, say, gravity, but it can work for, say, social-justice issues, which tend to be founded on beliefs with the apparent status of natural laws.)\n\nThis idea bears strongly on whether reality or ideas are more accurate|RealityInaccurate, probably leaning in the direction of //reality// (whatever that is|Ontology) but potentially defensibly working with the idealistic approach if youre willing to give ideas an ontological status that Sertillanges refuses to.},{title:ConstructivismAndOnlineEducation,caption:Constructivism and Online Education,created:20210215031635063,medium:article,modified:20210515035419620,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:http://www.trainingshare.com/resources/doo2.htm,year:2015},{title:ContextFreeInformation,created:20200908220722443,creator:soren,es:likely,modified:20211027034213884,modifier:soren,tags:Information Reading Public Idea,type:text/vnd.tiddlywiki,text:From FightingInformationOverload2020, and quoting MrNeilPostman in AmusingOurselvesToDeath1985, context-free information is information that you didnt seek out for any purpose; for instance, most news and most social-media scrolling is context-free information. Context-free information does not cause us to change our plans or opinions, entertain us, or provide useful new insights.\n\nIt is easy and common to mistake recency and popularity for context.\n\nRelated to RetrievalContext, but on the consumption side instead of the memorization side. Or, information we read is context-free (and useless in so being) because we not only fail to put it in retrieval context, there //is// no retrieval context in our mental model of the world.},{title:ContextScrambling,created:20200226024648349,es:confident,modified:20200316220436435,tags:Imagination Creativity Public Idea,type:text/vnd.tiddlywiki,text:An idea is only as good as its context. Yet the most valuable context is often (nay, usually) not the one you encounter it in. The encountered context is //certainly// not the most valuable context for generating new ideas; the semantic space around that idea is presumably already full since the original author was using it in that context!\n\nThe right idea in the right context can change the world. See the ShippingContainer.\n\nOften, an idea is not surprising or even a little bit new, its just the context that creates novelty or a solution. See FewNewSolutionsUnderTheSun.\n\nThe ZettelKasten succeeds partly by providing a near-perfect environment for context-scrambling (the brain is presumably even better, but less likely to hold all the relevant items in memory at once and needs some help).},{title:ContextStrength,caption:Context,created:20201026180939480,description:You look back.,es:likely,modified:20201204030457115,tags:Psychology History Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Item identified on the StrengthsFinderReport:\n\n{{!!caption}} -- \{{!!description}}\\n\n* I did //not// recognize this before, but I definitely do have a historical focus at times. Involves finding simplicity in history, pattern-matching the old with the current, and allegedly taking longer to acclimate to new situations (Im not convinced Im below average on this one).\n* Neither description highlights this at all, but it is definitely related to my insistence on understanding //why// something is done or should be done.\n** I have an amusing, vivid memory of learning about negative numbers in fourth grade and being frustrated to the point of tears|NegativeNumberDistress/Me that nobody could explain to me why a negative number multiplied by another negative number was a positive number. If I dont get an explanation for a rule or practice, I have a tendency to automatically chuck it in the \this is stupid\ bucket.\n** See also SevenfoldWhy. Maybe the annoying, cynical version of that.\n* I think the internal structure or Design of something often serves as a kind of proxy for history in my developer life.\n** For instance, as a means of learning how to use a system, I want to understand its components and thereby why it was created that way. Then I can retrace the original authors thought process (if they were reasonably intelligent and consistent) and simply //know// how it works, rather than having to memorize specific seemingly-arbitrary procedures.\n** This is the (probably poorly applied) philosophy of Common Core mathematics that has recently been getting bad press.\n** Related: Grokking, as described in my \Partnering with Anki\ blog post that you can find at the other end of that link.\n\n!! Suggested action items\n\n* Read more history (and biography, etc.).\n* Focus on declaratively identifying what aspects of the past can be discarded and which are important (see ChestertonsFence).\n* On the flip side of the item in InputStrength about making sure others know they can stop me if I give too many details -- I //want// \irrelevant\ details!},{title:ContingencyPlanning,created:20200330021740596,creator:soren,es:confident,modified:20211228153619656,modifier:soren,tags:Process Reasoning Public Idea,type:text/vnd.tiddlywiki,text:The act of identifying things that could go wrong with a plan and predetermining roughly what kind of response would be warranted.\n\nA remarkable number of people and projects get caught dead without any kind of contingency planning, either a result of poor/incomplete planning work or a form of RecklessOptimism. Some people believe it must be depressing or psychologically negative (as if they are “planning to fail” and it will jeopardize their chances of success or their ability to keep their eyes on the goal). In reality, proper contingency planning results in a better understanding of and commitment to the happy path as well as the less desirable outcomes, and it tremendously reduces risk. When you fully understand the worst possible results, you can justifiably take a //larger// amount of risk without worry, enabling bolder|BeBold and more effective action.\n\nContingency-planning identifies several things about the original plan, centering around risk, severity, and mitigation of negative events:\n\n* Is it realistic? Considering the things that can go wrong, does it appear likely things will go off without a hitch?\n* Whats the chance something goes wrong? (This will always be an estimate. And for certain events, it may be impossible to come up with a valid estimate. But other times its a lot clearer.)\n* If something does go wrong, how bad will it be? (This is more important than the chance; its the difference between MeanTimeToRecovery and MeanTimeBetweenFailures.)\n* And if that thing goes wrong, whats the plan for fixing it? (Of course, we record this for later reference.)\n* Is there anything we can do to the original plan to reduce either the chance of a problem or the severity of a problem?\n\nOf course, contingency planning will never identify //every// problem. There are some things we wont be able to foresee. But a surprising number can be foreseen, if only we actually look ahead and think about it. Understanding the FunctionOfPlanning, its OK not to be perfect.\n\nWays to identify possible outcomes:\n\n* Sometimes theyre obvious if you just sit down and think about it.\n* Investigate other experiences: history|ContextStrength, the thoughts of those who have done this before.},{title:ContinualAndContinuous,created:20200529230011086,creator:soren,es:confident,modified:20220728211302153,modifier:soren,tags:EnglishGrammarTrick Public Idea,type:text/vnd.tiddlywiki,text:* Something is continual if it happens over a length of time with periodic interruptions. I am continually pedantic about grammar.\n* Something is continuous if it never stops even for a moment. My heart beats continuously throughout my life.\n\nSource: DreyersEnglish2019 p. 179.\n\nCf. AlternateAndAlternative.\n\n\u003C\u003Cremembercz \20200529230101802\\n\t\Something is //continual// rather than //continuous// if it {is periodically interrupted}.\\n>>},{title:ContinuityError,created:20200503221311390,modified:20200503221506690,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Type of PlotHole that occurs when something implausibly changes with no explanation, due to a lapse of authorial or production attention. Particularly common in film because things are so frequently filmed out of order and over long periods of time, but can happen in any fiction. Examples include objects disappearing or characters hair being done differently when the camera turns, a person setting down a glass in one room and moving to another and then having it again, or someone repeating something theyve already said and their conversation partner could not possibly have forgotten.},{title:ContinuousDelivery,caption:Continuous Delivery,created:20200127135557787,creator:soren,medium:book,modified:20210606224127504,modifier:soren,owned:no,rating:average,readstatus:read,tags:Code Source Process Public,type:text/vnd.tiddlywiki,year:2011,text:Book my MrJezHumble and MrDavidFarley that arguably contains all of the important precepts of the DevOps movement...and was published //in 2011//. Just goes to show you how important ideas tend to hang around for a while before their importance is widely recognized.\n\nChapter 1 (a description of the bad situation in most software shops) just really hurts, pretty much no matter where you come from! Like PhoenixProject or even just Dilbert.},{title:ContinuousDeployment,created:20200428211756091,es:likely,modified:20210509011735941,tags:Code Process Public Idea,type:text/vnd.tiddlywiki,text:The practice of, after a ContinuousIntegration pipeline succeeds, sending the resulting code to one or more test environments or even production. (If you do the latter, in most cases you will need to hide new features behind configuration options so you can decide when to roll them out.)\n\nA great way to maximize throughput of value (the goal of DevOps).\n\nRequires solid DeploymentSmokeTests as well as just good automated testing at all levels, so you can be confident that after you deploy, everything will still be working. Its also very helpful to monitor //customer// metrics like support tickets or complaints on TheTwitter, as well as technical ones, to quickly identify if youve just pushed something ugly out that needs to be rolled back (cf. MeanTimeToRecovery).},{title:ContinuousImprovement,created:20200407182412394,creator:soren,es:confident,modified:20210511010705865,modifier:soren,tags:Creativity Process Public Idea,type:text/vnd.tiddlywiki,text:Continuous improvement is the idea that allowing a process to settle too far is the way for it to become irrelevant and inefficient. Instead, anyone should be encouraged to submit ideas or simply change small things, one bit at a time, that make the process very slightly better. They dont have to be big. As long as the process doesnt WalkBackwards, it gets better eventually, sometimes shockingly so.\n\nOften known as //kaizen// after the Japanese when Toyota originated the modern LeanMethodology version of the concept. Closely related to the AgilePhilosophy as well, though it is not stated so explicitly.},{title:ContinuousIntegration,created:20200306193805958,es:likely,modified:20210509011732214,tags:Software Process Code Public Idea,type:text/vnd.tiddlywiki,text:Development practice, a critical part of ContinuousDelivery as imagined by MrJezHumble and MrDavidFarley. Rather than waiting for MergeDay to pull code back together after weeks or months, code is merged back into a main working branch as soon as a feature or bugfix is completed, thus preventing it from drifting out of sync. This is combined with automated building and ideally at least automated unit testing, so that when a bad change is checked in, the team immediately notices.\n\nWhen continuously integrating, you DontFearRed, but do strive to avoid it.\n\nSeem obvious? Well, easier said than done once upon a time or if youre ignorant of good source-control-management practices. Nowadays, CI tools are ubiquitous and most smart people at least say they do it, even if they dont do everything right.\n\nOften followed by ContinuousDeployment (thus, the ubiquitous acronym CI/CD).},{title:ConvenientGuru,created:20200222035350652,modified:20200222035522955,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Silly and usually cringy trope common in sci-fi and many other types of fiction where things about the universe which are otherwise difficult to get across to the reader are explained in-universe by means of a character, who basically just //says// them in a way that doesnt seem necessary within the narrative.},{title:ConvenientlyAvoidedArendelleFlood,created:20200812035200254,es:likely,modified:20200812040144869,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:FrozenTwo complaint: I know its a Disney movie, but there was something deeply frustrating about the DeusExMachina resolution of the flooding of Arendelle. It felt unreasonable from a poetic-justice standpoint that there was //no// penalty for their ancestors so completely mistreating the forest people. Complete destruction of their home wasnt necessary or even appropriate either, but the idea that everything works out perfectly is, I think, both unconvincing|SuspensionOfDisbelief and arguably damaging (maybe I think a bit too hard about what lessons Disney is teaching our children, but I also dont think its an entirely ridiculous thing to consider).\n\nNow I dont think that Arendelle //deserves// to be flooded; I dont believe in making things worse for others because they have it better than you. Thats not justice. But in real life, the test of your courage comes when youre willing to give something up of your own to restore someone to what they deserve. Of course, Anna was willing to give it up -- point taken -- but the fact that she then didnt actually have to seriously dampens the conclusion. Intentions and results both matter|RoadToHell.},{title:ConventionalWisdom,created:20200204162141305,creator:soren,es:likely,modified:20201204041546551,modifier:soren,tags:Reasoning Definition Public Idea,type:text/vnd.tiddlywiki,text:Something which people in a field think is an obvious, straightforward, good practice.\n\nWhile CW is often a good start, just as CommonSense is not particularly common, ConventionalWisdom is not always particularly wise. Its easy for the consensus to become a LocalMaximum or just drift out of date, so it needs to be treated with caution. Its also too easy to point to CW as gospel and ignore nuances of the situation its being applied to that make it irrelevant or otherwise unwise.},{title:Conversation,caption:Raw notes or reflections on a conversation or meeting with someone.,color:#ff0000,created:20200702013212138,creator:soren,icon:$:/core/images/tag-button,modified:20210825155537333,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}},{title:ConversationalAffordance,created:20230326035305673,creator:soren,modified:20230326035345469,modifier:soren,tags:Stub Idea Public,type:text/vnd.tiddlywiki,text:Stub: see https://experimentalhistory.substack.com/p/good-conversations-have-lots-of-doorknobs for now},{title:ConversationalDifference,created:20200126155935323,creator:soren,es:likely,modified:20231201044118066,modifier:soren,tags:InterpersonalRelations Idea Public,type:text/vnd.tiddlywiki,text:To have an interesting conversation, you need people who are different, but not //too// different.\n\nFundamentally, conversation is valuable because youre sharing ideas that the other participant(s) dont already have. Many people have described the essence of a good conversation partner as their ability to surprise you (see e.g., CommunicatingWithSlipBoxes; DontSurroundWithSmarter2014).\n\nThat said, if you get too different, you might have trouble finding anything that you actually want to talk about, and youre unlikely to feel the sort of attraction that leads to lasting interest in continuing a relationship with another person. Conversations usually only reach their maximum profoundness and potential when continued over a fairly long period of time, so this persistent interest is important.\n\n{{ConversationalDifference/p||PrivateChunk}}\n\nConversationalDifference is likely to have an effect on ConversationalEase.},{title:ConversationalEase,created:20200222040205951,creator:soren,description:What makes conversations with some people fluent, easy, and fun, and others difficult and awkward?,es:possible,modified:20240601144459085,modifier:soren,tags:InterpersonalRelations Idea Public,type:text/vnd.tiddlywiki,text:Ever notice there are some people you can just sit down with and talk for hours, and other people it just ends up being awkward? I dont //think// this is unique to me, at least. Whats up with that?\n\n* Part of it might be general volubility; e.g., conversations with K.M.B.|PrivatePerson were often a little bit awkward because it could be challenging to get her to say anything at all!\n* Similar interests are likely important. If you cant find any, much more likely to be awkward. A conversation that never ventures beyond obvious common ground is usually boring (see TyrannyOfAverages).\n* If you form a certain kind of close bond with someone, you can almost always find something to talk about. And it seems to be possible to develop such a bond without obvious similarities -- based on strong sexual attraction, or working together during a disaster, or one person going out of their way to help another during a difficult time for the second, or anything similar that makes people feel connected suddenly even though they dont actually have that much in common. Exactly what characterizes this bond escapes my understanding (and quite possibly everyone elses).\n* Perhaps ConversationalDifference is important: some significant difference, but not too much, is required. I cant tell if this is just a restatement of the previous point, though.\n\nAfter rereading CrucialConversations2011 recently, Im finding myself considering many of these points (and others) in the light of //safety//. The book is specifically about difficult, hard-hitting conversations, but I think this key element applies to pretty much any conversation. Do you feel like you can say what youre thinking without looking bad or messing up your relationship? The less safe you feel, the more you have to chew on your words and the more frictionful conversation is going to be. We also instinctively avoid certain topics entirely until we reach a certain level of familiarity with someone (this is probably strongly related to the third point above); having a reduced number of socially acceptable topics can make it hard to jump from one to another.\n\nConversationalEase should be a core requirement when identifying AmazinglyAwesomeFriends.\n\n\u003C$m2.iex tiddler\BethlehemConversationalEase\>\n\t\u003C\u003Cstretch BethlehemConversationalEase>>\n\u003C/$m2.iex>},{title:ConversationalOfficeHours,created:20201205010442475,creator:soren,es:possible,modified:20210902004017774,modifier:soren,tags:Idea Productivity InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:Suggestion by MrCalNewport (somewhere, most likely DeepWork?), CrazyAtWork2018, StackOverflowThreeWays and others: set office hours when people can feel free to show up or call to chat or ask you questions, whether in a work or personal context. This encourages people to get in touch when it would be valuable because they dont have to worry about bothering or interrupting you, and it also cuts down on interruptions //outside// that time since theres now a “blessed” time to contact you.\n\nIf you take office hours seriously, as does CrazyAtWork2018, saying that when employees hold office hours, you //have// to wait to ask them a question until their office hours unless its an actual emergency (this isnt that big a problem, as communication usually shouldnt be rushed|DontRushCommunication anyway), the problem of RampantNotifications can be significantly reduced. Even if you dont take office hours seriously, though, they reduce friction for others -- assuming this is what you want|UsefulFriction.\n\nMajor drawback: it seems weird. If enough people start doing it, though, perhaps it wont be anymore.\n\nLess significant drawback: you have to find and schedule a time for this, and if it doesnt work for someone whos trying to get in touch, it may not be obvious what to do.\n\nI considered doing this in my InterruptionReductionPlan, which I never ended up implementing.},{title:ConvinceMeToStay,created:20210709000304042,creator:soren,description:I left my position at Federated because the alternatives were too good, not because Federated was too bad.,es:confident,modified:20230416024838595,modifier:soren,tags:Employment LifeDirection Public Essay Idea Frozen,type:text/vnd.tiddlywiki,text:As I announce my resignation|FederatedResignationNotices from TheFederatedInsurance, a lot of people have been asking me something to the effect of, “What made you leave?” or “What could we have done better?”\n\nOf course there are things that I dont like about working at Federated and living in Owatonna, and of course in some sense they contributed to my decision to resign; if I somehow managed to find a job and living arrangement where I disliked //nothing// after being there for four years, I would definitely stay there (and maybe go buy a few lottery tickets\u003C\u003Cfnote \Or would that be wrong, because winning would introduce the possibility of things I disliked? Hmm.... (Perhaps the lesson here is that if you find yourself in utopia, normal reasoning stops working|https://randomthoughts.sorenbjornstad.com/#11656.)\>>). But I think “What made you leave?” is modeling the problem incorrectly, because even all my gripes together would have been insufficient on their own to make me resign. This doesnt mean “What made you leave?” is //always// the wrong question, though; rather, its the right question for some people at some times, but not for me right now.\n\nThis will become more clear with an example. Alice (any resemblance to any real person is purely coincidental) is a forty-four-year-old woman who was born and raised in Owatonna|OwatonnaMinnesota. She left for college and worked in Fargo|FargoNorthDakota for several years, where she met her husband. They moved back to Owatonna when she was twenty-eight and started a family. Shes been working at Federated for sixteen years. Her husband also works at Federated, almost all their friends and much of their family lives in Owatonna, and their children have never lived anywhere else. Like anyone else, she appreciates an occasional challenge, but she has only moderate need for cognition|NeedForCognition and is mostly conventional-minded|IndependentMindedness. For Alice, the correct question is, indeed, What would convince her to leave?\n\nWell, you would have to //royally// piss Alice off in order for her to even begin to consider leaving. Federateds culture fits her cognitive style well; shes on track to retire comfortably a few years early, along with her husband; she would have to move and uproot her life and leave her friends behind in order to find a new job, since there arent really any other employers in Owatonna for insurance or tech workers;\n\u003C\u003Cfnote \This may be changing with the rapid rise of remote work. Itll be interesting to see what happens to retention rates at traditionally local, career-long employers like Federated in the next few years.\>>\nher husband would realistically have to quit with her; her kids are still in school; shes already deeply familiar with everything that she doesnt like and knows how to cope with it; and it would likely take her quite a bit of effort to become marketable for a different job. As long as Federated pays Alice reasonably well, doesnt make her work with insufferable people, and treats her with basic human dignity, shes there to stay until either some event in her life outside of either her or Federateds control forces her to quit, she retires, or Federated dismisses her.\n\nNow consider me. Im a twenty-six-year-old single guy who grew up in Indiana, has no family in Owatonna, hasnt lived here long enough to have developed particularly deep ties to the place, doesnt own a home here, and doesnt particularly care about Federated any more than any other workplace. Ive made friends here Ill miss when I move away, but nothing like Alice, who probably has several best friends here shes known since she was a child. Moreover, Im smart, adaptable, and have broad interests|Polyspecialization; I could do many different things, switching to them in relatively short order, and do well at them and find them meaningful. For me, the correct question is rather, What would convince me to stay?\n\nLets get real: theres nothing intrinsically rewarding or motivating about maintaining software for an insurance company in a small town in the Midwest. The reasons you want to keep doing it have to come from elsewhere. The most obvious reason is because the company pays you to do it; but while Im being paid fairly at Federated, I know I could earn as much or more somewhere else. The benefits are somewhat above average, but theres nothing particularly special about those either. My responsibilities are about the right level of challenge and provide some interest, but at the end of the day its still supporting enterprise software. I do like the people I work with a lot -- and thats going to be the worst thing about leaving -- but there are other good places to work with good people. Owatonna is on balance a nice place to live, but theres absolutely nothing special about it. What else is there to convince me to stay?\n\nUltimately, there was nothing, and thats why Im leaving: because there are a lot of other things I can do, and Federated is almost certainly a local maximum|LocalMaximum for me -- a lot of those other things will be better once I find my way over to them, and I have a good shot at filtering out the ones that would be worse. Unlike Alice, I have almost no inertia in this position, and very little to lose by trying something new. Indeed, Ill even enjoy the challenge. In order to keep me, Federated would have had to improve the deal I was getting so that it was obviously better than my other options.\n\u003C\u003Cfnote \\\I dont know that it has a practical way to do that, because at this point in my career it is hard to see the upper bound|BlackSwan of alternative possibilities, meaning the sure bet has to look that much better to compete. I certainly dont have any realistic suggestions. I could throw out something silly like “if you give me a $1,000,000 salary I will stay,” but thats presumably not a worthwhile trade for Federated even from a purely rational viewpoint; Im a high performer to be sure, but Im unlikely to be worth a million dollars a year, even if management found it emotionally acceptable to pay someone an order of magnitude more than the normal figure for a person in that position. And, to be fair, it still wouldnt last: if I pulled a seven-figure salary at Federated, I would stay for a couple of years and then comfortably retire from paid employment sometime in my early thirties!\\\>>\n\nAlices default state is “staying unless the current situation is untenable.” My default state is “moving on unless the current situation is sweet enough that I would struggle to beat it.”\n\u003C\u003Cfnote \\\Of course, my default state can and probably will change in the future. If thirty years down the road Im 55, have a family, am comfortable with my job and tired of learning new tools, and am on track to receive some huge retirement benefits in a few years, then Ill be much more like Alice than my present-day self.\\\>>\nIts not that my current situation is too bad to stay in, its that my alternatives are too good by comparison to pass up.\n\n--------------\n\nAlice is an extreme example of somebody Federated would have to try really hard to involuntarily lose. Most people fall somewhere in between me and Alice. But most people at Federated are significantly closer to Alice: the average Federated employee is closely tied to Owatonna, married with kids, and conventional-minded|IndependentMindedness (which likely means your threshold for making big changes to your life is higher).\n\nPerhaps this is why nobody seems to recognize the difference between me and Alice, at least not in conversation: when youre in Alices default state, you assume everyone else is, too. Meanwhile, I find it baffling that everyone assumes there was something deeply wrong with my situation! The everyone is like me|ThingsArentGoodForEveryone bias rears its head again.\n\nThe dissonance is particularly odd to me because I dont see myself as a maximizer, must-have-the-best-possible-everything type. Yet in this case, it feels pretty obvious that the right approach for me is to take what Ive learned from working at Federated (which is a lot!) and try something new -- ideally something contrasting -- with the benefit of that experience. HaveToExperienceItToUnderstand: if I do this once or twice while Im young and can easily change tack, Ill have a much better shot at figuring out which broad route I should pursue later in life.\n\nI guess people are full of contradictions, and thats just how it goes. Nothing new under the sun.},{title:CookingMetaAdvice,created:20230504023759527,creator:soren,es:confident,modified:20250125233843430,modifier:soren,tags:Idea Food Public,type:text/vnd.tiddlywiki,text:Ive mostly accidentally become a pretty good cook, and people often think its a mystical talent. It does take //experience//, but other than that the skills|SkillsKnowledgeAndTalents are actually quite easy! Here are a few tips -- not specific cooking tips, but meta-level tips about how you can go about learning / getting better.\n\n\nCook with someone who already knows what theyre doing, as much as you can. This is a trivially easy way to become a good cook. Although it may seem intimidating, cooking doesnt involve any difficult skills; the problem is that there are a lot of them, and when you start out with very little experience, its hard to pick all of them up at once, especially when you often have a very narrow window of time to figure something out. If you have someone in the kitchen with you to explain anything you dont know and cover for you when you cant react fast enough, youll learn almost automatically.\n\nLearn what ingredients are for. If you know why something is in a recipe, youll be able to make intelligent decisions about omitting or substituting it.\n\nFocus on learning to recover from mistakes, not on not making them. This is for two reasons|TryForAlmostGoodEnough. First, because no matter how experienced you are, youre guaranteed to screw up occasionally, often at very inconvenient times (maybe when you dont have any more ingredients to try again and you have guests on the way), and its good to be able to fix it when you do. And second, because catching mistakes early and fixing them is quite a bit easier to learn than avoiding them entirely.\n\nRecipes are an outline. Your cooking will be worse if you try to follow a recipe exactly. My point here isnt that once youre good at cooking, you dont need a recipe, or that improvising is fun. Rather, the truth is that home cooking is pretty inexact. If you do the same thing every time, you will by no means get exactly the same results, and thats when you do it over and over; whoever wrote the recipe has a different kitchen and does things differently from you, so the case is even worse.\u003C\u003Cfnote \Even baking is pretty inexact, despite its reputation for needing exactness. Its true that you cant go substituting things willy-nilly without knowing what theyre for, or measuring everything by eye (unless youre really good at estimating). But you dont have to carefully level your flour or weigh everything to the nearest gram. I guarantee you wont notice the difference if you dont.\>> This makes the project of following a recipe exactly a fools errand; youll end up ignoring the course of action suggested by whats in front of you in favor of the paper.\n\nInstead, learn principles and processes, and figure out how to use your senses. If it says to sauté for seven minutes, thats not a commandment, its just supposed to give you a rough idea of when you should expect to move on. If you smell that its about to start burning after five, just move on to the next step; you didnt do anything wrong.\n\nTaste your food and learn how to fix it. A corollary of recipes-as-outlines and learning-how-to-fix-mistakes: Because home cooking is inexact, the seasoning isnt going to be exactly right if you follow the recipe the same way every time. Many recipes are also underseasoned so as not to be objectionable to anyone, and theyll benefit from having the flavors you like the most turned up a notch. Taste early and often, and if something doesnt come out right once, take a moment to work backwards and figure out when you can spot it next time if its wrong again.\n\nThe number-one mistake new cooks make is not putting enough salt in; the amount of salt that should go into food in the kitchen is way more than the amount youd sprinkle on your food with a salt shaker. If something tastes bland, just try a little more. (Salt doesnt make food taste //salty// unless you put a huge amount in, or if you sprinkle it right on top of finished food instead of giving it a chance to incorporate. It makes everything else taste //more//.) Other useful quick fixes for something that came out bland: heat (e.g., black pepper, red pepper flakes, hot sauce); acid (citrus, vinegar); umami-heavy sauce (soy sauce, Worcestershire sauce).\n\nBuy good knives and keep them sharp. This is a little more specific, but a lot of people (Id say //most// people Ive seen) struggle to learn to cut things because they have terrible knives. This doesnt have to be too expensive, because good knives will last a lifetime if you take care of them, and if youre a normal person, you really only need three knives: a chefs knife, a paring knife, and a mid-sized serrated knife (if you cut a lot of bread, maybe get a nice big bread knife and a smaller tomato knife). Of course others can be handy, but Id rather have three good knives than fifty grocery-store-set ones.\u003C\u003Cfnote \I would add: if you only have a couple of knives, you always know which one to use because theres only one reasonable choice, and you have to keep them clean and ready to use because there arent any alternative choices (this is a generative constraint|GenerativeRestriction). When I cook in kitchens with a huge collection of knives, I frequently find myself searching for a suitable knife or using a knife thats only barely acceptable for the task, which is honestly a safety issue.\>>\n\nIf you still think good knives are too expensive, consider that if you seriously cut yourself even once because youre using a crappy knife that doesnt go where you want it to, your urgent-care bill will probably exceed the price of better ones.\n\nAnd grab a honing steel and use it on your unserrated knives anytime the blade gets even a little bit dull. Most people hardly ever sharpen their knives, which is a silly false economy. It only takes fifteen seconds to use a honing steel, and having a freshly sharpened knife will save you way more time and trouble than that. If you feel like you have to use force to cut, your knife is not sharp enough; it should just go right through. This isnt just a usability issue, its also a safety issue -- almost all knife injuries happen when the knife binds and then slips and goes somewhere you didnt intend when it breaks through. Ive even seen some people recommend sharpening your knives every time you wash them; I find that a little excessive, but not by too much!},{title:CoolGitCliOptions2014,bibliography:Git,caption:30 Git CLI options you should know about,created:20200908203556941,description:Another article by MrChristophePorteneuve, calling out some switches and other fancy options to common Git commands.,medium:article,modified:20200908203718487,tags:Source Public,type:text/vnd.tiddlywiki,url:https://medium.com/@porteneuve/30-git-cli-options-you-should-know-about-15423e8771df,year:2020,text:{{!!description}} As he points out, you may have learned the //commands//, but Git has so many options for each command that you could still be missing a lot!},{title:CoonRapidsDamRegionalPark,created:20230702205236238,creator:soren,gis-lat:45.14715007934969,gis-long:-93.30923795194543,gis-zoom:14,modified:20230702205257428,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CooperativeGeneration,created:20200115034156793,creator:soren,es:possible,modified:20200201045357289,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:The process by which a fictional world comes into being in a reader/experiencers mind through a collaboration between the text (or other substrate) and the experiencer.\n\nBecause of ImplicitFictionalContext, the substrate is not an even remotely complete description of the world. Give that to a logic engine, for example, and it would utterly fail at producing a reasonable simulation of the world. It follows that the world //is different// -- not just experienced somewhat differently -- for each person!\n\nCooperativeGeneration takes place with dreams too, even for a single person, between the dreamt content and the account pieced together mentally or in writing upon waking. Dreams are tightly related to literature|DreamsAsLiterature.\n\nConsensusPhysicalReality can even be seen as a collaborative effort: I present my own experience and the world works with me to produce events in reality. We control some things, the world controls others, and neither of us gets the final say (though the world has a much bigger part!). See DivorceRecommended.},{title:CopenhagenInterpretationOfEthics,created:20210307155254043,creator:soren,description:According to the CIOE, if you interact with a problem but do too little to improve it, you become culpable for the entire problem.,es:possible,modified:20231019020018606,modifier:soren,tags:Ethics Sociology Public Idea,type:text/vnd.tiddlywiki,text:If someone interacts with a problem in the world (e.g., homelessness, poverty) in a way that benefits both them and the people experiencing the problem, or just in general doesnt “do enough,” and this gets publicized, theyre often pilloried for being self-interested. The mindset presumably behind this is the CIOE: if you give some attention to a problem and you dont do everything you possibly can to solve it, you are now culpable for the problem.\n\nThis doesnt really make any sense; surely we should be encouraging behavior that helps others? I mean, it would be //better// if we could give more help to the poor, and do it without needing to benefit ourselves in the process, but surely giving less help is better than doing nothing, and finding solutions that people can get on board with because they help the benefactors as well doesnt seem to have any obvious ethical problems. We could be engaging in ContinuousImprovement!\n\nIm not even sure I can articulate why the Copenhagen Interpretation is popular. When you read the examples in the article|CopenhagenInterpretationOfEthics2015, it does seem a little ridiculous that PETA offered to pay poor peoples water bills in exchange for them going vegan for 30 days, but aside from seeming ridiculous, what actually is wrong with that? Is the implication that PETA|ThePeta should be //just paying peoples water bills// for no reason? Arguably that would actually be unethical, not to mention practically dumb; theyd be misusing their donors money (PETAs goal is not to give aid to the poor, and thats not why the money was donated). And obviously theyre //not// going to do that. So the implication then is that they should just not do anything to help the poor at all. Even though theyve found an opportunity to do that //and// advance their organizations goals if there happens to be someone who needs their water bills paid and doesnt mind going vegan for a month in exchange, its worse for them to offer that than to not help anyone at all?\n\nIt might come a little close to exploitation, but in these examples, Im not sure thats fair. If PETA visited immigrants crossing the US-Mexico border through the desert who were about to die of thirst and offered them a gallon of water if they signed a contract saying they would never eat meat again, that would be exploitation; but thats a situation in which surely youre ethically obligated to offer water immediately, for free, unless it would risk your own life. Paying strangers water bills, even if theyre about to have their water service shut off, is not an ethical obligation, so its reasonable to request compensation in return.\n\nYet this is such a common way of thinking that Im sure I do it, so now that its been brought to my attention Ill have to watch out for it!\n\nSource: CopenhagenInterpretationOfEthics2015.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Cremembercz \20210307214234666\\n\t\The {Copenhagen} Interpretation of Ethics states that when you {observe / come into contact with} (action) a problem, you {become responsible for it} (result).\>>\n\n\u003C\u003Crememberq \20210307214323456\\n\t\Give an example of an application of the Copenhagen Interpretation of Ethics (try to pick a new one).\\n\t\E.g., complaining about surge pricing/price gouging, doing an experiment that helps only some people, PETA offering to pay peoples bills if they become temporarily vegan\>>\n\n\u003C/$details>},{title:CopenhagenInterpretationOfEthics2015,author:,caption:The Copenhagen Interpretation of Ethics,completed:,created:20210307140747931,medium:article,modified:20210307155217865,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://blog.jaibot.com/the-copenhagen-interpretation-of-ethics/,year:2015,text:Presentation of the CopenhagenInterpretationOfEthics:\n\n> The Copenhagen Interpretation of Ethics says that when you observe or interact with a problem in any way, you can be blamed for it. At the very least, you are to blame for not doing more. Even if you don’t make the problem worse, even if you make it slightly better, the ethical burden of the problem falls on you as soon as you observe it. In particular, if you interact with a problem and benefit from it, you are a complete monster.},{title:CopyrightNotice,created:20210523180344305,modified:20210525001746812,tags:Meta Public,type:text/vnd.tiddlywiki,text:A TiddlyWiki blurs the lines between code and data|CodeDataEquivalence, but most TiddlyWikis can be divided into two types of tiddlers, content and system tiddlers. These two types of tiddlers are licensed differently.\n\n!! Content\n\n{{$:/config/zettelkasten/copyright/Content}}\n\n!! System tiddlers\n\n{{$:/config/zettelkasten/copyright/System}}},{title:CoreGroup,created:20200217165215668,creator:soren,es:confident,modified:20210728001716390,modifier:soren,tags:InterpersonalRelations Idea Public,type:text/vnd.tiddlywiki,text:The core group, as defined in AGroupIsItsOwnWorstEnemy200304, is a set of people in any community who care more than average about the group, spend more time with it, and have been around for a long time.\n\nThe core group is a critical part of the group structure compared to its size, and correspondingly it must have outsize power over the group. This sounds undemocratic and all, but if the group becomes entirely democratic in the sense of one-person-one-vote, it will almost invariably degenerate into majority tyranny and the group will lose cohesion: GroupIdentityIsFoundedOnExclusion, and if you anger the core group and they leave, the group is effectively gone. Internet communities know this and are designed accordingly -- new users dont get given moderator privileges right off the bat, for instance!\n\nWe see this degeneration happening in the StackOverflowCommunityDebacles. The core group has been alienated, whether rightly or wrongly, and the community is now on the fast track to completely falling apart. Without the core group, there are no moderators, there are no experts to answer questions, and there is nobody who cares about the community. SO management seems to bizarrely not understand the fact that the only reason their site provides significant value to anyone is due to the efforts of volunteers. Even Wikipedia, which has gotten to where it has as a result of extreme openness about who can contribute (see WikipediaPhilosophy), is known to rely powerfully on its core group and would be a piece of crap without it.},{title:CoronavirusClasses,created:20200516025556128,modified:20200516033241661,tags:PandemicMood Sociology Public Idea,type:text/vnd.tiddlywiki,text:The COVID-19 pandemic has, I believe, separated the UnitedStates into three broad new social classes:\n\n# People in professional and office sectors who are working from home.\n#* These people are doing their jobs more or less normally. Their workplace might suck and be trying to surveil them or embroil them in endless “social opportunities,” though.\n#* They might be worried about losing their jobs, theyre probably not in as good psychological shape as they would be, they may be trying to deal with their kids at the same time as theyre working, and they cant see their friends in real life.\n#* However, for them, by and large the pandemic is -- for now -- merely an annoyance and one of many personal challenges in an average life.\n\n# People who are out of work. The unemployment rate has reached over 20%, a level not seen since the GreatDepression. \n#* Many have no money. But many others are making more on unemployment than they did on work!\n#* These people have a lot of extra time on their hands and are even more isolated. Hope you like the people youre living with, or you have a lot of friends who landed in the same class!\n\n# People who are working, providing “essential services,” whether really essential or not.\n#* These people are at significantly greater risk of getting the virus, have no say in the matter, and generally are not getting any kind of hazard pay. If anything, theyre just more likely to lose their jobs and cant push back on anything.\n\nPeople in class 1 are overwhelmingly those who were middle-class to upper-class already -- though some of those folks didnt make the cut. The division between classes 2 and 3, I think, is relatively random, though I havent done any kind of analysis of that.\n\nThese three classes experience of the pandemic is //completely different//, and many people dont know a lot of others in the other groups, which may be contributing to the general feeling of DeteriorationOfReality in which some people are for MORE LOCKDOWN and some people are for OPEN EVERYTHING UP RIGHT THIS SECOND (some judge in Wisconsin, in a concurring opinion stating that the stay-at-home restriction was unconstitutional, compared said restriction to the internment of Japanese people during WorldWarTwo). Plus general political polarization, of course.},{title:CorvidNineteen,created:20200812033927333,creator:soren,es:mythological,modified:20241105043506191,modifier:soren,tags:Humor Language PandemicMood Anecdote Public Idea,type:text/vnd.tiddlywiki,text:Someone P.|PrivatePerson talked to right around the beginning of the pandemic repeatedly called the virus “CORVID-19.”\n\nYou have to admit, this whole thing would be much more dramatic if crows (nineteen of them?) showed up and attacked you, rather than microscopic particles of RNA.},{title:CosmicDance,created:20200128040832242,creator:soren,es:mythological,modified:20240320214749223,modifier:soren,tags:Music Public Idea,type:text/vnd.tiddlywiki,text:MsMaudeChardin says in HaroldAndMaude1971 that everyone needs to be able to play some music because “its the cosmic dance.” In a very Maudely way, theres great truth to this.\n\nI know in TheStOlafChoir I felt like I was connected to especially my choirmates but plenty of others and sometimes the whole world as well in a way that could certainly be conceived as something cosmic. Its a universal human impulse.\n\nI think music has to be live and in person|LiveMusicViaWatchhouse to fully experience the dance.\n\nIn \u003C\u003Crt 8831>>, I stated music is the “royal road to the divine”, like dreams|Dreaming for MrSigmundFreud are the “royal road to the unconscious.”\n\nIm not sure quite what to say about this except that I know Ill keep thinking about it.},{title:CosmosDb,created:20200521175544750,creator:soren,es:confident,modified:20211107181419811,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Microsofts NoSql Azure database.},{title:CouldWakeUpTomorrowDead,created:20200401183200585,description:Avoid assuming you will live long and keep your good fortune.,es:mythological,modified:20210611031509292,tags:MentalModel PersonalMythology PhilosophyOfLife PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:J.P.|PrivatePerson once announced to A.R.|PrivatePerson as we were walking out of TheStOlafChapelChoir:\n\n> You just never know how much time you have. You could wake up tomorrow dead.\n> ---\u003C\u003Crt 5125>>\n\nWhile a lovely Malapropism, its a great sentiment as well, which is why it makes a title! Related to CarpeDiem, but I see it as less flamboyant and less controversial. C.D. often connotes living a bit wild and with Maudacity because this day may be your last; CWUTD is to me largely about ensuring that youre content with your life at all times, not necessarily about maximizing experiences. In fact its not about maximizing anything, its maybe even about minimizing (bad feelings, unfinished threads, desire for control, the L.|PrivatePerson in us all). This is, more or less, Stoicism; and like Stoicism it is fairly difficult to argue with once you fully understand it. Cf. PerfectionIsSubtractive.\n\nThis is definitely a PandemicMood. The realization that someone you know is probably going to die due to this force of nature that suddenly arose out of nowhere is quite powerful and utterly unlike what we normally experience in everyday life. In a way thats kind of silly because, well, this tiddler doesnt just apply during a pandemic, but in JournalOfThePlagueYear MrDanielDefoe remarks upon the same thing (and also how quickly it passed at the end of the pandemic), so it seems to be a common feature of pandemics.},{title:CouncilCrestPark,created:20250623162401883,creator:soren,modified:20250623162402683,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:CounterintuitiveCorrelation,created:20200908173948495,creator:soren,es:confident,modified:20240319020745805,modifier:soren,tags:Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Sometimes it would intuitively appear that two things are positively correlated, but on closer inspection it turns out theyre actually negatively correlated (or vice versa). Examples:\n\n* \u003C\u003Csummarize AlcoholicsDontHaveAlcohol>>\n* ActivityPlasticity: Doing a lot of many things makes you more inclined to do even more of them, rather than less.\n* \u003C\u003Csummarize MoreSolutionsFewerAnswers>>\n* NegativeVisualization: Routinely thinking about all the bad things that could happen -- in the proper way -- makes most people happier, more mindful, and more resilient.\n* OvertimePhilosophy: Above a certain (often surprisingly low) level, working more hours on something will result in getting less done in total.\n\nCf. CounterintuitiveEfficiency.\n\n\u003C!--\n\u003Cul>\n\u003C$list filter\CounterintuitiveCorrelationbacklinks\>\n\t\u003Cli>\u003C$macrocall $name\summarize\ tiddler\u003C\u003CcurrentTiddler>>/>\u003C/li>\n\u003C/$list>\n\u003C/ul>\n-->},{title:CounterintuitiveEfficiency,created:20200411003859315,creator:soren,es:confident,modified:20201018172256563,modifier:soren,tags:Psychology Productivity Public Idea,type:text/vnd.tiddlywiki,text:Often, what turns out to be the most efficient is not what one would have expected would be the most efficient intuitively or by looking at the data available (perhaps due to a MetricBlackHole in the latter case). For instance, team production is non-greedy: optimizing the production of each individual team member or unit often does not lead to maximizing the BigPictureProductivity of the whole system. BringThePainForward is another example: if something is really hard and risky, it usually turns out better if you //do it more//. And working more hours doesnt make you more productive|OvertimePhilosophy.\n\nRelated: AlcoholicsDontHaveAlcohol.},{title:CountOfMonteCristo1846,author:Dumas,bibliography:LifetimeReading,caption:The Count of Monte Cristo,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034321,priority:3,readstatus:unread,recommended-by:GR,tags:Source Public,type:text/vnd.tiddlywiki,year:1846},{title:CountOnYourPartnerForOne,created:20200529222137390,creator:soren,description:If youre on the fence about what will work out, boldly take exactly one step over to the ambitious side.,es:confident,modified:20230908121624011,modifier:soren,tags:PersonalMythology PhilosophyOfLife LifeDirection Public Idea,type:text/vnd.tiddlywiki,text:Family lore regarding bid euchre: if youre waffling on the edge of whether you can make a particular number of tricks, always bid on the high side, expecting your partner will be able to get at least one trick. If you have a solid 3 with a bunch of junk, you can probably even comfortably say 4 if youre feeling daring or your partner announced they have 1 or 2. Counting on more is risky because your cards start needing to align perfectly, but its relatively rare that your partner has //nothing// good -- rare enough that your expected value is always higher when you go for it.\n\nAs a general rule, you can usually manage just a little bit more than you think you can, especially if youre an expert|ExpertsDontMakePlans.\n\nSee also JustAsk, Metafaith, BeBold, and particularly IfYoureReadyYoureLate.},{title:CountYourselfUp,created:20200715201048738,creator:soren,es:confident,modified:20231023024227008,modifier:soren,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:A brilliant technique I once learned from somewhere on TheReddit. You use it when you know you really need to do something, and how to do it is obvious, but you just really dont want to do it -- like when you have to get out of bed on a cold day or say something awkward|ImmediatelyAwkward but important.\n\nThe strategy is as deceptively simple|DeceptiveSimplicity as it is brilliant: In your head, begin counting up to five. When you get to five, you //have// to do that thing right then.\n\nIt sounds impossibly dumb and ineffective, but it absolutely works, at least for me (IfItWorksItsNotStupid). I think its the knowledge that if you ever dont actually do it at five, the technique will never work properly again, and its so useful you definitely dont want that to happen!},{title:CovidChallengeTrials,created:20210224123648067,es:likely,modified:20210320014402890,tags:PandemicMood Ethics Public Idea,type:text/vnd.tiddlywiki,text:(Wed. 2021-02-24.)\n\nSo far, the consensus has more or less been that intentionally exposing people to COVID for study purposes is unethical. But the more I think and read about this, the more I think this is completely wrong. In fact, I think it is unethical //not// to be doing these studies; it is StatisticalMurder. Its definitely going to be one for the textbooks years down the line, and I suspect most people are going to agree we got it wrong.\n\nHeres how trials would work. Say we want to run 100 challenge studies each with 100 participants. In a carefully controlled experiment, 100 participants is probably sufficient, but some might need to use a couple groupings. No big deal. Lets say on average a study is two groups. 50-ish lab challenge studies would be enough to answer a lot of pressing questions about COVID with a reasonable degree of certainty -- against what our vaccines are effective, a better estimate of infection fatality rate, how transmission typically occurs, etc. Out of this group, lets suppose about 1% die; thats probably high assuming we recruit mostly people with low risk for severe disease, but suppose it turns out a bit worse than we think, or we decide were comfortable running one or two with high-risk groups. So thats 100 people who die. Each participant (or their estate, in the unusual case) is paid $250,000 for their time and risk incurred -- a life-changing amount of money for many people. Total participant cost is $2.5B; that barely even moves the needle given how much were spending on this thing.\n\nBy giving better public health recommendations about whats dangerous and what isnt, and by speeding the availability of vaccines, these trials could easily save hundreds of thousands of lives -- maybe more! The value of this information is so great that Id be utterly shocked if they didnt save at least tens of thousands, and I would have been even last summer, before we knew the ultimate scale of the problem. All this at the cost of maybe 100 lives. From a utilitarian perspective, the choice is already obvious.\n\n//But isnt paying people to do this exploitative? Theyre not really going to be able to consent if they need the money, are they?// Sure, its exploitative...but only in the sense that employment is. We already pay people to do a wide variety of things that are extremely dangerous but also extremely valuable to society, like test-fly airplanes, run into burning buildings to save people, and fight wars. In all of these cases, people sign up for the job knowing that theres a significant probability theyll die or be seriously hurt doing it. As with the COVID study, they can look at the risks, both known and unknown, and balance them against their desire to push the frontiers of science, defend peoples lives and freedom, and get paid, and make an informed decision about their participation. The idea that people cant consent without knowing all the risks is bogus; I cant even leave my house without knowing all the risks that will face me that day. The entirety of life requires balancing risks, including unknown ones|UnknownUnknowns, and nobody thinks twice about it unless facing exceptional circumstances like these. Obviously, we give people the best information we can put together, and we dont lie to them about their risk -- //that// would actually be unethical. But that doesnt pose any issues to the studies. (Cf. also the CopenhagenInterpretationOfEthics: because we dont have the ability to completely prevent anyone from dying, we should do nothing and hurt several orders of magnitude more?)\n\n//Does this mean rich people will get away with not participating?// Sure it does, but the pandemic is already hitting poor people much worse than rich people. By improving overall outcomes, challenge trials arguably improve equity anyway. Plus, its only 10,000 people, which seems too small to claim a major impact on society-wide equity.\n\n//But were inviting people to a study in which we know people will die!// They know that as well as you do. They agree with you that its worth it. Most people will be fine and theyll be compensated fairly. A few people will die, but theyll die in full understanding that this was the risk they chose and that their sacrifice has saved thousands of others. Probably these people will have had more impact on society than anything else they could have done with their life, and we will be celebrating them for years to come.\n\nAnd what about the tens and hundreds of thousands of new COVID cases every day? They didnt consent to participate in a study, and some of them will die, without providing any useful information to science. I think its important to recognize that our usual cautious approach to science is even more inappropriate than usual here|EmergencyRules. The choice isnt just between knowing something by risking a few peoples lives and not knowing something by keeping everybody safe. Its between knowing something by risking a few peoples lives and not knowing something with a near-certainty of tens of thousands more deaths.},{title:CPlusPlus,created:20200520024504792,modified:20200520024716482,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:ObjectOrientedProgramming language. A complete mess after 40-some years of development, still tied to some of the mistakes of the C language, but is extremely high-performance and as such is usually the best language for certain tasks like game development.},{title:CraftsmanMindset,created:20200712155757311,creator:soren,es:likely,modified:20211229025411440,modifier:soren,tags:Psychology LifeDirection Employment Public Idea,type:text/vnd.tiddlywiki,text:From MrCalNewports SoGoodTheyCantIgnoreYou: It turns out that, in terms of happiness, it doesnt matter so much exactly //what// you do for a living, a major reason why the “follow your passion” approach to building a career path is flawed.\n\nWhat does matter is that you feel like a craftsman: youre doing something that is at least moderately valuable and productive, you care about your work, you have control over what you do and how you do it, and you strive to do those things well and improve them and yourself|ContinuousImprovement. //Control//, in fact, is the most important aspect in job satisfaction. (p. 39) \n\nThis means that starting with trying to figure out your \calling\ is usually missing the point. If youre doing what you thought you loved when you started, but you dont have that sense of control and arent good at it, your job will still suck.\n\nOwnership of your results is also a crucial part of the craftsman mindset, in my opinion (I dont think Newport talks a whole lot about this). The craftsman insists on doing a good job, both because it will help others respect him and because he cant respect himself otherwise. And when he makes mistakes, he doesnt try to blame them on other people, he sincerely apologizes, makes things right, and thinks about how he can avoid making them again. (This is arguably the only way to get better at ones craft.)\n\n\n!! References\n\n> Think for a moment about the great artists of the last hundred years and how they worked....Nobody told them: You must paint this sort of picture. You must begin painting precisely at eight-thirty A.M. You must paint with the people we select to work with you. And you must paint this way. The very idea is ludicrous. But you know what? Its ludicrous for you, too.\n> ---MrDanielPink, Drive2009, p. 106 (\u003C\u003Crt 11841>>)\n},{title:CrapTolerance,created:20221004010033626,creator:soren,description:Some fields provide more fertile ground for mediocre work to hang around than others.,es:possible,modified:20221004011100485,modifier:soren,tags:Idea FictionTheory Public,type:text/vnd.tiddlywiki,text:Notwithstanding SturgeonsLaw, I think there is something to the observation that much of sci-fi is crap. More generally, there are certain fields in which overall quality is less aggressively filtered for than others. In other words, its not true that more crap sci-fi is written, but more of it is read, more of it wins awards, than say, crap popular science or crap high literary fiction. I think this is because a big part of the appeal of sci-fi is exploring interesting new ideas, and there are quite a lot of people who have fascinating ideas but are pretty bad at putting a well-written story together, so it can still be worth slogging through a mediocre story to get at the ideas. (Cf. MindHacker #31, “Mine the Future”.) But even if its worthwhile, and thus hangs around, when you pick up 10 books and find you dislike the writing in 7 of them, this creates the impression that the field is bad.\n\nChristian rock and modern radio “bro country” seem to me to be in a similar situation. I used to listen to Christian rock and similar genres quite a bit when I was younger, and there is some legitimately good stuff out there (maybe not //amazing//, but worth listening to if youre into the subject matter). Theres also a large amount of complete garbage, and the surprising thing is that it gets a proportional amount of airplay, with approximately zero comment from anyone about how comparatively bad it is. (My grandfather|PrivatePerson used to call these “7/11 songs”: seven words, repeated eleven times.) In this case, Im not sure what the explanation is.\n\nThis seems vaguely related to the LawOfRemarkability.},{title:CrazyAtWork2018,author:Jason Fried & David Heinemeier Hansson,caption:It Doesnt Have to Be Crazy At Work,completed:20210728,created:20210809161107049,format:ebook,medium:book,modified:20210813131918707,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.amazon.com/gp/product/B079WV79TK/,year:2018,text:Irreverent and straightforward book about improving ones business and the workplace by MrJasonFried and MrDavidHeinemeierHansson, founders of TheBasecamp. I think one of the Amazon reviewers said it best when they said that almost every idea in the book made them think, “Well, duh!”, but then somehow nearly everyone still isnt doing it.\n\nA strong overarching mindset of ContinuousImprovement: we are told that “your company is a product,” and just as with a product, one should be seeking to experiment|ScientificMethod, make the next change that looks useful|FlaneurMethod, and gradually produce a great workplace.\n\nReads like a collection of short blog posts or pieces of life advice, each a couple of minutes long. In total, only takes about two hours to read -- highly recommended. Some of my favorites follow.\n\n!! Business\n\n* \u003C\u003Cstretch DontTryToChangeTheWorld>>\n* Take risks, but make them ones you can back out on if needed. Always stay in the black; this maintains calmness and slack.\n* Dont plan too far ahead. You dont need long-term goals|NoGoals besides “build a good product” and “stay profitable.” You will force yourself into commitments that are no longer useful or important|MostImportantThing at a later time. Every few weeks, pick the next most important thing to do.\n\n!! Work habits\n\n* 40 hours a week is a lot of time. You dont need more. It doesnt help. Dont do it.|OvertimePhilosophy\n* Protect your workers attention.|ScarceAttention Use office hours|ConversationalOfficeHours to enable people to still get help from others. If you have a question and the person you need to ask doesnt have office hours soon, figure it out yourself or ask someone else; if you start letting your standards slip, everything becomes an emergency.\n* \u003C\u003Cstretch CalendarFriction>>\n* \u003C\u003Cstretch LibraryRules>>\n* Vacation is vacation. Dont ask people to work on vacation, or even let them.\n* Communicate asynchronously and with carefully-thought-out proposals when possible (see LongFormWriting). Meetings are a last resort.\n* \u003C\u003Cstretch ThreePersonTeam>>\n\n!! Miscellaneous\n\n* Get good at saying no. RejectMostSuggestions. Dont make promises about the future unless absolutely necessary.\n* Both customers and customer service can take two attitudes toward a problem or complaint: “no big deal” or “the end of the world.” Your customer service should treat every problem like the end of the world, because this instantly converts 99% of customers to “no big deal”. Its virtually impossible to continue being mad when the person youre complaining to //overreacts// to the problem. Indeed, you can end up making your customers happier than if there was no problem at all. (Compare MakeProtestingTrivial.)},{title:CreatingAntimoney,created:20210611225726150,description:Creating, distributing, and ensuring reasonable equity in antimoney is quite curious.,es:mythological,modified:20210611230151427,tags:Public Idea,type:text/vnd.tiddlywiki,text:Its unclear how people acquire antimoney|Antimoney in the first place: are children assigned a quantity of antimoney when theyre born? If the government wants to stimulate the economy by transformatively increasing the money supply, does it throw away antimoney? (Perhaps it claws back antimoney from people and throws it away, because the government throwing away its own antimoney wouldnt have a very direct effect since it can already buy as much as it wants; actually //anyone// can.)\n\nDoes inflation consist of giving everyone antimoney every year?\n\nIn an antimoney economy, there would be no meaningful “wealth accumulation”, and “poverty accumulation” could be an economic problem but would be self-inflicted.},{title:CreatingDomesticTemples,at:202407122100,author:MsCathrynTheGrateful,blurb:Before the institutionalization of religion, people gathered together in their homes to pray, break bread, and develop a deeper connection to Source in their immediate community. These homes were known as domestic temples, often led by women and passed to their daughters in a matriarchal tradition. The sacred practice of home temple tending was orally handed down by generation, and is now known as the religion with no name from the groundbreaking book, The Immortality Key. With the wildfire in psychedelic spiritual practices and a rising population of young people determined to experience the Sacred as a personal, embodied experience, spiritual leaders are being asked to create simpler ways of gathering, of praying, and of fellowship rooted in genuine connection.. A new path is needed, one that honors the resources we have and cultivates a more intimate, open-hearted and neighborly spiritual community. Join Rev Cathryn the Grateful, founder of A Living Temple, an emerging domestic temple based in Charleston SC, and go deeper into the history of this tradition along with the nitty gritty on how to create and tend our Temples ~ body & home ~ and reignite a new generation of neighbors being neighborly.,caption:Wont You Be My Neighbor? Creating Domestic Temples for More Connected Neighborhoods,conference:2024WildGooseFestivalTrip,created:20240718031019580,creator:soren,medium:conference,modified:20240723025110943,modifier:soren,rating:average,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:The communities this woman discussed were a bit too much out of my wheelhouse for me to feel emotionally connected to those (it was very feminine and almost Dionysus-like, I would say). There was time for two questions at the end; she kind of info-dumped on us. Yet, many interesting ideas about her domestic temple for women and (particularly for me) improving ones neighborhood and the social ties there. Also a delightfully weird person.\u003C\u003Cfnote \To be clear, this is a compliment!\>>\n\nThis felt quite spiritually connected to the previous session|SeekingTheSacred. I think there are a couple of principles that would be relevant to sacred community:\n\n\u003C$m2.x number1>\n\nIts usually better to grow by existing members carefully inviting people who need your community and would be well suited for it, rather than advertising. Youre less likely to get folks who are troublesome in some way, and you wont grow too big too fast. In fact, you should try to stay small; if youre doing things right, youll grow without being able to help it (see MrDerekSivers, AnythingYouWant, here). At some point youll probably need to split up to maintain the scale you want; hopefully at that point you have someone whos ready for that leadership.\n\nI recall that the very successful BuyNothing movement requires an automatic neighborhood split at a certain size. The approach here presumably needs to be more organic, but the idea of refusing to exceed a certain size seems right; see AvoidScale. This is super counterintuitive for an American capitalist society, such that you need to actively defend it if you want it, or growth will just happen.\n\nComing back and thinking about this more, I think most traditional churches are too large -- at least for what I most want out of community. I think there are debates to be had over the right size; there are clear advantages to each of, say, five people, ten people, twenty people, fifty people, a hundred people. But after, say, two hundred, there are minimal benefits to larger scale and substantial costs. I think my ideal religious community wouldnt exceed fifty regular members, and might actually be quite a bit less. (I probably need to write more here to understand well enough to explain why.)\n\n\u003C/$m2.x>\n\u003C$m2.x number2>\n \nFeed people. Communal meals are always great. What you eat is probably also important; they do some kind of Ayurvedic soup.\n\n\u003C/$m2.x>\n\u003C$m2.x number3>\n\nTo the greatest extent possible, dont take money; pay for things in skills, caring, companionship, etc. (She has a bunch of mentors / coaches and only pays a couple of them; most of them need other things more, and she asks to see what they might be best served by.)\n\n\u003C/$m2.x>},{title:CreativePattern,caption:Creative,created:20210307222020241,description:Given a subject or scenario, the reviewer imagines a potential example or application.,es:likely,hideorphan:true,modified:20210522013404175,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:In a creative card, the reviewer is given a scenario and asked to imagine a potential example or application. The key idea, and a highly unusual aspect of this pattern, is that the reviewer should imagine a //new// example every time the prompt comes up; there is no single correct answer, and being able to identify only answers the reviewer recognizes she has given before is grounds for failing the card and considering the subject matter at more length.\n\nThe front of the card contains a prompt; the back of the card provides a number of examples, and potentially a little bit of context, so that if it turns out you have forgotten that context, you can get back in the right frame of mind to produce new examples.\n\nThis is a powerful and non-obvious type of card with substantial advantages and substantial disadvantages.\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:CreativePattern/Advantages,created:20210313134623639,modified:20210313134502384,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Requires the reviewer to reflect on the implications of knowledge.\n* Encourages the development of entirely new ideas on a scheduled basis, perhaps at moments that are advantageous to making further connections with other knowledge.\n* Can easily light up pathways that are almost impossible to write any other type of spaced-repetition prompt for. By posing a creative question, you are really testing whether you have the (not explicitly stated) background knowledge needed to produce an example or application.\n* When used correctly, tends to be highly memorable; because the related concepts must be well-mapped (see disadvantages below) prior to using this type of card, creative cards on the subject are enlightening and easy.},{title:CreativePattern/Cautions,created:20210313134636251,modified:20210313134514989,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Do not mistake this pattern with several antipatterns:\n** “Give an example of X,” with a single item on the back. (Youre being asked to remember what specific example the prompt is asking for, in addition to the example itself, which makes the question much harder to remember for no benefit whatsoever.)\n** “Give an example of X,” with several items on the back. (Without being asked to choose a //new// example every time, youll remember only one or two, and the card will likely be harder to remember than it should be, since youre not exercising the same pathways every time. See //Usage notes//.)\n** “Give some examples of X.” (You will find yourself giving the same two or three examples every time, and they will be hard to remember; plus the conditions under which you will mark yourself correct are unclear.)},{title:CreativePattern/Contributors,created:20210313134647595,modified:20210313134526326,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad. I was introduced to this type of card by Andy Matuschak.},{title:CreativePattern/Disadvantages,created:20210313134630817,modified:20210313134509520,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Very easy to misuse if you arent familiar with the pattern; it can easily be mistaken with several antipatterns. See //Cautions//.\n* Because there is no single correct answer on the back of the card, substantial knowledge of related information is required to be able to judge whether you are correct. You cannot add one or two creative cards on a new topic to your collection by themselves and expect to remember them.\n* Because there is no single correct answer on the back of the card, there may be an increased temptation to mark the question correct even when you didnt get a solid review.\n* Tends to take longer to review than other cards; some people find this irritating. Scoping your prompt well will reduce the time.\n* Creative cards are an unusual idiom, so sharing these with other users without an explanation may lead to confusion or bad results if the other user doesnt understand the purpose or how to use the card.},{title:CreativePattern/Examples,created:20210313134618373,modified:20210313134458080,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210307222159242\\n\t\Give an example of a way in which traditional voting fails to be fully representative, as it claims to be (try to pick a new one).\\n\t\E.g., gerrymandering, disenfranchisement, changes in voter turnout, groups with certain interests being generally less interested in voting\>>\n\t\n\u003C\u003Crememberq \20210307222133339\\n\t\~LaTeX: Give an example of a situation in which you might need to use `\\protect` (try to pick a new one).\\n\t\E.g., a footnote inside of a section name, a reference inside of an index entry. (Note: the most common situation causing expand-only mode is when writing to an aux file for later re-input.)\>>},{title:CreativePattern/Formula,created:20210313134608004,modified:20210313134446730,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** The words “give an example,” “suggest an application,” “imagine a situation,” or similar.\n** A description of the nature of the thing to imagine.\n** The phrase “(try to pick a new one)” or similar wording (try to pick one for all your prompts and be consistent).\n* Answer:\n** “E.g.,” “Ex.,” or a similar phrase/abbreviation introducing examples.\n** Several examples the reviewer could provide; remember that these are merely suggestions, and going “off-card” is encouraged.\n** Optionally, additional context, written in parentheses so it is clear the reviewer need not have remembered it.},{title:CreativePattern/UsageNotes,created:20210313134642081,modified:20210313134520790,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Including the text “try to pick a new one” or some analogue at the end of the prompt is highly recommended. You might think you know thats what youre supposed to do, but when youve been flipping through dozens of cards, it may be decidedly less obvious and you may find yourself using the same old example over and over again.\n* You should usually add creative cards only after adding several related cards giving the background and raw facts needed to understand the topic.},{title:Creativity,created:20201222193153942,creator:soren,es:confident,modified:20210828140824078,modifier:soren,tags:Definition Public,type:text/vnd.tiddlywiki,text:Studies of the ways in which people create new things and ideas and respond to new situations.},{title:Cribbage,created:20230521223047012,creator:soren,modified:20230521223048549,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:CritiqueOfPracticalReason1788,author:Kant,bibliography:LifetimeReading,caption:Critique of Practical Reason,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034337,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1788},{title:CritiqueOfPureReason1787,author:Kant,bibliography:LifetimeReading,caption:Critique of Pure Reason,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034355,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1787},{title:CrossClassConnections,created:20200326004010485,creator:soren,es:possible,modified:20220828025744751,modifier:soren,tags:Sociology Public Idea,type:text/vnd.tiddlywiki,text:Social connections are a great way to make things happen and learn important information, even in the internet age; having someone well-connected on your side is almost impossible to substitute for. (And a few things just arent on the internet at all|ThingsYouCantFindOnTheWeb.)\n\nI had a theory recently that social connections across classes and circumstances may be more valuable. They have more of a chance of serving as \connectors\ in SocialGraphTheory, and they will get you kinds of expertise that your social circles dont already have. E.g., for a trivial example, the other day I had a question I wanted to ask someone whos worked extensively in food service (how people figure out which servers are assigned which tables in a restaurant), but I dont have any connections (that I know about and would want to casually ask this question) to that area of society.\n\n!! References\n\n> If you want a successful network of connections, what matters is not how many people you know but how many different kinds of people you know.\n> ---MrDerekSivers, HowToLive2021 (24)},{title:cs-lewis-chatgpt-nuclear.png,type:image/png,created:20230406021249021,creator:soren,modified:20230406021258636,modifier:soren,tags:Image Public,_canonical_uri:./extimage/cs-lewis-chatgpt-nuclear.png},{title:CSharp,created:20200520024444806,modified:20200520024728726,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons version of Java and CPlusPlus.},{title:CSharpTodayAndTomorrow20200519,at:202005192100,caption:C# Today & Tomorrow - Live,created:20200518213446769,medium:video,modified:20210522015801830,presenter:MrMadsTorgersen MrDustinCampbell,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/61cbcae3-b5a5-4ddb-acd4-fe80117d5112,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nPresenters:\n\n* MrMadsTorgersen - lead designer of C#\n* MrDustinCampbell -- .NET developer-experience architect and C# language designer, also joining\n\nThis didnt prove as useful to general .NET knowledge as I hoped. I dont know enough C# to know what parts of this are really interesting!\n\nWe focused on the “tomorrow” half of the title, that is, C# 9, which is shipping with .NET 5 this November (even though they circled “today” on the screen and said that was the bit they were talking about, bizarrely).\n\nSome new things in C# 9:\n\n* Goals: simplicity, data and immutability\n* Mads: “My favorite slide tool is Visual Studio.”\n* Dustin: “so much ceremony” involved in C#\n\n* Main program can now be a sequence of statements, no silly class structure around it\n\n* Can use an object initializer with an immutable property\n** Dataclasses / records with keyword `data class` -- object becomes an immutable value, can create a similar object with some values changed via an initializer (shallow copy)\n*** Equality works with that without defining anything special, since it is a value type\n*** Private fields of these are public immutable properties, for shorthand\n\n* Pattern matching improvements\n** Type patterns\n** Relational patterns\n** Logical patterns\n\n* Can leave out the type in a `new` expression if its listed on the left side (opposite of the `var` form)\n\n* Can check parameters for null by putting a bang after them -- throws an exception immediately\n\n* Covariant returns -- can specify a more derived type on an override to avoid casts},{title:CultClassic,created:20200322162028450,creator:soren,modified:20201204041546572,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Type of movie (or other media) that everyone has a love-it-or-hate-it relationship with. Often does poorly at first and only becomes popular later.},{title:CultOfDone,author:Bre Pettis Kio Stark,caption:The Cult of Done Manifesto,completed:202501261200,created:20250126151251952,creator:soren,medium:article,modified:20250126151425712,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://designmanifestos.org/bre-pettis-and-kio-stark-2009-the-cult-of-done-manifesto/,year:2025,text:\u003C\u003C\u003C\n# There are three states of being. Not knowing, action and completion.\n# Accept that everything is a draft. It helps to get it done.\n# There is no editing stage.\n# Pretending you know what you’re doing is almost the same as knowing what you are doing, so just accept that you know what you’re doing even if you don’t and do it.\n# Banish procrastination. If you wait more than a week to get an idea done, abandon it.\n# The point of being done is not to finish but to get other things done.\n# Once you’re done you can throw it away.\n# Laugh at perfection. It’s boring and keeps you from being done.\n# People without dirty hands are wrong. Doing something makes you right.\n# Failure counts as done. So do mistakes.\n# Destruction is a variant of done.\n# If you have an idea and publish it on the internet, that counts as a ghost of done.\n# Done is the engine of more.\n\u003C\u003C\u003C\n\n\n{{!!url}}},{title:CultOfTheFantasyPedestrian20190814,caption:The Cult of the Fantasy Pedestrian,created:20200121223725394,creator:soren,medium:article,modified:20211101124929859,modifier:soren,rating:distinguished,readstatus:read,tags:Design Source Public,type:text/vnd.tiddlywiki,year:2019,text:\The Cult of the Fantasy Pedestrian\ is an article by MrDanielHerriges, published on the StrongTowns blog.\n\nhttps://www.strongtowns.org/journal/2019/8/14/the-cult-of-the-fantasy-pedestrian\n\nIt is a fantastic explication of why the DesignApproach is so critical to producing effective, human-friendly results in all areas of life. It can be described as follows:\n\n\u003C\u003C\u003C\nThe other problem with the mayor’s attitude is that it reflects a particular sort of MagicalThinking. Its a belief in what Im going to call the Cult of the Fantasy Pedestrian. \n\nThe Fantasy Pedestrian, you see, is more than happy to abide by the law. Every law. In all circumstances.\n\nThe Fantasy Pedestrian always crosses at the nearest crosswalk, no matter how far out of the way it may be.\n\nThe Fantasy Pedestrian presses the beg button and waits. They will never under any circumstance be in the road when they dont have a walk signal.\n\nThe Fantasy Pedestrian certainly doesnt start crossing on a flashing \dont walk\ countdown....\n\nIts not just Fantasy Pedestrians that adult mayors and directors of public works seem to believe in like children in the Tooth Fairy. Theres also the Fantasy Driver: the one who, if you design a speedway-like road with 14-foot lanes and massive clear zones, then put up a sign that says \Speed Limit 20 mph,\ will actually go 20, and not a hair over....\n\nSystems that are designed to account for fallible human behavior? Whoa, slow your roll, buddy.\n\u003C\u003C\u003C},{title:CuriosityAboutTheWorld,created:20230826233900365,creator:soren,description:Key need in any serious (platonic or romantic) relationships for me: is the other person curious about the world?,es:personal,modified:20241107022522737,modifier:soren,tags:Idea ManualForMe LifeDirection Public,type:text/vnd.tiddlywiki,text:Curiosity about the world is a key factor in who I choose to spend my time with. In one of my dating profiles, I describe myself as:\n\n> Pathologically curious and eclectic|EclecticMind; always looking for the next thing to figure out.\n\n(I think if you read much of MosaicMuse, this is obvious?)\n\nFor me, people who arent curious about the world just arent that interesting to talk to! Understanding the world is one of the key goals of my life, and its one of the main things you can improve on by having conversations with others. How do you even figure out //yourself// if youre not trying to do this? Beyond yourself and your hobbies and some gossip, what do you talk about otherwise? Those things are fine for some good conversations, but theyre not going to drive any conversations where you talk until two in the morning with your favorite people.\n\nAfter a three-month romantic relationship|MariePostmortem/CuriosityDealbreaker with someone who wasnt curious about the world|PrivatePerson, I resolved never to keep dating anyone I cant reliably conclude is curious about the world.\u003C\u003Cfnote \Its not that hard to figure this out. If you have a conversation with the goal of trying to figure this out and you cant tell -- at least after enough time has gone by that the initial new-person anxiety has cleared up -- that means they arent.\>> (The proximate cause of our breakup was entirely unrelated, but three months was enough to identify clearly in retrospect that this would never work long-term.) And I dont think Id ever be best friends with someone who wasnt so curious. They certainly wouldnt be amazingly awesome|AmazinglyAwesomeFriend.\n\nThere was|VibeCheckSsi agreement at SSI|2024BowmansSsi that this is a key component of a workable relationship for most rationalist-adjacent people -- maybe the only quality of that cluster of people that is non-negotiable for people within it.},{title:CustomerCollaboration,created:20200202024751818,creator:soren,es:likely,modified:20210515034522907,modifier:soren,tags:AgilePhilosophy Public InterpersonalRelations Idea,type:text/vnd.tiddlywiki,text:The AgilePhilosophy values //customer collaboration// over //contract negotiation//. Dont make the customer pay for failing to specify things up front...because AgileHumility means that its simply not possible to know the requirements up front. Expecting otherwise only creates an adversarial relationship with the customer and makes them less satisfied with your service: and what, ultimately, can be more important to your success than satisfying your customer?\n\nThis doesnt mean no scoping or other valuable negotiations can be done with contracts. Contracts are important. But the developers should work //with// the customer, not jockey with them for power and legal advantage. Writing good software is an iterative|IterativeProcess journey of discovery that the customer and the developers embark on together, and it is silly to penalize the customer or go through layers of intermediaries to rescope a project. If you cant manage some reasonable changes without doing that, youre doing it wrong...and we need to BringThePainForward, thus this principle.\n\nSee also CustomerFocus.\n\nI suspect in the future, it will be important not to over-involve customers, at least when your customers are a large and somewhat impersonal group, because Agile and customer-focused design has been such a success, we are now going to experience an AgileDeclineEffect.},{title:CustomerFocus,caption:Customer Focus,created:20200406021657835,creator:soren,es:confident,modified:20220309124958465,modifier:soren,tags:Process Business UnicornProject AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:One of the FiveIdeals of the UnicornProject. This is kind of the //sine qua non//, in the end. You can be local and simple|LocalityAndSimplicity, focused, flowing, and joyful|FocusFlowAndJoy, improve your daily work|ImprovementOfDailyWork, and cultivate PsychologicalSafety, but if you dont create value for a customer ultimately its all for naught (congratulations on doing something WorthlessEfficiently).\n\nEnsuring that all work can be tied back to value for the customer (and hopefully you know who your customer is) is a fundamental and enormously useful SanityCheck on anything you do in a business, development or not. If a task doesnt improve the businesss ability to create value for its customers in some way or another, what the hell are you doing it for? (Cf. PersonalMotto for the PhilosophyOfLife version of this concept.)\n\nA similar Agile Manifesto|AgilePhilosophy view of this is CustomerCollaboration. The idea differs somewhat in that it focuses on how you interact with the customer, whereas Customer Focus is more something you think about while designing. But maybe thats a silly distinction, and both of them have the same goals in mind.},{title:Daemon,created:20200908225057602,creator:soren,es:likely,modified:20240402013921025,modifier:soren,tags:Definition Identity Metaphor Public Idea,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:Quasi-magical animal-formed being in MrPhilipPullmans HisDarkMaterials and BookOfDust series. There is no single English word that represents all the things daemons seem to represent; //soul// is probably the closest, but its not accurate because a daemon is still distinct from some animating and thoughtful force within the person themselves, as we know from instances in which they are separated and feel something deeply missing but are still functional. Daemons also dematerialize and separate from the persons afterlife-journeying spirit at death -- permanently until Lyra frees the dead|LyraAsJesus in AmberSpyglass to reunite with them.\n\nSecretCommonwealth2019 takes a sharp turn away from what seems to be the established mythology/fantasy science: suddenly there are people with deep rifts between them and their daemons, people who sell them out of desperation (gives new meaning to “selling your soul to the devil,” though without the connotation of being greedy), and all kinds of other things. What you thought you knew is suddenly upended, though thats simultaneously happening to the characters too.\n\nOther things daemons seem to be connected with:\n\n* imagination\n* conscience\n* various kinds of inner/mind voice|InternalMonologue\n\nUltimately I think daemons are best understood as a deep metaphor with many referents, although they are most likely also a real element of the world. SecretCommonwealth2019 introduces doubt to the point of creating a sort of MagicalRealism: some argue that daemons do not actually exist but are projections of our imagination. It certainly //seems// that daemons can have physical effects on the world, but you suddenly start questioning everything youve read so far! (And that leads us to wonder if there //is// any difference between a metaphorical and meaningful “delusion” shared among everyone in the world and actual reality. It meets the consensus component of ConsensusPhysicalReality, after all.)\n\nI find daemons a ripe area for various kinds of metaphysical speculation and experimental storytelling. Directions explored thus far in the ZK:\n\n* DaemonsAndVideoGames\n* MyRiseGame\n\n{{Daemon/p||PrivateChunk}}},{title:DaemonsAndVideoGames,created:20200908225408652,es:mythological,modified:20201203153017540,tags:Game Imagination Public WhatIf Idea,type:text/vnd.tiddlywiki,text:Mildly bizarre thought which Ive thought might be a fun question for Worldbuilding.SE|https://worldbuilding.stackexchange.com/, but seems slightly off-topic and I dont have the energy to write it up: In a world full of Daemons paired with humans, how would video games work? (MsLyraSilvertongues world develops differently enough from ConsensusPhysicalReality that we can cop out and say they havent invented video games yet if we want to be boring, but their development is completely imaginable and not very far off.)\n\nHear me out. Presumably many genres, such as first-person shooters or adventure games, would have to include daemons to be a realistic model of the world. This isnt like pants|NonexistenceOfPants, which we can just ignore because a game has to be a simplified model of the world|AllMapsLie. It would be more like making characters not have heads, or consciousness, or free will. I cant really imagine a video game designer just choosing not to include them in a large, immersive game, at least not once games got beyond a basic level of design.\n\nSurely the daemon cannot be controlled by an AI, though, as in my concept game Rise; that would be super-weird. Your daemon would just sit nearby while the computer decided what he/she was doing?\n\nThat seemingly leaves the conclusion that the daemon must somehow be able to control the game as well. But how could a physical mechanism be designed to allow animal forms that diverse to play a game? You cant build a controller that works for a bear, a mouse, and a butterfly! Seemingly, some forms would not have the motor control or motive force required at all; would they just be excluded from playing video games?\n\nPerhaps they could both decide on actions, and the player could control both? This seems most plausible, but would seem to require an inordinately complicated control scheme and degree of concentration that would likely be beyond most casual players ability. Unless its possible for a daemon to independently control their humans body, so that one hand could be controlling each; but theres no evidence of daemons having such abilities anywhere in HisDarkMaterials or related literature. Or perhaps real-time games involving lifelike action would be rare to nonexistent. Or perhaps brain-computer interfaces would be a prerequisite for many kinds of games; I could imagine daemon control of computer systems even being an impetus for the development of such interfaces.},{title:DaemonVoices,caption:Daemon Voices,created:20200122031235318,format:hardcover,medium:book,modified:20210606224134145,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Lovely book of essays on storytelling by MrPhilipPullman, compiled from about 20 years of writing and lecture transcripts. Discusses some things related to HisDarkMaterials but also just ideas on what makes a story, how to write stories, their role in human life, and so on. Barely anything I didnt think was worth reading.\n\nId love to put more information about the essays in here, but Im going to go for adding things if and when theyre helpful to relate to other stuff, because I cant write a million words here...},{title:DAG,created:20201228144958333,modified:20201228150534695,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Directed Acyclic Graph, a graph|GraphTheory in which edges are directed and cannot form any cycles (where you could go around and around for as long as you like).\n\nExtremely useful in modeling a wide variety of things, like software Dependencies, projects or tasks, family trees and histories, and so on.},{title:DahlGlue,created:20200326020844499,creator:soren,es:likely,modified:20251010025949171,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:MrRoaldDahl seems to be obsessed with superglue, maybe just because its InherentlyFunny, especially in fiction when it can be made to bond things it probably wouldnt in everyday life:\n\n* In Matilda, Matilda superglues her fathers hat on; in the movie version theres a TV game show where people are painted in glue and then have money sprayed at them.\n* In Twits, the Twits catch songbirds for their Bird Pie every week by painting “Hugtight” glue on a tree. At the end, in fair turnabout, they get superglued to the floor by their heads and given “The Shrinks,” where they gradually turn into a pile of clothes from compression due to gravity.},{title:DailyRoseGlasses,created:20200407014522585,creator:soren,modified:20201026205433289,modifier:soren,tags:Psychology SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:At the end of the day, especially in bed, your thoughts can do no wrong. You can confidently decide to do something you never would at any other time, think you understand it, be sure youre doing it right, only to realize the next morning that its completely absurd or just PuttingTheElseBeforeTheIf.\n\nIn the morning, youre highly reasonable and productive. Ive seen some evidence you might however be less imaginative and creative, which would fit in with the above.\n\n(In the middle of the night, youre just confused. RandomThoughts is full of absurdist voice memos Ive recorded in the middle of the night over the years, e.g., #10630, suggesting a band who did songs about Microsofts BI/automation tools called the Power Specialists, or #7513, on an exciting geometry problem involving whether you can create a perfect square from connecting arbitrarily chosen points on each of the four walls of any room.)\n\nSee the phrase “cold light of day” and HowBasecampCommunicates Principle 18: “The end of the day has a way of convincing you what youve done is good, but the next morning has a way of telling you the truth.”\n\nCould perhaps be considered a type of CognitiveBias.},{title:DailyScrum,created:20200512022453257,modified:20201201221529706,tags:MeetingTheory ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:A //daily scrum// (often referred to just as a //stand-up// since it is often held standing to help keep the meeting brief; see also StandupDumbbell) is a 15-minute meeting held every day by a team to ask and answer questions, ensure everyone is still heading in the same direction, and identify any impediments to completing work as planned.\n\nThe three most important questions to answer are:\n\n* What did we do yesterday that helped us meet our sprint goal?\n* What are we going to do today?\n* What, if any, impediments might prevent us from meeting our goal? (This is really the critical part of a scrum as pointed out by MakingWorkVisible2017: its the part where you most benefit from being together and discuss. The other parts can be managed effectively via good visibility in work-planning systems, if desired.)\n\nBreakout sessions and further detailed planning, if necessary, may be flexibly and conveniently held after the completion of the Daily Scrum.\n\nSee also SprintPlanningMeeting.\n\nWhile the daily stand-up gained popularity as part of Scrum, its often used in other methodologies as well.},{title:DakotaSkye,caption:Dakota Skye,created:20200324030055925,medium:film,modified:20210810233120279,rating:average,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,text:Film about a high-school girl who cant be fooled by lies: she sees what the person actually means as a subtitle in her field of vision. Explores what that ends up meaning (lies are really important!).},{title:DangersOfExtrinsicMotivation,created:20210809161722015,description:Offering rewards for behaving in a certain way can //reduce// the incidence of good behavior in some circumstances, including in some of the most relevant ones in modern life.,es:possible,modified:20210809165428876,tags:Psychology Employment Sociology Public Idea,type:text/vnd.tiddlywiki,text:According to Drive2009, offering rewards (or dishing out punishments) in the wrong way can backfire and //reduce// peoples motivation to perform tasks, as well as their effectiveness at them.\n\nThe book terms such rewards and punishments “carrots and sticks”, “extrinsic motivation,” or “Motivation 2.0” (1.0 being the survival drive) and suggests that they have the following issues:\n\n# They can extinguish intrinsic motivation -- the potential reward or punishment becomes our focus and takes away our innate desire to do a good job.\n# They can diminish performance -- when all we care about is the reward or punishment, we just want to meet expectations.\n# They can crush creativity -- again, these incentives make us goal-oriented and inhibit divergent thinking|DivergentAndConvergentThinking even where it would be useful.\n# They can crowd out good behavior -- dangling a reward in front of people can make them forget about their intrinsic motivation.\n# They can encourage cheating, shortcuts, and unethical behavior -- self-explanatory.\n# They can become addictive -- soon you wont even consider doing the task without the reward.\n# They can foster short-term thinking -- when goals are set for, say, a quarter at a time, people locally optimize|LocalOptimization for the immediate metric theyre being evaluated on rather than the overall long-term picture|BigPictureProductivity.\n\nThis said, rewards are not bad in all circumstances. The danger comes from making a reward conditional on completing a task and having people understand this up front when they take on the task (MrDanielPink calls these “if-then” rewards); these rewards displace peoples intrinsic motivation, which is often more powerful and produces better results. Rewards that are unexpected are helpful, as are incentives that remove obstacles (for instance, giving people paid time off work to donate blood or vote). And without a baseline level of compensation (e.g., a fair salary), people wont have intrinsic motivation to work at their best.\n\nSimilarly, in the case that you have no choice but to have people do something which is inherently boring and has little opportunity for creativity|Creativity, it probably doesnt hurt to use extrinsic motivators in whatever way you like: theres no intrinsic motivation to damage in the first place.\n\nIn other circumstances, one should instead consider ReplacementsForExtrinsicMotivation.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20210809165145910\\n\t\Extrinsic, conditional rewards tend to have what effect on intrinsic motivation to perform a task?\\n\t\They extinguish it.\>>\n\n\u003C\u003Cremembercz \20210809165248574\\n\t\Extrinsic, conditional rewards can become {addictive} when they become an expected part of the task.\>>\n\n\u003C\u003Crememberq \20210809165123926\\n\t\Why is it safe to use extrinsic motivators for tasks that are inherently boring and cant be changed?\\n\t\There is no intrinsic motivation to damage in the first place.\>>\n\n\u003C/$details>},{title:DanielDeronda1876,author:George Eliot,bibliography:LifetimeReading,caption:Daniel Deronda,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034382,priority:,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1876,text:See also BBC miniseries},{title:DarkPattern,created:20240402011930310,creator:soren,modified:20240509112112377,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:UI design intended to trick the user into doing something they didnt intend to do.},{title:DataAsKnowledgeGraph,created:20210317135721364,es:likely,modified:20210628023202706,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:I recently participated in a presentation by TheGoogle about why we should use the GoogleCloudPlatform at TheFederatedInsurance. H.K.|PrivatePerson, an expert in insurance tech among other things (she was also an NSA cryptographer in the late 90s, for example, according to TheLinkedIn!) discussed how Googles approach to pretty much everything is the “knowledge graph,” and how this is a key differentiator with regards to data.\n\nTraditional data is column/row driven and made up of boxes|DontPartitionKnowledge, and you have to fully understand the schema and have it be consistent everywhere, and yadda yadda yadda; it all has to be neatly organized top-down. But this really isnt suitable for many of the kinds of things we want to use data for: we want to be able to answer questions quickly about things weve never asked before, using unstructured data if necessary; we need networks|HierarchiesVersusNetworks. The knowledge graph creates that network. Its evidently how Google search works (which makes sense). \n\nIn essence, when we interact with data, we want the consideration to be what question we want to ask, not how the medium works -- or to put it in programming terms, we want to use data declaratively|DeclarativeProgramming.\n\nIt struck me this is very TiddlyWiki. We avoid partitioning knowledge|DontPartitionKnowledge and aim for reusability and modeling data in a way that permits it to be used in ways that we cant yet foresee. Filters and wikitext let us very quickly ask and then reuse questions. The scale is larger with Google, of course, and theres more opportunity for MachineLearning to stick its nose in, but the foundational ideas are the same.\n\nCf. MicrosoftGraph.},{title:DataCenterSustainability,created:20200910163902490,es:possible,modified:20210511011119534,tags:Systems Environmentalism Code Public Idea,type:text/vnd.tiddlywiki,text:Data centers consume a massive amount of power and contain a large amount of embodied carbon in all of their computers (not to mention rare-earth metals and so on).\n\nIt does seem that companies building the centers are taking this seriously. Microsoft is making some pretty significant commitments|MicrosoftCarbonCommitments, for instance. I understand TheAmazon is currently the worst, as one would cynically expect.\n\nIts also worth pointing out that data centers are capturing work that would previously have been done in on-premises systems, which are inherently less efficient due to the lack of available load-balancing -- you are going to have to have lots of surplus capacity for most workloads so you dont melt down into a pile of goo when you get load spikes. An appropriately managed cloud service works like insurance -- they dont have to maintain a whole bunch of extra hot capacity because they can trust that not everyone will need extra capacity at one time. (Spot pricing helps to level the load even more -- if you have a non-time-sensitive load, the provider can actually shut down your workload temporarily if theres a whole-datacenter spike.)\n\nOf course, theres a lot of InducedDemand going on too, especially with the rise of MachineLearning which can only be plausibly done in the cloud at scale, so the fact that cloud is theoretically more efficient doesnt mean data-center environmental impact is nulled out by any means.},{title:DataIsDangerous,created:20200326022355176,es:likely,modified:20201120174527295,tags:Reasoning Math Public Idea,type:text/vnd.tiddlywiki,text:Having wrong data, or right data interpreted wrongly, is often worse than having no data at all.\n\nLets be careful here, because we can have incomplete data or data where we can estimate the inconsistencies and uncertainty and be better off. But it can also be hard to really do a good job at that. See NeverGoToSeaWithTwoWatches. Most importantly, due to a massive failure to include statistical literacy in a standard education, a substantial majority of otherwise quite intelligent people today understand almost nothing about statistics and routinely believe that presented data means things it does not. Heck, even people who do know quite a bit about statistics sometimes believe that data means things it does not. Statistics is //hard// to do correctly, even when people arent trying to lie with it|HowToLieWithStatistics.\n\nIf your data is wrong, or you believe it means something it does not, then you will feel confident. You will trust your intuition less, because now you have data, and data is better than intuition (it usually is...when its right). And you will tell others that youre right, because you have data. Meanwhile, the data actually says the opposite, or it just doesnt support what youre suggesting in any way. Essentially, youre creating UnknownUnknowns from known unknowns.\n\nBe careful with data, especially if you know nothing about it, or you know enough about it to be dangerous. Nobody talks about this with respect to BusinessIntelligence, but I see significant dangers there.},{title:DateNarrowing,created:20200827192515065,es:likely,modified:20210522022458823,tags:Process Information Public Idea,type:text/vnd.tiddlywiki,text:The closer you get to a target date, the more precise you can reasonably get about it. Its silly to assume you have hour-level precision for something thats a year out (unless you specifically scheduled an appointment with someone, and even then thats arguably not the smartest way to do it because theres a fairly high chance you have to reschedule). On the other hand, its easy to have hour-level precision about tomorrow morning.\n\nProcesses should allow general estimates, then more specific estimates, then exact times as events get closer. A calendar app that understood this procedure could be extremely helpful. Such a tool could tell you at what level of precision you should schedule (e.g., more than a year out, one month; more than two months out, one week; more than a week out, one day; less, one hour). It would also prompt you to add more precision when an event approached a line of precision. This is quite like what many medical offices will do for distant appointments: they tell you about when youll need to come in again, but they dont have you schedule yet, they send you an email or a postcard a couple of weeks ahead of when youre supposed to come back, and then you call and set an actual appointment time.\n\nLike Email, this is probably a tricky thing to reform because the model of a Calendar is so entrenched in applications, interchange mechanisms, and peoples heads.\n\nMentioned obliquely in F.I.B.C.|PrivatePersons ScrumGuide discussion, but I remember reading an article explicitly on this a few months ago (cant remember where it was).},{title:DaVinciNotebooks,author:Leonardo da Vinci,bibliography:LifetimeReading,caption:Notebooks,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034399,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Daylog,created:20210810183159582,creator:soren,es:confident,modified:20220909214043097,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:PowerShell tool I wrote at TheFederatedInsurance to maintain a work diary with integrated time-tracking in a text file. I got approval from the powers that be to bring it with me when I left Federated, and its now open-source|https://github.com/sobjornstad/PSDaylog.},{title:Dazne,created:20201201024944447,modified:20201201024930876,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://dazne.net,text:Blog on motivation, work, personal philosophy, etc. {{!!url}}.},{title:DeadAnnaEffect,created:20201204041531148,es:personal,modified:20210509011848428,tags:PersonalMythology Public Definition Idea,type:text/vnd.tiddlywiki,text:Colloquial name for the state of being in an ImportanceTrance.},{title:DeadDoNoWrong,created:20200125212931943,es:likely,modified:20210608213205605,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:For most people, dying is the best thing you can do for your reputation. Everyone is a saint at their funeral, and people tend to pass over the bad and focus on the good when looking back, unless you were really not just a huge slimeball but public about it (e.g., Hitler).\n\nPerhaps a combination of people feeling sorry for you and being reminded of their own mortality and how theyd like to be remembered. And somehow, it just seems wrong to focus on someones faults at that point, like theyre no longer important now that the person isnt here anymore.\n\n!! References\n\n> //de mortuis nil nisi bonum//\n> ---ancient proverb|https://en.wikipedia.org/wiki/De_mortuis_nil_nisi_bonum, usually rendered in Latin},{title:DeadlinesInScrum,created:20200326202834555,es:possible,modified:20210522231928587,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:AgileInTheRealWorld contends that it is a myth that Scrum is incompatible with deadlines and estimates. Estimates are already included in story points and timelines can be estimated by combining story points, velocity, and basic knowledge about upcoming events (e.g., new or departing team members, holidays).\n\nAccounting for deadlines is simply a matter of balancing features and timeline (not team size|TeamSizeAndDeadlines). StorySlicing can assist if you have to remove features to fit in the allotted timeline due to earlier misestimations or uncertainty.},{title:DeadPoetsSociety,caption:Dead Poets Society,created:20200401224726403,medium:film,modified:20200808142651628,tags:Source Film Public,type:text/vnd.tiddlywiki,text:CultClassic movie in which a bunch of boys and a teacher at a boarding school get into Romantic poetry and make a secret society out of it. CarpeDiem figures heavily. I dont remember too much about it (saw it in high-school English class, of course).},{title:DeadSouls1842,author:Gogol,bibliography:LifetimeReading,caption:Dead Souls,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034428,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1842},{title:DeathAndLifeOfGreatAmericanCities1961,author:Jacobs,bibliography:LifetimeReading,caption:The Death and Life of Great American Cities,completed:202111191200,created:20210703170128000,creator:soren,genre:Sociology,medium:book,modified:20220107135043730,modifier:soren,priority:2,rating:good,readstatus:read,recommended-by:TBBOAT,tags:Source Public Stub,type:text/vnd.tiddlywiki,year:1961,text:Book by MsJaneJacobs discussing truths about how cities operate that have escaped many urban planners. Published in 1961. Reading this in 2021, sixty years later, some things have gotten better, while others are still clearly poorly understood. The point is that how lively cities and areas of cities work hasnt changed, yet central planning believes it has, or can be changed, so the core insights are relevant in any decade!\n\nOn the front cover of my copy, the //New York Times Book Review// calls this “Perhaps the most influential single work in the history of town planning…a work of literature.”\u003C\u003Cfnote \Gripe: Jacobs specifically says multiple times that people shouldnt apply her work to anything that cant be termed a “large city” except perhaps exceedingly carefully. That appears to have escaped this reviewer, or else they have a very strange idea of the definition of the word “town”.\>> That feels about right. This was one of those books which was referenced by pretty much everything I read on the topic, and so after about the fifth time that happens, you realize you need to pick up a copy!\n\nJacobs is a great writer and also wonderfully snarky, a woman after my own heart! She feels just a titch dated today, but in the manner of a quaint historic building thats still in active use. The book is almost 500 pages but went fast. For example, in the introduction:\n\n> But look what we have built with the first several billions of urban renewal funding: Low-income projects that become worse centers of delinquency, vandalism and general social hopelessness than the slums they were supposed to replace. Middle-income housing projects which are truly marvels of dullness and regimentation, sealed against any buoyancy or vitality of city life. Luxury housing projects that mitigate their inanity, or try to, with a vapid vulgarity. Cultural centers that are unable to support a good bookstore. Civic centers that are avoided by everyone but bums, who have fewer choices of loitering place than others. Commercial centers that are lackluster imitations of standardized suburban chain-store shopping. Promenades that go from no place to nowhere and have no promenaders. Expressways that eviscerate great cities. This is not the rebuilding of cities. This is the sacking of cities.\n\n(Almost all of this is still happening across the US, except the centrally planned low-income housing projects!)\n\n\n!! Outline\n\n!!! Chapter 2: The uses of sidewalks: safety\n\nExplains the concept of EyesOnTheStreet, which both needs to be understood in itself and provides many of the foundations that future chapters rely on.\n\n\n!!! Parks\n\nParks are misunderstood. They are not unqualified goods; rather, there are few nicer things in a city than good parks, and few more obnoxious things than bad parks. Like anything else in a city, the park itself does not determine whether it is good or bad, although its design can certainly contribute -- it must be taken in its full context. A park that isnt on a route between places, or is on the edge of a district, or doesnt have interesting things on its edges, will likely be a park people dont use. Much like streets, people also need to use the park at all times of day for best effect. Parks people dont use, in the middle of cities, are likely to be dangerous places that get repeatedly vandalized (see EyesOnTheStreet). Plus, expensive parks that nobody uses are inherently frustrating and wasteful.\n\nSimilarly, having too many parks, or trying to substitute parks for streets, can have unpleasant effects. Cities need a certain amount of density, and something resembling the Garden City plan (huge towers surrounded by tons of open space) is not an effective solution; you are left with no eyes on the street, relatively little visual interest, and vast open distances to traverse between things. Empty city parks are less enjoyable places to be than moderately used ones.\n\n\n\nChildren should be able to use the street. The degree of (non-)supervision treated matter-of-factly here is astounding in 2021 -- not because its ridiculous but because weve clearly lost something very important. In Jacobss neighborhood, random people would clearly stop children who were misbehaving, and consequently it was OK to send children with single-digit ages out on their own. As Jacobs rightly points out, this helps them develop independence and learn all sorts of important lessons about society, and in the right environment it can still be very safe.\u003C\u003Cfnote \Not to mention that it keeps parents sane and productive when they dont have to be carefully watching their own older children 100% of the time!\>> At the time, the move was to get children off streets and into playgrounds and other circumscribed environments…exactly what weve done today. I doubt Jacobs would have foreseen how bad it would get.\n\n\n\nIts important, for streets, buildings, and parks, to have visual differences. There should be a mix of large and small buildings, geometry and the street grid should not be entirely regular, and there should be some places where you can see a great distance away and others where your view is obstructed. These things make the city a more beautiful place; they also make navigation easier (its extremely hard to recognize where you are when everything looks the same) and encourage people to move around to more places, which is excellent for vitality and business.\n\n\nOld buildings are important -- by which Jacobs clarifies she does not mean beautiful historic buildings, but just plain crappy buildings that have seen better days. Its hard enough to start a new, speculative business or a life as a low-income person, but its even harder when you have only brand-new buildings which cost a fortune to do it in. Thus, a diverse, interesting, and economically productive area has some newer buildings and some older buildings. When those who occupy older buildings are extremely successful, they can improve or rebuild them, and todays newer buildings will become tomorrows older ones.\n\nThis is going to be -- really, already is -- a massive problem for large swaths of American suburbia, built all at once to its final, finished state. At some point, everything deteriorates to a blighted state, compounded by the fact that most such buildings arent made to last in the first place (to be clear, traditionally developed districts often have their share of ramshackle buildings, but these werent being put up all at once by multinational companies who had the up-front money to build well, and they were intended to be replaced with excellent ones if the area prospered). Then what? Raze the whole thing and build again? Everyone moves somewhere else? Further, the construction offers limited options for adaptation. What do you do with an old Wal-Mart? The only thing it can be is another big-box store, or a warehouse or industrial center. If the area changes substantially, youre left with…a crumbling Wal-Mart.\n\n\nFour conditions for diversity (p. 150)\n\n\nMore on mixed uses, in synergy with eyes on the street\n\n\nSmall blocks\n\n\nConcentration and density\n\n\nSelf-destruction of diversity\n\n\nBorder vacuums\n\n\nUnslumming -- fix it in place\n\n\nCataclysmic money (cf. OldBuildings and Alexander)\n\n\nProposal for subsidization\n\n\nCars arent the problem\n\n\nGoverning districts, administration, neighborhood organization\n\nKind of problem a city is},{title:DeathByAThousandPaperCuts,created:20200423162702589,creator:soren,es:confident,modified:20220118005842569,modifier:soren,tags:MentalModel Expression Public Idea,type:text/vnd.tiddlywiki,text:Situation in which nothing really bad ever happens, but you are driven crazy or lose all of your productivity because of an accumulation of tiny issues: TechnicalDebt, software glitches|EverythingsBroken, little bits of TimeDebt, PointlessApprovalProcesses, etc.\n\nThis kind of impending death can often end up in the MetricBlackHole from the perspective of someone who isnt getting the paper cuts: because each of the individual issues are insignificant, they never set off any alarm bells. Someone who points out the specific issues will look like a petty whiner, because its only the overall situation as experienced over days or weeks thats unreasonable.},{title:DeathInVenice1912,author:Mann,bibliography:LifetimeReading,caption:Death in Venice,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034472,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1912,text:Novella},{title:DeathIsNecessaryForMeaning,created:20200809020747955,es:likely,modified:20210516223303978,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:In HappyAbsolutelyFine2016, MrDerrenBrown argues at length that, although most people dont want to die, it would be much worse //not// to die. If you didnt die, that would mean your life as it is would continue forever. Over the course of eternity, you would do everything there was to do, and presumably get bored of it (if your memory didnt stop working properly first). There would be no difference between people, because everyone would do everything (see IndividualDistinctionIsIndividualValue, and cf. ConversationalDifference). Essentially, what makes life meaningful is the fact that we have to choose which single path to take out of the infinity of possible paths we could choose to follow. We make meaning for ourselves by sacrificing some possibilities.\n\n!! References\n\n> \Death destroys a man, but the idea of death saves him.\ \n> ---E.M. Forster (\u003C\u003Crt 10486>>)},{title:DeathOfMaudeChardin,created:20200125205301023,es:possible,modified:20240320214749223,modifier:soren,tags:Psychology PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,universe:HaroldAndMaude1971,text:The film HaroldAndMaude1971 ends with MsMaudeChardins suicide by drug overdose, because she had predetermined she was going to die when she reached her 80th birthday, and she follows through.\n\nThis is the one thing that kind of bugs me about the film. Not the //fact// that she died -- thats obviously right in the context of a film about death where one of the protagonists is 80 years old and passing her wisdom on to the younger generation -- but the way she died. Originally I felt like maybe she should have just had an aneurysm and collapsed or something; on a second viewing and further consideration, I think she definitely needs to be lucid and cheerfully dying (to properly contrast with Harold), but it could have started naturally. It just seems inconsistent with her character, that someone so carefree and focused on the way the universe lets things happen would try to exert the control needed to kill herself instead of letting it happen when the time came.\n\nGranted, the rest of the film ties into her suicide in a way that would be difficult to disentangle; you couldnt fix the irritation I feel without changing the whole film. I certainly can see why it was done from a dramatic perspective; theres so much suicide and so many RomeoAndJuliet echoes that it fits well, and many earlier events are important foreshadowing as well. So I dont really have a better suggestion. But theres still something just a wee bit off. You cant do something, dramatically appropriate or not, if it doesnt match the character doing it, or it just doesnt work!\n\nI could see it better if there was something wrong with her -- a DeathWithDignity thing. That //would// be her. But it doesnt seem like there is. Someone in the IMDB trivia section suggested that she might have Alzheimers; this is because her picture frames are all empty, and in a deleted scene she explains that she found it uncomfortable to have them remain perfectly sharp as her own memories of them got blurry. But whether this is actually dementia or just your average old-person memory loss is impossible to say, and on balance I find it rather unconvincing. After all, she seems very much all there throughout every scene shes in.\n\nThat said, there may be more pain there under the surface than we ever see. Its worth keeping that in mind everywhere in life.\n\nAnother interesting thing is that she seems to //want// to die, something which is rather atypical for suicides. I guess I dont begrudge someone that if they really want to.\n\nWhile MrHaroldChasen couldnt have done otherwise taking her to the hospital, I remember watching and thinking \man, that really sucks.\ Actually it was very hard to watch. Because now here she is dying in the cold, sterile hospital, not even wanting to be there, Harold pacing around outside, instead of quietly living out her last couple of hours in her beautiful home, being herself, enjoying her \farewell\ as she puts it, and dying in Harolds arms. But then, his insistence is a demonstration of love, so maybe they can both take some comfort in that. And in the movie world, shes obviously going to die (see PlotBasedDramaticIrony), so its easier to say the alternative would be better.\n\nIm interested in how her death will affect Harold. I suspect an understanding of the gravity of death that -- paradoxically, given how obsessed he is with it -- doesnt seem to have quite struck him yet. But also, hopefully, Maudes personality will prevent him from letting it bother him.\n\n!! Alternate versions\n\nThe DreamEngine created an alternate ending in CanonicalNumber 1527, in which Maude doesnt die the first time but then quietly commits suicide again some months later with Harold fully in accord...actually DeathWithDignity seemingly now.},{title:DeathWithDignity,created:20200410214017985,creator:soren,es:possible,modified:20211215042805490,modifier:soren,tags:Ethics PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Idea that in many cases it may be better to die quietly with means under ones own control than to ride out a terminal illness to the end.\n\nExtremely controversial, and I dont consider myself to have an opinion on it at this time (see NoOpinion). There is an ethical difference between allowing yourself to die through lack of treatment (something many people accept is OK, and there are legal frameworks for that) and actively taking steps to kill yourself ahead of time (much more dangerous).\n\nIn the former case, I read recently that only a tiny fraction of oncologists said they would even try to treat themselves if they got a likely-terminal cancer diagnosis. These are the people who do that for a living! We probably ought to listen to them, at least in the cancer case.\n\nIntertwined with the problem of deciding what kinds of expensive treatments people should have access to.\n\nSee also TheOrderOfTheGoodDeath.},{title:DebogYourself2024,author:Adam Mastroianni,caption:So you wanna de-bog yourself,completed:2024-01-02,created:20240128232503068,creator:soren,medium:article,modified:20240128232531158,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.experimental-history.com/p/so-you-wanna-de-bog-yourself,year:2024},{title:DebtIsNotNegativeMoney,created:20210611224429450,creator:soren,description:Negative currency is a mathematical abstraction; you cannot //have// negative money, any more than you can have negative ducks.,es:confident,modified:20210917153618247,modifier:soren,tags:Economics Math Public Idea,type:text/vnd.tiddlywiki,text:It is common to believe that debt is negative money, or is equivalent to a negative amount of money. This is not, however, true, a crucial point for understanding antidebt|Antidebt.\n\nA ThoughtExperiment to prove this:\n\nAlice is completely broke; she has $0.00 and no saleable property whatsoever. (Maybe shes wearing toilet paper|https://www.tpdresscontest.com/ or something.) Alice borrows $100 from Bob, then goes and buys $50 worth of groceries. Well pretend the groceries are not resellable and ignore any monetary value they might have. Now:\n\n* Alices //net worth// is $-50.00.\n* Alice //has// $50.00 and she //owes// Bob $100 (she has taken on $100 in debt).\n\nBut:\n\n* Alice does NOT //have// $-50.00. (Where is her negative-fifty-dollar bill?)\n* Alice does not //have// $50.00 as well as $-100.00.\n\nYou can see that these points correspond, and if you accept these statements, negative dollars and debt cannot be equivalent.\n\nIf youre not already convinced, recognize that the concept of “having negative 100 dollars” simply makes no sense. I would even argue that the statement is semantically meaningless; although we often think of dollars in purely numeric terms, having negative dollars makes no more sense than having negative-two ducks. You cannot //have// a negative amount of something. (See NegativeNumberOntology for more.) Also, debt is not something you //have//, anyway; debt is a promise to give somebody some amount of money in the future, not a quantity of money (positive or negative).\n\nErgo, negative dollars and debt are two distinct concepts. Now, it is often useful to treat debt as if it were negative dollars, for instance to calculate a net worth. Alice having a //net worth// of $-50.00 makes perfect sense; ones net worth is a purely mathematical, abstract construct, so it can be negative. But just because debt acts like negative dollars in some mathematical formulas does not mean it //is// negative dollars. Negative dollars are a model of debt; the map is not the territory|AllMapsLie.\n\nSimilarly, NegativeInterestRates, while ridiculous (if not quite as ridiculous as antimoney), make sense, because they are a mathematical multiplier applied to dollars to determine how many dollars a borrower needs to pay to compensate the lender for temporarily losing access to their money. An interest rate does not represent a physical object, so its fine for it to be negative.\n\nA bank balance can also be negative, if one has overdrawn ones account. This essentially means one has incurred an automatic debt in the amount of the overdraft. One might reasonably say one “has negative twenty dollars in the bank,” but this is a figure of speech meaning that the balance is -$20.00 -- again, the bank balance is a mathematical concept.},{title:Decameron,author:Boccaccio,bibliography:LifetimeReading,caption:Decameron,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034488,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:Length: !},{title:DeceptiveSimplicity,created:20200226013929555,creator:soren,description:Some of the most profound ideas are so simple it is difficult to take them seriously.,es:likely,modified:20231127025123836,modifier:soren,tags:Productivity Psychology Public Idea,type:text/vnd.tiddlywiki,text:Sometimes things are so simple that you can hardly believe they are in fact that simple. Particularly seductive because life is indeed mostly very complex.\n\nSimplicity, when true and not deceptively so, is often transcendently beautiful. At other times, the simplicity can make the idea seem facetious or outright stupid; it may or may not decay into a state of beauty once you understand the idea.\n\nHowToTakeSmartNotes argues that the ZettelKasten has gotten poor uptake partly because it appears so simple in comparison to the achievements of MrNiklasLuhmann that it is unbelievable. SpacedRepetition may be similar. (See also ToolsForThinkingDontWow.)\n\nAnother example from same: the ShippingContainer. Its literally just a box of a standard size, but it pretty much changed the world.\n\nPerhaps part of the draw of LikableSoftware, which must be simple when its task is simple.\n\nSee also SimpleThingsDoneWell on the pleasure of simplicity.},{title:DecideIsNotAnAction,created:20210902145632751,creator:soren,description:Deciding is not an action; obtaining information needed for the decision is.,es:likely,modified:20210909195518442,modifier:soren,tags:Idea Productivity Process Systems Reasoning Public,type:text/vnd.tiddlywiki,text:A common item on to-do lists is “Decide what to do about X” or “Decide how to accomplish X.” However, deciding is not an action, and to-do lists should be composed of actions|NextAction.\n\nInstead of saying you need to decide something, take a moment to figure out why you cant make the decision right this second|DecideImmediately. Usually it comes down to lacking information of some kind. The actual action is therefore to research something, or ask your partner for their opinion, or brainstorm possibilities, or go look in your notes for what you did last time this happened.\n\nSource: GettingThingsDone.},{title:DeclarativeProgramming,created:20200322131704490,creator:soren,description:Programs consist of a description of the desired state or information to calculate.,es:confident,modified:20210731154256692,modifier:soren,tags:ProgrammingParadigm Public Idea,type:text/vnd.tiddlywiki,text:ProgrammingParadigm consisting of explaining what you want and having a logic engine figure out how to accomplish it.\n\nSQL is the best-known declarative language. Prolog is a general-purpose example. Many languages or libraries contain limited, purpose-specific DomainSpecificLanguages that are largely declarative.\n\nOverall, assuming you have a good logic engine for the domain involved, declarative programming is typically the easiest on the programmer and something to strive for -- even if this means writing an appropriate declarative language and then writing the rest of your program in that language. Describing what you want exactly and correctly is challenging enough by itself|ActualRequirements without also trying to describe how it should be done! Describing how something should be done is subject to the XyProblem; why not let the expert system figure it out?\n\nSometimes the general-purpose declarative engine will come up with an inefficient way to do it, so there is always room for human optimization; but just as often the person will do a worse job, at least on the first crack. And the WorstBottleneck is usually the programmers time and attention|ScarceAttention.\n\nSometimes the abstraction of declarativity leaks|AbstractionsLeak. In the case of Prolog, this happens so readily that you have to constantly have the implementation in mind as you write \declarative\ code, which may be one of the reasons Prolog has never taken off.},{title:DeclineAndFall1789,author:Gibbon,bibliography:LifetimeReading,caption:The History of the Decline and Fall of the Roman Empire,created:20201119202625851,due:202106301200,format:hardcover,ivl:60,medium:book,modified:20210703174913808,owned:yes,priority:2,readstatus:unread,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1789,text:One of the first works of modern historical method by MrEdwardGibbon. Gigantic (my edition is in two dense 1,000-page volumes). Been meaning to get around to reading it sometime here...},{title:DeclineEffect,created:20200817030952306,creator:soren,description:The effect sizes of scientific results tend to decrease with additional time and replications.,es:possible,modified:20220118022043847,modifier:soren,tags:Reasoning Systems Public Science Idea,type:text/vnd.tiddlywiki,text:Scientific pattern where an exciting result gradually becomes harder and harder to find over the years, or reduces markedly in effect size. The //New Yorker// assigned this the memorable tagline “The truth wears off.” An extremely puzzling and troubling yet almost ubiquitous phenomenon in the soft sciences and medicine. Probably due to a myriad of factors, including:\n\n* PublicationBias -- when an idea is new, the idea has to be more extreme to make it worth publishing\n* Regression to the mean -- similarly, the more extreme results are the ones that people notice\n* Poor statistics -- the more eyes you get on the problem, the less likely suspect practices will stand up\n* As absurd as it sounds, perhaps some practices actually become less effective over time, for various reasons.\n\nProbably related to the ReplicationCrisis in general. Theres probably much more left to discover here, too.\n\nPresumably more of a problem for scientism|ScienceVsScientism.\n\nTruthWearsOff2010 offers a useful summary.},{title:DeepFake,created:20200322022437309,creator:soren,es:confident,modified:20211228160350664,modifier:soren,tags:Futurism Software Public Idea,type:text/vnd.tiddlywiki,text:Technology which is able to produce convincing images, audio, or videos that are fabricated wholesale: they never existed. See for instance This Person Does Not Exist|https://www.thispersondoesnotexist.com/. TPDNE is moderately convincing right now; I would not think twice about most of the pictures if presented as part of an article, but I can usually spot weird things about the pictures that give them away as manipulated if I look closely (it is particularly bad at ears, glasses, and hair textures right now). However, its already good enough to be dangerous and will only get better.\n\n(See also Which Face is Real?|https://www.whichfaceisreal.com/index.php I can get well over 95% of them correct after having spent a lot of time studying TPDNE pictures and getting to know the signs, but in contexts where it actually matters, you dont have the luxury of comparing a real face and a deepfake face side by side!)\n\nPart of the ongoing DeteriorationOfReality.},{title:DeepWork,caption:Deep Work,created:20200410142633631,creator:soren,format:ebook,medium:book,modified:20210623121848626,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Book (titled indeed Deep Work) by MrCalNewport about how \deep work\ (concentrated, avoiding interruptions, entering a FlowState) is today simultaneously more valuable than ever (many, many people in the industrialized world are now in knowledge-economy jobs where being able to focus and think is critical to producing useful work) and rapidly becoming harder to achieve for most people due to technological and social changes.\n\nRead on Kindle. Ive read it once myself and once with F.I.B.C.|PrivatePerson.\n\nThe Deep Work Hypothesis states that such deep work is simultaneously becoming more //important// and more //rare//: important because most KnowledgeWork has gotten quite complex and widely distributed and there is comparatively little paid work that really allows good performance with sloppy mental hygiene; and rare because technology like RampantNotifications are making it difficult to concentrate without carefully designing ones work environment and workflow|WorkflowSupremacy.\n\nAnother reason: the increasingly WinnerTakeAll environment created by the internet. The best people win a lot more, the mediocre people get less.\n\nThe core abilities to succeed in this environment are (1) quickly master new and complex things and (2) produce at an elite level (encompassing both quality and speed).\n\nSome batching is required (cf. BatchSize).\n\nShallow work sometimes needs to be done, but it typically provides very little core value, and is often entirely dispensable|UnneededTodo.\n\nSome people //may// be an exception to the need to avoid constant communication throughout the day, such as executives or project managers. Even then, some focused work is usually important. These people may also benefit from an unusually high ability to choose how they should communicate compared to others.\n\nThe MetricBlackHole prevents people from discovering how bad interruptions and constant shallow work are for them.\n\nBusyness is often treated as a proxy for productivity (see also the ButtInSeatMetric and BusyIsBad) -- p. 63. Done by people who cannot otherwise identify what it means to be productive.\n\n},{title:DefaultToOpen,created:20200711232404972,creator:soren,es:likely,modified:20240520155315272,modifier:soren,tags:PhilosophyOfLife AgilePhilosophy Business Public Idea,type:text/vnd.tiddlywiki,text:Default to open is a strategy and philosophy popularized and named by TheGoogle, including in HowGoogleWorks, in which you make everything public unless there is a good reason not to. On the individual level, the Internet makes this dead easy -- just put up a website with your stuff on it and its automatically indexed for anyone who happens to be looking for it.\n\nMost people and organizations default to closed. Information is distributed on a need-to-know basis, and things are only shared or published when they are in some stage of completion and there is a clear motivation to do so. Information about how a company is doing is shared with employees only occasionally, in formal executive announcements; writing and ideas are shared with the world only in books or occasional blog posts; most software stays private unless there is a profit or other motive to publish it.\n\nDefault to open challenges you to invert your thinking. Instead of asking what you can gain by opening things up, you ask what you stand to //lose// by doing so. By swapping the default, you realize that there is seldom a strong reason not to share things. Sometimes, of course, there is: Google probably doesnt want to publish the full details of its search or advertising algorithms, and I dont want to publish a complete rundown of exactly what I think about every person I interact with. But the downsides are usually obvious, when they exist.\n\n!! Advantages\n\n* Projects and information, even when in an early, rough-draft state, are much more likely to be useful to someone than you know, because you cant see inside other peoples perspectives. (Scientific research has benefited from this principle for centuries -- when you find something curious, you publish it, even if you cant see how it will be useful yet, because theres a good chance someone else can.) With todays search engines, the chance someone will find your information if its useful to them is actually quite high.\u003C\u003Cfnote \This might be getting harder due to the flood of LLM content. It may be that wed benefit from creating internet directories again, or submitting relevant content to other similar sites for linking. Well have to see what happens.\>> This might let you find the person whos able to cooperate with you and take your project or idea to the next level -- without your having to do anything at all!\n* Similarly, if others find your stuff useful, they might well give you further ideas or improvements that come back and benefit you, for free. You are allowing the whole world to join you in being IncrementalAndIterative.\n* The more stuff you share, the more likely you find something that makes a much bigger splash than you expected. Every shared idea is a possible positive BlackSwan. By self-determining that something wont be useful to anyone or isnt good enough, you artificially limit your exposure to upside risks.\n* Sharing things makes you more likely to keep them in good order (because you dont want to publish something bad enough that makes you look terrible; although remember that PerfectIsTheEnemyOfGood), which helps you, too.\n* Having lots of stuff shared gives you good publicity. That gives you a platform you cant get any other way when you have an idea you actually want to sell (or you want a job in the field youre sharing things in). I got my current job from a cold offer after the founder ran into some blog posts Id written; this kind of thing is not uncommon.\n\n!! Objections\n\n* You could end up giving something away for free that you later wish you could have sold.\n** I suspect this is extremely rare in practice -- most of the time its pretty obvious when you have a saleable idea youre actually willing to turn into a business (and not just vaguely fantasizing about). Its usually not impossible to convert a freely shared project into one you can make money on, either; its just a little harder.\n** Nevertheless, if you have serious misgivings about sharing one particular idea, maybe you should listen to yourself. But you can only use this excuse once youve gotten used to defaulting to open.\n\n* Nobody will care.\n** You might be right, but this isnt a good reason because it costs you practically nothing to try. It only takes one thing that turns out more interesting than you expected to make it worthwhile.\n\n* It takes too long.\n** If you really cant take the time to do a bare-minimum cleanup of something so you can share a MinimumViableProduct, then either you are doing shoddy work thats not even really good enough for your own purpose, or you should consider lowering your standards. Cf. PerfectIsTheEnemyOfGood.\n** The one exception would be if you already have a popular resource (say, a blog) that has strict standards of quality. In that case, the fix is easy if youre not ready to bring it up to the higher standard: just put the low-quality stuff somewhere else. In some ways, I do this bifurcation myself with TheControlAltBackspace and this ZettelKasten (though the ZK also discusses a wider range of things than I would likely put on CAB).\n\n\n!! References\n\nSee WhyTheBestGiveAway2016 for an excellent statement of many of these explanations (and a few more) thats a great sharer (pun intended).\n\nMrAndyMatuschak calls defaulting to open when creating something “working with the garage door up|https://notes.andymatuschak.org/About_these_notes?stackedNotesz21cgR9K3UcQ5a7yPsj2RUim3oM2TzdBByZu.”\n\nManualWorkIsABug2018 says that you should not improve and publish your work next week, because “next week never comes.”},{title:DefinedInterfaces,created:20200226201913968,modified:20200324022520756,tags:Process Code Public Idea,type:text/vnd.tiddlywiki,text:Defining //interfaces// is a coding technique with likely broader capability. In order to segment a system into pieces where one person doesnt have to understand the entire thing, specifications of the interface or contract for each component are drawn up (either before or after development). Each component thus must meet the requirements in its interface, but is completely free in how it does that. The `add(x, y)` function has to return the sum of `x` and `y`, but I can change how it adds things up|ReFactoring anytime I want without having to worry about affecting anyone else.\n\nThats the theory. In practice|TheoryAndPractice, the value of defined interfaces is limited by the fact that AbstractionsLeak, so to the extent possible it may be more useful to AvoidScale. Theres a place for both.},{title:Definition,color:#ff4d00,created:20200329174804331,creator:soren,modified:20201204041548306,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:Tag for terms or concepts that are briefly explained dictionary-style. Im not entirely sure what its for. :-)},{title:DefinitionOfDone,created:20200326143226010,es:confident,modified:20210714032730290,tags:ScrumMethodology Process Public Idea,type:text/vnd.tiddlywiki,text:The ScrumMethodology realizes that knowing when a task is “done” is actually a remarkably complicated and flexible concept. If I wrote the code and submitted a pull request but it hasnt been merged, am I done? If the code is tested but not delivered to the customer yet, is it done? If I made my dinner but havent eaten it yet, am I done? (I am tempted to add several less-polite examples here, but will refrain from doing so! Use your Imagination.)\n\nAs such, teams and organizations should establish clear criteria for what qualifies as something being done and stick to them. Scrum claims that a wide variety of miscommunications can be traced back to disagreement on whether things are done.\n\nA definition of done may adapt over time (typically to include more stringent requirements as the teams process and quality standards improve|ContinuousImprovement).\n\nSee OutcomesOverActivities for a solid ~DoD in Business.\n\nUseful source: ScrumGuide p. 18.},{title:DeflectResistance,created:20200226013551083,creator:soren,description:Rather than working hard to do the right thing within a system, design the system so doing the right thing is the easiest option.,es:likely,modified:20220106134629932,modifier:soren,tags:Productivity Public Idea,type:text/vnd.tiddlywiki,text:People who work hard, are highly productive, and/or are good at changing their lives to do new and challenging things dont do it by exercising extreme amounts of WillPower (which seems to be limited and relatively constant). Rather, they arrange their working environments and methods to //deflect resistance//.\n\nYou dont smartly avoid eating too much chocolate by deciding not to eat too much chocolate; you do it by making the chocolate harder to get at. It should be the same with work. Or RampantNotifications. A RatchetingProcess works by setting up an environment designed to stimulate regular production, which then automatically creates something.\n\nFiguring out how to deflect resistance is an example of the DesignApproach to life.\n\nSource: HowToTakeSmartNotes.},{title:DegreesOfUgliness,created:20200512031117241,creator:soren,es:mythological,modified:20211027040027440,modifier:soren,tags:Humor Definition PersonalMythology Public Idea,type:text/vnd.tiddlywiki,text:MrAntonArmstrong defines three degrees of ugliness:\n\n* Normal ugly. We cant help being a little ugly from time to time, but we try to keep it to a minimum.\n* Mugly, a portmanteau of “mucho ugly.” Unacceptable.\n* Bugly, a portmanteau of “butt ugly.” Horrific.\n\nThis theory was expounded for all participants of ChoralDay my sophomore year at StOlaf. Its also mentioned in this delightful joke video, SingingLessonDuringThePandemic.},{title:Deism,created:20240402012020945,creator:soren,modified:20240509112129993,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:Religion},{title:DelayedAttraction,created:20230416024139896,creator:soren,description:I often dont realize Im attracted to someone, or more attracted to them, until some hours after interacting with them.,es:personal,modified:20250204033513653,modifier:soren,tags:Idea Romance ManualForMe Sexuality Public,type:text/vnd.tiddlywiki,text:I once saw someone on \u003C\u003Csubreddit demisexuality>> explain that “their flirt detection processor was made out of an old HP printer” (\u003C\u003Crt 9319>>): they only realized hours later that someone was trying to flirt with them. I have the reverse: I often develop desires|HowToBecomeAttractedToSomeone hours after doing something with someone that causes me to develop the attraction (e.g., going on a date, or having an unusually intimate experience|IntimacyScale with them), as I reprocess and think about the interaction more. In general early in a relationship I tend to feel more attraction when Im //not// with the person.\n\nThis is not just an unusual but also a thoroughly annoying experience; I might for example find a few hours after I end a date that I want to do something physical with someone I now wont see for a week, and which I had intentionally refused at the time! But knowing its a thing is useful. An obvious consequence is that I shouldnt make decisions about whether I was attracted to someone or want to see them again until 24 hours or so have gone by, and I should write and think about the experience in the meantime -- I might realize Im actually interested when I wasnt sure before.\n\nIts possible this is entirely or partly caused by anxiety and will dissipate as I get more used to dating, but some time in it hasnt yet, so Im skeptical. I do think it tends to happen more in the early stages of a relationship, perhaps because thats when my attraction is more finicky and on-and-off.},{title:DeliberateAccident,created:20230101203407794,creator:soren,description:Accidents beneficial to ones life can be made more likely to occur by careful design.,es:confident,modified:20250209014845234,modifier:soren,tags:Idea SorenConcept Design LifeDirection Public,type:text/vnd.tiddlywiki,text:AccidentsMakeTheWorldGoRound: most important things in life dont arrive by searching for them. But this doesnt mean that you are completely powerless to achieve good results. Rather, the best results come from arranging your life in a way that makes you most likely to experience accidents that lead to the results you want. I like to call these deliberate accidents; they are in some important sense “less accidental” than accidents with no design behind them.\n\nFor instance, you generally cannot intentionally fall in love (that one NYT article from the mid-teens notwithstanding; to the extent those questions work, they still require two people already amenable to the possibility to sit down together). But someone who thinks a lot about strategy, puts themselves in social situations where they regularly meet attractive and interesting people, maybe tries a few apps or similar tools to expand their search, and makes sure they follow up on any promising leads is an order of magnitude more likely to experience the accident they want than someone who sits at home griping about their lack of success all the time. Same for making new friends|AmazinglyAwesomeFriend.\n\nSimilarly, many if not most important scientific discoveries are accidents. But someone who studies problems that look interesting already and is generally curious, independent-minded|IndependentMindedness, observant, and ready to follow weird side paths wherever they lead has a good chance at discovering something important this way. Someone who accepts the research project someone else gives them and mechanically follows the steps has a very low chance.\n\nBenefiting from deliberate accidents is a form of InversionOfControl: set up the situation, then wait, ready to act when one comes along. But when choosing what situations to set up, be sure to pick ones that are WorthwhileAnyway; if you go in with the express purpose of having good accidents, youll have the wrong mindset to actually experience them.},{title:DeliberatePractice,created:20200213172131483,creator:soren,es:confident,modified:20221115193923469,modifier:soren,tags:Psychology Definition Public Idea,type:text/vnd.tiddlywiki,text:You can “practice” something for hours and get no better if you arent intentional about it; otherwise you are essentially doing something WorthlessEfficiently. That means being critical and working on the things that are hard, paying attention, and not just working on autopilot all the time.\n\nBeing deliberate consistently|PowerOfKonsistency is probably a good order of magnitude more useful than not being deliberate inconsistently, no matter how much time you spend on the latter and how little on the former.\n\nDeliberate practice is most sticky and effective when you practice UntilYouCantGetItWrong.},{title:DemiDimensions,created:20221106031125710,creator:soren,description:Subcategorizing demisexual people on several related dimensions makes the disparate experiences of the community easier to understand.,es:likely,modified:20230908140326735,modifier:soren,tags:Idea Romance Public Identity Sexuality,type:text/vnd.tiddlywiki,text:I spend a lot of time hanging out in \u003C\u003Csubreddit \demisexuality\>> (probably too much for my own good), and one of the things that has always struck me over the years is how //different// demi people|DemiPerson are. I dont mean on things like our age or gender or political views or whatever, I mean precisely the things that have brought us together into this little online community -- our experiences of attraction, the specific difficulties we have integrating into society and meeting the desires we have|Metadesire. In fact, I think in a community like this one, we probably tend to underestimate the differences even after participating for quite some time, simply because people who dont relate to a particular experience or discussion are less likely to jump in, and consequently there will be less obvious disagreement.\n\nThe dimensions here are an attempt to explain some of the largest categories or spectra of difference we can be usefully divided on, and how they affect our experiences. Like attitudes toward sex in general|FactorsInfluencingSexualAttitudes, this is a hyperdimensional space, and ones position on a specific scale does not imply anything about ones position on a different one, making people quite unique with relatively few dimensions.\n\n* Demisexual: everyone discussed in here falls in this bucket.\n* Demiromantic / alloromantic: Despite people in these two buckets meeting the basic definition of “only experience sexual attraction after an emotional connection,” people on different sides have almost totally different experiences with dating. Alloromantic/demisexual people still relatively easily get crushes on strangers and acquaintances and are able to date without too much difficulty; they just have to take the sex part slowly, which I dont want to trivialize as a challenge in todays dating environment, but is fairly manageable. Their frustrations are about people being too forward, or losing interest in them too early, or occasionally that they fail to become sexually attracted to someone they otherwise really like. Demiromantic/demisexual people tend to struggle a lot more; they often experience no crushes or attraction to anyone for months or years at a time, and they are frequently romantically frustrated because they would still like to have that experience|Metadesire but have no way to make it happen.\n* Motivation to enter a relationship: some demi people dont care about relationships when theyre single and are content just waiting and seeing if anything ever happens. Others would really like to have one. This motivation can be different for romantic and sexual dimensions. See also Metadesire.\n* Speed of attraction: some demi people regularly develop attraction in hours or days; others usually take years. Most people are somewhere in between and it varies from person to person. But a significant bias towards one end of the scale changes the experience, and especially the social difficulty and frustration factors, substantially. (Side note: I think comparisons of attraction-forming speed would usually be more enlightening if we focused on how much total stopwatch time you had spent with the person, and with group and one-on-one interaction time separated. But everyone seems to go with calendar time when they describe themselves, maybe because its easier to calculate after the fact, so Ill put that comparison first.)\n* Libido: this varies just as it does for allosexual people, even though many people assume that ace-spectrum people have low libido. Some demi people feel this pull all the time and love thinking about sex, masturbating, etc. Others are much closer to asexual and could more or less do without sex, even if they enjoy it from time to time. Still others experience high libido when theyre in a relationship, and almost nothing when single.\n\t* Enjoyment of sex without sexual attraction: most demi people dont want to have sex with someone theyre not attracted to, but some are OK with this. They may look “less demi” from the outside because they, e.g., engage in casual sex and enjoy it.\n* Ability to evaluate attractiveness of and potential future attraction to a person: many demi people can get a partial idea of whether they might, eventually, be attracted to someone from their appearance (they cant say for sure they //will// be, but might be able to say with high confidence they //wont// be). Many can also often feel from some initial interactions that a person feels special and something might happen in the future (which I term ProtoAttraction). Others usually cannot.\n\t\nSee also DemiCorrelates.},{title:DemiHinge,created:20221017235222847,creator:soren,description:Using Hinge makes me feel broken, and Im not sure if or how I can change my attitude to fix this.,es:personal,modified:20240413143602110,modifier:soren,tags:Romance Idea Public,type:text/vnd.tiddlywiki,text:Heres what most frustrates me about using Hinge: trying to evaluate peoples profiles makes me feel broken. The design of Hinge makes some basic assumptions that no doubt feel fundamental to allos, but are completely wrong for DemiPerson me, namely that (1) you can evaluate, with a high although not perfect degree of accuracy, whether youll be attracted to a person by looking at well-chosen pictures of them, and (2) this potential attraction is sufficient to motivate you to start learning a little bit more about the person. Neither assumption is true for me; while aesthetic attraction is likely a necessary condition to initial romantic attraction to a person for me, its not even close to sufficient, and as such it provides more or less no motivation.\n\nSo I end up in a position where, unless people have some really zany pictures or write some unusually interesting stuff on their profile, they look insanely boring to me. This is at least 50% of women on Minneapolis Hinge, probably 80%. If someones really pretty, thats a plus, but its more on the level of “oh, and this person likes hiking, thats cool,” its not something that, by itself, makes me become interested in them when I previously wasnt. (If I think someones actively unattractive, I will confidently flip past them though. I dont have a problem judging this, and Im fairly sure I wouldnt become sexually attracted to someone I think is physically unattractive.) Often I can flip through 20 profiles before I see someone who seems interesting, and I get a strong feeling this is not normal. The frustrating thing is that Im sure I could be attracted to some of these people|HowToBecomeAttractedToSomeone, but I have no way of filtering them, so I have to pass them by. And its just plain annoying to have an app which is designed to show me more of people it thinks Ill be attracted to do such a crappy job at it.\n\n!! References\n\nSomeone on \u003C\u003Csubreddit demisexuality>> recently said that trying to evaluate whether youre attracted to someone from their profile is like “trying to smell food from a picture of it.”},{title:DemiPerson,created:20200121015836610,creator:soren,description:As someone in MissingUniversalHumanExperiences2014 put it, I strongly separate people appearing attractive from being romantically and sexually interested in them, something which instead comes mostly from personality; a.k.a. demisexual|DemiPerson.,es:personal,microlink:demi,modified:20250721025407132,modifier:soren,tags:Identity Romance Public MyUnusualMentalExperience Idea Sexuality,type:text/vnd.tiddlywiki,text:Im demisexual and demiromantic -- that is, I only experience sexual and romantic attraction\u003C\u003Cfnote \You might not understand the difference, because they ordinarily go together for most people. Asexual-spectrum people have to distinguish them to understand themselves, because some people dont have one or both of these experiences at all, or they arrive at different times. Sexual attraction is the feeling of wanting to actually have sex with someone. Romantic attraction is much harder to define, as there is no single characteristic that makes a relationship “romantic,” even for a single person, but is usually taken to include most emotional things that go beyond friendship: interest in romantically-coded activities like cute dates, desire for more private time together, commitment, exclusivity, etc. Both individual people and definitions differ on where to class interest in not-obviously-sexual but intimate physical touch like kissing; sometimes another category called //sensual attraction// is used here. We can split a lot more hairs here, and sometimes doing so is useful, but this is already a footnote, so Ill stop.\>> to people I have an emotional connection with.\n\nOften people who hear this definition for the first time think this sounds like “being normal.” If this is you, realize what my definition actually means in practice. It doesnt just mean that I dont enjoy one-night stands or that I prefer to know people better before I have sex with them, nor does it mean that Im just more attracted to people I know well. It means I have literally //never//, in 30 years of life, seen someone attractive across a room and thought that I might enjoy sleeping with them, or even wanted to go over and chat them up. I feel nothing, except a sense that I enjoy looking at them, more like an enchanting piece of art or a sunset.\u003C\u003Cfnote \Asexual-spectrum people call this //aesthetic attraction//.\>> \u003C\u003Cfnote \P.S. If this still sounds normal to you, you might yourself be on the asexual spectrum! That might not mean what you think it does (it //doesnt// mean you arent interested in or dont like sex -- although plenty of ace-spectrum people do fall into this category), and many ace-spec people were astounded to discover they were. Have a quick look: if you happen to be in this category and dont know it, the revelation can be empowering and life-changing.\>>\n\nIm not completely asexual or aromantic, though; I //can// develop attraction to people.\u003C\u003Cfnote \Always women, in my case, at least so far.\>> Nor do I lack a libido; Im still interested in the idea of sex, but its usually not connected to desire for any particular person. It can all magically come together when I get to know someone -- normally first as a friend -- really like them, and start to feel a personal and emotional connection developing. For me thats often within a few hours of interaction time, but sometimes it can take longer. I cant reliably predict in advance when this will happen, though I often get a few vibes ahead of time which I like to call ProtoAttraction. Finding someone aesthetically attractive is for me an important part of becoming romantically or sexually attracted to them, but its not at all sufficient; its their personality and unique experiences and the interactions that we have together that ultimately make me interested.\u003C\u003Cfnote \This doesnt imply that I need to romantically love someone to be sexually attracted to them, which is another reason that being demi is not just a fancy name for “I prefer to wait until later in a relationship before I have sex,” even though that preference is often part of the experience of being demi. I just need to feel deeply connected to someone, which can take many forms, some of them not romantic at all.\>>\n\nIve only been romantically or sexually attracted to a handful of people in my life (like, I could make a list if I wanted to). Im currently exploring|HowToBecomeAttractedToSomeone how to intentionally engineer|OrganicVsEngineeredAttraction the circumstances where I become attracted to people -- and, happily, having some success -- because Im also still interested in pursuing romantic relationships. In fact, its very frustrating to want such a relationship but usually lack the experience of any attraction that could start one (see Metadesire).\n\nPeople sometimes wonder why demi people need to give themselves a special name -- isnt it enough just to be yourself? Or arent you limiting yourself by identifying with a specific word? Some people find this question frustrating or offensive, but as long as its asked with genuine curiosity, I think its a fair one, and I think there is always a very real risk of accidentally interpreting your feelings and altering your actions to match a label instead of vice versa, so its worth thinking carefully about this anytime you give yourself a label. (See also NoLabelsPhilosophy.) That said, given that I am writing this tiddler, it should be clear I think it is important and valuable to have the concept. I cant speak for everyone, but personally, before I knew that my experience of attraction was a thing with a name, I was always subtly confused and thought there must be something wrong with me or the way I was behaving. This didnt happen on a conscious level, because, well, I didnt know there //was// a thing here in this area of idea-space to understand (see HypoCognition). I was, however, fundamentally puzzled as to why I had never wanted to, e.g., go on a date, even though I could recognize attractive people who society was telling me I should want to go out with, and I thought I was interested in sex and intimacy. On top of that, when I actually did experience sexual and romantic attraction, I often wasnt clear on what I was feeling, sometimes concluding that I wasnt sure if I was attracted to someone -- because I simply didnt know what romantic/sexual attraction //was// or what it felt like to me -- and so even when I actually did experience it, I simply felt even more confused and did nothing.\n\nTo me, having a name for myself means Im not broken, just different.\u003C\u003Cfnote \Its a constant challenge not to feel broken when youre usually not experiencing something other people take for granted -- //especially// when you dont even realize that your experience is fundamentally different!\>> It means I can start to crystallize an understanding of my feelings around that name, things which before I was unable to think about (see PowerOfNames). It means I can find other people who experience the same thing and learn from them. And it means I can recognize when I might be interested in a romantic relationship with somebody -- something which may seem trivial to most people but which I was really entirely unable to do before.\n\nI dont want to sound bitter here, but I also want to be clear about this point: we are not trying to feel special by giving ourselves a name, or claim oppressed status for ourselves. We are largely|InvisibleOrientation2014 not oppressed or hated, at least not in the conventional sense of those words -- particularly demi/gray people, as compared to fully asexual people -- and we are not any more special than anyone else. Asexual-spectrum people are, however, misunderstood, disbelieved, and accused of making up pointless words to make ourselves look better to other shallow people, when all were really trying to do is //understand ourselves//, so that we might be able to love ourselves and maybe even someone else someday. If we want anything as a group, we just want other people to realize that we exist and believe that were not lying about our experiences for attention. I think thats a pretty low bar, but its proven surprisingly hard to clear.\n\n\n!! Miscellanea\n\nTo summarize how relationships form: For most people (often known as //allosexual// in the ace community), romantic and sexual desire creates motivation for proximity and familiarity with potential partners, which then (if successful) leads to intimacy. For demi people like me, it usually happens backwards: intimacy comes first, and that feeling of connection creates desire. Of course, the world is not always quite so simple from either perspective -- there may be no human experience harder to put into neat little boxes -- but thats the gist of it.\n\nxkcd 1448|https://xkcd.com/1448/ is seemingly accidentally the epitome of being demi in a single picture. Also this joke I heard the other day: How many demi people does it take to change a lightbulb? -- Only one, but its going to take a while, so get used to the dark.\n\nI dont, on the whole, like or dislike being demi: its just who I am, and thats the end of it. Like how Im 60\:\u003C\u003Cfnote \\\Actually, I have a confession to make here: Im just the tiniest bit shy of 511½\. I round up anyway because this is much easier to remember and say!\\\>> that has its advantages and its disadvantages, and thats about all you can say about it. See also MyUnusualMentalExperience.\n\nThe effect of learning there was a name for this experience, thus being released from HypoCognition, was unusually powerful and liberating for me (see PowerOfNames and PowerOfNamesPost). },{title:DemocracyAndEducation1916,author:Dewey,bibliography:LifetimeReading,caption:Democracy and Education,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034517,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1916},{title:DeNaturaRerum,author:Lucretius,bibliography:LifetimeReading,caption:De Natura Rerum,created:20210703170128000,genre:History/Philosophy,medium:book,modified:20210705214034527,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Dependabot,created:20200521194650972,creator:soren,es:confident,modified:20211027040151091,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A bot for TheGitHub repositories that can send you pull requests to update dependencies when they get updates. Includes release notes and commits so you can figure out if your app might be affected. If youre good, its a one-click merge to stay up to date.},{title:DeploymentSmokeTest,created:20200127135812846,creator:soren,es:confident,modified:20210509011743738,modifier:soren,tags:Process Code Public Idea,type:text/vnd.tiddlywiki,text:From ContinuousDelivery: Aside perhaps from a few unit tests, an automated smoke-test that runs after each deployment is perhaps the most SoftwareTest to have in a system...this way you can actually confirm that things worked properly.\n\nThis is something we have not done one bit of at TheFederatedInsurance, except I think maybe they were looking into it for OpenShift.\n\nCf. SanityCheck.},{title:DesacralizationOfEverydayLife,created:20220504211714667,creator:soren,description:One of the great losses of the Enlightenment has been the removal of sacredness and thus meaning from everyday things.,es:likely,modified:20220505013239151,modifier:soren,tags:Idea PhilosophyOfLife Religion Sociology Public,type:text/vnd.tiddlywiki,text:MrNassimNicholasTaleb, in BedOfProcrustes2010:\n\n> People used to wear ordinary clothes weekdays and formal attire on Sunday. Today it is the exact reverse.\n\nIn industrial civilization, we are several hundred years into working hard to desacralize the sacred under the banner of making people more equal, or getting rid of superstitious, unscientific habits. Then we wonder why the world feels so meaningless, uninteresting, and unaccountably horrible. People used to do the reverse, making everyday things into sacred things and thus imbuing them with meaning and excitement.\n\n(Taleb notes in his aphorism that weve made our work more formal -- though this is also disappearing in many workplaces -- but this is somewhat different than //sacred//, so in practice there is a nearly uniform decrease in experiences of the sacred. Wearing a suit to work or using someones last name to address them makes it more formal, but not more sacred. Arguably, wearing jeans to church is primarily a distinction of formality as well -- but sacred environments are founded on ritual and thus by formality, so a lack of formality is a potentially existential threat to them, while it adds only a little bit of height to a profane environment. Compare NeedlessFormality.)\n\nWe dont have to like the exact forms sacredness in everyday life used to take, or want them to return, to accept that somethings been lost here. These functioned as ways of retaining something of the wide-eyed sense of wonder that children experience into adulthood, something that I think most adults miss to one degree or another but that is neurologically difficult to obtain (at least so far as HowToChangeYourMind2018 is right here: I recall Pollan noting that an LSD trip for an adult is about the equivalent in terms of brain-structure change). The world can be a weird place, and a fun place, and its unfortunate that most peoples present worldview is incompatible with experiencing this on an everyday basis.},{title:DescentOfMan1871,author:Darwin,bibliography:LifetimeReading,caption:The Descent of Man,created:20210703170128000,genre:Science,medium:book,modified:20210705214034542,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1871},{title:DeschutesRiverRecreationArea,created:20250621164637963,creator:soren,modified:20250621164638866,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DeservingForgiveness,created:20200822014702434,creator:soren,es:confident,modified:20210909195115180,modifier:soren,tags:Ethics Public Idea,type:text/vnd.tiddlywiki,text:Because forgiveness is not excusing|ForgivenessVsExcusing, nobody //deserves// forgiveness|Forgiveness. If you did something bad enough to not be excusable, youre not in a position to deserve it. But if we can give it, everyone will be better off (because IMO everyone always deserves some sympathy; people arent evil in a vacuum, and we could more or less all have turned out that way under other circumstances|ArendtGreatLeveler).},{title:Design,created:20200121032000052,creator:soren,es:confident,modified:20210828140845478,modifier:soren,tags:Public Definition,type:text/vnd.tiddlywiki,text:Design encompasses ideas of how we can make things work for people and not against them. Issues of design in my opinion also involve how \going with the flow\ results in better outcomes for everyone, designers and users. It cuts across all areas of life, from cities to software to media to parenting.\n\nA lot of things get tagged with Design.},{title:DesignApproach,created:20200121123617028,creator:soren,es:confident,modified:20231118000622350,modifier:soren,tags:SorenConcept Design Public Idea,type:text/vnd.tiddlywiki,text:A DesignApproach to something is one which takes into account what will actually happen, rather than one which a designer or someone in charge wishes will happen. It involves working with people to create a mutually agreeable system, rather than trying to force compliance with a system. The design approach is nearly always both more effective and more likable.\n\nSee also CultOfTheFantasyPedestrian|CultOfTheFantasyPedestrian20190814. As that article says:\n\n> If your goal is to promote public safety, design for the humans you have, not the ones you wish you had.\n\nA corollary is that the design does not need to be obviously associated with the result: see TargetProblem vs. SurfaceProblem.\n\nSeveral principles are associated with appropriate application of the DesignApproach:\n\n* PrincipleOfLeastAstonishment -- it is the designers responsibility to not surprise the user.\n* FailHelpful -- events the system cannot handle gracefully via DoWhatIMean should at least be explained.\n* DeflectResistance -- the system does not seek to make the user responsible for doing the right thing but instead provides an environment in which the user is led to do the right thing.\n* MarkdownPhilosophy -- the system can be used at a simple level with very little effort, but putting in the small amount of effort at that simple level allows more complex usage in the future without any rework.\n* GracefulDegradation -- when something goes wrong, the system continues to work at least partially.\n* IntellectualHumility -- you are likely wrong about a lot of things you think you know, so avoid plans that will go badly wrong if you get some small things wrong.},{title:DesigningForSustainability,caption:Designing for Sustainability: A Guide to Building Greener Digital Products and Services,created:20200706221627341,creator:soren,due:202210301200,ivl:405,medium:book,modified:20210920140459415,modifier:soren,owned:no,readstatus:unread,tags:Source Antilibrary Public,type:text/vnd.tiddlywiki,text:https://www.amazon.com/Designing-Sustainability-Building-Products-Services/dp/1491935774\n\nSuggested in SustainableSoftwareEngineering20200520.},{title:DesignTryingTooHard,created:20240527140931592,creator:soren,description:Better to require a bit more manual effort but have the system easy to think about than to try to guess what the user wants.,es:likely,modified:20250309154326284,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Recently, a lot of designers seem to have gotten it into their heads that they should try to guess what you want to do next and do it for you.\n\nIt can indeed occasionally be helpful when guesses of what you want to do next get incorporated into some kind of auto-suggest section.\u003C\u003Cfnote \I think it is far more occasional than many designers seem to think, though. For instance, I have not once found occasion to use one of the automatically suggested text or email responses in iMessage or Gmail. I know what I want to say, and it is a little bit different from the suggestion. Sometimes the suggestions are flat-out absurd; I remember one time when I asked someone on a date via text and they said yes, and the auto-suggest recommended I say “Ok, thanks!” Predictive text works great though, hmm.\>> But more often, people instead just make the interface gratuitously non-deterministic, or make straightforward selections have spooky action at a distance that is difficult to understand or remember, or outright prevent you from doing certain things because they think you probably dont want to do them. Unless theyre really terrible at design, its probably true that you usually dont want to do those things, but adding the limits //creates// complexity by adding rules|AddAnotherRule to the system, scaling it up|AvoidScale, actually making the system harder to understand as a whole, particularly on the odd occasion that you really did want to do that thing. PerfectionIsSubtractive.\n\n!! Vehicle climate controls\n\nFor an extended example, lets consider a cars climate controls. The standard climate control design from, say, the aughts, involved a number of knobs and/or buttons, along three primary axes: temperature (along a colored gradient from “hot” to “cold”), fan speed, and mode (where the air comes out). Depending on the cars design, the AC and recirculate might have been separate buttons that you could engage with any of the other mode selections. This design worked great! You might have had to make selections on several of the dials to achieve the effect you wanted, but a five-year-old could understand it after playing with it for a few minutes, it was always completely obvious which selections to make, and, especially crucially, it had excellent tactile feedback, so that once youd driven your car for a few months, you could make the selections entirely without looking, or with just a quick glance to be sure your hand was starting in the right spot. \n\nMy car from 2017 dispenses with this eminently sensible arrangement. Instead, it has three infinite-scroll dials each with two buttons in the middle. The dials still control temperature, fan speed, and mode, but they arent very clearly marked (I pick the wrong one by mistake occasionally), and there are no markings along any of the dials. Instead, you have to first look down at the dials and remember which one to use, then look up at a small screen about 2 feet away, then carefully turn the knob until the option you want appears on the screen. The mode selection is particularly annoying -- because the modes dont have any visual ordering, Ive driven this car about 60,000 miles over 8 years in all weather, and I still have no idea what order the options come in or how many clicks I need to turn it to get to a particular mode,\u003C\u003Cfnote \Actually Im not even sure I could enumerate the exact set of modes that are available!\>> I just have to turn the knob slowly until the symbol I want appears on the screen (and usually I go too far and have to click it back the other way -- all while Im also trying to, you know, drive the car).\n\nThe car also now lets you pick a temperature in degrees Fahrenheit, but as far as I can tell, the number has approximately no correspondence to the actual perceived temperature in the cars interior, except that higher numbers mean it will feel warmer. On many if not //most// drives in my climate, the car is in fairly extreme, rapidly changing conditions with minimal insulation, and it often simply doesnt have time to reach a steady thermodynamic state before I reach my destination (this can sometimes take as much as 45 minutes in my experience), so expecting a thermostat to work as well as it does in a home is silly. Under actual conditions, saying “a lot warmer than this” or “a little cooler than this” is more useful than trying to pick a temperature, as well as more honest about the cars abilities.\n\nIt gets even more annoying, though. If you push the “defrost” button, the fan automatically turns up to max speed and the recirculate turns off. Sometimes the AC will turn itself on if you turn the temperature down low enough (I dont know if it ever turns itself off). When you leave defrost mode, sometimes recirculate will turn back on if you had it on before. Also, theres a button called “AUTO” on one of the dials, and I have no idea what it does. I just went and read the manual, and apparently it controls some of the other settings to match your (generally not useful) temperature settings if you turn it on, but if anything Im even //more// confused than I was before reading the manual. Actual quote, among multiple pages of similarly dense, obtuse text:\n\n> If you operate any of the buttons on the control panel other than the “OFF” button, rear window defogger button and temperature control dial(s) during FULL AUTO mode operation, the “FULL” indicator light on the control panel will turn off and the “AUTO” indicator light will remain illuminated. You can then manually control the system as desired using the button you operated. To change the system back to the FULL AUTO mode, press the “AUTO” button.\n\nSo, to enter FULL AUTO mode,\u003C\u003Cfnote \And here I thought a FULL AUTO was when I had more passengers than seat belts in the back.\>> press “AUTO”, then to go from FULL AUTO to AUTO, press something other than “AUTO”? Got it. (Also, I dont see the FULL light theyre talking about in the diagram, nor do I know where it is in my car. Remember, Ive been driving this car almost exclusively for 8 years, and I think I pay an unusual amount of attention to my cars features.)\n\nAlso from reading the manual, I learned that turning the defroster on can (sometimes?) activate the air-conditioner to help remove moisture, but when it does so it doesnt turn on the AC light, just to confuse you further.\n\nSubaru, I love you to death, but I DO NOT WANT ANY OF THIS. I think silently turning on the air-conditioner automatically with the defroster, if appropriate, makes sense; theres not really any reason I wouldnt want that behavior. But beyond that, give me back my classic climate controls. (Actually I think a lot of the old ones already did this anyway. Theres certainly no reason that feature would need to be exclusive to fancy automatic climate controls.) Yeah, I guess I have to move a few more switches as I drive, but its actually //much easier//, because I always know exactly what is going to happen when I move them. Not only is the infinite-scroll physical design stupid (the interface is less expressive than a sandwich|LessExpressiveThanASandwich), there are too many things to keep track of when pressing one button silently changes multiple other things on different axes I allegedly have control over. And features like remembering whether the recirculate option was previously on when I enter defrost mode and then leave it are silly; I dont keep track of what mode I last had the climate-control system in while Im driving, I just select a new one when I notice the car is uncomfortable or my window is fogging up! Id love to see someone draw the StateMachines for the two designs side by side; I guarantee you the new one would be much harder to follow. \n\nWorst of all, the new design sacrifices simplicity to solve a problem that doesnt exist. It is not hard for people to turn a couple of dials, because when something becomes habit it requires approximately no thought to carry out the required steps. Ive never talked to any driver who hated having to choose the fan speed or ventilation mode in their car. Its not hard for new drivers to figure out. Sure, some people are in the habit of choosing options that dont work as well as they could because they dont know what all of them do, but the car does an even worse job if you try to have it choose them automatically. Then when you have to manually intervene to correct the car, it gets incredibly confusing because the car changed choices you made with no indication it was doing so.\n\nTo generalize: its much better to have to do slightly more things yourself, but to fully understand what is going to happen when you do them, and to have pressing the same button always yield the same result.\n\n(Side note: Reddit claims|https://www.reddit.com/r/cars/comments/rku05i/what_is_the_point_of_automatic_climate_control/ that some cars have an actually good automatic climate control. If you manage to make it actually bring the cabin to the right temperature in a not-annoying way, and have an interface that isnt confusing, Im not opposed to the idea; I just havent seen anyone actually manage that yet.)\n\n\n!! LLMs\n\nI got in an argument about RemNote the other day, where someone was suggesting we feed the text the user had selected to an LLM and ask it whether a particular feature could be used on it, and then not show the option if the LLM concluded it couldnt be used on it. This is a perfect example -- why? LLMs are not deterministic, and theres every reason to think even a great prompt is sometimes going to guess wrong about whether the feature makes sense on the text. Even if it were 100% accurate, its confusing for an option to disappear when the computer thinks you probably wont want it.\n\nYeah, I guess you have to learn what the option does, and now you could select it when it doesnt make sense and be momentarily confused. But thats not new, nor is it particularly frustrating. It doesnt make much sense to select all text in a 50-page word-processor document and underline all of the text, but the software lets you anyway, because it would be vastly more confusing to try to come up with a set of rules about when underlining “makes sense” and allow underlining only in those situations. (And forget implementing the rules in a clear fashion; even coming up with reasonable rules is challenging. Any restriction on size would be subject to the SoritesParadox; failing size youd have to go with something like “you cant underline after pressing Ctrl+A”; but then what if your document has only three words in it so far?) Inevitably there will come a time when the rules are wrong and you really did want to underline it, and now you have to try to figure out what the hell the rules are and how you can get around them. Meanwhile, Im smart enough to figure out if I want to underline something, and if I make a mistake I can just undo it. The customer is always right.\n\nAutomatic semicolon insertion in JavaScript is similar; from|https://controlaltbackspace.org/scripting-communication/ TheControlAltBackspace:\n\n> There’s no reason a computer can’t try to understand places where commas have been left out. In fact, the language that powers most web pages nowadays, JavaScript, does this with semicolons; it’s called automatic semicolon insertion|https://flaviocopes.com/javascript-automatic-semicolon-insertion/. The problem is that this feature //sucks//. In most cases, you can leave one out and the computer will figure out what you meant. Unfortunately, the result is that most of the time the feature works great, but when it doesn’t it fails in confusing and unintuitive ways and requires you to memorize the details of how the computer tries to insert semicolons to figure out what went wrong. The computer just isn’t equipped to understand ambiguity – the only way it can handle semicolon insertion is by following other specific instructions which are necessarily imperfect. (You could also try to have it use a machine-learning algorithm, but that would be even worse because the computer wouldn’t even be able to explain why it made the choice it did!)\n\n\n!! Parting thoughts\n\nMaybe all this is really just|ItsJust a complicated way of saying that AbstractionsLeak. But I dont think its intuitive that the reason your newest cars climate controls are worse than your previous cars climate controls because the designers have added too many leaky abstractions to them, so this seems worth talking about explicitly.\n\nIs this design habit a form of SubtleCrappification? Most of the time you get something slightly better (less opportunity to pick the wrong thing, fewer buttons to push), but your overall control and capabilities and the amount of complexity you have to keep track of is worse.},{title:DesirableDifficulty,created:20200712040426443,es:confident,modified:20200712040700515,tags:Memory Psychology Learning Public Idea,type:text/vnd.tiddlywiki,text:Memory and learning observation: often, learning strategies which appear to be more difficult and less effective are actually //more// effective. For instance, SpacedRepetition, by focusing your study effort on the things that are most difficult to learn and recall, can make it seem like you are remembering things worse, compared to an unenlightened and unscientific study method in which you read over notes that you already know well, during which process youll be saying, “Yeah, I know this! Easy enough.”\n\nSimilarly, a wide variety of studies have found that mixing types of problems is more effective, perhaps because you understand the relationships between and appropriate applications of different techniques better that way, but everyone feels it is harder and most have refused to adopt this approach of organizing classes or learning materials.\n\nSee also CounterintuitiveEfficiency.},{title:Details,created:20240509104444355,creator:soren,modified:20240509143157202,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:...dont get too focused on: ZettelkastenDetailsTrap, ExploringTheFuture, \n\n...impossible to avoid considering: AbstractionsLeak, AttentionEspeciallyToIncidentalDetails, HoleWhereSuccessLeaksOut, Reality has a surprising amount of detail|http://johnsalvatier.org/blog/2017/reality-has-a-surprising-amount-of-detail\n\n...truth made of: The Truth is Always Made of Details|https://www.raptitude.com/2023/10/the-truth-is-always-made-of-details/ (MrDavidCain; see also TravelOverrated)},{title:DeteriorationOfReality,created:20200322023632619,creator:soren,es:possible,modified:20210511010852126,modifier:soren,tags:DystopianVision Politics Information Futurism Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:The way in which the Internet breaks down barriers to publishing and encourages Clickbait, SocialMediaImportanceDelusion, and other ways to make quick money or dopamine hits off of getting people to listen to you is causing what I call the deterioration of reality. A huge crumble appeared in the wall at the time that MrDonaldTrump took office in 2016 and the idea of AlternativeFacts became popularly known, but it had been happening earlier and has continued to happen afterwards.\n\nThe effect of the deterioration is that its much less clear than ever before whats actually going on in the world. You read stuff all the time that describes itself as “news” thats really politically motivated bullshit. When urban legends and plain false information appear, they propagate much faster than they used to, and they can even quickly get picked up by so-called “trustworthy” sources like major media outlets, Wikipedia, or even book authors.\n\nThis isnt really a political thing anymore. Trump may have won by exploiting it and be continuing to use it, but people from all walks of life are taking advantage now. Pretty soon it will become normal if something doesnt change to check it: EnablerAndDemander rearing its head again.\n\nTrends and technologies like DeepFakes could also expand the scope of deteriorated reality. Right now, for instance, clear video evidence of what actually happened can generally override false accounts as long as you can get people who believe the false account to watch the video (not always easy because of ConfirmationBias: its NotesMustLink, but you dont have control over the notes). That could change quickly as the technology gets better.\n\nCf. AppearancesOverReality.},{title:DeterministicToolsRandomExperiences,created:20200330130145589,creator:soren,es:possible,modified:20200812030556846,modifier:soren,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:People do well with randomness (see SurpriseMe). But they also seem to hate when things dont work out exactly how they anticipated. Whats up with that‽\n\nI submit the following theory that begins to make sense of it: people like deterministic tools, but random experiences. If you have a cup, or a hammer, or a piece of software, you generally dont want it to behave anything but completely deterministically. The only form of randomness it can exhibit is defying your expectations, and since the point of a tool is to extend what you can do while staying under your command, this is just flat-out annoying.\n\nOn the other hand, most of us like at least occasionally wandering out into the world not knowing what were going to see. Thats why people like traveling, for instance. There are times when we just want everything to happen how we think it should, but mostly I think thats because we have something else on our mind. Some people maybe think they just dont want their cheese to move|WhoMovedMyCheese at all, ever; but I do wonder if they would actually be fully satisfied if it didnt. (Also, compare AccidentsMakeTheWorldGoRound.)\n\nNot perfect, of course, but this is a complicated issue.\n},{title:DeusExMachina,created:20200910020337235,creator:soren,es:confident,modified:20211229145243973,modifier:soren,tags:FictionTheory Definition Public Idea,type:text/vnd.tiddlywiki,text:A plot device, usually so named disparagingly, wherein a seemingly unsalvageable situation is conveniently and rapidly fixed by a basically unbelievable|SuspensionOfDisbelief process: visible divine intervention, the sudden appearance of a superhero who has never appeared in the story before, a new element of magic not in line with anything thats happened so far.\n\nCf. ConvenientGuru for a less dramatic cop-out.\n\nSee also \u003C\u003Crt 8074>> on //machina ex deo//.},{title:DevelopingIntrinsicSrMotivation,created:20200729125034120,creator:soren,description:Spaced repetition is fantastically useful but effortful; how can we make it enjoyable so well consistently use it?,es:possible,modified:20240606140728348,modifier:soren,tags:Memory Psychology Public Idea,type:text/vnd.tiddlywiki,text:In terms of its potential efficiency and cognitive gains, SpacedRepetition is, as MrMichaelNielsen put it in AugmentingLongTermMemory201807, basically an endless series of twenty-dollar bills waiting to be picked up. Yet its only widespread in very specific communities. Why?\n\nOne problem is that people dont see that its worth using, and theres a whole line of exploration here.\n\nBut another is that people who try it often fail at making reviewing into a habit, and they drift away from it. I think the key problem is not so much that people forget to review (although that does happen), but that they dont figure out how to make it enjoyable and intrinsically motivating. Because I think thats possible to do!\n\n\n!! Remembering to review\n\nThere is a large body of literature and practical advice on building habits; use it!\n\nIve grown to really like sitting down first thing in the morning with my tea and practicing my flashcards, but the details dont matter, as long as you make sitting down to practice largely automatic. The mechanics of doing something every day are not easy even if it only takes 30 seconds (see how many people dont regularly floss their teeth) -- and an ordinary number of SpacedRepetition reviews take well more than that. Though Ill say even if you only study 5 cards a day, you can still get some serious value out of that if you choose the cards wisely.\n\nRemember that consistency beats volume|PowerOfKonsistency.\n\n\n!! Making review motivating\n\nA larger problem than remembering to review, because its a more complicated problem and usually requires conscious design to succeed: enjoying reviewing and ensuring that you learn something that is useful and motivating to you.\n\n* Recognize that RemNote or Anki or whatever other SRS tool, past or future, and your success with it, isnt a matter of the //tool//. Its about what you learn with it, what information you put into it and how you write it, and how you accomplish that. Many new users and promoters misunderstand this, perhaps because these things are harder to think about and offer even less wow|ToolsForThinkingDontWow than SpacedRepetition already presents. See also RoleOfTools.\n* Choose InterestingSpacedRepetitionMaterial. Choose material thats immediately relevant to you and/or that youre excited to learn about.\n* If youre new to spaced repetition, give it at least a month before you make a decision on whether its useful to you. It takes that long to see the benefits. Also, as your test case, learn a new topic thats complex or difficult and that youre excited about, and use your flashcards to develop a BasicLearningFoundation on that topic. This is almost certainly the fastest way to feel a “wow factor”|AnkiWowFactor.\n* Keep your cards precise, atomic, and small so reviews are less frustrating. See AnkiCardPatterns, precise cards|https://controlaltbackspace.org/precise, and How to write good prompts|https://andymatuschak.org/prompts/. In general, starting with top-notch cards is best.\u003C\u003Cfnote \Developing GoodSharedFlashcards is probably the best way to accomplish this for new users, since new users wont be able to create top-notch cards themselves at the start -- creating good cards is the hardest part of SR.\>>\n* When a card gives you an “ugh” feeling, immediately either disable it or fix it to be less ugh-y. Never keep it figuring it will get better; it wont. Removing all “ugh” cards will make your review //vastly// more fun, not to mention more efficient. PerfectionIsSubtractive.\n* As a general heuristic, optimize your whole spaced-repetition practice for emotional connection to your material (h/t MrAndyMatuschak) -- even if this means you have to disable some cards that would theoretically be useful to know because you hate them, or you “waste time” practicing some things that arent immediately relevant to your exams because they make your study sessions more enjoyable. If you dont practice consistently|PowerOfKonsistency, nothing else matters, and if you have no emotional connection to your material, it is very hard to consistently study. Maybe youll study out of fear due to your looming exams, but your work will be much less effective than it otherwise would. Moreover, if you feel no emotional connection to your material, thats a strong signal that it might not actually be useful to you, or maybe even a sign that youre studying the wrong thing -- listen to that!\n\nThe title of this tiddler may be a bit misleading because it suggests that once youve developed your motivation, you never lose it again, which patently isnt true from the experiences of everyone I know whos used spaced repetition. Most of us have fallen out of the habit at one point or another, even for a long time. Spaced repetition is a toothbrushing problem|DiplomaVsToothbrushingProblems; it requires continual attention throughout your life to continue succeeding. I suspect that most people fall out of the habit when their knowledge base becomes stale, no longer containing prompts that are a force multiplier for their current projects and interests, and they consequently lose much of the “wow factor.” So adding new cards for your current interests and disabling cards that are no longer useful or meaningful to you is a key discipline. (But I should make clear this is an educated guess with no hard evidence behind it!)\n\nSome people might have a SpacedRepetitionPersonality that makes them more likely to develop this motivation; studying that in more detail might yield some interesting insights as to how to bring it to others as well, or who to focus on marketing spaced repetition to.},{title:DevOps,created:20200220122908991,es:likely,modified:20210701040109287,tags:AgilePhilosophy Process Code Public Idea,type:text/vnd.tiddlywiki,text:A software development school of thought that merges LeanMethodology and AgilePhilosophy and focuses on the flow of value between parts of an organization. Much benefit, according to DevOps, can be found by breaking down silos and artificial divisions in an organization and adjusting teams so they can be as self-sufficient as possible. Critical is the use of tools like Kanban boards to understand how work is moving within the organization (MakeWorkVisible): otherwise bottlenecks|WorstBottleneck are hidden in plain sight for years. It should //not// be normal and is not necessary for in-progress work to sit around for months!\n\nIn DevOpsInTheRealWorld, the ability to //scale changes linearly with the number of developers// is highlighted as a strength. This is a consequence of working to maximize throughput of value. Traditional methodologies, with all of their bottlenecks, tend to increase effort per unit of value more than linearly (e.g., O(n^^2^^)).\n\nObjection: WeDontHaveTheSkills.\n\n!! Principles\n\n\u003C\u003Cstretch FreemanDevopsPrinciples>>\n\nSee Freemans talk for some great thoughts on implementing DevOps as well.},{title:DevOpsInTheRealWorld,caption:DevOps in the Real World,created:20200428181319148,medium:video,modified:20210714032608824,rating:average,readstatus:read,tags:Code Process AgilePhilosophy Source Public,type:text/vnd.tiddlywiki,text:PluralSight course by MrRichardSeroter discussing specific practices that can go with the DevOps methodology and examples of how you might implement them on your team. Uses a week-in-the-life format, which didnt help organization but maybe made it a little more interesting.\n\nSeroter was an excellent speaker. Unobtrusive but not boring. Too many of the PluralSight speakers either draw attention to themselves or literally put you to sleep (and then there was S.M.|PrivatePerson, who wasnt all that boring but //still// put me to sleep).},{title:DevOpsNeedForManagement,created:20200529234417394,es:likely,modified:20210628021459191,tags:Public AgilePhilosophy Process Idea,type:text/vnd.tiddlywiki,text:To what extent does management drive DevOps DigitalTransformations, rather than individual employees?\n\n* Dont wait for your higher-ups! Start with your daily work and your team. Try InfrastructureAsCode, ValueStreamMapping, etc., etc.\n* But management does need to help growth once this has started -- you cant create cross-functional teams and reduce siloing without cooperation.\n** Talk to management about business benefits. Or whatever ElementOfPersuasion is important for them.\n** COVID-19|PandemicMood may be a great way to make the case...\n* Further, organizations who are doing better consistently have management that is on board, and that obviously makes the process a lot easier.\n** Only management can get //everyone// involved in the process of ContinuousImprovement (at the worst, by firing people who wont change).\n** While you shouldnt wait for leadership, you also should do your best to get them to join.\n\nSources: MrStephenThair, in DevOpsStateOfNation20200521; Accelerate2018.},{title:DevOpsStateOfNation20200521,at:202005211415,caption:DevOps State of the Nation,created:20200518214756152,medium:video,modified:20210522015801837,presenter:MrDeanBryen MsAprilEdwards MrGeneKim MrStephenThair,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/a78ec212-1685-41f8-96de-0a7f3c611149,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis was an excellent panel session. Cf. RemoteDevopsCulture20200520 for the other DevOps session I attended.\n\n* MrDeanBryen (facilitator)s manager is MsEmilyFreeman, who did the earlier session RemoteDevopsCulture20200520 and wrote //DevOps for Dummies//; before he called MrGeneKims book the //second//-best DevOps book, now that shes asleep hes calling it the best!\n\n* MrGeneKim: Whats different in the intervening years since PhoenixProject?\n** Happy how well the book has served as a banner for the movement\n** DevOps is expanding beyond techies to large organizations -- happy to see the “rebellions against an ancient and powerful order”\n** In 2013 most injustice was in the ops area, and so thats where most of the innovation was coming from; now development is driving it too.\n** “Theres never been a better time to be a developer”\n\n* MrStephenThair: How about you?\n** Along with DevOps mainstreaming into enterprise has come cloud\n** DevOps is a good thing to “drag along” because a cloud transformation is an opportunity to reset (!!)\n\n* MsAprilEdwards?\n** People no longer want to do things the same way theyve been doing them for years\n** Competition -- //cant// do that because the competition is adapting (a form of EnablerAndDemander)\n\n* MrStephenThair: Do we (still) need buy-in from leadership to implement DevOps properly?\n** See DevOpsNeedForManagement.\n\n* MsAprilEdwards: How has tooling adapted to allow autonomy and DevOpsification?\n** AzureDevOps\n** Acquisition of TheGitHub\n** Data on throughput from these things\n\n* MrGeneKim: How could CodeSpaces change things in DevOps?\n** Improving dev productivity\n** Choosing between feature or security defect (MrBillGates famous initiative from UnicornProject) -- same with dev productivity. See ImprovementOfDailyWork.\n** Q: Which C-level executive is driving DigitalTransformation? A: COVID-19.\n*** Being forced to change.\n** MsAllisonBuchholtzAu, from a session about CodeSpaces: “Managing two versions of Python on a laptop shouldnt be a core competency”\n\n* MrStephenThair: The DevOps story has matured from involving “DevOps Ninjas” who are full-stack and do everything amazingly, to focusing on teams who include competent people, but dont have to be unicorns.\n** Following FiveIdeals etc.\n\n* MrGeneKim: Can you comment on PsychologicalSafety?\n** Where the need for leadership is most clear\n** The source of cultural norms\n** Back to dev productivity: M.|PrivatePerson supposedly has 3-5,000 developers working on dev productivity! And these are the best people. Previously the features got all the great people and dev productivity got summer interns without any direction. Heres the ImprovementOfDailyWork philosophy again.\n\n* 75% of people are starting to do DevOps in a watcher poll. Does this match what you all have seen?\n** MrStephenThair: The 50% who said they do some DevOps covers an extremely broad spectrum, from people who are “DevOps!” because they use a tool that has “DevOps” in the name, to people who are actually doing pretty well.\n*** Meanwhile, there are still people doing strict WaterfallMethodology projects.\n*** A poll from one of the Australian sessions said that 20% of people werent using SourceControl! (Steve facepalmed.)\n** Were coming along in the adoption curve, but not into late-adopters yet (scrambling to do it to save themselves).\n\n* Whats the best thing youve seen someone do around DevOps recently?\n** MsAprilEdwards: Widespread adoption of InfrastructureAsCode by customers. Or, theyre not doing it but their minds are blown as soon as its implemented.\n** MrStephenThair: Allowing on-prem datacenters to be controlled by cloud-style control tools. Also, event-driven ops paradigms.\n** MrGeneKim: DevOps advancement into large, complex organizations.},{title:DevSecOps,created:20200521200711310,modified:20200521200824107,tags:AgilePhilosophy Systems Design Process Public Idea,type:text/vnd.tiddlywiki,text:DevOps, but invoking a notion and involvement of security. DevOps should obviously involve security from the start...but some people like putting the word in there for emphasis. Corporate-speak maybe, but its not hurting anyone.},{title:DevTeamThinksOfEverything,created:20200127025344190,creator:soren,es:mythological,modified:20200223150947708,modifier:soren,tags:Expression Game Design Public Idea,type:text/vnd.tiddlywiki,text:In the NetHack community, \TheDevTeam thinks of everything\, or TDTTOE, is a common phrase describing the massive collection of EasterEggs sprinkled throughout NetHack. Basically, most games give dull messages when you do something unexpected. NetHack has clever messages tailor-made for even completely implausible situations. Some of my favorites:\n\n* Take off a blindfold while blind: instead of no message as you might expect, you get, \You still cannot see.\ (I dont love this one because its particularly clever but because it shows AttentionEspeciallyToIncidentalDetails.)\n* Apply a bullwhip to the ceiling, but on a level that isnt in the dungeon but in the open air: \You flick a bug off of the sky\ (instead of the already-precise message, \off of the ceiling\).\n* Apply a bullwhip down at the corpse of a dead horse: \Why beat a dead horse?\\n* Apply a stethoscope to the edge of the map (something which requires arsing around with a pickaxe for a while): \You hear a faint typing noise.\ (One might call it BreakingTheFourthWall, literally...)\n\nYou can play for //years// and suddenly laugh out loud at a message youve never seen before!},{title:DiaryOfAYoungGirl1947,author:Anne Frank,bibliography:LifetimeReading,caption:The Diary of a Young Girl,completed:20210805,created:20210703170128000,genre:History,medium:book,modified:20230130034213859,priority:1,rating:good,readstatus:read,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1947,text:Diary of MsAnneFrank during the period of WorldWarTwo she spent in hiding in a secret loft area of an Amsterdam warehouse and office, before she and her family and the rest of those hiding were hauled off by the SS and all but Otto Frank died. A classic account of life during the Holocaust.\n\nI had never read any of this in school or otherwise before I picked it up this year, and I was favorably impressed. My culturally transmitted impression of it was “one of those things people make you read to feel bad about the Holocaust,”\u003C\u003Cfnote \\\\nNot that theres anything wrong with this. Were already letting ourselves forget the Holocaust too much. But its more of a civic duty as an inhabitant of this planet, not something youre excited to do.\n\\\>> but its actually entertaining, surprising, and inspiring, and full of both intriguing mundane details and a powerful philosophy of living under extreme constraints and fear.\n\nThe diary doesnt feel like nonfiction, which I mean as a compliment. It has the quality|SoWhat of legend and didactic potential that can usually come only from intentionally designing a story that way or by allowing a true story to be adapted over time, and its certainly as compelling. I found myself regularly forgetting as I read that this was really written by somebody living through WorldWarTwo (or rather, sadly, most of the war). To some extent, perhaps it doesnt matter -- of course its cool that its real and has been independently verified as such many times, but if Anne Frank had instead been an American with a really good imagination and understanding of the war writing in the 1950s, Im not sure that the diary as a document would have turned out any less powerful.\n\nAnne has a wonderful voice. Of course she sounds like a teenager some of the time, or even most of the time -- but shes full of wisdom too. She brags, shes overconfident, shes impatient, she gets peeved at the other inhabitants of the Annex sometimes and laughs at how pointless other peoples quarrels are at other times -- but its all very //real// and honest, something which is rare in published texts, and in fact I think she does an astounding job at staying sane, positive, and reasonable, at least in her diary, given the conditions. Im a pretty easygoing guy, and Im not sure I would do half as well!\n\nAnne points out multiple times that, all in all, they come somewhere in the middle of the pack in terms of suffering during the war (at least while shes writing). Theyre stuck in a room hiding in fear of their lives, sure but theyre not caught up in the fighting, theyre not at a concentration camp, they havent had their homes destroyed, their immediate families are as safe as Jews can be during the war, etc. Going through a period of global instability right now in the form of the COVID-19 pandemic|PandemicMood, seeing the war from an everyday-person perspective is an interesting counterpoint -- and a reminder that despite the mess this pandemic has been, most of us have still been incredibly fortunate. This is not to diminish COVID -- its already one of the most deadly pandemics in history by total body count, and were not even close to done globally -- but overall it has the character of that old joke about “sustainability” meaning “pretty much the way I live right now, but maybe with a different car”; compared to the amount of change we could be having to deal with, adaptation has been pretty simple. Quite apart from the whole part where we humans|ArendtGreatLeveler killed six million other humans just because they were Jewish, WWII was an incredible mess with a degree of intrusion into a number of average peoples lives which I think has been unseen before or since.\n\nPeople often complain about the existence of the expurgated versions and are surprised to learn about some of whats in the full version if they never read it (the full version wasnt available at all until 1983). While Im glad I got the full version as an adult reading the book on my own, I didnt feel the parts that would obviously be removed in an expurgated version were really that important; maybe they give you a slightly fuller view of Anne, but its not enough of a difference to really mean you missed out on a lot. If schools dont want their students to read the bits about sex and menstruation, I kind of give that a big //whatever//. Even if youre going to decide to spend your political energy on //a schools reading list//, youre going to make it about this?\n\nI have nothing bad to say about this book. If you havent read it, you should.\n\n!! Unintegrated ideas\n\nTODO: Figure out what to do with these :)\n\n* 46 -- adults are petty too\n* 91 -- Gas -- RSVP\n* 96 -- cat names\n* 102a -- toilet clog\n* 137 the art of living\n* 155 The Hanukkah Bible\n* 167 \I wish I could honor her by removing the S\\n* 169 -- \lonely...one and only\\n* 186 - The idealistic, unbiased perspective (and issues vs vault: cf §AppearancesVsReality)\n* 198 last paragraph: just //wait//, cant do anything anyway\n* 213 -- the remedy of the outdoors\n* 214 -- \as long as you can look fearlessly at the sky\ (title!)\n* 227 - I realized I could manage...and that hurt\n* 261 United by Mouschi\n* 270 The bit on living after her death\n* 289 \Why shouldnt we kiss each other in times like these?\\n* 291 \Oh, if only we were never disturbed again, even by Mouschi.\\n* 350-1: Annes take on religion\n* 356: \We have many reasons to hope for great happiness, but we have to earn it.\\n* 358c \I still believe...good at heart\\n* on it being easier to speak meaningfully in half-darkness},{title:DifferentWorlds2017,author:Scott Alexander,caption:Different Worlds,created:20210313135249928,medium:article,modified:20210711155655826,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://slatestarcodex.com/2017/10/02/different-worlds/,year:2017,text:Various factors like social bubbles|PersonalBubble, personality disorders and oddnesses, and past experiences make people see the world entirely differently. For instance, some people think the world is intrinsically good, while others think it is intrinsically evil. Partly because of ConfirmationBias and different slants on the way the same actions and events are perceived, but also partly because people //really just see different things happen in the world//, because the world is a big place, both people can be reasoning correctly: one has seen only things that would lead a reasonable person to believe the world is good, while one has seen only the opposite. (And indeed, who can state objectively which is correct, if any?)\n\nScott brings up a couple of examples, including a woman who has been interested in MSCS and worked in tech for years and years and has never once experienced something she would describe as sexist, and a Black person who grew up in the American South and says nobody ever discriminated against her.\n\nCompare MissingFictionalContext, MyUnusualMentalExperience, and HaveToExperienceItToUnderstand.},{title:DigitalMinimalism2019,caption:Digital Minimalism: Choosing a Focused Life in a Noisy World,created:20210117194901393,medium:book,modified:20210606222805615,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2019,text:Book and concept by MrCalNewport which advocates, essentially, applying a CostBenefitAnalysis to all technology (rather than adopting an AnyBenefitMindset), determining essentially whether it is in my terms AppropriateTechnology. Then it goes on to discuss a lot of strategies for doing that, because in a tech-centered world where many tools that are not actually useful have drawn on AddictiveDesign, it is actually not as easy as it sounds to apply this philosophy.\n\nRelated to, though distinct from, EverythingsBroken.\n\nThe remainder of my thoughts on the book may be found on my blog: https://controlaltbackspace.org/simplicity/digital-minimalism/},{title:DigitalTransformation,created:20200521134644724,modified:20201204041546684,tags:Definition Software Public Idea,type:text/vnd.tiddlywiki,text:Industry term in the late 2010s and 2020s describing the way that every company is becoming a software company|EveryCompanyIsASoftwareCompany, specifically for the process of a company trying to accept this fact and take advantage of technological opportunities.},{title:Dilbert,caption:Dilbert,created:20200509023440962,medium:comic,modified:20200808143141412,tags:Public Source,type:text/vnd.tiddlywiki,text:Classic, extremely long-running comic making fun of office life. J.M.|PrivatePerson says that he had to stop reading it because it was so true it stopped being funny.},{title:Dinkytown,created:20231011024112101,creator:soren,modified:20240509143200900,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DiplomaVsToothbrushingProblems,created:20240128232449552,creator:soren,description:Does this problem need a solution thats applied once, or continuously throughout time?,es:confident,modified:20251020041211089,modifier:soren,tags:Idea Definition Psychology Process Systems Public,type:text/vnd.tiddlywiki,text:Concept of MrAdamMastroianni in DebogYourself2024: a diploma problem is one that can be solved once, and then youre done, the solution lasts forever. A toothbrushing problem is one that has to be given continuous effort as long as you want to have it solved.\n\nMastroianni says he succeeded in fixing his depression only when he realized that it was (at least for him) a toothbrushing problem and not a diploma problem.\n\n\n!! References\n\nMany people unreflectively think marriage is a diploma problem: once you find a partner, youre done! In reality most of the work in any close relationship comes later (and what you have to do to get into the relationship is almost an entirely different skill/task than what you have to do to keep it and make it continue to be worthwhile). See AsLongAsLoveShallLast and FindRelationshipsOrMakeThem.},{title:DisabilityAccommodationTradeoff,created:20231018115134380,creator:soren,description:Sometimes making a place or thing better for people with disabilities can unhappily make it worse for others; what should be done then?,es:possible,modified:20231022213746691,modifier:soren,tags:Idea Sociology Cities Public,type:text/vnd.tiddlywiki,text:Often making life better for people with disabilities makes life better for everyone else as well – for instance, able-bodied people like curb cuts if they have something on wheels with them or are prone to tripping, and hearing people like the option to show subtitles on movies theyre watching. These are easy wins that are worth the minor additional cost in most cases, and are always worth considering.\u003C\u003Cfnote \On the other hand, I, for instance, am unable to create good subtitles for most of my YouTube videos -- Id love to, but creating them takes me longer than creating the video, and I simply dont have the free time to put in for things that get a couple thousand views.\>> (See universal design|https://en.wikipedia.org/wiki/Universal_design.)\n\nUnfortunately, there are also cases where accommodation makes life worse for other people, and here it is often unclear what is morally and socially appropriate. For instance, one Ive been thinking a lot about lately as I dig into APatternLanguage1977 and related topics is building design. Requirements to have elevators in three-story buildings, or wheelchair ramps at every entrance, have done a lot to make people who are unable to take stairs feel welcome and be able to participate in everyday life. Theyre great, right?\n\nThen I see a spot like Caffetto, where someone dryly put a sticker on the graffiti wall next to the basement stairs that says THIS IS NOT ACCESSIBLE, and I think about it, and I have to conclude much of what makes the space work as a Third Place I love would be worsened if you redesigned it so that absolutely everyone could freely use it -- and not just because itd be hard to renovate, because putting one in from the start would have worsened the design.\u003C\u003Cfnote \Off the top of my head: theres a step up between the two halves of the store through a narrow doorway, which does a lot to create a sense of arrival and transition. The basement stairs are steep and send you into a cavernous space. Theres not enough room between the tables to put a wheelchair or probably even an awkward person on crutches, and if you tried to put the space there, it would lose its coziness. And an elevator would be wildly out of place.\>> Plus its just a crazy amount of effort to put in an elevator for a little neighborhood coffee shop in an old brick building. Its all very well to exclude existing buildings from our requirements and our expectations of course, but we also grandfathered lots of buildings into our zoning rules, and now we (well, people smartly thinking about this) are realizing that those are the only nice places, and we cant just expect everyone to crowd into the good existing places while its illegal to build new ones; that only works for so long, and it also causes gentrification, so that people who dont have the money end up in the crappy places (somehow not everyone has gotten the message yet, so there are still bargains to be had in some places, but I cant imagine that will last). If you tried to build Caffettos space now, you simply would not be able to make it as cozy, compact, and human-centered as it is now. Youd instead get something like the McDonalds a few blocks away on Nicollet and 24th, which sits awkwardly like an alien commercial invader in the middle of a space that is vastly more productive and useful.\n\nIts interesting to me that you can still build walk-ups; I dont actually know what the rules are here. I would think that large modern (poorly designed) apartment complexes would be a place where itd be obviously beneficial to force you to put in an elevator?\u003C\u003Cfnote \Even in my old building with the center stairwell, it could probably be done. I bet you could squeeze in an elevator by making the stairwell a little narrower and using the space in one of the side hallways, without losing much space. Although the steep stairs up to the main entrance are a huge part of the (in my view) wildly successful Entrance Transition, so that would be a loss.\>> Maybe the costs are somehow not worth it, like for ParkingMinimums; Im not sure.\u003C\u003Cfnote \On the one hand, of course, if you have trouble getting up stairs, you can just not live there. But what if you get injured or age while youre there and dont want to move? Or guests come over?\>>\n\nI should be clear that I dont think we should, like, roll back the ADA or something. I dont even know that the current (legal, not grandfathered) balance weve chosen is wrong; its reasonable to expect more able people to make some moderate sacrifices at times. I do think its worth everyone thinking a bit about, though. Where are those easy wins nobody can complain about? Where might we need to compromise? Are there creative and non-obvious ways we could harmonize everyones needs that could move things from one category to another, or at least move them closer? Should we half-compromise by making some proportion of things fully accessible, and others just mostly accessible?\n\nEvaluating the experience of people with disabilities against the design of a building sometimes feels like a TabooTradeoff, to the extent that Im hesitant to even publish this tiddler, but I dont think it should be. Living in beautiful, human-centered spaces should //also// be a sacred value; it is critical to human thriving!},{title:DisciplineCrosspollination,created:20200427023533369,es:confident,modified:20200908213128981,tags:Creativity Learning Public Idea,type:text/vnd.tiddlywiki,text:Effect where ContextScrambling means that working on new things, especially ones that are somewhat related but not that much, makes you better at other, older things that you are not explicitly working on.\n\nFor instance, Ive found that learning the mandolin has made me better at playing and improvising on the violin, particularly at double-stops. It adds some new ideas in terms of style, and the finger patterns I learn there can be cross-applied back to the violin. Similarly, learning a new ProgrammingLanguage often improves your style and thinking in other languages.},{title:DislikableCharacter,created:20200125180806621,es:possible,modified:20210607012143710,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Hypothesis: Some people are able to enjoy a work of fiction when they dislike the characters therein, and some arent. This may explain some of the divisiveness of certain works.\n\nObvious examples where Ive actually heard people complain about how awful the characters are: GreatGatsby, CatcherInTheRye. T.G.|PrivatePerson also cited something similar as a reason for disliking RomeoAndJuliet, namely that she couldnt get on board with a story that involved a supposedly meaningful romance between two thirteen-year-old-ishs.\n\nIn reality this is not an on-or-off property that people have of course. For instance, I do like all the works listed above to some degree, but I cant say any of them are my favorites; few of my favorite works of fiction|FavoriteBooks involve mostly characters I dislike or cant relate to. (Lolita|Lolita1955 is the sole exception I can think of at the moment, although its a big one.) So maybe the best way to think about it is a kind of “likability penalty” that impacts different people to greater or lesser degrees.\n\nThe ImplausibleCharacter is a related concept, and the PotentiallyDislikablePerson is a similar idea in real life, although with the wrinkle that specific people really like PDPs, rather than just tolerating them.\n\nSoWhat is a broader form of this in which some people seem to less naturally consider works of fiction as a whole message.},{title:DisuseOfActiveLearning,created:20200302234239437,description:Despite the ineffectiveness of passive learning, it is pervasive, likely because it feels easier.,es:confident,modified:20210611023558823,tags:Psychology Learning Public Idea,type:text/vnd.tiddlywiki,text:Rereading content without taking notes or doing other things with the content is not particularly useful as it is not ActiveLearning. Furthermore, the MereExposureEffect makes it //seem// like it is effective. On rereading material, our brains feel like we know that material as well as we do if we successfully recall it actively -- presumably because it feels familiar -- but of course this is not true.\n\nIts likely this is one reason why this cramming-by-rereading methodology persists despite an overwhelming body of empirical evidence suggesting it is ineffective for long-term learning.\n\nA ZettelkastenProcess forces active learning at least at the time the notes are taken and linked in. In addition, the act of making future links to the concept results in partial active recall as well.\n\nSource: HowToTakeSmartNotes, p.86.},{title:DivineTrinity,created:20200403021544500,creator:soren,es:mythological,modified:20210917010221639,modifier:soren,tags:Metaphor Religion Public Idea,type:text/vnd.tiddlywiki,text:Christian notion of God in three parts: Father, Son, and Holy Spirit. All parts are God but the parts are not equivalent. (See left side of the joke diagram below for the serious version.) A sacred mystery that proves a very interesting metaphor for many other things as well. Cf. EternalBraid for my own take (in a dual and personal context).\n\nWhile there is some Biblical background, the concept was by no means a foregone conclusion; many sects have disagreed. The predominant ones today more or less happen to have agreed and brought it forward.\n\n!! References\n\nOne of my all-time favorite programming jokes compares the ridiculous non-transitivity of JavaScripts `` operator to the Trinity (see also EqualAndNotEqualToNull):\n\nimg christianity-and-javascript.png},{title:DivorceRecommended,created:20200201044950956,creator:soren,description:Sometimes even severe failures can teach you so much about yourself and the world that you wonder if they were so bad after all.,es:possible,modified:20240807031041321,modifier:soren,tags:Romance InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:J.M.|PrivatePerson jokes that he thinks everyone should get divorced. His divorce, he says, taught him a great deal about himself and about life. Most specifically, it taught him that there are many things in life that are ultimately out of your control. He tried //so hard//, and his marriage fell apart anyway, because it wasnt all about him and his effort alone couldnt keep things working.\n\nRemembering that life is a collaboration between us and the rest of the world can indeed get us a long way. (See CooperativeGeneration for a slightly transformative understanding of this notion.)\n\nSee also D.C.|PrivatePerson on divorce as a sacred experience (in SeekingTheSacred).},{title:DoableFrequencies,created:20200519011843454,es:likely,modified:20210725201050868,tags:Psychology Systems Process Design Public Idea,type:text/vnd.tiddlywiki,text:I submit that there are exactly four schedules on which one can consistently remember to do something without an external aid:\n\n* Multiple times a day (attached to a specific trigger like a time, an alarm, or some other thing you frequently do)\n* Once a day.\n* Once a week (or, multiple specific days every week, e.g., Tuesday and Thursday).\n* Whenever you think about it.\n\nThings like \once every two days\ dont have the necessary framework surrounding them that we can remember -- probably partly because each day of the week has its own distinct flavor|WeekdayVibes and 7 is a prime number, so anything other than one day or one week will end up landing on different days in different weeks.\n\nConsequence: you should do a lot of things somewhat more frequently than you might have to -- just to make sure they stay on your radar and dont fall into the \whenever you think about it\ category when that isnt sufficient.\n\nThere are some partial exceptions. For instance, I successfully wash my hair every three days...but I only achieve that by thinking back every time I get into the shower and recalling when I last did it. Im really still doing it every day, Im just skipping the long part on two out of three days.},{title:Docker,created:20200521135810366,modified:20200521135845681,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular tool for containerizing software applications. Kubernetes often (though not exclusively) manages Docker containers.},{title:DocsFirstMethodology,created:20200425174446897,es:likely,modified:20210711155129026,tags:Information InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,url:https://docs.gitlab.com/ee/development/documentation/styleguide/#docs-first-methodology,text:In a docs-first methodology, all work focuses around documentation. For instance, if someone asks you a question that can be answered with a canned answer, instead of answering it, you must go find the answer in the existing documentation, or if it is not there, immediately add it. This means that the knowledge gained in answering the question is permanently added to the organizations usable memory. Questions answered in email are useful only if you remember they are there; questions answered in documentation may actually present themselves at the correct time (cf. NotesMustLink).\n\nThis methodology also helps to keep documentation up to date, something that only gets harder as you maximize your throughput|DevOps.\n\nEvergreenNotes seem to be a personal form of the methodology, at least when used correctly. When thinking takes place as writing|WritingIsThinking, the thinking does not get lost.\n\nStackOverflows Teams product for private Q&A seemingly encourages the docs-first methodology, though in focusing more on isolated questions it may not produce the ideal final product.\n\nSource: TheGitLabs \u003Ca href{{!!url}} class\tc-tiddlylink-external\>handbook\u003C/a> and ideas on remote work.},{title:DocumentationStates,created:20210705144622652,creator:soren,es:possible,modified:20230419173105559,modifier:soren,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Proposal in a Hacker News comment|https://news.ycombinator.com/item?id22680824 suggesting a means of organizing documentation and limiting its ability to go stale.\n\nGive each page four states:\n\n* Maintained -- were trying to keep this up to date, we vouch for it, send us questions or complaints\n* Stale -- was supposed to be maintained, but it hasnt been updated recently enough\n* News -- a dump of information/thinking that isnt intended to be updated\n* Record -- a historical record of how the system was designed as of a certain time (similar to News IMO)\n\nMaintained pages can become stale pages in three ways:\n\n* A reader marks it as stale (notifying the owner/s) and nobody fixes it within a week.\n* The page isnt updated in 3 months.\n* The page doesnt get a sufficient number of views in 3 months.\n\nThis is a high bar...which is good, because it automatically trims your maintained documentation to the stuff that is still useful and encourages you to keep it updated.\n\nIm experimenting with a simplified and Zettelkasten-adapted version of this in this wiki, in the form of UpdateStatuses.},{title:DocumentPreparationSystem,created:20200425163602313,es:confident,modified:20201206190122367,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A system based around a WYSIWYM markup language intended for effectively creating large documents, like books, technical manuals, and so on. Usually treats SeparationOfPresentationAndContent as a crucial feature and allows extensive customization of output, while automatically managing the less interesting details like positioning of figures, creating indexes and tables of contents|TableOfContents, etc.\n\nLearning a DPS is a bit of work, but the results are much better than those of a WordProcessor for the types of deliverables they are intended to create.\n\nLaTeX and Sphinx are common examples I have used. TiddlyWiki shares some features but is not intended to produce traditional linear paper-based output (though could possibly be made to).},{title:DodoJobs,created:20210627031808213,description:Jobs that have a certain set of characteristics may not be viable for human workers in the future.,es:possible,modified:20210627041220204,tags:AI Employment Futurism Public Idea,type:text/vnd.tiddlywiki,text:Term from OnlyHumansNeedApply2016: If a job has some of these attributes, thats a key indication it may disappear in the future as automation and augmentation|AugmentationVsAutomation progress. My rephrasings:\n\n* Significant parts of the system are already automated in some places.\n* Little physical|PhysicallyIntensifier contact is required|SoftwareIsEatingTheWorld to do the job.\n* The job is mostly transmitting content to others. (Insert weird assumptions about teaching|ReplaceabilityOfHumanTeachers here in the original.)\n* The job is mostly reading and extracting information from or analyzing content.\n* The job consists of asking and answering data-dependent questions.\n* The job is mostly quantitative analysis.\n* The job involves teaching tasks that can be simulated for practice and learning.\n* Consistency is critical (computers are way better than people at this).\n* The job involves creating low-value data-based narratives, such as analyses of sports games or earnings reports (these are increasingly automatable!)\n* Most tasks of the job already have well-defined formal rules, which can promptly become ExecutableEvergreenNotes.\n\nIn general, if you are doing a dodo job, you should not try to outthink computers or beat them at their own game. It might work for a while, but computers get better much faster than humans do (and humans can only get better for one lifetime), so eventually youll lose the race. Instead, you should find a new niche|WaysOfStepping where nobody is trying to make the computers better, or where its implausible it will ever make sense to replace people.},{title:Dogfooding,created:20200521204040827,modified:20201206211949120,tags:Design Software Process Public Idea,type:text/vnd.tiddlywiki,text:The practice of using the software you are developing yourself (even better if you are using the software //to develop the software//, because there is a CodeDataEquivalence). Almost universally leads to better software and a big spurt of IntellectualHumility when you discover your software sucks|WhySoftwareSucks.\n\nOf course, this is not always possible. You likely cant dogfood a nuclear power plant control module, for instance -- though it would sure give you incentive to do it right.},{title:DogMountain,created:20250621165018770,creator:soren,modified:20250621165019854,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DoItRightTheFirstTime,created:20210127164334530,creator:soren,description:Trying to cut corners usually results in frustrating and repeatedly redone work. Better to do it slowly and deliberately, but lastingly, once.,es:confident,modified:20240306034335284,modifier:soren,tags:Idea Process Business PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:Its often tempting to cut corners in the hopes that it will save you time. Frequently, however, the ultimate result is that you have to do the work over again, resulting in spending more time in total than you would have had you simply done it properly the first time.\n\nThis is common in learning. I can cut corners by writing some code by copying and pasting snippets from StackOverflow and ChatGpt and changing random things until it works. Up to a point, this achieves my goals faster than actually learning. But once I have to write a certain amount of code, it would end up being faster to sit down and learn the language and the algorithms I need. Not only will I probably do a better job on the problem at hand, I can reuse what Ive learned next time I have a similar problem! Copy-pasting doesnt teach (or it teaches only very, very slowly). Better to go start at the beginning, learn it right, and learn it for life.\n\nTo a general policy of doing it right, one can object that sometimes its faster to cut corners, as above. In particular, ObservationBias is likely in play: its easy to spot places where in hindsight you should have put in the up-front investment, but pretty hard to spot ones where you did and shouldnt have.\n\nHowever, in the do-it-right methods column:\n\n* Its rare to //regret// doing it right, and regret doesnt seem like the worst thing to optimize for even if its not the most important.\n* Youll probably do a better job doing it right, so even if you could have saved resources cutting corners, you are partially compensated with a better product.\n* Doing it right often has unbounded upside -- you can learn all kinds of new things or get sent off on useful tangents that may prove valuable to your life or business later. Its much harder to imagine a case where cutting corners leads to positive BlackSwan events!\n* Doing it right is usually more motivating and less frustrating, which, in many contexts, is just as important to optimize as raw efficiency. Doing it right gets you into a FlowState much more reliably. Instead of running around fixing things that are broken or done poorly, you can move slowly and deliberately from one important thing to the next, giving each exactly the attention it deserves. Things might take longer to start on average, but youll only have to do them once.\n* For most people, theres a certain moral desire to do things right and pride in having done so. See also CraftsmanMindset.\n\nOverall, I prefer in most cases to do something right when I shouldnt have than to do something sloppily when I shouldnt have. That said, this tiddlers advice is not absolute, there probably are times when the expedient solution is worth chancing it.\n\nNote that “doing it right” doesnt mean you have to do lots of extra, unnecessary work (thats gold-plating|OverEngineering and bad). You should JustGetStarted and be agile|AgilePhilosophy and keep your scope tight|NoCodeAtAll. The “right” in “doing right” is an adverb describing the act of doing, not the result; as pointed out in WorseIsBetter, its even OK for what youve done to lack correctness in some cases, as long as thats part of a carefully thought-out plan where you dont have wasted effort.\n\nThis is substantially the same as my position on Polish: you can limit your scope as tightly as you want, but you have to do the things you choose to do completely.\n\nI have a Do it Right the First Time|https://controlaltbackspace.org/right/ post on TheControlAltBackspace, which goes through all this in more detail, including a bunch of examples.\n\n\n!! References\n\n> If youre going to half-ass something, youre going to have to half-ass it twice.\n\n“Big Ball of Mud”|http://laputan.org/mud/:\n\n> If you think good architecture is expensive, try bad architecture.\n\nMeskimens Law:\n\n> Theres never time to do it right but always time to do it over.\n\nMrTerryPratchetts “boots theory|https://en.wikipedia.org/wiki/Boots_theory” is frequently discussed in economic contexts:\n\n> The reason that the rich were so rich, Vimes reasoned, was because they managed to spend less money. Take boots, for example. ... A man who could afford fifty dollars had a pair of boots thatd still be keeping his feet dry in ten years time, while a poor man who could only afford cheap boots would have spent a hundred dollars on boots in the same time and would still have wet feet.\n> ---Sam Vimes, //Men at Arms//},{title:DomainSpecificLanguage,created:20200322141904424,creator:soren,es:confident,modified:20210731154608806,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:A programming \language\ designed for a very specific purpose. Ranges from general-purpose DSLs used by many people to DSLs created for a particular application and used only in that application to make parts of the code easier to read.\n\nDSLs often structure things in a DeclarativeProgramming style, but may include procedural or other elements as well.\n \nPowerShell is unusually good at DSLs as far as mainstream languages go, due to its syntax making them feel extremely natural and the ease with which it can be backended by writing ordinary functions. Braces create \script blocks\ (anonymous functions), and words are functions. Heres an example made up on the spot for automating emails:\n\n```powershell\nSendEmail -To \kate@example.com\ -Subject \Overdue payment\ {\n\tSalutation \Hi Kate,\\n\tIncludeFormLetter -Topic \MissingPayment\ -PolitenessLevel High -Substitutions @{\n\t\tPaymentMethod \check\\n\t\tDueDate (Last Wednesday)\n\t}\n\tSignature -FromFile \business.txt\\n}\n```\n\nWhile this is something of a toy example (why not just write the email in an email program rather than write this code?), the power here is that you can parameterize literally anything in this example with the result of running any other PowerShell code, inline inside the DSL. And as you decide what to fill into the body of your email, you dont have to worry about the details of //how// an email is being sent, even really what functions are being called to send an email. Its a more powerful form of abstraction than the typical imperative|ProceduralProgramming or object-oriented|ObjectOrientedProgramming version.\n\nThe verbs and nouns `SendEmail`, `Salutation`, `IncludeFormLetter`, and `Signature` are //functions//, so for the three in the middle, all you have to do is write a function that takes whatever parameters you want and returns a convenient data structure. The `SendEmail` function executes that anonymous function and gets back an array of its nested data structures, which it then reads to figure out how to send the email.\n\nIve written a number of these at work in the course of some more advanced scripting.\n\nA useful part of programming expression.},{title:DominationVsPartnership,created:20240803034715175,creator:soren,es:likely,modified:20251213025818508,modifier:soren,tags:Idea Sociology InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:Useful dichotomy and way of thinking introduced to me by Microsolidarity.\n\nThe claim -- which I think holds up pretty well, at least in a basic sense -- is that most social issues are really reducible to this. Is the problem capitalism? Well the problematic part of capitalism is really domination by those with more resources. Is the problem sexism? Well thats basically just domination and lack of respect for the potential partnership between genders (in a conventional straight binary model at least). Etc.\n\nOne major reason I like this model is that it gives you a straightforward question to ask yourself when figuring out how to design something or lead your life. Does this way of doing things fill the world with more partnership, equality, dancing of interests; or does it involve taking things from others and coercing them into things? And what do we want to see more of?\n\nAs with, say, pacifism, I dont think we can afford to be absolutists about any of this. Removing all echoes of domination from the world is likely impossible, its a moving target that you can never quite reach, and in any event practicality is liable to win out in many cases. But that perfection is impossible doesnt mean you should not always be looking for ways to push towards the partnership side, and thats definitely something I aim to do.\n\nEliminating coercion/domination on a micro level is a major aim of RelationshipAnarchy.},{title:DoMoreOfWhatWorks,created:20210725180831601,creator:soren,description:To easily improve your life without making huge changes, strive to do more things that work well and fewer things that dont.,es:likely,modified:20231117205044058,modifier:soren,tags:Process Public Idea,type:text/vnd.tiddlywiki,text:Heuristic for ContinuousImprovement: //Do more of what works and less of what doesnt.// Often associated with DevOps.\n\nI find this a highly effective formulation for two main reasons:\n\n# It emphasizes that you dont have to make everything work all at once. You can even keep doing ineffective things -- just try to do them less over time.\n# It highlights that you must pay attention to what works and what doesnt, so you know whether to do more or less of it (and what kinds of replacements you might need to experiment with). Inspection|ThreePillarsOfScrum, as its called in Scrum|ScrumMethodology, is easy to slack off on.\n\nRelated: MoreDakka; DoTheNextRightThing.\n\nA source I now cannot recall suggested a useful self-improvement tip that exactly matches this heuristic: make two lists periodically, one of things that you want to do more of, and one of things that you want to do less of. Then just review it periodically. Its not a promise to //never// do something you want to do less of, or to //always// do something you want to do more of, because those require commitment, you can only manage a small number of them at a time, theyre hard, in the end you often fail and feel bad about it. Its merely a way of making you stop and think, as youre deciding what to do on a moment-to-moment basis, is this really what I want to be doing with my life?},{title:DonQuixote1615,author:Cervantes,bibliography:LifetimeReading,caption:Don Quixote,created:20201119200543450,due:202106301200,format:paperback,genre:Literature,isbn:9780060934347,ivl:60,medium:book,modified:20210703174944806,owned:yes,priority:2,readstatus:unread,tags:Public Source,type:text/vnd.tiddlywiki,universe:DonQuixote1615,url:,year:1615,text:Book by MrMiguelDeCervantes. Arguably the first example of the true novel.\n\nRead selected parts of this in TheGreatCon -- enough to get a vague taste of it, because it was just too much to read the whole thing! Would like to go back and read the whole thing sometime.},{title:DontCry,created:20250226023625908,creator:soren,es:possible,modified:20250313013633136,modifier:soren,tags:Idea Sociology InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:C.S.|PrivatePerson and I were watching //Angels in the Outfield// the other night, and at the end, several times adults tell the kids, “Dont cry!” I remarked that I cant stand this. Which was an interesting realization, because I only noticed I hate that phrase on the spot. So, why is that?\n\nWell, first of all, I think its often more about the person saying it than the person its being said to! It often means something like “Youre inconveniencing me by having this emotion,” or “I think that is the //wrong// emotion,” or “you shouldnt care about that.”\n\nIt can also mean, “I dont think you should be expressing that emotion this way.” This is more defensible -- sometimes that is indeed inappropriate -- but it still comes at it the wrong way. First of all I think any claims like this risk teaching children (even just by example) that theyre not supposed to express their emotions at all, which is really bad. And its a //command//, again its about the person whos making the statement -- why do they get to decide? Beyond that, I think the healthy way to deal with feelings like this is to let yourself feel them, then as you are doing so, once you have given them space, decide what they really mean and how you should act afterwards. (Yes, you should ideally move on quickly, but if you dont give yourself any time at all with them, youll miss whatever theyre able to tell you.) “Dont cry!” skips past that step and risks suggesting that you should just not feel them at all, or pretend not to -- //especially// for kids who havent fully learned how to separate their internal state and external expression of it yet.\n\nSometimes it also just means “youre wrong” -- e.g., in one of the cases in the movie, JP was sad because he thought he was going to be left alone, but that actually wasnt part of the plan. In which case, like, just correct the misunderstanding, dont get into all this fraught stuff.},{title:DontFearRed,created:20200428203155575,creator:soren,es:confident,modified:20221004195501262,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:When tests or your ContinuousIntegration pipeline give you the big old red X, thats not a bad thing, and you shouldnt be striving to prevent it at all costs! As ContinuousDelivery points out, a failed build means that an issue that might have otherwise made it to production was stopped in its tracks. In other words, the red X means you just saved money by catching a problem at a time when its easy to fix.\n\nIts also worth pointing out that if the checks always show green, they provide no information at all. Anyone can make the checks green by having sufficiently low standards. Additional testing you add (thus making it catch more possible errors) may well raise the failure percentage. That means youre doing //better//, not worse.\n\nOf course, its still worth trying to avoid making it red each time you submit changes, and youd better work to get it green again promptly if it goes red on the main branch. But the red is showing you an opportunity for improvement, its not punishing you.\n\nAkin to CounterintuitiveEfficiency. Its important to make sure that stakeholders realize that “failures” mean things are going right.\n\nAlso mentioned in AgileInTheRealWorld.},{title:DontPartitionKnowledge,created:20200708004036426,es:confident,modified:20210510230348991,tags:Memory PersonalDocumentation Information Creativity Design Public Idea,type:text/vnd.tiddlywiki,text:A regularly appearing concept in the study and management of knowledge is that one should not create arbitrary boxes for knowledge:\n\n* One should not split ones Anki collection into different decks: AugmentingLongTermMemory201807, others\n** I still use different decks to organize my content, but Ive cut down on the number, and Ive taken to reviewing in one mixed-up session.\n* One should not divide a ZettelKasten into multiple project- or discipline-based wikis: HowToTakeSmartNotes, and basically every other resource on the topic\n* One should not separate practice problems in mathematics or similar disciplines into different sections or chapters, but rather intermix them: numerous research studies I dont care to look for right now; see also MixedPractice\n* One should not split the notes for a project across multiple tools, if its possible to combine them; e.g., a list of books to read and the notes on them should go together if possible\n\nIt //feels// easier to put things in hierarchies, neatly categorizing your thinking, and it may be easier to find them when you know what youre looking for, but its less effective, presumably because there is less ElaborativeEncoding and less linking|ConceptWeb. See also DesirableDifficulty. Additionally, ContextScrambling has the opportunity to operate, and you never miss relevant links. Cross-discipline links|DisciplineCrosspollination are the most interesting ones, just like CrossClassConnections.\n\nCf. CompleteIntegration, NoLabelsPhilosophy, FunctionalVersusTopicalTags.},{title:DontRushCommunication,created:20200407015436480,creator:soren,es:likely,modified:20210509011948187,modifier:soren,tags:Process InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:HowBasecampCommunicates issues this directive in many, many ways. Very little communication is actually urgent. Treating it as so interrupts people at inopportune times, it leads to worse responses (ask an urgent question, get an urgent answer!), and it means you dont get to let time filter out whats relevant|TimeFilter.\n\nKeep your communication leisurely to the extent possible. If its important and not urgent, well get to it.},{title:DontStuffBeansUpYourNose,created:20200226030729593,creator:soren,description:Telling people not to do mischievous things theyve never thought of doing will only make them more likely to do them.,es:mythological,modified:20220106142918297,modifier:soren,tags:PersonalMythology PhilosophyOfLife Expression Public Design Idea,type:text/vnd.tiddlywiki,text:Parable made famous by a Wikipedia meta page|https://en.wikipedia.org/wiki/Wikipedia:Dont_stuff_beans_up_your_nose. Heres my version:\n\n\u003C\u003C\u003C\nA village woman was getting ready to go to market, a full days trip, and leave her mischievous son behind. Her son was not the sharpest knife in the drawer and had managed to cause a good deal of damage the last few times shed done this, but she was determined to let him figure things out for himself.\n\n“Now,” she said to her son as she bustled around getting everything ready, “take care of yourself. Stay near the house. Be careful not to spill the milk or fall into the well. Dont throw stones at the cow. Dont eat all the sweets or well have nothing for the rest of the month.” Her son had done all these things before.\n\nLooking around the room one last time, she added helpfully, hoping to head off the next stupid idea, “And dont stuff beans up your nose!”\n\nOf course, the son thought this sounded like a pretty interesting idea, and when she returned in the evening, he had a number of black beans from the jar on the windowsill stuffed up his nose and stuck fast.\n\u003C\u003C\u003C\n\nStuffing beans up your nose is an InformationHazard, specifically an idea hazard and a temptation hazard. \n\nOf course, the real world is somewhat more complicated than a parable. The son in this parable takes suggestions for mischief more or less maliciously; sensible but deeply ignorant actors who might otherwise try doing random things with the environment might appreciate the warning. So it doesnt mean that you should never bring up possibilities of this sort, but that you should first consider whether theres a good reason to do so at all. If there is, then rather than just mentioning the possibility, you should be clear exactly //why// someone should not do the thing and what the consequences would be, and make sure that those consequences matter to the people youre talking to, so that theyll have a reason not to satisfy their curiosity.\n\nWe could view stuffing beans up your nose as accidental Preterition. In both, you are explicitly disavowing the statement as a rhetorical move, and the result is that the statement is taken seriously; but in preterition you are //intending// the audience to interpret your disavowal as tongue-in-cheek and treat the statement seriously, whereas in stuffing beans up your nose you are //accidentally// getting the audience to get curious about and treat your statement seriously.\n\n\n!! References\n\nMrLenChandler wrote a song entitled “Beans in My Ears,” in which the child singer says his mother told him not to put beans in his ears, then does it. In the songs entry in RiseUpSinging, the note says Chandler states he “has the distinction of being the only songwriter in history to have his song publicly banned by the New York Board of Health,” which evidently really happened, because the songs sudden popularity on the radio indeed resulted in a rash of children putting beans in their ears.\n\n---\n\nI reference the phrase in TheControlAltBackspace post on signs|https://controlaltbackspace.org/design/art-of-the-sign/, in reference to the legendary sign I once photographed at an ~AmericInn in the Midwest:\n\nimg width500 alt\Please DO NOT heat hard boiled eggs in the microwave. They will explode.\ hard-boiled-eggs.jpg\n\nIndeed, N.S.|PrivatePersons comment on this sign when I posted it on Facebook was my first contact with the phrase.\n\nThis sign is interesting in that, on the surface, it does exactly what I said you should do: explain why someone shouldnt do the thing and what the consequences will be. But here it doesnt work to motivate people not to do the thing, since a lot of people might think blowing up an egg in a hotel microwave would be pretty fun -- very likely more than the number of people who would have accidentally blown up an egg in a hotel microwave but been dissuaded by the sign.\n\nThis sign is also a great example of AddAnotherRule.\n\n{{DontStuffBeansUpYourNose/p||PrivateChunk}}},{title:DontSurroundWithSmarter2014,caption:Dont Surround Yourself with Smarter People,created:20200831012806604,medium:article,modified:20200831013337681,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.ribbonfarm.com/2014/11/05/dont-surround-yourself-with-smarter-people/,year:2014,text:Article by MrVenkateshRao. Points out that \surround yourself with smarter people\ is inherently unsustainable because if people of different intelligence levels both follow this rule, neither can be friends. Ergo, friends can only have //exactly// the same level of intelligence, which isnt the point. Its rather like the repeatedly arising survey finding that hetero women have substantially fewer self-reported sexual partners than hetero men -- this doesnt work out! Rao calls this a “fatal Gödel-level error.”\n\nSuggests that the essence of valuable and fulfilling relationships, in terms of intellectual thought, is not intelligence but //surprise//, delightful ideas and creative connections you wouldnt have ever thought about on your own. See also ConversationalDifference.\n\nProceeds into a long description of how life should involve seeking to play an infinite game, which I didnt quite follow but didnt try too hard to.},{title:DontTryToChangeTheWorld,created:20210809172856103,creator:soren,description:You dont need to change the world, and even if you want to you wont do it by trying to.,es:confident,modified:20241026225022309,modifier:soren,tags:PhilosophyOfLife Business Idea Public,type:text/vnd.tiddlywiki,text:You probably wont change the world. Whats more, most people who do change the world werent trying to, and those who were didnt change it the way they intended to. So even if you hope to change the world, its not at all clear that explicitly setting out to do that will help.\n\nFortunately, you dont need to change the world to make your life or business a great success. Instead, focus on sustainably improving your corner of the world|MakeYourPartMoreBeautiful, or in the business world on creating a valuable product that has enough happy paying customers to keep you in business. Thats all you need to do to make it worthwhile and be successful. If youre lucky, you might even accomplish something important you didnt intend|AccidentsMakeTheWorldGoRound.\n\nI think trying to change the world often fails because you try too hard. To change the world, you feel like you have to do something bold and splashy, and you try to go at it directly|SurfaceProblem, which seldom works. (This may be part of the NobelPrizeEffect, the observation that many Nobel winners stop performing at their previous level shortly after winning the prize.) There is too much to a problem whose solution will change the world to succeed by attacking it directly. Most world-changing progress comes piecemeal, with several serendipitous accidents and unanticipated connections that someone was well-positioned to notice.\n\nSo if you aim to calmly, sustainably, with ordinary effort|OvertimePhilosophy do some modest, clearly defined, important-feeling work really well, you can make a //ton// of progress on that, and it might even end up being an important part of changing the world. Keep your eye out for ways in which it could be much more important than you anticipated! And dont be afraid to take some SmallBets.\n\nSource: CrazyAtWork2018.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> If you label your own work as disruption, it probably isnt.\n\n---CrazyAtWork2018\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\n\u003C\u003C\u003C\n\\\\nAnd what you thought you came for\nIs only a shell, a husk of meaning\nFrom which the purpose breaks only when it is fulfilled\nIf at all. Either you had no purpose\nOr the purpose is beyond the end you figured\nAnd is altered in fulfilment.\n\\\\n\u003C\u003C\u003C\n\n---T.S. Eliot, “Little Gidding,” mvt. 1, //Four Quartets//\n\n\u003C/$m2.x>\n\u003C$m2.x number\3\>\n\n> Trillian had come to suspect that the main reason Zaphod Beeblebrox had had such a wild and successful life was that he never really understood the significance of anything he did.\n\n---//The Hitchhikers Guide to the Galaxy//\n\n\u003C/$m2.x>\n\u003C$m2.x number\4\>\n\n> Never index your own book.\u003C\u003Cfnote \This is no doubt very arcane if you havent read the book. The implication -- at least in my interpretation -- is that youre not capable of understanding your own life well enough to know what its true meaning or purpose is.\>>\n\n---Claire Minton, in //Cats Cradle//, by Kurt Vonnegut|MrKurtVonnegut\n\n\u003C/$m2.x>\n\u003C$m2.x number\5\>\n\n> Extraordinary times call for extraordinary effort. Most times are ordinary. Make an ordinary effort.\n\n---Zvi Mowshowitz|MrZviMowshowitz, “Slack|https://thezvi.wordpress.com/2017/09/30/slack/” (cf. Slack)\n\n\u003C/$m2.x>},{title:DontWaitToAutomate,created:20201207004448687,es:confident,modified:20210811182024136,tags:Code Process Systems Public Idea,type:text/vnd.tiddlywiki,text:As explained in ManualWorkIsABug2018, if one wants to automate something, one should not sit around waiting for the moment one has the opportunity to start an automation project. One should instead JustGetStarted by documenting the process, because AutomationIsExecutableDocumentation, so you are really getting started with the automation already!\n\nThereafter, every time one carries out the process, one follows the documentation and spends a minute or two improving it very slightly. The documentation will begin to cover more edge cases, be more specific, and eventually contain snippets of code that perform tasks and work through choicepoints|ModelsChoicepointsAndRelationships automatically. Sometimes there will be bugs and edge cases on a given run; you use that opportunity to fix it (rather than having to try to anticipate the edge cases, you simply wait until they show up naturally and then fix them: a form of InversionOfControl).\n\nSooner or later, you have almost a whole script written and you know it works, without ever needing to carve out any time to do it or get any management approval, and it becomes more or less trivial to drop it into an autonomous script and expose it for users through Rundeck or AzureDevOps or Jenkins or ServiceNow or what have you (or even schedule it to run without any human intervention at all, if thats practical for the workload).\n\nIt is OK if some processes never make it to the end; the CostBenefitRatio may simply not be there for things that arent done often, have low potential for being messed up, and dont take a lot of time. The process, being //extremely// IncrementalAndIterative, has as many AgileFallbacks as you can possibly get.\n\nIdeally you put all this in a Git repository or a wiki or something of that nature, and invite the whole team to join in.\n\nThis is a form of DocsFirstMethodology specialized for processes that can be automated.},{title:DontWorryAboutTheVase,author:MrZviMowshowitz,blogroll:Blogroll,caption:Dont Worry About the Vase,created:20250905203547701,creator:soren,modified:20250905203627529,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://thezvi.wordpress.com/},{title:DoomsdayRule,created:20200717014843543,es:confident,modified:20210608220816762,tags:Math Public Reasoning Idea,type:text/vnd.tiddlywiki,text:A surprisingly easy way to work out what day of the week a date falls on if you dont have a Calendar handy. Unlike some party-trick methods of doing this, it doesnt require much practice or memorization, at least to be able to work out any date in the current year or next year.\n\nThe basic insight is that a lot of nice, easy-to-remember dates always fall on the same day of the week every year. This day of the week is termed the //Doomsday//. These dates include:\n\n* 4/4, 6/6, 8/8, 10/10, 12/12\n* 5/9, 9/5, 7/11, 11/7 (mnemonic: “I work 9 to 5 at the 7/11|https://en.wikipedia.org/wiki/7-Eleven”)\n* 3/14 (Pi Day)\n* The last day of February (whether thats the 28th or the 29th in the year under consideration)\n* Various holidays, in the US notably Independence Day, Halloween, and Boxing Day\n\nThis leaves only January without a consistent reference day; the day is January 3rd in ordinary years and January 4th in leap years (mnemonic: “the 3rd in 3 years and the 4th in the 4th”).\n\nYou presumably can already intuitively work out the day of a date within the current month, provided you know the current date and day of the week -- all you have to do is add or subtract 7 from the current date until youre within the same week as the other date, and then count forward or back days until youre at the right day. You now have everything you need to do the same thing with //any// month by starting with the Doomsday instead of the current date. It remains only to know which day the Doomsday falls on in the year you want to calculate the day for.\n\nThe easiest way to do that is to simply remember the Doomsday for the current year; it changes so slowly that this is not hard to do! 2020s is Saturday. Every year, the Doomsday moves one day forward, except when the new year is a leap year, when it moves two days forward. If youve forgotten the Doomsday, just find a Doomsday thats happened recently or is happening soon, and work it out from todays date.\n\n\n!! Arbitrary years\n\nIf you have an hour or two to waste and want to become a calendrical wizard, you can learn to work out the Doomsday of any year using the following formula. You need a little more memorization and a basic proficiency with mental arithmetic to do this bit, but it isnt too much of a reach; it looks harder written out than it is once you start doing it!\n\n# Take the last two digits of the year and divide them by 12. Split the result into the integer part and the remainder part (e.g., 86/12 7 with remainder of 2).\n# Add those two numbers together. Hold onto that result for a moment.\n# Divide the remainder part by 4 and add the integer part of that result (this will always be 0, 1, or 2) to the previous result. \n# Add a value for the century:\n#* 1800s: 5\n#* 1900s: 3\n#* 2000s: 2\n#* 2100s: 0\n#* This pattern repeats over and over in both directions, since the Gregorian calendar runs on a 400-year cycle; though realize if you go too much further back than the 1800s, you may get historically incorrect results because many countries hadnt switched to the Gregorian calendar yet!\n# Take the final result modulus 7; that is, divide it by 7 and keep only the remainder part.\n#* The easy way to do this in your head is to simply subtract 7 repeatedly until the number is less than 7.\n#* Actually, anytime your number goes above 7 in the above steps, you can optionally immediately subtract 7 from it to keep the number nice and small; it will have no impact on the final result (mathematically, we are doing all of this in \mod-7 arithmetic\).\n\nYou should now have a number between 0 and 6, representing a day of the week, where 0 is Sunday and 6 is Saturday. This is the Doomsday for that year.\n\nAlso, if you need a refresher, remember the full rule for whether a year is a leap year, or youll get the wrong answers for dates in January and February of some years. A year is a leap year if:\n\n* Its evenly divisible by 4.\n* ...Unless its also divisible by 100 (then its not).\n* ...Unless its //also// divisible by 400 (then it is again).},{title:DoTheNextRightThing,created:20200812034315961,es:likely,modified:20210810180919976,tags:PhilosophyOfLife LifeDirection Psychology Reasoning Public Idea,type:text/vnd.tiddlywiki,text:One of the central principles and catchphrases of FrozenTwo: when youre not sure what to do, especially when the magnitude of the task appears overwhelming, or most everything is unknown, look as short a distance ahead as you reasonably can, decide what the next thing you can do is and do it. (Ideally it would be the MostImportantThing, but sometimes you may have to settle for something shorter if that thing is momentarily too far away.) At short range, its usually not so overwhelming.\n\nEven if you later learn that, in hindsight or zoomed out, you made a bad move, you can take solace in the fact that it looked correct with the information you had. You cant always get everything right! EverythingIsEffectiveAndPermanentAndThatsOk.\n\nThis does not, of course, mean that you shouldnt try to produce a rough sketch of what might be coming next, or engage in ContingencyPlanning if you can see potential bad outcomes ahead, but how much time and effort you can afford to put into such planning depends on the circumstances. If youre struggling to do anything at all but you also //have// to make a choice, or youve been trying without success to move forward for days, it may be better to skip the planning and JustGetStarted.\n\nEspecially useful during the present pandemic|PandemicMood, where it seems like everything changes completely every 24 hours!\n \nAnother popular way of putting this idea: “Just keep on putting one foot in front of the other.”\n\nCf. JustGetStarted, NextAction.},{title:DotNet,created:20200323024836489,modified:20200323025127884,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:Umbrella Microsoft technology and runtime environment. You can write code for the .NET platform in one of several languages: C# (most popular, like Java), Visual Basic, Visual C++, F# (a weird FunctionalProgramming language that hasnt caught on at all), and probably some other things Im forgetting. All of them compile down to the same kinds of instructions (the CLR, Common Language Runtime) and have relatively minor differences in functionality but major syntax differences.\n\nThe CLR is a JIT compiler thats really pretty cool; it offers fantastic introspection, debugging, and tracing tools and excellent performance. With no effort at all you can, for instance, edit the code while its running and then back up the execution to try the code again!},{title:DoubleCaptureSlip,created:20200513180137911,es:confident,modified:20210515233752624,tags:Psychology Information Process Public Idea,type:text/vnd.tiddlywiki,text:A double-capture slip occurs when you are working partially on autopilot and dont notice that an important choice point or unusual event has occurred. You then inadvertently start or continue doing an activity you are more familiar with.\n\nExamples:\n\n* When typing, a more common word may take the place of a less common word that begins similarly.\n* Ive heard multiple horror stories involving people accidentally pouring stock or similar complex liquid preparations through the sieve into the sink, since the more typical case is discarding the cooking water.\n* On the odd occasion that I have to go //south// on I-35 out of OwatonnaMinnesota, I sometimes end up going north by mistake, because I go that way an order of magnitude more frequently. Sometimes Ive even noted as I left the house that I have to be careful to go south, and end up getting on northbound anyway!\n\nSource: IntelligentUseOfSpace1993.\n\n\u003C\u003Crememberq \20200516165155985\\n\t\A double-capture slip is a type of cognitive error which occurs when you miss...\\n\t\An important choice point or unusual event during the task.\>>\n\t\n\u003C\u003Crememberq \20200516165319477\\n\t\What happens after you miss a choice point in a double-capture slip?\\n\t\You begin doing an activity you are more familiar with, rather than the one called for in the situation.\>>},{title:DoubleHelix1968,author:Watson,bibliography:LifetimeReading,caption:The Double Helix,created:20210703170128000,genre:Science,medium:book,modified:20210705214034567,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1968},{title:DouglasHollowSchoolhouse,created:20250621164647798,creator:soren,modified:20250621164648683,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DoWhatIMean,created:20200325223359665,es:confident,modified:20210511011154895,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:A system that does what you mean attempts to recover from slight mistakes when it is obvious what the user intended to do. For instance, Git has an option to automatically reissue a command thats very similar to the one you typed when there is sufficient distance to any other orthographically similar command, e.g., `git statsu` instead of `git status`. See also the OhShitButton.\n\nMachineLearning can help to accomplish this, but its an open question for me whether such a heavyweight approach is AppropriateTechnology for the situation. In some cases it may clearly not be.\n\nA DesignApproach plans for users taking actions that dont quite accord with what they mean and does its best to recover accordingly, either by understanding what they mean or by at a minimum failing helpful|FailHelpful.},{title:DPS,created:20230908071845548,modified:20230908071854484,tags:Place Public,type:text/vnd.tiddlywiki,text:Denpasar Airport in Bali.},{title:DreamDir,created:20200126000355697,modified:20200315115957139,tags:Software Dreaming Sink Public,type:text/vnd.tiddlywiki,text:The LikableSoftware and the storage format I use for keeping track of my dreams, an email/maildir-like directory of files. A shell script handles creating and searching them, with scary efficiency!\n\nThe format specification and shell script are developed at https://github.com/sobjornstad/dreamdir.},{title:DreamEngine,created:20200201045745371,es:mythological,modified:20201027004053637,tags:Metaphor Dreaming Public Idea,type:text/vnd.tiddlywiki,text:Term due to I.R.|PrivatePerson for the portion of ones subconscious that engages in CooperativeGeneration of the dream world. She often titles blog posts that describe dreams with \The dream engine {FrobnicatesWhizbangs}\.},{title:Dreaming,created:20200126000735345,creator:soren,es:confident,modified:20220524204248781,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:I love dreams, and I dont spend enough time working with them these days. They are powerful sources of creativity and PersonalMythology and theyre great fun to take part in and gently shape.\n\nI dont see dreams as supernatural, nor as messages to be decoded; a common mistake is to assume that dreams are created by some kind of “dream gremlin” in your subconscious that has a motive and creates a plot to advance it. Im not even convinced that dreams actually have a plot; instead we often experience them as having one because we tend to apply a narrative framework to everything in life, and we probably strengthen that bias when trying to recall them later.\n\nHowever, this certainly does not mean there is nothing to learn from them. For one thing, you can get meaning and realize important things from studying almost anything, even something thats basically meaningless. But dreams are better than average at this because (1) they automatically expose you to a crazy amount of randomness and whimsicalness thats basically unheard of anywhere else, and (2) even while thats the case, all of it is personally relevant because it comes from your own brain.\n\nDreams are not dissimilar to literature; see DreamsAsLiterature.\n\n!! References\n\n> If a dream wasnt perfectly normal, it would be the weirdest thing that ever happened to you.\n> ---Kevin Simler, https://meltingasphalt.com/hallucinated-gods/\n},{title:DreaminglyAndWakingly,created:20220131022634594,creator:soren,es:confident,modified:20220203214011386,modifier:soren,tags:Idea SorenConcept Definition Public Dreaming,type:text/vnd.tiddlywiki,text:Terms I made up and find extremely useful in my dream journal. Something is //dreamingly// true if it is true only in the world of a particular dream under discussion, while it is //wakingly// true if it is true in my actual “real|ConsensusPhysicalReality”/waking life (either exclusively, or both there and in the dream).\n\nPrior to inventing these terms, I was constantly resorting to ugly circumlocutions or extensive clarifications in square brackets (which in my journal format are used for waking-life commentary). Everyone is invited to borrow these handy words!\n\n\n!! Examples\n\n> Meanwhile, I go talk to Frank, who dreamingly is over in the northwest corner of JAB past the Security Team.\n\n(My waking-life coworker Frank doesnt currently work over there and never has, but in this dream thats where his office is.)\n\n> A couple named Ari (dreamingly pronounced /ɛriː/) and Roma are also traveling nearby.\n\n(This is not a normal pronunciation in waking life, but was completely natural at the time.)\n\n> Many people start singing \Many Mumbling Mice\ and more and more people join in, even people who cant be participating in the bullfight. Im kind of smiling because (dreamingly and wakingly) I think its such a funny warmup.\n\n(In the dream I thought this warmup was funny, I thought it was funny in waking life prior to the dream, and I still think its funny now.)\n\n> The two of us get in an argument about how good US air accident investigation is; he thinks its terrible because \stuff like this keeps happening,\ while I think (as wakingly) that its really an incredible success overall.\n\n(Likewise.)\n\n> In the dream, the other dream was from a couple of nights ago, but wakingly I think it may be based on the grocery-store dream from earlier tonight.\n\n(During the dream, I believed this one thing. Now I have a different speculation.)},{title:DreamsAsLiterature,created:20200125235558116,description:Both dreams and literature involve counterfactual events within a narrative framework which can nevertheless have profound real-world meaning to those experiencing and discussing them.,es:possible,modified:20210611025724397,tags:Dreaming FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:In dream|CanonicalNumber #677, I am with my English class having a shared dream from a detached perspective. This made me start thinking: are dreams a form of literature?\n\nWhile that question probably doesn‘t have a straight answer because it depends entirely on how you define “literature,” a rather slippery concept, there are definitely some similarities. Viz.:\n\n* Both involve a story, or a sequence of events which is understood to have some significance.\n* But they are counterfactual: they have not happened in ConsensusPhysicalReality.\n* Yet although they are not part of CPR, they can have profound meaning to the one experiencing them, and are often understood to reflect on CPR.\n* Dreams can be understood and shared only by reporting them after the fact, which entails making them into a story, or at least an account of an experience (if there’s no narrative framework, as can occasionally happen, it’s hard to call it a “story\).\n\nThere are some differences too, but they’re comparatively minor and don‘t seem to bear so much on the question under discussion:\n\n* Most crucially, dreams are not produced via conscious effort. And they’re produced only while asleep -- though arguably the form they can be shared and analysed in, a written account, is produced while awake and collaborates with the truly dreamt content. Cf. CooperativeGeneration.\n* Dreams are far more detached and don‘t follow the normal rules of logic. (Though see AliceInWonderland and NonsenseLiterature, and to a lesser extent MagicalRealism: literature has a choice, but can clearly be illogical if it wishes to.)\n\nSee also AxesOfReality.},{title:Dreamwidth,created:20210516224345343,modified:20210516224158468,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blogging platform.},{title:Dresden,created:20240402012113564,creator:soren,modified:20240509143437587,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DreyersEnglish2019,caption:Dreyers English,created:20200503220721621,format:hardcover,isbn:9780812995701,medium:book,modified:20210606224140703,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2019,text:English style/grammar/copyediting guide by MrBenjaminDreyer. Full of prescriptive rules to be sure, but mostly ones that are supported by common practice, not the garbage your high-school teacher gave you. Funny and eminently practical. Its probably not where you want to start if you need guidance on grammar and style, but if you are fairly experienced already and want some more tips or a reference guide, you cant go wrong.},{title:Drive2009,author:Daniel Pink,caption:Drive: The Surprising Truth About What Motivates Us,completed:20210726,created:20210720000456978,medium:book,modified:20210810012747987,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2009,text:Popular social-science book by MrDanielPink. Argues that traditional approaches to motivation (rewards and punishments) are poorly suited for the modern workplace. Not only are there other approaches that work better\u003C\u003Cfnote \\\\nEven without diving into the science, we can see this possibility by considering modes of work like OpenSourceSoftware and the WikipediaPhilosophy: despite there being few to no extrinsic rewards for working on Wikipedia, they dont seem to have trouble finding editors.\n\\\>> and treat employees more like adults, the traditional approaches sometimes even //reduce// motivation.)\n\n!! Negative effects of traditional rewards and punishments\n\n\u003C\u003Cstretch DangersOfExtrinsicMotivation>>\n\n!! What should replace extrinsic motivation?\n\n\u003C\u003Cstretch ReplacementsForExtrinsicMotivation>>\n\n!! Caution warranted\n\nBecause this is Surprising Social Science™ from a few years ago, I went and looked for criticism and updates on the web to see if it might be totally wrong (cf. TheQuickFix2021). Surprisingly, I found almost nothing, and the criticism I did find appeared to have misunderstood the point of the book. So the best conclusion I can draw is that this is still most folks best guess.\n\nTo be clear, I like the conclusions and I think they make sense and square up with my experience of the world. I just approach them with some caution because they do fly in the face of conventional wisdom and the author has a science-proves-things|StudiesDontProveThings attitude. },{title:Driving,created:20201201035033211,creator:soren,es:confident,modified:20221002151411603,modifier:soren,tags:Public Definition Idea,type:text/vnd.tiddlywiki,text:Act of directing a car or similar vehicle along a roadway.\n\n!! References\n\n> Driving is an activity that combines all the things people are physiologically bad at into a matter of life or death.\n> ---me, \u003C\u003Crt 10644>>\n\n},{title:DryPhilosophy,created:20200322162241417,creator:soren,es:confident,modified:20210310032520291,modifier:soren,tags:Design Systems Code Public Idea,type:text/vnd.tiddlywiki,text:The Dont Repeat Yourself (DRY) principle states that //every piece of information should have a single authoritative representation within your system//. Its often identified as a software-development principle, but really it escapes that context and applies to any kind of systems design, all over the world.\n\nI personally think DRYs consequences are expansive enough to be considered a philosophy, much like the AgilePhilosophy.\n\nDRY is often misunderstood in a software context as meaning that you shouldnt copy and paste or otherwise duplicate code. This is a good rule, but DRY goes //way// beyond that. Here are some examples:\n\n* A series of steps to be carried out on different data should be in a parameterized function.\n* A data model should be defined in only one place, and all other systems should pull from there.\n* Information about naming conventions or business rules should be kept in only one place, and any systems that need them should somehow draw from there.\n* The configuration of a set of servers should be stored in only one place (likely using ConfigurationAsCode in one form or another).\n* A document containing important information or procedures should be kept in one central location, easily updateable by everyone who has permission to change it, and everyone should always refer to this document.\n* Paper materials should either reference one authoritative copy stored in a central location, or incorporate some kind of versioning system to be able to identify which copy one has.\n\nDRY systems may require the data or rules to be replicated from place to place or change form for different uses. The key is that there is a single //authoritative// representation; the other representations do not get modified with expectations that they remain in that new state, and other systems copies are periodically drawn from the authoritative system, preferably automatically (either on demand, like on a software build or when a change event is triggered, or on a schedule).},{title:Dubai,created:20200521213536640,modified:20200521213537180,tags:Place Public,type:text/vnd.tiddlywiki},{title:Dubuque,created:20240402020021805,creator:soren,modified:20240402020023156,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DubuqueIowa,created:20240127192914721,creator:soren,gis-lat:42.50224847982439,gis-long:-90.66553449535937,gis-zoom:10,modified:20240127192954099,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Duluth,created:20240402020029422,creator:soren,modified:20240402020030305,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:DumbassesInternational,created:20200126165920425,creator:soren,description:Just like everyone is playing The Game|https://en.wikipedia.org/wiki/The_Game_(mind_game), everyone is a member of Dumbasses International.,es:mythological,modified:20250203041746602,modifier:soren,tags:Expression PhilosophyOfLife SorenConcept Public Idea,type:text/vnd.tiddlywiki,version:,text:G.|PrivatePerson one day came up with the lovely expression, “We all belong to Dumbasses International.” No matter how good (or bad!) we are at something, we sometimes just do something stupid and wrong, and thats okay. And we have to forgive it|Forgiveness in others because we do it ourselves, lest we brand ourselves as filthy hypocrites.\n\nSimilar sentiments include SaintAndSinner and MsMaudeChardins insistence that “everyone has the right to make an ass out of themselves” (\u003C\u003Crt 10899>>).\n\nSee also \u003C\u003Crt 10251>>: “Sometimes, things go wrong.”},{title:DumbLuck,created:20240717233146783,creator:soren,es:confident,modified:20240717233432997,modifier:soren,tags:Idea PhilosophyOfLife Psychology Public,type:text/vnd.tiddlywiki,text:S.B.|PrivatePerson, of TheFederatedInsurance, to my training class, of not using the contents of an uninitialized variable:\n\n> Lets not depend on dumb luck!\n\nIt is possible, across a wide variety of domains, to succeed entirely by dumb luck. This has several dangerous consequences:\n\n* Unreflective thinkers, and sometimes even reflective ones, may believe theyve come up with a reliable way to achieve something, when in reality their process was terrible and they merely got lucky. (This can be particularly problematic when its something you generally dont do often enough to get strong evidence as to whether your method actually works -- e.g., find a life partner.)\n* Because it really //is// possible to succeed without effort -- just unlikely -- its tempting to not try.},{title:DungeonCrawlStoneSoup,created:20200128155623174,creator:soren,es:confident,modified:20230913045100722,modifier:soren,tags:Game Public Idea,type:text/vnd.tiddlywiki,text:RogueLike Ive moved to after mastering NetHack. Its arguably a better game from a design perspective, but also not quite so delightful. That said, its a great challenge. \n\nThe design focus is essentially that the game present one strategic and tactical choice after another with no grinding or anything else in between, and it succeeds admirably at that as far as Im concerned. The only question is whether that makes a good game...and it seems to, just one thats good in a different way from other games that arent like that. It can be rather exhausting! Notable features are:\n\n* auto-explore and auto-fight functionality for the dull and easy traveling and fighting moments (since the dungeon is very large, the game would be rather tedious otherwise); travel exclusions are included for when you want to ignore something dangerous or annoying\n* a complete memory of all objects and level maps anywhere in the dungeon, viewable with Ctrl-F and Ctrl-O. That means you can just drop anything you dont have an immediate need for on the ground wherever you are and find it later if you need it!\n* concessions to realism: you dont have to eat, you can immediately spot all magical items, items have no weight, everything is equally lit, doors have no locks, nothing ever burns or gets wet, even the most intelligent monsters cant pick up and use items youve touched and then dropped on the ground again. The point is that these things add nothing to the game besides realism, and mostly theyre just frustrating. That makes the game less immersive but arguably more fun and certainly less boring.\n\nThe other interesting element is that there are lots of different good builds, and you only have some choices about which ones to take; the game relies a lot on randomly generated items which you have to figure out a way to integrate into your characters build.\n\nAs of this writing (early 2020), Ive won just 3 times in hundreds of games, but Im getting noticeably better.},{title:DunningKrugerEffect,created:20200410162700064,creator:soren,description:People show consistent bias when evaluating their own competence at something.,es:confident,modified:20210627024632224,modifier:soren,tags:Learning Psychology Public Idea,type:text/vnd.tiddlywiki,text:A CognitiveBias in which inexperienced people overestimate their competence and experienced people underestimate it. The theory is that beginners dont know what they dont know|UnknownUnknowns, while experts have come to think many of the things they know are so obvious they dont recognize them as learned skills.},{title:duplo.png,type:image/png,created:20201205044400423,creator:soren,modified:20240614023020751,modifier:soren,tags:Image Public,_canonical_uri:./extimage/duplo.png},{title:DuploInterface,created:20201205044259776,creator:soren,es:likely,modified:20240614023037381,modifier:soren,tags:Design SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:img class\right-float\ width300 duplo.png\n\nMany applications have recently (late 2010s) done things like hide the menu bar in favor of big buttons or a single drop-down menu. I call these Duplo interfaces, because they make the system childish, big, and dumb, and thus harder to use. Menus take up some space, but you dont have to do divination on funky icons to figure out what the buttons do, click in weird places that are different in every application, or bounce the mouse through four layers of submenus.\n\nReference: https://en.wikipedia.org/wiki/Lego_Duplo. Image public domain from that page.},{title:DustAndConsciousness,created:20200411032817405,creator:soren,es:mythological,modified:20211027040218590,modifier:soren,tags:Neuroscience Metaphor Idea Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:HisDarkMaterials and BookOfDust involve the concept of Dust (with a capital D, as said literally in the story multiple times). Dust is essentially the universes underlying meaning and consciousness, a kind of take on PanPsychism. Its a central force in the story (as one would expect for the second...) and quite thought-provoking.\n\nAmberSpyglass unfortunately does an utterly terrible job of explaining the philosophy behind it, coming off juvenile and silly. I have never been more disappointed in MrPhilipPullman.},{title:DuttonSpeedwords,created:20200125230513715,creator:soren,es:confident,modified:20211110161730234,modifier:soren,tags:RecordsProject Public Idea,type:text/vnd.tiddlywiki,text:A system of alphabetic shorthand I use as part of my PersonalAbbreviationSystem. Typically I use it when hand-writing notes so as to save time and space; I can boost my writing speed from 30wpm to 50wpm or so using it. I also occasionally use it purely for the sake of obfuscating my writing, if its something I dont want others snooping on. Speedwords are intelligible enough to be easy to learn but obscure enough to make notes largely opaque to a casual reader.\n\nI probably know about 25% of the words in the official Speedwords dictionary, Id say.\n\nI use an add-on system called \Speedwords Correlatives\ invented by MrRonHaleEvans and explained in MindHacker, which makes the correlatives (fancy that) more consistent. I also am not particularly picky about linguistic nuances: for instance, I write `jus` anywhere the English word \just\ would appear, even though it is specifically intended only in the sense of \justice\ in the dictionary.\n\nI have a lecture about and demonstration of the system|https://www.youtube.com/watch?vcK0PRU0aYC0 (40 minutes) on my YouTube channel.},{title:Dynalist,created:20210117194621419,creator:soren,modified:20230405174855276,modifier:soren,tags:Product PersonalDocumentation Information Public Software Idea,type:text/vnd.tiddlywiki,url:https://dynalist.io/,text:Clean, simple outlining app. The TiddlyWikiToolmap uses this, and it shares some features with RemNote. I have not tried it, but it does look nice.\n\nAs of 2023, were trying to do a RemNote campaign to get people to switch because it hasnt had any updates for several years (still working OK, but probably not much of a future).\n\n{{!!url}}},{title:DynamicallyOrderedAnkiCard,created:20210628195504433,description:A small amount of client-side JavaScript can re-randomize the order of lists on Anki cards on every review, eliminating the potential for pattern-matching.,es:confident,modified:20210818133802284,tags:SpacedRepetition Public Idea,type:text/vnd.tiddlywiki,text:A technical improvement on the OrderPattern allows randomizing the order of the items the user is trying to put in order to prevent PatternMatching. Aside from the slight fragility of JavaScript on the Anki platform, this is quite doable -- I had never done JS in Anki before, and I have neither formal training nor much experience in JS, and I pulled this off in under an hour. It may be well worth exploring additional options for dynamic cards like this (off the top of my head, ones where you could select a single example or phrasing at random?).\n\n!! Note type\n\n!!! Schema\n\nNote type name is Random Order Choices, and it has the following fields:\n\n* Front\n* Back\n* Separator\n* Choices\n* Source\n\n//Front//, //Back//, and //Source// work just like they do on my standard basic-style notes. //Separator// and //Choices// are the interesting part. //Separator// is a delimiter for the choices when rendered onto the card, such as `, `; if left blank, it defaults to a `\u003Cbr>`. //Choices// is a pipe-separated list of items to reorder.\n\nWithin the text of //Front//, you include the placeholder `~choices~` where youd like the order-randomized choices to end up.\n\n!!! Front template\n\n```html\n\u003Cscript>\n/* Randomize array in-place using Durstenfeld shuffle algorithm */\nfunction shuffleArray(array) {\n for (var i array.length - 1; i > 0; i--) {\n var j Math.floor(Math.random() * (i + 1));\n var temp arrayi;\n arrayi arrayj;\n arrayj temp;\n }\n}\n\noptions \{{Choices}}\.split(\|\);\nshuffleArray(options);\nwindow.persist_choices options;\n\ndocument.getElementById(replaceable).innerHTML document.getElementById(replaceable).innerHTML.replace(~choices~, options.join(\{{#Separator}}{{Separator}}{{/Separator}}{{^Separator}}\u003Cbr>{{/Separator}}\));\n\u003C/script>\n\n\n\u003Cdiv id\replaceable\>\n{{Front}}\n\u003C/div>\n```\n\n!!! Back template\n\n```html\n\u003Cscript>\noptions window.persist_choices;\ndocument.getElementById(replaceable).innerHTML document.getElementById(replaceable).innerHTML.replace(~choices~, options.join(\{{#Separator}}{{Separator}}{{/Separator}}{{^Separator}}\u003Cbr>{{/Separator}}\));\n\u003C/script>\n\n\n\u003Cdiv id\replaceable\>\n{{Front}}\n\u003C/div>\n\n\u003Chr idanswer>\n\n{{Back}}\n```\n\nThe biggest trick here is that we save the randomized array into `window.persist_choices`. We do this because the entire card is re-rendered when you flip it, so if we dont hold onto it, the options suddenly change order when you flip the card, which doesnt affect the validity of the answer in this use case, but is still annoying and distracting.\n\nThe `window` object is available for storing persistence data on at least desktop and iOS; a more robust option might be anki-persistence|https://github.com/SimonLammer/anki-persistence/blob/f2860dde202ddc3415de8fce29d6d1eeacc5ef3c/script.js#L43, which is tested on other platforms like AnkiWeb and AnkiDroid as well, but when I developed this it was currently broken on desktop. I should probably circle back and see if it works again in the future. Then again, its hard to imagine any client that wouldnt have a DOM to work with, and I dont //think// there are security restrictions on accessing `window` in any platform, so maybe this solution is plenty good enough. It certainly has simplicity to recommend it.\n\n!! References\n\n* SO post: https://stackoverflow.com/questions/54423183/javascript-works-in-2-0-version-of-anki-but-not-in-2-1-version\n* Bug report for `anki-persistence`, which I could come back to and try to provide more information on if I need it to work: https://github.com/SimonLammer/anki-persistence/issues/48},{title:Dynomight,blogroll:Blogroll,created:20231023130753207,creator:soren,modified:20250905204637731,modifier:soren,tags:Public Publication,type:text/vnd.tiddlywiki,url:https://dynomight.net/,text:Pseudonymous rationalist-adjacent blog: https://dynomight.net/},{title:DynomightSchoolOfRunning,created:20240629022558381,creator:soren,es:confident,modified:20240629033652484,modifier:soren,tags:Idea Public Process Psychology,type:text/vnd.tiddlywiki,text:It doesnt matter one bit how efficient a plan is in theory if you dont follow it. Failing to follow a self-improvement plan is far more common than succeeding, so you should lean very heavily towards plans that you have the highest likelihood of actually following, regardless of how mediocre they otherwise seem. See DoItRightTheFirstTime.\n\n\n!! Running\n\nOne of my favorite Dynomight posts is about running.\u003C\u003Cfnote \Metaphorically appropriate: the activity, itself, is trying to get somewhere faster than normal. Dont try to get good at getting places faster than normal faster than you should!\>> If you dont run (or do similar cardiovascularly-strenuous activities) often, running for an extended period of time is incredibly uncomfortable. But once you get used to it, its much easier and more fun. How, then, do you get used to it?\n\nMost people, including for some reason most people giving advice, decide to get out there and run really hard. Of course, this is hard and painful, so they give up.\n\nOr you can try this: go outside. Run as far and as fast as you can without discomfort. Then, as soon as it stops being easy and fun -- maybe after 20--30 seconds if this is your first time -- slow down and walk at a comfortable pace until you catch your breath. When youre ready, run a little again. Repeat for twenty minutes or so. You wont run much the first time, but if you keep doing it, it will slowly get easier and easier and youll be running for longer and longer. Soon enough, maybe after a couple of months of doing this several times a week, youll be able to run all the time without any trouble.\n\nAre you “being easy on yourself”? I mean, yeah -- you wont endure as much pointless and unnecessary pain! Youll also end up taking a little bit longer to get in shape than you theoretically could. But who cares? If its easy, //youll actually do it//. PerfectIsTheEnemyOfGood: instead be consistent|PowerOfKonsistency, because consistency beats volume.\n\nDynomight points out the absurdity of choosing your training program based on theoretical efficiency when probably 80--90% of people who think theyd like to start running give up because their training program is too hard:\n\n\u003C\u003C\u003C\nLet’s consider two possible failure modes of your running plan.\n\n* Failure mode A. Your plan is too aggressive. You dread going each time and eventually quit.\n* Failure mode B. Your plan is too easy. You have a good time but improve your health slightly more slowly than possible.\n\nWhich failure mode is more likely? Which failure mode is more harmful if it happens?\n\u003C\u003C\u003C\n\n\n!! Debt\n\nHeres another one: There is a continuous holy war in personal finance circles about where you should start when paying off multiple debts. Smallest one first, or highest interest rate first? Starting with the highest interest rate is, of course, theoretically most efficient. But knocking a few of them out creates SuccessMomentum. If youve gotten yourself into $15,000 of consumer debt, what should you be more worried about? That you take 2 months longer to get rid of 100% of it and pay an extra $300 in interest, or that you lose motivation, give up, and stay in debt for years more? \n\nOne can come up with contrived scenarios where either method seems absurd, but in most cases the financial difference is quite minimal. Suppose you have a $6,000 debt at 15% and a $3,000 debt at 10%, both with a minimum payment of $100 a month, and you have $500 a month to put towards them. The difference between the two methods is about $140 in interest (you pay all the debt off in the same month in either case).\u003C\u003Cfnote \https://unbury.me/ is helpful in running the numbers here.\>> And if you give up, lets say you spend an extra year in debt paying minimum payments before you try to attack it again and succeed. Thats somewhere in the neighborhood of an extra $1,000 in interest. That means the lowest-payments-first method needs to increase your chances of succeeding by only about 15% to be worth it on a raw expected-value calculation -- which seems like a pretty low bar, especially if were talking about someone who, say, ended up in credit-card debt by overspending on non-essential things over a period of months or years. And that doesnt even include the non-financial benefits of not being in debt if you succeed!\n\n\n!! References\n\nHow to Run Without All the Agonizing Pain|https://dynomight.net/2021/01/25/how-to-run-without-all-the-agonizing-pain/ (Dynomight)},{title:DystopianVision,color:#6c6cff,created:20200123030157271,creator:soren,icon:$:/core/images/list-bullet,modified:20211229145232786,modifier:soren,tags:Futurism Public Idea Index,type:text/vnd.tiddlywiki,text:Visions of ways the world could go poorly in the future, intended as warnings, thought experiments, or just plain entertainment. Many point out changes we would do well to make now.\n\nSome dystopian visions could be prevented by EconomicRealities (particularly ones involving gigantic AIs), but it seems foolish to rely on that when considering what actions may need to be taken to stave off a given dystopia. That is just another form of apocalyptic fantasy.},{title:EasterEggs,created:20200127025836568,creator:soren,es:confident,modified:20211107173158218,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:Clever messages or silly features buried in some code for the curious source-code reader or user to discover.\n\nPerhaps the best-known is Microsofts inclusion of a working flight simulator within some versions of Microsoft Excel, but examples through the years abound.\n\nDevTeamThinksOfEverything is essentially a culture of including EasterEggs everywhere throughout NetHack!},{title:EastOfEden,caption:East of Eden,created:20200407022052844,creator:soren,format:hardcover,isbn:9780329727550,medium:book,modified:20210607011223525,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:EastOfEden,text:MultigenerationalNovel by MrJohnSteinbeck.},{title:EatStreet,created:20231024210641306,creator:soren,modified:20231024210642628,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Ebola,created:20200422203101465,modified:20200511030609855,tags:PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:A nasty disease with a case-fatality rate of about 70-90% that has caused several brief scares when it popped out of Africa, where it has been a scattered problem for several decades.\n\nNot, at all, like the coronavirus. If we were dealing with Ebola, life would be very different during that pandemic! The one good thing about Ebola is that it kills so readily that its actually not all that contagious.},{title:EclecticMind,created:20200121032414210,creator:soren,es:personal,modified:20201207031356573,modifier:soren,tags:SorenConcept PersonalMythology Public Idea,type:text/vnd.tiddlywiki,text:I often describe myself as having an “eclectic mind.” Im interested in just about everything and I read about just about everything, which means I pick up all kinds of random tidbits that I then end up regurgitating to people who probably dont care about them. Doing RandomThoughts and keeping the RecordsProject certainly has a powerful effect on this as well.\n\nValuable in that it can assist with DisciplineCrosspollination. Dangerous in that it can lead to becoming a jack-of-all-trades-and-master-of-none or not doing enough of ones own solitary thinking|InsufficientlyReflectiveWriting (I dont think that last one is as big a concern for me though). Polyspecialization is the positive way to look at this, which has the added constraint of requiring significant expertise in several of your many areas.\n\nThe StrengthsFinder assessment calls this an InputStrength.\n\nI think I coined my term in one of my emails to K.B.|PrivatePerson, in which I introduced a silly quotation with:\n\n\u003C\u003C\u003C\nOne more way of looking at a blackbird, from my slightly (oh, who am I kidding, //very//) eclectic mind.\n\u003C\u003C\u003C\n\n{{EclecticMind/p||PrivateChunk}}},{title:EconomicRealities,created:20200330020519315,creator:soren,es:likely,modified:20230228233458539,modifier:soren,tags:SorenConcept Politics Economics Environmentalism Public Idea,type:text/vnd.tiddlywiki,text:Personal term for some basic but rather subversive (mostly not in a good way) facts about the direction the world is going, centered around the obvious fact that infinite economic growth in a finite world is impossible; ClimateChange is merely one manifestation of this fundamental issue, and perhaps the first that cant be ignored. The economy has gotten in a pretty handy spot where its largely divorced from reality (well, its handy for rich people, anyway). But eventually its got to come back in check with reality, because the economy eventually lets people purchase real-world goods and services.\n\n\nConsequences: there will have to be less energy consumption, less stuff consumption, and a different model for managing the economy that doesnt require it to grow constantly to stay alive. How that will impact living standards is largely anyones guess in my opinion. Getting off the hamster wheel and settling down to live in better harmony with each other and the earth could bring some real improvements to life (an EfficientLife could be the beginning). It could also, especially if done wrong, result in reversing much legitimate progress that industrialization has made. In reality, it will probably be a combination of both. Some political turmoil is almost inevitable as well, and that could play out well or poorly.\n\nTimeline: Nobody has a clue. Im moderately confident that some effects substantial enough to require major societal-level adjustment will be seen within my expected lifetime (thats what, 2075 actuarially or thereabouts?). But how far well be along the path, exactly what pieces of the economy will have collapsed, been remade, or been completely transformed, and how badly well have screwed up the earth I dont know.\n\nBecause so much is unknown and unknowable|UnknownUnknowns, I dont worry about specifics, try to calculate probabilities, or change my life in any specific ways to blunt possible future impacts right now. I do, however, make sure to take seriously the possibility that, say, I could lose all of my retirement savings by the time Im retirement age, and I make sure Im comfortable with that possibility when I make investment decisions. And I try to arrange my life to be generally resilient and flexible, because this helps with almost anything that could come up!\n\nThis is not my //concept// (rather, its one that is well understood in a number of circles, which unfortunately are not very mainstream at this point), so the \u003C\u003Ctag SorenConcept>> tag might be a wee bit off, but it is my //term//, and I quite like it. I often abbreviate it ERs.},{title:Ecosophia,created:20200820022203020,modified:20200820022220053,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog of MrJohnMichaelGreer.},{title:EdgeComputing,created:20200521135116846,es:confident,modified:20210511011244064,tags:Software Code Environmentalism Public Idea,type:text/vnd.tiddlywiki,text:Paradigm for distributing some computing away from the cloud and back to individual devices, while still maintaining the general cloud-computing centralization model. Motivations may include:\n\n* Faster response time/reduced latency.\n* Reduced bandwidth requirements (some IoT devices are pushing local bandwidth to the limits, so this is a big deal)\n* Reduced load on central systems.\n* Ability to operate in a degraded|GracefulDegradation state while connectivity is unavailable.\n\nAs with any kind of distributed computing, harder to design and program than a in-one-place model, but is likely to become a virtual necessity in the coming years.},{title:EfficientLife,created:20210916161324759,creator:soren,description:Maximize your life by eliminating everything that doesnt improve it and redirecting those resources to the things that do.,es:confident,modified:20240928220256269,modifier:soren,tags:Idea PhilosophyOfLife PersonalMythology Design Reasoning Public Favorites,type:text/vnd.tiddlywiki,text:The sweet spot between being luxurious and being ascetic, for me and probably many others, is an efficient one where I have exactly the non-essential things in my life that legitimately improve it noticeably, and none of the things that have little to no impact.\n\nPerfectionIsSubtractive, here as elsewhere, and a few things are responsible for most of the value|EightyTwentyPrinciple. Removing things that dont earn their keep from your life has numerous benefits:\n\n* You have more time, attention|ScarceAttention, and physical and mental space for the things that matter.\n* You spend less money -- which means youre left with more money to spend on the things that matter. (I suspect a large fraction of people in the West who are well out of poverty but still struggling with their finances just dont realize how much money theyre spending on //things they dont actually care about//. Its easy to assume that things society values are things you automatically do, too, but this often isnt true.)\n* Youre encouraged to look for things of very high quality that last, that serve multiple purposes, and that you dont stop enjoying. (Quality doesnt include bling or brand names or social cachet, unless those things are important to you, so it doesnt have to mean excessive cost. In fact, quality is often cheaper than the alternative since quality items need fewer repairs and replacements.)\n\nOnce youve cut out the unimportant things, spend your time, attention, and money lavishly on the important things: youll have some left over from throwing out the things that dont matter, and you might as well reinvest it in the things that do.\u003C\u003Cfnote \\\\nThat can, of course, include saving (investing in your freedom) and/or giving the extra money away. Both of those are valuable and important as well!\\\>>\n\nFor instance, I own an old 650-square-foot one-bedroom apartment in a cheap neighborhood despite easily being able to afford something newer and larger, because Ive carefully analyzed what I need in a home|HousingNeeds, and larger and newer raise the price dramatically while not improving any aspects of a home that I value. Sure, I guess more space, less creaking from people walking on the floor above, and slightly more level floors would be nice, but realistically those things would make very little difference in my day-to-day happiness. Since I dont care about size or age, beyond a basic level of suitability, I can easily afford a //really nice// small place – one with great neighbors, a freshly remodeled kitchen, and beautiful century-old woodwork, located in a neighborhood thats quiet, reasonably safe, close to downtown, and extremely walkable. On top of that, I //still// save hundreds of dollars a month over someone who instead bought something newer and larger but of lower quality, and will easily have the mortgage paid off in ten years if my financial circumstances dont change.\u003C\u003Cfnote \\\Of course, some day the calculus may change. If I open a business that needs lots of space, or I get married and have three children, upgrading from a one-bedroom apartment definitely would meaningfully improve my life! But that doesnt change the right decision now -- indeed, staying small now means I can save up money for a nicer larger place later.\\\>> On the other hand, Ive spent thousands of dollars on computers and servers in the past couple of years: Im at my computers most of the day and make my living working on them, so having top-notch equipment saves me a great deal of time and frustration, and I routinely reflect on how nice they are.\n\nThis applies to non-material things as well. Keep the customers that fit best with your companys vision and always work respectfully with you. Keep the personal projects and hobbies that you enjoy and find meaning in. Keep the friends you care deeply about|AmazinglyAwesomeFriend. Let the rest go, or never pick them up in the first place.\n\nLiving by this philosophy is easier said than done. (Im sure Im a beginner at it, even though Im writing it up.) Doing it well requires breaking out of daily life to the meta-level|HammeringHarder on a regular basis and questioning why you are doing things they way you are, why you want things|SevenfoldWhy, and whether you would do well to remove something from your life you currently have. And Western society is largely pushing against you; as a group we value having more stuff, doing more things, and not caring about efficiency on a personal level. Its hard to break the cultural conditioning and hard to explain your reasoning to people; sometimes people even feel threatened when it turns out that you have carefully considered values on this stuff and they dont.\n\nAn important component of living an efficient life is experimenting: try adding something, or removing something, and see what happens|TryItAndSee. Otherwise you wont know what things are most important to you (see Underexploration), and you wont be able to optimize for them.\n\nThis is not exactly minimalism: I dont value having less stuff for the sake of having less, and when it comes to physical stuff, Im fine stuffing things in the closet that might be useful someday. I only want to be sure that I dont waste my resources on things that arent valuable to me.\u003C\u003Cfnote \\\If that sounds like CommonSense to you, me too, but I think the divisive philosophies any particular person agrees with usually sound like common sense to them and malarkey to everyone else, so Im rather hesitant to assert that it is!\\\>> If the best way to accomplish that is to have less, then Ill do that; if its not, then thats fine too. (See MinimalismVsEfficientLife for more.)\n\nTo take this philosophy up a notch, practice the techniques of Stoicism so that you can be comfortable even without the things you decided legitimately improved your life (you can start with NegativeVisualization).\n\nAn easy and instructive way to practice life efficiency is to bring less when you travel somewhere|TravelingLightAsSpiritualDiscipline.\n\n!! References\n\n> Style, in its finest sense, is the last acquirement of the educated mind; it is also the most useful. It pervades the whole being. The administrator with a sense for style hates waste; the engineer with a sense for style economizes his material; the artisan with a sense for style prefers good work. Style is the ultimate morality of mind.\n> ---Alfred North Whitehead|MrAlfredNorthWhitehead (\u003C\u003Crt 10502>>)\n\n\u003C\u003Cclarify>>\n\n> Would you rather have five all-expenses-paid years off to spend with your family, learn a language or build a business — or drive a big car instead of a small car? It’s shockingly normal for people to choose the latter, because they have no idea that they’re making that choice at all.\n> ---David Cain|MrDavidCain, How Much of Your Life Are You Selling Off?|https://www.raptitude.com/2013/04/how-much-of-your-life-are-you-selling-off/ (\u003C\u003Crt 12150>>)\n\n\u003C\u003Cclarify>>\n\n> If you’re not feeling “Hell yeah, that would be awesome!” about something, say no....Refuse almost everything. Do almost nothing. But the things you do, do them all the way.\n> ---MrDerekSivers, “If you’re not feeling ‘hell yeah!’ then say no”|https://sive.rs/hyn (HellYeah)},{title:EichmannInJerusalem1964,caption:Eichmann in Jerusalem: {{!!subtitle}},created:20201222201844228,medium:book,modified:20210610013617180,rating:distinguished,readstatus:read,subtitle:A Report on the Banality of Evil,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1964,text:Book by MsHannahArendt on the Nuremberg trials, an exploration of what comes over people to make them behave in as evil a way as many of the folks on trial did during WorldWarTwo. Read in last semester of TheGreatCon.},{title:EightSeasons,created:20200304001309553,description:Minnesota has at least eight distinguishable seasons, not four.,es:likely,modified:20210623031632122,reviewed:20231002,tags:SorenConcept Nature Public Favorites Idea,type:text/vnd.tiddlywiki,text:People often speak of the four seasons, but meteorologically and culturally, I think there are eight seasons in southern Minnesota. The seasons have variably defined start dates, involving both the calendar and the weather, but with the aid of a good 10-day weather forecast, the calendar, and ones senses, I believe one can typically make a clear call that the next season has started on a particular day, or at the very least in a particular week.\n\n# Winter: January--February and sometimes part of March. Its cold, theres snow on the ground nearly if not completely continuously, and people huddle inside and get their cars stranded in ditches and parking lots. On the nicer days, people go snowmobiling, skiing, etc., so they can go outside for a few minutes without shivering.\n# Thaw: \u003C\u003Cstretch SeasonOfThaw>>\n# Spring: Mid-April to the end of May. Things turn green, flowers start to come out, and the snow leaves for good. Frequent steady rain but few storms. People start to do things outside again, though not much camping or picnicking yet. Everyone is mostly still at work and working hard. Anyone intending to move or make big life changes this year starts planning feverishly.\n# Solstice: The month of June. Some of the nicest weather of the year. Warm but rarely uncomfortably hot. School closes for the summer. People start to go on vacations. Amazingly long days. Punctuated by occasional thunderstorms. Produce starts coming out.\n# Midsummer: July and August. It gets hot and rain is limited and mostly comes in large, fast events. People are still outside. Season for barbecue, camping, fairs, church events, and family vacations. No school.\n# Equinox: September to early October. School starts again. Rain likely to pick up a bit again. Otherwise bright, clear days, perfect temperatures during the day. Nights begin to cool off a bit but still arent cold. Everyone settles in. Fall stuff starts appearing in stores but still feels early. Trees start to show color but havent lost many leaves yet. Equinox.\n# Harvest: Early October to the end of November. Leaves turn brilliant and fall. Squash appears prominently in stores. Evenings get noticeably short and DST ends. Nights begin to drop near to and eventually below freezing, and short sleeves disappear even on hardy people at midday. Snow possible toward the end but uncommon, and it wont last. Thanksgiving is always the last day of the season.\n# Yule: BlackFriday through the end of the year. Snow cover on and off. Weather is cold and generally fairly static. A depressingly low amount of light. Holiday cheer and Christmas vacations. Everyone is insanely busy, but a relatively small amount of work gets done. People remark on how the year went and how much better they hope next year will be.\n\nSource: \u003C\u003Crt 10622>>.},{title:EightyTwentyPrinciple,created:20200401000636039,creator:soren,description:Across almost every context, a large portion of value comes from a small portion of inputs.,es:confident,modified:20240227175451970,modifier:soren,tags:Systems Information MentalModel Public Idea,type:text/vnd.tiddlywiki,text:Well-known principle, also known as the Pareto principle, which suggests that, in a wide variety of forms, 80% of results often come from 20% of input. E.g.:\n\n* 20% of items a person owns get used 80% of the time.\n* 20% of the requirements of a piece of software yield 80% of the value (thus AgileFallbacks and the UnixPhilosophy).\n* (A different) 20% of the requirements of a piece ofsoftware require 80% of the development time.\n* 20% of people create 80% of social connections (see the FriendshipParadox).\n* 20% of your friends take up 80% of your social time.\n* 20% of experiments yield 80% of useful results.\n\nAnd so on and so forth. The numbers are not exact by any means and do not need to add up to 100; it might be 90/10 or 95/5 or 90/30. The point is that a small portion of something is //usually// disproportionately important. The trick is identifying what it is and acting based upon it -- this can make anything drastically more effective.\n\nSturgeonsLaw is a form of this principle -- most creative output is crap and only a small portion is almost all of the good stuff.},{title:ElaborativeEncoding,created:20200708001020940,es:confident,modified:20210510230341207,tags:Memory Psychology Information Public Idea,type:text/vnd.tiddlywiki,text:EE is the act of thinking about something new you learn and attempting to put it in a new context. Several classic studies have found that its one of the best ways to learn things. Further, if you dont elaboratively encode, outside of a few things that are basically serving as mental lookup tables (e.g., the multiplication tables, MnemonicPegSystems), your knowledge essentially has no value, as it is not in any RetrievalContext.\n\nManifestations:\n\n* The ZettelkastenProcess requests that you attempt to join new ideas/tiddlers/cards together as you add them. This elaborates and seems to be understood by many as a prime reason that the ZK works.\n* Without necessarily using this term, the creation of good SpacedRepetition flashcards that follow the TwentyRules is often seen to be a form of EE: it makes you more likely to remember the cards. (I mentioned this -- again without using the term -- in GettingStartedWithAnki202007.) Credit to AugmentingLongTermMemory201807 for using the term and making me notice this connection.\n** Cf. OrphanQuestion, idea from same author.\n* The tired but true cliché that you cant learn any programming language or library or tool by reading a book or watching a video|PointlessVideoUsage...you have to do it (and they better put some dang exercises in there|NoExercises). This is almost an extreme example in some ways.\n* WritingIsThinking helps not only your memory of events or ideas but also your understanding (because your understanding arguably more or less //is// your memory).},{title:ElectiveAffinities,author:Goethe,bibliography:LifetimeReading,caption:The Elective Affinities,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034575,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:ElectricKoolAidAcidTest1968,author:Wolfe,bibliography:LifetimeReading,caption:The Electric Kool-Aid Acid Test,created:20210703170128000,genre:History,medium:book,modified:20210705214034590,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1968},{title:ElectronFramework,created:20200521135709775,modified:20200521135759091,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:JavaScript framework for developing desktop applications on NodeJs like VisualStudioCode.},{title:ElementOfPersuasion,created:20200521201017026,es:likely,modified:20210731155710231,tags:Psychology InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Different people will be persuaded by different arguments. MsEmilyFreeman brought this to my attention with regard to DevOps in her Build 2020 talk|RemoteDevopsCulture20200520. Several different avenues of persuasion suggested therefor:\n\n* Emotional (reduced toil, waste)\n* Data -- e.g., reduced MeanTimeToRecovery\n* Imagining the better future\n\nIf one isnt getting any traction, you may just need to find a different one. The good news is that most things worth persuading about have many benefits. If you cant find enough to keep trying, maybe you should rethink it! (See OpinionsRequireCounterarguments.)},{title:ElementsOfTypographicStyle,caption:The Elements of Typographic Style,created:20200127030733511,format:hardcover,isbn:9780881792119,medium:book,modified:20210606224148832,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2012,text://The Elements of Typographical Style// is the Bible of typography, written by MrRobertBringhurst. On something like the sixth edition by 2020. As one would expect, a gorgeous book itself. It should be required reading for anyone producing content in the digital age.},{title:ElizaEffect,created:20200409013626636,creator:soren,es:likely,modified:20210516214030989,modifier:soren,tags:Psychology Software Neuroscience Public Idea,type:text/vnd.tiddlywiki,text:Idea identified by MrJosephWeizenbaum and remarked upon at length by MrDouglasHofstadter. Basically, its dangerously easy to get people to start attributing human characteristics to non-human things like computers.\n\nNamed after the program ELIZA made for some early ArtificialIntelligence research, which presents a mock psychotherapist which is made up of just several hundred lines of code and operates by randomly regurgitating portions of the users sentences along with a small set of prefab prompts. Its an extremely simple program, in other words, that nevertheless can actually make people feel like theyre having a meaningful conversation.},{title:Elmers,created:20250618153333635,creator:soren,modified:20250618153334703,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Email,created:20200427021742533,modified:20200827193004126,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:The universal|EmailIsUniversal method of communication in the modern world, especially with sites and companies on the WorldWideWeb. An extremely general concept which is highly adaptable, thus its universality; but also a way to make notes disappear into the aether because they cannot be anchored in context (see NotesMustLink, RetrievalContext). Further, email is trapped in the 1970s, with everything building on this backwards-compatible standard. The standard has held up remarkably well, but is still holding email back to one degree or another. The last time anyone really //innovated// in email was the initial release of Gmail, and even that was a series of useful incremental improvements rather than a true challenge to the fundamental process of long-form asynchronous communication.},{title:EmailDebtForgivenessDay,created:20200411003244112,creator:soren,es:confident,modified:20230912032741865,modifier:soren,tags:InterpersonalRelations Psychology Public Idea,type:text/vnd.tiddlywiki,text:Holiday invented by the podcast ReplyAll. On April 30th of each year, you are allowed to respond to any Email you havent written back to, no matter how old it is, and treat it as though no time has gone by at all. (You are supposed to include a blurb about the holiday at the bottom of the email.)\n\nThe phenomenon that leads to this debt is the same one that underlies the advice of ImmediatelyAwkward.},{title:EmailIsUniversal,created:20200322173856775,creator:soren,modified:20200427021726010,modifier:soren,tags:Software Systems Public Idea,type:text/vnd.tiddlywiki,text:Everyone who uses technology has Email, unlike any other system, and email can be used to deliver any type of information. That means email is the universal way to communicate between people and between companies and SaaS systems. Its also a subpar way to do almost every kind of communication, except for actually sending letters electronically (something folks should probably do more of|MoreCorrespondence, but I digress).\n\nProbably a major driver behind LettsLaw.},{title:EmailTheAuthor,created:20210330024752578,creator:soren,editmode:view,es:possible,modified:20211204224700938,modifier:soren,tags:Idea Design Business InterpersonalRelations InternetTheory Public,type:text/vnd.tiddlywiki,text:From a blog post on lessons from developing several Mac apps, which I have lost the link to and cant find on Google: The best way to get good feedback and make people happy with their support experience is to offer a menu choice labeled exactly “Email the Author.” It shouldnt be “Get Support” or “Send Feedback” or something else, but “Email the Author” (assuming thats indeed what happens when you click it).\n\nI suspect this has worked well for the author of the post for a few reasons:\n\n* Most apps have bad support and users have trouble reaching someone who knows anything (a state of affairs used to induce ShadowWork for customers). By indicating that theyre talking to the //author// specifically, people automatically feel like their problem or suggestion is considered important, even before anyone responds.\n* People are likely to be more patient when they know that they are waiting for a specific person to read their email and write back.\n* Because youre using email, people dont have to cram their interaction into a little form. Most contact/support forms stink and make it hard to communicate well.\n* Due to the ErosionOfTrivialSocialInteraction, people usually appreciate feeling like they are having actual conversations.\n\nOverall, “Email the Author” starts the interaction off on the right foot, unlike, say, spending 5 minutes searching the web and trying to get a support phone number or email address.\n\n----\n\nMy Zettelkasten has a link called “start a conversation” at the bottom of the public version, which I like for other reasons, but I do wonder about switching to something closer to “email the author.” Itd be interesting to do some A/B tests (probably distributed over time) to see if theres any meaningful difference in interaction rates.},{title:EmergencyRules,created:20210307210153946,description:The rules are drastically different during emergencies, and people are bad at acting accordingly.,es:likely,modified:20210320014533942,tags:EmergencyPlanning Process Public Idea,type:text/vnd.tiddlywiki,text://The rules are different during emergencies.// And theyre not just a little bit different, theyre drastically different.\n\nThis is something everyone knows intellectually|KnewItIntellectually, but we often forget or ignore when push comes to shove. Things that would normally be unacceptably risky|Risk are correct. Things that would normally be unethical are ethical. Things that would normally be overreacting are underreacting.\n\nFor example:\n\n* You can treat someone having a medical emergency without getting their consent, if theres no reason to think they would deny it under normal circumstances.\n* You can kill someone in self-defense.\n* Its OK, and even correct, to allow people to die in medical studies|CovidChallengeTrials or to distribute potentially life-saving interventions without fully proving their safety, during a public health emergency.\n\nA surprising number of bad outcomes occur when people fail to observe the new rules and proceed on as normal even during a dire emergency. One of the most haunting examples I know is this flight|https://admiralcloudberg.medium.com/the-tragedy-of-saudia-flight-163-94ec85107809 where 301 people died due to a minor fire on board the plane. If the three pilots had confirmed there was a fire and immediately turned around and followed the checklists for an emergency landing, everything would almost certainly have been fine. Instead they failed to communicate with each other, made the dyslexic flight engineer try to find the checklists during an emergency, didnt even consider turning around or diverting for 5 minutes, didnt declare an emergency, didnt prepare the passengers for evacuation, lost control of one engine but didnt look for the engine-out landing procedure, paused to turn on the airline logo light on the tail (!?), didnt try to stop short after landing, and closed the ventilation system while the plane was filled with smoke and carbon monoxide, among other things. Its not like a fire on an airplane isnt dangerous, but any //remotely// competent crew who recognized there was an emergency and the rules were different could easily have saved everyone. But they werent and they didnt.},{title:EmergentStructure,created:20200226022053885,creator:soren,es:confident,modified:20211029022110858,modifier:soren,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:When networks are at their best versus hierarchies|HierarchiesVersusNetworks, hierarchy-like structure, linearizations of thoughts, and entirely new ideas can appear merely from traversing the links, or from adding new links that cause existing nodes to cluster in new ways. This is emergent structure. An important part of the ZettelkastenProcess and the value of the ZettelKasten in general.\n\nJust as importantly, the network system facilitates changing structures as we go along. If you start out creating a tag or a set of links to a center that turns out to be unimportant, no harm is done. You can even quickly remove them again (so long as you have BidirectionalLinks, of course). If you miss an insight, you can go back and find things. You dont have to get it right the first time.\n\nThe RespondingToChange element of AgilePhilosophy speaks not so much of structure but of design requirements, but they are by no means dissimilar. Networks and Agile definitely have a synergy.\n\nEmergent structure being built in notes, and to a lesser extent structure being built in your brain, is one of the reasons that MenosParadox is sophistical.},{title:EmersonEssays,author:Emerson,bibliography:LifetimeReading,caption:Essays,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034602,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:EmersonJournal,author:Emerson,bibliography:LifetimeReading,caption:Journal,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034619,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:emily-and-andrew.jpg,type:image/jpeg,created:20201204223939279,creator:soren,modified:20220912012908248,modifier:soren,tags:Image Public,_canonical_uri:./extimage/emily-and-andrew.jpg},{title:EmotionalAnalysis,created:20200128131129288,creator:soren,es:possible,modified:20201206212235191,modifier:soren,tags:Reasoning Design Code Public Idea,type:text/vnd.tiddlywiki,text:Thinking more about YouAreVeryLogical, in which I asserted that software development and troubleshooting dont have a lot of place for emotion and intuition.\n\nHowever, I think SoftwareAnalysis might have quite a bit more room for emotion and intuition than we recognize. The ConventionalWisdom seems to be that you kind of have to get in disputes with the users to get the correct requirements so you can provide a good system. But I wonder if theres not actually a great deal more room for accounting for the users feelings than we might think, without messing up the software. The conventional wisdom is, after all, presumably developed by people who tend in the more logical direction.\n\nIf the user is also the developer|Dogfooding, this becomes easier!},{title:EmpireBuilder,created:20200225032609935,creator:soren,es:confident,modified:20240509143601705,modifier:soren,tags:Travel Idea Public,type:text/vnd.tiddlywiki,text:TheAmtrak route running between Seattle/Portland and Chicago. I often ride it from Chicago to Minnesota.},{title:EmpoweringEveryDeveloper20200519,at:202005191520,caption:Empowering every developer, with Satya Nadella,created:20200518211602869,medium:video,modified:20210522015801851,presenter:MrSatyaNadella,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/23912de2-1531-4684-b85a-d57ac30af09e,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\n* Sympathies for and discussion of COVID-19|PandemicMood\n** Yay, software is doing stuff!\n** “Two years of DigitalTransformation in just two months”\n*** The ability to quickly throw things over to remote is likely to be required for some time to come|WorkInTheTimeOfCoronavirus, making tech more important than ever.\n*** This is something of an opportunity.\n\n* Microsoft is trying to provide a CompleteIntegration from “idea to code to cloud.” Highlighted tools:\n** TheGitHub: 50 million developers!\n** VisualStudioCode: the worlds most popular editor; ~20% increase in developer activity over the last two months\n** Azure\n*** 95% of Fortune 500 organizations now use Azure for something.\n*** “The worlds computer”\n*** Azure is currently the only platform that has EdgeComputing integrated\n*** Online VSCode option -- CodeSpaces\n** WSL|WindowsSubsystemForLinux\n** PowerPlatform: 3.5 million developers, but this is the first time theyve talked about it at a dev conference\n*** LowCode and rapid-development tool (cf. OutSystems...)\n*** Extension for Microsoft365\n*** 70% increase in use this year!\n*** Upcoming:\n**** More developer extensibility\n**** Integration with legacy apps\n** AzureSynapse Link\n*** Live analytics on real-time data\n** Azure AI\n** MicrosoftTeams\n*** 75M active users\n*** 3x increase in integrations during COVID time\n*** Envisioned as the hub for Microsoft 365\n*** MrTodorFay called it later the “core communications hub for Microsoft”\n** ProjectReunion\n*** Allowing building for several MS UI frameworks (I think this is an attempt to get people to actually use UWP? It went fast.)\n\n* TheFoldingAtHome\n** Protein misfolding could be an important component of Alzheimers and cancer, and can aid in understanding pathogens\n** Moving all resources to COVID-19 viral exploration\n** 30,000 -> 4M devices over the past couple months!\n** MS has also been providing some Azure resources\n** MrGregBowman, project organizer, joined on Teams\n** Active learning algorithms that focus on the most useful structures\n\n* Music\n** San Francisco Conservatory of Music\n** MagixStreaming software.\n** Integration with Teams for live performance\n** Allie Simpson (performer) and MrTodorFay (developer/CEO at TheNewBlue) joined on Teams\n*** Weirdness of not seeing an audience\n*** Teams and MicrosoftGraph},{title:EmptyObservanceAndMagicalThinking,created:20201202021214467,es:likely,modified:20210616231354963,tags:Religion Psychology Public Idea,type:text/vnd.tiddlywiki,text:A common theme in religious (and, to a lesser extent, secular) history is the loss of meaning and feeling behind a tradition or observance, yet persistence of the tradition. Then, even though the intent and meaning is gone, the observance is still believed to have some effect, or atone for sins, or make one better than others, which turns it into one of the least pleasant forms of Hypocrisy to me.\n\nThis is a form of tools over processes|RoleOfTools. The sacrifice or the prayer or the holiday or the purchase of goods becomes the end in itself and is somehow expected to do something by itself.},{title:EnablerAndDemander,created:20200325173232191,creator:soren,es:likely,modified:20210811183823217,modifier:soren,tags:Employment Design Learning TheControlAltBackspace Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:New technology lets us do a lot of things which were previously:\n\n* unavailable or impractical to most of its users (e.g., home recording studios, research on obscure topics, contributing to an encyclopedia|WikipediaPhilosophy)\n* unavailable or impractical for anyone (e.g., Google-searching someones name and immediately learning all about their life, downloading and beginning to read virtually any book in the world in 2 minutes)\n\nHowever, it also //forces// us to do those things -- well, the technology itself doesnt, but society changes to require it. Its now harder to be a musician unless youre the best of the best (cf. WinnerTakeAll). If you dont Google-search and background-check all your new employees, you have a higher risk of getting the cast-offs because the people who do have taken only people who arent problematic and reduced the overall supply. You can now learn about almost any topic from home, but you also have to be constantly learning new things to keep up with the world, and employers are less amenable to training people on the job on their time.\n\nI suspect this is a big reason that we end up on a treadmill of sorts where technology never actually //solves// any of our problems: see ConservationOfProblems. At best we can pick better problems to have (and sometimes we dont even do that).\n\nAlso, people like opening up new frontiers, and they always take things as far as they can under the circumstances. Now its possible for customers to self-service? Cool, now they //have// to self-service, because why not, that makes our business more efficient. Now we can learn anything? Cool, now we can design our world with the understanding that people can and will learn new things quickly.\n\nThe ability to record music is rather like this. When you can do as many takes as you like and even stitch them together, you can get the product to almost an arbitrary standard of perfection, limited only by your ability to play each phrase perfectly at least once. But exactly because of that, you cant publish a crappy take and expect anyone to appreciate it. If youre playing live, a few blips and maybe even an obvious error or two are part of the experience and nobody cares.\n\nTheAmazon is another example. Theyve taken over many things entirely. In other cases, the convenience advantages are so great that its almost irrational not to use it. For instance, if Im willing to deal with Amazons DRM and not really owning a particular book, I can type the name of the book into the search bar, buy it on Kindle for a few bucks with one click, and open the cover of my Kindle, which will likely have already downloaded the book by the time I get to it. The amount of trouble that saves compared to buying the book for more money and waiting for it, or going to the library and borrowing it, is just incredible.\n\nOpenQuestion: How does this relate to AppropriateTechnology?\n\nI brought this up in the blog post discussed in EverythingsBroken.},{title:EnglishGrammarTrick,color:#6c6cff,created:20200503221537453,icon:$:/core/images/list-bullet,modified:20200516163314613,tags:Writing Language Public Idea,type:text/vnd.tiddlywiki,text:Some of the weirder bits of English grammar, style, etc., that \nI struggle with from time to time.},{title:Enneads,author:Plotinus,bibliography:LifetimeReading,caption:The Enneads,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034627,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Enyality,created:20241020175559735,creator:soren,description:The state of somethings fitting into no category, or, more precisely, being its own category.,es:confident,modified:20251213025047357,modifier:soren,tags:Idea SorenConcept Ontology Public,type:text/vnd.tiddlywiki,text:MsEnya famously was once asked what genre her music was, and replied, “Enya.” And thats...basically true.\n\n//Enyality//, therefore, is the property of being so distinct from the established categories that no category seems an appropriate way to describe it. Perhaps related to TaxonomySmashing and UnusualCategoryTax.\n\n\n!! Examples\n\n* What kind of site is M2? Its not a blog|MosaicMuseIsNotABlog. Its a giant notebook...sort of? Its a wiki...sort of? Its a Zettelkasten...but enough unlike one that I changed the name|M2Announcement despite starting off calling it that. Its its own thing.\n* Many close relationships fit into this category. How do I categorize C.S.|PrivatePerson? I dunno, theyre just...//them|PrivatePerson//. “Best friend” is the closest normal category, but I somehow find this kind of categorization distasteful almost? Or at least limiting. And e.g., “family” is better for some things. Regardless, I would never make a decision about the relationship based on any category Id chosen to place it in; its just its own thing. (See also RelationshipAnarchy.)},{title:EpistemicStatuses,created:20210508222350989,creator:soren,modified:20251011192800201,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:An epistemic status, where provided, offers a rough idea of how sure I am about the idea or argument in a particular tiddler, and to what degree it represents my opinion. The rougher the ideas, the more useful these statuses are -- its fair to assume that if someone publishes a book, for example, they have a high degree of confidence in the contents, but I often publish M2|MosaicMuse tiddlers that Ive spent no more than a few minutes on. I think its helpful (for both me and others) to be able to differentiate between weird ideas I heard that might be useful someday and ideas I believe strongly in.\n\nEvery author who uses these statuses seems to come up with their own set. Heres mine. Five statuses describe my overall confidence in the idea being described, and to what degree I am willing to defend it:\n\n\u003Cdl>\n\u003C$list filter\prefix$:/tzk/EpistemicStatussectionmainnsortstackorder\>\n\u003Cdt style{{{ {!!color}addprefixcolor: addsuffix; }}}>{{!!caption}}\u003C/dt>\n\u003Cdd>{{!!text}} (\u003C$count filter\es{!!caption}\/> tiddlers)\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n\nNot everything fits neatly into that framework, so three more statuses fill in the gaps:\n\n\u003Cdl>\n\t\u003Cdt>(empty)\u003C/dt>\n\t\u003Cdd>I have not assigned an epistemic status to this tiddler, or one doesnt make sense (most non-idea tiddlers dont have a status).\u003C/dd>\n\u003C$list filter\prefix$:/tzk/EpistemicStatussectionauxiliarynsortstackorder\>\n\t\u003Cdt style{{{ {!!color}addprefixcolor: addsuffix; }}}>{{!!caption}}\u003C/dt>\n\t\u003Cdd>{{!!text}} (\u003C$count filter\es{!!caption}\/> tiddlers)\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n\nThe epistemic status of a tiddler, if assigned, is kept in its `es` field.\n\n!! References\n\n> Fastidiousness about truth means more than just not believing things that are false. It means being careful about degree of belief. For most people, degree of belief rushes unexamined toward the extremes: the unlikely becomes impossible, and the probable becomes certain. To the independent-minded, this seems unpardonably sloppy. Theyre willing to have anything in their heads, from highly speculative hypotheses to (apparent) tautologies, but on subjects they care about, everything has to be labelled with a carefully considered degree of belief.\n> ---MrPaulGraham, HowToThinkForYourself2020},{title:EpistulaeMoralesAdLucilium,author:Seneca,bibliography:LifetimeReading,caption:Epistulae Morales ad Lucilium,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034640,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:EqualAndNotEqualToNull,created:20200225184816151,creator:soren,es:confident,hideorphan:true,modified:20211029032516602,modifier:soren,tags:PowerShellFail Public Idea,type:text/vnd.tiddlywiki,text:PowerShell lets you filter an array by specifying a boolean condition on it, like this:\n\n```\nPS> 1,2,3 -ge 2\n2\n3\n```\n\nThis is an unusual feature that, in combination with dynamic typing, produces some wildly counterintuitive results, particularly that ordering relations become asymmetric and intransitive. Matthias Jessen shares|https://blog.iisreset.me/schrodingers-argumentlist/ this particularly ridiculous example:\n\n```\nPS> $x @($null, $null, 1)\nPS> $x -eq $null -and $x -ne $null\nTrue\n```\n\n(Explanation: for `$x -ne $null`, the array gets filtered and evaluates to a single truthy element, `1`. For `$x -eq $null`, the array gets filtered and is non-empty, which makes it truthy. True AND true is true. A single `$null` in the array `$x` is insufficient because PowerShell automatically unwraps single-element arrays unless its explicitly instructed not to by wrapping the variable in `@()`, and `$null` by itself is falsy.)},{title:ErosionOfTrivialSocialInteraction,created:20211031205334028,creator:soren,description:Seemingly dispensable social interactions serve an important role in human thriving and should not be optimized away.,es:likely,modified:20220825183910051,modifier:soren,tags:Idea Psychology Sociology Public,type:text/vnd.tiddlywiki,text:A subset of general social interaction and everyday life is what we might call //trivial social interaction// -- saying hi to people you meet on the street, buying something at a coffee shop, asking for help finding something at a store. These interactions are characterized by short overall duration, unfamiliarity with the other person/s in the interaction, occasional but brief small talk, a lot of brass-tacks discussion, and a lack of emotional content or long-term significance.\n\nPerhaps because such interactions dont seem to be that important, and because its easy to perceive them as a waste of time, were gradually getting rid of them in the modern world, replacing them by machines, digital taxonomies, or entirely new ways of doing things. For instance, most people go to stores much less often than they used to; we now order things on Amazon or Uber Eats or what have you.\n\nIm suspicious that, while the new ways of dispensing with doing errands and talking to humans may be more “convenient,”\u003C\u003Cfnote \\\See also “The Inconvenience of Convenience|https://www.controlaltbackspace.org/simplicity/the-inconvenience-of-convenience/”, on TheControlAltBackspace.\\\>> theyre also seriously bad for us, because these seemingly trivial interactions are actually important for our health. A few ways in which that can be true:\n\n* They get us out of our houses, moving around, giving us a chance to take a break.\n* They make sure we continue to have contact with other people even if were very busy.\n* They build tolerance to and even love of people who are superficially different from us.\n* They allow us to smash taxonomies|TaxonomySmashing when the choices that a computer would have provided dont make any sense.\u003C\u003Cfnote \A frivolous but perhaps instructive example: a new pizza place opened near my apartment and was giving free samples of their (delicious) chicken wings. This was cool the first time. After that, I didnt want them every time anymore; if I wanted wings I would order wings, but I didnt, I ordered pizza. I consequently started to actively avoid ordering takeout from there because I would have to figure out what to do with the free wings that I didnt want -- there was no way to indicate you did not want this offer on the online ordering platform, and reheated wings arent really very good, so putting them aside wasnt a good option. Of course this would be trivial if you ordered from a human. (Happily, the promotion ended and now I can order pizza there without getting wings I dont want.)\>>\n* They keep us feeling confident about our ability to behave normally in a wide variety of social interactions, and make it easier to take interactions to the next level and make new friends when the conditions are right.\n\nThis last point seems particularly key; its what Im pretty sure is going on with the phenomenon of PhoneAnxiety. Is it coincidence that our society seems to be dealing with greater levels of social anxiety right as we stop having these kinds of interactions? Maybe were simply reporting it better, but it sure seems like theres more actual pathology out there. Im criticizing this and I know Im experiencing more phone anxiety than I used to, than Im happy about, than really makes any sense for me. (I didnt have some kind of traumatic phone interaction; why except reduced familiarity do I now dislike having phone conversations with strangers so much more than I used to?)\n\nRelated: UsefulFriction.},{title:EscapingFlatland,author:MrHenrikKarlsson,blogroll:Blogroll,caption:Escaping Flatland,created:20240402012219336,creator:soren,modified:20250905203715374,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.henrikkarlsson.xyz/,text:Blog of MrHenrikKarlsson.},{title:EscapingTheTragedyOfWip,caption:Escaping the Tragedy of WIP,created:20200311185119356,creator:soren,medium:video,modified:20200808143547898,modifier:soren,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.agilealliance.org/resources/sessions/escaping-the-tragedy-of-wip/,text:Lecture on ways we can get out of having too much work in progress. I did it before having ZettelKasten and dont have time to go back and re-notate, but worth looking at again if you need the information!\n\n{{!!url}}\n\n(TheAgileAlliance subscriber login is required, irritatingly)},{title:Essay,color:#ff4d00,created:20210709012511124,modified:20210721015806123,tags:Idea Public,type:text/vnd.tiddlywiki},{title:EssaysInRadicalEmpiricism1912,author:William James,bibliography:LifetimeReading,caption:Essays in Radical Empiricism,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034648,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1912},{title:EternalSeptember,created:20210725215716930,creator:soren,description:The moment that Internet forums lost their innocence and became too large to understand on a normal human scale.,es:likely,modified:20211204223821525,modifier:soren,tags:Idea InterpersonalRelations InternetTheory Sociology Systems Public,type:text/vnd.tiddlywiki,text:Once upon a time, a large portion of Usenet newsgroup users came from colleges. Every September, a pile of freshmen would show up, get interested in the network, and have no clue what they were doing. They would violate all the social norms of the system, and many of them didnt really belong in the community at all. After a few weeks, the people who didnt fit in would leave and the people who did would figure things out, and Usenet would go back to being its cozy self for another year. Everyone learned to brace themselves for September, and the world was great.\n\nIn September 1993, AOL started offering access to Usenet through their standard online services. The audience became a large proportion of Internet users, who now were from all walks of life across the world, and the seasonality ended, because people could join AOL at any time of year. Thus was born the //Eternal September//, or the //September that never ended//. September became the normal state of Usenet. The community was permanently changed, and most veterans spent the next years talking knowingly and sometimes longingly about the prelapsarian Usenet. The previous social norms of the community were overwhelmed and to some degree disappeared, many of the CoreGroup were alienated, it become impossible to know a significant proportion of the people in the community, questions were more likely to come up over and over again, people were more likely to be rude or post without having anything meaningful to contribute.\n\nIts tempting to think of the Eternal September as The Fall|FallOfMan of the Internet. I think there are two takes on this view, and I think time has yet to bear out which ways of thinking about the Internet are correct. Most likely both are correct in their own way.\n\n# \u003C\u003Cstretch EternalSeptemberAsBeginningOfWisdom>>\n# \u003C\u003Cstretch CommunitiesDestroyedByScale>>\n\n\n!! References\n\nSocial Media is Impossible|https://blog.christopherburg.com/2021/07/03/social-media-is-impossible/ argues there is no such thing as a community that makes sense for everyone.\n\nI wrote a blog post based on these two Zettel, Two Takes on the Eternal September|https://controlaltbackspace.org/design/two-takes-on-the-eternal-september/.},{title:EternalSeptemberAsBeginningOfWisdom,created:20210728005205854,description:The EternalSeptember allowed the Internet to become its fullest self -- it is the Fall of the Internet only in the Philip Pullman|MrPhilipPullman sense.,es:possible,modified:20210728022057652,tags:Idea InternetTheory Public,type:text/vnd.tiddlywiki,text:Suppose that, seeing what was happening to Usenet during the EternalSeptember, someone in charge|TheyTheSayersOfThings decided that everyone now had to get an Internet License to use the Internet. Or those of us who didnt want to get AOL-ified splintered off into a different network where we required Internet Licensing.\u003C\u003Cfnote \\\\nI say //us//, which is half facetious and half serious. The Eternal September began before I was born, and I didnt get into online communities until the mid-aughts. But had I been the appropriate age then, I suspect I would have been among the original Usenetters.\\\>>\nLets say that to get an Internet License, you have to have an IQ of at least +1σ, be an excellent, published writer in English -- good Internet users have to be able to communicate with all other Internet users optimally! -- and sign an agreement committing yourself to stringent standards of etiquette. Maybe you even have to be a member of some broad social group in real life. We can certainly come up with less elitist-sounding and more useful ways to limit the size of groups (see OnlineCommunityLessons and MrClayShirky in its source for some ideas), but lets run with this for a moment for the sake of argument. Well be leaving out plenty of people who would be worthy participants, but well at least ensure we keep the vast majority of the AOL users who spoiled Usenet out.\n\nWhat now do we have? Is this //the Internet// at all? Im not sure it is. The Internet was and is revolutionary in that it breaks down the barriers between people who would never have met each other, shared ideas, collaborated before. The Internet is how I can video chat with anyone in an industrialized country by sending them an email link, how I can edit Wikipedia|WikipediaPhilosophy, how I can go read fascinating stories told by people who are in completely different social circumstances|CrossClassConnections than me on \u003C\u003Csubreddit \AskReddit\>>. The Internet is not how I can share long-form|LongFormWriting correspondence|MoreCorrespondence with other smart people who are like me. //We were already doing that before// by writing essays and sending letters around to people who seemed like they were working on similar ideas and might enjoy getting to know us...Usenet was just faster and more convenient. Wikipedia and its ilk are the point of the Internet; these things were truly impossible before.\n\nBringing in the messiness of humanity by casting the original Internet denizens out of the Garden is exactly what made the Internet meaningful and different, what left us free to make our own choices and improve the world, what leaves room for ultimate redemption. The Internet lost its innocence in September 1993, but it also grew up.},{title:Ethics,created:20200910021556702,creator:soren,modified:20211221011419643,modifier:soren,tags:Public Definition Index,type:text/vnd.tiddlywiki,text:Branch of philosophy focusing on what behavior is right and wrong.},{title:EuclidElements,author:Euclid,bibliography:LifetimeReading,caption:Elements,created:20210703170128000,genre:Math,medium:book,modified:20210705214034656,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:EuropeanChristmasMarket,created:20231217234323097,creator:soren,modified:20240509144042003,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:Event,caption:A thing that happened at a point in time. Serves to index journal entries and thoughts related to that topic.,color:#ff0000,created:20200323180714071,creator:soren,icon:$:/core/images/tag-button,modified:20240316201113455,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki},{title:EventDrivenApps20200521,at:202005211230,caption:Build, integrate, & scale with event-driven apps,created:20200518214628134,medium:video,modified:20210522015801859,presenter:MrJeffHollan MrAnthonyChu,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/2a134f68-fc9b-4335-9e90-fd91588a5ad0,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nDescription of the EventDrivenPattern.\n\n* Tools in Azure for this:\n** AzureFunctions\n** Logic Apps (snarky note: are there apps that dont use logic?)\n** Event Grid -- message broker, can trigger Functions/Apps\n*** Partner Topics -- new option for third-party integrations\n** API Management\n\n* Demo: build an app to run when our startup has a new user\n** Event Grid to receive messages from Auth0\n** Logic Apps to trigger a Function from a message and handle simple logic\n*** Logic apps can easily call into anything in Azure API Management!\n** Function for the actual code\n\nQ&A:\n\n* API Management is expensive. Any cheaper pricing options?\n** There is a consumption-based option now. 1M free invocations per month.\n\n* Best practices for decomposing work into Functions?\n** A Function App is your unit of scale, deployment, and development. If you want to do those things independently, you want multiple apps. Otherwise, more convenient to keep together. (Good point -- noted in AzureFunctions.)\n\n* Monitoring?\n** Integrated with Azure performance and logging mechanisms\n** Dead-letter queues available to debug failed workflows/undeliverable messages\n*** Can trigger events if events fail to handle them.\n** Application Insights can be used to trace flows\n\n* Interaction with in-house/on-prem infrastructure\n** Premium plan required to map to a virtual network, but can then work neatly that way\n\n* Is it a good idea to use Functions for an HTTP API?\n** Often\n** Be aware of the cold-start time\n** Little reason to convert existing working APIs to Functions unless youre having scaling issues\n\n* How do Functions relate to Microservices?\n** Function apps can be considered a type of microservice\n},{title:EventDrivenPattern,created:20200602152208384,creator:soren,es:likely,modified:20211107182103923,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:An architecture which generalizes the concept of a server with services.\n\n* Something happens, so we need something computed, a process, a notification\n** E.g., an HTTP request, an IoT device triggered an event, a customer joined the service, its midnight\n\nAdvantages:\n\n* Loosely coupled and composable\n* Efficient: you need to have the system doing work only when actually handling an event, and in most cloud platforms, instances get automatically added and subtracted to handle changes in load.\n* Can replace PowerShell scripts on janky random machines, complicated servers, workflows, etc.\n\nDisadvantages:\n\n* Depending on the technology in use to implement, a fairly large cold-start time may be involved if an event hasnt fired in a long time (e.g., on Heroku or AzureFunctions). \n* Typically stateless, which can add difficulty to development depending on the use case.},{title:EventualConsistency,created:20200407025506339,creator:soren,es:confident,modified:20211229142858514,modifier:soren,tags:Code Systems Public Idea,type:text/vnd.tiddlywiki,text:Property of many modern database and distributed systems. “Eventually” (the exact guarantees provided depend on the system), any given data will be the same across the entire system. For a time, though, it may not be while it syncs, and reading the same value in different contexts could yield different answers. Surprisingly, this often isnt that big a deal provided you understand it and design for it.\n\nSimilar ideas occur in systems that arent made up of software; see for instance the WikipediaPhilosophy or even the ScientificMethod.\n\nEventual consistency is guaranteed by the Second Law of Thermodynamics|https://xkcd.com/2315/.},{title:EventualUrgency,created:20220811214141637,creator:soren,description:A type of task that is always, or often, low priority in the moment, yet high priority over ones lifetime.,es:confident,modified:20220909164858769,modifier:soren,tags:Idea SorenConcept Productivity Process Public,type:text/vnd.tiddlywiki,text:A task which is eventually urgent is of low importance and low urgency compared to everything else for an extended period of time. However, with substantial probability, it will eventually, perhaps at an unpredictable and poorly chosen moment, lead to dire consequences if not done. Its not important to do an eventually urgent task at any //particular// time, but its vitally important to do it at //some// time.\n\nSmart Prioritization of eventually urgent tasks is thus a major consideration for all effective work and life plans.\n\nThere are two distinct types of eventually urgent tasks:\n\n# Tasks which are eventually urgent because they have a (clear or vague) deadline a long distance in the future, and theres little advantage to doing them earlier, but heavy consequences for being late (e.g., filing your taxes).\n# Tasks which are eventually urgent because they protect against some adverse event which is very unlikely, but becomes likely enough to worry about over time due to constant low-level exposure (e.g., getting fire insurance).\n\nThe first type is somewhat easier to manage correctly because you know at least roughly when the deadline will be coming and can raise its priority as the deadline approaches. The second type requires you to either figure out your actual risk and risk tolerance and prioritize appropriately, or, more likely, just do it as quickly as you can even if youre not sure exactly how high priority it is.\n\n\n!! Examples\n\n* Running Backups on your computer\n* Filing your taxes\n* Buying new socks|https://www.gwern.net/Socks\n* Selecting an effective form of birth control|https://controlaltbackspace.org/prevention/understanding-contraceptive-failure/\n},{title:EvergreenNotes,created:20200423021942739,modified:20201206192845436,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Term of MrAndyMatuschak to describe a note-taking system in which notes dont get lost because they are emergently|EmergentStructure linked together (NotesMustLink). The alternative are notes which pile up but dont produce accumulated knowledge because they are never available in the correct RetrievalContext. My ZettelKasten as realized is one of these systems.\n\nEvergreen notes are continuously revisited as new notes are added, hence teach you something new on every iteration, and theyre usually findable (Im not going to say //always//, because thats mighty optimistic).\n\nMatuschak also suggests that one of the best ways to measure progress in KnowledgeWork is by evergreen notes produced, at least for people who make any evergreen notes at all (I dont buy that most knowledge workers never make any progress!).},{title:Evernote,created:20200425162011811,modified:20200425162213888,tags:Information Software Public Idea,type:text/vnd.tiddlywiki,text:Note-taking system designed as a place you can dump everything (see CompleteIntegration). It suffers (in my opinion) from a lack of effective linking and semantic categorization and as such fails to implement EvergreenNotes. In general, it occupies an ugly niche where it attempts to do everything but doesnt really do any particular use case very well. If all you need is a few notes, then a simpler app like SimpleNote or OneNote or the AppleNotes app or some kind of outliner is probably perfectly sufficient and easier; if you need a real complete notes system, youd do better to move to something more like TiddlyWiki that really lets you structure things well.},{title:EverOnwardIbm,created:20200715030441827,creator:soren,es:confident,modified:20230327020657369,modifier:soren,tags:Humor Music Poetry Song Public Idea,type:text/vnd.tiddlywiki,text:MsSusanCain did the world the favor in pointing in her book QuietPower2012 to the incredible tradition of absurd corporate songs of early-20th-century TheIbm. The tiny snippets she gave in the book were already so absurd I was convinced it wasnt real and had to look it up...but it is. Heres the chorus of the company anthem, \Ever Onward IBM\:\n\n>\\\\nEVER ONWARD - EVER ONWARD!\nThats the spirit that has brought us fame!\nWere big, but bigger we will be,\nWe cant fail for all can see\nThat to serve humanity has been our aim!\nOur products now are known in every zone,\nOur reputation sparkles like a gem!\nWeve fought our way through-and new\nFields were sure to conquer too\nFor the EVER ONWARD I. B. M.\n\\\\n\nAnd, if such sounds possible, from the even worse second stanza:\n\n>\\\\nWere bound for the top to never fall!\nRight here and now we thankfully\nPledge sincerest loyalty\nTo the corporation thats the best of all! \n\\\\n\nWhats that you ask? Yes, //of course// theres a period recording on YouTube:\n\n\u003Ciframe width\1055\ height\766\ src\https://www.youtube.com/embed/L9oh3gqOEKU\ frameborder\0\ allow\accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\ allowfullscreen>\u003C/iframe>\n\nArs Technica did a great article about this|https://arstechnica.com/information-technology/2014/08/tripping-through-ibms-astonishingly-insane-1937-corporate-songbook/.\n\nEmbedded full text|songs-of-the-ibm.pdf!\n\n!! References\n\nThis recording and a few notes about the experience of working at IBM around this time is a small display at the Computer History Museum in Mountain View.},{title:EveryCompanyIsASoftwareCompany,created:20200407182841973,creator:soren,es:likely,modified:20211121005842636,modifier:soren,tags:Futurism Business Code Public Idea,type:text/vnd.tiddlywiki,text:Its often argued nowadays that every company is intrinsically a software (or tech) company. MrSatyaNadella may or may not have started this idea (he is often mentioned, but its spread all over without attribution now).\n\nWhile of course its not literally true -- software does not provide every company with its core value -- it definitely //is// true that a company with crappy software, or that does not embrace the need to involve technology in business decisions, will be needlessly hampered and likely sooner or later fail to compete in a tight market.\n\nDiscussed in our UnicornProjectPartThree meeting of F.I.B.C.|PrivatePerson.\n\nIn DevOpsInTheRealWorld, MrRichardSeroter identifies a few obstacles that prevent companies from embracing this view of themselves and taking advantage of the benefits it provides:\n\n* lack of trust and PsychologicalSafety (IT seen as a cost center, not an innovator)\n* excessive TechnicalDebt\n* rampant LocalOptimization due to siloing, and proliferation of competing priorities\n* lack of automation\n* culture does not embrace change, risk, and ContinuousImprovement (cf. WhoMovedMyCheese)},{title:EveryDeveloperIsWelcome20200519,at:202005191600,caption:Every developer is welcome, with Scott Hanselman and guests,created:20200518211948776,medium:video,modified:20210522015801867,presenter:MrScottHanselman MsAllisonBuchholtzAu MsKaylaCinnamon MsMaddyLeger MrNatFreeman,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/871ef73f-f04a-405b-a0fa-01d7433067d1,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nDemonstration of all sorts of cool new MicrosoftWindows stuff. So much it gave me vertigo!\n\n\n* Starts with a throwback mock-login to Windows XP -- love it!\n** Scott also says they need to add the Skype calling sound to Teams. Like I always say cable modems should make dial-up sounds|https://www.youtube.com/watch?vgsNaR6FRuO0.\n\n* Demo of using MicrosoftGraph to connect Teams to a colored IoT light bar to show the current status.\n\n* WindowsPowerToys seem to be making a comeback (last I heard of them was, like, 2005).\n** Talked about ones called \~FancyZones\ (for tiling windows in layouts on the desktop) and \Run\ (Launchy/VSCode palette-style app launcher).\n\nWith MsKaylaCinnamon on WindowsTerminal and CLI/Linuxy tools:\n\n* Windows package manager -- WinGet\n** Preview OpenSourceSoftware tool\n* WindowsTerminal is on 1.0 now! Released today.\n* Demo of WSL|WindowsSubsystemForLinux 2...just picked a tab in Terminal and it instantly loaded (still in preview, full later this year)\n* The Linux filesystem is available within Windows Explorer in WSL2 as well\n* Code Conversations in MicrosoftTeams -- this works basically like Jupyter Notebook directly in Teams, as a bot\n\nWith MrNatFreeman from TheGitHub:\n\n* GH just acquired npm (!!)\n** NPM has 75 billion downloads per month.\n\n* You no longer have to pay for private repos/orgs on ~GitHub, any number of collaborators.\n** Enterprise still costs money (support, compliance, etc.)\n\n* GH added a mobile app\n** A lot of PR reviews happening (notifications too of course) so people can review quickly and unblock others\n\n* ~GitHub Sponsors\n** Easy way to contribute money to people or projects you use/admire\n** Has paid millions of dollars already since November\n\n* CodeSpaces\n** Private preview\n** One click to connect to a container with the dev environment for that repo!\n** Someone in the chat said stay tuned for this in ADO\n\nWith MsAllisonBuchholtzAu, more on mobile app and CodeSpaces:\n\n* You can actually screen-share on mobile with Teams! (wtf)\n* Another gag that shows all the startup instructions for MsAllisonBuchholtzAus dog-tracker app...including using the Windows 3.1 Program Manager\n* Preferences sync for Code Spaces from ~GitHub -- also can pull in all your dotfiles for terminal.\n* Includes a port-forwarding service to forward anything exposed by the code space machine to your local machine\n\n* ~GitHub PullRequests are now integrated into VSCode with an extension.\n* Dependabot -- {{Dependabot}}\n* Live Share\n** Sharing built right into VSCode. You can work together with separate cursors, as if you were in Google Docs or the like.\n** Can even share from VSCode to Visual Studio 2019 (this is still in private preview).\n\nAlone with MrScottHanselman:\n\n* .NET Core 3.1 is out\n** LTS\n** WPF and Windows Forms support\n** Self-contained EXEs\n\nMsMaddyLeger joined to demo live-share and look at Xamarin apps and something else. But I got cut off before that finished!},{title:EveryStateShouldBeAMicrostate201903,caption:Why Every State Should Be a Microstate,created:20200423025706493,medium:article,modified:20200808143606568,tags:Source Public,type:text/vnd.tiddlywiki,year:2019,text:A fantastic article published in TheCurrentAffairs vol. 4 issue 2, p. 49, about, well, why every state should be a microstate. Roughly:\n\n* It would be popular because people like being autonomous.\n* Government can be more responsive.\n* Everyone knows each other, at least to a much greater degree than in a typically sized modern country, which encourages social responsibility (he tells an anecdote about meeting the CEO of the countrys main bank at a casual lunch).\n* There is a strong feeling of homeness, identity, and connection to the physical environment.},{title:EverythingForeverOrNothingEverAgain,created:20251010005409361,creator:soren,es:likely,modified:20251202032434483,modifier:soren,tags:Idea Romance Public,type:text/vnd.tiddlywiki,text:MrTimUrban, in his article|https://waitbutwhy.com/2016/09/marriage-decision.html on deciding if you should marry someone, says at some point in a romantic relationship, society will push you to decide if you want “everything forever or nothing ever again.” I really appreciate this formulation and quote it all the time!\n\nUrbans article is, by relative standards, quite self-aware that you dont //have// to succumb to this pressure, other options are possible if both people in the relationship want it. Nevertheless, its interesting how after exposing such a silly, ginormous, overpoweringly scary idea for what it is, besides commenting at the beginning that some people are strong enough to break the rules and saying that we are in no way evolved to make 60-year commitments to other humans, the whole article pretty much just assumes youre going to do this thing and makes no further comment.\n\nSo Im going to say: this form of the RelationshipEscalator, expressed in this way, is stupid. Im not saying that making commitments is a bad idea -- exactly the contrary, in fact, commitments are great. Im not even saying that traditional marriage is necessarily a bad idea.\u003C\u003Cfnote \Its probably a great idea for some people in some circumstances, a tolerably OK idea for others in others, and a very bad idea for yet others in others. The seriousness and all-encompassing nature of the commitment creates a lot of leverage, so that a good marriage is often spectacularly good and a bad one spectacularly bad. And of course, a marriage can start out good and become bad (or vice versa, but thats presumably much less common).\>> But //pushing// people into making that kind of commitment, and then having both them and the rest of society consider anything other than “everything forever” to be a failure that propagates back and colors the entire relationship -- I think thats no good, very bad.\n\nPushing marriage presumably does somewhat increase the absolute number of people who have long-lasting marriages, which seems positive in many ways. But it is hard for me to believe it doesnt decrease the proportion of married people who have happy marriages, or the overall level of relationship satisfaction counting both married and unmarried people. Personally, I care about those things, as well as the ability to make strong commitments to more targeted things -- e.g., creating a stable environment for children -- much more than this one single metric, which gets Goodharted|GoodhartsLaw extremely easily and which many people dont even recognize as a selectable target with valid alternatives.\n\nThat was pushing people into “everything forever”. But what about pushing people into “nothing ever again”? That happens too! For anyone who fails at “everything forever,” for whatever reason, now if you dont also choose “nothing ever again,” youre breaking the rules again. But theres something about this phrasing that makes abundantly clear that theres a wide, wide world in between the top of the relationship escalator and falling all the way to the bottom. The less tied you are to “everything forever or nothing ever again”, the more likely you can catch yourself. I see classic “breakups” as sometimes necessary -- of course -- but often totally avoidable as long as you know that there are other options (which usually requires having much better role models than we currently have, unless youre weird enough, desperate enough, or just thoughtful enough on the topic to consider the possibility). Often some pretty small changes can salvage a beautiful relationship! Cant live together? OK! Dont want to be sexual and romantic but do want to live together and stay close? OK! Want to never see each other again but remember each other fondly and have no hard feelings? OK! The “breakup” schema is incredibly one-dimensional, owing to “nothing ever again”, and I think it too causes a lot of devastating, completely unnecessary pain.\n\nCf. PermanenceUnnecessary.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\nIn AnalogLove2023, Jesse and Alex vow, delightfully and avoiding both “everything forever” and “nothing ever again” when they dont mean either:\n\n> for a year and a day i vow to to make a place in my heart for us both to sit...whether we rejoin or part, i vow to treat you always with honor and with care\n\n(I want to note particularly that they vow up front to avoid “nothing ever again,” even as they leave staying together or separating equally open, because allowing room for a “nothing ever again” ending -- which we would surely see as extreme if it werent accepted as normal -- doesnt take the beauty of what they have now seriously.)\n\n\u003C/$m2.x>},{title:EverythingIsEffectiveAndPermanentAndThatsOk,created:20200820031635989,creator:soren,description:Everything we do and think has an effect on us, regardless of how “imaginary” we hold it to be, and we shouldnt want it any other way.,es:confident,modified:20231023150539531,modifier:soren,tags:PhilosophyOfLife Psychology Health Public Favorites Idea,type:text/vnd.tiddlywiki,text:People nowadays seem to spend a lot of time arguing about whether things have an effect, especially a permanent one, and particularly assuring others that they dont. We seem to hate the possibility that something could have a negative impact on us and do anything we can do avoid facing up to that. Examples:\n\n* A claim I read in an //Aeon// article not so long ago that acting cant change someones personality, basically because theyre acting (\u003C\u003Crt 10223>>).\n* The general sex-positive idea that one cant masturbate too much or in an unhealthy manner (\u003C\u003Crt 10547>>). Im as sex-positive as the next guy|SexPositiveSoren, and Im glad weve mostly stopped telling people that theyll go blind and go to hell from doing it a few times, but heck, you can drink too much water or get too much exercise.\n* A general feeling that anything resembling Lamarckian evolution|https://en.wikipedia.org/wiki/Transgenerational_epigenetic_inheritance is problematic because wed pass on our problems to our children. (We seem to be finding more and more that it has significant explanatory power, and can sit alongside Darwinian evolution|Evolution as a supplementary mechanism.)\n\nReally, //everything// has an effect on us and changes us. Sometimes for better, sometimes for worse, usually for both in different ways. Some things more than others of course, and we can debate and research how much and whether thats generally anything to be worried about. That question of whether the quantity is concerning is the real problem we should be asking. Because there will be something, and trying to argue there is not just distracts from attempts to measure the effects.\n\nAnd actually its good that everything has an effect. If we arent changed by an act in some meaningful way, what really is the point of doing it? I mean, we might do some good to another person, but if were all like this, would //they// get any benefit from it? It seems like this line of inquiry basically leads to nihilism, even if it does preclude some unwanted negative experience. (See also NoMeaningWithoutFailure.)\n\nTo think a bit more about the acting example, is fantasy and imagination problematic or wrong? No, of course not. Its also absurd to claim it wont affect your real life in any way. Will imagining you kill someone make you a ConsensusPhysicalReality murderer? No, of course not, probably not even if you do it a hundred thousand times. Will repeatedly thinking about the same thing in an \imaginary\ world change your thought patterns in the \real\ world? Yes, of course it will. Could be for better or for worse, again.\n\nA proverbial manifestation of this idea focusing on //you// as an entity instead of //your actions// is the statement that you CantStepInTheSameRiverTwice.\n\n!! References\n\n> There is nothing better than imagining other worlds to forget the painful one we live in. At least so I thought then. I hadnt yet realized that, imagining other worlds, you end up changing this one.\n> ---Baudolino, in //Baudolino//, Umberto Eco (\u003C\u003Crt 6701>>)\n\n\u003C\u003C\u003C\nLife is neither ugly nor beautiful, but its original.\n\n---//Zenos Conscience//, p. 330\n\u003C\u003C\u003C},{title:EverythingsBroken,created:20200423161213028,es:confident,modified:20210616230102524,reviewed:20230429,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Software is, overall, terrible. Not in that it doesnt get its job done, but that its full of minor glitches that together conspire to drive you insane: DeathByAThousandPaperCuts. And, somehow, //we dont even notice//.\n\n(Software only kind of breaks|BreakableSoftware; its usually due to things outside the softwares control. Of course, in many cases it was broken from the start.)\n\nEverythingsBrokenAndNobodysUpset201209 describes the issue wonderfully.\n\nOpenQuestion: How the heck can we fix this state of affairs? I dont even know what the problem is.\n\nI wrote some further thoughts on this in TheControlAltBackspace post Everythings Broken, Everythings Too Complicated|https://controlaltbackspace.org/simplicity/everythings-broken-everythings-too-complicated/. Because I dont like PresentingProblemsWithoutAnswers, I suggested a possible answer to the open question above, namely the UnixPhilosophy and in particular the tangentially-related quality of trying to keep software from changing frequently and breaking backwards compatibility in user-visible ways; it can be the fact that things change the moment you have them figured out that is frustrating rather than merely that theyre hard to learn. See ChangeAsSourceOfFrustration.\n\n!! References\n\n\u003C\u003Crt 10700>>, from an NIST study:\n\n> Software developers already spend approximately 80 percent of development costs on identifying and correcting defects, and yet few products of any type other than software are shipped with such high levels of errors.\n\nAnd the classic, MrGeraldWeinberg:\n\n> If builders built buildings the way programmers wrote programs, the first woodpecker that came along would destroy civilization.\n\nSee also the book WhySoftwareSucks.},{title:EverythingsBrokenAndNobodysUpset201209,caption:Everythings Broken and Nobodys Upset,created:20200423161454218,medium:article,modified:20200808143619256,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.hanselman.com/blog/EverythingsBrokenAndNobodysUpset.aspx,year:2012,text:(Mostly) a rant about the DeathByAThousandPaperCuts caused by modern technology, often worsened by not understanding the value of AvoidScale. The end result is that EverythingsBroken.\n\nOffers a long list of issues the author has encountered, even just in the past //week//, and makes the point that nobody really even thinks about them anymore.\n\nThere are two possibilities for each issue, the author says:\n\n* No one has ever seen this issue. Youre alone and no one cares.\n* Everyone has seen this issue. No one from the company believes everyone. Youre with a crowd and no one cares.\n\n{{!!url}}},{title:EverythingShouldHaveAUrl,created:20210515025923398,es:likely,modified:20210515030148418,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:From WhyUrls2015: anything that should be part of an organizations memory should have a URL. (The typical opposite is long, unreferenceable email chains and in-person meetings.) Things that have URLs remain useful forever and capture all of the context associated with them -- or at least the tools that permit things to have URLs naturally do. Specifically, things have to be written down cleanly, which improves the ideas|WritingIsThinking, and it gives the decision/procedure/whatever an IdeaApi (see also PowerOfNames).\n\nThis Zettelkastens tiddlers are essentially URLs (well, the permalink button actually gets a URL, but the fact that its a URL isnt the point so much as that theres a unique identifier that points directly to the thing in an information system accessible by all stakeholders).},{title:Evolution,created:20200322015022045,creator:soren,es:confident,modified:20201204041546725,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Scientific concept in which systems gradually become better at their purpose over time as the worse elements of the system drop out by being unfit (dying, failing in the marketplace, etc.). Applicable in a wide range of disciplines.},{title:EWLD,caption:Exploring the World of Lucid Dreaming,created:20200410131900141,creator:soren,format:paperback,medium:book,modified:20210606222857348,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Dreaming Source Public,type:text/vnd.tiddlywiki,text://Exploring the World of Lucid Dreaming// (known almost exclusively in common parlance as EWLD) is an introductory book on LucidDreaming (oddly enough) by MrStephenLaBerge. A great reference and full of more stuff than you can likely ever try.},{title:ExecutableEvergreenNotes,created:20201206193352022,description:Code consists of evergreen notes that can be understood and executed by a computer.,es:likely,modified:20210616232505808,tags:Code PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Code consists of executable EvergreenNotes. Or, more precisely, its the type that is executable by a computer, rather than a human brain. There is a CodeDataEquivalence: code is not ontologically different as we often treat it, except that its in a format that can be easily and unambiguously understood by a computer.\n\nTiddlyWiki, or any sufficiently advanced knowledge management tool, makes it possible to make the structure of your notes into code, so that they can be more straightforwardly reused|DryPhilosophy in different contexts.\n\nI am not sure if all this suggests that more evergreen notes should be code, or that more code should be evergreen notes, or neither. But it seems worth pointing out.\n\nRelevant source: ManualWorkIsABug2018.},{title:ExecutableLineNoise,created:20200712034320416,modified:20200712034503453,tags:Humor Code Public Idea,type:text/vnd.tiddlywiki,text:Perl is often jokingly called \executable line noise\ because its syntax is so strange and uses so many weird symbols. If intentionally obfuscated, it basically //could// masquerade as line noise; but then maybe thats not fair to Perl, because theres the International Obfuscated C Code Contest|https://www.ioccc.org/ too, and C has never been blamed for having bad syntax (though its been rightly blamed for just about everything else).},{title:ExecutionersSong1979,author:Mailer,bibliography:LifetimeReading,caption:The Executioner’s Song,created:20210703170128000,genre:History/Literature,medium:book,modified:20210705214034671,priority:3,readstatus:unread,recommended-by:Time,tags:Source Public,type:text/vnd.tiddlywiki,year:1979},{title:ExistenceTrophy,created:20200322032908001,creator:soren,es:mythological,modified:20210611030213600,modifier:soren,tags:Psychology Humor Public Idea,type:text/vnd.tiddlywiki,text:I once saw a comic strip in which a Millennial (once maligned for being used to receiving “participation awards”) has become a grandparent and is talking to a child of his GenZ child. The grandchild has just brought home an “existence trophy.”\n\n“Back when I was a kid,” the grandfather says, “you had to //participate// to get a trophy!”\n\nThen again, ~GenZ++ers probably ParticipateInAllTheThings anyway.\n\nA satirical example of GetOffMyLawn.\n\nCompare NegativeInterestRates for the ability to go even lower than was thought possible.},{title:ExperienceOfColorblindness,created:20210113233919367,creator:soren,description:On the subjective experience and challenges of being red-green colorblind.,es:confident,modified:20210917154933867,modifier:soren,tags:Public Index Favorites,type:text/vnd.tiddlywiki,text:This tiddler expands on the subjective experience and effects of being red-green colorblind|ColorblindPerson.\n\n!! Experience of colors\n\n\u003C$details summary\Confusing colors\>\n\n{{ExperienceOfColorblindness/ConfusingColors}}\n\n\u003C/$details>\n\u003C$details summary\Factors that make identifying colors easier or harder\>\n\n{{ExperienceOfColorblindness/Factors}}\n\n\u003C/$details>\n\u003C$details summary\My whiteboard palette\>\n\n{{ExperienceOfColorblindness/WhiteboardPalette}}\n\n\u003C/$details>\n\u003C$details summary\Indeterminate colors\>\n\n{{ExperienceOfColorblindness/IndeterminateColors}}\n\n\u003C/$details>\n\n\n!! Challenges in daily life\n\n\u003C$details summary\What color is this!?\>\n\n{{ExperienceOfColorblindness/WhatColorIsThis}}\n\n\u003C/$details>\n\u003C$details summary\Driving\>\n\n{{ExperienceOfColorblindness/Driving}}\n\n\u003C/$details>\n\u003C$details summary\Color-coding\>\n\n{{ExperienceOfColorblindness/ColorCoding}}\n\n\u003C/$details>\n\u003C$details summary\Laser pointers\>\n\n{{ExperienceOfColorblindness/LaserPointers}}\n\n\u003C/$details>\n\u003C$details summary\Miscellaneous\>\n\n{{ExperienceOfColorblindness/Miscellaneous}}\n\n\u003C/$details>},{title:ExperienceOfColorblindness/ColorCoding,created:20210917142637383,creator:soren,es:confident,modified:20210917153021751,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Most color-coded systems are actually fine; if there are only a few colors involved, I can usually tell them apart. I might have to explicitly learn what color name to use for a given color at the beginning, but then Im fine. If I get to pick the colors, Im always going to be fine.\n\nHowever, its certainly possible to pick colors I cant tell apart, and there are a few common systems that have particularly bad ones:\n\n* People often pick bad colors for graphs and diagrams. Color-blind people cant distinguish as many colors in general, so anything that requires a large number of colors will be challenging no matter what, especially since there are a wide range of different color-vision defects with different sets of confusing colors, but I have encountered diagrams with as few as two colors that I couldnt tell apart. (My color-blind friends and I often share these really silly examples with each other and laugh about it.)\n** //Tip:// This is an easily avoidable failure of design! If youre making a graph or diagram, do yourself a favor and find a scientifically-designed color-blind-friendly palette on the web (or built into many graphics programs nowadays) -- this will get you the best possible color discrimination for everyone on the planet with almost no effort on your part.\n\n* Some forms of telephone and network wiring are color-coded confusingly and possible to mix up, especially in the bad lighting thats common in places wires are being installed. (This would be largely avoidable if the wiring was being designed today when theres more awareness of color vision problems. I would like a word with whoever decided to make thinly-striped white/red and white/dark-green wires in Cat5 cable!) Ive DIYed some of these before, but Ive asked someone else to check my connections before punching them down. Resistors and transformers are also color-coded in complicated schemes with a broad rainbow of colors; I havent done much small electronics work, so I cant speak to how much of a problem this is in practice. Most household electrical wiring is done with neutral and easily distinguishable colors, so at least I dont have to worry about frying something while doing basic repairs.\n\n* Multi-color LED lights on consumer electronics that light up red, green, and/or yellow and have distinct meanings in each state are a real pain. Red usually looks dimmer, so I can sometimes tell that apart once Im familiar with the device and how it usually appears, but green and yellow look almost the same when theres nothing to compare with, and even with red and green I dont appreciate squinting at my device and take guesses about what color it is.},{title:ExperienceOfColorblindness/ConfusingColors,created:20210917142534308,creator:soren,es:confident,modified:20211120165711072,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,value:yes,text:Despite the name, most people who are red-green color-blind dont mix up pure red and green particularly often. I sometimes confuse extremely dark greens with reds, but most randomly selected pairs of red and green will be easily distinguishable.\n\nRed-green colorblindness can be caused by seeing either less red than normal or less green than normal. I see less red than normal (“red-weak” or “protanomaly”), so the most commonly confused pairs of colors for me are those where the second color differs from the first entirely or mostly in the addition of a small amount of red light. (Since were dealing with the light that hits your eyes, the colors at issue are additive-process and the primary colors are red, green, and blue. This is a simplification because only some sources of light -- e.g., artificial displays -- actually emit combinations of different colors of light to produce colors, while others just produce pure light of a certain wavelength, but it turns out to work well as a model.) These pairs are blue and purple, green and orange, green and yellow, green and brown, and pink and gray.\n\nFor red-weak people like me whose eyes respond to red light much more weakly than people with normal color vision, pure red additionally appears dimmer, a phenomenon called “red dimming.” This both makes red things less obvious (they never pop out of the background like I understand they do to most people; yellow and blue are both significantly more effective at this), and makes it possible to confuse dark reds with brown or even black.\u003C\u003Cfnote \\\\nSurprisingly, people who are green-weak dont suffer from “green dimming” in the same way. This is because, through some quirk of evolution, normal human eyes respond twice as well to green light as any other type of light, so losing some ability to see green still doesnt make green particularly hard to see. For this reason, red-weakness usually produces more functional impairment; many mildly green-weak people dont even know theyre color-blind unless they take a colorblindness test.\\\>>\n\nThis said, most colors even within these ranges are still //distinguishable// from each other; its just more likely that near the edges of the color boundaries, well fail to assign the correct commonly-accepted color name to them. There are also pairs of colors that look different to people with normal color vision that are nearly or totally indistinguishable to us, but its comparatively rare for this to be the cause of a communication problem except in complicated color-coding schemes with more than a few colors.\n\nI think I am able to assess my degree of certainty about whether I have the correct color name with reasonable accuracy (this is quite useful since you know whether you can use the color name without risking confusing someone!), but I havent actually tested this scientifically, so maybe its illusory for all I know. I can remember being able to do this as early as elementary school.\n\nHere are a few examples of color samples I can and cant assign accurately (all pairs of color splotches are presented in the same order as the headings):\n\n!!! Blue/purple\n\n* Not a problem: \n** \u003C\u003Ccolorsplotch #3366ff>> \u003C\u003Ccolorsplotch #880088>> (dark purple is more obviously purple than light purple)\n* OK:\n** \u003C\u003Ccolorsplotch #0000ff>> \u003C\u003Ccolorsplotch #880088>> (can still tell which is which, but have to squint at it)\n\n* Bad:\n** \u003C\u003Ccolorsplotch #3366ff>> \u003C\u003Ccolorsplotch #9933FF>> (these look almost identical)\n** \u003C\u003Ccolorsplotch #0066ff>> \u003C\u003Ccolorsplotch #cc00ff>> (these too)\n** \u003C\u003Ccolorsplotch #3366ff>> \u003C\u003Ccolorsplotch #6600ff>> (I might be inclined to say the right is blue and the left is purple if told its one of each)\n** \u003C\u003Ccolorsplotch #2200ff>> \u003C\u003Ccolorsplotch #9966ff>> (these too)\n\n!!! Yellows, reds, and pinks\n\n* I could believe this is yellow, in isolation (next to an actual yellow, it would be clear):\n** \u003C\u003Ccolorsplotch #cccc00>>\n\n* I could mistake this for brown:\n** \u003C\u003Ccolorsplotch #003300>>\n\n* I could mistake this for gray:\n** \u003C\u003Ccolorsplotch #FF9999>>\n\n* In the wrong light I could be tricked into thinking the green is on the left and the red is on the right:\n** \u003C\u003Ccolorsplotch #ff0000>> \u003C\u003Ccolorsplotch #004400>>\n\n!!! Red/green\n\n* These are clear (though I might guess the top green was yellow):\n** \u003C\u003Ccolorsplotch #ff0000>> \u003C\u003Ccolorsplotch #00ff00>>\n** \u003C\u003Ccolorsplotch #ff0000>> \u003C\u003Ccolorsplotch #009900>>},{title:ExperienceOfColorblindness/Driving,created:20210917142631138,creator:soren,es:confident,modified:20240524051357153,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:This is probably the most common question about being color-blind, so its worth taking a moment to explore beyond the one-sentence explanations that are often thrown around.\n\nAs far as signs go, the color is a purely secondary cue that helps identify the type of sign. So if all the signs suddenly turned black-and-white, everyone would still be able to drive|Driving fine, because there are no traffic signs in any jurisdiction Im aware of that are the same except for the color. So these arent a problem (and in the US at least the standard colors are bright and distinct and I dont have a problem with any of them anyway).\n\nOrdinary stoplights require a bit more attention for color-blind people at times but are not generally dangerous, especially since in recent years most traffic authorities have intentionally migrated towards shades of red, yellow, and green that are easier for people with a wide range of vision conditions to distinguish.\n\nIn good lighting conditions with traffic lights that arent flashing, I dont normally have any trouble telling the colors apart. In addition, anyone always has the option of checking which position is lit up if in doubt (some people apparently have never noticed this, but reds are always on top or at the left, yellows in the center, and greens at the other end).\u003C\u003Cfnote \\\\nOne bizarre exception in Syracuse|https://www.roadsideamerica.com/tip/14218 notwithstanding.\\\>>\n\nIn adverse lighting conditions, like at night or with the sun shining on or behind the traffic light, its harder to tell colors apart //and// harder to see the outline of the signal backboard to figure out which position is lit, so it can get a little dicier. In such cases, I occasionally struggle to distinguish red and yellow.\u003C\u003Cfnote \\\The green and the red differ so much in luminosity for me that theyre impossible to mix up, since reds appear darker to me than other colors. The yellow and green are sufficiently distant that those are never a problem either.\\\>> However, unless you are driving with an utter lack of situational awareness, yellow is easy to identify in plenty of time to react appropriately even under these conditions, because it lasts no more than a couple of seconds before changing to red:\n\n* //If you first noticed the light when it was green and now its changed to yellowishred//: Its yellow, since the light never goes directly from green to red.\n* //If you first noticed the light when it was yellowishred//: Its either red already or it will be long before you get there, since you only just noticed the light, so let off the gas and prepare to stop. Now wait five seconds and see if it changes color:\n** //If it changes to green (and moves down/right in your field of vision)//: It was red, but youre good to go now (obviously).\n** //If it changes to a different yellowishred (and moves up/left in your field of vision)//: It was yellow and is now red, and youll likely need to come to a complete stop since it only just turned red.\n** //If it doesnt change//: It was and still is red, but since its been red for a while, it might turn green before you get there.\n\n(This sounds complicated when put into words, but its a normal part of the dozens of other things Im looping through while driving, so I dont have to think about it. Nor did I have to consciously figure the rules out and then memorize them when I learned to drive; I just worked it out instinctively. In fact, I had to try a couple of times to identify and correctly write down exactly how my thought process goes.)\n\nSurprisingly, the worse hazard at night used to be entirely missing the fact that there was an intersection at all. The old yellow sodium-vapor streetlamps and the old green lights looked similar to me, and sodium lamps are so monochromatic that they inhibit color vision in general, so the green light could easily blend in with the lamps lining the sides of the street if there was a curve ahead of the intersection.\u003C\u003Cfnote \\\Oddly, the yellow traffic lights were more easily distinguishable from the yellow streetlamps than the green ones for me. As noted above, they also dont stay lit for that long, so the sudden change in color would make the intersection obvious before it became a problem anyway.\\\>> I would then suddenly find a light I hadnt even realized was there was changing to red, or someone was making a right on red from the cross-street, or a pedestrian was jaywalking across my lane, an uncomfortably short distance ahead. Now that most places have switched to a whiter green traffic light, a bluer LED streetlamp, or both, I havent had this problem for a few years.\n\nIts also possible for a red traffic light to appear completely blank to me when the sun is shining directly on it; this happens when the bulb is insufficiently bright to overcome the red-dimming effect|ExperienceOfColorblindness/ConfusingColors. This was a more common problem before the widespread use of brighter LED lights with a tinge of orange in them, but still happens occasionally now. I find the light is always visible by the time I get close to it, and since the correct action even if the light is actually completely out is to come to a complete stop (and then treat it as a stop sign), preparing to stop and waiting for the light to show up works fine.\n\nThe trickiest signals are those permanent single-bulb flashing lights you sometimes see at intersections, where the bulb can be either red or yellow to indicate “stop” or “proceed with caution.” The flashing makes it harder to discern the color, there are no positional cues, and the color never changes, so if you cant tell the color you are really SOL. Nowadays they usually put up a supplemental STOP sign on the direction(s) that are flashing red, but if Im encountering one of these intersections for the first time and I dont see any signs going either direction, I watch other drivers very closely to make sure my assessment of the color is accurate, or if someone else is riding with me, I ask them to confirm. If I was totally alone both inside and outside the car and I really couldnt tell...well, Ive been driving for more than 10 years and that has never happened, but I would just assume it was red and stop, or better yet take an earlier turn and go around the intersection. Someone behind me might honk, but oh well.\n\nSince I experience red dimming|ExperienceOfColorblindness/ConfusingColors, STOP signs dont “pop” in the way theyre intended to, so I have to spend a little more effort consciously looking for them as I approach intersections. I have not noticed myself running stop signs more than a typical driver (which is to say, very rarely, and only with complicating factors!).\n\nA trivial but still annoying driving issue is when someone is trying to point out a turn and tells me to go “where the blue van just went” or something to that effect. I am pretty much hopeless with car colors more complicated than black, white, or yellow, because theyre so often weird pastel shades. Since indeterminate colors I cant tell apart arent useful ways of distinguishing objects, I usually ignore them altogether until it becomes relevant, so car colors arent part of my situational awareness on the road and I wont have any idea where to start looking.},{title:ExperienceOfColorblindness/Factors,created:20210917142540473,creator:soren,es:confident,modified:20210917151709911,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:For most color-blind people, the //shade// of something is as important a part of its “color” as the hue is, probably because its important in telling colors apart when your ability to distinguish the hues is impaired. I find the shade also has a major impact on whether I can select the color name accurately (see discussion in my whiteboard palette|ExperienceOfColorblindness/WhiteboardPalette section).\n\nPurer, brighter colors are easier to distinguish; dark colors and pastels are both much less clear.\n\nThe same colors can be easy to distinguish and name in some conditions and impossible in others. Some of the relevant dimensions:\n\n* Amount of color: The larger the sample, the easier it is (e.g., a thin red line will appear black, but a red square will be clearly red).\n* Steadiness of color: On screens, traffic lights, or LEDs, a solid light is easier to identify than a blinking one.\n* Ambient lighting: The more light is available, the easier it is to identify colors.\u003C\u003Cfnote \\\Even people with normal color vision see colors better in good light; the cone cells in the eyes that are responsible for distinguishing colors dont work well in the dark. For color-blind people who have the cones of one color performing unusually poorly, any little bit of performance that can be squeezed out helps.\\\>> If Im struggling with printed material, I will often pull up a desk lamp right over my work.\n* Available comparisons: If there are only a certain number of colors something can be, or all the possibilities are visible at the same time, its much easier to match them up. For instance, I might be unable to tell the difference between a yellow and a brilliant green traffic light, but traffic lights never use a green color that can be mixed up with yellow.},{title:ExperienceOfColorblindness/IndeterminateColors,created:20210917142616171,creator:soren,es:confident,modified:20210917153033578,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Color-blind people often go through their life not knowing what color word to use for many things; this is a form of HypoCognition. I think I own some clothes whose color I dont know, for instance. Now, theres a general notion (“thats kind of blueish, but it might be purple”), but for the most part if the color isnt obvious, we just dont use the color as a way of describing the object to ourselves or others.\n\nHowever, were also very good at assigning and remembering colors. If someone tells me what color something I own is, I will probably know what it is forever. I certainly know, e.g., that green beans are green, that dogs are //not// green (even though a few brown dogs look like they could be!), that brightly-colored brick buildings are usually red, and so on.\n\nHeres an interesting incorrect mental model of indeterminate colors I bumped up against the other day. I was reviewing some training material at work, and we were looking at a screenshot of some software program, in which someone had highlighted a particular interface element with a green box. One of my coworkers suggested that the reference to the color of the box in the text (“see the green box”) should be removed (“see the box”) to be less confusing to color-blind people.\n\nThis doesnt make sense! Saying “green” makes it easier for the large majority of people who can easily tell that the box is green, and it doesnt make it even a little bit harder for people who cant, since //theres only one box//. If there were two boxes, green and red, and the color was the only way to tell them apart in the text, that would be a problem -- but you still wouldnt resolve it by removing the reference and just talking about “the box” and ”the box,” youd add additional information, like making one of the boxes into a circle, or mentioning the position of the box or the contents of the box. When theres only one box, you dont need that.\n\nOn the other hand, I can easily see how you could get the notion that adding color references is confusing. If you have normal color vision and someone tells you to “see the green box” and you think the box is red, youre going to go, “Wait a second, what green box?” But if youre color-blind and someone tells you to “see the green box” and you think the box is red, you go, “Oh, the box is green.” Since were used to suddenly learning the colors of things, this is completely unremarkable. (And then well remember that the color shown in this particular box is “green” in this document, so when it inevitably puts a red box, a green box, and a brown box in the same screenshot on the next page without any additional cues, well have a head start on which one is green.)},{title:ExperienceOfColorblindness/LaserPointers,created:20210917143051940,creator:soren,es:confident,modified:20210917143222037,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:For red-weak color-blind people like me, red laser pointers are nearly invisible; the wavelength falls in an area of the spectrum thats almost nonexistent for us. Heres a nifty diagram|https://web.archive.org/web/20191223032432/https://jfly.uni-koeln.de/color/index.html#laser (look at the “red laser” vertical bars and the “protanope” curve). This can make following certain types of presentations challenging.\n\n//Tip:// If you use a red laser pointer in a presentation, especially a large one, theres a non-trivial chance someone in your audience cant see it (about 1 in 100 people are red-weak, so assuming a random sample of people across gender and ethnicity in your presentation, theres a 20% chance among 20 people, a 40% chance among 50 people, a 63% chance among 100 people, an 87% chance among 200 people, and a >99% chance among 500 people). Its safer to use a green laser pointer or even an old-fashioned stick pointer if the space allows (a meter stick works in a pinch). If youre stuck with red, you can increase your odds of being understood by holding the pointer in one place for a moment when you turn it on and explaining verbally where youre pointing it (e.g., “look at the line in the upper-left corner of this graph”), then moving it slowly from there -- its usually possible to follow the pointer once found, but nearly impossible to find it in the first place when theres a large area it could be in.\n\n//Tip 2:// If youre red-weak yourself and attend a lot of presentations, you might consider picking up a green pointer on Amazon for $20 and shoving it in your bag -- this way if you end up struggling to follow a talk where the presenter only has a red pointer, you can offer to lend it to them if the situation allows.)},{title:ExperienceOfColorblindness/Miscellaneous,created:20210917142644811,creator:soren,es:confident,modified:20210917153051586,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Because pink and gray look similar, telling when meat is done can be difficult. I tend to inadvertently overcook anything I cant use a thermometer on (e.g., ground beef). Im not a heavy meat-eater anyway, so this is a pretty minor annoyance for me.\n\n* Finding red berries or (worse) orange flowers is unusually difficult; they blend in with the green foliage.\n\n* Talking about colors, in general, can be momentarily confusing, especially if someone doesnt know youre color-blind and you throw out the wrong color word for something. When talking in person, though, this is normally easy to work around.},{title:ExperienceOfColorblindness/WhatColorIsThis,created:20210917142605665,creator:soren,es:confident,modified:20210917152047677,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Just dont. Im tired of the question and its not even a useful way to understand colorblindness!\n\nThe funniest thing about this question is that people usually point to something whose color is bright, primary, and extremely obvious (the sky, their jeans, the wall). When I was in school, other children would often follow up by asserting that I wasnt color-blind because I got it right. Most adults arent quite so audacious, but theyre still puzzled at times. So just to be clear, being color-blind doesnt, in most cases, mean you are completely unable to see any colors; it means youre limited to seeing about ten thousand distinct colors rather than a million, and as a result there are certain pairs of colors that look clearly different to those with normal color vision, even having different common names, but look confusingly similar or even identical to you. The problem is primarily a communication one -- since your color boundaries differ from other peoples, the colors the world thinks are easily distinguished and chooses for color-coding may be hard to tell apart, and verbal color-based instructions (go under the green sign) might not be usable.\n\nAlso, being color-blind //certainly// doesnt make you mysteriously deaf to or incapable of comprehending all words involving color. I once witnessed someone ask another color-blind person what color the green bean casserole was. He said sarcastically, “Hmm, I dont know, what color are //green// beans?”\n\nMost people with mild color-blindness notice discrepancies quite rarely. Mine is moderate, and I would say I only notice myself struggling with colors once or twice a month. A few everyday tasks are slightly harder (e.g., reading traffic lights), but there are enough effective strategies available for compensating that those become automatic.},{title:ExperienceOfColorblindness/WhiteboardPalette,created:20210917142552593,creator:soren,es:confident,modified:20210917145950004,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Heres the palette I use for drawing diagrams on my virtual whiteboard. I picked these colors because they have a property that none of the default choices had: not only are they all clearly different, but I can easily look at all of the colors and pick the correct color name both on the palette and when looking back at my diagram later, which makes it way easier to talk and think about the drawing.\n\n{{soren-whiteboard-palette.png}}\n\nThe trick to accomplishing this is playing with the shades as well as the hues. For color-blind people, the shades change perception of hues in some weird and complicated way; with well-chosen shades its possible not just to distinguish two different samples from each other but to accurately identify what colors they are, whereas with different shades of the same color it may be impossible to even tell theyre different. Specifically, in this palette the shades I chose dont just make the colors distinguishable from each other, but allow me to look at each color sample and say clearly that it //is green// (or whatever), even without reference to the other colors in the palette. I wish I could tell you how this works.\n\nThe red and orange are a wee bit closer to each other than I would have preferred, but lightening the orange further made it hard to distinguish from green, darkening the red made it hard to distinguish from brown,\u003C\u003Cfnote \\\I dont believe in maroon. It looks straight brown or even black.\\\>> and darkening the green made it hard to distinguish from red, so this is where I left it after half an hour or so of twiddling knobs.\n\nYou might notice Ive arranged the colors in rainbow order as an extra cue -- an automatic habit, not something I strictly need to tell them apart here.\n\nI dont recommend using this palette yourself, as its not guaranteed to work optimally for people with different forms of color-blindness; find a verified color-blind-friendly palette on the web. I occasionally use it in screencasts, but I just aim to avoid saying anything that cant be interpreted without the color information (always a good idea anyway).},{title:ExperienceTiddlyWikiFluency,caption:Experience TiddlyWiki Fluency: Creating a Reading List,created:20210330021543327,medium:video,modified:20210413221929872,readstatus:read,tags:Sink Public TiddlyWikiVideoSeries,type:text/vnd.tiddlywiki,url:https://www.youtube.com/watch?vvsdDs7oOLlg,year:2021,text:Part of my TiddlyWikiVideoSeries.\n\nScreencast I did as a promo for GrokTiddlyWiki, which has gotten an unexpected amount of attention, including (in a quote not quite matching up to some from the AnkiForums days, but still not bad) “This video was shockingly awesome.”\n\nWorks through creating a reading list, including some fairly advanced TW customizations.},{title:ExperimentalHistory,author:MrAdamMastroianni,blogroll:Blogroll,caption:Experimental History,created:20250905203901021,creator:soren,modified:20250905203926045,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.experimental-history.com/},{title:ExperimentalResearchesInElectricity1833,author:Faraday,bibliography:LifetimeReading,caption:Experimental Researches in Electricity,created:20210703170128000,genre:Science,medium:book,modified:20210705214034679,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1833},{title:ExpertsDontMakePlans,created:20200228024622774,es:likely,modified:20210511010632179,tags:Learning Psychology Public Idea,type:text/vnd.tiddlywiki,text:Experts work on pattern recognition and intuition, they dont work on rules and plans. They know more than the rules can tell and they know when to play by the rules and when not to, and they are better able to select the correct course of action in the moment than to predict what the correct course of action will be in advance. Theyre able to use the FlaneurMethod effectively.\n\nThe source describes a study in which CPR experts, new trainees, and teachers were asked to guess whether the CPR performer in various videos was an expert or beginner. The experts correctly answered in 90% of cases, as you would hope. The beginners did about as well as chance, also unsurprisingly. But the teachers did substantially //worse// than chance, getting only about a third of them right -- the reason being that they rated people on adherence to the rules, while the experts rated based on whether they did the right thing under the circumstances, which may or may not be what the rules say.\n\nSource: HowToTakeSmartNotes, pages 65-6.\n\n{{ExpertsDontMakePlans/p||PrivateChunk}}},{title:ExploringTheFuture,created:20211221013655918,creator:soren,description:Move forward into the future with your expectations as general as possible, allowing yourself to see it for what it is rather than what you think it should be.,es:confident,modified:20251001230728838,modifier:soren,reviewed:20230824,tags:Idea PhilosophyOfLife Futurism LifeDirection Public,type:text/vnd.tiddlywiki,text:> Its hard to explore the future when youre living in the past.\n> ---dream P.|PrivatePerson, C.N.|CanonicalNumber 1580\n\n“Living in the past” may sound like something you dont do and dont need to worry about; on its surface it seems like a warning against a particular brand of Escapism that only people who are deeply unhappy in the present or what they imagine the future will be would fall victim to. But I think all people have a tendency to overapply their past experience to the future in a way that makes them pass over what theyre looking for.\n\nObviously, theres a balance to be found here, because the main way that we make progress and develop individual wisdom is learning from the past|ContextStrength! But an excessive focus on the past patterns weve seen can make it difficult to “explore” the future at all. Proper exploration requires applying epistemic humility|IntellectualHumility and rethinking everything you know|ZettelkastenDetailsTrap to really see the thing youre exploring as it is, rather than as a substitute for what youve known in the past. Otherwise youre assimilating the future, or controlling it, not exploring it.\n\nSome of the best advice Ive ever heard on doing something big and new (moving to a new place, starting a new job, whatever) is not to try to turn your new city/job/family/experience into the one you left. These things are all one of a kind, and especially when youre in the liminal, isolated, and tired state that tends to accompany big changes, the temptation is always to try to fill your missing needs by finding exact equivalents of the activities, habits, institutions, and people you used to have -- and sometimes to give up entirely on filling those needs when you cant find anything that matches. But thats impossible; its far more effective to ask what, at root, you are missing|SevenfoldWhy and then find new things in your new place / among your new people that meet the same needs.\n\nIf you dont make an effort to do that, you can easily miss the point, as in the RoadToEmmaus and as expanded upon in MissingBeautyBeforeTheNose. After searching in vain for months or years, you discover what youre looking for was there all along, but you didnt recognize it because you werent looking for the right thing. This is a sort of ConfirmationBias and a manifestation of not knowing what you want|PeopleDontKnowWhatTheyWant; look out for it!\n\nSeek to grok|Grokking the future, not design it.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> By the devil! Baudolino said to himself. This old man is right. The Grasal\u003C\u003Cfnote \That is, the Holy Grail.\>> should be a cup like this one. Simple, poor as the Lord himself was. And for this reason perhaps it is there, within everyones grasp, and no one has ever recognized it because they have been searching all their lives for something gleaming.\n---Umberto Eco|MrUmbertoEco, //Baudolino//, p. 274 (\u003C\u003Crt 6723>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\n\u003C\u003C\u003C\n\\\\nI thought it would be in the city\nOr maybe just out of town\nOr maybe deep in the forest\nWhere nobody else was around ---\n\nI even went into the mountains, love,\nTo the desert, to the ocean, to the farm,\nTurns out it was closer than I ever knew ---\nIt was lying here wrapped in your arms.\n\\\\n\u003C\u003C\u003C\n\n---“Wanderer”, Ruth Moody|MsRuthMoody\n\n\u003C/$m2.x>\n\u003C$m2.x number\3\>\n\n\u003C\u003C\u003C\n\\\\nThe end of all our exploring\nWill be to arrive where we started\nAnd know the place for the first time.\n. . .\nAt the source of the longest river\nThe voice of the hidden waterfall\nAnd the children in the apple-tree\nNot known, because not looked for\nBut heard, half-heard in the stillness\nBetween two waves of the sea.\n\\\\n\u003C\u003C\u003C\n\n---T.S. Eliot|MrTsEliot, //Little Gidding//, mvt. 5\n\n\u003C/$m2.x>\n\u003C$m2.x number\4\>\n\n{{RilkeLiveIntoTheAnswer}}\n\n\u003C/$m2.x>\n\u003C$m2.x number\5\>\n\n> The truth knocks on the door and you say, “Go away, I’m looking for the truth,” and so it goes away.\n> ---//Zen and the Art of Motorcycle Maintenance//\n\n\u003C/$m2.x>},{title:Expression,color:#ff4d00,created:20200122024343147,icon:,modified:20210330024416783,tags:Meta Public,type:text/vnd.tiddlywiki,text:Tag to catalog expressions, cliches, and idioms that might lead to interesting links.},{title:EyesOnTheStreet,created:20211130032829738,creator:soren,description:To make a public space safe and comfortable, encourage people to be there watching whats going on.,es:likely,modified:20211130033318192,modifier:soren,tags:Idea Design Cities Public,type:text/vnd.tiddlywiki,text:Streets are kept safe and comfortable by what MsJaneJacobs in DeathAndLifeOfGreatAmericanCities1961 calls “eyes on the street”: people watching whats going on. These people can be other people walking down the street on their way to go somewhere, people dining or loitering on the sidewalk or in storefronts, nosy residents looking out their upper windows, or anything else that gets eyes on public spaces. It is hard to commit violent crimes, or even nonviolent crimes, when people are watching, and this seems to hold true even 60 years after Jacobs was writing, when people are (I would say) on the whole less willing to intervene in other peoples affairs.\n\nMost people wouldnt deny this. After all, we intuitively feel uncomfortable, or at least guarded, when walking around alone in an urban space where there are few eyes. But designers and many citizens then dont follow this fact to several important conclusions:\n\n* Streets need to be interesting places. If traffic is diverted off the street to tunnels or skyways or back alleys, or nobody is ever walking by or hanging out outside, or everyone drives quickly in and out and through, or in general nothing exciting is going on, nobody will ever be watching the street. The problem will then get worse in a feedback loop|ViciousCircle, because nobody is comfortable being on the street when nobody is watching the street.\n* A street should have a variety of what Jacobs calls “primary uses,” so that people are always watching it at a variety of times. Downtowns that are only used during the day, or dense residential districts that have no corner stores and arent interesting routes to other places, will have eyes on the street at some times and be completely dead at others. In this sense, establishments that people often think would make a neighborhood less safe (e.g., bars) can instead make it safer by ensuring there is always some minimal level of traffic.},{title:FaceTime,created:20230312023857176,creator:soren,modified:20230312023901326,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:FaceUpOrDown,created:20200324025735435,creator:soren,es:mythological,modified:20211121005745595,modifier:soren,reviewed:20250208,tags:Metaphor PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:In DakotaSkye, there is a recurring discussion about whether youd want to be face up or face down during a fatal fall. Do you want to see whats coming and how long you have, or be surprised|SurpriseMe?\n\nNot, of course, that you get to choose, which is not lost on the conversants either.},{title:FactorsInfluencingSexualAttitudes,created:20211204031534706,creator:soren,description:Our understanding of and personal choices about sex are hyperdimensional, and enumerating some of the dimensions can improve our understanding of ourselves and others.,es:likely,modified:20230908140415117,modifier:soren,tags:Idea Identity Sociology Public Sexuality,type:text/vnd.tiddlywiki,text:\\define -() ↔\n\nSex is complicated. We all know that intellectually|KnewItIntellectually, but sometimes have a hard time applying it to problems. I think one of the reasons we get into disagreements or get confused about others experience of sexuality is that we fail to separate all of the factors that make up a feeling of desire, or a pattern of behavior. (On the former, BeingAsexual2019 is worth a read.)\n\nFor instance, we often talk about being “sex-positive|SexPositiveSoren” or “sex-negative,” usually with an associated value judgment attached, viz., people who are sex-negative are prudes and should fix themselves (implying that one particular opinion, which Ive labeled //sinful--neutral--empowering// below, is the persons entire attitude toward sex, and that they believe everyone else should universally have the same attitude). Or we accuse people who call themselves asexual of lying because they sometimes have sex (confusing sexual attraction with libido or desire to reproduce or bonding). Or we interpret being gay as a choice (confusing the voluntary decision of when, where, and with whom one has sex with the involuntary facts of whom one is attracted to).\u003C\u003Cfnote \N.B.: Yes, I am saying that having sex with someone of your own gender is a choice, because it is (assuming were talking about consensual sex). I fully support that choice by both secular and religious paths of reasoning, and demanding that people never act on any of their attractions -- which they did //not// choose and cannot choose to experience -- is unreasonable and unfair. But lets not claim that one cant choose to be celibate if one really wants to, because thats just plain wrong and perpetuates the popular myth that people cant do things|PeopleDontThinkTheyCanDoThings. I actually think its somewhat insulting to say this isnt a choice at all; our ability to choose what to do with our lives, even things neither evolution nor society ever intended, is one of the things that makes us human.\>>\n\nMaybe if youre totally “normal” (straight, cisgender, allosexual, conventionally attractive, neurotypical, interested in anything from flings to marriage, SociologicalQuotationMarks), you dont need to try to separate out these factors to understand yourself -- although Im doubtful; I suspect quite a few people are having sex or not having sex for the wrong reasons because they havent stopped to think about it. But if you want to understand others around you, you should certainly try. Its not just people who are GSRM who you wont understand; you also wont understand people who attach different meanings to sex than you do, many of whom will not appear very different.\n\nHere are just a few different dimensions of personal attitudes toward and experiences of sex that I came up with in a few minutes of thinking (and yes, I am pretty sure that some people exist at all points along each of the spectra -- if one seems unbelievable, maybe that means you didnt realize some people thought differently than you!). Id be willing to bet there are at least as many again as Ive listed:\n\n* Asexual \u003C\u003C->> Superallosexual\u003C\u003Cfnote \\\WTF is //superallosexual//, you ask? I think thats a stupid word too, and I made it up, but I cant think of anything better right now. Asexual means you dont experience sexual attraction; allosexual means you are “normal” on the asexuality spectrum (with at least gray asexuality and demisexuality in the middle, maybe somebodys come up with other options in there too). But for purposes of this list, I think it makes sense to extend the scale further, to cover people who are attracted to almost everyone (within a particular gender or not -- this isnt about gender, so //pansexual// doesnt serve, although it otherwise seems nice!). So those people are superallosexual.\\\>>: To what proportion of people you encounter or know are you sexually attracted, and how quickly does such attraction develop?\n* Hyposexual \u003C\u003C->> Hypersexual: How much libido/sex drive do you have? How often do you want to have sex and how strong is the feeling?\u003C\u003Cfnote \A lot of people think the opposite of hypersexual is asexual, but it isnt (unless you use a different definition than most people who call themselves or others asexual; unfortunately the terms are pretty tangled up here). Asexual is about attraction, or //who// you want to have sex with (viz., nobody); libido is about your drive to do //something// and isnt attached to any particular person. Its totally possible to be attracted to nobody in particular and have a high libido, or to be physically attracted to almost everyone but rarely want to actually have sex once youre in a relationship with someone.\>>\n* Enjoyable \u003C\u003C->> Necessary: To the extent that libido pulls on you, is it just kind of fun when you have sex as a result and you could ignore it if you wanted, or do you feel theres something missing from your life or feel desperate or distracted if you dont get it?\n* Sacred \u003C\u003C->> Profane: How much meaning do you attach to the act of having sex? Does it resonate on multiple levels, making it something you should be careful about, or is it mostly just physical?\u003C\u003Cfnote \Thanks to a recent Reddit comment for bringing this particular dimension to my attention and getting me started on pondering all the ideas in this tiddler.\>>\n* Cynical \u003C\u003C->> Romantic: What are your expectations of romantic and sexual relationships, based on both your personal experience and your model of the world built from other sources?\n* Sinful \u003C\u003C->> Neutral \u003C\u003C->> Empowering: Does having sex in a “not perfectly approved” way\u003C\u003Cfnote \Lets say, PIV sex in the missionary position for the purposes of procreation with a person of the opposite gender and same race and social class, whom you married with the full approval of both peoples families.\>> seem, in your personal value system, philosophy of life|CoherentPhilosophyOfLife, and/or religion|Religion, like a weakness, a sign of success or empowerment, or nothing in particular?\n* Easy \u003C\u003C->> Difficult: Do you have an easily accessible partner? Is it hard for you to find one? This can make a big difference to motivation!\n* Confident \u003C\u003C->> Worried: Mentally and physically, do you feel ready and able to have sex?\n* Interpersonal pleasure \u003C\u003C->> Physical pleasure: Do you mostly enjoy sex because you care about your partner and they care about you, or because it feels good? Obviously for most people its a combination, and the same person might have different priorities at different times, but nonetheless I think people differ importantly on this axis. I would guess this axis correlates strongly with //sacred--profane//, but its not the same thing.\n\nIts not hard to imagine that different combinations of positions on each of these scales make every person more or less unique, and also that people who fall in different places may struggle to understand each other.\n\nSee also PersonalizedViabilityOfPlatonicFriendships.\n\nSlightly orthogonal: sociosexual orientation|https://en.wikipedia.org/wiki/Sociosexuality.\n\n{{FactorsInfluencingSexualAttitudes/p||PrivateChunk}}},{title:FailHelpful,created:20200227154843344,es:confident,modified:20230216041330255,tags:Software Design Public Idea,type:text/vnd.tiddlywiki,text:AgilePhilosophy sources often say that you should FailFast (one important benefit of the IterativeProcess).\n\nThis is useful when designing tools, too: as soon as you can check that somethings valid or possible, do it, so that the user doesnt end up waiting 5 minutes, carefully selecting a bunch of items, or taking some other difficult-to-reverse action before discovering that it would never have worked anyway.\n\nIn this design case, though, its just as important to fail //helpfully//. Failures often lead to messages like \Sorry, something went wrong\ or \Oops!\ or \Asia\ (\u003C\u003Crt 10102>>). Even if it requires restructuring the program, its the programmers responsibility to describe\n\n* what exactly went wrong;\n* how far the process got (is the state different than it was when the unsuccessful action started?);\n* how to fix it.\n\nFirst of all, you have to design well to be able to provide these details! Beyond that, if the error has these things, its easy to fix and only a little bit frustrating. If it doesnt, well, you could be troubleshooting for hours just trying to figure out what the message is about.\n\nCf. MeanTimeToRecovery.},{title:FailureLoad,created:20201201220508083,es:confident,modified:20210516210341368,tags:ScrumMethodology Process Public Idea,type:text/vnd.tiddlywiki,text:The ratio of work created by things failing and needing to be fixed to work created by demand for new functionality or other meaningful value. A measure of ones success at reducing unplanned work|UnplannedWorkThief and TechnicalDebt.\n\nIntroduced as a useful evaluation metric in MakingWorkVisible2017.\n\n\u003C\u003Cremembercz \20210516210440580\\n\t\{Failure load}, as defined by //Making Work Visible//, is the ratio of work created by things breaking to work created by {demand for new functionality/business value}.\>>},{title:FairholmeCampground,created:20250626182644990,creator:soren,modified:20250626182645856,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Fairlearn,created:20200529190715876,creator:soren,es:possible,modified:20220201153724041,modifier:soren,tags:Software Ethics MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:A M.|PrivatePerson tool connected with Azures machine-learning platform which helps see if your model is biased or “unfair” (this, of course, is a complicated definition|ModelFairness and requires human judgment, but the computer can help).\n\nBasically, the tool allows you to pick factors in your data (say, gender or race) that you want to evaluate fairness on, and get an analysis of how the model differs based on that factor, and even more usefully what variables influenced that decision|ModelInterpretability.\n\nEven if you dropped the columns from the model, due to multicollinearity they can still have a powerful effect. (Obviously, only someone not thinking about fairness would feed the “gender” column into a model that they were worried about making unfair to a particular gender. But usually a substantial portion of the difference in gender is captured by other demographic and behavioral data that you might be feeding in.)\n\n\u003C\u003Crememberq \20200529214753820\\n\t\Why is dropping a column you dont want to discriminate on not a complete solution for developing a fair machine-learning algorithm?\\n\t\Much of the variation in that column is often captured by other variables (i.e., multicollinearity) -- especially for the kinds of variables were often concerned about.\>>\n\nOnce youve identified a potential problem, you can mitigate it in several ways.\n\n* Mitigation criteria:\n** Demographic parity\n** Equalized odds\n* Algorithm mitigation:\n** Postprocessing (reweight the existing model in the opposite direction to compensate, like putting glasses on it)\n** Reduction (retrain the model from scratch with different parameters that will mitigate the issue)\n\n\u003C\u003Cremembercz \20200529214932839\\n\t\Fairness issues in a machine-learning model can be mitigated via either {postprocessing (reweighting an existing model)} or {reduction (retraining the model with different parameters)}.\>>\n\nSome of the analysis tools include:\n\n* Different metrics (accuracy, precision, recall, etc.)\n* Pretty graphs about the effects and functions of each variable in the model\n* What-if scenarios (e.g., if I change someones race, does it affect the decision of the model?)\n* Tool for investigating the tradeoffs between accuracy and disparity on a given variable, providing similar models for inspection.\n\nAzure ML saves all the Fairlearn information with the model for future analysis and adjustments.},{title:FairyTale,created:20200206232647091,creator:soren,es:confident,modified:20210909195923030,modifier:soren,refexplorer-starttab:Sources,tags:Definition FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Genre of literature composed of short stories, in the traditional form handed down through an OralTradition, containing some kinds of fantastic elements and often following straightforward and/or canned (but powerful for it) narrative patterns. A form of Mythology.},{title:FairyTalesFromTheBrothersGrimm,caption:Fairy Tales from the Brothers Grimm,created:20200212142432071,creator:soren,format:paperback,isbn:9780143107293,medium:book,modified:20210607011233408,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:various,year:2012,text:Book by MrPhilipPullman containing ~30 favorite Grimm FairyTales in new translations from the German. In my opinion, a real masterpiece of storytelling skill and something thats definitely helped his writing in the years after it. Also a pleasure to read, of course. I read almost the entire thing on the train between Chicago and Minneapolis|EmpireBuilder one year -- it made particularly good transportation reading because you can pick it up and put it down quickly in between stories.},{title:FallibilityOfStatistics,created:20200819034251487,description:Statistics is rarely capable of being an impartial arbiter, though it is often believed to be one.,es:likely,modified:20210613203330206,tags:Science Math Information Psychology Public Idea,type:text/vnd.tiddlywiki,text:Statistics is often used as an arbiter of whether a scientific result is worth anything, or to settle an argument. Many people naïvely think it is an impartial way to do these things.\n\nI submit that statistics is only //very// slightly less fallible than unaided human reasoning...because to do statistics, you still have to make all kinds of reasoned decisions about how to do the statistics. I love FiveThirtyEights political p-hacking demo|https://projects.fivethirtyeight.com/p-hacking/ here -- move a few sliders around, and you, too, can have a statistically significant result for whatever conclusion you like! Of course, p-values are a particularly egregious example of manipulability, but ultimately no matter what methods we use, we cant do statistics without bringing at least some of our own biases and goals into the picture. That may be intentional, or more commonly, subconscious.\n\nI almost wonder if it may be better to treat statistics as a useful way of thinking about data than as a way to actually make decisions.\n\nPoorly used statistics is a critical tool of scientism|ScienceVsScientism, and people uneducated in statistics eat it up.\n\nIn some ways, statistics as a field may be //more// fallible than human reasoning because it provides a veneer of respectability and impartiality that makes you feel more confident than you otherwise would be. (See DataIsDangerous.) This certainly doesnt mean that //perfectly used// statistics is more fallible than human reasoning, but its how people use it that counts.\n\n!! References\n\nHowToLieWithStatistics, MrDarrellHuff, {{HowToLieWithStatistics!!year}}\n\n> Or maybe you think Im wrong too. Could be. Its statistics.\n> ---Prof. Ziegler-Graham, StOlaf, \u003C\u003Crt 5814>>\n\n\u003C\u003C\u003C\nThere are three kinds of lies: lies, damned lies, and statistics.\n\n---anonymous, popularized by MrMarkTwain\n\u003C\u003C\u003C},{title:FallOfMan,created:20210812013336242,creator:soren,description:What, really, does the Fall really mean? Is sin the right way to frame it? What would we be without it?,es:mythological,modified:20250610002116238,modifier:soren,tags:Idea Religion PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:Biblical story in which humanity is cast out of the Garden of Eden, almost at the beginning of time.\n\nAn unusually metaphorically rich story, often compared to other events, perhaps because it touches so many aspects of being human: obedience and disobedience; innocence, its loss, childhood, adulthood; good and evil; what meaning there would have been with no losses or failures|NoMeaningWithoutFailure; why God lets people mess up|ProblemOfEvil; pursuing things that on the surface appear to be bad for us, for the sake of knowing; and probably more Im not thinking about right now.\n\n!! Sin?\n\nThis story is often used to support the doctrine of original sin, but despite my having something of an undeserved soft spot for St. Augustine|MrAugustine, I think his interpretation is B.S. The word //sin// appears nowhere in the text -- neither, Wikipedia points out, “transgression,” “rebellion,” “guilt,” or anything of the kind. Im not entirely convinced there even was a concept of sin at this proto-human moment (if you dont have knowledge of good and evil, can you really be held responsible for doing something wrong?). The closest thing to guilt is Adam and Eve hiding themselves when God returns, and Adam pointing the finger at his wife. Its easy to see that as guilt and disobedience if youre reading with a domination-based lens|DominationVsPartnership, but it also seems possible that theyre merely scared, not sure how to interpret their new knowledge, or any number of other things.\u003C\u003Cfnote \Ill happily allow that theres a very strong domineering parent/child relationship here though -- which is hardly a surprise given the culture the story is a product of. If so, though, it seems humanity has chosen to reject that relationship as far as we can, seeking our own knowledge and autonomy in our own way, and that only looks like a bad thing if you accept the same worldview.\>>\n\nThere is a consequence, announced by God, but is that //punishment//, or is it merely the unavoidable result of a choice? I see the whole thing as more of an origin myth than anything else, and one that simply says how things happened without commenting much either explicitly or implicitly on its moral value. That people see that as a punishment says a lot about them (and their culture) psychologically.\n\nThe text doesnt identify the serpent with the devil / Satan, either. My Lutheran Study Bible -- which given its doctrinal alignment, does not exactly have a vested interest in pointing this out -- notes that God has only a few verses prior explicitly created all of the animals, including this serpent. Its part of the whole system as designed! So personally, I suspect God planned what happened, or at least knew it was likely. Could such an intelligent and powerful being really create such curious, wily things as humans, tell them “oh yeah, do anything you want EXCEPT this one thing,” and not //know// they would try doing that thing? (Cmon God, dont stuff beans up your nose|DontStuffBeansUpYourNose.) It was a straightforward choice: stay sickly-sweet perfect, or accept the capacity for evil and failure in return for autonomy and wisdom?\n\nIm not sure quite what to make of this, but I note also that God appears to have been dishonest, or at least misleading, in a way that seems morally troublesome. God says that the day humans eat of the fruit, they will die, but of course they do not; the serpent is right. Sure, perhaps only a metaphorical death is meant, a death of innocence, but it sure doesnt seem like they understood that if so. And the true consequences were presented only after the fact! Then again, perhaps there was no point in telling the truth, because you would have to experience both ways|HaveToExperienceItToUnderstand to know what you were choosing between, and theres no way to go back to //not// knowing good and evil once youve experienced it. Informed consent for either trajectory is impossible; you would need to know your other options, and you cannot.\u003C\u003Cfnote \C.S.|PrivatePerson and I recently discussed whether it would be possible for a soul to consent to being created, and I came to this same conclusion. Supposing for the sake of argument that the possibility exists for consciousness pre-existence, or perhaps at a zero-length moment on the cusp of existence: with no experience of anything yet, how could you know anything of what youd be in for if you accepted?\>> So maybe the point instead was to say something that would test the nature of humans; thinking we might be risking it all, do we still want to keep exploring? Of course the answer was yes.\n\nDespite the apparent loss in being kicked out of Paradise, Im not sure we could consider ourselves human at all without having “fallen.” Some people might appreciate quietly living in Paradise, but its the folks who refuse who make history and the human spirit what it is. Im pretty sure Id refuse. For all the attractiveness of Paradise at our worst moments, I fear the prelapsarian Adam and Eve would appear unrecognizable psychologically -- even damaged -- if we were to meet them today. What would you talk about all day? Could you really have good art with no experience of pain or difficulty? What would stories look like? Whats the point of being alive if there are no problems to solve? The questions go on.\n\n\n!! References\n\n\u003C$m2.x number\1\>\nMilton|MrJohnMilton, in his strange mix of orthodoxy and subversion, ends ParadiseLost:\n\n\u003Cblockquote>\n\\\\nSome natural tears they dropp’d, but wip’d them soon;\nThe World was all before them, where to choose\nTheir place of rest, and Providence their guide:\nThey hand in hand with wand’ring steps and slow,\nThrough Eden took their solitary way.\n\\\\n\u003C/blockquote>\n\nSounds like a mighty good deal to me, all things considered! (I wrote a paper|hopefulness-and-power.pdf that touches on this in college, because of course I did.)\n\n\u003C/$m2.x>\n\u003C$m2.x number2>\n\n\u003C$details summary\Spoilers for His Dark Materials\>\n\nMrPhilipPullmans HisDarkMaterials combines aspects of the loss of innocence from this story and the MarionetteTheater parable to explore an alternative theology in which people aim to return to their original state of innocence, but a wiser, deeper one -- by overthrowing God, building the Garden themselves, and becoming godly, rather than using Gods version. Or, as it were, to go all the way around the Earth and re-enter the Garden by the back gate. The Fall was a local|LocalMaximum loss along the way, the truer paradise comes only through struggle.\n\n(I wonder if you could identify this re-entry, becoming godly, with eating from the Tree of Life, the potential for which God states as the reason Adam and Eve must leave; if they ate from that as well, they would live forever. There is this ancient theme of gods taking action to prevent mortals from becoming like them; perhaps another interpretation is that only with the complete journey will we be ready to accept it.)\n\nThis passing from innocent grace to fallen to recovered with adult wisdom is also exactly what Lyra is told about her communion with Dust at the end of HDM. Shes lost the ability to read the alethiometer by grace, and shell be able to regain it only by years of focused effort; but her ability will be much deeper on the other side.\n\nSee also greenness and whiteness|https://ap.sorenbjornstad.com/#post-65.\n\n\u003C/$details>\n\n\u003C/$m2.x>\n\u003C$m2.x number3>\nA more orthodox (and rather dislikable) but quite related take is that the Fall opened the way for ultimate redemption by Jesus|MrJesusChrist, which is better than everything that came before.\n\n\u003C/$m2.x>\n\u003C$m2.x number4>\n\n\\\\nSo they kicked you out of paradise,\nGrinned and locked the garden gate.\nWhat those devils called your greatest sin\nGabriel and I called your great escape.\n\n---“Pilgrim (You Cant Go Home)”, David Rawlings|TheDavidRawlingsMachine\n\\\\n\n\u003C/$m2.x>},{title:FamiliarizingMetaphor,created:20200708003911637,es:likely,modified:20210509005330873,tags:Neuroscience Learning Metaphor Public Idea,type:text/vnd.tiddlywiki,text:> Understanding a thing is arriving at a familiarizing metaphor for it.\n\n---MrJulianJaynes, Jaynes1971\n\nThe most critical part of learning anything is associating it to other things you know (ElaborativeEncoding) -- finding a metaphor to say, hey, I can think of this thing as this other thing with a few additional touches. If you fail to do this because you have no BasicLearningFoundation, you will forget it; arguably, you will never properly understand it at all. Further, even if you can remember it, a weak metaphorical foundation means it will likely have low retrieval strength|StorageVersusRetrievalStrength, thus effectively no value.\n\nOne of the reasons memory remains critical even in the age of TheGoogle.},{title:FarewellToArms1929,author:Hemingway,bibliography:LifetimeReading,caption:A Farewell to Arms,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034692,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1929},{title:FarFromTheMaddingCrowd,author:Hardy,bibliography:LifetimeReading,caption:Far from the Madding Crowd,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034700,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:FargoNorthDakota,created:20200321223505136,creator:soren,modified:20240509143732199,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:FastMail,created:20201130170027004,creator:soren,es:confident,modified:20210911140314574,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular cheap-but-paid email service.},{title:FathersAndSons1862,author:Turgenev,bibliography:LifetimeReading,caption:Fathers and Sons,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034710,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1862},{title:Faust1829,author:Goethe,bibliography:LifetimeReading,caption:Faust,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034728,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1829},{title:FavoriteLyrics,created:20211121024840042,creator:soren,es:mythological,modified:20250617160751739,modifier:soren,tags:Idea PersonalMythology Music Public,type:text/vnd.tiddlywiki,text:\\define .quote(text, title, artist, link:\\, fnote:\\)\n\u003C\u003C\u003C\n\\\\n$text$\n\u003C$list filter\\u003C__link__>!isblank\ variable_ emptyMessage\—“$title$”, $artist$\>\n---“\u003Ca href\u003C\u003C__link__>> class\tc-tiddlylink-external\>$title$\u003C/a>”, $artist$\u003C$list filter\\u003C__fnote__>!isblank\>\u003C$macrocall $namefnote note\u003C\u003C__fnote__>> />\u003C/$list>\n\u003C/$list>\n\\\\n\u003C\u003C\u003C\n\\end\n\nA collection of particularly creative, evocative, or beautiful lyrics I come across. I try to include YouTube links.\n\n\u003C\u003C.quote\ntext:\\\Over rich and over poor,\nOver harmony and war --\nO the sky goes all the way home!\\\\ntitle:\Homeland\\nartist:\Coope, Boyes & Simpson\\nlink:\https://www.youtube.com/watch?vlsE7N_-b7yk\>>\n\n\u003C\u003C.quote\ntext:\\\No good times,\nNo bad times,\nThere’s no times at all, just the //New York Times//,\nSittin’ on the windowsill near the flowers.\\\\ntitle:\Overs\\nartist:\Simon & Garfunkel\\nlink:\https://www.youtube.com/watch?v_uIrXfVtXbI\>>\n\n\u003C\u003C.quote\n\\\I broke the barroom mirror\nand left it there for dead!\\\\ntitle:\The Clover Saloon\\nartist:\Connie Converse\\nlink:\https://www.youtube.com/watch?vy6WlAq-fDzE\>>\n\n\u003C\u003C.quote\n\\\But since it fell unto my lot\nThat I should rise and you should not,\nI’ll gently rise and I’ll softly call,\nGoodnight, and joy be with you all.\\\\ntitle:\The Parting Glass\\nartist:\traditional\>>\n\n\u003C\u003C.quote\n\\\The poor boy changes clothes and he puts on aftershave\nTo compensate for his ordinary shoes.\\\\ntitle:\Diamonds on the Soles of Her Shoes\\nlink:\https://www.youtube.com/watch?v-I_T3XvzPaM\\nartist:\Paul Simon\>>\n\n\u003C\u003C.quote\n\\\Claim my name from the lost and found\nand let me believe this is where I belong.\\\\ntitle:\My Traveling Star\\nlink:\https://www.youtube.com/watch?vxU2Yuga9gjs\\nartist:\James Taylor\>>\n\n\u003C\u003C.quote\n\\\I asked if I am mouse or man --\nThe mirror squeaked, away I ran.\\\\ntitle:\Seven Days\\nlink:\https://www.youtube.com/watch?vpG7_gceIFL4\\nartist:Sting>>\n\n\u003C\u003C.quote\n\\\Arise, O Sun so longed for,\nO’er this benighted sphere!\\\\ntitle:\Rejoice, Rejoice, Believers\>>\n\n\u003C\u003C.quote\n\\\So I would choose to be with you,\nThat’s if the choice were mine to make --\nBut you can make decisions too,\nAnd you can have this heart to break.\\\\ntitle:\And So It Goes\\nlink:\https://www.youtube.com/watch?vFHO6a2H-pqY\\nartist:\Billy Joel\>>\n\n\u003C\u003C.quote\n\\\It’s six o’clock already, I was just in the middle of a dream --\nI was kissin’ Valentino by a crystal blue Italian stream.\\\\ntitle:\Manic Monday\\nlink:\https://www.youtube.com/watch?vSsmVgoXDq2w\\nartist:\Prince/The Bangles\>>\n\n\u003C\u003C.quote\n\\\I’ve only my heart, and that will not float,\nSo please don’t deny me, and bring me a boat.\\\\ntitle:\Bring Me a Boat\\nlink:\https://www.youtube.com/watch?v7IhDNL3cJbg\\nartist:\Kate Rusby\>>\n\n\u003C\u003C.quote\n\\\Saw my life this morning\nLying at the bottom of a drawer.\\\\ntitle:\Almost Home\\nlink:\https://www.youtube.com/watch?vgTwLb7baMPs\\nartist:\Mary Chapin Carpenter\>>\n\n\u003C\u003C.quote\n\\\The window’s accusin\nThe door of abusin the wall.\\\\ntitle:\Be Here to Love Me\\nlink:\https://www.youtube.com/watch?v6aqekJ5VIx8\\nartist:\Norah Jones\>>\n\n\u003C\u003C.quote\n\\\You stay in love like vacation homes.\\\\ntitle:\Someone\\nartist:\Kelly Clarkson\\nlink:\https://www.youtube.com/watch?v1Pr_ox9KHjw\>>\n\n\u003C\u003C.quote\n\\\When we make love\nThats when I remember\nThat were dancing on Gods holy ground.\\\\ntitle:\Its How You Hold Me\\nartist:\Alice Howe\>>\n\n\u003C\u003C.quote\n\\\Its been two long years now\nSince the top of the world came crashing down,\nAnd Im getting it back on the road now,\nBut Im taking the long way.\\\\ntitle:\The Long Way Around\\nartist:\The Chicks\\nlink:\https://www.youtube.com/watch?vB1qgazBdKj8\>>\n\n\u003C\u003C.quote\n\\\Come on, my sweet old girl,\nId bet the whole damn world\nThat were gonna make it yet to the end of the row....\nHard times aint gonna rule my mind no more.\\\\ntitle:\Hard Times\\nartist:\Gillian Welch|MsGillianWelch\\nlink:\https://www.youtube.com/watch?vk35haKwqY14\\nfnote:\https://ap.sorenbjornstad.com/#post-66\>>\n\n\u003C\u003C.quote\n\\\Im nine years into a five-year plan.\\\\ntitle:\The Long Game\\nartist:\Della Mae\\nlink:\https://www.youtube.com/watch?vvGWMsyJa208\>>\n\n\u003C\u003C.quote\n\\\If its a race we were running, youve already won --\nShot me with the starting gun.\\\\ntitle:\The Damage\\nartist:\The Secret Sisters\\nlink:\https://www.youtube.com/watch?vJdrufPJdiSU\>>\n\n\u003C\u003C.quote\n\\\When did all the good times\nTurn to hard lines on my face?\\\\ntitle:\My Blinded Heart\\nartist:\Watchhouse\\nlink:\https://www.youtube.com/watch?v56VVHzGzq4g\>>\n\n\u003C\u003C.quote\n\\\We built our base camp on avalanche terrain\nLooking back I think the wreckage was built into the frame\\\\ntitle:\Juliet\\nartist:\Antje Duvekot\\nlink:\\>>},{title:Favorites,color:#6c6cff,created:20210623014833933,creator:soren,icon:$:/core/images/list-bullet,modified:20250204202119518,modifier:soren,refexplorer-hide:true,tags:Meta Public,type:text/vnd.tiddlywiki,text:I consider these ideas or sections particularly complete, important, insightful, intriguing, and/or beautiful. You might consider them the “best of” MosaicMuse (according to me).\n\n--------\n\n\u003Cdl>\n\u003C$list filter\tagFavoritessort\>\n\t\u003Cdt>\u003C$link/>\u003C/dt>\n\t\u003Cdd>{{!!description}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>},{title:FavoritesCompareIncomparables,created:20200602150430265,creator:soren,es:likely,modified:20211114211224011,modifier:soren,tags:Identity Reasoning Public Idea,type:text/vnd.tiddlywiki,text:I hate trying to produce lists or statements of “favorite” items. Feel free to criticize me for being indecisive, because thats true for sure, but I think theres something curious about the whole notion. Say Im supposed to identify my favorite book. Then think about how many different kinds of books there are. There are probably a couple dozen books I think are really great, and all of them are good in //different// ways. I was using a media-ranking tool the other day, and was asked to say whether I thought NineteenEightyFour was better than Matilda. This question just doesnt have an answer! The similarity between these two books basically stops at the point where they are stories written on printed pages.\n\nSomething similar applies to other categories as well, its not just books by any means. Maybe the sorting anecdote in the first paragraph is a particularly apt analogy. Sorting, as a mathematical algorithm, is generally comparison-based -- it operates by working through the list, comparing individual elements, and swapping them in some way if theyre in the wrong order. Is 2 bigger than a cat? How does 5 kg compare to 30 mph? Come on, cant be that hard!\n\nI dont know that shrinking the categories eliminates my philosophical objection, either, since categories are so artificial -- though it can certainly make the choice easier.},{title:FearAndTrembling1843,author:Kierkegaard,bibliography:LifetimeReading,caption:Fear and Trembling (+),created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034736,priority:3,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1843,text:Length: !\n\nCopy: P},{title:FearCulture,created:20200226205942018,modified:20200226210041312,tags:Process InterpersonalRelations UnicornProject Public Idea,type:text/vnd.tiddlywiki,text:System which has no or negative PsychologicalSafety. The opposite of a healthy environment: fear may keep people in check, but it actively works against DevOps, LeanMethodology, ContinuousImprovement, motivation...the list goes on and on.},{title:FeaturesWhileTheWorldBurns,created:20200220124444017,modified:20200325231310282,tags:Anecdote UnicornProject Process Code Public Idea,type:text/vnd.tiddlywiki,text:In UnicornProject, features are prioritized over everything else, resulting in an immovable mountain of TechnicalDebt that prevents anything useful at all from happening. In a caricature of the reverse of DevOps (OpsDev?) thats probably scarily accurate in some real-life places, this goes to such an extent that when the deployment fails to the point that people have been in the office for 48 hours straight, some developers are just there during normal business hours, sitting at their desks writing features while the world burns – deployment isnt their responsibility, and they still have targets to meet!},{title:FederalistPapers1788,author:Jay/Madison/Hamilton,bibliography:LifetimeReading,caption:Federalist Papers,created:20210703170128000,genre:Politics,medium:book,modified:20210705214034750,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1788},{title:FeelingBadAsAgentOfChange,created:20221002142523403,creator:soren,description:Is feeling bad about something functionally useful?,es:possible,modified:20221116170849724,modifier:soren,tags:Idea Psychology LifeDirection PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:OpenQuestion: Is it helpful or preferable to feel bad about a problem you have or something you havent accomplished, as a way of encouraging yourself to make a change? Or is it better to always seek contentment with the present state of things, and improve on top of that when you can? The former may be more effective and could create a slightly better sense of accomplishment at the end; the latter will definitely feel better in the meantime and could work fine anyway (or maybe even better?).\n\nPersonally, and frustratingly, I suspect the answer is different for different combinations of person and situation, leaving no obvious right method of approaching everything. That said, many long-standing philosophies and wisdom traditions (e.g., Stoicism and several Eastern traditions) seem to suggest the latter approach, which seems a strong point in its favor despite a vague intuitive feeling I have that it could be less effective.},{title:FelixCulpa,created:20200401230654254,es:confident,modified:20210731155320185,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Happy fault: when something goes other than as intended, but produces a better result than that intention. AccidentsMakeTheWorldGoRound is a more general version.\n\nA 2019-ish Internet meme describes this with the legendary error message, “Task failed successfully.”},{title:FewNewSolutionsUnderTheSun,created:20200316215906634,es:likely,modified:20210515035307204,tags:Creativity Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Most problems are not actually solved by creating a completely new solution. Rather, theyre solved by reducing the problem to an existing one with an existing solution (perhaps needing slight modification to work).\n\nExamples:\n\n* Most proofs that a problem is in NP do this by reducing the problem to another one in the set.\n* High-level software development involves writing \glue code\ that reduces a problem to something that can be solved with available libraries and data sources.\n** Similarly, solving more mathy problems normally occurs by identifying an existing algorithm thats a good fit.\n* Mechanical problems are solved by identifying what part is causing an issue, then replacing that part according to manufacturers recommendations.\n\nThis realization makes ContextScrambling a big part of meaningful problem-solving.\n\nSee also MentalModel -- much thinking occurs by reducing a problem to these.\n\nA related issue is that many problems cant actually be eradicated: see ConservationOfProblems.\n\nSource: HowToTakeSmartNotes, p. 127.},{title:FeynmanLecturesOnPhysics1964,author:Feynman,bibliography:LifetimeReading,caption:The Feynman Lectures on Physics,created:20210703170128000,genre:Science,medium:book,modified:20210705214034758,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1964,text:Length: !!},{title:FictionalFalsehoods,created:20200115031524115,creator:soren,es:likely,modified:20210917013942578,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:After Maier2020: It seems there are multiple ways things in fiction can be true or false.\n\n* A falsehood told by a character (vaguely related to dramatic irony, perhaps?)\n* Objectively false with respect to the fictional world: e.g., from Maier, ”Frodo has wings.”\n* ImaginativeResistance.\n* PlotHoles (somewhere between objective falsehoods and completely beyond SuspensionOfDisbelief).\n\n...Others?\n\n\nSee also WhatMakesALie.},{title:FictionNoteKeeping,created:20210618012012487,creator:soren,es:possible,modified:20220524013303025,modifier:soren,tags:PersonalDocumentation Information Reading FictionTheory Public Stub Idea,type:text/vnd.tiddlywiki,text:How can we improve our understanding of fiction by taking notes on it|WritingIsThinking?\n\n!! Existing work\n\nVery little -- more than in SpacedRepetitionForFictionResearchQuestion, but not a lot more and still less than I expected. I found three kind of interesting threads:\n\n* https://thefocuscourse.com/build-your-own-alternate-index-of-ideas-and-notes-from-books/\n* https://www.reddit.com/r/books/comments/5lilwp/do_you_take_notes_in_your_books_when_you_read/\n* https://www.reddit.com/r/books/comments/1en0wa/do_you_studytake_notes_when_youre_reading_for/\n\nThere was other stuff for high-school students who are taking classes that use the “torture the book” literature methodology|HighSchoolWritingHorror, but that material is no more useful for my purposes than the methodology. (It might be a //slightly// useful approach for actual literary criticism. But that isnt the goal of fiction note-keeping as presented here: the goal of fiction note-keeping is to hold onto the personal insights and the framework they were built upon over time.)\n\nTODO: I believe MindHacker discusses fiction notes briefly in hacks 6--7: it would be worth a reread for this project.\n\n!! Specific ideas\n\n* Apply keyword indexing.\n* Write allusions or references to books you own in a special list somewhere in the book\n* Record plot points and character attributes (ideally in a form that can be combined with SR, like RemNote)},{title:FictionTheory,color:,created:20200115231332854,creator:soren,icon:,modified:20210828140951922,modifier:soren,tags:Public Definition,type:text/vnd.tiddlywiki,text:Ideas about the nature, reality, and truth of fiction as well as how narratives and worlds are built up.},{title:FiddleheadsCoffee,created:20240530230533205,creator:soren,modified:20240530230533953,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:FifteenCompetingStandards,created:20200728034451422,es:likely,modified:20201216040126732,tags:Humor Creativity Systems Public Idea,type:text/vnd.tiddlywiki,url:https://xkcd.com/927/,text:Classic xkcd, frequently referenced when someone suggests making a new, awesome, standard way to do something in a fragmented space.\n\nimg https://imgs.xkcd.com/comics/standards.png\n\nSomething must be both remarkable|LawOfRemarkability and lucky to actually create a new standard. Git is a rare example.\n\nUSB has become a fine example of FifteenCompetingStandards. It was supposed to be the //universal// connector. Now computers have USB 2.0, USB 3.0, USB-C, and combination USB/SATA ports, and devices have USB A connectors, mini-USB, micro-USB...come on guys. This isnt universal anymore.},{title:FightingInformationOverload2020,caption:The One Thing You Need to Learn to Fight Information Overload,created:20200908220728104,medium:article,modified:20200908224207407,tags:Source Public,type:text/vnd.tiddlywiki,url:https://leananki.com/fight-information-overload/,year:2020,text:Article by MrAlKhan which discusses a wide variety of ways you can help avoid information overload. Mostly, they center around filtering what you read:\n\n* AvoidOverreading.\n* When you do read good things, read carefully and take insights from it. Dont focus on reading //more// things.\n* Seek out difficult, but not too difficult, things for your current situation (see also AdjacentPossible: you might be said to have your own AP with your current set of knowledge). More difficult things often contain more insights.\n* Read classics|FocusOnClassics.\n* Dont read the same thing everyone else is reading; then youll think the same thing everyone else does, and what would be the point? Ive never thought about this before, but it does seem important! See for example ConversationalDifference.\n* Use a ZettelKasten and Anki to keep track of the important things you learn. This will slow you down, but the benefit of reading is not getting through more books but learning things, so the higher retention is absolutely worth it.},{title:FilesystemCabinet,created:20200423002251455,creator:soren,es:confident,modified:20211227190317432,modifier:soren,tags:SorenConcept Idea Public,type:text/vnd.tiddlywiki,text:The folder `/home/soren/cabinet` on my Linux boxes. Other places on other devices (see DeviceNamingSystem). Has these properties:\n\n* Anything that I want to keep can be added. I always maintain well more drive space than I need (right now I have about 4TB free).\n* Anything I no longer want to keep can be removed. MentalDeletion sometimes requires physical deletion.\n* Paths are carefully designed following the PrinciplesForLessWrongHierarchies and change as little as reasonably possible (but can be reorganized if the principles can no longer be maintained).\n* The content is accessible, and ideally read-write, with good performance, on all devices. (I use NextCloud to make the content available read-only on the web if I dont have one of my own devices with me.)\n* Data loss is virtually impossible.\n** I use ZFS to maintain integrity and support three-copy, three-drive redundancy (RAIDZ2) with 15-minute immutable snapshots. This utterly prevents accidental deletions, malware and ransomware, silent corruption, etc.\n** I choose not to use full-disk encryption because of its negative effects on integrity assurance. I trust my apartment to remain free of Mallories since Im nobody particularly interesting, and its unlikely a typical burglar would know what to do with my file server!\n** To guard against catastrophic losses like massive hardware failure of the server, theft, and fire, I have two portable hard drives which cycle to work and back with me every week (or into my car, if I dont currently have an out-of-home office). Once a week is sufficient given the high reliability of my ZFS server -- losing 6 days of work would be a bother, but its unlikely to ever happen, and if it does I can tolerate the loss. I do run a backup before upgrading the server.\n** Integrity of the backup drives is verified twice a year.\n** I also send everything that changes frequently to an online backup hosted on Amazon Glacier periodically.\n** Periodically I also drop off a third backup drive with a family member who lives out of state (different people have served in this role before). This way, in the extremely unlikely event that my server, both my physically separated backups, //and// Amazons cloud fail, I at least have something, even if its devastatingly old. This also serves as the third-level backup for large but infrequently changed files like family photos.\n\nMaintaining the cabinet is not particularly cheap (the server is around $1,500, more than most of my other computers), but never having to keep track of what drive something is on or whether its backed up is 100% worth it!},{title:FileSystemHierarchiesSuck,created:20200410204348628,creator:soren,es:likely,modified:20210731154736772,modifier:soren,tags:PersonalDocumentation Information Public Idea,type:text/vnd.tiddlywiki,text:All extant computer filesystems are hierarchical. But intrinsically, finding documents is a task that requires searching for things in different ways! This is exactly what hierarchies are bad at (see HierarchiesVersusNetworks). Argh. Nobody seems to be trying to fix this, except for Project Nayuki|https://www.nayuki.io/page/designing-better-file-organization-around-tags-not-hierarchies (even then, interest seems to be limited to complaining about it).\n\nInitially formulated in GettingYourFilesystemHierarchyLessWrong201810 on TheControlAltBackspace.},{title:Film,color:#ff4d00,created:20200125215242189,modified:20200329174046516,tags:Meta Public,type:text/vnd.tiddlywiki},{title:FilmSensitivity,created:20200712032550745,creator:soren,description:I am unusually powerfully affected by film and thus tend to ration my interactions with the medium.,es:possible,modified:20211027023848921,modifier:soren,tags:Psychology Public MyUnusualMentalExperience Idea,type:text/vnd.tiddlywiki,text:Both I and others often remark on the fact that I rarely watch films or TV (maybe one movie a month, on average?). I dont find garden-variety TV entertaining, as a general rule, but theres quite a wide variety of course, and Ill put thoughtful TV series in the same bucket as film for these purposes.\n\nIts not that I dont like film; in fact, on the occasions that I do watch one, I usually quite enjoy it. Its rather that the medium is somehow //overwhelming// for me. I think its much like how informed people say introverts take in experiences much more quickly|IntroversionAxis, so they dont like being out in public doing things for as long -- they start to get flooded by ideas and memories and struggle to keep up and process everything.\n\nBooks arent nearly so much of a problem (though Ill admit that recently SecretCommonwealth2019 did something not entirely dissimilar, where I had to read only a couple of chapters at a time!). For one thing, of course, film is a multi-sensory experience and feels somewhat more realistic. And also, theres a way in which, as a fundamentally time-based medium, it carries you along that reading doesnt. You read at your own pace, stop and look back anytime you want, and when you get to feeling thoughtful or sleepy, you just put the book down and go do something else for a bit. Even in the watching-movies-on-Netflix-on-the-couch-under-a-blanket-by-myself modern world, pausing a film or an episode of a TV show for longer than it takes to get up and run to the bathroom or grab a snack feels weird. Im more engaged, maybe.\n\nIntellectualLifeOfTheBwc suggests the interesting possibility that this may be a ViciousCircle (though its not something I necessarily dislike, so //vicious// seems an overstatement), i.e., Im more sensitive because I dont watch films often. This comes from the observation that people tend to take any medium they have less experience with as unusually reliable and weighty, without any evidence: when fiction was new to people, they assumed it was true; when they got used to fiction in books and went to the theater, they assumed it was happening; when they started watching movies, they assumed those were half-magical; when the radio came out, the //War of the Worlds// broadcast convinced millions of people it was real.\u003C\u003Cfnote \\\There is some debate as to how misleading that broadcast really was, partly because radio was a kind of moral panic at the time and a challenge to entrenched print-based commercial interests, so its difficult to trust many primary sources. Some claim that the entire thing is a myth. I did a couple of hours of research on this in 2020 and concluded that, to the best of our knowledge today, it did not cause widespread //panic// and reactions like getting in the car and driving to a bunker as some occasionally claim, but vast swathes of people nevertheless took it to be true news.\\\>>},{title:FindRelationshipsOrMakeThem,created:20240405014747169,creator:soren,es:likely,modified:20251020041159216,modifier:soren,tags:Idea InterpersonalRelations Friendship Romance Process Public,type:text/vnd.tiddlywiki,text:Reading and thinking a lot about making friends, finding romantic partners, and developing relationships in general, Ive been struggling because there are two opposing schools of thought, both with lots of good arguments behind them:\n\n# You can do well with almost anyone, as long as youre not totally wrong for each other, if you put in the work to create a good relationship. Spend most of your effort on committing to any decent relationship you find.\n# Its //really// important who you pick, and only a tiny number of people will do. Spend most of your effort on meeting lots of people so you can find the right person.\n\nI also recently read an interesting challenge to a lot of what Ive been thinking about as far as romantic partners go. They said, look, if youre best friends with someone and theres mutual attraction, lock it down|ThreePartPartnerSelectionCriteria, thats really all you need and it will never get any better. For all the chutzpah involved here, and all the things it overlooks, I admire the simplicity and Im starting to think its not too far from the truth. (Also, I realize that I have not yet dated anyone who came even all that close to meeting both requirements at the same time! That doesnt make me feel like Ive been wasting my time, because it was much more important to get started and figure out how this stuff works, but it does seem like a silly thing to have not realized I was doing.)\n\n--------\n\nIve come to think the reality is actually starker than either of these schools of thought would have it, because best friends are found, but relationships are made. Both schools are right that you need to spend a lot of effort on what they consider important, but both are wrong that the other part is of minimal importance. You need to do great at //both// parts, or you get nothing at all. And its really easy to do only one of them by accident.\u003C\u003Cfnote \One important proviso: I think if both people are really committed to building and maintaining a relationship, you can make the vast majority of possible relationships //work//. Thats good, because its common to find yourself in a situation where for practical reasons you want to at least get along with a specific person. But Im extremely doubtful that you can make the same variety of relationships //excellent//, and surely you want your best friends and partners to be excellent, not merely functional. As I said in AmazinglyAwesomeFriend, you only get one life; why settle for kind-of-okay when there are ways to do great? (This doesnt mean you cant satisfice|Satisficing, that is, decide what your criteria are and then stop looking as soon as you find something that meets them. It does mean you should have a high bar.) I think this is a big part of why arranged marriages often end up with high satisfaction rates, for instance -- this and the fact that arranged marriages are not by any means randomly selected.\>>\n\nConsider my relationship with C.S.|PrivatePerson, in which Ive plainly succeeded in both steps. They are an extreme outlier in terms of suitability (see AmazinglyAwesomeFriend), and we found each other. We were just commenting the other day that we had both pretty much mentally lost all the time that we lived in Minneapolis prior to meeting each other – for me that was 10 months, and for them nearly 2 years. Not only that, but it really felt like we had already known each other for a couple years pretty much the moment we met, as far as being able to communicate and having a foundation of shared experiences goes. Theres a weird sense in which, despite being totally different, we feel almost like the same person (yet there is still ConversationalDifference). You just cannot get this kind of thing with //anyone//, or even with, say, one in twenty people; its many fewer and you have to spend lots of time looking for them. Ive probably met fewer than five people in my entire life who are as outlier-ish as C.S.|PrivatePerson, and in fact I feel like theyre number one on that list.\n\nBut then, do I actually know there have been fewer than five? Because you also have to actually create the relationship. I liked C.S.|PrivatePerson from the first time we talked, but it was more like “this person is cool, I want to talk to them more!” It wasnt like “this person is going to be my best friend” (or even “I want to date this person”). It took a few weeks of occasional interactions before we really started seeing what a good match it was, and it took C.S.|PrivatePerson putting themselves out there and asking if S.R.|PrivatePerson and I wanted to do something with them to get us out of the group context. And then if we hadnt acted to start helping each other out with things, have late-night conversations together, start telling each other things wed never told anyone else before, it still wouldnt have really gone anywhere, wed still be bowling together and talking about racism once a month or something, and maybe theyd have left B.L.|PrivatePerson and I wouldnt have kept seeing them. All that stuff is scary and hard! Its likely that Ive //met// other people who were outliers, but I never actually developed the relationship, so Ill never know.\n\nOn top of that, to really get close, you have to put up with the other persons flaws, talk together about what you want the relationship to look like, make time to be there for each other even when you really dont want to, and be honest when somethings wrong and needs to change. Without that kind of thing I think youre permanently stuck at an “almost there” level. On an absolute scale, this stuff is even harder, but in my personal experience if you love each other, in the broad sense of that word, it actually doesnt feel that hard, so that at least is good.\n\nUltimately, I think you need a two-step and probably iterative approach. Spend lots of time up front looking for people who pique your interest, and then dive pretty deep with them trying to figure out if theyre close enough to what you need that theyre worth the effort of developing a relationship with. Thats part one. But then its true that youre only getting started, and you have a lot more work to do! The error is in supposing that either phase is sufficient on its own.\n\nTo return to best friends + mutual attraction|ThreePartPartnerSelectionCriteria: I think almost all the things you want in a long-term partner can indeed be boiled down to this. If someone isnt emotionally available, or theyre hard to have serious discussions with, or you dont feel like you could keep hanging out with them for years and not get bored, or talking with them feels like work, or all the other things that smart people suggest are important in a partner – are you really going to call them a best friend? I wouldnt. Obviously you need physical attraction on top of that, which is why we list that separately.\n\nI think there //are// a couple of things that dont fit in, but theyre more like extra dealbreakers. You need to agree on whether you want to have kids, where you want to live for the rest of your life, and so on (although some of these are things someone might be able to compromise on!). And I think you need to be extra careful of people who are going to be really needy, or who have personality issues that might not be fatal in even a very good friend, but could be too risky for a marriage. You can put up with all of this if you love the person as a friend, because if you need to you can duck out -- at great emotional cost, to be sure, but without ruining the rest of your life.\u003C\u003Cfnote \Simply knowing that you have the option can often be enough to prevent it from getting under your skin.\>> For a partner youre hoping to stay with forever, its a much bigger problem.\n\nI think the few classic items like “do you want to have kids,” though, are the only things you should worry about trying to filter out at the start of a romantic relationship. Otherwise, just meet people who seem interesting. If they still seem interesting after you talk for a little while, keep going and see if youre attracted to each other and you might become best friends.\u003C\u003Cfnote \Personally, I think its also worth waiting a while to see if you //become// attracted to each other, if you really want it to work, even if the person/s struggling to feel attraction are allo. This works more often than youd think, and if it does itll be worth it! Plus, if it doesnt, you still have a new best friend. If you wouldnt want to be best friends with someone if it turned out you didnt become attracted to them, then by this rule you should be moving on //anyway//.\>> If so, go for it and then assess the extra dealbreakers in a few months. If not, move on. Simple and effective.\n\n{{FindRelationshipsOrMakeThem/p||PrivateChunk}}},{title:FirehouseEffect,created:20211105004610740,creator:soren,es:likely,modified:20211208165132386,modifier:soren,tags:Idea Public InterpersonalRelations Reasoning,type:text/vnd.tiddlywiki,text:The firehouse effect is an intellectual and ideological feedback loop|ViciousCircle that forms when people spend a lot of time interacting with the same closed group of people (the effect is named after firefighters sitting around at the firehouse all day waiting for a fire). Such groups will tend to converge on a set of ideas that make perfect sense to them, but differ dramatically from anything outsiders would consider reasonable. You could think of this as Overfitting among humans.\n\nPresumed mechanism: the smaller the group, the more likely there happens to be nobody who knows a simple fact or has a strongly different opinion than the others in the group. When youre missing such context, people are fantastic at making up long chains of conspiracy theories|ConspiracyTheory or suppositions. You probably had a couple of these of your own as a child, which looking back were hilariously wrong.\n\nThe PersonalBubble is the algorithmically induced version of the firehouse effect. In general, I think this effect is confusing more peoples thinking than it used to because many of the communities we belong to nowadays tend to involve the same groups of people or even just //types// of people than they previously did, and this effect is reinforced by the media, especially algorithmic types of it. We can have a wide variety of connections, but all of them taken together can still form into a large firehouse.\n\n“Echo chamber” means roughly the same thing. I prefer “firehouse effect” in many respects (even though nobody knows what it means!) because it emphasizes the role of the people in the firehouse in actively amplifying and permuting the ideas, rather than the overall effect. That suggests a relatively easy way out -- just have some conversations outside of the firehouse. I think people tend to feel unnecessarily helpless|PeopleDontThinkTheyCanDoThings in “echo chambers,” because anything short of up and leaving the chamber for good seems like it would be ineffective. Start small|JustGetStarted!\n\nSource for the first paragraph: FooledByRandomness2004, p. 85, term originally due to Marty OConnell.},{title:FirstAvenue,created:20240207033830202,creator:soren,modified:20240207033846593,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Minneapolis music venue},{title:FirstBreakAllTheRules1999,author:Gallup,caption:First, Break All the Rules: What the Worlds Greatest Managers Do Differently,completed:202106221200,created:20210622174139144,format:hardcover,isbn:9781595621115,medium:book,modified:20210624115649614,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1999,text:Book produced by G.|PrivatePerson detailing the results of extensive research on what commonalities there are between the most effective managers, and especially the way they relate to their employees (that is the central component of managing, after all...at least, //good// managing).\n\nRead with F.I.B.C.|PrivatePerson. The club didnt like this book much, although none of us were managers, and managers are really the target audience, so perhaps that reflects more on us than on the book. There were I believe two managers for the first meeting, but they dropped out and didnt finish the book -- not sure what that says about them or about the book! I felt it contained a lot of valuable information, but it was not exciting or particularly readable, and it was somewhat difficult to figure out how to apply it (the amount of change involved in, well, “breaking all the rules” can feel overwhelming and exceeds the amount of change one person can typically bring about in a normal organization -- though this isnt different from DevOps, and many people feel quite empowered after reading, e.g., PhoenixProject). Still, it felt better than skimmable to me, and knowledge that isnt immediately applicable can still become very useful in the ZettelKasten!\n\n!! Most important ideas\n\n\u003C\u003Cstretch-links \QTwelveAssessment SkillsKnowledgeAndTalents ImprovingCorporateAdvancement WhatGreatManagersExpect\>>},{title:FirstPrinciples2020,author:Thomas E. Ricks,caption:First Principles: What Americas Founders Learned from the Greeks and Romans and How That Shaped Our Country,completed:202101221200,created:20210102054529432,medium:book,modified:20210617001251762,rating:distinguished,readstatus:read,tags:Source Politics Public,type:text/vnd.tiddlywiki,url:,year:2020,text:Book by MrThomasRicks on the classical educations of MrGeorgeWashington, MrJohnAdams, MrThomasJefferson, and MrJamesMadison (the first four UnitedStates Presidents) and how classical ideas shaped the US. A 2020 Christmas gift from P.|PrivatePerson.\n\nI really enjoyed the writing. The prose isnt ingenious, but it is extremely readable and entertaining and still intellectual at the same time. More SimpleThingsDoneWell, please.\n\nRicks thinks that Adams and Jefferson have been overappreciated (Adams as a bad president, a raging egotist, and an unhelpful commentator on the Revolution, and Jefferson as out of touch with reality) and Washington and especially Madison underappreciated (Washington as a brilliant observer and practical learner, and Madison as a brilliant architect of the form of government and the need for checks and balances against unvirtuous people in power). He makes a great deal out of comparing and contrasting the four, as well.\n\nIn the years leading up to the Revolution, classical comparisons were everywhere, particularly Roman ones; figures in American politics were compared to Cicero, Cato, Caesar, Catiline, etc. (I did not intend all my examples to start with //C//!) Madison spent three years studying political theory going all the way back to the Greeks prior to the drawing up of the UsConstitution, seeing all the way back in 1784 that something was going to be needed to replace the ArticlesOfConfederation. \n\nClassicism entered a rapid decline after the adoption of the Constitution, arguably because the AmericanRevolution was so wildly successful. To a previously unseen degree, social class and education no longer mattered, in their traditional senses; money still mattered of course, but there were all kinds of ways to get there. A rise of religiosity and AntiIntellectualism characterized early 19th-century America. Even with a slight revival of interest in classicism lately (at least in the right circles), the underpinnings of the countrys philosophy have been largely forgotten.\n\nIts interesting to note that the Constitution was built primarily on a foundation of “classical republicanism,” which assumed a lack of party politics and that people in power would act for the good of society. This proved glaringly wrong, and yet somehow the Constitution has still continued to work for almost 250 years. (As I write this, the countrys system of government has just passed through the tenure of MrDonaldTrump more or less intact.) Madisons foresight in bringing forward the checks-and-balances approach is likely the only reason it ever worked. One does still wonder if it could be improved (e.g., with a TricameralLegislature to preserve the checks while reducing gridlock).\n\nAnki tag for all sorts of useful facts and ideas in this book, some about classicism and some just about the Revolution and the fascinating people involved in it: `Source::FirstPrinciples`. 173 cards.},{title:FishPeddler,created:20250626183019770,creator:soren,modified:20250626183020486,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:FiveIdeals,created:20200219212925671,creator:soren,es:confident,modified:20220309125644635,modifier:soren,tags:AgilePhilosophy UnicornProject Process Public Idea,type:text/vnd.tiddlywiki,text:MrErikReid in the UnicornProject identifies these as critical parts of DevOps and healthy workplaces/processes:\n\n# \u003C\u003Cstretch LocalityAndSimplicity smallField:caption>>\n# \u003C\u003Cstretch FocusFlowAndJoy smallField:caption>>\n# \u003C\u003Cstretch ImprovementOfDailyWork smallField:caption>>\n# \u003C\u003Cstretch PsychologicalSafety smallField:caption>>\n# \u003C\u003Cstretch CustomerFocus smallField:caption>>},{title:FiveThievesOfTime,created:20201027155510047,es:confident,modified:20210516225258412,tags:Process Public AgilePhilosophy Idea,type:text/vnd.tiddlywiki,text:As explicated in MakingWorkVisible2017:\n\n# TooMuchWipThief\n# UnknownDependenciesThief\n# UnplannedWorkThief\n# ConflictingPrioritiesThief\n# NeglectedWorkThief},{title:FiveThirtyEight,created:20200909141023686,modified:20200909141051478,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog of MrNateSilver (and now others) that does various statistical reporting. Especially known for its original US election modeling.},{title:FiveValuesOfScrum,created:20200512024346265,modified:20200516171634734,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:# Commitment to accomplishing the teams goals every Sprint\n# Courage to work on tough problems\n# Focus on the sprint and the SprintGoal\n# Openness in process\n# Respect for the team and its independence\n\nSource: ScrumGuide},{title:FixingScience,created:20210702022906764,creator:soren,es:likely,modified:20211227184644779,modifier:soren,tags:Science Futurism Public Idea,type:text/vnd.tiddlywiki,text:> Today’s scientists do not need better tools, they need to rent a dumpster.\n> ---MrSimonSarris, InPraiseOfTheGods2020\n\nMy impression is that Sarris thinks science as is should pretty much be chucked out. Im not quite as pessimistic as him, but he is entirely correct that something is deeply, deeply wrong with science in 2021.\n\nWere not just talking about problems of //accuracy//, such as the ReplicationCrisis or the utter failure of nutrition science to produce any kind of consensus; thats a problem, and it needs to be worked on (and to their credit, some fields appear to be making much-needed and worthwhile changes in this regard), but its not the root of the problem.\n\nWere not just talking about bad statistical methods and publication bias; thats a problem, but its not the root of the problem.\n\nWere not just talking about the problem of funding and perverse incentives. That too is a big problem, and nobody has really been working on it even though almost everyone agrees its a problem, but its not the root of the problem.\n\nNo, the problem comes down to //the wrong attitude towards science//. Most science today is scientism|ScienceVsScientism. Its a religion of “ordained authority,” as Sarris says. Its not treated as an ongoing process, an application of the ScientificMethod in which knowledge is always evolving (Sarris suggests that alchemy was “the last honest science,” because it was self-conscious of this and didnt claim to actually know things). Its a way of being holier-than-thou.\n\nThe pandemic|PandemicMood is perhaps symptomatic (no pun intended). The “scientific” recommendations were often stunningly bad, despite the utterly insane amount of research happening, and we were told to shut up and close the playgrounds //because science//, never mind that kids almost never got COVID in the first place and there has been literally one case of confirmed COVID transmission from casual outdoor contact|https://www.nytimes.com/2021/05/11/briefing/outdoor-covid-transmission-cdc-number.html in the entire world.\u003C\u003Cfnote \\\\nOf course there have been others; only a small number of cases get studied in that level of detail. But in tens of thousands of detailed case studies, only one was outdoors.\\\>>\nThis, importantly, was due less to a lack of appropriate information, but to flaws in reasoning, perspective, communication, politics, and epistemologies and theories of science (see also NoEvidence). Its these things that are messing it up.\n\nProper science is stunningly beautiful. What we get today is a heap of the worst kind of forced orthodoxy, groupthink, and appeals to rationalism over pragmatism. People understandably do not like this kind of science!\n\nSo what can we do?\n\nMost importantly, we need to find our IntellectualHumility again. Many people doing science dont seem to understand what science even is, and scientists, science writers, and some members of the public all have inflated views of what science means. (Many of those that dont have instead given up and think the entire thing is a crock -- because, to be fair, as currently practiced a lot of it is!)\n\nWe need to stop assuming that everything can be answered by science and rationality. As Sarris points out|InPraiseOfTheGods2020, rationality is one tool in a wide array of tools available to humanity. It works very well for certain things, and terribly for others. Lets pull out some EightyTwentyPrinciple thinking, get realistic, and work on only the things that can sensibly be handled scientifically that way. In my opinion, were doing a seriously bad job of prioritizing the most valuable research.\n\nMy fantasy would be to hold a worldwide “science retreat,” in which everyone stopped doing science in the traditional sense for 1--2 years and instead focused on figuring out what was wrong with science and rethinking what it even //is//. Everyone would have to read a bunch of mythology and literature and the complete works of MrNassimNicholasTaleb, do some hands-on experiments of the true scientific type, and figure out how their field should change.\n\nObviously, a science retreat is not practical, so the OpenQuestion is what can be done on a local level to promote this kind of thinking. Ill have to keep working on that one.},{title:FixItForever,created:20200401232055610,modified:20200401232205450,tags:Sink Process Productivity Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/efficiency/fix-it-forever/,text:TheControlAltBackspace post on the power of MakeItNeverComeBack. Touches on LifeHacks as well.\n\n{{!!url}}},{title:FlaneurMethod,created:20200226224632377,creator:soren,description:Rather than making complex plans in advance, do the next thing that looks desirable, then analyze the results to decide where to go next.,es:likely,modified:20221129233256316,modifier:soren,tags:PhilosophyOfLife AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:Per MrNassimNicholasTaleb, planning too far ahead is futile and counterproductive. The flâneur instead wanders around, identifying the next topic or place or action based on the most up-to-date information. To use a software development metaphor, life is taken as an IterativeProcess rather than as a project to be completed via WaterfallMethodology.\u003C\u003Cfnote \Im now laughing at the idea of someones parents planning out their childs life in sequential stages...conception, development, testing, approval from God, release to heaven? Sorry.\>>\n\nSome ideas work great, and turn out to be worth pursuing much further. You might decide to stay on your best ideas (or the consequences of an accident|AccidentsMakeTheWorldGoRound that wasnt your idea at all) for months or years. Some ideas are terrible, and if you havent overplanned, you can decide to throw it out, laugh at yourself|ChangeByLaughing, and move on after a day without worrying about SunkCosts.\n\nAs with everything Agile, it all comes back to AntiFragility.\n\nExpertsDontMakePlans: they rely on intuition and spur-of-the-moment decisions as in this method, whether they realize they are using it or not.},{title:FlashForward,created:20200509175949910,modified:20200509180005073,tags:Publication Public,type:text/vnd.tiddlywiki,text:Podcast which looks at possible visions of the future, dystopian|DystopianVision or otherwise.},{title:Flask,created:20200529205934671,modified:20200529205942436,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Lightweight web/API development framework for Python.},{title:FleaCannotHearAnymore,created:20201205234335087,description:A single set of experimental results can be used as evidence for a variety of conclusions, many of them incorrect.,es:confident,modified:20210813023238362,tags:Science Reasoning Public Idea,type:text/vnd.tiddlywiki,text:The same observations can often lead to many conclusions. Some of those possible conclusions are complete nonsense, as in this parable:\n\n\u003C\u003C\u003C\nA biologist studying fleas takes a flea out of its container and places it on the table. He shouts, “Jump!” and the flea immediately jumps. Then he removes the flea’s legs with a scalpel and again shouts, “Jump!” This time the flea does not jump.\n\nThe biologist happily writes down in his notebook, “Without its legs, the flea cannot hear anymore.”\n\u003C\u003C\u003C\n\nThere would seem to be two forms of this effect:\n\n* A bullshitter|Bullshit intentionally producing incorrect results to suit her agenda.\n* Someone who jumps to conclusions|JumpToConclusions too readily, perhaps because of ConfirmationBias.\n\nThis is a particularly pervasive and insidious problem with forms of science that rely heavily on statistics; see FallibilityOfStatistics, and TheQuickFix2021 for a book-length treatment of the problem in social science.\n\n!! References\n\nYears after first encountering the parable, and then years after recording it, I found the original source I know I got this from here|https://slashdot.org/comments.pl?sid9796339&threshold1&commentsort0&modethread&cid53120735. I expected this would be one of those things that was all over the internet, but this was the only relevant hit I could find for that phrase. Either its a thing you cant find on the web|ThingsYouCantFindOnTheWeb or a formulation that uses entirely different words is more common.},{title:FloodNarrative,created:20200130141623890,creator:soren,modified:20210516233633056,modifier:soren,tags:FictionTheory Metaphor Public Idea,type:text/vnd.tiddlywiki,text:A powerful narrative framework used since ancient times involving the destruction and consequently the cleansing/redemption of some vast portion of the world or humanity. Mostly known as an element of myth, but consciously used in modern work as well (see e.g., LaBelleSauvage2017).},{title:FloorGlitching,created:20241107054121179,creator:soren,es:confident,modified:20250101234631727,modifier:soren,tags:Idea Science Public,type:text/vnd.tiddlywiki,text:Perceptual experiment invented by P.|PrivatePerson, taught to me at 2024BowmansSsi.\n\n!! Process\n\nSubject lies prone on the floor. Two assistants gently raise subjects torso to something like a 30-degree angle to the floor (or whatever is comfortable), by supporting their straight-outstretched arms from below, using one hand just behind the wrist and one around the biceps/triceps. (It can be helpful for the assistants to sit on an adjacent chair/couch to reduce fatigue.) Subject lowers their neck and lets it hang comfortably and closes their eyes. Start a timer for 2 minutes 30 seconds for maximum effect; if some participants are feeling tired/uncomfortable you can still get an effect from a bit less.\n\nWhen the timer finishes, begin very slowly lowering the subject towards the ground. Keep their arms at the same level and ensure their arms/hands/fingers have no contact with anything until they reach the floor. Subjects face will contact the ground and settle in well before the arms. Your goal is to keep them experiencing this as long as possible -- you can also pause briefly just before touching their fingers to the ground. Once fingers contact, gently set them the rest of the way down; they can stay down for a moment if they want.\n\n\n!! Experience\n\nThe experience is of sinking through the floor, more and more and more after you thought you were well past level. People seemed to have somewhat different experiences here though; for instance I started to feel like I was basically level with the floor //before// I was lowered, while others said they didnt notice anything until they started moving. I also had the very distinct sensation that my forehead was being pushed through the floor, which was very soft. Also, I didnt feel like my fingertips touching the ground immediately broke the illusion, the quality changed a bit but it still felt distinctly abnormal, while others said that instantly ended it for them.},{title:FlowState,created:20200410142718485,creator:soren,es:confident,modified:20220623010702997,modifier:soren,tags:Productivity Psychology Public Idea,type:text/vnd.tiddlywiki,text:Psychological state in which you stop paying attention to anything outside of your work -- a type of immersion. Time spent in a flow state is one of the biggest predictors of work and life satisfaction. Studied in great detail in the psychological literature.\n\nDistinct from but an important component of DeepWork.\n\nA component of a component of the FiveIdeals of DevOps.\n\nCf. SuspensionOfDisbelief.},{title:FlyingPigThrift,created:20231011024107349,creator:soren,modified:20240509143813148,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:FocusFlowAndJoy,caption:Focus, Flow, and Joy,created:20200406021251900,creator:soren,es:confident,modified:20220309124933537,modifier:soren,tags:Process UnicornProject AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:One of the FiveIdeals of the UnicornProject. A reminder that happy employees beget productivity, and Focus, Flow and Joy create both of these things directly and a double helping of productivity indirectly.\n\nMy definitions:\n\n* Focus: An environment that allows workers to engage in deep, meaningful work.\n* Flow: The psychological state that emerges from focus|FlowState.\n* Joy: Work which is meaningful, exactly at the right skill level (challenging but doable), accomplished in flow, and without waste|WorkWaste or pointless tasks creates a joyful work environment.},{title:FocusOnClassics,created:20200908224036697,creator:soren,description:Try paying attention primarily to material that has stood the test of time; it is vastly more important and higher quality.,es:likely,modified:20230419172843521,modifier:soren,tags:Information Reading Public Idea,type:text/vnd.tiddlywiki,text:A valuable way of filtering one’s attention to AvoidOverreading, prevent the accidental consumption of ContextFreeInformation, and generally prevent InformationOverload. There is so much you could read or watch or listen to, and the EightyTwentyPrinciple (probably at least a ninety-nine–one principle here) and SturgeonsLaw say that youll get the vast majority of the value out of a tiny portion of it.\n\nThus: In most areas of interest, worry only about the stuff that has been around for at least a few years, preferably much longer. If you want to read some newer stuff, go ahead -- this isn‘t a restriction -- but most of the bang for your buck is going to be in the stuff that has stuck around for tens, hundreds, or thousands of years. This stuff was so good that people have kept reprinting it over and over again even after it seemingly got “old”. Some of it was so good that many generations of monks copied it out by hand to save it from rotting! In contrast, the stuff that came out last week could be complete garbage that somebody convinced the publisher to publish. Let TimeFilters be your guide. See also LindyEffect.\n\nOf course, you don‘t want to be “behind”. Not being up on all the latest news doesn‘t necessarily put you //behind// in a meaningful way (it’s mostly ContextFreeInformation), but in your own field of specialty, it can be beneficial to read more recent things. This is for several reasons:\n\n* You are more equipped to get more out of the new research, even if it has relatively little lasting value, because you are an expert in the topic.\n* You have a more finely tuned ability to identify which new things are worth your time.\n* Because people doing important work in a field tend to work on or near the AdjacentPossible, its far more likely that work being done concurrently with yours will prove timely or helpful.\n* You will be more able to participate in the general scene with your peers if you know whats currently going on, and this in itself is almost certainly good for your work and intellectual interests.\n\nChoose carefully where you apply this philosophy, though!\n\n!! References\n\n> In any given research field there are usually only a tiny number of papers that are really worth reading. You are almost certainly better off reading deeply in the ten most important papers of a research field than you are skimming the top five hundred.\n> ---MrMichaelNielsen, PrinciplesOfEffectiveResearch2004 (\u003C\u003Crt 11582>>)\n\n\u003C\u003Cclarify>>\n\n> Life is too short to not read the very best book you know of right now.\n> ---MrPatrickCollison\n},{title:FollowWebsitesWithRss201902,created:20200423032409735,modified:20200509031516996,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/simplicity/why-and-how-to-follow-websites-with-rss/,text:TheControlAltBackspace article on the sadly overlooked RSS.\n\n{{!!url}}},{title:FooledByRandomness2004,author:MrNassimNicholasTaleb,caption:Fooled By Randomness: The Hidden Role of Chance in Life and in the Markets,completed:202110291200,created:20211029030534440,creator:soren,medium:book,modified:20211105004241242,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2004,text:First book in the //Incerto// series, discussing various cognitive biases involving probability, including bad reasoning on asymmetric distributions (this is obviously the beginnings of the BlackSwan book), evolution, what parts of history are useful, the ability to change ones mind (and MrKarlPopper), Stoicism, and more. Come to think of it, these are all the themes of most of Talebs work; the different books are more like different sets of conclusions you can draw from the themes. In this case, as noted, theyre specifically about how they cause us to make foolish decisions.\n\nTaleb is a lot more humble in this book than most of his later ones. Partly I assume this is because its his first and he wasnt yet popular enough to go full asshole on people and disciplines he doesnt think much of. Also though, given its focus on cognitive bias, I think it might be rather unconvincing without a strong dose of epistemic humility! As such, it was a calmer read but also less fun.\n\nOverall, I didnt find //Fooled by Randomness// nearly as insightful as MrNassimNicholasTalebs other work. But I think this is actually a compliment: it means that in the years since 2004, at least the portions of society I frequent have started to take some of its lessons to heart! Were not there yet with his other work.\n\nI think some of the later books (particularly BlackSwan and AntiFragile2012) would be easier to follow and understand the first time if youd read this first (it is the first book in the series, after all). But Im still not sure I can justify telling someone whos never read any Taleb to start here, because I dont think it will knock your socks off the way some of the other books will, and then you might not see the point of reading the rest. Maybe start with //The Black Swan// or //Antifragile// to catch the bug, then come back here, then finish the rest.},{title:Footnote,created:20210917204123567,creator:soren,modified:20251011192900748,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:To add a footnote in a Zettelkasten tiddler, use the fnote|$:/tzk/Procedures/fnote procedure in the spot where you want to create the footnote. Footnotes are primarily accessed by hovering over the number; the ReferenceExplorer also displays footnotes on a footnotes tab|$:/tzk/refexplorer/Footnotes.\n\nInternal links in footnotes dont appear in the reference explorer, so they shouldnt be used to discuss concepts critical to the central idea of the tiddler. In general, I use footnotes more in quasi-essays aimed primarily at discussing something in detail or sharing information with the public than in tightly focused and internally-bound notes.},{title:ForemostBrewing,created:20240402012239939,creator:soren,modified:20240509143825500,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ForestvilleMysteryCaveStatePark,caption:Forestville / Mystery Cave State Park,created:20201028220309917,foreignid:00148,gis-lat:43.64283800883933,gis-long:-92.21482438061062,gis-zoom:12,hideorphan:true,modified:20210515035548821,phone:(507) 352-5111,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki,text:20 miles of hiking trails, a decent campground, a historic village, and a cave all in one. A great place for snowshoeing and cross-country skiing during the winter.},{title:ForestvilleMysteryCaveStatePark/Travel,created:20201129223123842,hideorphan:true,modified:20201209034341566,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:A minor annoyance -- you have to come in to the park from the west //or// the east, and you cant cross over from one side to the other because the bridge has been condemned for vehicle traffic for years.\n\nFortunately, you can just come in on the west side and walk to the east side -- theres not much you would want to do on the east side that you wouldnt be willing to walk to. You will see warnings about the bridge being out from way back on the west side; dont worry, youll get to the park before that.},{title:ForgiveAndBeFree2020,caption:Forgive and be free: Forgiveness therapy can free you from the hurts of the past,created:20200822015631200,medium:article,modified:20201206213113852,tags:Source Public,type:text/vnd.tiddlywiki,url:https://aeon.co/essays/forgiveness-therapy-can-free-you-from-the-hurts-of-the-past,year:2020,text:An excellent Aeon exploration by MrNathanielWade of the concept of Forgiveness and of the scientific and psychologically practical aspects thereof.},{title:Forgiveness,created:20200822015253711,creator:soren,es:confident,modified:20211229144507682,modifier:soren,tags:Ethics Religion Definition InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Forgiveness is a valuable concept for psychological health, for a good society, and for my religion|Lutheranism. However, it is frequently misunderstood. Some clarifying points:\n\n* DeservingForgiveness (nobody does)\n* ForgivenessVsExcusing (forgiveness is not excusing; one //cannot// forgive if one excuses)\n* ForgivenessVsReconciliation (related but distinct)\n\nOf course, part of the problem, as with any similar concept, is the general dilution of the word “forgiveness.” I forgive you for being five minutes late! But then, we seem to do more or less OK on this front with words like “love” which have similar diluted uses. Forgiveness is more personal and political, somehow.\n\n!! References\n\n> It is the act of forgiveness that opens up the only possible way to think creatively about the future at all.\n> ---Father Desmond Wilson, qtd. in GettingThingsDone (\u003C\u003Crt 10602>>)\n},{title:ForgivenessVsExcusing,created:20200822014106489,creator:soren,es:likely,modified:20220202175449001,modifier:soren,tags:Ethics Public Idea,type:text/vnd.tiddlywiki,text:Forgiveness is a frequently misunderstood concept. First, it is confused with reconciliation; see ForgivenessVsReconciliation.\n\nThen too, both forgiveness and reconciliation are different from condoning or excusing something. Indeed, proper forgiveness arguably cannot happen unless you acknowledge the extent of the wrong and refuse to excuse something; if you say what happened was OK, then what is there to forgive? (For similar reasons, nobody deserves forgiveness|DeservingForgiveness.)\n\nThis was a primary focus of my LentmasfestForgivenessDebacle essay. Im amused to see that I used precisely the phrase \condone or excuse\ in that essay as the contrast to forgiveness, as ForgiveAndBeFree2020 did. Clearly not a new idea!},{title:ForgivenessVsReconciliation,created:20200822012710323,creator:soren,es:likely,modified:20211107181041118,modifier:soren,tags:Ethics InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Forgiveness and reconciliation are two related but meaningfully different things, which can be arrived at separately, together or not at all.\n\n* Forgiveness: entirely personal. You can forgive someone you will never see again. You can also forgive yourself; reconciling with yourself wouldnt make much sense. While difficult (in proportion to the magnitude of the wrong), likely the best thing you can do for yourself after being wronged.\n* Reconciliation: in relationship with the offender. Requires cooperation, and for success presumably remorse in the other person in most situations.\n\nBoth are different from|ForgivenessVsExcusing condoning or excusing something.\n\n!! References\n\n> Contrary to what is generally believed, forgiveness is not about others, but ourselves. It is not about having compassion or being loving toward others. Au contraire — we do it to protect our own minds.\n> ---Dazne, \u003C\u003Crt 10180>>\n\nFramework from ForgiveAndBeFree2020.},{title:Forklessness,created:20210722030144332,creator:soren,description:Forklessness is the frustration- and traffic-inducing state of having no remaining forks at the end of the cafeteria line.,es:mythological,modified:20230828031747543,modifier:soren,tags:Idea Humor PersonalMythology Public,type:text/vnd.tiddlywiki,text:Forklessness, during my time at StOlaf, was a personal term I invented for the state of there being no forks available at the end of the cafeteria line. (Yes, this was a sufficiently common problem to get its own term!)\n\n{{$:/sib/Templates/Topical/MaudWikiImport}}\n\nForklessness is extremely irritating and creates a traffic problem because the only other place to get a fork is back at the //beginning// of the line near the entrance, which means that large numbers of people have to go countercurrent -- and since most people need a fork, it slows people down even when theyre not having to return to get forks. (If youre paying attention, you can often tell that there is forklessness while still near the front of the line because significant numbers of people are approaching the forks from the wrong side.)\n\nForklessness is relatively easy to combat, though; when one returns to pick up a fork, one should also grab a full handful of forks and deposit them in the end position (//fork redistribution//). While these forks probably wont last for very long, by the time there are no forks at either of the end tables, the dish room is probably fairly close to bringing out a new set of forks, so ones set of redistributed forks may last a significant portion of that time.\n\nThere would be fewer states of forklessness if it werent for the fact that people have a tendency to take dishes out of the cafeteria and neglect to bring them back, leading to depleted stocks of trays, forks, and everything else. So another anti-forklessness technique is to make sure you gather any forks you find lying around campus and bring them to the cafeteria. Also, make sure you dont leave bags of forks lying around in the Natural Lands (\u003C\u003Crt 3832>>).\n\n!! Types of Forklessness\n\nA subset of forklessness is partial forklessness, in which only one side of the tables at the end of the line has forks. This doesnt cause as severe problems as described above, but its still irritating because you have to go over, peer into all the fork buckets and confirm there arent any, then go to the other side and hope the forklessness is only partial.\n\nIf forklessness isnt partial, it can be called plenary forklessness.\n\nAggravated plenary forklessness occurs when there are no forks at all, even back at the beginning of the line. This only happened to me once or twice during my time at St. Olaf.},{title:FormalRitualDemocracy2020,caption:We need highly formal rituals in order to make life more democratic,created:20200822020608945,creator:soren,medium:article,modified:20210907013733434,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://aeon.co/ideas/we-need-highly-formal-rituals-in-order-to-make-life-more-democratic,year:2020,text:Aeon article, which argues that NeedlessFormality and Ritual in general is valuable in a democratic and group-forming sense. Doesnt touch on the pleasure people get out of it, which I firmly believe in myself, but offers another nice argument I hadnt thought of previously.},{title:FortBragg,created:20250626183022702,creator:soren,modified:20250626183023686,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ForteLabs,created:20200225031144256,modified:20200509032305359,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog about PersonalKnowledgeManagement and records|RecordsProject orchestrated by MrTiagoForte. Looks like something I ought to spend more time with in general.\n\nNoted sources:\n\n* SmartNotes10Principles20200204},{title:FortyMinuteLimit,created:20200511030401549,modified:20200511030558938,tags:MeetingTheory PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:TheZoom, for at least a time under certain circumstances, imposed a 40-minute limit on videoconferences made on their free tier. Of course its kind of an annoying limitation, but also, its great! It forces people to conduct their business in 40 minutes, which is actually quite a lot of time. Just like the StandupDumbbell, though less voluntary.\n\nCf. WorkInTheTimeOfCoronavirus.},{title:ForWhomTheBellTolls1940,author:Hemingway,bibliography:LifetimeReading,caption:For Whom the Bell Tolls,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034766,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1940},{title:FoucaultsPendulum1988,author:Eco,bibliography:LifetimeReading,caption:Foucault’s Pendulum,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034782,priority:2,readstatus:unread,recommended-by:TAOM,tags:Source Public,type:text/vnd.tiddlywiki,year:1988},{title:FoundObjects,created:20200201135107562,medium:,modified:20201027004355230,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://valdyas.org/irina/fo3/,text:I.R.|PrivatePersons catch-all blog, including reading notes, travel writing, recipes, dreams, and random thoughts. Often only a post or two a month, but always great fun to read.\n\n{{!!url}}},{title:FoundTime,created:20210613205554297,creator:soren,es:confident,modified:20220804162850859,modifier:soren,tags:SorenConcept Definition Public Idea,type:text/vnd.tiddlywiki,text:Found time is time that would be wasted if you dont have a practice to put in it. For instance, we have found time when waiting in line, when we arrive three minutes early to something, or while the computer is processing a long-running action.\n\nSome people might argue that some time should be spent doing nothing|ImportanceOfSolitude. I agree, to a point -- but I consider staring into space or thinking about nothing in particular to //be// a meaningful and important activity that counts (see also CampingAndBoredom). What often happens instead is that we get distracted by our phones or something of that nature, which doesnt even give us a chance to rest.\n\nOther beneficial found-time activities that can happen almost anywhere: meditating, stretching, studying SpacedRepetition flashcards, people-watching, processing notes.},{title:FourEventsOfScrum,created:20200512023405257,creator:soren,es:confident,modified:20211113031926727,modifier:soren,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:The Scrum framework prescribes four events to support the ThreePillarsOfScrum:\n\n# SprintPlanningMeeting\n# DailyScrum\n# SprintReview\n# SprintRetrospective\n\n\u003C\u003Crememberq \20200514175217132\\n\t\What are the Four Events of Scrum?\\n\t\The sprint planning meeting, daily scrum, sprint review, and sprint retrospective.\>>},{title:FramePositively,created:20240811160654092,creator:soren,description:Strongly consider framing your goals and movements as //for// something rather than //against// something.,es:possible,modified:20241103225148055,modifier:soren,tags:Idea LifeDirection Sociology Design Public,type:text/vnd.tiddlywiki,text:People commonly define themselves, their values, their movements, or their ideas as reactions //against// something. Ex.: I stand against racism! This political group aims to prevent Donald Trump from being elected! We do not believe that Christianity should include gay people! I am not one of those mean rich people! Universal healthcare is a terrible \nidea! And so on and so forth.\n\nOpposing things is valuable. Complaining is prior to change|ComplainFirst. Usually things improve because someone notices they dont like the present state of affairs, in some way minor or major. And organizing a movement around opposition is often an effective way to build momentum, because a lot of people who dont like thing X will rapidly and enthusiastically join. So (I fully understand the irony implicit in this framing!) I am not entirely against opposition.\n\nNevertheless, its critical to recognize that choosing to define yourself in opposition to something has major drawbacks. A movement of thousands or even millions of people that knows only what it //doesnt// want is often left directionless or torn apart by internal conflict as it tries to figure out what it actually wants to change. Shouting that things suck may be an important service, but it doesnt create change by itself. Without being followed up by positive action, it leads to movements that frustratingly fizzle out, and then the mainstream says “look at those stupid kids, they didnt achieve anything, what an impractical thing to complain about,” and then people give up on that particular complaint for the next twenty years. Less obviously but perhaps even worse, if you are against X, you are still permanently constrained by what X is. You may be saying you want to be !X, but being !X implies understanding X, implies being bound by the same categories and assumptions as X, only in reverse. This seems particularly dangerous for movements that are challenging a particular system of thought; in a discussion with a friend about this I mentioned the Barbie Movie, in which the “feminist” version of the world ends up being the patriarchical version in reverse, with only a few minor changes. To bring real change to entrenched patterns of thought and institutions like this, you need to completely reimagine the situation, with limited reference to existing frameworks, and ideally do that before you start (at least have a rough vision thats somewhat more developed than “not X”).\n\n\n----\n\nThe reverse, of course, is to define your movement, your values, your next steps, as what you want to see //more// of. Being told what is and/or what should be is far more definite than saying what is not. Just like when youre training an animal, its more effective to positively reinforce the behavior you do want than to negatively reinforce the behavior you //dont// want, because there are an infinite number of other things you might want instead when you negatively reinforce, but you very clearly do want the thing youre positively reinforcing. In this sense, negative framings are lazy.\n\nIts also easier to evaluate your success and change your direction with a positive framing. You can interpret almost anything, even angry tweeting, as succeeding at being “against X.” Against-X movements can therefore unite people for decades, even as they accomplish precisely nothing. Meanwhile, if a for-Y movement does some things and doesnt make any progress at achieving its goals, its comparatively obvious. The movement then has an opportunity to pivot to a more effective approach, or even accept that its direction is wrong or unhelpful and shut down entirely.\n\n//Near miss//: sometimes painstakingly removing negative things can make room for positive things to flood in, even without any idea as to whats coming instead. See PerfectionIsSubtractive, and MrHenrikKarlssons claim that “if you remove all the things you dont want to fill your life with...it will fill with the good stuff” (\u003C\u003Crt 12994>>). This differs somewhat however in that you are actually excising that specific thing from the system, in a case where you have control over it. It also only works when either nothing needs to replace it (e.g., scoping a feature out of your software) or when its obvious what youd prefer in the space (e.g., chances are pretty good that making it harder to scroll through social media on your phone will result in more useful activities). And finally, if taking this approach, you are not done once you remove the thing: you have to wait and critically observe what happens instead, and address that as well if its not what you wanted.\n\nEven when you //can// get away with just removing something, though, I think its often helpful to explicitly define what youre hoping to make room for instead.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> After a discussion of many of these ideas I want to live in a society that has much less domination, but my primary orientation is not //against// domination exactly, it’s //for// partnership. Partnership requires justice, respect & accountability and it invites pleasure, joy & exchange. Partnership celebrates difference, it breeds hybridity and creates thick harmonies.\n\n---“Constructive Focus on what you want to see more of|https://www.microsolidarity.cc/essays/from-domination-to-partnership#constructive-focus-on-what-you-want-to-see-more-of”\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\nPaul Graham|MrPaulGraham, in his advice to high-schoolers, “What Youll Wish Youd Known|https://paulgraham.com/hs.html,” says that being rebellious (read: “against authority / convention”) is just as stupid as being obedient: youre still letting yourself be defined by what other people think you should do.\n\n\u003C/$m2.x>\n\u003C$m2.x number\3\>\n“Progressives need to learn to take the W”, Noah Smith (https://www.noahpinion.blog/p/progressives-need-to-learn-to-take)\n\u003C/$m2.x>\n\u003C$m2.x number\4\>\n\n> Awayness cant aim.\n\n---Sarah McLaughlin, Beyond Goals\n\n\u003C/$m2.x>\n\n(Aside: I initially named this tiddler “Against Negative Framings”, and then realized that was way too ironic to let stand!)},{title:FrameworkForOrderingAndSimplifyingLife,created:20200908212332622,creator:soren,es:possible,modified:20211107170010991,modifier:soren,tags:Public PersonalDocumentation Ontology Systems Process LifeDirection Idea,type:text/vnd.tiddlywiki,text:Framework I made up on the spot with M.|PrivatePerson for identifying both needed tools and areas for process improvement (and how both could potentially be simplified) but worked spectacularly well considering its on-the-spotness.\n\n* Your life can be divided into a number of general pursuits that can logically be considered separately for convenience (though of course they arent perfect boxes|DontPartitionKnowledge). For me, these might be things like Music, Reading, Writing, Cooking, Outdoors, RecordsProject, etc.\n* Each of these has a number of functions. For instance, functions of music include practicing instruments and voice, finding and organizing music to play, listening to music, playing concerts, and making recordings.\n* Tools aid us in carrying out functions. Here, these include instruments, purchased media such as sheet music or CDs, notes, and SpacedRepetition systems.\n* Tools are the necessary-but-not-sufficient ingredient (see RoleOfTools) to use processes and skills to carry out functions. They often overlap partially with functions, but also often dont. For music, these include the act of practicing; a way to keep track of what music you know how to play, would like to learn how to play, have listened to, will listen to; individual technical skills on your instrument or voice; and recording and analysis equipment.\n\nYou can draw these on a sheet of paper in levels, much like an architecture diagram. We ended up using bulleted lists in each pursuit column and reference numbers to reuse items, rather than drawing lines between levels, because the page got very busy (each page had a letter, and each item we reused had a number, written in a different color).\n\nDiagram roughly looks like:\n\n|!Pursuits| Music | Reading |\n|!Functions|practicing, finding music, listening, concerts, recordings|...|\n|!Tools|instruments, purchased media, notes, SRS||\n|!Processes & skills|practice, music lists, technical skills||},{title:FreeBSD,created:20200423004211191,modified:20200423004222752,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Unix-like filesystem popular on some kinds of servers. Compare Linux.},{title:FreemanDevopsPrinciples,created:20200521200314848,description:Set of principles identified by MsEmilyFreeman as the root of DevOps in her RemoteDevopsCulture20200520 talk.,hideorphan:true,modified:20201209034557356,tags:Public Software Process MicrosoftBuild2020 Idea,type:text/vnd.tiddlywiki,text:{{!!description}}\n\n* Encourage teamwork\n** Give space for independent decision-making\n** Create watercooler spaces / human connections\n\n* Reduce silos\n* Avoid “not my job”\n** Hire curious people!\n\n* Embrace failure\n** Encourage smart risk-taking\n** Prepare for things to work out okay when you fail\n** Why was this able to happen? Lets fix the process\n\n* Communicate clearly\n** Speak clearly\n** Accept feedback},{title:FreeNas,created:20200423004153908,modified:20200423004316700,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Software providing a fileserver with a ZFS filesystem. A FreeBSD distribution designed for filesystem appliances.},{title:FreeSpeech,created:20210724124422004,creator:soren,description:Every generation needs to commit to the ideas of free speech. I do that here.,es:confident,modified:20221002153730071,modifier:soren,tags:Idea Essay Politics PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:(A slightly revised version of this essay|https://controlaltbackspace.org/free/ has been published on Control-Alt-Backspace.)\n\nFree speech still matters. I still support it.\n\nThis might seem too obvious to state. It isnt. It never has been and never will be. Free speech is a wildly counterintuitive, absurd idea that happens to be extraordinarily effective at letting people live well and promoting social change. But once the idea of free speech has pervaded society, we stop noticing its effects, and its basic absurdity starts to creep up on us again. So we need to renew our commitment to free speech at least once every generation. Now is as good a time as ever.\n\nWhat does supporting free speech mean?\n\nSupporting free speech means you believe that people have the right to say things you find wrong, hurtful, or even evil. You can ignore them if you want. You can listen to them if you want. You can even consider them if you want. You dont have to keep listening. You dont have to agree. You dont have to buy the book. Sometimes people are wrong|https://xkcd.com/386/. Its okay.\n\nSupporting free speech means supporting the free speech rights even of people you vehemently disagree with. In fact, it means supporting|AttentionEspeciallyToIncidentalDetails //especially// the rights of people you vehemently disagree with. If you only support the free speech rights of people you agree with, or mostly agree with, or at least dont completely disagree with, you are in fact supporting suppression of speech.\n\nThere are some who say individuals need not consider free speech rights, that those are only a concern of the government. But free speech is not found in the laws or the constitution. It is found in the hearts and minds and actions of the people. In a democracy, if the people stop upholding the spirit of free speech, the law will eventually follow. So while youre free to shun people for speaking their mind, or fire them from your organization for tweeting something stupid -- these are acts of free speech too -- supporting free speech means that you accept a moral obligation to think seriously about what youre doing when you impose sanctions on people for their speech. Are they undermining your organization, or saying something you find so abhorrent you cant possibly be associated with them -- or do you just disagree? Years from now, could it turn out that they were right and you were wrong|IntellectualHumility? Most important ideas start out sounding wrong -- like free speech itself. If we dont each support free speech in our own lives by visibly tolerating other reasonable perspectives and keeping our responses proportional, even as we disagree, nobody will. Soon there will be nobody left to stand up for you when you have something unpopular to say.\n\nThe harder you try to prevent bad ideas from being shared, the more traction they get. The most effective way to fight a bad idea is to counteract it with a good idea well expressed -- a method which conveniently happens to be fully compatible with free speech. So by all means talk back if you disagree. Supporting free speech means that you exercise your own rights instead of denying other people theirs.\n\nYes, there are information hazards|InformationHazard and other dangers to be found in the speech of people you disagree with (as well as those you agree with). But the benefits of free speech exceed these hazards except in a very narrow band, which mostly aligns with the First Amendment exceptions that have found their way into USA case law over the last 250 years: defamation, imminent lawless action, and the like. We can argue about hate speech. Supporting free speech means that the legal exceptions must end there.\n\nOur society needs to talk about how social media platforms relate to free speech. They are a novel medium that raises several new considerations, and the path forward is not obvious. But supporting free speech means that we cannot allow either a handful of private actors or the government to single-handedly decide what makes up acceptable public discourse. We cant ignore them because “theyre private companies” when they increasingly hold a near monopoly over being heard. Again, free speech isnt found only in the law. Thats not how free speech works. And its //certainly// not found only in the laws that were written before these tools existed. Were a democracy. We can change the laws. Thats the point.\n\nSupporting free speech means that I invite you to call me out if you ever find me failing to live by these principles. In public, if you like. I can handle it.\n\nLastly, I also invite you to renew your own commitment to the principles of free speech. You can do that privately, or if like me you are privileged enough to live in a place where youre legally and socially free to do so, publicly -- by sharing this piece, by writing your own piece, by shouting out your window, or even by writing and telling me Im horribly wrong. Or dont do anything. You choose: after all, thats the point.\n\n\u003C!--\n* Pandemic presents several examples that seemed wrong at the beginning, and were even considered horribly dangerously wrong and then became right.\n\n-->},{title:freezer-example.jpg,type:image/jpeg,created:20210115032146788,modified:20210421152932793,tags:Image Public,_canonical_uri:./extimage/freezer-example.jpg},{title:FreezerPackingStrategy,created:20210113234346233,es:confident,modified:20210522233030788,tags:Public Systems Food Idea,type:text/vnd.tiddlywiki,text:People often are surprised how much food I can fit in my ordinary-sized apartment freezer -- enough dinners for one person for a month if full, plus the usual stuff people keep in the freezer (ice cream, frozen vegetables, ice, etc.) And this without making it take forever to get anything out.\n\nA significant part of it is packaging. MasonJars are the best packaging for prepared, ready-to-eat food when you have limited freezer space: \n\n* They have a small horizontal footprint, so you can easily form them into whatever shape you want in the freezer.\n* They stack perfectly, so you can fill all the way from the bottom to the top without precarious heaps you cant get into later.\n* They fit together almost perfectly, too; the cylindrical shape with bulging top on freezer jars means theres just enough space to allow air to circulate around the jars without wasting any freezer capacity.\n* You can more easily freeze individual portions without wasting any space. I use half-pints and wide-mouth pints, depending on the food. Both stack three high in my freezer (the pints right up to the top, and the half-pints close enough).\n\nMason jars go into the back of the freezer. The rack (discussed in a moment) will probably take up either the right or left side of the freezer, so pack towards the opposite corner; this also ensures that you can lean them just a little bit against the wall to keep them from falling over if the floor of your freezer isnt completely level. Pack like jars in stacks, then in narrow rows from back to front. You dont want like jars in different spots in the freezer, or youll never know what you have when you dont have space to move things around. The narrow rows allow you to see more different items when looking into the freezer. Similarly, if you make a lot of something (e.g., a stock pot of soup), take advantage of your knowledge that you have a lot and put it in the back where you cant see how much you have as easily; you can safely assume you have more of it until you start to have trouble finding any, at which point youll usually have just a couple more jars.\n\nFor cooked meat, freezing individual portions flat in plastic freezer bags allows you to stack a good dozen servings vertically against the side of the freezer, without taking up virtually any space usable by something else. You can fit one of these stacks along both sides -- sometimes two sets along a side if needed.\n\nIce tray goes on a rack to one side of the freezer. Underneath the rack go things that arent very flexible in the freezer but are dense and short -- nuts, fruit, vegetables, that kind of thing. On top of the rack you can fit more vegetables that are a bit more flexible, and then put the ice on top of the vegetables when it gets to the top of the freezer, giving the vegetables a couple of whacks to reform them into a level shape if necessary while freezing new ice. This way you never have to remove more than one or two layers.\n\nThe front of the freezer not occupied by the rack is for bread, ice cream, uncooked meat, and any other goods that didnt fit on the rack side but can be haphazardly stacked.\n\nThe door adds a little extra space for anything small enough to fit, but you need to be especially careful not to overpack it with the freezer this full, or it will definitely not close! Its important to double-check that the door closed all the way when you finish using it; occasionally things may fall in the front while youre taking stuff out and keep it just a crack open.\n\nPeriodically you will have to repack to keep things together and ensure you use up anything old that youve forgotten about before it goes bad. Unless you have a very well-planned and stable cooking routine, your freezer probably goes through full periods and empty periods. The first time you make a lot of food after an empty period is the moment to repack since you can easily slide things around and get a good look at things; once you get used to it, rearranging at this moment will become automatic.\n\nIf you have the choice, can anything that can be either canned or frozen (e.g., vegetables, tomato sauce, stock, some soup), even if its a bit more work. That saves the freezer space for the stuff that cant reasonably be preserved any other way.\n\nHeres the freezer at probably just above three-quarters capacity, demonstrating most of these principles:\n\nimg width600 freezer-example.jpg\n},{title:FreudAndEmpathy,created:20200809020046583,es:possible,modified:20210511011253176,tags:Psychology Identity InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:MrDerrenBrown argues in HappyAbsolutelyFine2016 that for all his flaws, MrSigmundFreud introduced the world to the importance of empathy in psychology, and the understanding that people have reasons for acting the way they do, corresponding to their past experience -- its not that they just hate you or something. (Cf. MostRespectfulInterpretation, DesignApproach.)},{title:FriendshipDefined,created:20211029022533356,creator:soren,description:True friendship is reciprocal, not conditional on utility, and does not end due to either persons actions.,es:likely,modified:20240402013654402,modifier:soren,tags:InterpersonalRelations Identity Romance Public Idea Friendship,type:text/vnd.tiddlywiki,text:> If you find any reason why you and someone are friends, you are not friends.\n> ---The Bed of Procrustes|BedOfProcrustes2010, MrNassimNicholasTaleb, p. 62, “Ethics”\n\nShortly before reading this, I had been reflecting on my deep and extended friendship with K.B.|PrivatePerson and pondering why we had become friends; aside from similar personalities, we dont actually seem to have that much in common, and we certainly didnt when we met.\n\nBut I think Talebs aphorism demonstrates that this is exactly the point. The definition of friendship is circular: youre friends with someone because, well, you //are// friends. Bob is not your friend because he helps you do your math homework; we all know people like that, and theres nothing wrong with such relationships -- indeed, theyre a critical part of the social fabric -- but youd be being dishonest with yourself if you said youre friends with Bob. (I know this is the word we use, and Im not trying to change that, but its in the same sense that we say we “love ice cream”; its more or less two different words.) If Bob stopped helping you, or he turned out to be no good at math, you wouldnt see him again except out of politeness. Real friendship only happens when its not conditional on anyones utility; you just care about your friend because you like them as a person in some deep way and you know they like you too. (See also IrreducibleWoo.)\n\nFriendship has to be reciprocal, but not necessarily symmetrical|NoSuchThingAsSymmetricalRelationships. That is, different people can have different needs and desires met by the friendship, and it can be more valuable to one person than the other, but if either does not like the other as a person, there is no friendship.\n\nThis shouldnt be confused with why you //become// friends. In fact, I think the difference is why instances of becoming-friends often make great stories -- they have almost nothing to do with the rest of the friendship, although sometimes the energy from the meeting bleeds over and colors the rest of the relationship in interesting ways. (Ive met friends when they variously invited me|PrivatePerson to church at a time when I was feeling lonely; named a color|PrivatePerson incorrectly and started a long-term conversation on being color-blind|ExperienceOfColorblindness; and funniest of all, plagiarized my website|PrivatePerson.) Once you meet, whether in a boring or a creative way, and start to feel a connection, then you eventually fall into that circle.\n\nFriendship may demand a negative definition: youre friends with someone if youve undergone the catalyst process of becoming friends and neither party has then delivered or will deliver in the future a reason that you shouldnt be friends. Because no matter how long youve felt like youre friends, one true asshole move can destroy the friendship instantly -- and its not only that, the fact that someone made the asshole move arguably means you never really //were// friends at all. (Actual friends can make serious mistakes, and in a few cases it may be possible to confuse such mistakes with your never having been friends, especially if the dishonored party is a seeksorrow|HanlonsTanto. The world is messy. But I think this statement is still correct almost all the time.)\n\nFriendships and romantic relationships share almost all of the qualities described in this tiddler, making them more similar underneath than people often acknowledge. In fact, even though you know it when you see it|KnowItWhenWeSeeIt, its surprisingly hard to define exactly what makes a romantic relationship differ from a friendship (its not sexual attraction: see BeingAsexual2019).},{title:FriendshipParadox,created:20201201033504082,creator:soren,es:confident,modified:20230908140823217,modifier:soren,tags:Math Sociology Public Idea Friendship,type:text/vnd.tiddlywiki,text:A puzzling fact in SocialGraphTheory: The vast majority of peoples friends have, on average, more friends than they themselves do.\n\nThis is only surprising until you start digging into understanding social connections. A small number of people tend to be “social connectors” and have a ton of friends compared to everyone else (an example of the ubiquitous EightyTwentyPrinciple). Because social connectors have more friends in total, each person tends to be friends with a disproportionate number of them, and these people drive up the mean.\n\n(Also fun: you can usually find the social connectors you know by thinking of a bunch of your friends and acquaintances and recalling how you met them. Oftentimes youll find that the same couple of people introduced you to many of them -- those people are probably connectors.)},{title:FriendshipUnserious,created:20240301052252280,creator:soren,description:In many ways, we devalue and fail to give attention to creating friendships compared to other types of relationships.,es:confident,modified:20240915135303023,modifier:soren,tags:Idea Friendship Public Sociology,type:text/vnd.tiddlywiki,text:As Ive recently started focusing on creating some deep, long-term friendships in my new home|CommittingToMinneapolis, Ive concluded that our society systematically devalues friendship.\n\nThats not to say we think its unimportant, or we dont do it. Actually I think we abstractly value it a great deal. But we act wrong in two ways. First, we place much more emphasis on family and romantic partners, considering them automatically more important regardless of the specifics. And secondly, we just dont act like we take it seriously; we dont do the work to develop friendships and just hope they happen by dumb luck|DumbLuck. As a result, a surprising number of people dont have any real friendships -- and sometimes dont even realize it.\n\nHeres a collection of manifestations of our unserious practical attitude, as expressed in language and social norms:\n\n* We frequently use the same word, “friend,” to refer to both people we talk to for five minutes once a week at church and people wed trust with our lives.\n* Then were often hesitant to talk about how good of friends we are with someone. We do have the phrase “best friend” to try to distinguish, and people sometimes add other qualifiers, but often we dont want to use it. I imagine that in a social context where we took best-friend relationships more seriously, you would never consider mixing your terms. Consider: the only reason youd ever call your boyfriend your “friend” is if you were trying to hide something. Otherwise it would be insulting! I can easily imagine a language where some distinction of relationship seriousness was as fundamental as gender or the romantic/platonic divide mentioned above, where collapsing the distinction would just be weird.\u003C\u003Cfnote \In pointing out how useful it is for others to know which is which, M.|PrivatePerson once suggested an evocative way to tell the difference: would you consider calling this person if you had to go to the emergency room in the middle of the night? Its a high bar, but a good one (and everyone deserves to have a couple of people on that list).\>>\n* We are low-key //terrified// that our feelings arent reciprocated, yet we dont feel like we can talk about it. We very rarely actually explicitly commit to each other. Maybe we dont talk about it to others because we arent sure for ourselves in the first place.\n* You cant try to be serious about developing friendships. You have to start very casual and let them happen organically. To be clear, theres nothing wrong with this approach; indeed, it has some major advantages. But compare to dating. Romantic relationships can develop organically, but its also completely legitimate and probably more common to actively search for partners and promptly cut people off who arent promising. To me this suggests we take romantic relationships far more seriously: because we consider them important enough (and because for many people you only get one at a time), its OK to put ourselves at much greater risk of explicit rejection and filter through many people before deciding to commit to even continuing to spend time with someone.\n* There are all kinds of conversations were obviously allowed to have with our romantic partners that we are scared to bring up with our friends, and we even think it would be weird to have them. Like it even feels scary to do something as simple as telling someone straight-out that you really like them -- much less politely asking them if they can stop doing something petty that disproportionately annoys you or saying youre not getting enough of some sort of interaction youd like out of the relationship. (Some of my most valuable and best-defined friendships have been with people I asked out or actually dated -- after that part was over -- and I believe a key reason is that afterwards we still felt like we were allowed to talk about some of this stuff.)\n* We have Mothers Day, Fathers Day, Valentines Day...wheres the Friendship Day?\u003C\u003Cfnote \Im aware one exists, but nobody celebrates it in the US.\>> I guess itd be a little harder to celebrate because youd likely have multiple people youd like to celebrate with, but this seems like a minor point.\u003C\u003Cfnote \C.S.|PrivatePerson and I have started celebrating the day we met every year. Turning the celebration of friendversaries into standard practice would resolve the multiplicity issue.\>>\n* Compare the number of songs about romantic love to the number of songs about friendship. Notice anything? (I was remarking that Tom Pettys “Wildflowers|https://www.youtube.com/watch?vKw8vBDk880k” is unusual in apparently being to someone arbitrary and close, but not a lover.)\n* You cant explicitly decide not to see a friend again, unless they did something really horrible to you; you have to just get really cagey and hope they eventually stop bothering you. (I seem to remember a Seinfeld sketch about this.) I think really taking a relationship seriously requires the ability to end it without creating doubts about what the other person thinks of you, even when it hurts.\n\nBut maybe the weirdest thing is that if two people look like they could be attracted to each other, and they have a sufficiently close relationship, we assume theyre partners, or they //should// be if they arent: being friends isnt good enough. In a society where most romantic relationships are also monogamous, this is particularly bad, because if you listen to the social pressure you tend toward a situation where you never have more than one close relationship (except for “safe” relationships like ones with family). Sure, close friendships can sometimes turn into romances, and look, I think thats as delightful and cute as anyone|DemiPerson when it happens, but allowing that to get in the way of, you know, normal human connection is pretty terrible|PersonalizedViabilityOfPlatonicFriendships.\u003C\u003Cfnote \I find this particularly annoying when applied to (potentially) gay relationships. I understand the temptation if youre queer to look for representation anywhere you can get it, I do that too, but goddammit, even same-gender relationships arent safe now! At least its equal-opportunity I guess, but FRIENDSHIPS ARE A THING, come on.\>>\n},{title:FriendsIWant,created:20240208034801192,creator:soren,description:Im searching for more close friends; what should those relationships look like and who would work in them?,es:personal,modified:20251202030137902,modifier:soren,tags:Friendship PersonalDocumentation InterpersonalRelations Idea Public,type:text/vnd.tiddlywiki,text:Im looking for new friends, primarily but not exclusively in the TwinCities area. My primary goal in writing this little profile is not to directly solicit friendships but to focus my own thoughts on what I am looking for as I meet people intentionally and in my everyday life -- but in the spirit of DefaultToOpen, should you happen to stumble on this and think I look interesting, by all means feel free to reach out|mailto:contact@sorenbjornstad.com.\n\n\n!! Who I am\n\nWriter, thinker, teacher, systems designer, musician, computer person. Ceaselessly searching for new things to figure out. Excessive knowledge of odd trivia and mildly interesting facts which I will share at all times. I aim to make things that help other people learn, reflect, think, find and stay in wildly generative|WildlyGenerative relationships, and enjoy beautiful, meaning-filled lives.\n\nFavorite things: long walks, losing track of the time during a good conversation, sitting by the fire (ideally with a book or a friend -- and are they really so different? -- after chopping the wood, on a misty morning by the lake), making food for other people, falling asleep in a tent during light rain, discovering its one of those unoccupied Saturdays where Im suddenly motivated to put everything in perfect order in my apartment, that moment when five people in a row perfectly zipper-merge|https://en.wikipedia.org/wiki/Merge_(traffic)#Late_merge without slowing down.\n\nAlways trying to find things to do outside: hiking, camping, rowing|AwkwardAnnie, biking, finding excuses to use unnecessarily complicated knots I wasted my time learning, etc. I also like exploring cities (especially: visiting museums and historic buildings, walking the streets with no particular destination kibitzing about buildings and signs and street life, riding public transit and gazing out the window, snooping in alleys, finding good views in unexpected places).\n\nI dont know what I think unless I write about it in addition to talking about it, so Ive written somewhere around four million words in my lifetime (that would fill about 50 average-length books!), and publish some of it in various places around the internet. I wrote a textbook|https://groktiddlywiki.com for fun during COVID lockdowns. Unsurprisingly, I also read a lot (anything from sci-fi novels to academic treatises, plus a wide range of blogs and essays). I use way too many parentheses (like this).\n\nI play violin and mandolin and a little bit of piano, and I sing (mostly choir, but Im a mean solo church singer too; my voice is very blendy and not so great for pop or folk or what have you). Particularly into folk, bluegrass, classic country, and classical, but I have other stuff in my rotation as well, and I like listening to or trying to play music from outside my comfort zone.\n\nI do software for a living, and that includes some engineering, but I tend to live on the boundary between the technical world and the rest of the world: design, subject matter expertise, talking to customers, writing the documentation, teaching. I would get bored fast in a job where I stayed in only one of these categories. At my last job I helped other IT staff solve their problems when they got too complicated; at my current job I mix development, designing a flashcards system, writing most of the application copy and user documentation and some marketing material, and managing the customer support team. I work with a startup called RemNote (https://remnote.com); were making a combination note-taking and flashcards tool that uses scientific principles to make|https://ap.sorenbjornstad.com/#post-163 learning and remembering vastly more efficient.\n\n\n!! What Im like as a friend\n\nIm slightly on the introvert side of the spectrum, but I love people -- both getting to know new people and spending time with those I already know very well. That said, I dont need a lot of stimulation, and I often prefer finding enjoyment and meaning in simple|SimpleThingsDoneWell, low-key situations. I usually prefer intimacy to excitement if they come into conflict, and I prefer spending most of my social time with one to three other people, rather than at large gatherings or parties. Many of my favorite memories with my friends are seemingly mundane things like sitting on the couch in someones living room and talking about some weird and unexpected thing until midnight.\n\nThat doesnt mean I dont like seeing new things and having adventures|AdventureDefined though! I love exploring the world|Travelogue in all kinds of ways, and Ill try almost anything once; whether youve been wanting to try something weird for a while or you want to introduce me to something you already love, Ill probably agree to try it with you.\n\nI have to be in the right mood to start talking to strangers, and I tend to keep my mouth shut until I feel like I understand the situation around me, so I sometimes come off as quiet and shy at first. But Im actually very talkative once I get to know people.\n\nBecause I have a limited amount of social energy, Im selective about who I commit to, but when I find the right people, Im all in|HellYeah. My good friends and family (born or found) are my highest priority -- to me, thats what life is about\u003C\u003Cfnote \Noel Constant, //Sirens of Titan//: “It took us most of a lifetime to realize that a purpose of human life, no matter who is controlling it, is to love whoever is around to be loved.”\>> -- and I will always make time to talk or help you out when you need it, even if I have to shift some other commitments around. I take my promises seriously and will ask your permission before backing out of anything weve agreed on if its at all under my control. And I do my best to stay away from my phone and any other distractions when Im with others and theyre not relevant. I expect the same from others.\n\nDespite spending a lot of time online for both work and leisure -- or maybe because of that -- when it comes to friendships I primarily value in-person interaction and, when thats not possible, real-time calls. Texting is great for occasional banter and arranging things, but it doesnt really work for me as far as genuine connection goes, and its also inefficient; if you want to have a real conversation Id rather just wait until we can talk again. (I dont mind unsolicited calls if its time-sensitive!) Im not opposed to social media on principle, but I do as little of it as possible; Ive concluded that, personally, most ways I end up using it make my life worse.\n\n\n!! What I want\n\nI am ultimately looking for a small handful of really good friends who are serious about the project of forging deep connections and life-long relationships full of laughter, creativity, intimate conversation, adventure, and mutual assistance, and who are ready to put in the time and effort to make that happen. Every relationship is different of course, but that probably means spending time together at least a couple of times a month, talking openly about our lives and the world and what we want out of our relationship, and helping each other out when we need it. If we end up with a group of folks who all like each other, awesome, but Im not set on that; individual connections are fine, too.\n\nThis said, I enjoy meeting and talking with interesting people, and I often find chance encounters surprisingly useful and meaningful, even if I never end up seeing the person again. So theres no pressure at the start, and Im always down to just say hi and get to know you, no matter who you are.\n\nMost people who have great chemistry with me share many of these qualities: they move quickly|BloodSpeed (mentally and sometimes physically), enjoy being open and vulnerable (its OK if you take a while to open up!), have wide-ranging interests|EclecticMind, are deeply curious about the world|CuriosityAboutTheWorld, are humble|IntellectualHumility about what they know and unusually willing to consider|IndependentMindedness unpopular ideas and contradictory perspectives, love telling stories, are fascinated by language|Language (the medium of ideas), and have a certain streak of pedantry or smart-assery|HackingPedantryAndScience. Dont be too quick to count yourself out based solely on a mediocre match here, but if this sounds fundamentally unlike you, we probably wont be best friends.\n\nI get along best with people who are serious about leaving the world better than they found it and dont hesitate to ask difficult questions, but also dont take themselves too seriously. Life is fundamentally absurd; if you cant laugh at yourself and your situation sometimes, whats the point?\u003C\u003Cfnote \Camus argued that the main cause of suffering is expecting the world to be sensible. If you let go of that expectation, suddenly everything makes sense.\>>\n\nIm a transplant from the Northwest Indiana exurbs of Chicago, but I intend to make the Twin Cities|TwinCities home for the rest of my life, and when it comes to locals, Im most interested in friends who have similar intentions. I didnt make the commitment to stay lightly; for a curious and intellectually mobile person, such a commitment means permanently giving up many opportunities. But it also means I can reasonably make large investments of time and energy in people, communities, and places that dont move around with me, which I believe is ultimately better for me|https://ap.sorenbjornstad.com/#post-135. So I want most of those investments to be ones that wont pick up and go away.\n\nIve had good friends who are men, women, non-binary, cis, trans, genderfluid, and more, and I dont discriminate here, in any sense of that word. Im a man whos mostly romantically interested in women, but I am just as interested in and delighted by strictly platonic relationships with people I could be attracted to (I detest the phrase “just friends”; it corrosively devalues friendship|FriendshipUnserious).\n\nIn general, I dont have a hard boundary between friends and romantic interests, and I identify pretty strongly with RelationshipAnarchy ideas, in particular the rejection of the expectation that traditional labels like “friend” or “romantic partner” are the only options for close relationships with other people. My main goal is intimacy and connection of all kinds, whatever form it takes. I dont intrinsically value romantic relationships more than friendships, and I never have a hidden goal of turning a platonic connection into something else: if someone is open to that and it happens to end up feeling right to both of us, whether early on or much later, cool (I find most important things happen to me by accident|AccidentsMakeTheWorldGoRound). If not, thats equally cool! Ive also had|PrivatePerson a number of relationships|PrivatePerson that started in the romantic space and transitioned to the friendship space; I dont see that transition as a failure or loss.\n\nIm 30 years old, and Id love to find more friends who are close to my age, but Im also open to getting to know people who are significantly older or younger. Ive had quite a few of these friendships in my life, and theyre valuable and enjoyable in different ways.\n\nI usually dont count people out based on politics or religion -- indeed, I appreciate being pushed a little bit further out of my bubble, and I find that truth and personal growth is usually found where different worldviews gently and respectfully grate against one another, not where they mesh perfectly -- but there are a few basic exceptions. I wont be friends with anyone who is actively prejudiced,\u003C\u003Cfnote \I say “prejudice” rather than “*-ism” to refer to active, explicit discrimination or fundamentally held beliefs that some category is “less than.” Implicit bias and biased systems suck, but are not relevant here.\>> or actively opposes anything I see as a fundamental right; this includes things like “marry whomever you love” and “speak freely|https://controlaltbackspace.org/free/ about your opinions without fearing for your safety.”\n\nIm open to people of any religious background as long as it doesnt lead you to opinions that contradict the principles laid out in the paragraph above. I lean agnostic|NecessityOfGod and have an ELCA Lutheran background, which I have very mixed feelings about (I find value in the community and system of thought surrounding progressive Christianity, but both the ELCA and many of its communities are deeply flawed). Im happy to admit my own path forward is in flux right now.\n\nSome things I particularly enjoy doing with others:\n\n* Music: Up for new opportunities to play and sing, including just pulling a couple instruments together and messing around. I also deeply enjoy sitting with people and mindfully listening to and talking about each others favorite music, and of course seeing live music is great fun.\n* Walking: Great way to talk, think, and see the world, and easy to fit in to almost any day. Ill rarely turn down an invitation to walk cities, parks, or wilderness, in any weather, for any reasonable length of time, alone or with anyone else.\n* Travel: For me, at least, traveling alone and traveling with others are fundamentally different: the first is about deeply engaging with a place (while maybe meeting a few new people), while the second is about deeply engaging with your companions (while maybe seeing a bit of some interesting thing). Lately I think Ive been doing a lot of the former and not enough of the latter. I dont need to go somewhere exotic, distant, or expensive to enjoy the companionship!\n** I work ~95% remote,\u003C\u003Cfnote \We dont have an office, but we usually spend two weeks together every year somewhere in the world.\>> so in addition to the normal methods of traveling, I sometimes enjoy moving my desk to somewhere else in the country that has wifi for a week or three and exploring in off hours.\u003C\u003Cfnote \Doing this internationally can be legally complicated, so I havent tried that.\>>\n* Exploring the Twin Cities: Im still pretty new here (I moved in late 2021), and theres a lot to see right here|TravelOverrated. Once in a while I remember to spend a day checking some new things out, but I usually forget this is something I should be doing, and Id enjoy having someone to keep me accountable. Lets check out all the museums, shops, parks, landmarks, historic buildings, and restaurants.\n* Spontaneous gatherings: One thing that used to be part of a lot of friendships and has largely evaporated from society: wandering over to your friends house when youre bored and hanging out with them. Id like to bring this back. Come over on short notice, grab some dinner, go for a walk, play some cribbage, watch TV, whatever. I love making food either for or with other people, too.\n* Talking about...well, anything, except hate speech, deranged conspiracy theories (silly ones are fun!), and small talk that overstays its welcome.\n** Here are a few examples of important questions Im quite interested in right now:\n*** What makes some places better than others? How can we make better ones? How can we invest in our favorite places?\n*** Education suffers from being disconnected from real contexts of use, and formal public education has many other structural problems. How can we make it better?\n*** Why is it so hard to make friends? (Witness the amount of care I feel I need to put into writing this to help focus myself.) Has something changed? Is it the world, or us? What would fix it?\n*** How can I stay productive and deliberate in our current scatterbrained world?\n** Thats not to say everything has to be that serious!\n},{title:FriendsVsTripAdvisor,created:20230828024123167,creator:soren,description:How can a single friend possibly be a more effective way to get recommendations on what to do somewhere than a massive website?,es:likely,modified:20240611041713309,modifier:soren,tags:Idea InternetTheory InterpersonalRelations Travel Public Friendship Favorites,type:text/vnd.tiddlywiki,text:A somewhat facetious, yet important, question in the same vein as MaslowsHourglass: //Why is C.S.|PrivatePerson better than TripAdvisor?//\u003C\u003Cfnote \One is tempted to comment that they have many other useful features besides advising me on where to go when traveling!\>>\n\nHeres the setup. Im going to have two layovers in LA|LosAngeles on my upcoming trip|2023RemNoteBaliOffsite to Bali that will be long enough to be worth leaving the airport for a while. For the shorter one, Ill ride down a little ways to the beach and stretch my legs and relax for a couple of hours. For the longer one, Ill be there for almost 24 hours, and Ill rent a car and check out a few things. So, to what areas of the beach do I go on the short layover, and what all do I do on the long one? I dont have anything in LA on my global places-to-visit list,\u003C\u003Cfnote \If I learn about some really interesting-sounding place thats non-obvious enough it wouldnt appear on a list of top 5 things to do somewhere, I add it to this list, and when I travel I check the list to see if theres anything Ive been curious about nearby. Im not that good at adding to it, but its still useful.\>> and other than some vague notions about Hollywood, I dont really know whats there.\n\nMy best friend C.S.|PrivatePerson lived in LA for a year and a half, so my natural instinct was to ask them. Theyre compiling a short list for me, and Ill pick a couple things from there. That makes sense, right? If Im feeling particularly ambitious, maybe Ill do a quick google as well to make sure were not both missing anything obvious.\n\nBut now consider: does that approach really make sense? C.S.|PrivatePerson is one person, and isnt any kind of expert on LA. Theyre better than a randomly selected person since they lived there for a while, but they werent there all that long, and anyway, having lived in a place doesnt necessarily mean you know it all that well, especially the spots a tourist might want to see. If I go to a site like TripAdvisor,\u003C\u003Cfnote \This is not about TripAdvisor specifically, but about any kind of Internet research. Since its convenient to have a short name for that and TripAdvisor is probably the most popular single site that aggregates tourism ideas right now, Ill say just “TripAdvisor” throughout.\>> Ill, at least in theory, get the collected wisdom of tens of thousands of people. As an alien visiting the planet with no knowledge of human social relations or aggregation tools, my prior would obviously be that //surely// TripAdvisor would do a massively better job at helping someone select a couple of interesting things to see in LA. But not only was it not my first thought to check it out, after having thought about it, Im still pretty confident that it doesnt make more sense to base my choices on TripAdvisor, at least in this particular case.\n\nSo why is that? If this is true, it seems to mean that some part of the Internet project of compiling humanitys collective knowledge is just plain not working, and Id love to understand why that is.\n\n\n!! Social reasons\n\nFirst, of course, there are some reasons that dont have to do with maximizing the utility of your 24 hours in LA specifically; life is not, as a general rule, about that.\n\nIts more fun to ask a friend. Its also potentially a useful bonding moment -- you find out more about what they like, you can think about them and how they might have been living back in LA before you met them when youre there, and you can talk about what you did afterwards with them. If you pick someone who cares about you and you dont ask for an excessive number of favors like this, theyll probably enjoy putting the list together for you; its like giving them a free opportunity to give you a gift.\n\nAnd something feels //socially inept// about the opposite, doing all your own research on the web when you could talk to someone you know personally who knows the place well. I think Id be surprised, and maybe even irritated, if I found out that one of my good friends knew I had lived somewhere, was going there, and decided not to ask me about it. Again, on a logical level, Im not sure this makes that much sense; probably the fact that youre passing over these other useful social opportunities is a big part of that feeling.\n\nIts also easier to ask a friend. Rather than having to go to TripAdvisor and scroll through a big list and read reviews and all that, you can ask them to do the work for you, and theyll enjoy doing it. On the other hand, isnt it the fault of TripAdvisor that using it is, or at least feels, significantly more difficult? Why shouldnt it be possible to make it more efficient? Its a heck of a lot more efficient to, say, Google a fact than find a friend who knows the answer. At a minimum, it seems like in a well-designed system, the total amount of effort you and your friend together spend to come up with recommendations should be more than if you just went to TripAdvisor, and as I point out later, I dont think this is the case.\n\n\n!! Taste and automatic filtering\n\nMy best friend and I probably have much more similar tastes about what wed want to see in LA than the average|TyrannyOfAverages user of TripAdvisor and me. Whats more, where we differ, both I and they have a reasonably good idea of these differences, so they can adjust their initial recommendations and I can adjust my interpretation and prioritization of what they give me.\n\nIn support of this explanation, I dont think I would use, say, a person at my church I didnt have a strong relationship with to tell me what to do in LA, even if they had lived there for much longer than C.S.|PrivatePerson. If it came up over coffee that I was stopping in LA and that they had lived there or had strong opinions on what to see, Id scribble down anything they suggested, but I surely wouldnt accept their list as the primary basis for my final decisions about what to visit.\n\n\n!! Number and quality of options\n\nThe ParadoxOfChoice likely comes into play here. There are (I assume) an overwhelming number of things to do in LA, and TripAdvisor knows about practically all of them. C.S.|PrivatePerson knows probably a few dozen, and when put on the spot they probably will only think of five or ten that are suitable tourist destinations, things I would be interested in, and doable in the amount of time I have. By asking them to suggest five or ten places they think I should check out rather than looking at thousands on TripAdvisor, I end up with just the right number of choices: enough to freely select a couple Im in the mood for and will enjoy, not so many I get worried that Ive chosen the wrong options and have to keep looking to be sure.\n\nOf course, I wouldnt have to look at an excessive number of choices on TripAdvisor -- I could always just look at the top five or ten items and stop there. But this would surely be lower-quality than C.S.|PrivatePersons list, because here theres a key difference between human-generated recommendations and computer-generated ones. Humans miss lots of good results, but almost every result they think of is at least reasonable. Computers give a much larger total number of good results, but theyre inevitably mixed in with a large number of bad results. (Here a “bad result” means something that I wont be particularly interested in or find a practical thing to do over my stay.) This may be the primary reason that my intuition says asking C.S.|PrivatePerson is easier; there are fewer results to wade through to gather the number of plausible options I need.\n\nAnd thats not just me being lazy and offloading the work onto them. If hypothetically every year the two of us separately traveled to two places that wed never been to but the other person had, we would still collectively save time by asking for each others recommendations on each trip; its easy for most people to name their favorite spots in a given place (see my experiment later).\n\n\n!! Variance\n\nIt seems plausible that the set of outcomes from asking C.S.|PrivatePerson has shorter tails in general, which is likely preferable when you have only 24 hours somewhere and dont know when or if youll be back. That is, C.S.|PrivatePerson is comparatively unlikely to put something //amazingly cool// that only I would be interested in and almost nobody has ever heard of on my list, but its also hard to imagine that going to three places in LA my best friend loves would lead to me feeling like I wasted my day. Its easy enough to imagine that happening if I picked things off TripAdvisor.\n\n\n!! Trust and relevance\n\nTripAdvisor reviews can be faked, or various biases can cause them to be less meaningful. On one memorable occasion, I was at a rooftop restaurant in Kaş, Turkey, and the owner offered my group free rosé and dessert if we submitted three five-star reviews for his restaurant on TripAdvisor. As to how that worked out, lets just say the wine was great, and the dessert wasnt bad either.\u003C\u003Cfnote \To be fair, the restaurant was legitimately excellent, if perhaps not deserving of straight 5-star ratings in every category; its not like we were straight-up lying.\>> I dont have to consider the possibility that someone has bribed C.S.|PrivatePerson to review their restaurant in order to get accurate results!\n\nIn “Yes, I Do Mind Reviewing Your App”|https://controlaltbackspace.org/review/#the-growing-unhelpfulness-of-reviews, I mentioned that simply //having more people writing reviews// can make reviews less helpful, because the interesting statements get buried in among platitudes like “Great Product, 5/5!” Sites like TripAdvisor are full of this. (“Most helpful” ratings seem to do a surprisingly bad job at addressing this problem; I dont entirely understand why.) Having one person “write the reviews” eliminates this problem; they arent going to give you any meaningless ones because they know youre relying on them.\n\n\n!! Type of result\n\nLets try to dig in a little deeper with an experiment. I lived in ValparaisoIndiana for about 15 years, but have only visited briefly over the past 10. Here would be my immediate recommendations if C.S.|PrivatePerson asked me. I took about 60 seconds to write these up, and will not edit them except for style.\n\n> You definitely have to go see the IndianaDunes, now a national park (at least if you have a car and can get up there). I can give you some more recommendations on that. Stroll around downtown, stop in the Lifestyles gift shop at some point, get lunch somewhere down there. Ice cream down at V.V.|PrivatePerson a couple of blocks off. If they hadnt taken it out, youd want to go past that house on Jefferson Ave with a tree growing out of it. If you like thrifting, the mens shelter shop down on Axe Ave is pretty cool, and maybe the Bethesda shop. ChapelOfTheResurrection probably? Maybe walk around the rest of the university if you have time. Maybe the PorterCountyMuseum, but Im not that jazzed about it, look it up online and see if youre in the mood.\n\nWhat does TripAdvisor say?\n\nThe ChapelOfTheResurrection is #2 and the PorterCountyMuseum is #5. CentralParkPlaza is #10, which is //sort of// my “stroll around downtown” suggestion, but if you just went there and didnt see the rest of downtown, youd be missing a lot of the coolest stuff. And...thats it! None of my other suggestions are even on the list at all.\n\nI maybe filtered a little too hard to see the Indiana Dunes, but theyre only 25 minutes away from downtown -- and I just picked the “attractions in Valparaiso” option, I didnt apply any additional restrictions. A system like TripAdvisor ought to show you things that you would clearly want to know about even if they dont technically match your search criteria. Frame challenges are easy for people and extremely difficult for todays computer systems. Although here, suggesting the Dunes isnt even a frame challenge if you consider a normal persons intent. When I say Im looking for “attractions in Valparaiso,” what I mean to communicate is that Im going to be in or near Valparaiso and would like to know what I should do in that area; I only care how hard it is to get to each thing, not whether its within the city limits, or whether it has “Valparaiso” in its postal address. I dont know what criteria TripAdvisor is using here.\n\nWhat //did// it suggest? Theres the theater and the opera house (#6, #7), which could be cool but often wont have anything going on, plus community theater is a lot more fun when you live in the community. There are a number of parks which are nice but not even remotely unique. When I visit a place, I want to spend my time seeing things that are at least fairly unique to that place. County parks are a dime a dozen. Sure, Rogers-Lakewood Park (#9) is nice if you live in Valpo and want to drive 15 minutes and hang out at a park, but I wouldnt go there as a visitor unless I also specifically felt like hanging out at a park; its a pretty dirty lake with a few paddle boats, some disc golf courses, some picnic shelters, and some mediocre (and usually pretty mosquito-ridden) trails. Maybe wanting to see things that are unique to the place is a personal preference, to my point about taste? Not sure; it seems like CommonSense to me and basically the entire point of traveling, but we know how that goes.\n\nAlso in this vein: escape rooms, mini golf and lightweight amusement park (ZaoIsland is actually pretty cool, but if youre visiting briefly, I dont think its worth the amount of time it would take to experience it). I didnt think about breweries, etc., because I was underage when I lived in Valpo, plus this scene has developed a ton anyway in the ten years since I left, so I cant comment on that -- there might be some actual omissions from my list there. I left off a playground which is legitimately really cool and maybe worth seeing if you can get over your embarrassment at walking onto a playground as an adult to check it out (though I think the rickety old wooden version was cooler). And I left off an arboretum which is great but which Id forgotten about because I didnt get out there very often.\n\nSo obviously I didnt capture as much potentially interesting stuff as TripAdvisor, but we already pointed out that this is inherent in the project of getting a short list of recommendations from a single person, and not necessarily a bad thing. As far as being able to help someone have a nice day in Valpo, I still maintain I did at least as good a job as TripAdvisor, despite being one person and spending only about one minute. Obviously Im not really the right person to judge, since these are my own recommendations, but I think I pointed out a number of things that TripAdvisor missed which are probably more interesting to a curious|CuriosityAboutTheWorld person, and which I would certainly classify as not to be missed. Missing the freaking national park less than half an hour away is a particularly ridiculous oversight. So what happened here?\n\nOne confounder in this experiment is that Valparaiso has only about 30,000 people and doesnt get a huge amount of tourism. One would expect TripAdvisors recommendations on Valpo to be somewhat worse than its recommendations on LA simply because there is less traffic there (just like youd expect|ShouldYouBelieveWikipedia the Wikipedia page on LA to be higher quality than the Wikipedia page on Valpo). On the other hand, finding the best things to see in Valpo also seems like a much easier problem, because there just isnt all that much there in comparison. And its not like nobody added things to TripAdvisor -- there were over 30 entries.\n\nOne problem might be motivation. When someone stands to make money from advertising something, youre more likely to hear about it. In this case, commercial attractions are likely to advertise themselves. Nobody has a strong incentive to advertise the house with a tree coming out of it (which, to be clear, no longer exists, so Im not accusing TripAdvisor of leaving it out; its just a particularly good example), so youre less likely to ever hear about these kinds of spots, which tend to be more the kind of thing I want to see -- dissimilar to things found somewhere else, slightly off the wall, off the beaten path. On the other hand, if youre a local, its also a lot more fun to create or improve a page on the house with a tree coming out of it than one on somebodys amusement park, which you might expect to balance out the effect.\n\n(A counterargument, though: there is sometimes an incentive for locals to keep places like the house with a tree coming out of it quiet. When something like that becomes a tourist attraction, it can be obnoxious for the people around it, and brings little to no benefit to them; certainly nobody is making any money off it. In cases like this, you arent particularly inclined to tell the whole internet about something, but would be happy to tell your friend. Like, I would happily share my favorite campsites with C.S.|PrivatePerson, but might not even tell an acquaintance at my church, much less the internet.\u003C\u003Cfnote \I have specific logic in my parks articles on this site to hide them!\>> So, both because people are happy to make small concessions to their personal best interests for people they know well, and because giving a single person some information has no meaningful effect but giving hundreds of people the information can ruin a place, there is no obvious way to improve TripAdvisor in this case.)\n\nAtlas Obscura|https://www.atlasobscura.com is an interesting case. It includes specifically quirky and unique places, and it is (at least used to be; it seems to have gotten somewhat more commercial over the years) primarily created by community contributors. This may result in significantly more //interesting// places than a more general resource, but whether they are actually //better// is less clear.\n\nIt is surprising to me that the specific establishments I recommended -- Valpo Velvet and Lifestyles -- dont have entries at all. While they arent explicitly tourist attractions, they are exactly the kind of spot that tourists would want to visit, and it doesnt seem very hard to create an entry for yourself on the handful of sites like this that people will often use. (Yelp, GoogleMaps, TripAdvisor? I think that covers most of it.) Unless there is some kind of notability or type-of-establishment restriction that Im unaware of. On the other hand, Im not surprised that the thrift shop lacks an entry; thats the kind of thing youd expect only a local to be aware of, and Im not sure theres an obvious solution for this.\n\nI think theres also a schema problem here. “Stroll around downtown” isnt an “attraction” in the sense that it has an address and an owner, but its often one of the best things you can do in a place. I wonder if it would be more effective to organize a site like this around //activities// rather than attractions -- for instance, people could report what they did with their afternoon in a place. Not only would this let you capture things that dont have a specific address, it would also give you an idea of what things could reasonably be put together.\n\nMy San Francisco travel journal|https://sf.tj.sorenbjornstad.com/#Index has many entries that are activities in this sense. For instance, the Historic Transit Day|https://sf.tj.sorenbjornstad.com/#Historic%20Transit%20Day entry is not an “attraction”; the activity involved visiting a museum, taking four different public transit lines, and walking several places in between. But its something that other people could definitely be interested in replicating, that would be reasonable to put on a list of things to do in San Francisco. At the same time, many people prefer to put activities like this together themselves from component parts, so these kinds of activity listings might be better for inspiration than for exact replication.\n\nActivities are much harder to search, deduplicate, etc., than attractions, which is presumably why nobody does this. That seems to be a problem we have not yet solved, to the point that its more effective to hope you know some single person who can give you an explanation of their great activity, or that you find a blog post where someone explained it, than to try to find one posted somewhere.\n\n\n!! Fixes?\n\nFirst of all, one ought to ask, do we //want// to make the internet better than our best friends at deciding what we should see when we travel? It would be perfectly fair to decide that, for aesthetic and interpersonal reasons, wed prefer to keep something in the domain of humans when possible -- especially since ones enjoyment of travel is in significant part aesthetic and subjective. But even the most socially connected people cant hope to always know someone whos lived everywhere they might spend a day-long layover, much less at a level of intimacy where that persons recommendations would be highly valued, so at minimum, making TripAdvisor more effective when you dont have other obvious options seems desirable. And I dont know that I buy the suggestion that we should keep this all human in the first place; a combination of social recommendations and algorithmic ones doesnt seem like a terrible loss.\n\nIf we do want to improve the TripAdvisor workflow, perhaps to intentionally make it more hybridized with recommendations from our friends, how could we do that?\n\nOne possibility would be to somehow connect TripAdvisor to your social graph, essentially turning it into an IntroducingApp. (See my claim in MaslowsHourglass that, no matter what activity or relationship youre trying to create, you can always connect people to each other without seeming distasteful, even when you cant act more directly.) I type in that Im going to LA, and the system tells me that C.S.|PrivatePerson lived there, and maybe that they have some reviews they posted on the site, or that theyve said theyd love to talk with people they know about it, or that based on what they liked, you might like these attractions. Maybe it could include friends of friends, too.\n\nAnother intriguing possibility based on my observation that C.S.|PrivatePerson and I probably have similar taste would be a system where you put in what attractions your friend(s) liked in a particular place, and it then uses that to guess at //your// taste and give you better recommendations than the standard one.\n\nThere seems to be some problem with TripAdvisors definition of an attraction that makes it miss things worth seeing. Maybe it needs to somehow be broader to be fully effective. On the other hand, there are also systemic biases and misaligned incentives here that seem difficult to counteract.\n\nThere is definitely some problem with TripAdvisors definition of a location, at least for small towns; the fact that it didnt suggest the Indiana Dunes in my experiment is bizarre, and doesnt seem like it ought to be very hard to fix.\n\nAs far as my “activities” idea goes, a pie-in-the-sky system would solicit reports of what people did with their afternoon (perhaps literally combining it with a travel journal to give people an incentive to give detailed reports), ingest all the reported activities, and create some sort of map-and-filter-based activity planner that incorporated the information and reviews and helped you put your own activities together, maybe on the fly while you were on the street with your smartphone, so you could take your current mood into account.\n\n\n\n\n\n\n\n\u003C$details summary\Unorganized random thoughts\>\n\nIt seems clear that someone who has firsthand experience of a place is better able to filter something like TripAdvisor. But when its not //you// doing it but your friend...why does this still feel like they can do a better job? Its like TA isnt managing to distribute all the expertise embedded in it to its users for some reason.\n\nMotivation: does it help TA that much if recommendations are way better?\n\n\u003C/$details>},{title:FrobnicatesWhizbangs,created:20200301191410918,es:confident,modified:20200301191654673,tags:Expression Code Public Idea,type:text/vnd.tiddlywiki,text:Traditional expression in software documentation, etc., for an unspecified operation being carried out on an unspecified object. E.g.\n\n```\nx frobnicateWhizbang(whiz)\n```},{title:FrogAndToad,created:20200203142456153,creator:soren,modified:20200509032331441,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,text:Series of lovable childrens stories involving (fancy this) a frog and a toad who are friends.},{title:FrontOfMind,created:20220524005904709,creator:soren,description:Items you have thought of recently affect your behavior more strongly and are more usable in creating new insights.,es:confident,modified:20220909201819917,modifier:soren,tags:Creativity Psychology SpacedRepetition Idea Public,type:text/vnd.tiddlywiki,text:Something is at //front of mind// when youre regularly spending time thinking about it and youre likely to notice when its related to any other information you encounter or events that occur.\n\nThings in the back of your mind may be very well understood and remembered, but you must specifically try to retrieve them, or encounter exactly the right cue, to have them come forward and be available for regurgitation or recombination with other ideas. Things at the front of your mind will just show up effortlessly. Its these things youre most likely to make creative connections with, spend time pondering when youre in the shower or driving to work, and act quickly on when a relevant opportunity arises.\n\nSpacedRepetition tools are a powerful means to manage whats at the front of your mind; see SpacedRepetitionAsThoughtManagement.\n\nThis term is often used in marketing (sometimes //top of mind//) to indicate the brand or product which someone is most likely to think about in a particular context, perhaps because of good advertising in contexts they frequent. My use of the term is significantly more general.},{title:Frozen,color:#000000,created:20210917204054827,creator:soren,icon:$:/core/images/locked-padlock,modified:20231016023721252,modifier:soren,readstatus:read,tags:Public Meta,type:text/vnd.tiddlywiki,text:Indicates that a tiddler should have an update status|UpdateStatuses of //Frozen//.},{title:FrozenTwo,caption:Frozen II,created:20200812031349880,medium:film,modified:20210516224206288,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,year:2019,text:TheDisney sequel to Frozen (logically enough). I watched this //months// ago, but only now have gotten around to the quick notes I took at the time...so Ill at least throw this summary in here.\n\n* Overall, it was a solid story with a compelling mythology, unifying music, and beautiful graphics. The criticisms shouldnt be taken to overshadow this point. I think One was better, but it wasnt a case of the TerribleSequel, and its been long enough since I saw One that what do I really know?\n* DoTheNextRightThing is really quite a powerful insight.\n* In the first Frozen, I was irritated that we saw so little of Anna compared to Elsa, and I assumed that this movie would right that wrong. Nope. There still wasnt enough. Shes clingy and distrustful and still a little bit flat, and all her problems magically disappeared at the end. Urgh.\n* The whole thing was a little bit happy-go-lucky, particularly the ConvenientlyAvoidedArendelleFlood.\n* What the heck is this “water has memory” bullcrap|WaterHasMemory?\n},{title:FsrsThreeDayJourney2024,author:Jarrett Ye,bibliography:Anki,caption:Spaced Repetition Algorithm: A Three‐Day Journey from Novice to Expert,created:20250309153145028,creator:soren,description:Full explanation of the mathematical and practical underpinnings of the FSRS algorithm.,medium:article,modified:20250309153228094,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://github.com/open-spaced-repetition/fsrs4anki/wiki/Spaced-Repetition-Algorithm:-A-Three%E2%80%90Day-Journey-from-Novice-to-Expert,year:2024,text:\n\n},{title:fuck-biden.png,type:image/png,created:20221002134159364,creator:soren,modified:20221002134205166,modifier:soren,tags:Public,_canonical_uri:./extimage/fuck-biden.png},{title:FullStackFreelancing,created:20200425213437828,es:possible,modified:20201209021456328,tags:Employment LifeDirection Economics Public Idea,type:text/vnd.tiddlywiki,text:A method of working and making your living that involves not having an employer, but not focusing on a specific expert skill as freelancers traditionally have, instead focusing on a “portfolio” of related skills. It is a more specific, business-planning-focused form of Polyspecialization. The idea being that because of the EightyTwentyPrinciple, you get less and less out of a given area of development or business the more time you spend doing it, and your OpportunityCost accordingly rises. Thus, you can often accomplish more if you diverge your business into things that go together but bring in income and help the world in different ways. E.g., you might combine consulting, writing, and doing actual work of various kinds. This has additional benefits for flexibility and creativity too, as laid out in Polyspecialization.\n\nThe author seems to have an utterly incorrect understanding of the concept of DeepWork, seeing it as opposed to this idea, which I decided to just pass right over because it is so bizarrely wrong and also completely irrelevant to the argument. (OK, this is preterition, because its so bizarre I cant help making fun of it!)\n\nSource: RiseOfFullStackFreelancer201706.},{title:FullTextSearch,created:20200401011014097,creator:soren,es:confident,modified:20220201162726476,modifier:soren,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Information-searching functionality enabled by computer systems: enter some text and all units of information that contain that text appear.\n\n; Benefits\n: Very convenient. Requires no effort for the author of the information to make indexable. Can often find things that no other method will find.\n; Drawbacks\n: Scales poorly for many types of information -- without intelligence like Google has to figure out what youre actually asking, eventually the same words come up over and over again. (Exceptions exist, like quotations.) Very sensitive to slight lapses in memory and different ways of writing the same thing; since language|Language has synonyms this is a gigantic problem.\n\nRemNote takes an interesting mitigation approach to the scalability issue in which the main search bar is simultaneously a full-text search and a hierarchical drill-down, so if you know roughly where in your knowledge base youre looking, you can quickly limit by that, and you can do so on the fly //after// you realize the search is too broad.\n\nAlternatives include Indexing, tagging (entry point: FunctionalVersusTopicalTags), linking (NotesMustLink), and hierarchies (see HierarchiesVersusNetworks).\n},{title:FunctionallyAlone,created:20221205041232808,creator:soren,description:The state of being in an interaction with someone that behaves like only the two of you exist, without necessarily being away from others.,es:likely,modified:20230616132707394,modifier:soren,tags:Idea InterpersonalRelations SorenConcept Public,type:text/vnd.tiddlywiki,text:The state of being in a one-on-one conversation or interaction with someone that behaves like only the two of you exist, without necessarily being //alone// (away from other people). The two of you are functionally alone, for example, if you go on a date or outing together in a public place. You arent functionally alone if you run into someone at a party and talk to them one-on-one for five minutes, though, because its understood the interaction is not just about you two, except on a very temporary basis; someone else can walk up and join, or one of you can leave, at any time.\n\nTurning a situation where you are functionally alone into one where you are not, without agreement, is very bad etiquette, because the other person is expecting you to devote your full attention to them. Its possible to do this without actually immediately including another person, too -- screwing around on your phone during the situation, for instance, effectively involves other people and removes attention.},{title:FunctionalProgramming,created:20200306192227725,creator:soren,description:Programs consist of a mathematical expression composed of functions that take input and produce output with few to no side effects.,es:confident,modified:20211206161035936,modifier:soren,tags:Code ProgrammingParadigm Public Idea,type:text/vnd.tiddlywiki,text:ProgrammingParadigm that treats programs as (ideally) a gigantic nesting of pure mathematically defined functions that take inputs and produce outputs which flow to each other without explicitly managing state. As one article|https://medium.com/javascript-scene/mocking-is-a-code-smell-944a70c90a6a concisely puts it: “Pure functions describe structural relationships between data, not instructions for the computer to follow.” In reality, some occasional things require state in most practical programs (e.g., in order to put information on the screen). \n\nMost mainstream programming languages have added support for many of the most popular features, like lambdas, foreach loops, first-class functions, closures, and so on, a trend likely started by Python, where many of these features were only available in true FP languages like the various Lisps before.\n\nThe real key to FP is the reduction / elimination of state and side effects, especially shared state: everything really does become much easier to understand when variables never take a new value, or do so only when it is performance-critical. Its also way easier to refactor and test things and makes identifying potential abstractions both simpler and easier to create. ObjectOrientedProgramming, in contrast, all but requires juggling state everywhere, which may be one of the most important reasons that it failed as the world-changing abstraction it was hailed as.\n\nRustLanguage, while not a functional-programming language by any means, sees some of the same insights about state and the guarantees that FP gives you and implements them in a different way, using largely standard ProceduralProgramming rules but making it a compile-time error to, e.g., mutate a variable that any other context has access to without explicitly locking it.\n\nMost academics say FP is awesome, but most businesspeople say its impractical and, well, academic. Its hard to know whos right since the whole industry has solidified on OOP and many of the perceived benefits have to do with experience and ecosystem, which is a hard-to-reverse trend.},{title:FunctionalVersusTopicalTags,created:20200226020220077,creator:soren,es:possible,modified:20211204154441371,modifier:soren,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Argues that tags should be used functionally rather than topically. In other words, tags should be used for categories of item (e.g., the red tags in ZK|ZettelkastenCardType like \u003C\u003Ctag Image>>, \u003C\u003Ctag Source>>, etc.), or for projects youre working on or contexts you know you will want to see the item in again. Classifying things into domains or areas of knowledge (e.g., \Psychology\) often leads to a proliferation of tags, many of which you will not think to look under later.\n\nThis makes sense, but in a ZettelKasten context I still struggle with how to identify these functional tags or how to avoid losing track of entry points to notes if I do not use them. This said, a day of reckoning seems sure to come as my tag list expands. Ive already had to add columns to my list so it doesnt scroll off the screen. One possible solution would be the original-Luhmann approach for building ZettelKasten indexes, where you tag only the most relevant/important/recent/high-level items and rely on linking to find the others.\n\nA particular issue with tag proliferation is that deciding what to tag notes with is a linear-time operation, or perhaps even worse. As the number of notes in your collection increases, tagging becomes an ordeal.\n\nSource: TaggingForPersonalKnowledge20190109.\n\nSee also MinimalTagging and RetrievalContext.},{title:FunctionOfPlanning,created:20200202025659211,es:confident,modified:20210608213140814,tags:Systems PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Plans are made to be thrown away. If you make a plan and then follow it exactly, youre probably doing something wrong! See AgileHumility and RespondingToChange.\n\nOne cant help remembering the FrogAndToad story in which Toad (if Im remembering which is which correctly) makes a to-do list for the day and follows it as if his life depended on it. First, he refuses to go hang out with Frog even though he wants to, because its not on his list. Then, when the list blows away in the wind as hes walking, he sits and does nothing because he doesnt remember whats on his to-do list, and when Frog comes by and suggests that maybe he could go look for the list, he insists that he cant do that because looking for his to-do list is not on his to-do list!\n\nBut then, theres also nothing worse than not having a plan. A lack of any ContingencyPlanning tends to make things into failures. On the other hand, if you plan well and then fail, you can still feel great about yourself (see StoicFork).\n\nSo the right approach seems to be to have a clear short-term plan, a vague medium-term plan, and an extremely vague long-term plan. If any of the plans need to be changed, then you do it; theyre living documents (or mental traces, whatever) that help you keep track of the latest state of things, not intransigent bosses.\n\n!! References\n\n> For the best benefit of good planning is this: if one is thwarted by some setback, nevertheless one has the sense that the plans were well-laid, but bad luck intervened; whereas if one is a bad planner, but fortune turns out favorably, one has the sense of having thrown a lucky roll of the dice, but still having laid bad plans.\n> ---Artabanus, advisor to Xerxes, as reported by Herodotus (//On the War for Greek Freedom// 7.10)},{title:FunnyBecauseItsTrue,created:20200422235540297,creator:soren,es:likely,modified:20210917011923463,modifier:soren,tags:Humor Expression Public Idea,type:text/vnd.tiddlywiki,text:Popular H.S.|PrivatePerson quote. And its very often useful! True things seem to be intrinsically funnier. Recognition of something utterly pointless as a common experience also seems to be InherentlyFunny.},{title:FutureOfInteractionDesignRant2011,caption:A Brief Rant on the Future of Interaction Design,created:20201015022431269,medium:article,modified:20201015023020721,tags:Source Public,type:text/vnd.tiddlywiki,url:http://worrydream.com/ABriefRantOnTheFutureOfInteractionDesign/,year:2011,text:Article explaining how important hands and physical objects are, and how terrible a job todays computer interfaces do at using all their capabilities.},{title:FutureOfProgramming2013,caption:The Future of Programming,created:20200808030333688,medium:lecture,modified:20210702024251440,readstatus:read,tags:Source Antilibrary Public,type:text/vnd.tiddlywiki,url:https://www.youtube.com/watch?v8pTEmbeENF4,year:2013,text:Talk by MrBretVictor on programming. I watched this once upon a time and got \u003C\u003Crt 9650>> out of it, which is really just great, but I ought to watch it again and get some more notes in here someday.},{title:FutureOfTech20200520,at:202005201645,caption:The future of tech, with Kevin Scott and guests,created:20200518214154524,creator:soren,medium:video,modified:20230406023120689,modifier:soren,presenter:MrKevinScott MrPeterLee MsLilaTretikov MrLuisVargas,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/6c6ecd46-c39c-49d8-baed-3bc207bc5bec,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nHosted by Kevin.\n\n* Eras of computing defined by boundaries which are then pushed past.\n\nBig areas coming up:\n\n* End of MooresLaw\n* Data Explosion\n* EdgeComputing\n* PC truly ubiquitous\n* MachineLearning/ArtificialIntelligence\n\nThe tools dont change the world...the platform does when others use it. The future of AI comes when we can make it accessible to everyone, not just data scientists etc.\n\n* COVID-19|PandemicMood, from MrPeterLee\n** Why we need rapid innovation\n** Triage bot “Grace”\n*** Assess people before they come in so they go to the right place\n*** Keep hospitals from being overwhelmed because people dont know if they need to be there\n*** Allowed 13,000 televisits per day\n*** Now up to 30 million self-assessments!\n** Azure is donating compute power\n\n* Self-supervised training via deep learning for generalized language representation -- MrLuisVargas\n** Still being held back by too little compute power\n** Microsoft technology exposed through Azure Cognitive Services\n** Ability to use unlabeled data, just by reading a bunch of stuff and trying to predict words and sentences\n** Over the last year, the largest language models have gone from 1 billion to 17 billion parameters\n*** Reading level from third-grade to high-school\n** Demo of a system that can read a new passage and answer questions about it. The answers need not be found verbatim in the text.\n** Can also produce a summary.\n** Microsoft gains using a system “Deep Speed” that increases training by an order of magnitude while simultaneously allowing larger models\n*** Available on the Onnx framework\n** Being incorporated in search results, bots, CRM in MS software\n** Expanding to allow a model for an individual organization\n** Adding some photo/video processing as well\n\n* AI Supercomputing\n** Purpose-built systems for training models\n** Microsofts new version is a top 5 largest supercomputer in the world\n** Cloud-hosted\n** Lessons apply to anything in Azure and improvements will trickle down\n** Sam Altman: entrepreneur/investor, CEO at TheOpenAi, the customer for the machine\n*** How will these models affect developers?\n*** \Interested in understanding all the types of data in the world\\n*** Models can sometimes turn out to be useful for things you didnt expect.\n**** TheOpenAi code generator!\n***** Writes Python code based on the docstring\n***** Have also been able to make it write unit tsets\n***** Intellicode in VisualStudioCode already does a worse version of this\n\n* MsLilaTretikov on edge computing and IoT\n** Pizza curbside-pickup license-plate recognition system\n*** Local fallback model for when 5G coverage is not available\n** Delivery robot takes the pizza to the car, triggered by voice saying who to deliver the order to :D\n** The Spot dog-like robot requires an advanced model as well as expert one-on-one training\n** This is going to affect our work as developers...the tech is here today, and we know how fast that happens!\n\n* Neural networks are vaguely like calculus in terms of their revolutionaryness (?)\n\n* For a net positive impact on society:\n** Democratization of tools\n** Mostly platform owners...but developers can work on it too\n** Thoughtful, accountable, ethical -- everyones responsibility},{title:Game,created:20200406025049279,creator:soren,modified:20210828141034668,modifier:soren,tags:Public Definition,type:text/vnd.tiddlywiki,text:Identifies either specific games or concepts common to games on the theory of games.},{title:GarbageInGarbageOut,created:20200525222522443,creator:soren,es:confident,modified:20211204154433555,modifier:soren,tags:Public Creativity Reasoning Systems Idea,type:text/vnd.tiddlywiki,text:GIGO has been affectionately bandied around for decades now, but it remains as true as ever: What you get out of a system is 100% dependent on what you put into it. Bad data, bad conclusions. No worthwhile ideas and experiences, no worthwhile results. Neither computers nor people are magic -- the value doesnt spontaneously generate!},{title:GasLighting,created:20200425160931060,es:confident,modified:20210511010900807,tags:Psychology InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Abusive technique in which one attempts to convince somebody that they arent actually being abused and that theyre making up anything theyre disturbed about. A form of DeteriorationOfReality, engineered carefully to confuse and hurt.\n\nRecently, the term is becoming diluted, being used to refer to, basically, disagreement. I guess that happens to almost every word over time, but it stinks because this is a very useful concept.},{title:Gearsness,created:20240223131406810,creator:soren,description:How well do you understand whats going on “inside” a topic?,es:confident,modified:20250902153844844,modifier:soren,tags:Idea Definition Reasoning Public,type:text/vnd.tiddlywiki,url:https://www.lesswrong.com/posts/B7P97C27rvHPz3s9B/gears-in-understanding,text:Gearsness is a property of a personal MentalModel that describes how well you understand whats going inside.\n\nThe metaphor is of a box with two axles which are connected by gears somewhere inside. When you spin one axle, the other turns some direction. You know which direction it will spin, but do you know //why//? How much of that interior can you follow and explain?\n\nGearsness rises with increasing understanding of the topic. The more gears you have, the more accurate and confident your predictions about new questions youve never answered about the subject matter will be. It would be interesting to try to explicitly identify specific ways that you can increase gearsness, though the most direct options may be different for different topics.\n\n\n!! Examples\n\nRecently I was over at C.S.|PrivatePersons place and they wondered out loud if maybe there was a kind of air conditioner they could get for the garage that wouldnt need a connection to the outdoors (story: \u003C\u003Crt 13109>>). We both understood air conditioners in the sense that, like, you put up the air conditioner and turn it on and it makes the room cooler. But evidently that was about as deep as the gearsness went for them, whereas because I understand roughly how air conditioners work (move heat from one place to another, usually using a compressing/condensing/evaporating/expanding cycle), I could answer that inevitably|InevitablyCorrect, this had to be impossible, at least with a standard AC. I am sure there are topics one level deeper that I would be completely ignorant of but would be just as obvious to an HVAC technician!\n\nThe LessWrong \u003Ca href{{!!url}} class\tc-tiddlylink-external\>article\u003C/a> discusses how the authors mother loves learning about history, and how we would be completely unsurprised if we had instead been told that she hated it, but the author would be wildly surprised. Thats because he knows everything //else// shes interested in and that drives her personality, and the fact that she hates history is totally inconsistent with those. Intimacy|IntimacyDefinition is perhaps partly gaining the ability to be surprised.\n\n\n!! References\n\nLessWrong: {{!!url}}},{title:GeneralPoopingFault,created:20200630005238660,es:mythological,modified:20210509005506959,tags:Humor Language SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Parody version of //General Protection Fault//, the extremely unhelpful message (to any non-programmer) that used to show up on MicrosoftWindows programs once upon a time, the more general and Windowsy version of a segfault. I flippantly used this in a test program I was writing recently.\n\nIn a prime example of ThingsYouCantFindOnTheWeb, I appear to be the first person to have ever said this phrase on the internet, as there were zero results on TheDuckDuckGo in late June 2020 when I checked!},{title:GeneralTheoryOfKeynes1936,author:Keynes,bibliography:LifetimeReading,caption:The General Theory of Employment, Interest, and Money,created:20210703170128000,genre:Economics,medium:book,modified:20210705214034819,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1936},{title:GenerativeRestriction,created:20200316220604346,creator:soren,description:The freest environment is one that has well-chosen restrictions.,es:confident,microlink:generative,modified:20240618005016196,modifier:soren,tags:Psychology Creativity Public Idea,type:text/vnd.tiddlywiki,text:> Form is generative.\n> ---\u003C\u003Crt 6970>>, after P.|PrivatePerson\n\nMany people conceive of restrictions as harmful to creativity. Actually, the opposite is true: a wide-open, indifferent audience or means of judgment is the least creative environment. When there are no rules, there is no freedom|NoRulesNoFreedom.\n\nConsider the art of MaliciousCompliance: its an inherently creative pursuit, and there would be nothing to do at all without the silly restrictions in place. Being good at maliciously complying involves thoroughly understanding completely arbitrary restrictions so well that you can follow the restrictions perfectly while doing something nobody expected.\n\nSimilarly, nobody would ever accuse an artist of lacking creativity merely because she produced a sonnet, or a verse-chorus song, or a classical sculpture: “Why cant she have made something //new//!?” Unless you are a true genius and excellent at artistic TaxonomySmashing, working within the form usually makes the results better, aside from making the creation process easier.\n\nWhy is this? Component hypotheses:\n\n* A completely blank slate is just too blank to offer any ideas.\n* By taking some options off the table, other options that have virtues but would never be considered otherwise get used: a new PathOfLeastResistance that involves different ideas is generated.\n\nEven if your goal is to go beyond the expected restrictions, its often more effective to follow 95% of the rules, and then break a couple of them deliberately. Breaking rules creates a stronger effect when the broken rules are juxtaposed with careful compliance.\n\n\n!! References\n\n\u003C$m2.x number\1\>\nHowToTakeSmartNotes discusses this concept around p. 151.\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\n> Dont violate rules for the sake of violating them. If you break the rules only when you have an overwhelmingly good reason to do so, you will have more than enough trouble to last you the rest of your life.\n\n---qtd. in Make an Extraordinary Effort|https://www.lesswrong.com/posts/GuEsfTpSDSbXFiseH/make-an-extraordinary-effort\n\n\u003C/$m2.x>},{title:GenZ,created:20200322035720310,creator:soren,modified:20201204041546853,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Generation succeeding Millennials.},{title:GeoGuesr,created:20221211030058160,creator:soren,modified:20221211030101412,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki},{title:German,created:20200708013709772,modified:20201204041546872,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Popular natural language. Yup.},{title:Germany,created:20240402020105422,creator:soren,modified:20240402020106387,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GetOffMyLawn,created:20200322034737056,creator:soren,modified:20201204041546889,modifier:soren,tags:Metaphor Definition Public Expression Idea,type:text/vnd.tiddlywiki,text:Trope in which an old guy yells at some kids to \get off his lawn\, metaphorically to stop interfering with his PersonalBubble and crystalized conception of the world.},{title:GettingSolidAtRebaseVsMerge,bibliography:Git,caption:Getting solid at Git rebase vs. merge,created:20200908172959336,description:Argues that MergeVsRebase is a WrongQuestion; sometimes you should merge, and sometimes you should rebase, and there are actually usable declarative rules for deciding.,medium:article,modified:20200908173157466,tags:Source Public,type:text/vnd.tiddlywiki,url:https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa,year:2014,text:MrChristophePorteneuve, weighing in on MergeVsRebase. {{!!description}}},{title:GettingStartedWithAnki202007,created:20200708001244148,medium:article,modified:20200708001405867,tags:TheControlAltBackspace Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/memory/getting-started-with-anki,text:CAB article in the series on \u003C\u003Ctag Memory>> that discusses the basics of installing Anki, creating cards, reviewing, browsing, and adding more things. It also lists a number of cautions:\n\n* Study every day\n* Dont add too many new cards at first\n* Dont mess with options\n\nMost of the topics in here should be elaborated in future posts.},{title:GettingThingsDone,author:David Allen,caption:Getting Things Done,completed:202108211200,created:20200521202803008,creator:soren,format:ebook,medium:book,modified:20250831141540164,modifier:soren,owned:yes,rating:good,readstatus:reread,tags:Source Public,type:text/vnd.tiddlywiki,year:2015,text:Popular productivity book and methodology for business and personal organization by MrDavidAllen. First published in the late nineties, second edition in 2015.\n\nAllen has a vast amount of experience in getting people organized, and while he writes clearly, it is also obvious there is a //lot// here, much of which I wont be equipped to fully understand until I have more life and work experience. Im tempted to label the book //great// on this account but will hold back because it seems absurd on whats essentially a self-help book (but Ill reconsider next time I read it -- and Im sure there will be a next time).\n\nAllen believes that trying to improve your life “top-down,” by deciding what you care about, what big changes you want to make, etc., is a good idea in theory but ultimately doesnt work|TheoryAndPractice, because the overall strategy gets derailed by your lack of tactics -- you end up running around and never getting the most important things done because you forget about them or emergencies keep cropping up. Rather, if you start by becoming clear and competent about how to handle inputs, keep track of the next items that need doing, etc., you can then work your way up to understanding whole projects effectively, and //then// you can plan your life strategy and actually get something useful out of it.\n\nMy biggest kudos and my biggest criticism in one: Every time I read from GettingThingsDone, even just flipping it open to see what Allen says on some specific micro-topic, Im impressed by how hes spent his entire life figuring out what motivates people to do work or to be stuck in it, to feel like their lives are under control or not, and he deeply understands that, maybe more than anyone else in the world (even just as a function of having spent so much of his life working with individual people to figure them out). Thats really what he has to offer the world, I think. Unfortunately, the way he presents these deeply important insights about the human psyche is as this giant, overwhelming, interlocking system described in a huge number of words, and people (possibly including him) focus on the system and miss the core ideas.\n\nRead for the first time sometime around 2017. Reread in mid-2021 and re-implementing post-pandemic|PandemicMood, during my sabbatical|2021Sabbatical.\n\n\n!! Ideas worth reminding myself of\n\n(From the reread.)\n\n* \u003C\u003Cstretch MindLikeWater>>\n* Projects and NextActions should both have a DefinitionOfDone as well as a method of doing (whether explicit or implicit). It is easy for next actions to be “stuff” in disguise.\n* \u003C\u003Cstretch DecideIsNotAnAction>>\n* \u003C\u003Cstretch TwoMinuteRule>>\n* 5 steps of project planning -- pull out of paper version\n* Always ask what the NextAction is, whether youre asking yourself or someone else. It is amazing how often this is clarifying.\n** It is incredibly easy for something to be completely derailed by the next step being unclear. Figuring out what the next step is is a TrivialInconvenience. Doing it ahead of time makes everything //way// smoother.\n** Oddly, we rarely seem to realize this is the problem!\n},{title:GettingYourFilesystemHierarchyLessWrong201810,caption:Getting Your Filesystem Hierarchy Less Wrong,created:20200423024634050,medium:article,modified:20210731154808144,readstatus:read,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/filesystem/getting-your-filesystem-hierarchy-less-wrong/,year:2018,text:TheControlAltBackspace article which argues that FileSystemHierarchiesSuck and then discusses some PrinciplesForLessWrongHierarchies.\n},{title:GhirardelliChicago,created:20240427161445718,creator:soren,modified:20240509143903814,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GiantsRidge,created:20240402012244246,creator:soren,modified:20240509143905486,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GiffordPinchotNationalForest,created:20250621164956668,creator:soren,modified:20250621164957703,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GinkgoCoffeehouse,created:20231011024102983,creator:soren,modified:20240509143907168,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Git,created:20200322164134373,creator:soren,es:confident,modified:20220202211809552,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:SourceControl system that rules the modern software-development world. Mostly because its pretty awesome. Ive gotten to be an expert in it (at least from the user perspective; I dont know the internals all that well, just well enough to get through the spots where the AbstractionsLeak: though in Git its more like a torrent sometimes because the internal data model is critical to the way you use the tool).\n\nThe Git readme describes the name thus (\u003C\u003Crt 9734>>):\n\n\u003C\u003C\u003C\nThe name \git\ was given by Linus Torvalds when he wrote the very first version. He described the tool as \the stupid content tracker\ and the name as (depending on your mood):\n\n* random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of \get\ may or may not be relevant.\n* stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.\n* \global information tracker\: youre in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.\n* \goddamn idiotic truckload of shit\: when it breaks\n\u003C\u003C\u003C\n\nMrLinusTorvalds has also joked that he names all his projects after himself: first Linux, now Git.\n\nA GitBibliography is available for readings about how to use Git. I havent done a whole lot of extraction from these resources yet, as its something I got quite good at before I started doing ZK.},{title:GitBestPractices,bibliography:Git,caption:Commit Often, Perfect Later, Publish Once: Git Best Practices,created:20200908171211641,description:A series of best practices, both for learning Git and using it as an experienced user. Lists a number of good resources. Focuses on teaching you what the good options are, rather than telling you exactly what to do.,medium:website,modified:20200908171400911,tags:Source Public,type:text/vnd.tiddlywiki,url:https://sethrobertson.github.io/GitBestPractices/,year:2020,text:{{!!description}}\n\n},{title:GitBibliography,bibliography:Git,created:20200908164953401,modified:20251011164739684,modifier:soren,tags:Bibliography Public,type:text/vnd.tiddlywiki,text:{{||$:/tzk/Templates/Topical/BibliographyList}}},{title:GitFetchOverPull2009,bibliography:Git,caption:Git: Fetch and Merge, Dont Pull,created:20200908170344087,description:Explanation of why it may be beneficial for new users to always manually fetch, then merge or rebase, rather than using \git pull\.,medium:article,modified:20200908182301416,tags:Source Public,type:text/vnd.tiddlywiki,url:https://longair.net/blog/2009/04/16/git-fetch-and-merge/,year:2009,text:{{!!description}}\n\nEssentially, remote-tracking branches can be fairly confusing, and if you do it this way, youll be forced to understand whats actually going on; youll understand Gits data model and have your BasicLearningFoundation beneath you.\n\nOnly tangentially touches MergeVsRebase, but almost everything above the commit level in Git comes down to that in some way or another, doesnt it?},{title:GitFixUm,bibliography:Git,caption:Git Fix Um,created:20200908203449117,description:A \choose-your-own-adventure\ tool to figure out how to revert a change or find a lost change in Git.,medium:website,modified:20201206213355538,tags:Source Public,type:text/vnd.tiddlywiki,url:http://sukima.github.io/GitFixUm,text:{{!!description}} Written in TiddlyWiki.},{title:GitHubActions,created:20210628022127169,es:confident,modified:20210628021941766,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:CI/CD tool of TheGitHub (and thus M.|PrivatePerson, too...competing with their own AzureDevOps due to acquisition).},{title:GitHubPages,created:20200425162917720,es:confident,modified:20210509011644353,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Tool from TheGitHub that allows you to store documentation in a special branch of your Git repository and automatically compile and publish it when you push. A kind of built-in, limited form of ContinuousIntegration, started before CI was as ubiquitous as it is today.\n\nI use GitHubPages to publish the public tiddlers on this wiki (see PublicHomepage).},{title:GitLens,created:20200520125437821,modified:20200520125516845,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Extension to VisualStudioCode that lets you see details of the history of every line, file, and section in Git. Ive never gotten entirely used to using it, but its extremely powerful. Developed by MrEricAmodio.},{title:GitParable2009,bibliography:Git,caption:The Git Parable,created:20200908172413442,description:Explains how Git works by showing how you could approximate it yourself by copying and renaming files.,medium:article,modified:20200908172930157,tags:Source Public,type:text/vnd.tiddlywiki,url:https://tom.preston-werner.com/2009/05/19/the-git-parable.html,year:2009,text:Article by MrTomPrestonWerner explaining how one might go about designing Git, or an SCM based on its principles, just using a file system. Explores some of the design decisions in depth.\n\nDoes not necessarily give a complete understanding of the structure of Git -- other resources may be better at that -- but definitely worth reading. I didnt respond to it as well as to more technical resources, but I could see it being more helpful than those for others.},{title:GitResetDemystified,bibliography:Git,caption:Git Tools - Reset Demystified,created:20200908171022261,description:Explanation of all the weird and wonderful things `git reset` does, all at the same time.,medium:chapter,modified:20200908171150135,tags:Source Public,type:text/vnd.tiddlywiki,url:https://git-scm.com/book/en/v2/Git-Tools-Reset-Demystified#_git_reset,text:Section of the Git SCM book on `git reset`, probably the most confusing command in Git because it does a whole bunch of different things. Some effort is being made to make this less confusing, although so far its been mostly centered around `checkout` rather than reset.},{title:GitVee2018,bibliography:Git,caption:Git V: An Optimal Git Branching Model,created:20200908192254938,description:Explanation of a branching model that divides branches into //destabilizing work// and //stabilizing work//.,medium:article,modified:20200908192902409,tags:Source Public,type:text/vnd.tiddlywiki,url:https://mergebase.com/doing-git-wrong/2018/06/04/git-v-an-optimal-git-branching-model,year:2018,text:{{!!description}} Similar to Microsofts recommended flow. Complexity similar to Git Flow, but more streamlined and dispenses with the extra garbage `develop` branch.},{title:GlassBeadGame1943,author:Hesse,bibliography:LifetimeReading,caption:The Glass Bead Game,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034842,priority:3,readstatus:unread,recommended-by:Telegraph,tags:Source Public,type:text/vnd.tiddlywiki,year:1943},{title:Glassdoor,created:20240402020132318,creator:soren,modified:20240402020134705,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:GnosticGospels,author:ed. Pagels,bibliography:LifetimeReading,caption:The Gnostic Gospels,created:20210703170128000,genre:Religion,medium:book,modified:20210705214034866,priority:3,readstatus:unread,recommended-by:Time,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:GoalImagination,created:20200316222226836,es:possible,modified:20201209034832540,tags:Imagination Productivity Public Idea,type:text/vnd.tiddlywiki,text:An often-debated question: is imagining where youd like to be helpful?\n\nPlenty of people say yes. In the past Ive said maybe, but be careful of dwelling on it too much. HowToTakeSmartNotes calls out an interesting study (pp. 141-2): imagining the //goal// itself isnt helpful, whereas imagining the work and the steps youll take to get there is. Strikes me as both intuitive and counterintuitive at the same time, in an odd way.\n\nModerationAndBalance might be an important consideration, too...thinking about the end result //too// much might turn more into Escapism than anything else.},{title:GoalsOfStoicism,created:20210916143958762,creator:soren,es:confident,modified:20210916144347120,modifier:soren,tags:Idea PhilosophyOfLife Ethics Public,type:text/vnd.tiddlywiki,text:According to GuideToTheGoodLife2009s interpretation, Roman Stoicism and an effective modern version of it both have two key goals: the attainment of //virtue// and //tranquility//. These are not necessarily defined how you might expect:\n\n; Stoic virtue\n: Something is virtuous if it does well what it is designed to do. In the case of people, this means being an excellent human being. This in turn involves using reason and fulfilling our duties, which are primarily to our fellow humans: we should care for our family, friends, and communities and strive to make the world a better place. (One might not agree with this design argument, depending on ones religious beliefs; but many people who disagree with that will still agree with the goal.)\n\n; Stoic tranquility\n: Tranquility is a psychological state in which one avoids negative emotions (especially grief, worry, envy, and anger) while retaining positive ones (especially joy in life and the world). Nobody can perfectly attain this state all the time, but we can come close.\n\nThese goals are mutually reinforcing|VirtuousCircle: a virtuous person will find it easier to attain tranquility and vice versa. However, tranquility is likely easier to target directly, as well as usually more alluring for people new to the philosophy, so most people will want to start with practices aimed at increasing their tranquility (e.g., NegativeVisualization).},{title:GobblableFood,created:20200513171746763,creator:soren,es:mythological,modified:20230416023841143,modifier:soren,tags:SorenConcept Humor Psychology Public Idea,type:text/vnd.tiddlywiki,text:Gobblable food is that which, when it is lying out on a table in front of you, is extremely hard to resist grabbing. If youre not careful, it might soon be entirely gone without you knowing how it happened!\n\nSome examples:\n\n* M&Ms\n* potato chips, particularly Pringles or salt-and-vinegar chips\n* Oreos\n\nSome components of finished recipes can serve in this role when youre cooking, too:\n\n* grated cheese\n* chocolate chips\n* ham cubes\n* bacon pieces\n* brown sugar (but Im just weird)},{title:GodBlessYouMrRosewater,author:Kurt Vonnegut,caption:God Bless You, Mr. Rosewater,completed:20220607,created:20220609015459115,creator:soren,medium:book,modified:20240509143915500,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1965,text:By MrKurtVonnegut},{title:GodelEscherBach1979,author:Douglas Hofstadter,bibliography:LifetimeReading,caption:Gödel, Escher, Bach,created:20200407031953385,creator:soren,due:202103271200,format:paperback,isbn:9780465026562,ivl:20,medium:book,modified:20210709231031347,modifier:soren,owned:yes,readstatus:unread,tags:Source Antilibrary Public,type:text/vnd.tiddlywiki,year:1979,text:Book by MrDouglasHofstadter which Ive only half read which explains through the musings of a wonderfully EclecticMind the theory of the StrangeLoop, or one way which consciousness may arise through self-reference and connected information. An attempt to solve the HardProblemOfConsciousness.},{title:GodwinsLaw,caption:,created:20201205051223480,description:If any Internet discussion goes on for long enough, someone will eventually mention Hitler,es:confident,modified:20210623120255089,tags:LawOfCynicism Sociology Humor Public Idea,type:text/vnd.tiddlywiki,text:Godwins Law, variously stated, and generally understood to have originated on Usenet, says that if an Internet discussion continues for long enough, someone will eventually compare something or someone to MrAdolfHitler or the Nazis. (Some groups, back in the GoldenAgeOfInternetDebate, evidently found this happened so regularly that it became a tradition that whoever is the first to mention it immediately “loses” their argument.)\n\nThe law is not really limited in application to Nazism, although that still somehow manages to happen frequently enough that the law would be useful even if it were. Rather, at a certain point in a debate, further discussion becomes pointless: everyone has made up their mind, at least until new people join who have more ConversationalDifference to offer. If discussion continues beyond this point, it will tend to degenerate into ad hominem attacks, irrelevant arguments, yelling, people leaving in disgust while announcing that they are disgusted, etc.\n\nIndeed, there may be nothing special about Nazism in particular. On Wikipedia, you can get to PhilosophyFromAnywhere quite easily. Similarly, because of the low number of WikipediaDegreesOfSeparation, perhaps Nazism is just closely related enough to other ideas, and sufficiently general that it comes up more often, than, say, The McLain Family Band|https://en.wikipedia.org/wiki/The_McLain_Family_Band (click of //Random article//!), and sticks in the mind because its inflammatory.\n\n!! References\n\nOriginalWiki has an illuminating discussion|https://wiki.c2.com/?GodwinsLaw of the law and its implications.},{title:GoldenCompass,author:Philip Pullman,caption:The Golden Compass,created:20200127020426753,creator:soren,format:paperback,isbn:9780375823459,medium:book,modified:20221102023945784,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:1995,text:First book of HisDarkMaterials. Followed by SubtleKnife. Also called //Northern Lights// in the original UK release. (Why do we always have to release fantasy books under different titles in different markets? //The Golden Compass// is a much more engaging title, though, and it fits better with the titles of the following two books.)\n\nMsLyraSilvertongue is...amazing. And the introduction of Daemons is creative and resonates emotionally.\n\nEven by itself, a really fantastic adventure story. MrIorekByrnison is rather unforgettable in particular. The mid-2000s movie was utterly beautiful visually and excellent acting, but unfortunately mutilated the story to a degree far greater than necessary, and the damn thing was evidently so expensive and comparatively unpopular that the remaining portions were never completed.},{title:GoldendaleMountainIdentifier,created:20250621164629248,creator:soren,modified:20250621164630249,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GoldendaleScenicOutlook,created:20250621164635531,creator:soren,modified:20250621164636332,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GoneWithTheWind1936,author:Mitchell,bibliography:LifetimeReading,caption:Gone with the Wind,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034881,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1936},{title:GoodDocumentation,created:20210429155809130,creator:soren,es:confident,modified:20210810190625313,modifier:soren,tags:Idea Information Public,type:text/vnd.tiddlywiki,text:What makes a good documentation system?\n\n*\tDocumenting things, and making edits to existing documentation when it needs them, should be easy, or it wont happen.\n* Documentation should use standard tools and locations and be indexed so that it is always easy to find the documentation for a particular technology or process.\n* Documentation should be searchable, at any scope from the entire system to an individual page.\n* Documentation should be DRY; any important fact about the organization or its technology should have a single authoritative representation|DryPhilosophy in the documentation ecosystem. Other areas can reference or summarize it (e.g., StackOverflowForTeams, links to related material), but the primary location should be clear, and all reference/summary locations should link back to this primary location.\n* Documentation should have revision control, so you can|SourceControl easily see what changed, when, and view or revert to previous versions if necessary.\n* Documentation should be pretty, to encourage people to use it and make it easier to find things. Grammar should be correct, writing should be clear, typography should be functional. This is less important than other aspects, but scoring sufficiently poorly on this level discourages use of the documentation or makes it outright unusable.\n* Documentation should have simple access controls, so that it is reasonably secure but doesnt unnecessarily block out access to people. A DefaultToOpen approach is probably more useful for documentation than a least-privilege approach, except when it might reasonably have security implications.\n\nThe aspects that are most important depend on what kind of documentation|KindsOfDocumentation is being considered.},{title:GoodNewsWithBadNews,created:20200407015712367,creator:soren,es:likely,modified:20210509010110109,modifier:soren,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:According to HowBasecampCommunicates, good news should not be mixed with bad news (especially put immediately after it). Attempting this damages both of the newses (?):\n\n* Youre burying the bad news and not giving it the attention and thought it deserves (and the fact youre burying it seldom goes unnoticed).\n* The good news seems less good and less valid because its being used to change the mood.\n\nImportant news of both kinds needs space for thought around it.\n\nA.G.|PrivatePerson calls|https://getpocket.com/explore/item/beware-of-bosses-handing-out-crap-sandwiches the opposite technique, especially when used for giving people feedback, the “crap sandwich.”},{title:GoodPoemsForHardTimes,author:ed. Garrison Keillor,caption:Good Poems for Hard Times,completed:20220126,created:20220201041432495,creator:soren,medium:book,modified:20220201041949935,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2005,text:A really great, rather readable poetry anthology put together by MrGarrisonKeillor, largely of poems he read on the radio over the years. As usual with such an anthology, there were some I liked better than others, but there were very few I regretted reading and the next one was always totally different.\n\n},{title:GoodSharedFlashcards,created:20200728030414290,es:possible,modified:20220504200826459,modifier:soren,tags:Memory Process Public NeedsExcision Idea,type:text/vnd.tiddlywiki,text:Its commonly accepted by those who think about such things that Anki cards you create yourself will be more useful than those you get from other people (cf. AnkiCardQuality) -- especially when the information being studied is more complicated, multifaceted, and in need of FamiliarizingMetaphors and integration with other topics. That said, it would be really, really nice to be able to do at least reasonably well at creating cards for other people, in many cases; for example, the MnemonicMedium would seem to rely on the viability of such a thing, and users just starting out wont create good flashcards on their own but need them for DevelopingIntrinsicSrMotivation.\n\nSo, OpenQuestion, what does doing this well consist of? Some initial armchair thoughts with zero real-world experience or evidence to back them up. This draws heavily on the principles of AnkiCardQuality:\n\n* The TwentyRules, minus the ones that mostly dont apply to this like Rule 13, \Refer to other memories,\ and 14, \Personalize and provide examples,\ should certainly be followed. IMO this would be the bare minimum to be \good\.\n* Similarly, the creation of //precise cards//, as described in the blog post at the other end of one of the links here behind a TODO marker :). In particular, the cards need to be super context-free; to whatever extent the creator can manage to do so, they need to be understood immediately by anyone.\n** This may mean sacrificing some potential for useful references.\n** Or it may mean providing optional cards or versions of cards that use references one may be familiar with. If the user is willing to edit down the cards, one can definitely do better.\n*** I can even imagine an interface (an Anki plugin? a web service? a TiddlyWiki tool to use with the TW MnemonicMedium? that would let you select multiple versions of a card or manually edit it, based on which one matches best with your worldview and other areas of expertise. (\u003C\u003Crt 3991>>: Cards have to \fit the persons limbic system.\)\n*** Maybe were coming close to MindIntercourse territory when we consider how someone could come up with such alternate versions of cards, though, unless we open it up to collaboration, where users could submit different versions or adjustments theyve made to cards?\n* Including sources and references for further reading (Rule 18!), so that those who dont have the background or even doubt the contents of the cards can go find more about it. If the material is being distributed with a learning resource, a simple link back to that resource would suffice (and even be better) provided that resource cites its own sources and offers its own further-reading links.\n* Provide mnemonics, //maybe//. I tend to be doubtful of the power of offering other peoples mnemonics in the manner of Memrise, but it may have its place just as creating cards for other people has its place (otherwise we wouldnt be having this discussion, would we?).\n* A collaboration with a spaced-repetition expert (the SRE, because we all love acronyms, right?), or some trial students, could be helpful. Involving someone who has no experience with the domain but has unusually good Metacognition could be extremely valuable as well, as they will be best positioned to spot the weaknesses in the flashcards.\n\nThis may be a discipline unto itself, at the intersection of the domain being Ankified, teaching, writing, memory, and the organization of information. From an email to M.|PrivatePerson wondering about what these ideas mean for creating/selling targeted Anki decks:\n\n> I get the feeling this could be something like creating a book index|Indexing. It’s easy to create an index for yourself, but it’s hard to the point of requiring professional expertise to create one that’s useful for a wide variety of people. I’d guess that people who have taught the material would be in a better position to do this, provided they exercise their experience and think about how they’ve seen different people integrate the information to make cards that work well for everyone.\n\nIts worth pointing out this discipline may result in different, and for your own purposes worse, cards than just doing it for yourself -- as with indexing. The obvious pattern of creating a deck for yourself and then sharing it with the world when youre done in case someone else might benefit is much less useful than it appears for this reason (unless your cards are largely formulaic). Indeed, outside of including cards with a learning resource, people arguably have no motivation to provide free, high-quality shared decks; the OpenSourceSoftware philosophy of ThinkLocallyActGlobally fails because the local doesnt work globally, the global must be planned from the outset, or a great deal of work must be done to convert it that actually worsens the original local in its own context. Money may be needed to grease the wheels here -- although then again, projects like Wikipedia seem to operate fine without any kind of extrinsic motivator.\n\n-------\n\nThis issue may be part of a larger tension: collaboration in any kind of information aggregation is obviously beneficial inasmuch as it reduces the total amount of effort, since each person can contribute a small fraction of the whole and benefit from the rest, but at the same time different peoples body of knowledge and way of relating to information is not the same, leading to reduced value in shared content. The ZettelKasten and its SpacedRepetition manifestations, in other words, may at least at their pinnacle be stuck as fundamentally solitary pursuits. Ive seen this floated as a reason why team wikis and similar collaboration tools often fail to deliver the benefits one might expect: different people organize, link together, and use the \shared knowledge\ in different ways.\n},{title:GoogleCloudPlatform,created:20210317141022579,creator:soren,es:confident,modified:20240509143921550,modifier:soren,tags:Product Software Idea Public,type:text/vnd.tiddlywiki,text:Compare AmazonWebServices and Azure.},{title:GoogleHangouts,created:20200513033514953,modified:20200513033529708,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:TheGoogles videoconferencing software.},{title:GoogleMaps,created:20200513180611509,creator:soren,es:confident,modified:20211110041635065,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Mapping product of TheGoogle. Useful for pretty much anything that involves engaging with the physical world, well beyond navigating, including looking for businesses of a particular type and planning vacations.},{title:GoogleMyMaps,created:20240410124616173,creator:soren,modified:20240509143922247,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:GoogleReader,created:20200423031939896,modified:20200708004858453,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular RSS reader from TheGoogle for many years, until one day in 2013 when they just announced it was getting pulled. One of the biggest collective cultural realizations (in the geek culture of people who used RSS at the time, that is) that cloud services are available at OperatorsPleasure and theres absolutely nothing you can do about it.\n\n(Also: RIP Reader. We all loved you.)},{title:GovernorDodgeStatePark,created:20200211145250660,creator:soren,gis-lat:43.01847343805089,gis-long:-90.13951734680073,gis-zoom:12,modified:20240723023732841,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Lovely little spot in Wisconsin about 45 minutes west of MadisonWisconsin. My parents and I started coming here when I was 3, and while we havent been back every year since, we do make it up there together almost every year for a few days. When I was in middle school and high school, we were there two weeks a year in the summer right after school got out.\n\nAbout 5,000 acres, bluffland with mixed prairie and woodland, though more and more of its woodland these days as they try to restore it to closer to its pre-settlement condition. A couple of (artificial but nice) lakes, lots of beautiful trails, a popular waterfall, and one of the best-designed and most private campgrounds Ive ever seen. Theres nothing overly special or dramatic about the place, but it does everything Pretty Well, which makes it a really nice place to be (see SimpleThingsDoneWell and TheoryOfMinnesota).\n\nGDSP nowadays feels more like home to me than any of the places Ive actually lived, because its been with me through every stage of my life, and everything thats happened there and everything going on in my life at the time is all layered on top of everything else in the space -- an effect which is enhanced because camping naturally makes me thoughtful|CampingAndBoredom and makes everything seem more profound. Getting off the highway and pulling up to the office to buy a park pass is one of my favorite moments of every year.\u003C\u003Cfnote \Also, some of the people who worked in the office when I was three are still there!\>>},{title:GracefulDegradation,created:20200423030249822,es:confident,modified:20210511011222711,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:When full functionality is not available, it is often desirable to provide at least partial functionality. For instance, the system may continue working but perform poorly, or certain elements of it may be unavailable.\n\nCredit card processing is a common example: normally you insert your card into the slot and pay automatically. But if the system is down, they can still charge your card by writing down the number or taking an imprint.\n\nOr, in TiddlyWiki, if your browser doesnt have JavaScript turned on -- seemingly critical to the operation of the tool -- your browser can still at least display the contents of the wiki.\n\nThe MarkdownPhilosophy turns this on its head by considering the “degraded” state a meaningful one in its own right, and anything you get beyond that a bonus.},{title:GraceUniversityLutheranChurch,created:20230426032927423,creator:soren,modified:20230426032929670,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GranbyQuebec,created:20240410133031900,creator:soren,modified:20240509143933182,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GrandCentralMarket,created:20230915164933333,modified:20230915164934564,tags:Place Public,type:text/vnd.tiddlywiki},{title:GrandsonRule,created:20231203232818469,creator:soren,description:What will this decision or event mean when you tell your grandchildren about it years down the line?,es:confident,modified:20231205020708076,modifier:soren,tags:Idea Reasoning Public,type:text/vnd.tiddlywiki,text:Useful way to contextualize the long-term importance|SevenSevens of a decision or event: imagine yourself explaining it to your grandchildren (assuming youre young enough that you dont have them yet). What do you say? What are they going to think? Will they think youre awesome, or take it as a cautionary tale? How will you feel when you tell the story?\n\nObviously, your answers are unlikely to be the actual truth -- its mighty hard to predict the true consequences that far ahead -- but the exercise should redirect your current thinking towards the most important concerns and remind you that many things you might be extremely worried about now dont really matter much.\n\nC.S.|PrivatePerson says they often imagine themselves being interviewed about the importance of the event to their life ten years down the line, which seems like a useful variation.},{title:GrapesOfWrath1939,author:Steinbeck,bibliography:LifetimeReading,caption:The Grapes of Wrath,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034889,priority:1,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1939},{title:GraphTheory,created:20210812020606886,es:confident,modified:20210812021956711,tags:Math Public Definition Idea,type:text/vnd.tiddlywiki,text:Branch of Math dealing with, broadly, the ways in which things can relate to each other. Aside from very interesting (at least to me), remarkably practical, particularly in programming.},{title:Great2020ToiletPaperShortage,created:20200428024424777,es:confident,modified:20200712225439617,tags:PandemicMood Humor Systems Public Idea,type:text/vnd.tiddlywiki,text:One of the defining jokes of the pandemic, at least here in the UnitedStates -- only its not really a joke -- has been the nationwide shortage of toilet paper. There seem to be a number of things going on here:\n\n* People legitimately and suddenly need much more toilet paper than they usually do. The statistic I read suggested that people normally use about 40% of their toilet paper outside the home, and now I know I for one have not used a public restroom in weeks. The TP that gets used there is manufactured, packaged, and distributed differently, so that surplus cannot be readily redirected to the supermarkets.\n* Once the shelves start running low on toilet paper, suddenly word spreads that there is a toilet-paper shortage, so everyone goes and buys more toilet paper, thus exacerbating the problem. (Nevertheless, this is a TragedyOfTheCommons; it is entirely rational upon learning that it might soon be impossible to buy TP to go get some, knowing you will need some soon! Though if you buy 200 rolls, thats just rude.)\n* Its //toilet paper//. Its a symbol of the most basic part of civilized behavior. If you dont even have toilet paper, boy, youve really hit rock bottom. Which just makes people work even harder not to run out.\n\nAnd, while serious, its also funny.\n\nLooking ahead, PeanutButterJellyLogistics both recall whats going on here and suggest we will have more challenges ahead of us.},{title:GreatDepression,created:20200516033255968,modified:20230912032748765,tags:Public Idea,type:text/vnd.tiddlywiki},{title:GreatGatsby,caption:The Great Gatsby,created:20200322164449616,creator:soren,format:hardcover,isbn:9780965684378,medium:book,modified:20210607011200431,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:GreatGatsby,year:1925,text:“Great American novel” by MrFScottFitzgerald describing the lonely Gatsby and his lost love during the RoaringTwenties. Pretty much everyone in the story is an awful person, but its still a good story!},{title:GreatRiverBluffs,caption:Great River Bluffs State Park,created:20210807150035433,foreignid:00244,gis-address:43605 Kipp Drive, Winona, MN 55987,gis-lat:43.938435763541044,gis-long:-91.40890093759666,gis-zoom:11,modified:20210807150016458,phone:(507) 312-2650,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki},{title:GreatRiverBluffs/Travel,created:20210807150242301,modified:20210807150123555,tags:Subplace Public,type:text/vnd.tiddlywiki,text:From southern Minnesota, go east on I-90. Take the Nodine exit (a brown sign is available) and follow the signs from there. Theres a really weird turn onto what looks like a residential street to get to the park, which comes //after// the sign (theres an almost-equally-believable-looking turn just //before// the sign, which you dont want to take as its someones driveway).},{title:GreatRiverBluffs/Visits,created:20210807150512835,modified:20210807151756687,tags:Subplace Public,type:text/vnd.tiddlywiki,text:* 2021/08/01--2021/08/04 (\u003C\u003Ccb \62.37--54\>>); stayed in site CI1},{title:GreekAndRomanMyth,created:20200226003046272,modified:20201119201725510,tags:Class Public,type:text/vnd.tiddlywiki,text:Class I took at StOlaf with L.W.|PrivatePerson on the conceptual framework of Mythology as well as, of course, the Greek and Roman canons thereof.},{title:Greekification,created:20221222181236682,creator:soren,description:The process of replacing morphemes in Latin-alphabet languages with single Greek letters in my PersonalAbbreviationSystem.,es:confident,modified:20221229230438809,modifier:soren,tags:Idea Public PersonalDocumentation Writing,type:text/vnd.tiddlywiki,text:A component of my PersonalAbbreviationSystem in which common morphemes in English get written as a single Greek letter mixed in with the Roman letters. I chose Greek letters because their forms have already been honed by centuries of writing -- they look good and are easy to write -- and you can type them on the computer if you need to (not that it would ever make productivity sense to use them when typing).\n\nA Greek letter can be used in any position – initial, terminal, medial, or even alone. I include hyphens below to show the most common position. The system is largely phonetic and very flexible; the exact spelling and to some extent the pronunciation of letters at the beginning and end of the Greekified morpheme can differ. The following shortening rules also apply:\n\n* An unstressed vowel preceding or succeeding the Greek letter can be omitted.\n* A double consonant preceding or succeeding the Greek letter is ordinarily reduced to a single consonant.\n\nHowever, it is generally //not// idiomatic to use a Greek letter to make up only part of a morpheme, or in a way that crosses morphemes. For instance, `ε` represents `ness`, but you would not abbreviate “honest” as “hoεt”.\n\nThe Greek letter is generally chosen for a salient letter or sound in the morpheme it represents, with a little bit of license at times. A couple of them are overloaded, meaning several things that are unlikely to be confused.\n\n!! Table of symbols\n\n|!|!Morpheme|!Examples|!Expansions|\n|`Λ`|-less|helpΛ, Λ than, Λenγ|helpless, less than, lessening|\n|`Φ`|-ful, fil-|helpΦ, Φsome, ΦΦd|helpful, fulsome, fulfilled|\n|`α`|-al|actuα, αready|actual, already|\n|`β`|-able, -ible|acceptβ, falβ, β|acceptable, fallible, able|\n|`βt`\u003C\u003Cfnote \This is a little wart on the system, as the only Greekification that includes more than one character, or a Roman letter. But I find this locution incredibly useful and even elegant.\>>|-bility, -ability, -ibility|βt, imposβt|ability, impossibility|\n|`γ`|-ing|goγ, sγγ, flγ|going, singing, fling|\n|`ε`|-nes, -ness|greatε, Φε|greatness, fullness|\n|`κ`|com-, con-|κsider, κpleμ, welκ|consider, complement, welcome|\n|`λ`|-ly, -ally\u003C\u003Cfnote \This second usage actually elides a morpheme; it would be more in accordance with the rest of the system to write it `αλ`. But `-ally` is incredibly common and virtually impossible to confuse with plain `-ly`, so its worth breaking the pattern.\>>|reλ, Φλ, emoσλ|really, fully, emotionally|\n|`μ`|-ment|moμ, appeasμ, μα|moment, appeasement, mental|\n|`π`|-ship|friendπ, πγ|friendship, shipping|\n|`σ`|-tion, -ation\u003C\u003Cfnote \I usually write the A, only eliding it if there is another adjacent vowel, e.g., in //creation// here, because the A is usually the stress point in -tion words and it feels weird to leave it out.\>>|κbinaσ, creσ, intenσλ, irraσα|combination, creation, intentionally, irrational|\n|`τ`|trans-; inter-|τfer\u003C\u003Cfnote \Easily distinguished from //interfere// by the lack of the trailing silent E. Unstressed/silent letters can only be elided immediately adjacent to the Greek letter.\>>, τnaσλ|transfer, internationally\u003C\u003Cfnote \Or //transnationally//, which I guess is a word, if not one you see very often. If youre trying to transcribe some business-speak verbatim, you might have to skip the symbol here.\>>|},{title:GreenspunsTenthRule,created:20200322172214160,creator:soren,description:Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp,es:likely,modified:20210623120207601,modifier:soren,tags:Humor Code Public LawOfCynicism Idea,type:text/vnd.tiddlywiki,text:Greenspuns Tenth Rule states:\n\n> {{!!description}}.\n\nIts tongue-in-cheek perhaps, but its also a real testament to how much more flexibility Lisp and its libraries gives you than the older, lower-level languages, and to some extent its probably still true today.\n\nSee also LettsLaw.},{title:Greenwashing,created:20201201031715984,creator:soren,es:confident,modified:20211208165617260,modifier:soren,tags:Definition Environmentalism Public Idea,type:text/vnd.tiddlywiki,text://Greenwashing// (a beautiful portmanteau of //green// and //whitewash//) occurs when a company tries to make itself or its products look environmentally friendly without actually making a meaningful commitment.\n\nExamples:\n\n* The famous Prius advertisements that feature a car driving along the highway and spewing green grass and flowers in its wake.\n* My public utility added an opt-in charge for 78 cents on your bill to supposedly get all your energy from wind power. I ran the numbers (\u003C\u003Crt 3650>>) and concluded that, on mostly optimistic assumptions, you would be able to pay back your portion of a wind turbine only after 164 years of paying the bill. (A wind turbine has an average useful life of about 25 years.) Probably its better, environmentally, to pay this fee than not to pay it, but theres a lot of paper-pushing going on that means it definitely doesnt do everything they say it does.\n* The Illinois Toll Road, in some of their travel stops, posts the slogan, “Driving towards a greener tomorrow,” because they use low-flow faucets (which, Ill also note, make it next to impossible to wash your damn hands in the restroom). Never mind the InducedDemand for cars.\n\nIn general, anything that promotes consumption while making it sound good for the environment is greenwashing.},{title:GrohmannMuseum,created:20240530223900591,creator:soren,modified:20240530223901637,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Grokking,created:20200323115014446,es:confident,modified:20210711160102629,tags:MindIntercourse Definition Public Idea,type:text/vnd.tiddlywiki,text:To grok something, in tech-speak (and a word that should be in everyones lexicon) means to understand it, but in a deep way, such that youre at one with the concept, so to speak. More than just being able to use and explain it, its become part of your intuition and changed your identity.\n\nOriginally coined by MrRobertHeinlein for a sci-fi novel.\n\nLike InstrumentPairBonding for ideas.\n\nMrMartinBubers concept of the IThouRelationship seems extremely similar -- but I have never read him, my understanding of this concept comes only from other people talking about it, so Ill refrain from saying much more on this for the time being!\n\n!! References\n\nDiscussed in my Partnering with Anki|https://controlaltbackspace.org/memory/partnering-with-anki/ post on TheControlAltBackspace.\n\nAlso, of course, the source of the name of GrokTiddlyWiki.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20200511014304429\\n\t\\\Who coined the term \grok\?\\\\n\t\Robert Heinlein\>>\n\n\u003C/$details>},{title:GrokTiddlyWiki,author:Soren Bjornstad,bibliography:TiddlyWiki,caption:Grok TiddlyWiki,created:20210313133812115,description:“The definitive TiddlyWiki learning resource,” written by yours truly. Combines text, exercises, and spaced-repetition flashcards to produce a thorough understanding of TW.,medium:book,modified:20210517224640199,readstatus:read,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://groktiddlywiki.com,year:2021,text:Book Ive written about thoroughly learning|Grokking the amazing TiddlyWiki: https://groktiddlywiki.com\n\nI am also working on a TiddlyWikiVideoSeries to complement the book.},{title:Grotto,created:20250623162349409,creator:soren,modified:20250623162350400,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:GroupIdentityIsFoundedOnExclusion,created:20200217170018956,creator:soren,es:likely,modified:20210516230422413,modifier:soren,tags:Identity InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Exclusion is a dirty word, so let me define what were after here. As a general rule, groups have identity because of a CommonPurpose (sometimes obvious, sometimes deeply hidden). And that involves both what the group exists to do and who it is for, and what it does not do and who it is not for.\n\nIf a group expands in scope too far, it gets distracted. It ceases to be a meaningful group and accomplish its common purpose. See GroupIntraEnemy: the failures are brought on by the group itself.\n\nIn order to succeed, the group needs to limit itself. OnlineCommunityLessons contains several lessons that seem relevant here from groups that succeed:\n\n* A CoreGroup wields outsize power over the group and decides (in cooperation with other members) what it is and what it is not, and who belongs and who does not.\n* The group has limited scale.\n* Both to account for the scale point and to strengthen group identity, there need to be some barriers to participation (at least to join the group proper instead of a mostly-anonymous-contributor level like on Wikipedia or SO?).\n\n\nWhen sorting out who can join a group and who cannot, membership should be based on //logical// reasons (this helps to mitigate the “dirty word” effect). For instance, if you tell me I cant join your NetHack chatroom because Im a woman -- or prevent me from wanting to join in the manner of HiddenSystemicRacism -- that is an illogical (and sexist and unacceptable) reason. If you tell me I cant join the womens support group because Im not a woman, thats fine and Im not going to get upset about it either. The key is being clear about your groups purpose. If I am incompatible with your groups purpose, then I dont belong and thats that; in fact its //good// that I dont belong. If I look like Im compatible, and Im not invited, thats dirty exclusion, or at least it comes off that way.},{title:GroupIntraEnemy,created:20200217170554903,creator:soren,modified:20200324033556513,modifier:soren,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:As explained in AGroupIsItsOwnWorstEnemy200304, groups are brought together by a CommonPurpose. However, they often (if not always) end up doing other things besides what theyve actually set out to do. Three common archetypes of distractions:\n\n* sex talk (flirtatious or emotional talk between pairs of members)\n* vilification of external enemies (we all agree these people are awful, everyone has a pointless TwoMinutesHate about them)\n* religious veneration (the opposite of #2: MrClayShirky gives the example of criticizing some part of LordOfTheRings in a Tolkien forum and see what kind of response you get)\n\nGroup structure like constitutions, etc is necessary to defend against this, as well as the incursion of new people into the group with different values.\n\nOne critical idea is the CoreGroup -- a set of people who is most invested in the group and is responsible for its success. This can help as well.\n\nShirky (author of the source article) recommends a document called LambdaMooTakesANewDirection, about how the founders decided they were going to duck out of social issues and soon found they couldnt. Social/political issues about the group are inseparable from the things the group exists to do and must be dealt with together.\n\nOf course, a group can also get derailed by new people who simply want to change it into something with an entirely different purpose. This seems to happen often in social movements. Arguably IdentityPolitics in American liberalism in the late teens and early twenties is an example of this: B.S.|PrivatePerson has invented the fantastic concept of the ChurchLeft, which cares more about creating personal identity and social behaviors than about effecting meaningful political change, and is taking over large parts of the American left.},{title:GSRM,created:20220617222523333,creator:soren,description:Gender, Sexual, and Romantic Minorities – a mostly superior alternative to LGBT... descriptors.,es:likely,modified:20221216234858688,modifier:soren,tags:Public Idea Definition,type:text/vnd.tiddlywiki,text:Gender, Sexual, and Romantic Minorities. More or less means the same thing as //LGBTQ+// (or variations with different numbers of letters), but is concise, easy to understand, and immune to annoying arguments about how many and what letters should be included. It also gets to the actual kernel of the identity being discussed rather than trying to describe it with a laundry list of the different things its made up of;\u003C\u003Cfnote \Fun fact: this is called a //merism// (though this term is more often used to refer to specifically a contrasting pair of descriptors).\>> as such it is (to me) pretty clearly a superior IdeaApi.\n\nIndeed, I think this improved API also could change mental models enough to eliminate internal arguments about who counts as LGBTQ+. Are asexual people GSRM? Duh, theyre sexual and maybe romantic minorities. Are allies GSRM? Uh, no, theyre not minorities. End of story, beginning of useful discussion.\u003C\u003Cfnote \Unfortunately, I do have one counterexample: pedophiles are plainly “sexual and romantic minorities,” but a definition of GSRM that includes pedophiles seems problematic. Not sure what to do about this.\>>\n\n//N.B.//: Im actually not trying to make judgments about whether these things should be “LGBTQ+”. I think there is an argument to be made that for instance asexual people dont exactly belong in at least the original “LGBT” acronym because of the cultural and historical context surrounding it. (I speak as an ace-spectrum person|DemiPerson, to be clear. See IsAsexualityLGBTQ for details.) But picking a new general-purpose name that is clearly defined, rather than one that now means 20 things to 20 different people, would mean we can drop all these arguments. Then people who want to refer to the Stonewall-born movement specifically can use a different name, and people who want to include allies can say “GSRM and allies,” inter alia, and we dont have to fight about it.},{title:GuideToTheGoodLife2009,author:William B. Irvine,caption:A Guide to the Good Life: The Ancient Art of Stoic Joy,completed:20210909,created:20210909190122675,creator:soren,medium:book,modified:20210916185659972,modifier:soren,rating:average,readstatus:read,recommended-by:MrMoneyMustache,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2009,text:A practical introduction and self-help book on Stoicism by MrWilliamIrvine. Recommended by MrMoneyMustache, whose personal philosophy I also appreciate (yes, a personal-finance blogger has a coherent personal philosophy I appreciate -- check him out).\n\n!! Impressions\n\nWell presented; makes Stoicism quite accessible and does a great job explaining what exactly the various philosophers say and defending it against modern misinterpretations. This alone makes the book worth reading, as if in the 2020s you havent sat down and studied Stoicism, you probably have the wrong impression of what its about. The basic ideas were not new to me (what I hadnt picked up during TheGreatCon or other reading, I remembered from reading HappyAbsolutelyFine2016 a couple of years ago), but this was a concise and elegant version that felt more approachable and actionable than anything Ive seen before.\n\nA bit repetitive, though I didnt find this as annoying as some reviews I read did (the repetition is mainly of the same ideas between parts, where one part is history, another explicates the philosophy, and another suggests how to put it into practice, so this seems more a matter of substandard organization than an attempt to pad the book or a lack of careful consideration of the subject matter).\n\nSome of the authors attempted modernizations and justifications of the philosophy, like this bit explaining why Stoicism is sensible because of Evolution (but it doesnt actually do that, and doesnt even seem to claim to by the end of the section), didnt jibe with me at all. However, I didnt feel those detracted from the ideas of Stoicism at all, and I was perfectly able to skim over them, especially because I already know I believe the philosophy makes sense. Nevertheless, the inclusion of these poor arguments weakened the book as a book.\n\nThe “how to put it into practice” section wasnt as good as I hoped for. Actual suggestions for things to do were minimal and mostly amounted to “do this thing I talked about in the other section.” I feel like I could do a better job of synthesizing and generating the practical steps by reading the principles again and thinking about how to fit them into my life. (Then again, perhaps this is //always// the case, but people are often too lazy to do so, and thats why these kinds of sections are helpful? Nevertheless, it seemed to me there was a shortage of explicitly actionable ideas in a section that presented itself as a list of such ideas.)\n\n\n!! Contents\n\nMost of the ideas of Stoicism as described in this book I have used as the basis of a framework on Stoicism in the Zettelkasten, which will borrow more and more freely from other sources as well as time goes on (but it already does somewhat). The central organizing point is Stoicism. Its also worth pointing out the GoalsOfStoicism, StoicismAndMe, and the authors framing of the need for a CoherentPhilosophyOfLife.\n\n\n!! Responses to common concerns and objections\n\nFrom the author:\n\n* On bottling up negative emotions: while this seems to be against the establishment consensus, that consensus is most likely wrong. Otherwise healthy people arent usually that fragile and incapable of dealing with trauma and grief...unless, perhaps, you make them believe they are and give them grief counseling which makes their problem worse. This is, at any rate, Irvines claim (a bold one, but perhaps not an outrageous one).\n* People nowadays are encouraged to think of themselves as victims and solve their problems through politics. While the system may be in the wrong, its bad to think of yourself as a victim; the power is yours to be content with whatever you are given. Of course, its also worthwhile, and maybe even a duty, to pursue fixing the system -- these approaches arent mutually exclusive. But it only makes sense to begin with yourself.\n* There are many possible philosophies of life, and some subset of them are good; some are better for some people than others. In the end, its more important that you have any philosophy at all|JustGetStarted than exactly what you choose, and its great to make your own changes; this isnt a religion pushing you to be orthodox.\n\n\n!! Advice for applying the lessons of Stoicism\n\nSimilarly from the author, start with the easiest things, proceeding when you feel youre getting good:\n\n* Start with NegativeVisualization; find a regular time to work on it to make sure you do it even if you end up forgetting otherwise.\n* Then apply the StoicFork, practice internalizing goals, and become a fatalist about the past and present.\n* Learn to enjoy being insulted and responding appropriately.\n* When you are tempted to become angry, realize it is usually pointless; consider yourself an actor in an absurdist play.\n* Work on VoluntaryDiscomfort. Watch it make you stronger. Enjoy succeeding.\n* Work on simplifying your lifestyle. (Cf. EfficientLife.)\n\nYou might find yourself wishing difficulties upon yourself to see whether this is working!},{title:GullibilityMicrotargeting,created:20200511020226707,es:possible,modified:20210511010956490,tags:Psychology Futurism Sociology Public Idea,type:text/vnd.tiddlywiki,text:A form of targeted advertising|BanTargetedAdvertising that involves directing scams, DeepFakes, ideologically microtargeted|IdeologyMicrotargeting political lies, and so on at the people most likely to be susceptible to such.\n\nThe popular Nigerian Prince scam is a low-tech example of this. Lacking any actual technological means to microtarget, email scammers simply make the scam so absurd and unbelievable that only the people who might conceivably be fooled into sending money will respond to the initial contact.\n\nIn CodeMagazine (Mar/Apr 2020, p. 64), MrMarkusEgger floats this as a huge upcoming risk with the rise of microtargeting and AI/MachineLearning power.},{title:GunsAndTotalitarianism,created:20200923232921248,es:possible,modified:20210623020639896,tags:Politics Reasoning Risk Public Idea,type:text/vnd.tiddlywiki,text:Argument for the ideas behind the SecondAmendment which I encountered somewhere in TheReason fall of 2020:\n\n# The primary source of violent deaths to be worried about is not individual people, it is governments -- through warfare or violent oppression, they cause mass killings. Individual gun violence, especially mass shootings and so on, while terrible, are not the first thing to be worried about.\n# Citizens who are armed are less likely to be the victims of government mass murders. This is not because they are necessarily able to take over the government with a few rifles and pistols (the ineffectiveness of such weapons against a modern military being a prime objection of GunControl advocates), but because its a lot harder to round people up when theyre ready to fight back. You dont have to //win//, you just have to make it hard enough that they dont bother. In fact, many revolutions work this way -- the AmericanRevolution being a prime example. We didnt //beat// Britain, we were just enough of a pain that they decided to let it go.\n# The number of deaths prevented by making government mass killings harder is greater than the number prevented by disarming citizens.\n# Thus, citizens should remain armed, go SecondAmendment.\n\nOn the whole, this is a much stronger argument than I expected! Though I had never come into contact with the argument before, I totally buy (1) on an intuitive level; while it might be hard to statistically prove due to government killings being BlackSwan-like events, it feels right on at least a worry level. Looking back at history, too, it is clearly true. One could argue “well, this time it’s different, we live in a democracy,” but the //Reason// article also points out that only 15 or so countries made it all the way through the 20th century without losing either their independence or democratic government. We can hold out hope for the 21st being better, if only because we started with a higher number, but with the destabilization that ClimateChange can reasonably be expected to bring and the craziness surrounding the US and European political climates even by 2020, it also seems hopelessly naïve to assume that we’ll retain democracy.\n\n(2) is a fairly refreshing perspective I have never heard before. It seems hard to prove or deny, though. There are examples of where the arming strategy has worked (consider Switzerland during WWII; it stayed neutral basically because the Nazis realized the CostBenefitRatio of invading it was terrible, not because they couldn‘t), but overall I think this simply doesn‘t happen enough to really judge. This said, it’s hard to say which side we should come down on with little evidence to go off of.\n\nIf (1) and (2) are true, I think we have to accept (3). (4) does not necessarily follow because there are plenty of other potential reasons why people should or should not be armed besides personal protection from being killed, but it’s a strong argument at any rate, much stronger than the typical arguments I see for allowing more guns.\n\nIt’s (2) that poses the problem to my general acceptance of the conclusion, and I’m not sure what can be done to convince either way…as with all GunControl arguments, it seems that causation is murky enough with all the available statistics that clear and convincing answers are nearly impossible.},{title:GunsGermsAndSteel1997,author:Diamond,bibliography:LifetimeReading,caption:Guns, Germs, and Steel,created:20210703170128000,genre:Science,medium:book,modified:20210705214034897,priority:2,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1997},{title:Gwern,author:MxGwern,blogroll:Blogroll,created:20250905204909768,creator:soren,modified:20250905204930088,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://gwern.net/},{title:HackingPedantryAndScience,created:20201222031446874,creator:soren,description:Science, hacking, and pedantry are all manifestations of the same mindset.,es:likely,modified:20240618015135906,modifier:soren,tags:Creativity Humor Code Public Science Favorites Idea,type:text/vnd.tiddlywiki,text:From a conversation with M.|PrivatePerson and P.|PrivatePerson around Christmas 2020: {{!!description}}\n\nThe conversation centered around this silly dialogue which provides the title for In the Cells of the Eggplant|https://metarationality.com/refrigerator:\n\n\u003Cdiv class\dialogue\>\n\u003C\u003Cspeaker \Alice\ \Is there any water in the refrigerator?\>>\n\u003C\u003Cspeaker \Bob\ \Yes.\>>\n\u003C\u003Cspeaker \Alice\ \Where? I don’t see it.\>>\n\u003C\u003Cspeaker \Bob\ \In the cells of the eggplant.\>>\n\u003C/div>\n\nOf course, Bob is being a smart-ass. Unless we add forced and silly circumstances (like that uncommonly ridiculous ThoughtExperiment even for philosophy thought experiments in which you are asked to decide whether to save a Botticelli or a baby from a flood), that is not what Alice meant, the eggplant is presently worthless to Alice, and everyone knows it. Alice is probably even right to be annoyed at this response, unless she also happens to be of the same mental type and in a good mood and thus finds it funny and maybe even thought-provoking instead.\n\nYet the mind that comes up with “in the cells of the eggplant” is the same one that makes discoveries, the same one that comes up with creative|Creativity solutions to problems, the same one that is full of curiosity and intellectual playfulness (the real foundation of the ScientificMethod). Without the tendencies that lead someone to remark on the water found in an eggplant, we might never have learned that there even was water in an eggplant! (Cf. WhatIf.)\n\nSimilarly, Hacking is the application of this mindset to computers, which, unlike anything else I know of in the natural world, have the odd property of accepting eggplant-water logic as if nothing is unusual about it at all; they are pure logical determinism. (This is at once their greatest strength and their greatest weakness.) Perhaps people are pure determinism as well -- we dont really know, at least for now and likely forever -- but if so they are far too complicated for us to understand how they operate. On the other hand, even the most complex software is simple enough that the hacker can read and understand it and see where it will be receptive to eggplant-water arguments, or even just take an educated guess without access to the source or binaries and try a couple of experiments. Soon enough, being pedantic pays off with access to something that wasnt supposed to be accessible.\n\n(Its interesting to note that completely preventing hacking is understood to be essentially impossible. There is always //some// new backdoor, even if its calling someone up and convincing them to go switch on the computer and type in some commands. Similarly, its hard to believe were ever going to run out of interesting questions to ask about the world, or be able to ask questions that dont contain some ambiguity. Lojban claims to eliminate logically ambiguous statements, but it doesnt help here because this isnt a linguistic ambiguity: it is entirely true that both the refrigerator and the eggplant contain water in the normal senses of all those terms, its just //useless// in this context.)\n\nTo put the underlying similarity behind all these things another way, the hacking-pedantry-science mindset is one of intentionally ignoring the tacit assumptions that we ordinarily operate under, making it possible to be theoretically “right” even as one is practically wrong, notice deeper or unexpected truths about how the world operates, or take advantage of how the software //actually// behaves rather than how it was intended to behave. It frees your mind to think entirely new things, at the cost of losing some touch with the normal world (see AbstractAndConcreteThinking).\n\nI think this is also part of why the eggplant anecdote is //funny// (at least, it is to me). One of the key characteristics of Humor is shifting assumptions, where you take something to mean one thing and then it later means another, or something is transplanted out of its ordinary context. That happens at least twice here: once when the question about water turns out to refer to the contents of a vegetable rather than a pitcher, and once when the creative process involved in science is turned on the pointless exercise of messing with Alice.\n\nThe levels of thinking here could be seen as an example of how AbstractionsLeak -- especially apropos with the hacking side since its something intentionally designed in layers by people.\n\n!! References\n\nA joke (sometimes presented as a brain-teaser) that riffs on the same idea as the eggplant and happens to also involve a refrigerator (I guess theyre InherentlyFunny):\n\n\u003C\u003C\u003C\n\\\\nQ: How do you put a giraffe into a refrigerator?\nA: Open the door, put the giraffe in, and close the door.\n\\\\n\u003C\u003C\u003C\n\n(Technically, nobody asked whether the refrigerator was big enough.)},{title:HammerAndNail,created:20200410142153419,creator:soren,es:likely,modified:20210509005558909,modifier:soren,tags:Design Reasoning Psychology Expression Public Idea,type:text/vnd.tiddlywiki,text:Everyone knows the old proverb, “when all you have is a hammer, everything looks like a nail.” We often say this while noting the stupidity of //other people// who do this, while of course not noticing that we do it too!\n\nI believe this problem is largely impossible to avoid. The tools we use unavoidably shape our ideas and what MentalModels we understand and have at the front of our minds, which is a good reason to //use the right tools// to DeflectResistance and push ourselves into the thinking patterns we want. Cf. SocialMediaIsAntisocial.\n\nA useful corollary I made up: “When you just got a new hammer, everything looks like a nail.” We need to work to combat the RecencyEffect in our reasoning.},{title:HammeringHarder,created:20201026181629686,creator:soren,description:When your current approach to a problem doesnt seem to be working well, stop and reconsider whether theres a better option.,es:confident,modified:20251010025157547,modifier:soren,tags:Process PhilosophyOfLife Creativity Public Idea,type:text/vnd.tiddlywiki,text:Pathological problem-solving technique in which you keep focusing energy on a dead end. (//Problem//: The round peg wont fit in a square hole. //“Solution”//: Hit the round peg harder.)\n\nHard, focused work is critical|DeepWork to success in any project except those that are so easy theyre hardly worth doing. But at times you have to take a step back and make sure youre still doing the right thing, applying Creativity. (Something about doing worthless things efficiently.|WorthlessEfficiently) This is actually //really hard// much of the time. Going from laser-focused|FlowState to recognizing you should stop doing that is unintuitive; youre not in the right mindset to recognize that you need to switch mindsets, if that makes sense.\n\nOne useful strategy to avoid getting caught in dead ends is to build in moments for reflection on a scheduled basis. For instance, you might write up a quick standup-style list of bullet points explaining where your tasks are and what challenges youre facing at the end of every day, or review how youre doing on your goals every week. This strategy sets an upper bound on the amount of time that you can end up hammering away at the problem haplessly; even if you dont notice youve gone astray while youre working, youll have a chance to catch it.\n\nNext actions might involve planning your next steps|PlanningAlwaysGood, reframing the problem, doing research, TalkingToTheDuck, consulting with a friend or coworker, or even just taking a break. Hammering harder is the worst option.\n\nThis is a form of what MxGwern calls the UrCognitiveBias, failing to switch from System 1 to System 2 when appropriate.\n\n\n!! References\n\n> Productivity is not effort × time -- if you want one quick way to burn out, its believing that you just need to crank harder in circumstances where your effort is not efficiently creating results.\n> ---MsCateHall, “50 things I know|https://usefulfictions.substack.com/p/50-things-i-know”},{title:Handlessness,created:20221002143530789,creator:soren,description:Losing the free use of your hands during an activity makes you more engulfed in flow and subsumed in identity.,es:possible,modified:20221002151403376,modifier:soren,tags:Idea Identity Public,type:text/vnd.tiddlywiki,text:I think activities that fully occupy your hands have a special ability to capture your identity. (Your hands have to be occupied to the point that you cant readily pull them away momentarily to grab something else without stopping the activity, so Driving, for example, doesnt count.)\n\nI noticed this for the first time some years back when singing with OC|TheStOlafChoir; being physically tied into the group while holding hands felt like a major factor in the loss of personal identity I felt at the most transcendent moments there. Today, I noticed the same thing seems to happen when I row|AwkwardAnnie. Rowing makes me feel much more connected to the boat|InstrumentPairBonding than paddling does, literally and metaphorically, and I think this is largely because your hands become essentially unusable -- theyre only mechanisms for transmitting force from the rest of your body to the oars, theyre completely fixed in place.\u003C\u003Cfnote \My boat has non-feathering oars; the impact might be slightly less if you have to turn your wrists all the time.\>> And you can let go of the oars to scratch your nose or whatever, but you have to completely stop rowing and then steer the boat back into line, even if you only let go for five seconds.\n\nAre there other activities like this that could confirm or deny my hypothesis?},{title:HandmaidsTale1985,author:Atwood,bibliography:LifetimeReading,caption:The Handmaid’s Tale,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034905,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1985},{title:HanlonsRazor,created:20200313125407528,creator:soren,description:Never attribute to malice that which is adequately explained by incompetence.,es:confident,modified:20251104132501579,modifier:soren,tags:Psychology PhilosophyOfLife Public MentalModel Idea,type:text/vnd.tiddlywiki,text:An old principle often called Hanlons Razor:\n\n> {{!!description}}\n\n(“Incompetence” may be replaced with “ignorance”, “misunderstanding”, “powerlessness”, “carelessness”, “learned helplessness”, or just about any relevant concept.)\n\nPeople usually just arent malicious. Of course they are, sometimes, but its very easy to think people are being malicious when they arent. When we do something wrong, of course //we// arent being malicious; when someone else does something wrong, well clearly they are! (See FundamentalAttributionError.)\n\nAside from the human value of maintaining a MostRespectfulInterpretation, malice is pretty hard to work with. If someone just hates you or wants to screw you over, its hard to negotiate. If theyre just ignorant, well, theres a pretty easy path to fixing the situation. So waiting to assume malice until the last possible moment, rather than jumping to conclusions|JumpToConclusions, gives you many more opportunities for a good resolution and can turn you from enemies into partners. (See TrustAsymmetry.)\n\nCogIsNotTheCause is a corollary applying to organizations.\n\nCf. HanlonsTanto.\n\n\n!! References\n\n> Everyone is always doing their best, even Hitler.\n> ---Nintil, “33 things Ive learned at 33|https://nintil.com/33-things/”},{title:HanlonsTanto,created:20200809014300931,creator:soren,es:likely,modified:20211005151231025,modifier:soren,tags:SorenConcept Politics Reasoning Idea Public,type:text/vnd.tiddlywiki,text:Hanlons Tantō is the negative counterpart to HanlonsRazor that many people today seem to be following. It could be stated thus: //Never assume good intent, miscommunication, or accident when you could assume malice.//\n\nThe tantō|https://en.wikipedia.org/wiki/Tantō is the knife/short sword used by the samurai to, among other things, commit seppuku. The principle is so named because its application hurts the wielder by causing them to JumpToConclusions that something is as bad as it could be, getting them worked up for no good reason. It is also used as a weapon to hurt others (often unjustifiably), and sometimes accidentally the user when they lose face by making a false accusation -- in contrast to the razor, which is a carefully and peacefully applied tool to think better.\n\nSamuel Johnsons dictionary contains an entry for the lovely word //seeksorrow//, which is a person who “contrives to give himself vexation.” We could stand to bring that one back for those who apply this principle.\n\nCf. MostRespectfulInterpretation.},{title:HapaxLegomenon,created:20200202005449380,creator:soren,es:confident,modified:20240307145650946,modifier:soren,tags:Language Definition Public Idea,type:text/vnd.tiddlywiki,text:A //hapax legomenon// (literally “said once”) is the beautifully fancy Greek term for a word that occurs only once in a given text or corpus.\n\nHapax legomena typically make up somewhere around half the words in a corpus (see Zipfs law|https://en.wikipedia.org/wiki/Zipfs_law).\n\nI have found this term highly useful in slightly broader contexts, like tags as an organization concept (see MinimalTagging).\n\n//Hapax legomenon// ranked highly on an \u003C\u003Csubreddit AskReddit>> list I once read of things that are totally boring but sound really badass. (My other favorite: “high-altitude flatus expulsion”, when you fart a lot on an airplane because the pressure changes.)},{title:HappyAbsolutelyFine2016,caption:Happy: Why More or Less Everything is Absolutely Fine,created:20200612213105324,creator:soren,format:ebook,medium:book,modified:20211025204409721,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2016,text:Book by MrDerrenBrown on Stoicism and practical philosophy and psychology. Compare GuideToTheGoodLife2009.\n\nThis book might have my favorite subtitle ever. Usually subtitles are boring; this one is brilliant. “More or less everything is absolutely fine” not only summarizes Stoicism perfectly but is a phrase you can carry with you through everything. Really, its not far off from my whole approach to life.},{title:HappyGoLucky2022,author:David Sedaris,caption:Happy-Go-Lucky,completed:202206071200,created:20220609015430312,creator:soren,medium:book,modified:20220613135147924,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2022,text:Latest (as of this writing) book by MrDavidSedaris. Its pretty much like every David Sedaris book: funny, serious, absurd. I will never understand how his family ends up with so many crazy stories; its like they attract stories that David can put in his books.\n\nI think this one was a little more serious than most; many of the stories had to do with the COVID pandemic|PandemicMood and his fathers decline and death.},{title:HarbingerConsumers,created:20200326005226088,creator:soren,es:possible,modified:20210515035955107,modifier:soren,tags:Identity Business Public Idea,type:text/vnd.tiddlywiki,text:Evidently there is a set of people who reliably purchase and like products which will flop. The effect is not limited to specific types of products, it applies to food, clothes, whatever. You really //dont// want these “harbingers of failure” to like your new product.\n\nCuriously, there are also harbinger //zip codes//, and people who start in harbinger zip codes tend to move to other harbinger zip codes, suggesting that whatever makes these people purchase flops also draws them either to specific places or people like them. It seems, however, to be an intrinsic personality attribute, because if someone moves to the “wrong” kind of zip code, they dont become or cease to be a harbinger. There are very few other demographic correlations.\n\nNot where I originally read this but a source: https://boingboing.net/2019/12/03/harbringer-of-doom.html},{title:hard-boiled-eggs.jpg,type:image/jpeg,created:20201002022506717,modified:20201002022514264,tags:Image Public,_canonical_uri:./extimage/hard-boiled-eggs.jpg},{title:HardProblemOfConsciousness,created:20200407032101931,creator:soren,es:likely,modified:20210709231031176,modifier:soren,tags:Psychology Neuroscience Public Idea,type:text/vnd.tiddlywiki,text:An open question in philosophy and neuroscience which very likely will always remain one: how do physical things (e.g., brain matter) create conscious experience? It just plain doesnt make any sense.\n\nWorks that touch on this idea:\n\n* MrJulianJaynes argues in Jaynes1971 that perhaps people were not conscious until very recently!\n* MrDouglasHofstadter suggests in GodelEscherBach1979 that it arises from a StrangeLoop.\n* PanPsychism suggests that consciousness is a fundamental property of the universe rather than something that arises from a substrate not including it.\n\nTerm was coined quite recently (in the 1990s) by MrDavidChalmers, but the idea has been around long before that.\n\nSome people claim this isnt even a thing, consciousness just is an illusion. To which I can only say, what? I guess I can kind of understand how youd get there, but also thats hand-waving of the first degree. Its like saying I dont have to explain why the sky is blue -- it actually isnt, we just //think// it is! Theres some truth in the statement perhaps if you read into it enough, but its ultimately totally unsatisfying.},{title:HarkTheHerald,caption:Hark, the Herald Angels Sing,created:20200115033050741,creator:soren,medium:music,modified:20220504210953413,modifier:soren,tags:Source Music Song Public,type:text/vnd.tiddlywiki,text:Some goofy facts about this song, via source at end:\n\n* The tune was originally used for...an unveiling of a Gutenberg statue; see VaterlandInDeinenGauen.\n* Mendelssohn thought this would make a terrible tune for a sacred song.\n* In the initial Wesley iteration, originally published as \Hark, How All The Welkin Rings\ (a wonderful word, that), with the terribly long text:\n\n```\nHark, how all the welkin rings,\n“Glory to the King of kings;\nPeace on earth, and mercy mild,\nGod and sinners reconcil’d!”\n\nJoyful, all ye nations, rise,\nJoin the triumph of the skies;\nUniversal nature say,\n“Christ the Lord is born to-day!”\n\nChrist, by highest Heaven ador’d,\nChrist, the everlasting Lord:\nLate in time behold him come,\nOffspring of a virgin’s womb!\n\nVeil’d in flesh, the Godhead see,\nHail th’ incarnate Deity!\nPleas’d as man with men to appear,\nJesus, our Immanuel here!\n\nHail, the heavenly Prince of Peace,\nHail, the Sun of Righteousness!\nLight and life to all he brings,\nRisen with healing in his wings.\n\nMild he lays his glory by,\nBorn that man no more may die;\nBorn to raise the sons of earth;\nBorn to give them second birth.\n\nCome, desire of nations, come,\nFix in us thy humble home;\nRise, the woman’s conquering seed,\nBruise in us the serpent’s head.\n\nNow display thy saving power,\nRuin’d nature now restore;\nNow in mystic union join\nThine to ours, and ours to thine.\n\nAdam’s likeness, Lord, efface,\nStamp thy image in its place.\nSecond Adam from above,\nReinstate us in thy love.\n\nLet us thee, though lost, regain,\nThee, the life, the inner man:\nO, to all thyself impart,\nForm’d in each believing heart.\n```\n\nhttps://baptistbulletin.org/the-baptist-bulletin-magazine/ten-things-you-probably-didnt-know-about-hark-the-herald-angels-sing/},{title:HarmonizeFreely,created:20231120233633938,creator:soren,description:Instruction in a concert bulletin; what does it teach us?,es:mythological,modified:20240221003633969,modifier:soren,tags:Idea PhilosophyOfLife Public Music,type:text/vnd.tiddlywiki,text:At a choir concert at StOlaf I attended in perhaps 2018 or so, one piece was an “Alleluia” with a pretty simple progression that the audience was asked to sing along with. No music or anything, just the instruction in italics, “Harmonize freely.”\n\nThe music was picked so that this was easy, of course. And it worked, wonderfully; it was probably my favorite thing on the program. Like other simple things done well|SimpleThingsDoneWell, it was immediately enjoyable, accessible to the (extremely musical) audience, impossible to take issue with, and left room for an almost unlimited amount of creativity (not limited by but in fact engendered by the GenerativeRestriction involved).\n\nHarmony is about both things, of course: freedom to explore|TryItAndSee and carefully controlled rules|NoRulesNoFreedom, and the balance between them. Harmonizing on the fly is also about skill, an intuitive kind where you dont really have to think about it but where you draw on all your pattern recognition and wisdom from the rest of your life, and about being efficient|EfficientLife and sensitive to your surroundings and your comrades. So its a lovely metaphor for life, which includes (or should include) all of these things as key elements.\n\n\n!! References\n\nSinging the Doxology (on Old Hundredth) with my family|PrivatePerson back in Indiana before a meal together is among one of my favorite activities. It only lasts about 30 seconds, and the harmonies are different every time with absolutely no coordination, but I slip into a flow state almost instantly, and it turns out remarkably good.},{title:HaroldAndMaude1971,caption:Harold and Maude,completed:202107161200,created:20200125154615525,creator:soren,medium:film,modified:20250803205854749,modifier:soren,rating:good,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,universe:HaroldAndMaude1971,year:1971,text://Harold and Maude// is a 1971 film that combines a comedy about death and suicide with a romance between an 18-year-old boy and an 80-year-old woman. //TV Guide// magazine described it thus:\n\n> “This is a doggedly eccentric film which some will reject out of hand. Others will find it profoundly moving and life-affirming.”\n\n“Life-affirming” might be a little much, but I still love it. Its definitely a love-it-or-hate-it CultClassic though. In a review somewhere, a guy said he used to show this to everyone he dated; if they hated it, that was it! This doesnt even feel petty to me, because the film is about //a view of what life is//, and if you dont share that view, that might be a legitimate compatibility problem. (One of my own dealbreakers is “curious about the world”; this isnt that far off.)\n\nIts hard even to say what genre this is. The internet says “Drama”, which means “we couldnt think of a better way to classify it.” The entire movie is about death, but somehow its not even a little bit depressing, and its instead uproariously funny. Some parts were even funnier the second time around, just because parts of it were so unusual and shocking I didnt know how to react at first!\n\nFirst watched this 2020-01-24; came back 2021-07-17, 2023-06-29, sometime in 2025-06. The first part seemed to have shrunk a little bit the second time, but the film as a whole hadnt. Im leaving the rating|MediaRating at //good// for the moment because its hard to know whether that was only because there was stuff I missed the first time due to not knowing the plot or because its actually inexhaustible.\n\n!! Characters\n\nLike the other CultClassic I saw for the first time recently, BigLebowski, I think H&M owes its success almost entirely to the zaniness and yet lovability of the characters. They are unforgettable and hilariously implausible|ImplausibleCharacter. There are really only three meaningful characters, MrHaroldChasen, MsMaudeChardin, and MsChasen (Harolds mother). See those tiddlers for details.\n\n!! Thoughts rolling around in my head\n\n!!! Relationship between Harold and Maude\n\nOne of the stranger relationships in literature...but compelling! See HaroldMaudeRelationship.\n\n!!! Maudes death\n\nMaude dies unpleasantly at the end of the film, in a way that completely blindsided me but makes some sense in retrospect. See DeathOfMaudeChardin for detailed analysis on what works, what doesnt, and what conclusions we must take from it.\n\n!!! Gifts\n\nHarold gives Maude a coin in an interesting scene that I find instructive as to the NatureOfGifts.\n\n!!! Flowers\n\nHarold says he likes the daisies because “theyre all the same.” Maude reacts viciously, pointing out that in fact they arent at all once you get close enough. But the message is different than usual when this topic comes up: its not that Harold is being unimaginative and needs to be convinced to be different, its that he is in fact clearly //not// the same as anyone around him already, even in outward behavior, he just isnt comfortable with it.\n\n!! Soundtrack\n\nAfter watching the movie for the first time, Ive gone on a bit of a MrCatStevens kick -- he did the entire soundtrack with something like 9 songs and several originals, including the ties-it-all-together “If You Want to Sing Out, Sing Out” that finishes out the movie with Harold playing on the banjo at the top of the cliff. Im realizing as I listen to songs that were in there how critical it is to the overall effect. Really his songs are just about the perfect match, and I think it might be a big component of the way everything is so absurd and unbelievable but it somehow still //works//.},{title:Haskell,created:20200322041724151,creator:soren,modified:20200323023745075,modifier:soren,tags:ProgrammingLanguage Code Public Idea,type:text/vnd.tiddlywiki,text:FunctionalProgramming language known for being incomprehensibly mathy and geeky to the uninitiated, as well as having a highly unconventional syntax and an extremely fussy compiler and type system.\n\nLike Lisp though, everyone who uses it thinks its the best thing ever, and it very probably does have some significant advantages for many use cases.},{title:HatchingMagic,caption:Hatching Magic,created:20200122025002319,format:paperback,medium:book,modified:20210607011247129,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HatchingMagic,text:Childrens book I read once upon a time. It involves Wicca and a guy who was part of Merlins court and time-traveled into the present day, as I recall. I loved this book at the time, but it doesnt seem to have made too much lasting impression on me...\n\nThere was a sequel too, which is referenced by M.|PrivatePerson, but I literally dont even remember the title at this point. I suspect its in a box in storage somewhere.},{title:HauntedSongs,created:20200116024116289,creator:soren,es:mythological,modified:20230319024444974,modifier:soren,tags:Music Imagination Metaphor Public Idea,type:text/vnd.tiddlywiki,text:MrAndrewMarlin, of band TheWatchhouse, says its impossible to play a popular or traditional song without invoking elements of all its past performances; they just keep building up, the people and their renditions. Maybe your audience knows some of them, maybe they dont...but theyre there either way. The song CantStepInTheSameRiverTwice.\n\nOr as he puts it, more eloquently than me despite holding forth in a live performance|https://www.youtube.com/watch?vEdP8S0uKP5U:\n\n> “I like thinking about songs being haunted, and how some songs just keep getting repeated and rearranged over the years, and the people that sing them throughout their lives kind of follow those tunes around and loom over the people that sing them. In a happy way. In a Mandolin-jovial way.”\n\n>---\u003C\u003Crt 10889>>\n \nPerhaps songs are ConstellationsOfInstances, having existence not in themselves but in all their performances. The metaphor seems especially apt for music, which is intrinsically bound to time in a way that other ideas or art forms are not; it can unfold and be experienced only over a period of time in which it is being played.\n\n\n!! References\n\n> Writing, for me, constitutes a kind of hanging out with the ideas and books and writers, both living and dead, who have shaped my thinking.\n> ---Sheila Liming, //Hanging Out//},{title:HaveToExperienceItToUnderstand,created:20200126162308163,creator:soren,description:Many experiences are impossible to fully understand or account for in your reasoning without having them yourself.,es:likely,modified:20250902154918022,modifier:soren,tags:Imagination PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:The longer I live the more I think, well, you just gotta try it|TryItAndSee and then youll know. There are a lot of things you just wont truly understand until you do, no matter how empathetic you are. Imagination is worth a lot, but without the appropriate input it will produce results that dont match the actual world -- which is often what you are seeking to understand. The map is not the territory|AllMapsLie. Sometimes you may lack any frame of reference at all to think about an experience you have not had (no language, as in HypoCognition, or no experienced pattern of thought, as in ToolsForThinkingDontWow).\n\nExperiences that are highly emotional are the worst in this regard. If someone has never been scuba diving, you cant give them the full experience without taking them out, and they will be missing some experience of the thrill involved, but some detailed stories and videos can give a pretty tolerable impression -- at least a good enough one that theyll be able to reason mostly accurately about it. But if someone has never fallen in love, there is no way you can possibly meaningfully explain what its like to them; they just have to wait until it happens (if it ever does) to get it.\u003C\u003Cfnote \I wonder if part of the problem with falling in love is that no two experiences of romantic love are the same. Sure, they share some qualities, but most really good relationships cant be explained and even look bizarre to others.\>>\n\n(A total solar eclipse is an interesting case that lies perhaps halfway between the two. Like scuba diving, you can easily describe and show pictures of the changes in the sun and surrounding environment that would seem to explain the experience. But like falling in love, there is something ineffable about actually being there and watching the moon perfectly fall into place over the sun that makes the very idea that you can explain it laughable. Irritatingly, though, unlike falling in love, it //seems// like it would be easy to explain, so its almost impossible to communicate how meaningful it was to you to anyone who hasnt seen one; it hardly even seems worth trying. You also tend to forget what it was like even for yourself pretty quickly, because there is no referent in your daily life to keep you thinking about it; you have to expend a lot of effort to remember.)\n\nAn excellent reason to live an interesting and diverse life, in my opinion. I like to say Im willing to try anything once as long as its not unreasonably illegal or dangerous. (Maybe not going so far as to steal cars like MsMaudeChardin, which she gives approximately this justification for, but then I dont think you can take anything that happens in in HaroldAndMaude1971 seriously!)\n\nTo the extent that this tiddler is true, it poses an interesting problem for things like being a different gender or race, which we just //cant// really experience; our best attempt at empathy and a great deal of IntellectualHumility is probably the only response available.\n\nOf course, the lessons we learn through experience are not always pleasant; they may belong to the SchoolOfHardKnocks. This does not make them any less valuable, less important, or more dispensable.\n\nA commonly-remarked-on type of this effect is YouHadToBeThere.\n\nMitigations:\n\n* Listening seriously to|TruthInFiction and/or condensing the experiences of others|MentalModel may be more able to substitute for our own experience than are general theories/abstract thinking|AbstractAndConcreteThinking or imagination.\n* UnderstandingFromScratch suggests we can experience the need and workings of a system by pretending it doesnt exist and rebuilding it ourselves.\n* Admit when you dont know|IDontKnow what something is like.},{title:HawaiiMissileAlert,created:20200325224710090,creator:soren,es:likely,modified:20210926031824148,modifier:soren,tags:Process Anecdote Design Public Idea,type:text/vnd.tiddlywiki,text:In early 2018, due to user-interface and process issues, an SMS alert was accidentally sent out to everyone in Hawaii that said an incoming missile had been detected and everyone should immediately shelter in place. No missile had even been detected, much less launched; instead, somebody accidentally clicked the wrong button.\n\nI wrote this little ditty at the time and posted it on F.|PrivatePerson, analyzing what went wrong.\n\n------\n\nSome people are upset that the person who caused the false missile alert in Hawaii on Saturday isnt getting fired. Actually, the alert wasnt his fault, and for once the government is doing exactly the right thing here.\n\nTo understand why the cause and the fault are so separated, heres a thought experiment. Imagine that Im driving across town. As Im approaching an intersection, my light is green and the intersection is clear, so I drive through it. Meanwhile, coming from my right is a driver who is drunk, texting, and doing 60 in a 30 zone while driving a car with faulty brakes. Because of these factors, she runs her red light and T-bones me.\n\nDid I make a mistake? Sure I did, and the consequences were pretty bad! The intersection was wide open and I should have glanced sideways to double-check cross traffic even though my light was green; thats just good defensive driving. Had I done so, since I drive a car with working brakes and travel at something approaching the speed limit, I probably would have been able to stop in time to avoid an accident, or at least skid around the corner and bump lightly into the other car instead of getting slammed at 60mph.\n\nWas this hypothetical accident my fault? No, it obviously wasnt. I was correctly following the rules of driving on a public road, and the only thing I did wrong was forget to check for something that shouldnt have been a problem in the first place. The other driver violated those rules, acting with reckless disregard for my safety. She gave me the responsibility of preventing an accident when it was her responsibility to stop her car at the red light and prevent me from failing. She would be found at fault for the accident and would have to pay for my medical bills and my car, not to mention most likely losing her drivers license.\n\nThats what happened in the missile alert incident: the guy who \pushed the wrong button\ metaphorically forgot to check cross traffic as he was approaching the green light. He certainly did have a responsibility to be extremely careful when he was using a system that sends out emergency warnings about nuclear missiles, and he failed in that responsibility in this case. However, the system was practically designed for him to make the mistake he made. Systems need to be designed with the knowledge that their users inevitably make minor mistakes. Its the systems job to point out those minor mistakes and prevent them from causing catastrophes. Its the users job to be careful and pay attention to what the system is telling them, not to completely avoid making them -- people being human, a certain number of minor mistakes are inevitable.\n\nI happen to know a reasonable amount about user interface design and accident prevention, although Im admittedly not an expert. In my view, here are all the things that went wrong, interspersed with the story that Ive gathered from various sources:\n\nThe employee started the software to send out the test message.\n\nStrike 1: The employee was (entirely according to procedure) using the emergency-alert software alone. Protocol when using a safety-critical system like this should have required a second person to be watching over the computer operators shoulder and double-checking their work.\n\nThere was a drop-down menu which listed the various emergencies which the system could send out warnings for. This menu also contained a \test\ option for each emergency. The employee was supposed to choose \Missile Warning Test\ but instead inadvertently chose, just a few pixels above it, \Missile Warning.\\n\nStrike 2: The tests should not have been mixed with the real warnings. The test options could have been in a different application, on a different tab of the interface, or even just in a different drop-down menu. Accessing the real options could pop up an information message stating something like, \You are now sending real alerts and not tests.\\n\nNext, a confirmation screen appeared. The confirmation screen was exactly the same for all choices in the previous drop-down. The employee clicked OK.\n\nStrike 3: The confirmation screen probably should not even appear when youre only doing a test. (If there are too many confirmation screens, research shows people get used to clicking through them, and when they actually need them they blow right past them.) If the confirmation does appear in all cases, the confirmation screen for a real missile alert should look VERY different than the confirmation screen for a test. Different words, different background color, different size, big picture of a mushroom cloud, whatever. It should be impossible not to notice that something different than usual is happening.\n\nStrike 4: The system should have shown the user a preview of the message about to be sent out, perhaps as part of the confirmation screen. This would make almost any mistake obvious, whether it was sending out a real alert instead of a test or sending out a tsunami warning instead of a missile warning.\n\nStrike 5: When a similar confirmation screen is used for several things, one of which is far more dangerous than another, simply clicking an OK button should not dismiss the confirmation in both cases. If youre about to send a real alert that could send hundreds of thousands of people into a panic, you should have to tick a checkbox that says in bold letters, \I understand I am sending a real missile alert and not running a test\, or you should have to enter a password. (They could even paste it on the monitor if they dont want to worry about forgetting it in a stressful situation, it just needs to force the user to stop and go, \Hey wait, I dont normally need a password for this!\)\n\nClicking OK on the very-unhelpful confirmation box immediately sent a message to everyone in the state of Hawaii announcing that there was a ballistic missile incoming and it was not a drill. Momentarily, the office realized the mistake. However, the software provided no way to cancel the warning.\n\nStrike 6: After doing something nasty but mostly reversable, there should be a button on the very next screen that the user can push if they chose the option in error an OhShitButton. It wouldnt even have to be because the user of the software made a mistake; maybe a few seconds after the message is sent out the Pentagon calls and says they discovered it was a prank, or someone left the training tape in the machine|https://www.pbs.org/wgbh/nova/article/nuclear-false-alarms/, or a bunch of birds or balloons set off the radar alert|https://www.youtube.com/watch?vFpu5a0Bl8eY. It could either pop up a template allowing the user to compose an explanation or simply send out a \FALSE ALARM, MORE INFORMATION FORTHCOMING\ message immediately. Better yet, if the message hadnt been received by all devices yet, it could hide the original message from at least those devices before sending out the false-alarm notification.\n\nStrike 7: Not only did the software not allow them to cancel the alert, the office had no provision whatsoever for what they would do if there was a false alarm. The number of things that could happen that could cause a false alarm, coupled with the chance of being asked to send out a provisional warning and then cancel it later, makes this absolutely absurd.\n\nStrike 8: Moreover, they didnt even have security clearance to send such a cancellation message! They had to contact FEMA and ask for help on getting permission in the system to send out any message other than their precomposed warnings. Thats why it took 40 minutes.\n\nSo thats 8 major design and process flaws. The way the system was set up, all it took to cause mass panic was one person clicking in a slightly wrong place and not noticing the mistake. If all of these flaws were fixed, the employees would have had to be on LSD not to notice and correct their mistake long before allowing the problem to reach the stage it did. Im glad the employee \responsible\ didnt get fired, because that suggests someone realizes the absurd software and process that led to this mistake were the real cause, not the employees minor error see BlamelessPostmortem. Heres hoping they fix it before next time someone clicks in the wrong place.\n\n-----},{title:hdm-power-01.jpg,type:image/jpeg,created:20210812123730365,modified:20210813022430663,tags:Image Public,_canonical_uri:./extimage/hdm-power-01.jpg},{title:hdm-power-02.jpg,type:image/jpeg,created:20210812123741865,modified:20210813022427409,tags:Image Public,_canonical_uri:./extimage/hdm-power-02.jpg},{title:HdmBbcSeries,caption:His Dark Materials,created:20200612030403234,creator:soren,medium:TV,modified:20221002154252049,modifier:soren,readstatus:read,tags:Public Publication,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2019,text:TV adaptation of HisDarkMaterials by the BBC, HBO series.\n\nMuch better than the movie of GoldenCompass, although it cant hold a candle to the graphics of the movie, which were stunningly beautiful. I also thought the movie MsLyraSilvertongue was pretty much impossible to top; this Lyra (Dafne Keen) is still excellent but not the same. But those things were largely ruined by the terrible screenplay, which chopped up the story into little bits and randomly rearranged and removed them, producing something that superficially resembled the original but resulted in totally different themes and none of the intellectual or emotional impact. \n\nThis adaptation sacrifices the graphics (they dont get in the way, but theyre the last thing youd get excited about) for writing that actually works and 8 hours of runtime per book to tell the story fully, which is, well, much preferable.\n\n\u003C\u003Ctabs tabsList:\prefix\u003CcurrentTiddler> -allcurrent\>>},{title:HdmBbcSeries/Season1,caption:His Dark Materials: Season 1,created:20210424231058860,creator:soren,medium:TV,modified:20221102020943839,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2019,text:Having watched Season 1 (all there is so far), changes that were good:\n\n* Stuff from the beginning of SubtleKnife -- basically, MrWillParrys backstory up until the point where he stumbles upon the Sunderland Avenue window -- is interleaved into the first season. This really works. Though Im embarrassed to have NeverNoticedThat the Magisterium is obviously connected to the mysterious men coming after Grumman/Parry, unless they just added that in the adaptation, which I rather doubt.\n* The expanded scene of Lyra going through the vents at MsMarisaCoulters place is fabulous. The scene of Lyra running through the ceiling at Bolvangar is removed but superfluous (and Coulter ends up doing it herself after Lyra locks her in). Indeed Lyra getting called out to go get cut plays much better than having her get found in the ceiling.\n* Some scenes that Ive always not thought much about were made heart-wrenching and excellent, including the journalist being murdered by daemon-squashing\u003C\u003Cfnote \Is that a word? it is now.\>> at Coulters place and the death of MrBillyCosta. (Billy is returned safe and sound to the Costas in the book, but the lost one replacing the relatively meaningless MrTonyMakarios in the series.)\n* Some largely inconsequential things that just made it play better on the screen, e.g., Lyra is on the roof outside the Retiring Room instead of randomly poking around in the wardrobe, the gyptians burst into Bolvangar instead of finding the children hanging around outside (though you do miss the vague ungrateful-Egyptians-being-brought-into-the-wilderness vibe), Lyra nukes the intercision machine instead of opening all the gas valves and throwing flour on a stove.\n* Episode 8 is horrific and beautifully so. Rogers impending doom starts out at the beginning and drags out for 50 minutes. Lord Asriel even has to //push// the guillotine down with a harsh grating, and it takes him like a whole freaking minute. Theres a way that I think in the book youre more distanced from the fact that, as Roger says in the adaptation, Lyra came all the way here because of him and he came all the way here because of her, and after all that, he just dies \for the greater good\ as she watches helplessly.\n\nBad or less effective stuff:\n\n* The fight between MrIorekByrnison and MrIofurRaknison is extremely underwhelming -- easily the low point of the whole season. For some inexplicable reason they fight with no armor despite being armored bears, it takes like 90 seconds, and after the fight they immediately cut away from the scene instead of having Iorek eat the heart and having all the bears swear allegiance. I dont usually ask for more violence and gore in my movies and TV, but thats the entire point of this scene and it just doesnt work without it. Polar bears are...//bears//, and theyre brutal when they want to be, they are not fluffy white floofballs.\n* The brilliant scene of Lyra fencing with Iorek (borrowed from MarionetteTheater) is removed and replaced with a perfunctory scene of her lying next to him and discussing the possibility of tricking a bear. The tricking part later pretty much hits you over the head.\n* I also really missed the scene of Lyra and Pan separating when meeting Iorek, contrasting them with the supposed loneliness of Iorek. Nothing to effectively show either; theyre both //mentioned//, but thats about it.\n* In general, Daemons struggle to make the emotional impact they do in the books, and it feels like they try to avoid showing them on screen and in communion with their humans whenever possible (given the obvious difficulty and expense of rendering them, this is hardly surprising, but its still disappointing and damaging to the impression of the world).\n* The scene of Coulter tearing apart JordanCollege looking for Lyra felt silly and unnecessary. Shes already bungled enough things up, and //obviously// Lyra wouldnt be there...shes too intelligent to do this.\n* MrAsriel is more than a little too put out when MsLyraSilvertongue shows up at his doorstep. Its dramatic, but both he and Lyra are too intelligent for the scene to be plausible: he too intelligent to wear his heart on his sleeve after his initial shock and basically leer at MrRogerParslows impending demise in a public fashion, and she too intelligent not to turn and run out the door and shout for Iorek (who left about a minute prior) upon seeing his reaction.},{title:HdmBbcSeries/Season2,caption:His Dark Materials: Season 2,created:20210424231153499,creator:soren,medium:TV,modified:20250307040229610,modifier:soren,rating:distinguished,readstatus:read,tags:Public Source,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2020,text:Season 1|HdmBbcSeries/Season1 of this show|HdmBbcSeries was good; I thought this one was even better. Nothing really stood out to me as being stupidly done, and my impression was that they did a better job integrating daemons|Daemon this time -- perhaps they were able to invest more money and energy in it this time since a lot of characters dont have them in this section!\n\nGood stuff:\n\n* Again, one of the most sensitive adaptations of a book Ive ever watched. The BBC is consistently good at this; specifically at translating a story from one medium to another|MediumAdaptation, so that it has the same effect|SoWhat on the audience even if the details are different. Overall, the writing knocks it out of the park again.\n* MsMaryMalone is fantastic. Im not sure she appears exactly how I imagined her before, but shes exactly right: ridiculously nice, surprisingly open, obviously intelligent. For whatever reason, the series did a much better job for me than the book at projecting exactly how crazy she must think shes going when all this stuff starts happening to her -- especially under stress I would think I was having a psychotic breakdown.\n* MrLeeScoresby is very well done too. Lin-Manuel Miranda is not an obvious choice (at least to me), but he does a great job.\n* I really like the extension of MsMarisaCoulters background so that she was abused as a child (and Lee knows this), and so that she tried to get a doctorate but was prevented from doing so because shes a woman. In general, Coulter continues her fantastic run, including being played up and brought forward in the story more with a couple of new scenes. One review I read said that you “never know what shes going to do next,” and this is totally true and surprisingly rare and refreshing for a plot of this type. I cannot tell if Im being dense and having a poor memory or if her ability to control the Specters was added by the series; at any rate, it fits, although I also feel like her hard-heartedness and self-control is a little bit overbearing (as if we somehow wouldnt get it otherwise!).\n* The existence of smartphones is glaringly obvious; they are all over when in “our world.” And theyre able to effectively prevent them from playing a large enough role in the plot to mess with the story while adding just enough modernization-plausibility to prevent things from appearing 25 years out of date.\n* The Cittagazze set is very solid, to include the orphaned/lost children and the surrounding world. Also, apparently Ive been mispronouncing the name for 15 years.\n\nGripes:\n\n* The Alamo Gulch scene could have used a little more war flavor to it. Lees shooting performance almost felt cartoonish for some reason (Im not entirely sure why). Just like the bear fight in Season 1, I think they dont want to make the show too violent, but it needs to step a little bit outside of what youre comfortable with to have the full effect. Lee also dies without taking his parting shot at the airship and killing everyone left while refusing to shoot someone in the back, which I always felt was an important bit, and I didnt like that he outwardly overestimated his odds of survival. That said, this was not nearly as disastrously underdone as the bear fight; it was still climactic and moving.\n* MrStanislausGrumman is very blah. Although maybe thats true in the book as well -- but he showed up a lot and seemed more or less lifeless every time.\n* I am also unsure what to think of Grumman being killed by a sniper instead of a witch who used to love him. The latter seems mostly irrelevant to the story, but the replacement also seems mostly irrelevant, so Im not sure what the change is supposed to buy us. And I feel like having the sniper escape Lee underplays his heroism. The original also presents the witches as actors of much more ambiguous motives and morals than this version, which feels important in a general sense.\n* I struggle with the decision to make the Specters visible. It makes things a bit more dramatic on screen, sure, but I feel like at this point I would rather see the world through MsLyraSilvertongue and MrWillParrys eyes, where they are invisible. The narration in the book did this, and it makes sense. The sound effect also felt kind of cheap and poorly considered; obviously it is helpful to try to convey the mood that sets in when theyre around, but I wasnt sure it really did this all that well, and having them be so noisy feels wrong.\n* I didnt really like the portrayal of the Cave. Maybe its just that its so different from what Id imagined, but the window into the impressive-looking machinery felt ridiculous. Lyra also seemed unreasonably comfortable with the computer screen; despite Keen being a child of the digital age, Lyra has surely never seen one before.\n* This is an admitted PetPeeve of mine and hardly important, but the “code” that MsMaryMalone used to make her computer translate Dust into words, inspected in a quick freeze-frame, appears to be some kind of version-checking code from the RPM package-management system. Certainly nothing remotely relevant. I really do not understand why, when spending tens of millions of dollars on a TV show, you dont get someone who knows how to write a code sample that doesnt look ridiculously out of place. Heck, I would do it for free. On the plus side, at least they managed to pick Python, which could actually plausibly be used for such a task (unlike some other folks who have used HTML as executable code!).\n* Lyra is not enough of a bragging liar. To be fair, there may be less of this in the second book to begin with, but even in season 1 it was flavor instead of a major part of her personality, which is supposed to be quite relevant to the story.},{title:HdmBbcSeries/Season3,caption:His Dark Materials: Season 3,created:20230806205457326,creator:soren,medium:TV,modified:20250307040245956,modifier:soren,rating:distinguished,readstatus:read,tags:Public Source,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2023,text:Season 3 of the HdmBbcSeries was, I thought, better than the book. I am very impressed.\n\nPart of that is because the book was a low bar|AmberSpyglass; it has never quite worked. Nevertheless, its fairly remarkable that they managed to (in my view) repair the book in this version.},{title:HdmGraphicNovel,author:Philip Pullman, Stephane Melchior, Clement Oubrerie, Philippe Bruno, Annie Eaton,caption:The Golden Compass: The Graphic Novel,completed:20221026,created:20221102015912496,creator:soren,medium:book,modified:20221102033756056,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,url:,year:2019,text:Graphic novel version of GoldenCompass. It appears to have been adapted into French and then translated back to English, and was originally published in three sections, but my edition is one volume. (It also doesnt have //page numbers//, which ought to be punishable by international law. Fortunately for writing this review, I know the story well enough to still find anything in about fifteen seconds!)\n\nI wasnt entirely sure about this adaptation at first, but by the end I was loving it. The illustrations are overall beautiful and you can spend pretty much as long as you want looking at them, and it was quite faithful to the original story in a good way. I would be a little nervous about recommending it to someone who doesnt already know the story, though, because it glosses over a few rather important points that are challenging to explain without narrative (e.g., a lot of things about daemons). Because there arent a lot of words, the pace also feels faster than the book. This is not to say it seems rushed, and the whole story is told; very few episodes were skipped.\n\nI found all of the scenes with Iorek particularly amazing. The friendship between him and Lyra was, I felt, emphasized in a way that it isnt in any other version, and the illustrations are marvelous; bears are so photogenic (or, graphigenic?), especially with little girls riding them. His fight with Iofur was much better than the TV series|HdmBbcSeries/Season1 (q.v. for complaints), though they did leave out the tradition of eating your opponents heart. I also //still// missed the scene of Lyra and Pan separating (this seems basically indispensable to fully understand the emotional bond between humans and daemons), but the related bear-fencing scene that they screwed up in the TV series is fantastic.\n\nIn the daemon cages, Lyra touched the lonely daemons, which was not done in the book. I could see an argument for breaking the rules here, but in the graphic novel they just never mentioned the taboo at all,\u003C\u003Cfnote \Aside from the expressions on characters faces when their daemons were grabbed, which I dont think fully conveyed this since all instances of this were daemons in small forms and having someone grip your daemon in a tight fist would be obviously coercive and unpleasant, taboo or no.\>> which removes half the significance from this event (the moments the rules are broken are important exactly because there //are// rules). If they were going to decide it was too hard to clearly explain why this was important in a graphic novel, they could at least have made the way the scene played out consistent with the existing canon so it could be fully justified to people who knew it.\n\nThe intercision machine at Bolvangar was depicted much better than in the movie or TV series. I hadnt thought too much about it until I saw the contrast, but theyre doing //experiments//, they are not doing assembly-line separation here. When you make up a new process in a scientific lab, you dont start with super polished and fancy equipment that looks like a nuclear reactor, you have metal cages that someone fabricated in their garage, open electromagnetic coils, and cables running across the floor.\u003C\u003Cfnote \Even the first|https://en.wikipedia.org/wiki/Chicago_Pile-1 //actual nuclear reactor// was like this!\>> I liked Asriels apparatus better in the TV series, though; the way he had to manually move the knife was heartrending and exactly characteristic of his character.\n\n---\n\nIts been a while since I read the original, and I had kind of forgotten how good the story is, as a story (and I think the graphic-novel format highlights the plot and makes this easier to see). Its full of clever turns that are brilliantly unexpected the first time you read it and still enjoyable the tenth time; they have some kind of metaphorical resonance. It touches all of the important themes in life: love, loss, betrayal, revenge, growing up, moral ambiguity, destiny and chance, the meaning of truth and deception. Actually, it doesnt just touch them, it says important things about all of them! Lyra is also a hero you cant help but love; I added some thoughts on that to MsLyraSilvertongue.\n\nIm marking this adaptation as //good//, and Im upgrading my rating of the original by proxy from //distinguished// to //good//. The other volumes remain at their present rating, at least for now, as I think they have somewhat less unity and theme-density.},{title:HdmReverseAllegory,created:20221106135507391,creator:soren,es:likely,modified:20221106140046867,modifier:soren,tags:Idea Religion FictionTheory Public,type:text/vnd.tiddlywiki,text:Pullmans negative portrayal of the Church in HisDarkMaterials is a reverse allegory. That is, rather than using a story thats generic and inoffensive to talk about a real-world thing that you want to comment on, it does exactly the opposite: it uses a portrayal of an evil institution to talk about fundamental ideas like being curious, enjoying life, dying with grace, and leaving the world better than you found it|MakeYourPartMoreBeautiful. These are plainly incompatible with the values of the Church in the book, but the ultimate point being made is not about the Church at all.\n\nDont get me wrong, I dont want to claim Pullman is not anti-Catholic Church even in our world; that seems pretty clear. But this is not the //point//. Nevertheless, its fair to point out that the reverse allegory under discussion is “less allegorical” than the sense in which //Animal Farm// is not about a bunch of animals on a farm, for example, because the literal meaning is not totally meaningless; rather, it is meaningful but incidental.\n\nI think peoples different abilities to partition off the primary functional meaning from the literal meaning may be part of why some religious people really hate the books, and others (like me) arent really bothered by it much.},{title:HelicopterParent,created:20200407030303140,creator:soren,es:confident,modified:20210917010646396,modifier:soren,tags:Psychology Definition Public Idea,type:text/vnd.tiddlywiki,text:Parents who stick so close to their children that they fail to learn some things themselves, like the ability to direct their own interests and actions. Also bad for the parent of course.\n\nLikely caused by concern about being a good parent and having the resources to help out. I read in a 2019 article (“How Parents are Robbing Their Children of Adulthood”) that working mothers today spend as much time in hands-on activities with their kids as //stay-at-home// mothers did in in the 70s!\n\nThe new extreme version of helicopter parenting is bulldozer parenting. In this version, you dont just always hang around and make sure everything is going well, you actively clear all the obstacles out of your kids way. Even worse, because they come to think that the world isnt hard to deal with.\n\nThen, of course, the kids are blamed for getting an ExistenceTrophy, even though they had no choice in the matter.},{title:HellYeah,created:20240315231139329,creator:soren,description:If something isnt a “hell yeah,” say no; your life will be better when its full of a few great things rather than many okay things.,es:confident,modified:20250330193948732,modifier:soren,tags:Idea PhilosophyOfLife LifeDirection Public,type:text/vnd.tiddlywiki,url:https://sive.rs/hyn,text:Heuristic best \u003Ca href{{!!url}}>expressed\u003C/a> (in my opinion) by MrDerekSivers: If you have an opportunity that doesnt seem like “hell yeah,” say no to it.\n\n> Refuse almost everything. Do almost nothing. But the things you do, do them all the way|DoItRightTheFirstTime.\n\nIf you are actually lacking in opportunities, it can make sense to say yes to simple “yes” items. For instance, if you really want to be in a band but dont have one, it makes sense to say yes to the first opportunity that doesnt seem bad, get your FootInTheDoor, and then continue looking for opportunities you like better. Otherwise, keep your Slack for the moments when a “hell yeah” opportunity comes along.\n\nA related rule from the minimalist community says that if youre considering buying or committing to something non-essential, you should ask yourself to rate it on a percentage scale, and only take things that rate a 90% or above. Why bother with kind-of-okay things? (Clothing is a particularly great example. Maybe you see a shirt that gets a 70%; its nice, and you can afford it, so you buy it. But probably you have some 90% and 95% shirts in your closet that you love already, so youll likely never wear the 70% shirt unless all your other shirts are dirty -- in which case youd probably be better off having been constrained|GenerativeRestriction to do your dang laundry.)\n\nIts also good to periodically evaluate whether you would still say “hell yeah” to things that are already in your life, as what youre excited about probably shifts over time. Maybe its time to let a good thing go so you can pick up a new “hell yeah.” This is one of my YearlyAbyssGazing questions.\n\n!! References\n\n> Anything not worth doing is worth not doing well.\n---MrRobertFulghum},{title:HennepinAvenue,created:20231013022924542,creator:soren,modified:20231022205920995,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Major thoroughfare in downtown, Uptown, and Northeast Minneapolis|Minneapolis.},{title:HennepinCounty,created:20230507185610017,creator:soren,modified:20231022205920995,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:County of Minneapolis and many of its northern and western suburbs.},{title:HennepinCountyMuseum,created:20230507185654330,creator:soren,modified:20230507185656242,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Heroku,created:20200602152643047,creator:soren,es:confident,modified:20211206161541540,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Platform-as-a-service tool for hosting apps. I used it once for my BusBot|https://github.com/sobjornstad/busbot SMS app.},{title:HeroMachine,created:20200325214345406,creator:soren,es:confident,modified:20211107174402204,modifier:soren,tags:Resource Public Idea,type:text/vnd.tiddlywiki,url:http://www.heromachine.com/heromachine-3-lab/,text:A brilliant app that generates really-pretty-decent character illustrations somewhat in the manner of a suspect identification kit. Fantastic if you cant draw very well and you want to get someone out of your head.\n\nUnfortunately requires Flash, which means it no longer works normally. The URL currently posts a possible workaround where you can run it on your local machine, and the author is hoping to get a redesigned version out at some point.\n\n{{!!url}}},{title:HiddenFallsRegionalPark,created:20230824171934912,creator:soren,modified:20240509144012115,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:HierarchicalAmpersands,created:20200914201019150,es:confident,modified:20210515035826720,tags:SorenConcept Logic Writing Information Public Idea,type:text/vnd.tiddlywiki,text:English is inherently ambiguous about the precedence of logical conjunctions, especially when the same one is repeated. In formal logic, math, and in more informal contexts by people who frequent those disciplines, its common to parenthesize things to indicate how they group together.\n\nMy system of handwritten //hierarchical ampersands//, part of my PersonalAbbreviationSystem, is a neater and faster way of implementing this, where certain ampersands have precedence over others. For instance, if I say, “Alice and Bob and Carol and Daniel went to a concert,” and the import is that two couples went to a concert together, I could write “Alice & Bob //&// Carol & Daniel went...”, where the italicized ampersand has a higher precedence than the roman ampersand.\n\nThe three forms, from highest to lowest precedence, are:\n\nimg width300 ampersand-hierarchy.jpg\n\nI default to the middle precedence, so I can add on top of or below as necessary further in a sentence.},{title:HierarchicalSpacedRepetition202310,author:Justin Skycak,bibliography:Anki,caption:Optimized, Individualized Spaced Repetition in Hierarchical Knowledge Structures,created:20240829192941255,creator:soren,description:The Fractional Implicit Repetition model allows the MathAcademy folks to count larger problems as repetitions of smaller problems; how does this work?,medium:article,modified:20240829193241726,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.justinmath.com/individualized-spaced-repetition-in-hierarchical-knowledge-structures/,year:2023,text:Article by the Math Academy|https://mathacademy.com/ folks about their Fractional Implicit Repetition (FIR) model that lets them reduce the number of reviews of complex, interdependent webs of knowledge like math problems, by allowing problems that “encompass” other problems to count as (full or partial) repetitions of those smaller problems. X encompasses Y if you cant possibly do X without doing Y (e.g., you cant multiply a double-digit number without multiplying a single-digit number, so it seems fair to give you all or a very large part of the credit for knowing how to multiply a single-digit number if you successfully multiply a double-digit number).\n\nInteresting theoretical ideas here that could likely be applied to other domains, even though math is surely one of the easier ones.},{title:HierarchiesVersusNetworks,created:20200226015412373,creator:soren,es:confident,modified:20221129233919910,modifier:soren,tags:TheControlAltBackspace Information Public Idea,type:text/vnd.tiddlywiki,text:Many ideas from TaggingForPersonalKnowledge20190109.\n\n* Hierarchies are rigid, top-down, managed, formal, and more useful in slowly changing, highly organized situations.\n* Networks are informal, decentralized, flexible, and more useful in rapidly changing, disorganized, chaotic situations.\n\nOne is not better than the other; rather, they complement each other. One is better than another for certain tasks, or sometimes they can even be used together for a given task.\n\nHierarchies often cause complementary networks to come into being, and vice versa, in a kind of information Ouroboros, due to the inherent weaknesses of each.\n\nMajor weaknesses of hierarchies:\n\n* Without jumping outside the system, each thing can only be in one place.\n* When the categories cease to describe reality well, reorganization is challenging.\n* Often harder to manage new or outside contributions.\n* Siloes off things into artificial categories and limits the ability of insights to cross boundaries.\n\nMajor weaknesses of networks:\n\n* Lack of organization, control, and standardization.\n* Harder to find things and requires the use of declarative rather than procedural memory -- significantly more effort each time, and recall will often end up lower. Or put another way, finding things is //research// rather than simple retrieval. Good hierarchies follow the Single-Question Principle|PrinciplesForLessWrongHierarchies, which means you dont have to think about how to retrieve the information yourself; you just answer the question.\n\nThe most visible problem arises when a hierarchy is used for something that it sucks at, such as a computer file system|FileSystemHierarchiesSuck, which is perhaps why hierarchies have gained a somewhat undeserved reputation in the Internet age as “bad” or “old” or “inflexible”.\u003C\u003Cfnote \The Internet as a whole is a network, and could not possibly work as a hierarchy!\>> Hierarchies should also not be used to partition knowledge|DontPartitionKnowledge, because the best uses of knowledge rely on being able to connect disparate ideas (DisciplineCrosspollination), and being made to think harder usually yields better results.\n\nAnother issue is that hierarchies are more seductive than networks, which can tilt the balance away from the correct choice in a given situation. Because they seem more logical, straightforward, easier to think with, were more likely to gravitate towards hierarchializing something than to decentralizing and networking it. Networks are harder to think about and their benefits are less obvious. This is a form of CounterintuitiveEfficiency.\n\nNotably, I think that although hierarchies are easier to start with, theyre also harder to do //well//, especially as the scale increases.},{title:HigherOrderContributor,created:20210607022908849,creator:soren,description:Many people in the modern world are higher-order contributors: they help others help others help others produce real value.,es:likely,modified:20211027035030945,modifier:soren,tags:Psychology Systems Employment Public Favorites Idea,type:text/vnd.tiddlywiki,text:I, like many other people in todays complex civilization, tend to be a second-order contributor. That is, rather than directly producing something of obvious value, I help other people produce something of value.\n\nOftentimes the chain is even longer; second-order is actually not bad at all! For instance, until recently I worked at a business insurance company|TheFederatedInsurance. Insurance is a product purchased by businesses (or individual people) so they can operate without being ruined by unforeseeable losses in their other endeavors; it isnt directly valuable in itself. I worked in the IT department there, so I wasnt actually selling insurance, I was helping the rest of the company sell insurance. And I didnt work developing or maintaining software, tools, and infrastructure used by the business, I developed and maintained the software, tools, and infrastructure used by the rest of the IT department to do that. So in some sense, at Federated I was a //fourth-order contributor// (or more, depending on whether the business insured is a first-order contributor or not).\n\nTo some extent, we risk infinite regression in defining the order of someones contributions. You could argue that if the insurance is being bought by a gas station, theyre not directly producing value either, theyre merely helping people to gas up their cars so they can go to work as fourth-order contributors for someone else. To make the concept meaningful, I draw the line where a concrete good is provided or meaning/enjoyment is created. If I sell some beets to you, thats a first-order contribution, even though in some sense youre only using the beets to cook a meal and feed yourself so you can go do other things. If I go play a concert that people come and listen to, thats a first-order contribution too -- maybe even more obviously, since the only thing you could plausibly take away from it and reuse elsewhere is “a better understanding of life through art,” and even that feels like a squishy argument.\n\n!! So what?\n\nFirst-order contributions feel much more useful in some way. Digging beets out of the ground and eating them or selling them to other people to eat has obvious value and directly uses our bodies|LessExpressiveThanASandwich. The beet farmer doesnt have to secretly worry that her job doesnt do anything useful for society|BullshitJob. By contrast, fourth-order contributions do have an on-the-ground purpose (provide a framework for the rest of the IT department to work in), as well as an extended purpose (help people help users help businesses sell things) – but in this last multi-layer transformation its almost impossible to tell whether removing you would have had an impact on how things were sold at the end of the chain. Every step dilutes and obfuscates the benefit provided in some fashion.\n\nThis said, I think a lot of people, including me, are more or less doomed to stay off the ground by their personalities. I could go farm beets for a living; I might even rather enjoy it in many ways. But in some way that would just be a diversion; in my spare time I am sure I would still be writing and making higher-order contributions of various kinds. I have to spend time thinking|IntellectionStrength at a higher level to be fully satisfied. This requirement is not necessarily a strength or something to be happy about! But it would be silly to fight it; its just who I am.\n\nSo perhaps the OpenQuestion is, what if anything can be done to improve the sense of meaning|PhilosophyOfLife experienced by higher-order contributors?},{title:HighSchoolWritingHorror,created:20220509025932984,creator:soren,description:High-school writing assignments made something I love doing feel terrible, by turning a creative endeavor into an exercise in following the rigid rules of an artificial game.,es:confident,modified:20250307212520294,modifier:soren,tags:Idea Writing Learning Public Creativity School Favorites,type:text/vnd.tiddlywiki,text:I love writing (maybe this is the understatement of the year for someone whos written nearly 400,000 words in this Zettelkasten in the last 2 years with no immediate goal in mind). But I always //hated// writing papers in school.\n\nThis apparent contradiction is not hard to explain. The two things I enjoy about writing are (1) clearly explaining interesting ideas (as a way of thinking about them, sharing them, or both) and (2) playing with language. School papers offer approximately none of either of those things; they reduce writing to mechanics and remove all the playfulness|PlayfulKnowledgeManagement that rightfully belongs in it. The topics are usually uninteresting, good style or good thinking is rarely appreciated or even noticed, and the audience is fake. (Youre lucky if even the teacher reads it closely. After that, its probably going in the garbage; youre going to cringe if you find it a couple years later anyway!)\n\nOr to put it another way, youre playing a stupid game|https://www.lesswrong.com/posts/NMoLJuDJEms7Ku9XS/guessing-the-teacher-s-password instead of teaching or persuading or describing something meaningful to you, with the ultimate reward being a letter closer to the beginning of the alphabet scrawled on your paper. Of course, everyone tells you that youre doing something profoundly important to your future career. Surely there are ways to teach people how to write that arent soul-crushing? (Not only are there other options, presumably a method that allowed students to enjoy writing would be more effective! Im sure I learned at least as much about writing from a combination of reading a lot and writing things I cared about as from school, even without much if any feedback on the former -- after all, my actual teachers feedback was mostly low-quality anyway, being more focused on my adherence to the rules of the game than my writing skill.\u003C\u003Cfnote \I did have one teacher who took this approach, in 7th grade; every week we had to write a “paper” (many of them were actually creative writing, or very open-ended things). The minimum length was 100 words, so you could basically blow it off if you werent interested in the prompt; but most people would write way more most weeks, sometimes pages and pages. As long as you did it you would get a reasonably good grade. Every Friday we turned something in, and every Monday anyone who wanted to could read their piece or part of it to the class, or have it read by someone else (either announcing their name or leaving it anonymous). This was actually a great experience: it was both fun and useful. But its hard to prove its useful to administrators, so its unlikely to ever become popular.\>>)\n\nMany teachers also have silly, micromanaging writing-style rules. Throughout school I was admonished never to use the word //I//, because apparently mentioning the author in a paper explicating the authors opinion is bad style -- just like if I were writing a paper about Abraham Lincoln, I would of course be careful never to use the word “Lincoln,” because saying what youre talking about is bad style.\u003C\u003Cfnote \Of course there are places where writing in the first person is inadvisable. An essay where you advance an argument or explain your opinion is not one of them.\>> Certainly, I could never begin a sentence with a conjunction. On the more Kafkaesque side, in one paper I wrote, we werent allowed to use the word //this//, and we were only permitted one form of the verb //to be// per paragraph.\u003C\u003Cfnote \Perhaps we should have released some //be//es into the classroom in protest. Come to think of it, that teachers husband was a beekeeper. Coincidence?\>> Unsurprisingly, that paper became an exercise in rewriting sentences in increasingly bizarre ways rather than actually expressing ideas. (For extra credit in invisible internet points, count how many times Ive violated the four “rules” mentioned in this paragraph in this tiddler. I count 54 as of this writing in 7 moderate-length paragraphs, but it will probably be slightly different by the time you read it!)\n\nEnglish literature was especially bad; rather than saying something interesting about the book you had to deconstruct it in this horribly reductionist|https://xkcd.com/1734/ and stultifying framework and end up saying nothing of consequence. Good fiction is //fascinating// to think and talk about and theres a lot of real truth |TruthInFiction to be found in it. But instead of diving into its lessons|ThreeLessonsOfEnglishClass, we spent all our time micro-analyzing the text for “symbols” and “themes” and “poetic devices” and so on, all in a way that suggested an utter lack of understanding of the //point// of any of them on the part of anyone designing the curriculum, or, consequently, the students it was being taught to. There are all kinds of reasons for the decline of long-form fiction, but I cant imagine this kind of pedagogy has done it any favors. I know Im interested in literature //in spite of// my English classes, not because of them.\u003C\u003Cfnote \My 12th-grade English class was the solitary bright spot. While we still had a lot of stupid assignments, we did on occasion actually take the time to talk about what we had read without micro-analyzing it. A particularly well-selected unit in the late fall also made me realize I like reading poetry, something which might have taken years longer for me to figure out otherwise.\>>\n\nThis is not to mention the more idea-driven problems with the BrokenAcademicWritingProcess.\n\nThis tiddler began life as a footnote on WritingDifficulty, attempting to explain why writing high-school papers was hard. The answer, it appears, is that they required extensive attention to all the most difficult and annoying parts of writing and none to the parts that are motivating and fun.\n\n\n!! References\n\n\u003C\u003C\u003C\nor like one normal-school teacher wanted me to write an essay. i didnt understand that by essay people meant a very specific type of informational structure, and so i instead poured my absolute heart out into it. I was creative and intense and thought really hard\n\nand i handed her this labor of love, just bursting with life, and she gave me a D or whatever and was like no you need to say your claim at the beginning, then have three paragraphas, and then repeat the claim at the end or whatever tf it was.\n\nand just this sense of like... the thing *i* am is completely irrelevant here. im supposed to learn how to just do exactly the thing the adult wants me to do, and nothing more. I had to disconnect my actual passion and creativity in order to perform correctly.\n\u003C\u003C\u003C\n---MsAella, https://x.com/Aella_Girl/status/1796283095135740226},{title:HippoHardware,created:20250623162342352,creator:soren,modified:20250623162343168,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Hiroshima1946,author:Hersey,bibliography:LifetimeReading,caption:Hiroshima,created:20210703170128000,genre:History,medium:book,modified:20210705214034913,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1946},{title:HisDarkMaterials,author:Philip Pullman,bibliography:SharedConsciousness,caption:His Dark Materials,created:20200127015641950,creator:soren,description:Fantasy trilogy by MrPhilipPullman, comprising GoldenCompass, SubtleKnife, and AmberSpyglass.,modified:20221102031152783,modifier:soren,refexplorer-starttab:Sources,tags:Publication Public,telepathy-description:People have animal-formed companions called Daemons who are mentally linked to their humans.,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:1995–2000,text:Fantasy trilogy by MrPhilipPullman, comprising GoldenCompass, SubtleKnife, and AmberSpyglass. One of the great works of modern fantasy, though it unfortunately was never brought to a satisfactory conclusion in my opinion.\n\nFollowed by another trilogy, BookOfDust, and supplemental stories and collections in the same universe filling in gaps LyrasOxford, OnceUponATimeInTheNorth, Collectors, Serpentine, and ImaginationChamber.\n\nAs most really good literature is, suitable for all ages|ChildrensHdm.\n\nI love it but havent read it since my last year of high school because working through it is such an emotional load on me that it requires some serious commitment!\n\nAdaptations: Pullman did a stage play back in 2004, there was a movie of GoldenCompass in 2007 which was something of a flop, there is a graphic novel|HdmGraphicNovel of GoldenCompass, and there is an ongoing BBC series on HBO|HdmBbcSeries that is quite good.},{title:HisDarkMaterialsPowerDiagrams,created:20210812123646056,es:likely,modified:20210813023331939,refexplorer-starttab:Sources,tags:Idea Public,type:text/vnd.tiddlywiki,text:A fun visualization I made back in high school of MrAsriel and MsMarisaCoulter in HisDarkMaterials. Chronology runs down the first page and up the second (because I ran out of space on the page), events and other people are rendered somewhere in the middle, and the blue and red lines and descriptions show how each of the two affect events.\n\n\nimg hdm-power-01.jpg\nimg hdm-power-02.jpg},{title:HistoryOfHypertext1995,author:Jakob Nielsen,caption:The History of Hypertext,created:20210330025154368,medium:article,modified:20210330025140228,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.nngroup.com/articles/hypertext-history/,year:1995,text:Article by MrJakobNielsen about hypertext. Chapter 3 of a longer book, //Multimedia and Hypertext: The Internet and Beyond//.},{title:HoarePrinciple,created:20200406140239450,creator:soren,description:You can either write code with no bugs, or write code so complex it has no //visible// bugs,es:likely,modified:20210623120333098,modifier:soren,tags:Code LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:Law of cynicism explaining much software development:\n\n> There are two ways to write code: write code so simple there are obviously no bugs in it, or write code so complex there are no obvious bugs in it.\n\nMsMaxineChambers is a fan of this in UnicornProjectPartThree, to explain a 2000-line monstrosity of tangled copy-pasted business rules which nobody has dared to touch since.},{title:Hobbit,created:20210813151554497,modified:20210813151620000,rating:distinguished,tags:Source Public,type:text/vnd.tiddlywiki,text:Fantasy novel by MrJrrTolkien preceding LordOfTheRings.},{title:HofstadtersLaw,created:20210303031329083,description:It always takes longer than you think, even when you take into account Hofstadters Law,es:mythological,modified:20210709231031287,tags:LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}}.\n\nNamed after MrDouglasHofstadter, of GodelEscherBach1979 fame (and described in that book). Originally formulated with regard to the always-a-few-years-away nature of many aspects of ArtificialIntelligence, but applicable almost anywhere.},{title:HoganBrothers,created:20231120222808783,creator:soren,modified:20231120222810361,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:HohRainforest,created:20250626182655472,creator:soren,modified:20250626182656505,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:HolaArepa,created:20231106161439428,creator:soren,gis-lat:44.939360133256535,gis-long:-93.27749874468813,gis-zoom:15,modified:20231106161509070,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:HoldYourPositionBack,created:20241201042229697,creator:soren,es:possible,modified:20241201043928857,modifier:soren,tags:Idea InterpersonalRelations Learning Public,type:text/vnd.tiddlywiki,text:Related to ShutUpAndPlays discussion of having too much up-front information altering the kinds of things youll notice or think about.\n\nA conversational tactic Ive found myself developing recently: asking someone to explain what they think about some topic before sharing anything about my relationship to it. For example, I recently questioned someone about why he wanted to homeschool his children and let him talk for a couple of minutes before mentioning my own experiences with homeschool.\n\nPut like this, the tactic might seem unfair and one-sided. But once youve explained your own position, both of you have permanently lost the ability to hear their position without passing it through your position! If the other person starts out knowing you have similar opinions, or very different opinions, or know similar amounts about the topic, or very different amounts, the kinds of things they say will change. You learn much more about them when you let them talk for a while first.\n\nOf course, the person might end up, say, giving you a sanitized version to avoid offending you when that wasnt necessary – but that fact in itself is interesting, and you can still dive into the more controversial weeds later, but you can never go back to getting the sanitized version!\n\n(I havent actually intentionally tried this yet, but I think if the other person came out and asked me what I thought / was / knew when I was trying to do this, I would just say that I wanted to hear their thoughts before I said anything else. I dont think this would be too weird in most cases, and Im sure I have done it before without intentionally planning it that way.)},{title:HoleWhereSuccessLeaksOut,created:20220118205956407,creator:soren,description:As a beginner to something, focus on making fewer stupid mistakes, not on doing excellently.,es:likely,modified:20240611203402986,modifier:soren,tags:Idea Learning Productivity Public,type:text/vnd.tiddlywiki,text:The hole where all the success leaks out is the fundamental thing youre worst at as an amateur at something. You can do most everything excellently, but if you muff a few things tremendously, your minor successes wont matter. You need to fix the WorstBottleneck first; anything else is a waste of time.\n\nProfessionals figure out how to avoid all the mistakes (as MrDerekSivers says in HowToLive2021, an expert is somebody whos made all the mistakes in a field), and from there they improve by carefully focusing on minute details. Amateurs are still making the mistakes, so they instead improve by learning to stop making the stupid mistakes.\n\nWhile it might seem depressing that as an amateur, youre only as good as your worst mistake, its actually great news: you stand to improve a huge amount just by plugging the holes -- which is often easy -- whereas professionals have to spend a great deal of effort to achieve tiny improvements.\n\nExplained by MrDavidCain in WhereSuccessLeaks2018.\n\nA commenter on that post suggested a good way to put this insight into action: brainstorm a big list of things that a careless novice would mess up. Then ask yourself how many of those things you still do. Chances are you do some of them -- there are your holes.\n\nCompare SingingLessWrong and RefuteTheNegatives for more start-with-the-negative thinking.\n\n!! References\n\n\u003C$m2.x number\1\>\n\nTheFarnamStreet calls this|https://fs.blog/avoiding-stupidity/ “avoiding stupidity”:\n\n> If you’re an amateur your focus should be on avoiding stupidity, not seeking brilliance.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\nMrNassimNicholasTaleb explains that you live a long life by “avoiding death”:\n\n> How do you live long? By avoiding death. Yet people do not realize that success consists mainly in avoiding losses, not in trying to derive profits.\n> ---\u003C\u003Crt 10488>>\n\n\u003C/$m2.x>},{title:HollywoodFranchiseExploitation,created:20200323004319272,es:likely,modified:20210509010256504,tags:Design Creativity SorenConcept Business Public Idea,type:text/vnd.tiddlywiki,text:Derogatory term for most of the recent movies coming out: Hollywood seems to have ceased to produce original ideas. Instead they prey on people wanting to see more of stories and universes they know and simply produce more of the same stuff. Usually it is mind-numbingly bad, but people watch it anyway because it has a big name associated with it, and they even kind of like it due to familiarity. Probably a form of AddictiveDesign.},{title:HollywoodWalkOfFame,created:20240402012340797,creator:soren,modified:20240509144033598,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Holocaust,created:20210809202023764,modified:20210809202026848,tags:Event Public,type:text/vnd.tiddlywiki},{title:HoloLens,created:20200529211817168,modified:20200529211836329,tags:Product Futurism Public Idea,type:text/vnd.tiddlywiki,text:Microsofts VR headset.},{title:HomomorphicEncryption,created:20200529194252888,creator:soren,es:confident,modified:20211215143321537,modifier:soren,tags:Math Software Public Idea,type:text/vnd.tiddlywiki,text:A wicked-cool computational privacy technique in which computation is carried out directly on encrypted data, using an algorithm for which decrypting the output with the original key yields the correct result.\n\n\u003C\u003Cremembercz \20200529215201787\\n\t\{Homomorphic encryption} allows {computations to be carried out} without decrypting the data.\>>},{title:HoodRiver,created:20250618153330101,creator:soren,modified:20250618153330918,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:hopefulness-and-power.pdf,type:application/pdf,created:20210812030431997,creator:soren,modified:20211024235418287,modifier:soren,tags:Attachment Public,_canonical_uri:./extimage/hopefulness-and-power.pdf},{title:HouseOfCards,caption:House of Cards,created:20200511022113498,medium:TV,modified:20200808143812276,tags:Source Public,type:text/vnd.tiddlywiki,text:Political TV show, notable for being one of the first TheNetflix original shows.},{title:HouseOfTheSpirits,caption:The House of the Spirits,created:20200407021814710,creator:soren,format:hardcover,isbn:9781400043187,medium:book,modified:20210607011259826,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HouseOfTheSpirits,year:1982,text:Excellent MultigenerationalNovel by MsIsabelAllende using MagicalRealism and a brand of not-entirely-corny spiritualism to tell a revolutionary South American story. Read in IB English in high school. I think I even have some indexes lying around somewhere, though the page numbers are almost certainly wrong with the Everyman edition I now own instead of the school copy.\n\nMy favorite character Clara shares a great deal of wisdom which I often repeat to myself even many years later. See for example CircleOfLife, or, “If its a sin, Id rather not know about it.”},{title:HousingNeeds,created:20240115032258789,creator:soren,description:How did I end up in the home I live in – in some ways an unexpected choice?,es:personal,modified:20240304210105391,modifier:soren,tags:Idea Cities LifeDirection Public,type:text/vnd.tiddlywiki,text:Many people around me seem to have engaged in shockingly little reflection about what kind of space they want to live in. And various social, cultural, and institutional forces tend to guide people away from choices that might be better for them.\n\nThis is a big, //big// deal! Where you live has an enormous impact on your quality of life. Housing is also by far most peoples biggest expense, so financial choices here, at extremes, can mean the difference between retiring early and being dramatically house-poor your entire life. And most people only have to make housing decisions very occasionally -- maybe even only once or twice, especially if you make good decisions! -- so its worth spending quite a lot of time figuring out what factors you care the most about and then optimizing your choice.\n\nI recently bought a home after spending a lot of time thinking about what I wanted, and while its still too early to know for sure, I think I did a pretty good job. Lets take a look at some decisions I made that seem unconventional to a lot of people around me, and why I made them.\n\n\n!! Price\n\nThe biggest stand-out when you look at my purchase decision is price. I dont need to publish my exact salary or home price on the internet, but Ill say this. A common rule of thumb suggests that you should avoid buying a home that costs more than three times your annual gross income, or spend more than a third of your gross income on mortgage payments. Ive borrowed less than one time my annual income (after putting 20% down), and my mortgage, taxes, and HOA payments will account for about 15% of my gross income -- and while I do quite well for a guy in his late twenties (I work in tech in the early 2020s, after all), Im not wildly rich either. So, of course, everyone from the bank to my agent to the folks on the co-op board who approved my purchase asked me why I was spending so little compared to what I could afford.\n\nIts weird to me that buying a cheaper home than you could theoretically afford is considered an odd thing to do. It would be one thing if, given a comfortable income, I had bought an apartment that was 200 square feet, infested with cockroaches, and falling apart. But mine is perfectly sized for me, beautiful, newly renovated, and in a well-maintained, financially healthy co-op building in a fantastic location. Sure, I could find a way to spend more money if I wanted to, but thatd be like asking why I dont choose to buy things at the most expensive store, just because I can afford it -- to which the only answer is, why would I go out of my way to spend more money to get something thats no better for me? Even well-off people like getting good deals!\u003C\u003Cfnote \Indeed, people who are financially comfortable are often accused of being unnecessarily careful about how they spend their money. The truth is that being careful about how you spend your money is how you create the margin between your income and expenses needed to be financially comfortable, and if you stop being careful your expenses will promptly rise to meet your income and youll no longer be comfortable. (This doesnt mean being cheap or obsessing over $5 purchases. But it does mean being deliberate.)\>>\n\nEconomizing on housing is also the easiest way to get rich slowly, and it creates invaluable slack|Slack in your life. Because Im spending so little of my income on housing, I could switch careers and take a job that pays half as much, if I liked, and still make my mortgage payments. I was also able to take a 15-year mortgage with no pain at all, so if I stay here, by my early forties Ill be living for $500 a month two miles from downtown in a major city. (For that matter, given todays interest rates I might wind up deciding to pay it off early.)\n\nOf course, finding such cheap housing is not always practical, especially on a lower total income. Housing, writ large, costs an unreasonable amount across the United States right now, for various complicated reasons, and you may not be lucky enough to have a family situation that lends itself to bargains or to find the right opportunity. But I think my experience demonstrates that, if youre patient and you optimize out things you dont actually care about while paying attention to the things you do care about, you can probably do a lot better for yourself than youd expect. I was prepared to pay twice what I did for the right home, but the place I landed on turned out to be better for me than those places that cost twice as much!\n\n\n!! Size\n\nObviously, home size has a major impact on price, so a related question to why I bought a cheap home is why I bought a //small// home -- an efficient 650-square-foot one-bedroom apartment. This being America, we tend to think bigger is better. But the amount of utility created by home space is actually a sharp U-curve. If you have too little room for the number of people who live in a space and the things theyre doing, indeed it is uncomfortable and limiting. I didnt enjoy living 23 hours a day in a 450-square-foot apartment during the peak of the COVID-19 pandemic, where I had to put a desk in front of my couch in order to have a place to keep my work computer. But while the ill effects of having too much space are less obvious, too much space is also seriously bad. First of all, of course, youre directly paying for something you dont need. But having extra space is also second-order more expensive, both financially and in other ways:\n\n* You have to buy stuff to put in the extra space.\u003C\u003Cfnote \Well, you wouldnt //have// to, but hardly anybody buys a large house and then leaves rooms empty. Theyre just begging to be used for something, even if its something you dont need or even want.\>> \n* With a larger space, since you need much more furniture, youll probably have to buy cheaper stuff, instead of really nice stuff you like that will last a lifetime. (Then youll have to replace it when it inevitably breaks, creating a third-order cost!). The same thing goes for art, appliances, and so on.\n* When you have extra space, there is no check on your simply filling up the space with junk. Then it will be more work to sort out what you want and get rid of the stuff you dont need. People often think its better not to have whether you can fit something in your home impinge on your decisions about whether you want it, but in truth this is a generative constraint|GenerativeRestriction: having to figure out whether you can fit something in your home tends to be a great way of preventing yourself from buying things that you wont care about in the long term!\u003C\u003Cfnote \And when you do really want something that needs extra space, there are lots of ways to handle that. I own a small boat which I dont have space for at my apartment; I just rent a storage unit for it for $80 a month, which is a hell of a lot cheaper than a larger home.\>>\n* You have to pay extra to heat and maintain the extra space.\n* You have to clean the extra space.\n* Things get lost in the extra space.\n* You have to walk longer distances to get around. (You laugh, but at my last apartment the kitchen and my office were so far apart that I sometimes couldnt hear or smell if something I was cooking was in need of attention. Surely, ceteris paribus, its more convenient to have the areas you spend most time in closer together.)\n\nOf course, different people will put the point of the U-curve in different places. But one certainly should not simply find homes one likes and then pick the largest of those one can afford, one should figure out what size one wants, within a fairly tight range, and add that to ones criteria. For me, somewhere around 700 square feet is perfect. (I was worried my new apartment would be tight, since it is a touch smaller than my last place. Having moved in now, its //full//, but in a good way -- it feels efficient, well-curated, and cozy, not cramped. If you move into a new space and already have everything you want, and the space doesnt feel mostly full, you got more space than you needed.)\n\n\n!! Age\n\nAge should have much less impact on your home-buying decision than many people think. Home ageism is just as annoying as people ageism! Either the home is well-designed, good for your needs, and in good maintenance, or it is not; how long the house happens to have been on earth is irrelevant, unless perhaps living in a place with an interesting history makes a big difference to you.\n\nInterestingly, various forces have arguably caused homes to get worse on average in the recent past, so that intentionally giving extra weight to older homes may actually be a good idea, as long as you dont just invert the bias and assume new homes are automatically bad. Because people often have a bias against old homes, they also tend to be cheaper than their quality would suggest, which means you can often save money by not discriminating!\n\n\n!! Apartment\n\nIm in a multi-family building. That means I have to put up with other people nearby. But actually, thats a positive for me! Im pretty introverted and I want most of my own living space (Id be fine living with a partner eventually, but I dont care for roommates). But I like balancing being alone inside my living space by being as //not// alone as possible right outside the bounds of my living space. Sure, once in a while, noise from adjacent apartments can be annoying, and you probably want to avoid doing primal screams in your apartment or moving furniture around at 1 AM, but most of the time I find it more comforting than annoying to hear other people around. As long as you have decent neighbors and a building that isnt designed so badly you can hear conversations in the next apartment,\u003C\u003Cfnote \Some people evidently have never lived in an apartment that has walls more soundproof than a cardboard box, and assume that all apartments are like this. They are not. If its just a piece of sheetrock in between two units, yeah, its gonna be bad, but if you actually care you can easily add acoustic treatments during construction. In older buildings, plaster and lath walls are quite a bit more soundproof by themselves. And good high-rises often have full concrete barriers between units -- both for acoustic isolation and for fireproofing -- which do a fantastic job.\>> to me this just really isnt as big a deal as people make it out to be. Also, this is a co-op and we work together to maintain the building, so we all know each other, which is a huge plus. If someone is doing something obnoxious, you can go talk to them about it without being scared.\n\nSometimes I do like to be as alone as possible -- but thats an occasional thing, and for that I go on vacation, or on a day trip to a state park. I wouldnt mind owning a little one-room cabin somewhere up in the north woods so I could conveniently do this more often, but in any event for me its better to have a separate place for being alone that makes it as extreme as possible. If I tried to combine the two modes by living somewhere that was //kind of// isolated //all the time// (e.g., the outer suburbs), I would end up getting an ugly average with almost none of the benefits of either density and co-location or solitude.\n\n\n!! Location\n\nWalking distance from just about everything you need and within a 15-minute bus or bike ride of downtown, but relatively cheap, and insanely quiet for its proximity to everything (most people who visit me remark on this). Not crime-free -- there are occasional break-ins or stolen packages, as in most dense urban areas -- but ordinary people walk around the neighborhood at night by themselves without fear. Despite it being quiet, there are eyes on the street|EyesOnTheStreet and other people walking around even at odd times.\n\nWhile there are other places in the city that are somewhat better at certain things (e.g., access to parks), this neighborhood is good at almost everything in my opinion; I would have had to place very high importance on some factor in particular to have seen somewhere else as a significantly better choice.\n\n\n!! Random rant about laundry\n\nPeople often complain about communal laundry rooms in apartment buildings like mine, as compared to in-unit laundry. I guess its a little bit of extra work to go down there, and maybe there are a few extra germs? Personally, I think this is missing the big picture. For the minor inconvenience of walking a short distance to the laundry room:\n\n* There are probably multiple washers and dryers, so if it isnt busy, you can do several loads at once. This saves a //huge// amount of time when you have a lot of laundry.\n* If a machine breaks, you dont have to worry about getting it fixed, and you can continue to do laundry. You just report that its broken and use a different machine.\n* In good laundry rooms, you have space to hang up any laundry you dont want to put in the dryer, instead of having dripping wet clothes in your apartment.\n* The machines are often commercial beasts that break less often, run faster, and last longer.\n\nIts not like I think the sign is reversed and Id say no to an apartment because it had in-unit laundry, but I think it provides very little total benefit once you consider the disadvantages.\n\n(This said, //coin-op// laundry is obnoxious and should go jump in a lake; I am absolutely delighted that my life no longer involves going to the bank every couple of months to buy rolls of quarters and carefully counting out a dozen of them for every load I do. Either use cards which can be conveniently refilled online, or just roll the cost of laundry into the rent or HOA fees and be done with it. Yeah, laundry being free at the point of use probably means people run more loads, making laundry a little more expensive for everyone, but Id happily pay twice as much for my laundry to avoid having to feed quarters into the machine all the time.)\n\n\n!! Things Ive chosen to give up\n\nOf course, I gave up a few things I actually valued. Dont forget that any complicated choice has UnresolvableProblems! Different people might place different priorities on these; I decided I didnt care that much.\n\n* I dont have an off-street parking space, and certainly not a covered one. Its not difficult to find a spot – usually its within a twenty-second walk of the front door – but it does mean some extra work in the winter clearing the snow off my car and occasionally moving it around so the city can plow the streets. That said, if you have a building parking lot, you still end up having to move your car for the plows, and if you have a private garage you still have to clear the snow out of the driveway, so Im not convinced the difference in winter effort is as large as people think. Underground heated parking like you get in the fancy condo towers downtown would be a major upgrade though.\u003C\u003Cfnote \Actually, Id love to not own a car at all. Since I work from home, live in an extremely walkable neighborhood, and ride my bike a good chunk of the rest of the time during the warmer months, I usually drive about twice a week, so my car is parked probably 99.5% of the time, which feels pretty expensive and wasteful! But its just too convenient compared to other options for getting rid of it to be worth it.\>>\n* The building has a nice little back garden, plus a rooftop deck, but I dont have any outdoor space of my own; I would prefer to have some. There might be some opportunities for a community garden, but that only partially compensates anyway.\n* My apartment faces primarily northeast. The living room has light on three sides due to the buildings clever “castle” shape where the living rooms of the corner apartments jut out, so it doesnt feel dim, but in the winter the light is rather diffuse. I definitely prefer places that face south.\n},{title:HowBasecampCommunicates,caption:How Basecamp Communicates,created:20200401181631431,creator:soren,medium:article,modified:20210809171348798,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://basecamp.com/guides/how-we-communicate,text:Fantastic little article from TheBasecamp composed mostly of little aphorisms. The right kind of communication tips. See backlinked.\n\n{{!!url}}},{title:HowGoogleWorks,caption:How Google Works,created:20200708005642320,medium:book,modified:20210606223406406,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Book by TheGoogle CEO MrEricSchmidt and MrJonathanRosenberg about the Google and SiliconValley philosophy of work and innovation. Talks a lot about attracting creative people and letting them do their own thing (cf. HspWtcS).\n\nReading the book in 2019, Google has unfortunately gone back on many of the great things that they mentioned. Im inclined to consider it part of Googles general decline into mediocrity which had been happening over the few years prior, but its certainly debatable whether the principles just werent suited to running a company on the scale of modern Google anymore. (Maybe that means Google just shouldnt //be// that scale, though!)},{title:HowMuchToLearnWithAnki,created:20200704224835646,modified:20200802220658255,tags:Memory TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:How much material can you learn in a given amount of time? The actual value depends on many things, like the difficulty of your flashcards and how consistently you review. But you can come up with a decent estimate; you only need two pieces of information:\n\n* How many minutes a day can you devote to reviewing? \n** Remember, for best results, you want to review //every// day, for the rest of your life. Not the first two weeks when youre really excited about spaced repetition. Not four days a week. Not the days when you feel like it. You might want to take the number you think is good right now and cut it in half!\n** Of course, theres nothing illegal about getting rid of some of your cards or not using spaced repetition anymore, if you later decide you have other priorities. But the more consistent and continuous you are, the better results you get, and the more realistic you are with yourself now, the more consistent and continuous youll be. With SRS, consistency|PowerOfKonsistency beats volume in terms of results.\n* How many seconds does it take you to review each card, on average?\n** If you have good cards, this is usually 5-10 seconds. If you have some review history behind you, you can find this number in your statistics. (If its more than 10 seconds, you need to think about improving your cards.)\n\nNow we can calculate how many cards we can review in a day. This can be calculated with the following formula:\n\n$$ R \\frac{ 57 t_{day} }{ t_{card} } $$\n\n...where t_day is in minutes and t_card is in seconds. As an example, suppose we want to study no more than 10 minutes per day and get through a card every 5 seconds. We get R114, so thats about the number of reviews we can maintain in 10 minutes a day.\n\n(I give 57 as the constant factor in the formula instead of 60, the actual number of seconds per minute. I add a 5% penalty to your t_day because its unlikely you will actually be studying cards for 100% of the time youve set aside to study: on a typical day, youll probably stop once to look something up related to one of your cards, or ponder what deck to study next, or go make a cup of tea. If you prefer to assume youll be totally productive, or you dont have a calculator handy, use 60 instead.)\n\nA good rule of thumb is that your reviews will, over time, mount to roughly 10 times your new cards per day. So our figure of 114 means we can afford to add 11-12 new cards per day.\n\nNow, just because you can only add 11 new cards per day doesnt mean you literally have to click the \add\ button and type in exactly 11 cards each day. You can add them in whenever you think of them or have time to batch-add some content; Anki will take care of queueing them up and only introducing the number you ask for every day to keep your workload steady. To change the number of cards introduced per day, visit the deck options, click the New Cards tab, and adjust the number of \New cards/day\.\n\nAnki doesnt introduce new cards if you miss a day of studying -- e.g., if you miss 5 days of study and you are set to add 10 new cards per day, on the day you come back you will only get 10 new cards, not 60. If youre trying to get through a large number of cards in a certain amount of time and expect to miss a few days here and there, its important to take this into account.\n\nDont forget to consider the time it takes to //create// cards. This is usually fairly small compared to your review time, but its reasonable to imagine it might take fifteen seconds to a minute to create each card, depending on what youre studying and how much experience you have. Youll also have to spend some time editing and maintaining the cards later.\n\nA little widget to run the numbers:\n\n```\n\u003Cform>\n\t\u003Ctable>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>Minutes to review per day:\u003C/td>\n\t\t\t\u003Ctd>\u003Cinput id\minutesPerDay\ />\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>Seconds per card:\u003C/td>\n\t\t\t\u003Ctd>\u003Cinput id\secondsPerCard\/>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>Productive time:\u003C/td>\n\t\t\t\u003Ctd>\u003Cinput id\productivityPenalty\ value\95\/> %\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/table>\n\t\u003Cbutton type\button\ onClick\calculateResult()\>Go!\u003C/button>\n\t\u003Cdiv id\calculationResult\>\u003C/div>\n\u003C/form>\n\n\u003Cscript>\nfunction calculateResult() {\n\t\tvar result ((60\n\t\t\t\t\t\t\t\t\t * (+document.getElementById(\productivityPenalty\).value / 100)\n\t\t\t\t\t\t\t\t\t * +document.getElementById(\minutesPerDay\).value\n\t\t\t\t\t\t\t\t\t) / +document.getElementById(\secondsPerCard\).value);\n\t\tdocument.getElementById(\calculationResult\).innerText result;\n}\n\u003C/script>\n```},{title:HowToBecomeAFederalCriminal,author:Mike Chase,caption:How to Become a Federal Criminal: An Illustrated Handbook for the Aspiring Offender,completed:202203191200,created:20221106215830445,creator:soren,medium:book,modified:20221107035928295,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2019,text:A silly entertainment book illustrating the problems with voluminous laws|LargeGovernmentVsVoluminousLaws by example. For instance, some things that are federal crimes:\n\n* Wearing a postal service uniform while not being a postal worker (except if you have a film crew with you).\n* Shoot a Canada goose from a sailboat, sometimes -- its only illegal if the sails are unfurled, or the goose doesnt currently live in the US but is just passing through.\n* Carry more than $25 of pennies or nickels out of the country (this constitutes exporting them, which is illegal I guess because people can melt them down abroad).\n\nComes with silly illustrations and step-by-step guides.},{title:HowToChangeYourMind2018,author:Michael Pollan,caption:How to Change Your Mind: What the New Science of Psychedelics Teaches Us About Consciousness, Dying, Addiction, Depression, and Transcendence,completed:202101211200,created:20210118004719989,creator:soren,medium:book,modified:20220504195623824,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2018,text:Book by MrMichaelPollan on PsychedelicDrugs (mostly psilocybin and LSD, but occasionally mentioning others), including a detailed rundown of their history, their role in the 60s counterculture and how they got banned, some personal experiences, and how they might become accepted and useful again in the future.\n\nI see what some of the Amazon reviewers were talking about when they complained about how long and dry the book was. It wasnt exactly entertaining or even all that engaging. That said, I didnt find it boring at all; it was full of fascinating information and in a slightly ironic but certainly not surprising twist, made me think a lot about what I really know about the world and what makes me tick, just like the drugs themselves do (though Im sure not nearly as powerfully!).\n\nI thought this was a fairly balanced perspective. I almost put my scientific notes on dangers/cautions and benefits in here but in the end thought I would put them in PsychedelicDrug instead, figuring theyll apply beyond the context of this book.\n\nAs I read, I found myself reflecting on what similar kinds of experiences Ive had. See MyPsychedelicAdjacentExperiences.},{title:HowToLieWithStatistics,caption:How to Lie with Statistics,created:20200407180835975,creator:soren,medium:book,modified:20210606225942421,modifier:soren,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:1954,text:Classic, short book by MrDarrellHuff about how easily data can be manipulated to yield whatever conclusion you want it to, and also how to be on the lookout for the worst abuses. The examples have not aged well due to inflation, etc. (I remember one example using a $2,000/year salary!), but the reasoning is sound and the age is almost charming.\n\nhttps://www.amazon.com/How-Lie-Statistics-Darrell-Huff/dp/0393310728/},{title:HowToLive2021,author:Derek Sivers,caption:How to Live: 27 conflicting answers and one weird conclusion,completed:202109141200,created:20210915220824893,creator:soren,format:ebook,medium:book,modified:20230613210547486,modifier:soren,owned:yes,rating:distinguished,readstatus:reread,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2021,text:Book by MrDerekSivers. Presents 27 possible broad values for living, many of which contradict each other, and argues for each of them in a poetic style:\n\n* Be independent.\n* Commit.\n* Fill your senses.\n* Do nothing.\n* Think super-long-term.\n* Intertwine with the world.\n* Make memories.\n* Master something.\n* Let randomness rule.\n* Pursue pain.\n* Do whatever you want now.\n* Be a famous pioneer.\n* Chase the future.\n* Value only what has endured|TimeFilter.\n* Learn.\n* Follow the great book|GreatBook.\n* Laugh at life.\n* Prepare for the worst|Stoicism.\n* Live for others.\n* Get rich.\n* Reinvent yourself regularly.\n* Love.\n* Create.\n* Dont die.\n* Make a million mistakes.\n* Make change.\n* Balance everything|ModerationAndBalance.\n\nPoint taken: there is no correct way to live, set of values to have, or philosophy to follow. However, there may be a right way //for you//; at the very least, some ways will be better than others //for you//, and its worth thinking seriously about which those are.\n\nThis book took me a bit longer to read than I expected given how little text was in it, but still only 2--3 hours; it makes you think (which is the point, of course). Recommended for anyone thinking seriously about finding a CoherentPhilosophyOfLife -- or, for that matter, anyone who has never thought about that at all, because its a good thing to do and this book will get you thinking.\n\n\n!! Future directions\n\nSuch an unusual resource, like a religious text, seems to call out for possible ways to use or study it, several of which Ive thought of but havent tried:\n\n* Work out which values you disagree with most. Then go through and take their arguments as seriously as you can. See what you learn. (Compare RelativeAdvice.)\n* Go through each of the values one at a time, spending perhaps a week or two on each. For each one, find one new useful idea and try to integrate it into your life in some way.},{title:HowToNotDieAlone2021,author:Logan Ury,caption:How to Not Die Alone: The Surprising Science That Will Help You Find Love,completed:20220215,created:20220609020036371,creator:soren,medium:book,modified:20240427233705700,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2021,text:This was a key part of my path to finding a new identity as described in ReprogrammingMyIdentity. As an overview of what dating looks like in the 2020s, this is a fantastic book and Id recommend it to pretty much anyone whos hoping to find a partner right now, especially if they havent ever sat down to think about the best way to do that.},{title:HowToReadABook1972,caption:How to Read a Book,created:20200819134750073,format:paperback,isbn:9780671212094,medium:book,modified:20210606224212809,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:1972,text:Book by MrMortimerAdler and MrCharlesVanDoren on reading skills -- from skimming to deep reading and engaging with an author, or many authors. 1972 was the second edition, some 30 years after the first, but its still wholly relevant in 2020. Reading doesnt change much!\n\n\u003C\u003Crememberq \20201218155135908\\n\t\Who is the second author of //How to Read a Book//?\\n\t\Charles van Doren\>>},{title:HowToRememberAnythingForeverish,bibliography:Anki,caption:How to Remember Anything Forever-ish,created:20210124031042751,creator:soren,description:Infographic/comic on spaced repetition.,medium:website,modified:20240829192317931,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://ncase.me/remember/,year:2018,text:{{!!description}}},{title:HowToSlowDown2019,caption:How to Slow Down,created:20200411032511937,creator:soren,medium:article,modified:20200817030006010,modifier:soren,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/psychology/how-to-slow-down/,year:2019,text:TheControlAltBackspace post about the DeteriorationOfReality in the form of faster and faster news cycles, as well as the loss of attention through mechanisms such as RampantNotifications. Shares some ideas about how you can, well, slow down, despite the crazy world around you.},{title:HowToTakeSmartNotes,author:Sönke Ahrens,bibliography:Zettelkasten,caption:How to Take Smart Notes,created:20200225030642983,creator:soren,description:Book by MrSönkeAhrens on the ZettelKasten method created by MrNiklasLuhmann and associated insights.,format:ebook,medium:book,modified:20211027020052264,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Book by MrSönkeAhrens on the ZettelKasten method created by MrNiklasLuhmann and associated insights. I was introduced to the book by the eponymous article by MrTiagoForte, SmartNotes10Principles20200204.\n\nTo summarize in a sentence, the entire academic writing process is completely broken|BrokenAcademicWritingProcess and here is a method that nobody teaches or even thinks about but goes a long way towards solving those problems.\n\nI own the book on Kindle. It also has a website: https://takesmartnotes.com/.},{title:HowToThinkForYourself2020,author:Paul Graham,caption:How to Think for Yourself,completed:202106291200,created:20210701014617712,medium:article,modified:20210701025325628,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:http://paulgraham.com/think.html,year:2020,text:Essay by MrPaulGraham. Explains the concept of IndependentMindedness, q.v.\n\nI found this concept extremely useful and suspect it released me from a category of HypoCognition.},{title:HowToWinFriendsAndInfluencePeople1936,author:Carnegie,bibliography:LifetimeReading,caption:How to Win Friends and Influence People,created:20210703170128000,genre:Misc,medium:book,modified:20210705214034920,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1936},{title:HowToWriteGoodPrompts202012,author:Andy Matuschak,bibliography:Anki,caption:How to write good prompts: using spaced repetition to create understanding,created:20240829191403094,creator:soren,description:What kinds of patterns, structures, and habits of thought create the best cards? How do you deconstruct articles into cards? What things are most valuable to know?,medium:article,modified:20240829193413688,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://andymatuschak.org/prompts/,year:2020,text:Introductory MnemonicMedium-based article by MrAndyMatuschak about the details of creating prompts for topics where this is non-trivial -- those where you want to understand a discipline, rather than merely memorizing a list of facts. (Even if you primarily want to memorize facts, understanding them may be so helpful in doing so|NonexistenceOfPurelyFactualKnowledge that you would benefit from these tools anyway.)\n\nThe classic Twenty Rules|TwentyRules from SuperMemo contains more immediately actionable advice and prescriptive ideas than this article, but this article helps you deeply understand what youre aiming at and //why// rules like that are helpful. They complement each other nicely. If I could only recommend one article about writing prompts, Im not sure which Id recommend, but if I could only recommend two, it would be these two.\n\n\n\u003C$details summary\Old thoughts\>\n\nMnemonicMedium article by MrAndyMatuschak on creating good spaced-repetition prompts, intended partially to introduce writers to Orbit. I was invited to read a preview of it and it kicked off a whole slew of interesting thoughts.\n\n!! Notes\n\nThings I havent handled yet:\n\n```\nPrompt technique\n----------------\n\n> The association is an extra tidbit you might engage with, or not.\n\nI find if I maybe do it, I tend to forget the mnemonic...\n\nI think I dont do a good enough job of *hinting*, except occasionally on clozes...I do good initial context but dont get detailed enough.\n\nPattern: capturing branches in procedures (cf. §DoubleCaptureSlip?)\n\nPattern: Metaphor-type prompt contextualizer (not a way I naturally think, but seems worth developing)\n\nOpen lists vs. closed lists\n (Many closed lists arent really closed, like the list of ingredients in a recipe)\n Attempting to enumerate open lists is pointless\n\nPattern (closed list): tagged items -> tag; broad patterns in the tag; examples\n\n\nSR salience prompts as attempting to capitalize on the Baader-Meinhof phenomenon\n(Fun fact: I got meta-BMd here)\nHave I already recorded that this is an element of §ActivityPlasticity? It appears not\n I try to do these with coding, but am trying to figure out the best way to figure it out\n Much because I dont know what reference to hit without that info...\n I think my English vocab is in some ways doing the same thing...or at least its a substantial secondary effect.\n Ability to use this in TR or whatnot\n Importance of getting it in the correct context\n\n> If the objective isn’t memory, the schedule shouldn’t be tuned by “forgotten” and “remembered” buttons—so what should replace them?\n\nWhat about an \interest\-based scale?\nCould there be ways to tag these and identify which ones to prioritize over time?\nNow youve got me on a whole line of thought...\n\n\nTrivia\n-------------\n\nIdea of mnemonics serving as a *type of* elaborative encoding.\n\nListing prompts in terms of *seconds per year* -- an interesting contrast with lifetime cost\n\nNotes on how much of a text is scaffolding and how little of it is important detail you need to remember\n```\n\n\u003C/$details>},{title:HowToWriteHistory,author:Lucian,bibliography:LifetimeReading,caption:How to Write History,created:20210703170128000,genre:History/Philosophy,medium:book,modified:20210705214034928,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:HowWeThink1933,author:Dewey,bibliography:LifetimeReading,caption:How We Think,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034936,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1933},{title:HspWtcS,created:20200708005836233,creator:soren,description:Sometimes you shouldnt overcomplicate your methodology: just //Hire Smart People//, //Write the Code//, and //Ship it//.,es:likely,modified:20240227192530783,modifier:soren,tags:Code Humor PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:An anecdote mentioned in \u003C\u003Crt 5776>>, from someone who worked at Google presenting in a StOlaf CS course I took: when Google first started Android, they used the HSP → WTC → S development methodology, which stands for:\n\n# Hire Smart People.\n# Write the Code.\n# Ship it. (see ShippingIsAFeature)\n\nGiven that you have a good idea and the resources to execute it, I think its arguable that if you dont hire smart people, nothing else matters, and if you //do// hire smart people, nothing else matters.\u003C\u003Cfnote \With the proviso that you have to let the Hired Smart People figure out how to Write the Code. Bad management can ruin anything.\>> Having smart people is //certainly// the WorstBottleneck. Same thing goes for trusting your employees.\n\nEven though the AgilePhilosophy is somewhat more measured than this, this is still very much IndividualsAndInteractions over processes and tools and WorkingSoftware over comprehensive documentation.\n\nAlso a lesson that its too easy to overcomplicate things. Sometimes all you need is to JustGetStarted and Write The Code.},{title:HumanKnowledgeItsScopeAndLimits1948,author:Russell,bibliography:LifetimeReading,caption:Human Knowledge: Its Scope and Limits,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214034944,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1948},{title:HumanStain2000,author:Philip Roth,bibliography:LifetimeReading,caption:The Human Stain,completed:20210907,created:20210703170128000,creator:soren,genre:Literature,medium:book,modified:20210909025921094,modifier:soren,priority:1,rating:good,readstatus:read,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,year:2000,text:I havent read any MrPhilipRoth for a long time and had forgotten how good he is. This novel in particular is a masterpiece, and very timely in several ways (culturally and personally).\n\n!! Main characters\n\n(These are more or less the people whose perspective the narrator adopts at one point or another.)\n\n\u003C\u003Cstretch-links \tagPAOtagCharacteruniverseHumanStain2000sort\ caption text>>\n\n\n!! Big thoughts\n\n* \u003C\u003Cstretch HumanStainAndCancelCulture>>\n* \u003C\u003Cstretch NobodyUnderstandsRelationships>>\n* \u003C\u003Cstretch IdentityIntegrationDivide>>\n},{title:HumanStainAndCancelCulture,created:20210909024314037,creator:soren,description://The Human Stain// elucidates all the problems with scandals, accusations, and judging people, in all their wonderful complexity.,es:likely,modified:20220121144249475,modifier:soren,tags:Identity InterpersonalRelations Sociology Public Idea,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:HumanStain2000 is, in some ways, about CancelCulture -- thats how Ive lately seen it billed owing to recent events -- but its about so much more than that, to the degree that it illuminates all the problems of that culture and the philosophy behind it.\n\nIts certainly about the hastiness or stupidity of making a shameful, voyeuristic stink about something thats really not important. The book is set during the Monica Lewinski|MsMonicaLewinsky scandal, which is the epitome of this kind of thing. Of course, Clinton|MrBillClinton //did// have an affair with her and lied about it under oath, whereas Coleman|MrColemanSilk didnt do anything at all; but thats almost beside the point. In what universe is the president getting a couple of blowjobs or some old guy saying something that could possibly be construed as racist worth a year of speculation and hearings? Is there really nothing better to think about?\n\nIts about how people are credulously ready to believe nasty things about people. Of course, sometimes the accusations are right. But sometimes theyre not, and once something false is said and believed, even a complete debunking doesnt remove those thoughts from peoples heads. Or as the narrator puts it:\n\n> Simply to make the accusation is to prove it. To hear the allegation is to believe it. No motive for the perpetrator is necessary, no logic or rationale is required. Only a label is required. The label is the motive. The label is the evidence. The label is the logic. Why did Coleman Silk do this? Because he is|FundamentalAttributionError an //x//, because he is a //y//, because he is both. First a racist and now a misogynist. (p. 290)\n\nIts about how people are so much more than their worst moments:\n\n> Colemans lost his wife, hes lost his job, publicly humiliated as a racist professor, and whats a racist professor? Its not that youve just become one. The story is youve been discovered, so its been your whole life. Its not just that you did one thing wrong once. If youre a racist, then youve always been a racist. Suddenly its your entire life youve been a racist. (p. 228)\n\nOn top of that, people, generally, are not malicious villains|HanlonsRazor. MrColemanSilk is a racist and a misogynist...but actually, he was first willfully misinterpreted and then outright framed. MsFauniaFarley is an ignorant person whos being abused...but actually shes choosing to adopt the ignorant persona and sleep with Coleman as a way of empowering herself (at least, thats my interpretation). MrLesFarley is a cold-hearted abuser and murderer...but he was seriously messed up by Vietnam. MsDelphineRoux has it out for Coleman...but mostly because shes trying to advance her career, has a typical amount of disdain for older people for someone her age, and makes questionable decisions in a state of abject embarrassment and fear.\n\nMost of all, its about how everyone is //way// more complicated than they look -- and how easy it is to forget this when we look at others. See above point, as well as the extreme irony in Colemans position|MrColemanSilk. Coleman and Delphine look like theyre doing great, but theyve had to make sacrifices that put them in a pretty bad place inside. Faunia looks like shes doing terribly, but shes actually managing surprisingly well given what she has to deal with.},{title:Humor,created:20201222205958120,modified:20210628023101811,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Tag listing ideas that have a funny touch to them.},{title:HurricaneRidge,created:20250626182422874,creator:soren,modified:20250626182424091,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:HyperCard,created:20221130000540064,creator:soren,modified:20221130000543102,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki},{title:Hyperstition,created:20231127050538853,creator:soren,description:A statement that becomes true if enough people believe it is.,es:confident,modified:20231127211057495,modifier:soren,tags:Idea Definition Psychology Sociology Public,type:text/vnd.tiddlywiki,text:A hyperstition is a self-supporting statement or belief which becomes true if enough people believe it is true.\n\nFor instance, “Theres a run on the bank” is a hyperstition. Whether there is or is not currently a run on the bank, if many people come to believe theres a run on the bank, there will be one soon!\n\nTerm due to N.L.|PrivatePerson.},{title:HypertextStyleGuide,created:20240212165339387,creator:soren,description:For people used to writing linearly, without links, what points of style must be learned to get started writing good linky texts?,es:confident,microlink:hypertext,modified:20240611045428722,modifier:soren,tags:Idea Public Writing,type:text/vnd.tiddlywiki,text:(Completeness: Useful but incomplete. Should have more examples, and the bit about semantic boundaries needs a //lot// more to be easily understandable by a novice. It might also be helpful to have block-level references to each point and write the headings as sentences, for the benefit of people referencing this from elsewhere.)\n\n!! Link text\n\nPerhaps no element of Hypertext fits better in the bucket of //style// than what text your links should have. Link text has the classic combination of having many legible rules, but also many points that rely on intuition to go from good to great, and its difficult to enumerate all of the rules.\n\n!!! Basic donts\n\nThere are several antipatterns that unfortunately also feel like the most obvious way to create link text, so people new to writing hypertext often fall into them automatically. So lets start by pointing them out and getting them out of our system.\n\nDont use links with the text //here//, //click here//, or similar. A classic type of bad link looks like this:\n\n> To learn about rabbits, __click here__.\n\nWhats wrong with “click here” links? First, they are AdministrativeDebris -- the text serves absolutely no purpose except to navigate you somewhere else, and it wastes space and looks ugly. They are also semantically inaccurate -- link text should describe either what will happen if you click the link or what the page youll be navigating to is, and “click here” is, of course, neither. Finally, use of “click here” links almost inevitably results in having multiple links with the same text, which is a basic antipattern of its own; see below.\n\n(I think “click here” also feels subtly patronizing, as if the author thinks the reader doesnt know how to use a link and needs to be instructed, but this is a minor point.)\n\nThe most basic way to improve this link, if you need the specific action to be explicit, is to turn it into an imperative verb phrase: “__Learn more about rabbits__.” Often, though, you can and should avoid writing a separate sentence, page title, or instruction altogether. Instead, when youre talking about rabbits, simply link the word //rabbits// to the appropriate page: “Alice owns six __rabbits__.” Or if theres a specific fact about rabbits thats relevant to the current node, link your mention of that fact to an appropriate section of the page. Well talk more about when you should be explicit about the page title or action and when you should be more implicit later.\n\nDont use the same text for multiple links on a page. This is particularly bad for users who use screen readers or other assistive technology, which likely present a separate list of all the links on the page for selection, making it very difficult to figure out which one is the one youre trying to navigate to. But it can be unnecessarily confusing for everyone; with several links with the same text, if you look away from the page for a moment and are trying to use a link to orient yourself when you come back, your eye can easily land on the wrong spot. And, as noted earlier, link text is supposed to //describe the thing the link leads to//. If you have multiple links with the same text, youre saying that both of the links lead to the same thing (which they probably dont, and which is its own antipattern if they do).\n\nDont use URLs as link text (usually). URLs tend to be long and ugly, and they dont break across lines well, resulting in ugly gaps in paragraph flow. Many URLs also do a poor job of describing their contents in a human-readable fashion (though some are much better than others).\n\nThere are several exceptions:\n\n* If youre giving a list of resources that need no further description, in a more informal document, and the URL is pretty and already does a good job of describing what it is, you might choose to say something like “Check out some of these products that attempt to solve this problem:”, then put their URLs in a bulleted list. That said, often its more helpful to link the products name to the URL and briefly describe each one, so use this only if theres really no other information you want to include besides the URL.\n* If the web location actually feels germane to the context. For instance, I might write, “To sign up for RemNote, visit https://remnote.com.” I could instead write “__Sign up for RemNote here__”, or “to sign up for RemNote, __visit its signup page__”, but sometimes just listing the URL is the most natural choice. You should still avoid this if the URL is a mile long, though!\n\n\n!!! Selecting good link text\n\nThose were a few important things not to do. Now what //should// you do?\n\nWhenever possible, its best to write sentences that stand on their own and would make sense even if there was no link at all, and then pick some text from that sentence to turn into a link. Specifically which text to link for a clean, effective hypertext can be difficult to pin down, though. Here are a few guidelines.\n\nIf the page title fits, use it! The simplest way for a link to clearly describe the information accessible by clicking on it is for it to be the title of that page. You shouldnt warp your sentences to fit the page title into them, but its fairly common for brief or sentence-based page titles to fit directly into a sentence quite well. These are easy and effective links.\n\nYou might also want to talk about related pages by listing their titles. For instance, if youre on a page about Alice and you have a short section about her rabbits, and you also have a page specifically about the details of Alices rabbits, you might end the section with, ”See __Alices Rabbits__ for more details.”\n\nThe more important a link is, the more explicit you should be about it. Page titles are to be preferred to short asides in the middle of sentences for important links, and single-sentence paragraphs bearing the link are a great idea for extremely important ones. In the above example, we could choose instead to put the link in, say, the first sentence of the section: ”Alice has __six rabbits__. They...” This would make sense if the fact that Alice has rabbits is an aside. But if its important enough to our readers that we have an entire other page about her rabbits, its probably better style to use the more explicit “see here for more details” approach -- this way, its easy to see that theres a full article available when youre skimming the page.\n\nLink text should be as long as needed and as short as possible. Long links are distracting, since they highlight the text in a different color and present a large target which changes appearance when you hover over it. However, a long link that clearly describes its target is much better than a short link that leaves the reader guessing until they click it (or even just hover over it and look at the URL).\n\n(Cf. AsMuchAsNeededAndAsLittleAsPossible.)\n\nMaintain parallelism. If you have several links in close proximity that have similar functions, try to select roughly the same amount of text, and the same clauses or functions of text, for each. Heres a hypertext sentence I wrote recently, in which each link goes to a page discussing a particular personal quality:\n\n> Most people who have great chemistry with me share many of these qualities: they __move quickly__ (mentally and sometimes physically), enjoy being open and vulnerable (its OK if you take a while to open up!), have __wide-ranging interests__, are __deeply curious about the world__, are __humble__ about what they know and are __unusually willing to consider__ unpopular ideas and contradictory perspectives, love telling stories, are fascinated by language (the medium of ideas), and have a certain streak of __pedantry or smart-assery__.\n\nSuppose I had instead chosen my links like this:\n\n> Most people who have great chemistry with me share many of these qualities: they __move quickly__ (mentally and sometimes physically), enjoy being open and vulnerable (its OK if you take a while to open up!), have __wide-ranging interests__, are deeply __curious__ about the world, are __humble about what they know__ and are unusually willing to __consider unpopular ideas__ and contradictory perspectives, love telling stories, are fascinated by language (the medium of ideas), and have a certain __streak of pedantry or smart-assery__.\n\nThe first sentence flows smoothly. The second hobbles. The difference is that in the first sentence, each link covers the words that describe a characteristic and starts immediately after the verb that opens each clause (with the exception of the first and last; the first because the verb //move// is part of the concept, and the last because the link would be really long otherwise, and the word //of// has the same connector-word flavor as the verbs //are// and //have//, so it doesnt feel jarring). In the second sentence, there is no pattern in how large each link is or which words in the clause are selected, and it moves randomly back and forth between links that start with different parts of speech.\n\nDont get me wrong, this is subtle! You probably dont need explicit rules to do this well, though; just reading your paragraph with an eye on the flow will likely point out places where youve done this poorly, much like reading a paragraph out loud can identify word choices that fit awkwardly together.\n\nDont cross semantic boundaries. Dont split up a word, phrase, clause, or other component of a sentence into any chunk that doesnt clearly represent a concept. This is probably going to be a bit hard to transmit in language, but suppose I have the sentence “Bob likes to read romance novels,” and I want to link to a page on Bobs personal reading practice. I could start by considering linking __read__, since thats nice and short and is a full concept. However, Id probably conclude that this could be too readily interpreted as being about the concept of reading in general, rather than Bobs reading in particular, so I would next expand to __likes to read__, and Id probably settle there. I would not, in any situation, link “Bob likes __to read__ romance novels,” because this is a very awkward division: ”to read” is not a concept and could not be the title of a page. Similarly, I wouldnt link ”__Bob likes to read__ romance novels”; TODO?\n\nYou can rapid-fire link to multiple examples. This pattern was popularized by early 2000s blogs. It violates some rules that would otherwise be operative, but is highly idiomatic nowadays. Use this when the links are a supporting citation or an aside for the curious, not a key part of the argument or information being explained, and you dont want to use a lot of text but you do want to emphasise that theres plenty of confirming evidence or a deep rabbit hole out there if you want to explore.\n\nTo use the pattern, pick a phrase that describes //all// of the example links, then link a single word of it to each example. You should try to allow for some unlinked text, such as a connecting word or a comma, in between each link – this makes it easier to see how many links there are and where one ends and the next begins (particularly important with page styles where links are not underlined). If you have too many examples to fit within the phrase otherwise, though, you may break this rule.\n\nHere are a couple of examples. In this one, each link is to a page describing an instance in which this happened:\n\n> I can handle a “no” and stay friends (and I __have__ the __receipts__ to __prove__ it).\n\nHere, each link is to an article describing research. In this case, theres not enough space to allow for unlinked connecting words, but its on a page where link underlines stop only when the link ends, so thats not such a big deal:\n\n> It’s not a stretch: long work hours are __awful__ __for__ __health__.\n\n\n!! Number of links\n\nFor the most part, its better to have too many links than too few. A link that exists unnecessarily is mildly distracting, but a link that ought to exist and doesnt means your readers likely wont know some relevant information is available at all.\n\nThat said, you should aim for neither too many nor too few, even while erring on the side of too many.\n\nHere are two types of links you usually shouldnt create:\n\nLinks to the same place twice on one page. That is, if on a page “Mugs” you talk about coffee three times, you should only link to the page “Coffee” once. Specifically, in nearly all cases, you should link to “Coffee” the first time you talk about it. Someone who needs to find out more about coffee is most likely to follow the link the first time they encounter it, and if they get further on in the article before realizing they need the link, theyll usually scroll back up the page looking for it (whether because they remember that there was a link earlier, or because they know that good hypertext authors tend to put their links at the first reference). Your readers are highly unlikely to scroll //down// the page looking for a link that explains something they just read.\n\nThere may be exceptions to this rule. If you write a sentence and think that a link would be highly relevant (i.e., a large number of readers will need or want to follow it), you should probably add that link, even if there happens to be another one earlier on the page that most people wouldnt have noticed or followed. What we want to avoid is a situation where every time something is mentioned, you link to any page about it, turning large swaths of the page blue and making it hard to find the links that are actually relevant.\n\nLinks to the //current// page. This is a pet peeve|PetPeeve of mine, and is actually fairly common despite its silliness, particularly in systems where links can be created semi-automatically when you type the name of the page. The experience of encountering such a link is bad all around. You might think it goes somewhere interesting and stop reading to inspect where it goes, only to find that it goes nowhere. If you actually click it, your browser might, irritatingly, refresh the page or scroll you to the top of the section or page, or nothing at all might happen, leading you to wonder if the page is broken. Just dont; explicitly suppress the link if you have to.\n\nNote that by “page,” I mean any specific referenceable section of a hypertext document. This rule is not intended to discourage links that point to a specific section heading that youve chosen to place on the same physical HTML page, using the `#id` syntax (e.g., “see __Section Above__ for more information”); those are great!\n\nHere are some ways you //should// use links that might not be obvious:\n\nBacklinks. If youre in control of both sides of a link, its usually -- but not always -- a good idea to include a link going back the other way. If your tool supports so-called bidirectional linking|BidirectionalLinks, where pages that link to this page are automatically displayed somewhere on the page, the threshold for creating an explicit link going back the other way is higher, and you should create explicit backlinks only when you think theyll be highly relevant to some readers. If there are no backlinks available, then it makes sense to include links that are only somewhat relevant, since theyll otherwise be more or less impossible to discover.\n\nIndex or summary pages. One way to avoid having excessive numbers of barely-related links on each page and ease discovery is to make good use of “index” pages (see Index in this ZettelKasten), which use lots of links to give an overview of all the pages related to a particular topic. You can do this in a list form or a narrative form, and use a hierarchy, a flat structure, or some other kind of interlinked tag- or topic-based structure. The best way to do it will depend on both your subject matter and what features your tooling supports.\n\nYou should still link to highly relevant items on each page, but you can then link “up” to the index page to effectively serve peoples needs for finding loosely related content; indeed, this will usually be more useful than a bunch of weakly related links since the information will be organized better for skimming.\n\nIndexes arent by any means needed in all cases; theyre a way to manage complexity when you or your readers start to have a hard time keeping the entirety of a topic in their head.\n\n\n!! Styling\n\nThe more people can see about where links go at a glance, the better. Some readers dont know they can see the URL by hovering over the link, and in any event its better not to have to be moving your cursor constantly just to understand where outbound links go.\n\nThe most basic distinction is between internal and external links. If you have any reasonable way to implement this in your tool, you should. The typical convention nowadays is to make internal links a different color and font, while underlining external links. External links can also use some sort of icon, or (even better) the favicon of the target website.\n\nExcept in highly unusual circumstances, links should be either blue (or at least blueish) or underlined, or both, to be sure that people recognize they are links. (In particular, avoid using red text to call out links; while its obvious to most people, for many color-blind people it looks virtually identical to the running text.) On the flip side, dont use blue text or underlined text for anything that //isnt// a link, or people will invariably click on it out of habit and wonder why it isnt working.\n\nDo not use red, non-underlined text, or low-contrast text of any kind, for links; its extremely difficult for many color-blind people to spot.\n\n\n!! Miscellaneous\n\nIn web browser-based systems, dont force links to open in a new tab/window, except in unusual circumstances. In HTML, this is done with the `target\_blank\` attribute on a link, and many graphical hypertext designers have some kind of checkbox that adds this attribute.\n\nSome people think theyre doing their readers a favor by enabling this option because the reader surely doesnt want to lose their place on the current page. (Theres a lot of self-important hubris here: “Surely the user wouldnt want to leave //my// page!”) But enabling this option //takes away the readers choice//. If the option isnt enabled, the reader can either click the link normally if they want to change pages, or right-click and choose “open in new tab” (or use a variety of other shortcuts) if they dont. With the option enabled, theres no way to choose //not// to open in a new tab.\n\nAlso, readers dont actually lose their place when something opens in a new tab; when you hit the “back” button, you end up right at your old spot on the previous page. If this doesnt happen, your site is broken and you should fix that instead.\n\nThis option does make sense in some very specific circumstances, like when youre in a web application and the link opens the documentation. You can be almost 100% confident that the user doesnt want to quit the app entirely and then read the documentation, but rather wants to look at the documentation while using the app, so you actually are doing them a favor by being sure they dont accidentally navigate away from the app. But if youre just writing hypertext and not doing app or form development, this will almost never happen.},{title:HypoCognition,created:20200421175158607,es:likely,modified:20210509005853375,tags:Psychology Language Public Idea,type:text/vnd.tiddlywiki,text:The phenomenon in which you have an experience but lack the language or other cognitive representation to describe it. Often quite uncomfortable, and has some interesting effects:\n\n* We may be more or less bothered by it (it seemingly depends).\n* We may be unable to respond appropriately, not understanding what were feeling or even that were feeling anything at all (cf. DemiPerson).\n* In the case of religious or transcendent experiences, the fact of hypocognition may actually be a positive part of the experiences power.\n\nIt may be just that nobody has come up with the concept yet or that you havent heard about it, but hypocognition can also be spread deliberately to structure peoples thinking; see article HypocognitiveCensorship.\n\nCf. PowerOfNames.},{title:HypocognitiveCensorship,caption:Hypocognition is a censorship tool that mutes what we can feel,created:20200421175219676,medium:article,modified:20200808143850275,tags:Source Public,type:text/vnd.tiddlywiki,url:https://aeon.co/ideas/hypocognition-is-a-censorship-tool-that-mutes-what-we-can-feel,text:Aeon article explaining the concept of HypoCognition and how it can be used for censorship. It oddly does not mention NineteenEightyFour, which enters this discussion with its language NewSpeak.},{title:HypotheticalCommitmentTypes,created:20240305043446544,creator:soren,description:What kind of intermediate options could we as a society offer people between uncommitted relationships and conventional marriages?,es:possible,modified:20251011164747692,modifier:soren,tags:Idea Friendship Romance Sociology WhatIf InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:I said offhandedly to C.S.|PrivatePerson a while ago that I wished there were other relationship arrangements for people who didnt want to commit to something as drastically firm and all-encompassing as traditional marriage. I mostly meant legally, but what about socially as well?\n\nIn AnalogLove2023, MrJesseCrossen notes:\n\n> People are being forced to flip-flop between two poles: awkward hookups where it’s forbidden to even hint at love and commitment, and becoming partners for better or worse until death do us part. It feels like a light switch for love, when what we really need is mood lighting.\n\nOn top of that, I think marriage gets devalued when people who dont take it very seriously feel pushed into it because there are no other accepted ways to create commitment. So even marriage boosters (provided they arent so socially conservative to be set on there being a one-size-fits-all solution) might appreciate having alternatives.\n\nHere are a few ideas (click the zoom button for an extended treatment):\n\n\u003C\u003Cstretch-template-links \prefixHypotheticalCommitmentTypes/sortstackorder\ smallTemplate:$:/tzk/Templates/Topical/CaptionDescriptionStretch largeTemplate:$:/tzk/Templates/General/IdentityTemplate>>\n\n\u003C$list filter\{$:/config/sib/CurrentEditionPublicity}matchpublic\>\n(Have other ideas? Hit the “start a conversation” button and let me know, Id love to explore more of these.)\n\u003C/$list>},{title:HypotheticalCommitmentTypes/SelfishMarriage,caption:Selfish marriage,created:20240305141421711,creator:soren,description:You get married more or less as usual, but say in advance that theres a limit on how far youre willing to go for the other person without getting divorced.,es:unlikely,modified:20241020171644305,modifier:soren,stackorder:30,tags:Public Idea,type:text/vnd.tiddlywiki,text:Marriages in many Western countries have shifted to “self-expressive|SelfExpressiveMarriage” ones, where marriage isnt primarily about having children or connecting families, but about personal fulfillment. One key aspect of conventional marriage is an expectation that you take the other persons needs extremely seriously, staying with them even if they get desperately ill, putting up with them to the best of your ability -- maybe taking their needs more seriously than your own in some cases. Not everyones ready for that, but a lot of people commit to it despite not meaning it.\n\nTo take the self-expressive marriage further, what about an option where you explicitly disclaim that responsibility? You say yeah, I love you and want to stay with you, Im serious about doing that, but theres a limit to how much Im willing to cover for you, and in particular if times get real tough and Im not getting much out of the relationship anymore, I reserve the right to move on and I expect you not to crucify me for it. Its up to you to maintain a support network that will cover you in the really bad situations.\n\nMaybe this is an absurd idea. How many people would be willing to come out and say that, or suggest these terms to their partner? And its fairly difficult to imagine developing social norms where this wasnt looked down upon. On the other hand, I think even if barely anybody actually //took// the option, having it could serve to clarify peoples decisions. If youre marrying someone who you dont want to give more than this level of commitment to, is that the right option? Maybe it would be better to do a shorter term than a permanent commitment at this point until you know more about how you feel about them.\n\nThen again, I bet this really is exactly what some people want. If its what you think you would do in a crisis, its better for everyone to know thats whats going to happen in advance, and to agree that its tit-for-tat; if you wouldnt be willing to do it for your partner, they dont have to feel obligated to do it for you.\n\nIt would seem socially preferable for having children together to be prohibited in this type of marriage as well, because of the decreased stability. I dont think that would be nearly as feasible as it seems for the term marriage, though, because it seems like this would just lead people to make the “full commitment” carelessly instead, like they already do, and lose most of the benefits of having this option. Maybe you should need to have an advance plan for what to do if theres a divorce instead? Come to think of it, it might make sense for a prenup to be a normal part of this relationship type in general; when youre trying to make it easier for yourself to leave if things get too hard, its helpful to know what happens next.},{title:HypotheticalCommitmentTypes/SocialLegalQpr,caption:Socially and legally sanctioned QPR,created:20240305141358837,creator:soren,description:Have a relationship that is very intimate and substantially committed, like a low-key marriage, but need not be romantic.,es:likely,modified:20251010024403552,modifier:soren,stackorder:20,tags:Idea Public,type:text/vnd.tiddlywiki,text:Looking a little further outside of the box, do most forms of commitment have to be romantic at all? (See also FriendshipUnserious.) What if you want to commit to spending most of your life with a friend, or create a little blended family with someone elses kids without being in a romantic relationship with them?\n\nQuite a few people might find value in this – most obviously aromantic people, but also people who like to have romantic relationships but find them too overwhelming to be really close to their partner all the time or dont want one to be super long-term and committed but want more stability in their everyday life, people who maybe certain flavors of SoloPoly people, or just people who for whatever reason dont see a romantic relationship happening for them in the near future (or ever) but see value in being closer to someone on an everyday basis.\n\nCertainly, aside from a few legal benefits (and many of those challenges are surmountable), you can achieve most anything you might want here by careful agreement. But why go to the trouble of inventing it all yourself? Often it would be very convenient to be able to just slap an agreed-upon label on the relationship and call it a day. Also, when there isnt a schema for something like this, you might not even think about doing it in the first place (see HypoCognition), and youll look weird enough to others if you engage in it yourself that many people will be turned off of the idea even if it would be great for them.\n\nBecause theres such a multiplicity of potential use cases here, Id imagine this relationship type being more flexible than other suggested relationship types. The only required aspect would be a high level of emotional intimacy and practical proximity. Maybe there could be a checklist of different ways you could tie yourselves together, and you just go down the list and mark off the ones you want: combined financial situation, ability to make health decisions for each other, and so on.\n\nIn keeping with the recognition of the value of relationship types that have partially determined endings, e.g., the term marriage, it would be helpful to have some provision for agreeing in advance on conditions under which the relationship would end or change. For instance, maybe you and your best friend want to live together and consider yourself a household and thus want to label yourselves as together, but if one of you gets really serious with a romantic commitment, you want to split up to enable that relationship -- after some kind of waiting period to take care of the practical difficulties, and with some thoughts about what your relationship with your friend will look like after that.\n\n\n!! References\n\nI was reading somewhere (I think in OtherSignificantOthers2024) that Colorado (I think?) has introduced some form of civil partnership where you can check off what combination of around 20 different legal relationships you want to have with another person (and they dont have to be symmetrical). Everyone should do this!},{title:HypotheticalCommitmentTypes/TermMarriage,caption:Term marriage,created:20240305141236826,creator:soren,description:You commit to spending some number of years with a romantic partner, then the relationship ends by default unless renewed.,es:possible,modified:20251010023645341,modifier:soren,stackorder:10,tags:Idea Public,type:text/vnd.tiddlywiki,text:In a term marriage, you commit to spending some length of time with a romantic partner, regardless of what happens, then the relationship ends by default unless renewed or converted to a permanent Marriage by mutual agreement. Id imagine there being some length options for different situations – maybe 1 year, 3 years, and 7 years.\n\nMost other details follow naturally from this idea. Any conventional aspects of marriage that assume the relationship is intended to be a permanent tie are passed over -- for instance, that your partner will inherit your property if you die during the term is not assumed. But otherwise youre mostly legally and socially treated like youre permanently married.\n\nPartners in a term marriage should commit to not (intentionally) having children together during the term, because that complicates things a great deal.\n\nA “snooze button” would be useful if the end of the term proves to come at an inconvenient time -- for instance, if one or both partners are out of work and need the financial slack, or someone gets really sick and will need several months to recover, everyone could agree to continue for another three months before a decision. Id like to see social norms that look dimly on people who dont agree to snooze the clock at a moment when their partner really needs their help.\n\nIt would likely also make sense to have some kind of status equivalent to “engaged” which would continue all the agreements of your preceding term marriage until you completed arrangements for a permanent marriage.\n\nI think it would most likely be normal to commit to a new term, a longer term, or a permanent marriage in the middle of a term marriage rather than right at its end, if you felt like that was the right thing to do, but I could see arguments for not allowing that and sticking to the full agreed period before coming to a decision as well.\n\nI would imagine some kind of social validation ceremony being typical for anything longer than a year, but a smaller one than a traditional wedding – maybe you invite your local friends to a barbeque and people send you nice emails and cards. Doing it in public is useful; for the most effective commitment, you want to make it difficult to go back on your decision without a very good reason.\n\n!! Advantages\n\nOne of the main reasons most people like being married is that they can stop worrying about whether they should be looking for something better, or whether their partner is about to break up with them. They can spend all that energy on other relationships or pursuits instead. This gets you that security while avoiding the need for a long-term commitment if youre not really sure about the other person, or about your own life trajectory or long-term relationship goals, yet – youre going to stop looking for a few years, and then re-evaluate.\n\nBecause the default is separating and this will always be on your mind when making major decisions, you generally would not enter into entanglements that are annoying or painful to undo without having an advance plan for them (e.g., getting a pet together or being on a lease together).\n\nThere is a natural point to do some serious reflection on whether the relationship should be continued (see abyss-gazing|YearlyAbyssGazing). This seems especially useful with shorter terms -- to convert a very conventional relationship path to this model, suppose that after knowing someone for a year and concluding you really like each other, you do a 1-year term marriage with the intention of considering a permanent marriage if it works out. Many people try to do this by moving in together as a “test” of how the relationship feels, but this poses a major risk of creating an unreflective “slide” into marriage because you get accidentally entangled and it seems easier to get married than separate.\u003C\u003Cfnote \Consequently, statistically such “testing” very surprisingly makes you more likely to end up in an unhappy marriage than if you dont live with your partner at all until you get married! (See CounterintuitiveCorrelation.) The simple solution is to not do this; perhaps the better solution is to find a way to arrange the “test” that avoids that pitfall.\>> If you plan from the start that the relationship might end at a predetermined pause for mutual consideration, this seems vastly less likely to happen. Instead youve said, lets have a nice year together during which well get to know each other much better while thinking about how this relationship feels, and our default will be thatll be it. Then, if when we get there we actually //still// feel really good about it and dont want it to end, we can do some extra work and make another commitment.\n\nThe fact that theres a natural endpoint if you cant make the relationship work might make people who are prone to running at the first sign of problems more likely to stick it out for a little while, which would be beneficial to them.\n\nThe breakup of a term marriage could be more likely to be amicable, since you were always prepared for the possibility that it wouldnt continue.\u003C\u003Cfnote \Im someone who likes staying friends with people Ive been in romantic relationships with, so this would be a big plus for me. It just sucks when someone is such a big part of your life for a while and then you cant even casually stay caught up with them -- enough that for me its worth trying to work through some difficult feelings to get there if possible.\>> Similarly, if you decided a little bit before the end of the term that you ultimately didnt want to stay together, it seems plausible that, at least in some cases, you could have a gentle offramp where you start writing the end of your story|LifeStory in advance and enjoy the last of your time together. \n\n!! Disadvantages\n\nAs with other types of non-traditional arrangements like FWB relationships, I think the kind of detachment about the future necessary to take the term idea seriously is actually quite difficult for most people to create while also genuinely loving and feeling committed to their partners. We are creatures who dont like change, and we prefer to believe that well always keep all our relationships even when evidence suggests we wont.\n\nThe type of “commitment” created when the default is to end the relationship at some future date is likely to be somewhat different, and perhaps less solid, than either a supposedly permanent commitment or just no particular commitment. It also seems plausible that term relationships would self-select for people who werent good at commitment and who wouldnt take the term seriously.\n\nThe fact that people are encouraged to stick out challenging times in a relationship can be a negative if the relationship is doomed -- even if there are no unhealthy dynamics, it might be better for the people in the relationship to get a head start on better ones rather than wait a few months or years until the expiration.\u003C\u003Cfnote \Of course, bailing on a term marriage with a divorce would always be an option, but the idea is that it would be a much less common one since you have an eventual out anyway.\>> Also, on the flip side, if you happen to have a huge fight two weeks before the expiration, your relationship could end up breaking up for no good reason (though its possible in this case you might realize you made a huge mistake sooner or later and get back together).\n\nThe time just ahead of the clock running out would likely be awkward, stressful, and emotionally difficult in most cases. Conversations about what happens next would have to start some time before the end, and there might often be a kind of “lame duck period” if its reasonably clear the relationship will end. On the other hand, youd be able to plan in advance for this liminal period and give yourself some space to seriously decide!\n\nThe breakup when one person wants to renew and the other does not could be quite painful. On the other hand, Im not sure this would be much worse than in a not-formally-committed relationship, when holding the amount of time youve been in that relationship constant.\n\nThe option to do term marriages would likely decrease peoples willingness to create permanent commitments. I would hope that a disproportionate number of people who make the switch would be those who are less suited to those permanent commitments, either temporarily or permanently -- that was the idea in introducing this option -- but from both an individual and a social perspective, it seems generally undesirable to switch people who would have had happy permanent marriages into term marriages, and theres no denying that some people would switch.\n\nPeople who decide term marriages are right for them might be criticized for having commitment issues, focusing too much on their short-term satisfaction, etc. Similarly, it might be a tricky thing to talk about doing with your partner, at least until a time it became more common.\n\n\n!! References\n\nHandfasting, discussed in AnalogLove2023},{title:I35BridgeCollapse,created:20211130022514220,creator:soren,es:likely,modified:20231022205920995,modifier:soren,tags:Idea Risk Psychology Public,type:text/vnd.tiddlywiki,text:When I was 12 years old, the I-35W bridge in Minneapolis|Minneapolis at St. Anthony Falls collapsed into the Mississippi River|https://en.wikipedia.org/wiki/I-35W_Mississippi_River_bridge#Collapse during the evening rush hour. I didnt live in Minnesota at the time, but I had plenty of family there and, well, it was national news and everyone was talking about it.\n\nI was recalling recently that I didnt get it at the time -- while I didnt make any public comments, privately I dismissed it and didnt get why everyone was so upset. I mean, sure, it was sad that 13 people died and a few more were injured, but that just didnt seem like much of a catastrophe. That many people die and are injured in car accidents in an average day or two, no bridge collapses required!\n\nThinking again about it now, this points to something really important about our reaction to disasters, or what we perceive as disasters: Its not about the damage. Its about the way the event shakes your confidence and your understanding of the world. And this bridge collapse was //fantastic// at doing that; aside from the lack of human malice, it was almost as dramatic as 9/11. A massive piece of public infrastructure crashes to the ground suddenly as everyone nearby watches, tangled wreckage is available for full display on the evening news, and the investigation concludes that we knew there was danger all along but the warnings got buried in the pile of other potential problems. More than that, bridges just arent supposed to fail -- this is the twenty-first century in America and were past those kinds of failures of engineering...right? But clearly not, and now for a couple of months everyone thinks about this every time they drive across a bridge.\n\nI do think an adult mindset that children and teenagers dont have yet is required to fully understand this. Its not just about the psychological analysis I did above; its also the impact of the accumulated wisdom that the world is a complicated and dangerous place where things go wrong //all the time//. When someone else is responsible for you, you can mostly ignore those things, because you have someone trying to block them from reaching you and deciding for you how to respond when they cant entirely block them. When you become entirely responsible for yourself, or even worse, responsible for other people as well, you almost inevitably start thinking about all these failure modes. That doesnt have to be scary or debilitating necessarily, but its always there in the background on some level.\u003C\u003Cfnote \Presumably there are some people who never think about any of this. But at the risk of being cheeky, Id say they havent finished growing up yet. You cant do ContingencyPlanning without developing this mindset, and you need that to be ready to respond well to the things that go wrong.\>> And that puts you in a prime position to be stunned by infrastructure failures. As if you wanted another thing to be worried about!\n\n(For what its worth, unless youre a structural engineer or you go over rope bridges maintained by villagers, I dont think you should worry about bridge failures. Theres nothing you can do about them anyway|StoicFork.)\n\n},{title:IbEnglishitis,created:20210610115212869,description:Sufferers of //IB English-itis// are compelled to write about things they read even when there is no obvious, immediate benefit to doing so.,es:mythological,modified:20210611041402114,tags:Anecdote Information Reading Writing Public Humor Idea,type:text/vnd.tiddlywiki,text:D.K.|PrivatePerson dubbed the feeling that you need to write about everything you read, even when such writing has not been assigned, “IB English-itis.” I think I already had IB English-itis at the time he came up with this! (And maybe he did as well, to some extent, since he made it up.)\n\nI seem to have caught this especially bad with Lolita1955 recently…but its just a manifestation of WritingIsThinking and a need to //think// further about it, I suppose. I am still trying to figure out exactly what kind of notes do the best job|FictionNoteKeeping.\n\nIts worth noting that cases of IBEI do not usually present with a desire to write academic papers or stuffy literary criticism (at least for me). These forms, like actual homework, are dislikable because they are highly formal, structured, and have high quality requirements. IBEI sufferers instead want to create marginalia, or unstructured notes, or tweets, or TiddlyWikis, which enable them to express and externalize their ideas and possibly share them without doing extra work or stuffing their ideas into someone elses conceptual framework.},{title:IbmDemiseLessons,created:20200226131004898,description:It is easy to believe that the big disasters, personal and societal, only happen to other people.,es:likely,modified:20210728004422822,tags:Systems Employment Idea Public,type:text/vnd.tiddlywiki,text:Some folks at TheFederatedInsurance including J.P.|PrivatePerson and R.S.|PrivatePerson were recently having a water-cooler conversation about how TheIbm used to be huge in the RochesterMinnesota area and then gradually outsourced everything, people lost their cushy jobs, etc. (TheFederatedInsurances contact at TheSonatype, M.B.|PrivatePerson, was among them, I have learned.) And then, without apparently learning any lessons about fragility from this, they promptly started talking about how now //Federated// really is a place you can rely on and that wont happen to //us//...\n\nThe antifragile|AntiFragility approach involves more smaller companies that people move between, or perhaps something like FullStackFreelancing. This way, you dont get too attached to any one topic or location, and you are always reasonably marketable. Thats not as comfortably boring if youre a career developer -- well, maybe thats too cynical, there are //lots// of disadvantages to it -- but youve got to admit that at any rate its less likely to leave you down a creek|WithoutAPaddle. If Federated ever got rid of IS here, or the company went under, it would be a catastrophe for pretty much everyone in Owatonna. Its like InvestmentDiversification, right?\n\nInteresting how your perspective changes reality there. (AppearancesOverReality?)},{title:Icehouse,created:20230521215532056,creator:soren,gis-lat:44.956317493501444,gis-long:-93.27807021237686,gis-zoom:16,modified:20230521215700948,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:IchiddoRamen,created:20231024210631386,creator:soren,modified:20231024210632186,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:IDE,created:20200425165012832,creator:soren,es:confident,modified:20211107182817298,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Integrated Development Environment -- software for creating software, with an interface that includes the text itself, a source control tool, debugging tools, search tools, etc., all in the same window.\n\nSometimes overkill and a good TextEditor would do just fine, but often quite nice! VisualStudioCode is my favorite IDE nowadays.},{title:Idea,caption:The core of the Zettelkasten. Ideas are tiddlers that describe some concept, thought, lesson, or similar topic.,color:#ff0000,created:20210721004110425,creator:soren,description:,icon:$:/core/images/tag-button,modified:20210825160340787,modifier:soren,refexplorer-hide:true,tags:Public Meta,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\n!! Fields\n\n; description\n: When possible, the main idea of a tiddler should be summed up into a sentence or two and placed in the `description` field. This be displayed next to a gem icon underneath the tiddlers title, and it will appear in a tooltip when you hover over the tiddler in the ReferenceExplorer. (If no `description` field is available, a short excerpt of the beginning of the tiddler is shown in this tooltip.)\n; es\n: The epistemic status|EpistemicStatuses of this idea, if one is appropriate. This may be chosen from the drop-down in the upper-right of the tiddler in view mode.\n; universe\n: If this idea is associated with a fictional Source, that sources universe key.\n; url\n: If this idea has a single URL strongly associated with it (for instance, a blog post describing the idea that everyone knows about), it may be placed here.},{title:IdeaApi,created:20200422233955756,creator:soren,description:Assigning a name to an idea is like having an API for it: you can then work with the idea conveniently and abstractly.,es:likely,modified:20240524041030739,modifier:soren,tags:SorenConcept Identity Public Idea,type:text/vnd.tiddlywiki,text:I find that assigning titles to cards in the ZettelKasten is a valuable way to take advantage of the PowerOfNames -- and is something that some people evidently do not do in their form of the system, which is a lost opportunity! Having done that, even if its an idea I have had for years, adds a certain amount of clarity to that little unit of information|Chunking.\n\nMrAndyMatuschak describes this phenomenon|https://notes.andymatuschak.org/Evergreen_note_titles_are_like_APIs as being like “APIs for your notes”: you have an abstraction handle on the idea. Matuschak is excellent at NamingThings (a hard problem, q.v., which identifies him as extremely intelligent, if that werent already clear), so Im borrowing that.\n\nMrScottAlexander calls|https://slatestarcodex.com/2016/02/20/writing-advice/ these “concept handles|ConceptHandle”, though in the context of vocabulary created in published work. He additionally says good concept handles may be the part of your work that is of primary importance and sticks around the longest. Ive certainly found over my months thus far of ZKing, and years prior of Ankiing, that the things I end up writing notes about, or creating cards about, are most often the concept handles and their related conceptual frameworks. Maybe much like theorems are the essence of math and formulas are the essence of physics, concept handles are the essence of linguistically presented ideas. (See also ConceptDescriptorFramework.)\n\nIn my experience, short names are better than long ones for this purpose. I cant usually remember whole sentences or even long phrases, which is necessary to get the most out of the idea API, but a couple of words (or WikiCamelCase words forming a single word) ordinarily sticks.},{title:IdealTeamPlayer2016,author:Patrick Lencioni,caption:The Ideal Team Player: How to Recognize and Cultivate The Three Essential Virtues: A Leadership Fable,completed:202104201200,created:20210515030515624,creator:soren,isbn:9781119209591,medium:book,modified:20211105153306571,modifier:soren,rating:skimmable,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2016,text:Book by MrPatrickLencioni, read for F.I.B.C.|PrivatePerson. Centrally states that employees should be Humble, Hungry, and Smart, meaning:\n\n* They are, well, humble (this one isnt hard).\n* They want to do good work.\n* They have enough social intelligence to behave sensibly and not upset others.\n\nA hundred short pages of bad fiction demonstrating the point followed by fifty pages of discussion. Admittedly, I am writing this entry a month or so after I finished the book, but even so, I cant help but think the ideas could almost be crammed into a long blog post. (That said, it did not take me long to read at all. Maybe about 2 hours.)\n\nPlaces great value on making sure you hire the right people, namely people who have these qualities; if someone doesnt and you cant help them want to develop them, then they should head out the door before they make the rest of your people want to leave as well. On the other hand, Lencioni thinks you can usually get such people to accept that theyre a bad fit and leave of their own accord (though he says nothing of the poor sod who will hire them next!). Cf. SkillsKnowledgeAndTalents.},{title:IdeationStrength,caption:Ideation,created:20201026180945914,creator:soren,description:You are fascinated by ideas.,es:confident,modified:20250324183127654,modifier:soren,tags:Psychology Imagination Ontology Public Idea,type:text/vnd.tiddlywiki,text:Item identified on the StrengthsFinderReport:\n\n{{!!caption}} -- \{{!!description}}\\n\n* Involves identifying Platonic forms or aphorisms or narrative patterns or creative connections|NotesMustLink (the mass-audience description of course does not use such terms!) in objects, relationships, and events, as a way to explain why things are the way they are and how other things may behave.\n* Ideas offer new perspectives on familiar situations or challenges and are exciting in themselves.\n* May lead to a tendency to work separately from others. (For me at least, this is not necessarily because Im possessive of the final creation //per se//, but because I want the whole thing to be done //right// and get impatient with running through rounds of edits if I cant make them myself, which can be but is not always the same thing. Looking back on this, maybe those are basically the same thing, though.)\n\n!! Suggested action items\n\n* Play MentalGames (see MindHacker entry on this topic).\n* Ensure things are made concrete enough that others can follow them (using diagrams? step-by-step descriptions? examples?). Abstract concepts can be clear to the thinker but extraordinarily muddy to someone else, especially someone who does not typically think so abstractly|AbstractAndConcreteThinking.\n* Study different disciplines for cross-cutting insights; see DisciplineCrosspollination.},{title:identify-as-a-woman.png,type:image/png,created:20200824113856253,modified:20200824114001749,tags:Image Public,url:https://dilbert.com/strip/2019-09-04,_canonical_uri:./extimage/identify-as-a-woman.png},{title:IdentityIntegrationDivide,created:20210909022224065,creator:soren,description:As a member of a minority group or an advocate for it, one can sensibly opt either to lean into that identity or push to make it irrelevant.,es:possible,modified:20220628214616122,modifier:soren,tags:Sociology InterpersonalRelations Identity Idea Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:In HumanStain2000, MrColemanSilks attitude towards Howard and the institution of the HBCU in general (trying it, hating it), and later his decision to live as a white person, is part of an ongoing battle between //identity// and //integration// which plays out repeatedly throughout history. Should Coleman lean into being black, or try to ignore the fact that he is, be just a //person//? (His choice seems entirely logical and straightforward to me, up until the point at which he has to disown his mother. Thats some crazy dedication!)\n\nIm not sure if this is a dichotomy (you have to pick one or the other), a scale (theyre opposites and you can pick some point between them), or a pair of two qualities where you can select different elements from each. None of these models seems accurate to me, so Im struggling to identify exactly whats going on here; nevertheless, I feel confident that theres a choice of some kind to be made here, and that quite a few cultural disputes have their origin in differing opinions on this question.\n\nWhatever the model, I dont think theres any one right answer. I lean more towards the integration side myself, perhaps because identity currently has an overbearing emphasis|IdentityPolitics in public discourse.\n\nAn interesting comparison is LGBTQ+ Pride events, which have started vaguely bothering me in their identity focus in recent years. Now that most people in the locations where such events are popular, at least in the US, take it as a foregone conclusion that sexual and gender identity is a non-issue, the whole thing feels a little odd to me. It feels like walking down the street proclaiming that its OK to be gay and maybe that you are yourself gay, while undoubtedly empowering, is kind of the opposite of the real endgame...for folks not to have to be “a gay person” (identity) at all but just another person who happens to be interested in people of the same gender (integration).\u003C\u003Cfnote \Mark Dominus, in “Then you win|https://blog.plover.com/politics/then-you-win.html”, describes this process in more detail, and makes the case that in many places, it has already succeeded, beyond the wildest dreams of queer people 30 years ago:\n\u003Cbr>\n\n\u003Cblockquote>In 1991, posting a public coming-out essay was considered peculiar or inappropriate. In 2017, it would be eccentric because it would be unnecessary. It would be like posting a long manifesto about how you were going to stop wearing white shirts and start wearing blue ones. Why would anyone make a big deal of something so ordinary?\u003C/blockquote>\>>\n\nOf course, this is my opinion as an integration-biased person. If someone wants to actively be “a gay person,” I have no problem with that. Cool for them. I just dont quite understand it, as someone on the fringes, a quiet ace-spectrum person|DemiPerson myself (I wont try to hide it Coleman-style -- I even have a tiddler about it on the internet -- but I couldnt imagine wanting to bring it up unless its relevant). And I find it a bit strange that more people dont wonder about this implication.\n\nTo be fair, theres a lot more going on with Pride, too; its not just a “proclamation” as I simplified it to above, its a cultural ritual and practice, in both good and bad ways (as an example of bad ways, I think most people agree that co-opting the movement for profit is at least a little bit distasteful\u003C\u003Cfnote \As always, //The Onion// nailed this about three years before it became mainstream, in “Walmart Vows To Defend Whichever Gays Buy Their Cheap Shit|https://www.theonion.com/walmart-vows-to-defend-whichever-gays-buy-their-cheap-s-1819577651”. There is a convincing argument to be made, though, that this cheap commercialization means your movement has won: the percolation of your ideals through society has reached the point that claiming one likes gay people in ones advertising is an asset rather than a liability. So perhaps we should be a little more sanguine about the whole thing.\>>). I am not claiming the whole thing is stupid and pointless, nor that even exactly as it presently exists it didnt make perfect sense at one time.},{title:IdeologyMicrotargeting,created:20200316222621985,es:possible,modified:20210511010937510,tags:DystopianVision Psychology Politics Public Idea,type:text/vnd.tiddlywiki,text:A major tool during the 2016 election. Essentially, you run a wide variety of small ad campaigns. For each, you use the wonderfully precise tools of many social media and other online advertising platforms to find a small group of people with specific beliefs or interests and send over an ad exactly designed to cater to their beliefs.\n\nImportantly, you need not send a consistent message. You can microtarget one group suggesting that youre in favor of one policy, and microtarget another group suggesting the opposite, and because the campaigns are hidden and shown to only a small group of people, nobody will ever know!\n\nA seriously insidious tool, part of the normalization of AlternativeFacts and the general dismantling of reality in the modern political era. As usual, the appearances|AppearancesOverReality are what make a difference in the world.\n\nGullibilityMicrotargeting is a closely related concept: you target those people who are most likely to fall for a particular lie or scam.\n\nBanTargetedAdvertising would make this technique far less effective. You can target based on, say, readership of a publication, but there is so much more overlap that you cant get away with lying quite so hard.\n\nSource: The2020DisinformationWar202003.},{title:IdiotDostoevsky1869,author:Dostoevsky,bibliography:LifetimeReading,caption:The Idiot,created:20210703170128000,genre:Literature,medium:book,modified:20210705214034969,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1869,text:Length: !},{title:IDontKnow,created:20201209220802574,creator:soren,description:When you dont know something, say so proudly.,es:confident,modified:20250811175657585,modifier:soren,reviewed:20250203,tags:Expression PhilosophyOfLife Ethics Reasoning Anecdote InterpersonalRelations Public Favorites Idea,type:text/vnd.tiddlywiki,text:In first grade, I got sent to the principals office for making a ruckus at lunch, repeatedly batting a lunch box back and forth across the table with another student. There was no particular reason we were doing it -- from my perspective, he just shoved it at me, and so I shoved it back, and it escalated from there. I dont think we were even arguing.\n\nThe principal asked me why I had been engaged in this activity. I said, quite honestly, “I dont know.”\n\nShe said, “‘I dont know’ is not an answer!”\n\nBut it was, and is, an answer. In fact, it was //the// answer. I had no other answer, and there wasnt one, because if //you// cant figure out why you were engaging in some behavior, who could disprove that? Someone else could guess at your motivation, but they couldnt possibly prove they were right.\n\nIn fact, Im going to say “I dont know” is usually the most honest and humble|IntellectualHumility answer possible. Sometimes it is the //only// honest answer possible. The only time you should be ashamed to say you dont know is if you are currently being paid or trusted to know that thing, and even in that case it should be the admission that you need to go figure some stuff out. The alternative is to make up a random claim or elevate a guess to a certainty, which is much worse. Most people actually trust you more when you are willing to occasionally admit that you dont know something and need to do further research.\n\nMy first-grade principal could have made this into a very useful lesson: sometimes we end up doing dumb things, and we can do fewer dumb things if we can calm down and ask why we might in fact want to do that thing|SevenfoldWhy. Unfortunately, the lesson I took from it was more like “adults are stupid and wont listen to me.”\u003C\u003Cfnote \Now being an adult, I can confirm: adults are stupid and dont listen.\>> Looking back on it, “‘I dont know’ is not an answer” is one of the most wrongheaded things Ive ever heard. (Frankly, it was a silly question, anyway; what kind of answer did she expect? “Because I wanted to be disruptive and annoy everyone else in the lunchroom”? “Because Im a dumbass first-grader“? “Because he started it”?)\n\nRelated: its fine to not have an opinion on some things|NoOpinion; some people will learn obvious things every day|LuckyTenThousandLearners; some woo is irreducible|IrreducibleWoo.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n\u003C\u003C\u003C\nIf youre an annoying know-it-all like me, I suggest that you try playing the following game when you attend a conference or a user group meetup or even a work meeting. The game is:\n\nIf someone asks you a question, and you say, “I dont know,” you score a point.\n\nThats it. Thats the game. “I dont know” doesnt have to be perfectly truthful, only approximately truthful.\n\nI forgot, there is one other rule: If you follow up with something like “But if I had to guess...” you lose your point again.\n\u003C\u003C\u003C\n\n---MrMarkDominus, “I DONT KNOW”|https://blog.plover.com/brain/i-dont-know.html\n\u003C/$m2.x>},{title:IfItAintBrokeDontFixIt,created:20200322173141179,creator:soren,es:possible,modified:20201222173841557,modifier:soren,tags:Expression Public Idea,type:text/vnd.tiddlywiki,text:Sometimes its best to leave things that work well enough alone, even if they look kind of stupid. IfItWorksItsNotStupid.\n\nWe should be careful not to use this as an argument against ContinuousImprovement because were lazy, however. There is something of a tension here. Seemingly intuition and knowledge of the system is a prerequisite for being able to identify which things ought to be left alone and which things should be improved; but too much knowledge of the system can also leave you blind to its problems.},{title:IfItWorksItsNotStupid,created:20200322173339306,creator:soren,description:If a solution seems stupid but is effective, using it is probably not actually stupid.,es:likely,modified:20221018031508881,modifier:soren,tags:Design PhilosophyOfLife Expression Public Idea,type:text/vnd.tiddlywiki,text:If a solution seems stupid, but it accomplishes your goal, it cant be all //that// stupid. Results are critical. OutcomesOverActivities. See WorkingSoftware.\n\nSometimes the way to get results looks stupid (e.g., VocalProblemAttacking) or seems like it would accomplish the opposite (e.g., CounterintuitiveEfficiency).\n\nContrast with AppearancesOverReality however. This is an argument for how you should look at things which may not be accepted by everyone involved.\n\nSee also EasyMode.},{title:IfYoureReadyYoureLate,created:20200521201846793,es:likely,modified:20210509010332731,tags:PhilosophyOfLife Creativity LifeDirection Public Idea,type:text/vnd.tiddlywiki,text:MsEmilyFreeman, in her RemoteDevopsCulture20200520 talk:\n\n> If you wait until you feel like youre ready, youre probably late.\n\nChange is hard, and since you cant see whats coming it seems riskier than it is. That doesnt mean be recklessly optimistic|RecklessOptimism and always be at the very front of the curve -- because thats risky too -- but theres also a RiskOfNotChanging. Instead, use RelentlessOptimism, be alert for possibilities for change|SmellingTheCheese, and realize you can probably move just a little earlier than you think.\n\nIn other words, if its incredibly scary and you can identify lots of reasons not to do it, its probably too early; if its just scary and there are some targeted issues, its time. You can CountOnYourPartnerForOne to deal with those targeted issues and remaining fear.},{title:IgNobelPrize,created:20201120180917335,creator:soren,es:confident,modified:20211108162400513,modifier:soren,tags:Science Humor Creativity Public Idea,type:text/vnd.tiddlywiki,url:https://www.improbable.com/ig-about/winners/,text:Annual series of prizes given out by TheAnnalsOfImprobableResearch for science that “makes people laugh, then makes them think.” Not only is it funny, but it draws attention to a really important part of science that I think we often lose sight of in the modern world: its supposed to be playful, driven by surprises|AccidentsMakeTheWorldGoRound, and done for love of knowledge. Perhaps the Ig Nobel Prize is a bulwark against the advance of scientism|ScienceVsScientism.\n\nMost prizes are sincere, but some are sarcastic; for instance, a Chemistry Prize was recently given to TheVolkswagen for\n\n> solving the problem of excessive automobile pollution emissions by automatically, electromechanically producing fewer emissions whenever the cars are being tested.\n\nAnd a Peace Prize to\n\n> the mayor of Vilnius, Lithuania, for demonstrating that the problem of illegally parked luxury cars can be solved by running them over with an armored tank.\n\n...which seems like it comes from a MrBean sketch.\n\nOther favorites:\n\n> Cognition Prize, 2017: for demonstrating that many identical twins cannot tell themselves apart visually.\n\n> Physics Prize, 2015: for testing the biological principle that nearly all mammals empty their bladders in about 21 seconds (plus or minus 13 seconds).\n\n> Physics Prize, 2001: for a partial solution to the question of why shower curtains billow inwards.\n\nAlso, this one did not win an Ig Nobel, but the association once reported on a study that found that:\n\n> The more intensely people felt… the urge to urinate, the less they believed in free will. (\u003C\u003Crt 4106>>)\n\nYou can read all the winners \u003Ca class\tc-tiddlylink-external\ href{{!!url}}>here\u003C/a>.},{title:IknowWhyTheCagedBirdSings1969,author:Angelou,bibliography:LifetimeReading,caption:I Know Why the Caged Bird Sings,created:20210703170128000,genre:History,medium:book,modified:20210705214035071,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1969},{title:Iliad,author:Homer,bibliography:LifetimeReading,caption:The Iliad,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035190,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Image,caption:Any image in a standard format embedded within the wiki for transclusion in other tiddlers.,color:#ff0000,created:20200118044638935,creator:soren,icon:$:/core/images/tag-button,modified:20210825160451093,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}} See also Attachment.},{title:Imagination,created:20200125230728966,creator:soren,es:confident,modified:20210828141144372,modifier:soren,tags:Public Idea Definition,type:text/vnd.tiddlywiki,text:A tag for things that involve using your mind to think of counterfactual situations and ideas. See also WhatIf for specific scenarios.},{title:ImaginationChamber,author:Philip Pullman,caption:The Imagination Chamber: Cosmic Rays from Lyras Universe,completed:202209221200,created:20221002152645070,creator:soren,medium:book,modified:20221002153138622,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,url:,year:2022,text:Another side diversion in the HisDarkMaterials universe while MrPhilipPullman scribbles away on the last part of BookOfDust. (Im just hoping he finishes it before he kicks the bucket at this point, weve been waiting for 22 years!)\n\nThis one got bad reviews on Amazon when it came out because it contains very little content and is priced as a full book. It //is// a little bit of a ripoff in that respect, and I get the feeling Pullman felt like he should release something and just took some of his notes and dumped them into a book. But I dunno, I kind of enjoy seeing notes like that.\n\nAnyway, its quite a nice piece, as a physical book, and a fun read if youre into the universe (it would be essentially meaningless if you arent!). Its somewhat like LyrasOxford in being composed significantly of little sketches and pieces, but it doesnt contain a full story, and each fragment is written in Pullmans narrators voice (that is, kinda-sorta objective third person). Some of them are almost telegraphic.\n\nTook me an hour or so to read carefully, not much shorter than the others in this set.},{title:ImaginativeResistance,created:20200115025206536,creator:soren,es:confident,modified:20210917154115703,modifier:soren,tags:FictionTheory Public Imagination Idea,type:text/vnd.tiddlywiki,text:A way in which its possible for fiction to be false, where the reader reads an assertion by the narrator and concludes that it is outright incorrect, or inconsistent within the fictional world. Example from Maier2020:\n\n\u003C\u003C\u003C\nSara never liked animals. One day, her father caught her kicking the neighbours dog. He got really angry, and she was grounded for a week. To get back at her father, she poured bleach in the big fish tank, killing all the beautiful fish that he loved so much. Good thing that she did, because he was really annoying.\n\u003C\u003C\u003C\n\nEmphasis mine. We as readers have no trouble accepting the rest of the story, but we resist the last sentence...its just //not true//, even though normally whatever an omniscient-perspective narrator says goes. Maybe this poses a problem for the concept of an omniscient narrator at all.\n\nDistinct from an UnreliableNarrator.},{title:ImmediateFeedback,created:20200323025220693,creator:soren,es:confident,modified:20211206154327979,modifier:soren,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Its much easier to change effectively based on feedback when you receive the feedback right after doing something. That way you still have all of your context and a reasonable hope at remembering why you did things the way you did, as well as a better idea of how to change. See also the ScientificMethod.\n\nImmediate feedback is a valuable part of ContinuousImprovement and a foundational reason behind software-development practices like ContinuousIntegration and UnitTesting.\n\nActing on immediate feedback is the basis of the FlaneurMethod.\n\nRequesting immediate feedback, in the form of ImmediateQuestioning, has benefits both to the asker and the questioners.},{title:ImmediatelyAwkward,created:20200411003136566,creator:soren,description:A difficult social interaction will hardly ever be easier than at the present moment.,es:confident,modified:20231023032400260,modifier:soren,tags:InterpersonalRelations PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:If you know you need to have an awkward conversation, suck it up and have it immediately: its never going to be any easier, no matter what you tell yourself. This nearly always turns out better for all involved. Like the phenomenon that EmailDebtForgivenessDay is based on, the longer it takes, the more awkward it feels -- which means a mountain can quickly be made out of a molehill.\n\nAlso: Awkward is OK! There are many situations that will always be awkward, but need to happen anyway. Whats more, having the awkward conversation often ends up less awkward in the long run than never having it.\n\nStill, its worth remembering, BetterLateThanNever.},{title:ImmediateQuestioning,created:20200407014145343,creator:soren,es:likely,modified:20210509010105296,modifier:soren,tags:InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:HowBasecampCommunicates Principle 22: If presenting bad news or a difficult issue, always invite questions as soon as possible, before you end the conversation. If you dont ask for questions, you get rumors and confusion and internal chaos among everyone who hears the news. If you do, things get cleared up and you are more respected.\n\nThis does require some PsychologicalSafety: if its missing, the effect is as if you didnt ask for questions, because you werent really //inviting// questions.\n\nVery closely related to ImmediateFeedback.\n\nCf. ImmediatelyAwkward.\n\nAlso, you should not mix GoodNewsWithBadNews.},{title:ImmortalLifeOfHenriettaLacks2010,author:Skloot,bibliography:LifetimeReading,caption:The Immortal Life of Henrietta Lacks,created:20210703170128000,genre:History,medium:book,modified:20210705214035207,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:2010},{title:ImplausibleCharacter,created:20200125181303726,creator:soren,es:confident,modified:20200410203447810,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Some characters are quite realistic. Others can plainly never exist in ConsensusPhysicalReality.\n\nSometimes characters (e.g., epic heroes) are described as \larger than life\. This is one type of ImplausibleCharacter, but the concept goes broader.\n\n* Sometimes they are comedic caricatures: MsChasen.\n* Sometimes their actions consistently lead to better results than they plausibly ever could: MsMaudeChardin interacting with the police, or MsTrunchbull hurling students out the third-floor window.\n* Sometimes they are implausibly ignorant or plain dumb (see Jesus disciples, or those who need explanations from a ConvenientGuru).},{title:ImplementingAnyAllInPowerShell,created:20191106212422296,creator:soren,modified:20210810190156096,modifier:soren,tags:TechBook Public Code,type:text/vnd.tiddlywiki,url:https://stackoverflow.com/questions/38313529/how-do-i-check-if-all-the-returned-values-are-true,text:Looking for ways to do LINQ-like or Python-like any()/all() like functions in PowerShell to determine if all or any of the items in an array/collection/list meet some condition.\n\nThe two most obvious solutions are:\n\n* `(Test-Path $filesToUpdate.Source) -contains $false`\n* `$false -ne ($filesToUpdate.Source | Test-Path | ? { -not $_ } | Select-Object -First 1)` (//Blech!//)\n\nHit {{!!url}} for further considerations and even more options.},{title:ImplicitFictionalContext,created:20200115025926924,creator:soren,es:likely,modified:20210917013942746,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Maier2020 points out that though generally anything which is said to be true within a fictional world in canon is assumed to be true, the converse is not true: we expect vast amounts of things to be true within any fictional work that are not so stated. E.g., the laws of physics apply, Amsterdam is the capital of the Netherlands, Sherlock Holmes has 46 chromosomes, characters are conscious and moderately rational, etc.\n\nOf course all of these things can be \overridden\ by the narrator, either explicitly or by contradiction with other explicit facts -- thats part of what makes fiction so powerful and subversive -- but the world seems to be cooperatively generated|CooperativeGeneration by the text and the reader in a way much deeper than texts are typically understood to be. Facts are subject to this cooperation, not just the readers understanding thereof.\n\nAn interesting question, then: how far can these assumptions be carried? Are they mostly things that everyone would agree on, or do they go further, even say into PersonalMythology?\n\nAnd maybe another related idea: sometimes a reader might not have the full context expected due to being one of the LuckyTenThousandLearners (or the context is more obscure). Does the world change for them? See MissingFictionalContext.\n\nDoes this relate to PrologFalsifiability?\n\nThere is a particularly large amount of ImplicitFictionalContext in textual media, but even in film, which gives by far the most incidental context of any common fictional medium, far more is left up to the viewer than is explicitly provided.},{title:ImplicitlyDefinedNode,created:20230419165855521,creator:soren,es:confident,modified:20230419170626168,modifier:soren,tags:Public Idea Information Systems PersonalDocumentation,type:text/vnd.tiddlywiki,text:An implicitly defined node in a graph-based knowledge management system is one that has no actual content, but is exclusively defined by its metadata and backlinks.\n\nImplicitly defined nodes carry a remarkable amount of information and ease navigation of the graph. Its often simply unnecessary to provide context within the node; if you have any doubt as to what the title refers to, just looking at the places youve used it will be enough to jog your memory. And when you encounter a link to an implicitly defined node, you know you can click on / hover over it to see where else youve talked about the thing.\n\nThey also help to attack a problem common to most indexing systems, particularly when applied to enormous, ongoing|OngoingVsCompletableProjects projects like Zettelkästen:\u003C\u003Cfnote \Its not that this isnt a //concern// for projects that arent ongoing; its just that in this case you can relatively easily address the concern by intentionally indexing too much and then deleting the useless entries. This doesnt work for ongoing projects because there is never a moment when you can confidently prune.\>> When you start out indexing, you often dont know whether a particular thing will be worth indexing, because you dont have the necessary context to figure out if its something youll be talking about regularly, or that anyone would think of when trying to find the thing. If you index too //many// things, youll end up with an index cluttered with overly specific and useless entries, while if you index too //few//, by the time you realize that you should have indexed that entry, it will be a lot of extra work to find the previous instances of it.\n\nSince implicitly defined nodes require almost no effort to create (merely typing a couple of `brackets` or whatever syntax your system requires), and they dont create much clutter in the system, if any at all|MissingTiddlerPhilosophy, there are few objections to a highly inclusionary policy. And if you are careful about the terms you use, later references will automatically be attached to the same node; you dont have to remember that you created an entry for the thing.},{title:ImportanceTrance,created:20200923232935136,creator:soren,es:personal,modified:20211027040525579,modifier:soren,tags:FictionTheory Imagination Psychology Public Religion Idea,type:text/vnd.tiddlywiki,text:Sometimes I enter a brief period in my life (on the order of hours, or maybe a couple days) where absolutely nothing else seems important. Typically this is induced by some kind of fantasy, a beautiful or novel idea or question such as a PhilosophyRift, or a transcendent experience (defined broadly). While pleasurable in many ways, when considering the outside world, the feeling is one of bizarre alienation.\n\nTwo examples I can give off the top of my head:\n\n* After finishing AnnaKarenina (having read perhaps the last part and a half in one sitting). I was camping with my parents, and P.|PrivatePerson had received some kind of weird voicemail message from a family member. They were trying to parse out some complicated series of events or wording that had led to the message, and I remember being actively frustrated at listening to it. It seemed so supremely //unimportant// as to be absurd.\n* In the course of the home concert at the end of my first tour with TheStOlafChoir, I encountered a sort of enlightenment, a realization that I had been looking to experience something for most of the year and it had actually been there the whole time but unrecognized. That combined with the tour as a whole led to feeling out of place in my home for several days. As I wrote in my journal:\n*> How do you convey all these feelings in the one-sentence response to “How was your tour?” (Maybe a little like “How was your pilgrimage?” “How was your near-death experience?” I exaggerate a bit but not much.) Of course, the answer is that you don‘t; you smile, say “good,” I’m a bit tired, glad to be home, the weather was good, and you move on with your life.\n\n\u003Cdetails>\n\u003Csummary>Spoilers for \u003Cem>Anna Karenina\u003C/em>\u003C/summary>\nAlso called the DeadAnnaEffect after the first example.\n\u003C/details>},{title:ImportantNeglectedTractable,created:20210307182455907,description:The highest returns come from exploring problems that are important, neglected, and tractable.,es:likely,modified:20210622031518635,tags:Employment LifeDirection Science Public Idea,type:text/vnd.tiddlywiki,text:Suggested by 80000 Hours|https://80000hours.org/key-ideas/#global-priorities as a framework for deciding which problems to spend a career on|CareerMission, study, or donate to; problems with these characteristics have the highest CostBenefitRatio for your effort.\n\n* Important, because obviously, things that are less important are less worth working on, //ceteris paribus//.\n* Neglected, because you can have a greater impact in neglected areas than ones where everyone is already contributing.\n* Tractable, because intractable problems, being much harder or impossible to solve|ProblemsAndPredicaments, require a comparatively massive amount of effort to achieve the same amount of progress.\n\nMost problems that are both tractable and important are in the AdjacentPossible of their field.\n\nCf. MostImportantThing: perhaps INT can help you identify the most important thing to work on if youre unsure what it is.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20210307213806932\\n\t\According to organization 80,000 Hours, good problems to focus your efforts on have what three characteristics?\\n\t\Important, neglected, and tractable.\>>\n\t\n\u003C\u003Crememberq \20210307213916443\\n\t\Why are neglected problems often more attractive targets for research?\\n\t\Because less effort is currently being put into them, fewer of the easy avenues will already be taken.\>>\n\t\n\u003C\u003Crememberq \20210320013301576\\n\t\How does the adjacent possible relate to the important/neglected/tractable model?\\n\t\Tractable and important problems are those in the adjacent possible.\>>\n\n\u003C/$details>},{title:ImpracticalityOfAntimoney,created:20210611225643136,es:mythological,modified:20210611230455666,tags:Public Idea,type:text/vnd.tiddlywiki,text:Why are there no extant antimoney|Antimoney economies? Well, because the whole idea is the kind of absurd you only come up with in dreams. But also...\n\n* The most glaring practical issue with antimoney is that seemingly you could simply throw your antimoney in the garbage to become richer.\n* Creating and distributing it|CreatingAntimoney is a challenge.\n* It fits badly with a finite world: incentivizing infinite buying but finite selling wouldnt work long-term. On the other hand, maybe that means antimoney is a perfect fit|EconomicRealities for todays world...},{title:ImpressiveSums,created:20200225230833450,es:confident,modified:20210509010153535,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:A lot of everyday, mundane things start to look impressive when you add them up over time. E.g.:\n\n* How much did you pay for everything you are wearing/carrying (or do in a typical day, if youre sitting at the computer in your pajamas)?\n* How many times have you brushed your teeth in your lifetime?\n* How many people are drinking coffee at this precise moment?\n\nImpressiveSums of desirable things like creative output can often be intentionally achieved through a RatchetingProcess.\n\nCf. SurprisinglyLowSums.},{title:ImprovementOfDailyWork,caption:Improvement of Daily Work,created:20200306204431344,creator:soren,description:Improving your ability to do daily work well is more important than actually doing the work, because improvements compound.,es:likely,modified:20251010025833834,modifier:soren,tags:Process UnicornProject Public Idea,type:text/vnd.tiddlywiki,text:The Third Ideal|FiveIdeals of ImprovementOfDailyWork allows us to learn from experience and make rapid changes, easily disseminated, from the bottom up. A focus on hierarchy and compliance results in the opposite, a situation where people cannot improve their daily work even though they clearly see the problems, due to forces outside their control like rigid plans, bureaucratic processes, slow release schedules, mountains of approvals, etc.\n\nImprovement of daily work is //more// important than doing daily work, because unlike daily work, it compounds. If you make your daily tasks 1% faster per day, after a remarkably short amount of time you will have achieved a higher total throughput.\n\nUnicornProjectPartTwo, p. 132 suggests that given the choice between developer productivity (or security) or a feature, you should pick the former every time. Microsoft famously took this approach on the security side to turn their abysmal security record into todays decent one. The opposite results in writing FeaturesWhileTheWorldBurns.},{title:ImprovingCorporateAdvancement,created:20210623120649597,description:Corporate advancement can be improved and the PeterPrinciple beaten by offering rankings within each role, thus allowing multiple paths to advancement; and by enabling employees to try other paths at low risk.,es:confident,modified:20210623121751632,tags:Public Employment Business Idea,type:text/vnd.tiddlywiki,text:The PeterPrinciple suggests that people tend to be promoted to their level of incompetence. This happens for two reasons:\n\n# The only way to make more money or get more recognition is to switch roles -- say, in IT, from developer to analyst to manager to director.\n# People arent provided with the opportunity to switch back to a previous role, at least not without looking terrible, if the new role turns out to be a poor fit for them.\n\nNumber 1 is most important. It can be fixed by having different positions or rankings within each role (for instance, at TheFederatedInsurance we do this to some degree with roles called Systems Developer 1 through Systems Developer 5, where each rank comes with a significant salary bump and increased respect from the department). An interesting way to find out whether companies see value in individual contributors at a high level is to consider whether they have these ranks: if they do, obviously they do, and if they dont, they probably dont (or theyre ignorant about how to show it, and theyre losing people because they dont //feel// valued; AppearancesOverReality).\n\nNumber 2 is a significant factor as well and can be improved by having clear expectations for some kind of trial period (DareToDoNoPermanentDamage). If either the employer or the employee is unsatisfied with how things go after a few months, they roll right back to where they were (a plan is needed for this -- and it may not work so hot in a complicated environment where every role is fundamentally somewhat different, like in most IT shops). This shouldnt be considered “failing”, because when we accept that success or failure in a role is primarily based on whether your talents were a good match for that role, all it means is that you took a chance on something being a good fit for you, and it turned out it wasnt.\n\nSource: FirstBreakAllTheRules1999.},{title:InboxZero,created:20200427022344366,creator:soren,es:confident,modified:20220804164332154,modifier:soren,tags:MentalModel Process Public Idea,type:text/vnd.tiddlywiki,text:Paradigm for managing Email in which, every time you enter your email to read and handle messages, you process every message and remove it from the inbox, so that nothing remains (thus the //zero//).\n\nI have seen people malign this as a “Sisyphean pursuit,” but then isnt email regardless of how you handle it? Plus, I think its misunderstood as meaning the moment you see an email in your inbox, you have to go take care of it. First, you only get it into a better system because email is a poor tool at almost everything except //getting new information//, and second, it is (or should be) paired with //checking email as little as possible//.\n\nI struggle to manage this at home, but have done it at work for a long time.\n\nOneTouchToInboxZero201512 describes some things you can do to make this easier.},{title:Inception2010,author:MrChristopherNolan,bibliography:SharedConsciousness,caption:Inception,completed:201010101200,created:20221003172631855,creator:soren,medium:film,modified:20221003172727904,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,telepathy-description:People can share their dream worlds with others.,type:text/vnd.tiddlywiki,url:,year:2010},{title:IncrementalAndIterative,created:20200326134001258,creator:soren,es:confident,modified:20241229054613946,modifier:soren,tags:AgilePhilosophy Process Public Idea,type:text/vnd.tiddlywiki,text:AgilePhilosophy-compliant processes should be both //incremental// and //iterative//.\n\n* Incremental processes are those that proceed one step at a time.\n* Iterative processes are those that incorporate feedback and proceed through the planning and performing cycle (e.g., a Sprint) again.\n\nAn incremental, non-iterative process just delivers a product nobody wants more efficiently|WorthlessEfficiently. An iterative, non-incremental process doesnt involve the feedback until its too late to be incorporated effectively and a large amount of rework is required.\n\nSource: AgileInTheRealWorld.},{title:IndependentMindedness,created:20210701024845833,creator:soren,description://Independent-mindedness// is a novel personality trait with significant explanatory power described by Paul Graham.,es:likely,modified:20251011164901452,modifier:soren,tags:Creativity Sociology Identity Employment Public Favorites Idea,type:text/vnd.tiddlywiki,text:\\define stretchamabob(tid) \u003C$list filter\\u003C__tid__>istiddler\ variable_>\u003Cli>\u003C$macrocall $name\stretch-template\ tiddler\u003C\u003C__tid__>> smallTemplate\$:/tzk/Templates/Topical/TitleDescriptionStretch\ largeTemplate\$:/tzk/Templates/General/IdentityTemplate\/>\u003C/li>\u003C/$list>\n\nBased on HowToThinkForYourself2020 by MrPaulGraham.\n\nThere are two kinds of professions: ones where you can be successful by simply being right, and ones where everyone else also has to be wrong or missing something (in some relevant dimension). For instance, administrators, craftspeople, engineers, and scientists only need to be right; black-hat hackers, writers, entrepreneurs, and public intellectuals need others to be wrong. Graham calls people who do well in this latter type of job //independent-minded//.\n\nThe opposite of independent-mindedness is conventional-mindedness. For some reason, almost nobody believes they are conventional-minded -- though its not a objectively a negative thing and indeed is the easier path, just like thinking concretely|AbstractAndConcreteThinking, pursuing jobs that dont have a WinnerTakeAll reward, etc. Its interesting that being described as conventional-minded nevertheless seems like an insult, at least in my culture, and not just the somewhat more intellectual subculture I tend to hang out in: maybe because we glorify scientists, inventors, and entrepreneurs so much, and those are some of the most obviously independent-minded people? When I passed my ConvinceMeToStay essay on to some of my coworkers, they laughed at the bit about conventional-minded people, which wasnt supposed to be funny or a criticism of either the people or the company.\n\nIndependent-mindedness, according to Graham, is an innate personality trait (or talent|SkillsKnowledgeAndTalents, in the Gallup sense). Knowing whether you fall into this category is crucial to finding an appropriate career path and life niche for yourself.\n\nNow that I think about it, I agree with Graham that this likely is a talent and not a choice -- if you arent naturally independent-minded, you will never be excellent at the associated habits of thought. If true, this has potentially huge implications for how independent-minded people think about society; the temptation is always to strive to make others more independent-minded. Are we being as ridiculous as extraverts|QuietPower2012? (That said, it //is// a pretty important tool for success in a lot of professions; is there a way we can make people just good enough at it to be useful|EncouragingCorporateIndependentMindedness, just as we might want to ensure even the most introverted people develop good social skills?)\n\n\n!! Topics in independent-mindedness\n\n\u003Cul>\n\u003C\u003Cstretchamabob \QualitiesOfIndependentMinds\>>\n\u003C\u003Cstretchamabob \MagnifyingIndependenceOfMind\>>\n\u003C\u003Cstretchamabob \IndependentMindednessCorrelations\>>\n\u003C\u003Cstretchamabob \IndependentMindednessInNorthfieldAndFederated\>>\n\u003C/ul>\n\n\n!! References\n\n> In science you need to understand the world; in business you need others to misunderstand it.\n>---BedOfProcrustes2010, p. 4},{title:IndependentMindednessCorrelations,created:20210701025733772,creator:soren,description:What other personality traits and habits are correlated with or related to IndependentMindedness?,es:possible,modified:20240707145611097,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Own work, none of Grahams thoughts here. Ongoing list of ways to spot independent-minded|IndependentMindedness people.\n\n* Science (but not scientism|ScienceVsScientism, which defends or advances the conventional and discourages independent thought, right down to condescending to the audience).\n* Also, hacking and pedantry (see HackingPedantryAndScience). Hacking in particular, I think, more or less //is// this attitude combined with playfulness and a love of doing things just to see if you can. That may be merely another way to say //curiosity//: Im not sure. Hacking and curiosity are obviously related.\n* Willingness to experiment, or try new things|TryItAndSee and explore variety.\n* The rationalist movement. I think this correlation may be why I appreciate the movement so much despite disagreeing with significant parts of it: its hard to find almost any other community where people actually routinely stop after citing a study to consider what might be wrong about it, for instance.\n* Use of footnotes and parentheticals. This ones speculative, but I think the tendency to digress is characteristic of an independent mind: you want to be fastidious about everything you say and offer additional directions for your own or others curiosity to take them.\u003C\u003Cfnote \C.S.|PrivatePerson often calls our conversations “ADHD conversations” -- theyre constantly bouncing from topic to topic, often ones that are seemingly unrelated to each other. This seems to be part of it, too. And come to think of it, maybe for that reason ADHD is itself characteristic of independent minds, or vice versa.\>>\n* Directness. When in a safe environment, independent-minded people say what they think, and since they dont feel threatened by opposing ideas or criticism, they are annoyed when others dont offer them or make them guess. (Particularly reminds me of the characterization of those with an IntellectionStrength enjoying people talking back -- as well as this being a characteristic of good teachers.)\n* Intellectual eclecticism (see EclecticMind). Comes with curiosity.\n* Attitude toward education. Independent-minded people value education, in whatever form, for its own sake, because a wide variety of ideas and the ability to play with them and put them together are the fuel for independent-mindedness. Without education, one cannot have new ideas|RoteLearningAsFoundationOfThought. Conventional-minded people value education only as much as it helps them get ahead in life (for instance, because a future employer will give them more money if they have a degree). Note that “education” does not necessarily mean formal schooling to an independent-minded person (indeed, thats often a rather ineffective form of education for the independent-minded persons goals).},{title:Index,caption:A tiddler that serves primarily as an overview of or collection of links to other information, containing little information of its own.,color:#ff0000,created:20200314213905906,creator:soren,icon:$:/core/images/tag-button,modified:20210825160727571,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text://Not to be confused with Indexing, the art and science of creating lists of keywords that describe where information is to be found in a resource.//\n\nAn index tiddler serves primarily as an overview of or collection of links to other information, containing little information of its own. These tiddlers become more and more useful the larger your Zettelkasten gets; you can use them to create ad-hoc lists or hierarchies or keep track of ideas in a specific topic youre currently working on.\n\nIndex tiddlers dont have any special naming conventions or fields.},{title:IndexCard,created:20240227171801713,creator:soren,modified:20240227171842448,modifier:soren,tags:Idea Definition Systems Productivity Creativity Public,type:text/vnd.tiddlywiki,text:The Magic of Index Cards|https://controlaltbackspace.org/index-card/ (TheControlAltBackspace)},{title:Indexing,created:20200410204120064,creator:soren,modified:20200728024449885,modifier:soren,tags:PersonalDocumentation Information Public Idea,type:text/vnd.tiddlywiki,text://Not to be confused with// \u003C\u003Ctag Index>>.\n\nDiscipline of extracting keywords from a document and using them to build a method of navigating through the document without knowing anything about the words used or relying on any kind of hypertext. Often quite effective, but labor-intensive to create and requires actual expertise|https://www.asindexing.org/ to do well in a way that works across people with different brains. (You can index something fine for yourself if you understand a few general principles.)\n\nThe RecordsProject has relied on indexes for its paper materials like CB from the beginning.},{title:Indiana,created:20200519011233203,modified:20200519011241532,tags:Place Public,type:text/vnd.tiddlywiki,text:UnitedStates state in the Midwest.},{title:IndianaDunes,created:20240402012539610,creator:soren,modified:20240509144244282,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:IndiaPalace,created:20230427035443098,creator:soren,modified:20230427035446657,modifier:soren,tags:Public Place,type:text/vnd.tiddlywiki},{title:IndigoGirls,created:20240211231534435,creator:soren,modified:20240211231535175,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:IndirectionMindset,created:20200521211207107,creator:soren,es:likely,modified:20250311032034821,modifier:soren,tags:Systems Code Public MentalModel Idea,type:text/vnd.tiddlywiki,text://Indirection// is a critical part of computer science and tech in general: you have something that represents something else and can be followed to it in some way or another. Its actually critical all over the world, but especially in mathy disciplines.\n\nIts also really hard to wrap your head around. Well, kind of. When you encounter a type of it for the first time, its common to really get thrown off. Then eventually you learn it, and its familiar, and youre puzzled that anyone else has trouble understanding it (see DunningKrugerEffect). Here are some example concepts with their abstraction/indirection and referent:\n\n* Words -- mention, use|UseMentionDistinction\n* Maps -- map, world|AllMapsLie\n* Algebraic word problems -- representation, situation\n* Calculus -- derivative/integral, function\n* Pointers -- pointer, dereference\n* Graphs -- edges, nodes|GraphTheory\n* Arrays -- index, value\n* Classes -- type, instance\n* Monitors -- streamed representation, state of computer\n* Shortcuts -- link, target\n* Remoting -- remote computer, local computer\n\nNote that all of these things are notoriously baffling to people who arent familiar with them (just see the number of ComputerStupidities involving people who dont understand how screens or icons work, and think, e.g., that their files are physically stored inside the monitor because you can see the icons there). Some are even easy to mess up for those who //do// understand them, even if the concept is totally familiar (e.g., arrays and pointers).\n\nSome people may have better brains for this than others, though, much like some people struggle with spatial reasoning; for instance, the number of people who just cannot seem to get the hang of pointers seems more than can be explained by simple lack of perseverance. Perhaps a specific kind of intelligence (not sure what) makes this easier, or someone with no prior similar experience just takes longer than a person can be expected to keep trying to figure it out. See MrJoelSpolsky, \u003C\u003Crt 9390>>:\n\n> OOP|ObjectOrientedProgramming poses inadequate mental challenges to scare away first-year students. When you struggle with an OOP problem, your program still works, its just sort of hard to maintain. Allegedly. But when you struggle with pointers, your program produces the line “Segmentation Fault” and you have no idea whats going on, until you stop and take a deep breath and really try to force your mind to work at two different levels of abstraction simultaneously.\n\nA related and important skill if you work with indirection a lot is being able to visualize dependency and indirection chains between things (e.g., graphs, bounce steps for remote access) without seeing a copy of them. Diagrams are great, and we make lots of diagrams in tech, but if we stopped to make a diagram //every// time we had to think about an indirection, wed never get anything done!\n\nOn some people thinking in different ways than others, cf. AbstractAndConcreteThinking.\n\nOn certain forms of abstractions and indirection, such as maps, collapsing the world, see AllMapsLie.},{title:IndividualDistinctionIsIndividualValue,created:20200809020134620,creator:soren,es:likely,modified:20210916161053562,modifier:soren,tags:Identity Public InterpersonalRelations Idea,type:text/vnd.tiddlywiki,text:MrDerrenBrown argues repeatedly in HappyAbsolutelyFine2016 that what makes people unique and valuable and interesting is our being different from other people. This comes up first in pp. 118--20, but then returns when he discusses death at the end of the book: one of the reasons he argues that DeathIsNecessaryForMeaning is that if everyone lived forever, everyone would eventually do everything and know everything there is to know, and we would all become identical and meaningless. We love people because theyre like us //but also different//.\n\nSee also ConversationalDifference.},{title:IndividualsAndInteractions,created:20200202024316821,creator:soren,es:likely,modified:20240610223731910,modifier:soren,tags:AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:The AgilePhilosophy values //individuals and interactions// over //processes and tools//. Like much of Agile, this is a reactionary measure to the misuse of the CMMI/waterfall|WaterfallMethodology development model. See RoleOfTools.\n\nIt fits very well with the philosophy a Google recruiter visiting one of my CS classes at StOlaf once explained they used for the development of Android: \Hire smart people. Write the code. Ship it.|HspWtcS\ Hiring smart people and trusting them to do the right thing is the important part. The processes and tools are supposed to be a way to help them out, not a way to remove the need for them to communicate or figure the software out.},{title:InducedDemand,created:20200602141926412,creator:soren,es:confident,modified:20211026233229706,modifier:soren,tags:Environmentalism Psychology Public Idea,type:text/vnd.tiddlywiki,text:Phenomenon where something becomes more efficient or easier, but then people do it more as a result, eroding the efficiency gains. (In extreme cases, they may disappear entirely or become negative.) Particularly familiar and nasty when trying to reduce carbon emissions and improve traffic conditions.\n\nSimilar idea to RiskCompensation.\n\nIts possible for induced demand to be a positive force when correctly applied, especially by making a socially desirable action efficient and an alternative simultaneously less efficient. For instance, one can remove a driving lane and add a bike path to a busy city street; driving will then become less pleasant and biking more pleasant, and traffic patterns will shift accordingly (at least for trips where biking is practical). In the end, even people who need to drive will likely be happier because car traffic is lighter and calmer, and at any rate it will be no worse!\n\nThis kind of problem-solving is universally unpopular at first because things get worse before they get better, so its only popular with people who understand induced demand. Better education on this principle would thus be widely useful.},{title:InevitablyCorrect,created:20240223130939778,creator:soren,description:The level of mastery where it becomes impossible to imagine some fact not being true without upsetting your entire worldview.,es:likely,modified:20240305184300089,modifier:soren,tags:Idea Learning Reasoning Public,type:text/vnd.tiddlywiki,text:A useful level of mastery when learning something is one in which the correct answer is //obviously// correct; its connected by reasoning and other facts to a degree that theres no way you could doubt or conclude it wasnt correct. In a SpacedRepetition context, I think a sufficiently inevitably correct item more or less ceases to require review; it certainly has high ease. And I think the vast majority of cases where you continually struggle to remember something can be explained by lack of complete understanding and connections.\n\nThe key way to develop this is by increasing the Gearsness of a surrounding model so there are more connections. With high gearsness, the wrong answer immediately crunches with all of its surrounding facts, and if you forget the correct answer you can derive it.\n\nOther tactics:\n\n* ProofByContradiction, or some form of what J.B.|PrivatePerson has been calling “What would happen if not?”\n** This is also a great way to check your understanding of the significance of some fact or design.\n* Ask //why// about an answer, as many times as you can|SevenfoldWhy. (In some ways this is just another way to say increase the gearsness.)\n* Through repeated practice, UntilYouCantGetItWrong. This is more directly applicable to physical skills (memory drills suck unless its something like your times tables where theres no other way), but fits neatly here; at some point the thing youre practicing will become so obvious that its settled for you.},{title:InfiniteJest1996,author:Wallace,bibliography:LifetimeReading,caption:Infinite Jest,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035215,priority:2,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1996,text:Length: !},{title:InformationalJig,created:20200513180124969,creator:soren,description:An informational jig adds additional order to information by limiting the ways in which it can move or be used; for maximum utility, information systems should allow information to move freely most of the time, then settle into jigs for specific uses.,es:confident,modified:20230416230512411,modifier:soren,tags:Information Creativity Design Public Idea,type:text/vnd.tiddlywiki,text:An informational jig is a tool used to add forcible order to information in a way that makes it easier to understand, just like a physical jig adds order to the physical world by restricting the freedom of movement of an object.\n\nAn informational jig may, or may not, have physical manifestation. Some informational jigs can also be physical jigs (e.g., a lock on a bathroom door).\n\nExamples:\n\n* Laying out items in the order you will require them to perform a task\n* Placing an item you dont want to forget in front of the door\n* Organizing files into a hierarchy in accordance with which ones you need to see at a particular time\n\nHierarchies are a form of informational jig: they limit the categorization of an item to a single dimension, making it easier to understand that dimension but much harder to understand others. This is great in some situations but bad in others|HierarchiesVersusNetworks.\n\nSource: IntelligentUseOfSpace1993.\n\n\u003C$details summary\Flashcards\>\n\u003C\u003Crememberq \20200516165052489\\n\t\What is the purpose of an informational jig?\\n\t\To add order to information by reducing its connections and degrees of freedom.\>>\n\n\u003C\u003Crememberq \20200516165035587\\n\t\Does an informational jig have a physical manifestation?\\n\t\Sometimes.\>>\n\t\n\t\u003C\u003Crememberq \20210126123423731\\n\t\Hierarchies and categories serve what role when you use them to organize reusable ideas?\\n\t\That of an informational jig, temporarily locking the idea into a single role.\>>\n\u003C/$details>},{title:InformationHazard,created:20210508151747148,es:likely,modified:20210809202134056,tags:Information Ethics Public Idea,type:text/vnd.tiddlywiki,text:As discussed in InformationHazards2011. Ive copied out the definitions of types I found most interesting and have added some examples and further thoughts. Bostroms words in //italics//.\n\n\n!! Modes of information transfer\n\nFirst, the obvious ones someone would think about when they learned about the idea of information hazards:\n\n; Data hazard\n: //Specific data, such as the genetic sequence of a lethal pathogen or a blueprint for making a thermonuclear weapon, if disseminated, create risk.//\n\n; Idea hazard\n: //A general idea, if disseminated, creates a risk, even without a data-rich detailed specification.// (For example, knowing that someone has successfully built a fission bomb helps those interested in developing WMDs because they now know its possible and they have an obvious incentive to catch up.)\n\nMore easily overlooked:\n\n; Attention hazard\n: //The mere drawing of attention to some particularly potent or relevant ideas or data increases risk, even when these ideas or data are already “known”.// (There is a lot of data in the world, especially now, so just having the data out there poses much less of a hazard. The presidency of MrDonaldTrump likely owes itself to an attention hazard in which the media gave him free publicity.)\n\n; Signaling hazard\n://Verbal and non-verbal actions can indirectly transmit information about some hidden quality of the sender, and such social signaling creates risk.// (For instance, a bad researcher can damage the credibility of their field; or sharing information about your hobbies might give a substantial amount of information about your political views.)\n\n; Evocation hazard\n: //There can be a risk that the particular mode of presentation used to convey some content can activate undesirable mental states and processes.// (For instance, writing a beautiful description of the motivations for the Holocaust, or child sexual abuse|LolitaAsInformationHazard, could make it seem less awful even though the information conveyed is the same.)\n\n\n!! Effects of information transfer\n\n; Knowing-too-much hazard\n: //Our possessing some information makes us a potential target or object of dislike.//\n; Norm hazard\n: //Some social norms depend on a coordination of beliefs or expectations among many subjects; and a risk is posed by information that could disrupt these expectations for the worse.// (Bostrom suggests that many forms of conservatism intend to decrease this risk: being stuck in a LocalMaximum may be better than fixing one thing but making it possible for society to slide into a much worse position in other things, and we might prefer not to take the risk. Or a society held together by some ideology could collapse if information spreads that it is false.)\n\n; Information asymmetry hazard\n: //When one party to a transaction has the potential to gain information that the others lack, a market failure can result.// (Bostrom includes an extended discussion of insurance; when either the insurance company or the customer lacks some important information about the risk, incorrect pricing results, in some theoretical cases to the extent of making insurance completely infeasible.)\n\n; Distraction and temptation hazards\n: //Information can harm us by distracting us or presenting us with temptation.// (See ContextFreeInformation.)\n\n; De-biasing hazard\n: //When our biases have individual or social benefits, harm could result from information that erodes these biases.// (See also BeliefAsInstrument.)\n\n; Information-burying hazard\n: //Irrelevant information can make relevant information harder to find, thereby increasing search costs for agents with limited computational resources.// (In some ways the opposite of the //Attention hazard//.)\n\n; Psychological reaction hazard\n: //Information can reduce well-being by causing sadness, disappointment, or some other psychological effect in the receiver.// (Do you want to know? What is the moral value of knowing such information? Perhaps related to TypesOfHappiness.)\n\n; Belief-constituted value hazard\n: //If some component of well-being depends constitutively on epistemic or attentional states, then information that alters those states might thereby directly impact well-being.// (Also closely related to BeliefAsInstrument.)\n\n; Embarrassment hazard\n: //We may suffer psychological distress or reputational damage as a result of embarrassing facts about ourselves being disclosed.//\n\n; Development hazard\n: //Progress in some field of knowledge can lead to enhanced technological, organizational, or economic capabilities, which can produce negative consequences (independently of any particular extant competitive context).// (See CantBlamePlatformDesignersForNatureOfInformationStreams.)},{title:InformationHazards2011,author:Nick Bostrom,caption:Information Hazards: A Typology of Potential Harms from Knowledge,completed:202105081200,created:20210508155933598,medium:article,modified:20210610013116117,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://nickbostrom.com/information-hazards.pdf,year:2021,text:Article by MrNickBostrom on various ways that the disclosure of true information can be harmful.\n\nBostrom treats this more as an explication of the possibilities than a discussion of what we should do about it, perhaps partly because there are so many different types of possible hazards. He does suggest two possible approaches: (1) largely ignore information hazards in terms of general policy, reasoning that most of the time the value of new information is greater than the information hazard; (2) identify areas that could pose future hazards and try to reduce the attention on them (presumably because active suppression usually doesnt work; see StreisandEffect). Outsiders would need to be involved in determining what should be deemphazised, because people cannot be expected or trusted to be impartial about their own work and ideas.\n\nA good set of possibilities to think about when making decisions about what to share and work on, at the very least. I have called out the most interesting components of the typology in InformationHazard.\n\nEmbedded full text: information-hazards.pdf},{title:InformationIsFundamentallyConnections,created:20210611120719871,description:Information is fundamentally made up of the logical relationships between ideas.,es:possible,modified:20210616024159591,tags:Information Creativity Language Public Idea,type:text/vnd.tiddlywiki,text:From a fascinating discussion with a philosopher discussing the weaknesses of my language metaphor in Grok TiddlyWiki|https://groktiddlywiki.com/read/#Slicing%20Up%20Content:\n\n> As with the sentence “Its raining,” the linguistic structure may lead us to the false illusion that information itself revolves around settling on a single noun (“it” -- as the intersection of time and place?) and then predicating something of it.\n\nMy intuition is that “information revolves around a noun” is indeed incorrect in both ordinary cases as well as pathological ones like “its raining,” or at the very least its a vast oversimplification -- which begs the question, what //does// information revolve around? (Of course, there doesnt have to be a single answer. But the question seems interesting nonetheless.)\n\nIf I had to pick, I’d say the real structure of information revolves around the relationships between ideas. Maybe this is a human-brain-centric view of information, but that seems to be our structure|ConceptWeb at least: we can only retrieve and process information as it relates to other information. Similarly, this is the structure of predicates, or sentences, or even broad theses which we support by providing lots of other information. Its also, as I recall, the foundation of Lojban grammar -- the “verbs” (a horrible misnomer, since they behave quite differently) arent actions or linkers, but words that express a particular logical relationship between a number of things. This is a fractal relationship: there are small phrases or sentences that are based on the relationships between things, paragraphs or broader ideas, ideologies, etc. The actual //things// being related are important only to provide a medium for the relationship to work in.\n\nThis would seem to explain why TiddlyWiki works so well. If its substantially improved ability to relate pieces of information compared to traditional text actually lines up better with the structure of information itself, then no wonder.\n\nThen again, are the two of us just showing our biases? One of us is a philosopher who sends long, pedantic emails about metaphors in technology textbooks published on the web, and the other is a TiddlyWiki promoter, computer programmer, and self-proclaimed intellectual eclecticist|EclecticMind. //Of course// we think in predicates and relationships! But for once I dont think so; this feels more fundamental and lucid.},{title:InformationOverload,created:20200908224652661,modified:20200908232334462,tags:Index Public,type:text/vnd.tiddlywiki,text:The modern state of encountering and having to wade through too much information.\n\nStrategies:\n\n* AvoidOverreading\n* FocusOnClassics\n* Focus on things that can be put into a RetrievalContext (see ContextFreeInformation)\n* Use TimeFilters\n* Use PersonalDocumentation and a SpacedRepetition system so you have less need to go out in the wide world of information so frequently\n\nResources:\n\n* HowToSlowDown2019\n* FightingInformationOverload2020},{title:InfrastructureAsCode,created:20200521164616570,modified:20200521212551556,tags:Software Code AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:Agile and DevOps discipline in which virtualization and cloud infrastructure is used to allow configuration files checked into SourceControl to provision and configure hardware (or virtual hardware). Allows hardware to be managed as easily as software. A form of ConfigurationAsCode.\n\nFirst brought to many peoples attention in ContinuousDelivery.},{title:InherentlyFunny,created:20200422235816789,creator:soren,description:A list of things that are inherently funny, collected over a few years.,es:mythological,modified:20251023201349622,modifier:soren,tags:Humor SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Formerly a list in RandomThoughts, \u003C\u003Crt 7767>>. Now maintained here.\n\n!! Things That Are Inherently Funny\n\n* Liechtenstein (\u003C\u003Crt 6555>>)\n* waffles (\u003C\u003Crt 6396>>)\n* cupholders (CB48.36-7)\n* toasters\n* turkeys (SR ~TurkeyInTheRoad)\n* pants, especially when malfunctioning in some way\u003C\u003Cfnote \Considering only legal stories from a single blog, see, e.g., The $65-Million-Pants Case, Year 16|https://www.loweringthebar.net/2020/06/lost-pants-case-year-16.html, Lawyers Pants on Fire During Closing Argument|https://www.loweringthebar.net/2017/03/lawyer-pants-on-fire.html, Plaintiff Who Was Pantsed Appeals Six-Figure Verdict in His Favor|https://www.loweringthebar.net/2013/12/pantsed-plaintiff-appeals-1.html.\>>\n* ducks\n* toilets, especially toilet seats (\u003C\u003Crt 8663>>)\n* Bundt cake\n* snails\n* forks\n* hippopotamuses\n* glue, when it glues something that shouldnt be glued (cf. DahlGlue)\n* bassoons\n* farts\n* refrigerators\n* noses\n* bouncy houses},{title:InPraiseOfTheGods2020,author:Simon Sarris,caption:In Praise of the Gods: What the Rationalistic World Forgot,completed:20210701200000000,created:20210702020203566,medium:article,modified:20210703014255893,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://simonsarris.substack.com/p/in-praise-of-the-gods,year:2020,text:An excellent and very well-written summary of the dangers of expanding rationality to places it has no business being. In the essay, MrSimonSarris gives a number of examples of this (me talking back and adding in sub-bullets):\n\n* Apologetics is silly as a genre; attempting to prove religion is “a positively atheistic way of pondering the divine.”\n** Interestingly, perhaps weakening his point, I dont think it is in fact as popular nowadays as it once was, at least in scholarly circles.\n* Modern architecture is a complete disaster, as I have noted in Questions. The QualityWithoutAName is essential but everywhere lacking. Le Corbusier didnt manage to demolish Paris, but his ideas linger in new buildings today, which are virtually never livable.\n* Architecture, and most of the rest of the world, used to be //art//. It was handcrafted, built up over time often by the people who used it, connected to real needs; compared to what we have today almost magical. On this level, even the richest people today are artistically impoverished.\n** Counterpoint: do we know what level of penetration this kind of design actually had historically? Are we just accidentally cherry-picking the best examples? But then, I suspect the mindset of ancient people enabled them to see this kind of beauty in even fairly average things.\n* We lack stories. Many people never tell, listen to, read, or write stories of the great cultural and mythological kind anymore. We have “summarized” the lessons in them, which causes them to lose their impact entirely.\n** N.A.: How does this relate to the project of SpacedRepetitionForFiction? I dont think my suggested approaches are missing the point, especially since it is intended as a supplement to rather than a replacement for stories, but perhaps it is more important than Ive previously thought to include //details// in the reflected story of the cards.\n* Tradition (a “greater intuition that exists outside of ourselves,” which feels very Jungian but probably rightfully so) is disrespected.\n** I remarked on this in ToolsForThinkingDontWow: with no shared tradition, its hard to convince people to adopt or even seriously consider new ways of thinking.\n* Myths lead to common culture, to metaphors, to thoughts. Today, we have no “mythological education.”\n** Dont we? I dont think we have the right //attitude// toward myths, but Im a little suspicious of this claim. Maybe its a matter of degree.\n* Our understanding of science is completely broken. (See ScienceVsScientism.) Alchemy was more honest than science, because it treated understanding as a process. Science as traditionally understood claims to know things. (See also StudiesDontProveThings.)\n** See FixingScience for more thoughts.\n* Religion is mostly passed by.\n** Sarris doesnt really mention this point, but even those who are “religious” today often leave out rituals and liturgy, which are a big part of the point of religion. Even I dont do that good a job at involving ritual in my life, and Im quite conscious of this as a problem.\n* We dont have to be able to prove things to enjoy them or find meaning in them.\n** See especially AcceptanceVersusBelief.},{title:InputStrength,caption:Input,created:20201026180932076,description:You collect things.,es:confident,modified:20210509005746745,tags:Psychology Information Public Idea,type:text/vnd.tiddlywiki,text:Item identified on the StrengthsFinderReport:\n\n{{!!caption}} -- \{{!!description}}\\n\n* Also no kidding (source: the webpage you are currently reading).\n* Comes with finding a variety of things interesting|EclecticMind, and reading/traveling/exploring for the purpose|ExploratoryWalking of obtaining new items/ideas.\n* \Your inventive mind usually generates more possibilities than you can handle or fund\ -- //called out//, man! Thats why I have trouble finishing projects without someone forcing me to...I always come up with something new and exciting to do. Especially since I tend to tackle the projects by myself.\n* \Your attention to detail works to your advantage when you are addressing experts\ -- and though it doesnt say this explicitly, works to my disadvantage when addressing non-experts: Im quite bad at figuring out what things are clear to non-experts and how much detail someone needs. (I //usually// go off the rails into an involved explanation of technical details, because thats what I would want. One of the many failures of the GoldenRule.)\n\n!! Suggested action items\n\n* Continue exploring opportunities to share ideas (Im doing OK; see TheControlAltBackspace, ZettelKasten, my 3 gazillion pages of work documentation, my 20+ open-source|OpenSourceSoftware projects...).\n* Use systems such as Kanban to avoid starting more things than I can finish, and some system to keep track of possible future ideas. Get better at Prioritization.\n* Make sure others know I am happy to answer questions.\n* Make sure others know they can stop me if I go off the rails.},{title:InquiryConcerningHumanUnderstanding1748,author:Hume,bibliography:LifetimeReading,caption:An Inquiry Concerning Human Understanding,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214035223,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1748},{title:Instacart,created:20240402012600467,creator:soren,modified:20240402012604610,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:InstitutesOfTheChristianReligion1536,author:Calvin,bibliography:LifetimeReading,caption:Institutes of the Christian Religion,created:20210703170128000,genre:Religion,medium:book,modified:20210705214035238,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1536},{title:InstrumentPairBonding,created:20200831012329897,creator:soren,es:likely,modified:20221002151042803,modifier:soren,tags:Music InterpersonalRelations PersonalMythology Sociology Metaphor Identity Public Idea,type:text/vnd.tiddlywiki,text:MrNiklasLuhmann argues from subjective experience|CommunicatingWithSlipBoxes that a ZettelKasten can provide conversation. From which I started to wonder: what other inanimate objects and mental constructs take on some aspects of human relationships? I dont just mean personification, or even animism exactly, but that we actually develop a personally felt relationship, even if not in the same terms.\n\nI think there are two levels here. One is that when you use a tool a lot, it feels like an extension of yourself. For instance, your car or your chefs knife or your phone or your favorite keyboard might fit into this category. (You might also have categories of extensions -- e.g., you probably dont have any particular attachment to one specific pencil, but you might have a favorite brand that feels exactly right.)\n\nIn the second level, you and the tool evolve together. For instance, take a good-quality violin. Every half-decent violin is custom-made and unique, and once youve been playing it for a while, you get a feedback loop where you learn how to draw out its sound and idiosyncrasies better, and it teaches you to play a different way to take advantage of it. You dont exactly change it (except occasionally in superficial and mechanical ways, like putting on a different chinrest or brand of strings), but a kind of mutual understanding develops. It is rather like Grokking, but for a physical object.\n\nIve noticed the same thing with my rowboat|AwkwardAnnie. Rowing a relatively simple boat like this one well is not as challenging as playing a violin well, but in some ways the experience of merging with the boat as you row is even more clear since both your hands and feet are fully consumed by the oars and footstop, and some of the motive force goes right through your body into the boat. Last time I forgot to playfully thank the boat for a good excursion when I put it away, I actually felt slightly guilty about it!\n\nIm quite willing to call this pair-bonding in the same sense that Luhmann calls his ZK a conversation partner. A protective feeling grows up; I know a number of violinists and other musicians who have intentionally injured themselves to avoid damaging their instrument, and its not just because of the price. If my place ever catches fire and I have thirty seconds to save something, my violin is at the top of my list (I actually have a list in my emergency binder and in my head). And nobody else is allowed to play that thing unless theyre also a violinist and understand what theyre getting into. Subjectively, its a lot more than an object! “Instrument” doesnt really seem to have the right connotation. It has a life of its own.\n\n\n!! References\n\nIn LaBelleSauvage2017, the relationship of a reader to their alethiometer is multiple times characterized as that of a lover, particularly with regard to their touch on the instrument, but also with regard to some instruments working better with specific people than others.},{title:InsufficientlyReflectiveWriting,created:20200814150843157,creator:soren,description:Excessive, uncontextualized note-taking without adequate reflection and perspective-shifting leads to uninspiring writing.,es:likely,modified:20220505014612977,modifier:soren,tags:PersonalDocumentation Writing Imagination Creativity Public Idea,type:text/vnd.tiddlywiki,text:Writing that manifests as a series of ideas that one has pulled from various sources is bad writing. For instance, the author of TakingNoteZkCritique shares this anecdote:\n\n> My Doktorvater once criticized a book by saying that he could still see in the text where one 3×5 card ended and the other one began. It struck me as an appropriate -- and devastating -- criticism of the author.\n\nThe source linked above lists out a variety of other nasty criticisms thrown at various authors in the early 1900s. The claim seems to be that keeping an index of quotes, or even having a method of thinking that //acts// like one (cf. EclecticMind), poisons ones writing.\n\nModern ZettelKasten, I would argue, improves on this by largely requiring re-paraphrasing of the idea, requiring a certain integration into the authors perspective (see WritingIsThinking). Of course, one can still end up producing a discursive treatise that mimics a series of notes in ones Zettelkasten (arguably MrSönkeAhrens did this in HowToTakeSmartNotes, and source mentioned above says Luhmanns books read a bit like this). That said, when youve at least //thought// about the content (reflection!) and that shows through in your writing, it comes off as a matter of a style that some people might dislike.\n\nAt a very minimum, its important to recognize that this is the tendency when you take lots of notes. I am not inclined to believe its not possible to counteract.\n\nSee also LinearVsTiddly -- proper writing has been re-linearized. Also cf. ResharingCulture, a more rapidly iterating version of the same thing.\n\n\n!! References\n\n> What an abuse it is to associate with great minds and to get from them nothing but formulas! And how clearly it will appear when, in writing ourselves, we want to utilize them! Such parroting is speedily seen for what it is, and it is soon evident that the writer is a nobody.\n> ---IntellectualLife1946, MrAgSertillanges, pp. 170--171\n\n\u003C\u003Cclarify>>\n\n> You exist in full if and only if your conversation (or writings) cannot be easily reconstructed with clips from other conversations.\n> ---BedOfProcrustes2010, MrNassimNicholasTaleb, p. 41},{title:IntellectionStrength,caption:Intellection,created:20201026180924174,description:You like to think.,es:confident,modified:20201110200554750,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Item identified on the StrengthsFinderReport:\n\n{{!!caption}} -- \{{!!description}}\\n\n* No kidding.\n* Good at working deeply|DeepWork -- if I can find the opportunity to do so -- and solving problems, identifying opportunities, poking holes in plans.\n* Comes with introspection, introversion|IntroversionAxis, and maybe a bit of spaceyness (is that a word?) and background activity. High NeedForCognition.\n* There is an interesting note that the focus on inward thought means youll have less free time to spend with others and you mostly have to accept that.\n\n!! Suggested action items\n\n* Build relationships with more \big thinkers\.\n* Get involved in projects early.\n* Make sure others know that being challenging and pointing out ideas that are wrong is appreciated.\n* Find/create discussion groups.},{title:IntellectualHumility,created:20201201032425490,creator:soren,description:You may be wrong about almost anything, and you should act accordingly.,es:confident,modified:20250204041038590,modifier:soren,tags:PhilosophyOfLife Reasoning Public Favorites Idea,type:text/vnd.tiddlywiki,text:You know less than you think you do. You are probably wrong about some of the things you think are certain. You could be wrong about //almost anything// outside the realm of concrete, personally observable facts (e.g., there is a pot sitting on your stove), and even sometimes about some of those (e.g., see OpticalIllusion).\n\nThere is a strange hubris that seems to persist in almost every age. Surely //we// are the most socially conscious, woke, scientifically accurate, democratic, powerful people on earth, this year, this country. We couldnt possibly be wrong! say the same people who just a couple of generations ago thought physics was deterministic, denied women the right to vote, couldnt win a war against the revolutionaries in the tiny peasant economy of Vietnam, and legally and philosophically supported literal chattel slavery.\n\nBy all means, think big|SelfBelief. Thats great. I wouldnt be here writing if I didnt support it. I love thinking, and Im sure Im often right to one degree or another, as most people are. But dont lose sight of your inherent inability to know whether youre right. Its only history that can start to pile on enough evidence to make the call on whether youre right or wrong...and even after 2,000 years, the winds could shift again. Whether you believe there is an absolute truth of the matter or not for any given idea, we, living at a particular time, will never know for sure that we are right about something.\n\nIntellectual humility consists in:\n\n* admitting that you dont know|IDontKnow when you dont even think you know;\n* understanding that things that are good for you may not be good for others|ThingsArentGoodForEveryone;\n* recognizing that science cannot truly prove anything|StudiesDontProveThings but only provide weaker or stronger evidence;\n* using a DesignApproach to ones own abilities, not trying to do something that requires extreme amounts of willpower, foresight, or correctness;\n* being willing to ChangeYourMind when circumstances call for it;\n* recognizing that fewer things are true yet more things are useful|UsefulNotTrue than you probably naturally think.\n\nGood science (not scientism|ScienceVsScientism) takes place in a system that recognizes that most theories and studies will be completely wrong; SturgeonsLaw applies. The ScientificMethod allows human knowledge to continue to advance even in light of this fact. Agile|AgileHumility does the same thing for productivity and goal-driven projects.\n\nIn the realm of personal skills and expertise, the idea of SingingLessWrong is similar: we can only approach rightness, or Perfection, and we should instead seek to do things //less wrong//.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> It is wrong from beginning to end.\n\n---The Caterpillar, AliceInWonderland, when Alice says the poem she attempted to recite “wasnt quite right”\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\n> Alchemy was the last honest science, because it purported to seek things, and the others purport to know things.\n\n---InPraiseOfTheGods2020\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\n\n\u003C\u003C\u003C\n\\\\nLet me disclose the gifts reserved for age\n To set a crown upon your lifetimes effort.\n. . .\nAnd last, the rending pain of re-enactment\n Of all that you have done, and been; the shame\n Of motives late revealed, and the awareness\nOf things ill done and done to others harm\n Which once you took for exercise of virtue.\n Then fools approval stings, and honor stains.\n\\\\n\u003C\u003C\u003C\n\n---T.S. Eliot, “Little Gidding,” mvt. 2\n\u003C/$m2.x>},{title:IntellectualLife1946,author:A.G. Sertillanges, O.P,caption:The Intellectual Life: Its Spirit, Conditions, Methods,completed:202101311200,created:20201119201925575,creator:soren,format:paperback,isbn:9780813206462,medium:book,modified:20240402011639355,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1946,text:Didactic book by MrAgSertillanges about, well, being an intellectual. A lot of it really applies to any kind of serious knowledge work, whether we would today consider it “intellectual” or not, though it certainly also talks a lot about your duty to find truth and follow God and so on and so forth.\n\nThis is a //beautiful// book, in the best sense of that word. It is eloquent, at least as read in translation by Mary Ryan, and makes everything seem important and infused with meaning. It is a little bit humbling; at least in my circles, we feel like we invented all these productivity hacks and ideas of craftsmanship|CraftsmanMindset and depth|DeepWork and whatnot in the twenty-first century, but as seen through Sertillanges eyes, many of them go back to at least the medieval period. I used almost an entire tin of BookDarts on flagging sentences I found were particularly pithy expressions of ideas. It is for primarily this reason that Ive labeled this a //good// book, a rarity for an essentially practical book: it covers a lot of territory and presents ideas that have been important for centuries.\n\nI wouldnt say there was much //new// in the book, in the form of ideas Ive never heard before, but its not really about that. Its more an inspiration, a mission statement, a manifesto. At least for me.\n\nIf you cant stand a little bit of Catholic moralizing, a slightly elevated view of the intellectual (though I wouldnt call it exactly elitist), or a wonderfully free and metaphorical|Metaphor view of the world, dont even try reading this. Otherwise, you might enjoy it. You not only can read it in little bits and pieces, you probably should; its not terribly engaging read end to end all at once, but a section or two every couple of days is great fun.},{title:IntellectualLifeOfTheBwc,author:Jonathan Rose,caption:The Intellectual Life of the British Working Classes,completed:20210208,created:20200712031934992,format:ebook,isbn:9780300088861,medium:book,modified:20210606223423284,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2008,text:The Intellectual Life of the British Working Classes, by MrJonathanRose, chronicles, well, how working-class British people became educated and related to literature and similar concepts. MrPhilipPullman recommended this somewhere in DaemonVoices, and Ive read in several reviews that MrNoamChomsky also recommends it to people. So in good hands. :)\n\nIt is extremely //long// (544 pages according to Amazon -- my Kindle edition doesnt have page numbers -- and it took me several months of fairly consistent reading to get through), and perhaps a little bit dry, but highly informative and overall pretty enjoyable. The author overused quoting|RoleOfQuoting a bit much in my taste, but on the other hand memoirs are often one of the only things one has to go on here, so presenting lots of primary-source material may make sense.\n\nIf there is a primary message, it is probably that high culture was not just for the rich, bourgeois, intellectuals; significant numbers of “uneducated” people found, experienced, enjoyed, related to, and repurposed/appropriated Great Books™ and Shakespeare and Homer and Plato and, well, pretty much anything they could get their hands on. Many of them even came to understand it all pretty well. They werent culturally separated from it too far to relate, and they found them relevant to themselves even though it may have been in a different way than people belonging to other classes and times (see ImplicitFictionalContext, though this applies also to non-fiction). A lot of them became SecondShiftIntellectuals.\n\nThis is not, however, to say that everyone was like that, by any means; in many places one village would be enormously cultured and one 3 miles away would be hardly at all. It seems like a couple of people getting interested could get a whole lot more interested, and certain subcultures (maybe not exactly the right term?) like Welsh miners were famously autodidactic, while many others were unremarkable.\n\nThe book ends rather sadly, pointing out that it all seems to have disappeared. Part of the problem may be the use of high culture as a status symbol; this led to increasingly obscure and Bohemian varieties of modernism and academia that have turned into, well, not necessarily good art and meaningful discourse, and material that requires a great deal of investment to understand at all. But of course there are many cultural trends that have led this way, including the increasing pluralization of everything.\n\nSome of this story seems highly, highly relevant today. I think part of the dissolution of science|Science nowadays is related to its increasing disconnect from real, everyday people. It might be hard to save high literature (not to say it wont eventually come back), but I wonder if a transformation in the way we consider science would still be both possible and valuable.},{title:IntelligenceAndAugmentation,created:20210627023542880,description:Can people who are of below-average intelligence find meaningful work in a world characterized by augmentation?,es:likely,modified:20210627035556039,tags:AI Employment Futurism Public Idea,type:text/vnd.tiddlywiki,text:A challenge that seems fairly unaddressed in OnlyHumansNeedApply2016, and a major problem for the claim that augmentation|AugmentationVsAutomation is the solution to machines taking our jobs: more or less all the methods presented for changing your approach to be a suitable candidate for augmentation seem to require moderate intelligence. What about the people who cant meet that bar?\n\nThe authors of OHNA dont like the UniversalBasicIncome approach to handling increasing automation, saying that its better for people if they work. They cite a wide variety of evidence. And thats fair -- I even agree that at least some work is good for people -- but is it practical for everyone to work in the traditional sense in the 30-years-hence world if automation continues at the current rate? It doesnt matter if its good if its not practical. And I havent been convinced that its practical.\n\nIm not worried about myself, and I wouldnt be even if I didnt work in tech -- but thats not because I think my job is inherently unautomatable (I dont think anything is inherently unautomatable, its just a question of which problems prove tractable and on what timescale, and I see this as virtually impossible to predict). Rather, its because I am a smart and adaptable person, and unless I am ridiculously unobservant I will notice that my current niche is disappearing and be able to find a new one|Polyspecialization that works well for me, even if exactly what that is changes frequently. But everyone is not me|ThingsArentGoodForEveryone. “Just learn to program the robots” is not an answer for some people, becoming an expert on a narrow field of knowledge is not an answer for some people, etc. -- and the skills needed for each category overlap sufficiently that there seem to be some people completely left out.\n\nMaybe I am being too pessimistic here, but given that, say, 1 in 7 American adults are functionally illiterate|https://www.intellectualtakeout.org/blog/32-million-us-adults-are-functionally-illiterate-what-does-even-mean/, I dont think so. If you can barely read, you have almost no ability to take on any of the roles the authors suggest except stepping aside|WaysOfStepping. If you arent particularly intelligent //and// you dont have good people skills (a part of nearly all the stepping-aside roles, because thats what machines really are inherently bad at), which cant be that uncommon, then it seems to me you are screwed. There are probably some jobs in this area that dont require either, but the number will likely decrease as machines manage to take over areas that were easier than we expected, and are there enough for all the people in that category?\n\nThe authors claim that social and emotional skills can be improved, and I bet they can, but can you improve them //enough// to be competitive when youre confined to a slice of the job market and facing stiff competition? This isnt clear at all, and I am skeptical (these seem to be mostly talents|SkillsKnowledgeAndTalents, meaning we can reduce the impact of our weaknesses, but not turn them into strengths).\n\n(It continually amazes me how easy it is to //completely forget// about the lower end of skill scales, whether thats computers, reading, cooking, whatever -- when youre near the top. It becomes such second nature that you can hardly understand what its like to have so little skill, and as a result you vastly underestimate the number of people down there. Like, I started learning to read when I was 18 months old -- I was quite a precocious child -- and now I read something or other almost the entire day and only struggle at all with the very densest texts; the idea of struggling to read something at a normal level is more or less unimaginable to me. I doubt the OAs do much better.)},{title:IntelligenceEffortSynergy,created:20221115192813081,creator:soren,description:To succeed, is it most important that you keep doing anything at all, or do exactly the right thing?,es:possible,modified:20240616041404374,modifier:soren,tags:Idea Productivity Public,type:text/vnd.tiddlywiki,text:There are two somewhat contradictory schools of thought about what leads to success:\n\n# The primary predictor of success is how consistently you //do anything at all//. The main way you fail is by giving up. (Cf. PowerOfKonsistency.)\n# The primary predictor of success is how consistently you //do the right thing//. Using some Metacognition and DeliberatePractice will allow you to improve rapidly, while you can do something for hundreds of hours without them and never get much better, because you waste your practice time on things that you arent bad at, that arent the HoleWhereSuccessLeaksOut, or that dont matter at all.\n\n(Another element, and a very important one, is DumbLuck.)\n\nUltimately, I think these are both true, because they feed into each other. #1 is deeply true because the vast majority of serious projects never really get going at all. You need momentum|SuccessfulMomentum to do something big like write a book or learn to play the piano, and the only way to develop momentum is to keep showing up, even when you dont want to and you feel like youll never make any progress. Its better to do something|JustGetStarted than to do //nothing//, even if what youre doing isnt particularly useful. #2 is deeply true because doing something useless, well, isnt useful|WorthlessEfficiently. Once youve managed to develop your motivation, steadily working towards doing high-value tasks and efficient practice for a larger and larger percentage of the time you spend on the project will improve your progress enormously.\n\n!! References\n\n> The “one weird trick” is that, for a lot of activities, being something like 10%-ile among people who practice can make you something like 90%-ile or 99%-ile among people who participate.\n> ---https://danluu.com/p95-skill/},{title:IntelligentUseOfSpace1993,caption:The Intelligent Use of Space,created:20200516164441054,medium:article,modified:20210611031707118,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:http://adrenaline.ucsd.edu/Kirsh/Articles/Space/AIJ1.html,year:1993,text:Article on how people use physical space to organize tasks as part of our planning, identified as a strangely unconsidered area of research.\n\n{{!!url}}},{title:IntentionalSpoiling,created:20240718042847970,creator:soren,description:To unblock yourself, do something really badly on purpose.,es:likely,modified:20240811175118294,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Sometimes to get yourself out of a rut where youre unwilling to proceed because you are too worried about getting something perfect, it can be helpful to do something that is intentionally really bad, or in a really silly way. This has several beneficial effects:\n\n* It gets you doing //something//, whatever that is. Getting started|JustGetStarted is usually the hardest part, so this is a big deal.\n* Whatever you do next seriously will probably be better than whatever you do first (intentionally silly or bad), so it will look good by comparison. Youve changed your anchor from something that is unattainable (perfection|Perfection) to something thats trivial to beat.\n* It gets you used to doing badly, and seeing that doing badly is often a step on the road to doing well, so it doesnt feel so bad next time.\n* Once in a while, you might even get lucky and produce something good without trying to.},{title:InteractionsThatMatter,at:202407121900,author:L.D.|PrivatePerson,blurb:It’s the connections and interactions that really matter in, well, everything. This includes Religion, Politics, Family, Relationships, Physical Matter, Energy, Subatomic Particles, Oceans, Mountains, People, Planets and even Reality itself. The math and experiments of Quantum Physics suggest that a state of being doesn’t exist until the observer interacts with the observed experiment. A political state (e.g. a country or government) does not exist unless there is interaction between the people and their government. A family is defined by the interactions of its members (biological parents and abandoned children do not constitute a family). A religion is defined by the interactions between adherents and their God. Nothing exists and nothing matters on its own. Things exist and things matter only with interactions to define/create them. If you adopt this perspective, life will make more sense. You’ll consider life from the perspective of the interactions you have, rather than from unconscious assumptions about: ideologies of right/wrong, good/evil; objective states of being; duality/nonduality; expectations about what it means to be a mother/father/sibling; etc. This roundtable discussion may include some philosophical meaning but will intentionally focus more on the practical implications and usefulness of this perspective for the average person in everyday life.,caption:What Do Sex, Quantum Physics, Religion, Government, Family, and Community Have in Common?: It’s The Interactions That Really Matter,conference:2024WildGooseFestivalTrip,created:20240718030648766,creator:soren,medium:conference,modified:20240730031047523,modifier:soren,rating:average,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:The presentation part at the beginning was bad; the presenter read his handout to us verbatim (and, on top of that, the typography of the handout was terrible, with small text and excessively long and undifferentiated lines, so he kept losing his place). Fortunately, the “presentation” (if you can even call it that) was only about 15 minutes, and the rest of the session was facilitated discussion, which was much better. Lots of interesting people there jumping in.\n\nThe ScienceTent is a small tent with a few picnic tables. Originally it was a lounge for upcoming speakers, and the extra space got used by people hanging out and having a drink and talking, and some years ago it became called the “Science Tent” as a weird in-joke after someone fished a fly out of their drink and it survived after looking like it wouldnt, and someone joked it was a science experiment. This year they decided to run with the idea and try to actually put some scientific things there, and have it revert to its old identity after dark.\n\nWe were invited to return at 9 for more discussion on the philosophy and science rather than the practical consequences (the focus here). Charles and I started talking about the explosion of permutations (e.g., with that parable about putting one grain of rice on the first square of a chessboard, two on the next, etc.) afterwards. We got kicked out of the tent because the next session was starting, but agreed to return at nine. See InteractionsPhilosophyConversation.\n\n!! Topics\n\n\u003C$m2.x number\1\>\n\nGiven the IFS session this morning|ConnectingWithOurParts, I was reminded of this claim by MsMaryWatkins from InvisibleGuests1986:\n\n> Truth...is not the province of a single voice, but arises between the voices at the interface of the characters multiple perspectives.\n\nAnd I wrote of this in an email to MrHenrikKarlsson not too long ago, on “Writing as communion,” discussing some ideas related to ProcessOfYou:\n\n> Presumably this is just as true between physical people. The conflict (or difference, or whatever you want to call it) discovered in interaction creates the meaning (or maybe //is// the meaning?). Thus, people who are more idiosyncratic have much more potential to help you become...whoever you are, or could be.\n\nI brought this up, addressing it to the leader of the IFS workshop because she was next to me and said something else about IFS.\u003C\u003Cfnote \I like the size of the festival this year. Its small enough that you keep running into the same people and make cross-disciplinary and cross-context connections, but its large enough that there are many people to connect with who are interested in the same fairly specific things as you.\>>\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\nI wanted to talk about M2|MosaicMuse, but didnt get around to it. I had a long email discussion with a philosopher about this related to GrokTiddlyWiki, discussed in InformationIsFundamentallyConnections. The framing of “interactions” rather than “connections” or even “relationships” is new and interesting, though. Ideas arent, or shouldnt be, static, at least when they are held by and argued for by people (who are themselves processes|ProcessOfYou, not static). And the goal of a ZettelKasten-like system is specifically to allow the ideas to have a conversation over many years and not be static, as if they were held by different people. You want to be able to join the conversation within your ZK|CommunicatingWithSlipBoxes.\n\n\u003C/$m2.x>\n\u003C$m2.x number\3\>\n\nPolitics fails when people dont actually attempt to //talk// to the others they disagree with. That then leaves us with no interactions, and no meaning, just shouting. Probably similar: FriendshipUnserious.\n\n\u003C/$m2.x>\n\nTwo things to look up:\n\n* Process Philosophy / Theology (the philosophy is most associated with MrAlfredNorthWhitehead, who I like anyhow)\n* Authentic Movement (a spiritual practice involving people moving with their eyes closed in front of a “witness”; this somehow often results in people doing weirdly synchronous things)\n},{title:Intercom,created:20240402012547789,creator:soren,modified:20240509144254464,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:InterestingSpacedRepetitionMaterial,created:20200707234726067,creator:soren,es:likely,modified:20240606134225618,modifier:soren,tags:Memory Psychology Public Idea,type:text/vnd.tiddlywiki,text:Several sources, including Gwern|SpacedRepetitionForEfficientLearning200903, Nielsen|AugmentingLongTermMemory201807, and rs.io|TenThousandFlashcards2014, have suggested that keeping up with and particularly getting started with SpacedRepetition is hard (from a motivational perspective) and that the cure is to pick something that youre excited about to study. Studying things that you think you “should” know is seldom successful or enjoyable, especially at the beginning. Studying things you really want to learn, or that have an extremely obvious connection to your life, is much more likely to succeed (and probably more valuable, the cultural or intellectual importance of the stuff you “should” know notwithstanding).\n\nI think this also explains why people dislike and attack “rote memorization” in the first place. Memorizing things that youre interested in and are currently relevant in your life, in context, is neither difficult nor unpleasant. Memorizing things that you dont care about, that are in a different form than you will use them, and that are disconnected from anything else, is both difficult and unpleasant. Whether you are “memorizing” something is almost irrelevant.\n\nExtended discussion of why knowledge is valuable and what knowledge is worth remembering in What to Learn with Anki|https://controlaltbackspace.org/learn-what/ on TheControlAltBackspace.\n\nMore on building the habit and being convinced to consistently use an SRS in DevelopingIntrinsicSrMotivation.},{title:InternationalRoseTestGarden,created:20250623162322450,creator:soren,modified:20250623162323251,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:InterpersonalRelations,created:20201222205940393,creator:soren,es:confident,modified:20231203232036853,modifier:soren,tags:Public Definition Idea,type:text/vnd.tiddlywiki,text:Discussions of the dynamics of interactions and established relationships between people. See also the more specific Friendship and Romance.},{title:InterpretationOfDreams1899,author:Freud,bibliography:LifetimeReading,caption:The Interpretation of Dreams,created:20210703170128000,genre:Science,medium:book,modified:20210705214035246,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1899},{title:InterpretMl,created:20200529192421087,modified:20200529192438386,tags:Software MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePerson tool for assisting with ModelInterpretability of models developed on their platform.},{title:InterstateStatePark,created:20231205033130671,creator:soren,modified:20240509144328116,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:IntimacyFocus,created:20250307041247639,creator:soren,es:personal,modified:20250309154458220,modifier:soren,tags:Idea ManualForMe MindIntercourse Identity Public,type:text/vnd.tiddlywiki,text:I think I realized recently that almost all of the things I value center around experiencing intimacy with the other. Some words that essentially mean the same thing to me in somewhat more specific contexts: love, wild generativity|WildlyGenerative, unity, pair-bonding|InstrumentPairBonding, form-context fit and place|PlaceFascination, fluency, flow|FlowState, grokking|Grokking.\n\nIntimacy is a process, one that co-evolves with the identities of its participants|ProcessOfYou. It is positive-sum, an emergent phenomenon with its own identity, greater than the sum of its parts, and a thing of its own.\n\nI considered even focusing my recent debugging talk around intimacy! Because I think its actually related: you want to converse with the code, be surprised by the code, get yourself in among the code (literally, under-stand it). How do you achieve that? Well, same way you do with humans or with other ideas.\n\nMy PersonalMotto is not very far off either: come to know and share love and beauty. Beauty is potentially something you can experience at a distance, but its certainly enhanced by closer connection to it.\n\nI spent a lot of my early life focusing on intimacy with ideas, and to a somewhat lesser extent places and maybe items|InstrumentPairBonding, and have only recently come around to tackling people. Who I had underestimated for whatever reason, theyre rather rewarding. (Even people you wouldnt naturally get along with, or wont for very long, are rewarding, fascinating to come to know\u003C\u003Cfnote \I think this phrase is very tightly connected with intimacy for me actually. That description of it as a gradual process, one that results in continuous enhancement of knowledge.\>> precisely because they are so different.) Also very complicated though, and by no means the only game in town.\n\nNot only do I want to experience this, I want to help others experience it too (although the act of doing this can also be a form of intimacy!). I think this is why I like teaching. See also my recent interest in finding better ways to build community.\n\n\n!! References\n\n> If you dont know Lisp, you should learn it. (//The Introduction to Emacs Lisp Programming//, available from the FSF through fsf.org, is a good way to get started.) If Emacs feels you are just using it, treating it as an object program, its feelings may be hurt. For real intimacy, read the Emacs source code.\n> ---the Emacs guide},{title:IntimateRelationshipAsPlay,created:20241201061705275,creator:soren,description:Intimate relationships are in part defined by the creation of a long-lasting, highly individual play frame.,es:likely,modified:20251015214914807,modifier:soren,tags:Idea Friendship Romance Sexuality Psychology Public,type:text/vnd.tiddlywiki,text:In WhatHeidiTaughtMe, about a particular unconventional relationship I engaged in, I wrote:\n\n> What is play|Play, but the act of collaboratively drawing boundaries that shut out the parts of the world that arent useful in the play frame?\n\nAs I was writing that, it struck me that this is exactly what happens in a romantic relationship. (I dont think it is necessarily specific to romance, but could apply to any intense intimate relationship, so the title reflects this. Some of the examples may involve sex, etc.; the general idea should apply to relationships where any individual example doesnt fit.)\n\nFrom the moment you meet someone you feel strongly about,\u003C\u003Cfnote \This can happen retroactively. If you dont feel this way about each other at the beginning, you tend to eventually go back and write the story of what things were like then. Maybe this can happen subconsciously, too; I read some study a while ago suggesting that a substantial fraction of “love at first sight” relationships are actually unknowingly manufactured, i.e., people didnt actually have those feelings at the time, it just seemed like the initial attraction was part of an unbroken, continuous chain of feelings such that people come to believe they felt that way from the beginning.\>> some sort of play frame gets created, comprising a shared mythology and language and set of assumptions. The context you begin to share allows you to skip over whole categories of discussion and call back past events, pretending like they were happening now. The frame deepens over time. There is something //silly// about this shared context, but also useful to the project of relating and getting things done.\n\nOne element of many close relationships is a sense that you can insult your partner in certain ways that you otherwise couldnt -- and that, more than the insults just being acceptable, instead of being experienced as put-downs, they are experienced as expressions of intimacy. I think this is both because it is understood that you are not serious, and the fact that the other person is somehow willing to let themselves be “treated that way” because they care about you. Many pet names fall into this category. Or C.S.|PrivatePerson and I have somehow developed a running gag where we say were not actually friends and dont care about each other, and, e.g., have been playing the long game to get a recipe from the other person (which is maybe a particularly great example because making it about the relationship itself goes right to the core of the idea).\n\nObligatory xkcd|https://www.xkcd.com/1100/:\nimg https://imgs.xkcd.com/comics/vows.png\n\nActually, many parts of sex seem like a form of this, too. The things you do to your partner in bed would be wildly unpleasant and disrespectful in any other context, but somehow they instead become deeply satisfying and a source of connection. Maybe this is because they are also //absurd// when taken in the context of normal life. If you were serious when you started doing them, it would be so funny you wouldnt be able to do it at all. But when you work yourself into the play frame, both over time by developing a relationship with the person, and in the moment by having the right thoughts and engaging in foreplay, there is suddenly an entirely different logic where it feels totally normal.\n\n\n!! References\n\n\u003C$m2.x number\1\>\nMaudiverse encyclopedia, “Diminutive names”\n\u003C/$m2.x>},{title:IntjDemisexuality,created:20210101003321001,creator:soren,description:Is there a relationship between personality type and sexuality?,es:unlikely,modified:20230908140341288,modifier:soren,tags:Humor Science Public Idea Sexuality,type:text/vnd.tiddlywiki,text:> Are INTJs demisexual?\n>---Quora question (\u003C\u003Crt 10035>>)\n\nBetteridgesLaw, and CommonSense, would tell us the answer is...“No.” Because thats ridiculous. (Unless we put our pedant hats|HackingPedantryAndScience on and take the question to be, are //any// INTJs demisexual...)\n\nBut the more I think about it, the more curious I get (as I write this, its been about 2 years since I initially encountered the question). Mostly because I believe myself to be both (see MyersBriggs, DemiPerson). Obviously the plural of anecdote is not data, but the plural of anecdote might be “huh, thats interesting.” See MrIsaacAsimov as quoted in AccidentsMakeTheWorldGoRound.\n\n!! What is going on?\n\nIt seems, anecdotally and from thinking about what it means to be both and the definitions and associated stereotypes of both, that the type of person termed “INTJ” does share certain characteristics with the type of person termed “demi.” What is unclear to me is whether this is //coincidence// (these things have different origins inside a persons personality, and the same outward effect, i.e., people dont display sexual/romantic interest in people they dont know well, is observed in people who are both), whether there is a //correlation// (they share some common causes, so that people who are one are also more likely to be the other), or whether foundationally demisexuality //is// essentially the state of having certain characteristics that INTJs are associated with.\n\nOf course, the truth doesnt have to go in one of those boxes. I might have missed a box, or it might go in between them. In fact, Id say it probably doesnt fit neatly, and I hold out little hope well ever be able to put it in one.\n\nThe general lack of understanding of the etiology of asexuality|Asexuality and even the semantics of its terms doesnt help here. Some people would say that youre not demi if its //because// of something other than your intrinsic “sexuality orientation” (e.g., your hormone levels are messed up, or you have an awkward relationship with romance), but nobody knows if thats even a thing or what it means. Others would say as long as you fit the behaviors under that umbrella, you are. (Almost everyone says youre free to call yourself any of the asexual terms if you think they fit you, and its fine and normal to change them later; but thats a different question thats about inclusivity and helping people understand themselves, not about what it actually is.)\n\n\n!! Practicality of studying\n\nThe most obvious way of deciding whether theres anything at all to this worth thinking about or if its just me and a couple people on the internet extrapolating from a crappy anecdote would be running a survey. If a correlation shows up, then there probably is some relationship that might be interesting to dig into. But a general survey appears useless after a quick FermiEstimate:\n\n* I believe I read somewhere that INTJs are around 3% of MBTI-like respondents.\n* Many suspect about 1% of people are somewhat asexual.\n* Supposing demisexual people are 50% of ace-spectrum people (probably generous)...\n* And INTJs are 5 times more likely to be ace than average (also probably generous)...\n* And probably only 25% of people who are demi would know to describe themselves thus on a survey, even if we tried to explain what that meant, because speaking from the experience of myself and a number of demi friends, the HypoCognition is huge...\n\nWe would expect demi INTJs to make up only a tiny fraction of the population:\n\n$$\n.03 \\times (.01 \\times .50 \\times 5) \\times .25 0.0001875 \\approx 0.02\\%\n$$\n\nErgo, even under these assumptions which probably overestimate our surveys ability to capture demi INTJs, we would need to enroll over 5,000 randomly sampled people to expect to get //one// member of our study population! I wont even try to do a power calculation...\n\nThe only practical path would seem to be to intentionally oversample INTJs, or demi people, perhaps by actually running two surveys, one presented to a general audience and one to a forum of such people. But that would likely introduce some subtle and quite problematic forms of bias, since large portions of people who are one of those dont know they are, and whether someone knows they are is highly non-random (e.g., at least as of 2020, people who have heard about demisexuality are mostly curious people who spend lots of time on the internet). Still, it might be enough for a pilot.\n\nOf course, if literally every INTJ were demi, this would all be a bit easier, but that one I can confidently say is a “no.”},{title:IntroductionToArithmetic,author:Nicomachus of Gerasa,bibliography:LifetimeReading,caption:Introduction to Arithmetic,created:20210703170128000,genre:Math,medium:book,modified:20210705214035262,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:IntrovertHangover,created:20230906023345556,creator:soren,es:confident,modified:20231023030738658,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:Delightful term of MsSusanCain (see QuietPower2012) for the feeling you get when youve recently spent too much time with other people, especially an acute one that occurs when youve, e.g., been at a party with a bunch of people you dont know for hours.\n\nFor me this tends to manifest as tenseness and unwillingness to interact. I also become much less chill and more prone to snapping at people, even over minor disagreements. If it gets //really// bad it feels like Im at risk of having a panic attack, but usually as an adult I can tell this is going to happen and disengage long before it gets that bad!\u003C\u003Cfnote \Ive never actually had one with this cause, but I have had to more or less actually run away briefly.\>>\n},{title:InventWithPurpose20200519,at:202005191715,caption:Azure: Invent with Purpose,created:20200518212932926,medium:video,modified:20210522015801889,presenter:MrScottGuthrie MsJuliaWhite MrDonovanBrown MrJeffHollan MrRohanKumar MsAmandaSilver,tags:MicrosoftBuild2020 NeedsExcision Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/80ec2639-35c3-462b-8155-1ef52c29310c,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nMissed the first few minutes doing errands.\n\nMrScottGuthrie moderating.\n\nAzureStaticWebApps -- announced today:\n\n* \Code to Cloud\\n* Uses AzureFunctions as a backend\n* Deployment -- link to your repository on TheGitHub, and it will automatically set up GitHubActions to deploy the app!\n* MsAmandaSilver: Demo of adding a new endpoint\n** Azure VisualStudioCode extension\n** Local testing of the AzureFunctions app\n* Automatic CDN/edge deployment\n* Automatically adds a link to the PR that lets you see the system running in dev!\n* CodeSpaces shown again by MrDonovanBrown (M.|PrivatePersons “Principal Cloud Advocate”) working in the garage.\n\nMrJeffHollan -- manager for Azure:\n\n* Azure Kubernetes Service\n** Added Windows Server containers\n** Azure Private Link\n** Spot pricing support\n\n* Azure Cosmos DB\n** Cheaper options\n\n* Azure Cognitive Services and CognitiveSearch\n** Machine-learning tools that dont need ML skills to get started\n** Personalizer -- recommendation system\n\n* Power Apps\n** Complete low-code environment\n** Looks very much like Power BI\n** Also looks pretty big-buttons, limited-options\n** AI-based functionality (in our case, form processing through OCR)\n\n* ~HttpRepl\n** CLI for an API in VS\n** Fast way to test\n\nMsJuliaWhite (MS) and MsGerriMartinFlickinger (from Starbucks), interviewing about how Starbucks has started using Azure and related:\n\n* \Learning journeys\\n* Agility and the like\n\nMrRohanKumar -- VP of Azure Data Engineering, on AI|ArtificialIntelligence/MachineLearning:\n\n* AzureSynapse - with Azure ML and Power BI\n** Seems to be an analytics platform\n** Announcing Azure Synapse Link -- real-time data analytics, with no ETL and no performance impact on the database (wow, doesnt that sound impossible)\n*** Currently works with CosmosDb, will expand to more database types later.\n** Embedded PowerBi reports},{title:InversionOfControl,created:20200712171635611,creator:soren,es:likely,modified:20240811134118510,modifier:soren,tags:Code Creativity LifeDirection Metaphor Process Public Idea,type:text/vnd.tiddlywiki,text:Inversion of control is a programming pattern|SoftwarePattern in which one writes code that is called from elsewhere, rather than code which goes and does things itself. It is common in frameworks of all kinds. For instance, you might write a function that triggers when a WordProcessor saves, or a button is clicked, or someone browses to your website. In many cases, this is a form of EventDrivenPattern, but it doesnt necessarily have to be. You dont write code that makes someone go to your website; instead, you run an off-the-shelf web server which notices when someone goes to your website, handles the details of interacting with the visitor, and calls your code with certain parameters at the appropriate time to determine what content to send them back.\n\nThats a blah term. But this is a more interesting and general concept! The non-programming versions involve you as the controller -- or the controlled -- and consist of building a system that allows ideas or actions to float up to you rather than attempting to create them from the start. As in programming, this is often easier and more flexible and leads to better results with less wasted effort.\n\n* A ZettelKasten consists of contributing ideas to a big pool and allowing them to join together in an EmergentStructure and create projects and new ideas on their own, rather than trying to have the new idea first and then develop and slot supporting/related material into it. (Cf. BrokenAcademicWritingProcess.)\n* The FlaneurMethod involves determining your next moves from whats happening around you. You put out short feelers and then figure out which direction to go based on the results.\n* MrCalNewports idea of finding a CareerMission is to invest in yourself and some area of expertise first (build CareerCapital), and let the mission show up afterwards.\n* The GettingThingsDone methodology consists of getting the control loop out of your head and into a trusted system, so work becomes visible on the page where it drives your efforts.\n* Because AccidentsMakeTheWorldGoRound, allowing yourself to be driven by accidents is a useful tool.\n* Writing a blog and being public about your thinking|DefaultToOpen involves putting out feelers which people who have relevant ideas or opportunities will see and respond to. This is //much// easier than looking for such ideas or opportunities yourself, and it comes for free!\n\n!! References\n> The way to get a big idea to appear in your head is not to hunt for big ideas, but to put in a lot of time on work that interests you, and in the process keep your mind open enough that a big idea can take roost.\n\n---Paul Graham, “What Youll Wish Youd Known|https://paulgraham.com/hs.html”\n},{title:InvestmentDiversification,created:20200406024724504,creator:soren,es:confident,modified:20210728001851107,modifier:soren,tags:Risk MentalModel Economics Public Idea,type:text/vnd.tiddlywiki,text:Standard smart economic practice, often described with the phrase “dont put all your eggs in one basket.” As a general rule, you do better overall when you spread out your risk in multiple places -- even better if you can make the multiple places be different types of things, or better yet if theyre so different that the modes of failure are entirely different (item Xs success has no bearing on item Ys success).\n\nNot by any means useful only in investments. Shows particular value in Games, but is useful to keep in mind throughout life.\n\nA key practice for building AntiFragility.},{title:InvisibleGuests1986,author:Mary Watkins,caption:Invisible Guests: The Development of Imaginal Dialogues,completed:202107111200,created:20210215030419182,creator:soren,due:202104181200,isbn:0938434810,medium:book,modified:20230901033308632,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1986,text:Somewhat anti-establishment, Jungian-adjacent psychology book by MsMaryWatkins about conversations that take place in ones inner world with “imaginary” figures (I put that in quotes because Watkins borrows MrHenryCorbins word “imaginal” and uses this instead -- which means more or less the same thing, but explicitly disavows the connotation of ersatzness or unreality that “imaginary” carries). Such conversations are, according to Watkins, adaptive and therapeutically useful and are often to be encouraged, despite their stigma.\n\nWatkins is extremely well-read on this topic, and she dives into literature, mythology, religion, and so on as well as psychology, because while science has failed to give the subject an adequate treatment, all of these other things not only give it an adequate treatment but are actively centered around it. Similarly, she brings together and considers together types of imaginal characters found in dreams, fiction, prayer, fantasy, etc., because these are often treated wholly separately, which she argues leads to misunderstanding their function and considering them developmental artifacts rather than first-class citizens. This broad scoping and eclecticism makes reading her quite fun. There are 250 (!) sources cited in the bibliography for a 175-page book: Freud|MrSigmundFreud, Vygotsky, Mead, Buber|MrMartinBuber, Arendt|MsHannahArendt, Woolf|MsVirginiaWoolf, Kierkegaard|MrSorenKierkegaard, Whitehead|MrAlfredNorthWhitehead, Trollope|MrAnthonyTrollope, Darwin|MrCharlesDarwin, Jaynes|Jaynes1971…you get the idea.\n\nI do not know how this ended up on my reading list (Id like to start tracking what person or source recommended a book to me, because being able to trace that path would be really cool!), but I recognized several dialogues quoted in it when I came to them, so Im sure it was in some other related thing I read. Had to purchase a copy on eBay for a fairly ridiculous price as it is long out of print and I dont have ILL access right now (given how long it took me to read the book, its maybe a good thing I bought it anyway).\n\n{{InvisibleGuests1986/p||PrivateChunk}}\n\nAnki tag for around 100 key points: `Source::InvisibleGuests`.\n\n!! Summary\n\nIt is often thought that children grow out of having discussions with imaginal others, but actually adults continue to have these dialogues, just in forms that arent so obvious. Further, by pushing them into these forms and avoiding engaging with them in ways that children naturally do, we lose quite a bit. Weve pushed them into these forms both because of social norms and because of mistaken and limiting theories of developmental psychology.\n\nOne key dichotomy throughout the book is that between monologue and dialogue. These are often misunderstood according to Watkins. As you would expect, monologue consists of a single voice and dialogue consists of multiple voices engaging simultaneously (although speaking is not necessary for dialogue; the experience of at least two autonomous beings/figures and openness to exchange between them is sufficient). However, it gets more complicated when we consider our associations with each.\n\nMonologue is considered by many theorists to be more advanced because its capable of abstract thought and generalization that dialogue supposedly isnt; but Watkins argues that dialogue, or a “dramatic” mode of thought, can allow one to understand multiple perspectives at once and mediate between them in a way that monologue typically cannot. It is specifically at the boundaries of different voices that understanding and truth is to be found. (This is clear in non-imaginal examples. Conversation is obviously necessary for effective politics and community organization, for instance. Or think of the Socratic method; Plato even characterized thinking itself as “the dialogue of the soul with itself.” TalkingToTheDuck is similar and leans more on the imaginal side.)\n\nIn contrast, both DID and schizophrenia and many forms of unenlightened, myopic thinking in healthy people are not dialogues but monologues -- they consist of serially adopting multiple perspectives and not allowing communication between them, instead vacillating between extremes most embodied by each perspective. (If this becomes problematic, the “healthy” person will then shut off alternative perspectives entirely to stay consistent!) It is the failure to communicate between perspectives that primarily makes DID/schizoid disorders pathological, not the multiplicity itself.\n\nDialogues work their magic in large part only when we are able to empathize with other participants and understand them, when we treat them as subjects rather than objects (this distinction is compared to MrMartinBubers //I-It// versus //I-Thou//, and MrErichFromms //having// and //being//, among other things; I might add Grokking to the list). Cf. dialogues in CrucialConversations. This requires treating imaginal figures (or real people, for that matter, though there this is presumably uncontroversial!) as real, allowing them to have their own space, and listening to what they want, not comfortably manipulating them.\n\nThis doesnt mean we have to literally believe imaginal figures we interact with are part of ConsensusPhysicalReality, of course; but Watkins presents evidence that even patients suffering from recurring, convincing, and distressing hallucinations as in schizophrenia are fully aware the phenomena are on a different plane of reality|FormsOfExistence even as they are experienced vividly in external space. Surely the more ordinary form of talking inside ones head need not be confusing. This said, we are also to take the imaginal figures desires and feelings metaphorically, where appropriate; much like the problem that SevenfoldWhy is intended to address, being overly literal can result in jumping to conclusions|JumpToConclusions and making silly decisions that dont actually address the root problem|SurfaceProblem in a struggle one is having.\n\n{{InvisibleGuests1986/p2||PrivateChunk}}\n\nOne cannot exactly comment on the truth or falsity of a book like this, which is essentially presenting an entirely new ontology (well, “new” if you come from a typical current-day scientific-materialist background); one can only attempt to study whether the principles in it lead to good results in certain circumstances. It certainly does appear to have much to recommend it as an alternative way of thinking about the world, and I may try on some of its beliefs|BeliefAsInstrument and see what happens. At any rate, I greatly enjoyed reading it.\n\n\n!! Criticisms\n\nThe book contained an absurd number of typos (and this is a second printing). Normally I wouldnt comment on such a superficial thing, but there were so many they repeatedly interrupted my reading and made the book feel amateurish; I seriously think there was one every other page or so on average. Sometimes there were multiple typos on the same page. I cant recall ever having seen a professionally published paper book with so many errors in it.\n\nThe prose tended on dense and academic. It wasnt exactly difficult to read, but the book took me a couple of months to get all the way through even though it was full of fascinating ideas; Im certain that a better-written book would have been much faster.\n\nWhile the book differentiates itself from most of its psychological neighbors by not treating imaginal voices in adults as pathological, it still focuses more on pathology than I would have liked. Granted, it is discussing pathology to point out how imaginal dialogues differ from pathological situations, and how they may be used for therapeutic purposes. Nevertheless, I found myself feeling like this went on at more length than was relevant to me.\n\nI was expecting some discussion in the final part of how one can dredge up imaginal voices from ones psyche in order to engage in the practices discussed throughout the rest of the book, but there was essentially none. Given that the book is subtitled “The Development of Imaginal Dialogues,” this seems a rather odd omission; its rather difficult to develop a dialogue if you havent first developed someone to dialogue with. Maybe its not that hard if you try (and maybe I should TryItAndSee), but in that case a couple of paragraphs would have sufficed to resolve my complaint, so there would be really no reason at all not to do it. And it doesnt seem the author simply thinks that most people can already easily do this, because we discuss at length how society has suppressed peoples ability to engage with the imaginal.},{title:InvisibleMan,author:Ellison,bibliography:LifetimeReading,caption:Invisible Man,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035271,priority:3,readstatus:unread,recommended-by:Patrick,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:InvisibleOrientation2014,author:Julie Sondra Decker,caption:The Invisible Orientation: An Introduction to Asexuality,completed:202210291200,created:20221031030217003,creator:soren,medium:book,modified:20230908140346599,modifier:soren,rating:average,readstatus:read,tags:Source Romance Identity Sociology Public Sexuality,type:text/vnd.tiddlywiki,url:,year:2014,text:Introduction to Asexuality by MsJulieSondraDecker. Last week was Asexuality Awareness Week, and somehow that sent me to this book, I cant remember why anymore. (Really, I can never remember why I ended up reading pretty much anything.)\n\nI very much appreciated the perspective and tone. Everything was accurate, clear, respectful, and sensible. That counts for a great deal on a topic like this. I felt it was somewhat longer than necessary, but not a //lot// longer, and if you want something comprehensive, I think this is a good choice.\n\nI dont think I learned anything I didnt already know about asexuality, but Im speaking as an ace-spectrum person|DemiPerson who tends to think about this a lot. And it did surface many things I think I have underemphasized, so it was a useful read in terms of perspective, if not so much in terms of understanding myself. In particular, I have often cheerfully said that ace people are not oppressed. While I think on balance, in the strict definition of the word //oppression//, this is probably a fair statement – explicit discrimination or hatred on account of being ace is quite uncommon – being ace does come with a lot of fairly serious problems, including ones that involve systemic bias against ace people, and minimizing them isnt doing anybody any good. The problem is that because theyre quite different than those experienced by similar groups (e.g., gay people), and people dont know or think about asexuality much, the problems go unrecognized. Among many others:\n\n* Asexual people are //not believed//. This may seem like a trivial problem, but its hard to overstate how bad it feels to be told sincerely that youre lying about your experiences. This is a problem shared partially with bisexual people, who often get told theyre really gay and just dont want to admit it; but both the magnitude and the prevalence of disbelief is greater for ace people. And its not just about saying were lying about who we are;\u003C\u003Cfnote \Exactly why someone would do this when the truth is that youre an order of magnitude more likely to be ridiculed than score oppression-bingo points for coming out is unclear -- but none of this makes sense.\>> were also told that were broken and need help, which feels just great when many of us spent a large part of our lives actually believing this.\n** This includes, unfortunately, some mental health professionals, which can contribute to bad care.\n* Corrective rape (forcing an asexual person into sex in the belief that it will fix them) is a real thing, if, fortunately, uncommon. Like other kinds of rape, its often perpetrated by friends or romantic partners of the victim, who claim that theyre doing a favor.\n* Marriages that dont involve sex are legally not deemed “real” in many ways -- in many cases they can be unilaterally annulled with none of the protections intended to be afforded by divorce laws, and they might be considered a suggestion of fraud in some cases (e.g., if one partner got a visa by being married).\n* Similarly, people in life partnerships that are not romantic are denied access to the benefits of marriage.\n* In general, having a fundamental part of yourself be something that people dont know exists is really annoying.\n** Decker pointed out that coming out as ace can often trigger a complicated discussion about what this even //is//; at least if youre telling people youre gay, you dont have to worry about whether they know what this means, or whether theyll understand that its a thing.\n** A bunch of intrusive and completely inappropriate personal questions (e.g., “Do you masturbate?”) frequently come out of this as well.\n**Young asexual people often dont know that asexuality is a thing at all. Imagine growing up in a world where you were gay, but that word didnt exist and nobody ever told you this was a thing some people experience; this is the kind of thing that can make you feel desperately alone and confused, not to mention make bad choices. Personally, it took me until age 23 to discover I was demisexual; I had heard the word before, but I lacked sufficient context as to what any of this meant to realize it was me. The delay wasnt that big a deal for me, but I sure would have spent quite a few years a lot less confused if someone had explained that this was a thing in my sex-ed class or something.\n\n\n!! Audience problems\n\nThis book did an annoying thing that average-quality nonfiction books often do,\u003C\u003Cfnote \I most recently noticed this with GuideToTheGoodLife2009, though I stated there I found it somewhat less annoying than other reviewers evidently did.\>> in which it prioritizes having different sections for different purposes or readers over having the content within those sections well-organized. The usual effect (and the effect here) is that the same information is repeated in three different places, in slightly different words, giving the impression of having come out of a content farm, even if the words are well-chosen and meaningful. This book very explicitly tries to be all things for all people, including “people who have just discovered theyre asexual,” “prospective allies,” and “people who dont believe asexuality exists.” This, unsurprisingly, does not work in its favor as a cohesive, clear, and concise text, although I can understand the temptation, especially given the book was written at a time when there probably was a lot less published material about asexuality than today.\n\n!! Intra-ace erasure?\n\nI was actually miffed by the minimal treatment of gray-asexuality and demisexuality. This is a book that talks //extensively// about ace erasure and the need to treat asexuality in a similar amount of detail to other orientations, even carefully noting that people preparing information on this subject should take care to not just mention asexuality in a corner and then write the rest of the content like it doesnt exist, and then it...puts a couple of sections in a corner about the gray parts of the spectrum and then writes the rest of the content like it doesnt exist. Its true that, as the author points out, gray/demi people often have more in common with fully asexual people than with allosexual people\u003C\u003Cfnote \i.e., those who are not on the asexual spectrum\>> and thus will have much to learn from the entire content of the book, but this almost came off more in the sense of “Christians|Christianity can learn important things about their religion from Jewish people” than “these people are also part of our community”; a different community which contains history, ideas, and insights which are drawn into your community, versus a similar way of being that fits in the same community.\n\nAlso, being gray/demi is honestly more complicated than being fully ace and one will by no means automatically come to understand that perspective from understanding the fully asexual perspective. The problem is that even defining these terms inevitably feels like splitting hairs, because, well, for many people definitionally they actually are quite similar to allosexuality except for the low frequency and (often) conditionality of attraction. Even allo people experience conditionality of some sort – presumably few people are sexually attracted to those they find ugly – and many likely feel they are only attracted to people “rarely” (by their definition). Its just that how you feel inside and what your dating and sex life looks like is an entire world apart.\n\nI want to point out that it would have been a clear, defensible choice to write a book only about full asexuality, except that this book is trying to be everything to everyone – //unless//, I guess, you wanted to know about gray-A people, in which case fuck you. I dont think this was a good choice, especially without an explanation. That said, to be clear, I dont actually feel //hurt// in any way by this omission, and to paraphrase Dan Savage,\u003C\u003Cfnote \Rather ironically given his record on asexual issues. I still like him overall, but this is always stuck in the back of my mind.\>> I can go get my own damn book if I dont like it.},{title:iOS,created:20200422234408227,creator:soren,modified:20240509144412101,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki,text:Apples operating system for the iPhone and iPad.},{title:IoT,created:20200521193209679,modified:20201204041547059,tags:Definition Software Public Idea,type:text/vnd.tiddlywiki,text:Internet of Things -- the trend of connecting smaller and smaller devices (e.g., thermostats, lights) to the Internet and making them readable and controllable through various APIs and tools.},{title:Iowa,created:20200514030203243,creator:soren,modified:20240509144413913,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:US state.},{title:IpsativeAssessment,created:20201026164446809,creator:soren,es:likely,modified:20211107174810386,modifier:soren,tags:Public Psychology Math Idea,type:text/vnd.tiddlywiki,text:A type of scale used in personality assessments where the two ends of the scale are both socially-desirable traits, and you choose the one that you identify more strongly with (either all-or-nothing, or along a weak-strong gradation).\n\nHelps to eliminate false-response bias where people are less likely to describe themselves as narcissistic or unempathetic, say. However, can sometimes be challenging or even biasing to choose an appropriate path since both can sometimes be highly appropriate or highly inappropriate for a person, especially for people who are unusually particular or are unfamiliar with the scale system.\n\nThe StrengthsFinder assessment consists entirely of these. I believe some versions of the MyersBriggs use them as a component as well, though Im going off memory there.\n\n\u003C\u003Crememberq \20201026164819691\\n\t\In surveying, what is an //ipsative// assessment?\\n\t\One that requires the respondent to choose between two desirable options (rather than a bad-good scale or an agreement scale).\>>\n\t\n\t\u003C\u003Cremembercz \20201026164834749\\n\t\Ipsative assessments are more useful than Likert scales for evaluating traits {c1::within} individuals and less useful for evaluating traits {c1::across} individuals.\>>},{title:IronLawsOfSoftwareDevelopment,created:20210127184105493,es:unlikely,modified:20210515035938362,tags:Humor Code Process Public Idea,type:text/vnd.tiddlywiki,text:As stated|https://web.archive.org/web/20090902093812/http://home.swbell.net/mck9/cobol/cobiron.html by MrMichaelKasten:\n\n* You cant give an estimate until youve come up with a design.\n* You cant come up with a design until you understand the requirements|ActualRequirements.\n* You wont really understand the requirements|PeopleDontKnowWhatTheyWant until youve finished the project.\n* By the time you finish the project, the requirements will have changed|SpaceShuttlePlanning.\n\nThe AgilePhilosophy is the obvious antidote, though my no means a complete solution!},{title:IronTriangle,created:20200326201502262,creator:soren,es:confident,modified:20211107181829433,modifier:soren,tags:ScrumMethodology Productivity Public Idea,type:text/vnd.tiddlywiki,text:Classic WaterfallMethodology project-management tool that identifies three interlinked project parameters:\n\n* team size\n* deadline\n* features/work to complete\n\nWhile this is fairly self-evidently true, its also impossibly misleading at the same time due to the considerations of TeamSizeAndDeadlines. Cf. BrooksLaw.\n\n\u003C\u003Crememberq \20200511013656165\\n\t\What three components make up the traditional Iron Triangle of project management?\\n\t\Team size, deadline, and features.\>>},{title:IrreducibleWoo,created:20231011124630471,creator:soren,description:Something that cannot be usefully understood with reason is //irreducible woo//.,es:possible,modified:20231023132203327,modifier:soren,tags:Idea Public Definition Reasoning Ontology,type:text/vnd.tiddlywiki,text:Something which cannot be understood with reason or science; attempting to use reason to understand it is a category error (“like spending hours looking for your car on Parking Level 2 when you actually parked on Parking Level 5”).\n\nConcept of MrAdamMastroianni, in the article Sorry pal, this woo is irreducible|https://www.experimental-history.com/p/sorry-pal-this-woo-is-irreducible. He talks mostly about love.},{title:IsAsexualityLGBTQ,created:20221216233236230,creator:soren,description:Sure…but its complicated, there are some important differences to navigate.,es:likely,modified:20240509144550638,modifier:soren,tags:Idea Identity Politics Public Sexuality,type:text/vnd.tiddlywiki,text:(Relevant context: Im demisexual|DemiPerson. Id be a lot more careful about this one if I werent!)\n\nShort answer: “yes, but.” I think the whole thing is more complicated than some advocates think.\n\nThe key objection is that ace people|Asexuality ordinarily do not experience hate or society-wide discrimination, which was the cultural touchstone for the beginning of the gay liberation movement, out of which the LGBT acronyms and identities developed, and unfortunately remains a key element of the gay experience, even though the situation has gotten vastly better in many places in the last half-century. Ace people certainly do experience derision, disbelief, confusion about our identity, lack of visibility and representation, etc., however, so there are many good reasons to count us in, too; see InvisibleOrientation2014 for a few reasons to consider ace people oppressed or disadvantaged.\n\nPersonally, I always favor inclusivity in groups that are brought together by the outcast status of their members -- I think this just makes sense -- so my own opinion is that, in the broader community, ace people should be welcomed and participate as they wish, but with a clear understanding of their differences of perspective.\u003C\u003Cfnote \For example, I objected when someone labeled me as in-group in a discussion about a slur used for gay people the other day. I felt like I was being welcomed into an experience I didnt have.\>> I also will not, however, object if someone excludes ace people from their group of gay people for a logical reason|GroupIdentityIsFoundedOnExclusion, e.g., because the group focuses on experiences that ace people lack. If they just say that ace people generally //dont count// as part of the overall queer community, especially without giving a good explanation (which such people usually dont), I wont be too happy about that, because, well, that feels like ace erasure, which sucks.\n\nIs //queer// any different?|IsDemisexualityQueer},{title:IslesBunAndCoffee,created:20240402013133803,creator:soren,modified:20240509144444165,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ItCasteSystem,created:20200226205504574,description:Different roles within the IT world have distinctly different social positions as internally understood.,es:likely,modified:20210613213037943,tags:Code InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:IT seems to have an informal caste system that nobody talks about but everybody understands, running from developers to operations to analysts to QA to helpdesk. Maybe some slight variations depending on organization. Besides being intellectually objectionable, this isnt conducive to DevOps!\n\nIdea credit to T.D.|PrivatePerson while discussing UnicornProjectPartOne in F.I.B.C.|PrivatePerson.},{title:IterativeProcess,created:20200226021534189,creator:soren,es:confident,modified:20231127045350459,modifier:soren,tags:Process Productivity AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:An essential part of many effective ways of working (notably the AgilePhilosophy): When there are multiple stages or parts to a project or task, do the first one for a little while, then once youve made some progress but not gotten it perfect yet, move on to the next one. Once youve made it through some or all of the parts, move back to the first one and revise, and repeat as necessary until done enough|DefinitionOfDone. Instead of trying to do everything right from the start as in a WaterfallMethodology, you learn from your mistakes and adjust your areas of focus as you go along, in a FlaneurMethod.\n\nIncremental iteration is so effective for several reasons. First, because //feedback// is the only way to know how something is going. Without any methodology of iteration, its common to get stuck in a LocalMaximum and keep HammeringHarder rather than adjusting when something isnt right. But an iterative process //forces// you to stop and gather feedback, from others and from yourself; it has automatic stops at the point where you reach the natural end of the step youve planned and/or an artificial deadline where you move on to the next step for now. To know what to do next, you automatically have to move up to the meta-level and re-plan, which involves gathering feedback.\n\nSecond, you often cant see far enough ahead to do the first step correctly until you have done the second steps. With small, simple projects that are similar to ones youve done in the past, its easy enough. With large, novel, and complex ones, perhaps where youre doing things you or even nobody at all has ever done before, its nearly impossible.\n\nIteration often forms a VirtuousCircle, although it does not necessarily if each iteration does not strengthen the power of the next iteration; otherwise it is simply using a RatchetingProcess to build up a result.\n\nFor best results, processes should be both IncrementalAndIterative. A process can be iterative (doing something repeatedly) without being sufficiently incremental (doing things in small chunks) for the iteration to reach its maximum potential.\n\n\n!! References\n\nMrJasonFried says you should plan like a squirrel|https://world.hey.com/jason/like-a-squirrel-bd821787: make a short run, stop, evaluate, then start the next hop.},{title:IterativeReading,created:20200811114505660,creator:soren,es:confident,modified:20221002150854780,modifier:soren,tags:Reading Learning Process Public Idea,type:text/vnd.tiddlywiki,text:Shower thought: Reading, especially research, works best as an IterativeProcess. Thats because when you first start, you dont really know what youre reading. In nonfiction, you dont know the terms or the concepts very well|BasicLearningFoundation, or what other people have said about the topic, so missing that vocabulary and background means youll miss lots of useful insights. (See ParadoxOfDocumentation for this effect specifically in technical literature.) In fiction, you dont have a conception of the unity of the entire book yet, or even the basic plot, so youll miss things that play into that. (If youre I.R.|PrivatePerson, you appreciate spoilers because you value the additional insights you can then get out of the first read more than the first-time experience!)\n\nEssentially, you have to read first to know what youre reading, which means its best to read shallowly first, then come back and read deeper. In the case of really good books or really important or in-depth research topics, you might want to come back for multiple in-depth readings, especially if time has elapsed in between when you might learn relevant things from unrelated sources or even life experience|HaveToExperienceItToUnderstand.\n\nGood use of SpacedRepetition (which can even work with fiction|SpacedRepetitionForFiction) increases the amount you get out of each reading, but seems unlikely to completely eliminate the value of multiple readings for sufficiently deep content; there will always be places where you missed the significance of something when you extracted cards because you lacked understanding.\n\n!! References\n\nAs explained by HowToReadABook1972, you cant know ahead of time what reading will be valuable:\n\n> A curious paradox is involved in any project of syntopical reading....In the case of the research topic of love, you might have to read a dozen or a hundred works before you could decide what you were reading about. And when you had done that, you might have to conclude that half of the works you had read were not on the subject at all. (\u003C\u003Crt 11276>>)\n\nThus, the appropriate technique is to read a lot of things very quickly, then come back to the ones that seem promising and read a bit more deeply, and continue until youve determined which books and parts of books deserve a thorough reading for your purposes.\n\nI appreciate that Adler and Doren also call this a //paradox//, like I did before ever reading them. (See also MenosParadox, which is not quite the same thing but is closely related.) Its strange but not that difficult to work around as long as youre willing to let go of the WaterfallMethodology of reading.\n\nMrMichaelNielsen in AugmentingLongTermMemory201807 recommends the iterative strategy for reading complex technical content, combined with SpacedRepetition to optimize the gains on each iteration and allow the learning to be spread out over time without as much loss (just like a ZK -- cf. AnkiZettelkastenIsomorphism). First he reads a paper shallowly and Ankifies the most basic content. Then he gives that info a bit of time to sink in and reads it again, or reads other similar papers, and adds more cards at a slightly more complex level, and so on.},{title:ItsJust,created:20210119034648183,creator:soren,es:likely,modified:20220328155120194,modifier:soren,tags:Science Reasoning Religion Neuroscience Public Idea,type:text/vnd.tiddlywiki,text:“Its just...”\n\n* a dream|Dreaming?\n* a drug trip|PsychedelicDrug?\n* a hallucination?\n* a coping mechanism?\n* flashcards|AnkiIsntFlashcards?\n* a wiki|TiddlyWiki?\n* a series of symbols on paper|Writing?\n\nIts often tempting to dismiss things we dont fully understand or that threaten to bring us to uncomfortable places as “just” something simpler. But this is usually a great deal more ridiculous than it looks. As in the last example, writing is “just” a series of funny symbols on paper...but writing has made things possible|WritingIsThinking that wouldnt have been possible without it. Imagine the internet without writing. How could we even have gotten there?\n\nIndeed, //most// profound and deeply important things, especially those things that involve thinking or subjective experience, have a deceptively simple substrate (see also ToolsForThinkingDontWow). Reading is just looking at a series of words on a page, one by one, until youve seen them all. Listening to Beethovens Ninth Symphony is just sitting in a chair for an hour with the air vibrating in a very particular way. Thinking itself is just a pattern of firing neurons!\n\nBut this is obviously missing the point. The medium that supports experiences provides none of the meaning (the medium is //not// the message?). To focus on the low-level medium is usually disingenuous and virtually always unproductive.\n\nOddly, this seems self-evident with things that are material, like writing, and controversial with things that involve subjective experience. Whats up with that? Subjective experience is always frustrating because its so much more difficult to study on a broad basis, scientifically or otherwise, but thats no excuse for dismissing it as meaningless. Even reading|Reading is more or less a subjective experience; sure, we can study peoples eye movements and measure their comprehension, but we can put peoples brains in fMRI machines and apply surveys to measure how they were changed by their mystical experiences, too; neither gets to the heart of what we learned, how we were changed, how our inner lives will be different as a result.\n\nI can only conclude it comes down to difficulty. Many if not most of us, particularly those of a more logical bent, would prefer not to have to deal with the thornier, more subjective questions, or to face the fact that we cant fully understand them, so we dismiss part or all of them. (If we are less militantly rational, we might instead turn to organized religion|Religion to give us the answers on a platter, and leave off worrying about what these things are in the first place, which might well work out better for us.) The thing is, we dont have to use excuses; we can just say were not interested in studying them, or wed prefer to believe something that works|BeliefAsInstrument! I guess thats admitting a certain weakness, though, and its easier to claim somethings not important than to admit we dont care about it or dont know about it. (See also IDontKnow.)\n\nI am not asserting that either approach, leaving the topic out or blindly accepting someone elses answers, is a weakness, despite perhaps having used loaded language above. Indeed, in some ways its a //strength//, like concrete thinking|AbstractAndConcreteThinking -- ignoring the things we dont know and dont particularly care to learn, leaving them as areas of ignorance|AreaOfIgnorance, creates space to focus more on the things we care more about. I do wish that people felt comfortable being more honest about their choices, though.\n\nThanks to MrAndyMatuschak and MrMichaelNielsens TransformativeToolsForThoughts discussion on the value of the MnemonicMedium for the turn of phrase “its just...” (see reference).\n\nTODO: Should we have a central nature-of-tools for thinking tiddler?\n\n!! References\n\n> Despite these suggestive preliminary results, it’s still tempting to be dismissive of the MnemonicMedium. Isn’t this “just” an essay with flashcards embedded? At some level, of course, that’s correct. In the same way, wikis are just editable web pages; Twitter is just a way of sharing very short form writing; and Facebook is just a way of sharing writing and pictures with friends. Indeed, writing itself is just a clever way of ordering a small number of symbols on a page. While a medium may be simple, that doesn’t mean it’s not profound.\n> ---MrAndyMatuschak & MrMichaelNielsen, How can we develop transformative tools for thought?|TransformativeToolsForThought},{title:JaneEyre1847,author:Charlotte Brontë,bibliography:LifetimeReading,caption:Jane Eyre,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035285,priority:3,readstatus:unread,recommended-by:Telegraph,tags:Source Public,type:text/vnd.tiddlywiki,year:1847},{title:JankiMethod,caption:Janki Method,created:20200708122813173,medium:article,modified:20200808143923037,tags:Source Public,type:text/vnd.tiddlywiki,text:MrJackKinsella, more on learning programming with Anki (cf. SiversSrProgramming201301).\n\n* https://www.jackkinsella.ie/articles/janki-method\n* https://www.jackkinsella.ie/articles/janki-method-refined},{title:Java,created:20200323023319408,modified:20200323023534629,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:Popular Business ProgrammingLanguage. An enterprise-software lingua franca, a nice balance between performance and ease of use, and somewhat revolutionary in its day, but suffers from a painful runtime environment (made somewhat better in recent years), legendary verbosity, a need for crazy frameworks to fill in its deficiencies, and forced ObjectOrientedProgramming concepts even where they make no sense.},{title:JavaScript,created:20200122030451730,modified:20200122030718629,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:The programming language everyone loves to hate, probably with good reason: designed for amateurs to pretty up their web pages, and now we write wikis and office suites in it.\n\nAs of this writing (2020), JavaScript is the most popular programming language, at least if you count TypeScript as JavaScript (because it basically is, it just has a quick layer of compile-time checks on top of it). Thats probably not because of its merits but because its the only game in town for web front-end development. Sure it gets used in Node too, but usually as part of web applications for the sake of making everything the same language. I dont know many people who would start a CLI tool in JavaScript, for instance!},{title:Jaynes1971,author:Julian Jaynes,caption:The Origin of Consciousness in the Breakdown of the Bicameral Mind,created:20200407032222183,creator:soren,medium:book,modified:20221115021800378,modifier:soren,rating:good,readstatus:read,tags:Neuroscience Psychology Public Source,type:text/vnd.tiddlywiki,year:1976,text://{{!!caption}}// (such a mouthful and so much Jaynes most important work that its often just called Jaynes) is an influential and fascinating 1976 book by MrJulianJaynes arguing that ancient people //were not conscious// but instead simply heard instructions from their subconscious in a hallucinated fashion.\n\nThe neuroscience is not very up to date today, but its my understanding that his fundamental conclusions are not affected too badly (Scott Alexander says|SscOriginOfConsciousness2020 that most of the brain-hemisphere stuff is probably not true, but while Jaynes makes a great deal of this, it doesnt seem to me to get very far into the real meat of the book).\n\nIts likely impossible to ever know to what extent hes right, but its one of those things thats completely worth reading and pondering even if hes completely wrong. Its so outrageous it cant possibly be true, but its also so well argued that you have to wonder if some part of it couldnt be.\n\nMy biggest objection when I read it back in 2017, and that of some of the SSC commenters as well, was the lack of any recognition of the fact that other \primitive\|SociologicalQuotationMarks peoples would seemingly have also had to go through this step. On the other hand, if we treat this as theory of mind rather than as consciousness as Scott A. suggests (and the lines are blurry), we might imagine that these other peoples had yet different theories of mind which were less jarringly different.\n\nA response to the HardProblemOfConsciousness, though that term wasnt coined until well after the book.\n\nFor some utterly bizarre reason, there was a copy of this book in the closet of the IS training room at TheFederatedInsurance (and it remained there for all of the four years I worked there).\n\n!! References\n\n\u003C\u003C\u003C\nJulian Jaynes’ //The Origin Of Consciousness In The Breakdown Of The Bicameral Mind// is a brilliant book, with only two minor flaws. First, that it purports to explain the origin of consciousness. And second, that it posits a breakdown of the bicameral mind.\n\n---SlateStarCodex, SscOriginOfConsciousness2020, \u003C\u003Crt 11314>>\n\u003C\u003C\u003C},{title:Jekyll,created:20200425162836649,modified:20200425163315755,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A popular StaticSiteGenerator known for being the default choice for rendering documentation and software sites in GitHubPages. Used by TheControlAltBackspace.},{title:Jenkins,created:20210628022536710,es:confident,modified:20210628022336848,tags:Software Public Idea,type:text/vnd.tiddlywiki},{title:JesusDoesntStayWithUs,created:20200330015322386,creator:soren,es:confident,modified:20220112033343751,modifier:soren,tags:Religion PhilosophyOfLife Idea Public,type:text/vnd.tiddlywiki,text:I noted in my OleChoirSeniorDevo that at the end of the RoadToEmmaus story, Jesus has to go. He accepts the invitation to stay for the night, sure, but then he promptly disappears (and that before he even actually stays the night). There’s only one more scene in Luke, and it takes place only a few hours later. Then Jesus ascends into heaven.\n\nWe plead for people and things and memories to StayWithUs, but nothing stays, except the love of God and the Holy Spirit. Thats reality, but it often feels wrong.\n\nI believe I noted this for the first time in \u003C\u003Ccb \44.14-15\>>.},{title:JetLag,created:20230908063606987,modified:20230908063611747,tags:Idea Public,type:text/vnd.tiddlywiki},{title:JobAComedyOfJustice,author:Robert Heinlein,caption:Job: A Comedy of Justice,completed:20220131,created:20220201033055246,creator:soren,medium:book,modified:20220202173154841,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:JobAComedyOfJustice,url:,year:1984,text:Novel by MrRobertHeinlein which one might describe as the playful heathen version of Job.\u003C\u003Cfnote \As the name suggests: though the way the cover is rendered makes it look unfortunately like it might be describing something with the initials of J.O.B. and any resemblance purely coincidental.\>> It follows the story really quite closely, its just quite a bit longer, brings the whole thing into a modern context, and serves as metacommentary on religions rather than as a canonical text of one particular religion. The one major departure is that he gets the real Margrethe back at the end (this being a romantic comedy), unlike Job who merely gets a replacement family which is somehow supposed to indemnify him.\u003C\u003Cfnote \Though Alex doesnt get his original original family back, because he hated his first wife.\>> Meta-God even comments that hes sure Alex wouldnt be happy with anything less than the real thing.\n\n!! Plot\n\nAlex is on a cruise and makes an ill-advised bet that hell do the fire walk. When he steps out the other end, having done a solidly OK job but nearly fainted from the smoke, things are just barely not quite the same, and when he gets back to the ship it is an entirely different ship, much older, with a different name, and with none of the same people. Moreover, he has a different name (Alec), is staying in a different room, and the world has different technology. The one good thing is the beautiful stewardess, Margrethe (also variously Marga, Margie, and Maggie to different people in different worlds), who helps him stay undercover, and, as he soon learns, was sleeping with “him” before he ended up on the ship.\n\nWhen they are in bed together, the ship gets wrecked and they end up floating on a life raft, and the world changes again. (While Margrethe now believes the world has indeed changed mysteriously just like Alex does, for some reason she still //doesnt// believe that Alex got swapped in for Alec because shes sure hes exactly the same person she took up with originally, in a world that seemed continuous to her.) They get rescued and brought ashore in Mexico, work a couple of months in a restaurant paying off their debt for the rescue, and then as theyre having another romantic moment there is a massive earthquake and the world changes again. The same basic pattern repeats over and over.\n\nIn one world, extremely technologically advanced, they meet Jerry, his wife Katie, and daughter Sybil. Alex tries to convert them, to some tension especially because Sybil is (allegedly) Wiccan. Alex and Marga stay with them overnight, but they wake up in a new world.\n\nAlex begins to conclude that the Apocalypse is coming, and he becomes fearful for Margrethe because she is a worshiper of Odin and Alex (back in his original world) is a conservative evangelical Christian clergymember. Eventually he gets her to come to a revival meeting happening in Kansas, and she agrees to go up to the front with him, and just as they are being born again, the end of the world arrives.\n\nAlex ascends into heaven (in a thoroughly and hilariously ridiculous scene), but Marga gets separated. Heaven turns out to be a bureaucratic nightmare, but Alex is crowned Saint Alexander (literally given a halo) and nobody will explain to him why, which helps him cut through some of the nonsense. Saint Peter cant help him; Margrethe is not in heaven. At Alexs request, he is cast down into hell instead. He meets a very accommodating demon (sexually and otherwise) who helps him gain an audience with Satan by writing a very long and detailed memoir. But Margrethe is not in hell either.\n\nSatan is revealed as Jerry (or Jerry as Satan, more accurately). It turns out that Yahweh has made a bet with some other divine beings in which Satan refused to participate after how dirty the bet on Job a few thousand years ago was, and Alex is the butt of this one. Satan has some pity for Alex, and he manages to get Alex an audience with “meta-God” (not called this in so many words), who is described as having a similar relationship in terms of power to God as God does to humans. Meta-God is eventually convinced to intervene in this case of unfairness by Yahweh, and Marga is pulled out of Valhalla temporarily (aha! we knew she went according to her own beliefs!) and given the opportunity to choose Alex, which of course she does.\n\nThey return to a more-or-less-normal world and open a restaurant and hot-fudge-sundae shop (Alex having tried unsuccessfully to buy Marga a hot-fudge sundae multiple times during the story, the world always changing just before they manage) and live happily ever after, or until they die, which they are apparently now unconcerned about because life is so good. It appears that they become unaware that anything odd ever happened after the earthquake in Mexico (and maybe before it, too?) -- or at least that becomes the story they tell.\n\n!! Miscellaneous\n\nAmusing gags, among others:\n\n* The one thing Alex manages to hold onto (most of the time) is his razor\u003C\u003Cfnote \A metaphor for his sanity, presumably, as in the old military rule about getting a good shave in the morning no matter what crazy thing is happening to you.\>>, and he is constantly having to do improbable things with it.\n* Margrethe is extremely happy when they land in a world in which Denmark has taken over several of its neighbors, and extremely upset in the reverse.\n* Hell and Texas are repeatedly compared.\n* When Alex and Margrethe think theyve found a clever way to avoid all their money losing its value when the world changes – converting it to silver – they promptly end up in a world where silver coins are illegal to possess and get arrested.\n\nOverall: There was little remarkable about this book in my opinion, but it was quite enjoyable. Heinlein is no master stylist to be sure, but his writing also isnt cringey and doesnt get in the way of the story (which describes way too many published sci-fi authors).\n\n{{JobAComedyOfJustice/p||PrivateChunk}}\n\nThis was one of the books I acquired from my late friend S.S.|PrivatePersons library; I doubt I would have come across it any other way, but I had been wanting to read some more sci-fi for a while and saw it on the table.},{title:JobDisqualifiers,created:20200712161341653,es:possible,modified:20210510210049767,tags:Employment Public Idea,type:text/vnd.tiddlywiki,text:You dont want to take a job if:\n\n# In your opinion, what youll be doing is either useless|BullshitJob or actively bad for the world.\n# Youll be working with people you strongly dislike.\n# You will have no opportunities to develop rare or valuable skills.\n\nOtherwise, anything should be fair game.\n\nI have also seen a not dissimilar schema, which goes on the positive side and says you //should// take a job if you meet at least two out of three criteria: fun, pays well, teaches you something new (\u003C\u003Crt 9278>>). These are kind of the opposite!\n\nSource: MrCalNewport, SoGoodTheyCantIgnoreYou, p. 56.},{title:JobFilter,created:20210715014533960,creator:soren,es:likely,modified:20211027033116488,modifier:soren,tags:Employment Public Idea,type:text/vnd.tiddlywiki,text:If you are not desperately trying to get a job (e.g., because you are unemployed and your savings are rapidly running out), its useful to consider what you can do to quickly and easily remove employers you can tell you wont want to work with -- just like they do with your resumé and early interview stages. In many cases, this takes the form of being open about deal-breakers or not working too hard to make yourself look super-perfect:\n\n* If you usually have a slightly non-traditional physical appearance, dont hold back much if at all. If your potential employer is going to get bent out of shape about, e.g., your hairstyle, what does that say about how theyll be to work with? (Of course, a few people may //want// an employer who thinks that way. Then do!)\n* If theres something about the job youre not sure youll be good at, say so and figure out how much of a weakness it will be. You dont want to get hired for a job youll be bad at!\n\nSee also AttractivenessAsymmetry, which discusses romantic relationships but applies almost equally to finding a job (theyre pretty similar|JobsAsRomanticRelationships).},{title:JoelOnSoftware,created:20200223150309139,modified:20200509032350589,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog of MrJoelSpolsky:\n\nhttps://www.joelonsoftware.com},{title:johnny-decimal-rn-sample.png,type:image/png,created:20241226182712374,creator:soren,modified:20241226182715103,modifier:soren,tags:Public Image,_canonical_uri:./extimage/johnny-decimal-rn-sample.png},{title:JohnnyDecimalRemNote,created:20241226174505162,creator:soren,es:personal,modified:20241226185239569,modifier:soren,tags:Idea Design Information Public,type:text/vnd.tiddlywiki,text:I use a somewhat unusual organizational system for my RemNote documents, with numbers at the head of every document name.\n\n\u003C$m2.float source\johnny-decimal-rn-sample.png\ width\250\ side\left\ />\n\nThis is based on the Johnny Decimal System|https://johnnydecimal.com. Because the hierarchy is intended to cover all human knowledge I might want to learn about, rather than just some set of personal or work projects, I use three digits rather than two, giving the system an extra level of hierarchy.\n\nThe top-level categories are:\n\n* 100-199 Me: This is where anything thats not general knowledge goes -- journals, places I want to go, my notes on people I know, personal improvement projects, things I own, process documentation, movies I want to watch, and so on.\n* 200-299 TfT: My main professional and creative focus is various kinds of tools for thought, so they get their own top-level category. They could probably go somewhere else, but since this category is high-importance and also interdisciplinary, I decided to give it its own.\n* 300-399 Science, Mathematics, & Engineering: Every kind of science, all the computer-related stuff, math, and so on.\n* 400-499 Art: Art, literature, music, design, anything creative.\n* 500-599 Studies in Human Culture: Philosophy, religion, law, languages, games...most human-related things that dont obviously fit into art or some science.\n* 600-699 The World: This is sort of a catch-all, and currently includes history, geography, descriptions of plants, and architecture (which has aspects of culture, art, //and// engineering, so I figured it was less confusing on its own!).\n\nBeneath these, theres a second level of hierarchy -- for instance, `330 Physical Sciences` is under `300-399 Science, Mathematics, & Engineering`. Then beneath that, individual subjects: `331 Physics`, `332 Chemistry`, `333 Cosmology` etc. And finally, beneath those are individual documents, usually on a specific source or topic, like `333.02 Why Does The World Exist?: An Existential Detective Story`. I settled on using brackets for the numbers within the name of documents but not their containing category folders, for no other reason than that they looked best to me this way.\n\n\u003C$m2.float width100 source\remnote-greeks.png\/>\n\nIn crowded categories, I add a Greek letter prior to the document name to indicate what type of document/thing it is. For instance, in the section on my search for a life partner, β indicates a book, α an article, and τ a document of personal rules, reflections, etc., with no specific source (I have no idea why I chose τ for this anymore!). Theres also a λ for list category, not seen in the screenshot at right.\n\nYou could also only use tags for this, but tags are less visible than the title when youre looking for something. An intermediate level of hierarchy would also work, but that would complicate the Johnny Decimal system as well as adding an extra step when doing a hierarchical search.\n\n\n!! Why the numbers?\n\nGo read the Johnny Decimal|https://johnnydecimal.com manual/spec for further information. The most important reason relevant to RemNote is that as you use the system youll start to memorize the numbers, and they make navigating fast and easy. Youll often want to search for a particular location in your knowledge base – to jump there with Cmd+P, to move something there with Cmd+Shift+M, to reference or portal something with `` or `((`, and so on. Being able to type just three numbers to select the correct context for hierarchical search|https://help.remnote.com/en/articles/6030777-hierarchical-search, then press Tab and search in there, or five numbers plus a `.` for a specific document, is extremely powerful.\n\n\n!! Do I need a complete hierarchy at all? / Are hierarchies the right tool here?\n\nNot necessarily! I dont use one in M2|MosaicMuse, where youre reading this, and that works fine. But I think RemNote, as an fundamentally outline-based tool, feels like a pretty natural fit for a general hierarchy. Hierarchical search, in particular, is really nice; being able to put documents into rough categories makes it easier to find and connect things.\n\nOne important issue with hierarchies, as you can see with the architecture example, is that things seldom fit into exactly one category. I wrote more about this problem, and some suggested mitigations (not really //solutions//), in Getting Your Filesystem Hierarchy Less Wrong|https://controlaltbackspace.org/hierarchy/. Fortunately, in RemNote, its extremely easy to search and searching is often more natural than navigating individually through levels of a hierarchy anyway, so I find this much less frustrating than in most other systems.\n\n\n!! Use of tags\n\nIn general, I stick to hierarchy as an organizing principle, typically using tags only to generate tables/properties where needed. But there are a handful of places where tags can be very useful to overcome the limitations of standard hierarchies. For instance, I initially started my People section with a fixed hierarchical classification like this:\n\n* 131 Family\n* 132 Friends\n* 133 Romantic Interests\n* 134 Professional Relationships\n* 135 Neighbors\n* 136 Communities\n* 137 Authors & Distanced\n* 138 Fictional\n\n\u003C$m2.float width500 source\remnote-people-layout.png\/>\n\nThis proved to be an extremely annoying design, because people often fit into several of these categories, and, worse, move between them over time. So I recently switched to having a `139 Database` category and putting //all// of the person Rems in there, then tagging them with one or more of the other categories (see right).\n\nThe neat thing about this approach in RemNote is that tag instances are listed like children in hierarchical search, as well as directly under the tags Rem in the Inline Tags List (you might have to turn this feature on in Labs). So I can still trivially see a list of all the people in Friends, or search only my friends by typing `132` and pressing Tab, but now I dont have to choose a single category, and I can move people between categories as needed simply by adjusting the tags.\n\n\n!! Project- and context-specific hierarchies\n\nIn addition to my main hierarchy with the top-level Rems of 100, 200, etc., I have several supplemental ones, for specific projects or jobs that are self-contained and have a time-limited scope. For instance, for things specific to my job at RemNote (basically, the parts I will no longer care about if Im no longer working at RemNote -- so this includes, e.g., information on company policies, but not information on software we use, which I might want to use for some other purpose), I have an `RN` project. These have a two-letter project code, and then two levels of hierarchy (two digits) below them. Otherwise, they work exactly the same.},{title:JohnsonDictionary,author:Samuel Johnson,bibliography:LifetimeReading,caption:Dictionary,created:20210703170128000,genre:Misc,medium:book,modified:20210705214035293,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:JohnstonRidgeObservatory,created:20250623173850140,creator:soren,modified:20250623173851157,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:JordanCollege,created:20200712223401216,modified:20200712223502126,tags:Place Public,type:text/vnd.tiddlywiki,text:College in the HisDarkMaterials OxfordEngland nonexistent in ConsensusPhysicalReality. In the fictional world, it is the oldest and most prestigious, and MsLyraSilvertongues surrogate home.},{title:JosephAndHisBrothers,author:Mann,bibliography:LifetimeReading,caption:Joseph and His Brothers,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035306,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:In four parts.\n\nLength: !},{title:Journal,caption:Journal tiddlers describe events as they happen. They might be written daily or near-daily to describe whats going on, or be created for a particular event.,color:#ff0000,created:20200425035307739,creator:soren,icon:$:/core/images/tag-button,modified:20210828132307946,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nJournal tiddlers dont have any special naming conventions or fields.},{title:JournalOfThePlagueYear,caption:A Journal of the Plague Year,created:20200401225825788,format:ebook,medium:book,modified:20210607011313240,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:JournalOfThePlagueYear,text:Historical fiction by MrDanielDefoe, but praised at the time for being extremely accurate. The 17th-century version of PandemicMood, essentially, in its snapshot of life at the time, the last run the BlackDeath had through London.},{title:Judaism,created:20240402012616744,creator:soren,modified:20240402012625343,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Religion},{title:JuliusCaesar,author:Shakespeare,bibliography:LifetimeReading,caption:Julius Caesar,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035314,priority:2,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:Very readable},{title:JumpToConclusions,created:20200427025736546,creator:soren,es:confident,modified:20230419164823667,modifier:soren,tags:PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:In PhantomTollbooth, Milo jumps to a conclusion and ends up literally on an Island of Conclusions and has to try to work out how to get back.\n\nI find this especially apt when working with technology. Ive screwed myself over quite a few times by thinking I know a diagnosis and spending a bunch of time agonizing over it or even buying equipment, without checking some incredibly obvious things. For instance, there was once I actually bought a new graphics card for my computer and it turned out to be a BadCable instead!\n\nThis is a sort of CognitiveBias. The challenge in thinking is in recognizing when youve hit something worth pursuing (because intuition is often worth a great deal!) and when logistical issues mean you probably shouldnt pursue it first. A cold logical analysis can spot that, but when you think you hit on something brilliant you are not likely to be doing a cold logical analysis!\n\nRelated: not coming to a conclusion until a little bit later, sticking with the exploration, is a SmallBets approach that can save you an awful lot of trouble and even teach you things you cannot learn any other way (see TrustAsymmetry).},{title:JustAsk,created:20200516173425281,creator:soren,description:Asking for help is usually more effective and less risky than people expect.,es:confident,modified:20240305150810751,modifier:soren,tags:Creativity InterpersonalRelations LifeDirection PhilosophyOfLife Politics Public Idea,type:text/vnd.tiddlywiki,text:Its often possible to get a great deal further than you expect by simply asking for something. Most people are willing to negotiate, especially if you have a good reason. Moreover, making a request that someone rejects usually doesnt damage your reputation anywhere near as much as you might think it would -- in fact, sometimes it has a positive effect! BeBold in asking.\n\nCompanies often make things look impossible that are actually eminently possible, if you call them up and ask -- for instance, getting discounts on your bill (me recently: 37.5%|CenturyLinkInternetNegotiation202007, locked in forever), or getting access to features that arent generally available. This is greatly to their advantage because they dont have to provide the things to most people, but they still have the ability to do so when someone really needs or wants it. So, use it to yours!\n\n{{JustAsk/fedp||PrivateChunk}}\n\nA related situation occurs when you can easily ask someone for help, or to walk you through how they did something, but you are determined to do it yourself because you can, especially because youre empowered by the wonders of modern technology. But Google-searching something, or dragging a bookshelf around by yourself, is a poor substitute for the experience of someone whos actually done it, or another pair of hands. I call the unnecessary refusal to ask for help ThreeYearOldSyndrome.\n\n\n!! References\n\n> Asking for what one wants is a known to be successful but highly underused strategy, I presume mostly because of the permanent global chutzpah shortage\u003C\u003Cfnote \“Global Chutzpah Shortage” is going to be the name of my next band.\>> and the associated danger that it might result in mild social awkwardness. \n> ---MrZviMowshowitz, https://thezvi.wordpress.com/2021/06/17/the-apprentice-thread/\n\nJia Jiang did an experiment where he attempted to get rejected every day for 100 days. The requests he initially felt sure would be rejected often actually werent, especially if he explored why someone initially said no and worked from there. See TED talk|https://www.ted.com/talks/jia_jiang_what_i_learned_from_100_days_of_rejection?languageen.},{title:JustGetStarted,created:20200521202428381,creator:soren,description:Youll never get anywhere if you dont start, so do that.,es:confident,modified:20240707143337787,modifier:soren,tags:Creativity PhilosophyOfLife Process Public Idea,type:text/vnd.tiddlywiki,text:The first step doesnt need to be perfect|Perfection. Indeed, it shouldnt and cant be perfect. It can be a very small bet|SmallBets, a trivial experiment|TryItAndSee, or even a piece of total garbage that you actively dont expect to be useful in the long term. Over time it can be made to evolve|IncrementalAndIterative into something decent. (Even if you throw it away entirely, the experiment can be part of the evolution of a winning process!) But it wont ever do that if you dont kick off the process and produce some WorkingSoftware.\n\nA form of PerfectIsTheEnemyOfGood. When people are stuck with fear of starting due to perfectionism, they often deliberate about the best approach, beat around the bush playing with their tools for hours, go out and buy fancy notebooks, etc. Shut up and play|ShutUpAndPlay.\n\nAfter getting started, if youre not sure where to go next, you can proceed to DoTheNextRightThing.\n\nSimilar to MrDavidAllens realizations on NextActions -- if you dont have a next action identified, you dont know what comes next and you never make any progress.\n\nIts often helpful to publish things to the world that are mostly garbage (not //totally// garbage, but less than good); see DefaultToOpen.\n\n\n!! References\n\n\u003C$m2.x number1>\n\nYoull never get anywhere if you dont start.\n\n---me (\u003C\u003Crt 2244>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number2>\n\nIf the choice is between perfection and nothing, nothing wins every time.\n\n---MrJakobNielsen, HistoryOfHypertext1995 (\u003C\u003Crt 11592>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number3>\n\nIn any moment of decision, the best thing you can do is the right thing, the next best thing is the wrong thing, and the worst thing you can do is nothing.\n\n---MrTeddyRoosevelt (\u003C\u003Crt 5661>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number4>\n\nNothings more subversive than getting started, because nobody ever does it.\n\n---G.|PrivatePerson (\u003C\u003Crt 12272>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number5>\n\nIf you want to be useful, you can always start now, with\nonly 1% of what you have in your grand vision. It’ll be a\nhumble prototype version of your grand vision, but you’ll\nbe in the game. You’ll be ahead of the rest, because you\nactually started, while others are waiting for the finish line\nto magically appear at the starting line.\n\n---MrDerekSivers, “Start now. No funding needed,” from //Anything You Want//\n\n\u003C/$m2.x>},{title:Kalaloch,created:20250626182650323,creator:soren,modified:20250626182651456,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Kanna,created:20250309154551871,creator:soren,es:likely,modified:20250626173325904,modifier:soren,tags:Drug Idea Public,type:text/vnd.tiddlywiki,text:Mood stabilizer, affecting serotonin. Available as a supplement.\n\n{{Kanna/p||PrivateChunk}}\n\nEmail to M.|PrivatePerson summarizing most of what I know about it:\n\n\u003C\u003C\u003C\nLorien Psychiatry writeup: https://lorienpsych.com/2020/12/08/kanna-zembrin/. Note that I think this contains a slight inaccuracy – from what Ive read elsewhere kanna is not actually an SSRI, it is a different kind of serotonin reuptake inhibitor (the first S stands for selective, kannas mechanism is not selective).\n\nZembrin is a proprietary name for one particular extract of kanna. MrScottAlexander recommended this one on that page:\nhttps://www.amazon.com/Doctors-Best-Zembrin-Veggie-Count/dp/B01N1X0QF9/\n\nBut different extracts can be pretty different, and like you said, Id expect you to have better than average results with something that feels good for me. This is what I tried: https://kannaextract.com/products/rest-kanna-extract.\n\nThis is sold as powder, which is a little annoying to use, but also means you have a lot more control over the dose, which is nice when youre trying something with minimal clinical guidelines. I used my milligram scale to measure, but theres a little spoon in the package, its just a bit less accurate for the same reason weighing flour is way more accurate. I dont think kanna is very sensitive to dosing though.\n\nI tested my reaction with about half a spoonful taken sublingually (drop under your tongue and hold it there without swallowing for ~10 minutes). This hits faster and usually doesnt last as long, so its easier to tell what its doing and itll go away sooner if you dont like it. On subsequent occasions I mixed 25mg into a cup of tea.\n\nNote that doses are not transferable across different extracts because some of them contain more of the active substances than others, and they dont measure those separately (there are some disadvantages to unregulated-supplement-land!).\n\nI should mention that in contrast to l-theanine|Theanine, which is so subtle Im not sure I could tell if I had taken it or a placebo, this made me feel different. Its a pretty subtle effect, certainly far short of being high, and entirely pleasant, but something to be aware of. It is a bit energizing, but in a totally different way than stimulants like caffeine or Adderall, which raise your heart rate, make you feel more awake, etc.; it almost feels more like my desires and intentions are directly shifted than my body or nervous system. Unusually good mood, hard to be anxious. Also Im more sensitive to touch (in a good way – I guess some people use it as an aphrodisiac). Its supposed to make you more outgoing/confident, and I could believe that from my experience, but I havent tried taking it in a context where I could see if this is true for me.\n\nSome people say you have to take kanna for a few days to get an effect, more in the manner of SSRIs, but as mentioned above I notice something within 30–60 minutes of taking it. This might differ between different extracts though; I think Ive heard this primarily from people who used Zembrin.\n\u003C\u003C\u003C},{title:KansasCity,created:20230427025512610,creator:soren,modified:20230427025514711,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:KaplansWoods,created:20200512033016941,creator:soren,modified:20240509144514464,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Small wooded natural area on the south side of OwatonnaMinnesota. Can be a bit buggy in the summer, but a nice enough place for a walk if you want to get in the woods. Very pathy though and quite noisy. Apparently it was once a state park...its a good thing its not anymore, because its a nice municipal park but not special!},{title:KatzUndMaus1961,author:Grass,bibliography:LifetimeReading,caption:Katz und Maus,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035327,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1961},{title:kc-central-highways.png,type:image/png,created:20240811135734137,creator:soren,modified:20240811151709982,modifier:soren,tags:Image Public,_canonical_uri:./extimage/kc-central-highways.png},{title:Keeper,created:20241125001139981,creator:soren,modified:20241125001421601,modifier:soren,tags:Romance Idea Software Public,type:text/vnd.tiddlywiki,url:https://keeper.ai,text:Dating service offering partially-AI-powered, partially human-powered matchmaking. Claims to be extremely effective. Notable for being much closer to incentives-aligned than any other service Im aware of (you pay them a bit per match that you like enough to want to go out with, and a lot if they find you someone you marry, and nothing besides a setup fee otherwise); see KeeperReview for discussion of the incentives at play and where they do fall short.\n\nVery heteronormative, and the premium versions are very expensive. Theyre starting with the easiest problem to prove it out, presumably.\n\n{{!!url}}},{title:KenwoodPark,created:20240402012738804,creator:soren,modified:20240402012751593,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Large Minneapolis park next to LakeOfTheIsles.},{title:KingHenryTheFourth,author:Shakespeare,bibliography:LifetimeReading,caption:King Henry the Fourth (Part 1, maybe Part 2),created:20210703170128000,genre:Literature,medium:book,modified:20210705214035335,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:KingLear,author:Shakespeare,bibliography:LifetimeReading,caption:King Lear,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035342,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:KitchenWasher,created:20201209015845378,es:probably wrong,modified:20210725174235078,tags:WhatIf MyGreatIdea Systems Public Idea,type:text/vnd.tiddlywiki,text:The kitchen washer is a hypothetical and probably physically impractical device to make cleanup easier. It is the next logical step after the dishwasher. Normally, with a dishwasher, one must carefully gather up all of the dirty things and put them in the dishwasher, then wipe the bits that came off the dirty dishes off the surfaces.\n\nThe kitchen washer, by contrast, is built into the kitchen itself. One simply removes any items that are //not// supposed to be washed from the kitchen, closes the cabinets and the door to the kitchen, and turns on the kitchen washer, and everything from the dishes to the counter to the floor to the sink is washed right in place.\n\nAs an UnthankableSystem, anything to improve kitchen cleaning is desirable! (Then again, I actually rather like washing dishes. It quite reliably gets me into a FlowState where I come up with useful ideas, much like ThoughtWalking.)},{title:KlaraAndTheSun2021,author:Kazuo Ishiguro,caption:Klara and the Sun,completed:202105131200,created:20210514020931125,creator:soren,isbn:9780593318171,medium:book,modified:20230406024606234,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:KlaraAndTheSun2021,url:,year:2021,text:Novel by MrKazuoIshiguro. Five stars: suspenseful, creative, and thought-provoking all at the same time.\n\n!! Setting\n\nA deteriorating, not yet dystopic but visibly heading that way, near future characterized by increasing mechanization/automation and, as a result, destructive competition among humans to remain relevant. Many people have been “substituted” (evidently, lost their jobs to machines -- nearly all of the terms and phrases are undefined and you have to work them out yourself) and the process continues apace. Some kind of medical procedure has become available that increases the intelligence of children to make them more competitive, but often causes them to sicken and even occasionally die (having said procedure is called being “lifted”). The RaceToTheBottom is so serious that anyone who doesnt take the risk will (almost) never get into college, which appears one of the only routes forward; the opportunities are less and less for others. Social conditions are worsening rapidly and many people have joined closed communities, some of which are arming themselves.\n\nI imagine the year as somewhere around 2030; cell phones, cars, farms, houses, and cities seem more or less exactly like they are now, and I can imagine AI, biotech, and progress in automation and associated politics reaching the books level in about that long if just a couple of unusually fast breakthroughs happen. (Heck, there are already people creating AFs|Replika, albeit without the physical manifestation.)\n\n!! Main characters\n\n* Klara -- narrator, an AF purchased for Josie\n* Josie -- a teenage girl, recently lifted, struggling, constantly sick\n* The Mother (Chrissie) -- Josies mother, a lawyer\n* The Father (Paul) -- Josies father, an engineer, now long out of work; they are divorced, Josie living almost all the time with the Mother, and its not explained why, though one suspects it may have had to do with a disagreement over Sal and/or Josies lifting, or perhaps over the Fathers substitution and his subsequent vastly different approach to life\n* Rick -- Josies best friend and possible future husband (this does not happen, but they always believed it would, which is what turns out to matter); not lifted, creating conflict, though his mother doesnt exactly explain why she didnt have him lifted; perhaps she doesnt know herself\n\n(Its hard to say whether Klara or Josie is the protagonist. Klara is in the title and its her journey to understand and save Josie that we follow, but her entire life is centered around helping Josie. They have different perspectives but want only very slightly different things.)\n\nNotably the narrator, Klara, is a robot, specifically an AF (I take it this stands for “artificial friend” or “autonomous friend” or something of that sort, but to my memory the expansion is never explicitly stated). She is a highly unusual and fascinating narrator|KlaraAsNarrator.\n\n\n!! Plot summary\n\n(No attempt made to cover all parts of the story evenly, just adding the stuff I was most interested in or want to remember.)\n\nKlara is purchased ostensibly as a friend for Josie, who is socially isolated like most lifted children because shes getting one-on-one electronic tutoring at home all the time. But there is a more sinister purpose, too, which you dont discover until a bit more than halfway through the book; I didnt guess it until it was revealed explicitly, though one possibly could have, and Klara knew ahead of time but didnt tell us. Josies sister Sal died from being lifted, and her mother (except in dialogue between the humans, called only //the Mother//) doesnt think she can take it if Josie dies too, so she has gone to a somewhat creepy guy named Mr. Capaldi, who is working on Josies “portrait,” really an AF body that looks like Josie. If Josie dies, Klara will inhabit it and essentially become Josie|AiContinuation, Klara having internalized how to behave very much like Josie.\n\nKlara has several formative experiences in part 1, her time in the store, in particular in which she associates the Sun with health -- partly because she is solar-powered, but also because she sees a beggar and his dog recover from apparent near-death by having the sun shine on them one morning; she calls this the Suns “special help”. Klara more or less worships the Sun, discussing how it fits into every scene and trying to watch it whenever possible (thus the title).\n\nOver the course of the book, in order to try to get the Suns special help for sick Josie, Klara undertakes two pilgrimages to Mr. ~McBains barn, which is really a half-barn and storage shed with some of the walls missing. She has to be carried there by Rick due to difficult terrain, but Rick leaves her alone as she requests. Mr. ~McBains barn is chosen because its where the Sun appears to sink into when it sets from Josies window. At first Klara thinks the Sun actually goes there for the night; she later realizes that he merely “passes through,” but this is still enough to commune with him. She does this by talking to the Sun in her head|InternalDialogue, commenting that one need not actually speak out loud to the Sun, though seemingly one may need to be in an appropriate holy place. (Cf. Pines.)\n\nThe first time she visits, she undertakes a bargain to destroy the Cootings Machine (a polluting construction vehicle), and she gets the Father to help her. They destroy the machine by taking a small amount of solvent from a chamber in Klaras head, which the Father reckons she can do without without suffering any major impairment, and pouring it into the fuel nozzle of the machine, ruining the engine. Unfortunately, a replacement Cootings Machine is soon back at work, so she believes herself to have failed, and the Suns special help does not materialize.\n\nThe second time, she doesnt offer anything in the same way, but she begs the Sun to help because she knows he likes love (more or less), and Josie and Rick wont have a chance to grow old together if he doesnt help. The Sun falls below the horizon with Klara having come to less of a certain understanding than the first time, but this time, the next day, in the middle of stormy and ugly weather, the Sun breaks out of the clouds and Klara runs upstairs and insists the curtains be pulled wide, and Josie awakens, comments on the light, and feels much better as the Sun falls brightly on her.\n\nThe final part begins with a masterpiece of a sentence:\n\n> The Suns special nourishment proved as effective for Josie as it had for Beggar Man, and after the dark sky morning, she grew not only stronger, but from a child into an adult.\n\nBut then, Im always a sucker for the //not only...but also// construction, for whatever reason.\n\nKlara never tells anybody (except the reader) the full details of these visits or what she believes, treating them as sacred and perhaps understanding that explaining them will get her written off.\n\nJosie regains her health and goes to college, and that is the last we and Klara hear of her. Rick decides not to pursue college but has his own plans; they dont expect to see each other again, though its suggested that perhaps someday they will meet unexpectedly like a couple Klara watched meet, evidently after many years, outside the store in part 1.\n\nKlara ends up in a scrapyard of some sort, where she for some reason runs into the Manager of her old store; one cannot help but wonder why the manager is wandering around the dump looking for old AFs (perhaps she has been substituted and doesnt know what else to do with herself?). Klara is telling this story a couple of days after that, perhaps as a final review of her artificial life.\n\n\n!! Themes and takeaways\n\nThe overwhelming theme to me seemed to be ambiguity of all kinds, causal and moral. Ive read the whole thing, and it was delightful in many ways, but Im not sure Ive come out with a clear understanding of what, if anything, Ishiguro means to communicate on any of the issues involved, except perhaps “its complicated, and you should think about such things” (which is a fine message, dont get me wrong). Klara even exhibits something of this metaphorically herself at the end, with all her memories blurring on top of each other in interesting ways (has she processed them in some meaningful way? reached her memory capacity? circuits decaying? can anyone know, including her?).\n\nParticular contributions to this impression:\n\n* The book could serve as a demo of “show, dont tell,” to the extent that the reader must figure out almost everything themselves from first principles and background knowledge|ImplicitFictionalContext (as Klara does!), and leaving me with the impression that I //think// I understand what happened, but I could easily be missing something important.\n* Are AFs good or bad, or neither? They are deeply suspicious, and can tempt use in clearly strange and problematic ways (see the Mother). Josie also might not be here without one, and it clearly helped her; although perhaps AFs also enable the social disconnection that is leading to the problems! (Cf. the CPR Replika.)\n* Rick works on surveillance drones that he comments have potential ethical issues, but hes just trying to explore the issues, and they could be used in both good and bad ways. (Cf. CantBlamePlatformDesignersForNatureOfInformationStreams.)\n* Did Klara actually have anything to do with Josies recovery? Destroying the Cootings Machine in one sense obviously had nothing to do with it, and it seems similarly absurd that a few seconds of sunlight because Klara believed and ran up to let it in could have had any impact. You also cant help believing that it did, somehow, maybe partly because of the impression you get that Klara knows what shes doing in a way that even she doesnt understand. As she was working all her machinations, I was constantly trying to figure out what long chains of causation could end up leading to Josies recovery, but ultimately if there is one, its beyond our comprehension. Rick says that he originally thought the whole thing was “AF superstition,” but also that later on he has begun to think theres something to it, and he explicitly tells Klara not to explain to him because he doesnt want to jinx anything. (This has many echoes of the discussions about magic in MyLillianAndSylvia.)\n* The Father believes, seemingly truly, that his substitution was good, and perhaps (though not explicitly explained) that this is a halting step towards a better future. The Mother hates it. The whole thing is clearly divisive. I think we may well face this question in ConsensusPhysicalReality not too long from now, and I have no idea what the answer is; in some important sense, I think we cant know until its complete, which puts us in an impossible bind. Cf. OnlyHumansNeedApply2016.\n* What //about// black-box AI? And is it different from people? I mean, we cant really understand ourselves or other people either. The conceit of the //p-zombie// seems relevant here, as does the discussion above about whether an AF can in theory simulate a person. Are we all alike in being black boxes, and the centuries between the beginning of engineering and the start of artificial intelligence just a brief moment in which we pretended naïvely that we could explain the world? (Cf. ArtificialGeneralIntelligence, ModelInterpretability.)},{title:KlaraAsNarrator,created:20210516210704783,creator:soren,es:likely,modified:20210825032058578,modifier:soren,tags:Public FictionTheory Idea,type:text/vnd.tiddlywiki,universe:KlaraAndTheSun2021,text:The AF Klara in KlaraAndTheSun2021 is a fascinating narrator. She isnt exactly unreliable|UnreliableNarrator, but she leaves you guessing at basic facts of the world that you wouldnt normally because her intelligence is different than a humans. You see her unfiltered attempts to parse the world using some kind of computer-vision algorithm when things get complicated, and if she cant quite figure out whats going on around her or what people are thinking or doing, you often cant either.\n\nYet she also sees things other people dont, and even when she seems to be acting on superstition or outright misunderstanding, you cant quite shake the feeling that she knows something you dont, even if she cant or doesnt explain it. Call it the UncannyValley of black-box AI|ArtificialIntelligence -- the idea of which is explicitly evoked in a scene with Mr. Capaldi at the end, in which we learn that society is growing to distrust AFs because they dont understand whats going on inside|ModelInterpretability.},{title:KnewItIntellectually,created:20200324033250561,creator:soren,description:You can believe and tell people that something is true without fundamentally feeling you believe or making subconscious decisions based on that belief.,es:confident,modified:20221202002053558,modifier:soren,tags:Learning Psychology Public Idea,type:text/vnd.tiddlywiki,text:Its possible and common to know something intellectually, in the sense that you would tell someone that it was a fact, but still not act upon it or believe it “deep down.” Often an element of HaveToExperienceItToUnderstand involved.\n\nSee for example CanDisagreeWithYourMother, or exhibiting HiddenSystemicRacism while wholeheartedly believing its wrong.\n\nOpenQuestion: I think there are multiple Greek words|https://aquileana.wordpress.com/2014/02/01/aristotles-three-types-of-knowledge-in-the-nichomachean-ethics-techne-episteme-and-phronesis/ for different types of knowing, which might be a useful concept to bring in here. Look that up. -- connects with HTEITU too probably.},{title:KnockingOutTheLowerRungs,created:20210627033700831,description:Simplifying life by ceasing to understand the basics or lower-level abstractions creates fragility: you can no longer step down should it be required. As the kicking approach is more widely adopted and more time goes by, this could have disastrous consequences.,es:confident,modified:20210627040052511,tags:Metaphor Systems Employment Public Idea,type:text/vnd.tiddlywiki,text:A point that came up several times in OnlyHumansNeedApply2016 and which Ive also discussed with J.P.|PrivatePerson: increasing automation and even augmentation has a way of “knocking out the lower rungs.” The metaphor (which I borrow from MrJohnMichaelGreer) is of ascending a ladder of “progress” or levels of abstraction, kicking out each rung from underneath you as you cease to be able to operate at that level or consider it worth maintaining. This works great until suddenly the top rung gets damaged or wears out: there are no backward steps to take, and its a long way to the ground, where you lose everything youve accomplished.\n\nIn the context of automation, the experts develop the system (stepping forward|WaysOfStepping) and stay on to work with it (stepping forward and in); the lower-level people lose their jobs or are reallocated somewhere else. Then the system hums along for years with the experts maintaining it by using their prior experience. Nobody new is hired because the system is humming along; indeed, anyone new would struggle to get started because all of the easy work that allows someone to get the hang of the central ideas of the process has been automated. Eventually the experts retire...and the new people are completely clueless about the system, dont know what to do if it doesnt work, and cant improve it.\n\nThe OAs dont suggest and dont seem to have a solution to this problem, and neither do I, but it seems like a critical and largely unexamined OpenQuestion for the entire world. If sufficiently unresolved, it could sink the entire project of automation/augmentation and maybe even cause disastrous consequences to important foundations of civilization.},{title:KnowItWhenWeSeeIt,created:20200410145736450,creator:soren,es:confident,modified:20201218033057907,modifier:soren,tags:Expression Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Sometimes its next to impossible to produce a definition of something, but its nevertheless straightforwardly obvious. This would seem to happen when weve learned to identify the category heuristically either through experience or Evolution, but the true definition is either incredibly complicated or we simply do the task so naturally that were unable to figure out why we make the decisions we do.\n\nThis phenomenon is closely related to HypoCognition; a definition is rather like a name in its ability to clarify what exactly something is and thus cluster items that fit and items that dont.\n\n!! References\n\nMrPotterStewart is famous for having used this phrase (with “I”, of course) to describe pornography (see Wikipedia|https://en.wikipedia.org/wiki/I_know_it_when_I_see_it).\n\nI talked about chairs|https://controlaltbackspace.org/memory/human-memory-by-example-strengths/#pattern-recognition having this problem on TheControlAltBackspace at one point, to illustrate how easily we are able to use our memory of previous elements of a set to identify new, quite different, elements.\n\nHowToReadABook1972 argues, without using the term, that this applies to poetry:\n\n> Between such very broad and such very narrow definitions lies a central core that most people, if they were feeling reasonable about the matter, would admit was poetry. If we tried to state precisely what the central core consisted in, we would probably get into trouble, and so we will not try. Nevertheless, we are certain that you know what we mean. We are certain that nine times out of ten, or perhaps even ninety-nine times out of a hundred, you would agree with us that X was a poem and Y was not.},{title:KnowledgeReuse,created:20210613210706247,description:Systems which support knowledge reuse are characterized by their ability to elicit atomic pieces of information from users and allow those pieces to be shared and remixed.,es:confident,modified:20210811183621458,tags:Idea Information PersonalDocumentation Public,type:text/vnd.tiddlywiki,text:> When knowledge is transferred from someone who has it to someone who doesnt, //knowledge reuse// means that transfer is public, repeatable, and beneficial to future answer-seekers.\n> ---https://stackoverflowsolutions.com/teams/what-is-knowledge-reuse\n\nThis definition works great for StackOverflow, because its conveniently the principle behind their flagship product StackOverflowForTeams, but its worth pointing out that knowledge reuse doesnt have to begin with transferring knowledge between people; thats merely one of the most convenient ways to realize you need to capture it and get people to do so (because you had to answer their question or teach them something //anyway//). The key point is that you, or an organization, gets nuggets of information out of peoples heads and into a system where they can be used in many different ways, ideally by anyone.\n\nSystems that support knowledge reuse have several characteristics:\n\n* They link together relevant topics|NotesMustLink, so that people have a hope of finding the information again in the future. Ideally, in every context the information was used or produced, there is a link to that information. Good tooling helps a great deal here, as it can make this nearly automatic, but its still possible to create transferable knowledge with mediocre tooling.\n* Topics are atomized|TiddlyThinking in one way or another, so that each can be maintained separately and used in different contexts.\n* Everything has a URL|EverythingShouldHaveAUrl, so people can point each other to the artifacts produced.\n* Material is regularly revisited and revised.\n** This might be because people wander across it on the way to other information (e.g., in a ZettelKasten), because they are required to constantly use it by a formal methodology (e.g., a DocsFirstMethodology), or because of a system built in to the tool that invites review (e.g., the one proposed in DocumentationStates).\n** In collaborative systems, its critical that everyone have the ability and the social mandate to quickly and easily edit the information to fix problems. (Possibly a good feedback system could work instead, but when ignoring tooling difficulties, providing feedback is always more annoying than just fixing the problem when its obvious what the fix is, and even a TrivialInconvenience will often put people off making fixes.)\n** The BrokenWindowsTheory of documentation applies: maintaining quality and accuracy at all times is crucial, because if the documentation starts to unidentifiably slip out of date or otherwise become incorrect, people will rapidly stop trusting it, and then nobody will use it and it will get even more out of date.\n\nThe quality of a knowledge reuse system most likely follows NonlinearRatcheting: the value of the system grows faster with each added unit of information the more material it contains.},{title:KnowledgeWork,created:20200423231733979,es:likely,modified:20221115193923332,modifier:soren,tags:Employment Identity Definition Public Idea,type:text/vnd.tiddlywiki,text:Basic term for the growing form of value creation in the industrialized world. Knowledge work is not inherently better than any other type of work, but it does nowadays attract most of the most intelligent people, rightly or wrongly. Not participating in knowledge work, or certain other specific types of work like trades, tends to doom you to low-paying jobs. Despite this perception, I would argue that without serious work and reflection, it actually tends to result in a //less// fulfilling life (compare AbstractAndConcreteThinking; and note that there is a clear negative correlation between happiness and intelligence). Staring at a computer doing something you find uninteresting is much worse than being outside moving your body with other people doing something you find uninteresting! The latter isnt always pleasant by any means, but at least its more //human//, and it is usually a first-order contribution|HigherOrderContributor, which makes it more immediate and obviously meaningful.\n\nCharacterized by limited use of physical capabilities and high brain usage, often working in an office where you literally sit and move nothing but your fingers on the keyboard and mouse.\n\nDoing this effectively greatly benefits from a set of skills many people, including many knowledge workers, have not effectively developed, including but definitely not limited to:\n\n* DeepWork\n* Effective note-taking and memory (specifically, the use of EvergreenNotes and SpacedRepetition)\n* DeliberatePractice at the skills applicable to ones career},{title:KramarczuksSausageCo,created:20231011024417867,creator:soren,modified:20231011024419044,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LaBelleLucie,created:20210708033704095,creator:soren,es:possible,modified:20240616041119608,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text://La Belle Lucie// is a very fun solitaire game that is less well-known than it ought to be and has some interesting mathematical aspects to explore.\n\nAt the moment, this is a very rough draft which has almost no structure and is missing giant pieces of the puzzle. Parts of it are probably completely wrong. Caveat lector.\n\n!! Topics\n\nGoto LaBelleLucie/SafeMove -- structure is rather sloppy at the moment\n\n\n!! Definitions\n\n\u003C\u003Cstretch-links \prefixLaBelleLucie/Definitions/sorttitle\ smallField:caption>>\n\n\u003C!--\n\u003Cdl>\n\u003C$list filter\prefixLaBelleLucie/Definitions/sorttitle\>\n\t\u003Cdt>\u003C$link to{{!!title}}>\u003C$view field\caption\>{{!!title}}\u003C/$view>\u003C/$link>\u003C/dt>\n\t\u003Cdd>\u003C$transclude mode\block\/>\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n-->},{title:LaBelleLucie/Definitions/Blocked,caption:Blocked,created:20210715015159908,creator:soren,modified:20240402025904800,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:A card or run|LaBelleLucie/Definitions/Run of cards is blocked if it cannot, at the present moment, be moved to the foundation or to its upper neighbor because other cards are on top of it.\n\nA suit is blocked if the card that can next be placed on the foundation is blocked.\n\nBlocks come in four types, which sometimes overlap: \n\n\u003C\u003Cstretch-links \LaBelleLucie/Definitions/SoftBlock LaBelleLucie/Definitions/FoundationBlock LaBelleLucie/Definitions/HardBlock LaBelleLucie/Definitions/CompleteBlock\ smallField:caption>>\n\nA card that is not blocked is free|LaBelleLucie/Definitions/Free.},{title:LaBelleLucie/Definitions/Blocking,caption:Blocking,created:20210715015208383,modified:20210807154013628,tags:Public Idea,type:text/vnd.tiddlywiki,text:A card or run of cards|LaBelleLucie/Definitions/Run is //blocking// if it is on top of other cards, preventing them from being moved.\n\nA card or run is //not// blocking if its on top of other cards, but those cards would form part or all of a complete block|LaBelleLucie/Definitions/CompleteBlock even if the top card/run was removed. Since its permanently impossible to do anything with the complete block anyway, it doesnt make sense to consider the top card to be blocking it.\n\nTwo fans|LaBelleLucie/Definitions/Fan which cause each other to be hard-blocked are mutually blocking|LaBelleLucie/Definitions/MutuallyBlocking.},{title:LaBelleLucie/Definitions/ChokePoint,caption:Choke point,created:20210715015300243,modified:20210715022915162,tags:Public Idea,type:text/vnd.tiddlywiki,text:A //choke point// is a single block|LaBelleLucie/Definitions/Blocked that makes a large portion of the rest of the tableau unusable or transitively blocks most or all of the suits. This happens surprisingly often, so its useful to look ahead and avoid creating them if possible.},{title:LaBelleLucie/Definitions/CompleteBlock,caption:Complete block,created:20210715015247387,modified:20210715022913816,tags:Public Idea,type:text/vnd.tiddlywiki,text:A //complete block// is a subset of hard block|LaBelleLucie/Definitions/HardBlock that not only cannot ever be moved but also cannot ever be built on, because the lower neighbor|LaBelleLucie/Definitions/Neighbor of the top card is part of the hard block.\n\nComplete blocks have the odd property of being topologically irrelevant to anything else on the tableau. For instance, if a complete block has a different card on top of it, that card is independent|LaBelleLucie/Definitions/Independent -- its not relevant whether a complete block is “blocked”, as it cant be moved anyway. (Example: QD KD.)},{title:LaBelleLucie/Definitions/Deal,caption:Deal,created:20210715022051287,modified:20210715023016426,tags:Public Idea,type:text/vnd.tiddlywiki,text:The act of shuffling and placing cards onto the tableau|LaBelleLucie/Definitions/Tableau in fans|LaBelleLucie/Definitions/Fan; also, the period during which you make moves after so doing.\n\nIn a normal game of LBL, you get three deals to move everything to the foundation. For deals two and three, you gather up all the cards on the tableau, leaving anything youve gotten onto the foundations|LaBelleLucie/Definitions/Foundation in place, redeal them, then continue from there.\n\nOn the third deal, you can also perform a merci|LaBelleLucie/Definitions/Merci.},{title:LaBelleLucie/Definitions/Fan,caption:Fan,created:20210715015134380,modified:20210715022908943,tags:Public Idea,type:text/vnd.tiddlywiki,text:The tableau|LaBelleLucie/Definitions/Tableau is composed of a number of fans. There are 17 fans of 3 cards and 1 fan of 1 card on the first deal; the second and third deals will usually have fewer, depending on how many cards you have moved to the foundation|LaBelleLucie/Definitions/Foundation.\n\nOnly the topmost card in a fan is free|LaBelleLucie/Definitions/Free and may be moved; all cards below the topmost card are blocked|LaBelleLucie/Definitions/Blocked, and the topmost card is blocking|LaBelleLucie/Definitions/Blocking the rest.\n\nA fan can have more than 3 cards if you build runs|LaBelleLucie/Definitions/Run on its topmost card. If a fan reaches 0 cards, it disappears for the remainder of the deal|LaBelleLucie/Definitions/Deal and no other card can be put in its place.},{title:LaBelleLucie/Definitions/Foundation,caption:Foundation,created:20210715015126154,modified:20210715022907538,tags:Public Idea,type:text/vnd.tiddlywiki,text:One of the four piles which are built up from ace to king. The upper neighbor|LaBelleLucie/Definitions/Neighbor of the currently visible card may be moved from the tableau|LaBelleLucie/Definitions/Tableau to the foundation if it is free|LaBelleLucie/Definitions/Free. If you succeed in moving all the cards to these piles within three deals, you win.},{title:LaBelleLucie/Definitions/FoundationBlock,caption:Foundation block,created:20210715015223739,modified:20210715022906289,tags:Public Idea,type:text/vnd.tiddlywiki,text:A //foundation block// is a subset of soft block|LaBelleLucie/Definitions/SoftBlock which can only be released by moving the blocking cards to the foundation|LaBelleLucie/Definitions/Foundation, not by moving them to another fan|LaBelleLucie/Definitions/Fan. Usually this is because the blocking cards|LaBelleLucie/Definitions/Blocking are a run|LaBelleLucie/Definitions/Run, but it can also be because the blocking cards upper neighbor|LaBelleLucie/Definitions/Neighbor is hard-blocked|LaBelleLucie/Definitions/HardBlock.},{title:LaBelleLucie/Definitions/Free,caption:Free,created:20210715015154751,modified:20210715022904946,tags:Public Idea,type:text/vnd.tiddlywiki,text:A card or run of cards|LaBelleLucie/Definitions/Run is //free// if it is on the top of a fan|LaBelleLucie/Definitions/Fan, so that there is nothing preventing you from moving it to the foundation|LaBelleLucie/Definitions/Foundation or onto its upper neighbor|LaBelleLucie/Definitions/Neighbor, or from building its lower neighbor|LaBelleLucie/Definitions/Neighbor on it.\n\nA card or run is free regardless of whether it presently has the opportunity to exercise its right to move. For instance, if the card is on top of a fan, but its upper neighbor and lower neighbor are both blocked|LaBelleLucie/Definitions/Blocked, the card has no possible destination and thus cannot be moved at this moment; but it is still free since if such a destination opened up, it would immediately become movable.},{title:LaBelleLucie/Definitions/HardBlock,caption:Hard block,created:20210715015241907,modified:20210807153523332,tags:Public Idea,type:text/vnd.tiddlywiki,text:A //hard block// is a block|LaBelleLucie/Definitions/Blocked that can never be legally released except by redealing|LaBelleLucie/Definitions/Deal or applying a merci|LaBelleLucie/Definitions/Merci. A soft block|LaBelleLucie/Definitions/SoftBlock becomes a hard block when all of the moves that would allow the soft block to be released are themselves impossible because of a hard block, or because of another apparent soft block that would require the first soft block to be released|LaBelleLucie/Definitions/MutuallyBlocking. (This isnt nearly as unlikely as it would sound, because there are only //two possible moves for each card// in LBL: moving the card onto the foundation|LaBelleLucie/Definitions/Foundation and moving it onto its upper neighbor|LaBelleLucie/Definitions/Neighbor.)\n\nTopologically, hard blocks are caused by dependency cycles, where A cant be moved because of B and B cant be moved because of A. There can be more than two participants in these cycles.\n\nA suit is hard-blocked if it is impossible to release the card that can next be placed on the foundation during the current deal, no matter what moves are undertaken. If any suit is hard-blocked, it is not possible to win on this deal (unless it is deal 3, in which case a single hard block can be released via a //merci//).},{title:LaBelleLucie/Definitions/Independent,caption:Independent,created:20210715015213326,modified:20210715022900831,tags:Public Idea,type:text/vnd.tiddlywiki,text:A card or run of cards is //independent// if it is neither blocked|LaBelleLucie/Definitions/Blocked nor blocking|LaBelleLucie/Definitions/Blocking; or, equivalently, if it is free|LaBelleLucie/Definitions/Free and it is not blocking any other run that would otherwise be free but for the position of this run.\n\nIndependent cards/runs are usually in a fan of their own, but can also be atop a complete block|LaBelleLucie/Definitions/CompleteBlock.},{title:LaBelleLucie/Definitions/Merci,caption:Merci,created:20210715015253203,modified:20210715022859446,tags:Public Idea,type:text/vnd.tiddlywiki,text:On the third and final deal, one card anywhere on the tableau|LaBelleLucie/Definitions/Tableau which is not at the top of its fan|LaBelleLucie/Definitions/Fan may be selected and moved to any legal target (either its upper neighbor|LaBelleLucie/Definitions/Neighbor or the foundation|LaBelleLucie/Definitions/Foundation). This may happen anytime during the deal, but only one card may be moved this way per game.\n\nThe //merci// allows the game to be winnable even if the last deal of the tableau contains one hard block|LaBelleLucie/Definitions/HardBlock. Hard blocks are common on any deal, so without the //merci// rule, the game is rarely winnable (if youre feeling hardcore, you can play without it, but its much less fun!).\n\nThe //merci// makes the underlying math of the game quite a bit more difficult, and I probably have not accounted for all its effects.},{title:LaBelleLucie/Definitions/MutuallyBlocking,caption:Mutually blocking,created:20210807153748154,modified:20210807154333350,tags:Public,type:text/vnd.tiddlywiki,text:Two (or more) fans|LaBelleLucie/Definitions/Fan which each require a card which is soft-blocked|LaBelleLucie/Definitions/SoftBlock in the other stack to unblock together form a hard block|LaBelleLucie/Definitions/HardBlock. These fans are said to be //mutually blocking//, or, colloquially, //mutualed//.},{title:LaBelleLucie/Definitions/Natural,caption:Natural,created:20210715015150556,creator:soren,modified:20210915215715369,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:A feature of the tableau|LaBelleLucie/Definitions/Tableau is //natural// if it was dealt that way, rather than being created by a sequence of moves by the player.\n\nA natural run|LaBelleLucie/Definitions/Run is one that is dealt onto the tableau|LaBelleLucie/Definitions/Tableau as a run; a natural hard block|LaBelleLucie/Definitions/HardBlock is one that was dealt in an immovable position, and so on.},{title:LaBelleLucie/Definitions/Neighbor,caption:Neighbor,created:20210715015139354,modified:20210715022856041,tags:Public Idea,type:text/vnd.tiddlywiki,text:The card of the same suit and a number one above or below some card is its //upper neighbor// or //lower neighbor// (respectively). Aces are low.\n\nFor instance, the upper neighbor of 5C is 6C, and the lower neighbor of 2H is AH. Kings have no upper neighbor, and aces have no lower neighbor.},{title:LaBelleLucie/Definitions/Run,caption:Run,created:20210715015145459,modified:20210715022854753,tags:Public Idea,type:text/vnd.tiddlywiki,text:A run of cards is a series of cards of the same suit in descending order, placed on the tableau|LaBelleLucie/Definitions/Tableau. For instance, 5C 4C 3C is a run. Runs are formed (or //built//) by moving a card or runs lower neighbor|LaBelleLucie/Definitions/Neighbor on top of it.\n\nRuns have several interesting properties. Most importantly, they can always be moved to the foundation|LaBelleLucie/Definitions/Foundation together, but no part of them can ever be moved elsewhere on the tableau, so by creating a run you are committing to keeping them together and in their present location until either the lower neighbor of the bottommost card is placed on the foundation or you redeal|LaBelleLucie/Definitions/Deal the cards.},{title:LaBelleLucie/Definitions/SoftBlock,caption:Soft block,created:20210715015219197,modified:20210715022835349,tags:Public Idea,type:text/vnd.tiddlywiki,text:A //soft block// is one that can be released, freeing the blocked cards|LaBelleLucie/Definitions/Blocked, by moving the blocking cards|LaBelleLucie/Definitions/Blocking to a different fan|LaBelleLucie/Definitions/Fan or the foundation|LaBelleLucie/Definitions/Foundation. Many intermediate moves may be required to make this possible, so while its often easy to look at a block and immediately prove that its hard|LaBelleLucie/Definitions/HardBlock, when you see a block that isnt obviously hard, you may need to run a large number of prospective moves in your head to know for sure whether its soft or hard.\n\nA suit is soft-blocked if the card that can next be placed on the foundation could be released by further manipulations of the tableau|LaBelleLucie/Definitions/Tableau. },{title:LaBelleLucie/Definitions/Tableau,caption:Tableau,created:20210715015130576,modified:20210715022851169,tags:Public Idea,type:text/vnd.tiddlywiki,text:The array of fans|LaBelleLucie/Definitions/Fan; after a deal|LaBelleLucie/Definitions/Deal, contains all the cards that arent on the foundations|LaBelleLucie/Definitions/Foundation.},{title:LaBelleLucie/SafeMove,created:20210708013100695,creator:soren,es:possible,modified:20240402030553075,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:A safe move is one that will never make the situation worse; that is, it will not prevent you from making any future foundation moves or builds that you otherwise would have been able to make. (Technically, it decreases the number of possible future moves by exactly one -- the safe move itself -- but obviously this is of no practical consequence.)\n\nSafe moves are topologically defined by creating no blocks|LaBelleLucie/Definitions/Blocked of any kind. Moves that are not safe are thus called blocking moves|LaBelleLucie/Definitions/Blocking.\n\nSome moves may be conveniently described as //eventually safe//. An eventually safe move is technically a soft-blocking move, but as you make it, you can see that you will momentarily be able to move the blocking card or run to the foundation and release the block again.\n\n!! Strategy\n\nSafe moves dont just make the situation no worse, they //reduce entropy//: by making a safe move, the tableau becomes more organized and it becomes easier to reason about it. In addition, many safe moves unblock other cards or runs. Therefore, you should ordinarily make all available safe moves as soon as they become available.\n\nLearning to rapidly and accurately identify and make safe moves will make your play faster, easier and less prone to errors.\n\n\n!! Types of safe moves\n\nTo the LBL beginner, which moves are safe is often extremely non-obvious. Its therefore useful to describe the most common patterns of safe moves and why theyre safe.\n\nHere are the ones Ive identified; there may be others allowed by the formalism that I havent thought of. Each is accompanied by a proof so you dont have to take my word for it that its safe.\n\nIn order to prove that moving a source card onto a target card on the tableau is safe, we need to show two things:\n\n# The move doesnt make it harder to move any cards to the foundation.\n# Moving the target card onto its upper neighbor is either (a) already permanently impossible or (b) useless. (Since you can only move one card at a time in LBL, moving the target card onto its upper neighbor will become impossible after the move if it wasnt already -- well see a proof of this momentarily if this is unclear -- so if this actually blocks off a meaningful future move, the move cant be considered safe.)\n\nMany of these proofs will require the //Foundation Move Lemma//, which states that adding a runs lower neighbor to the run never makes it more difficult to move any of its cards to the foundation. This may already be clear, but if not it may be proven thus: Suppose we have any card and its lower neighbor; without loss of generality, 10H and 9H. By the rules of the game, playing 10H on the foundation is dependent on playing 9H on the foundation no matter where the two cards are. So although moving 9H on top of 10H blocks 10H, we wouldnt have been able to move 10H to the foundation without moving 9H even if 10H were free; thus, adding 10H has not made the foundation move of 9H more difficult.\n\nIt should be clear that the lemma applies recursively to runs: if we then want to move 8H on top of 9H, we needed 8H in order to play 9H anyway, so adding it doesnt make moving either 9H or 10H any harder.\n\nNote that the Foundation Move Lemma should not be interpreted to mean that moving 9H on top of 10H is //safe// -- it usually isnt! Thats because moving 9H on top of 10H prevents 10H from being moved onto JH, if that was previously possible. Thus, the FML will usually only accomplish half of each proof; we also have to show that moving 10H onto JH is impossible or undesirable.\n\n(TODO: It is possible that //merci//s break some of these proofs on the final deal. I havent thought much about this and dont know how to adjust my strategy to account for that anyway.)\n\n* Foundation moves: Moving a card from the tableau to the foundation is always safe.\n** //Proof//: The only benefit of having a card on the tableau is that you can build its lower neighbor on it in order to unblock some other card. But if you have the opportunity to move a card to the foundation, youve already put its lower neighbor on the foundation, so you wont need to exercise this option anymore.\n\n* Building on a king: Building a queen on a king is always safe.\n** //Proof//: Kings have no upper neighbor, so they cannot be built on top of another card on the tableau. Thus, the only way to move a king is to build it on the foundation. And by the Foundation Move Lemma, the ability to move a run to the foundation is not reduced by adding the runs lower neighbor, in this case the queen; therefore, building a queen on a king is safe.\n\n* Building on a single card: Building on a card or run in a fan of its own is always safe.\n** //Proof//: Cards in fans of their own are independent. There is no need to build an independent card on its upper neighbor, because there is nothing to unblock by doing so.\u003C\u003Cfnote \Sometimes, its cognitively desirable to do this from the perspective of minimizing the number of fans you have to think about. Since it has no impact on the actual topology, Ill personally just go ahead and move even independent runs onto upper neighbors that are blocked even though its technically not allowed by the rules of the game.\>> Thus, losing the ability to move the independent card is inconsequential. And by the Foundation Move Lemma, the ability to move the card to the foundation is not reduced by building on it.\n\n* Building on a descending run of cards: Building on a descending run with at least two cards is always safe.\n** //Proof//: In LBL, only the bottom card of each fan can be moved, so the only way to move a run is to move each of its cards individually. But each card only has one upper neighbor and can only be moved onto its upper neighbor. When a card is at the bottom of a run, it is by definition already built on that upper neighbor, so it is impossible to move a card thats currently at the bottom of a run elsewhere on the tableau. Therefore, the only way to move a run of cards is to move the entire run (optionally less its highest card) to the foundation. This means that adding more cards to the run wont make it harder to move around the tableau, as it already cannot be moved. By the Foundation Move Lemma, extending a run also does not reduce its ability to be moved to the foundation, so this is no concern either.\n\n* Building on a card that sits above a complete block: If a series of cards forms a complete block|LaBelleLucie/Definitions/CompleteBlock and a single card sits atop the block, building on that top card is always safe.\n** //Proof//: By definition, no part of a complete block can ever be moved anywhere. So it is of no consequence whether the complete block itself is blocked or free. As a result, the top card is, topologically, independent, so this case reduces to building on a single card.\n** Example: QH KH 10C: building 9C is safe\n\n* Building on a card which has only higher numbers of the same suit below it, when the cards missing from the sequence are independent: This one can be tricky to spot and usually isnt useful.\n** //Proof//: ????\n** Example: 6D 4D; 5D: building 3D on 4D is safe. There is no reason not to take the more obviously safe approach of moving 4D to 5D first -- but either choice is equally safe.},{title:LaBelleSauvage2017,author:Philip Pullman,caption:La Belle Sauvage,completed:202209291200,created:20200127021355690,creator:soren,format:hardcover,isbn:9780375815300,medium:book,modified:20221101030428836,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2017,text:First volume of the BookOfDust. Follows MrMalcolmPolstead and the baby MsLyraSilvertongue on an epic canoe journey that involves fantastic elements and goes almost into the realm of MagicalRealism. Many of the mythological elements of the modern American RoadTrip narrative, just in a more fairy-tale and fantasy-genre atmosphere.\n\nI joked to M.|PrivatePerson that I thought MrPhilipPullman is trying to write as many different genres as he possibly can, because LBS covered such a long list; a bit after my first read I scribbled down the following:\n\n* DystopianVision\n* FairyTale\n* SpyThriller\n* NonsenseLiterature\n* FloodNarrative\n* Odyssey\n* RoadTrip\n* ComingOfAge\n* MagicalRealism\n\n//La Belle Sauvage// is Malcolms canoe (name taken from a pub some family member owns), but I take it as also referring to Lyra. She may not be very savage yet at six months old, but shes even described as one later in-universe if I recall correctly.\n\nRead when it came out, reread in late 2022. It wasnt quite as good as I had remembered it (maybe it just doesnt stand up as well to a reread as I hoped). Its still good, but Im not sure its my favorite of the universe anymore; for a while it definitely was. I enjoyed all the canoeing parts much more now that I have my own little boat|AwkwardAnnie!},{title:LaCrosse,created:20210628022508694,modified:20210628022303950,tags:Place Public,type:text/vnd.tiddlywiki},{title:LaddsAddition,created:20250623162358966,creator:soren,modified:20250623162400019,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LagoTacos,created:20240207033858625,creator:soren,modified:20240207033859335,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeChipotle,created:20230427035431610,creator:soren,modified:20230427035438543,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeCrescent,created:20250626182416856,creator:soren,modified:20250626182417538,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeHarriet,created:20230830223955197,creator:soren,modified:20240509145721664,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeKohlmeier,created:20240402020330173,creator:soren,modified:20240402020339242,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeKohlmier,created:20200430033438936,creator:soren,modified:20240509145725147,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Lake on the south side of OwatonnaMinnesota, about ten minutes from CrystalApartment.},{title:LakeMichigan,created:20240410124609495,creator:soren,modified:20240509145728796,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeNokomis,created:20230816154310061,creator:soren,gis-lat:44.908665919808776,gis-long:-93.24174416905085,gis-zoom:13,modified:20240509145730712,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LakeOfTheIsles,created:20230405204002009,creator:soren,gis-lat:44.95538459545794,gis-long:-93.30703991312625,gis-zoom:14,modified:20230515140147596,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LambdaMoo,created:20200316145011949,creator:soren,es:confident,modified:20231118002416821,modifier:soren,tags:Software Definition Public Idea,type:text/vnd.tiddlywiki,text:The first widely popular MUD game.},{title:LambdaMooTakesANewDirection,caption:LambdaMoo Takes a New Direction,created:20200217163305832,creator:soren,medium:article,modified:20231118002407023,modifier:soren,rating:distinguished,tags:Source Public,type:text/vnd.tiddlywiki,text:Referenced by the author of AGroupIsItsOwnWorstEnemy200304. A pair of posts by the wizards of the trailblazing LambdaMoo which describe the impossibility of separating technical and social decisions.\n\nBasically, the wizards said that trying to manage the community socially had become an intolerable burden and they were just going to let things take their course; they would be responsible only for technical issues like providing new features and keeping the system running. This was an abject failure for many reasons, so they just backed it out, saying while they wanted users to make social decisions as much as possible, they now reserved the right to make unilateral social decisions, and they acknowledge that any technical decisions they make will unavoidably have social implications as well.\n\nSource: https://www.cc.gatech.edu/classes/cs8113h_98_spring/LTAND.html},{title:LamppostPrinciple,created:20220919210942303,creator:soren,description:Try trivially easy solutions first, even if theyre unlikely to work.,es:confident,modified:20251010031248810,modifier:soren,reviewed:20230419,tags:Reasoning Productivity Systems Public Idea,type:text/vnd.tiddlywiki,text:Youre walking down the street at midnight, and you realize you dropped your wallet somewhere in the last block. Where do you look first?\n\nLikely, you should look under the lamppost first. While theres no particular reason to think this is the most likely place for your wallet to be (perhaps if you think really hard, you could pick a marginally more likely first place to look), looking under the lamppost for your wallet is trivial because its well-lit; it will only take a couple of seconds to be certain that its not there. If it turns out to be there, you will have saved yourself a ton of time and trouble. If it isnt there, you will have lost almost nothing.\n\nTransformatively: anytime you have a problem, strongly consider just trying|TryItAndSee any trivially easy solutions first, even if they seem unlikely to work.\u003C\u003Cfnote \Obviously, you should not do this if applying this solution might preclude other, more effective options.\>> For instance, you might try rebooting your computer|RebootSalvation when an odd problem occurs.\n\nOccasionally people use the term //lamppost principle// derogatorily, for a kind of magical thinking or laziness where you look //only// under the lamppost because its where you know how to look, even when it doesnt make sense to do so. There is sometimes a fine line between these two definitions!\n\n!! References\n\nI found myself doing almost the exact exemplar of the principle the other day: I had misplaced my literal wallet and was about to search through my backpack, where I thought I might have dropped it in the bottom, when I realized it might also be in the pocket of the pants I was wearing the day before, and figured I had best check there first because it would be much easier to do so, and the wallet was about equally likely to be there. Sure enough, it was there and I saved a lot of trouble!},{title:Language,created:20200401011212664,creator:soren,modified:20210828141210592,modifier:soren,tags:Public Definition Idea,type:text/vnd.tiddlywiki,text:Tag for linguistics and general language-related ideas.},{title:LargeGovernmentVsVoluminousLaws,created:20200913032639396,creator:soren,es:possible,modified:20231023033041757,modifier:soren,tags:Politics Systems Design Public Idea,type:text/vnd.tiddlywiki,text:People of certain political persuasions often complain about “large government,” but I think a significant part of the dislike may be due to an over-large body of law, rather than the scope of the government itself.\n\nThese things are quite different. Taking me as an example, I tend to be fairly progressive on most things. I have no problem with social programs, would support higher taxes, etc. -- large government? But I also think the world is super-overregulated in most areas. Consider the ACA, which is 974 pages long|https://housedocs.house.gov/energycommerce/ppacacon.pdf. The TableOfContents runs for the first 32 pages. And after all that, and all the //other// relevant laws...healthcare in America is terrible. Clearly, the length of the laws is at least not positively correlated with how well things turn out. (Its probably not strictly negatively correlated either -- complete anarchy isnt the answer here!).\n\nWhat I would get excited about is a government that isnt afraid to make sweeping gestures, experiment and fail fast|IterativeProcess, but uses a minimalist philosophy. The best law is no law at all (cf. NoCodeAtAll). PerfectionIsSubtractive. That means the lawmakers have to have some IntellectualHumility and use their heads instead of just arguing and writing laws banning the use of fetuses in food|https://loweringthebar.net/2012/01/bill-would-ban-using-human-fetuses-in-food-just-in-case-anybodys-thinking-of-doing-that.html all day, but hopefully it would work better.\n\nI once read a Slashdot comment which jokingly suggested that when a new government comes into power, they get a 1-subject notebook to write the laws in. Once the last page fills up, everyone is executed and a new government is formed. We should probably do without the execution part if we want to maintain a stable democracy, but the basic idea seems sound! If an amateur interested in law and politics can comfortably read all the laws applying to them, then I think were doing admirably on this approach. That may never be feasible in a modern society, but the closer we can get, the better.\n\nIts also fine to have laws that apply for a time and then go away, even if society hasnt changed enough that they seem outright incorrect. Minimalism and an iterative approach to building a better society encourages Prioritization; the government cannot effectively focus on everything at once. The most important issues of the current time should be the ones getting the focus. And if a law is not going to be enforced anymore, it should, in general, be promptly removed from the books -- failure to do this is unfair, because the few people who get in trouble for violating it are randomly selected, or worse, selected because someone had it out for them for a completely different reason, one which wasnt actually against the law.\n\nSmaller regions of partial or complete autonomy|EveryStateShouldBeAMicrostate201903 might make all of this more practical. See also LocalityAndSimplicity.\n\nA few areas that see some of the worst accumulation of laws:\n\n* Healthcare, as seen above...its time to throw out the entire system and start over, probably with a government-maintained system, because thats been shown to work across the world and nothing else has.\n* More specifically, drugs|Drug, both medically approved and not. A number of countries have seen success by just throwing out all of the prohibitions, including on dangerous things like heroin. The lengths to which regulations on straightforward chemical substances which dont cause harm to anybody but the user have gotten absurd. (And theres a bizarre double standard. If alcohol had a warning label that adequately described all the likely effects, like a prescription medication did, youd have to get a 6-page leaflet with your beer, and consult with the bartender on your health first.) Dont get me wrong, Im in favor of having a third party look at drugs to make sure theyre safe, but that doesnt have to mean telling people theyll go to jail for life if they sell something that party doesnt approve of.\n* Education|Learning. It turns out not everybody does well learning exactly what someone 3,000 miles away said they should learn they way they say they should learn it.\n* Taxes. Im all for progressive taxation, but this can be accomplished without two undezillion pages of forms and instructions. A handful of basic types of taxes (say, income/capital gains tax, consumption tax, property tax, and estate tax) each with a basic set of rules ought to be plenty to create an equitable tax model that incentivizes behavior we want as a society, if we give up on satisfying all the special interests at once. As a matter of fact, there is a //negative// correlation between fairness and length of the tax code; when it gets long, its incredibly easy to make loopholes for specific people, who are almost without exception rich and powerful.\n\n\n!! References\n\nIn 2023 in Minneapolis, some refugees from some country in Central America (I want to say Honduras?) ended up in the city and needed to be here for a couple months before they could apply for a work permit, so they started selling fruit on the street and in the parks. City officials promptly started hassling them and put up giant signs in the parks telling people not to eat “unlicensed fruit.” Im glad someone tries to make sure that people wash their hands and dont serve spoiled food in restaurants, but like, unlicensed fruit in a park? Am I going to die from eating a mango that someone sliced improperly? Come //on//.},{title:LateRebellion,created:20200913001608900,creator:soren,es:personal,modified:20250209010311327,modifier:soren,tags:Identity SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:I sometimes joke that I moved my \rebellious\ phase from my teenage years to my young adulthood. For instance, after graduating college, I recognized that Im allowed to disagree with my mother|CanDisagreeWithYourMother, grew my hair long|LongHairLessons, and discovered that my experience of romance and sexuality is unusual|DemiPerson. I was a really boring teenager. I do remain surprised that I was never kicked out of the local bowling alley; my friends and I used to do some dumb and damage-prone things like bowl while running up perpendicular to the lanes and play chicken in the roller-skating rink while barely being able to skate in the first place. But thats about as bad as it got. I never even drank underage.\n\n{{LateRebellion/p||PrivateChunk}}\n\nIm also recognizing the depth of HaveToExperienceItToUnderstand. I think I would try a lot of things I never would have ten years ago, if a convenient opportunity arose to do them, especially if somebody wanted to do them with me.},{title:LaTeX,created:20200220160217823,creator:soren,modified:20250611144357663,modifier:soren,tags:Typography Software Public Idea,type:text/vnd.tiddlywiki,text:Some solidly decent typesetting software that replaces a word-processor or graphic-design program for serious work that needs to look good. Open-source and based on an engine by MrDonaldKnuth, which makes it good! Ive done a variety of books and display work with it.\n\n!! References\n\n> “LaTeX is the best tool for fine control over layouts. This is less because of its own intrinsic quality and more because everything else is far, far worse.” —Hillel Wayne|https://www.hillelwayne.com/post/cheatsheets/},{title:LaWisWisCampground,created:20250621164959852,creator:soren,modified:20250621165000719,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LawOfCynicism,color:#6c6cff,created:20200303031723211,creator:soren,es:mythological,icon:$:/core/images/list-bullet,modified:20251011164901455,modifier:soren,tags:PhilosophyOfLife Productivity Public Idea,type:text/vnd.tiddlywiki,text:The Laws of Cynicism comprise a set of cynical observations on life formulated as “laws” or “principles” and commonly referred to. Many of them are about productivity or achievements or office life in one way or another. While they may be cynical, they are also quite true and often actively useful.\n\nLaws of Cynicism explicated in this ZettelKasten:\n\n\u003C\u003Cstretch-template-links \tagLawOfCynicismsort\ smallTemplate:\$:/tzk/Templates/Topical/TitleDescriptionStretch\ largeTemplate:\$:/tzk/Templates/General/IdentityTemplate\>>\n\nCf. HanlonsRazor.},{title:LawOfFinancialViability,created:20200712144015626,es:possible,modified:20210509010845099,tags:Public LifeDirection Employment Economics MentalModel Idea,type:text/vnd.tiddlywiki,text:Rule presented by MrCalNewport in SoGoodTheyCantIgnoreYou and formulated by MrDerekSivers, which states that you should pursue an idea that will give you control if and only if people will pay you for it. “Paying” may mean literally writing you a check for a product or service, hiring you under terms favorable to you, giving you a loan or investment money to pursue the idea, etc.\n\nThis isnt about profit motives (many if not most people would rather make a living but not be rich doing something they really enjoy than make a lot of money doing something they hate), but simply an observation that if nobody is willing to pay you for doing something, it most likely is not a good idea, and conversely, if a variety of people are willing to pay you for something, there is probably broad consensus that its worthwhile. (p. 139)\n\nThis doesnt apply to true hobbies, of course, most of which nobody will ever be willing to pay you anything for, but you cant build a career on a hobby.},{title:LawOfRemarkability,created:20200712145152595,es:possible,modified:20200712213941530,tags:LifeDirection Creativity Business Public Idea,type:text/vnd.tiddlywiki,text:The Law of Remarkability, as defined by MrCalNewport in SoGoodTheyCantIgnoreYou, states that for a mission-driven project to succeed:\n\n# it must be something people remark on;\n# it must be submitted to a venue that enables such remarking to spread. (p. 193)\n\nMrSethGodins book PurpleCow is mentioned here. Something thats not remarkable may be valuable, but it wont let you build a business or a career by itself. Getting something remarkable in the right venue is just as critical: nobody will remark on it if they dont know about it, and the way to get people to know about is usually to go through the most appropriate established channels for the field the project is in -- journals, open-source networks, etc.\n\n\u003C\u003Cremembercz \20200712213816560\\n\t\Cal Newports Law of Remarkability states that for a mission-driven project to succeed, it must be (1) {something people remark on} and (2) {submitted to a venue that enables it to spread}.\>>},{title:LAX,created:20230913115757063,modified:20230913115800098,tags:Place Public,type:text/vnd.tiddlywiki},{title:LazyConsensus,created:20210127152215160,creator:soren,description:Voting and approvals have major disadvantages in empowerment and outcomes; can we extend the consensus models that work for pairs and tiny groups to larger ones?,es:likely,microlink:lc,modified:20240811180530651,modifier:soren,tags:Politics Process InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Lazy consensus (LC) is a powerful arrangement for decision-making in small groups. In a lazy-consensus system, anyone can boldly|BeBold take action, make a decision, or bring forward a suggestion (well call this decision, action, suggestion, etc., a //proposal// for short). Every proposal is accepted by default. If you dont like someone elses proposal, you must step up and object; once theres an objection, all parties are committed to discussion until a consensus is reached.\n\nIf the action proposed is difficult to reverse (e.g., purchasing something or issuing a press release), there can be a short waiting period for comment, after which action is taken automatically. If the proposal is trivially reversible (e.g., editing a document or trying a tiny experiment), the action is just taken, then reported to the rest of the group in some easily visible way; if someone objects and the objection is sustained on discussion, the action is undone.\n\nLazy consensus is essentially the model that pairs on an equal footing //always// use, extended to larger groups of people. Voting cannot, numerically, resolve disagreements between two people, and with almost no communication overhead between two people, the act-unless-youre-genuinely-unsure-of-the-other-persons-mind approach is the obvious one. So there is a lot to be learned about lazy consensus from these dynamics.\n\n\n!! Requirements\n\nMaking lazy consensus work requires a high-skill, high-trust environment. The group needs to be moderately small (see AvoidScale), both to achieve the requisite level of trust and mutual understanding and to have a high likelihood of reaching a consensus on difficult issues. Everyone needs to be comfortable objecting and sufficiently engaged with ongoing events to notice if they ought to object. At least some people in the group need to be good at conflict resolution, specifically the variety that helps the group understand why they have different opinions and get to the bottom of the issue so that everyone can ultimately agree on the correct path forward.\n\nIdeally, also:\n\n* At least one or two people in the group should care enough about any given proposal that theyll notice and bring forward intelligent objections if there are important ones.\n* Most people on the team are smart, usually make good proposals, and understand what they are doing.\n\nHowever, these do not seem to be strictly necessary. For instance, much of Wikipedia operates on an LC model (anyone can just edit, and if someone else objects they revert or edit again), and a large fraction of changes are sloppy or even vandalism. With the right structure, this model can still work!\n\n\n!! Properties and effects\n\n!!! Lazy consensus makes routine decisions painless\n\nIn many contexts, the vast majority of proposals are obvious, uncontroversial, and not worth taking any time at all to discuss. Consider things like approving the monthly treasurers report, changing a couple of badly phrased words in your softwares user interface, or deciding which of three restaurants to buy lunch from. Traditional organizational structures like structured meetings with rules of order or executive approval, gated reviews, and so on require lots of red tape to make these everyday moves that, in the average case, nobody cares about. Lazy consensus takes virtually no time for decisions that dont matter, allowing you to put that time and energy to use having long, complex, thoughtful discussions on the decisions that actually matter.\n\n* //Lazy consensus model for the treasurers report//: The treasurer puts together the report and everyone looks at the report ahead of the meeting. If you have any questions or concerns, you place them on the agenda sometime before or at the start of the meeting. The report is accepted by default and goes entirely unmentioned unless someone places an item on the agenda.\n* //Lazy consensus model for the user interface//: the person who notices an opportunity for improvement makes the change and merges it without code review (but with sufficient testing, please!). The change appears immediately in a beta changelog that the team reviews regularly; if it concerns you, you open a discussion before the production release. A more complicated change that the author believes is more likely to solicit feedback could involve a period for review where people are made aware of the change and can look over it, and if nobody comments after N days, it merges automatically.\n* //Lazy consensus model for lunch//: someone is in charge of deciding (this could be the person in charge of the event, or the host, or a rotating person in a group that often has lunch together, or anything the group agrees on). People can make suggestions to the decision-maker if they please, but they dont have to. Just before its time to order or plan, the decision-maker picks something and announces the choice. If someone thinks the choice is unusually bad, they explain why and suggest a new option; otherwise, if they only slightly dont like it, they shrug and either join everyone else or go off and get their own lunch, because its not important enough to start a discussion over.\u003C\u003Cfnote \Funnily enough, I think lunch is the most complicated case in the list. Theres probably much more that can be said on optimizing multi-variable choices like this.\>>\n\n\n!!! Lazy consensus makes critical decisions rigorous\n\nTraditional systems have a middle-height bar for every proposal. While LC may have a low bar for the majority of proposals, it has a very high bar for the small minority of proposals where discussion has high value -- //everyone// has to agree before the discussion is over.\n\nVoting trades result quality for speed and ease. A standard simple-majority vote is fast, but allows, in pathological cases, for a proposal to proceed even though //almost half// of a group believes that, say, its wildly unethical and might destroy the world. We think voting sounds “fair” because were used to it, but prioritizing a majority with weak opinions over a large minority with strong ones isnt necessarily fair, and its certainly not smart. A hierarchical decision structure is even further down the quality axis, being even faster and more decisive than voting.\u003C\u003Cfnote \If one has a fantastic leader, its possible for hierarchical decisions to come out better. The worlds collective experience of dictatorships vs. democracies should, however, give us pause in believing either the average or the worst-case outcome will be better.\>>\n\nAlso notice that a 51/49 vote for something unethical does not mean youll be 51% unethical, it means youll be 100% unethical. Tiny differences in the decision-making process expand into huge differences in outcomes. In contrast, in a consensus-based model, the proposal has to become //less unethical// before the minority starts to support it; voting short-circuits the process of compromise and correction and allows broken, half-baked plans to go into effect. A supermajority requirement can somewhat ameliorate this risk, but it also reduces the decision-making speed and ease thats the primary reason voting is useful in the first place.\n\nLazy consensus aims to avoid these failure modes without requiring an impractical amount of time.\n\nPerfect consensus isnt always achievable; real-world implementations of LC, especially on mid-sized groups, may require escape clauses to prevent permanent gridlock. Maybe if you discuss for an hour without a consensus and inaction is infeasible, you take a vote, or the founder/president/administrator makes a final call, or you pick a choice from a hat. Rules like “well pick a choice from a hat” can actually be particularly useful; its embarrassing and scary for a group of smart, committed people to have to make an important decision by drawing from a hat, so people have a strong incentive to reach a consensus! You can also plan “exploding” defaults -- e.g., if the group cant reach a consensus on a new charter, the group disbands by default.\n\n!!! Lazy consensus enables intelligently selective engagement\n\nMany traditional decision-making structures require or encourage you to be involved in every issue, or a large set of issues, including ones that you are poorly qualified to comment on and dont care about. (See PointlessApprovalProcess.) This is boring, a waste of your time, and often leads to groupthink. Outcomes can be especially bad if the people who dont care vote (or worse, make a decision from a position of leadership), because most of the votes can end up being people who picked an option more or less randomly.\n\nLazy consensus requires you to engage only with proposals you understand and care about. If you dont have an opinion, or its weak and you trust the person who made the proposal, you just move on to the next one, or go do something fun instead.\n\n!!! Lazy consensus makes objecting expensive\n\nIn fact, lazy consensus doesnt merely //not require// you to engage with proposals you dont understand and care about. It //strongly discourages// you from engaging with such proposals, because engaging with a proposal requires you to take declarative action and spend time and social capital by contradicting someone else.\n\nWhen every proposal is discussed by default, objecting is cheap because there is a moment expressly set aside for making comments, and its expected there will be some. In this context, you feel useful when you comment, even if your comment doesnt actually contribute anything. In fact, making useless comments can even build social capital by making you look smart and engaged -- even when your involvement is actually making the group as a whole worse by draining peoples time and energy or creating frustrating conflicts while not improving outcomes. Simple proposals can rapidly turn into bikeshedding|Bikeshedding, which wastes everyones time and creates pointless conflict that worsens the groups relationships.\n\nEveryones incentives are best aligned when an objection, which requires a lot of time to effectively address, has individual costs proportional to its group costs. Thats exactly what lazy consensus achieves -- you can sense the cost to your time and social capital of jumping in, so youll pay that cost only when you see a meaningful benefit on the other side. If you disagree with someone elses choice but, on reflection, dont think it ultimately matters much, youll just let it be. No group will perfectly agree on every triviality, so this is a very good thing; debating unimportant things is a great way to get yourself and everyone else irritated while barely moving the needle on outcomes.\n\nIts worth noting that making objections more expensive can be dangerous in the wrong environment. If youre working with people who dont want to speak up or are afraid to speak up (perhaps because the culture doesnt respect everyones opinions or offer PsychologicalSafety), making objecting expensive can make decisions worse. LC only works in fully safe environments populated by people who care.\n\n!!! Lazy consensus is fast, natural, and empowering\n\nTraditional bureaucracy and review processes disempower individuals. Requiring review or discussion of trivial changes suggests a lack of trust of each individual by the group (and/or by some centralized leadership), and the annoyance of following the process discourages action and innovation (see TrivialInconvenience). If you see something simple that obviously needs doing, the natural thing is to do it -- not to wait two weeks, attend an hour-long meeting, and ask everyone else if you should do it. By the time you get an approval, the opportunity for benefit may be all gone, or you might have lost your momentum|SuccessMomentum. Or you might have to defend trivial details of your proposal for an excessive amount of time.\n\nLazy consensus preserves the autonomy and natural instinct for improvement available when working alone or in very tight groups up into larger groups.\n\n!!! Lazy consensus results in better-connected groups\n\nTraditional decision-making approaches often result in making clear winners and losers on the most difficult issues -- exactly where you most want everyone to feel good about the decision. If you take a vote, then unless its unanimous (in which case you could have just said there was a consensus and not bothered voting), some people will have “lost.” As noted earlier, taking a vote means cutting off the discussion before everyones concerns are addressed. Consensus doesnt mean everyones opinion is perfectly unified, but it does mean that those who disagree with the direction have at least been satisfied as to its immediate safety and trust the others to try it out.\n\n\n!! References\n\nDiscussed at length in ProblemWithVoting2018. Popular in OpenSourceSoftware.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Cremembercz \20210127173855167\\n\t\A lazy-consensus model preserves attention and improves flow by making objecting {expensive}.\>>\n\t\n\u003C\u003Crememberq \20210127173951647\\n\t\What is the default action when a proposal is brought under a lazy-consensus model?\\n\t\The proposal is accepted (unless someone disagrees).\>>\n\t\nAs such, LC is a type of barbell strategy|BarbellStrategy and follows the EightyTwentyPrinciple.\n\n\n\u003C/$details>},{title:LazyStructuring,created:20221129213807304,creator:soren,description:Effective notes systems should make it easy to add new levels of structure and formality at the moment you need them.,es:likely,modified:20221130160910895,modifier:soren,tags:Public Idea PersonalDocumentation Systems,type:text/vnd.tiddlywiki,text:One can imagine the “structuredness” of some notes on a continuum, with points like these, from least structured to most structured:\n\n* the WWW, with no searching or indexing tools (more content than you can ever look at, completely unusable)\n* an unordered heap of index cards on the floor, but which you know contains useful information\n* a sorted stack of documents (e.g., MRU or most recently created last, as in a standard paper notebook)\n* a set of documents that can link to each other\n* a set of documents that are loosely categorized and can link to each other\n* a set of documents that have firm conventions about how they should be tagged, linked, ordered, and formed\n* a complete hierarchy with every document in its exact place (e.g., a finished textbook)\n\nA key point about structuredness is that you need more of it the larger your set of notes gets. Using too much structure at too early a stage has negative value: not only will it be a waste of time because you can find things just fine without lots of structure, but youre also likely to create a bad structure because you dont yet have enough information about what kinds of notes youre going to have and how youre going to use the system to figure out what structure would be the most helpful. This is most dangerous with hierarchies, which are challenging to rearrange (you pretty much have to rebuild the entire thing if its sufficiently far away from what you now need); but its a problem with anything more complicated than linking, and sometimes even with linking (if sufficient relinking tools are not available in the medium youre working with).\n\nA well-designed knowledge system thus makes it possible to easily add more structure as you go along, at the moment it becomes necessary -- lazy structuring. This can be done by making it naturally arise (with EmergentStructure), by providing ways to easily reorganize existing content, and by allowing the addition of more formal structures to a subset of notes, or splitting a subset of notes into a different section once they become a self-contained cluster.\n\nNot only should a well-designed knowledge system make this //possible//, it should make it intuitively clear and obvious from the start that it is possible, and easy. Otherwise new users will experience StructureAnxiety and may never get started, or waste all their time trying to get the structure perfect at the beginning. This is a quixotic endeavor; as I noted in my MissingTiddlerPhilosophy, perfection is impossible even at the end, much less at the beginning before you have any notes at all! Plus, if general-purpose information systems ever come to an “end”, it usually wasnt intended or planned, and if it was, it usually wasnt the way you envisioned it ending at the start. (MrRichardGabriel talks at length about this in one of his PatternsOfSoftware essays, applying it to premature abstraction and particularly the overuse of anti-duplication techniques; he says abstraction is overloved because a program with all the right abstractions is beautiful, but you can only get all of the right abstractions when the program is //finished//, which largely isnt a thing.)},{title:LeadingIndicator,created:20201027160237398,modified:20201027160335991,tags:Process Systems AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:A type of metric that indicates what is going to happen before it happens, as opposed to a //trailing indicator//, which measures how things happened in the past.\n\nThere are many fewer leading indicators than trailing indicators, so its worth paying attention to where you have the opportunity to incorporate them.},{title:LeanCoffee,created:20201201215251820,es:confident,modified:20210515035655155,tags:MeetingTheory Public Idea,type:text/vnd.tiddlywiki,url:http://leancoffee.org,text:\A structured, but agenda-less meeting,\ managed democratically. People show up, suggest topics, vote on topics, and then people talk about the topics from most popular to least popular until time is up, with a voice-vote on whether the next topic should start every few minutes.\n\nSuggested as a team collaboration device, especially for something resembling a SprintRetrospective within Kanban, in MakingWorkVisible2017.\n\n\Rules\ (its basically what I just said): {{!!url}}},{title:LeaningTowerOfPizza,created:20230507185711219,creator:soren,gis-lat:44.95927769194348,gis-long:-93.28824381354342,gis-zoom:16,modified:20230510143629338,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LeanMethodology,created:20200407025206498,creator:soren,modified:20200407025427697,modifier:soren,tags:AgilePhilosophy Process Public Idea,type:text/vnd.tiddlywiki,text:Information and software development methodology closely related to the AgilePhilosophy and focused on a movement in manufacturing. Focuses on understanding process and eliminating WorkWaste by looking at|MakeWorkVisible the flow of work from one place to another, like items move on an assembly line. The WorstBottleneck is identified and fixed all the time, and the process gets better in an IterativeProcess.},{title:Learning,created:20220623010259852,creator:soren,es:likely,modified:20220623010447023,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:The process of moving from ignorance about some topic to knowledge about it (something which is never finished).\n\nNot to be confused with School, one specific (and, it seems, not particularly effective) means of doing this imposed on the youngest members of many societies.\u003C\u003Cfnote \School has other functions as well, of course, but well focus on that one in this summary since this is after all the Learning tiddler.\>>},{title:LeBlancsLaw,created:20201030174137714,description:Later equals never,es:possible,modified:20210616234910511,tags:LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:“{{!!description}}.” Specifically intended as an explication of something that often happens in software design, in which one puts off improving the code or implementing some feature. Theres no time to deal with this TechnicalDebt, well just implement now and fix it Later with a capital L.\n\n\u003C\u003Crememberq \20201121031108880\\n\t\What does LeBlancs Law state about software development?\\n\t\“Later equals never.”\>>},{title:Lectionary,created:20230424024857744,creator:soren,modified:20230424024906394,modifier:soren,tags:Idea Religion Public,type:text/vnd.tiddlywiki},{title:LectureOnRwanda,caption:The Shadow of the Sun: A Lecture on Rwanda,created:20210331004956429,creator:soren,due:202110041200,ivl:40,medium:article,modified:20210825121447086,modifier:soren,readstatus:unread,tags:Source Public,type:text/vnd.tiddlywiki,url:https://drive.google.com/file/d/1TnGXFESRFeWrchnml1fMcnzHi6wTsY1x/view,year:,text:There is approximately zero identifying information attached to this article in my ThePocket inbox. I think it was recommended by someone on Reddit.},{title:LecturesOnThePhilosophyOfHistory1837,author:Hegel,bibliography:LifetimeReading,caption:Lectures on the Philosophy of History,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214035355,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1837},{title:LeidenDesJungenWerthers1787,author:Goethe,bibliography:LifetimeReading,caption:Die Leiden des jungen Werthers,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035363,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1787},{title:LesMiserables1862,author:Hugo,bibliography:LifetimeReading,caption:Les Miserables,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035379,priority:3,readstatus:unread,recommended-by:Telegraph,tags:Source Public,type:text/vnd.tiddlywiki,year:1862},{title:LessExpressiveThanASandwich,created:20201015022411456,creator:soren,description:Computer hardware is an inhuman means of interaction that flattens out our bodies and motor skills.,es:confident,modified:20250309152801455,modifier:soren,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:The rant in FutureOfInteractionDesignRant2011 says:\n\n> Are we really going to accept an Interface of the Future that is less expressive than a //sandwich//?\n\nThe point being that touch screens -- supposedly the future of software, and because SoftwareIsEatingTheWorld the future of //life// -- are an unintuitive, unhelpful, and limited interface. You slide around one finger on a piece of glass. Once in a long while, two or three. Even keyboards are better than that, where you can use all ten fingers (thats why I can type 130 words a minute on the computer and less than 50 on a phone). And keyboards could still be greatly improved upon for plenty of tasks, Im sure.\n\nI find that even actual hardware is often being designed in an unimaginative way that has the same kind of “virtual,” glass-fronted interface. For instance, I did some research the other day trying to see if there were any systems that could support a physical remote-control volume knob for a stereo system...basically nothing. Its way, way easier and more pleasant to crank a volume knob to the level you want than to tap a button on a remote control 17 times, yet nobody seems to care. Similarly, all the switches I can get for my smart-home system have button-based dimmers that have 20 gradations. Adjusting the brightness of the lights consequently takes forever, and I often hit the dimmer button when I mean to hit the on/off button or vice versa because all the buttons feel just about the same. (Have the designers considered that when you use a LIGHT SWITCH, you often cant clearly see the switch?\u003C\u003Cfnote \All products like this would be vastly better if the designers had to use their own product before releasing it to the public. The problem is obvious after living with it for a couple of months.\>> See my Design Hall of Shame post|https://ap.sorenbjornstad.com/.) My car has infinite-spin climate-control knobs which have almost no tactile feedback; you have to look at a screen a couple feet away from the knobs to see which option youve selected, such that after owning the car for almost eight years, I still cant reliably select the option I want without looking away from the road for 5 seconds. Why on earth have the infinite-spin knobs? This is //not// an improvement over the old style with the setting printed along the outside, where once you learn the options you can select the correct option by feel.\n\n(The sole “improvement” I can see with infinite-scroll knobs is that this makes it possible for the car to do things like, when you press the “defrost” button, automatically turn up the fan to max, without the knobs ending up in the wrong position. I dont think this is actually an improvement, though; its an extra magic unintuitive thing to learn, and plenty of times I dont actually want to do that. It is obviously better to have to turn two knobs, but be able to do that quickly, reliably, and without looking, than to only have to turn one knob, but have it take twice as long and have the car possibly do something extra you forgot it would do. See DesignTryingTooHard.)},{title:LessIsMore2020,author:Jason Hickel,caption:Less is More,completed:20210422120000000,created:20210423005357688,creator:soren,medium:book,modified:20211027023223615,modifier:soren,rating:distinguished,readstatus:read,tags:Source Environmentalism Politics Public,type:text/vnd.tiddlywiki,year:2020,text:A brilliant and deeply moving discussion by J.H.|PrivatePerson of the etiology of and possible solutions for ClimateChange, EconomicRealities, and a variety of ecological problems. Actual coincidence that I read this entire book on Earth Day (ran into the recommendation in a few-weeks-old blog post in the morning, started reading it on my lunch break, thought it was so good I finished it by evening). \n\n!! The single problem\n\nWhat I thought was so brilliant about this book was the way it wove together a wide array of problems were experiencing today and pinned them all on a single, plausible cause. More accurately, its a series of three cascading problems:\n\n* Growthism, a focus on growing the economy without any particular purpose in mind except a vague sense that growing the economy has historically been associated with good outcomes and is needed to prop up capitalism. Its a prerequisite for successful capitalism because if the pot doesnt keep getting bigger, the rich cant keep accumulating parts of the pot or else the proles will have nothing left and rebel.\n* Capitalism, which has to be defined carefully. In the context of this book, it means not the general economic system in which there are markets, trade, survival of the fittest, etc., but the Marxist notion of an economic and social system that accumulates wealth for a handful of people while exploiting everyone else. (Like a heat engine, you cant have working capitalism of this kind without taking from somewhere to fund the accumulation of wealth, so e.g., substantial global and local inequality is a given under the system.) In todays system, the two notions of capitalism go together, but at least in theory it should be possible to have the first without the second.\n* Cartesian dualism, or the mind-body dichotomy. This comes into play because, according to the author, capitalism would be unconscionable without it: if we as a society instead believed intuitively|KnewItIntellectually that we are all part of one ecosystem and hurting other people or the earth hurts us as well, we would not participate in the exploitations of capitalism. (Chapter 6 is all about the benefits of animism, treated as the opposite of the CD approach, and the reasons it really fits better with reality than CD; but I was disappointed by this part because it seemed like a really compelling idea, but the book didnt seem to give a particularly good case for why you should think this way.)\n\nMost of the outstanding problems discussed in the book can be pinned on either growthism or capitalism (and as I said, they are cascading, so we can seemingly blame anything thats blamed on growthism on capitalism, and both on Cartesian dualism). Among the problems discussed:\n\n* ClimateChange\n* resource scarcity\n* externalities of industry and their lack of consideration in economics\n* mass extinctions\n* advertising, BigTech abuses\n* social disconnection\n* global inequality\n* social justice\n* need for public services (e.g., universal healthcare, community centers)\n* mental health\n\nIts fair and sensible to wonder whether this isnt at least a bit of an exaggeration: can everything really possibly be the same problem? As they say, if its too good to be true, it probably is. That said, Im also not sure if it matters that much, because its hard to believe the solutions presented wont at least help with (be a TargetProblem for) some of these problems, which are among the most urgent and serious ones facing the world today. So the most sensible thing to do might be to TryItAndSee.\n\n!! Theres still time\n\nWhile the book begins with the usual doom and gloom to frame the problem, it bills itself as a book about hope, and I think it generally delivers. We have some very difficult challenges ahead, thats for sure, and a lot of them need to be addressed, like, //right now// to avoid some pretty bad outcomes (e.g., most coastal cities being permanently underwater). But even now, 50 years after the public started thinking seriously about these problems in the 70s, we //still// have significant opportunities to make decisions that could fend off the worst of many of those outcomes. We even know what many of the solutions are, or at least where to look; all we have to do as a society is agree to work on them.\n\nThe disconnect which you may have seen is that right now about 15% of the US population doesnt even think climate change is real, and a much larger percentage believes capitalism and the Religion of Progress and Growth as it stands is incontrovertible truth and may not be challenged. Even people who have doubts dont necessarily want to talk about this, much less think about a Green New Deal (which IMO is still largely trying to solve the problem from within the framework of capitalism, but at least its a start -- one big thing at a time). The book does demonstrate that surprisingly large numbers of people are willing to question many of these ideas when directly asked about it in a survey, but its unclear how much of those questions could be translated into action. To be fair, I think thats a problem for another book.\n\nSomething that was conspicuously missing from the book: anything about individual virtue, self-sacrifice, reducing ones personal carbon footprint, etc. Im not 100% sure what I feel about this. I think it was probably correct not to emphasize this; if what youre looking for is self-flagellation by environmental book, there are hundreds of options already, and its something that tends to turn people off the movement for obvious reasons. And it would detract from the central point that well, //less is more//, and that fixing this doesnt have to be terrible and may even improve our lives in many places. On the other hand, if the book was missing something, its that it contains no concrete steps for things you can do if you agree with the book: its a blueprint for how to solve the problem as a society, but the central problem of how to get started|JustGetStarted is unaddressed. I cant go reform the United States economic system, so is there //anything// I can do? At least if the book says to buy this kind of apples instead of that kind, thats something I can actually //do//, even if it comes with the disrecommendation of being almost completely useless (piss here to save the world|PissHereSaveTheWorld). I guess I could try to turn myself into MsGretaThunberg and sail around the world yelling at world leaders, but even that doesnt seem like its all that useful by itself; it does a great job of bringing attention to an issue, but Im not clear on whether it does anything to make people want to deal with it. Everyone already //knows// about climate change; thats not the problem.\n\nMaybe lets start with this: READ THIS BOOK, and if you like it, get everyone you can to read it as well. Its definitely worth a couple of hours.\n\n!! History\n\nIncluded a fascinating history lesson in the pre-Industrial Revolution era, which really divided into three segments:\n\n* Feudalism -- unfair and not supporting a particularly advanced society, but nevertheless people were mostly at least fed, sheltered, secure, and not overworked\n* A peasant rebellion after the Black Death; fueled by the resulting labor shortage, peasants were able to essentially abolish serfdom and even gain the ability to survive well enough on their own and only work for wages when they wanted some extra cash\n* A huge crackdown by the nobles in which enclosure created poverty and homelessness (basically nonexistent before) as the nobility literally just took land away from the peasants to have it for themselves\n\nWhich last section fed into the Industrial Revolution, and only after several hundred years did anything improve.\n\n\n!! Whats needed\n\nIn order to address climate change and resource scarcity, we have to reduce our consumption. But this could actually improve our society!\n\nIt is true that economic growth tends to be associated with prosperity. But the actual relationship is more complicated than that.\n\nGrowth is neither good nor bad in itself. A lot of what weve been doing for the last couple hundred years is growing for the sake of growing, or for the sake of propping up capitalism. There are many underdeveloped places where a bit of economic growth would be extremely beneficial (e.g., 2 billion people still dont have even primitive toilets|https://www.worldtoilet.org capable of keeping feces out of their water supply). On the other hand, there are also countries, like the UnitedStates, where the GDP is so large that it is actually //worsening// our standard of living: perhaps unsurprisingly, it turns out that when you focus on production and profits to the exclusion of all else, you end up with fewer public services, a healthcare system optimized for making money rather than taking care of peoples health, unnecessary stress, excessive work hours, and so on.\n\nInstead, we should decide what specific goals were trying to achieve (better health? better sanitation? higher average happiness? better ecological balance?) and then figure out whether growth can help us meet those objectives, and specifically what sectors of the economy should grow. It doesnt make sense to grow the entire economy because we need 50% more investment in renewable energy and electric cars, for instance; better to grow renewable energy, sustainable urban development, and bicycles by 200% and shrink fossil fuels, freeways, and consumer F-150 production by the same amount.\n\nThe vast majority of the differences in health and happiness between rich and poor countries come down to just three things: sanitation, universal healthcare, and education. Some places you would expect to be backwaters, like Costa Rica, have these three things and are doing unexpectedly great in the statistics. The US does horrendously on the second, only OK on the third, and arguably not quite 100% on the first, and is accordingly mediocre at living standards. And we can do all these things excellently, and a handful of other things, for less than $10K GDP per capita. The US currently has about $60K GDP per capita. Even assuming that some additional benefit could be gained from more, we are clearly vastly overproducing. We would be better off refocusing where were spending our money and cutting our work hours in half.\n\nAccepting that we should cut back on consumption, theres still a great deal of low-hanging fruit. We waste about 50% of our food globally. Many appliances could straightforwardly be made to last two or three times as long as they do, but we purposefully make them obsolete after just a few years to encourage more consumption (example: water heaters are usually warrantied for 6--12 years and last just a little beyond that because thats the amount of time the manufacturer thinks it will take the sacrificial anode to be consumed|https://www.waterheaterrescue.com/water-heater-basics/water-heater-anode-rods/ and allow the tank to rust...but said anode, which almost nobody knows exists, can easily be replaced at the end of its life and allow the heater to last for years or decades more). With some fairly trivial community organization, we could do with a tenth the number of lawn mowers, power tools, and maybe even cars.\n\nA wide variety of proposals, or vague blueprints for proposals, are offered as well. They basically come down to improving efficiency and cooperation and reducing destructive competition and inequality. Some people in the Amazon reviews were complaining about how socialist the book was, but I didnt see anything scary: most of the suggestions were essentially run-of-the-mill social-democratic policies that have worked in Europe for decades, ideas for a steady-state economy, or ideas for reducing consumption in a way that improves peoples lives. And theyre only proposals; presumably there are a variety of ways to rehash them if we dont like the exact way they work.\n\nThe denunciation of “capitalism” might have gotten to some people, but I think this may be a problem of terminology; I felt it was made abundantly clear that what was being attacked was not small businesses, free enterprise, survival of the best ideas, etc., which we often think of as “capitalism”, but the system that allows huge corporations to gobble up everyone else and make Jeff Bezos a hundred-billionaire. I dont think many of us would put our names on a statement of support for that as the essence of the “capitalism” we champion.\n},{title:LessonsWeShouldTakeFromCovid,created:20210413020449778,creator:soren,es:likely,modified:20220502170417306,modifier:soren,tags:PandemicMood Public Politics Systems Futurism Idea,type:text/vnd.tiddlywiki,text:Just a few reflections, started a year and a month in, on what we should start thinking about once this starts to mostly clear up.\n\n* Unusual, unstable, and unwanted things happen and will continue happening|VeryBadNews2021. The details are unpredictable, but the fact that something happens is certain, and so we can and should prepare for such things happening.\n* The economic impact of a global pandemic is //insane//, and pandemics are historically not that rare. Almost anything we can do to reduce the probability and severity of a recurrence will be worth the money. We should have much larger stockpiles of resources likely to suffer supply shock, complete plans for developing vaccines, reserve capacity for production of tests and vaccines and medicine, whatevers required and could be applied to a wide variety of situations. We might even be able to research and pre-prepare mitigations and vaccines for potential candidate pathogens that arent presently dangerous. Again, expensive by some standards, but insanely cheap compared to a global pandemic, and we know another one will come eventually.\n* Similarly, we should argue about the merits and design of and roll out an effective, reasonably privacy-protecting system for contact tracing and immunity/vaccine proof while there is no outstanding pandemic. Then when it becomes necessary, weve already agreed exactly how it will work, and all we have to do is set some parameters and start using it.\n* Individual people should have plans and equipment (e.g., enough food for an extended lockdown, respirators) hanging around. This time COVID was relatively low-risk, but next time it could be bubonic plague or Ebola.\u003C\u003Cfnote \Im aware that neither of these diseases is a particularly good candidate for a pandemic today. Theyre meant as examples of seriousness rather than actual likely causes.\>>\n* Even though were not always the best about cooperating and getting the best possible outcome...were also ridiculously good at figuring stuff out when we have to. See how many people who had never worked from home moved there in a matter of a couple of days, and everything kept running normally. (Also cf. RapidNormalcy).\n* The technology needed to communicate and function without traveling is good enough for most purposes. As with anything, there are advantages and disadvantages to that approach, and we should continue thinking about in which situations actually traveling is worthwhile.\n* Commuting is a whole lot worse than it looks. It seems innocuous but costs //enormous// amounts of time added up. One of those things you dont notice until you suddenly dont have to do it.\n* Lying to people about e.g., masks or the latest science on transmission is a really bad idea.\n},{title:LessWrongZettelkastenMethod,bibliography:Zettelkasten,caption:The Zettelkasten Method,created:20200323114535270,description:Blog post-ish article by MrAbramDemski for the LessWrong site regarding the paper version of the ZettelKasten method and how it works for him.,medium:article,modified:20200808143946917,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.lesswrong.com/posts/NfdHG6oHBJ8Qxc26s/the-zettelkasten-method-1,text:Blog post-ish article by MrAbramDemski for the LessWrong site regarding the paper version of the ZettelKasten method and how it works for him.\n\nReferences HowToTakeSmartNotes and CompleteThoughtMapping2003.\n\n{{!!url}}},{title:LetBadThingsHappenSometimes,created:20221201135236442,creator:soren,description:If you never fail or let something bad happen to you, youre probably wasting your time or avoiding valuable experiences.,es:confident,modified:20240505042920894,modifier:soren,tags:Public Idea PhilosophyOfLife Math Business Favorites,type:text/vnd.tiddlywiki,text:There are some things that are so bad, unpleasant, and/or dangerous, that the optimum number of times to have them happen to you is zero. For instance, being mugged\u003C\u003Cfnote \On the other hand, I was attacked by a mentally ill woman in downtown StPaul a while ago, and that was (perhaps bizarrely) actually a somewhat positive experience in retrospect. She wasnt really very dangerous (she took a swing at me, but I easily knocked it down despite having never been in a fight in my life), and successfully staying calm and getting myself and the woman I was with|PrivatePerson out of the situation was quite empowering. Not to mention it seemed like a good reminder that even when things do get unexpectedly bad, they usually turn out absolutely fine|HappyAbsolutelyFine2016.\>> or raped, burying your child, having your parachute not open while skydiving, or shooting up heroin.\u003C\u003Cfnote \From an experiential perspective, it would likely be optimal to do heroin //once//. But the risk of ruining your life seems too serious.\>>\n\nBut for most ordinary things, people underestimate the optimal number of failures. It is almost universally not zero. If youre not losing at least occasionally, youre not being bold enough|BeBold.\n\nA great example of where this has been done correctly is credit card fraud (see Patrick McKenzies excellent treatment|https://bam.kalzumeus.com/archive/optimal-amount-of-fraud/). Why are credit cards so easy to steal and use fraudulently? Because credit card companies and merchants have worked out that introducing security measures that would make this impossible, or very unlikely, isnt worth it: the cost of implementing the measures, supporting customers who couldnt figure them out, and losing some sales from the additional difficulty, wouldnt be enough to make up for the reduced fraud. Its better just to carefully surveil whats going on, catch fraud right away, and occasionally write off some fraudulent charges.\n\nIts useful to divide bad things into //hard losses// (e.g., destroying an heirloom, having an experience that causes PTSD, being seriously injured or dying) and //soft losses// (e.g., starting a side business that doesnt make it, bruising your shin while trying some new activity, asking someone out and being rejected). Hard losses cause long-lasting damage, and while you can learn something from them, its difficult to imagine any situation in which you would look back on the experience of a hard loss and conclude|WouldntGoBack that it was //better// that it happened.\u003C\u003Cfnote \The one exception is if the event somehow causes something very good -- much better than the loss was bad -- that otherwise would not have happened, e.g., you save someones life, get scared straight and turn your life around, or meet your future spouse.\>> In contrast, soft losses usually stop feeling meaningful quite shortly afterwards and often lead to useful learning experiences, and regardless, accepting the risk of the soft loss often opens up the chance of major upsides.\n\nThe philosophy in this article applies specifically to soft losses.\n\n\n!! Miss some flights\n\nNow something more relevant to your everyday life, and where few people do it right: the optimal number of times to miss a bus, train, or plane is not zero.\u003C\u003Cfnote \I didnt make up this example, but I can no longer remember where I heard it. Ive written the explanation from scratch.\>> Lets consider flying because its the biggest production and ends up involving the largest amount of wasted time. Suppose youre a fairly frequent long-distance business traveler, going somewhere on average twice a month. You thus have to arrive at the airport four times per month, or about fifty times a year.\u003C\u003Cfnote \Well pretend all the flights are direct, or you dont have a choice about what connections you use, but in cases where you have a choice between connections and arent sure if you could make a shorter one, the same calculus applies.\>> Many people will arrive consistently 2–3 hours ahead (as recommended by airlines) to be (nearly) certain they wont miss the flight. But unless you have an unusually congested airport, the vast majority of the time it likely takes you no more than 30 minutes to pass through security and walk to your gate – maybe 45 if its busy and you have to check a bag. Then you just have to sit at the gate for an hour and a half, before getting on the plane and sitting on the plane for another couple of hours. So why not arrive at the airport an hour ahead instead? Nineteen times in twenty theres no problem at all. Occasionally you get a little concerned or have to jog to your flight. Only very rarely will you actually miss it.\n\nimg arrival-diagram.png\n\nThe key is that, while missing a flight is unpleasant and expensive, //so is spending an extra hour and a half at the airport fifty times a year//, and the pain of the latter easily outweighs that of the former if you correctly calibrate the number of flights you miss. Lets say it costs you $300 on average to change your flight if you miss it, plus you lose eight hours by having to wait for the next flight or take a more roundabout itinerary. If youre flying twice a month for business, your time is probably worth at least $50 an hour, so well call that $400, or $700 per missed flight. Maybe you miss two flights a year by cutting back your margin, so youre out $1,400. But you also saved 1.5 hours * 48 flights 72 hours a year, or $3,600, of sitting in an uncomfortable chair at an airport gate -- thats almost two entire work weeks! You can imagine that for some people, depending on how busy their home airport is, how much of a pain and expense it usually is to reschedule flights they frequently take, and how much their time is worth, it could be worth arriving as little as 30 minutes ahead.\n\nI do need to point out that sometimes you //really// dont want to miss your flight. If youre flying to someplace in the middle of nowhere and the next flight isnt for three days, or you have a critical appointment two hours after you land, you should arrive early enough that you definitely wont miss your flight. But if youre flying multiple times a month, chances are good these situations make up a small portion of your flights -- you should simply consider ahead of time what chance of missing this particular flight youre willing to take and plan your departure time accordingly. LossAversion makes this difficult to do accurately, so if you want to use this strategy, its helpful to make your decisions ahead of time before you start focusing too hard on a specific flight.\n\nIf, like me, you dont fly very often, the additional bother involved (and lack of sympathy when you miss your flight since you have no meaningful frequent-flyer benefits!) makes this much less of a slam dunk. You also have less data to figure out the right amount of margin for yourself, so youre more likely to set your arrival time incorrectly. The more you do something, the more important it is to optimize and consider whether failing more often is worthwhile.\n\n(Side note: J.O.|PrivatePerson says he thinks the two-hour recommendation is airport propaganda to make you spend more money at the airport, which is probably a ConspiracyTheory but also seems quite plausible!)\n\n\n!! Other examples\n\n* Optimal number of bad restaurant meals: probably several per year. If you dont try new places that could be bad, youll miss a whole lot that are really good. Plus, you can go back to the good ones many times, and you never have to go back to the bad ones. See also Underexploration.\n* Optimal number of nasty romantic breakups: Same deal (though hopefully several per lifetime, not per year!). Plus they probably help you learn how to make future relationships more likely to succeed.\n* Optimal number of angry customers: A small percentage. If you dont upset //anyone//, you either arent doing anything interesting (see TyrannyOfAverages) or you dont have very many customers. (On the other hand, you should also aggressively act to make angry people happy. Screwing something up and handling the fallout well often makes people happier with your product than if nothing went wrong at all.)\n* Optimal number of stolen items: Its probably possible to go through life without //ever// having anything stolen, but youll waste far more time and energy being paranoid than you would replacing a few stolen items now and again. Having your bicycle stolen occasionally, for instance, is basically a tax on biking in a large city; while you certainly shouldnt leave your bike unlocked because it will disappear posthaste, if youre determined never to leave it in an insecure location, you wont be able to bike pretty much anywhere, plus youll always be worried about having your bike stolen. Better to ride a bike you can easily afford to replace, use a lock and locking method that are just a little better than the guys next to you but are still quick and easy to apply, and park wherever you want, then cheerfully replace the bike on the rare occasion that it goes missing.\n* Optimal number of scams to fall for: Probably a couple per lifetime. To have a high likelihood of completely avoiding ever being scammed, you have to strongly lack trust in people, which is harmful to your social life and your chances of having interesting experiences in the general case.\u003C\u003Cfnote \This one is interesting because there are scams its OK to fall for, that will mostly just teach you a valuable lesson (e.g., playing a shell game, having a stranger you invite to your house steal something small from you), and scams its not OK to fall for (wire your life savings to some dude in the Bahamas). Its important to choose to trust people who might be scamming you //deliberately//, recognizing what the potential downsides are.\>>\n\nIn some ways this tiddler is uninteresting, in that its really just saying that you should do a CostBenefitAnalysis on everything. But theres a pretty good chance you agree with that statement yet have never thought of intentionally risking missing a flight; sometimes its important to discuss specific angles of a problem like this (see also RelativeAdvice).\n\n{{LetBadThingsHappenSometimes/p||PrivateChunk}}},{title:LettsLaw,caption:,created:20200322172429802,creator:soren,description:All programs evolve until they can send Email,es:likely,modified:20210623120218542,modifier:soren,tags:Software Humor LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20200510012441076\\n\t\What does Letts Law state?\\n\t\{{!!description}}.\>>\n\nSomeone always manages to slip that requirement in there at some point, regardless of whether its one of the ActualRequirements, partly because EmailIsUniversal and partly because people do what theyre comfortable with.},{title:LibraryRules,created:20210809173824256,description:To make an office into an effective place to get work done, everyone should act like theyre in a library.,es:possible,modified:20210809190144025,tags:Idea Employment Public,type:text/vnd.tiddlywiki,text:An office should follow “library rules”: its a quiet place for maximum productivity, not a place for people to have loud and irrelevant conversations and interrupt each other|InterruptionsAndProductivity. (Everyone knows how to behave in a library already, you just need to say theyre supposed to.) If you need to collaborate with someone else, go into a meeting room.\n\nSource: CrazyAtWork2018.\n\n\u003C\u003Cremembercz \20210809190108963\\n\t\According to TheBasecamp, an office environment should follow {Library} Rules to promote optimum focus and productivity.\>>},{title:Liechtenstein,created:20200422235921871,modified:20200422235950629,tags:Place Public,type:text/vnd.tiddlywiki,text:MicroState in Europe. I claim that Liechtenstein is InherentlyFunny.},{title:LifeDebugging,created:20231201033235811,creator:soren,description:What isnt working? Why isnt it working? How can you fix it?,es:likely,modified:20240221003737324,modifier:soren,tags:Idea PhilosophyOfLife Process Design Stub Public,type:text/vnd.tiddlywiki,text:{{!!description}} This debugging loop can make almost anything dramatically better.\n\nEven making relatively trivial things better on a more or less permanent basis can be valuable (see MinorConvenience). But its pretty common to have major things wrong with your life, your process, or your product -- ones which not only threaten to send everything crashing down if not addressed, but which are also glaringly obvious in retrospect. You just have to take the time to actually do this.\n\nYou are a product|CompanyIsAProduct?},{title:LifeHack,created:20200401231028027,creator:soren,es:confident,modified:20211229040831472,modifier:soren,tags:Productivity Definition Public Idea,type:text/vnd.tiddlywiki,text:Internet terminology for a tip that makes your life just slightly easier. A small number are pretty brilliant (e.g., use binder clips to keep cables from falling behind desks). Many are silly and pointless efficiencies (or worse, describe a way of doing something WorthlessEfficiently).\n\nWe could say its SturgeonsLaw, but my feeling is that theyve been getting worse over the years: perhaps most of the useful ones have been used already, or perhaps its easier to make Clickbait nowadays.\n\nOne important differentiator of useful and dumb lifehacks is whether they have the ability to MakeItNeverComeBack. I discussed this in FixItForever.\n\nI maintain some lifehacks and adjacent ideas in MiscellaneousLifeTips.},{title:Lifehacker,created:20200401231650128,modified:20200509032407996,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog dedicated to LifeHacks. Once upon a time a real joy to read, now mostly lower-quality crap, but I still have it in my RSS feeds hoping it will magically be better!},{title:LifeOfSamuelJohnson,author:Boswell,bibliography:LifetimeReading,caption:Life of Samuel Johnson,created:20210703170128000,genre:History,medium:book,modified:20210705214035387,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Lifestyles,created:20240402012640292,creator:soren,modified:20240402012647175,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Gift shop in ValparaisoIndiana.},{title:LifetimeReading,bibliography:LifetimeReading,created:20210703165332506,modified:20251011164926433,modifier:soren,tags:Bibliography Public,type:text/vnd.tiddlywiki,text:\\define priorityFilt() getpriorityelse3compare:number:lteq{$:/temp/LifetimeReading!!priority}\n\\define myfilt() tagSourcebibliographyLifetimeReadingfilter\u003CpriorityFilt>regexp:genre{$:/temp/LifetimeReading!!genre}regexp:readstatus{$:/temp/LifetimeReading!!readstatus}$(sortfrag)$ -LifetimeReading\n\nThis is a list of what I believe to be the most important and classic|FocusOnClassics books I am interested in reading and have not yet read. (Note that especially for nonfiction, “important” doesnt necessarily mean the content is correct or still directly relevant -- if it had a major influence on the course of history, it can still be important.) Most of them are serious reading, so I dont by any means expect the list to make up the majority of my books read|RecentlyRead, but I would like to manage one every month or two. I try to keep the priorities updated to float the things Im most interested in at the moment to the top of the list and make it easier to find something exciting to start with.\n\nI compiled the list myself from an aggregation of best-books-of-all-time lists, some of which are themselves meta-analyses. HTRAB and TBBOAT came first and form the core of the list, and I filled in anything that seemed missing from a variety of other sources. The source is indicated in the //Recommender// column:\n\n* HTRAB: How to Read a Book|HowToReadABook1972s suggested canon appendix. Good on nonfiction, fairly poor on fiction and biased towards older works, with barely anything later than 1950.\n* TBBOAT: The Best Books of All Time|https://www.thegreatestbooks.org. Fantastic on fiction, starts out good on nonfiction and starts to go downhill into things Ive never heard of after 20 items or so.\n* Penguin: 100 Must-Read Classic Books, As Chosen By Our Readers|https://www.penguin.co.uk/articles/2018/100-must-read-classic-books.html\n* Telegraph, GR (Goodreads), Time: Ive lost track of the URLs of these lists, but they were put out by the named publications.\n* MP: One or both of my parents, who are well-read and have similar tastes to me in many areas.\n* SIB: Miscellaneous books I have heard of and think I should read, but didnt find on any of these lists.\n\nThere are currently \u003C$count filter\tagSourcebibliographyLifetimeReadingreadstatusunread\/> unread items on this list; if I read one per month, it will take \u003C$text text{{{ tagSourcebibliographyLifetimeReadingreadstatusunreadcountdivide12fixed2 }}}/> years to complete.\n\n\n!! Find something to read\n\n@@.sib-lr-table\n|!Sort fragment |\u003C$edit-text tiddler\$:/temp/LifetimeReading\ field\sort\ tag\input\ default\\/>|\n|!Genre |\u003C$select tiddler\$:/temp/LifetimeReading\ field\genre\>\u003Coption value\.*\>(any)\u003C/option>\u003C$list filter\tagSourcebibliographyLifetimeReadingeachgenregetgenre!regexp/sort\>\u003Coption value\u003C\u003CcurrentTiddler>>>\u003C\u003CcurrentTiddler>>\u003C/option>\u003C/$list>\u003C/$select>|\n|!Priority ≤ |\u003C$select tiddler\$:/temp/LifetimeReading\ field\priority\>\u003Coption value\1\>1\u003C/option>\u003Coption value\2\>2\u003C/option>\u003Coption value\3\>3\u003C/option>\u003C/$select>|\n|!Read status |\u003C$select tiddler\$:/temp/LifetimeReading\ field\readstatus\>\u003Coption value\.*\>(any)\u003C/option>\u003Coption value\^unread$\>unread\u003C/option>\u003Coption value\^partial$\>partial\u003C/option>\u003Coption value\^read$\>read\u003C/option>\u003Coption value\^reread$\>reread\u003C/option>\u003C/$select>|\n@@\n\n\u003Ctable class\sib-lifetime-reading sib-lr-table\>\n\t\u003Ctr>\n\t\t\u003Cth>Status\u003C/th>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Author\u003C/th>\n\t\t\u003Cth>Genre\u003C/th>\n\t\t\u003Cth>Year\u003C/th>\n\t\t\u003Cth>Priority\u003C/th>\n\t\t\u003Cth>Recommender\u003C/th>\n\t\t\u003Cth>Rating\u003C/th>\n\t\u003C/tr>\n\u003C$vars sortfrag{{$:/temp/LifetimeReading!!sort}}>\n\u003C$list filter\u003C\u003Cmyfilt>>>\n\t\u003Ctr>\n\t\t\u003Ctd>\n\t\t\t\u003C$select field\readstatus\>\n\t\t\t\t\u003Coption value\unread\>unread\u003C/option>\n\t\t\t\t\u003Coption value\partial\>partial\u003C/option>\n\t\t\t\t\u003Coption value\read\>read\u003C/option>\n\t\t\t\t\u003Coption value\reread\>reread\u003C/option>\n\t\t\t\u003C/$select>\n\t\t\u003C/td>\n\t\t\u003Ctd>\u003C$link to{{!!title}}>{{!!caption}}\u003C/$link>\u003C/td>\n\t\t\u003Ctd>{{!!author}}\u003C/td>\n\t\t\u003Ctd>{{!!genre}}\u003C/td>\n\t\t\u003Ctd>{{!!year}}\u003C/td>\n\t\t\u003Ctd>\n\t\t\t\u003C$select field\priority\>\n\t\t\t\t\u003Coption value\1\>1\u003C/option>\n\t\t\t\t\u003Coption value\2\>2\u003C/option>\n\t\t\t\t\u003Coption value\3\>3\u003C/option>\n\t\t\t\u003C/$select>\n\t\t\u003C/td>\n\t\t\u003Ctd>{{!!recommended-by}}\u003C/td>\n\t\t\u003Ctd>{{||$:/tzk/Templates/Topical/ReadingList/Rating}}\u003C/td>\n\t\u003C/tr>\n\u003C/$list>\n\u003C/$vars>\n\u003C/table>\n\n\n\u003C!--\n{{||$:/sib/Templates/Topical/BibliographyList}}\n-->\n\n\u003Cstyle>\ntable.sib-lifetime-reading {\n\twidth: 100%;\n}\n\ntable.sib-lr-table input, table.sib-lr-table select {\n\twidth: 100%;\n}\n\u003C/style>},{title:LikableSoftware,created:20200121021257674,es:likely,modified:20210509005656332,reviewed:20230419,tags:Design Software Public Idea,type:text/vnd.tiddlywiki,text:Likable software is a concept I coined in the TheControlAltBackspace post Dreamdir and the Unix Philosophy, or Likable Software|https://controlaltbackspace.org/design/dreamdir-and-the-unix-philosophy-or-likable-software/. Likable software is that which you dont just put up with but that actively makes you happy when you use it.\n\nI identified several generally applicable qualities of likable software:\n\n* Feature creep is avoided like the plague.\n* The program defines a flexible language that users can work with.\n* Programs for simple use cases are simple; programs for complex use cases are complex but are based on a simple, understandable model and hide the extra features when not needed.\n* The software integrates well with other programs so users can supplement its weaknesses.\n\nI identified DreamDir as \likable\ when I was working on it, triggering the post described above. The UnixPhilosophy seems to more consistently generate likable software than other design philosophies, but is neither necessary nor sufficient. DeceptiveSimplicity, as arguably in the case of Git, helps too.},{title:Liminality,created:20200226005324491,es:likely,modified:20210509012318936,tags:Psychology Imagination Public Idea,type:text/vnd.tiddlywiki,text:A mythological and psychological concept of being on the threshold, physically, mentally, emotionally, life-landscapely. Though it may be the darling of pop-psychology and pop-literary-theory in an irritating way, the idea really does show up everywhere once you start looking for it.},{title:LinearVsTiddly,created:20200514202104901,es:likely,modified:20210508233457831,tags:Information PersonalDocumentation Writing Design Public Idea,type:text/vnd.tiddlywiki,text:A common mistake in the discussion of HierarchiesVersusNetworks is to assume that networks are inherently superior in all situations. Among people who learn about systems like TiddlyWiki and the ZettelKasten which allow splitting content into small, reusable units, a similar assumption is that small, reusable units are simply a better way of organizing information than linear articles, papers, or books.\n\nI dont think this is true. For one thing, I find it difficult to believe that the linear narrative organization has survived for several millennia based on no strengths of its own. Sure, the computer and the rise of hypertext has made it easier to implement other systems, but the more basic and perfectly functional ones were always possible with index cards, or even page numbers or messily-linked section headings in a book. I know page numbers didnt exist until centuries after books, but the point is that people likely would have started exploring alternatives more quickly if the linear organization wasnt working at all. You can always be surprised at how long it takes for an important idea to show up, but the balance of the evidence seems to point to linear narrative being a good organization in many ways, though of course not without its flaws.\n\nI think theres something more profound here though, which is that \tiddly\, nonlinear organization in a ConceptWeb is better for modeling ones own thought and things one knows. Linear organization is better for communication. Linearity allows the author to explain themselves, to take the reader through a series of steps that build on each other and result in understanding. Thats not something you can do in a tiddly system; the unfamiliar user wanders through it. Imagine a really good teacher presenting her students with a tiddly learning style. She would teach something for two minutes, then provide the students with a big list of related topics, and it would be up to them to choose where to go next. How is that supposed to work?\n\nLinear organization, on both a large and small scale, also forces the author to think in a different way (linearization is a major part of WritingIsThinking). Often the small scale is enough for this purpose, but its hard to imagine not learning more about a subject by trying to outline it into book form, for instance.\n\nWithin a tiddly system, its sometimes useful to have micro-linearizations, such as my MicrosoftBuild2020 notes, which tiddlifies each session (and the insights from those sessions), but also provides a chronological and categorical ordering of the whole thing.\n\n(I do recognize the irony of publishing a ZettelKasten that says that tiddly organization is a bad way of communicating with others. But thats a kind of PerfectIsTheEnemyOfGood fallacy. I do write TheControlAltBackspace in the “better way of communicating”; but theres a lot here that would simply never see the light of day unless it was published here. Better //something// out there than nothing at all.\n\nMrAndyMatuschak has also pointed out the potential benefit of a ZK-ish system for extending conversation. This is similar. You probably dont have a blog post ready for all your important ideas, but you might have tiddlers for many of them. And perhaps the lazy structure is a benefit in the conversational context.)},{title:LinkToOutlookItems,created:20200226170525602,es:confident,hideorphan:true,modified:20210810180859055,tags:TechBook PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Nice way to link to Outlook items. This is //very// hacky in terms of diving into Windows COM internals no mortal should know about in 2020, as you will momentarily see, but it works like a charm.\n\nTested with Office 2016 and Windows 10 on 2/2020.\n\n!! Caveats\n\nIf the item switches mailboxes, the GUID will change. In my experience it seems like changing folders can sometimes cause issues as well. I havent found a fantastic solution to this if you need to archive mail but dont want to do it right away.\n\n!! Enabling the protocol\n\nFirst, you have to tell Windows how to handle the `outlook:` protocol with a Registry patch; for some reason MS stopped setting this by default in Outlook 2007:\n\n```\nWindows Registry Editor Version 5.00\n\nHKEY_CLASSES_ROOT\\outlook\n\URL Protocol\\\\n@\URL:Outlook Folders\\n\nHKEY_CLASSES_ROOT\\outlook\\shell\n@\open\\n\nHKEY_CLASSES_ROOT\\outlook\\shell\\open\n@\\\n\nHKEY_CLASSES_ROOT\\outlook\\shell\\open\\command\n@\\\\C:\\\\Program Files\\\\Microsoft Office\\\\Office16\\\\OUTLOOK.EXE\\\ /select \\\%1\\\\\n```\n\n!! Adding the macro\n\nNext, add the following sub into your `ThisOutlookSession` object in VBA (Alt-F11 from Outlook):\n\n```\nAdds a link to the currently selected message to the clipboard\nSub AddLinkToMessageInClipboard()\n\n Dim objMail As Outlook.MailItem\n Dim doClipboard As New DataObject\n\n One and ONLY one message muse be selected\n If Application.ActiveExplorer.Selection.Count \u003C> 1 Then\n MsgBox (\Select one and ONLY one message.\)\n Exit Sub\n End If\n\n Set objMail Application.ActiveExplorer.Selection.Item(1)\n doClipboard.SetText \extEmail message|outlook:\ + objMail.EntryID + \\\n doClipboard.PutInClipboard\n\nEnd Sub\n```\n\nChoose Tools -> References and browse to `C:\\WINDOWS\\SYSTEM32\\FM20.DLL`, to add the `Microsoft Forms 2.0 Object Library` that allows the sub to access the clipboard.\n\nTweak the ~SetText call as desired for the link format you want (shown is a TiddlyWiki format).\n\nAdd the macro to the ribbon through File -> Options. To use, click on an email you want to link to, then click the ribbon button and paste into your target location.\n\n!! Sources\n\n* https://www.davidtan.org/outlook-2007-adding-outlook-url-protocol/\n* https://superuser.com/questions/71786/can-i-create-a-link-to-a-specific-email-message-in-outlook\n* https://answers.microsoft.com/en-us/msoffice/forum/all/mystery-compile-error-user-defined-type-not/b0c07a65-9f0c-43f1-a181-12c95db0ac8d},{title:LinusCleanGitHistory,bibliography:Git,caption:Linus on Clean Git History,created:20200908171423957,description:MrLinusTorvalds take on how to keep your SCM history clean and on the MergeVsRebase debate,medium:correspondence,modified:20200908172350632,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html,year:2020,text:MrLinusTorvalds on how to use his own source control system for contributing to the Linux kernel. Weighs in on the MergeVsRebase debate:\n\n* You //should// (even //must//) rebase/amend to clean up your own history so that others can easily read it. Youre TellingTheScmStory of how you got to this point.\n* You absolutely should never rebase anyone elses stuff.\n* As a consequence, you must not publish changes to a shared branch until theyre ready to go (or it will become impossible to satisfy both requirements).\n\nOther notes:\n\n* Reduce merge points as much as possible, and never merge //random// points. If you need to merge a newer version of the kernel to catch up, and rebasing doesnt make sense, thats OK.\n* Dont accept peoples branches until they clean it up. That permanently pollutes your history, and refusing it makes them figure out how to do it properly.\n\nChoice quote:\n\n> I want clean history, but that really means (a) clean and (b) history.},{title:Linux,created:20200426165451144,modified:20200426165600608,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:OpenSourceSoftware operating system that pretty much runs the world in one form or another nowadays. It is unpopular on desktop computers, but dominant everywhere else (phones, servers, embedded devices, etc.).},{title:Lisp,created:20200322165136286,creator:soren,modified:20201205055522437,modifier:soren,tags:Software ProgrammingLanguage Code Public Idea,type:text/vnd.tiddlywiki,text:FunctionalProgramming-based programming language known for its odd “s-expression” syntax with many parentheses (sometimes nicknamed “Lost in Stupid Parentheses”).\n\nAccording to many observers and GreenspunsTenthRule, other languages just spend all their time looking for and recreating functionality of Lisp. It is true that many valuable features have since made it into newer and more popular languages like Python.\n\nMany people say that when you really grok|Grokking Lisp, you experience something akin to enlightenment.},{title:LittleRock,created:20231017152847071,creator:soren,modified:20231017152857750,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Capital of Arkansas.},{title:LittleTokyo,created:20230916153505948,creator:soren,modified:20230916153512192,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LiveJournal,created:20200330020245580,creator:soren,es:confident,modified:20211229150212806,modifier:soren,tags:History InterpersonalRelations Software Public Idea,type:text/vnd.tiddlywiki,text:Combination blog and social-network service in the early 2000s. An interesting step in the history of the social web.\n\nAGroupIsItsOwnWorstEnemy200304 calls out LiveJournal as doing a particularly good job in maintaining communities small enough to be real communities where people know each other, using a kind of federation approach where you belong to small circles and the circles interact. This mirrors the EmergentStructure of an actual, real-life social network.},{title:LiveMusicViaWatchhouse,created:20220909123209517,creator:soren,description:Music can be beautiful in any medium, but can only transmit certain messages when performed live, as shown by my experience with Watchhouse.,es:likely,modified:20240405010717783,modifier:soren,tags:Idea Music MindIntercourse Public Frozen,type:text/vnd.tiddlywiki,text:(September 9, 2022.)\n\nWent to see TheWatchhouse last night at the PalaceTheater in StPaul. They were…astoundingly good. I mean theyre always good, but this was something else entirely.\n\nHeres why. Some musicians make music. Some musicians use music as a vehicle to transfer emotions and experiences into your heart. And the second mode, for whatever reason, only fully works live, in person.\u003C\u003Cfnote \\\The distinction means that there are some musicians you should be willing to pay hundreds of dollars to see live, and some you shouldnt bother seeing live for free unless youre looking for a way to kill some time. N.B., this is not meant to be an attack on musicians who arent worth seeing live. Some are extraordinarily good; many are better technically than those for whom music is merely an intermediary. Theyre just doing something different with the art form. If your primary goal is to create nice sounds, you can do that better on a recording than you can live.\\\>> Part of it is that we usually pay more attention when were sitting in a concert hall, but even if you sit down in your living room with really nice headphones and listen attentively for an hour to a recording of a live show, theres always some magic missing.\n\nIve been listening to Watchhouse recordings for a couple years. Its great music! Ive watched them do live concerts on YouTube. Those are loads of fun. And when Ive watched, e.g., the Everly Brothers “All I Have To Do is Dream” cover shown in their tiddler, I can catch a certain amount of their energy. But when I was there, I was on the edge of my seat and somehow //inside their life// for an hour and a half. Watching that show on YouTube would have been kind of like reading the ChroniclesOfNarnia without realizing its an allegory: its still good, but it means something entirely different.\n\nMsEmilyFrantz threw something closely related to this out just before the last song:\n\n> Glad yall have as many feelings as we do.\n\n(That was courtesy of her and the band!)\n\nI didnt much like their new self-titled album when I listened to it recently. But they did a few of the songs on this concert, and they were fantastic. I think there are two things going on here; first, the songs are overflowing with emotion and experiences and when you listen to them on the recording you have to try to recreate them yourself, but when youre in person they just show up. And second, theyre not easy listening, and certainly not the kind of thing you can jam out to in the car, like many of their other albums; you have to pay close attention. I think they should have been mixed with some lighter and more listenable things on the album, which they did on the concert; you need a break to take them in properly.\n\nSide gripe, completely unrelated to anything else: Emily only played fiddle on one song, probably because they had the cellist with them. Ive never been the biggest fan of her fiddle playing -- its always felt the tiniest bit short of idiomatic in a way that makes me vaguely uncomfortable -- but I missed it here!\n\n\n!! References\n\nIve often explained that the StOlafChristmasFestival has this missing layer of meaning on a recording. This was my analogy at the time, and I think it still holds up pretty well:\n\n> The difference between Christmas Festival recorded and Christmas Festival live is like the difference between looking at a picture of a beautiful woman and marrying her and making love to her.\n> ---me, \u003C\u003Crt 5859>>},{title:LiveScribe,created:20200423004339968,creator:soren,es:confident,modified:20211107174753620,modifier:soren,tags:Product Public Idea,type:text/vnd.tiddlywiki,text:Product that lets you use a bulky pen on special paper and have your notes automatically transcribed and uploaded to the cloud, along with an automatically linked audio recording you can access at second resolution by tapping the point on the page where you were writing at that time.\n\nWicked cool, an excellent demonstration of bridging the digital and analog worlds, and quite functional and useful overall, but I just didnt go to enough lectures where I would ever actually go over the audio in the future to make it worth dealing with. Notes are good for a reason, right? They distill what was said at the lecture so you dont have to listen to it again! (A form of WritingIsThinking.)\n\nThe writey part of the pen itself was also thoroughly mediocre, and the pen had to be quite thick, so while the writing experience wasnt //bad// on any absolute scale (and I say this as a pen snob), if youre going to spend a couple hundred bucks on a pen you definitely wish it could feel better in your hand.\n\nMy pen was ChaniPen when I used it (see DeviceNamingSystem).},{title:LivesOfThePoets1781,author:Samuel Johnson,bibliography:LifetimeReading,caption:The Lives of the Poets,created:20210703170128000,genre:Misc,medium:book,modified:20210705214035394,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1781},{title:LlmsAsTalkingDog,created:20240510030541103,creator:soren,description:Its amazing that you can train a dog to talk, but ultimately its just a dog.,es:likely,microlink:tdog,modified:20240611045045565,modifier:soren,tags:Idea AI Public,type:text/vnd.tiddlywiki,url:https://blog.plover.com/tech/gpt/chat-gpt-is-a-talking-dog.html,text:MrMarkDominus \u003Ca class\tc-tiddlylink-external\ href{{!!url}}>has\u003C/a> the following half-cynical,\u003C\u003Cfnote \I recall that, amusingly relevantly, the root of cynic is //dog//.\>> half-realist approach to LLMs:\n\n> These systems are like a talking dog. Its amazing that anyone could train a dog to talk, and even more amazing that it can talk so well. But you mustnt believe anything it says about chiropractics, because its just a dog and it doesnt know anything about medicine, or anatomy, or anything else.\n\nNow of course, often the talking dog is exactly right. It can be helpful! And in some domains and at some tasks it is much more helpful and accurate than others. Id say the level of belief you should have is more like “trust but verify”\u003C\u003Cfnote \Which, as my friend J.M.|PrivatePerson at TheFederatedInsurance liked to point out, really means you dont actually trust, because you feel the need to verify. Thats exactly right here.\>> in many cases.\n\nI dont buy that LLMs have no intelligence. I certainly dont think theyre conscious, and their intelligence is different from a humans. But I think youre being a little disingenuous|March2023AgiOpinions if you claim that they have no skills when they can pass many tests designed for humans and perform novel tasks accurately. That said, thinking about them as very, very well-trained talking dogs seems like a remarkably useful metaphor, because their “intelligence” is grounded entirely in regurgitating language in new patterns, they have no other kind of intelligence – and understanding that makes many failures (and successes!) that otherwise seem surprising obvious, and helps you figure out where the tools might be useful and where they are liable to fall flat.},{title:LoadComplete,created:20210810181744980,modified:20210810181800248,tags:Software Public,type:text/vnd.tiddlywiki,text:Load-testing tool by TheSmartBear. Not to be confused with LoadNinja, which does very similar things but is a different product.},{title:LoadNinja,created:20210810181728103,modified:20210810181738016,tags:Software Public,type:text/vnd.tiddlywiki,text:Load-testing tool by TheSmartBear.},{title:LoadstoneAndMagneticBodies,author:Gilbert,bibliography:LifetimeReading,caption:On the Loadstone and Magnetic Bodies,created:20210703170128000,genre:Science,medium:book,modified:20210705214035407,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:LocalityAndSimplicity,caption:Locality and Simplicity,created:20200219214806670,creator:soren,es:likely,modified:20220309125120326,modifier:soren,tags:UnicornProject Idea Public,type:text/vnd.tiddlywiki,text:The first of the FiveIdeals described in The UnicornProject by MrErikReid. And worthy of quite a lot of thoughts! Many of these from F.I.B.C.|PrivatePerson discussion of UnicornProjectPartOne.\n\nHow does this fit in with the need to avoid duplication of work and other resources? Many systems are missing empathy or any kind of consideration of other teams when making changes, which leads to architectural troubles and other issues. See ThreeSwitches.\n\nA.K.|PrivatePerson suggests it is more about making sure your app does not change when other things change. Tyler seemed to think this is very difficult, and it is, but J.M.|PrivatePerson points out that design and architecture can be used to limit the impact of cross-functional changes. I highlighted the use of DefinedInterfaces and the general avoidance of the BigBallOfMud as examples of methods that can help quite a lot in making teams independent. UnicornProjectPartThree calls out (p. 247) the access of data and systems through versioned APIs in particular as a useful technique.\n\nM.B.|PrivatePerson notes that when silos are broken down, it is much easier to involve the other teams when appropriate, plus you might actually know who to talk to about a given issue, much like you might with someone who is actually on your team.\n\nWhats the actual cost of combining things? See ACompleteDefinitionOfBadness.\n\nYakShaving is the introduction of unnecessary non-locality and non-simplicity to a particular task, rather than to a system.\n\nPerhaps (just me speaking here after the fact) one of the best solutions is to AvoidScale. Certain things you just cant do as well when you get beyond a certain point. Sometimes though, its necessary and all this comes back into play.\n\nSimilarly, J.M.|PrivatePerson notes that this is just a hard problem. ThreeSwitches is a clunky metaphor were having trouble dealing with because ThereIsNoObviousAnswer. Surely we would have gotten there by now if there were!\n\nTODO: This could probably do with a bit of cleanup},{title:LocalMaximum,created:20200204162455427,creator:soren,es:confident,modified:20211024235337805,modifier:soren,tags:Definition Math Public Idea,type:text/vnd.tiddlywiki,text:In math and optimization problems, a local maximum (or local minimum) occurs when the algorithm for finding the maximum is working towards the total maximum but gets \stuck\ unable to escape something which looks from a near perspective like the best solution but actually isnt, because the algorithm is unable to consider a view broad enough necessary to find the global maximum.\n\nThis is a useful concept outside of the mathematical realm, too. For instance, you might find that youve reached a choice of city, career, and/or life partner where you would struggle to improve your happiness or fulfilment by changing any individual variable in a direction that you can presently see, but still feel like you could be doing better. This suggests youve reached a local maximum and should consider whether you need to make a big change and step out of your comfort zone. (This situation in particular is discussed further in the context of my life in the essay ConvinceMeToStay.)},{title:LocalOptimization,created:20200410220230597,creator:soren,description:Local optimization is an antipattern where some tiny part of a system is improved, but the system as a whole is worsened.,es:confident,modified:20231009230055173,modifier:soren,tags:Systems Business Productivity Process Public Idea,type:text/vnd.tiddlywiki,text:An effect that happens in complex bureaucracies (see also BureaucraticPsychosis) and increasingly in society itself in which people relentlessly optimize things at their own level, while completely ignoring the big picture. This might happen accidentally, or worse maliciously. Many systems are now designed in a way that not only enables but rewards this kind of behavior.\n\nMany kinds of self-service (cf. EnablerAndDemander) fall into this category. Actually, the business might have been able to do it faster and more effectively by providing a service to the customer, but if they can remove that service from their balance sheet and turn it into ShadowWork for the customer, suddenly it doesnt show up in their accounting anymore and they look like awesome cost-cutters. Indeed, they might not even //care// that customers now get more stressed out and have a worse time at it, theyre making money! Go capitalism! When BigTech or its analogue in other industries is the only game in town, or competitors are doing exactly the same thing you are, customers becoming dissatisfied with your service isnt exactly a threat. (Many businesses are also good at making this look like a gain for customers so they dont even notice: look, now you can manage your account anytime with no need for pesky social interaction|ErosionOfTrivialSocialInteraction!)\n\nLocal optimization is often enabled by a MetricBlackHole. As in the ButtholeLocation anecdote, if anyone in charge of the system actually saw what was going on, they would laugh (or fire someone if it was malicious) and fix the problem posthaste. But typically this kind of optimization does not show up anywhere. If you optimize individual metrics and ignore team metrics (see BigPictureProductivity), you have to MakeWorkVisible, which most teams do not, to have any hope at identifying the issue. In the storage example, the hardware teams budget looks smaller (good on them!), and the people who cant get a development environment for days or weeks or months just push along trying to develop without having a development environment, which is what everyone else is doing anyway, so it just gets attributed to “poor project management” or something or other like that. Somebody unrelated probably gets blamed and fired (even though the CogIsNotTheCause, these places very rarely have the necessary BlamelessCulture to do the right thing).\n\nIn UnicornProjectPartOne, the hardware team is forbidden from placing orders for hard disks more than twice a year, in order to get the best discounts. This results in people being unable to spin up new servers and do any useful work for //months//.\n\nThe mantra ThinkLocallyActGlobally can reduce this problem if applied appropriately, and given the appropriate organizational structure and culture.},{title:Logic,created:20200326002754623,creator:soren,es:confident,modified:20210828141235116,modifier:soren,tags:Public Definition Idea,type:text/vnd.tiddlywiki,text:Tag for things to do with formal logic. Things to do with “logical reasoning” in the sense of //rationality// go instead in Reasoning.},{title:LogicalInversionError,created:20200314235736291,es:confident,modified:20210711201001131,tags:Psychology Logic Public SorenConcept Idea,type:text/vnd.tiddlywiki,text:A common type of error in human thinking and acting in which you accidentally reverse the role of two categories.\n\nExamples:\n\n* Sorting something like beans and putting the good stuff in the bad pile\n* Dumping out the wrong side of a strainer\n* Coding `if (!x)` instead of `if (x)` or vice versa\n* Inverting “member” and “member of” in a security hierarchy\n\nYou would think this would be hard to mess up because its such a simple error (only two choices!), but somehow it isnt. I suspect that as in the NoRehearsalFallacy, we underestimate how difficult it is and dont devote enough attention to getting it right.\n\nMay be colloquially called “wrongpiling.”},{title:LogicalTomorrow,created:20200316151202672,creator:soren,es:confident,modified:20230603043609120,modifier:soren,reviewed:20230428,tags:Definition Logic Public Expression Language Idea,type:text/vnd.tiddlywiki,text:You know how anytime youre in class or at work and you say youll be doing something “tomorrow” on a Friday, some wiseacre is practically guaranteed to go, “Tomorrow is Saturday! //I// wont be here, I dont know about you!”?\n\nO.H.H.|PrivatePerson, in a class that met Monday, Wednesday, and Friday, and a class which was full of future developers, scientists, and mathematicians who would be near the top of the list of wiseacres|HackingPedantryAndScience, developed a wonderfully precise way of sidestepping that: “logical tomorrow” (and “logical yesterday”).\n\nI dont get too much chance to use it myself, maybe because Im always forgetting about it, but its worth adopting.},{title:Lojban,created:20210731153725771,modified:20210731153647094,tags:Language Definition Public,type:text/vnd.tiddlywiki,text:Constructed language intended to be highly logical, eliminating linguistic ambiguities (not all ambiguities, though…you can still lie, leave out information, etc.).\n\nSome extremely interesting features and completely different from any other grammar you know, but difficult to learn.},{title:LolasCafe,created:20250626182412191,creator:soren,modified:20250626182412991,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Lolita1955,author:Vladimir Nabokov,bibliography:LifetimeReading,caption:Lolita,completed:202106041200,created:20201119203329895,creator:soren,due:202104061200,format:hardcover,genre:Literature,isbn:9780679410430,ivl:20,medium:book,modified:20231127030435950,modifier:soren,owned:yes,priority:1,rating:great,readstatus:read,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,universe:Lolita1955,url:,year:1955,text:1955 novel by MrVladimirNabokov, about the narcissistic, abusive pedophile MrHumbertHumbert and his exploits with tween child MsLolita (proper name Dolores Haze). Like many great|MediaRating books, it has everything, and some things in greater measure than most: serious themes, amazing prose, cognitive dissonance, shamefully erotic scenes, transformations within the book and in the readers mind. And on top of that, the feeling that you only understood a small fraction of its potential.\n\nUnsurprisingly, its dark and an emotionally difficult read -- and the contrast between the subject matter and everything else going on is part of what makes it genius. If youve had some personal contact with child abuse, I assume it would be harder still. I dont think I would ever try to tell someone when they should read //Lolita//, but if and when you feel ready for it, it is definitely worth the journey.\n\nIts also uproariously funny, often in ways which are almost embarrassing given the gravity of the subject. I mean, what else can you say about, e.g., this stanza from a poem written by HH in the sanatorium, which is simultaneously awful (because its Humbert writing bizarre therapeutic poetry) and sublime (because its Nabokov):\n\n\u003C\u003C\u003C\n\\\\nHappy, happy is gnarled ~McFate\nTouring the States with a child wife,\nPlowing his Molly in every State\nAmong the protected wild life.\n\\\\n\u003C\u003C\u003C\n\n(I read this on vacation at a cabin while my host was there working and started laughing out loud, and was very glad he did not ask what was so funny, because there is no way I would read this out loud, especially to someone who had not read //Lolita//.)\n\nOr this, which HH composes and makes Quilty read during the comedy masterpiece that is the murder of Quilty:\n\n\u003C\u003C\u003C\n\\\\nbecause you stole her\nfrom her wax-browed and dignified protector\nspitting into his heavy-lidded eye\nripping his flavid toga and at dawn\nleaving the hog to roll upon his new discomfort\nthe awfulness of love and violets\nremorse despair while you\ntook a dull doll to pieces\nand threw its head away\nbecause of all you did\nbecause of all I did not\nyou have to die\n\\\\n\u003C\u003C\u003C\n\nOr:\n\n> But no matter, I had my little revenge in due time. A man from Pasadena told me one day that Mrs. Maximovich née Zborovski a.k.a. Valeria had died in childbirth around 1945; the couple had somehow got over to California and had been used there, for an excellent salary, in a year-long experiment conducted by a distinguished American ethnologist. The experiment dealt with human and racial reactions to a diet of bananas and dates in a constant position on all fours.\n\n\n!! Characters\n\nI was reflecting partway through that Im not sure there is a single significant likable character|DislikableCharacter in the entire book. HH is narcissistic and abusive, Lolita is a complete brat, Charlotte and the neighbors are the epitome of everything wrong with 1950s suburban mediocrity and conformity, Valeria cheats and walks out on HH in comic fashion (I notice a parallel to ASeriousMan), Pratt is a weirdo schoolmaster, Beale draws a diagram of an accident he caused and goes to claim to HH that it isnt his fault, Gaston is unintelligent and probably abuses boys, Charlie is completely free of manners, Quilty is a depraved and also probably abusive old guy...the list goes on. The only people who I suspect might be actively likable are Mona, Dick, and, improbably, Rita, but we see very little of them.\n\nOf course, some of these people may (fictionally, counterfactually) actually be nicer when not filtered through HHs perspective -- we certainly cant trust him|UnreliableNarrator -- but that doesnt change the readers impression or make the characters likable.\n\n(I really //dont// know how to effectively organize something like this, and perhaps it would be an interesting TW-ish project!)\n\n\n!! Effects\n\n*//Lolita// presents an information hazard|LolitaAsInformationHazard.\n* The book contained 70 words I didnt know and was able to obtain definitions for, which is a record for me! I think the second-largest number of words Ive gotten from a single source recently was AnnaKarenina, and that is twice as long! Some of them it turns out Nabokov made up, because hey, why not.\n* There is an extremely fine line|LolitaAndAlternateUniverses between normal -- even beautiful -- and morally corrupt and disgusting, and Nabokov plays with us throughout.\n* The biggest weakness of the book, in my opinion, is that the first part of Part 2 is a bit under-paced. Even Nabokov admits as much in the afterword, though only by saying a lot of people have given up there! Its not that it //bored// me, exactly; its just that, looking back, I dont feel like I got additional meaning out of it proportional to the number of pages involved. A lack of economy or something.\n\n\nTODO: This is a work in progress. The stuff below this line probably wont make much sense.\n\n------\n\n!! Connections\n\n* Annabel Lee (even allusion-blind me got this one immediately, and this song|https://www.youtube.com/watch?v7U8Z8tE1Fc0 ran through my head the whole time I was reading, lol)\n* Carmen (this didnt take too long, but I didnt know the story till I went back and read...but the song was almost enough)\n** Invokes interpretation in which Lolita is actually tempting Humbert/being partially culpable?\n* Catullus (I missed the full depth of this one; see https://www.jstor.org/stable/441433?read-now1&refreqidexcelsior%3A6ca9f9166e8909bb0bcc2608d200d066&seq13#page_scan_tab_contents)\n* Alice|AliceInWonderland? (Research. I am quite sure there is something about it in my //Annotated Alice//, but unfortunately the book doesnt have an index -- wtf for a book this nice and this serious -- so finding it seems fairly hopeless!)\n\n...among many, many more\n\n\n!! Questions\n\n* 58 -- Charlotte more worried about Lo getting pleasure from HH than v.v.?\n* individualized lust as an aspect of love (\u003C\u003Crt 11664>>)\n* Its not the age that gets me, its the degree to which it is nonconsensual (also on whether Lo wanted it at the start, and how bad this different scenario was on the grand scale). This degree is actually kind of unclear at times...it changes and its hard to know what to make of it\n* change of environment doesnt help \u003C\u003Crt 11676>> as well as the bit about traveling across the US and really seeing nothing (first time)\n* (280) attraction to children as because they are not quite reachable? (So what does it mean that he has reached one? Is he almost no longer attracted?)\n* The absurd murder scene\n* WithLolita\n* Humbert the Terrible vs Humbert the Small (30) ;; article https://www.jstor.org/stable/441433?read-now1&refreqidexcelsior%3A6ca9f9166e8909bb0bcc2608d200d066&seq13#page_scan_tab_contents says there are two narrators: \the Humbert who calls Dolores Haze Lesbia, and the one who knows how she is not.\\n* Who/what is Quilty, and to what extent is he metaphorical?\n* How much sympathy should we have for HH? (More for the situation he finds himself in; much less for his continued abuse -- what other worse things can you do to another person? -- but I am fully unable to understand his continuing desire anyway)\n* This is a true story. Like, not that they literally happened, but essentially the outline of this story happens all the time, probably a scarily accurate replica. Cf. what I said about Mrs. Coulter. Part of why this is hard to read, to be brought along on that journey.\n* Having thoughts about nonconsensual sex hanging around in your head while reading is disturbing and weird\n* Does HH in fact care for Lolita, as he claims at the end? During what parts of the story did he? (I lean towards saying yes, but whenever his lust conflicts with it, that wins. And in this odd relationship, these two feelings are intrinsically in conflict.)\n\n!! Miscellanea\n\n* \u003C\u003Crt 11665>>, and knowing the time of ones conception\n*suns to moons (\u003C\u003Crt 11666>> -- Anki)\n*tennis without results \u003C\u003Crt 11674>>\n* literary stability of friends (281)\n* dolls and Dolly},{title:LolitaAndAlternateUniverses,created:20210617025634933,creator:soren,es:likely,modified:20211025035049713,modifier:soren,tags:Psychology Imagination Public Idea,type:text/vnd.tiddlywiki,universe:Lolita1955,text:An interesting feeling that seems to occur with some regularity in a wide variety of situations: this could have come out of an alternate universe that was //almost// the same as this one, but not quite -- and yet the impact of that slight difference is immense. It can be an event (because of a ButterflyEffect), or just a combination of attributes thats not quite normal here but could conceivably be elsewhere.\n\nI reflected on this several times during Lolita|Lolita1955. I think part of the reason it is so disturbing, as well as so effective, is the perversion of //almost//-normal situations. For instance, the beginning of HH and Lolitas RoadTrip would be charming if they werent having sex|ImplicationsOfSexualRelationships, or if they were both adults. Exactly the same words and scenes would still apply…theres just that one little fact that creates a massive dissonance and completely changes the tone and the result.\n\nThe line between beauty and disgust, between right and wrong, between success and failure, seems remarkably thin.\n\n!! References\n\nOn a more humorous level, the Minor Differences|https://theoatmeal.com/comics/minor_differences series by The Oatmeal calls out some slight changes in situation that yield massively different reactions.},{title:LolitaAsInformationHazard,created:20210610012533390,description://Lolita// is an excellent example of an //evocation hazard//, where the mode of presentation of an idea has undesirable or dangerous side effects.,es:confident,modified:20210628025818598,tags:Psychology Ethics Public Idea,type:text/vnd.tiddlywiki,universe:Lolita1955,text:Lolita1955 presents an InformationHazard, specifically an //evocation hazard//, as defined|InformationHazards2011 by MrNickBostrom: “the particular mode of presentation used to convey some content can activate undesirable mental states and processes.” Namely, MrHumbertHumberts surprisingly successful apologetics, casual attitude, and beautiful writing succeed in at least temporarily making most readers feel like what hes doing isnt disgusting or even particularly morally wrong.\n\nThe funny thing is that this succeeds even though you know that it is happening; although perhaps this is a general property of evocation hazards. I have experienced too few obvious evocation hazards to be able to discuss whether this is the case.\n\n//Lolita// is also an excellent example of Bostroms tentative conclusion that most information hazards arent worth doing much more about than considering; the value of the information (here, one of the greatest novels of the twentieth century) is usually substantially greater than the harm caused by the hazard, and attempts to intentionally suppress it so as to mitigate the hazard are usually unsuccessful or even counterproductive (see StreisandEffect). It nevertheless is worth pointing out that spending time with //Lolita// likely does alter your perception of pedophilia and child sexual abuse somewhat, and probably not in the right direction, whether you want it to or not|EverythingIsEffectiveAndPermanentAndThatsOk.\n\nIts worth noting that part II is much less successful than part I at this, at least for me. By the time you get partway through part II, ennui has set in for both Humbert and MsLolita, along with what we might call the banality of abuse (the allusion to EichmannInJerusalem1964 is intentional, although I cannot quite explain how it relates at the moment). My impression is that even HH is now doing what hes doing because hes locked into it, rather than because it truly gives him meaningful pleasure; and I think the recognition of the evil side of what hes doing is steadily growing.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20210628025904108\\n\t\What type of information hazard does //Lolita// present?\\n\t\An evocation hazard (the mode of presentation used to convey content can activate undesirable mental states).\>>\n\t\n\u003C\u003Crememberq \20210628025934129\\n\t\Which chronological section of //Lolita// do I claim is a stronger information hazard?\\n\t\The first half, before the banality of abuse sets in.\>>\n\n\u003C/$details>},{title:LondonFog,created:20230915165313892,es:confident,modified:20230915165334231,tags:Idea Public,type:text/vnd.tiddlywiki,text:Drink consisting of Earl Grey tea, vanilla, and foamed milk (and sometimes lavender).},{title:LongFormWriting,created:20200407013259222,creator:soren,es:likely,modified:20210813131727605,modifier:soren,tags:Writing Productivity Process Idea Public,type:text/vnd.tiddlywiki,text:TheBasecamps HowBasecampCommunicates refers multiple times to the value of long-form writing (as compared to synchronous conversation or instant messaging). The benefits are as follows:\n\n* No interruptions needed.\n* Meaningful discussions can take a meaningful amount of time to develop. People can wait to think over their opinion and their decisions.\n* WritingIsThinking, which means delivered content is usually better thought through.\n* Writing is permanent, not ephemeral, and that record happens automatically, especially if you ensure the discussion is kept in the right place for future retrieval (see NotesMustLink). People who couldnt make it or arent at the company yet can benefit.\n\nCf. MoreCorrespondence.},{title:LongGoodbye1953,author:Raymond Chandler,caption:The Long Goodbye,completed:20230122,created:20230122164530462,medium:book,modified:20230122165123106,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1953,text:Detective novel by MrRaymondChandler. Two murders of people Marlowe has become friends with, which turn out to be connected in a way that nobody expected or intended to let him connect.},{title:LongHairLessons,created:20200812023718510,creator:soren,es:likely,modified:20211027024510905,modifier:soren,tags:Identity Psychology Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Cfloat-image \soren-hair.jpg\ width:300 side:left>>\nI started growing my hair out when I got out of college and have had it long (being about to my shoulders -- long for a guy) for about two years, plus the time it took to grow.\n\nIve always kind of wanted to try this, but until I did it by accident never thought I actually would! (I moved and was slow enough at finding a barber what with everything else I had to do that it started getting long enough I thought Id give it a try.) So many of the best things in life happen by accident|AccidentsMakeTheWorldGoRound. Ive learned some curious things and had my expectations violated several times.\n\n\u003C\u003Cclarify>>\n\n\n!! Things I expected that arent true\n\n* I have not been misgendered even once. I wasnt expecting it to happen all the time or anything, but since I seem to be close enough to the boundary for it to have happened once in a while, I thought it might happen more. Seems hair is much less of a cue than I would have thought, and goes to show that people have no clue why they know things.\n* Similarly, I get very few actively negative or disapproving comments. Sometimes I feel like I can tell that people arent fans, but they almost never say anything.\n* Its not that much more work than having short hair. It takes longer to wash and I cant leave the house with it wet unless I want to look like a moron, but I also only need to wash it 2--3 times a week (indeed, it behaves better that way). I have to brush a lot, but my hair doesnt like to behave no matter what length it is, so the only real change is its a bit more noticeable when its messy.\n* Hair doesnt get monotonically harder to deal with the longer it is. There are some lengths that feel and look natural for me, and others that dont, going in and out maybe an inch or three apart -- seemingly having to do with how the waves fall and what other parts of my body it lines up with. Indeed, if theres any trend, it actually behaves better the longer it is because the weight helps keep it from flying all over the place (though Im sure at some point it would get so unwieldy this would start to reverse).\n\n\n!! Things I didnt expect\n\n* I actually look good with long hair. I didnt think I would be able to pull off the look, but IMO I look better than I ever did with most of the haircuts I had before this. (Though maybe I just havent found the right short haircut for me.)\n* In the early stages, I found myself paying way more attention to what I looked like at all times, using mirrors more carefully, and so on. This has leveled off, presumably as Ive gotten used to it and am no longer self-conscious about “being different.” Im told studies have found women do this kind of thing much more...maybe an interesting if exceedingly limited glimpse|HaveToExperienceItToUnderstand into that.\n* My hair goes absolutely nuts, curling tightly in totally inconsistent ways, if it gets sprinkled on and then dries again, and is virtually impossible to return to normal without washing again. (This does not happen if it air-dries from wet.)\n* The extra effort and time spent feels much more soothing than frustrating or wasteful.\n* Hair grows really, really slowly on a human timescale. Kind of like a tree. And like a tree, it feels like it deserves respect just for being slow and old.\n* Theres some way in which having long hair just feels like //me// at this point in time. I dont know exactly what it is, but its a good fit.\n\nCf. AnkiLessons -- perhaps I should start a \Lessons\ series!},{title:Longpaste,created:20200912122503500,description:The opposite of a shortcut is a longpaste.,es:mythological,modified:20210616235034864,tags:SorenConcept Public Humor Travel Idea,type:text/vnd.tiddlywiki,text:A longpaste is the opposite of a shortcut: intentionally adding time or distance to a physical or metaphorical journey, usually because the longer route is enjoyable in some way (e.g., its nice outside, the steps involved are calming).\n\n!! In the wild\n\nThe folks at ELU.SE had a very productive thread|https://english.stackexchange.com/questions/244699/an-antonym-for-shortcut about the opposite of a shortcut; the consensus was that there is no existing single word. “Longpaste” was mooted in a comment but never became an answer, and I had not seen it there prior to beginning to use the term, so Im claiming credit for this one. :)\n\nTheres also an npm package called longpaste|https://www.npmjs.com/package/longpaste.},{title:LoonDeli,created:20240402012859636,creator:soren,modified:20240509150047837,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Hole-in-the-wall\u003C\u003Cfnote \I swear the customer area was literally 50 square feet. Only two customers could fit inside at once, there was a sign saying fire code required you to wait outside for your food if ordering at the counter.\>> Greek and fried-food restaurant that used to be at the corner of 25th and Lyndale. Sadly closed down in 2022 shortly after I moved nearby; they had delicious and very reasonably priced gyros, falafel pitas, and loaded fries, among other things.},{title:LordIsTheEverlastingGod,caption:The Lord is the Everlasting God,created:20200201043123133,medium:music,modified:20200808143956691,tags:Source Music Public,type:text/vnd.tiddlywiki,text:Gorgeous two-movement choral piece by MrKennethJennings, probably his most beautiful, slightly cerebral and chorally dissonant, but also highly listenable, and culminating in a shivering, exquisite, majestic:\n\n\n```\nBut those who wait for the Lord will renew their strength.\nThey shall mount up with wings like eagles,\nThey shall run and not be weary,\nThey shall walk and not faint.\nHave you not heard? Have you not known?\n```\n\nSang this my junior year with TheStOlafChoir, including at MrKennethJennings funeral. Which, like, I can hardly think of anything more beautiful than having your choir sing your piece about the power and promise of God at your funeral, especially when the choir is uniquely suited to do it beautifully.},{title:LordJim1900,author:Joseph Conrad,caption:Lord Jim,completed:202105301200,created:20201119202435189,creator:soren,format:hardcover,isbn:0679405445,medium:book,modified:20211105153111401,modifier:soren,owned:yes,rating:classic,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:LordJim1900,url:,year:1900,text:Novel by MrJosephConrad.\n\n!! Summary\n\nThere are roughly three parts to the story, though they are not called out as such, the book is just one long succession of chapters.\n\nThe protagonist, Jim, abandons a foundering ship after striking something in a storm, with much of the rest of the crew, leaving hundreds of pilgrims on board locked in the hold. Some time later, the ship is found still floating and successfully towed in, and the crew including Jim is rounded up and put on trial for abandonment.\n\nJim then wanders around the world facing the psychological consequences. He never goes home to face his family, and every time someone finds out about his past, or he just spooks, he ups and leaves suddenly.\n\nFinally, his friend Marlow (the narrator, though the story is a complicated frame often comprising multiple levels of nested dialogue) manages to get him a position on a primitive tropical island, which he then uses to essentially lead the government there, despite everyone wanting to kill him. In the vast difference and anonymity of this environment, he is //almost// able to thrive; but he is undone when some pirates come up the river hoping to capture the settlement to resupply, and after they are trapped and Jim decides to let them go peacefully (feeling sympathetic towards people who have broken accepted moral codes), they turn traitor and kill Dain Waris, someone Jim was responsible for, as a result of island political machinations. Jim more or less commits suicide by encouraging the dead leaders father to shoot him in retaliation.\n\n\n!! Reactions\n\nI had trouble getting through this one. I like Conrads expansive writing style, but for some reason it felt like too much of a good thing here. Overall, I thought the book just dwelt on the idea of the abandonment and subsequent effects (which was excellent) for longer than it should have, and gave too much time to most of the events, to the point of boring me rather than making me think about the idea. In the introduction, Conrad notes that this originally started as a short story, but he decided it really needed a whole novel to tell the story. No it didnt, dude. Maybe novella length could have been good, as with e.g., //Heart of Darkness// and //Typhoon//.\n\nWhile the frame of having Marlow retell the story in a variety of places, including sometimes telling the story as told to him by someone else, was intriguing, I mostly found it annoying -- I often lost track of who was talking, what the repeatedly continued quotation marks were indicating, and even what part of the story we were in. (It didnt help that because I was struggling to get through it, I kept taking long breaks from the book.)\n\nAs is the case for all classic literature, though, maybe its me and not the book.},{title:LordOfTheFlies1954,author:Golding,bibliography:LifetimeReading,caption:Lord of the Flies,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035416,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1954},{title:LordOfTheRings,caption:The Lord of the Rings,created:20200324033600327,creator:soren,format:hardcover,medium:book,modified:20221102030908215,modifier:soren,owned:yes,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:LordOfTheRings,text:Epic fantasy series by MrJrrTolkien. Its even better than you remember it is -- especially if you read the books, which are a real commitment (theyre longer and denser than you remember they are) but also a real treat. Also casts a shadow the length of the entire earth over the entire genre of fantasy literature nowadays.\n\nThe MrPeterJackson movie adaptation is good, but not //that// good. From a discussion with M.|PrivatePerson and P.|PrivatePerson in early 2021: the movies underplay the mythology and the beauty of Tolkiens world and turn it into a heroic and self-consciously manly story. Which it is (indeed one of the great weaknesses of the original is the essential lack of any meaningful female characters! -- see also Entwives|https://xkcd.com/2609/), and thats a great part of the story, but theres also more to it than that. M.|PrivatePerson has suggested someone should make an animated version, or perhaps even an animated TV series to go with the new (but successful) fad for making long fantasy literature into TV series, that focuses on these neglected aspects.},{title:LoringPark,created:20240402012838524,creator:soren,modified:20240402012853740,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Minneapolis neighborhood southwest of downtown. Primarily residential.},{title:LosAngeles,created:20230828025358160,creator:soren,modified:20230907033049973,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LossOfBuffer,created:20200403024711263,creator:soren,modified:20200403025210114,modifier:soren,tags:Risk Systems Health PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:One of the most insidious effects of a pandemic, in my opinion, is its ability to remove the margin of error that surrounds everyday life. If someone cant pay their rent|MissedRent one month, no big deal, well figure it out. If you injure yourself, you go to the hospital and the hospital figures it out. If you get lonely, you go hang out with someone. If you run out of milk, you run to the grocery store. If your pipes start leaking, you call the plumber and they come to fix it.\n\nWith the pandemic in progress, the margin of error is gone from practically everything. The plumber is sick or wont come because //youre// sick or the company is closed down, and so your pipes leak on the floor and you have to shut off your water. You cant get a bed at the hospital so you end up losing an arm that could have been saved. Theres another societal emergency and nobody can afford to pay any attention to it|SystemicDisaster.\n\nEssentially, normally our mistakes can be absorbed by pushing a little bit into the rest of the fabric of everyday life. Now the fabric is already strained and the minor mistakes can quickly become serious.\n\nThe loss of buffer is making me just slightly nervous just about every day. And its good to remember that our risk tolerance should be a little lower than it usually is. This is probably not a good time to start learning woodworking or playing with electricity, for instance!},{title:loti-bridge.png,type:image/png,created:20240526124600955,creator:soren,modified:20240526124608026,modifier:soren,tags:Image Public,_canonical_uri:./extimage/loti-bridge.png},{title:LoveInTheTimeOfCholera1985,author:Marquez,bibliography:LifetimeReading,caption:Love in the Time of Cholera,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035424,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1985},{title:LowCode,created:20200521135929503,description:Programs should not look like programs so that less-technical people can be convinced to use them.,es:likely,modified:20210312215343105,tags:ProgrammingParadigm Software Public Idea,type:text/vnd.tiddlywiki,text:Paradigm involving doing most development in a point-and-click interface of one kind or another (typically you can call out to “real” code in one form or another if you need more capabilities for just a small part of the app). My description is more cynical than I really feel about it (couldnt resist) -- often these systems really work pretty well, and development time is often greatly reduced when the requirements|ActualRequirements are modest enough to fit nicely into the framework.\n\nModern tools include the PowerPlatform and OutSystems. MicrosoftAccess and SpreadSheets are arguably the same kind of tool, and TiddlyWiki is another.\n\nThe problem is usually not the dev interface (though not all developers are big fans) but the underlying architecture, which is often a complete mess to support the system. This can lead to supportability issues.\n\nAlso may fail to support SourceControl, ContinuousIntegration, composability supporting the DryPhilosophy, and scattered other good development practices. Whether this is a big concern depends on the context and the scale of the app youre trying to build.\n\nAnother significant issue with low-code is that the “code” part (the part where you learn a Language to do things that requires you to memorize functionality that might be unfamiliar at first) is the //easy// part of coding. The hard part is learning to think like a programmer, understanding your ActualRequirements, etc., and low-code platforms help with that only very slightly if at all. Low-code platforms that //look// like professional-grade solutions, like OutSystems and to a lesser degree MicrosoftAccess, are more dangerous in this regard, because they give the user somewhat inflated perceptions of their own skills. Users might be under the illusion that Excel works and scales better than it does, but nobody will think theyre as good as a professional programmer because they can make a spreadsheet; OutSystems and Access may be different! Cf. RealProgrammingIsAnElitistMyth on this danger.},{title:LowCodeGuiDistraction,created:20200713164907776,creator:soren,es:likely,modified:20211005145043782,modifier:soren,tags:Code Psychology Language Public Idea,type:text/vnd.tiddlywiki,text:OutSystems, and various LowCode offerings, often trumpet their graphical logic-flow editors (think even Lego Mindstorms). Heres what I have to say about the parts of GUI app-development systems:\n\n; User interface design\n: Awesome. Ill never write a UI in manual lines of code if I can use a graphical designer. This is exactly what GUIs are good for.\n\t\n; Data design\t\n: Good. I dont have a massive preference for using it over SQL or an SSMS-ish environment since I have plenty of experience with those things, but it works perfectly well for most use cases and is definitely easier to learn to use. Its great to have as an option at least.\n\n; Code / logic flows\n: Dumb, dumb, dumb.\n\nHeres why logic flows are dumb-cubed. Graphical logic flows are a tissue-paper-thin façade over coding. You drag functions (thats what they are) to a canvas and put them in order. You set arguments (they call them \properties\) to various values on those functions. The functions act as black boxes that do things with the inputs and generate outputs (return values). You still have to think logically, just exactly like you do when coding.\n\nLiterally the only difference is HOW THE CODE IS DISPLAYED ON THE SCREEN. The \graphical\ part is silly, too -- ooh, it shows arrows to indicate the order the components run in! We have that in normal code too -- line 1 runs first, then line 2, then line 3. If the code branches, the part that goes one way is under the `if` block and the other part is under the `else` block. Brilliant! In OutSystems, you drag a \message\ element into place and fill in the text property. In Python, you put the text property inside the `print()` function. Want to make it into an error? Choose the \error\ option, or write `, msgtype\error\`. Same exact thing. Oh, but you dont know you can use `msgtype`? Sure you can, in any decent IDE you just type `,` and the list of options and exactly what they do comes up, just like it does in the almighty Properties Window.\n\nOf course, the one thing the screen-display really does do is convince people who are scared of \coding\ that theyre not \coding\ -- which is how they market these things, you dont have to be technical to use OutSystems! But I suspect the people who can be successful with OutSystems, or any graphical \low-code\ environment, would also be able to learn to \code\ for real without any real difficulty beyond what theyre exerting mastering the low-code environment. The part of \coding\ where you type lines into a text editor is the absolute easiest part. And its a shame that people are scared of it.\n\nMaybe case in point: one of the exercises in OutSystems instructional material proposed the following \formula\ for checking if a user was at least 18 years old in a solution to the exercise: take the year of their birthday and the current date, and subtract them; is the value 18 or greater? Thinking about this with a programmer mindset for more than 15 seconds should immediately expose a case like Alice: born on December 31, 2000, on January 1, 2018, she is seventeen years and one day old, but would be permitted to do anything an adult would by this software. Oops. Try explaining that to the cops. Low-code doesnt do anything to prevent bad thinking. (To their credit, when I emailed them, they corrected it!)\n\nOn the other side, pointing and grunting|https://controlaltbackspace.org/scripting/scripting-as-effective-communication/ is a really clunky way to write code, so its not like they really are equivalent and I could just as well switch to GUI-coding.\n\n!! References\n\n> I get that calling code by its name can make it sound scary, but this whole notion of it being easy because it is not code seems to be a big fat lie for comfort. Same goes for the magic no-code systems where code is replaced with expressions or graphical workflows which essentially is exactly the same thing, only shaped slightly differently.\n> ---Hacker News comment|https://news.ycombinator.com/item?id26910525},{title:LoweringTheBar,author:MrKevinUnderhill,blogroll:Blogroll,caption:Lowering the Bar,created:20210810192501550,creator:soren,modified:20250905204058155,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.loweringthebar.net/},{title:LowryHill,created:20240402013025286,creator:soren,modified:20240402013120089,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Minneapolis neighborhood to the north of LakeOfTheIsles. Quiet, rich residential area with some large apartment and condo complexes thrown in.\n\nNot to be confused with LowryHillEast, which is a separate neighborhood with fairly different vibes, across HennepinAvenue and a bit further south.},{title:LowryHillEast,created:20211002184906314,creator:soren,gis-lat:44.95559505268626,gis-long:-93.29186311158676,gis-zoom:15,modified:20240330190934531,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Minneapolis|TwinCities neighborhood. Also called “The Wedge” on account of the Hennepin Avenue curve making up its left boundary. On 9/30/2021, I visited briefly and was mostly impressed; I wound up moving here in November and staying for just over two years, until December 30, 2023|2023-12-30 Sat, when I moved next door to Whittier.\n\n\u003Cdiv style\width: 49%; float: left;\>\n\n!!! Pros\n\n* Highly walkable (Walk Score in the high eighties, one of the top scores in MSP). Several grocery stores, a bunch of coffee shops, restaurants, and bars, a hardware store, a pharmacy, a library, a park, a gas station, a bike shop, a hotel, and probably more that Im not thinking of within 5--15 minutes. Pretty much anything you cant quickly walk to you can bike to.\n* 15-minute bike ride to downtown Minneapolis, all on 20mph streets or greenway until the edge of downtown. 20--25 minutes by bus if the weathers bad. Even closer to Uptown for more commercial opportunities.\n* 5-minute bike ride or 15-minute walk to Lake of the Isles parkway.\n* Quiet, narrow streets designed in accordance with the philosophy of the neighborhood. Good density in all aspects of the term. You get essentially all the benefits of urban living without having to live in a place that feels like downtown.\n* Decent income diversity. Fairly white and young but not ridiculously so (surrounding neighborhoods add somewhat more diversity).\n* Conveniently close to 94 and I-35 W, but unless you go to the very north edge, there isnt a ton of noise.\n* Prices thoroughly reasonable for what youre getting; you can find a perfectly nice 1-bedroom apartment for a little over a grand.\n\n\u003C/div>\n\u003Cdiv style\width: 49%; float: right;\>\n\n!!! Cons\n\n* Off-street parking not available in a lot of places. I like street parking as a traffic-calming measure, but I cant understand how they manage to clear the streets in the winter. I dont even think you could fit a normal snowplow between the rows of cars. Some funky stuff might be required to deal with this. This would be a pro if I didnt have a car, but I dont expect to get rid of my car soon, so its a con.\n* Irritating, illogical mix of one-way and two-way streets. This is petty and I would get used to it, and it may be intended as a traffic-calming measure, but figured Id put it down.\n* While proximity to Minneapolis is great, if you have something to do in St. Paul you more or less have to drive. The light rail is over an hour, while driving is twenty minutes even in moderate traffic.\n* In general, transit is mediocre. You can in theory get anywhere on it, but if you have a car available, its unlikely to make sense for anything except heading downtown, and maybe going to work if you have a suburban office block thats accessible by transit or transit plus bike. (But we have to put this in perspective. There are very few places where transit is solidly //good// in MSP.)\n* Heavily skewed towards apartments and multiplexes; if I were to become established here, there would be limited options for buying. (Buying a duplex and renting out half of it would probably be the most practical.)\n* In my view, high risk of substantial rent inflation in the coming years as people come to their senses and recognize the benefits of walkable neighborhoods. When combined with the previous point, if I were still living here and renting at the time these social changes began -- and I think theyre inevitable at some point -- this would be a major disappointment (and I could lose out on possible equity gains).\n\n\u003C/div>\n\n\u003C\u003Cclarify>>},{title:LPCG,created:20210516224702539,es:confident,modified:20210628021911599,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Lyrics/Poetry Cloze Generator, my most popular open-source tool. Creates Anki notes for poetry in the OverlappingClozePattern.\n\nTheGitHub page: https://github.com/sobjornstad/AnkiLPCG},{title:LSD,created:20220504195547614,creator:soren,modified:20220504195721190,modifier:soren,tags:Drug Idea Public,type:text/vnd.tiddlywiki},{title:LucidDreaming,created:20200410132032341,creator:soren,es:confident,modified:20210807031559107,modifier:soren,tags:Dreaming Public Idea,type:text/vnd.tiddlywiki,text:Type of Dreaming in which one recognizes one is dreaming while still dreaming, which opens up a variety of possibilities for understanding and conscious direction. Happens to most people randomly, just not very often; with practice, its possible to do it regularly. Often abbreviated LD.\n\nIve gone through several periods of practicing LD regularly. It requires some discipline both in daytime practices that lead to paying more attention to the nature of surroundings and reality and in keeping track of your dreams (this is the real time sink, but its just about impossible to avoid if you want to remember anything at all).\n\nAbout 8.3% (as of Apr 2020) of the dreams in my DreamDir are marked lucid.},{title:LuckyTenThousandLearners,created:20200115032525758,creator:soren,es:confident,modified:20210902124325684,modifier:soren,tags:PhilosophyOfLife Learning Public Idea,type:text/vnd.tiddlywiki,text:About 10,000 people a day (by one estimate) learn something “everyone knows” every day. An exercise in IntellectualHumility, not knowing|IDontKnow, and the joy of learning things. xkcd:\n\nimgxkcd1053.png\n\n//Title text//: Saying what kind of an idiot doesnt know about the Yellowstone supervolcano is so much more boring than telling someone about the Yellowstone supervolcano for the first time.\n\nhttps://www.xkcd.com/1053/},{title:LuhmannZettelkastenVideo,bibliography:TiddlyWiki,created:20200304160133971,description:MrNiklasLuhmann explaining his own system in a snippet of some kind of documentary.,medium:video,modified:20210413221056973,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.youtube.com/watch?vmCFP5i_0ibE,text:{{!!description}}\n\nThis is in German with Japanese subtitles...manage to ignore the subtitles and I can pick up most of it!},{title:LusSandwiches,created:20231010213107896,creator:soren,gis-lat:44.95473744153549,gis-long:-93.27807468055487,gis-zoom:17,modified:20231010213154800,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Lutheranism,created:20200511013327628,modified:20201204041547188,tags:Religion Definition Public Idea,type:text/vnd.tiddlywiki,text:Branch of the Christian|Christianity Religion established by MrMartinLuther.},{title:LutherSeminary,created:20230325142921150,creator:soren,gis-lat:44.985319725401354,gis-long:-93.19699922447607,gis-zoom:14,modified:20230325143059938,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:LyraAsJesus,created:20210516232425876,creator:soren,es:likely,modified:20221025171211351,modifier:soren,tags:Public Religion Metaphor Idea,type:text/vnd.tiddlywiki,text:MsLyraSilvertongue is a suspiciously MrJesusChrist-like figure in places. Specifically, her release of everyone from the world of the dead in AmberSpyglass makes it nearly impossible to avoid drawing the comparison. So to what extent is she the Atheist Jesus?\n\n* She clearly redeemed everyone from death, and she did so willingly.\n* She had to painfully sacrifice a part of herself to begin the process (by separating from Pan). It wasnt permanent, but neither was Jesuss death.\n* A fundamental betrayal is involved and leads to eventual salvation (but its reversed, with Lyra doing the betraying).\n* Im struggling to compare causation: I think theres //something//, but its pretty weak. Lyra is led to go down there by the unjust treatment (murder) of MrRogerParslow by MrAsriel, whereas Jesus is led to make his own sacrifice by...who exactly? The wrongness of the world? A preordained plan? Asriel ends up triggering the Resurrection by condemning and killing someone, and also ends up killing God (albeit not the same person); is he a sort of Pilate figure?\n* I dont have a source, but I know MrPhilipPullman has commented that he doesnt see Lyras being the one to do it as destiny, or pre-planned; just that she was in the right place at the right time to become the savior. Thats unlike the traditional Jesus for sure. But there was a prophecy and a lot of thoroughly mythological stuff|LaBelleSauvage2017 going on, so you cant ignore that.\n* Lyra has no divine nature, she is extremely human, although she is certainly aided by Dust.\n* Lyra was conceived under suspicious circumstances -- though nobody tries the “angel did it” excuse at any point.\n\nIts worth noting that in the witches prophecy, Lyra is compared to another Biblical figure, namely Eve. Since in Pullmans mythology the Fall|FallOfMan is a source of freedom and meaning|NoMeaningWithoutFailure, this does not seem contradictory.\n\nWhen I started writing this tiddler, I thought this was a fairly far-fetched comparison (not that one would not //obviously// think of the comparison, but that there wasnt really much to it). But now it seems like there may be a lot more similarities than I anticipated!},{title:LyrasOxford,author:Philip Pullman,caption:Lyras Oxford,completed:,created:20210628022317025,medium:book,modified:20210628022146996,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,url:,year:2003},{title:M2,created:20241107051408381,creator:soren,es:confident,modified:20241107051427867,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:Conventional abbreviation for MosaicMuse, this notes system.},{title:M2Announcement,created:20240316202322264,creator:soren,description:Im renaming my Zettelkasten //Mosaic Muse//.,es:possible,modified:20250204201106631,modifier:soren,tags:Idea Public Frozen,type:text/vnd.tiddlywiki,text:!! My Zettelkasten is now Mosaic Muse\n\nFor some time, Ive been dissatisfied with the name //Zettelkasten// for my primary note-keeping and writing system. While I dont think its inaccurate to call the notes you see here “a Zettelkasten,” “Zettelkasten” is a poor proper name. It doesnt distinguish my system from anyone elses; its difficult to spell and pronounce for anyone who doesnt know German; its literal translation (“slip-of-paper box”) is dull and unevocative, likely subconsciously worsening the ToolsForThinkingDontWow problem; and, most importantly, its a woefully incomplete description of the mission of the tool, which has shifted and grown a great deal since I started it in 2019. I started out intending it to be a place to take notes on things I read, perhaps with some personal-encyclopedia sort of entries added. Its steadily growing into something that almost feels like a physical place when I sit in front of it, encompassing all the information I need to understand both my life and that crazy world out there. And I hope that it continues to produce novel ways of thinking and relating to my life. Having a name that was created by another person for another purpose is a cognitive obstacle to this mission.\n\nAfter having this rename simmering in the back of my head for a few months and working through a few GPT-4 prompts to generate name ideas, I finally stumbled on //Mosaic Muse// and immediately fell in love. Thats not really an exaggeration. Im not sure if youve ever had this experience of trying to find something for ages and then finally finding it, and going “Oooh, thats kind of interesting, maybe?”, and then after pondering it for a couple of minutes, realizing its //so obviously right// that your search is unavoidably at an end -- but thats what happened here. It feels kind of like finding a new friend.\n\nWhy is this the right name? Use and development of the tool has two interlocking goals that form a cycle. First, to assemble a bunch of small thoughts, ideas, histories, reflections, and other nuggets, many of which are not particularly interesting by themselves, from various sources, me and others, into a unified whole that is useful and beautiful. (Thinking workspaces must be well-designed and beautiful, even just for the sake of being beautiful. This absolutely has an impact on your results when using them.) Second, to use the collected information to drive creativity. The two words of //Mosaic Muse// unify these missions. //Mosaic// also serves as an homage to NCSA Mosaic|https://en.wikipedia.org/wiki/Mosaic_(web_browser), the short-lived but revolutionary web browser that made the WorldWideWeb take off. And the phrase has a delightful rhythm and alliteration.\n\nFor now, I am not renaming TiddlyZettelKasten/tzk, and I may never do so. This is partly because the term //Zettelkasten// seems useful for people searching for that kind of software. More importantly, its also because I think my specific workspace needs its own name that is not shared with others. Im glad that others have found tzk useful in various ways, but in order to keep myself innovating, its crucial that my thinking workspaces software never answers to anyone else in any way (even cognitively -- and names are important|PowerOfNames there). The software and the writing within it are one|CodeDataEquivalence and need to evolve together without any restrictions.\n\nConsequently, while I once said “//my// Zettelkasten,” or “//Sorens// Zettelkasten,” there will be no qualifier on new references: simply “Mosaic Muse,” or //M2// for short.\n\nThe primary public link going forward will be https://mosmu.se, which is mnemonic but short enough|https://controlaltbackspace.org/short/#2-short-urls-faster-better-stronger to also serve as a shortened version. As someone with a long name who often uses long names, all of my URLs are way too long and hard to type, and I want to improve on that! Meanwhile, https://zettelkasten.sorenbjornstad.com will continue to operate. The shortlink alias http://562.nz will exist for some time, as well, but I may eventually nonrenew it, so if you are currently linking here updating would be a good idea. },{title:MachineLearning,created:20200322015129264,creator:soren,es:possible,modified:20210710125212232,modifier:soren,tags:Logic Definition Code Public AI Idea,type:text/vnd.tiddlywiki,text:Programming technique in which the programmer doesnt know what shes doing, so tries to make the computer figure it out itself.\n\nIn recent years, has been able to make significant progress on problems that were previously intractable, and as such is a promising and important approach to solving many real and urgent problems. In most of its current incarnations, however, it suffers from several serious downsides: \n\n* Lack of traceability or accountability. In many if not most systems, its difficult to impossible to logically explain why a decision was made|ModelInterpretability -- not that humans do all that well at this either, but at least they think they can tell you.\n* Large amount of processing power required. Right now we can solve this by throwing more hardware at it, but these systems are rapidly growing to data-center scale, and we dont have an infinite amount of computing power available. Plus many systems cant work on local devices and have to be shipped off to the cloud for processing, which is sometimes impractical and poses other resilience and control issues.},{title:MacPorts,created:20230702210422194,creator:soren,modified:20230702210435846,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:MadameBovary1856,author:Flaubert,bibliography:LifetimeReading,caption:Madame Bovary,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035437,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1856},{title:MadisonWisconsin,created:20200203174331885,creator:soren,gis-lat:43.073289310095475,gis-long:-89.40065672324675,gis-zoom:11,modified:20201129184411167,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Capital of Wisconsin. I lived there until I was about 6 and occasionally visit, mostly because its near GovernorDodgeStatePark. Plenty of good memories. Its maybe a bit overly liberal and hip, but Id still live there again if it were appropriate.},{title:MagicalRealism,created:20200322035929171,creator:soren,es:confident,modified:20200322040233090,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Literary technique or genre in which the setting is mostly mundane and everyday, but fantastical elements are nevertheless woven into the fabric of the story in a slightly disorienting way. Can sometimes feel almost dreamlike|Dreaming.},{title:MagicMountain1924,author:Mann,bibliography:LifetimeReading,caption:The Magic Mountain,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035445,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1924},{title:MagixStreaming,created:20200521141144553,modified:20200521141154648,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Software by TheNewBlue to help with streaming live performances.},{text:{{!!description}} MrPaulGraham has some suggestions in HowToThinkForYourself2020:\n\n* Be less aware of what conventional beliefs are. Many independent-minded people likely do this unintentionally already. Conventional-minded people, on the other hand, are probably made anxious by the idea of being out of touch like this. (Food for thought: Are conventional beliefs ContextFreeInformation in most cases?)\n* Surround yourself with at least a couple of other independent people with whom you can talk freely; you dont need that many as long as you stay close to them.\n* Meet as many different types of people as you can, and try to learn what makes them different, what they know that most other people dont. This can often be as simple as asking them in conversation. (See CrossClassConnections.)\n* Read history with an eye to understanding how people in different times and situations saw things differently. See ContextStrength.\n* Be skeptical. Constantly be asking internally whether things you hear are true. See if you can guess what accepted ideas will turn out to be wrong. (Related: IntellectualHumility.)\n\nThese points line up curiously well with the properties of and even the recommendations for future development in my StrengthsFinderReport. Maybe thats not so odd, because I am obviously independent-minded (at least, I think so; according to Graham most people think they are even if they are not!), but its interesting, if the StrengthsFinder is a tolerably accurate assessment of your most useful talents, which I think it often is at least in my experience, that the simple fact of being independent-minded is such a big part of my professional value.\n\nIndependent-mindedness is likely an innate talent|SkillsKnowledgeAndTalents or personality trait. That doesnt of course mean that it cant be developed, but if you are overall conventional-minded, just reading a lot of history and practicing skepticism probably wont make you independent-minded (nor, more obviously, will not doing these things ever make you conventional-minded). This would seem to have some interesting consequences for education, one of the main goals of which is often said to be creating citizens who can think independently!,type:text/vnd.tiddlywiki,title:MagnifyingIndependenceOfMind,tags:Public Idea,modified:20210703153815058,created:20210701025706731,es:likely,description:How can one increase ones degree of IndependentMindedness? },{title:Maier2020,caption:Making up stuff,created:20200115025601383,creator:soren,medium:article,modified:20210917013942772,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2020,text:MrEmarMaier, for Aeon, regarding some FictionTheory and how fiction relates to lies (and several other types of surfacely false statements).\n\nhttps://aeon.co/essays/how-to-tell-fact-from-fiction-in-fiction-and-other-forms-of-lies},{title:MakeEveryoneWorseOff,created:20200819035013264,creator:soren,description:Pursuing equality and fairness should not involve worsening anybodys lot on an absolute scale.,es:confident,modified:20211216033713956,modifier:soren,tags:Politics PhilosophyOfLife Reasoning Ethics Public Favorites Idea,type:text/vnd.tiddlywiki,text:A common human impulse, yet surprisingly illogical for its commonality, is to suggest //dragging everyone down// instead of //bringing everyone up//. Often this takes the form of complaints about “fairness” and appeals to sunk costs (things already having been bad for you).\n\nFor instance, “//I// had to work my butt off to get through college and take on 60,000 dollars in debt, so we couldnt possibly offer anyone a better deal than that.” Irrespective of the financial and political merits of offering government assistance for college tuition, can we not all agree that it would be //better// if someone can get an education with $0 in debt than with $60K in debt? Surely we ought to be seeking to make things fair and equal by ensuring that //nobody// is doomed to carry that much student loan debt, rather than making //everybody// have $60K in debt.\n\nI caught myself doing this recently working on the tiddler about the ConvenientlyAvoidedArendelleFlood: Annas ancestors screwed up, so surely they have to pay the price! And yet, even after thinking about this point, I argued its part of our concept of a proper narrative. Its a deeply rooted concept with close ties to revenge and justice.\n\nAn interesting situation arising frequently during the pandemic|PandemicMood: some people, unfortunately substantially divided along class lines, are forced to take more risks in their daily life. One is tempted then to say that everyone should have to take equal risks. This is even more obviously silly for the pandemic once you get around to thinking about it, though -- adding additional risk to some people means that literally //everyone// ends up worse off, even the people who had it worse before and we were trying to level out with, since the more people are sick in public and filling up the hospitals, the faster the case load grows and the healthcare system becomes overloaded. (See also RelationshipSuccessDivide on the topic of everything working out more poorly for people of lesser means.)\n\nMrTimWalz, governor of Minnesota, also made an interesting point about this during the initial lockdown in March. At a press conference, someone asked him why basketball was banned, whereas golf was not, given that golf is an upper-class activity. Yes, its unfair and unfortunate, he said candidly, but the fact is that with a few changes, you can safely play golf right now, but you cannot safely play basketball right now.\u003C\u003Cfnote \N.B.: This was to the best of our knowledge at the time. As we learned later, outdoor basketball, or outdoor anything for that matter, is extremely safe. Maybe pass on “outdoor coughing in peoples faces after getting a positive COVID test”, but for anything less than that, your odds are great.\>> It makes no sense to ban someone from doing something they can do safely in the name of being “fair.” To see this really clearly, consider a thought experiment: I spend quite a few evenings during normal times writing at my computer at home. Many other people spend those same evenings out around town in large group settings. Because the latter is unsafe, should I be prohibited from writing at home in my apartment during the pandemic to be “fair” and make everyone suffer the same loss of leisure time?\n\n//Important note//: There is an exception to this rule being stupid: when bringing some people down can actually improve life for everyone else, e.g., taxing billionaires at a higher rate than everyone else. This approach is sensible.\n\ntl;dr: Dont wish hardship on people. It doesnt make anything better.\n\nThe CopenhagenInterpretationOfEthics is a similar mindset that says youre ridiculous for trying to make things better unless you can have a significant enough impact on the problem.\n\nAlso cf. BlamelessCulture.\n\n!! References\n\n\u003Ca class\tc-tiddlylink-external\ href{{identify-as-a-woman.png!!url}}>Dilbert\u003C/a>:\n\nimg width800 identify-as-a-woman.png\n\nThe parable of the day-laborers|https://www.biblegateway.com/passage/?searchMatthew+20&versionNRSV},{title:MakeItNeverComeBack,created:20200207183149093,creator:soren,es:possible,modified:20200323024257144,modifier:soren,tags:Systems Design Code Public Idea,type:text/vnd.tiddlywiki,text:An idea about software design due to MrMaxAlexander, largely explained by these two principles:\n\n> When solving a problem in a codebase, you’re not done when the symptoms stop. You’re done when the problem has disappeared //and will never come back//.\n\nAnd...\n\n> A problem is resolved to the degree that no human being will ever have to pay attention to it again.\n\nWe dont care about just making software work //now//, we care the same amount if not more about the future, because otherwise TechnicalDebt will quickly make the system unmanageable. Then somebody will inevitable say \its time for a CompleteRewrite!\ and three years and an overrun budget will ensue, at the end of which theres a shiny new version which has exactly the same bad design characteristics (or worse, a different set with equal or worse badness, but nobody knows how to handle these because theyre new).\n\nThe right way to untangle crappy legacy codebases is this: fix a problem, and fix it the right way, not by patching over it. Then, instead of stopping, investigate what allowed that problem to show up, and fix it. And then investigate what allowed //that// problem to show up. Rinse and repeat until tackling the next problem seems unrealistic.\n\nSimilar to the idea of the SevenfoldWhy.\n\nThe NASA space-shuttle project apparently takes this approach|TheyWriteTheRightStuff.\n\nSource: https://www.codesimplicity.com/post/make-it-never-come-back/},{title:MakeProtestingTrivial,created:20201120183432904,description:If you give people a trivial way to accomplish something subversive, the subversion looks foolish.,es:likely,modified:20210714024948929,tags:Sociology Psychology Design Public Idea,type:text/vnd.tiddlywiki,text:A brilliant approach sometimes taken by early computer systems that heads off CivilDisobedience and Hacking by making it possible to accomplish exactly the same thing through official processes. When the process is already there, there is little political power available in fighting: everyone will just wonder why you didnt just use the accepted, official process to register your discontent. And if you do go through the official process, you usually look silly.\n\nExamples include the quote below from LambdaMooTakesANewDirection and the MIT ITS time-sharing system, where users were trying to find flaws in the system that would allow them to crash it for all users for fun, so someone made a command that any user could run that would make the system crash instantly.\n\nIt would be interesting to study what the bounds of this method are. For instance, does it work on a community of any size? How audacious can you as the status-quo maintainer get before everyone takes the risk of being silly and fights back anyway? (If you get enough people to protest at once, it presumably would not look silly.)\n\n\n!! References\n\n> We realize that not everyone will agree that this is the best new direction LambdaMoo might take. We dont doubt that some of the polemics among you will be able to come up with a different slant, e.g. (just to save you some trouble),\n\n>* wizardly blackmail\n>* military coup\n>* martial law\n>* nuclear terrorism\n\n> Some of you may find the new direction so disagreeable that you will consider ways to force an end to the new direction or ways to make the wizards’ lives miserable because of it. Instead of making the use of civil disobedience or wizard harassment be the necessary means for shutting down LambdaMoo, we will accept a simple majority decision of the following form:\n\n> Any eligible voter may author a “shutdown“ petition. This will be a pre-vetted petition with a specific, fixed wording. Should the petition reach ballot stage (by acquiring the usual signature threshold), a vote will be held to decide whether LambdaMoo should be shut down. If the number of YES (we should shut down) votes equals or exceeds the number of NO (we should not shut down) votes received, LambdaMoo will be shut down after an 8-week grace period. (Note, only one “shutdown“ petition may be active at a time.)\n> \n> Shutdown petitions will be implemented at the earliest opportunity.},{title:MakesMemoryAChoice,created:20200811213447889,creator:soren,description:Spaced repetition systems allow you to consciously shape what you want to remember and think about, rather than relying on DumbLuck.,es:confident,modified:20230406023803234,modifier:soren,tags:Memory Metaphor Software LifeDirection Learning Public Idea,type:text/vnd.tiddlywiki,text:Phrase of MrMichaelNielsen in AugmentingLongTermMemory201807, later picked up by D.E.|PrivatePerson and added to the Anki projects home page:\n\n> Anki makes memory a choice.\n\nOr as Clayton said in his lab choir one year:\n\n> Copy and paste this into your brain.\n\nIn its ability to induce brain-copy-pasting, Anki or any other SpacedRepetition system is really in many ways nothing short of miraculous. Of course, you do have to review periodically, and it cant force badly formulated material to take, but with some nuance, I find the “choice” phrasing is an excellent way to explain the power of Anki, and everyone else seems to as well, as this is now pretty much a cliché across the web!},{title:MakeWorkVisible,created:20200330015058602,creator:soren,es:possible,modified:20240510060921159,modifier:soren,tags:Productivity Process AgilePhilosophy Idea Public,type:text/vnd.tiddlywiki,text:LeanMethodology and DevOps principle declaring that the way work moves around an organization or process needs to be (what else) visible. With work not visible, the bottlenecks cant be identified except by pure chance, which makes it impossible to begin optimizing at the WorstBottleneck. Essentially, you cannot correctly improve the system until work is visible.\n\nA massive and poorly understood problem at, e.g., TheFederatedInsurance, where management tells us we dont understand when we try to point out that its pretty hard to prioritize things when nobody has a cross-department vision of whats important or even what work is in progress.\n\nCf. MetricBlackHole.},{title:MakeYourPartMoreBeautiful,created:20210813151633401,creator:soren,description:You probably cant change the world, but you can pick a small part of the world to influence mightily.,es:confident,modified:20240611002933619,modifier:soren,tags:Music LifeDirection Sociology Public Idea PhilosophyOfLife,type:text/vnd.tiddlywiki,text:> We cant change the world, but we can make the part of the world we live in more beautiful.\n> ---MrAntonArmstrong, frequently to TheStOlafChoir, \u003C\u003Crt 6220>>\n\nIts difficult to change the world and we usually shouldnt even try|DontTryToChangeTheWorld. But this does not need to mean that we feel powerless. A tiny fraction of people will have the privilege -- and the terrible responsibility -- of having major, visible effects on the course of human history, usually by accident. Everyone who isnt in that group should instead focus on finding a corner of the world that they can have such effects on (whether thats physical or interest-based through the Internet), then finding something useful they can contribute to it.\n\nNearly everyone has some ComparativeAdvantage in a small area and can make a real difference there. So this is a democratizing and easily fulfilled principle of a philosophy of life|CoherentPhilosophyOfLife, provided one takes the time to deliberately decide where and how to contribute. Pick the next right thing|DoTheNextRightThing and try to leave the world just a little better than you found it.\n\nRelated: IndividualDistinctionIsIndividualValue, which suggests that you are valuable as a function of having something slightly different to contribute to the world than everyone else, and that this relies on the nature of our limited time on the planet.\n\nWhether this approach is highly meaningful in the grand scheme of things probably depends on ones attitude and philosophy (which makes it worth controlling|BeliefAsInstrument if possible). I do suspect that striving to make ones part of the world more beautiful will often end up //more// fulfilling and pleasurable for oneself than changing the whole world, especially since its easier to do a really good, polished|Polish job.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\n\u003C\u003C\u003C\n\\\\nIf I can stop one heart from breaking,\nI shall not live in vain;\nIf I can ease one life the aching,\nOr cool one pain,\nOr help one fainting robin\nUnto his nest again,\nI shall not live in vain.\n\n---Emily Dickinson|MsEmilyDickinson\n\\\\n\u003C\u003C\u003C\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\n\u003C\u003C\u003C\n\\\\nTheres gotta be a song left to sing,\nCause everybody cant have thought of everything.\nOne little song that aint been sung,\nOne little rag that aint been wrung out completely yet –\nUntil theres nothing left.\n\n---Gillian Welch|MsGillianWelch, “One Little Song”\n\\\\n\u003C\u003C\u003C\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\n\n\u003C\u003C\u003C\n\\\\nLife is sad,\nLife is a bust.\nAll you can do is do what you must.\nYou do what you must do, and you do it well.\nI do it for you\nHoney, baby, can’t you tell?\n\n---Bob Dylan|MrBobDylan, “Buckets of Rain”\n\\\\n\u003C\u003C\u003C\n\n\u003C/$m2.x>},{text:Read with F.I.B.C.|PrivatePerson beginning in October 2020. Discusses both the need and the methods to MakeWorkVisible. Ideas are connected via backlink; see the reference explorer.\n\n!! Part 1\n\nPart 1 discusses the problem, which consists of the FiveThievesOfTime stealing your and your organizations time. It points out that you would be furious if someone stole your money, or even your lunch, but these transgressions are minor in effect compared to having your time drained every day.\n\n!! Part 2\n\nPart 2 starts to suss out the principles of Kanban and optimizing for flow.\n\n!! Part 3\n\nPart 3 explains the organizational changes and techniques you can use to allow part 2 to serve at its best.,type:text/vnd.tiddlywiki,title:MakingWorkVisible2017,tags:Source Public,modified:20210606224959730,created:20201027155227024,year:2017,url:,readstatus:read,rating:skimmable,owned:yes,medium:book,ivl:,format:ebook,due:,caption:Making Work Visible: Exposing Time Theft to Optimize Work & Flow },{title:Malapropism,created:20200401223707080,creator:soren,es:confident,modified:20211107182004159,modifier:soren,reviewed:20230416,tags:Language Public Definition Idea,type:text/vnd.tiddlywiki,text:Technical term for a slight misuse of language, where an abnormal phrase, usually spelled or pronounced similarly, is substituted for a normal phrase.},{title:MalcolmYards,created:20240906131145927,creator:soren,gis-lat:44.97271412305474,gis-long:-93.21341361536308,gis-zoom:14,modified:20240906131213664,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MaliciousCompliance,created:20200316221541423,creator:soren,es:confident,modified:20240220032455470,modifier:soren,tags:Creativity Definition Public Idea,type:text/vnd.tiddlywiki,text:Malicious compliance is the act of doing exactly what someone says but not even a little bit what they want, with a lighthearted and/or vengeful malice involved. It typically involves an authority figure telling the actor to do or not to do something that is (a) stupid and/or (b) has unintended consequences, then the actor ensuring the consequences become ridiculous while exactly following the provided instructions.\n\nMC is a curious study in creativity: see GenerativeRestriction.\n\nThe term became popular via the subreddit \u003C\u003Csubreddit maliciouscompliance>>.},{title:MalteseFalcon1930,author:Hammett,bibliography:LifetimeReading,caption:The Maltese Falcon,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035452,priority:3,readstatus:unread,recommended-by:TAOM,tags:Source Public,type:text/vnd.tiddlywiki,year:1930},{title:Manage Subscriptions,created:20210612151611041,modified:20210615004545165,tags:Meta Public,type:text/vnd.tiddlywiki,text:\\define unsubscribe-action()\n\u003C$action-managesubscription tiddler\u003C\u003CcurrentTiddler>> user{{$:/config/sobjornstad/UserEmail}} token{{$:/config/sobjornstad/AccessCode}} operation\unsubscribe\/>\n\u003C$action-listops $tiddler\$:/temp/Subscriptions\ $field\list\ $filter\enlist{$:/temp/Subscriptions!!list} -allcurrent\/>\n\\end\n\n\\define unsubscribe-all()\n\u003C$action-managesubscription user{{$:/config/sobjornstad/UserEmail}} token{{$:/config/sobjornstad/AccessCode}} operation\byebye\/>\n\u003C$action-setfield $tiddler\$:/temp/Subscriptions\ list\\/>\n\\end\n\n\\define regen-code()\n\u003C$action-managesubscription user{{$:/config/sobjornstad/UserEmail}} operation\newcode\/>\n\\end\n\n\\define refresh-subscriptions() \u003C$action-refreshsubscriptions user{{$:/config/sobjornstad/UserEmail}} token{{$:/config/sobjornstad/AccessCode}}/>\n\n\\define no-subscriptions()\n\u003Cdiv>It doesnt look like theres anything here.\nEither this email address does not have any current subscriptions or you need to \u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Crefresh-subscriptions>>>refresh the list\u003C/$button>.\u003C/div>\n\\end\n\nYou can subscribe to most tiddlers in this ZettelKasten by clicking the //subscribe// link at the bottom of the tiddler. You will receive an email when I update a tiddler you have subscribed to.\n\nBelow you can view and manage your current subscriptions.\n\n-----\n\n|!Email address |\u003C$edit-text tag\input\ tiddler\$:/config/sobjornstad/UserEmail\ default\\/>|//The email address whose notifications you want to manage.//|\n|!Access code |\u003C$edit-text tag\input\ tiddler\$:/config/sobjornstad/AccessCode\ default\\/>|//Copy this code from your most recent notification email, or \u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Cregen-code>>>send a new one\u003C/$button> to the email above now.//|\n\n\u003C$list filter\$:/config/sobjornstad/UserEmailhastext\ variable_ emptyMessage\Please enter your email address.\>\n\u003C$list filter\$:/config/sobjornstad/AccessCodehastext\ emptyMessage\Please enter an access code.\>\n\u003C$button actions\u003C\u003Crefresh-subscriptions>>>\n\tRefresh subscription list\n\u003C/$button>\n\n\u003C$list filter\list$:/temp/Subscriptionsfirst\ variable_ emptyMessage\u003C\u003Cno-subscriptions>>>\n\nYou are currently subscribed to \u003C$count filter\list$:/temp/Subscriptions\/> tiddler(s):\n\n\u003Ctable>\n\u003Ctr>\n\t\u003Cth>Tiddler\u003C/th>\n\t\u003Cth>Created\u003C/th>\n\t\u003Cth>Last modified\u003C/th>\n\t\u003Cth>Actions\u003C/th>\n\u003C/tr>\n\u003C$list filter{{$:/temp/Subscriptions!!list}}>\n\u003Ctr>\n\t\u003Ctd>\u003C$link/>\u003C/td>\n\t\u003Ctd>\u003C$view field\created\ format\date\ template\YYYY-0MM-0DD 0hh:0mm\>(//missing//)\u003C/$view>\u003C/td>\n\t\u003Ctd>\u003C$view field\modified\ format\date\ template\YYYY-0MM-0DD 0hh:0mm\>(//missing//)\u003C/$view>\u003C/td>\n\t\u003Ctd>\u003C$button class\tc-tiddlylink tc-btn-invisible\ actions\u003C\u003Cunsubscribe-action>>>\u003Ci class\fa fa-trash\/>\u003C/$button>\u003C/td>\n\u003C/tr>\n\u003C/$list>\n\u003C/table>\n\n\u003C$button actions\u003C\u003Cunsubscribe-all>>>\n\tUnsubscribe me from all tiddlers\n\u003C/$button>\n\n\u003C/$list>\n\u003C/$list>\n\u003C/$list>\n\n-------\n\n\u003Cdiv style\text-align: center;\>\n//Questions about or problems with the subscription function?\u003Cbr>\nThis is a beta feature – please use the “start a conversation” link below to share your thoughts.//\n\u003C/div>},{title:MankatoMinnesota,created:20201205233418674,gis-lat:44.163934546279535,gis-long:-93.99843971135267,gis-zoom:8,modified:20201205233431458,tags:Place Public,type:text/vnd.tiddlywiki},{title:ManualWorkIsABug2018,caption:Manual Work is a Bug: Always Be Automating,created:20201206193248818,medium:article,modified:20201207004820011,tags:Source Public,type:text/vnd.tiddlywiki,url:https://queue.acm.org/detail.cfm?id3197520,year:2020,text:Article by MrThomasLimoncelli in AcmQueue.\n\nThis is a fantastic article and one of my primary professional influences as a developer and engineer. Only takes 20 minutes to read.\n\nPrimary insights: AutomationIsExecutableDocumentation, and as a result DontWaitToAutomate, start by documenting and then improving the documentation.\n\nThe title refers to the authors position that it should be forbidden to carry out any routine process manually without either producing an artifact (documentation, scripts, etc.) or improving an existing artifact. Im a bit more generous than he in that I think sometimes one might be justified in making an exception because somethings on fire and theres no time to use it as an example; but one must take great care not to turn this into an excuse thats used more often than not, or the entire idea is subverted. I can see why hes as firm as he is!\n\nEmbedded full text|manual-work-is-a-bug.pdf.},{title:MapsAndMetarationality,author:David Chapman,caption:Maps, the territory, and meta-rationality,completed:20210526000000000,created:20210616223622910,medium:article,modified:20210616223908353,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://metarationality.com/maps-and-territory,year:2021,text:Mnemonic essay|MnemonicMedium on Orbit about the idea that “the map is not the territory” (see AllMapsLie). This is both enlightening (it describes some of the ways that formal models and rational techniques go wrong, by not matching up to the things they model in ways that are impossible to quantify or correct for) and misleading (because maps actually do a much better job of corresponding to territories than most models, in several important ways).\n\nFlashcards are good but not great (this was the authors first foray into spaced-repetition flashcards, so he did an outright excellent job considering that).},{title:March2023AgiOpinions,created:20230406021233286,creator:soren,description:GPT is not about to put people out of work and it may not be even on the path to AGI. But theres also a very real and significant chance of something catastrophic happening, and we should be working harder on reducing that. In the meantime, live on, dont cower in fear; it wont help and will only ruin your limited time on this earth.,es:possible,modified:20240306201754017,modifier:soren,tags:Idea Essay AI Public Frozen,type:text/vnd.tiddlywiki,text:(//Content type:// Personal correspondence; to someone who was wondering what I thought of the large-scale ethical, practical, and existential challenges posed to society by the potential advance of AGI. Lightly adapted. Historical, do not update except for links, etc.)\n\nI mostly feel very disoriented right now. It’s hard to have an opinion when there’s some bombshell new release every couple of weeks!\n\nProbably as little as a year ago, I was of the opinion that any AI improvements that approached existential risk, or even massive change to society, were very unlikely, but I think that’s naïve now. It’s particularly weird and scary that language models have proven able to do so many non-languagey things when they get large enough. The philosopher MrDavidDeutsch has what until recently I would have considered a very good argument that AGI|ArtificialGeneralIntelligence is impossible until we understand more about what intelligence actually is; he says expecting intelligence to come from pure scaling is “like expecting skyscrapers to learn to fly if we build them tall enough.” But that doesn’t seem to be entirely true anymore. (Aside from empirical evidence, I see a major theoretical flaw in this argument as well in that human intelligence was, according to best available evidence, not explicitly engineered|Evolution by someone with a clear conception of what intelligence is. Obviously its easier to bring something about if you know what youre doing, but its also entirely possible to stumble on something useful by DumbLuck.) There’s certainly no guarantee that further scaling will keep producing intelligence at the same rate, but everything we’ve seen so far matches this equation very neatly and it’s not showing any sign of stopping, so I think you’re being silly if you don’t at least take the possibility seriously.\n\n(And I don’t buy the arguments that GPT isn’t “intelligent” because of some technicality. Everyone saying this is frantically moving the goalposts as the ball approaches. I’m not saying GPT-4 is conscious or anything, and it continues to be quite bad at some specific tasks, and it makes a different set of mistakes than humans do, which makes it possible to point at those and laugh at how it’s not actually intelligent. But realistically, it’s outperforming the average human on a wide variety of things, including things it wasn’t trained for. You’ve got to call that at least reasonably intelligent if you’re being honest.)\n\nI’m not sure, though, that LLMs are yet capable of solving novel problems in creative ways, or pumping out scientific research, or anything like that – I haven’t seen any convincing empirical evidence of that. (And the issue is not an issue of action – obviously language models cant work in labs – but that from what Ive seen, it isnt even particularly good at generating experimental ideas in most domains.) What we have in LLMs right now is an extremely powerful system for solving reasonably well-formed and carefully scoped problems of types that have been seen before (or better yet, are extremely repetitive). That’s easily enough to become another information revolution (after printing, computerized processing, and the Internet) – I’d be astounded if it didn’t at this point – but it doesn’t eliminate the need for domain-specific human expertise either.\n\nIt’s an open question for me whether these kinds of problems will become fair game for LLMs by just making the model bigger and tuning it a bit, as we’ve been doing so far. 50/50 at this point.\n\n\n!! Impact on work\n\nI’m skeptical that people will be losing their jobs in the near term, aside from some very specific places (e.g., CallCenters are likely going to get a lot smaller in the near future). The last couple of InformationRevolutions were supposed to improve productivity to the point where now we’d only been working 4 hours a week, but instead we’ve ended up working the same amount of time and getting a lot more done. I dont see why this wouldnt continue, absent some conscious effort to prevent it from happening (this is reminiscent of SlackGobbling). There’s no doubt that LLMs are massively improving productivity for many people (heck, I bought a ChatGpt Plus subscription and it definitely saves me time), but I think there’s still a huge space of interesting work we could be doing and problems we could be solving which we can’t dig too deep into because we don’t have enough well-trained and motivated people to work those hours, and history suggests society isnt going to walk away from those opportunities.\n\nI also don’t think GPT-4, or probably even GPT-8, will have enough capacity to think super broadly – say, to read all of a business’s documents and write an entire new software application that solves some problem it has from scratch. Thats the level of thing you’d need to be able to do to entirely put people out of work. Indeed, I don’t think it’s clear this is achievable at all without an entirely new approach to AI, which would slow down the field considerably (don’t forget there were about 40 years of almost zero progress in AI before LLMs started taking off, and I’m not sure we’ve learned that much from the current LLM approach that would be applicable to a new approach). Dynomight (https://dynomight.net/scaling/) calculates that the compute to reduce loss to near zero with current techniques would run about a quadrillion dollars, which is about 10 times the entire world’s GDP. It’s also not clear that we have enough training data to get to that point; most of these models are already ingesting most of the good-quality content on the Internet, all published books, etc., and the amount of training data has recently started looking more important than the size of the model. (The big wildcard is whether bad-quality training data can improve a model of this size; nobody seems to have done much work on that yet.)\n\nSo the near future for an IT professional probably involves a lot less work throwing lines of code around, yes, but I expect that to result in more time to spend doing big-picture thinking and design and so on. Ultimately I see this meaning better results with less time spent are achievable – not everyone ending up out of work entirely. Software, in aggregate, is terrible, and lots of software that would be fantastically useful simply doesnt exist, because it is incredibly expensive to do well. We could reduce the cost to make software by several orders of magnitude and still not run out of work worth doing. Again, at least in the near term. In the long term, if nothing goes wrong and AGI shows up and becomes highly capable at a variety of much larger tasks than its currently suited for, maybe work really does decrease dramatically, and we have to figure out how to re-order society so we find meaning somewhere else and use our time in other ways – but well cross that bridge when we come to it; theres no guarantee it will ever come.\n\n(See also OnlyHumansNeedApply2016. Written prior to LLMs, but all of it still seems relevant today on a quick reread of my notes; the authors correctly predicted the trends.)\n\n\n!! On the possibility of catastrophes\n\nOn the long-term existential and/or otherwise catastrophic angle, I will say I’m encouraged that, now that this looks potentially within reach, people – even average people who arent in the field – are starting to look up and realize there might be a problem worth thinking a bit harder about here. I’ve definitely thought this was a badly ignored area of research for a few years (much like pandemics...).\n\nI don’t personally see an obvious path from “language model” to “evil agent taking over the world”. Not to say it’s impossible – I dont think it is at all – but it doesn’t strike me as the kind of intelligence that we’re seeing currently, so it’s a possibility but not a certainty. That some other AI technique could develop into the same kind of agent is, of course, also a possibility, but doesnt look that much closer to me as a result of the development of LLMs.\n\nSo like|https://scottaaronson.blog/?p7064 MrScottAaronson, I tend to be more worried on an immediate level about the impacts on society, and here I’m also not convinced that AI (of the non-secretly-plotting-to-destroy-the-world type) is fundamentally different from all kinds of other powerful but dangerous technology we’ve learned to deal acceptably with over time (e.g., NuclearWeapons). The compute and data requirements are large enough that models big enough to be really dangerous could reasonably be regulated, and from what I understand the folks working on developing the models take options like that seriously. People at TheOpenAi are even seriously considering whether itd be better to stop training new models for a while to give the safety research time to catch up.\n\nAll that said, this is not a “they’ll figure something out” by any means – it’s definitely a mess, and there’s plenty of room for something to go very wrong. Even if we do come up with regulation or whatever other solution to the more mundane social problems, its likely some unethical, harmful, and scary things will happen in the meantime. And if you made me, I guess I’d put a 10–20% chance on something plainly catastrophic happening in my lifetime if we don’t come up with some effective mitigations (whether the catastrophe involves AGI that goes bonkers or some human/s being irresponsible with it).\n\nPersonally I think it’s worth thinking about this like the nuclear scenario though; for the last 80 years or so we’ve all had to live every day with the possibility that something as trivial as a malfunctioning radar system or a bunch of balloons|https://www.youtube.com/watch?vFpu5a0Bl8eY could trigger a nuclear exchange that kills hundreds of millions of people, and we’ve pretty much just gotten used to it. It’s not worth spending your life worrying about it. Spend a career working on it if you’re really well-suited for it, maybe try to be well-informed and get involved in a little political action once in a while if you like, and the rest of the time pick something else worth improving in your corner of the world; the rest isnt under your control, and there’s no shortage of other things to think about!\n\nOr...take it from MrCSLewis and ChatGpt:\n\nimg cs-lewis-chatgpt-nuclear.png\n\nIts also worth remembering that, unless we truly destroy the entire earth or universe with a paperclip maximizer (which I believe is possible, but not likely), whatever happens is another disruption that we can expect to come back from. The fantastic article VeryBadNews2021 talked about this wrt COVID|PandemicMood and is worth reading again!},{title:MarchettisConstant,created:20240220034343474,creator:soren,description:Throughout history, a typical commute has always been about 30 minutes.,es:confident,modified:20240220035200891,modifier:soren,tags:Idea Definition Cities Environmentalism Systems Travel Public,type:text/vnd.tiddlywiki,text:Observation that no matter what transportation technologies have been available, a typical commute has always been around 30 minutes one-way (the constant).\n\nWhen people walked, this meant they could live a little under two miles from work; now when they drive on an uncongested highway, they can live twenty-five miles from work. What hasnt happened, and probably never will happen, is that we spend less time driving to work.\n\nIn support, I note that when Ive lived close enough to work, rather than taking advantage of that to get to work very quickly, Ive instead taken slower methods of transportation, which tend to be more enjoyable and better for the environment. When I lived a mile from work in OwatonnaMinnesota, I walked most days, and occasionally rode my bike if I was in a hurry, meaning that my typical commute was just over twenty minutes. I could drive it in three (plus a three-minute walk from the parking lot to the door), but this was so short that it felt stupid; why bother hauling two tons of metal down the hill across town when I could combine it with exercise and thinking time I would have wanted to spend anyway?},{title:MarinaDelRey,created:20230831201653144,modified:20230831201656707,tags:Place Public,type:text/vnd.tiddlywiki},{title:MarionetteTheater,author:Heinrich von Kleist,caption:On the Marionette Theater,created:20200411005633594,creator:soren,medium:article,modified:20241026233034908,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text://On the Marionette Theater// is a short story/parable by MrHeinrichVonKleist which served as the inspiration for HisDarkMaterials. MrPhilipPullman quips in an essay in DaemonVoices:\n\n> HDM is much longer than the essay, but that is because I am much less of a genius than Kleist was; he managed to say in 2,500 words or so what I could only cram into 1,200 pages. Nevertheless, I think there are some incidents in the story that might divert the reader, and a character or two who might engage the interest and affection.\n\nFrom this come a number of crucial ideas:\n\n* A story of the “loss of innocence” (appearing both in the story of the FallOfMan that grounds both the Mythology and the actual plot and to what happens when childrens daemons become fixed)\n* The idea about being able to trick a bear (see MrIorekByrnison) and how that happens due to being in a state of innocence\n* The notion that the Fall really freed us in many ways|NoMeaningWithoutFailure (we are not marionettes), and that eventually we may be able to re-enter a state of innocence, better for the journey.\n\nEmbedded full text|kleist.pdf. Worth reading if you like HDM even a little bit -- it only takes 10 minutes.\n\n!! References\n\nMrHenrikKarlsson, “The I in an essay, the voice in a song|https://wastebook.substack.com/p/the-i-in-an-essay-the-voice-in-a” (waste book):\n\n\u003C\u003C\u003C\nI think the person who emailed me was getting at this with her comment about “Looking for Alice”: it works because I don’t understand what I’m doing. I’m bringing myself in, earnestly, and I fail to see the implications of what I say in ways that make the thing sing and live. It is humbling. So much for my craft, for my intelligence.\n\nI listened to an interview with Edward Norton recently where he talked about this. When Norton did American History X, he thought that he was playing a very tough man, and thought this rawness was what gave the film life. 20 years later he rewatched it and realized: the reason it works is that it is a boy who thinks he’s a man. But he could only portray that because he was a boy who thought he was a man.\n\nSo there is a point in time when you can write an essay that feels truly human: before you realize what you are doing. If I were to write “Looking for Alice” now, doing the same thing, making you feel how much I adore my wife, it would be a trick; it would be flat. I have to go to the edge where I work earnestly to say the truth, bringing my bumbling self in, and failing in ways that I’m too naive to see: that is where the proper ambiguity will seep in.\n\u003C\u003C\u003C},{title:Markdown,created:20200425162656404,creator:soren,es:confident,modified:20220106134943305,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A popular, lightweight WYSIWYM markup language that typically compiles to HTML. The most widespread single text markup language, it is supported in comments boxes all over the web, natively rendered by most SourceControl file browsers, and the basis for many content management tools like Jekyll.\n\nMarkdown, unsurprisingly, follows the MarkdownPhilosophy (and is the inspiration for that name).\n\nIm finding that Markdown is starting to get so popular that it drives people away from tools that //dont// use Markdown for one reason or another. Which is great when the alternative is WYSIWYG tools, but kind of stupid when its, say, TiddlyWiki or ReStructuredText...because those tools need functionality Markdown doesnt have.},{title:MarkdownPhilosophy,created:20200410161922714,creator:soren,es:confident,modified:20210511011229997,modifier:soren,tags:Design Software SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:The Markdown Philosophy is a design mechanism by which something can be made extremely simple, but also offer the option to be easily worked with in a more complex fashion if necessary.\n\nThe name comes from the markup language Markdown, which has become the de facto standard for simple plain-text markup. It did that by making its markup look like //pretty much what you would do anyway if you didnt have a markup language at all//. This means that theres precious little disadvantage to using Markdown over plain text with no markup standard -- you might change a couple characters you would otherwise type, but thats about it. Meanwhile, if you later need to copy and paste your text into a tool that uses standard Markdown formatting, or you decide you want to render it into an HTML page, or you want to convert it to another format using something like Pandoc, its already in a neat, computer-parseable format.\n\nMore thought in software design should be put towards systems that follow the Markdown philosophy. Too often, if you realize you need something much more than you started with, you have to pick an entirely new system -- but that system made everything way harder than it needed to be, so you were discouraged from picking it at the start.\n\n\Advanced settings\ are a similar concept: make things look easy if thats enough, but offer more options if you need them.\n\nThis is a form of GracefulDegradation, only with the emphasis on using it in a “degraded” state with the option to undegrade (engrade?) it if desired.},{title:Marriage,created:20251010023836371,creator:soren,modified:20251010023845115,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki},{title:MarriedToTheSea,created:20200511021813798,modified:20200511021916369,tags:Publication Public,type:text/vnd.tiddlywiki,url:http://www.marriedtothesea.com/,text:Daily comic that re-captions Victorian-era pictures with ridiculous and anachronistic quotes.\n\n{{!!url}}},{title:MartianChronicles1950,author:Bradbury,bibliography:LifetimeReading,caption:Martian Chronicles,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035466,priority:,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1950},{title:MaryhillMuseumOfArt,created:20250621164622632,creator:soren,modified:20250621164623349,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:maslow-gpt1.png,type:image/png,created:20221218211144047,creator:soren,modified:20221219145534150,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt1.png},{title:maslow-gpt2.png,type:image/png,created:20221218211155104,creator:soren,modified:20221219145532105,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt2.png},{title:maslow-gpt3.png,type:image/png,created:20221218211209024,creator:soren,modified:20221219145529974,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt3.png},{title:maslow-gpt4.png,type:image/png,created:20221218211336810,creator:soren,modified:20221219145527678,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt4.png},{title:maslow-gpt5.png,type:image/png,created:20221218211751104,creator:soren,modified:20221219145525958,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt5.png},{title:maslow-gpt6.png,type:image/png,created:20221218212646811,creator:soren,modified:20221219145523377,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow-gpt6.png},{title:maslow.png,type:image/png,created:20221018001915246,creator:soren,modified:20221018022550707,modifier:soren,tags:Image Public,_canonical_uri:./extimage/maslow.png},{title:MaslowsHourglass,created:20221018001837268,creator:soren,description:Technology effectively addresses certain human needs, and utterly fails at others, specifically love, belonging, and esteem.,es:likely,modified:20250204043404919,modifier:soren,tags:Idea Public Sociology Psychology Romance Friendship,type:text/vnd.tiddlywiki,text://This is likely destined to become a blog post because it got really long for a tiddler. Its not quite ready yet, so its here in the meantime.//\n\nThis is Maslows Hierarchy of Needs:\u003C\u003Cfnote \Via Wikimedia Commons, J. Finkelstein, CC-BY-SA 3.0: https://commons.wikimedia.org/wiki/File:Maslows_hierarchy_of_needs.svg\>>\n\nimg width400 maslow.png\n\nMaslows Hourglass is the observation (original source|https://web.archive.org/web/20180909145658/http://contraposition.org/blog/2012/04/29/computing-in-the-long-emergency-part-2/) that present-day technology is highly effective at helping people meet the needs at the top of the hierarchy and at the bottom of the hierarchy, but comparatively ineffective at helping people meet the needs in the middle of the hierarchy. If one were to re-draw the pyramid with the effectiveness of technology as the arbiter of size, an hourglass shape would appear, thus the name.\n\nI think this checks out remarkably well. Most technology is designed to improve our attacks on needs at the top: creativity|ToolForThought, problem-solving, achievement. It tends to be highly effective at these things.\u003C\u003Cfnote \Im going to ignore //morality//. I think morality is an entirely different animal from anything else on this chart; its some weird part of being human that nobody really understands. For the sake of completeness, though, technology pretty clearly doesnt help here.\>> A layer down, some benefits are still there, but they get much sketchier. Technology can help to reduce prejudice by exposing us to more people and ideas. Sometimes it can increase confidence and respect. But it can also amplify prejudice and decrease confidence and respect under other circumstances.\n\nStarting from the bottom, physiological needs and safety are also highly subject to technological innovation, particularly in recent years. TheDoorDash, Instacart, Amazon|TheAmazon, and Uber|PrivatePerson bring our basic needs (and us) anywhere at a moments notice. The fields of health and physical security have both been dramatically changed by technology. Although it doesnt help much with employment security //per se//, it does help people find new jobs and be more flexible, which is a broader kind of security. It helps us use resources more efficiently.\n\nBut in the middle: Does technology help us create friendships? Improve our relationships with our families? Improve our self-esteem? As far as romance and sex goes, most people find apps are excellent at providing pornography and moderately good at arranging casual sex (physiological), but moderately bad at developing long-term relationships (love/belonging). And as mentioned above, although confidence and respect can be improved by technology, they can also be worsened; this area is murky. In fact, Id argue technology -- or, more precisely, the social changes that unavoidably come along with it|EnablerAndDemander -- is actively making many needs in the love/belonging and esteem sections //harder// to meet than they used to be.\n\n(Observation that I havent found a good way to work in yet: I think human relationships are not subject to Shortcuts; that would completely eliminate the point. Technology, as it primarily exists today, is focused around shortcuts.)\n\n\n!! Why?\n\nAssuming this is a real pattern, whats up with this? Do technologists not care about love and belonging, self-esteem, confidence? Surely that cant be it, though; theres big money to be made in technology right now, plus lots of seed money for any smart, business-savvy person with a reasonably good idea, and barring some bizarre market failure, if there were lots of easy money to be made in addressing the very real needs at the center of the pyramid -- a place where many modern people are particularly hurting now, perhaps due to other technology -- youd expect someone would be doing it.\n\nIm actually surprised that nobody has found an effective way to use technology to help people make new friends. This seems like it ought to be a solvable problem, at least compared to many of the other ones discussed in this post, but all we have right now is a couple of half-hearted attempts to move the model of dating apps to friendships (e.g., Bumble BFF). I think this may be more a social problem than a technological problem. When I was at StOlaf, there was briefly an app you could use to meet up and eat a meal with other random people who didnt have a social plan for that meal. I love this idea, but I never tried the app, and Im not sure //why//, except that maybe I hadnt thought enough about this problem when I was 18 to realize this was something I would have liked to experiment with.\u003C\u003Cfnote \It also took me a long time to realize I like meeting and talking to strangers; maybe I hadnt realized it yet.\>> There may be a reverse bandwagon effect here, where if nobody else makes friends using an app you -- consciously or not -- feel like using an app to make friends is for losers. (People used to think online dating was for losers, but now that practically everyone whos been single and looking for a partner in the last few years has tried it, the “for losers” impression is totally gone, because if everybodys a loser, nobodys a loser. It might still feel unromantic to have met your husband on Tinder, but people get over that.)\n\nBut beyond that particular need, I think needs in the middle of the hierarchy are simply less tractable|ImportantNeglectedTractable by technological means, for several reasons.\n\n\n!!! Needs in the middle cannot be effectively analyzed\n\nNeeds at the bottom of the hierarchy are simple; everyone knows whats needed to deliver food to people, and even a little ways up the hierarchy, its still not rocket science to figure out what kinds of products and software can help protect peoples property or get them a job. Modern medicine is a more complicated field involving a lot of insanely complicated science, but once the science is clear, implementing technology that converts the science into a form where it can help people is a relatively straightforward endeavor. It still requires //creativity// and ingenious technological solutions, but the problem yields to a general process of research and analysis which is well understood, plus a little bit of luck.\n\nSimilarly, we feel like we scientifically understand creativity and achievement. Theres still a healthy dose of mystique and luck involved, but these things tend to be easy to measure, at least when youre trying something yourself and judging how effective it was for you, and the feedback cycles tend to be short; you can straightforwardly run controlled studies on people or on yourself and iterate rapidly|IncrementalAndIterative, building tools and approaches as you work and improve your life. And people ordinarily agree on whether someone has succeeded or failed at being creative or achieving what they set out to do.\n\nLove and belonging? Self-esteem? How do you run experiments on these? Of course theres no lack of science, but the science is, in some sense, mostly descriptive from the outside. You can find general tips or techniques that might, on average, help to improve peoples outcomes, but every human relationship is totally unique, and in the real world, we figure them out by feel, rather than by extrapolating from averages or looking at other examples.\n\nIts true that nobody is average|TyrannyOfAverages on any dimension, but if we compare, say, a problem with your health and a problem with your friendship, I think the difference becomes very clear. When you have a problem with your health, you probably go to a doctor. The doctor will do their best to figure out whats wrong with you and give you some advice, and if you take the advice, chances are your condition will improve at least somewhat. Oftentimes the problem will be straightforward enough that it will completely go away more or less permanently. Most doctors will agree on the solutions, at least to a first order of approximation; at most, there might be a couple of different schools of thought.\n\nWhen you have a problem with your friendship, you probably either take a guess at the best way to handle it yourself, or ask a few random, unqualified people what they think -- and then you probably wont do exactly what they say anyway. This is not because nobody has tried to become a “friendship doctor,” nor is it because its a stupid idea; its because the problem is hard, because the right answers for you depend on the internal state of your mind (plus the internal state of your friends mind, to make it even worse), and describing this to someone else is far more challenging than telling them your symptoms and having them check some physical signs. The closest real-world thing to a friendship doctor is a therapist or counselor, and even there look – its often quite hard to find a good therapist because you have to find someone who aligns just enough with you to make you feel comfortable and give you advice thats right for you, while also being just different enough|ConversationalDifference to actually help you solve your problems. And therapy is still a mixed bag; its ordinarily better than nothing, but even in the best of circumstances, with the clearest evidence for the problem youre dealing with, you cant be confident of success in anything like the same way that you can be confident the emergency-room doctors will fix your broken arm.\n\nThe results of items in the esteem and particularly the love/belonging sections are also comparatively dependent on our individual reaction to events. If were highly creative and productive and still feel bad about ourselves, we consider that depression or impostor syndrome. If were actually safe but feel scared, we call that anxiety or PTSD. Theres a sense in which most people agree on how they should feel when certain events in these areas occur (even if they dont always actually feel that way). But if were “actually” loved by a particular person and therefore “ought” to feel a sense of belovedness and belonging (or worse, mutual attraction), but we dont feel the same way, thats just…how we feel? What do “actually” and “ought” even mean here? Its entirely dependent on some opaque process wholly specific to you, and theres nothing “wrong” with you if you dont feel it.\u003C\u003Cfnote \If you never felt it with //anyone//, then we could reasonably say something was wrong with you. But thats not what were talking about.\>>\n\nPut together, this all means that love/belonging problems are incredibly difficult to analyze. Theyre even hard to analyze for //one// person, and most technologies are designed for hundreds, thousands, or millions of people at a time. When you cant analyze a problem, its extremely hard to build technology that helps with it. You have to understand the problem and break it down to find a technological solution, and, more importantly, to continuously improve it (a necessary part|AgilePhilosophy of producing any complex technology effectively).\n\nTo take the dating example again because its been fairly thoroughly explored by technologists, people do succeed in finding love with dating apps. But the reason they succeed is almost certainly not because the apps understand the problem of dating, in any meaningful way at all; its because access to thousands of potential matches has enough positive impact to outweigh the fact that most apps, even ones explicitly designed around carefully matching people, are actually stunningly bad at it compared to organic processes. In other words, dating apps work primarily by brute force, not because theyve analyzed the problem, and people are willing to put up with the essentially bad technology because people tend to be highly motivated to find romantic partners.\n\n\n!!! Needs in the middle are hard to teach a computer to reason about\n\nRelated: Sometimes, to effectively meet needs in the middle, it would be desirable for technology to understand some social situation and how humans feel in it. There are many useful rules here. But very frequently, situations come up where an exception to the normal rules is obvious to humans, because weve been tuned to figure them out by millions of years of evolution, not to mention years of growing up in our own societies (which add their own layer of rules and amendments), but explaining the reasons for the exception in a way a computer can understand is monstrously difficult, simply because there are so many that could possibly come up, and so many different cues that lead to realizing the exception is warranted. This means that designing technology to //reason about// social situations is monstrously difficult; this part basically always has to be left to humans, which puts hard limits on how deeply technology can be integrated with them. \n\nA couple of recent real-life examples of this to demonstrate the difficulty:\n\n(1) I was coming out of church and had parked my car in a slightly awkward spot. The person in front of me very loudly and rudely pointed out my car to me, saying that person was being a dork by parking there. The normal rule here is “when you get to your car while walking out of a building with someone, say goodbye, unlock it, and get in.” This was obviously undesirable; it would have been extremely embarrassing for both of us if it had become known to her that it was //my// car! Instead I pretended I had accidentally gone out the wrong door for where I parked, and walked around the block back to my car so she would be gone when I arrived.\n\nA “someone in your community complained loudly to you about your parking, so you cant get into your car” exception is not something anyone would think to add to the rules in advance, but recognizing the problem and then finding a workable solution on the fly is easy for a human.\n\n(2) I was at the end of a first date and asked to plan a second one before we left. The normal rule here,\u003C\u003Cfnote \At least in my rulebook. Modern dating is so confusing and various that people dont always agree!\>> in the general case, is that this is a mild //faux pas//: it looks over-eager and makes it unnecessarily awkward for the other person to say no if theyre actually not interested. But it was obviously OK, indeed much better than the course of action suggested by the normal rule, in this particular situation. Our behavior in the last hour or so had made it all but CommonKnowledge that we were in fact both interested in a second date, so pretending otherwise had little benefit, and in fact would have risked making the other person question their interpretation of the interaction! We had also already known each other fairly well prior to the date, just not in a romantic context, so it was unlikely that one of us would want to quietly disappear without having an honest conversation. Meanwhile, going ahead acted like flirting, in which you behave like youre more intimate than you actually are to express interest and push the process along -- so there was a clear and specific positive effect of the choice.\n\nThis situation, in contrast to the first, would be something someone might think to add to the rules in advance, but its hard to conceive of a way a present-day technological system could be designed to actually read the situation and know with sufficiently high accuracy if this was appropriate; theres just too much going on!\n\nAfter writing that, I wondered if I was just stuck in a bad-AI mindset from a decade ago and this problem is now more tractable than I thought, so I presented these situations to ChatGpt and asked for advice. It did a little better than I might have expected, but not //well//.\n\nIt did a poor job with the parking problem. It correctly recognized that Bob was being accidentally insulted, and that he should avoid reacting negatively, but it suggested that he needed to own up to it being his car. This isnt necessarily the wrong move (especially in a more direct culture than my own), but when I followed up asking for alternative responses, it didnt come up with any particularly good ones, and the advice got worse and worse.\n\nimg maslow-gpt1.png\nimg maslow-gpt2.png\n\nNor did it understand that the central problem was that Bob needed to get into his car -- even after I explained this to it -- which would mean that Alice would recognize it was his car and she had been accidentally insulting Bob. I dont think it understood the nature of the conversation, either. It seemed to think that Bob needed to behave as if he was sitting at a table with Alice and having an extended conversation, whereas in reality they are walking to their cars, seconds from saying goodbye, and saying anything longer than a few words would be odd.\n\nSome of its suggestions for defusing the situation would play hilariously badly in real life (although #3 would be very much in the Midwestern passive-aggressive spirit if Bob was actually angry!).\n\nimg maslow-gpt3.png\n\nIt did better on the date question, probably because this is a relatively common situation that it has more training data on. It correctly described why asking too early is bad, and in general offered sensible advice on handling this situation. But it seemed like it wasnt quite sure whether my scenario was OK (which is fair; its ambiguous, especially with the limited information I provided, and Im sure different sources in its training data have different opinions), yet it refused to come out and say so. It explained that both parties need to “take some time to reflect on the date” before making any other decisions, which would presumably suggest waiting, but then also said that its best to wait until “the end of the first date” (note that the scenario quite explicitly said this was the end of the date and it missed this) and OK to ask before leaving.\n\nimg maslow-gpt4.png\n\nIt didnt seem like it understood that it had given ambiguous advice; when I pressed it to explain why it had contradicted itself, it reiterated the statements that I considered contradictory and offered extra advice that I didnt ask for, which would probably make someone who didnt understand the situation even //more// confused:\n\nimg maslow-gpt5.png\n\nInterestingly though, it knocked this follow-up question out of the park:\n\nimg maslow-gpt6.png\n\n\n!!! People dont know what their needs in the middle are\n\nIf people are hungry, they can generally be trusted to select food from a menu that theyre currently interested in eating. They could fail by selecting something that wasnt advertised accurately, or clicking the wrong button by mistake, or changing their mind in between ordering and getting the food on a plate in front of them. But this happens only rarely, and many of the “failures” merely result in a somewhat less satisfying meal.\n\nIf people go looking for software to help them take notes, they are generally correct that they want a note-taking app. They could fail by being wrong that the WorstBottleneck in their process was having poor notes, or using the app ineffectively, or choosing an app that doesnt work well with their workflow. But if theyre paying attention, they can adjust appropriately. And they are highly unlikely to think they need a note-taking app when they actually need a fitness app; the distance people will land away from the ideal solution is quite low.\n\nBut our friends, romantic partners, and career milestones often, if not usually, look nothing whatsoever like we imagined. People are often convinced in advance that they want something in particular, then meet someone or stumble on a job opportunity that matches almost none of their criteria, but turns out to be an amazing match for them. I read a study recently where people were asked if they would have swiped right on their spouses on Tinder. A very substantial proportion of them said no, and some even said they would have had a hard filter preventing them from ever seeing their spouse in the first place!\n\nThe problem, I think, is that there are so many variables involved in whether you like a person or a job, and they all have a nearly infinite number of possible values. You can easily evaluate whether you like them once you have them in front of you on the basis of the emotions that interacting with them creates. But when we reduce all of these variables to a flat list of pictures and bullet points, we lack the vast majority of the information that actually matters to make a good decision; we dont have emotional responses to bullet points.\u003C\u003Cfnote \You might be able to quickly form a judgment of whether youre attracted to someone from a picture of them (though I cant!|DemiPerson), which could perhaps be called an emotional response, but that feeling can change rapidly, in either direction, if you later meet them in person and get a more complete set of information about them.\>> Lacking the ability to feel anything about the lists, we come up with logical ways of filtering them, but these are by necessity very rough heuristics, mostly based on patterns weve seen in good matches and bad ones in the past. Yet they seem so well-defined and explainable that we start to believe theyre true facts about what well like, rather than educated guesses, and become sure we know what we want, only to inevitably be surprised|PeopleDontKnowWhatTheyWant.\n\nThis is obviously a massive problem for creating technology that addresses these needs. If were not sure what were looking for, how can we be expected to effectively use technology to help us find it? The only other option is to develop technology that understands our prospective emotional responses better than us, which seems like a tall order. (On the other hand, Keeper arguably claims to be able to do as good a job or better at evaluating people as the person. Jurys out on whether it works.)\n\n\n!!! Needs in the middle by definition require humans in the loop\n\nSo understanding the users needs and wants is difficult enough. Theres an even worse problem with everything in the Love/Belonging section, which tech is pretty plainly the worst at addressing: not only do we have to deal with the user being a messy human, but we also cant remove all the //other// humans besides the user from the loop; having those other humans in the loop is the entire point.\u003C\u003Cfnote \Unless our app is Replika et al, but thats a special case.\>> Humans are hard to involve in technology: theyre messy, unpredictable, and argumentative, they make stupid mistakes at exactly the worst moments, and they demand compensation for their services. Humans are, at least for now, required to make some parts of the lower half of the pyramid work (e.g., to go get items off store shelves and drive them to you), but weve made that problem tractable by creating the “gig economy,” which converts humans into predictable, interchangeable cogs that mesh nicely with the technology, mostly without making them outwardly upset. Say what you want about the ethical implications here -- it works for the lower half of the pyramid.\n\nBut we cant use the gig economy to address anything in this section of the pyramid! Friendships, family relationships, and romances would pretty much by definition not be those things if we were to mechanistically create them through apps; theyre defined by free choice, reciprocity, and lack of direct compensation.\n\nThere are two things we can do with technology without violating these rules -- we can|IntroducingApp //introduce// people to other people who are seeking similar things, so that the love/belonging can subsequently develop outside of the app, and we can //help people communicate// with those they already have these relationships with. These are both useful services, but they dont //create// love and belonging in anything like the same sense that Amazon can place nearly-arbitrary objects on your doorstep in exchange for money when you click the “buy now” button, or Anki or RemNote can make knowledge stick in your head when you add it to the program and do your reviews every day. This means technologies in this arena are always, at best, skating around the edge, making the actual problem a tiny bit easier without seriously addressing it. At the same time, pretty apps make it seem like the tasks involved //should// be easier than they are, by analogy with apps that address the top or bottom of the pyramid and are highly effective, and so we find them more frustrating when the reality proves different.\n\n\n!! Is this solvable?\n\nThe key question is, can technology ever start expanding the middle of Maslows Hourglass? \n\nMy answer is, unfortunately, I dont know|IDontKnow. But I do have a few thoughts.\n\nOn the topic of //introducing apps// (dating, friendships, professional networking, even recommendations of ideas), the apps themselves could be improved by machine learning, todays typical strategy when a problem proves largely unanalyzable. I presume that all serious extant dating apps (the most explored direction here) use complex machine-learning algorithms nowadays, but anyone who has used these apps can tell you that they arent particularly good. There is no great mystery here, though: there simply isnt much signal to work on. If an app asked you for any significant number of the things that actually matter for romantic compatibility, you might well be offended or freak out and delete the app. Moreover, many if not most of them are likely subconscious|ConversationalEase, so that you wouldnt be able to provide them directly if you wanted to. (This is why, for example, old OkCupids compatibility quizzes dont fall into the “things that actually matter” for me; while the questions were, according to many, more useful than todays app profiles, they only skimmed the surface of the difficult-to-articulate things that make the difference between finding someone kind of interesting and falling in love with them. It was never anywhere near the kind of magic impatient single people would love to see in this area.) Finding ways to collect this data could make the apps more effective, but the tradeoff is probably too dangerous to be worth it. (Im sure wed be able to //completely// trust a big tech company that knows who well fall in love with to behave completely ethically at all times, right?)\n\nA more promising direction might be nudging people into more productive social behaviors off-device using technology -- undoing some of the negative cognitive and social patterns created by other technologies. My experience with such tools has been largely underwhelming, though. Ive used tools that, e.g., aim to make your phone less addictive, prevent you from wasting time on the internet, remind you to engage in certain behaviors, and so on. Theyre often helpful, but none of them have changed the landscape of society or even my life in any seriously meaningful way. Are there directions here that havent been explored? Almost certainly, but none of them seem likely to really //solve// a problem.\n\nUltimately, my “solutions” section falls into the same trap that creates Maslows Hourglass in the first place: the problems involved are not analyzable! Lacking the ability to deeply analyze, though, I hope people will continue experimenting. We might still stumble upon some useful strategies by DumbLuck. Most important things happen by accident.|AccidentsMakeTheWorldGoRound},{title:mason-jar-illusion.jpg,type:image/jpeg,created:20201018034940582,modified:20201209222714950,tags:Image Public,_canonical_uri:./extimage/mason-jar-illusion.jpg},{title:MasonJarIllusion,created:20200202033124730,creator:soren,es:confident,modified:20210731153719953,modifier:soren,tags:Physics Public Idea,type:text/vnd.tiddlywiki,text:MasonJars are subject to a strange and at-first-disconcerting OpticalIllusion when you submerge them in water (for instance, to thaw frozen contents|FreezerPackingStrategy). A combination of the curved body and the waters changed refractive index results in the jar suddenly appearing mostly empty, with the contents extremely thin and about half their normal width.\n\nThis jar is in actuality //completely full//:\n\nimg width500 mason-jar-illusion.jpg},{title:MasterAndMargarita1967,author:Bulgakov,bibliography:LifetimeReading,caption:The Master and Margarita,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035473,priority:2,readstatus:unread,recommended-by:Penguin,tags:Source Public,type:text/vnd.tiddlywiki,year:1967},{title:MasteringGitSubtrees2015,bibliography:Git,caption:Mastering Git subtrees,created:20200908182713357,description:Explanation of a fancy way to handle dependencies in Git without a dependency manager: actually mixing the subrepositorys commits into the larger one.,medium:article,modified:20200908182955133,tags:Source Public,type:text/vnd.tiddlywiki,url:https://medium.com/@porteneuve/mastering-git-subtrees-943d29a798ec,year:2015,text:{{!!description}}\n\nWhile I have never had occasion to use subtrees (on the one occasion that they would have been useful, I didnt trust the users who needed it to do the procedure properly since they didnt know a whole lot about Git), this teaches a whole lot about how flexible the Git branching/graph model is. Ive used the lessons I learned here to do really useful stuff like merge together two repositories or merge specific files from an arbitrary other repository.},{title:Math,created:20210812020626182,creator:soren,es:confident,modified:20210828141245675,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki},{title:MathematicalPrinciplesOfNaturalPhilosophy1726,author:Newton,bibliography:LifetimeReading,caption:Mathematical Principles of Natural Philosophy,created:20210703170128000,genre:Science/Math,medium:book,modified:20210705214035483,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1726},{title:Matilda,caption:Matilda,created:20200323113839551,format:paperback,medium:book,modified:20210607011406945,owned:yes,rating:irrationally enjoyed,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:Matilda,text:Childrens book by MrRoaldDahl, telling the story of MsMatildaWormwood and her horrendous parents and school.},{title:MatildaMovie,caption:Matilda,created:20200326015446508,creator:soren,medium:film,modified:20210917011328435,modifier:soren,rating:distinguished,readstatus:read,tags:Source Film Public,type:text/vnd.tiddlywiki,year:1996,text:Film adaptation of Matilda. I thought this was just fantastic, maybe even the rare example of a movie thats better than the book, with the book good to begin with -- though Ill admit its been years since Ive read the book (a real shame), so I might be overestimating a bit.\n\nI thought the adaptation was very sensitive|MediumAdaptation. The exact events changed fairly significantly to make it work well as a movie; in particular, the number of pranks MsMatildaWormwood does is reduced and theres a whole scene that doesnt exist in the book where she and MsHoney break into MsTrunchbulls house and nearly get caught because MsTrunchbulls crappy car sold by Wormwood Motors breaks down as shes trying to leave. But the meaning of the story and its emotional impact did not change one bit.\n\nMsTrunchbull is fantastic and is imposing in a way I never really got out of the book; a thoroughly ImplausibleCharacter and like most implausible characters delightful for it (I mean, not delightful as a person).\n\nYou cant help but love the addition of the TV show “Million Dollar Sticky,” in which people are painted with glue and then money is sprayed at them (and they keep whatever sticks, I guess?). MrRoaldDahl is obsessed with glue|DahlGlue, so its a perfect addition!},{title:MattLakemanBlog,author:MrMattLakeman,blogroll:Blogroll,caption:Matt Lakeman,created:20250905204219989,creator:soren,modified:20250905204237604,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://mattlakeman.org/},{title:Maudacity,created:20200115232106904,creator:soren,description:Behaving with Maudacity (a.k.a. being Maudlike) entails being uninhibited, eccentric in ones personality and behavior, and seizing the day.,es:mythological,modified:20240320220002816,modifier:soren,tags:SorenConcept Definition Idea Public,type:text/vnd.tiddlywiki,text:The term Maudlike comes from the MyMaudlin Maud (the definition does not fit the MyMaudiverse Maud at all). One is Maudlike when one is a little bit wild and crazy, has or at least exhibits a very noticeable and flamboyant personality, does not hide ones emotions and feelings, is unashamed and proud of being crazy and/or different, and lives in the moment. Its sort of a //carpe diem// mentality combined with being moderately weird and socially uninhibited.\n\nSome examples of Maudlike behavior:\n\n* Some things I do on walks alone in the Natural Lands at StOlaf sometimes (I think this is the context in which I coined the term): running down a hill energetically vaulting off a walking stick, singing loudly and using falsetto and leaving my range in ways that sound awful, etc.\n* Jumping over a row of chairs at the end of choir practice. (The result in the situation I am thinking of, in which I tripped over the chair I was attempting to cross and fell flat on my face on the hard tile floor, however, was very un-Maudlike—for it to be Maudlike, it has to succeed.)\n\nThe newer portmanteau Maudacity (//Maud// + //audacity//) means essentially the same thing, but its used as a noun rather than an adjective. It is poor form to say “Maudlikeness.”\n\nBoth words should always be capitalized since theyre based on a proper name.\n\nFunnily enough, MsMaudeChardin of the film HaroldAndMaude1971 may well be //more// Maudlike than the //Maudlin// Maud, but the term precedes my seeing the film by approximately seven years.\n\n{{$:/sib/Templates/Topical/MaudWikiImport}}},{title:MaudWiki,created:20200117012142177,creator:soren,es:confident,modified:20220804163348099,modifier:soren,tags:RecordsProject Idea Public,type:text/vnd.tiddlywiki,text:MaudWiki was one of the predecessors of this wiki. Its ~MediaWiki site was hosted on the web space of MyTechnicalGeekery and then sorenbjornstad.com for a number of years, but was only actively used for maybe a year or two. It hosted general items of PersonalMythology, notes on my reading, notes on the solutions to technical problems (see TechBook), and scattered miscellaneous items like contact information and details about local businesses.\n\nMaudWiki was permanently decommissioned in 2019 when I moved all of my web spaces to static hosting in Amazon S3. However, I maintain a static archive of it on my local fileserver Gracie|GracieComputer.\n\nI have a lot of good memories of MaudWiki; its tied up with many of the parts of my college career that I really enjoyed, and ~MediaWiki really is a great piece of software too.\n\nThe template $:/sib/Templates/Topical/MaudWikiImport can be used to note tiddlers in this wiki that have been imported from MaudWiki articles with little or no modification.},{title:MaximizingWorkNotDone,created:20200712042948072,es:confident,modified:20200712044344024,tags:AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:Principle 10 of the AgilePhilosophy, probably my favorite of the principles, reads:\n\n> Simplicity – the art of maximizing the amount of work not done – is essential.\n\nWorkNotDoneArticle201507 does a fantastic job of explaining how this relates to other critical productivity principles. Many of these are inspired by this article:\n\n* The EightyTwentyPrinciple and Prioritization -- the lower-priority stuff may become work not done, i.e., UnneededTodos.\n* NoCodeAtAll -- better to avoid bringing new code into the world if you can avoid it.\n* AvoidScale -- again, keep it small if you can. Less scale means less work.\n* LocalityAndSimplicity, one of the FiveIdeals of DevOps, likely fits in here somewhere too.\n\nMsLedallaMadhavi (author of the article) makes the entirely believable case that this simplicity truly is an //art//. Being able to avoid writing any code at all, or even just writing clear, concise code that makes good use of NamingConventions and idioms to avoid verbosity and blundering comments, is not a coldly scientific, computer-mechanical task by any means.},{title:McDonalds,created:20230424025703136,creator:soren,modified:20230424025703965,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MeaningOfRelativity1922,author:Einstein,bibliography:LifetimeReading,caption:The Meaning of Relativity,created:20210703170128000,genre:Science,medium:book,modified:20210705214035499,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1922},{title:MeanTimeBetweenFailures,created:20200509180018150,es:confident,modified:20200509180455315,tags:Process AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:Reliability metric for products and software operations which identifies how long the system spends in a normal state. Probably the most obvious one.\n\nWhile a high MTBF is obviously desirable and a particularly low one likely unacceptable, the MeanTimeToRecovery is arguably more important, as well as more enlightening with regard to how successful your processes are. An obsessive focus on MTBF can paradoxically|CounterintuitiveEfficiency result in a worse MTBF and almost certainly a worse MTTR.\n\nNevertheless, process improvements often result in raising both.},{title:MeanTimeToRecovery,created:20200428203708559,creator:soren,es:confident,modified:20211221034253412,modifier:soren,tags:Code Process Public Idea,type:text/vnd.tiddlywiki,text:The mean time to recovery, or MTTR, is one of the most important metrics for software and computer operations. When something goes wrong (not //if//!), how fast can you get service restored normally?\n\nIn most cases, MTTR is significantly more important than the frequency of problems (MeanTimeBetweenFailures). If you only make breaking changes once every 2 years but they take 2 days to recover from, thats usually much worse than if you make breaking changes every week but can restore normal operation in 5 minutes. In the latter case, its entirely possible nobody will even notice (or just shrug it off as a typical “glitch”).\n\nThis is also one of the biggest differences between companies that have embraced DevOps and those who havent. Companies well along in the process can usually recover from bad deployments in minutes, and even major infrastructure issues in an hour or two. Bad performers will take at least hours, and maybe longer -- if youve deployed manually using a complex system, the way to roll back is not obvious, and if you are missing the instrumentation and logging you need to identify the problem, it will take you forever to figure out how even to begin approaching the problem.\n\nDesigning your system up-front to provide more information, e.g., using FailHelpful, and adding service instrumentation, is one of the best ways to increase MTTR.\n\nPrimary source: DevOpsInTheRealWorld.},{title:MediaRating,created:20210606192522251,modified:20210703161601116,tags:Meta Public,type:text/vnd.tiddlywiki,text:The traditional method of rating media uses a numeric or star system. I have never found this system particularly effective, though: Ratings tend to cluster towards the top, making half the scale all but useless. (In some ways, this is no surprise. If you really thought a book was a 2 out of 10, why did you finish reading it? And if you didnt finish, can you fairly rate it?) You could try to spread your ratings out over the scale better -- Gwerns Resorter|https://www.gwern.net/Resorter provides an elegant solution to this problem -- but such a ranking is quite time-intensive to maintain, shifts over time, and feels like it is trying to keep more information than is needed for my purposes. Further, when youre the only one using 1 to mean “maybe pretty good, just low compared to others,” its hard to get past the psychological baggage saying “this means //awful//.”\n\nMy current system is experimental, but seems promising. Instead of trying to rate things on a numeric scale, it borrows and extends ideas found in HowToReadABook1972 (see especially page 341, “The Pyramid of Books”) to produce a //qualitative// scale which nevertheless has a ranked order. This makes it much more obvious which category a work should go in: instead of wondering if its “threeish,” you can determine if its “average” by asking if it is better than the “skimmable” criteria but not better than its “distinguished” peers. It is doing something slightly different, too, making a judgment more on (my perception of) the works overall value rather than how much //I// liked it, which since others presumably have different tastes than me may actually be more helpful.\n\nHere are the categories:\n\n\u003Cdl>\n\u003C$list filter\prefix$:/sib/MediaRatingsectionmainnsortstackorder\>\n\u003Cdt style{{{ {!!color}addprefixcolor: addsuffix; }}}>{{!!caption}}\u003C/dt>\n\u003Cdd>{{!!text}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n\nAs with EpistemicStatuses, a few works fall through the cracks of the main series of ratings, so there are several special ratings which arent part of the ordered scale:\n\n\u003Cdl>\n\u003C$list filter\prefix$:/sib/MediaRatingsectionauxiliarynsortstackorder\>\n\t\u003Cdt style{{{ {!!color}addprefixcolor: addsuffix; }}}>{{!!caption}}\u003C/dt>\n\t\u003Cdd>{{!!text}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>\n\nThese ratings do have an interesting property in that you do not want to attempt to consume only //great// media, because these are a great deal more work to understand and appreciate. My aim is to tackle as many //great// and //good// works as my energy level can manage, and fill in most of the rest with //distinguished// and the occasional //average// ones. (It can be difficult to judge the difference between an average and distinguished work without actually reading or viewing it, so avoiding average works entirely may not be a practical policy. Besides, there may not be a distinguished work on the topic youre looking to learn about.) There is little reason to bother with anything less|TimeFilter.\n\nThe rating of a source tiddler, if assigned, is kept in its `rating` field.},{title:MediaWiki,created:20210825030850821,creator:soren,modified:20210825031631991,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Software powering Wikipedia and many other large public wikis.},{title:MediumAdaptation,created:20210515032807021,es:confident,modified:20210515033320396,tags:FictionTheory Language Metaphor Public Idea,type:text/vnd.tiddlywiki,text:I often find that good adaptations from one medium to another (e.g., book to film) are //sensitive//, and an act of translation. That is, as when translating|Translation a text from one language to another, the writer must write a new story in the target medium that has the same effect on the audience as the original. This can change the details of the story, but it must not change its emotional or thematic content|SoWhat.\n\nPeople often believe theyre irritated when the adapted version of their favorite story gets the details messed up, but I think theyre usually actually reacting to the //meaning of the story// changing because of clumsily chosen altered details.\n\nAs I originally described this for MatildaMovie (now moved here), I think this is kind of like how MrHerodotus thinks of history: its not about the actual events but about what they teach us. },{title:MeetTheAiTherapist,author:WiserConversations,caption:Meet the Artificially Intelligent Therapist with Eugenia Kuyda,completed:20210516,created:20210606162943402,medium:podcast,modified:20210616235833771,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.wiserconversations.org/podcasts/eugenia-kuyda,year:2020,text:Some reflections on the early stages of Replika, discussing how MsEugeniaKuyda got on the line of work that led to it, and how human and AI relationships are related. She believes (and I think this makes sense) that one is not necessarily clearly better than the other. An excellent relationship with a human will always be better than an excellent relationship with an AI, at least for the foreseeable future, but a lot of human relationships are pretty crappy, or just uninspiring, while an AI that is designed to care about you can definitely reach above that level.\n\nAlso discusses modern social alienation, and how phones, etc. relate to it (cf. PeopleAndTheirPhones, though there note that the people in that photo were at least together in ConsensusPhysicalReality!). E.K. has what I find a somewhat absurdly defeatist perspective: she thinks that because this isnt going away, we need to lean //further// into technology (see also ResistanceIsNotFutile for a possible subconscious motivation?). I think she also has a little bit of the AnyBenefitMindset with regard to SocialMedia from DigitalMinimalism2019, arguing that Facebook is good because it provided some particular moment of connection or something (it has been a couple of weeks since I listened as I write, sorry for the vagueness). So I wasnt too impressed by this part of the discussion, but thats OK.},{title:Memex,created:20200728034614650,creator:soren,es:confident,modified:20211107181840569,modifier:soren,tags:PersonalDocumentation Information Imagination Systems Public Idea,type:text/vnd.tiddlywiki,text:Concept introduced in AsWeMayThink1945, originally a microfilm|Microfilm-based mechanized information-retrieval system. It introduced many of the realizations of modern information tools, in particular the need to be able to link information from disparate sources together. The original concept of the memex is of course obsolete with digital technology (and the article pointed out missing technology even for his vision at the time, including dry photography methods so one could quickly snap a document into the system). But the ideas informing its design are crucial and have never gone away. Indeed, arguably large portions of it have never been realized in the mainstream despite being extremely important and valuable.\n\nOne of the most intriguing ideas of the world including the memex as envisioned in the article was the existence of a profession that would build interesting \trails\ through a societys collective body of information. One might think that some bloggers serve purposes sort of like this, but in many ways it still feels a strangely unexplored idea, at least on a formal enough basis for it to be broadly accessible in a variety of contexts. One might also think though, probably rightly, that this is at least partly wishful thinking; like GoodSharedFlashcards or even a ZettelKasten, it seems that associations between ideas are quite personal and somebody elses trail might not make that much sense to you. If it regularly did, indeed, that might mean you were becoming dangerously conformist to the point of struggling to contribute original research! Cf. IndividualDistinctionIsIndividualValue: are you worth anything if your contribution is the same as everyone elses?},{title:MemorialDay,created:20200515031814140,modified:20230912032801049,tags:Public Idea,type:text/vnd.tiddlywiki,text:UnitedStates holiday the last Monday of May, heralding the beginning of summer (and officially treated as the start thereof by many recreational institutions, which open this weekend).},{title:MemoriesDreamsReflections1962,author:Jung,bibliography:LifetimeReading,caption:Memories, Dreams, Reflections,created:20210703170128000,genre:Misc,medium:book,modified:20210712024725404,priority:1,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1962},{title:MemorizingProgrammingSivers201301,author:Derek Sivers,bibliography:Anki,caption:Memorizing a programming language using spaced repetition software,created:20240829192027099,creator:soren,description:Very brief introduction to spaced repetition, plus some tips on using flashcards to learn a programming language.,medium:article,modified:20240829192308946,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://sive.rs/srs,year:2013,text:Article by MrDerekSivers about how he made his programming knowledge much deeper, more explicit, more professional using Anki.\n\nSome useful specific patterns. Also, if you know something about programming, reading this is a great way to quickly intuitively understand how you can turn something relatively complex, more than just word pairs or something, into flashcards that aid your everyday life.},{title:MemorizingTextPassages202305,author:Michael Nielsen,bibliography:Anki,caption:Using memory systems to memorize text passages,completed:202408011200,created:20240829192349520,creator:soren,description:Scattered thoughts and observations on learning verbatim texts like poetry or speeches with memory tools.,medium:article,modified:20240829192807315,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://michaelnotebook.com/memorize/index.html,year:2023,text:Article by MrMichaelNielsen about his experience memorizing three passages using Anki. Its really just a collection of notes published in case they might be useful, not a guide, but I definitely find them useful!\n\nAs I try to improve LPCG and a future single-purpose tool for memorizing poetry, this article is high in my mind; I want to get in touch with Nielsen and ask more about some of his thoughts. The insight that if youre struggling to remember a word or phrase, theres probably something about the text that you dont yet deeply understand that you can find and interrogate with a different card that operates at a //semantic// level seems extremely important to integrate into any system like this. I am quite sure that I do this when Im learning poetry, but I do it only by accident, and I rarely create extra cards for it (both because I have, for whatever reason, not thought about doing so, and because its difficult with current tools).},{title:MemorySystemsNeedGenuineInterest,created:20250902162339164,creator:soren,description:Memory systems only work well when you genuinely want to learn their contents.,modified:20250921012709877,modifier:soren,tags:Idea Stub Public,type:text/vnd.tiddlywiki,text:!! {{!!description}}\n\n* play in memory systems & learning\n** Learntropy|https://supermemo.guru/wiki/Learntropy\n** PlayfulKnowledgeManagement\n* memory systems should really be about optimizing engagement, not memory\n** when you want to learn something, you often remember it; when you dont, you often dont\n** your unconscious often knows what is worth learning, and definitely knows what is //learnable//\n** if you dont stay engaged, you wont keep using the system, and it will not improve your memory if you dont use it; this is by far the most common failure mode (see DynomightSchoolOfRunning)\n* heuristics\n** consistency beats volume: PowerOfKonsistency\n** emotional connection beats on-target-ness (cf. Autofocus)\n** usable knowledge beats exam scores\n* fixing leeches by connecting to the material / adding details\n* nothing is “just facts”, and things shouldnt be learned that way: NonexistenceOfPurelyFactualKnowledge\n** ideas must be connected to make you want to learn them and able to retain them: Gearsness, InevitablyCorrect\n* stay in touch with your feelings when deciding what to add\n** does this //feel// important/interesting/worthwhile? that is probably the biggest cue you should use\n** if something seems like it //should// be important but it doesnt //feel// important, investigate why that is\n*** maybe you dont understand what youre learning\n*** maybe you are learning something out of duty (see goal-driven learning|https://controlaltbackspace.org/learn-what/#goal-driven-learning)\n*** maybe you are studying the wrong thing or you dont care enough\n** this isnt just when adding; listen to the “ugh” when studying\n* memory systems increase your control over natural processes\n** but those natural processes are the way they are for a reason, so you need to handle all parts of those processes for success, including forgetting (see What to Learn with Anki|https://controlaltbackspace.org/learn-what/#~:It%E2%80%99s%20normal%20and%20totally%20fine%20to%20learn%20something%20and%20then%20later%20decide%20it%E2%80%99s%20more%20burdensome%20than%20helpful%20and%20you%20no%20longer%20want%20to%20maintain%20it.:~:textIt%E2%80%99s%20normal%20and%20totally%20fine%20to%20learn%20something%20and%20then%20later%20decide%20it%E2%80%99s%20more%20burdensome%20than%20helpful%20and%20you%20no%20longer%20want%20to%20maintain%20it.)\n* side quest: what would a general-purpose memory system that made helping you with these questions its number-one goal look like, design-wise?\n\nM.: \I wonder if one could simply make a resolve that when one was doing the Anki cards you might enter into a more sensory experience.\\n\nOther ideas|PossibleMemoriaTalks},{title:Memrise,created:20200910164622204,modified:20210118022906730,tags:Product Software Public Learning Memory Idea,type:text/vnd.tiddlywiki,url:https://www.memrise.com,text:SpacedRepetition product for Language learning that mixes in crowdsourced (I think?) MnemonicTechniques.\n\n{{!!url}}},{title:MendocinoBotanicalGardens,created:20250623162344966,creator:soren,modified:20250623162346533,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MenosParadox,created:20200304015823113,es:probably wrong,modified:20210509010829399,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Ancient paradox mentioned in HowToTakeSmartNotes which claims (sophistically, according to most) that inquiry is impossible because you cant look for an answer unless you know what youre looking for, but if you knew what you were looking for you would not need to look!\n\nIts probably not hard to see the main hole in this argument: you might not know what youre looking for, but you can know at least what direction you want to look in.\n\nNevertheless, its important to be awake and alert when looking for things to make sure you do not miss other things that are right in front of your nose simply because you are not looking for them, as in MissingBeautyBeforeTheNose.\n\n\u003C\u003Crememberq \20201121030757727\\n\t\What does Menos Paradox claim is impossible?\\n\t\Inquiry on any topic.\>>\n\t\n\u003C\u003Crememberq \20201121030815666\\n\t\Menos Paradox claims that inquiry is impossible for what reason?\\n\t\You cant look for something if you dont know what youre looking for, but if you knew what you were looking for, you would not need to look.\>>},{title:MentalDeletion,created:20200423003308531,creator:soren,es:likely,modified:20211228155956113,modifier:soren,tags:Information Psychology SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Its common to think that digital clutter doesnt exist. It doesnt take up any space!\n\nYeah, it does. It takes up space in your brain while youre trying to maneuver around it. Sometimes its important to let things go -- delete them mentally -- and that means deleting them from your computer and systems as well.\n\nSee also TheControlAltBackspace post on deleting files, particularly the section Why delete junk?|https://controlaltbackspace.org/filesystem/when-to-delete-files/#why-delete-junk.},{title:MentalModel,color:#6c6cff,created:20200304024119183,creator:soren,icon:$:/core/images/list-bullet,modified:20200516163323225,modifier:soren,tags:Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Mental models may be effective as a means of combating the HaveToExperienceItToUnderstand effect, though I believe still only a substitute: the idea being that you learn from the generalized experiences of others and are able to apply the results of those experiences.\n\nMrCharlieMunger seems often cited in the literature as a proponent of these.\n\nAs with experience itself, having a wide variety of models is far more valuable than a narrow set. In fact, having and applying a narrow set of models may be more dangerous than having none (if it were possible to have none) -- you then //feel// like you know even when you have applied a dangerously wrong or one-sided approach to the problem.\n\nSource: HowToTakeSmartNotes.},{title:MereChristianity1952,author:Lewis,bibliography:LifetimeReading,caption:Mere Christianity,created:20210703170128000,genre:Religion,medium:book,modified:20210705214035522,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1952},{title:MereExposureEffect,created:20200228023050082,es:likely,modified:20210611023610258,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Simply doing something a lot often makes people think they are competent at it. While its often true that when you do something more, you get better at it, the effect is completely independent of actual skill.\n\nPresumably related to the DunningKrugerEffect.\n\nSource: HowToTakeSmartNotes, pages 65-6.},{title:MergeDay,created:20200306203215190,creator:soren,es:mythological,modified:20211110041648019,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:Classic post on TheDailyWtf, in which a major travel company has built a terrible SourceControl workflow such that the first Wednesday of every month must be dedicated to resolving merge conflicts between the code that nobody has synced during the preceding month.\n\nThe solution, of course, is ContinuousIntegration.\n\nhttps://thedailywtf.com/articles/Happy_Merge_Day!},{title:MermaidDiagrams,created:20210122205351030,modified:20210122213050542,tags:Software Public Idea,type:text/vnd.tiddlywiki,url:https://mermaid-js.github.io/mermaid-live-editor/,text:Handy tool for quickly creating diagrams using a declarative Markdown-like syntax. E.g., heres a snippet of part of the RecordsProjects flow:\n\n```\ngraph TD\n subgraph Destinations\n RT(Random Thoughts)\n ZK(Zettelkasten)\n Anki(Anki)\n end\n\n subgraph Sources\n Kindle(Kindle)\n Book(Paper book)\n Idea(Idea)\n end\n\n Kindle(Kindle) --> Highlight\n Kindle --> WLWord lookup\n Kindle --> Notecard\n Kindle --> RT\n\n Highlight --> RT\n Highlight --> ZK\n Notecard --> ZK\n WL --> Anki\n ZK -->|via TiddlyRemember| Anki\n\n Book --> Notecard\n Book --> Dart\n Dart --> RT\n Dart --> Anki\n Dart --> WL\n\n PB --> RT\n PB --> ZK\n PB --> Anki\n Idea --> PB\n```\n\n\u003C\u003Crememberq \20210122213024748\\n\t\What popular tool, often integrated with Markdown, allows the creation of simple diagrams with a declarative text language?\\n\t\Mermaid\>>},{title:Meta,caption:Content that is about the ZettelKasten itself or its software.,color:#ff0000,created:20200115231440413,creator:soren,icon:$:/core/images/tag-button,modified:20210825160942535,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nMeta tiddlers dont have any special naming conventions or fields.},{title:MetadataLink,created:20210606170657324,es:possible,modified:20210606170613404,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Potential TiddlyWiki tool by Bimlas to explore for the dream journal|Dreaming wiki or others:\n\n* https://groups.google.com/g/tiddlywiki/c/Re11x96t-qI/m/WoqDEuJzGQAJ\n* https://bimlas.gitlab.io/demo/tw5/property-comparison.html\n\nThis tool (based on text search) allows a kind of cross-slicing multi-dimensional view of different tags or data points (e.g., see what people are used on tiddlers with the same place).},{title:Metadesire,created:20221216213908373,creator:soren,description:The state of feeling attracted to nobody, but wishing you were; a common experience for some on the asexual spectrum.,es:personal,modified:20240709030704154,modifier:soren,tags:Idea Romance Identity Public,type:text/vnd.tiddlywiki,text:Experience of being a DemiPerson: A large part of my life has been spent not feeling attracted to anyone, but wishing I was. This seems like a useful concept -- Ill call it //metadesire// -- and I think its a key part of the graysexual/romantic experience for many people.\u003C\u003Cfnote \Some totally ace people might feel like theyre missing something, too; but I have rarely seen it talked about, so my assumption is this is mostly a gray* issue.\>> Interestingly, I only experience this on the romantic axis; I have no particular desire to experience sexual attraction when Im not already feeling it. So thats what Ill talk about here.\n\nMetadesire arises because of the huge downside of being gray instead of completely aromantic: at least after the first time youve experienced attraction, you know and feel (not just intellectually|KnewItIntellectually) what youre missing out on in a way that totally aro people dont. And yet, for many people, theres very little you can do to make yourself experience attraction again! The best you can hope for is to carefully put yourself in situations where you might, essentially, get lucky; you cant do anything directly.\n\nTo be fair, this actually applies to everyone. Its just that alloromantic people are attracted to sufficiently many people on a regular basis that they dont get hung up on this point. As an alloromantic person, your problem is, given a set of people you find attractive, to find someone who shares your feelings. This is something you can take direct action on: filter through a bunch of people and then ask out the ones you like. As a demiromantic person, your problem is finding anyone at all who youre interested in taking action on. There are usually zero candidates! Whats more, the standard ways to quickly and easily encounter more people who might become candidates are rarely sufficiently deep to allow the demiromantic person to meaningfully filter anyone; a typical dating profile gives approximately zero information, and even an in-person meeting of some minutes will only occasionally be enough.\u003C\u003Cfnote \Some people tend to develop attraction much faster than others. I can sometimes -- sometimes -- experience ProtoAttraction after a few minutes, but even that is more likely to take half an hour or so of deliberate interaction. And experiencing only proto-attraction is not usually enough to make pursuing the person an attractive proposition; in most cases its challenging to invite someone you dont know well for some one-on-one conversation to help yourself develop attraction to them without calling it a date, and if you call it a date the expectation is normally that you will be able to rapidly evaluate whether youre attracted to the other person, if you dont know already. Grr.\>>\n\nIts like demiromantic people, instead of buying or cooking a meal when they get hungry, have to hope someone offers them one out of the blue, or go beg on the corner.\u003C\u003Cfnote \I think the analogy to begging here is going on dates with people youre not yet attracted to, hoping attraction will develop, more on which later.\>> Sure, youre more likely to get a meal if you go out begging than if you stay at home, and its reasonable to expect youll get one eventually, but the process is infuriating, embarrassing, and slow, and everyone will look at you with pity, think youre crazy, or insult you along the way. It doesnt matter how much youre willing to pay for a meal, nobody will take your money. And its only you, and a handful of others who are hard to identify, who are magically prohibited from buying food; 99% of people can buy food anytime they want and never give it a second thought.\n\nAnd this is another reason that metadesire is particularly frustrating. Everyone else can go “find a partner” or “start dating,” because theyre able to quickly identify some people theyre interested in, so it feels like something you, as a demiromantic person, ought to be able to do, too. You can even pick up step-by-step books on how to do it. But when you try, it just doesnt quite work, in a subtle way thats almost impossible to explain until you have the schema|HypoCognition of //being demiromantic//. Actually, its still hard to explain. Somehow you //dont want to// go on dates, and its not because youre scared or you lack metadesire; its because theres this layer in the middle that youre supposed to feel, thats supposed to motivate you -- romantic attraction -- and its just missing, you feel nothing. To continue the food analogy, its like you cant feel hunger. You abstractly know that you want to eat because eating is pleasurable -- youve experienced it before and would love to experience it again -- but you have no appetite, and that makes some lower level of your body feel indifferent or even averse to eating. Only when you land yourself in the exact right situation, usually by DumbLuck, will you suddenly start feeling hungry. Its difficult to avoid feeling broken when you find yourself avoiding everything related to romantic relationships because youre missing the hunger, yet still want one -- and this in turn makes you feel horrible about the whole thing and even more prone to avoid it.\n\nI think many demiromantic people likely can succeed by intentionally dating people who theyre not yet attracted to, but who seem interesting (maybe theres some ProtoAttraction), expecting that the powerful frame of “going on a couple of dates and trying to feel attracted to each other” will create some attraction. We might term this the “fake it till you make it” strategy. But this tends to feel, well, fake, and it doesnt have that high a success rate, which makes it horribly frustrating. It doesnt help that todays dating culture is so focused on instant connections. Half of people you like will dip if they dont feel an instant connection, so you find yourself losing matches that could have been great just because someone else is impatient and doesnt understand you, all the time.\n\nIve recently been finding that this approach works better for me than I used to think; the challenge of figuring out how this works and the fun of meeting interesting new people substitutes reasonably well for attraction in terms of creating interest at the beginning, and I can often begin feeling some forms of attraction after two or three dates. But in this I am lucky; many other demi people usually develop attraction much slower and dont have this luxury.\n\n{{Metadesire/p||PrivateChunk}}\n\n!! References\n\n\u003C$m2.x number1>\n\n> Damn, theyre hot! Id love to want to have sex with them.\n> —Reddit post|https://www.reddit.com/r/demisexuality/comments/14ynrjv/uh_im_very_confused_and_need_someone_to_talk/\n\n\u003C/$m2.x>\n\u003C$m2.x number2>\nIve commented before that the song “Dark-Eyed Molly|https://www.youtube.com/watch?v1d8BqAoXj24” gives me metadesire.\n\n\u003Ciframe width\600\ height\355\ src\https://www.youtube.com/embed/1d8BqAoXj24\ title\Dark Eyed Molly (Acoustic)\ frameborder\0\ allow\accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\ referrerpolicy\strict-origin-when-cross-origin\ allowfullscreen>\u003C/iframe>\n\n\u003C/$m2.x>},{title:Metafaith,created:20200313030631724,creator:soren,es:possible,modified:20210616020302477,modifier:soren,tags:Psychology SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Metafaith is, in plain terms, //faith in your ability to have faith//. That seems kind of silly at first, but when you dig in, you may begin to think its one of the most important skills for personal development and achievement.\n\nHeres why:\n\n# If you think you cant do something, you probably cant; if you think you can, it wont get you all the way there, but it certainly helps|SelfBelief.\n# Believing you can do something or that some principle or way of thinking is true enables you to more easily change your thoughts and mental models to adapt to a given situation. (Cf. BeliefAsInstrument.)\n# By (1), if you have a belief in your ability to believe, you can more easily believe things.\n# By (2) and (3), a belief in your ability to believe enables you to more readily change your thoughts and \u003C\u003Ctag MentalModel>>s.\n# Metafaith is a belief in your ability to believe (essentially).\n# By (4) and (5), metafaith is a source of adaptability, flexibility, and intelligence.\n\nI tentatively believe that metafaith can be developed, much like WillPower, by practicing believing in things and seeing that they work.},{title:Metaphor,created:20200406023911277,creator:soren,modified:20201204041547585,modifier:soren,tags:Definition Meta Public,type:text/vnd.tiddlywiki,text:The foundation of human thought and Reasoning: a means of comparing one thing to another through the use of language and association.},{title:MetaTags,created:20200819161504626,es:likely,modified:20210623021607379,tags:Information Public Idea,type:text/vnd.tiddlywiki,text://Meta tags// are a kind of anti-pattern in many systems that use tagging. Meta tags describe something other than the //content//. In the StackOverflow concept where they were originally described, these are things like `beginner` or `question` or `homework`.\n\nMeta tags can be a useful pattern in some systems, where the tags are used to attach miscellaneous metadata to an item. For instance, ZettelkastenCardTypes are arguably meta tags; so are the yellow maintenance tags. However, when the purpose of the tag is to describe the content, and it doesnt actually do that, thats where you have a gross meta tag. On StackOverflow, tags have no purpose beyond describing content.\n\nhttps://stackoverflow.blog/2010/08/07/the-death-of-meta-tags},{title:MetricBlackHole,created:20200411025547803,creator:soren,description:Certain things are much harder to measure than others, often resulting in incomplete data and bad decisions.,es:confident,modified:20220623011536958,modifier:soren,tags:Math Reasoning Public Idea,type:text/vnd.tiddlywiki,text:The metric black hole is a fantastic concept named by MrCalNewport in DeepWork (p. 55), but one of those things youve known about all along but never named and thought about as a unit (see HypoCognition and IdeaApi). \n\nThe metric black hole obviously consists of data that cannot be obtained. The critical insight is that we can obtain data on some things, but not on others, and that can leave us with a one-sided view of a problem which leads to LocalOptimization and poor decisions.\n\nA weaker and also common form of the black hole (the metric neutron star?) involves data that can be obtained but that requires a moderate amount of extra effort|TrivialInconvenience, significant enough that many people never bother to obtain it. In this case, sitting down and working things out may produce enlightenment.\n\nMany problems are a mix of hard-black-holed metrics and weaker ones.\n\n!! Examples\n\n* Being constantly interrupted is terrible for your productivity|RampantNotifications, but its impossible to clearly identify how much time is wasted by it. Its easy to identify how long urgent or semi-urgent things wait when people arent immediately interrupted, so that side tends to win out.\n* TechnicalDebt makes everything go slower, but its nearly impossible to prove how much slower. Any time you spend paying down that debt is time that you arent adding obvious features or bugfixes.\n* People rarely realize how expensive cars are to own and operate. They think of the monthly payment on their car as the price of acquiring the car and the ongoing gas bills as the cost of driving places. Finance costs, depreciation, maintenance, insurance, registration, parking tickets, opportunity costs, increased risk of accidents, and lost exercise from unnecessary driving are significant factors as well, but are either impossible to measure or rarely measured. (Houses and other property have a very similar problem.)},{title:Microfilm,created:20200911023211507,modified:20201204041547711,tags:Public Definition Idea,type:text/vnd.tiddlywiki,text:Analog archival medium wherein material is photographed, reduced in size (~20x is common), and placed on semi-transparent film for later review under a lighted, magnifying reader. Like MorseCode, has many virtues even though technology has largely passed it by: it is compact and extremely stable when stored in good conditions, and its always obvious how to read it. In a pinch, you can read it by holding it up to the light and putting a hand lens over it. Probably much more future-proof than any digital or paper format currently known.\n\nMicrofilm was the central medium of the Memex concept.},{title:MicrosoftAccess,created:20200521140242210,es:likely,modified:20200521140355704,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:User-friendly database intended for less technical people to get things going quickly. Popular in the nineties and naughts. Lost most of its userbase after that, for probably a multitude of reasons.\n\nThe main downside of Access was that it often grew through a BoilingFrogDevelopment process to accidentally become critical business infrastructure, as well as a size and scale that Access could not really support well. Even today, many businesses have ugly Access databases they cant get rid of.},{title:MicrosoftBuild,created:20200516165410714,modified:20230912032806505,tags:Public Idea,type:text/vnd.tiddlywiki,text:Popular yearly developer conference put on by M.|PrivatePerson, of course focusing around their technologies and tools.\n\nI attended MicrosoftBuild2020 (virtually).},{title:MicrosoftBuild2020,color:#6c6cff,created:20200518204414918,icon:$:/core/images/list-bullet,modified:20200706212351769,tags:Event Class Public,type:text/vnd.tiddlywiki,text:Technically there should probably be a \Conference\ type, but Im going to start with \u003C\u003Ctag Class>> since it already exists and is pretty similar, and then I dont have to go rebuild a bunch of metasource filters!\n\nThis event was supposed to happen in Seattle, but the pandemic|PandemicMood nixed that idea and it was held virtually. The benefit of a virtual conference is that you dont have to move between sessions, so you can go to a lot of them and dont have to run around the conference center. The downside of a virtual conference is that...there are a lot of sessions.\n\nVideo of most sessions, at least for the time being, is available at the session link, even if you are not registered for Build, and you can even download the video if you wish.\n\nI have compiled a MicrosoftBuild2020Overview for the benefit of visitors (and me, a couple years from now). This lists all of the most important announcements with links back to the sessions, as well as organizing some of the sessions by topic.\n\n!! Sessions\n\n\u003Cstyle>\ntable.msbuild-sessions tr td:nth-child(2) {\n\tmin-width: 9em;\n}\n\ntable.msbuild-sessions tr td:nth-child(3) {\n\tmax-width: 20em;\n}\n\u003C/style>\n\n\u003Ctable class\msbuild-sessions\>\n\t\u003Ctr>\n\t\t\u003Cth>Name\u003C/th>\n\t\t\u003Cth>Time\u003C/th>\n\t\t\u003Cth>Presenter(s)\u003C/th>\n\t\t\u003Cth>Web Link\u003C/th>\n\t\t\u003Cth>Processed?\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter\tagMicrosoftBuild2020tagSource!hasdraft.ofsortat\>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$link to{{!!title}}>{{!!caption}}\u003C/$link>\u003C/td>\n\t\t\t\u003Ctd>\u003C$view field\at\ format\date\ template\ddd 0MM/0DD 0hh:0mm\ />\u003C/td>\n\t\t\t\u003Ctd>{{!!presenter}}\u003C/td>\n\t\t\t\u003Ctd>\u003Ca class\tc-tiddlylink-external\ href{{!!url}}>Go\u003C/a>\u003C/td>\n\t\t\t\u003Ctd>\u003C$text text{{{ allcurrenttagNeedsExcisionthenNoelseYes }}}/>\u003C/td>\n\t\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>\n\n\u003C!-- Uncomment to allow conveniently adding new sessions\n\u003C$button>\n\t\u003C$action-sendmessage\n\t\t$message\tm-new-tiddler\\n\t\ttitle\Foo 20200520\\n\t\ttags\MicrosoftBuild2020 NeedsExcision Source\\n\t\tat\Time\\n\t\tpresenter\Presenter\\n\t\tcaption\SessionTitle\\n\t\ttext\{{||DoRenderBuild2020SessionDetails}}\/>\n\tNew Session\n\u003C/$button>\n-->\n\nOnce any ideas that need permanent storage have been removed, remove the \u003C\u003Ctag NeedsExcision>> tag and the tiddler will show as Processed.\n},{title:MicrosoftBuild2020Overview,created:20200706203709322,modified:20200706212015354,tags:Index MicrosoftBuild2020 Public,type:text/vnd.tiddlywiki,text:! Announcements\n\nHere are the most important announcements. The bit in square brackets at the end indicates the session(s) at which you can find more information.\n\n!! New stuff\n\n* CodeSpaces, a wicked-cool thing that lets you start editing code in a public repository using a self-contained VM -- basically you just click a button on the repository and it creates a development environment for you, even using your personal VisualStudioCode configuration. In public preview. EveryDeveloperIsWelcome20200519\n* Live Share -- two developers can work on the same IDE window at once. Works with Visual Studio and VSCode. In public preview. EveryDeveloperIsWelcome20200519\n* ProjectReunion: UWP Windows apps and old Win32 apps will be merged into a single set of APIs, which will maybe help encourage people to actually build new Windows desktop apps. Barely anybody has gone for UWP in the past because its not cross-platform compatible and hasnt worked with the existing toolsets. EmpoweringEveryDeveloper20200519\n* WinGet, a Windows package manager like those available for Linux and various programming languages, is under development. EveryDeveloperIsWelcome20200519\n* WindowsTerminal has gone out of beta, providing a decent CLI for Windows at last (but Federateds current version of Windows is too old to use it -- boo). EveryDeveloperIsWelcome20200519, WindowsTerminal20200520\n* The new Blazor framework is out of preview. It allows you to write full-stack web applications in pure C# within a single project (the front-end code compiles to WebAssembly). BlazorWebAssembly20200520\n* FluidFramework -- provides live components that can be inserted into Microsoft Teams, emails, documents, or anywhere else. You can edit the snippet shown in the component and it will update for other users and in other documents in real time. Its like Google Docs embedded in other things. BuildingToolsToWork20200519\n\n\n!! Rapidly expanding, reenvisioned, or significantly improved stuff\n\n* PowerPlatform -- includes Power BI (data analysis), PowerApps (low-code), and Power Virtual Agents/PowerAutomate (basically BluePrism) EmpoweringEveryDeveloper20200519\n* MicrosoftTeams -- MS is basically considering this the future hub of Office. EmpoweringEveryDeveloper20200519\n* MicrosoftGraph -- a single API to access common data across all Microsoft products (and anyone who creates a plugin), like user information, items in SharePoint, etc. Sort of like COM objects were supposed to be 25 years ago. BuildingToolsToWork20200519, PowerShellForGraph20200521\n* CognitiveSearch has gotten some major improvements. Its a way to take advantage of machine-learning techniques for tasks like searching, document ingestion, rankings, etc., without knowing anything about ML algorithms. CognitiveSearch20200520\n* The WindowsSubsystemForLinux has gotten even better, now using virtualization. WindowsTerminal20200520\n\n!! Miscellaneous\n\n* A set of tools are under development to produce less biased machine-learning models ResponsibleAiPanel20200519.\n* Microsoft has set an ambitious goal to have all their server farms carbon-neutral by 2020, and to pay back all of Microsofts carbon debt from the beginning of the company by 2050 (I assume this wont include the consumption of their //users//, though!). SustainableDataCenters20200520\n* M.|PrivatePerson and TheGitHub have acquired npm. EveryDeveloperIsWelcome20200519\n\n! Interesting breakout sessions by topic\n\nFind the list of all sessions on MicrosoftBuild2020; here are some of them that fit into broad topics you might be interested in.\n\n!!! DotNet\n\n* CSharpTodayAndTomorrow20200519 -- on the new C# 9\n* BlazorWebAssembly20200520 -- the new Blazor .NET webapp framework\n* WinServerContainers20200519 -- on containerizing .NET apps that run on servers\n\n!!! MachineLearning / AI|ArtificialIntelligence\n\n* CognitiveSearch20200520 -- Cognitive Search Azure tools\n* ResponsibleMachineLearning20200519 -- \responsible\ machine learning\n* ResponsibleAiPanel20200519 -- more on responsible machine learning\n\n!!! Ethics and social responsibility\n\n* SustainableSoftwareEngineering20200520 -- Principles of Sustainable Software Engineering\n* SustainableDataCenters20200520 -- Environmentally Sustainable Data Centers\n* WebForEveryone20200520 -- web accessibility topics\n* ResponsibleMachineLearning20200519 -- \responsible\ machine learning\n* ResponsibleAiPanel20200519 -- more on responsible machine learning\n\n!!! DevOps\n\n* AzureSecurityForDevs20200521 -- Azure Security Center (DevSecOps topic)\n* ArmTemplates20200520 -- InfrastructureAsCode in Azure\n* RemoteDevopsCulture20200520 -- on the benefits of DevOps in a work-from-home world\n* DevOpsStateOfNation20200521 -- panel discussion with some of the biggest names in DevOps\n},{title:MicrosoftGraph,created:20200521140729050,creator:soren,es:confident,modified:20211113032022756,modifier:soren,tags:MicrosoftBuild2020 Software Information Public Idea,type:text/vnd.tiddlywiki,text:Microsofts new tool for storing/sharing information about an organization in a highly machine-readable and integratable format.},{title:MicrosoftLearn,created:20200520021740163,modified:20200520021824845,tags:Resource Public Idea,type:text/vnd.tiddlywiki,url:https://docs.microsoft.com/en-us/learn/?WT.mc_idbuild2020-ch9-niner&WT.mc_idBuild2020_presentation_additionalresources,text:Microsoft learning center for courses on their services.\n\n{{!!url}}},{title:MicrosoftTeams,created:20200313131357728,modified:20200706222253683,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Collaboration tool much like Slack, but by Microsoft. Offers file collaboration, chat channels, a view of the organization, a crappy wiki functionality (nowadays I think pretty much every wiki is crappy except TiddlyWiki!) and various plugins.},{title:MicrosoftWindows,created:20200521140911131,modified:20200521140929850,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons flagship operating system.},{title:MicrosoftWord,created:20200425024416824,modified:20200425024427624,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:The most popular WordProcessor in existence, from M.|PrivatePersons office suite.},{title:MicroState,created:20200423025258704,modified:20200423025812204,tags:Politics Public Idea,type:text/vnd.tiddlywiki,text:Term for an extremely small autonomous country, e.g., Liechtenstein or Andorra.\n\nMrNickSlater wrote a fantastic article, EveryStateShouldBeAMicrostate201903, on some of the advantages this arrangement might offer now and in the future.},{title:MicrotransactionalDystopia,created:20200121033651455,creator:soren,es:likely,modified:20220113214045313,modifier:soren,tags:Design TheControlAltBackspace DystopianVision Public Idea,type:text/vnd.tiddlywiki,text:In a 2017 email to K.B.|PrivatePerson, I said:\n\n\u003C\u003C\u003C\nIf there’s any dystopian scenario I think is actually plausible in the near future, it’s that everything gradually turns into electronic microtransactions of socialization and information and of course money, so that everything completely loses all meaning. Maybe we’ll just all be replaced by robots and at least employers won’t have to worry about it...\n\u003C\u003C\u003C\n\nGenZ has the lowest rates of teen pregnancy in recent memory, gets in fewer fights, does less drugs...but rates of mental health problems are through the roof, and were seeing people graduate high school incompetent to be adults. Lots of people arent in a hurry to get their drivers license anymore. Theyre just sitting around on their phones.\n\nAnd BigTech is encouraging it. They dont say they do, and that was never their intention, but the RoadToHell is paved with good intentions. The fact is that RampantNotifications and AddictiveDesign are putting people in this position, and its a ViciousCircle because as all your friends fall into the position, as N.S.|PrivatePerson has pointed out in the past you get dragged into it if you still want to keep your friends -- or //any// friends, because good luck finding people of our age who dont use social media or dick around on their phones in social situations.\n\nWere all being dragged into a black hole, and if we dont find some way to reverse it, the path seems to me to lead pretty clearly to the microtransactional dystopia. Maybe resource starvation will kill it. Maybe people will realize whats happening and ban the technology, or start pushing back on it. But were on the road, and its up to us to figure out how to get off it. I will say that Im heartened by increased consciousness of the problem in the last year or two (2020).\n\nOne way to fight the dystopia is to assert the truth that the best code is NoCodeAtAll.\n\nCompare PayEverything on the pure money side of constant microtransactions.},{title:Middlemarch1872,author:George Eliot,bibliography:LifetimeReading,caption:Middlemarch,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035530,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1872},{title:Mildreds,created:20240811143539305,creator:soren,modified:20240811151702210,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MillCityMuseum,created:20231106161302987,creator:soren,gis-lat:44.978750920453564,gis-long:-93.25727827461957,gis-zoom:16,modified:20231106161314883,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MillEndsPark,created:20250623162337031,creator:soren,modified:20250623162337917,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Millennial,created:20200322035053422,creator:soren,es:confident,modified:20220201153644449,modifier:soren,tags:Definition Idea Public,type:text/vnd.tiddlywiki,text:American generation ending around my age (some definitions of \millennial\ put me outside of it, but I am pretty much indisputably culturally a millennial because I was not a very rebellious teenager and grew up as a comparatively conservative image of my parents more than many others at the time).\n\nThe most misunderstood and unfairly applied generational term at the time of this writing. Most problems or negative characteristics imputed to millennials (and of course its mostly the negative ones: see SelectiveApplication) are really structural problems, many of them brought about by GenX who is doing the complaining!\n\nFollowed by GenZ.},{title:MillRuinsPark,created:20231106161325602,creator:soren,gis-lat:44.97983005528291,gis-long:-93.25638576083453,gis-zoom:16,modified:20231106161403314,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MilwaukeeIntermodal,created:20240530224003442,creator:soren,modified:20240530224004206,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MilwaukeeWisconsin,created:20240402013155953,creator:soren,gis-lat:43.04293168142771,gis-long:-87.91516008004426,gis-zoom:7,modified:20240528134359977,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MindHacker,caption:Mindhacker,created:20200323032037918,creator:soren,format:paperback,isbn:9781118007525,medium:book,modified:20240227180756851,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Book by MrRonHaleEvans and MsMartyHaleEvans, discussing various effective LifeHacks and cool ideas.\n\nLed me to several other useful sources, including CompleteThoughtMapping2003, and was a prime influence in my taking up of PersonalDocumentation, which eventually led to the ZettelKasten and all that. Actually, few books that dont seem profound have been quite so influential for me -- this is the real deal, with valuable ideas written by a bunch of smart people, not a bunch of pointless tips.\n\n!! Table of Contents\n\nSometimes I like to reference something in here but dont have the book handy, so heres the TableOfContents.\n\n|!Category| !Number|!Title|!Notes|\n|Memory| 1|Remember to Remember||\n|Memory| 2|Build a Memory Dungeon|MethodOfLoci||\n|Memory| 3|Mix Up Your Facts||\n|Memory| 4|Space Your Repetitions|SpacedRepetition||\n|Memory| 5|Recall Long-Ago Events||\n|Learning| 6|Establish Your Canon||\n|Learning| 7|Write in Your Books||\n|Learning| 8|Read at Speed||\n|Learning| 9|Learn by Teaching||\n|Learning| 10|Play the Learning Game||\n|Learning| 11|Pretend Youre a Grad Student||\n|Learning| 12|Study Kid Stuff||\n|Information Processing| 13|Polyspecialize|Polyspecialization||\n|Information Processing| 14|Integrate Your Interests||\n|Information Processing| 15|Sift Your Ideas||\n|Information Processing| 16|Ask the Hive Mind||\n|Information Processing| 17|Write Magnificent Notes|MindHacker/WriteMagnificentNotes||\n|Time Management| 18|Keep a Mental Datebook||\n|Time Management| 19|Tell Time Whos Boss||\n|Time Management| 20|Meet MET||\n|Time Management| 21|Get Control of Yourself||\n|Time Management| 22|Locate Lost Items||\n|Time Management| 23|Huffman-Code Your Life||\n|Time Management| 24|Knock Off Work|Productive Procrastination|\n|Creativity and Productivity| 25|Manifest Yourself||\n|Creativity and Productivity| 26|Woo the Muse of the Odd||\n|Creativity and Productivity| 27|Seek Bad Examples||\n|Creativity and Productivity| 28|Turn a Job into a Game||\n|Creativity and Productivity| 29|Scrumble for Glory||\n|Creativity and Productivity| 30|Salvage a Vintage Hack||\n|Creativity and Productivity| 31|Mine the Future||\n|Creativity and Productivity| 32|Dare to Do No Permanent Damage||\n|Creativity and Productivity| 33|Make Happy Mistakes||\n|Creativity and Productivity| 34|Dont Know What Youre Doing||\n|Creativity and Productivity| 35|Ratchet||\n|Math and Logic| 36|Roll the Mental Dice||\n|Math and Logic| 37|Abduct Your Conclusions||\n|Math and Logic| 38|Think Clearly about Simple Errors||\n|Math and Logic| 39|Notate Personally||\n|Math and Logic| 40|Notate Wisely||\n|Math and Logic| 41|Engineer Your Results|MonteCarlo simulation|\n|Math and Logic| 42|Enter the Third Dimension||\n|Math and Logic| 43|Enter the Fourth Dimension||\n|Communication| 44|Spell it Out||\n|Communication| 45|Read Lips||\n|Communication| 46|Emote Precisely||\n|Communication| 47|Streamline Your Shorthand||\n|Communication| 48|Communicate Multimodally||\n|Communication| 49|Mediate Your Environment||\n|Mental Fitness| 50|Acquire a Taste||\n|Mental Fitness| 51|Try Something New Daily||\n|Mental Fitness| 52|Metabehave Yourself||\n|Mental Fitness| 53|Train Your Fluid Intelligence||\n|Mental Fitness| 54|Think, Try, Learn||\n|Mental Fitness| 55|Take the One-Question IQ Test||\n|Clarity| 56|Cultivate Beginners Mind||\n|Clarity| 57|Take a Semantic Pause||\n|Clarity| 58|Retreat and Reboot||\n|Clarity| 59|Get Used to Losing||\n|Clarity| 60|Trust Your Intelligence (and Everyone Elses)||},{title:MindLikeWater,created:20210902145530985,creator:soren,description:Strive to give exactly the right amount of reaction to every event.,es:likely,modified:20210902152212666,modifier:soren,tags:Idea Productivity Psychology Public,type:text/vnd.tiddlywiki,text:From GettingThingsDone: Most people either over- or under-react to most things, including new information and prioritized tasks. Things are either pants-on-fire urgent or “will happen someday.” One should instead strive for exactly right|ModerationAndBalance, like water when something is thrown into it: it ripples an appropriate amount to make room, then returns unhurriedly and smoothly to its original state.\n\nBeing able to have a mind like water requires keeping it empty and calm, so you can focus on exactly one thing at a time. Having a clear inventory of your responsibilities and avoiding pointless interruptions|RampantNotifications can help with this. It also requires taking time away from actually doing things to sit down and consider whats important and how those things should best be done; combining these stages usually ends in failure, or at least suboptimal choices like HammeringHarder.},{title:MinimalismVsEfficientLife,created:20231126214603715,creator:soren,description:My EfficientLife philosophy shares some ideas with minimalism, but has some significant differences as well.,es:confident,modified:20231127211219874,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:My EfficientLife philosophy is somewhat confusable with minimalism, but I see them as somewhat different.\n\nIn minimalism, the terminal goal is having the smallest possible amount of stuff. In life efficiency, the terminal goal is spending all of your resources -- time, money, environmental impact, social capital -- wisely, not wasting them on anything that doesnt add value to your life.\n\nOften, spending your resources wisely means having less, because people tend to accumulate stuff that does not benefit them in any meaningful way. But the fact that you tend to end up with a smaller total amount of stuff is a side effect, not an essential part of the philosophy.},{title:MinimalTagging,created:20200202005157735,creator:soren,es:likely,modified:20210810182528615,modifier:soren,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Tags (and hierarchical folders, for that matter) should be used AsMuchAsNeededAndAsLittleAsPossible. Having too many means you spend a large proportion of your time dealing with the metadata, while simultaneously having to wade through a bunch of metadata to use the system. Having too few means you dont feel like you can find anything.\n\nThe right balance can be a real challenge. This wiki needs work on that, too!\n\nHapaxLegomena|HapaxLegomenon are particularly difficult. You may not know you need a tag until a couple things have it, but tags with one element are next to worthless and, just like hapax legomena in word-based corpuses, will often end up making up half your total tag load. A good way to sort the tags, even just a tag cloud, could be helpful if the software supports it.\n\nTaggingForPersonalKnowledge20190109 argues that the issue is not so much number but the purpose of the tags: FunctionalVersusTopicalTags. There is likely some merit in both approaches.\n\n},{title:MinimumViableProduct,created:20200512034546316,es:confident,modified:20210510011317997,tags:Business Public AgilePhilosophy Idea,type:text/vnd.tiddlywiki,text:AgilePhilosophy-related term for the smallest unit of work which you can push out the door on a new project and still get value for. It is the starting point of an IncrementalAndIterative process: you start with the minimum, then as you start seeing value from that, you improve it based on both your original plans and your experience of the trial.\n\nCf. WorseIsBetter.},{title:Minneapolis,created:20201203004150490,creator:soren,gis-lat:44.97906772516332,gis-long:-93.26492058904705,gis-zoom:11,modified:20240109032418731,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Western centerpoint of the TwinCities metropolitan area (with StPaul on the other side).\n\nIve lived here for several years and recently committed|CommittingToMinneapolis to staying long-term.},{title:MinneapolisInstituteOfArt,created:20230507185659865,creator:soren,gis-lat:44.958496675710656,gis-long:-93.27323846777183,gis-zoom:14,modified:20240104234449522,modifier:soren,tags:Public Place,type:text/vnd.tiddlywiki},{title:MinnehahaFalls,created:20240402013423951,creator:soren,modified:20240402013430967,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MinnesotaGoodbye,created:20230416032601921,creator:soren,modified:20240616041155992,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:MinnesotaNice,created:20240211231824168,creator:soren,modified:20240616041204428,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:MinnesotaStatePark,color:#6c6cff,created:20200425034858882,icon:$:/core/images/list-bullet,modified:20210807151658122,refexplorer-starttab:Places,tags:Index Public,type:text/vnd.tiddlywiki,text:This project aims to catalog all of the Minnesota state parks I have visited and gather useful information on them. See the ReferenceExplorer for a list. Pseudo-parks (e.g., state forests) may also be included.\n\n--------\n\n\u003C$button>\n \u003C$action-sendmessage\n $message\tm-new-tiddler\\n title\New State Park\\n tags\Place MinnesotaStatePark Public\\n\t\tcaption\{Name} State Park\\n\t\tphone\{phone}\\n\t\tforeignid\{id on the DNR page}\\n />\n\tAdd Park\n\u003C/$button>\n\nThe following fields should be included in a new park:\n\n* `caption` -- friendly name of the park, ending in //State Park//\n* `foreignid` -- the numeric portion of the ID on the DNR web page, found at the end of the URL; go here|https://www.dnr.state.mn.us/state_parks/list_alpha.html for the list of parks\n* `phone` -- park office phone number, if known, in `(nnn) nnn-nnnn` format\n* `gis-lat`, `gis-long`, `gis-zoom` -- use the place add function\n* `gis-address` -- should be available on the parks DNR page\n\nThen click the add buttons to add additional detail tiddlers as appropriate. The publicity level is automatically set for each of those as appropriate.},{title:MinorConvenience,created:20220118004226695,creator:soren,es:confident,modified:20230405130333421,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Its surprisingly powerful to obtain //minor conveniences// for oneself. These are devices, processes, or skills which make some tiny thing much easier. Logically, they make very little difference in the grand scheme of things, but emotionally, theyre experienced as making your life significantly better.\n\nI think this works because modern life is so complicated, all the small inconveniences create a DeathByAThousandPaperCuts situation. Every small inconvenience you can knock off is one fewer thing you need to worry about, so you preserve your ScarceAttention for things that you enjoy more or that feel truly important.\n\nTo work, minor conveniences need to be at least semi-permanent (MakeItNeverComeBack). A minor convenience that only works one time or a couple of times is indeed insignificant. Put another way, valuable minor conveniences dont WalkBackwards.\n\nLifeHacks are a type of minor convenience; I would argue the definition is primarily limited to skills, and to a lesser extent processes.\n\nTrivialInconveniences are not exactly the opposite of minor conveniences, since the term usually refers to a specific type of annoyance that blocks you from doing something entirely by demotivating you, but they are related in some way approaching opposites.\n\nExamples:\n\n* Buying an indoor/outdoor thermometer so you dont have to look up the weather forecast to know what to wear before leaving your home (average time savings: 10 seconds).\n* Memorizing small pieces of infrequently used information like simple recipes or locations of businesses, so you dont have to stop and look them up.\n* Learning how to tie your shoes faster|https://www.fieggen.com/shoelace/ianknot.htm (average time savings: 2 seconds).\n* Getting a dishwasher, even if you dont have enough dishes to wash to make it obviously save time.\n\nSee MiscellaneousLifeTips for more examples.},{title:MiscellaneousLifeTips,created:20211229031946774,creator:soren,es:confident,modified:20250726214431036,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:This tiddler collects random useful, non-obvious things Ive learned about my life that others might also find helpful. Items are in no particular order. If this becomes big, Ill reorganize then (Im just getting started|JustGetStarted!).\n\n* Always put yourself on the wait list: if you get told that theres no space left and its something you want to do, dont beat yourself up, just ask if you can get on the list or start one. If its a large group like a class or a retreat or whatever, someone virtually //always// drops out, and the spots go to the people who understand this and take ten seconds to ask if they can go on the list. Once youre on the list, make other plans...but dont expect to need them; youll probably get a call an hour after the start time saying theres a space for you.\u003C\u003Cfnote \Obviously, this doesnt apply so much to things that are ridiculously popular so they have a years-long wait list. While you //will// probably get in eventually, that often doesnt help much! Im talking about cases where the demand is just a bit higher than could be supplied -- which are extremely common.\>>\n* When leaving a voicemail, when its time to give your callback number, say the number, then finish out anything you havent said yet and add a pleasantry or two, then say “Again, thats...” and read the number one more time just before saying goodbye. This way, if you send them scrambling to grab a piece of paper, or they mishear it the first time, they get a second chance to write it down without having to listen to the whole message again or figure out how to rewind it.\n* It is virtually never necessary to double-knot your shoelaces to keep them from coming untied. Most people who have this problem either tie the knot incorrectly|https://www.fieggen.com/shoelace/grannyknot.htm or simply are not pulling it tight enough to keep it in place. Make sure you dont tie the “granny knot” as described in the link above, and give the loops a good hard pull when youre finished tying.\n** Some types of rounded, synthetic shoelaces are legitimately so slippery that they can still come untied. To deal with these, learn the secure shoelace knot|https://www.fieggen.com/shoelace/secureknot.htm -- its no harder to tie than a double knot once you learn it, and unlike the double knot it can still be trivially released by pulling one of the ends. Its also even stronger than the double knot – Ive never seen it come out by itself, while double knots occasionally still can.\n* To easily keep track of how many times youve worn a dress shirt (and thus roughly when it needs to be laundered): In addition to buttoning the collar button when you hang the shirt, button one other button a number of buttonholes down corresponding to the number of times youve worn it. So when its freshly laundered, you button only the collar; the first time you put it back after wearing it, you button the collar and the button below it; the second time, the collar and the button two below it; and so on (but I usually launder mine after three wears).\n** It might seem like this is useless because you need this information //after// you wear the shirt, while this method only provides the information to you //before// you wear the shirt, but I find I rarely have any trouble remembering how many buttons were buttoned in the morning throughout the day.\n* To mix non-homogenized or “natural” peanut butter\u003C\u003Cfnote \While this looks like a fru-fru health food on the shelf, I find its just plain tastier and a more pleasant texture than the homogenized kind.\>> thats been sitting for a long time: before stirring it, turn it upside down and wait 12–24 hours. This causes it to mostly remix itself as the separated oil migrates upwards through the heavier parts. What doesnt completely mix will be at the bottom instead of the top once you flip it over and reopen it, so you can give it a vigorous stir without the oil spilling over the top.\n* You can silence almost any mobile phone thats ringing by pressing one of the volume buttons. You can even do this with your phone in your pocket, if it goes off at an inappropriate time. This doesnt reject the call, it just mutes the ringer, so you can even press it as soon as it has your attention, leave the room, and then answer the phone.\n* In many places, including the US, passcodes provide stronger legal security than biometrics. Thats because law enforcement is allowed to force you to unlock your phone using a fingerprint or face recognition, but cant force you to reveal your password. However, for most people who arent regularly in conflict with authorities, the inconvenience of typing a passcode every time is not worth this minor benefit. To bridge the gap, Apple has offered a low-key “panic button” on iPhones for a few years to help users temporarily disable Face ID or Touch ID before they interact with police, border guards, etc. If you hold down the lock button and volume-up button like youre going to turn the phone off, as soon as the power/SOS menu appears, the encryption keys are immediately wiped from memory so the passcode is required on the next unlock. The phone also vibrates momentarily when you do this, so you can do this with the phone in your pocket and know that its succeeded.\n* When using a tool, ask yourself “What would happen if this tool went too far|ToolGoesTooFar?” This is a quick and easy way to catch yourself doing something stupid that could injure you.\n* The best all-purpose way to join two lengths of rope or cord is the Zeppelin Bend|https://www.animatedknots.com/zeppelin-bend-knot.\u003C\u003Cfnote \The story goes that its so called because the knot was used to moor airships, but this is almost certainly apocryphal. First of all, why would you moor an airship by tying the ends of two ropes together? It also cant be untied under load, so youd have to saw through the rope to unmoor the airship.\>> There is almost nothing wrong with this knot, yet somehow hardly anybody knows about it. Its fast and easy to tie,\u003C\u003Cfnote \The Animated Knots page doesnt include the helpful mnemonic “69”: make a “6” with the rope in your left hand, passing the short working end over the top of the 6, and make a “9” with the rope in your right hand, passing the short working end under the 9. Then put the 6 on top of the 9, pass both the working ends through the hole (the 6s working end going down around the side of the knot and back up through the hole, and the 9s working end coming up around and back down), and pull tight (pull alternately on both working ends and both tag ends until it firms up).\>> almost impossible to tie incorrectly once you know how, stays tight under any load, and always remains easy to untie afterwards.\n** The only other bend I ever use nowadays is the sheet bend, which is occasionally better because it allows tying non-critical loads with a ridiculously small amount of slack if you run out, and because it holds well with ropes of unequal diameter.\n* Green salads are usually easier to eat with chopsticks than with a fork. (This is because when you pick up a forkful of salad, you lose the ability to manipulate it any further without it falling off your fork. With chopsticks, you can continue to rotate and move the lettuce around in any dimension necessary to comfortably get it in your mouth.)\n* To carry duct tape or (better) gaffers tape with you anywhere you go, wrap a few turns around an old credit or club card. My favorite use so far was helping someone cover up an outlet on an Amtrak train that had a broken-off live plug stuck in it...with a very jumpy kid sitting next to it.\n* Most people who dont have special medical needs can comfortably travel for an indefinite amount of time with a single moderately sized backpack once they learn how|https://onebag.com. This is both a rewarding discipline|TravelingLightAsSpiritualDiscipline and a way to make traveling vastly easier and more enjoyable.\n\n\n!! Useful items to own\n\n* Digital voice recorder -- incredibly handy for capturing stray thoughts when its inconvenient or dangerous to write them down or act on them, especially when in bed or while driving. (Yes, your phone has a voice memos app, but do you want to be fumbling for that while youre driving? On a hardware recorder you just push the “record” button on the front, which you can do without looking or in the dark.)\n* Indoor/outdoor thermometer -- if you live in a place where the temperature outside changes dramatically from day to day or even hour to hour, the ability to know exactly what temperature it is outside before walking out is important. You can look at the weather forecast on your phone or computer, of course, but having the temperature displayed on a big screen saves you a step and a few seconds every time you go outside. (Secondary tip: I prefer the older wired kind in most cases -- you have to put it near the window and find a way to sneak the wire through it, but then there are no batteries to change and the outdoor station never has trouble connecting. It also still works great if you live in an apartment and dont own a slice of the outdoors large enough to put a sensor -- the wired probe will sit neatly on your windowsill.)\n* Bidet attachment -- Bidet attachments for your toilet are, compared to toilet paper, faster, cheaper, easier, more sanitary, more comfortable, more effective, and better for the environment.\u003C\u003Cfnote \Amusingly, some estimates find that bidets even use //less water// than toilet paper, because paper production uses a lot of water.\>> Toilet paper is a great choice if youre sitting in an outhouse in the wilderness, but why are we using it in twenty-first-century urban bathrooms? Literally the only reason not to prefer a bidet that I can think of is that youre not used to it. You can get one online for $25--$50 (which youll make back in savings on toilet paper within the year) and reversibly install it by yourself in under ten minutes (if you can read directions and use a wrench, youre set).\n** If you have too much pocket change and want to be really fancy, you can always get one of those Japanese toilet seats that costs $1,000 and has 20 buttons on it. But just a simple two-knob cold-water faucet is much better than toilet paper on all dimensions listed above. You might think it would be freezing cold in the winter, but for whatever reason you cant feel the temperature very much down there.\n** For those truly dedicated to bidet use, Tushy makes a micro (130 g, less than 3 inches square) travel version|https://www.amazon.com/gp/product/B09DYYKVRH/.\n* Colored Ethernet cables -- if you have a few devices connected to your home router, buy a set of cables that are different colors and use one color for each device. This makes it trivial to figure out where each cable goes and what its connected to; its even better than labels because you can distinguish the entire route of the cable, not just the ends. The same thing goes for audio cables.\n* Standalone Ethernet switch -- if you have any significant number of hard-wired computers on your home network, youre often forced to put your wi-fi router right next to them (and maybe put the //devices// next to the wi-fi router, if the wall jack from your ISP is in an awkward place), or run a large number of long cables. You can get a good-quality 8-port switch for less than $50 and run just one cable between the switch and your router, then you can put the router where it makes sense and the wired devices where they make sense. I cant believe I waited so long!\n* Travel blanket -- A small, light blanket, large sarong, or Turkish towel (depending on personal preference) is an extremely useful item to add to your backpack, whether youre traveling or just going around town. You can use it as a blanket, of course, whether to keep warm in an over-air-conditioned space, get extra comfy, or sit down on the ground somewhere. But you can also use it as a towel, a seat pad, a makeshift bag, a scarf,\u003C\u003Cfnote \Lighter cloth is better for this, of course. You could probably get away with using a thin wool blanket like the one I carry as a bandanna, but a fuzzy blanket wouldnt work so well.\>> and more. A piece of cloth is remarkably useful!\n* Instant hot water dispenser -- If you drink a lot of hot beverages, pick up a boiler like the ones from Zojirushi|https://www.amazon.com/Zojirushi-CD-WCC40-Boiler-Warmer-Silver/dp/B01LWMWU59/; or In-Sink-Erator makes some under-sink models that dispense from a separate tap. For less than $200, youll have water ready at the press of a button at all times. It saves time not just when making tea, but also pasta, steamed vegetables, soup, etc.\n** I used to think these would be a huge waste of energy for a small household -- but actually they have a nearly insignificant average energy draw of just a couple LED lightbulbs. If the cost of the device doesnt bother you, the cost of the energy wont either. When you go to bed or leave for work, you can set a timer so itll shut off for a few hours but be ready when you need it again.\n** I put mine next to the sink so the pull-out faucet hose reaches over to the tank, making it super easy to refill.\n},{title:MissedRent,created:20200403024256220,creator:soren,es:confident,modified:20210523154121866,modifier:soren,tags:Economics Anecdote PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:On April 1, 2020, as I was headed to bed, I got my usual monthly text message telling me $575.00 was debited from my checking account for my CrystalApartment rent. And I got to thinking...//how many people// didnt pay their rent on this day? Literally, millions of people across the world did not pay their rent. Probably tens of millions. Maybe over a hundred million.\n\nThat is insane. Its hard to know what the effect will be on the economy because Im fairly sure its unprecedented. The only other pandemic Im aware of thats hit everyone at the same time and shut everything down was the Spanish Flu, and the SF was so different because it was at the end of WorldWarOne and everything is different in wartime, especially when everyone is incredibly tired of the War to End All Wars. The BlackDeath was much worse, overall; but because everything was so less interconnected at that time, it was spread over a long period of time. Still killed a ton of people and had serious effects on history, but the whole world didnt fall apart //at once//.\n\nAn impressive SystemicDisaster, this is.},{title:MissingBeautyBeforeTheNose,created:20200304020058529,es:confident,modified:20210623021708002,tags:Imagination PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Originally from my OleChoirSeniorDevo.\n\nIn the story of the RoadToEmmaus, the idea of missing things right in front of our noses is taken so far it becomes funny: the disciples|ImplausibleCharacter are walking along in despair over MrJesusChrist’s death, and Jesus himself shows up and they don’t recognize him. They walk with Jesus for what must be at least several miles, talking to Jesus about Jesus, and they still don’t recognize him.\n\nI’ve seen this with the StOlafChristmasFestival. My first year on Saturday night there was this long pause after the lights came up at the end of Beautiful Savior, and as I stood there trying to keep myself together and treasure that silence, this guy near me whispered something about how stupid the audience was for not clapping on cue. And then my sophomore year after the performance on Friday night, I was just about to head up the stairs from Skoglund when I noticed my shoe was untied and stopped to fix it. As I did, I overheard one girl from Manitou|TheManitouSingers saying to another, “I’m so emotional tonight. I don’t know why.”\n\nI didn’t know the people in these stories at the time, and I apologize if one of them is you! But actually I think it would be quite appropriate if one of those people was you. Because it’s not just the freshmen I’m picking on who miss things, and it’s not just Jesus’ stereotypically clueless disciples. The point is that all of us, including me, miss the point of our experiences every day.\n\nWe can’t keep everything with us forever, and we can’t avoid being oblivious once in a while. But we can work to keep our eyes more open, and we can enjoy what we have while we have it, and let it change us. Whether this is your first Fest or your last, pay attention, and be ready to accept whatever this program has to offer you.},{title:MissingFictionalContext,created:20200126000937105,es:confident,modified:20240320214749227,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:ImplicitFictionalContext states that many, many facts about a fictional world go unstated and unsubstantiated. Many of these are incredibly obvious and largely uninteresting things, like \the acceleration due to gravity is approximately 9.81 m/s^^2^^\.\n\nOthers, however, are far more specific. They require knowledge of history or popular culture or other areas to understand. For instance, since HaroldAndMaude1971 is on my mind right now, MsMaudeChardin has a concentration-camp tattoo; this went over my head until I was reading something else which referred to it. In this case other facts about Maude enabled me to realize she was likely ensnared in the Nazi regime, so I only lost some of the context, but in other cases its much broader. For instance, many people say they read the entire ChroniclesOfNarnia as kids without realizing it was a Christian allegory. This kind of thing can change the readers entire understanding of the work! (I know Lewis claims he doesnt consider it an allegory, but at any rate it is a major feature of the series.)\n\nThe remaining question is, to what extent does that impact the actual meaning of the canonical source? Much recent literary theory would have us say that a text only has meaning in the context of the mind of its reader, but surely we cant say that Narnia is potentially not a Christian allegory? The reader who doesnt see it must just be //missing// something. Yet, that meaning hasnt been communicated to them, and to them it is arguably a totally different work. Cf. CooperativeGeneration.},{title:MissingGitkDocumentation,bibliography:Git,caption:the missing gitk documentation,created:20201230172435527,description:Walkthrough of some non-obvious and wicked-cool things you can do in the gitk graphical history browser that comes with Git.,medium:website,modified:20201230172909018,tags:Source Public,type:text/vnd.tiddlywiki,url:https://gitolite.com/gitk.html,year:2020,text:{{!!description}}},{title:MissingPastParticiple,created:20200808022025994,es:confident,modified:20210623021723086,tags:Language Public Idea,type:text/vnd.tiddlywiki,text:A common and curious (but exceedingly annoying if you dont share it) variation in Midwestern US English, in which the speaker uses the simple past tense as the past participle. For example, someone following this pattern might say, “I havent went to work since the pandemic|PandemicMood started,” rather than “havent gone.”\n\nMy parents say this is common in Iowa, but Ive seen it from people as far afield as Wisconsin and Indiana.},{title:MissingTiddlerPhilosophy,created:20200715015007175,creator:soren,description:A Zettelkasten will always contain missing links and incomplete ideas, and this is okay and even good.,es:confident,modified:20241020174858396,modifier:soren,tags:PersonalDocumentation Information Public Favorites Idea,type:text/vnd.tiddlywiki,text:When I first started MosaicMuse, I was insistent on clearing up all of the “Missing” tiddlers by adding some information to them. It seemed like they were //clutter//. Or I had an incomplete system. Or I hadnt finished. Or if I didnt have something there, then I wouldnt know if I had discovered a connection. And it felt untidy to have less than a descriptive sentence or two.\n\nIt would be overreacting to say a descriptive sentence or two is always a bad idea, but I now think this is a misguided general philosophy. //Tagging// them at least by ZettelkastenCardType might be helpful so they exist and show up on the right section of the ReferenceExplorer (I do this particularly with PAO and Place nodes, and have added some “quick create stub” buttons that appear in missing tiddlers for this purpose), but even that isnt necessarily all that important.\n\nFirst of all, its often a plain old waste of time, or gold-plating|OverEngineering. If I link some random place, it could well be that I never make another reference to it at all. And most of the time, when creating the “stub” entries, there is little useful information to put there because Im not Wikipedia and dont care to expound on someones biography or the civic life of a small town in Wisconsin unless its relevant to an idea -- but I end up spending my limited time on earth writing an extremely blah summary that I could improve upon by typing the title of the tiddler into the address bar of my browser should I somehow actually have forgotten the context.\n\nSecond, theres actually quite a bit of context provided by backlinks already, as Ive found trying to go back and figure out what was meant by some of the important missing tiddlers. ConceptWeb links are really pretty powerful. MrAndyMatuschak has explained this as implicit definition|ImplicitlyDefinedNode of an idea (see link for further detail). This can make the summary superfluous -- youd get more just from looking at the backlinks.\n\nLast, and more philosophically but maybe just as importantly, it suggests that everything ought to be perfect, written, properly slotted into position right from the start, while really Perfection is impossible even at the end. (As T.S. Eliot|MrTsEliot would have us remember, “What we call the beginning is often the end.”) Im reminded of MrLionKimbros suggestion in CompleteThoughtMapping2003 to “intentionally fuck up the page|IntentionalSpoiling” if you get too focused on everything being neat and perfect.\n\nOr as MyLillianAndSylvia says of both belonging and perfection:\n\n> It was Lillians conception of belonging that was broken, or perhaps to make things more confusing and more poetic //imperfect//. She wanted everything to have a place. She wanted to be in the //right// place herself. Was this the //right// place? ...\n> I think, said Sylvia, seemingly continuing Lillians line of thought despite her not having voiced any of it, that only emerges on a larger scale|EmergentStructure.\n\nMan, that did get pretty philosophical. But then, its even in the title.\n\n\n!! Antiknowledge\n\nYou could even argue that missing tiddlers are more valuable than completed ones, or at least valuable in a different way -- a form of antilibrary|https://en.wikipedia.org/wiki/Antilibrary (term due to NNT|MrNassimNicholasTaleb and Umberto Eco|MrUmbertoEco). In the antilibrary concept, the argument is that owning a book you have read is less valuable than one you have not yet read, since the latter contains more new information at your fingertips than the former. Similarly, missing tiddlers are full of possibility, an invitation to think: what are you going to fill this space with? Complete tiddlers are only a record of what youve already thought, and much of that thinking is probably still in your head somewhere. (Of course, most tiddlers in a ZettelKasten-like resource are somewhere in between, containing information but still by design being open for further extension and linking.)},{title:MissingUniversalHumanExperiences2014,author:Scott Alexander,caption:What Universal Human Experiences Are You Missing Without Realizing It?,created:20200824115845397,creator:soren,medium:article,modified:20220502164935318,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://slatestarcodex.com/2014/03/17/what-universal-human-experiences-are-you-missing-without-realizing-it/,year:2014,text:SlateStarCodex article on how difficult it is to describe subjective mental experiences, or even realize that were different in some way from most in this sense. There is a particularly compelling example in which someone was congenitally anosmic|Anosmia and didnt realize it until age 14, assuming he knew what smell was and talking about how things smelled until one day when he sat down and tried to think about what a peach smelled like for an English assignment and realized he absolutely had no idea what smelling was like. Consider also the Redditor who apparently thought everyone got really turned on by exercise|https://www.reddit.com/r/tifu/comments/l80g8l/tifu_by_mistakenly_believing_exercise_turns_you/, which, like, why //wouldnt// you assume that applied to everyone if it did to you? Thats why this is so fascinating, because so often there is no reason you would ever question yourself when its your lived experience and nobody ever talks about it (because nobody else knows its a thing).\n\nI started putting together a list of MyUnusualMentalExperiences after reading this.},{title:MistakenIdentity,created:20200322161741226,creator:soren,modified:20210812021617195,modifier:soren,tags:Definition Idea Public,type:text/vnd.tiddlywiki},{title:MitchellParkDomes,created:20240530224449387,creator:soren,modified:20240530224450165,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MitchellPointTunnels,created:20250618153307419,creator:soren,modified:20250618153308117,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MixedPractice,created:20200811034104829,creator:soren,modified:20240616041210757,modifier:soren,tags:Stub Idea Public,type:text/vnd.tiddlywiki,text:https://en.wikipedia.org/wiki/Varied_practice\n\nMentioned in https://controlaltbackspace.org/memory/organizing-your-cards/\n\nSee also BloomsTwoSigmaProblem -- but research how strong},{title:MnemonicLoci,created:20200410133252018,creator:soren,es:confident,modified:20230416161125863,modifier:soren,tags:Information Memory Public Idea,type:text/vnd.tiddlywiki,text:MnemonicTechnique involving visualizing ideas as objects or scenes (ideally strange and memorable ones) and mentally placing them in predetermined locations along a \walk\ which you then follow to remember the information.},{title:MnemonicMajorSystem,created:20200410132658707,creator:soren,es:confident,modified:20230416161133802,modifier:soren,tags:Memory Public Idea,type:text/vnd.tiddlywiki,text:MnemonicTechnique involving forming meaningful words and phrases from numbers. The digits from 0 to 9 are mapped to a consonant class each (voiced and unvoiced and other similar consonants are considered equivalent). Vowels and consonants from the remaining classes have no meaning and can be inserted anywhere they help form interesting words.\n\nIts important to note the system is 100% //phonetic//; while the mappings are often written as letters because thats how writing works, this can become a confusing difference at times due to the complexity of English orthography!\n\n{{MnemonicMajorSystem/p||PrivateChunk}}},{title:MnemonicMedium,created:20200423022633924,creator:soren,es:likely,modified:20240829193543768,modifier:soren,tags:Software Information Memory Public Idea NeedsAttention,type:text/vnd.tiddlywiki,text:(Needs attention: Ive done a lot more with this since I wrote this, needs an update!)\n\nSystem of MrAndyMatuschak in which SpacedRepetition flashcards of concepts are integrated with reading material presented in a traditional linear fashion. QuantumCountry is a fully-functional prototype (with MrMichaelNielsen).\n\nThis tool seems to have several implications that go well beyond simply “remembering what you read”:\n\n* Both linear and tiddly|LinearVsTiddly organization is used, albeit with the tiddly part being implemented in your brain, each doing what it does best: linear to explain a new topic along a clear path, tiddly to represent the material in an accessible way. (It would be interesting to see what would happen if the flashcards were also physically linked together in a tiddly style.)\n* Its not nearly as necessary to read the content all at once, if its been written well and youre doing your reviews, because the vast majority of the previous context has been automatically preserved.\n* Thus, you can make reading a single source into an IterativeProcess where you can stop at any point you like, without having to do the legwork yourself of returning to the source, finding different levels of sources, etc.\n* You are forced to perform ElaborativeEncoding as you go, meaning you end up with stronger memories and a more interconnected understanding of the material.\n\nIdeas on the future implementation and logistics of this, many arising from a discussion with M.|PrivatePerson and P.|PrivatePerson 2020-04-22:\n\n* To do a good job and produce cards of high AnkiCardQuality, the author needs to understand spaced repetition solidly, the TwentyRules at the very least. See GoodSharedFlashcards.\n* Ideally in the future, the system would export in a standard SpacedRepetitionInterchangeFormat into whatever spaced-repetition system you wanted to use, once you had finished the read-through.\n* The system needs to (Im pretty sure it presently does) link back to the original context //from the card//. This helps to mitigate the SpacedRepetitionEncouragesFloatingIdeas pathology.\n* And ideally, there should be a way to //update// the ideas if they change in the original. For instance, an error might have been discovered, or a piece of factual information went out of date.\n\nI was inspired enough by this idea to create TiddlyRemember, which can link TiddlyWiki notes to Anki notes in the manner described. I am considering the use of TwDynamicNoteGeneration to implement a mnemonic medium in TiddlyWiki, perhaps something I could try out with my TiddlyWiki introduction book. This would require more user effort to set up than Matuschaks system, which just requires signing up for a related web service, but would integrate with existing open systems (and I wouldnt be too jazzed about using his system unless it has a method to export notes to Anki, because of the FifteenCompetingStandards problem).},{title:MnemonicMediumAsTdd,created:20210614170005046,es:possible,modified:20210628023716944,tags:Information Learning Writing Public Idea,type:text/vnd.tiddlywiki,text:A meta-essay about the MapsAndMetarationality essay discusses the possibility that MnemonicMedium questions could be used like TestDrivenDevelopment. What, as you write the essay, do you want to achieve? Those are your questions, or a form of them that can eventually develop into finely tuned spaced-repetition questions. Then, how do you produce the understanding that moves towards them?\n\nPresumably one would interleave tweaking the questions and improving the essay, as one does in TDD.\n\nThe main challenge here appears to be, how do you complete the analogy by actually //testing//? This is in fact one of the main challenges of writing, but in my experience especially of writing for the MM. As an MM author, its just about impossible to accurately model how users will respond to your prompts (hell, I cant even accurately model how //I// will respond to my prompts when Im writing them; it usually takes a couple rounds of review to get them figured out). This makes it challenging to judge whether your essay has adequately supplied the understanding needed to answer the questions.\n\nThe obvious answer is, duh, you have users try the essay/book/section; but most of us dont have an infinite supply of interested and engaged readers to read dense texts and try memorizing them with spaced repetition at a reasonable cost, and anyway it takes at least a couple of weeks to get the full results in, which makes the iterations|IterativeProcess so slow that its difficult to get anything done. We certainly cant get 5-second feedback cycles like we can in TDD. (BTW, if you have a job opportunity writing mnemonic texts on topics Im an expert in and have such an infinite supply of engaged readers, please give me a holler. I will cheerfully work for you on great terms!)\n\nMrAndyMatuschak has called the information encoded by the questions a “reflected essay” (see ReflectedThought).},{title:MnemonicTechnique,created:20200410132414389,creator:soren,es:confident,modified:20230416161105265,modifier:soren,tags:Memory Public Idea,type:text/vnd.tiddlywiki,text:Tool used to make remembering things easy. The basic technique is that of encoding information thats difficult to remember as another type of information thats easy to remember. E.g., you can use a MnemonicMajorSystem to convert long numbers into phrases, or remember the points in a speech as a series of ridiculous objects along a path you walk every day (MnemonicLoci).\n\nExtremely effective in the short term. However, for long-term retention it usually needs to be combined with SpacedRepetition or some method of linking to other information you know (see StorageVersusRetrievalStrength) or it will still be forgotten.},{title:ModelFairness,created:20200529195005088,creator:soren,es:possible,modified:20211107174224432,modifier:soren,tags:Code Ethics Public Idea,type:text/vnd.tiddlywiki,text:What does it mean for a MachineLearning model to be \fair\ (or vice versa), in the context of, e.g., the Fairlearn tool?\n\n* A system might work better for certain groups of people than others (e.g., Siri consistently understanding men better than women)\n* A model might use attributes that shouldnt matter (e.g., because someone is black they are more likely to be rejected)\n\nSometimes its correct for the model to treat different groups of people differently. The goal here is to understand why to see if thats acceptable, not necessarily eliminate the differences.\n\n\u003C\u003Cremembercz \20200529214548916\\n\t\A MachineLearning model might be unfair because it {works better} for certain groups of people or because it discriminates based on attributes/columns that {are not relevant to the results}.\>>},{title:ModelInterpretability,created:20200529191920020,es:likely,modified:20210516210618763,tags:Ethics Math Code Public Idea,type:text/vnd.tiddlywiki,text:Given a MachineLearning model and some decisions it made, can you explain why it made them? This is a much harder problem than it looks, and its also rather important.\n\nReliability, safety, accountability, privacy, security, and fairness all benefit from interpretability. Interpreting results is useful both for training, to build trust in the model, and production, to determine how well its doing in real life (this is often worse, or different, from training performance).\n\nSeveral specific issues that can be fixed by interpretation:\n\n* Understand fairness issues (see also Fairlearn).\n* Spot incorrect fitting (e.g., predictions that having asthma makes you lower-risk for pneumonia because of non-representative data -- this is a real example).\n\nInterpretation is possible for both blackbox and glassbox models, but obviously easier and more reliable for glassbox ones.\n\n; Glassbox\n: Looking at models designed to be interpretable, e.g., decision trees, linear models, rule lists, Explainable Boosting Machines (recent research into the last one by M.|PrivatePerson).\n; Blackbox\n: Using statistical techniques to approximate the criteria of a non-explainable model (e.g., a deep neural network), by feeding data that differs in predictable ways through the network and observing the results.\n\nWindows updates now use ML to predict the impact of updates on reliability! But the developers want to be able to understand //why// to help inform development.\n\n\u003C\u003Crememberq \20200529192645850\\n\t\What does the Windows update system use machine learning for?\\n\t\To predict which updates may be unreliable and create issues for users.\>>\n\t\nMajor sources: ResponsibleAiPanel20200519, ResponsibleMachineLearning20200519},{title:ModelsChoicepointsAndRelationships,created:20210515233655019,es:possible,modified:20210515233913861,tags:Memory SpacedRepetition Public Idea,type:text/vnd.tiddlywiki,text:Theory that when deciding what aspects of a process or area of knowledge to capture in cards, you should focus on three broad categories: //models//, //choicepoints//, and //relationships//.\n\n\n!! Models\n\nModels provide semantic space for you to think about a problem. They include basic facts about the world, terminology, and bits of syntax. They also include information about //why// something is so -- why we choose to use a certain term, or what purpose certain aspects of the model have.\n\nA substantial portion of your cards should be used to build up this model in your head. With an appropriate model, learning additional pieces of information about the subject, or having entirely new ideas about it, will be easy. Without it, you wont know where to begin.\n\n\n!! Choicepoints\n\nMemorizing lists of steps or procedures is neither efficient nor effective. Its not efficient because such lists are difficult to memorize, and its not effective because as soon as you encounter something slightly different than the original situation, you wont know how to proceed.\n\nThe fact is, youre smart. Youll be able to remember most of the steps without having to do anything special at all, and when you dont, if you have a good model of the topic, youll be able to figure it out. But there are a few glaring exceptions: these are the choicepoints.\n\nA choicepoint is a moment of truth. There are two types of choicepoints: ones where youll be left wondering what to do because youve come to a natural decision point, and ones where you need to spontaneously notice something lest you keep going down a more obvious path towards disaster. The first type includes things like “what unusual menu choice do I click on to save the current document?” and “which direction do I turn at the T?”. The second type includes things like “dont forget to save the document manually when you finish, or it will discard your work without prompting you” and “if you dont turn right on Elm Street, you dont have another chance to turn for 10 minutes”. (Missing this latter type even when you know the correct choice is a DoubleCaptureSlip.)\n\nWhen youre trying to learn a process, identify the most important choicepoints, or even all of them, then create cards that target those. (Different patterns may be more useful for one type or the other, but both types are equally memorable and useful.) Not only will this save you a great deal of time, your resulting knowledge will be much more flexible, because your choicepoints will be learned in a generally applicable fashion, not tied together into a linear set of steps that you only use in certain circumstances.\n\n(The term //choicepoint// comes from IntelligentUseOfSpace1993.)\n\n\n!! Relationships\n\nRelationships are links between two concepts that are connected in some way. A few common types of relationships:\n\n* Ratios (cooking, math, physics)\n* Equivalences (different terms for the same thing, different methods of accomplishing the same thing)\n* Opposites\n* Situations where something is always, sometimes, or never true|AlwaysSometimesNeverPattern\n\nRelationships allow you to broaden your thinking to related concepts and reason more effectively on the fly, thus reducing the number of facts you have to memorize.},{title:ModerationAndBalance,created:20200402012954797,creator:soren,es:confident,modified:20211115125920778,modifier:soren,tags:Reasoning PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:In general, extreme approaches to anything are usually poor. If you can articulate two extreme approaches to something, the right answer is usually in between. Its a bit cliche, but its also true and important to keep in mind.\n\nExcessive moderation can be problematic too though: if you always try to go for a more moderate position than something you see out there, you may never take any meaningful positions at all.\n\nThis idea goes all the way back to Aristotle (as far as written records go) and presumably long before that. Its held up pretty well!},{title:ModerationBias,created:20230703012824870,creator:soren,description:I am biased towards selecting moderate, sometimes half-assed, positions and actions.,es:likely,modified:20230711235819698,modifier:soren,tags:Idea ManualForMe Reasoning Public,type:text/vnd.tiddlywiki,text:I naturally have a strong bias towards moderation|ModerationAndBalance. Mostly I think this is good; it often allows the EightyTwentyPrinciple to work its magic, reduces the chance of many kinds of particularly bad mistakes, and helps build bridges between people. But sometimes what you need is wild, bold|BeBold action, and this bias makes me naturally somewhat bad at recognizing thats whats called for or doing it.\n\nOccasionally, I also say more moderate versions of what I actually think -- even when being more moderate might offend someone!\n\n{{ModerationBias/p||PrivateChunk}}},{title:ModernRomance2015,author:Aziz Ansari,caption:Modern Romance,completed:20220330,created:20220609015931793,creator:soren,medium:book,modified:20240616041216832,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2015},{title:ModestProposal1729,author:Swift,bibliography:LifetimeReading,caption:A Modest Proposal,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035543,priority:1,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1729},{title:MontaigneEssays,author:Montaigne,bibliography:LifetimeReading,caption:Essays,created:20210703170128000,genre:Misc,medium:book,modified:20210705214035551,priority:1,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:MontpelierVermont,created:20240522132657090,creator:soren,edition:Greta,modified:20240523231940474,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MontrealQuebec,created:20240410131201937,creator:soren,modified:20240509110236053,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MooresLaw,created:20200911022140810,creator:soren,es:confident,modified:20211229145206046,modifier:soren,tags:Software Futurism Public Idea,type:text/vnd.tiddlywiki,text:Empirical observation by MrGordonMoore at Intel that, for a long time, the number of transistors on a chip (or, by extension, the potential performance of the chip) doubles every two years.\n\nHas kept up remarkably well from the 1970s to 2020ish. In 2020, we are beginning to reach the point where transistors simply cannot physically be made any smaller (theyre already to the level where individual atoms are under consideration). At that point, systems will have to be made larger (though this can be impractical due to the time it takes electricity to travel around the chip) or gains pursued through other methods.\n\nIts been a pretty amazing run. Battery University|https://batteryuniversity.com/learn/article/bu_002_introduction points out that if Moores Law applied to batteries, a car battery of a standard size in 1970 would be the size of a coin today. Very few things in the physical world can boast such amazing exponential improvements.},{title:MoreCorrespondence,created:20200410215859083,creator:soren,es:confident,modified:20210606164242018,modifier:soren,tags:Writing InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:The world needs more correspondence (by which I mean letters, emails, whatever tool: just the idea that youre doing LongFormWriting to a single other person or very small group of people that you care about, not for a business purpose). Its a fantastic way to clarify your own thinking, it encourages thoughtful reflection on how someone else will receive your ideas, and everyone likes receiving it.\n\nThe prevailing theory seems to be that its outdated (yeah, interacting in meaningful ways with people is so twentieth-century) or takes too much time (then lets work on that). Though Im not sure people would always quote these things at you if you asked them. Its just the schema we have in our heads. Plus people think that social media takes the place of correspondence, but actually social media is incredibly shallow and not remotely similar; indeed SocialMediaIsAntisocial.\n\n{{MoreCorrespondence/p||PrivateChunk}}},{title:MoreDakka,created:20231023024453148,creator:soren,description:If a little of something works a little bit, and you want it to work a lot bit, try doing more of it.,es:confident,modified:20240611044924130,modifier:soren,tags:Idea AgilePhilosophy Friendship Reasoning Public,type:text/vnd.tiddlywiki,text:From|https://thezvi.wordpress.com/2017/12/02/more-dakka/ MrZviMowshowitz: Its common to try some solution to a problem, find it works kind of OK, and then stop there, even though theres no reason to think that doing //more// of the thing that worked kind of OK wouldnt work even better. Before deciding that additional complex solutions are required, or that there is no way to improve matters, try just...doing more of what works|DoMoreOfWhatWorks.\n\nSometimes, especially if there is some kind of social standard on how much of something to do, it feels silly, difficult, or foolish to do more. This may be why this is so rarely tried.\n\nOf course, there usually is //some// maximum amount of something that is useful. Additional resource expenditure may go to waste or lead to negative utility. But until you actually reach that point, how will you know there arent trivially easy gains available for the taking? BeBold, take the small bet|SmallBets of doing more, and iterate as necessary|IterativeProcess until you find the most effective level.\n\nMoreDakka sometimes appears to conflict with ModerationAndBalance. Advocating for more dakka can make you appear extreme. They can be distinguished, however: moderation is not a virtue if its used to defend not //trying// something. Suggesting that you try doing a lot of something, when theres no reason to think that doing a lot of something good wouldnt be better than doing a little of it, is not extreme at all! (Consider: “Why would you look for a job that offered you $100,000 instead of $50,000 for the same work? Thats extreme. Do you really need that much money?”)\n\nIf there is some slider along known increasing costs and increasing benefits, moderation suggests that perhaps moving the slider to the end is not the best choice because there will probably be diminishing benefits somewhere as the cost continues to rise. MoreDakka suggests that if the benefits at each point on the slider are not in fact known, perhaps one should try moving the slider until one can see where the point of diminishing returns kicks in, and //then// applying appropriate moderation.\n\nThere is NoSpeedLimit.\n\nTV Tropes: https://tvtropes.org/pmwiki/pmwiki.php/Main/MoreDakka\n\n\n!! Examples\n\n\u003C$m2.x number\1\>\nRecently I realized that for most of my life, I had been focusing all of my life-tactical attention on getting enough social interaction to not feel lonely, and then stopping there. There //is// a maximum quantity at which Ill start to feel worse|IntrovertHangover, being an introvert, but nevertheless up until some inflection point my life and mood gets uniformly better when I have more friends and spend more time with other people. Why not try //doing more// until I go too far, and then backing off just a little bit? This is not difficult and obviously increases total utility. For some reason I just didnt do that for years, and surprise, surprise, when I tried it, it works.\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\nIs there enough salt, pepper, or garlic in your food? Most recipes are underseasoned. If it doesnt have an //almost overwhelming// amount of your favorite flavors, try a little more. Youll know youre getting the hang of it when you spend twenty seconds grinding copious amounts of fresh pepper onto your pasta, taste it, and go “Yeah, that was a little too much pepper.” Many people have never had this happen to them, but if you have never put too much pepper on, its nearly guaranteed that you have also never put //enough// on! How likely is it that you found exactly the right amount when youve only found a lower bound and your upper bound is completely unknown? BeBold.\n\u003C/$m2.x>\n},{title:MoreSolutionsFewerAnswers,created:20221129222535106,creator:soren,description:The better understood a problem is, the fewer extant solutions it has, and vice versa.,es:confident,modified:20250930021607251,modifier:soren,reviewed:20231022,tags:Idea Public Reasoning,type:text/vnd.tiddlywiki,text:A CounterintuitiveCorrelation: The wider the variety of solutions to a problem, the more difficult the problem is and the less well it is understood.\n\nThere are two reasons for this:\n\n* Problems that are well understood often invite a single solution. Problems that are poorly understood often need several that attack the issue in different ways and work in different subsets of the problem space (this can evolve into StandardizedGuidelines), because they address symptoms of the problem or small parts of a complex web of causation that arent the root problem (good solutions of this type address TargetProblems rather than SurfaceProblems). But if the problem is completely understood, a deceptively simple|DeceptiveSimplicity solution is often possible. In the presence of such a solution, any other extant solutions (which are more complicated or less effective) rapidly die out.\n* When a problem has an excellent solution already, theres seldom a reason to invent a new one; this puts a natural ceiling on the number of good, widely applicable solutions to a single problem there will ever be. There are a lot of unsolved or only tangentially solved problems in the world to attend to instead of one thats been solved well! Furthermore, a problem that is sufficiently well-solved often doesnt even look like a problem anymore; the less frustrating the issue is, the less salient it is. Generally, the only reason to invent a new solution to a solved problem is if you can find a cheaper, easier, or simpler way to solve it. (And if your new solution is better, it will likely promptly replace the existing one in all but a few situations, not stand alongside it.) In contrast, a problem that is poorly solved has an abundance of reasons to try again -- anytime the solution doesnt work, and you need a solution, you have to invent a new one!\n\nThese two reasons feed into each other.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\nMrMarkDominus:\n\n> There are at least five solutions to this common problem. Uh-oh. If solution #1 had worked, people would not have needed to invent solution #2. If solution #2 had worked, people would not have needed to invent solution #3. Since there are five solutions, there is a good chance that none of them work.\n\n---https://blog.plover.com/2008/03/28/\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\n> A crowded market is actually a good sign, because it means both that theres demand and that none of the existing solutions are good enough.\n\n---Paul Graham|MrPaulGraham, “How to Get Startup Ideas|https://paulgraham.com/startupideas.html”\n\n\u003C/$m2.x>},{title:MosaicMuse,caption:About M2,created:20240524041818696,creator:soren,description:A little about this software and collection of notes.,es:confident,microlink:m2,modified:20250204200229865,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki,text:Name for the combined software and notes|CodeDataEquivalence that make up this wiki. The personal notes of Soren Bjornstad|https://sorenbjornstad.com.\n\nThe wiki you see here on the public web is only part of Mosaic Muse; the “real” M2 also includes a great deal of thoroughly private content, things like daily journals, organizational checklists, notes on my attempts to find a life partner, and a writing organizer. However, you are ultimately using the same software that I use personally – a periodically run build script just makes a copy of the wiki, removes all of the private content, changes some settings, and publishes the result.\n\n\n!! Why make this?\n\nTo help myself think|WritingIsThinking. Writing everything down and gathering it into one place helps me understand my life|WhyTheJournal, makes it easy to find useful ideas again later, and improves my creativity.\n\n\n!! Why publish it?\n\nAt least three reasons:\n\n# I have almost a million words written here, and thats just in the first four years Ive maintained this system. Some of those are too personal to be published,\u003C\u003Cfnote \I publish almost everything that isnt too personal to be violating to me, you, or someone else in my life, but I write so much about my life that theres a lot in the other category!\>> but nevertheless I have collected a lot of ideas here that could be useful to or create interesting connections with other people who read them, and I believe in walking the DefaultToOpen path when possible. Why not prefer helping someone else to leaving them in the dark, all else being equal?\n# My reasoning and writing often turn out better when I write as if others might read it, and its more motivating to have an audience, even only a potential one. Having a semi-public thinking space allows me to capture a good portion of those gains while not requiring the formality, waterfall|WaterfallMethodology writing process, and standard of quality of a blog or public essay.\n# I find that almost all of my best ideas, projects, relationships, and job opportunities come to me on their own, when Im not looking for them. A truly shocking number of them have come from people who read something relevant that I wrote on the internet that I wouldnt have guessed anyone would care about. If you think you have something for me or are just fascinated by something I wrote here, please dont hesitate to let me know by email|https://sorenbjornstad.com/contact or by clicking the “start a conversation” link at the bottom of any section!\n\n\n!! Is this a blog?\n\nNo.\n\n{{MosaicMuseIsNotABlog}}\n\n\n!! Whats the software? Can I use it?\n\nMosaic Muse is a custom application based on TiddlyWiki|https://tiddlywiki.com. Its difficult to concisely explain what TiddlyWiki is|https://ap.sorenbjornstad.com/#post-70, but for our purposes here, its a super-customizable, non-linear encyclopedia or notebook. Each idea in a TiddlyWiki is called a //tiddler// and opens in its own “card” on the screen. For instance, right now, you are reading the ~MosaicMuse tiddler. If you want to learn more about TiddlyWiki and how to use it yourself, I literally wrote the book|https://groktiddlywiki.com/ on that, so check it out.\n\nIf you like this edition of TiddlyWiki, check out TiddlyZettelKasten|https://sobjornstad.github.io/tzk (abbreviated `tzk`), which is M2 without any content, repackaged in a form that you can start building your own notes repository from.\u003C\u003Cfnote \Its built similarly to the public version of M2, but even more scorched-earth – rather than only removing private content, the build script removes //all// content except a handful of help pages, then manually edits a few more things.\>>\n\nI dont want to misrepresent tzk, though. Mosaic Muse is my personal thinking workspace, not general-audience software; the release of the public tzk is an incidental favor to people who have asked if they can play with it. I dont generally accept feature requests for tzk, and will certainly not change anything in tzk that makes it the slightest bit harder for me to use or further iterate on. Mosaic Muse works so well because it is a reflexively developed system|ReflexiveSystemDevelopment that is exactly optimized for what I need|BespokeSoftware (and what I need changes over time). For me to continue pushing the frontier of whats possible here, I need to stay in complete control of the software.\n\n\n!! Why is it called //Mosaic Muse//?\n\nFor four years, it was called my Zettelkasten|ZettelKasten, but the system outgrew that name; it was no longer limited to taking notes on ideas and things I read, nor things that fit into that organizational form.\n\n//Mosaic//: M2 works by assembling a bunch of small thoughts, ideas, histories, reflections, and other nuggets, many of which are not particularly interesting by themselves, from various sources, me and others, into a unified whole that is useful and beautiful. (Thinking workspaces must be well-designed and beautiful, even just for the sake of being beautiful. This absolutely has an impact on your results when using them.) This is also an homage to NCSA Mosaic|https://en.wikipedia.org/wiki/Mosaic_(web_browser), the short-lived but revolutionary web browser that made the WorldWideWeb take off.\n\n//Muse//: M2 then uses the collected information and its careful order to drive creativity.\n\nThese two roles form a feedback loop|VirtuousCircle.\n\n\nSee my original announcement|M2Announcement for more thoughts.},{title:MosaicMuseIsNotABlog,created:20250204195238547,creator:soren,description:This site is not a blog: a better term would be “public notes system”, though really its a thing of its own.,es:confident,microlink:not-a-blog,modified:20250204195512154,modifier:soren,tags:Design Technology Idea Public,type:text/vnd.tiddlywiki,text:People tend to try to fit a system like M2 into some schema|SchemaBound they already know about. This is only natural; its usually helpful to find a FamiliarizingMetaphor for new things. But I am going to loudly insist that this site is not a blog, because if I were to treat it as a blog, I would get only a tiny fraction of the benefit out of it that I do. It (1) has a different purpose than a blog, and (2) is organized differently than a blog.\n\n//Purpose//: Like a blog or a collection of essays, Mosaic Muse is a place to talk about lots of ideas, each discussed only briefly. But a blog is intended primarily to communicate things to other people; as a side effect, sometimes it helps the author think or learn. M2 is intended to help me think; as a side effect, sometimes it helps communicate things to other people.\u003C\u003Cfnote \If this seems too pedantic, consider: It would be weird to write a blog without publishing it, but its normal to write a blog without caring about improving your thoughts (e.g., if your main goal is marketing). Its entirely reasonable to take notes or write in a journal without publishing it, but it would be bizarre to do that with no intention of helping yourself think or learn.\>> A blog is a fast medium focused on specific goals: you take a well-defined idea from start to finish and publish it, often within the same day or week. M2 is a slow medium with no goals aside from ratcheting|RatchetingProcess. Sometimes I sit down and write up a note from start to finish, but many times I start with rough notes and improve them iteratively over months or years. And I am not trying to publish or achieve anything in particular by writing here; Im just figuring out what I think and building up ideas in a form I can reference and use to seed future thoughts.\n\n//Organization//: A blog post is a fully-formed idea or linear thread of ideas. An M2 note is usually quite small and isnt intended to stand alone; its defined in large part by its relationships to other notes|ConceptWeb. It often does contain a linear argument, but it usually doesnt define or explain the terms and concepts it relies on, it only links to them. If you read only a single note, you can expect to leave confused. (You can hover your mouse over any undecorated link or footnote to see a preview.) Blog posts use a waterfall methodology|WaterfallMethodology: theyre written once and receive only minor, occasional updates, or none at all. Most M2 notes use an iterative methodology|IterativeProcess: theyre frequently revisited, updated, and linked to newly created ideas as time passes. I almost dont even want to offer a chronological list of updates|RecentIdeas in M2, because the goal is to build an encyclopedic treatment of everything Im interested in; many of the notes are evergreen and the time that I wrote them is entirely irrelevant. (Even with sections that //are// chronological, like my journal, the focus is on connecting the history together to come up with permanently relevant insights.)\n\nAlso unlike a typical blog, I place such high value on keeping M2 notes playful|PlayfulKnowledgeManagement that I will sacrifice almost any other property a notes system might try to satisfy to achieve this, because that is how you motivate yourself to write 250,000 words a year. I dont hesitate to make stupid puns, add pedantic or wholly tangential footnotes, or curse when Im in the mood, and I only write about topics that are currently interesting and relevant to my life. If I ever feel less than completely excited about working on a note or I struggle to enter a FlowState, I close it and go do something else. Things seldom get lost in M2 owing to its linky structure|NotesMustLink, memorable concept handles|IdeaApi, and iterative workflow,\u003C\u003Cfnote \This last one is important because you naturally end up revisiting ideas you arent actively working on, reminding you roughly where they are.\>> so if ten years go by between drafting an idea and polishing it up, thats no problem! Im not trying to publish a book next month, Im in this for the long haul.\n\nI do have a traditional blog called Control-Alt-Backspace|https://controlaltbackspace.org, though I havent been writing much there lately -- I feel Im in a stage of my life and work where working on a lot of half-finished ideas in M2, as well as exploring a lot of things privately, is the best way I can spend my free time.},{title:MostImportantThing,created:20210622030549431,creator:soren,description:Whats the most important thing you could be doing right now? Are you doing it? Why not?,es:likely,modified:20230416025102487,modifier:soren,reviewed:20250208,tags:Productivity LifeDirection Public Idea,type:text/vnd.tiddlywiki,text:A challenging|Challenges set of cascading questions which can be applied to prioritize|Prioritization what you should be doing, at any scale from mundane daily tasks to overall “calling”:\n\n# Whats the most important thing you could be working on right now?\n# Are you doing that thing?\n# Why not?\n\nThere is only //one// most important thing. If everything is important, nothings important.\n\nI say this procedure is //challenging//. Perhaps it shouldnt be -- after all, it seems like CommonSense -- but I suspect that most people, including me, are only working on the most important thing they could be working on a tiny fraction of the time, maybe never! Reflecting on this question could be the beginning of wisdom.\n\n{{MostImportantThing/p||PrivateChunk}}\n\nOn the large scale, once one has figured out what is important, perhaps one should investigate how to make that into the PathOfLeastResistance so that one is more likely to be able to answer yes to (2) in the future without having to put forward excessive effort. One should DeflectResistance.\n\nCompare SevenSevens, which helps to define what is of lasting importance.\n\nAdapted from http://www.paulgraham.com/procrastination.html, which in turn adapts YouAndYourResearch1986.\n\n!! References\n\n> Life is too short to not read the very best book you know of right now.\n> ---MrPatrickCollison, \u003C\u003Crt 12951>>},{title:MostRespectfulInterpretation,created:20200322024202807,creator:soren,es:confident,modified:20230303164952166,modifier:soren,tags:Psychology PhilosophyOfLife Anecdote Public Idea,type:text/vnd.tiddlywiki,text:Best demonstrated by an anecdote:\n\nAt a workshop at YouthQuake one year, I participated in a diversity activity. We all lined up on one side of the room and a statement was read. A few of them were good things, but most of them were quite bad or at least disadvantageous things. I have been bullied. I have lost a close friend. My parents died when I was a child. That kind of thing, though plenty of them were more trivial and consequently a great deal harder to remember now. If the statement applied to you, you (if you were at least reasonably comfortable doing so) walked to the other side of the room, turned around, looked at everyone else for a moment, and then came back. This just repeated for maybe twenty-five or thirty minutes. And then we talked about what we learned.\n\nThat was instructive, but the idea I most remember was this. The guy who led this activity singled out one guy who said he had been arrested. He said, lets try not to make any bad assumptions. I dont know why you got arrested. Maybe you stole a candy bar. Maybe you murdered someone. Maybe you marched with Martin Luther King and got arrested for that. And he said, Im going to assume you got arrested for being in the civil rights movement. This is the most respectful interpretation.\n\nSee also HanlonsRazor, in which we are asked to assume that people dont do things because of malice.\n\n!! References\n\nCrucialConversations2011 says wrt people doing things that frustrate you to ask the question, “Why would a reasonable person do that?”},{title:MotherNight1961,author:Kurt Vonnegut,caption:Mother Night,completed:202203141200,created:20220609020440802,creator:soren,medium:book,modified:20221107031810068,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1961,text:MrKurtVonnegut novel about the fictional Howard Campbell, Jr., who agrees to be a “pretend” Nazi propagandist who is secretly passing information to the American CIA in coded mannerisms in his propaganda broadcasts. I seem to have been doing a tour of Holocaust literature lately (previously: Sunflower1969, DiaryOfAYoungGirl1947). This one wasnt my choice, though; I read it with my Vonnegut reading group.\n\nVonnegut states in the introduction that the moral is that “you are what you pretend to be,” and this seems accurate, though not in the way I initially expected – its not that Campbell has fallen into the trap of becoming an actual Nazi and believing his propaganda, its more that he cant stand himself and what hes become. Life doesnt really mean anything to him anymore.\n\nDuring the war he also arguably acted as a better Nazi than the Nazis, something curiously possible, I think, because he doesnt actually believe the positions hes taking, making him free to caricature the Nazi position as far as he wants and act utterly serious about it, unlike the real Nazis, who actually have some countervailing morals to deal with from time to time.\n\nVery dark, and in the category of “embarrassed its making me laugh,” because its quite funny. E.g.:\n\n> The malt syrup factory in Dresden was gone. Everything was gone but the cellars where 135,000 Hansels and Gretels had been baked like gingerbread men.\n\nHoping to come back to this one and think about it some more, but given how behind I am on reading Im going to cut the writeup here for now!},{title:MountHood,created:20250618153301686,creator:soren,modified:20250618153302636,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MountRainierNationalPark,created:20250621164953286,creator:soren,modified:20250621164953952,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MountSaintHelens,created:20250621164949451,creator:soren,modified:20250621164950420,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MrAaronSwartz,created:20210516224835220,modified:20210516224645401,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAbrahamLincoln,created:20200225034828346,modified:20201209224019419,tags:PAO Public,type:text/vnd.tiddlywiki,text:Come on, you know who this is. Sixteenth President of the United States. Freed the slaves and all that? Yeah, you know Im just writing this to have something in the tiddler to start with. And its late at night, because of course it is.},{title:MrAbramDemski,created:20200323114850392,modified:20201119195421257,tags:PAO Public,type:text/vnd.tiddlywiki,text:Writer of at least one post on LessWrong, LessWrongZettelkastenMethod.},{title:MrAdamMastroianni,caption:Adam Mastroianni,created:20231011125102599,creator:soren,modified:20250905203935536,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAdolfHitler,created:20200910021722951,modified:20200910021726051,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAgSertillanges,created:20201201035141521,modified:20201201035108831,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAlanTuring,created:20200409014326733,creator:soren,modified:20200509014856451,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Early computer scientist and code-breaker in WorldWarTwo. The TuringTest is named for him.},{title:MrAlbertCamus,created:20240427231204224,creator:soren,modified:20240509142721417,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAldousHuxley,created:20200123031843299,modified:20200509014900687,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of BraveNewWorld.},{title:MrAlexanderPope,created:20210810192616547,modified:20210818135644638,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAlexanderTheGreat,created:20210320015332121,hideorphan:true,modified:20210616235448543,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAlexGoldman,created:20200411003545219,creator:soren,modified:20200509014905244,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-host of ReplyAll with MrPjVogt.},{title:MrAlfredNorthWhitehead,created:20210712032345859,modified:20210712032137751,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAlKhan,created:20200910022535637,modified:20200910022538728,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAndrewHuberman,created:20220829031113051,creator:soren,modified:20220829031120937,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAndrewMarlin,created:20200118033704927,memberof:TheWatchhouse,modified:20220909123243633,modifier:soren,spouse:MsEmilyFrantz,tags:PAO Public,type:text/vnd.tiddlywiki,text:Member of band TheWatchhouse. Inseparable from the group and his wife MsEmilyFrantz from my perspective.\n\nIn one video Ive seen, he describes his curious and beautiful theory of HauntedSongs.\n\n{{||testclude}}\n\n\u003C!--\u003C$list filter\list!!memberof\>\u003C\u003CcurrentTiddler>>\u003C/$list> -->},{title:MrAndrewTanenbaum,created:20200426164540020,modified:20200509014917779,tags:PAO Public,type:text/vnd.tiddlywiki,text:Well-known thinker on operating systems and similar software concepts. Had a famous dispute with MrLinusTorvalds on the merits of a monolithic versus a microkernel-based operating system design, a debate which still echoes today outside the world of operating systems, in general software. See ServiceOrientedArchitecture.},{title:MrAndyMatuschak,created:20200422234105839,modified:20210615003719109,tags:PAO Public,type:text/vnd.tiddlywiki,text:Independent researcher working on note-taking, information, and spaced repetition, particularly with regards to preventing spaced repetition from being divorced from its context (SpacedRepetitionEncouragesFloatingIdeas). See QuantumCountry for one experiment. Patreon|https://www.patreon.com/quantumcountry describes his overall goal as “creating tools for thought.”\n\nAlso involved in the development of iOS and Khan Academy.\n\nPublishes AndyMatuschakNotes.},{title:MrAngelPerez,created:20200529200833839,hideorphan:true,modified:20201209035101432,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter of ArmTemplates20200520.},{title:MrAnthonyChu,created:20200602152008230,hideorphan:true,modified:20201209035102524,tags:PAO Public,type:text/vnd.tiddlywiki,text:Part of the AzureFunctions team at M.|PrivatePerson. Presenter in EventDrivenApps20200521.},{title:MrAnthonyTrollope,created:20210712034134294,modified:20210712033927985,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAntonArmstrong,created:20200225034255426,creator:soren,modified:20240606125232887,modifier:soren,tags:Music PAO Public,type:text/vnd.tiddlywiki,text:Fourth director of TheStOlafChoir, under whom I sang during my time there. Notable for being African-American at a time when that was highly unusual for a music director.\n\nQuite likable, strong personality but not nearly as scary as he looks; demanding but also as tolerant and patient as necessary. Undeniably a complete master at directing the choir by that time. In the area the choir attempted to compete (smooth, even-handed choral singing with young voices), it was the best in class every year.\n\n{{MrAntonArmstrong/p||PrivateChunk}}},{title:MrAntonChekhov,created:20210122013407546,modified:20210122013314982,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrAshutoshPriyadarshy,created:20241020171420699,creator:soren,modified:20241020171433926,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Founder of Sunsama.},{title:MrAsimHussain,tags:PAO Public,type:text/vnd.tiddlywiki,text:Behind the PrinciplesOfSustainableSoftwareEngineering with MrChrisAdams. Presented thereon in SustainableSoftwareEngineering20200520.},{title:MrAsriel,created:20200909141148311,modified:20210607011829509,tags:PAO Public Character,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:Father of MsLyraSilvertongue.},{title:MrAugustine,created:20200323031125282,modified:20200323031137347,tags:PAO Public,type:text/vnd.tiddlywiki,text:Saint Augustine, early scholar of the Church.},{title:MrAugustusCaesar,created:20210810192515729,modified:20210810192528796,tags:PAO Public,type:text/vnd.tiddlywiki,text:Second emperor of Rome.},{title:MrAveryDavisLamb,created:20240718030406273,creator:soren,modified:20240718030445057,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb: \n\n> Avery Davis Lamb is Co-Executive Director of Creation Justice Ministries. Creation Justice Ministries’ mission is to educate, equip and mobilize communions and denominations, congregations, and individuals to protect, restore, and rightly share Gods creation. Avery has a background in both ecological research and faith-based environmental organizing, studying ecology in various ecosystems and organizing faith communities across the country in support of action on environmental justice. Previously he has worked for Sojourners and Interfaith Power & Light and serves on the board for The Center for Spirituality in Nature.\n\n},{title:MrBean,created:20201201035149399,modified:20201201035118179,tags:PAO Character Public,type:text/vnd.tiddlywiki},{title:MrBenFranklin,created:20200309193559745,modified:20200509014940466,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBenjaminBloom,created:20210419215636930,modified:20210419215457400,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBenjaminDreyer,created:20200503220802466,modified:20200509014944800,tags:PAO Public,type:text/vnd.tiddlywiki,text:VP/copyeditor/all sorts of roles over a lifetime for publisher TheRandomHouse. Author of DreyersEnglish2019.},{title:MrBenjaminFranklin,created:20230703020509546,creator:soren,modified:20230703020510330,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBenKuhn,caption:Ben Kuhn,created:20221231013240847,creator:soren,modified:20250905204534899,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBillClinton,created:20210909031352399,creator:soren,modified:20210909031355495,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBillGates,created:20200529233811475,modified:20200529233819046,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former CEO of M.|PrivatePerson.},{title:MrBillPalmer,created:20200220123741221,modified:20200509014954836,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Protagonist of PhoenixProject, a low-level manager who gets promoted to VP against his will and has to try to fix the terribly broken system.},{title:MrBillyCosta,created:20200909141155655,modified:20200910022522948,tags:PAO Public Character,type:text/vnd.tiddlywiki},{title:MrBjFogg,created:20210912005720048,creator:soren,modified:20210912005720955,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBjJohnson,created:20200303035025355,modified:20200509015010200,spouse:MsSigridJohnson,tags:PAO Public,type:text/vnd.tiddlywiki,text:Manager of TheStOlafChoir and other musical groups at StOlaf for many, many years. Married to MsSigridJohnson, who conducted TheManitouSingers.\n\nBJ passed away in 2019.},{title:MrBlaisePascal,created:20200712044151368,modified:20200712044202510,tags:PAO Public,type:text/vnd.tiddlywiki,text:17th-century French mathematician and philosopher.},{title:MrBobDylan,created:20240614033803528,creator:soren,modified:20240614033804599,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBrandonRhodes,created:20200425170620740,modified:20200509015022616,tags:PAO Public,type:text/vnd.tiddlywiki,text:Pythonista notable for promoting SemanticLineFeeds.},{title:MrBrentGeller,created:20200219220332365,creator:soren,modified:20200509015032292,modifier:soren,tags:UnicornProject PAO Character Public,type:text/vnd.tiddlywiki,text:Operations wizard in PhoenixProject and UnicornProject, and a member of the UnicornRebellion. Can fix pretty much anything, at the cost of holding up everything because hes the only one that can fix it.},{title:MrBretVictor,created:20200910022541224,modified:20200910022544273,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBrianJanous,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Part of the team that plans data centers at M.|PrivatePerson. Presented on their sustainability efforts in SustainableDataCenters20200520.\n},{title:MrBrianKernighan,created:20200909141136837,modified:20200909141136993,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBruceSterling,created:20201207030315307,modified:20201207030242984,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrBryson,created:20240718034331550,creator:soren,modified:20240718034332786,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrCalNewport,created:20200410142446180,creator:soren,modified:20210606163834620,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Computer science professor out East and author of a number of books on work and being a student. I really liked his DeepWork, to the point of being surprised how much I agreed -- much like MrNassimNicholasTaleb, but Taleb is much more erudite and I like him because he has completely new insights, whereas Newport instead makes me understand things I feel like I should have known all along.\n\nSoGoodTheyCantIgnoreYou is about managing a career.\n\nDigitalMinimalism2019 is about managing distractions and choosing which new technologies actually benefit your life|AnyBenefitMindset, rather than just look cool.},{title:MrCarlSagan,created:20210122030033761,modified:20210122025941223,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrCatStevens,created:20200314204907627,modified:20200509015112837,tags:PAO Public,type:text/vnd.tiddlywiki,text:Singer-songwriter of the 70s. Took about 30 years off after a religious-conversion experience, and has eventually returned under the name Yusuf.},{title:MrCedricChin,created:20210916181155751,creator:soren,modified:20210916181157256,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrCharlesDarwin,created:20210712034145137,modified:20210712033936706,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrCharlesLamanna,created:20200612211005143,modified:20200612211017155,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for PowerPlatform20200520.},{title:MrCharlesVanDoren,created:20200909141130600,modified:20200909141130787,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrCharlieMunger,created:20200329174954944,memberof:TheBerkshireHathaway,modified:20200511015253675,tags:PAO Business Public,type:text/vnd.tiddlywiki,text:Partner of MrWarrenBuffett.\n\n\u003C\u003Crememberq \20200511015240199\\n\t\Who is Charlie Mungers business partner?\\n\t\Warren Buffett\>>},{title:MrChrisAdams,tags:PAO Public,type:text/vnd.tiddlywiki,text:Behind the PrinciplesOfSustainableSoftwareEngineering with MrAsimHussain. Presented thereon in SustainableSoftwareEngineering20200520.},{title:MrChrisDias,created:20200521203102151,modified:20200521203115481,tags:PAO Public,type:text/vnd.tiddlywiki,text:VisualStudioCode developer at M.|PrivatePerson.},{title:MrChrisEnstad,created:20240402013255736,creator:soren,modified:20240402013304914,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Lead pastor at B.L.|PrivatePerson.},{title:MrChrisKnight,created:20231120215008366,creator:soren,modified:20231120215009896,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrChrisMartenson,created:20200410222900121,creator:soren,modified:20200509015126177,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the website Peak Prosperity and a book \The Crash Course\.},{title:MrChrisThile,created:20230201041419218,modified:20230201041421282,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrChristianNwamba,created:20200521213426652,modified:20200521213441659,tags:Public PAO,type:text/vnd.tiddlywiki,text:Host of the WebForEveryone20200520 session at MicrosoftBuild2020.},{title:MrChristophePorteneuve,created:20200910022549052,modified:20200910022552142,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrChristopherAlexander,created:20200326024659259,modified:20200509015131102,tags:PAO Public,type:text/vnd.tiddlywiki,text:Architect and popular design thinker, particularly in the area of patterns of various kinds (geometric, design, memes, ideas). Wrote a whole book on Turkish rugs.},{title:MrChristopherNolan,created:20221003172709680,creator:soren,modified:20221003172710719,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrChristopherSholes,created:20200117012933205,creator:soren,modified:20200118003343019,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Christopher Latham Sholes was the inventor of the QWERTY keyboard and the associated typewriter which took over the world.\n\nSholes is sometimes demonized among the moderately enlightened circles of the keyboard world for having created such a shitty keyboard layout that has nevertheless managed to cling so tenaciously to our keyboards and our fingers. Interestingly, though, he clearly felt his first try was inadequate: he created|SholesRevisedKeyboard an unscientific but obviously more desirable layout some years after QWERTY, once touch-typing became popular and the mechanism of his typewriters had evolved sufficiently that jamming was no longer a serious concern. Unfortunately for both his legacy and the world at large, it failed to gain any traction and faded into the mists of history.\n\nThe SorenConcept associated with Sholes story is QwertyResidue.},{title:MrChristopherTolkien,created:20201119201807498,modified:20201119201751083,tags:PAO Public,type:text/vnd.tiddlywiki,text:Son of MrJrrTolkien, editor of all the masses of notes he left behind.},{title:MrClayShirky,created:20200311131623586,modified:20200509015147309,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of AGroupIsItsOwnWorstEnemy200304. Thinker about the internet and social stuff.},{title:MrColemanSilk,caption:Coleman Silk,created:20210909024614945,creator:soren,modified:20211105154335549,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:In HumanStain2000, venerable classics professor at Athena College who has made a lot of enemies through an effective deanship; “canceled” and resigns (mostly bowing to the pressure and choosing to ruin himself rather than wait for it to blow over, as so often happens) over having said the word “spooks” in class, which was incorrectly taken as a racist remark by several students and blown up into a scandal with the help of MsDelphineRoux.\n\nIronically, Coleman is actually black and has lived most of his life pretending to be white, doing this so well that he goes to his grave with only a handful of people the wiser -- even his own wife and children dont know (he has to go no-contact with his parents and the rest of his family to accomplish this). Delphine hits him again at the end, this time pinning her own accidental sending of an embarrassing personal ad to all her colleagues on him; with him already branded as a racist, people accept this one too even though it makes no sense.},{title:MrCoreySanders,created:20200521191342119,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Host of BuildImagineCup2020 at MicrosoftBuild2020.\n},{title:MrCraigLoewen,created:20200529204902424,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Program manager for the WindowsSubsystemForLinux at M.|PrivatePerson. Presenter of WindowsTerminal20200520.\n},{title:MrCrankyDaveBrinkley,created:20200309202725263,modified:20200509015152793,tags:UnicornProject Character PAO Public,type:text/vnd.tiddlywiki,text:Developer lead for the UnicornProject.},{title:MrCSLewis,created:20200329141130923,modified:20200509015158750,tags:PAO Public,type:text/vnd.tiddlywiki,text:British author of various Christian and fantasy literature. Best known for the ChroniclesOfNarnia.},{title:MrDanCostenaro,created:20200909141204025,modified:20200909141204391,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDanielDefoe,created:20200401225039204,modified:20200401225112449,tags:PAO Public,type:text/vnd.tiddlywiki,text:Early English author. Known especially in popular culture for the novel RobinsonCrusoe; I have found his JournalOfThePlagueYear pretty spectacular as well.},{title:MrDanielHerriges,created:20200122013218099,creator:soren,modified:20200509015207299,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author/editor for StrongTowns.},{title:MrDanielPink,created:20210807163718017,creator:soren,modified:20210825033503647,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDanielRoth,created:20200529200919346,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Program manager on the ASP.NET team at M.|PrivatePerson.\n\nPresenter of BlazorWebAssembly20200520.\n},{title:MrDarrellHuff,created:20201206175809391,modified:20201206175737636,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDarrelMiller,created:20200521204352962,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:MicrosoftGraph PowerShell developer at M.|PrivatePerson. Presented PowerShellForGraph20200521 at MicrosoftBuild2020.\n},{title:MrDavidAllen,created:20200521202746802,modified:20200521202759306,tags:PAO Public,type:text/vnd.tiddlywiki,text:Popular productivity writer, best known for GettingThingsDone.},{title:MrDavidCain,caption:David Cain,created:20220121175611585,creator:soren,modified:20250905204320146,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDavidChalmers,created:20200407033036455,creator:soren,modified:20200509015217533,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Philosopher known for his work on the HardProblemOfConsciousness.},{title:MrDavidDeutsch,created:20230406022013410,creator:soren,modified:20230406022014632,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDavidFarley,created:20200212130851505,creator:soren,modified:20200509015223917,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:One of the authors of ContinuousDelivery and highly involved in the DevOps scene (cf. MrJezHumble).},{title:MrDavidGushee,created:20240718044546596,creator:soren,modified:20240718152618894,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Dr. David P. Gushee is Distinguished University Professor of Christian Ethics at Mercer University, Chair of Christian Social Ethics at Vrije Universiteit (Free University) Amsterdam, and Senior Research Fellow, International Baptist Theological Study Centre. He is the elected past-president of both the American Academy of Religion and the Society of Christian Ethics. Dr. Gushee is the author, co-author, or editor of 29 books, including the bestsellers Kingdom Ethics and Changing Our Mind. His other most notable works are Still Christian, After Evangelicalism, Righteous Gentiles of the Holocaust, and Defending Democracy from its Christian Enemies. With his works read around the world, and an active lecturing schedule on several continents, he has global impact in the field of Christian ethics. A leader in the growing post-evangelical movement, he has also put feet to his faith in several activist campaigns. Gushee and his wife, Jeanie, live in Atlanta.},{title:MrDavidHeinemeierHansson,created:20210807163746426,modified:20210807163530600,tags:PAO Public,type:text/vnd.tiddlywiki,text:Cofounder of TheBasecamp.},{title:MrDavidSedaris,created:20220609021543985,creator:soren,modified:20220609021545316,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDeanBryen,created:20200521214255555,modified:20200521214303159,tags:PAO Public,type:text/vnd.tiddlywiki,text:Host for a large number of small MicrosoftBuild2020 presentations.},{title:MrDennisRitchie,created:20200909141415022,modified:20200909141415101,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDerekSivers,created:20200708005325737,modified:20200708005525867,tags:PAO Public,type:text/vnd.tiddlywiki,url:https://sivers.org,text:Creator of the website CD Baby, general entrepreneur, blogger.\n\n{{!!url}}},{title:MrDerrenBrown,created:20200821024038062,modified:20200821024145596,tags:PAO Public,type:text/vnd.tiddlywiki,text:British stage/psychological magician and anti-psychic atheist rationalist. Author of HappyAbsolutelyFine2016, a rather unusual combination but a good book.},{title:MrDonaldKnuth,created:20200309202900038,modified:20200509015229547,tags:PAO Public,type:text/vnd.tiddlywiki,text:Probably the single most famous computer scientist in history, especially well-known for his //The Art of Computer Programming//.},{title:MrDonaldRumsfeld,created:20200410163546086,creator:soren,modified:20200509015250451,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Secretary of Defense of the UnitedStates from 1975-1977 and 2001-2006 (Wikipedia).},{title:MrDonaldTrump,created:20200121020527242,modified:20200509015243272,tags:PAO Public,type:text/vnd.tiddlywiki,text:Forty-fifth president of the United States, and quite the figure. Probably the easiest politician in the country to make fun of; just about anywhere you go youll find some sympathetic audience. (In a general, town-level way: a Trump rally, for instance, is probably not the place!) Antifragile|AntiFragility to anything you say or do to him: the more scandals that come up, the better, logic doesnt make any difference either to Trump or to his approval ratings.},{title:MrDonovanBrown,created:20200910022555466,modified:20200910022558543,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDougDyment,created:20240530223907463,creator:soren,modified:20240530223908480,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDouglasAdams,created:20200909141121164,modified:20200909141121256,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDouglasHofstadter,created:20200407031918472,creator:soren,modified:20210709231031312,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Mathematician, physicist, AI researcher, and philosopher best known for GodelEscherBach1979 and some related books.},{title:MrDougMcIlroy,created:20200309202442016,modified:20200509015258764,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrDougPagitt,created:20240718044551573,creator:soren,modified:20240718152534674,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Doug Pagitt is the executive Director of Vote Common Good. He’s a pastor author, Podcaster, and want to be guitarist.},{title:MrDustinCampbell,created:20200520024759396,modified:20200520024817754,tags:PAO Public,type:text/vnd.tiddlywiki,text:.NET developer-experience architect and C# language designer, presenting in CSharpTodayAndTomorrow20200519 with MrMadsTorgersen.},{title:MrEarlMontgomery,created:20200309193900514,modified:20200509015302649,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEdwardGibbon,created:20201201035404793,modified:20201201035332014,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEdwardLear,created:20200226001753973,modified:20200509015306882,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of some of the most famous NonsenseLiterature in the English language. Described as the purest author of such by MrGkChesterton in his essay ADefenseOfNonsense.},{title:MrEdwardSnowden,created:20200516164943866,modified:20200516165020994,tags:PAO Public,type:text/vnd.tiddlywiki,text:Whistleblower/leaker on various information-gathering/illegal surveillance practices of the UnitedStates government, specifically the NSA, back in the early 2010s. Continues to be an advocate for digital privacy etc.},{title:MrEdwardTufte,created:20201205232729684,modified:20201205232706459,tags:PAO Public,type:text/vnd.tiddlywiki,text:Data visualization and Design guru.},{title:MrEgilHovland,created:20200303034726384,modified:20200509015311904,tags:PAO Public,type:text/vnd.tiddlywiki,text:Sacred composer in Norway. Most notable in the StOlaf community anyway for writing StayWithUs.\n\nDied in 2013.},{title:MrElieWiesel,created:20231017152614178,creator:soren,modified:20231017152614847,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEmarMaier,created:20200115025720506,creator:soren,modified:20200509015321178,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author, professor at Univ. of Groningen: https://www.rug.nl/staff/e.maier/research},{title:MrEpictetus,created:20210916152050320,creator:soren,modified:20210916152051693,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEricAmodio,created:20200520125409244,modified:20200520125433640,tags:Public PAO,type:text/vnd.tiddlywiki,text:Member of the VisualStudioCode team. Also author of the popular GitLens extension therefor.},{title:MrEricBoyd,created:20200529185930842,modified:20200529190012317,tags:PAO Public,type:text/vnd.tiddlywiki,text:Azure machine learning developer. Participant in the ResponsibleAiPanel20200519 at MicrosoftBuild2020.},{title:MrErichFromm,created:20210712034549913,modified:20210712034341458,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEricSchmidt,created:20200708011016739,creator:soren,modified:20211204154421827,modifier:soren,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrErikReid,created:20200220123235272,modified:20200313123051739,tags:PAO Character UnicornProject Public,type:text/vnd.tiddlywiki,text:PhoenixProject and UnicornProject character who serves as a ConvenientGuru to explain the principles of DevOps and how ThePartsUnlimiteds IT department can get itself into shape. According to UnicornProject, looks rather like The Dude from BigLebowski.\n\nF.I.B.C.|PrivatePerson decided he is somewhat like MrYoda: he wont help you do anything or even tell you exactly what to do, but will guide you into figuring it out.},{title:MrErnestHemingway,created:20201222210235114,modified:20201222210155949,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrEuclid,created:20200516174758849,modified:20200516174815631,tags:PAO Public,type:text/vnd.tiddlywiki,text:Greek creator of Western geometry and mathematical proof.},{title:MrFMeliusChristiansen,created:20200309193724206,modified:20200509015341174,tags:Music PAO Public,type:text/vnd.tiddlywiki,text:First director of TheStOlafChoir, also (though less known) highly involved with TheStOlafBand in its very early years. Conducted it for 31 (?) years and made it known across the country.\n\nPassed off the torch to his son, MrOlafChristiansen.},{title:MrFrankMcCourt,created:20230414134153723,creator:soren,modified:20230414134155029,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrFredBrooks,created:20200326201952260,modified:20200509015348657,tags:PAO Public,type:text/vnd.tiddlywiki,text:Computer pioneer, author of MythicalManMonth.},{title:MrFScottFitzgerald,created:20200322164705298,creator:soren,modified:20200509015353743,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:American novelist best known for his GreatGatsby.},{title:MrGabrielGarciaMarquez,created:20211027161655734,creator:soren,modified:20211027161656897,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGandalf,created:20210810192634614,modified:20210810192637937,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGarrisonKeillor,created:20220201041940912,creator:soren,modified:20220201041944521,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGeneKim,created:20200220122822622,modified:20200509015357851,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the PhoenixProject and UnicornProject books. DevOps guru.},{title:MrGeoffreyChaucer,created:20201201035413681,modified:20201201035340958,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGeoffreyMoore,created:20200406135218797,creator:soren,modified:20200509015403950,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Business guru who introduced the concept of the customer adoption curve and the ThreeHorizons.\n\nSource: UnicornProject p. 269.},{title:MrGeorgeBox,created:20200909141113526,modified:20200909141113645,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGeorgeOrwell,created:20200314215534206,modified:20200509015408343,tags:PAO Public,type:text/vnd.tiddlywiki,text:Dystopian|DystopianVision and political author in the 20th century.},{title:MrGeorgeSpafford,created:20200321224047964,creator:soren,modified:20200509015413335,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-author of The PhoenixProject.},{title:MrGeorgeWashington,created:20210118023233069,modified:20210118023142598,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGeraldWeinberg,created:20200423162509504,modified:20200509015417571,tags:PAO Public,type:text/vnd.tiddlywiki,text:Witticizer of EverythingsBroken.},{title:MrGiladElyashar,created:20200529234831126,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for AzureSecurityForDevs20200521.\n},{title:MrGkChesterton,created:20200226001555553,modified:20200509015422567,tags:PAO Public,type:text/vnd.tiddlywiki,text:A nineteenth- to twentieth-century writer and essayist, philosopher, and art critic.},{title:MrGordonMoore,created:20200911023159979,modified:20200911023204218,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrGregBowman,created:20200521140433072,modified:20200521140708845,tags:PAO Public,type:text/vnd.tiddlywiki,text:Organizer of the TheFoldingAtHome project.},{title:MrGregJarrell,created:20240718025002744,creator:soren,modified:20240718030500589,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Greg Jarrell is a cultural organizer with QC Family Tree in the Enderly Park neighborhood of CharlotteNorthCarolina. His new book, Our Trespasses: White Churches and the Taking of American Neighborhoods, is available from Fortress Press. In the evenings, you can find Greg as an active part of Charlottes jazz scene, usually with a saxophone strapped around his neck.},{title:MrGuyClark,created:20250406134718447,creator:soren,modified:20250406134719246,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrHalAshby,created:20200125233135447,modified:20240320214749227,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Film director. HaroldAndMaude1971 was his masters thesis, and he then co-produced it.},{title:MrHaroldChasen,created:20200125202843940,modified:20240320214749227,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Harold is an eighteenish boy in the film HaroldAndMaude1971 plainly with plenty of money (he goes and buys a hearse on a whim at one point!) who seems to be completely bereft of love and attention from either his family or anyone else (except, of course, MsMaudeChardin, eventually). As a result hes become obsessed with death. He never actually attempts suicide, but he pretends to commit suicide repeatedly, which he explains to Maude is because he found he liked being dead because people actually cared (see DeadDoNoWrong). He tells his \psychotherapist\ (portrayed as a complete uncomfortable jerk) hes done this about fifteen times, and we see probably five or so on-screen. He attends funerals for fun, and as mentioned he drives around in a hearse.\n\nWe know of only two family members, his mother MsChasen and his uncle, who is a stereotypical general who tries to pull Harold into the military. Neither helps him with any of his emotional needs, for sure.\n\nOther than this, we know very little about Harold.\n\nHe does fake-suicide again in the scene after Maude dies, though it seems unclear whether he considered actually doing it and left off at the last minute, and the viewer is left uncertain as to what happened for about a minute before the camera pans up from his wrecked Jaguar-hearse to him at the top of the cliff dancing and playing the banjo, which makes you wonder if it may be the last time. Especially since there was nobody to get the attention of in the scene. And I get the feeling Maude would have approved of this response -- as a matter of fact, I dont know that she ever disapproved of any of his acting out.},{title:MrHawLittleperson,created:20200410152132039,creator:soren,modified:20200509015540061,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Character in WhoMovedMyCheese. One of the \Littlepeople\ who have similar brains to humans. Initially resists changing, partly due to the influence of his friend MrHemLittleperson, but eventually sets out and finds redemption and even better cheese. Cautious, but eventually convinceable, if a bit later than he might have wished in hindsight, and ends up laughing at himself|ChangeByLaughing.\n\nObviously, the person you are encouraged to be more like.},{title:MrHeinrichVonKleist,created:20200411005842276,creator:soren,modified:20200509015544811,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of MarionetteTheater.},{title:MrHemLittleperson,created:20200410151919154,creator:soren,modified:20200509015554280,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Character in WhoMovedMyCheese. One of the \Littlepeople\ who have similar brains to humans. Incredibly resistant to change when his cheese gets moved (for unknown reasons) and insists that the universe owes him his cheese, in no uncertain terms (it doesnt|UniverseDoesntOweUsAnything).\n\nEnds the tale seemingly still sitting around moping, feeling awful but refusing to change himself at all.\n\nCf. MrHawLittleperson.},{title:MrHenrikKarlsson,caption:Henrik Karlsson,created:20230216040551493,creator:soren,modified:20250905203726307,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of EscapingFlatland.},{title:MrHenryCorbin,created:20210712034258225,modified:20210712034050909,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrHenryGrabar,created:20240811151651624,creator:soren,modified:20240811151656773,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrHerodotus,created:20200326021615676,modified:20200326021700410,tags:PAO Public,type:text/vnd.tiddlywiki,text:Ancient Greek writer, often considered the first to write \history\, in quotation marks because his history was significantly based on hearsay. But he also had the reasoning to back it up: even if the stories might sometimes have been more legendary than anything else, they still taught a lot about the human condition.},{title:MrHoldenCaulfield,created:20200326001000779,modified:20200509015549289,tags:Character PAO Public,type:text/vnd.tiddlywiki,text:Protagonist of CatcherInTheRye.},{title:MrHomer,created:20200311131852247,modified:20200509015559108,tags:PAO Public,type:text/vnd.tiddlywiki,text://The// epic poet, of Greece. Cf. MrVergil.},{title:MrHumbertHumbert,created:20210609113841343,modified:20210609113645325,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:Lolita1955},{title:MrHumphreyBogart,created:20240123035426333,creator:soren,modified:20240123035427828,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrIofurRaknison,created:20200910021726126,modified:20201201031619256,tags:Public PAO Character,type:text/vnd.tiddlywiki,text:Evil armored bear in GoldenCompass. A bear who desires more than anything else to be human, which makes him exceedingly gullible and capable of being tricked by MsLyraSilvertongue using an exceedingly implausible yarn despite MrIorekByrnisons statement that you cannot trick a bear (cf. MarionetteTheater).\n\nThis offers an interesting contrast to MrPhilipPullmans vision of the FallOfMan as liberating and empowering. Iofur loses everything by betraying his original state of innocence, whereas humanity seems to have gained. What makes the difference? Were humans intrinsically capable of something Iofur wasnt? Did he fail to attempt a more bearish and independent way of losing his innocence? He was certainly tempted/fooled by outsiders (seemingly MsMarisaCoulter, the true personification of evil).},{title:MrIorekByrnison,created:20200127023730050,modified:20210607011845044,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:Armored polar bear in HisDarkMaterials. Particular friend of MsLyraSilvertongue and MrLeeScoresby. Particularly amazing in the movie adaptation of GoldenCompass.\n\nTeaches Lyra that \you cant trick a bear\ in a wonderful scene that almost exactly duplicates an idea from the MarionetteTheater essay //qua// short-story that MrPhilipPullman says in DaemonVoices is ultimately the source of HDM.},{title:MrIsaacAsimov,created:20201205060042230,modified:20201205060011081,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrIvanVendrov,caption:Ivan Vendrov,created:20250905204721954,creator:soren,modified:20250905204734462,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of NothingHuman.\n},{title:MrJackKinsella,created:20200910022601424,modified:20200910022604545,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJackSkinner,created:20200520024147678,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Australian presenter at MicrosoftBuild2020 re: AiPinball20200519.\n},{title:MrJacobFalkovich,created:20240305185939413,creator:soren,modified:20240305185941003,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJacobGabrielson,created:20200323023832469,modified:20200509015628162,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJakobNielsen,created:20210330025404639,modified:20210330025236922,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJamesBobb,created:20200314213953419,modified:20200509015634437,tags:PAO Public,type:text/vnd.tiddlywiki,text:Conductor of TheStOlafCantorei and a fantastic organist (he toured with TheStOlafChoir my junior year).\n\nAffectionately known as \J-Bobb.\},{title:MrJamesClear,created:20230406024519866,creator:soren,modified:20230406024521698,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJamesJoyce,created:20201205045405477,modified:20201205045333817,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJamesMadison,created:20210118023240364,modified:20210118023149893,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJamesPhillips,created:20200612210935139,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for PowerPlatform20200520.\n},{title:MrJasonFried,created:20210807163727311,modified:20210807163517108,tags:PAO Public,type:text/vnd.tiddlywiki,text:Cofounder of TheBasecamp.},{title:MrJdSalinger,created:20200326000939053,modified:20200509015642933,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of CatcherInTheRye along with other less-well-known books.},{title:MrJeffHollan,created:20200602151932359,modified:20200602151941363,tags:PAO Public,type:text/vnd.tiddlywiki,text:Program manager for AzureFunctions at M.|PrivatePerson.},{title:MrJeffreySnover,created:20200612234003573,modified:20200612234011178,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator of Windows PowerShell.},{title:MrJeremyJarell,created:20200326134509503,modified:20200509015700195,tags:PAO Public,type:text/vnd.tiddlywiki,text:ScrumMethodology/AgilePhilosophy thinker. Creator of the PluralSight course AgileInTheRealWorld.},{title:MrJeremyRuston,created:20200513033447931,modified:20200513033506460,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator and acting BDFL of TiddlyWiki.},{title:MrJesseCrossen,created:20251010024252565,creator:soren,modified:20251010024306948,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blog: https://hinterlander.substack.com/},{title:MrJesseJames,created:20231120222759003,creator:soren,modified:20231120222800689,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJesseSingal,created:20210809164050356,modified:20210809164053305,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJesusChrist,created:20200309203040331,modified:20200509015704668,tags:PAO Public,type:text/vnd.tiddlywiki,text:This is only the single most famous person in history. Like, why are you even reading this description right now? :-)},{title:MrJezHumble,created:20200306193835396,modified:20200509015713470,tags:PAO Public,type:text/vnd.tiddlywiki,text:One of the authors of ContinuousDelivery and highly involved in the DevOps scene (cf. MrDavidFarley).},{title:MrJimHolt,created:20221107004842539,creator:soren,modified:20221208231604413,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJoeBiden,created:20210413223705962,modified:20210413223528995,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJoelSpolsky,created:20200223150035526,modified:20200509015719242,tags:PAO Public,type:text/vnd.tiddlywiki,text:Software developer famous for masterminding StackOverflow and for a series of enlightening and still relevant blog posts about software design on his blog JoelOnSoftware around the turn of the century.},{title:MrJohnAdams,created:20210118023247755,modified:20210118023159022,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJohnFerguson,created:20200314214040309,modified:20200509015808532,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former conductor of TheStOlafCantorei and a world-renowned composer of hymn arrangements and other choral works. If you walk into any Lutheran church around Christmastime and a few extra instruments have joined, youre highly likely to hear a Ferguson introduction or arrangement played somewhere.\n\nAs of 2020, still lives in Northfield and attends practically every major StOlaf musical event. If one of his pieces gets played, youll probably see him stand up at some point!\n\nAffectionately known as \Ferg\.},{title:MrJohnHarris,created:20200309202521623,modified:20200509015814563,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJohnMcWhorter,created:20220307175642124,creator:soren,modified:20220307175644820,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJohnMichaelGreer,created:20200401231733559,creator:soren,modified:20210909033920848,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Archdruid, occultist, historian, fantasy fiction writer, and thinker on EconomicRealities. Somewhat predictable, but fun to read (I am not a fan of his fiction, but his nonfiction is both sufficiently entertaining and thought-provoking).},{title:MrJohnMilton,created:20211026032704858,creator:soren,modified:20211026032708611,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJohnSteinbeck,created:20200407022102026,creator:soren,modified:20200509015829757,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Classic American author. I havent read enough by him, but EastOfEden is definitely fantastic.},{title:MrJohnSundman,created:20230426024224387,creator:soren,modified:20230426024225173,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJonathanRose,created:20200712032455446,modified:20200712032515718,refexplorer-starttab:Sources,tags:PAO Public,type:text/vnd.tiddlywiki,text:British historian and author.},{title:MrJonathanRosenberg,created:20200910022647518,modified:20200910022650820,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJosephCampbell,created:20200226002428773,modified:20200509015911060,tags:PAO Public,type:text/vnd.tiddlywiki,text:Myth theorist, known for his famous notion of SeparationInitiationReturn.},{title:MrJosephConrad,created:20201201035319115,modified:20201201035246355,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrJosephWeizenbaum,created:20200409013718013,creator:soren,modified:20200509015916752,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:ArtificialIntelligence pioneer at MIT. The first to notice and name the ElizaEffect.},{title:MrJrrTolkien,created:20200324033713127,modified:20200509015924703,tags:PAO Public,type:text/vnd.tiddlywiki,text:Fantasy author and worldbuilder. Best known for LordOfTheRings and related literature.},{title:MrJulianJaynes,created:20200407032501289,creator:soren,modified:20201228045044197,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Psychologist and author of Jaynes1971.},{title:MrKarlPopper,created:20230406024523146,creator:soren,modified:20230406024524810,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrKazuoIshiguro,created:20210516210604172,modified:20210516210413087,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrKennethJennings,created:20200201042734249,creator:soren,modified:20200509020001302,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former director of TheStOlafChoir, after MrOlafChristiansen prior to MrAntonArmstrong. Also led TheStOlafChapelChoir for some years prior to that. M.|PrivatePerson worked with his daughter L.J.|PrivatePerson at V.U.|PrivatePerson.\n\nTheres a wonderful story in SilviaRarum about a twist of fate and intuition that led him to St. Olaf, which even involves the most wonderfully metaphorical type of transportation, trains.\n\nI had the great privilege of singing LordIsTheEverlastingGod, among other things, with TheStOlafChoir at his funeral at the start of my junior year at StOlaf, an odd start of a year that also put me at P.T.|PrivatePersons funeral. There are few musical things Ive done in my life that have left more of an impact and sense of lasting beauty on me, and Ive done quite a lot.},{title:MrKevinBehr,created:20200321223952194,creator:soren,modified:20200509020006766,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-author of The PhoenixProject.},{title:MrKevinGallo,created:20200910022719997,modified:20200910022723079,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrKevinUnderhill,caption:Kevin Underhill,created:20210810192446523,creator:soren,modified:20250905204105605,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the legal-humor blog LoweringTheBar.},{title:MrKimAndreArnesen,created:20210810192535860,modified:20210810192537345,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrKurtReznik,created:20200304213001102,modified:20200509020011944,tags:Character UnicornProject PAO Public,type:text/vnd.tiddlywiki,text:Director of QA at ThePartsUnlimited, then moved over to lead the PartsUnlimitedDataHub team.},{title:MrKurtVonnegut,created:20220308130336413,creator:soren,modified:20231022205920995,modifier:soren,refexplorer-starttab:Sources,tags:PAO Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,text:American author of satirical science fiction. Im reading all of his novels in chronological order with a group of folks in Minneapolis|Minneapolis who I met on Reddit for this purpose.\n\nI give all the books a `universe` value of `MrKurtVonnegut` because his books reference each other regularly; its great fun to read them all in order because you notice these connections much more easily.\n\nBooks here discussed:\n\n\u003Ctable>\n\t\u003Ctr>\n\t\t\u003Cth>Title\u003C/th>\n\t\t\u003Cth>Year\u003C/th>\n\t\t\u003Cth>Rating\u003C/th>\n\t\u003C/tr>\n\t\u003C$list filter\MrKurtVonnegutbacklinkstagSourcesortyear\>\n\t\u003Ctr>\n\t\t\u003Ctd>\u003C$link>{{!!caption}}\u003C/$link>\u003C/td>\n\t\t\u003Ctd>{{!!year}}\u003C/td>\n\t\t\u003Ctd>\u003Cspan style{{{ allcurrentgetratingaddprefix$:/sib/MediaRating/getcoloraddprefixcolor: addsuffix; }}}>\u003C$text text{{{ allcurrentgetrating }}}/>\u003C/span>\u003C/td>\n\t\u003C/tr>\n\t\u003C/$list>\n\u003C/table>},{title:MrLeeScoresby,created:20200314210912203,modified:20210607011853195,tags:Character PAO Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:Balloonist and hero in HisDarkMaterials (dies an appropriately heroic and self-sacrificial death during SubtleKnife). The side-adventure book OnceUponATimeInTheNorth focuses on him.\n\nParticular friend of MsLyraSilvertongue and MrIorekByrnison.},{title:MrLenChandler,created:20201015012742160,modified:20201015012732188,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrLeonardBernstein,created:20210516224842476,modified:20210516224651139,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrLeoTolstoy,created:20200910022712491,modified:20200910022715840,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrLesFarley,caption:Les Farley,created:20210909025121655,creator:soren,modified:20210909025159411,modifier:soren,tags:Character PAO Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:Vietnam veteran in HumanStain2000, afflicted by severe and lifelong PTSD which we see firsthand in great detail, although seemingly mostly in the imagination of MrNathanZuckerman, because Zuckerman has only brief encounters with him in the story. Ex-abusive husband of MsFauniaFarley. Runs MrColemanSilk and Faunia off the road, most likely as an intentional murder, although again we have only Zuckermans intuition as evidence.},{title:MrLewisCarroll,created:20200226003245792,modified:20200509020028053,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of AliceInWonderland and ThroughTheLookingGlass, as well as a number of other less popular works, some of which were evidently quite awful (I have not read SylvieAndBruno but would like to even though parts of it are considered quite awful, just to see!).\n\nLewis Carroll is a pen name; actual name was the Reverend Charles Dodgson.},{title:MrLinusTorvalds,created:20200426164903949,modified:20200509020034342,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator and BDFL of the Linux operating system.},{title:MrLionKimbro,created:20200314211623074,modified:20200715020716488,tags:PAO Public,type:text/vnd.tiddlywiki,text:Thinker on note-taking I read back in the day, including CompleteThoughtMapping2003, and an entry in MindHacker.},{title:MrLuisCabrera,created:20200602141759690,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter on Azure CognitiveSearch in CognitiveSearch20200520.\n},{title:MrLuisVargas,created:20200910022725427,modified:20200910022728541,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMadsTorgersen,created:20200520024431255,modified:20200520024742285,tags:PAO Public,type:text/vnd.tiddlywiki,text:Lead designer of the CSharp language. Presented thereon in CSharpTodayAndTomorrow20200519.},{title:MrMalcolmPolstead,created:20200309202945725,creator:soren,modified:20210901015211957,modifier:soren,tags:Character PAO Public,type:text/vnd.tiddlywiki,text:Protagonist or co-protagonist of several of the BookOfDust volumes. Saved MsLyraSilvertongue from a flood as a baby (along with A.|PrivatePerson) and later falls in love with her. To be continued...},{title:MrMarcAndreessen,created:20201015023235086,modified:20201015023225096,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMarcusAurelius,created:20210916152100928,creator:soren,modified:20210916152103630,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMarkBurstein,created:20201119191616246,modified:20210725230908613,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMarkDominus,caption:Mark Dominus,created:20221129225447728,creator:soren,modified:20250905204439834,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Developer, author of https://blog.plover.com/.},{title:MrMarkForster,created:20240203152758517,creator:soren,modified:20240203152759286,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMarkStover,created:20200314214808564,modified:20200509020126072,tags:PAO Public,type:text/vnd.tiddlywiki,text:Interim conductor of TheStOlafChapelChoir and TheVikingChorus between C.A.|PrivatePerson and MrTesfaWondemagegnehu.},{title:MrMarkTwain,created:20210628022604632,modified:20210628022358665,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMarkusEgger,created:20200511020554326,modified:20200511020648940,tags:PAO Public,type:text/vnd.tiddlywiki,text:Editor of CodeMagazine and an associated consulting firm, and a M.|PrivatePerson regional director.},{title:MrMartinBuber,created:20210711160125378,modified:20210711155917092,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMartinGardner,created:20201119191559684,modified:20201119191540950,tags:PAO Public,type:text/vnd.tiddlywiki,text:Longtime editor of //The Annotated Alice//.},{title:MrMartinLuther,created:20200411010427998,creator:soren,modified:20200509020142662,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Father of Protestant thought (OK, I really hope you knew that one: but apparently 50% of self-identified Protestants in one survey couldnt say that Luther started the Reformation).},{title:MrMarvinMinsky,created:20210331115114910,modified:20210331114945705,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMattLakeman,caption:Matt Lakeman,created:20250905204246571,creator:soren,modified:20250905204257204,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMaxAlexander,created:20200323024219859,modified:20200509020148083,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMichaelCulloton,created:20200311131746145,modified:20200509020155980,tags:PAO Public,type:text/vnd.tiddlywiki,text:New (as of 2020) director of TheConcordiaCollege choir.},{title:MrMichaelKasten,created:20210127184316219,modified:20210127184316503,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMichaelNielsen,created:20200707233105685,modified:20200707233153860,tags:PAO Public,type:text/vnd.tiddlywiki,url:http://michaelnielsen.org/,text:Scientist, quantum computing researcher, and personal information science thinker.\n\n{{!!url}}},{title:MrMichaelPollan,created:20210118004917641,modified:20210118004827250,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMiguelDeCervantes,created:20201203021431225,modified:20201203021359383,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrMitchDaniels,created:20200519011348221,modified:20200519011414858,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former Republican governor of Indiana and president of ThePurdueUniversity.},{title:MrMoneyMustache,created:20210909234920123,creator:soren,modified:20220118035301387,modifier:soren,tags:PAO Publication Public,type:text/vnd.tiddlywiki,url:https://www.mrmoneymustache.com,text:Persona and blog|https://www.mrmoneymustache.com/ on financial independence.\n\nWhat I like about MMM, enough to consider adopting at least some of its ideas, is that its not about living out of your car for ten years eating rice and beans and then retiring early. The approach he champions manages (on paper at any rate) to allow many people to retire early\u003C\u003Cfnote \\\According to the math and assuming the stock market continues growing over the course of someones life, which I feel is by no means a safe assumption given that ClimateChange and EconomicRealities are beginning to catch up with us.\\\>> while simultaneously having better lives, building community, and becoming more resilient. You have to give up overpaying for things, avoid unnecessary purchases both large and small, and save a large portion of your income to get all the way there, but you dont have to be cheap, and even going partway can achieve significant gains on all the outcomes.\n\nI find a lot to like here because I cant get on board with an approach to life that delays living well for any significant length of time; what if you die before you get to the goal|CouldWakeUpTomorrowDead or the stock market goes to zero the month after you quit your office job? Both are low risks, maybe 2--5% together for me over the time horizon wed be looking at here, but you only get one life. I have a hard time seeing that for someone who is already quite marketable and making enough money to make this work reasonably, full financial independence is worth that risk. But here, youre not delaying living, and the fact that most people stand to improve their lives through this approach also means that, should something happen to the economy that makes living on investments in the traditional fashion infeasible, you can still end up better off -- it doesnt mean you just wasted a bunch of years of your life pinching pennies.\n\nIn some ways, MMMs philosophy is just my EfficientLife taken to its logical conclusion for someone who prioritizes financial independence higher than I do.},{title:MrMortimerAdler,created:20200909141210346,modified:20200909141212895,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrNassimNicholasTaleb,created:20200121020224509,creator:soren,modified:20211029031751225,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the //Incerto// series, comprising FooledByRandomness2004, BlackSwan, BedOfProcrustes2010, AntiFragile2012 (see AntiFragility), and SkinInTheGame2018.\n\nA polemic and highly entertaining writer, and (I think) a brilliant thinker. Used to be a quite successful options trader, but seems to have scrapped that just out of not liking it and having other ideas for what he wanted to do with his life -- and presumably, out of having made enough money to not have to give a damn anymore! (As MrDerekSivers says|https://sivers.org/wtg, when you win the game, you stop playing.)\n\nP.|PrivatePerson has remarked that he thinks he likes Taleb too much, like he must be missing something because he finds so little to disagree with! Im not sure Id go quite so far, but very plainly he brings up excellent ideas and counterpoints to todays consensus that are well worth reading. Undoubtedly some of what he says is totally wrong, but that tends to be how interesting thinkers go|https://slatestarcodex.com/2019/02/26/rule-genius-in-not-out/, and shouldnt be a reason to dislike or discard them.\n\nFor some infuriating reason I cannot for the life of me keep the order of Talebs names straight, so...\n\n\u003C\u003Cremembercz \20200708005028357\\n\t\The correct order of Talebs given names is {Nassim Nicholas}.\>>\n\t\n!! References\n\n> The problem with Taleb is not that hes an asshole. He is an asshole. The problem with Taleb is that hes right.\n> ---Tweet by Dan, quoted on the dust jacket of //Skin in the Game//},{title:MrNateSilver,created:20200910022609476,modified:20200910022636352,tags:PAO Public,type:text/vnd.tiddlywiki,text:The popular face of statistical modeling. Guru of FiveThirtyEight.},{title:MrNatFreeman,created:20200521194300506,modified:20200521194308651,tags:PAO Public,type:text/vnd.tiddlywiki,text:CEO of TheGitHub in 2020.},{title:MrNathanielWade,created:20200910022733243,modified:20200910022736966,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrNathanRobinson,created:20200423030119041,modified:20200509020203094,tags:PAO Public,type:text/vnd.tiddlywiki,text:Editor and mastermind of TheCurrentAffairs. Friend of my friend B.S.|PrivatePerson.},{title:MrNathanZuckerman,caption:Nathan Zuckerman,created:20210909024914298,creator:soren,modified:20210909024933259,modifier:soren,tags:Character PAO Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:Narrator of HumanStain2000, professional author, a random dude who moves near town to live a mostly solitary existence. Coleman befriends Zuckerman near the end of his life, not to the immediate delight of Zuckerman, after Coleman has resigned and retired.},{title:MrNeilPostman,created:20200909141216999,modified:20200909141219894,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrNickBostrom,created:20210516224848935,modified:20210516224657408,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrNickSlater,created:20200423025829886,modified:20200509020223039,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author for TheCurrentAffairs.},{title:MrNicolasGarfinkel,created:20200529205717030,modified:20200529205734694,tags:PAO Public,type:text/vnd.tiddlywiki,text:Developer on M.|PrivatePersons Python-tooling team. Presenter of PythonAzureApps20200520.},{title:MrNiklasLuhmann,created:20200225031414072,creator:soren,modified:20240718131851506,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:German sociologist famous especially for his prolific output presumably permitted by the ZettelKasten system, writing somewhere around 60 books in his lifetime.\n\nBegan life as a public servant and read and took notes using his system in the evening, the quintessential SecondShiftIntellectual. Eventually became a professor once someone took notice of his work.},{title:MrNoahSmith,caption:Noah Smith,created:20250905203944038,creator:soren,modified:20250905203951932,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrNoamChomsky,created:20210215032737327,modified:20210215032631902,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrNortonJuster,created:20200428025232237,modified:20200509020253067,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of PhantomTollbooth.},{title:MrOlafChristiansen,created:20200309193637004,modified:20200509020257837,tags:Music PAO Public,type:text/vnd.tiddlywiki,text:Second director of TheStOlafChoir. Son of the somewhat more famous MrFMeliusChristiansen.},{title:MrOliverGoldsmith,created:20201201035333971,modified:20201201035301821,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPatrickCollison,created:20230416024722114,creator:soren,elsekey:Patrick Collison,modified:20230419172813902,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPatrickLencioni,created:20210516224854532,modified:20210516224705067,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPatrickMcKenzie,created:20240811151822921,creator:soren,modified:20240811151828063,modifier:soren,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrPaulGraham,created:20210701014222440,modified:20210701014015896,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPaulONeill,created:20200306193528770,modified:20200509020311803,tags:PAO Public,type:text/vnd.tiddlywiki,text:CEO of TheAlcoa during its safety blitz.},{title:MrPeterDrucker,created:20200309202507655,modified:20200309202509616,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPeterJackson,created:20210117212810703,modified:20210117212720411,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPeterLee,created:20200910023007180,modified:20200910023010301,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPeterSalus,created:20200121022622488,modified:20200509020317574,tags:PAO Public,type:text/vnd.tiddlywiki,text:From Wikipedia: \n\n\u003C\u003C\u003C\nPeter Henry Salus is a linguist, computer scientist, historian of technology, author in many fields, and an editor of books and journals. He has conducted research in germanistics, language acquisition, and computer languages.\n\u003C\u003C\u003C\n\nBest known for a number of books on the history of technology.},{title:MrPhilHoutz,created:20201202203801137,modified:20201202203729598,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPhilipPullman,created:20200122030106530,creator:soren,modified:20221002155718371,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of HisDarkMaterials, BookOfDust, FairyTalesFromTheBrothersGrimm, DaemonVoices, and likely other things Ive read Im forgetting. Among my favorite living authors.\n\nAn atheist, but not of the variety that annoys me. I find his atheism actually quite refreshing; he sees a great deal of room for the more imaginative and mystical aspects of the universe even as he has difficulty figuring out how to work them into his metaphysics, and he admits a certain amount of cognitive dissonance and IntellectualHumility.},{title:MrPhilipRoth,created:20210909025722894,creator:soren,modified:20210909025725992,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPhilipTetlock,created:20231019015012718,creator:soren,modified:20231019015014213,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrPiotrWozniak,created:20200326021831581,modified:20200509020402458,tags:PAO Public,type:text/vnd.tiddlywiki,text:Thoroughly eccentric creator of the SuperMemo software. Part subject of the Wired article RememberEverythingYoullEverLearn.\n\nHes married, and I have never heard anything about his wife except that she must also be wonderfully eccentric, and there must be hope for the rest of us too if he found someone to spend his life with!},{title:MrPjVogt,created:20200411003530246,creator:soren,modified:20200509020408503,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-host of ReplyAll with MrAlexGoldman.},{title:MrPotterStewart,created:20200410145949136,creator:soren,modified:20200509020415540,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Supreme Court justice, best known nowadays for having brought the KnowItWhenWeSeeIt phrase into public consciousness.},{title:MrPrashanthChandrasekar,created:20210810182943984,modified:20210810183001842,tags:PAO Public,type:text/vnd.tiddlywiki,text:CEO of StackOverflow as of 2021.},{title:MrPrinceRoc,created:20240718033050534,creator:soren,modified:20240718033058222,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Prince Roc is a bartender and professional cuddler. Raised very sheltered in nondenominational Christianity with heavy Amish/Mennonite influences, Prince discovered his passion for growth in the midst of a shattering mental breakdown at 26. He remembers having the thought I dont think ill ever escape this... but if I do I will help others get out too. From that point on he was challenged to rethink everything he had been told as he rebuilt his life from the ground up. Setting out on a journey to heal, unlearn and redefine his paradigms, and ultimately discover how to build and maintain an abundant life. Prince has facilitated Full Moon spiritual gatherings, cuddle parties (with his partner Heather Grace) and kink 101 workshops. He specializes in creating Sacred Spaces, and was featured on Netflixs How to Build a Sex Room He has become a strong advocate for all things mental health, conscious and nontraditional relationships, self growth, spirituality, community, family and Death.},{title:MrRajeshJha,created:20200910023020683,modified:20200910023023823,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRandallMunroe,created:20200513020554992,modified:20200513020625928,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator of the comic xkcd and sundry other science- and humor-related sites and books. Formerly worked at NASA.},{title:MrRandyCassingham,created:20201206181550238,modified:20201206181518359,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRandyShilts,created:20221108131850719,creator:soren,modified:20221108131853138,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRaymondChandler,created:20230122162743582,modified:20230122162747114,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRichardDawkins,created:20221107004834636,creator:soren,modified:20221107004836510,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRichardFeynman,created:20200309202456116,modified:20200509020445150,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRichardGabriel,created:20200411005206196,creator:soren,modified:20200509020449735,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Thinker and author of PatternsOfSoftware, a book of essays about software. Lisp programmer in the early days.},{title:MrRichardLinklater,created:20210307132252117,modified:20210307132135768,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRichardSeroter,created:20200428181519650,modified:20200509020454935,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator of the DevOpsInTheRealWorld course.},{title:MrRichardStallman,created:20200411024413387,creator:soren,modified:20200509020515405,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:A somewhat crazy idealistic advocate for OpenSourceSoftware and similar concepts of computing freedom. While I would never try to take his advice verbatim, he has, as N.S.|PrivatePerson once explained, “been right depressingly often.” If you can put up with him, he offers a lot of great perspectives. He also founded and for many years led TheFreeSoftwareFoundation, which has done an immense amount of good both in actually putting out free software and in advocating it.},{title:MrRichHickey,created:20200410161057319,creator:soren,modified:20200509020501080,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the Clojure ProgrammingLanguage.},{title:MrRoaldDahl,created:20200314210826155,modified:20200314210858243,tags:PAO Public,type:text/vnd.tiddlywiki,text:British writer between WorldWarTwo and the early nineties. Particularly well-known for his childrens books.},{title:MrRobertBringhurst,created:20200127030118529,modified:20200509020741138,tags:PAO Public,type:text/vnd.tiddlywiki,text:Writer, poet, and typographer best known for ElementsOfTypographicStyle.},{title:MrRobertCoover,created:20201201035259135,modified:20201201035226397,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRobertFulghum,created:20250330193953157,creator:soren,modified:20250330193957541,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRobertGreene,created:20200909141404322,modified:20200909141407101,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrRobertHeinlein,created:20200323115407933,modified:20200323115414074,tags:PAO Public,type:text/vnd.tiddlywiki,text:American science-fiction author.},{title:MrRobertMauceri,created:20200529185823016,modified:20200529185910780,tags:PAO Public,type:text/vnd.tiddlywiki,text:Researcher in the field of machine learning and responsible AI, with a focus on interpretability and privacy. Participant in the ResponsibleAiPanel20200519 at MicrosoftBuild2020.},{title:MrRobertPirsig,created:20200410150544271,creator:soren,modified:20200509020747207,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of ZenAndTheArtOfMotorcycleMaintenance.},{title:MrRogerParslow,created:20200811213834152,modified:20210725230930047,tags:PAO Character Public,type:text/vnd.tiddlywiki},{title:MrRohanKumar,created:20200910124755974,modified:20200910124756267,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRomanMazurenko,created:20210516212453025,modified:20210516212301867,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRonaldReagan,created:20200910023029868,modified:20200910023033289,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrRonHaleEvans,created:20200323032054958,modified:20200509020752775,spouse:MsMartyHaleEvans,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-author of MindHacker (with wife MsMartyHaleEvans).},{title:MrRoyUnicorn,created:20200306194245259,modified:20200509020800239,tags:UnicornProject Character PAO Public,type:text/vnd.tiddlywiki,text:Evil QA manager (or at least one who has a //very// wrong notion about the adversarial relationship between Dev and QA -- and cf. ItCasteSystem) of UnicornProject.\n\nLike MrTomUnicorn, has no last name, apparently due to authorial oversight.},{title:MrRyanHoliday,created:20200910022738330,modified:20200910022744180,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MrRyanLevick,created:20200521214645295,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Learner on the 30-Minute Rust Coding Challenge|RustChallenge20200520 at MicrosoftBuild2020. Also presenter on SafeSystemsProgrammingLanguages20200521.\n},{title:MrRyanTomayko,created:20201205233134528,modified:20201205233105930,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSamBroner,created:20200910124808437,modified:20200910124808538,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSamedAlHajajla,created:20200521214716416,modified:20200521214726776,tags:PAO Public,type:text/vnd.tiddlywiki,text:RustLanguage presenter and competive programmer on the 30-Minute Rust Coding Challenge|RustChallenge20200520 at MicrosoftBuild2020.},{title:MrSashaChapin,created:20220504192926387,creator:soren,modified:20220504192940441,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Substack: https://sashachapin.substack.com/},{title:MrSatyaNadella,created:20200407182914372,creator:soren,modified:20200509020808000,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Present CEO of M.|PrivatePerson.},{title:MrScottAaronson,created:20230406023019824,creator:soren,modified:20230406023020992,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrScottAlexander,caption:Scott Alexander,created:20200902025150503,creator:soren,elsekey:Scott Alexander,modified:20250905203407966,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of SlateStarCodex, sometimes here (and there) abbreviated //SA//.},{title:MrScottGuthrie,created:20200529210939733,modified:20200529210945577,tags:PAO Public,type:text/vnd.tiddlywiki,text:VP at M.|PrivatePerson.},{title:MrScottHanselman,created:20200521194931008,modified:20200521194947446,tags:PAO Public,type:text/vnd.tiddlywiki,text:Program manager at M.|PrivatePerson. Hosted the EveryDeveloperIsWelcome20200519 event in MicrosoftBuild2020.},{title:MrSebastianChopin,created:20200521213756330,modified:20200521213804875,tags:PAO Public,type:text/vnd.tiddlywiki,text:Developer of NextJs. Participant in the WebForEveryone20200520 session at MicrosoftBuild2020.},{title:MrSebastianMarshall,created:20200407004843832,creator:soren,modified:20211029022351530,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the book RoguelikeBook.},{title:MrSegunAdebayo,created:20200521213516688,modified:20200521213546176,tags:Public PAO,type:text/vnd.tiddlywiki,text:Designer of the web framework ChakraUi. Lives in Dubai.\n\nParticipant in the WebForEveryone20200520 session at MicrosoftBuild2020.},{title:MrSeneca,created:20210916152041519,creator:soren,modified:20210916152043870,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSethGodin,created:20200712145304757,modified:20200712145616976,tags:PAO Public,type:text/vnd.tiddlywiki,url:https://seths.blog/,text:Entrepreneur and very popular blogger ({{!!url}}).},{title:MrSethJuarez,created:20200520021648099,modified:20200520021653786,tags:PAO Public,type:text/vnd.tiddlywiki,text:Microsoft employee and host of MicrosoftBuild2020, introduced in WelcomeToBuild20200519.},{title:MrShawnCamp,created:20250406134702864,creator:soren,modified:20250406134703798,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrShelSilverstein,created:20200329154926205,modified:20200509020827983,tags:PAO Public,type:text/vnd.tiddlywiki,text:American childrens author of the 20th century.},{title:MrSigmundFreud,created:20200325230133069,modified:20200809020120884,tags:Psychology PAO Public,type:text/vnd.tiddlywiki,text:Immensely important thinker in early psychology. Some kind of woo-woo ideas in there, but an interesting read nevertheless, and his cultural influence can hardly be understated.},{title:MrSimonSarris,created:20210702022809415,modified:20210702022602916,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSimonWardley,created:20200406181531284,creator:soren,modified:20200509020842802,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator of the WardleyMapping technique.},{title:MrSimonWiesenthal,created:20211104232626484,creator:soren,modified:20211104232627641,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSönkeAhrens,created:20200225031050781,modified:20200509020854942,tags:PAO Public,type:text/vnd.tiddlywiki,text:From SmartNotes10Principles20200204:\n\n> Ahrens is a Lecturer in Philosophy of Education at the University of Duisburg-Essen and also coaches students, academics, and professionals with a focus on time management, decision-making, and personal growth.\n\nAuthor of HowToTakeSmartNotes.},{title:MrSorenKierkegaard,created:20210712032334063,modified:20210712032126101,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrSpencerJohnson,created:20200410151135848,creator:soren,modified:20200509020900773,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Management consultant and writer. Author of WhoMovedMyCheese.},{title:MrStanislausGrumman,created:20210425231451232,modified:20210425231310752,tags:PAO Character Public,type:text/vnd.tiddlywiki},{title:MrStefanSagmeister,created:20210726022259161,modified:20210726022048106,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrStephenLaBerge,created:20200410132005284,creator:soren,modified:20200509020909204,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Researcher in and evangelist for the practice of LucidDreaming.},{title:MrStephenSiciliano,created:20200529165233137,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:MicrosoftBuild2020 presenter on PowerAutomate, specifically in PowerAutomate20200519.\n},{title:MrStephenThair,created:20200529233145900,modified:20200529233203786,tags:PAO Public,type:text/vnd.tiddlywiki,text:Founder of the DevOps Group. Presenter at DevOpsStateOfNation20200521.},{title:MrSteveJones,created:20200730210146399,modified:20200730210209243,tags:PAO Public,type:text/vnd.tiddlywiki,text:Editor at the SQL Server Central data organization.},{title:MrSteveMasters,created:20200306191852838,creator:soren,modified:20200509020914698,modifier:soren,tags:Character PAO UnicornProject Public,type:text/vnd.tiddlywiki,text:CEO of ThePartsUnlimited.},{title:MrSteveSanderson,created:20200529201423291,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Software engineer at M.|PrivatePerson for ASP.NET, presented on BlazorWebAssembly20200520.\n},{title:MrSteveWozniak,created:20200428183357018,modified:20200509020923937,tags:PAO Public,type:text/vnd.tiddlywiki,text:Technical genius of TheApple in its earliest days. I have heard claimed that Wozniak designed and developed the entirety of the hardware and software of the Apple II, and to this day not a single bug has ever been found in the released version!},{title:MrTaylorBrown,created:20200529195242112,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for WinServerContainers20200519.\n},{title:MrTedChiang,created:20220817192029816,creator:soren,modified:20220817192032278,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTeddyRoosevelt,created:20200425034106014,modified:20210812021140424,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former president of the UnitedStates. An interesting person and often quoted and studied.\n\nHated being called Teddy, but everyone called and still calls him that, so thats his tiddler title too. :)},{title:MrTedNelson,created:20201205232911671,modified:20201205232840756,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTerryPratchett,created:20240305210416978,creator:soren,modified:20240305210418231,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTesfaWondemagegnehu,created:20200314214834582,modified:20200509020937666,tags:PAO Public,type:text/vnd.tiddlywiki,text:Conductor of TheStOlafChapelChoir and TheVikingChorus.},{title:MrThomasDavenport,created:20210627022247139,modified:20210627044909286,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrThomasErickson,created:20221130000549319,creator:soren,modified:20221130000550532,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrThomasFriedman,created:20200604212049967,modified:20210517004144377,tags:PAO Public,type:text/vnd.tiddlywiki,text:Divisive foreign-policy columnist for TheNewYorkTimes.},{title:MrThomasJefferson,created:20210118023301316,modified:20210118023210925,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrThomasLimoncelli,created:20201207000402971,modified:20210725230941542,tags:PAO Public,type:text/vnd.tiddlywiki,text:SRE manager at StackOverflow. Author of ManualWorkIsABug2018, about that.},{title:MrThomasRicks,created:20210118023307918,modified:20210123154215988,tags:PAO Public,type:text/vnd.tiddlywiki,text:American journalist and military historian.},{title:MrTiagoForte,created:20200225031127613,modified:20200509020943574,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of the blog ForteLabs.},{title:MrTimothyGowers,created:20240207045959101,creator:soren,modified:20240207050000577,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTimUrban,created:20251020042811129,creator:soren,modified:20251020042812653,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTimWalz,created:20200425033425613,modified:20200509021019575,tags:PAO Public,type:text/vnd.tiddlywiki,text:Governor of Minnesota. Has been doing really a wonderful job handling the coronavirus pandemic|PandemicMood, in my opinion.},{title:MrTodorFay,created:20200521141017007,modified:20200521141029122,tags:PAO Public,type:text/vnd.tiddlywiki,text:Developer and CEO at TheNewBlue as of May 2020.},{title:MrTomDuxbury,created:20201018030018728,modified:20201018030007561,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTomPrestonWerner,created:20200910022937071,modified:20200910022940173,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTomUnicorn,created:20200306194059418,modified:20200509021031120,tags:UnicornProject Character PAO Public,type:text/vnd.tiddlywiki,text:Senior developer on the UnicornProjects PartsUnlimitedDataHub team, who shows MsMaxineChambers the ropes. Never given a last name for some reason, including in the \employee directory\ that one would think should include all of the characters. (But it appears nobody proofread this book, which even uses \their\ for \theyre\ in more than one place!)},{title:MrTonyMakarios,created:20200910022747185,modified:20200910022905748,tags:PAO Public Character,type:text/vnd.tiddlywiki,text:Child captured by the Gobblers and found by MsLyraSilvertongue in the fish hut in GoldenCompass. Otherwise little known in the story. In the HdmBbcSeries, role largely replaced by MrBillyCosta.},{title:MrTroyHunt,created:20200909141253052,modified:20200909141253169,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrTsEliot,created:20200910022931019,modified:20200910022934128,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrUlricNeisser,created:20201222210243046,modified:20201222210203778,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrUmbertoEco,created:20200322040305650,creator:soren,modified:20200509021044044,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Italian author.},{title:MrVenkateshRao,created:20200909162419169,modified:20200909162419874,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrVenonThompson,created:20250406134658531,creator:soren,modified:20250406134659266,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrVergil,created:20200311131829130,modified:20200509021053740,tags:PAO Public,type:text/vnd.tiddlywiki,text:The worlds most famous Latin poet, and probably the most famous epic poet ever except for MrHomer.},{title:MrVladimirNabokov,created:20201201035312759,modified:20201201035240013,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrWardCunningham,created:20200309204030640,modified:20200509021058965,tags:PAO Public,type:text/vnd.tiddlywiki,text:Creator of the wiki, signatory to the manifesto for the AgilePhilosophy, and involved in design patterns and XP movements.},{title:MrWarrenBuffett,created:20200329175016976,memberof:TheBerkshireHathaway,modified:20200509021103464,tags:PAO Public,type:text/vnd.tiddlywiki,text:Famous investor, institution TheBerkshireHathaway. Worked with MrCharlieMunger.},{title:MrWestonNoble,created:20200125220159999,modified:20200509021114263,tags:PAO Public,type:text/vnd.tiddlywiki,text:Director of Luther Colleges TheNordicChoir and a patriarch of the music department for many, many years. The music building there is now named after him. He passed away in 2017-ish.},{title:MrWilliamIrvine,created:20210909190432872,creator:soren,modified:20210926030744108,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrWilliamShakespeare,created:20200330024454836,modified:20200509021120233,refexplorer-starttab:Sources,tags:PAO Public,type:text/vnd.tiddlywiki,text:Only the most famous English playwright in history.\n\n(Cf. SilviaRarums ~WhatIsTheology.)},{title:MrWillParry,created:20200313031931140,modified:20201121031010996,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Character in HisDarkMaterials. Son of MsElaineParry. Traveling companion and later lover of MsLyraSilvertongue. Known as a murderer (while protecting those he loves). Bearer of the SubtleKnife. Practical, ruthless, and mostly likable.},{title:MrWyntonMarsalis,created:20260102132635280,creator:soren,modified:20260102132643699,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MrYoda,created:20200321223706044,creator:soren,modified:20200509021132092,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Guru of the StarWars series.},{title:MrYogiBerra,created:20201121010024307,modified:20201204235014790,tags:PAO Public,type:text/vnd.tiddlywiki,text:Baseball player famous for his sort-of-Malapropisms and sort-of-wise sayings. MrNassimNicholasTaleb calls Berra one of the 20th centurys greatest aphoristic philosophers.\n\n!! References\n\n\u003C\u003C\u003C\nNever answer an anonymous letter.\n\u003C\u003C\u003C\n\n\u003C\u003C\u003C\n(//Giving someone directions//)\u003Cbr>\nWhen you come to a fork in the road, take it.\n\u003C\u003C\u003C\n\n\u003C\u003C\u003C\nA nickel isnt worth a dime today.\n\u003C\u003C\u003C},{title:MrZviMowshowitz,caption:Zvi Mowshowitz,created:20210307150644686,creator:soren,modified:20250905203546061,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAella,created:20221121034543775,creator:soren,modified:20221121034601371,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Former sex worker, super interesting person. Rationalist community. Substack: https://aella.substack.com},{title:MsAjLevine,created:20240718032449256,creator:soren,modified:20240718032449925,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAlisonKrauss,created:20201207044729965,modified:20201207045157632,tags:PAO Public,type:text/vnd.tiddlywiki,text:img class\right-float\ width400 alison-krauss.png\n\nBluegrass singer and fiddle player. Amazingly clear and piercing voice. As of 2020, has won more Grammys than any other singer or female artist, and is third overall -- but is strangely not all that well known.\n\n{{MsAlisonKrauss/p||PrivateChunk}}},{title:MsAllisonBuchholtzAu,created:20200521194857654,modified:20200521194902857,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter in EveryDeveloperIsWelcome20200519.},{title:MsAmandaAskell,created:20250609141200356,creator:soren,modified:20250609141205888,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAmandaSilver,created:20200909141229475,modified:20200909141229573,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAngieJones,created:20200716161330280,modified:20200716161330564,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAnneCarson,created:20221101030313075,creator:soren,modified:20221101030314194,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAnneFrank,created:20210807163710735,modified:20210807163452862,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAprilEdwards,created:20200529233231207,modified:20200529233247134,tags:PAO Public,type:text/vnd.tiddlywiki,text:DevOps engineer at M.|PrivatePerson. Presenter at DevOpsStateOfNation20200521.},{title:MsArchanaSassetharan,created:20200910022917808,modified:20200910022920907,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsAvaGardner,created:20240123035432046,creator:soren,modified:20240123035432749,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsBethPatterson,created:20240718032638763,creator:soren,modified:20240718032639384,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsCaitlinDoughty,created:20200425031702079,memberof:TheOrderOfTheGoodDeath,modified:20200509021151972,tags:PAO Public,type:text/vnd.tiddlywiki,text:Organizer of TheOrderOfTheGoodDeath.},{title:MsCateHall,caption:Cate Hall,created:20250617163912287,creator:soren,modified:20250905204154423,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsCathrynTheGrateful,created:20240718031135116,creator:soren,modified:20240718031209528,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Cathryn the Grateful (we/our) is a Minister of Movement and a multidisciplinary artist. We are the founder of the Joyful Revolution (2018) and A Living Temple (2020), a domestic Temple honoring the Divine Feminine through weekly sacred circles in Charleston, SC. We lead guided sacred movement called Divine Dance Party and host a weekly show on 96.3FM Ohm Radio. The daughter of an artist and a Jungian psychologist, Cathryn’s creative spirit is shaped by dreams, pleasure, spirituality and social justice. Most recently we created contemplative installations re-envisioning the sacred nativity through mirrors and mushrooms called BE STILL & KNOW (2021) and MOTHER NATURE’S SACRED CHILD (2022) for Mepkin Abbey, a Trappist monastery. Our national artist collective, Hive Temple Collective, co-create temporary temples in the priestess tradition offering ancient Blessings of Remembrance (water, smoke, song & anointing) at Burning Man (Miami & Black Rock City) in 2023.\n\n{{MsCathrynTheGrateful/p||PrivateChunk}}},{title:MsChasen,created:20200125202831570,modified:20240320214749228,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:MsChasen is the overly practical and literalist, heartless mother of MrHaroldChasen in the film HaroldAndMaude1971. (Her husband appears to be dead or out of the picture, as we never hear about him.) She would be a DislikableCharacter, but its taken so far that she’s hilarious instead of dislikable.\n\nOur first introduction to her is when she comes into the music room while Harold is apparently suffocating after ritually preparing the room and hanging himself, looks over at him, and unconcernedly gets on the phone and starts making an unrelated appointment, once looking over and going, “I suppose you think that’s very funny, Harold.” The funny thing is that your natural reaction of “man, this lady is heartless” turns out to be not entirely off-base, even though in this particular situation her reaction turns out to be an eminently sensible one!\n\nWho can forget her chiding: “That was your last date, Harold!” It’s so matter-of fact, too, it’s almost like a video-game message. And as if this were a TV show, where these are your three choices in life. Not to mention, of course, that all of the dates were horrendous matches to begin with because not only does a “computer dating service” with mechanical matches that “filter out the fat and ugly people” likely bias towards moderately attractive, dull people who are a terrible fit for Harold in the first place, she also filled out the questionnaire for him! I also think it’s hilarious that she seems to have expected the third date to go differently after he faked self-immolation and chopping off his arm on the first and second ones. On the other hand, the great irony is that until she walked in, it actually wasn‘t going so bad as all that, since the girl (as an actress) saw through and loved his seppuku performance and responded with her RomeoAndJuliet version. Not that they likely would have worked out from what we saw before that.},{title:MsChristinaGorton,created:20200521213447335,modified:20200521213509168,tags:PAO Public,type:text/vnd.tiddlywiki,text:Participant in the WebForEveryone20200520 session at MicrosoftBuild2020. UnitedStates developer living in Costa Rica.},{title:MsConnieConverse,created:20230405021839387,creator:soren,modified:20230405021847168,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsDelphineRoux,caption:Delphine Roux,created:20210909024601183,creator:soren,modified:20210909025115108,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:Young, up-and-coming professor in HumanStain2000, very good-looking and put-together both physically and professionally. Sworn enemy of Coleman. In many ways cast as the villain of the main plot, but as with all the other characters, we can see so well whats going on inside and why shes acting the way she is that I cant bring myself to hate her.},{title:MsDonaSarkar,created:20200520021619607,modified:20200520021633811,tags:PAO Public,type:text/vnd.tiddlywiki,text:Microsoft employee and host of MicrosoftBuild2020, introduced in WelcomeToBuild20200519.},{title:MsDonnaHusbands,created:20201205232809730,modified:20201205232737707,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsElaineParry,created:20200612032035523,modified:20200808020005019,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:MrWillParrys mother in HisDarkMaterials.\n\nElaine is an interesting character. She struggles mightily with what appears to be some combination of schizophrenia and OCD, but it turns out there truly //are// people after her, as well. So youre constantly left wondering whats real and whats her imagination, what has some meaning in the story and whats just the product of her mind.\n\nShe is constantly compulsively counting bricks. I have forever been attempting to connect this with something else that happens in the story or her past, because it really doesnt seem like something that would be included just for shits and giggles, but Ive never been able to do it. My best theory so far has been that it has to do with the process of finding a rift with the subtle knife, but then I dont see any evidence that Grumman ever actually had or used the knife.},{title:MsElizabethSchechter,created:20200427025137563,modified:20200509021323268,tags:PAO Public,type:text/vnd.tiddlywiki,text:Aeon author.},{title:MsEmilyDickinson,created:20240614033758512,creator:soren,modified:20240614033800882,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsEmilyFrantz,created:20200118034302522,memberof:TheWatchhouse,modified:20220909123243718,modifier:soren,spouse:MrAndrewMarlin,tags:PAO Public,type:text/vnd.tiddlywiki,text:Member of band TheWatchhouse. Inseparable from the group and her husband MrAndrewMarlin from my perspective.},{title:MsEmilyFreeman,created:20200521200456043,modified:20200521200525242,tags:PAO Public,type:text/vnd.tiddlywiki,text:Cloud architect at M.|PrivatePerson and author of //~DevOps for Dummies//. Involved in several DevOps-related talks at MicrosoftBuild2020.},{title:MsEmmylouHarris,created:20200225032500589,modified:20200509021339409,tags:PAO Public,type:text/vnd.tiddlywiki,text:Classic country-ish singer (though somewhat difficult to classify, crossing into bluegrass and folk once in a while). The singer who made me discover I really rather liked country when its not modern radio crap. Put out a shocking amount of music over her years.},{title:MsEnidBlyton,created:20200122024157108,modified:20200509021351756,tags:PAO Public,type:text/vnd.tiddlywiki,text:British childrens author of the early to mid- 20th century. Apparently remarkably controversial; aside from minor (probably justified) allegations of racism in certain works, while many people loved her, plenty of loud voices also thought her work was basically without any merit or literary value whatsoever. Copious output, much of which was pretty much the same story told in different ways -- but then isnt a lot of popular literature?\n\n(Source: Wikipedia)},{title:MsEnya,created:20200712221657958,modified:20200712221919841,tags:Music PAO Public,type:text/vnd.tiddlywiki,text:New Age-ish musician (she resists the label, memorably claiming her genre is \Enya\, and indeed does have some significant differences from the genre as typically understood, in particular way more vocals). Her lyrics and musical interest are fairly mediocre in my view, but the overall sound-impression created by her music is at times astoundingly beautiful. Definitely worth listening.\n\nIronically enough, I think her album //A Day Without Rain// is one of the best soundtracks available for a rainy day.},{title:MsEugeniaKuyda,created:20210516212418529,modified:20210516212227868,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsFauniaFarley,caption:Faunia Farley,created:20210909024607856,creator:soren,modified:20210909025049545,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:HumanStain2000,text:Milkmaid and cleaning lady around Athena College and the surrounding area in HumanStain2000. Everything bad has happened to her starting from a young age (sexual and physical abuse, death of her children, etc.). Pretends to be illiterate but isnt actually. Steamy relationship with MrColemanSilk after he retires, to the disgust of some people around town, she being about half his age.},{title:MsFlamyGrant,created:20240718034606257,creator:soren,modified:20240718043524405,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Flamy Grant is a powerhouse vocalist, intrepid songwriter, and acclaimed drag queen from western North Carolina who blends folk, gospel, and roots, transporting audiences with therapeutic, theatrical storytelling and song. Her 2022 debut record, Bible Belt Baby, garnered international attention when it reached the #1 spot on the iTunes Christian Charts after a self-proclaimed MAGA preacher disparaged her online. The story was covered by Rolling Stone, Billboard, Entertainment Weekly, People, Newsweek, and more. Bible Belt Baby was nominated for Best Pop Album at the San Diego Music Awards and was named one of the Top Ten Queer Country Albums of 2023 by Rainbow Rodeo Magazine. Flamy is a winner of the 2023 Kerrville Folk Festival New Folk Competition, a 2023 QueerX Award nominee for Best Drag Artist, and a 2024 Queerty Award nominee for Drag Royalty. Raised fundamentalist evangelical herself, much of Flamy’s music centers on the queer spiritual journey. She tells stories of resilience and recovery from religious trauma in a world where LGBTQ+ people are frequently ignored by, harmed in, or ejected from religious spaces. With a bold lip, a big lash, and a blistering voice, Flamy takes audiences to a soulful, uplifting church of her own making.},{title:MsGerriMartinFlickinger,created:20200910124749299,modified:20200910124749468,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsGiftEgwuenu,created:20200521213704610,modified:20200521213722259,tags:PAO Public,type:text/vnd.tiddlywiki,text:Front-end engineer. Participant in the WebForEveryone20200520 session at MicrosoftBuild2020.},{title:MsGillianWelch,created:20230131043558498,modified:20230201041433482,tags:PAO Public,type:text/vnd.tiddlywiki,text:Folk musician, with (musical and life) partner D.R.|PrivatePerson.\n\n{{welch-rawlings.png}}},{title:MsGretaThunberg,created:20210423024603620,modified:20210423024423197,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsGwynethPaltrow,created:20230405021559238,creator:soren,modified:20230405021850847,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsHannahArendt,created:20201222202006455,modified:20201222201927234,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsHeatherGrace,created:20240718033029218,creator:soren,modified:20240718033039060,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Heather grace is a birth worker and owner of Reverent Life Services. She draws from a deep faith upbringing in the Evangelical Church and her rich experience in Kink, BDSM, and other fringe communities. She is a Spirit led, trauma informed somatic practitioner and a Red Tent and Cuddle Party facilitator.},{title:MsHoney,created:20200326015954682,modified:20210725231021418,tags:Character PAO Public,type:text/vnd.tiddlywiki,text:Character in Matilda, the wonderful sensitive, kind teacher to be contrasted with MsTrunchbull.\n\n{{MsHoney/p||PrivateChunk}}},{title:MsIrisDeMent,created:20200426154604199,modified:20200509021423117,tags:PAO Public,type:text/vnd.tiddlywiki,text:A wonderful country-folk singer from the Midwest. Has a very unusual voice, the kind when you first hear it you wonder why anyone would listen to her! But the more you hear, the more you come to love it. At least thats the case for everyone I know. Somehow her rejection of traditional standards of vocal beauty allows her to inject an amazing amount of emotion.},{title:MsIsabelAllende,created:20200407022141863,creator:soren,modified:20200509021427495,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Hispanic author of HouseOfTheSpirits and more.},{title:MsJacquiLewis,created:20240718044444164,creator:soren,modified:20240718152557007,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Rev. Jacqui Lewis, Ph.D., a fervent author, activist, and preacher, champions an antiracist, just society through her roles in urban ministry and public theology. Graduating from Princeton Theological Seminary and earning a Ph.D. in Psychology and Religion, Lewis leads Middle Church in New York, a multiethnic beacon of love and justice. She co-founded The Middle Project and The Revolutionary Love Conference, aiming to foster racial reconciliation and social justice. Her work, featured on national media like CBS, MSNBC, and The New York Times, includes advocating for racial equality, economic justice, and LGBTQ+ rights. Lewis has also created influential TV programs, Just Faith and Chapter and Verse, and authored impactful books including Fierce Love. With her spouse, Rev. John Janka, Lewis continues to inspire through Middle Church, training leaders to build inclusive communities.},{title:MsJaneJacobs,created:20211116210943297,creator:soren,modified:20211130034422505,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsJoyLisiRankin,created:20200410164637174,creator:soren,modified:20200509021439187,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:Author of PeoplesHistoryOfComputing.},{title:MsJudithShulevitz,created:20220610002916267,creator:soren,modified:20220610002919134,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsJuliaKirby,created:20210627022254164,modified:20210627044912932,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsJuliaWhite,created:20200910022924107,modified:20200910022927246,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsJulieSondraDecker,created:20221031030559130,creator:soren,modified:20221031030601512,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsJulieStrauss,created:20200612210950380,modified:20200612211011981,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for PowerPlatform20200520.},{title:MsKateRusby,created:20250915114210381,creator:soren,modified:20250915114212243,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsKateYeager,created:20200521191321847,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:Host of BuildImagineCup2020 at MicrosoftBuild2020.\n},{title:MsKatieHerzog,created:20221002162328750,creator:soren,modified:20221002162334222,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsKaylaCinnamon,created:20200521193020543,modified:20200521193113351,refexplorer-starttab:Sources,tags:PAO Public,type:text/vnd.tiddlywiki,text:Program manager for Windows Terminal in 2020. Had several appearances in MicrosoftBuild2020 on the topic.},{title:MsKellyanneConway,created:20200410210300128,creator:soren,modified:20200509021503535,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:For a time (arent they always for a time with Trump?), Counselor to the President for MrDonaldTrump.},{title:MsKimManis,created:20200612211026661,modified:20200612211029899,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for PowerPlatform20200520.},{title:MsKirstenFingle,created:20200219220038210,creator:soren,modified:20200509021510010,modifier:soren,tags:Character PAO UnicornProject Public,type:text/vnd.tiddlywiki,text:Project-manager manager in UnicornProject, uniquely sympathetic to the UnicornRebellion.},{title:MsKyraDempsey,caption:Kyra Dempsey,created:20250905205029137,creator:soren,modified:20250905205049022,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsLavenderMatilda,created:20200326020440277,modified:20200326021606133,tags:PAO Public,type:text/vnd.tiddlywiki,text:Lavender, friend of MsMatildaWormwood in Matilda. (Last name is not Matilda. Her last name is not given as far as Im aware, and there are a lot of Lavenders in the world.)},{title:MsLedallaMadhavi,created:20200712043107012,modified:20200712043127590,tags:Public PAO,type:text/vnd.tiddlywiki,text:Agile leader and PM/ScrumMaster/etc. professional.},{title:MsLeslieJamison,created:20201209132945205,modified:20201209132911465,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsLilaTretikov,created:20200909141238873,modified:20200909141239299,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsLoganUry,created:20230405192339143,creator:soren,modified:20230405192340363,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsLolita,created:20210609113823843,modified:20210609113632152,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:Lolita1955},{title:MsLyraSilvertongue,created:20200127020946375,creator:soren,modified:20221102031236191,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:Protagonist of HisDarkMaterials and BookOfDust. Followed through a variety of ages from baby to young-adult over the course of these six books. The title of the first volume of BookOfDust, LaBelleSauvage2017, seems to describe her quite appropriately even though it refers explicitly to something else in the book itself.\n\nQuoted as an excellent storyteller and a compulsive liar (her last name //Silvertongue// is given to her in place of //Belacqua// by MrIorekByrnison after she saves his life by telling a remarkably convincing tall-tale), at least until SecretCommonwealth2019 when she loses her Imagination to excessive and seductive rationalism. Probably teaches AppearancesOverReality by example to the reader.\n\nLyra is a hero you cant help but love, despite the fact that she isnt conventionally //lovable// (see DislikableCharacter, which is what Lyra is not); shes objectively a savage brat who lies like its her full-time job. But shes also fiercely loyal, fearless, full to the brim with grit and determination, and the epitome of chutzpah. She also seems to have the soul of a 70-year-old, the efficacy of a 30-year-old, and the energy and filter of a 10-year-old, and this combination is somehow simultaneously hyperreal and relatable. And while Lyra would fight you for calling her //cute//, and thats not quite the right word, shes also 11, and there is a sense in which her mouthing off at you might make you happy!\n\nRelated archetypes:\n\n* Eve (cf. FallOfMan)\n* Moses (mostly from LBS and her later role)\n* Mythic hero (of course)\n* Jesus|LyraAsJesus},{title:MsLytaGold,created:20210331004743975,modified:20210331004635730,tags:PAO Public,type:text/vnd.tiddlywiki,text:Frequent contributor to TheCurrentAffairs.},{title:MsMaddyLeger,created:20200521195207022,modified:20200521195214286,tags:PAO Public,type:text/vnd.tiddlywiki,text:Presenter for EveryDeveloperIsWelcome20200519, from M.|PrivatePerson.},{title:MsMaggieLee,created:20200312210046884,modified:20200509021543076,tags:Character UnicornProject PAO Public,type:text/vnd.tiddlywiki,text:Director of retail program management for ThePartsUnlimited.},{title:MsMarisaCoulter,created:20200122024554573,creator:soren,modified:20221102032441736,modifier:soren,tags:Character PAO Public,type:text/vnd.tiddlywiki,universe:,text:Personification of evil in HisDarkMaterials, to one degree or another; daemon is an unnamed golden monkey (all the really nasty characters have conspicuously unnamed daemons, I noticed recently).\u003C\u003Cfnote \In the graphic novel, hes once given the name Ozymandias (at the moment when he opens the spy-fly tin).\>> MsLyraSilvertongues mother, in a nice little IAmYourFather moment. In Collectors, her last name is //van Zee//; presumably this was her maiden name.\n\nThe genius of Mrs. Coulter, the thing that makes her so effective and bone-chilling for me, in comparison to other evil-personified characters (say, Lex Luthor, or Sauron) is that she is utterly, 100% believably real, in the ConsensusPhysicalReality sense. I mean, obviously Coulter herself is not a real person, but you know there are many Coulters out here in this world. Irresistable looks and manner, sharp mind, effective blackmailing ability, heart of a spy-fly. Hope you never run into one.\n\nShes not really a sociopath either, at least I dont think so. She seems to legitimately care about Lyra and MrAsriel, but shes utterly unable to show it because shes spent so long suppressing that part of herself; its become the lowest priority. In AmberSpyglass, Metatron describes her thus:\n\n> Corruption and envy and lust for power. Cruelty and coldness. A vicious, probing curiosity. Pure, poisonous, toxic malice. You have never from your earliest years shown a shred of compassion or sympathy or kindness without calculating how it would return to your advantage. You have tortured and killed without regret or hesitation; you have betrayed and intrigued and gloried in your treachery. You are a cesspit of moral filth. (398)\n\nIn the BBC series, Mrs. Coulter (Ruth Wilson) is really fantastic. I made the mistake of watching Season 1, Episode 2, in which Lyra comes to her home in London and then escapes, right before bed, and did not fall asleep for two hours! Its a testament to the series in general that it could have that effect on someone who already knows the story backwards and forwards.\n\nAlso in the BBC series, there is a scene which does not happen in the book in which Lyra is on a roof and Coulter asks her if she likes it up there, and Coulter says shes never quite been able to feel comfortable in high places, always having the urge to jump|CallOfTheVoid. This is presumably intended as foreshadowing of her eventual jump into and demise in the abyss in AmberSpyglass, but also perhaps a demonstration of her impulsiveness and constant inhabiting of extremes.},{title:MsMartyHaleEvans,created:20200323032111137,modified:20200509021551264,spouse:MrRonHaleEvans,tags:PAO Public,type:text/vnd.tiddlywiki,text:Co-author of MindHacker (with husband MrRonHaleEvans).},{title:MsMaryMalone,created:20210425231441720,modified:20210425231301763,tags:PAO Character Public,type:text/vnd.tiddlywiki},{title:MsMaryWatkins,created:20210215030944403,modified:20210712121628409,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsMatildaWormwood,created:20200129211908637,creator:soren,modified:20200326020015628,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text:Protagonist of the eponymous childrens book Matilda by MrRoaldDahl. (It has been far too many years and I should definitely read it again...) Extremely smart girl with terrible parents, terrible headmistress, one nice teacher she gets along with. She gains telekinesis because she has so much pent-up angry energy and makes everything work out.},{title:MsMaudeChardin,created:20200125202815495,creator:soren,modified:20240320214749228,modifier:soren,tags:PAO Character Public,type:text/vnd.tiddlywiki,text://Not to be confused with any of the related characters under the umbrella of M.|PrivatePerson.//\n\nMsMaudeChardin (officially “Dame Marjorie Chardin,” but thereafter just Maude throughout) is one of the central characters of the film HaroldAndMaude1971.\n\nThe most important thing about Maude is that, appropriately enough, she is profoundly Maudlike|Maudacity, to the point that nobody could disbelieve me if I falsely claimed that she was the origin of my term. Maybe theres just something about the name; see NamePersonalityRelationship. Maude also uses the FlaneurMethod for life, for the most part, with the exception of her death|DeathOfMaudeChardin.\n\n(Also a bizarre, if completely random and meaningless, coincidence: My MnemonicMajorSystem mapping for 71 is and was //Maud// long before encountering this film, and the film came out in 1971.)\n\nMaude was plainly involved in the politics of World War II, as well as likely many other things. If she were sixty years younger, she might be called a hippie. And while it went over my head at first, its implied that she spent some time in a ConcentrationCamp as well, presumably for her political activities. You can see how this influences her philosophy for sure.\n\nMaude seems to consider herself a Stoic|Stoicism of sorts; while she has collected a ridiculous array of crazy things, she also insists she wouldnt mind losing them, and she goes to her death with the restraint one would expect.\n\nIm kind of puzzled by what exactly Maude sees in MrHaroldChasen. My best idea at this point is that she sees a spirit like hers that needs freeing: weird, adventurous, unafraid of death or life...but its been suppressed. In this way maybe shes passed her own spirit on to him at the end. I think she may also need someone to help her die, that being her plan at this point, and Harold was just the right person in the right place at the right time in a way that made her fall in love.\n\nI am also puzzled as to Maudes moral standing. She just takes stuff from people all the time! She says shes reminding them of the temporary nature of possessions, which is quite the creative justification, but arguably it //is// a valid challenge to the nature of PrivateProperty, which, well, I know what my society says about that and what Ive been led to think, but then…there is something to challenge here.\n\nI was going to say something to the effect of “God knows what else she does to other people,” but thinking a bit harder about it, I dont think theres actually any evidence that she hurts other people in any way besides stealing their stuff (usually temporarily). She certainly has a complete disrespect for authority (the IMDB trivia section again points out that the motorcycle cop was given the name of a Nazi leader), but she is never shown as hurting anyone except herself in any nonmaterial way, aside of course from killing herself against Harolds wishes. I guess Id class her as chaotic neutral -- //maybe// good, but while she seems to have good intentions shes too ambiguous to quite make it into that bucket.\n\nWe should probably let her explain herself as well, though Im not sure her own version is any less ambiguous:\n\n> Its best not to be too moral. Youll cheat yourself out of too much life. Aim above morality.\n\nFor Maude, cars do not have keys|CarsHaveKeys.},{title:MsMaxineChambers,created:20200219220214656,creator:soren,modified:20200509021700857,modifier:soren,tags:PAO Character UnicornProject Public,type:text/vnd.tiddlywiki,text:Protagonist of The UnicornProject. Hilariously overqualified and fully buzzword- and acronym-compliant. Sometimes self- and other-described as relentlessly optimistic|RelentlessOptimism. Takes everyone out to lunch. Loves FunctionalProgramming.},{title:MsMayaRodrig,created:20200909141352224,modified:20200909141355874,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MsMildredTaylor,created:20201201035327857,modified:20201201035255376,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsMiraLane,created:20200529185723087,modified:20200529185803923,tags:PAO Public,type:text/vnd.tiddlywiki,text:Ethicist at Microsoft (yes, Microsoft has teams of people who deal with ethical and social concerns in building software!). Participant in the ResponsibleAiPanel20200519 at MicrosoftBuild2020.},{title:MsMonicaLewinsky,created:20210909031344938,creator:soren,modified:20210909031346301,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsNadiaAsparouhova,created:20201211165402381,modified:20240720042605602,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsNicoleForsgren,created:20210701014233064,modified:20210701014025267,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MSP,created:20230830225554372,modified:20240109032418733,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Airport for Minneapolis and StPaul.},{title:MsRuthMcNeill,created:20201204042106521,modified:20201204042036173,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsRuthMoody,created:20240530221421908,creator:soren,modified:20240531171845939,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki,text:\u003C\u003Cfloat-image \ruth-moody.png\ side:right width:200px>>\nSinger-songwriter, member of TheWailinJennys.},{title:MsSanaAjani,created:20200521203122616,modified:20200521203127341,tags:PAO Public,type:text/vnd.tiddlywiki,text:VisualStudioCode developer at M.|PrivatePerson.},{title:MsSarahBird,created:20200529191049940,hideorphan:true,modified:20210421120000000,tags:PAO Public,type:text/vnd.tiddlywiki,text:MicrosoftBuild2020 presenter on MachineLearning, in ResponsibleMachineLearning20200519.\n},{title:MsSarahMoulton,created:20200219220957458,creator:soren,modified:20200509021715719,modifier:soren,tags:UnicornProject PAO Character Public,type:text/vnd.tiddlywiki,text:^^^^Dislikable (but, according to the MsMaxineChambers-infused narrator, unfailingly well-dressed and influential) VP of ThePartsUnlimited.},{title:MsSaraTeasdale,created:20200331235454131,modified:20200509021721943,tags:PAO Public,type:text/vnd.tiddlywiki,text:Greatly underrated American poet, lived shortly after the turn of the 20th century. A formal but metrically rather free style, which is a bit irritating at first but gets to feel more natural the more you read.\n\nSome of her poetry has lately been set to modern choral music -- a match made in heaven in many ways because her poems are brief, lyrical, and paint vivid pictures that are easy to work with as a composer. E.g., ThereWillBeRest.},{title:MsShannonCorman,created:20200226204000020,modified:20200509021730455,tags:UnicornProject Character PAO Public,type:text/vnd.tiddlywiki,text:Security gal from the UnicornProject.},{title:MsSheilaLiming,created:20230320122029453,creator:soren,modified:20230320122030682,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsSheriPallas,created:20240718034321022,creator:soren,modified:20240718034321784,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsSigridJohnson,created:20200303034748772,modified:20200509015014953,spouse:MrBjJohnson,tags:PAO Public,type:text/vnd.tiddlywiki,text:Conductor of TheManitouSingers for many, many years, retiring at the end of 2015. Notorious for sticking her head in between singers to tune them, but dang, she got a good blend out of her choirs.\n\nMarried to MrBjJohnson.},{title:MsSusanCain,created:20200909141243802,modified:20200909141246972,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MsTaylorSwift,created:20240402013315417,creator:soren,modified:20240402013319240,modifier:soren,tags:Public PAO,type:text/vnd.tiddlywiki},{title:MsTrunchbull,created:20200326020258362,creator:soren,modified:20200407030612376,modifier:soren,tags:Character PAO Public,type:text/vnd.tiddlywiki,text:The horrendous headmistress and all-around Bad Person™ in Matilda. She puts people in the \Chokey\ (a closet full of nails on the wall so if you dont stand perfectly straight you get sliced) and hammer-throws people out the third-floor windows of the school. She relies self-consciously on being an ImplausibleCharacter: as MsLavenderMatilda points out to MsMatildaWormwood in the movie|MatildaMovie, nobodys parents will ever believe what she actually gets up to, so she can get away with it. (That was when MrRoaldDahl wrote the book anyway. Nowadays we have HelicopterParents who would believe their son or daughter if they said they got abducted by aliens, and somebody would find out sooner or later.)\n\nTo be contrasted with MsHoney, of course.},{title:MsVirginiaWoolf,created:20201201035305265,modified:20201201035232519,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MsYinaArena,created:20200910023014658,modified:20200910023019205,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MultigenerationalNovel,created:20200407021953699,creator:soren,es:confident,modified:20211110041640634,modifier:soren,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Type of novel that goes over an exceedingly long period of time, covering multiple generations in the same family. The people who start the story are dead by the end, but the story continues. I find this structure extremely compelling.\n\nEastOfEden and HouseOfTheSpirits are the examples Ive read that I can think of.},{title:MultnomahFalls,created:20250618153312719,creator:soren,modified:20250618153314086,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:MuQuestion,created:20211026234116315,creator:soren,description://Mu// is a response to a question that indicates no correct answer is possible to the question as stated.,es:confident,modified:20211026235019381,modifier:soren,tags:Logic Idea Public,type:text/vnd.tiddlywiki,text:“Mu” is the concise response to a question whose premise is fundamentally incorrect, as popularized by ZenAndTheArtOfMotorcycleMaintenance and GodelEscherBach1979.\n\nFor instance, a loaded question like “Have you stopped beating your wife?” is impossible to answer truthfully if one has never beaten ones wife; any direct answer to the question, interpreted normally, means that one has.\n\nThe response is also variously held to apply to things like the value of a logic circuit which is switched off (it is not meaningfully either true or false) or a question which has been proven undecidable.},{title:MurkyMiddle,created:20240210215421206,creator:soren,description:Some spectra of decisions exhibit a pattern where either end is great (but right in different situations), while the middle is bad.,es:likely,modified:20240211015045459,modifier:soren,tags:Idea SorenConcept Process Public,type:text/vnd.tiddlywiki,text:Certain spectra present an inverted decision problem to the typical one, which is well explained by ModerationAndBalance: the //ends// of the spectrum are different but each desirable, but the middles are mediocre or even outright bad. This is the murky middle.\n\nAn obvious example is UnitedStates car-centered suburbs. There are major benefits to living in a rural area (lots of space, few regulations, peace and quiet, access to nature), and major benefits to living in a dense city (easy and fast access to more institutions and people than you could ever get to know, lots of randomness in your everyday life, walkability, efficiency). The suburbs try to combine them, and this usually results in doing badly on all counts. You dont really have all the space you want, or else you end up paying for more than you wanted; regulations in many places prevent you from really doing what you want with your own property; its hard to actually //get// to natural areas in a reasonable amount of time, or without driving; going to any of the places that are physically close requires getting in the car, creating a TrivialInconvenience that means you often dont do it; most people dont have any real community even in the presence of many other people; theres still no real efficiency gain.\n\n(This is not a tiddler complaining about US suburbia, but I have to address this objection lest people get distracted. Car-centered suburbs are not 100% bad, of course; we build them for a reason. It is true that they give\u003C\u003Cfnote \Or, historically, gave, before housing got so expensive that most people struggle to afford any home anywhere in even medium-cost-of-living areas.\>> lower-middle-class people the ability to own a single-family home in a moderately quiet space and have a mid-sized yard. But you have to ask, at what cost|CostBenefitAnalysis? If thats the //only// thing you care about, then great, but most people have much more complex preferences, and often end up making poor decisions because they seem to be what everyone else is doing. Ill also add that it would be absolutely possible to make suburbs that really did have better benefits -- we used to do it by building along transit lines on the outskirts of cities -- weve just stopped doing it.)\n\n\nOther examples:\n\n* Working while youre sick, or otherwise sort-of taking a day off work: You end up not getting rest, being uncomfortable, and being sick longer, while also not getting much done.\n\n\nCf. TyrannyOfAverages.},{title:Music,created:20200322032254301,creator:soren,modified:20201222173631254,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Tag for anything related to music.},{title:MusicalAcoustics,created:20200322172641314,creator:soren,modified:20200329153505699,modifier:soren,tags:Music Class Public,type:text/vnd.tiddlywiki,text:Course I took at StOlaf on the physics of sound. Great way to get a science general-education requirement, and a thoroughly interesting thing to understand as a musician.},{title:Mutt,created:20200520125835306,creator:soren,es:confident,modified:20211107180911745,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:The email client that sucks less|SingingLessWrong, according to its tagline. A TUI email client Ive used for my personal email since partway through college.\n\nOn TheControlAltBackspaces list of LikableSoftware.},{title:MxGwern,caption:Gwern,created:20240402020152526,creator:soren,modified:20250905205136580,modifier:soren,tags:PAO Publication Public,type:text/vnd.tiddlywiki,text:Rationalist author and blog (gwern.com). Pseudonymous and pretty close about it. Most people think its a //he//, but theres never been any explicit evidence as far as I know.},{title:MxOzyBrennan,created:20251021010051314,creator:soren,modified:20251021010052403,modifier:soren,tags:PAO Public,type:text/vnd.tiddlywiki},{title:MxSpencerLaJoye,created:20240718031807412,creator:soren,modified:20240718041901278,modifier:soren,pronouns:they/them,tags:PAO Public,type:text/vnd.tiddlywiki,text:Blurb:\n\n> Spencer LaJoye is an East Coast singer/songwriter from the Midwest making queer indie folk music for everyone. The 2021 Kerrville Songwriting Competition winner spins crystalline vocals through a loop pedal while strumming an acoustic guitar in charming, banter-heavy performances that keep audiences laughing one moment and weeping the next. On February 16, 2024, they released Shadow Puppets, their first full-length album under their new name. Childhood memories, family patterns, shame, and desire form a cast of colorful characters in this 12-track, indie-folk tale of a formerly closeted queer kid from Southwest Michigan.\n\n},{title:MyAntonia1918,author:Cather,bibliography:LifetimeReading,caption:My Antonia,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035559,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1918},{title:MyCompletionism,created:20230313132833425,creator:soren,es:possible,modified:20240509142903602,modifier:soren,tags:Idea LifeDirection ManualForMe Public,type:text/vnd.tiddlywiki,text:Ive noticed that I am a //completionist// -- I get annoyed by not finishing things, even when it doesnt make sense to finish them. Say: vacation photographs, journals, notes, travel destinations, books that I dont like that much, sets of spaced-repetition prompts.\n\nI think being content with deciding not to finish things is a valuable skill for anyone to develop, and I am quite bad at it.\n},{title:MyersBriggs,created:20200201213830850,creator:soren,es:likely,modified:20220331130845487,modifier:soren,tags:Business Psychology PersonalityAssessment Public Idea,type:text/vnd.tiddlywiki,text:The Myers-Briggs Type Assessment, or MBTA, a “personality assessment” that’s a staple of corporate bullshit and college career planning. That said, I’m not in the “totally useless” camp either…it definitely can help people talk about their personalities and discover things about themselves. The exact results of the test just need to be taken with a grain of salt because the tests arent always super accurate and results can vary over time. And of course, it’s important not to think they’re your destiny or something -- but I hope nobody is doing that to begin with!\n\n{{MyersBriggs/p||PrivateChunk}}\n\n\n!! Results\n\nI last took the true Myers-Briggs, and first took any related assessment, in 2013 at my college. On this run, I came up as an INTJ with moderate preferences on all four dimensions -- out of ±30 points, 8, 2, -2, and -7.\n\nIn 2020, I took the 16Personalities.com|https://16personalities.com version. Its not quite the same thing, but it uses the same acronyms and an only slightly different test and definitely shares most of the intellectual heritage. On this one, I showed up as INTP...but with a 49%/51% split on the P dimension. The preferences on this one are assessed in percentages, and came up as 85%, 77%, 56%, and 49%.\n\nThe INTJ descriptions are //way// more accurate for me than the INTP ones, so along with the almost-center positioning, Ill chalk the P up to a statistical fluke.\n\n\n!! Accuracy?\n\nOverall, the dimension labels feel about right, and the description of the personality type as a whole feels eerily accurate. After the 2020 run, I got to wondering whether thats not just the same effect you get with a psychic, where they tell you things that could practically apply to anyone (or could apply to anyone who showed some trivially accessible appearances or emotions). The Wikipedia article|https://en.wikipedia.org/wiki/Myers%E2%80%93Briggs_Type_Indicator is //scathing// on this (but some Wikipedia articles have consistent bias!). So I decided to go read a bunch of 16Ps other descriptions, which I did in some detail; I focused on the introductions, strengths and weaknesses, and workplace habits, but also poked into the other ones on occasion.\n\nResult: Of course I cant take back knowing that it says Im an INTJ (related: HawthorneEffect), so I cant possibly have a truly unbiased look at it anymore, but I thought the others were noticeably less relevant. Most of the other types I looked at (many off by one letter, or occasionally two, though I also looked at the polar opposite for fun) definitely said some things I agreed with, but I also had significant disagreements with them. Also, as one would hope from a consistent assessment, these disagreements largely seemed to match the dimension(s) on which the type description differed from INTJ.\n\nAt the end I went back and reread the INTJ description all the way through again, and it still seemed significantly more accurate than the others. In fact, I was able to identify only two assertions in the probably 3,000-word description that I didnt think fully applied to me:\n\n# “Architects are open to new ideas – as long as those ideas are rational and evidence-based, that is.”\n#* Very slight quibble: I love even ideas that seem pretty wacky and irrational, though whether I accept them might be a different question.\n# “Overly Critical – These personalities tend to have a great deal of self-control, particularly when it comes to thoughts and feelings. When the people in their lives fail to match their level of restraint, Architects can become scathingly critical. But this criticism is often unfair, based on arbitrary standards rather than a full understanding of human nature.”\n#* I probably am more critical than average, but I also think I have a pretty relaxed view of human nature, and I tend to be pretty forgiving. I only really get scathingly furious when large portions of society working together do something really dumb for an extended period of time.\n\n{{MyersBriggs/p2||PrivateChunk}}\n\nOverall, Im going to give at least this modified version of the MBTI an A on relevancy and consistency -- though its worth noting that just because it assessed //me// highly accurately doesnt mean it works that well for everyone: see MyersBriggsEffectivenessSkew.\n\nDynomight notes|https://dynomight.net/in-defense-of-myers-briggs.html that the MBTI is strongly correlated with the Big Five traits (leaving off neuroticism because nobody likes to be told theyre neurotic, although some versions such as 16Personalities use a “turbulent/assertive” axis which is literally neuroticism under another name), yet people complain the MBTI is unscientific while accepting the Big Five without question.\n\n!! Other correlations\n\nIn the appendix to the Jargon File, ESR speculates that|http://www.catb.org/~esr/jargon/html/personality.html hackers are way more likely to be INTJ and INTP than average. Compare HackingPedantryAndScience.},{title:MyersBriggsEffectivenessSkew,created:20210723005914848,creator:soren,description:MBTI results may be meaningful for some personality types and garbage for others.,es:possible,modified:20221202005842230,modifier:soren,tags:Idea Psychology Science Public,type:text/vnd.tiddlywiki,text:Something rarely discussed: there is no reason that the MyersBriggs test and its analogues would have to be equally accurate or useful for all sixteen of its personality types. For instance, I come up as INTJ and find the description almost ridiculously accurate (see MyersBriggs; Im pretty convinced its not just me seeing the bits that are right and ignoring the bits that are wrong, because hardly anything is wrong and the other descriptions contain many wrong things, q.v.). Others think it is pretty garbage. And specifically, most people who are in the INT area seem to think it is very accurate! (Disclaimer: As Tinker points out in the comment thread quoted below, both their and my social circles|PersonalBubble likely limit our perception of|ObservationBias any set of people outside the INTJ/INFP-adjacent realm who may find clear descriptions of themselves in their MBTI.)\n\nI can see two distinct ways in which this theory could be true:\n\n# The MBTI really only says anything useful at all about a fairly narrow range of traits (e.g., it divides introverted thinkers from other people). Some of the distinctions it draws are nonexistent or not meaningful.\n# Although the set of personality types are mostly all meaningful, the test has much more discriminatory power in a few areas, so people with certain types are more likely to be misfiled or have substantially different results on retest.\n\nMost likely it would be a combination.\n\nThe difference in perception of the value of the MBTI based on ones own experience with it could perhaps be considered a case of the more general phenomenon described in DifferentWorlds2017.\n\nOne wonders what the personality types of Briggs and Myers were; cf. my criticism of the likely bias of psychologists in developing the highly positive associations of NeedForCognition theory.\n\n!! References\n\n> I certainly notice that there are some people who can’t seem to see any type description that describes them better than any other, and I think that probably does reflect their actual experience. Also, although there are some major sources of potential bias in terms of who I end up talking to and what I tend to notice, but it seems like to me whenever I see someone saying that their type description is “distinctly” them they’re an INTJ or INTP — or, at least, it seems somewhat skewed to introverted thinkers.\n> \n> So I wonder sometimes if what the MBTI “really” does is pick out systematizers and introverts, and maybe the rest of it is less useful, or something like that. Or maybe there’s some flock of people in some social circle that intersects with mine exactly none, who are marveling at how distinctly extraverted and sensing they are or something.\n> ---Ask a Manager comment thread|https://www.askamanager.org/2015/05/i-want-my-manager-to-tell-me-our-meeting-topics-in-advance-my-manager-shoots-down-my-team-building-ideas-and-more.html#comment-741364, Tinker},{title:MyFaceRecognition,created:20201203000748666,creator:soren,description:I have unusually poor and slow face recognition/memory.,es:likely,hideorphan:true,modified:20211119224935558,modifier:soren,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:I have unusually poor and slow face recognition/memory; I have no trouble learning and picking out my friends faces, but struggle to recognize people Ive just met, particularly men (I suspect this is less a difference in facial features but more that women tend to present more distinct clothing, hairstyles, etc., to compensate, though one could posit evolutionary explanations as well). I often have difficulty following the beginnings of movies for this reason.},{title:MyGreatIdea,color:#6c6cff,created:20200423023134371,icon:$:/core/images/list-bullet,modified:20200516163329910,tags:Meta Public,type:text/vnd.tiddlywiki,text:Tag that identifies “great business ideas!” or things that someone should make but definitely arent my responsibility to make -- except when they do, theyll have stolen my idea for sure.\n\nSee also ShortStoryIdea.},{title:MyNonsenseMythAndDreams,created:20200226000254449,modified:20210516233633100,tags:Sink Public,type:text/vnd.tiddlywiki,text:My final paper for my GreekAndRomanMyth class at StOlaf. Full title: \Nonsense, Myth, & Dreams: The Omnipresence of Myth as Seen in Alice’s Adventures in Wonderland.\ Obviously relates to AliceInWonderland and also references FairyTalesFromTheBrothersGrimm, specifically \The Fisherman and His Wife\.\n\nThe basic argument is that elements of myth are to be found everywhere, such as in PersonalMythology, as I most recently have been thinking -- but also in literature of every type. LaBelleSauvage2017, had it existed at the time I wrote the paper, would have done an even better job at making the comparison, although perhaps not such a creative one. Indeed, I think LBS does such a good job that it //is// the argument and there is little more to be said about it!\n\n//Alice// and myth are both tightly integrated with Dreaming, and motifs of transformations and godly power. Alice follows mythological patterns as well, e.g., MrJosephCampbells SeparationInitiationReturn.\n\nI was highly amused because I ended up citing my other paper from the semester in this paper. I dont think Ive ever done that in a formal paper before or since!},{title:MyPartialAbsolutePitch,created:20201202232219109,description:I have some sense of absolute pitch.,es:confident,hideorphan:true,modified:20210515040204148,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:I have some sense of absolute pitch, though only partial. I cant say “oh, that was a low A437” without a reference point, but I can cold-sing a pitch reference and it will nearly always be within half a step of the correct note. If someone claims a note is an E and its actually an A, I will absolutely (no pun intended) be able to tell thats wrong. People often insist I have perfect pitch when they hear me do this, even though I quite clearly dont.},{title:MyPlacidity,created:20201203000931424,description:I very rarely get angry at people.,es:personal,hideorphan:true,modified:20210515040204795,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}} The last time I can distinctly remember really losing my cool was in high school (Im now 25). On the other hand, I can certainly get angry at my computer, which makes even less sense, so its not that Im more logical or something! Maybe Ive just been privileged to not spend much time with anger-inducing people since then, but it seems to me like its probably a combination of that and temperament.},{title:MyPossibleAphantasia,created:20201202235943369,description:I maybe, sort of, have aphantasia?,es:possible,hideorphan:true,modified:20210515040205311,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}} Im to the point of having no real idea; I seem to have a combination of traits attributed to that and normal visual Imagination.\n\nFor a long time I suspected this was more a difference of terminology than anything else, but then I read a study in which people were asked how clearly they could see an image on a sheet of white paper they held up, and I in no way could do that but most people seemed to say they could to some degree or another.\n\n\u003C\u003Cstretch \MyPossibleAphantasia/Differences\>>\n\nIts highly amusing how unsure one can be about something like this! It is a form of the effect discussed in ToolsForThinkingDontWow, in which you are left without a frame of reference to discuss an experience because you have never had it.},{title:MyPossibleAphantasia/Differences,created:20201203000215380,description:Yet those accounts of self-identified aphantasiacs Ive read seem to suggest they can only remember images and visual properties of things declaratively, which is absolutely not the case for me.,hideorphan:true,modified:20201216052440151,tags:Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}} I can place myself in a location, even somewhere Ive only been once, “see” the spatial relations between objects, describe what things look like...but its not done in the realm of //vision// exactly. Im still actually seeing black, unless sometimes Im just about to fall asleep and the boundaries of reality start to dissolve. The method of loci|MnemonicLoci works fine for me. I can imagine a place Ive never been. I can make diagrams in my head while Im working on code -- in fact, I often find this more helpful than doing it on paper because its more immediate and much easier to rearrange things.},{title:MyPsychedelicAdjacentExperiences,created:20210122023645286,creator:soren,es:likely,modified:20220504195653639,modifier:soren,tags:PersonalMythology Neuroscience Religion Public Idea,type:text/vnd.tiddlywiki,text:As MrMichaelPollan mentions a number of times in HowToChangeYourMind2018, PsychedelicDrugs are merely a safe, easy and effective path to a mental state that can be reached in numerous ways. I have not, as of this writing at least, tried any psychedelics, but some ways Ive come near that come to mind...\n\n1) LucidDreaming seems to bear many similarities, especially with regards to the powerful effects of suggestion, the liberation from normal constraints of perception, the embedding of psychological symbols, general bizarreness, bleedover of effects into everyday life, and probably some other things Im not thinking of. Ive never had an experience of ego dissolution or anything I could describe as a mystical experience in a dream -- but some people say they have, and while Ive had somewhere around a hundred recorded at-least-partially-lucid dreams, I wouldnt claim to be any good at it overall! \n\n2) I think Ive reached a similar state singing with TheStOlafChoir: in concert, I had moments where I still had a certain awareness of myself singing and making sure I was getting the right words and all, but I felt deeply that I was the choir and the choir was me. There was something strongly mystical about the whole thing. The group has certainly changed me, even though the most obvious effects have faded over time.\n\nIts also interesting to note the deep conviction of people after drug trips that what they went through was real and meaningful, which jibes very well with my experience here: while this has enough of a traditionally-religious flavor around it that it doesnt seem so crazy, certainly people who have been in choirs and never experienced anything like what I have would think Im exaggerating, but I see it as joining my mind|MindIntercourse with my brothers and sisters in spirit within the group, and being a fleetingly felt participant in the CosmicDance, and coming into directly-experienced contact with divinity, and I really mean that. I cant explain exactly //why// I felt each of these things, either, or even to what extent theyre metaphors|Metaphor and to what extent theyre literal, but there we are.},{title:MyPy,created:20200127022126070,creator:soren,es:confident,modified:20211107181159489,modifier:soren,tags:Software Code Public Idea,type:text/vnd.tiddlywiki,text:Type-checker for writing StaticallyTyped Python code. Runs separately from the actual code, as a linter rather than a compiler. Im a fan.},{title:MyRomanticRejectionInsensitivity,created:20241107025705177,creator:soren,description:I basically dont mind romantic rejection at all; it feels impersonal and not about me.,es:personal,modified:20241107051301572,modifier:soren,tags:Psychology Public MyUnusualMentalExperience Idea ManualForMe,type:text/vnd.tiddlywiki,text:I dont mind romantic rejection basically at all. I even sometimes dont mind being broken up with if its just that the other person isnt getting what they need out of the relationship anymore and its not my fault (this has happened to me twice). Of course, Im sad that I no longer have the relationship -- that separation is hard -- but it doesnt make me upset at the person at all. I often stay friends with them.\n\nTo me, there are so many reasons that people can fail to be a romantic match -- everything really has to be just right. So unless I actively hurt the other person in some way, the fact that it didnt work feels to me like it is more about their own idiosyncrasies than about me. Because of that, I actually mind //friendship// rejections way more. In that case it really feels like an indictment of me personally that the person wasnt interested in spending time with me or disliked me!},{title:MySql,created:20200521175839334,modified:20200521175846745,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Older OpenSourceSoftware database tool.},{title:MyTechnicalGeekery,created:20200322172852970,creator:soren,modified:20200509031532423,modifier:soren,tags:Sink Publication Public,type:text/vnd.tiddlywiki,text:The Technical Geekery was a precursor website/organization to TheControlAltBackspace. It is still up today at https://www.thetechnicalgeekery.com with all of its archived posts (in a new format).\n\nWhen I ran a little side gig in high school and some ways through college helping people with computer problems, this business also went by the name The Technical Geekery.},{title:MythicalManMonth,caption:The Mythical Man-Month,created:20200326201851605,medium:book,modified:20210606223436977,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Classic 1975 book of essays about software development, from MrFredBrooks experience working on mainframe OS projects. I read it in 2019, and while some things are no longer super-relevant, especially with regards to the value of AgileHumility and systems like the ScrumMethodology, a surprising amount of it is still highly relevant.},{title:Mythology,created:20200401010548618,modified:20200401010621261,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Genre of literature and OralTradition.},{title:MyUnusualMentalExperience,color:#6c6cff,created:20200824115806959,creator:soren,description:Like everyone, my mental experience differs from that of most people in some interesting ways.,es:personal,icon:$:/core/images/list-bullet,list:ColorblindPerson DemiPerson MyFaceRecognition MyPartialAbsolutePitch RecursiveDejaVu RarelyMisspellWords MyPlacidity MyPossibleAphantasia MyFunmakingImmunity,modified:20230513162457110,modifier:soren,tags:Imagination Identity SorenConcept Public Favorites Idea,type:text/vnd.tiddlywiki,text:MissingUniversalHumanExperiences2014 discusses what “universal human experiences” we dont have, without realizing. Im going to expand the criteria to just mental experiences I have that are //different// than those of most people, whether that involves something missing, added, or just different -- but something that would be particularly surprising if I were to switch headspace with someone suddenly.\n\n\u003C\u003Cstretch-links \allcurrenttagging\>>},{title:NakednessInSleepingBags,created:20210704212554838,creator:soren,es:possible,modified:20220509013519110,modifier:soren,tags:Nature Travel Public Idea Physics,type:text/vnd.tiddlywiki,text:Many experienced campers|Camping swear up and down that you will be warmer in a sleeping bag on a cold night if you sleep naked. Of course, from a physics perspective, this makes no sense at all: how can having less insulation make you warmer?\u003C\u003Cfnote \On the other hand, see the Mpemba effect|https://en.wikipedia.org/wiki/Mpemba_effect, in which it seems hot water can sometimes freeze faster than cold water, and we still arent sure exactly why and in what circumstances it happens. Physics isnt always intuitive!\>>\nBut it also seems odd that so many people have this belief if theres //nothing// going on here.\n\nI am suspicious I know whats going on, and it has to do with timing. When you initially get into a sleeping bag (or a bed with blankets, for that matter) on a cold night, the sleeping bag is very cold, which sucks the heat out of your body and makes you cold. Gradually, your body heat warms up the sleeping bag, and then the combination of the warm bag and its ability to trap further heat close to your body keeps you warm. When your entire body surface is directly in contact with the sleeping bag or the air inside it, this happens pretty quickly. And if youre a little chilly to start with, your body will likely respond by producing more heat in the short term, strengthening the effect.\n\nWearing clothes in between adds more insulation, so it will keep you warmer //when you start from a warm condition//, but by definition, this insulation means that your sleeping bag is going to take longer to warm up fully from your body heat. You might be warmer inside your clothes right away, but unless youre sleeping in truly extreme conditions, youre not going to be wearing full winter gear inside your sleeping bag, so there will be parts of your body still exposed to the cold air and the cold sleeping bag. And you may well have changed into pajamas that have been sitting out in the cold just before getting into the sleeping bag, creating even more of a heat deficit to make up.\n\nIn the middle of the night, once everything has warmed up, youll be warmer in your clothes. But in the middle of the night, youre likely to be asleep, or if you wake up, youre not going to be carefully considering the temperature unless its fairly uncomfortable. It being marginally too cold when you wake up at 3 am is less noticeable than it being significantly too cold at 10 pm when your brain is fully on and youre trying to fall asleep, which leads to the experience and assertion that youll be warmer naked.\n\nAll this said, Im not sure my explanation resolves the debate of whats more comfortable -- because unless you camp a lot in different temperature conditions with exactly the same gear every time, its pretty tough to know if it will get sufficiently cold during the night that youll wake up and be uncomfortable. If the answer is no, then you may be more comfortable overall if you dont wear clothes; if its yes, then you probably should.\n\n(Side note: Im a big proponent of the mummy bag style, which is smaller and lighter, and, most relevant here, warms up faster in either case because theres way less air inside. A lot of people think theyre less comfortable, but I actually find them //more// comfortable than the standard kind, maybe because Im skinny and like to pull the blankets pretty close around me in a full bed, too. The only downside is they can be tricky to get into in the dark, not to mention a royal pain if you have to get up to pee in the middle of the night.)\n\nThis is definitely a form of BlanketTheory!},{title:NamasteCafe,created:20240402013343702,creator:soren,modified:20240402013346334,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NamingConvention,created:20200423000528110,es:confident,modified:20200423002227413,tags:Reasoning Identity Public Idea,type:text/vnd.tiddlywiki,text:A post in the ArtOfNamingFiles discussed naming conventions and concluded that a naming convention is “a rule about how things should be named.” This tiddler liberally self-plagiarizes from there.\n\nNaming conventions reduce cognitive load by creating a higher level of abstraction, just like names themselves do|IdeaApi – when names are consistent, you spend less time figuring out what your names mean and can deal with them on a bulk level.\n\nSimilarly, it’s a lot easier to tell a computer what to do with files that follow a standard convention than with haphazardly named files. A good naming convention can make the difference between a script you can write in 10 minutes and a problem you can’t practically solve.},{title:NamingThings,created:20200422235356839,es:confident,modified:20201015023159998,tags:Reasoning Design Identity Public Idea,type:text/vnd.tiddlywiki,text:An old computer-science joke runs like this:\n\n> There are two hard problems in computer science: naming things, cache invalidation, and off-by-one errors.\n\nLooking at the “naming things” one, its FunnyBecauseItsTrue. Often our hardest conversations in the aisle on T.A.L.T.|PrivatePerson are just about trying to find a name or a NamingConvention for something.\n\nBut really, is it so surprising? Coming up with a good API for your function is hard (just ask anyone whos ever developed against any API). Names are just IdeaApis. Names are the essence of the thing, so you have to understand the thing perfectly to give it a proper name (interesting contrast: NamePersonalityRelationship). And naming conventions require you to understand all of the names they cover, including names that dont exist yet!\n\nWhatsInAName2018 explains that naming parts of a program is how you reduce complexity and create layers of abstraction. Choose bad names, and the next layer of abstraction will be hard to understand.\n\nSometimes, the difficulty in naming things may both result from and exacerbate a state of HypoCognition in a ViciousCircle. Although if you recognize that something //needs// a name, youre well on the way to beating your hypocognition. And when you manage to name something, you own it|PowerOfNames.},{title:NashvilleTennessee,created:20231120222707230,creator:soren,modified:20231120222708085,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NationalNeonSignMuseum,created:20250621164617381,creator:soren,modified:20250621164618098,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NatureOfGifts,created:20200201050324706,creator:soren,es:confident,modified:20240320214749229,modifier:soren,tags:Metaphor InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,universe:HaroldAndMaude1971,text:Gifts, at least in a modern American social context (SociologicalQuotationMarks?) seem to be only passingly about the object given. They are more about the act of giving the thing and what that entails (respect, love, appreciation, etc.). You can legitimately appreciate and find touching even a gift that has no value, or you dislike and have no use for. Similarly, you can sensibly reject a gift (e.g., a Nobel Prize) that has extremely high intrinsic worth and be satisfied with your choice, because of the implications of the act of receiving.\n\nThere are exceptions even in the “modern American social context”; if you arent rich but give someone a new car, for instance, thats mostly about the object and its value. Arguably for that reason its not a gift in the same sense! Maybe we should have a different word for it or something...\n\nIn HaroldAndMaude1971, MrHaroldChasen at the end of one of their days together, sitting together by the water, gives MsMaudeChardin a coin he pressed at the arcade, which says (according to speech, we cannot see it on the screen) “Harold loves Maude.” Maude says, “And Maude loves Harold!”, then says this is the nicest thing anyone has given her in years. And then she chucks it into the water, getting a look of bewilderment from Harold. She does this, she says, “so shell always know where it is,” and because shes goofy, but I find this also demonstrates the nature of gifts perfectly. There is no logical contradiction whatsoever in the scene. The gift is valueless and she doesnt want to keep it (and arguably she metaphorically cant keep it since she only has a couple days left on earth|DeathOfMaudeChardin and cant accept Harolds love in the way he wants), but she appreciates receiving it and nothing has been done wrongly. The gift served its purpose exactly.\n\nOne might also think of the poignant scene in AnnaKarenina in which Anna spends a very long time lovingly picking out birthday gifts for Seryozha, whom shes been separated from by leaving her husband, and then when she manages to sneak in to see him she completely forgets to give them to him. It doesnt, of course, matter.},{title:NecessityOfBacklinks,created:20201209035806564,creator:soren,es:likely,modified:20240213004738869,modifier:soren,tags:Information PersonalDocumentation RecordsProject Public Idea,type:text/vnd.tiddlywiki,text:When studying linking in information systems, for instance how NotesMustLink, I find two schools of thought on BidirectionalLinks (or “backlinks”, for the graph-theoretical edge going from the explicit link target to the source):\n\n# Bidirectional links are //critical//, or extremely important, and you struggle to have a system that exposes all the possibilities of the digital or “linky\ medium without them (some ZettelKasten practitioners sit here; MrTedNelson and others find it a massive weakness in the WorldWideWeb).\n# Bidirectional links aren‘t a big deal. They might be kind of nifty, but other design aspects are more important and they shouldn‘t be a reason to select one system over another.\n\nAn additional funny observation is that all the people I’ve seen who think bidirectional links are more than “kind of cool” have them in their own systems, which is obviously self-selection but still actually quite telling; it suggests that bidirectional links are useful enough that people who like them tend to eliminate systems that don‘t offer them from serious consideration.\n\nFrom this and the experience of using systems with bidirectional links myself, I conclude:\n\n* People who don‘t have bidirectional links have no idea what they’re missing. They are extremely useful; not only do they make it a little less likely that things get lost, they enable useful patterns that are impossible without them, like jumping to related ideas that share only a node that hasn‘t yet been created (an ImplicitlyDefinedNode), or linking the names of people, places, events, or objects even if you have nothing to say about them, creating automatic indexes. It’s definitely worth taking bidirectional linking into consideration when choosing notes software.\n* Bidirectional links tend to disappear. Once youve been using a notes system with bidirectional links for a while, they integrate so seamlessly into the system that you often forget they exist at all. I was recently doubting that bidirectional links were really that important to my Zettelkasten anymore and opened this tiddler, noticed the part talking about the ImplicitlyDefinedNode, and realized that I utterly rely on that feature all the time! But I had forgotten that this feature requires bidirectional linking.\n* Nevertheless, bidirectional links can‘t possibly be the defining core of a link-based information system, because plenty of people have developed useful systems without them. The Web is the most glaringly obvious counterexample, though of course it isn‘t a personal notes system.},{title:NeedForCognition,created:20200902024128891,es:possible,modified:20201026164219612,tags:Psychology Identity Public PersonalityAssessment Idea,type:text/vnd.tiddlywiki,text:Common personality scale in psychology. Those who score higher are thought to be more likely to:\n\n* Have higher verbal skills\n* Report higher life satisfaction\n* Rely closely on relevant arguments rather than peripheral cues or stereotypes when judging information\n* Consider a persons attractiveness less important for judging their intelligence, authority, or romantic suitability (what do you know|DemiPerson)\n* Have higher fluid intelligence\n* Be more frequent lucid dreamers|LucidDreaming (I find this one //really// interesting)\n* Give more complex explanations of their intuitions (whether correct or not!)\n* Falsely remember things similar to actual events or facts\n* Suffer from social anxiety\n* Prefer open-ended, fact-based advertising (I love that someone studied this)\n* Favor self-direction and dislike conformity\n\nOverall, it seems a positive thing, but I cant help wondering if this result might be largely because psychologists have high need for cognition; I have no data to support that, but //surely// people with low need for cognition dont become academics. That would likely lead to some PublicationBias (people studying the concept are less likely to focus on things that show their weak points, and they also might not understand|HaveToExperienceItToUnderstand the perspective of people who dont think that way|ThingsArentGoodForEveryone), some ConfirmationBias, and perhaps some weirder experimenter effects|PsiAsFailingsOfScience. Another possibility would be that in a world thats been designed by|BiasedWorldDesign people with high need for cognition, people with low need for cognition do worse.\n\n\n!! Me\n\n52/72. Or, a more accurate way to put it would be 124/144, since the bottom of the scale is -72, not 0. I am not sure if there is standard percentile data available to compare the raw score to.\n\nI last took the revised 18-question scale on 2020-09-01, and recorded answers as follows:\n\n```\n 2 I would prefer complex to simple problems.\n 4 I like to have the responsibility of handling a situation that requires a lot of thinking.\n* -4 Thinking is not my idea of fun.\n* -3 I would rather do something that requires little thought than something that is sure to challenge my thinking abilities.\n* -4 I try to anticipate and avoid situations where there is likely a chance I will have to think in depth about something.\n 1 I find satisfaction in deliberating hard and for long hours.\n* -2 I only think as hard as I have to.\n* -2 I prefer to think about small, daily projects to long-term ones.\n* -3 I like tasks that require little thought once I’ve learned them.\n 4 The idea of relying on thought to make my way to the top appeals to me.\n 4 I really enjoy a task that involves coming up with new solutions to problems.\n* -4 Learning new ways to think doesn’t excite me very much.\n 2 I prefer my life to be filled with puzzles that I must solve.\n 4 The notion of thinking abstractly is appealing to me.\n 4 I would prefer a task that is intellectual, difficult, and important to one that is somewhat important but does not require much thought.\n* -1 I feel relief rather than satisfaction after completing a task that required a lot of mental effort.\n* -3 It’s enough for me that something gets the job done; I don’t care how or why it works.\n 2 I usually end up deliberating about issues even when they do not affect me personally.\n```\n\n-4 is \strongly disagree\, 4 is \strongly agree\. Questions marked with an asterisk are reverse-scored.\n\nWikipedia: https://en.wikipedia.org/wiki/Need_for_cognition},{title:NeedsAttention,caption:Needing attention,color:#fff12e,created:20200115231518581,creator:soren,icon:$:/core/images/info-button,modified:20201203021140893,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:\u003C$list filter\\u003CcurrentTiddler>!isblank\>\nMarks tiddlers that need some kind of work done on them not defined by another existing tag (e.g., NeedsExcision, NeedsPhotograph, Stub).\n\u003C/$list>\n\n\u003C$list filter\\u003CcurrentTiddler>isblankthentrue\>\n \u003C$list filter\tagNeedsAttention\>\n\t\t\u003C$link/>\u003Cbr>\n\t\u003C/$list>\n\u003C/$list>},{title:NeedsExcision,caption:Needing excision,color:#fff12e,created:20200117032011552,creator:soren,icon:$:/core/images/new-here-button,modified:20201203021151197,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:\u003C$list filter\\u003CcurrentTiddler>!isblank\>\nArticles that are not atomic and need to be split into pieces.\n\u003C/$list>\n\n\u003C$list filter\\u003CcurrentTiddler>isblankthentrue\>\n \u003C$list filter\tagNeedsExcision\>\n\t\t\u003C$link />\u003Cbr>\n\t\u003C/$list>\n\u003C/$list>},{title:NegativeInterestRates,created:20200322033218958,creator:soren,description:Seemingly obvious limits can often be surpassed.,es:confident,modified:20210917010744101,modifier:soren,tags:Math Politics Public Idea,type:text/vnd.tiddlywiki,text:After the TwoThousandEightFinancialCrisis, interest rates dropped lower, and lower, and lower. And everyone said, “Well, they dont have anywhere to go. They cant go below zero!”\n\nAnd then they did. And investors would still lend someone money expecting to get //less// of it back, even without inflation, seeing no better alternatives.\n\nA good lesson: even when you think things cannot go any further, someone can probably make them go further. See BetterIdiot and ExistenceTrophy.},{title:NegativeNumberDistress,created:20201204003821610,es:confident,modified:20210701035048613,tags:Math Learning Public Idea,type:text/vnd.tiddlywiki,text:Many people seem to find NegativeNumbers a source of not just confusion but philosophical distress. This is a sufficiently common experience that I view it as one of the PhilosophyRifts in the world.\n\nA particularly common source of the distress is confusion over why a negative number times a negative number is a positive number. As one commenter addressing the question puts it|https://math.stackexchange.com/a/704288 on Math.SE:\n\n> This is really one of those important questions that leads many people to say “Math sucks!”\n\nThe thread|https://math.stackexchange.com/questions/9933/why-is-negative-times-negative-positive is full of plenty of intuitive explanations mapping the negative numbers onto a one-dimensional or two-dimensional vector space, or using time as one of the dimensions by playing a video of someone walking backwards backwards (the person walks forwards). But while these explanations are great and help to convince people that it must be true, there is something inherently unsatisfying about them: They are //effects//, not causes. They are not proofs. They do not produce an intuitive sense of deduction, but one of induction. Induction does not explain the //why//, it just helps us conclude that something probably is true. It brings us back around to the feeling that “well, it just //is// that way,” which is what bothers the person distressed by negative numbers. Numbers feel like they should be intuitively obvious, but negative ones are not. Formal proofs are also unsatisfying, because they involve more complicated math than the thing were trying to prove.\n\nI think we forget exactly how complicated and unintuitive negative numbers actually are. They make great sense as a mathematical concept, and as such for anyone who deals with math regularly, they fade into the background. But they are really very different from positive numbers; see NegativeNumberOntology. I think also that negative numbers may be the first academic thing children encounter where we can give them pretty much all there is to know, and it still doesnt fully make sense. I mean obviously theres death, and religion, and so on, but those dont seem like they should be intuitive even to adults. Math feels like a realm where everything is really very settled and straightforward and known...and then this.\n\n!! Example anecdotes\n\n\u003C\u003Cstretch \NegativeNumberDistress/Me\>>\n\n\u003C$list filter\NegativeNumberDistress/Mamaistiddler\>\n\u003C\u003Cstretch \NegativeNumberDistress/Mama\>>\n\u003C/$list>\n\n\u003C\u003Cstretch \NegativeNumberDistress/RuthMcNeill\>>\n},{title:NegativeNumberDistress/Me,created:20201204025727511,description:I have a vivid memory of learning about negative numbers in fourth grade at TheOtterCreekHomeschool and being frustrated to the point of tears that nobody could explain to me why a negative number multiplied by another negative number was a positive number.,es:personal,modified:20201204040741814,tags:Public Idea,type:text/vnd.tiddlywiki,text:I have a vivid memory of learning about negative numbers in fourth grade at TheOtterCreekHomeschool and being frustrated to the point of tears that nobody could explain to me why a negative number multiplied by another negative number was a positive number.\n\nTo this day, the only reason it really makes sense to me that negative times negative is positive is that \math would be hard if we defined it any other way,\ which I now understand well, but still at some level it doesnt make intuitive sense!},{title:NegativeNumberDistress/RuthMcNeill,created:20201204025937949,description:MsRuthMcNeill acquired a sense of “lurking resentment and betrayal” from the seemingly counterintuitive nature of a negative times a negative equaling a positive.,modified:20201204125552817,tags:Anecdote Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003C\u003C\nWhat did me in was the idea that a negative number|NegativeNumber times a negative number comes out to a positive number. This seemed (and still seems) inherently unlikely -- counterintuitive, as mathematicians say. I wrestled with the idea for what I imagine to be several weeks, trying to get a sensible explanation from my teacher, my classmates, my parents, anybody. Whatever explanations they offered could not overcome my strong sense that multiplying intensifies something, and thus two negative numbers multiplied together should properly produce a very negative result. I have since been offered a moderately convincing explanation that features a film of a swimming pool being drained that gets run backwards through the projector. At the time, however, nothing convinced me. The most commonsense of all school subjects had abandoned common sense; I was indignant and baffled.\n\nMeanwhile, the curriculum kept rolling on, and I could see that I couldn’t stay behind, stuck on negative times negative. I would have to pay attention to the next topic, and the only practical course open to me was to pretend to agree that negative times negative equals positive. The book and the teacher and the general consensus of the algebra survivors of society were clearly more powerful than I was. I capitulated. I did the rest of algebra, and geometry, and trigonometry; I did them in the advanced sections, and I often had that nice sense of “aha!” when I could suddenly see how a proof was going to come out. Underneath, however, a kind of resentment and betrayal lurked, and I was not surprised or dismayed by any further foolishness my math teachers had up their sleeves.... Intellectually, I was disengaged, and when math was no longer required, I took German instead.\n\n---Ruth McNeill|MsRuthMcNeill, qtd. in https://math.stackexchange.com/a/704288\n\u003C\u003C\u003C},{title:NegativeNumberOntology,created:20201204030739043,description:Negative numbers do not correspond to the real world in the same viscerally understandable way that positive numbers do.,es:confident,modified:20210623032031508,tags:Ontology Math Public Idea,type:text/vnd.tiddlywiki,text:I submit an explanation for NegativeNumberDistress: negative numbers (and to a lesser extent, zero) are ontologically distinct from positive numbers.\n\nLets start by thinking about //numbers// as a whole. Numbers are abstract concepts. However, positive numbers have a clean correspondence with real objects in the world. If I look at two ducks, I can say, “There is a manifestation of the number two!” You can count the ducks and see that there are two. This is so obvious you cannot debate it. This does not, of course, mean you are actually //seeing a number//: numbers, being abstract, can only be represented in the real world (for instance, by placing that number of objects next to each other), not seen. But the correspondence is here extremely clear.\n\nNegative numbers seem at first glance very much like positive numbers. They are simply the number where, when you add it to its corresponding positive number, you get zero. You can do the same arithmetic on them that you can with positive numbers. But negative numbers //dont exist// in the same way that positive numbers do. You cannot even represent them in the real world, except as numerals on paper. You cannot point to anything and say, “Look, there are negative-two ducks!” In fact, I submit you cannot even imagine what negative-two ducks would look like, because negative numbers of objects do not and cannot physically exist.\n\nYou might object that you can imagine two things that look like ducks and when combined with ducks turn to nothing, like negative and positive numbers turn to zero when added, as if the antiducks were like some kind of less explosive antimatter. But that isnt the same thing at all; that isnt negative-two ducks, it is //positive-two antiducks//.\n\nA more mathematical way to say that would be that associating the negative sign only makes sense mathematically, not conceptually. To say it in terminology less loaded toward my point, there is a difference between negative-two ducks and two negative-ducks; −(2 ducks) ≠ (−2) ducks. Those are mathematically the same, if we consider ducks a unit of quantity, but they are conceptually distinct.\n\n\nimg class\right-float\ width300 sabertooth.png\n\nIn fact, this distinction applies to zero as well, which is part of why zero is such a groundbreaking concept. Zero enables us to convert //not having// anything into //having no things//. This is such a useful idea that we dont even realize were doing it. As an example, suppose you ask me how many saber-toothed cats I have. If our society didnt have a concept of zero, the only correct answer to this question would be mu|MuQuestion (i.e., the premise of the question is incorrect, so no meaningful answer is possible), since saber-toothed cats are extinct and I wouldnt let any in my apartment even if they werent (just look at those fangs). However, if we allow the answer of zero, I can say I have //no// saber-toothed cats in my apartment. What that really means is, “Yes, I have saber-toothed cats in my apartment, but the number of saber-toothed cats I have is //none// or zero.” If I said it fully, it would make me sound like a smart-ass, of course, but I would be making an important point about zero!\n\nThis said, zero makes more intuitive sense than negatives. You can imagine, or even point to, the state of having zero things, especially if there were some things and they were then taken away. You cannot imagine what it would be like if there were //fewer than zero//.\n\n\n},{title:NegativeVisualization,created:20210916153845819,creator:soren,description:To enjoy something more now, spend a while imagining being without it.,es:likely,modified:20230407025217300,modifier:soren,reviewed:20230406,tags:Idea PhilosophyOfLife Psychology Imagination Public,type:text/vnd.tiddlywiki,text:Key technique of Stoicism in which you imagine losing, or never having had, something you presently have and value. The depth can vary from a passing thought to an extended meditation, and the seriousness from breaking your $2 coffee cup to your child dying in a horrific accident. This technique has several complementary effects:\n\n* You usually realize that, in the end, you would be just fine without the thing. It wouldnt be your favorite choice, but at the very least life would go on. That prepares you for actually losing it, and it may even lead you to realize that you can gradually simplify your life to remove the things that dont actually make you happy at all|EfficientLife.\n* When you come back to reality, you are slightly happier, because you in fact still have what you imagined lacking.\n* You are reminded that since you could lose the thing, you should enjoy it while you have it. This leads to increased mindfulness and enjoyment of the thing in the present.\n\nSome people find this sounds pessimistic, morbid, or anxiety-producing. Maybe some people find it actually is, but many more seem to find the opposite: the real effect is, counterintuitively|CounterintuitiveCorrelation, to make life more meaningful and reduce anxiety about the future.\n\nNegative visualization, in its ability to mind-hackishly induce happiness, is deeply related to underpromising and overdelivering|AlwaysUnderpromiseAndOverdeliver: you momentarily promise yourself nothing at all, or a much worse situation, then deliver a better state of affairs.\n\n!! References\n\n> It is my experience that negative visualization is to daily life as salt is to cooking.\n> ---GuideToTheGoodLife2009, p. 251\n\n\u003C\u003Cclarify>>\n\n> Expecting life to be wonderful is disappointing. Expecting life to be disappointing is wonderful. If you expect to be disappointed, you won’t be.\n> ---HowToLive2021},{title:NeglectedWorkThief,created:20201027161659267,es:likely,modified:20210516225251458,tags:Public Idea,type:text/vnd.tiddlywiki,text:The fifth of FiveThievesOfTime.\n\nNeglected work, such as TechnicalDebt or other TimeDebt, builds up over time if not handled and reduces throughput. Another form of neglected work is the ZombieProject, one which nobody thinks is important enough to work on but nobody wants to kill, so it lives on doing nothing and consuming peoples energy on status updates and occasional half-hearted touches for years.\n\nNeglected work is perishable; as it sits, it loses value and becomes harder to resurrect. Thus, it is also wasteful|WorkWaste.\n\nCritical insight: BusyIsBad.},{title:NelsonAtkins,created:20240811143532008,creator:soren,modified:20240811151704064,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NerdinessNormalization,created:20210311040442499,es:likely,modified:20210811184707830,tags:Idea Public Learning Psychology,type:text/vnd.tiddlywiki,text:Observation: once you get //really// deep into a topic, you often stop directly noticing that youve done so and that most people would characterize your interest as nerdy and arcane. For instance, the other day I listened to an hour-long podcast on the history of TiddlyWiki, which had almost no practical value and a likely audience of a few hundred people across the world, but it felt like a totally normal and average thing to do until I got to thinking about it afterwards.\n\nIn the first stage, I dont understand the ideas, or they seem laughably dull.\nIn the intermediate stage, Im aware that Im doing something nerdy, and sometimes am even embarrassed about it. \n\nPossibly related to the DunningKrugerEffect and ActivityPlasticity.},{title:NerstrandStatePark,created:20240127192829810,creator:soren,modified:20240127192831074,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NetHack,created:20200127024637580,es:confident,modified:20210711193642986,tags:Game Public Idea,type:text/vnd.tiddlywiki,text:My first (and probably still best) love in RogueLikes. Recently Ive been playing a lot of DungeonCrawlStoneSoup though. NetHack started in 1987 and has been under active development since then (though there was a long hiatus with no new releases between 2003 and 2015-ish).\n\nFamous in the right circles. Its not the best roguelike in terms of design; it has thoroughly mediocre balance, the interface is decent but not great, and it relies more on knowing large amounts of arcane trivia rather than emergent strategy. That said, its still devilishly difficult to get into, unforgiving, and surprisingly fulfilling.\n\nYou can even do absurd things like playing a PLessGame, which may be my favorite thing Ive ever done in a video game.\n\nAlso, the DevTeamThinksOfEverything in a way that Ive never seen in any other game. Its full of delightful cultural references and nooks and crannies, and really I //like// memorizing arcane trivia. Theres much more grinding than DCSS, but quite a bit less than plenty of other games, and it rarely feels dreadful in-game.\n\nNetHack is open-source and has a long history of forks/variants that help to drive mainline development, as well as just give people fancying doing a little game development something fun to tool around with.\n\nI recently caught a beautiful exchange on TheGitHub in which the release notes stated that support for a wide variety of weird and wacky old platforms would be dropped unless someone stepped forward to maintain them, mostly because TheDevTeam didnt have the hardware available to test on them. Someone wrote in saying they would be interested in maintaining //floppy disk support//. This could only ever happen for NetHack, and its so fantastic.\n\nI played a //lot// of NetHack in high school, like probably adding up to several months of realtime. I was thinking the other day that (besides just being fun) it may have had something to do with being able to experience mastery of something -- which is often hard to do at that age.},{title:NetiPot,created:20200425174111292,creator:soren,es:confident,modified:20220804163231612,modifier:soren,tags:Health Public Idea,type:text/vnd.tiddlywiki,text:Tool for putting water through your nose and sinuses to clean it out. Looks like a miniature teapot. A little gross, but definitely effective when youre congested. Surprisingly difficult to get the hang of; if you dont tip your head exactly right, youll end up getting water pooled in your upper sinuses (uncomfortable), coming out your mouth (gross), or just not going through properly (confusing and annoying). The only way I know of to get good at it is to screw up a few times.\n\nIt is intelligent to use distilled or boiled water in the pot. While very rare (like, a couple known cases per year across the world), there is a brain-eating amoeba that can be in tap water, normally harmless but very dangerous if it goes up your nose (your nose is not designed to protect your brain against having infected water poured up it, believe it or not). If you get the amoeba, you will die. See BlackSwan, though now you know about it, so itll just be you being stupid if it happens to you.\n\nYou also want to use the water at body temperature or just above, and put some pure salt in. It //works// fine if you dont, but it hurts. The warm saline mimics the conditions inside your nose and sinuses so that it doesnt complain as much.},{title:NetPromoterScore,created:20200406143331077,creator:soren,es:confident,modified:20220118022412246,modifier:soren,tags:Math Business Public Idea,type:text/vnd.tiddlywiki,text:Customer-satisfaction metric based on the question “how likely are you to recommend this product to a friend?” 9s and 10s are promoters, 7s and 8s are neutral, and anything lower is negative. The negative percent is subtracted from the promoter percent; 30% is good and 50% is great. },{title:NeverGoToSeaWithTwoWatches,created:20200425034955915,es:possible,modified:20200908232416493,tags:Expression Metaphor PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crt 4075>>:\n\n> Never go to sea with two watches -- always take one or three.\n\nThe point being, of course, that if you have two and they end up off, you wont know which to trust.\n\nA debatable strategy of course, and basically another way of putting FaceUpOrDown: do you want to be blissfully ignorant that your watch is wrong, or do you want to know its wrong but have no way of determining the right time? (Three, of course, would improve matters, but seeing as time inconsistencies are continuous, does not settle it as neatly as a single watch. Indeed, no matter how many watches you get you are never assured of having exactly the right time! Though if its a problem, you can probably sue your watchmaker once you have more than a few.)},{title:new-haven-cards.png,type:image/png,created:20240927155558906,creator:soren,modified:20240927160300708,modifier:soren,tags:Image Public,_canonical_uri:./extimage/new-haven-cards.png},{title:NewOrleans,created:20201120183416145,modified:20201120183351267,tags:Place Public,type:text/vnd.tiddlywiki},{title:NewRulesForLoveSexAndDating,author:Andy Stanley,caption:The New Rules for Love, Sex, and Dating,completed:202307011200,created:20230703015125732,creator:soren,medium:book,modified:20231009230112130,modifier:soren,rating:poor,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2023,text:I was excited to read this book that someone on \u003C\u003Csubreddit demisexuality>> had recommended, especially insofar as they said it had good discussion of what sex means in a relationship; Ive been peeved that very little of the otherwise good dating advice Ive read sees fit to talk about where sex fits in, as if its something you should just figure out yourself willy-nilly by experimentation.\n\nUnfortunately, it turned out to be a roughly fifty-fifty mix of things that seemed painfully obvious to me (and probably would be to anyone who has actually spent any significant amount of time thinking about this) -- e.g., a chapter that amounted to “dont marry someone youll only be happy with if you manage to fix them” -- and very thinly veiled conservative Christian purity-culture propaganda. I skimmed maybe two-thirds of it and left it at that.\n\nAlso, it was so much not the advice that I needed|RelativeAdvice that I found it kind of funny. Like it says that, no excuses, you need to take a year off of sex and dating to figure yourself out. Dude, I spent the last dozen years doing that and it hasnt worked out so hot has it|ReprogrammingMyIdentity? Or at least, more of it is the exact opposite of what I need. Also, there was a very amusing moment where I highlighted a sentence and then I looked at the next sentence and it said, “Not a single man reading this book will have underlined the previous sentence.” Did I need a reminder that my perspective on sexual desire is not that of the typical man? (No, but I got one and I dont mind it. And hey, I like being kinda gender-nonconforming.)\n\nI did at least get the AgainstPurityCulture tiddler out of it. Reminds me of MrBenjaminFranklins story of being converted to Deism by reading a particularly unconvincing book arguing against it.},{title:NewSpeak,created:20200421175437301,modified:20200421175541817,tags:Psychology Language Public Idea,type:text/vnd.tiddlywiki,text:Language in NineteenEightyFour which the state is working towards which will not have words for any concepts that it wants to suppress (e.g., \freedom\). Also very logical and regular.\n\nCf. HypoCognition and HypocognitiveCensorship.},{title:NewYorkMode,created:20200225223446717,creator:soren,es:mythological,modified:20250204201258022,modifier:soren,tags:Productivity PersonalMythology Public Idea,type:text/vnd.tiddlywiki,text:Once in a while MrAntonArmstrong would walk into rehearsal with TheStOlafChoir and announce that he was “in New York mode” (him being, once upon a time, a New Yorker). This proves to be an extremely useful concept.\n\nNew York Mode is difficult to precisely define, but has many of the following aspects:\n\n* A general intolerance of interruptions, irrelevant information or events, and bullshit.\n* Desire to postpone anything that isnt critical to the task at hand.\n* Strong internal motivation to Get Things Done™.\n* A greater-than-average tendency to be a bit gruff.\n\nAlmost everyone goes through New York Mode stages. Its not a good or bad thing in total, but you can definitely capitalize on it if you recognize youre in it, which is why it benefits from a name|PowerOfNames.\n\nIf life were DungeonCrawlStoneSoup, `NewYork` would be a status effect.},{title:NextAction,created:20210902151104160,creator:soren,es:confident,modified:20210909195518590,modifier:soren,tags:Idea Productivity Systems Public,type:text/vnd.tiddlywiki,text:Term popularized by MrDavidAllen in GettingThingsDone and related material. A next action is a clearly defined step needed to move some project or task forward.\n\nWhen a next action is correctly formulated, no more deciding needs to be done or TrivialInconveniences overcome prior to starting the task. \n\nTo-do lists should ideally be composed of next actions, or at least a portion of them that you work from should be. Many if not peoples to-do lists are instead composed of what Allen calls “stuff” or “blobs of undoability”: they indicate an item that needs to be fixed (“groceries”, “bicycle”), or cover a whole series of different items which could or even must be done separately|StorySlicing, or dont clearly name the desired outcome, or dont make clear what needs to be done.\n\nNext actions are determined at a time separate to doing the work, allowing you to focus on defining what work you need to do at one time and actually doing the work at a different time. These are completely different tasks that require different modes of thought, so its typical to get better results this way, and it certainly feels easier.\n\nYou wouldnt think having next actions as opposed to stuff on a to-do list would make that much difference, but if youve never tried clearly defining next actions, you should try it immediately – items that youve been feeling guilty about not doing for weeks will instantly melt away as soon as you create a list of obvious things you can do with no initial resistance.},{title:NextJs,created:20200521213921644,modified:20200521213930772,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Model-view UI framework for the web.},{title:Nibelungenlied,author:Anonymous,bibliography:LifetimeReading,caption:The Nibelungenlied,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035572,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:M: English, modern German, excerpts; see also Eberhart Kummer’s singing},{title:NikeStrategy,created:20231023023547007,creator:soren,description:Dont overthink the task, just do the obvious thing.,es:confident,modified:20240227192435550,modifier:soren,tags:Idea Psychology Public,type:text/vnd.tiddlywiki,text:The Nike Strategy for approaching a task: “Just do it.”\n\nOften we overthink what is necessary in complicated situations, especially social ones where we feel awkward, or ones where were doing something unfamiliar. The primary obstacle in such situations is, more often than not, you telling yourself its hard or needs a lot of complex planning. You might already know what you need to do -- it might even be patently obvious -- but you just dont //want// to do it (cf. NotMeIsm), and so youre looking for excuses. (MrTimothyGowers, in the context of mathematics, calls this “fake difficulty|https://gowers.wordpress.com/2011/09/23/welcome-to-the-cambridge-mathematical-tripos/.”) The only strategy thats actually necessary here is to stop making excuses and do the obvious thing.\n\nOf course, this is not to say that it is easy to get yourself to do the thing; otherwise you could “just do” not being depressed, for example. Sometimes, though, all it really takes is believing just doing it will work|Metafaith. CountYourselfUp can also be surprisingly helpful in such situations.\n\nThe Nike Strategy is often the best way to approach complicated interpersonal situations. How could you possibly make someone understand you feel X? Well, have you thought of telling them that? Sometimes its awkward, but awkward is OK|ImmediatelyAwkward.\u003C\u003Cfnote \Of course there are times when its better not to be explicit. But most people think far more situations fit into that category than actually do.\>>\n\nSimilar phrasing: HspWtcS.\n\nThe Nike Strategy applied to beginning a long and complex endeavor: JustGetStarted.\n\n\n!! References\n\nFrom a “Life Update” from MrHenrikKarlsson, his six-year-old Maud said of being determined to learn to read in 2023, and basically just barely succeeding on New Years:\n\n> Just decide that you want to do it. Then do it.},{title:NineteenEightyFour,caption:1984,created:20200123030435610,format:ebook,medium:book,modified:20210607011415152,owned:yes,rating:good,readstatus:read,tags:Source DystopianVision Public,type:text/vnd.tiddlywiki,universe:NineteenEightyFour,text:The famous authoritarian-government dystopia by MrGeorgeOrwell. I read it on my Kindle when I had the flu and couldnt get out of bed freshman year of college because it was the only thing I had in my room, which added a nice dimension to it!\n\nSeemingly it has turned out that the government, ruling by force, is an unnecessary component of making life meaningless, though; see BraveNewWorld, MicrotransactionalDystopia, BigTech.},{title:Noahpinion,author:MrNoahSmith,blogroll:Blogroll,created:20250905203750441,creator:soren,modified:20250905203816158,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.noahpinion.blog/},{title:NoBinderPolice,created:20200716174605683,creator:soren,description:Dont obey the rules of the system just because; break them when it makes more sense to. There are no binder police to come after you.,es:confident,modified:20250211174941234,modifier:soren,tags:Creativity PersonalDocumentation PhilosophyOfLife Process Learning Public Idea,type:text/vnd.tiddlywiki,text:Life can often be improved by borrowing a pre-existing //system// from somewhere. Indeed, it is impossible to live without using some such systems -- for instance, your native language is a system that you learned from other people and largely conform to because (a) its useful to use the same language as other people so you can understand each other, and (b) it largely works just fine to help you think; so theres no incentive to change it.\n\nHowever, especially with smaller systems, or ones that someone has sold to them with the claim that their life will be improved by following it, people sometimes make the mistake of trying to blindly obey the rules of the system, even when it doesnt make sense. This is silly: the system was developed (or is still being developed) by others, who likely know neither who you are nor what you are specifically trying to achieve at a particular moment. Instead, your goal should be to implement the parts of the system that make sense, both on a broad scale and on a local scale.\n\nFor instance, M2 started out as a ZettelKasten, more or less. But I found it didnt make sense for me to use unique, immutable identifiers for each note, which many people claimed was critical; I ignored that step. And it made sense to drop some raw notes in here once in a while, contrary to the general principle that all notes should be considered, thoughtfully written, and sorted from the chaff, so I did that, too. Eventually, it turned into its own thing that shares some properties with a Zettelkasten.\n\nThe binder police (or the ZettelKasten police, or the notebook police, or the Home Police, or the System Police, or whoever you like) dont exist. This is //your// system. Indeed, they usually dont exist even when youre contributing to a bureaucracys system. Even humans in an inflexible system behave more sensibly than you might think, if theres a reason for stepping outside the rules.\n\nHeres a secret: if you like, you can even do something “wrong” with your system just because you can. It feels pretty good sometimes, and occasionally it can even get you out of a rut|IntentionalSpoiling.\n\nA sort of form of ContinuousImprovement. Cf. also ExpertsDontMakePlans. The more you know, the more youll be inclined to -- and have the right to -- upset the nonexistent binder police.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\nTerm coined in MrLionKimbros CompleteThoughtMapping2003:\n\n\u003C\u003C\u003C\nBy the way -- I want to briefly comment on that principle. “There’s no binder police.” I’m writing this complex system to you, explaining how I made it up, and how it works. What’s most important is that you get the IDEAS here, not that you actually replicate my entire system exactly. In fact, I hope that you DON’T. For one, you are living in a different mind than I am, so you are going to probably want to put things in a different way than I do. But more than that, I WANT TO HEAR NEW IDEAS. I want to know what people do with this. And if you just say, “Hey, I did it exactly like you,” well, what growth is there in that? I mean, it might be good for a little while, but I really want to see what else is out there. My system changed in a major way at least once every 2-4 months. And it was always a positive change. So I want to hear what you all do. And remember: There’s no Binder police, like my girlfriend always tells me about cooking. “You want to put paprika in there? Throw paprika in there. There’s no cooking police that are going to go after you.”\n\nSo get the meat of what I am saying, the IDEAS on how you can organize stuff, then adapt it to your domain.\n\u003C\u003C\u003C\n\n\u003C/$m2.x>\n\n\n\u003C$m2.x number\2\>\nProminently mentioned in ArtOfPersonalIndexing.\n\u003C/$m2.x>},{title:NobodyUnderstandsRelationships,created:20210909024342085,creator:soren,description:If there is a ground truth about who a person is or what the relationship between two people is, nobody actually has it.,es:confident,modified:20220504211451863,modifier:soren,tags:InterpersonalRelations Identity Public Idea,type:text/vnd.tiddlywiki,text:If there is a ground truth about who a person is or what the relationship between two people is, nobody actually has it.\n\nFor instance, in HumanStain2000, the shifts in perspective over the course of the story show that MsDelphineRoux is obviously not qualified to speak on MsFauniaFarley and MrColemanSilks relationship; shes using HanlonsTanto (presumably partly because she already dislikes Coleman). On the other hand, neither of the people //in// the relationship can possibly view it objectively either. There isnt such a person, aside from maybe God.\n\nProbably the only thing we can take away is that we shouldnt try to judge other people or their relationships -- thats not our job. There is almost nothing that annoys me more than other people insisting they know whats best for me or a third party.},{title:NoChanceToBreakOut,created:20221002143251399,creator:soren,description:We should be a little bit more lax in enforcing some rules and reducing risks, because people need to do stupid things now and then.,es:likely,modified:20251010143915535,modifier:soren,tags:Idea Psychology Sociology Public,type:text/vnd.tiddlywiki,text:I was recently walking around LakeOfTheIsles in Minneapolis, as I do several times a week. At the west end of the lake, theres a bridge over a canal that leads to CedarLake, about a third of a mile to the west. There were four high schoolers there taking turns jumping off the bridge rail into the canal, swimming out, and coming back up. This is something of a Minneapolis tradition; kids have been doing this for many years.\n\n\u003C\u003Cfloat-image width:400 side:right \loti-bridge.png\>>\n\nI shrugged and kept walking, but when I turned around a little bit further on and came back, a park cop had come up and was telling them to knock it off. He was reasonably nice about it, and he didnt write them a ticket, but he did say they needed to leave and not come back, otherwise they would get a court summons.\n\nIs diving off the bridge dangerous? Yeah, a little bit. I was moderately worried when I saw them doing it. Its a pretty long way down, at least one story and maybe closer to two, and while the canal is nice and deep there, you could certainly mess up and jump in the wrong spot and hurt yourself badly. Also, while they did have someone posted as a lookout on the other side, there are people canoeing and kayaking underneath, and if the lookout messed up, a teenager falling on top of a kayaker could do a lot of damage. So I figured the cop telling them to knock it off basically made sense.\n\nAt the same time, I was left with this strange feeling of unease, because this was yet another manifestation of our society aiming for a zero-risk world|SurviveVsThrive, and not coincidentally a zero-pleasure, zero-humor, pent-up, phone-zombie-filled world. You cant do //anything// even a little bit silly anymore. My generations parents and grandparents tell stories about breaking into buildings for pranks and climbing down ropes from dorm windows and whatnot. If you did that now, youd probably get caught on a security camera, and then youd get expelled. (My high school class of 2013 was told that if we tossed our hats in the air at graduation, wed have our diplomas withheld until we completed hours of community service – mortarboards can injure people when they come down if poorly thrown, you see.)\n\nAnd I think people need that kind of release occasionally. Our teenagers should be able to do things that are dumb but only slightly dangerous and antisocial and not have it follow them around for life. We should be able to have crazy parties once in a while, or jump off a bridge with our friends and get wet. Because the alternative is that we spend all our time on social media, and then occasionally snap and go wild because its too much; human society has developed to include these moments when its socially permitted to do weird things, to get that impulse out of us before the tension builds to the point that bad things happen.\n\nSo Im going to stand up for our teenagers jumping off the Lake of the Isles bridges. Not because its a smart, entirely harmless idea, but because the alternative is much worse, and because a life with no goofiness -- even moderately risky goofiness -- is one less worth living. A less workified world|PlayfulKnowledgeManagement is worth the risk.},{title:NoCodeAtAll,created:20200202002322225,creator:soren,es:likely,modified:20240227174106508,modifier:soren,tags:Design Code Public Idea,type:text/vnd.tiddlywiki,text:A somewhat ZenPhilosophy idea about how PerfectionIsSubtractive.\n\nI dont like quoting ideas in here because paraphrasing helps so much with solidifying them, but I cant possibly put it better than Jeff Atwood|https://blog.codinghorror.com/the-best-code-is-no-code-at-all/, as quoted in the StackOverflow blog post|https://stackoverflow.blog/2019/10/29/my-most-embarrassing-mistakes-as-a-programmer-so-far that introduced me to the idea:\n\n> Its painful for most software developers to acknowledge this, because they love code so much, but the best code is no code at all. Every new line of code you willingly bring into the world is code that has to be debugged, code that has to be read and understood, code that has to be supported. Every time you write new code, you should do so reluctantly, under duress, because you completely exhausted all your other options. Code is only our enemy because there are so many of us programmers writing so damn much of it.\n\nIt seems fair, then, to suggest that AppropriateTechnology involves using as little code as possible. Its easy to start writing code and keep writing code and keep writing code, perhaps doing something that is WorthlessEfficiently. The AgilePhilosophy may help with this, but is by no means enough.\n\nA MicrotransactionalDystopia would seemingly be founded on having code associated with every interaction. Limiting code might help stave that off.\n\n\n!! References\n\n> There is no code faster than no code.\n> ---Kevlin Henney (\u003C\u003Crt 12447>>)\n\n\u003C\u003Cclarify>>\n\n> As I did 20 years ago, I still fervently believe that the only way to make software secure, reliable, and fast is to make it small. Fight Features.\n>---MrAndrewTanenbaum (\u003C\u003Crt 9581>>)\n},{title:NodeJs,created:20200509180640903,creator:soren,es:confident,modified:20211229144837339,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki,text:Software that runs JavaScript standalone, outside of a browser -- for instance, on a server. Probably not the first tool to reach for when developing backend software, since, well, thats not what JavaScript is really for. But its incredibly useful during some kinds of JS development, as well as for running tools originally designed for the browser outside of it (for instance, as a more robust way of operating a TiddlyWiki).},{title:NoEvidence,created:20211227151403929,creator:soren,description:There being “no evidence” of something has relatively little bearing on whether you should believe it.,es:confident,modified:20220909130125108,modifier:soren,tags:Idea Public Science Reasoning Language,type:text/vnd.tiddlywiki,text:The statement that there is “no evidence” of something is always misleading, and you should remove this phrase from your lexicon. The problem is that its often used to mean at least two distinct things which can hardly be more different:\n\n* Something is completely implausible and you obviously shouldnt believe the rumors saying its true.\n* Something is completely plausible on its face, but theres no high-quality evidence (e.g., controlled experiments) to prove it.\n\nIt is a massive error to conflate these two. If something seems mostly plausible to you, and theres “no evidence” that it is or isnt, in most cases you should proceed as if its true, while being careful not to assume|ContingencyPlanning it positively is to your detriment. If something seems completely implausible, then you should proceed as if it //isnt// true, while keeping open the possibility that some evidence might show up and require you to adjust your thinking. \n\nIn the source, Scott Alexander points out that this isnt just poor wording; many people, and even many science writers, seem fundamentally confused about the difference between these things. (I dont think we have any problem with the difference in everyday life, but somehow when it comes to interpreting science we abdicate our powers of reasoning.) And he notes that informal evidence can outweigh high-quality evidence (e.g., parachutes //obviously// prevent injuries when jumping out of planes at altitude even though nobody has done a study|https://www.bmj.com/content/363/bmj.k5094 saying so; homeopathy most likely doesnt work even though there are lots of studies suggesting it does, because others suggest it doesnt and it seems fundamentally implausible\u003C\u003Cfnote \\\Actually, I have more sympathy towards homeopathy than a lot of people do. Many people ridicule it because there arent any traditionally measurable molecules of the original substance left after dilution. But the theory of homeopathy doesnt ignore this fact at all! It has a consistent and reasonable theory of how this would work: theres some kind of “X-factor” that we dont know how to measure which is strengthened by succussion and dilution even as the original substance disappears. I dont think its really that implausible that there might be some aspect of reality that we havent figured out how to measure, as many people do; we thought the same thing about germs and subatomic particles, after all (have some IntellectualHumility please). So I would be willing to give the theory a try! That said, after two centuries of attempts, it hasnt been found to consistently work better than placebo, so IMO its pretty clearly had its try.\\\>>).\n\nMost of all, saying theres “no evidence” is //lazy//. If there truly is no evidence, then what should we believe? We shouldnt automatically believe the null hypothesis because there is no evidence, we should base our belief (and degree of confidence) on our intuition of whats most likely.\u003C\u003Cfnote \Otherwise I could convince you of literally anything by setting up an appropriate hypothesis test: “Does the moons spectrum differ significantly from that of green cheese?” with a very low power, for instance.\>> And even if there //is// evidence, that doesnt mean we should believe it, so why should or shouldnt we? (SA notes that hundreds or thousands of people say theyve been abducted by aliens, so saying there is “no evidence” of alien abductions is flat-out wrong, but we still probably shouldnt believe that they happen.)\n\nSource: NoEvidenceRedFlag2021.},{title:NoEvidenceRedFlag2021,author:MrScottAlexander,caption:The Phrase \No Evidence\ Is A Red Flag For Bad Science Communication,completed:20211216,created:20211227151458108,creator:soren,medium:article,modified:20220909130343328,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://astralcodexten.substack.com/p/the-phrase-no-evidence-is-a-red-flag,year:2021},{title:NoExercises,created:20200708001549515,es:confident,modified:20201216051041961,tags:Learning Public Design Idea,type:text/vnd.tiddlywiki,text:Something that infuriates me -- it would be a PetPeeve if it werent objective bad practice -- is when someone writes a textbook or learning material with //no exercises//. Or practically no exercises. Like Im going to call out the otherwise fantastic The Rust Programming Language|https://doc.rust-lang.org/book/ official book of RustLanguage here. Has all the details you need to learn the language, but has two follow-along projects and like 6 other exercises anywhere in the book, among what would be hundreds of pages if printed. Not working.\n\nContrast the awesome classic //The C Programming Language// by MrBrianKernighan and MrDennisRitchie, which is the thickness of a philosophical treatise and is mostly exercises, but can famously take years to get through casually because theyre really hard and actually teach you how to use C!},{title:NoExit1944,author:Sartre,bibliography:LifetimeReading,caption:No Exit,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214035581,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1944},{title:NoLabelsPhilosophy,created:20200410202656294,creator:soren,es:possible,modified:20231010030449423,modifier:soren,tags:PhilosophyOfLife Psychology Public Idea,type:text/vnd.tiddlywiki,text:A counterphilosophy to PowerOfNames states that putting “labels” on things is limiting, and can make you subject to other peoples ideas of who you should be instead of your own (see for example Dazne|https://dazne.net/labels/ on this topic). This is true: names are extremely powerful, to the extent that they can be dangerous. But IMO thats why you should be in control of the labels, because then they have the opposite effect: in a BeliefAsInstrument way, they help you be the way you want to be. The answer isnt to throw them out, its to take advantage of them.\n\nThe other huge problem I have with Daznes treatment is that it fails to consider that //not// labeling things has a cost too. It says for instance that labeling your personal relationships -- spouse, mother, etc. -- limits your conception of that relationship. But so does not having an idea of how you relate to that person. Youre going to have an idea anyway, you just might not be able to control it quite the way you wanted to. Just like you CantNotCommunicate, you cant not label. Its your choice how you want to do it, on your terms or on someone elses.\n\nNevertheless, this philosophy does offer some important lessons. Most importantly, only you should get to label //yourself// (cf. DemiAffirmations). Other people can name your actions, but the authority to define yourself rests with you and you alone. And its worth trying not to analyze other people even privately. Beyond that, trying to think outside of some labels may be a good way to avoid ConfirmationBias and get yourself out of a state of SchemaBoundness.},{title:NoMeaningWithoutFailure,created:20201117222629161,creator:soren,description:Life is a meaningless joke unless we can make the wrong choices, even horrendously wrong ones.,es:confident,modified:20240831165149244,modifier:soren,tags:PhilosophyOfLife Futurism Religion Public Favorites Idea,type:text/vnd.tiddlywiki,text:Its often tempting to suppose that we should aim for a world where we cant screw up, where everything always ends up|MissingTiddlerPhilosophy //right// (perhaps DeflectResistance taken from a practical to a philosophical level). In reality, though, when you take this line of thought to its logical conclusion, its hard to see how this would be a world you would want to live in. If you cant do anything bad or wrong, your choices wouldnt matter for much. If theres nothing bad or wrong to fight against or try to improve, a big source of most peoples purpose would be missing.\n\nEven DeathIsNecessaryForMeaning.\n\nMrPhilipPullman spends a lot of his work (especially HisDarkMaterials) on ideas surrounding this topic. Sure the FallOfMan seems bad, but being here in the after-times, anything else seems like it would be intolerable, especially from an atheist perspective.\n\nOne might argue this as a solution to the ProblemOfEvil, which questions how the fact that bad things happen can be reconciled with the existence of a benevolent God. Formally it leaves a lot still to be argued, but intuitively it might be quite satisfactory to some.\n\nI have a feeling I like and live this idea a lot more than most people do. Not that I never mourn when bad things happen, but it can get pretty bad before I cant just see it as another bump that adds interest (and knowledge/wisdom|HaveToExperienceItToUnderstand) to life.\n\n!! References\n\n\u003C$m2.x number\1\>\n\nAt the climax of BraveNewWorld, when “the Savage” John is left alone with the World Controller Mustapha Mond:\n\n> “We prefer to do things comfortably,” said the Controller.\n> “But I dont want comfort. I want God, I want poetry, I want real danger, I want freedom, I want goodness. I want sin.”\n> “In fact,” said Mustapha Mond, “youre claiming the right to be unhappy.”\n> “All right then,” said the Savage defiantly, “Im claiming the right to be unhappy.”\n> “Not to mention the right to grow old and ugly and impotent; the right to have syphilis and cancer; the right to have too little to eat; the right to be lousy; the right to live in constant apprehension of what may happen tomorrow; the right to catch typhoid; the right to be tortured by unspeakable pains of every kind.” There was a long silence.\n> “I claim them all,” said the Savage at last.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\nIt seems that despite his situation, even MrHumbertHumbert does not want life to be a joke:\n\n> Unless it can be proven to me -- to me as I am now, today, with my heart and my beard, and my putrefaction -- that in the infinite run it does not matter a jot that a North American girl-child named Dolores Haze|MsLolita had been deprived of her childhood by a maniac|Lolita1955, unless this can be proven (and if it can, then life is a joke), I see nothing for the treatment of my misery but the melancholy and very local palliative of articulate art.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\n\n\u003C\u003C\u003C\n\\\\nIf the devil dont dance, heaven wont shine...\n. . .\nIts the order of freedom to be preceded by walls,\nCause the truth would be worthless if no one ever lied,\nSo we carry our shame in the interest of pride,\nAnd we have all these questions to make us go roam,\nAnd weve got all this distance to make us come home.\n\\\\n\u003C\u003C\u003C\n\n---Antje Duvekot, “Merry-Go-Round”\n\n\u003C/$m2.x>},{title:NominalPower,created:20210522031412910,description:The names of some things should not be shared or they lose their power.,es:mythological,modified:20210613213830132,reviewed:20230426,tags:PersonalMythology Imagination Psychology Religion Public Idea,type:text/vnd.tiddlywiki,text:An application of the PowerOfNames to mythology: when you know what something is named, you may be held to have some degree of power over it. For instance, knowing or speaking the name of a god may cause them to lose some power.\n\nDiscussed in MyLillianAndSylvia wrt the Librarian. Even MrDavidAllens statement from GTD (quoted in the PowerOfNames tiddler) exhibits this mindset a little bit, in a //very// secular context!\n\n{{NominalPower/p||PrivateChunk}}},{title:NonEuclideanGeometry,created:20200516174009153,creator:soren,es:confident,modified:20211107180620762,modifier:soren,tags:Math Reasoning Public Idea,type:text/vnd.tiddlywiki,text:MrEuclid, the Greek creator of geometry, defined five postulates. The first four are simple, beautiful, and appear axiomatic. The fifth is bugly|DegreesOfUgliness:\n\n> If a line segment intersects two straight lines forming two interior angles on the same side that sum to less than two right angles, then the two lines, if extended indefinitely, meet on that side on which the angles sum to less than two right angles.\n> ---Wikipedia|https://en.wikipedia.org/wiki/Parallel_postulate\n\nThe inclusion of this postulate has bothered virtually everyone whos thought about it over the centuries. Its a wart on the otherwise easily understandable and beautiful system. Its clear that Euclid thought so, too; he introduced it only well into the //Elements// and after proving a whole bunch of other things without it, then evidently grudgingly included it realizing he could get no further without it. (The universe doesnt owe us|UniverseDoesntOweUsAnything a neat form of geometry, just like it doesnt owe us accurate tuning|TuningDoesntWork.)\n\nSo, of course, people have unendingly tried to get rid of it, often appearing to succeed, but later realizing their proof rested on an unconscious assumption which turned out to be equivalent to the fifth postulate.\n\nUntil the 1800s, when several people tried proofs by contradiction|ProofByContradiction and carried the contradiction out far enough to realize that they were only creating other logically consistent systems! The geometries produced arent as familiar, but theyre not only consistent, they even have useful applications.},{title:NonexistenceOfPants,created:20200908225556700,es:mythological,modified:20210509005957989,tags:Humor Public Idea,type:text/vnd.tiddlywiki,text:An oft-repeated joke is that NetHack characters do not wear pants (or anything below the waist aside from shoes), because there are no pants items in the game and no reference is ever made to a players pants. The only problem Im aware of with this theory is that sitting on a cockatrice corpse doesnt cause stoning, but we could always say thats an oversight given all the other evidence! (Then again, TDTTOE|DevTeamThinksOfEverything.)\n\nOn the other hand, NetHack characters seem to have a variety of strange items not mentioned or only vaguely mentioned, including:\n\n* A backpack that is completely immune to damage, even from disintegration beams, yet fails to protect its contents from anything at all (e.g., paper can become unreadable from briefly falling into a pool). It also has unlimited volume (e.g., it can hold 50,000 rocks), until you try to put 53 unique items into it, at which point it becomes completely incapable of holding anything else.\n* An infinite supply of completely damageproof matches.\n* Tinning kits seem to contain some tool that allows the player to warp time: its possible to safely preserve meat in 1 turn, the same amount of time it takes to swing a sword at a monster. In //my// house canning takes about 3 hours on a good day!},{title:NonexistenceOfPurelyFactualKnowledge,created:20240305192410208,creator:soren,description:Its tempting to make certain domains of learning into “pure facts,” but Im skeptical that this category exists in any real way for optimal learning plans.,es:likely,modified:20240629032805004,modifier:soren,tags:Idea Memory Learning Public,type:text/vnd.tiddlywiki,text:A tempting model of types of knowledge to be learned, often discussed with regards to SpacedRepetition, particularly the utility of shared flashcards|GoodSharedFlashcards, divides knowledge into “facts” and “things requiring understanding.”\n\nTheir characteristics look something like this:\n\n|!Factual Material|!Material Requiring Understanding|\n|Usually highly formulaic and template-based.|Rarely formulaic or template-based. Often question-based, or example-based.|\n|A great match for shared flashcards|GoodSharedFlashcards in most cases. Not hard to develop workable ones.|Needs to be self-created, or at least integrated in a MnemonicMedium or have its dependencies carefully analyzed so you learn in order, to be effective.|\n|Can be generated by AI with little to no editing required.|Can likely often be generated by AI, especially as it gets better, but needs editing and curation to become excellent. Sometimes probably easier to just write it from scratch.|\n|Can be fit into almost any course of study that relies on it without requiring much if any adaptation. The users broad study strategy doesnt come into it.|More closely tied to your exact learning goals, courses, and exams than factual material; i.e., less transferable between contexts.|\n|Dissimilar to good exam or practical questions, although most exams also have some pure factual questions.|More similar to good exam questions, giving you a chance to practice testing your understanding.|\n|Theres really only one way to learn it: learn the facts by rote using an effective schedule and some mnemonics.|There are many different ways to learn it effectively.|\n\nHowever, I want to do some TaxonomySmashing. The more time I spend learning, working on spaced repetition design, and thinking about the problem, the more skeptical I grow of this distinction. Or at least, while I think pure factual material probably does exist, I think it is extremely rare, and most peoples learning would benefit dramatically from treating what they are inclined to treat as factual material as material requiring understanding.\n\nFirst of all, basically all factual material has dependencies which you must understand for the facts to make any sense at all; theyre just implicit because they seem so obvious to people who know them. The closest thing I can immediately think of thats a pure fact is the mappings of the MnemonicMajorSystem. Theres no reason whatsoever that the number 1 should make a T sound, it is chosen arbitrarily (with the slight mnemonic that both have one downstroke when written out). But to use this “pure fact,” I need to understand, among other things, what numbers are, and that T and D and TH are related sounds, and what consonants and vowels are; and I need to be able to come up with words in my native language that match patterns. Without these dependencies, no //knowledge// is created by the fact.\u003C\u003Cfnote \\\\nDouglas Hofstadter, in “The Ineradicable Eliza Effect and Its Dangers”, from //Fluid Concepts and Creative Analogies//:\n\n\u003Cblockquote>\n\n`(aim-to-overthrow (Contras Sandinistas))`\n\n...When one keeps in mind that the alphanumeric string \aim-to-overthrow\ might as well have been \holds-one-teaspoonful\ or \bling-blang-blotch\, it seems dubious that the above-quoted expression contains information that the Contras, or anyone else, ever aimed to do anything at all. In fact, even the use of the word \information\ seems an exaggeration. The program has been informed of nothing -- it has merely been handed a string of letters and punctuation marks. As a result of this, no ideas will be created, no knowledge will be consulted, no imagery will be formed. Yet simply because highly evocative English words are embedded in the string, it is hard to resist this easy slide down a very slippery epistemological slope.\n\u003C/blockquote>\n\nIf you memorize the Major System mappings without knowing what a consonant is, you cant reason about or use the mapping, and you have no more knowledge than Hofstadters logic engine does of Nicaraguan politics.\n\\\>>\n\nBut perhaps this is just pedantic. The Major System can, in practice, be treated like the left column in my table above (although mnemonics are unlike other factual material in that most people see significant improvement in ease of memory by creating their own, since there is no particular reason one needs to use someone elses). What about something more typical?\n\nLets think about the presidents of the United States. You want to learn the number, name, political party, and years in office of all the countrys presidents for an exam. This is factual material, right?\n\nId say only kind of. The things you said you want to know are indeed pure facts. But its my contention that just memorizing those by rote is a mistake, even if all you want to know is those facts.\n\nLets consider an example. The 17th president was Andrew Johnson. “Andrew Johnson” is an extremely boring name and has no association whatsoever with the number 17 other than this fact, so this is going to be hard to remember naturally. The four-digit years in office and party will be similarly difficult. Sure, you can apply MnemonicTechniques like the ones discussed above, if you have the skills to do that. But I think, even if youre already good at this, thats going to be brittle. Purely mnemonic-driven knowledge will never be InevitablyCorrect.\u003C\u003Cfnote \Mnemonics still have a role to play here in helping you make fiddly differentiations. If you cant remember if something happened in 1871 or 1872, and theres no obvious reason to know it was 1872 from everything else you understand, and its important that you know the exact number, a mnemonic can supplement your understanding, rather than replace it, and create a great deal of value.\>> Unless you come up with a truly fantastic mnemonic, youll forget it quickly if you stop reviewing. Youll have no motivation to remember this fact, except maybe to pass your exam, so it will feel like drudgery. Besides, at the end of the day youll still know nothing whatsoever about Andrew Johnson! Maybe you dont care that much because you just have a test on who the presidents of the United States were in order, and you dont care about history, but //ceteris paribus// surely its better to pick a learning method where your knowledge is more likely to be useful or at least interesting in the future?\n\nSo lets try with some surrounding context instead. Even without trying to learn anything new, I can do better! I remember that Abraham Lincoln, one of the most famous people in American history, was the 16th president. Lincoln was assassinated in the middle of his second and last term, so if we know the rules of US presidential succession, we can infer that the 17th president would have been his VP. Presumably he was of the same party as Lincoln, and Lincoln was a Republican, so the 17th president will be too. And he would have been serving just after the Civil War at the beginning of Reconstruction. The Civil War ended in 1865, I think -- somewhere right around there anyway -- and Lincoln was assassinated very soon afterwards, so the 17th president probably started serving in 65 or maybe 66, and he would have served out the rest of the four-year term; I think Id remember offhand if he had died in office. Not sure if he was elected again after that.\n\nOK, so now I checked on Wikipedia. Im not all right -- Johnson was actually a Democrat! Thats super interesting, and specifically because its unusual it will be easier to remember, even though its counterintuitive. If I look up //why// that is, this will become easier still. A randomly named persons party would be extremely difficult to learn by rote without mnemonics -- its fine for one person but youll inevitably see MemoryInterference with other similar presidents -- so this is a big win. I was right that he served from 1865 to 1869, and he was not reelected. I guess he actually got impeached somewhere in the middle because he was so unpopular, which I had never heard of! And hes consistently ranked as one of the worst presidents in American history, largely because he did a bad job with Reconstruction and opposed the 14th Amendment (granting citizenship to former slaves).\n\nThe point is -- now Andrew Johnson is a //person// in my head, not a dull name. I can build on the picture I showed I already had of the surrounding period in history and have things to anchor the facts I want to learn to. My knowledge has Gearsness; if I forget a specific fact off the top of my head, I have a fighting chance at deriving it from others, like I did with Johnsons years in office above, and Im far less likely to come up with a wrong answer when I can check the information I remember against other information I remember and see if its compatible (see InevitablyCorrect).\n\nTo keep this fresh in my mind over time, in addition to flashcards about the facts I want to learn, I can add some of this in on my cards. Maybe I want to remember some of the fun details here, because theyre fascinating or I think remembering them will help me remember the specific facts I need to know for my exam, so I create actual cards for them. With others, I might put them on the back of other flashcards, so I dont have to specifically test them but I have them as context if I forget. (An ideal flashcards app would be able to effortlessly promote such context/dependency facts to real cards if it proved you were having a hard time learning them.) Now my flashcards are understanding flashcards, not just factual flashcards.\n\nI will grant that learning the desired information about the presidents this way will take more //time// than cramming them with mnemonics, at least if youre good with mnemonics.\u003C\u003Cfnote \Although I think the difference could be made pretty small with an appropriate president-learning resource and some practice at this kind of connected learning.\>> However, I think it is //easier// and //more motivating// to learn with understanding, and I think these are much more important things to optimize for in studying than time -- theyre what really determine what you achieve. Plus, of course, you learn way more.\n\nTo conclude, many things people want to learn with spaced repetition are even less obviously factual and more obviously understanding-based, so the case is even stronger than presented above. Connected knowledge with understanding should be considered the ideal, and pure factual memorization a last resort, not just because its more worthwhile but because its easier! Weve talked at RemNote about trying to make our queue as exciting as, say, scrolling through Twitter. This will //never// happen if youre flipping cards that say “17th president” on the front and answering “Andrew Johnson” after applying your mnemonic. It definitely can happen if you usually find yourself answering exciting, clear, tractable prompts when you open it. If learning becomes fun, youve already won the battle of preparing for your exams. If its so dull you have trouble getting yourself to practice at all, efficiency doesnt matter much. (See also DynomightSchoolOfRunning.)},{title:NonexistentWeekends,created:20200411180350722,creator:soren,modified:20200416123546147,modifier:soren,tags:Psychology PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:A strange part of the experience under SocialDistancing: it gets trickier to keep track of the days, and the definition of a weekend seems pretty much nonexistent. You dont sit at the work computer and work for 8-ish hours, but otherwise everything is exactly the same! You dont go anywhere, you dont skip your commute, nothing. Even people who normally work remote are going to be seeing this to a lesser extent since they wont be going out (important if youre doing remote long-term, for sure!).},{title:NonlinearRatcheting,created:20200302235114371,es:likely,modified:20210509010142459,tags:Productivity Information Math Public Idea,type:text/vnd.tiddlywiki,text:The typical RatchetingProcess involves adding a small amount to something on a regular basis (e.g., pages to a book, notes to a ZettelKasten). For many things, like the book pages, this is a linear process: the value grows (largely) linearly with the amount of work accumulated.\n\nSome things, like notes in the ZettelKasten, however, result in nonlinear gains. The number of new notes may increase linearly, but the number of possible connections and correspondences increases faster than linearly (in terms of raw links, the number of possible links, which seem to be the main value creator, grows as $$O(n^2)$$ where $$n$$ is number of notes). Value of a ZettelKasten is of course not strictly quantifiable, so the exact equation is not produceable; still, its clear that were getting more than 6 notes of additional value if we add 6 notes to 50,000 notes.\n\nSee Metcalfes Law|https://en.wikipedia.org/wiki/Metcalfes_law. \n\nHowToTakeSmartNotes points out that this means you gain outsize value by starting early, just like saving for retirement.},{title:NonsenseLiterature,created:20200225235856310,es:confident,modified:20200226000123121,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Genre of literature which defies many of the normal conventions of plot and understandability, but nevertheless exhibits TruthInFiction.\n\nCommon examples include AliceInWonderland and most of MrEdwardLears work. \n\nMrGkChesterton wrote a lovely piece, ADefenseOfNonsense, about the genre. (He considers Lear the finest specimen.)},{title:NoOpinion,created:20211215035857546,creator:soren,es:likely,modified:20211215042735834,modifier:soren,tags:Idea Reasoning PhilosophyOfLife Psychology Public,type:text/vnd.tiddlywiki,text:You do not need to, and indeed should not, have an opinion on everything, or even everything relevant to yourself. This is because having an opinion you can be proud of holding requires a significant amount of research and contemplation: you need to understand all positions|OpinionsRequireCounterarguments on the topic, try to falsify your developing opinion|RefuteTheNegatives, and consider all of the consequences. (Even then, you can still be wrong|IntellectualHumility.) Thats a lot of work, and often its simply not worth it.\n\nExplicitly having //no// opinion is usually superior to having a poorly considered opinion for several reasons:\n\n* If you think you have an opinion, you will almost certainly be less guarded when making decisions that would be affected by it, or when having conversations related to the topic with other people. This could lead you to unconsciously strengthen your weak opinion and feel like you have much more evidence and certainty about it than you do. Its possible to avoid this if youre sufficiently careful and independent-minded|EpistemicStatuses, but its extra effort and always more risky.\n* Once you have an opinion, it becomes more difficult to change your mind; its cognitively easier, not to mention easier on your self-esteem, to form an opinion for the first time than to admit you were wrong|ChangeYourMind. So it makes sense to try to avoid forming any if your immediate choice will have to be a careless one.\n\nOf course, its often useful to have opinions which you feel only somewhat certain about. If you have enough evidence and have done enough thinking and conversing about something to believe that you //likely// have the right opinion, you will probably have a better MentalModel of the world if you incorporate that information into it. If your “likely” is close to 50%, though, or you havent had the time to do any significant amount of study on the topic, it makes sense to lean towards remaining neutral.\n\nYou need not actually believe something to argue on its behalf. You can simply accept|AcceptanceVersusBelief it, temporarily or permanently.},{title:NoPrizeForDocumentation,created:20200313123916875,es:likely,modified:20210811182327912,tags:Code Process Public Idea,type:text/vnd.tiddlywiki,text:Features are shiny and show up to project stakeholders, so its easy to write FeaturesWhileTheWorldBurns. If you do a good job on the features but leave the project with mountains of TechnicalDebt and no documentation at all for the next guy, you get accolades. If you dont write many features but perfect the documentation, do a bunch of refactoring, and generally leave everything in a perfect state, well now you dont look so good; these things fall into the MetricBlackHole. To put it another way, documentation is an UnthankableSystem.\n\nImprovementOfDailyWork is more important than features. If the debt, including the lack of documentation as a form of TimeDebt, cant be kept at a manageable level, the features will stop coming sooner or later. Documentation and neatness should thus be as highly valued as or more highly valued than features.\n\nPerhaps documentation and tech debt must somehow be made visible, like we work to MakeWorkVisible; or we simply need to disguise whats going on from management and value them within the team, and let our results speak for themselves! (See OutcomesOverActivities.)\n\nA form of CounterintuitiveEfficiency.\n\nCorrective measure / opposite state of affairs: a DocsFirstMethodology.},{title:NoRehearsalFallacy,created:20200127030408067,creator:soren,es:confident,modified:20220919212032426,modifier:soren,tags:Reasoning Music Public Idea,type:text/vnd.tiddlywiki,text:The no-rehearsal fallacy, a type of CognitiveBias, occurs when someone believes they dont need to rehearse a given piece because its really easy, and they would better spend time on the harder stuff. This seems great, but the almost inevitable result is that the “easy” piece comes off worst because no time was spent on it. If the piece is actually “easy”, you can do less work on it, but you still have to run through it to get it consistent|PowerOfKonsistency and make sure everyone feels confident on it! The expertise of the musicians is irrelevant.\n\nEssentially the same idea as AttentionEspeciallyToIncidentalDetails, but in a different domain.},{title:NorthfieldMinnesota,created:20200122031632167,creator:soren,gis-lat:44.4585440510662,gis-long:-93.16167340062319,gis-zoom:14,modified:20240109032418733,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Cute little town between OwatonnaMinnesota and the TwinCities. Home of StOlaf College, so I lived more or less in Northfield for four years excluding summers. Its also the home of cross-town rival CarletonCollege; also a fine school, but we dont talk about that one here. I wander up there sometimes to visit Olaf or shop downtown or go to some other kind of community events. Everyone loves Northfield, you cant not like it.\n\nDespite having theoretically lived in Northfield for four years, I know little more about it than an average tourist because I barely ever left campus. With no car and a 20-minute walk into town (in the cold for most of the school year), and all daily needs easily met on campus, I probably ended up in town about once a month.\n\nThere is something strange about the street layout of Northfield in that I can never seem to work out which way is north unless Im right downtown -- or, rather (and much more annoyingly), I //think// I know which way Im going but am actually wrong, and only notice after traveling a few blocks at a 90° angle to where Im supposed to be going. This is not a problem I normally have in cities! Maybe its something to do with the Cannon River cutting through diagonally? (I struggle with downtown Minneapolis|Minneapolis and St. Paul|StPaul sometimes for this reason, despite finding the rest of the cities easy to navigate, since theyre at a 45° angle to everything else.)},{title:NorthLoop,created:20231024210637204,creator:soren,modified:20231024210637898,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:NoRulesNoFreedom,created:20220427023829538,creator:soren,description:Accepting and obeying rules, even seemingly arbitrary and pointless rules, can paradoxically increase personal freedom.,es:likely,modified:20251007042017750,modifier:soren,tags:Religion Sociology Economics Idea Public Favorites Identity,type:text/vnd.tiddlywiki,text:In MyLillianAndSylvia, Sylvia dreams of her grandmother saying the title phrase and then connects it to the adage that “theres no such thing as a free lunch” -- because at the same time you give up freedom by adding rules, you gain certain other freedoms. The world is simply too big, the set of options too large, to get good results with no restrictions|GenerativeRestriction; indeed, not using any restrictions is itself a restriction|NotActingIsADecision, namely a restriction on how effectively you can think and make choices. By placing some of your choices in an InformationalJig, or a social jig, other choices become easy enough that you can hope to make good decisions.\n\nAll sets of rules are not equal in their ability to create freedom. In general, the most benefit likely comes from rules you didnt make up, but that you voluntarily decide to obey; established religions are great examples.\n\n* Rules you make up can be effective at times, but they have very little staying power because theyre yours; theyre self-evidently a tool, and its not just obviously possible but probably your //intent// that you can modify them whenever you like.\u003C\u003Cfnote \It seems possible that this is responsible for a good part of the confusion and aimlessness of personal identity in the modern Western world. We treat being able to change our minds anytime as a good, and to some extent it is (see ChangeYourMind), but in this environment its hard to become totally committed to anything, and without at least an intention of commitment deep meaning seems suspect. Aziz Ansaris metaphor in //Modern Romance// of young adults spending years wandering around in a hallway trying to figure out which door to go through is apropos.\>> Nor do they usually have much metaphorical significance -- some people are good at making their rules resonate metaphorically,\u003C\u003Cfnote \Flannery OConnor says that details in fiction “operate in depth” by having both a symbolic meaning and a literal one; this seems similar to how good rules operate. Probably the similarity to fictional worlds is not coincidental; arbitrary rules are not unlike fiction in many ways.\>> but even then, the fact that you made them yourself takes away some of their significance.\n* Rules you choose to obey become part of your identity, and youre unlikely to resent them. You might feel conflicted about them, finding them inconvenient; you might be confused by them, finding them inconsistent; and you might question whether theyre still right for you, considering breaking your commitment and leaving the system. But if you made a serious, voluntary, and perhaps public commitment to them, you will certainly take them //seriously// and appreciate what theyre doing for you. When rules are imposed upon you by a government or authority, its impossible for a thoughtful person to avoid at least some degree of cynicism and skepticism about them, and they will always feel instrumental; these rules are neither created nor obeyed for the sake of the rules themselves, but only because theyre useful at creating some kind of social order. Theyre also embedded in a power hierarchy with all the complications that entails.\n* Pointless or destructive rules imposed coercively by others, such as those advanced in bureaucratic organizations|AddAnotherRule or high-school writing classes|HighSchoolWritingHorror, have no benefits for the individual (although they may have benefits for society) and give rules a bad name in most peoples heads.\n\nExisting belief systems (religious, moral, philosophical, and the like) have usually been developed over decades, centuries, or millennia. This means they are almost certainly effective|FocusOnClassics, likely containing universal truths|MediaRating or, perhaps more accurately, aligning with human nature in some poorly understood way to produce good results of some kind. They have rich histories, symbologies, and collections of useful knowledge. By picking one, or several, you get to use some of the best wisdom of humanity for free.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> The first and last and only discovery that the victims of anarchy can make is: no rules, no freedom.\n> ---MrPhilipPullman, “Lets Write It in Red”, //Daemon Voices// (\u003C\u003Crt 10201>>)\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\n> But back in my steel world, trapped by the freedom / How I feel theres no way of knowing\n> ---“Falling Slowly”, Coope, Boyes & Simpson\u003C\u003Cfnote \The narrator is a sailor who has a one-night stand on shore and catches feelings. Arguably this is more like no rules, excessive freedom, no peace, but the thrust seems to be the same.\>>\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\nIn TheSabbathWorld2010, MsJudithShulevitz alludes to the Sabbath as an exercise in no-rules-no-freedom. The traditional observance, as developed in the Talmud, is full of seemingly pointless and capricious rules which one must waste ones time trying to understand and follow, and which people dont even agree on. These seem like they ought to be dispensible, but ultimately it seems they arent; the observance becomes empty|EmptyObservanceAndMagicalThinking if the rules are relaxed too much. I believe this, Ive experienced it (not with the Jewish Sabbath, but elsewhere), and yet it seems deeply mystifying because theres pretty plainly nothing about most of the rules as individual rules, e.g., not being able to move a light switch, that could possibly be essential to the purpose of the Sabbath.\u003C\u003Cfnote \Related to this: one can certainly decide that one wont make the particular rule of not being able to turn a light switch part of ones observance, with very little change in effectiveness; many less conservative Jews choose to follow some rules but not others. This is further evidence that its not about specific rules, but about a collection of loosely related factors that promote certain activities and thoughts above others.\>> I hope someday I can figure out why this is, but it also seems like something one probably does not figure out.\n\u003C/$m2.x>\n\n\u003C$m2.x number\4\>\nThe app Freedom|https://freedom.to/ aims to increase your freedom by preventing you from accessing certain websites, or the entire Internet, for periods of time. The purpose of this app and its title, and the deep irony of needing new technology to prevent ourselves from using our technology poorly, should speak for itself!\n\u003C/$m2.x>\n\n\u003C$m2.x number\5\>\n\n> I dont like that kind of freedom. Its too restrictive.\n\n---G.|PrivatePerson\n\n\u003C/$m2.x>},{title:NoSpeedLimit,created:20231121050553893,creator:soren,description:One can sometimes accomplish something in vastly less time than anyone expects; dont ignore evidence that this might be happening.,es:likely,modified:20240506121939444,modifier:soren,tags:Idea PhilosophyOfLife Creativity Productivity Systems Public,type:text/vnd.tiddlywiki,text:MrDerekSivers has a wonderful little post called Theres no speed limit|https://sive.rs/kimo, in which he tells a story of learning entire semesters of music theory in single days with the help of an excellent mentor.\n\nPerhaps because of the EightyTwentyPrinciple, this seems common: in a small number of situations, a tiny amount of work can yield an enormous amount of results. Methods for intentionally producing these moments may be elusive (see also AccidentsMakeTheWorldGoRound), but its tremendously important not to neglect developing them when they happen, and not close your mind to the possibility or think the results dont count.\n\n\n!! Examples\n\nMsGillianWelch and D.R.|PrivatePerson created the recordings that become three volumes of //Boots// in a weekend -- three long albums worth of original songs. They were stuck in a record contract for another sixty or so songs, and didnt want to stay with the company, so they sat down together in the living room with a notebook of partially finished songs, and one by one they finished up the song, played around with it for a little bit, turned on the tape recorder, and recorded it in a take or two. Then they sent the tapes to the company and they were done with the contract. They thought they were just being clever and moved on with their life, but when the recordings were unearthed a couple of decades later, they turned out to be shockingly good, good enough to be albums worth listening to after a little remastering!\n\nNetHack is an infamously difficult game to pick up, and most players have to run through hundreds of games before they win (like other RogueLikes, it features permanent death, so anytime you make a serious mistake you have to start over). One day, someone playing their very first game dropped into an IRC channel I was part of to ask for advice. They continued stopping by to ask for advice every so often, and we helped them get out of a few jams. Our advice was of course extremely valuable, and they got a little bit lucky too. But they //won their first game//!\n\n},{title:NoSql,created:20200521175620815,modified:20201204041547862,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:General term for database products/solutions that dont use a traditional relational model. Encompasses a wide range of different models.},{title:NoSuchThingAsCommonSense,created:20200123031154471,creator:soren,es:confident,modified:20210917010812301,modifier:soren,tags:Expression Public Idea,type:text/vnd.tiddlywiki,text:As the old saying goes, “there is nothing more uncommon than CommonSense.” Or as MrBenFranklin put it, “Wise men dont need advice; fools wont take it.” If you say its common sense, at least one other person will completely disagree with you.\n\n{{NoSuchThingAsCommonSense/p||PrivateChunk}}},{title:NotActingIsADecision,created:20231010023740706,creator:soren,description:You cant avoid a difficult decision by doing nothing; that //is// a decision.,es:confident,modified:20250925222242810,modifier:soren,tags:Idea PhilosophyOfLife Reasoning Public,type:text/vnd.tiddlywiki,text:Its often tempting to avoid a difficult dangerous task or choice by not taking any obvious action, because this seems safe. For instance, you can not tell your friend that youre unhappy|CantNotCommunicate about something, not apply for a job, not try something new|TryItAndSee, not tell someone you love them, not apply a label to yourself or someone else|NoLabelsPhilosophy, not change a process|RiskOfNotChanging, or not create rules for yourself|NoRulesNoFreedom.\n\nBut this is the wrong way to think about it. There is no such thing as not choosing -- not acting is itself a choice of course, as valid but also as complete and as potentially harmful as any other. Theres an argument to be made for making a safer choice until you have a chance to think more, but dont pretend it isnt a choice!},{title:NotecardSystem2013,bibliography:Zettelkasten,caption:The Notecard System: The Key For Remembering, Organizing And Using Everything You Read,created:20200814144450279,description:A Zettelkasten-ish system with a different organizational structure but many of the same ideas.,medium:article,modified:20210515040212026,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://thoughtcatalog.com/ryan-holiday/2013/12/the-notecard-system-the-key-for-remembering-organizing-and-using-everything-you-read/,year:2013,text:Describes a system which stores reading (and other) notes, not unlike ZettelKasten. The primary difference is that cards are organized into categories, and seem to have little organization inside there. There arent any identifiers, either, so I dont think you would have much luck trying to link items except by placing them next to each other temporarily.\n\nThe other big difference is that it focuses largely on recording quotations, while the ZK method largely discourages quotations. Cf. also RandomThoughts.\n\nArticle by MrRyanHoliday, who says he was taught the system by MrRobertGreene.},{title:Notes,caption:Raw notes from an ephemeral or non-print source such as a lecture.,color:#ff0000,created:20200512003031926,creator:soren,icon:$:/core/images/tag-button,modified:20210825161003319,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nNotes tiddlers dont have any special naming conventions or fields.},{title:NotesAgainstNoteTakingSystems2022,author:Sasha Chapin,caption:Notes Against Note-Taking Systems,completed:20220504,created:20220504192203407,creator:soren,medium:article,modified:20220505032251757,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://sashachapin.substack.com/p/notes-against-note-taking-systems?sr,year:2022,text:Article by MrSashaChapin on the dangers of overstructuring notes, or perhaps using notes at all for many things.\n\nMany of the points boiled down to concerns about InsufficientlyReflectiveWriting. However, there are several other good criticisms as well. A core insight is that notes are often taken for the sake of taking notes, to the exclusion of other things, and that doing so is boring. However, I believe its entirely possible to keep notes in a interesting and even playful manner, perhaps with a slight expansion of what qualifies as “note-taking”: see PlayfulKnowledgeManagement.},{title:NotesMustLink,created:20200226225523981,creator:soren,es:confident,modified:20210317141546888,modifier:soren,tags:Information Psychology PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:Something you read has no value unless you remember it. Even if you take notes in the book (quite recommended by many people), if those notes are not linked to other related notes you will never find them again, except by pure accident, or if you reread the entire book along with your marginalia. \Related notes\ are not the ones you take at the same time, theyre the ones that are conceptually similar. Sorting ideas by the time you had them is nonsensical in the long run (HowToTakeSmartNotes says this is like keeping a pair of pants with your bleach because you bought them on the same day).\n\nEven if we can FullTextSearch our notes, if we dont know //what to look for//, our chances of finding it are nil (or, theyre about the same as if we hadnt taken notes: the only way we find it is by stumbling upon it).\n\nWe are utterly convinced of this in the study of human memory and mnemonics. Ultimately, why should notes be different? \n\nAnother way of putting it: HowBasecampCommunicates principle 29 asserts that “the right communication in the wrong place might as well not exist at all.”\n\nRecognized by the ZettelKasten method, which focuses on connecting notes across disparate sources via the ConceptWeb (ContextScrambling is not only needed for effective linking, it has its own benefits as well).\n\nExplained in several disparaging ways by HowToTakeSmartNotes.\n\nThe general-purpose informational version is DataAsKnowledgeGraph.},{title:NotFromYourCheckingAccount,created:20200329140252861,es:confident,modified:20210509010307550,tags:Design Economics Systems Public Idea,type:text/vnd.tiddlywiki,text:Many companies in the BigTech and startup arena have moved to a model of paying for services that is largely \free\ (except perhaps for a premium tier you can get additional features from). By \free,\ they mean, \you dont see money going out of your checking account to our company.\\n\nOf course, businesses generally do not provide free services out of the goodness of their hearts; there has to be some kind of motivation. That could be one or more of the following, or something else:\n\n* Your loyalty: they suck you into their ecosystem with this service and you end up using another service by them that isnt free. (Mostly harmless and a perfectly fair business model, by itself.)\n* Your eyeballs: ads show up in the system, often targeted based on what you do on the platform and beyond. (One of the least nasty possibilities, though by no means harmless.)\n* Your data: the data youre working with on the platform is also used to train a machine-learning algorithm that can make them money in some other way, or sold to advertisers.\n* Your personal information: details on where youre clicking on the site, your gender, your sexual preferences, how often you swear into your computers microphone... (Ok, I dont think anyone does that, but the tracking can get even more invasive than that without having to listen to your audio stream!)\n\nSystems often rely on AddictiveDesign to get you to spend more time on the platform even when it doesnt benefit you.\n\nIn the end, you really //are// paying for the service. \Free\ looks nice, but if you cant identify what youre paying with, thats dangerous. Id rather pay actual money and have that be the end of the exchange than pay I-dont-exactly-know-what.},{title:NothingHuman,author:MrIvanVendrov,blogroll:Blogroll,caption:Nothing Human,created:20250905204700522,creator:soren,modified:20250905204714651,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://nothinghuman.substack.com/},{title:NothingToHide,created:20200204160941206,creator:soren,es:confident,modified:20211107183210193,modifier:soren,tags:Expression Risk DystopianVision Information TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:A terrible argument: “I dont need to worry about privacy because I have nothing to hide. Surveillance is OK.”\n\n# This is actually an //astounding// statement. Throughout your entire life you have never once done, said, or thought something youd prefer that at least one of the 7 billion other people in the world not know about?\n# Okay, but maybe you mean anything //important//. But almost everyone is going to have this too. You might not have anything relevant right now, but sometimes you surely will.\n# Nothing where theres a reasonable chance some malicious actor would come upon it, like on a computer or the Internet? That might have been reasonable in 1995, but now it isnt. Youve never sent an email or a text containing personal information? Browsed to a website that would tip someone off? Not to mention any of the more subliminal indicators that marketers could very well pick up on.\n# Or, you dont send any of this information to a place you dont trust? All I can say is, your trust is almost certainly very misplaced.\n\nBeyond this, even information you dont need or want to hide can become dangerous in aggregate. Sharing your location at a point in time is only a problem if you were committing a crime, or you were at a sex shop, or someones stalking you, or youre halfway around the world and someones trying to break into your house. Sharing your location at all times is bound to offer some insights youd rather not be shared with the world. Same for someone who can see all your browsing history, all your Google searches, all your Amazon purchases, all your texts (even if we exclude the personal ones)...with all of these things put together, you can pretty much piece together someones entire life!\n\nYou might also not realize you ought to be hiding something. For instance, you might let the police search your house only to discover you own or have evidence of doing something you didnt even know violated the law. Life is too complicated to be sure. (Though there should be fewer confusing laws|LargeGovernmentVsVoluminousLaws, even if the governments scope might do well being larger.)\n\nMrEdwardSnowden also famously pointed out that even if you somehow do have nothing to hide, you should still care: not caring about privacy because you have nothing to hide is like not caring about FreeSpeech because you have nothing to say. Whether you, personally, need certain free-speech rights does not determine whether you would rather live in a society in which free-speech rights are upheld.},{title:NotMeIsm,created:20230629023251342,creator:soren,description:Assuming that things that apply to most people do not apply to you without any evidence is lazy and often holds us back.,es:confident,microlink:notme,modified:20240611045319005,modifier:soren,tags:Idea SorenConcept Identity LifeDirection Reasoning Public,type:text/vnd.tiddlywiki,text:Not-me-ism is a cognitive habit in which one assumes without evidence that a fact, statistic, heuristic, or piece of advice that applies to most people doesnt apply to oneself.\n\nOf course, you are not average|TyrannyOfAverages; in plenty of places, youll be perfectly correct to say that things broadly applicable to the population are not applicable to you (see also RelativeAdvice). But oftentimes people refuse the general statement because they dont //like// it, rather than because they actually have a reason to believe its not true for them: “I cant go to the gym! It wouldnt work for me.” Maybe it suggests something unpleasant is more likely to happen to them than they want to think, or following the advice feels hard.\n\nSo the correct way to handle this situation is to force yourself to prove that something isnt applicable to you, or wont work for you, before dismissing it. A good response on the heuristics/advice side is, for instance, “I tried it and it didnt help”\u003C\u003Cfnote \You need to really try it, too; commit to proving that it wont work. If it requires you to gain a skill, and it wont take all that long to do that, go for it. Dont pick up a guitar, try to play it for five minutes, and decide that youre no good at the guitar.\>> -- so if you havent tried it, and doing so isnt expensive or potentially harmful, maybe do that|TryItAndSee! (Failure to do so is refused exploration|Underexploration.) “That is in conflict with my values,” or “Thats insanely expensive and there are easier things I can try first,” or “Youre saying I should eat lots of dairy to lose weight, but Im lactose intolerant” are examples of other ActualDealbreakers.\n\nAnother way to put it is, instead of looking for reasons something //wont// work for you, if you like the result claimed by some advice and you dont see an obviously better solution, see if you //can// make it work for you before you give up on it.\n\nSimilarly, with facts or statistics: if you dont have any domain knowledge or a good argument for how much you should adjust your probabilities, just stick with the general answer. Though (RelativeAdvice!) its also possible to mistrust yourself|https://www.benkuhn.net/overconfidence/ so much that you throw away good information that you have.\n\n!! References\n\n> My biggest question to the reader above would be this: Why are you determined to make these ideas not work for you? Why are you searching for reasons why these ideas won’t succeed instead of figuring out a way to make something good happen?\n> The biggest difference between successful people and unsuccessful ones (in health, in business, and in life) is that successful people are determined to make the situation work for them rather than playing the role of the victim and searching for reasons why a situation won’t work.\n> ---MrJamesClear, “Believe in Yourself”|https://jamesclear.com/nothing-will-work-if-you-dont-believe-in-it\n\n},{title:NovumOrganum,author:Bacon,bibliography:LifetimeReading,caption:Novum Organum,created:20210703170128000,genre:Science,medium:book,modified:20210705214035596,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:NowhereToHideTheMistakes,created:20200923232752272,description:Doing simple things well can be harder than doing complex things well, because its harder to hide the mistakes in simple things.,es:confident,modified:20210623022148860,tags:Music PersonalMythology Systems Public Idea,type:text/vnd.tiddlywiki,text:It is often thought that simple things are easier to do well than hard ones. This may be true in a literal sense. However, its much harder to make simple things //look// well-done, and that is generally all that matters|AppearancesOverReality.\n\nIn complex work, a few missed notes, unfinished details, or outright wrong choices will go unnoticed. In simple work, there is nowhere to hide the mistakes; they are glaringly obvious. In that sense, when you choose to do something simple, you must meet the standard so much more rigorously that even if that standard is somewhat lower, the task can becomes harder than a complex one would be.\n\nRelated: One must pay AttentionEspeciallyToIncidentalDetails, or the things that are “too small to matter” will ruin the impression.\n\n!! References\n\nMrAntonArmstrong started TheStOlafChoir every year with the plainchant piece TheeWeAdore -- all unison -- and explained essentially that this was the reason. One year when I was singing, he declared after one of the runs, “You sing unison, youre buck naked to the world. And that looked real good this time.” (\u003C\u003Crt 7009>>)},{title:npm,created:20200521194329551,modified:20200521194358264,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular package manager for JavaScript. The most-used manager in the world, all told, I understand.\n\nIn 2020, acquired by TheGitHub (so, really, by M.|PrivatePerson).},{title:NuclearFamilyWasAMistake202003,caption:The Nuclear Family was a Mistake,created:20200316223233000,creator:soren,medium:article,modified:20220118022249939,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:Article from TheAtlantic about how the “nuclear family” was a post-Cold-War ideal that worked pretty decent for the time due to specifics of that particular time (open neighborhoods, most women not working outside the home, general prosperity, and others) but has ultimately impoverished our social life in an era where none of those things apply anymore. The author calls for both better extended-family structures and greater exploration of what he calls the “forged family” (communities of various types not related by blood).\n\n(Duplicate:)\n\nTheAtlantic article about social structure in the UnitedStates and how the nuclear family is, like so much else, a ColdWar historical accident that we continue to cling to, even in the face of the reality that it no longer works effectively outside of its historical context.\n},{title:NuGet,created:20200515032751729,modified:20200515032812540,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Package manager for VisualBasic and other M.|PrivatePerson programming languages.},{title:NuShell,created:20200225230044324,modified:20200226210954238,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A self-described \modern shell\ focusing on structured data, using some of the best aspects of PowerShell and many other shells. Written in RustLanguage (you can tell its some peoples fun project, but its looking fairly slick).\n\nStill in a prerelease state right now, but Im watching it on TheGitHub!\n\nhttps://github.com/nushell/nushell},{title:Oakland,created:20240402013538184,creator:soren,modified:20240402013539266,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:OaklandMuseumOfCalifornia,created:20240402013544133,creator:soren,modified:20240402013545330,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ObjectOrientedProgramming,created:20200316150324193,creator:soren,description:Programs consist of a series of interacting objects containing data and operations.,es:likely,modified:20211221031149278,modifier:soren,tags:ProgrammingParadigm Code Public Idea,type:text/vnd.tiddlywiki,text:ProgrammingParadigm in which data structures and “methods” (functions with a fancier name) are bundled together and interact with each other. Common in Business and the most popular modern paradigm; the ConventionalWisdom holds its the best way to do things.\n\nConventional wisdom is dangerous though. OOP has some fairly severe deficiencies:\n\n* It was supposed to solve all our programming problems. It hasnt. The disconnect between theory and reality has been pretty impressive.\n* OOP typically involves massive amounts of state, the reduction of which is a major point of FunctionalProgramming.\n* While anyone can write crappy code in any programming paradigm, it seems to be particularly easy for OOP systems to become a mess of interacting parts that are difficult to tease apart, which is ironic since OOP was originally envisioned as a way to //reduce// coupling.\n* Most importantly, a series of interacting objects just isnt a particularly useful mental model for a wide variety of problems. I use objects in OOP languages, and I like objects; for certain things like user interfaces, its hard to imagine a better model, and for many other things its a useful tool. But as MrJacobGabrielson argues, “Advocating Object-Oriented Programming is like advocating Pants-Oriented Clothing” (\u003C\u003Crt 9072>>). Forcing the model down peoples throats even when it makes no sense, as in Java and to a lesser extent DotNet, is a bad way to design a ProgrammingLanguage.\n\nDont forget, “we dont do oop here|http://thedailywtf.com/articles/The-Winds-of-Recession,-A-Doomed-Interivew,-and-Oops!.”},{title:ObscurityOfEnglishNames,created:20200201052127290,description:English is unusual in that most of its proper names have obscure origins in other languages, masking their meaning.,es:confident,modified:20210623022226667,tags:Language Public Idea,type:text/vnd.tiddlywiki,text:English is a curious language in the sense that practically every word is borrowed liberally from some other language, obscuring its origins for those who arent versed in that language. (Compare to German, which everyone laughs at for being so literal in its compound words -- but arguably English is just as literal, its just that its literalism takes place in other languages, which hides that fact. English may use somewhat more prepositional prefixes to verbs which result in more metaphorical relationships, but then German does plenty of those too.)\n\nParticularly interesting to me is the obscurity of personal names. In the source languages, these names are just ordinary //words//, normally of positive qualities or things. But as English speakers we have to go look up the history and meaning of the names! And as an English speaker this makes names a different sort of class of word thats beautiful in itself, with a certain sound and NamePersonalityRelationship associated with it. Which I ultimately like, but its odd how different it must be to be in a culture where most names that are used are plain old words.\n\nI list some unusual and interesting names in InterestingPersonalNames.},{title:ObservationBias,created:20210715023502403,creator:soren,description:When you are more likely to see a particular subset of events for some reason, and arent aware of this, you can easily draw the wrong conclusions.,es:confident,modified:20240306040232499,modifier:soren,tags:Science Math Reasoning Idea Public,type:text/vnd.tiddlywiki,text:An insidious type of bias that can afflict almost any attempt at reasoning, particularly with statistics|FallibilityOfStatistics. It is both omnipresent and difficult to detect. Observation bias, at its core, occurs when you, for whatever reason, are more likely to see a certain subset of cases of something than others, and thus you misestimate or miscalculate the subset as being more common or probable than it is.\n\nObservation bias is a general type of bias. Publication bias, survivorship bias, and sampling bias can all be considered types of observation bias, for instance.\n\nSome interesting examples that dont fall into these likely familiar categories:\n\n* If you drive|Driving at an average speed on the highway, you might conclude that most people drive either faster or slower than you.\u003C\u003Cfnote \And as George Carlin has observed, anyone driving slower than you is a moron and anyone driving faster than you is a maniac, so youre the only sane driver.\>> This is because if youre traveling at the same speed or almost the same speed as someone else, you will never pass them, and youll only see them if you originally got on the highway within line-of-sight of them. You see almost exclusively the people going faster or slower than you, and youre even more likely to see the ones going //very// fast or //very// slow since the distance closes faster, making such drivers look much more common than they are.\n* Wondering why the bus seems late more often than the on-time performance statistics would suggest? Suppose you arrive at the bus stop at a more or less random time, and the bus is supposed to come every 10 minutes, but occasionally is 5 minutes late. When the bus is late, the period in which you can arrive and observe the bus being 5 minutes late is 15 minutes, or 50% wider than the normal timetable -- which means that if you arrive at a random time, you will end up riding a bus that arrives late 50% more often than you would naïvely expect from the rate of late buses,\u003C\u003Cfnote \\\\nN.B.: You dont lose proportionally quite as much time as you might expect, though, since if you arrive in the 5 minutes between when the bus should have arrived according to the timetable and when it arrives late, you actually end up catching the bus //sooner// than you would have if the bus had been on time, thus paradoxically departing sooner because the bus was late. Theres no free lunch here -- on average you still end up having to wait longer when the bus is late, since the 10-minute period in which you lose time is twice as long as the 5-minute period in which you gain it -- but because of this effect, the bus may feel somewhat less often late than you would notice if you carefully noted the arrival time of the bus in a notebook.\n\\\>> since youre statistically more likely to show up during the wider window. \u003C\u003Cfnote \\\\nIts worth pointing out when this is //not// true as well. If you always catch a specific bus (e.g., the bus that arrives at your workplace at 4:30 pm), then you wont see this bias; the 4:30 bus will either be on time or late, and youll get a correct reading of whether it was on time or late simply by seeing at what time you got on the bus. Similarly, if you get on a bus at the beginning of the route and note whether it arrived at its destination on time, you wont see any bias, since you are on a specific bus which left on time. The bias only crops up when you are getting on //any// bus, arriving at the stop at an arbitrary time, since this is when the window of time you wait for a bus becomes important.\n\\\>>\n* Some types of events are more newsworthy than others, such as plane crashes, acts of war, adverse reactions to vaccines, famous people saying something absurdly stupid, or people bucking a widely held consensus. Because the news is the only way we are generally exposed to events outside our daily life unless we go looking for the full data for some reason, and nobody is ever going to report on all the planes that //didnt// crash,\u003C\u003Cfnote \\\\nCome to think of it, that would be a funny parody Twitter feed.\n\\\>> most of us believe the incidence of such events is significantly higher than it is. This may manifest in a feeling that the world is getting more dangerous or polarized, whether that is true or not (the truth fluctuates much more than peoples perception).\n* While its debatable whether this is strictly observation bias, Ive recently gotten interested in what biases are introduced by //the kinds of people who try to observe certain things//. For instance, scientists are presumably, as a group, significantly different from the general population in many aspects (e.g., they are likely more curious, of above average intelligence, and more likely to have certain personality types). What impact does this have on what kinds of patterns they are likely to spot, and what kinds of things they are likely to consider studying in the first place? Are we missing important things because only the kind of people who become scientists are doing the research? (More thoughts on this in NeedForCognition.)\n** Im not sure if theres anything to be done about this bias, though. Even if we somehow forced non-scientists to do science to “fix” it, it would seem that people who arent inclined to be scientists simply wouldnt be that good at science.\n\n(Thanks to an excellent article I read //somewhere// for the first two examples. I cannot for the life of me find it again, and not for a lack of trying.)},{title:OconnorCompleteStories,author:Flannery O’Connor,bibliography:LifetimeReading,caption:Complete Stories,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035605,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Odyssey,caption:The Odyssey,created:20200401010926352,format:paperback,isbn:9780140268867,medium:book,modified:20210607011426366,owned:yes,rating:classic,readstatus:read,tags:Source FictionTheory Public,type:text/vnd.tiddlywiki,universe:GreekMythology,year:,text:Original: tale attributed to MrHomer (whoever the heck that was). The ancient Greek version of an American RoadTrip story.},{title:OfficeItems,created:20210825230527363,creator:soren,description:Suggestions for convenient and non-obvious things to keep in ones office.,es:confident,modified:20220910011804720,modifier:soren,tags:EmergencyPlanning Employment Process Public Idea,type:text/vnd.tiddlywiki,text:This is a list of convenient things to keep in ones office. Its compiled from the items I accumulated at my desk at TheFederatedInsurance over the four years I worked there; I decided to put it together after I quit and worked from home for a while, so I wouldnt have to start over and forget a bunch of things next time I worked in an office.\n\nThe list does not include and is not intended to include obvious things that any ordinary office already has, like office supplies or computer hardware. It also only includes things //I// find useful; Im sure there are many other things which are useful for other people.\n\n!! Personal care\n\n* Dental floss (in case you get something stuck in your teeth).\n* Fingernail clippers (I dont advocate clipping your nails at your desk, but if you break a nail or develop hangnails in the middle of the day, these come in very handy!)\n* Over-the-counter painkillers.\n* Cough drops.\n* Band-aids, so you dont have to run around the office looking for a first-aid kit for a minor cut.\n\n!! Misc\n\n* Plastic cutlery, in case you end up at your desk with a meal or a snack someone brought in but nothing to eat it with. You can grab an extra set or two at your local take-out restaurant or cafeteria when youre there and bring them back.\n* Paper napkins, similarly. I gather up extra napkins I get from drive-thrus since they usually give you five times the number you normally need.\n* Cheap paring knife, so you can cut fruit, etc., at the desk easily.\n* Change, if there are any vending machines around or you might have to pay a coworker back for a meal.\n* Something to fidget with when youre waiting for the computer.\n\n!! Office supplies you might not get\n\n* Scissors (for some reason Fed didnt give me scissors, theyre useful)\n* Map pins, if you have a cubicle and like pasting clippings on the wall; these look better when you have to put in a lot of pins and are dirt cheap.\n* Fountain pen.\n* Notebook or pad (for brainstorming, diagramming, and paper notes).\n* Index cards (for quick notes).\n* Desk calculator.\n* A good set of headphones.\n* Pomodoro timer or hourglass.\n\n\n!! Emergencies\n\n* Full set of extra clothes, ideally items that are in good condition but which you dont particularly like and wont miss: dress shirt, undershirt, pants, underwear, socks. A tie is a handy addition if you occasionally have formal meetings you might forget about.\n* Shoes you can comfortably walk in if you have to leave the office unexpectedly.\n* A small amount of cash, maybe $50--$100 (large enough to be useful, small enough you wont be overly mad if someone steals it). You can tuck items like this in the back of a pocket folder or book somewhere, or into the file cabinet in a file folder labeled something unrelated but that youll remember, e.g., “TPS Reports.”\n* If nobody else has a key to your vehicle or home, a spare key for it. If you lock yourself out, you can take public transit or get a ride over to work and grab the key.\n* Backup copy of home computer on a small external hard drive. (I have two identical drives and swap them weekly|https://controlaltbackspace.org/filesystem/starting-off-with-a-backup/#rges-5-6.)},{title:OfficeUnnecessary,created:20200430152508470,es:likely,modified:20210703141617263,tags:PandemicMood Employment Public Idea,type:text/vnd.tiddlywiki,text:A common realization across the country during the pandemic is that most office workers jobs really do not require them to be in the office all the time. Nice offices can improve productivity somewhat by helping people focus and work together, as well as offer some social interaction, so theyre not pointless. But many offices really kind of suck to be in (soulless cubicle farms, bad coworkers, etc.), and other times the benefits just arent worth the trouble of getting to the office. Further, offices are better for doing certain kinds of work at certain times, and homes are better for others, so a flexible model would probably be the best of all.\n\nOf course, employers have spent the last years shouting at us that we have to be in the office to be productive, or that our company culture means we have to be physically co-located, or whatever bullshit is fashionable. The pandemic has proven that false, in a way that employers are going to struggle to ignore in the coming years. In fact, most folks have been doing pretty well even when they are also trying to wrangle kids and fears and everything else, in a home office that wasnt designed as a remote working place!\n\nIm sure plenty of them will try -- the word on the street is that TheFederatedInsurance is not planning to make any changes to their own policy at this time, even though many of us have been //more// productive at home and were getting weekly updates thanking us for doing such a good job -- but its going to be harder and harder to convince employees of that.\n\nI think my own personal favorite method would be to be in the office Tuesday, Wednesday, and Thursday and concentrate meetings and so on there, then have 1-2 days a week at home for uninterrupted DeepWork. I havent tried it though, so I cant say for sure|HaveToExperienceItToUnderstand.\n\nRemoteWorkVersusOutsourcing points out that there are right ways and wrong ways to do remote work while maintaining team cohesion.\n\nPointed out in OnTheFarSideOfSilence202004, but also throughout America right now.},{title:OhShitButton,created:20200325223658190,creator:soren,es:confident,modified:20220502164220193,modifier:soren,tags:SorenConcept Design Public Idea,type:text/vnd.tiddlywiki,text:A user-interface design technique in which the system attempts to do what you mean|DoWhatIMean and not bother you with confirmations, but clearly explains what it did and presents a big “undo” button which you can click if you made a mistake. Gmail pioneered this technique in popular computing, presenting a banner with an //Undo// link after archiving or deleting an email, and later after sending one as well -- though of course the “Undo” menu option on most desktop applications does much the same thing in a less obvious manner.\n\nConfirmation dialogs are sometimes unavoidable but are far less helpful for common operations because users quickly get used to clicking through them, e.g., in the HawaiiMissileAlert incident.},{title:OkAsAnOption,created:20250311175707342,creator:soren,description:Objectively identical experiences can feel great when you chose to have them and awful when you were forced into them.,es:confident,modified:20250727121424081,modifier:soren,tags:Idea PhilosophyOfLife Psychology Public,type:text/vnd.tiddlywiki,text:Having something be an option that you choose, rather than something you are pushed into by circumstance, can often completely change its subjective feeling. \n\nIn Slack, I mentioned an incident where H.W.|PrivatePerson walked home from a Madonna concert in Central Minneapolis to her home in SaintLouisPark because it ran so late the bus route she needed had stopped running for the night.\u003C\u003Cfnote \Actually the trip would better be described as hitchhiking, because someone she trusted stopped and offered her a ride midway through, but the point stands.\>> \u003C\u003Cfnote \Also, only in the US would a heavily trafficked bus route from downtown to the periphery not run later into the night when there is a stadium-filling event downtown on a weekend!\>> In the event, she //had// to do this, because her other practical option, taking an Uber in the midst of extreme surge pricing, currently cost more than she had in her bank account.\u003C\u003Cfnote \She could have also called a friend -- maybe that would have been the ideal solution by most metrics -- but evidently wasnt in the mood to use the social capital, and its not hard to understand not wanting to wake someone you care about up at 1am because you had a brain fart and didnt plan ahead.\>> That made it a pretty unpleasant experience.\n\nIf she had had $10,000 in her bank account, but decided to walk 6 miles home from a concert because it was $250 cheaper and was a nice night, it would likely have felt slightly crazy but empowering. (Ive done trips like this before for similar reasons and enjoyed them.) But if you //have// to walk 6 miles home from a concert, its a drag and you feel awful.\n\nIve noticed the same effect with doing things alone that are often done with others -- if I go sightseeing, or have dinner at a nice restaurant, or go see a movie, or whatever, alone, and I could have invited someone else but decided I felt like doing it by myself, its refreshing|IntroversionAxis and pleasant. If I do it alone only because I dont know anyone whod be available and interested in joining me, its at best acceptable. (I always think it is better to do something I want to do alone than to not do it at all, provided the thing done was in fact the PrimaryPurpose and not the socialization, so I dont begrudge the situation; but you cant avoid the conclusion that it feels different, and probably even plainly //worse//.)\n\n\n!! References\n\nA popular inspirational meme is the frame distinction between “having to” and “getting to” do something, usually presented as something typically considered unpleasant. If you can think you “get to” do it, it doesnt feel so bad. E.g., I get to go get a root canal, how awesome that I have access to great dental care and get to have my teeth repaired! On some level this sounds absurd, but I think it sometimes works, or at least helps you stay philosophical about it.},{title:OkCupid,created:20221218030450791,creator:soren,modified:20221218030452830,modifier:soren,tags:Software Idea Public,type:text/vnd.tiddlywiki},{title:OklahomaCity,created:20230405170105388,creator:soren,modified:20230405170107267,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:OldManAndTheSea1952,author:Hemingway,bibliography:LifetimeReading,caption:The Old Man and the Sea (+),created:20210703170128000,genre:Literature,medium:book,modified:20210705214035620,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1952},{title:OleChoirBenediction,created:20200226004551413,description:A transitional post-concert ritual making up part of the life of the St. Olaf Choir.,es:personal,modified:20210611035433106,tags:Music PersonalMythology Public Idea,type:text/vnd.tiddlywiki,text:The most beautiful, if self-centered, part of TheStOlafChoir, in my humble opinion, and as such a deeply held part of my PersonalMythology nowadays.\n\nAfter each concert, the choir finds a quiet place (arranged in advance) and proceeds there in silence (saying “thank you” to an audience member who addresses you is acceptable). Then the first verse of “Praise to the Lord” by MrFMeliusChristiansen and the Doxology are sung //a capella// in four-part harmony with the official Perfect Pitch Designee of the year leading off, the first by the women, the second by the men, all joining for an \Amen\ at the end of each. Finally, everyone gives each other hugs and congratulates each other on the concert.\n\nThis ritual, or something like it, is arguably a necessary liminal|Liminality moment. Concerts with OC are an extended flow state and a means of communication with divinity|MyPsychedelicAdjacentExperiences, and coming back into the normal world without some kind of planned transition would be jarring.\n\nThe harmony and rhythm is non-standard and part of an OralTradition. I found it irritating at first that nobody had ever //bothered// to notate the damn thing and put it in the handbook, but by the time I left the choir I found it beautiful and understood why nobody had. It makes it more mythological and ritualistic to just stand there and figure it out the first few times you sing it, and then surely have the parts mutate slowly over time. It makes it a living thing instead of a Thing That Somebody Wrote and now you sing for all eternity. Which can be kind of cool too, but it doesnt fit so well emotionally.\n\nI found Benediction (as it is officially called, as much as something communicated outside of the choir only by admiring choir members in the pages of the program under the heading “favorite moment with the St. Olaf Choir,” including myself so I cant make fun too much, can be) a little bit elitist when I initially heard of it prior to being a part of the group. Its funny that your opinion can change so quickly on experience; yet another argument for HaveToExperienceItToUnderstand, as if more were necessary.\n\nListening to that arrangement of “Praise to the Lord” can still make me cry years later.},{title:OlympicNationalPark,created:20250626182418991,creator:soren,modified:20250626182421140,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:OnCallEngineer,created:20200428190627156,modified:20200817024711001,tags:Process ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:DevOps practice of assigning a person to manage support and simple issues that arise. This provides several benefits:\n\n* It helps protect other team members attention (just like the BugFireLane).\n* It ensures that everyone on the team has a chance to experience the successes and pains of the application, thus giving everyone motivation to make the application supportable.\n\nSource: DevOpsInTheRealWorld.\n\nThe VisualStudioCode team does this|VsCode20200519, assigning someone each week to be the “inbox tracker” (TheGitHub issues) and someone to be the “Twitter|TheTwitter tracker.”\n\nSee also BugFireLane.},{title:OnceUponATimeInTheNorth,caption:Once Upon a Time in the North,created:20200322041219592,creator:soren,format:hardcover,isbn:9780375845109,medium:book,modified:20210607011437586,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2008,text:Western novella by MrPhilipPullman that takes place in the North (as the title suggests) in which MrLeeScoresby is the hero. MrIorekByrnison also features significantly, as a kind of sidekick.\n\nPretty disconnected from the rest of the stories in the universe except for providing background on Scoresby, but its also very enjoyable.},{title:OneCarefulThingAtATime,created:20240319114108488,creator:soren,description:,es:confident,modified:20240319114509348,modifier:soren,tags:Idea Productivity Public,type:text/vnd.tiddlywiki,text:Somewhere (Ill find it eventually), MrDavidCain discusses a mood you can enter where you do exactly the right thing|Autofocus, then you move on to the next thing, and so on, and says that on some rare occasions, hes managed to preserve this for days or even weeks at a time. If you find something else you want or need to do, fine, you put it on a list and continue what youre working on.\n\nIts sort of like flow|FlowState, but on a higher level; its at least as much about how you handle your task management and plan your days as about how you do the tasks themselves.\n\nMy main productivity goal is finding a way to reliably spend large blocks of time in this mode.\n\nRelated: MindLikeWater, DeepWork, FlowState.},{title:OneDrive,created:20200602142558829,modified:20200602142617950,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Microsofts user-facing cloud storage tool, integrated with Office and the like.},{title:OneHundredYearsOfSolitude1967,author:Gabriel García Márquez,bibliography:LifetimeReading,caption:One Hundred Years of Solitude,completed:202110141200,created:20210703170128000,creator:soren,genre:Literature,medium:book,modified:20211105152614516,modifier:soren,priority:1,rating:classic,readstatus:read,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,universe:OneHundredYearsOfSolitude1967,year:1967,text:MultigenerationalNovel by MrGabrielGarciaMarquez telling the story of the rise and fall of a small town, Macondo.\n\nThis has got to be an extremely divisive book. It is thoroughly weird even for MagicalRealism. A lot happens (about every three pages someone gets murdered, there is an absurd miracle, or someone has scandalous sex), yet there doesnt seem to be all that much of a continuous plot; aside from the same family and town being involved, there isnt too much connection between the events, nor is there an obvious overarching point|SoWhat (at least as far as I can tell). There isnt really a protagonist, its more like Fate or Time is the protagonist.\n\nAlso, members of the family have only about 4 names, mixed together in different permutations and numbers to cover some 20 people, which makes things extremely confusing. I find the Russians easier to follow than these.\n\nI sound like I didnt like it, but I actually did. Or, more accurately, for about the first 125 pages it was a total slog and I didnt think I would be able to finish it, but I pressed on anyway, and suddenly I started to like it for some mysterious reason and enjoyed the remaining 275 pages. I still dont know why, and Im still going to rate it //classic// because Im not sure I can justify many insights about human nature coming out of this.\n\nP.|PrivatePerson says he was unable to finish this one, but he did like LoveInTheTimeOfCholera1985, which is also on my list, so maybe I have a better one to look forward to.},{title:OneNote,created:20200425165953122,creator:soren,es:confident,modified:20211110160820777,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons note-taking tool, terribly neglected in recent years; I dont think its gotten a real feature update since they started it sometime around 2008! Still available in 2020 though, even though theyve announced and then canceled plans to kill it several times -- which is odd since they dont really have a successor except a much crappier web-based version.\n\nOverall, its a pretty good tool, striking a good balance between features and complexity, but it isnt particularly conducive to EvergreenNotes and feels a bit old. A lot of people at TheFederatedInsurance use and like it.},{title:OnenoteDocumentRecovery,created:20200622210154928,creator:soren,es:likely,modified:20211122174307104,modifier:soren,tags:TechBook Public Idea,type:text/vnd.tiddlywiki,text:!! Problem\n\nThe computer crashed while I was editing a document attached to OneNote. After bringing the system back up again, I opened MicrosoftWord, recovered the document, and saved it...but after saving it, the changes are not reflected in OneNote, and the document is not accessible from any recent list to reopen it!\n\n!! Solution\n\nThe document is, fortunately, not deleted in most circumstances...its just sitting in a temp folder where you cant find it. To find it:\n\n# Open OneNote and launch a different document (even opening the same one seems to be OK, but I wouldnt take any chances of overwriting it).\n# Open the file menu and note the path of the open document (if its not Word, you might have to experiment to figure out how to get the path of the open document). It will be something like `C:\\Users\\Username\\AppData\\Local\\Temp\\1\\OneNote\\16.0\\NT\\1\\file.docx`.\n# Browse to the location in Windows Explorer, then move up one level. You should find one or more numbers lower than the one used right before the filename (here, `1`). Your document will be in one of these folders.\n# Copy it out, delete the original document from OneNote, and reattach the new document.},{title:OneTouchToInboxZero201512,caption:One Touch to Inbox Zero,created:20200427021616487,medium:article,modified:20200808144447903,tags:Source Public,type:text/vnd.tiddlywiki,url:https://fortelabs.co/blog/one-touch-to-inbox-zero/,year:2015,text:Article from ForteLabs about not just the idea of InboxZero but about just generally making Email work better for you.\n\nSpecific tips:\n\n* Reduce your inflows as much as possible by unsubscribing from crap. (Highly amusing: an ad suggesting that I subscribe to the authors newsletter appeared directly above this bullet point when I was reading it!)\n* Use only one inbox, but process it as little as possible (the author averages once every 1.97 days, using quick \emergency scans\ in between to catch anything that really cant wait).\n* Dont use email as a to-do list, an agenda, a source of reference, or a reading list.\n** So, clear everything out when you process it, the very first time around.\n** Ideally, use tools for these things that let you direct-forward emails into them.\n\n{{!!url}}},{title:OnlineCommunityLessons,created:20200217164337925,creator:soren,es:likely,modified:20210516230454038,modifier:soren,tags:Information InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:According to AGroupIsItsOwnWorstEnemy200304, you have to accept three things when building an online community:\n\n# Its impossible to separate technical and social issues -- you cant discuss them separately or separate who deals with them.\n# Members and users are not the same. The core group will be a thing.\n# The core group needs outsize power, as mentioned earlier, or the place falls apart.\n\nAnd you should design for four things:\n\n# Handles/identity the user can invest in. Reputation (in a general, fluid sense, not in the sense of “reputation points,” though those are not necessarily bad) is just as important in online circles as in RL.\n# Good work with the community needs to be recognized in some fashion.\n# There needs to be some barrier to participation (e.g., The Wells subscription fee, invites-only, shutting off new user registration when media attention arrives...be creative!) Ease of use is //not// the goal, and the core group needs to be able to defend itself.\n# Be careful about scale. Segment into smaller groups (e.g., LiveJournal groups, which are semi-overlapping but have only an average of 12 members). Hundreds of thousands of people cant be social. Many systems that dont have specific ways to manage traffic (e.g., IRC, mailing lists) are self-moderating because if the SignalToNoiseRatio gets too low, the less interested people stop participating -- much like vehicular traffic!\n\nSeventeen years later, we appear to have learned approximately zero of these lessons, except to some extent the first two parts of the design section. When a community does succeed in these principles, it is by accident.},{title:OnlyChildAttitude,created:20210512114103232,creator:soren,es:personal,modified:20250209010411388,modifier:soren,tags:Identity InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:{{OnlyChildAttitude/p||PrivateChunk}}\n\nPeople often ask me what its like to be an only child. And I think my answer is actually changing. When I was a kid, I barely ever even thought about it. Im enough of an introvert|IntroversionAxis I was barely ever lonely,\u003C\u003Cfnote \I think I was even more introverted as a kid. Or at least, Ive come to like people so much as Ive aged that I //behave// much less introverted. Partly because, as Scott Alexander said, “I used to think I disliked social interaction. I have since realized -- and it blew my mind -- that I only disliked social interaction with people who arent awesome.”\>> and I usually had a couple of neighborhood friends to fill in the gaps. Plus one of my parents was almost always around; I was never in daycare on a regular basis. We were quite close and that relationship continues to this day. I occasionally daydreamed about different family situations, as I expect does everyone, but without any particular desires attached.\n\nThe attention can be nice! As D.H.|PrivatePerson said at one point:\n\n> Im an only child, so I get what I want. (\u003C\u003Crt 10789>>)\n\n(Probably worked out even better for me than most, because we rarely got into conflicts due to my LateRebellion, though that may be as much of a cause as an effect.)\n\nThis said, now that Im in my mid-twenties, Im starting to miss my hypothetical sibling(s) once in a while. There are some things that are just easier to talk about with someone whos your own age, and who you know well but isnt your parents. When the world shrank during the pandemic|PandemicMood, just having an extra family member around would have been mighty nice. Its also a little weird to think theres a whole type of human relationship I have never had and never can have. And going forward, presumably my parents are going to die before me, leaving me out here on a little branch by myself, and leaving me to make all the decisions about taking care of them by myself as well. I dont feel incapable of that, but theres no denying it could be easier.\n\nI think theres also inherently a little more pressure to make something out of myself, as an adult. Not even necessarily that my parents are creating it through their actions...just something deep in human nature about family/genetics and also ParentalCausation. An “if you dont do it, nobody else will”; nobody else with most of my genes to have their own chance. Then again, Im not sure that pressure is bad -- just different.\n\nIn the end though, with regard to different families, I think you have to admit that you HaveToExperienceItToUnderstand for the most part. Im only guessing at my reactions to differences, and of course Im speaking in generalities and depending on who, exactly, an additional family member is, the results could differ vastly! Because I think people sometimes wonder, my own best-effort belief is that none of the advantages or disadvantages are significant enough that they should override other good reasons for choosing how big your family should be.\n\n{{OnlyChildAttitude/p2||PrivateChunk}}},{title:OnlyHumansNeedApply2016,author:Thomas H. Davenport & Julia Kirby,caption:Only Humans Need Apply: Winners and Losers in the Age of Smart Machines,completed:202106251200,created:20210626015858865,creator:soren,medium:book,modified:20230406022705314,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2016,text:Book by MrThomasDavenport and MsJuliaKirby on the rise of AI in the workplace and its potential to displace human jobs. It discusses how we can best take advantage of it (AugmentationVsAutomation), as well as what strategies todays workers can use to remain relevant as computers take over a wider variety of tasks that were previously considered immune to automation.\n\nI almost rated this book //skimmable// because the second half of the book (a chapter on each of the WaysOfStepping) was, I felt, mostly useless boilerplate and uninspiring examples. Perhaps I just have too much context about what AI can do and how we can interact with computers already? But having written up the rest of the summary and ideas, I came back and marked it //average// because the first half wasnt boring, and it gets a lot of things right and suggests a lot of interesting debate topics where I dont agree. If you read the book, you might consider not even bothering with the “Stepping *” chapters, or skimming them quickly.\n\n\n!! Important ideas\n\nSome of these were in the book; others are me pushing back on the authors.\n\n\u003C\u003Cstretch-links \AugmentationVsAutomation WaysOfStepping DodoJobs KnockingOutTheLowerRungs ReplaceabilityOfHumanTeachers IntelligenceAndAugmentation\>>\n\n\n!! Thoughts on the authors perspective\n\nWhile they have a fairly nuanced perspective, the authors are significantly more optimistic about the whole AI thing than I am, so I found myself disagreeing frequently, sometimes vehemently. But this, I think, is a good thing in a book like this: the value is almost more in its ability to get you thinking about the topic than in the literal information it provides. (For what its worth, Im not exactly pessimistic about AI advancements either; rather, I think it has the //potential// to do serious damage, both in the form of existential risks and of creating more mundane social problems, yet barely anybody is thinking seriously about figuring out what we should be trying to do with it and what we should avoid doing, which makes me very hesitant about welcoming major advancements.)\n\nThey do include a section at the end about ArtificialGeneralIntelligence and its potential hazards, but it seems a bit naïve to me to assume that we wont try to make computers replace people for things where people are clearly better (e.g., having emotional conversations with people). And I think this because we already //are// doing this in the form of SubtleCrappification -- e.g., were replacing more and more service workers with machines; see also ShadowWork. I see almost zero reason this trend wont continue. I obviously wish it wont -- and again I think the world will be better and our products and services will be better if we manage to arrest it and keep people in some of those positions -- but the book didnt talk about why this wont just turn into a RaceToTheBottom like so many similar situations have already. To be fair, that is not the point of the book, but its hard to take the books recommendations seriously if the reader doesnt accept that opportunities for augmentation will be available throughout his working lifetime.},{title:OnShortcutsAndLongcuts2024,author:Henrik Karlsson,caption:On shortcuts and longcuts,completed:202405091200,created:20240510025219288,creator:soren,medium:article,modified:20240516000909742,modifier:soren,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.henrikkarlsson.xyz/p/on-shortcuts-and-longcuts,year:2024,text:Essay by MrHenrikKarlsson & J.W.|PrivatePerson.},{title:OnTheFarSideOfSilence202004,caption:On the Far Side of Silence,created:20200430034555132,medium:article,modified:20200820022202179,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.ecosophia.net/on-the-far-side-of-silence/,year:2020,text:Fantastic article by MrJohnMichaelGreer on Ecosophia on the state of the pandemic, or more accurately on what may happen after the pandemic, or even more accurately than that, what we should do now in order to look forward to after the pandemic and take advantage of it.\n\nGreer on the other hand talked about how, at least for those of us who take the time to reflect on such things, this has the potential to teach us a lot. Many of us are, as he puts it, discovering that our lives suck. People are noticing that their kids arent learning much of anything in many of their public schools, for instance; theyre realizing that their office isnt particularly pleasant and they can work just as well from home|OfficeUnnecessary; theyre wondering whether both partners really need to be working outside the home; and in just having space to think (being //forced// to think, because so many people rarely do so), theyre spotting all kinds of other things that arent great.\n\nSo his challenge is, figure out what about your own life and what about your community you arent happy with, in preparation for striving to change those things after this blows over, whenever that may be. (Greer is optimistic about it being sooner, more than Im willing to be; but either way, barring some really crazy Satan-ex-machina, it will happen sometime, and most of us will still be here.) Ill take it. Theres a lot of potential in that.\n\nHe also cited a statistic (cannot vouch for veracity, but seems both plausible and instructive) that in one survey Brits were asked if they would like things to go back to just how they were before the pandemic, and only 9% said yes. Its definitely been revealing, in ways that will only fully be revealed in hindsight.\n\nTranscluded 2020-04-29 Wed.\n\n{{!!url}}},{title:OnTheOriginOfInequality1755,author:Rousseau,bibliography:LifetimeReading,caption:On the Origin of Inequality,created:20210703170128000,genre:Sociology,medium:book,modified:20210705214035643,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1755},{title:OnTheRoad1957,author:Kerouac,bibliography:LifetimeReading,caption:On the Road,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035652,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1957},{title:OnThinkingForOneself,author:Schopenhauer,bibliography:LifetimeReading,caption:On Thinking for Oneself (essay),created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214035660,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Ontology,created:20200910023051803,creator:soren,es:likely,modified:20210828141339186,modifier:soren,tags:Public Idea Definition,type:text/vnd.tiddlywiki,text:Branch of philosophy concerned with the nature of being, existence, and reality.},{title:OopsISaidThatOutLoud,created:20200712224558002,creator:soren,es:likely,modified:20250313024818169,modifier:soren,tags:FictionTheory Humor InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:Annoying, overused fiction trope: people seem to constantly be saying things out loud by mistake. I dunno about you, but I spend a lot of time thinking|IntellectionStrength, and I also talk to myself out loud a lot, and I can count the number of times Ive accidentally said something out loud with other people present on one hand. Im not going to claim its never happened, because it definitely has, but at //maximum// you get to use this once per novel, and its still going to be unbelievable.},{title:OpenApi,created:20200521204428083,creator:soren,es:confident,modified:20211107182112803,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Specification language for REST APIs, allowing them to be tossed around in machine-readable format like WSDL can for SOAP APIs. Handy because REST APIs have traditionally been described in a really ugly, nonstandard format, requiring people to either develop SDKs or manually figure them out.},{title:OpenShift,created:20200212142246053,creator:soren,modified:20200426164823080,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Enterprise software-container management system built on Kubernetes; I believe it is owned by TheRedHat. Used at TheFederatedInsurance for microservices|ServiceOrientedArchitecture and an increasing number of other things.},{title:OpenSociety1945,author:Popper,bibliography:LifetimeReading,caption:The Open Society and Its Enemies,created:20210703170128000,genre:Sociology,medium:book,modified:20210705214035673,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1945},{title:OpenSourceSoftware,created:20200411024330180,creator:soren,es:confident,modified:20210509005112023,modifier:soren,tags:Process Ethics Design Software Public Idea,type:text/vnd.tiddlywiki,text:Methodology for creating software. Also known, in many ways more accurately and importantly, //free software// after MrRichardStallman, or in a nice compromise, //FOSS// (“free and open-source software”).\n\nOpenSourceSoftware is a modified version of the WikipediaPhilosophy applied to software. Anyone publishes anything to the community, and folks can join the project and pitch in. Further, anyone can grab the source code and make their own version of it, and is then encouraged to send their contributions back for inclusion “upstream” if they would benefit others.\n\nOpen-source often produces better software, at least in the case of tools that are widely applicable (there may not be enough uptake for very specialized software, or software that reaches into the realm of art, like video games). Its also ethically preferable because it allows and encourages collaboration and improvement and doesnt hide its workings from the user (which can get extremely dangerous: it could be spying on you or who knows what else, if you cant see the source code). To many people, it doesnt make sense that some people working in their spare time, maybe with a few companies contributing their changes back as well, could produce better software than a company organized for that express purpose, but since the concept took off in the 90s, thats whats happened. As they say, its hard to argue with reality. And we should all be happy about it!},{title:OperatingSystems,created:20200426164345905,modified:20200426164534966,tags:Class Public,type:text/vnd.tiddlywiki,text:StOlaf class on, surprise surprise, operating systems. A solid and interesting course, based around MrAndrewTanenbaums books.},{title:OperatorsPleasure,created:20200423032053451,es:confident,modified:20210509005232336,tags:Design Software SorenConcept Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:Most services are provided at //operators pleasure// -- there is no guarantee whatsoever that theyll continue existing. The company might go under, of course, or the business owner might just fly to Tahiti and never come back, or the company might decide theyre not making money on the product anymore and its just gone.\n\nOperators pleasure is a huge problem in software. Theres nothing intrinsically wrong with OP, of course, but often software is designed to draw the user in so they become reliant on it -- since that helps make the product profitable -- and then when it disappears its pretty unpleasant (see GoogleReader for one highly publicized case). Or, even worse, when in a case of user-hostile crappy design, the system is gratuitously forced to rely on a server (e.g., for an anti-piracy scheme) and the company turns off the server, thus making software that the user paid good money for and that would remain perfectly usable without an artificial restriction completely worthless -- particularly insulting when the gratuitous system was designed to emphasize the fact that the user needed to pay for the software. These systems are the insulting opposite of AppropriateTechnology.\n\nOften yet another reason that PerfectionIsSubtractive and we should AvoidScale: the software is better without a “feature,” and the fewer dependencies there are the better. OpenSourceSoftware is also superior here since it cant be taken away by fiat (it might no longer be supported, but if its really important someone else can pick it up and support it -- and even if its not, at least it wont just disappear one day, youll have time to plan your move away from it as it stops working on newer systems or becomes vulnerable to attack).\n\nTheBasecamps UntilTheEndOfTheInternet guarantee would be valuable in many other places.},{title:OpinionsRequireCounterarguments,created:20200410214200090,creator:soren,es:possible,modified:20211215044648419,modifier:soren,tags:Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Theory that before asserting an opinion, one should be able to fully explain the downsides of that opinion and why someone would have the opposite opinion. It presumably goes without saying, but a straw-man explanation of the other side doesnt cut it.\n\nIf you cant do that, it is perfectly fine not to have an opinion|NoOpinion on something. You can decide it is not worth figuring out, at least at the present time, and leave it at that.\n\nI dont adhere to this particularly well in the sense that I think about it before explaining my opinion, but I do try to pay attention with particularly different issues, especially those of Ethics. See for instance DeathWithDignity.\n\nFirst noted in \u003C\u003Crt 10541>>.},{title:OpportunityCost,created:20200423173746793,es:confident,modified:20200423174420061,tags:Economics MentalModel Public Idea,type:text/vnd.tiddlywiki,text:When weighing up the best course of action, its useful to remember that every possible action has an associated cost, that of //not doing// everything else you could be doing.\n\nOn the one hand this can lead to infinite regress and AnalysisParalysis if taken too far. But if not taken far enough, a bad course of action may seem good because most of the context was ignored. (Cf. BigPictureProductivity.)\n\nStatisticalMurder is an extreme example.\n\nCf. SunkCost.},{title:OpsDev,created:20200219214408452,creator:soren,modified:20200914182226026,modifier:soren,tags:Process Code SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:\OpsDev\ is a humorous term for a system that has not learned any lessons from DevOps. Properly written \Ops|Dev\, for a graphical demonstration of the WallOfConfusion.\n\n{{OpsDev/p||PrivateChunk}}},{title:OpticalIllusion,created:20200323025142137,modified:20201204041547882,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Where your brain and your eyes get messed up and think something looks weird or different than it actually is.\n\nA philosophically curious and sometimes even disturbing phenomenon which brings to light the illusion that the map is not the territory|AllMapsLie: we are not perceiving the world as it is, but only a useful representation of it.},{title:Optics1704,author:Newton,bibliography:LifetimeReading,caption:Optics,created:20210703170128000,genre:Science,medium:book,modified:20210705214035681,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1704},{title:OracleMachine,created:20200513180020484,creator:soren,es:confident,modified:20211113031952849,modifier:soren,tags:Logic Math MentalModel Public Idea,type:text/vnd.tiddlywiki,text:An oracle machine is a hypothetical device useful in ThoughtExperiments and proofs which can immediately give the correct answer to a particular problem or component of a problem in a single unit of time.\n\nThe oracle can solve computation but not physical tasks. This divides problems into two classes: those which can be completely solved with an oracle (e.g., a calculation) and those which an oracle can only help (e.g., arranging a series of items in alphabetical order).\n\nSource: IntelligentUseOfSpace1993.\n\n\u003C\u003Crememberq \20200516164642490\\n\t\What is an oracle machine?\\n\t\A device that gives the correct answer to a particular problem in a single unit of time.\>>},{title:OralTradition,created:20200226004321342,es:confident,modified:20210509011955986,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:General process by which things are transmitted between generations of people by osmosis, or intentional recitation, rather than in writing.\n\nTheStOlafChoirs OleChoirBenediction ritual was transmitted orally, q.v. for details.},{title:Orbit,created:20210616223930829,es:confident,modified:20210616223751761,tags:Software Public Idea,type:text/vnd.tiddlywiki,url:https://withorbit.com,text:MrAndyMatuschaks SpacedRepetition and MnemonicMedium tool. {{!!url}}},{title:OrderPattern,caption:Ordering,created:20210307224753805,description:Given a series of items, the reviewer places them in some specified order.,es:confident,modified:20210522013404183,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:In an ordering card, given a series of items, the reviewer places them in some specified order. The items being ordered may be levels in a hierarchy, items with particular sizes, steps in a process, or something similar.\n\nSupertype: //Linker// (a high-level card that joins together a series of detailed cards or concepts)\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:OrderPattern/Advantages,created:20210313134756475,modified:20210313134635215,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Combines a large amount of knowledge that would be awkward to phrase any other way into a single, usually easy-to-remember, note.\n* Easy and quick to create.\n* Generally effective at keeping the order at top of mind.\n* Breaking the knowledge down into tiny, concise steps to produce this type of card may help you remember.},{title:OrderPattern/Cautions,created:20210313134808599,modified:20210313134647346,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Dont try to use this on complex items, like lines of poetry or detailed instructions. If your items are complex, first learn each item separately in detail. Then you can apply the Order pattern, or overlapping cloze deletions|OverlappingClozePattern or a mnemonic device, to put them in order.},{title:OrderPattern/Contributors,created:20210313134819733,modified:20210313134658453,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad.},{title:OrderPattern/Disadvantages,created:20210313134803676,modified:20210313134642415,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Limited opportunities to make the note easier if it proves unexpectedly difficult.\n* Will not work effectively on complex items, like lines of poetry or detailed instructions; it needs to be possible to distill each item into a single chunk composed of one or two words.\n* Will not teach you to enumerate the elements of the set or to understand what each element is, only what order they go in when you see them together. This may not be a concern, but if you need those things, add additional cards for them.},{title:OrderPattern/Examples,created:20210313134751037,modified:20210313134629788,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210307225049629\\n\t\Order the following Azure resources by size from largest to smallest:\u003Cbr>Azure Account, EA, Management Group, Resource, Resource Group, Subscription\\n\t\EA > Azure Account > Management Group > Subscription > Resource Group > Resource\>>\n\t\n\u003C\u003Crememberq \20210307225108355\\n\t\~ServiceNow: Place the following update-set tasks in order: commit, complete, import, preview.\\n\t\complete → import → preview → commit\>>},{title:OrderPattern/Formula,created:20210313134739153,modified:20210313134617873,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** The word “order”, with additional connecting words if needed.\n** A description of the specific order to place the items in (hierarchy, size, order of steps in a process, etc.).\n** A list of items to order.\n* Answer:\n** The items, presented in the correct order.\n*** Arrows or greater-than signs are superior to commas for separating items because you can tell which side is “large” or “first” if theres any doubt.\n*** The largest item always goes at the beginning to reduce confusion, because then sizes and hierarchies go in the same order.},{title:OrderPattern/UsageNotes,created:20210313134814737,modified:20210701035729922,tags:Public Idea,type:text/vnd.tiddlywiki,text:* 5-9 items is likely the practical limit for this pattern, due to short-term memory limits; any more and you will struggle to remember which items youve selected already unless you write your answer down, which makes reviewing much more frustrating.\n* You have to decide how to order the items in the prompt.\n** I try to put them in alphabetical order, but occasionally this makes the prompt identical or extremely similar to the answer; if this happens, you can randomize it instead. This does give away a little bit of information, but I havent found that I start pattern-matching because of it. Just dont randomize only when the items are //exactly// alphabetical, or youll know that they just go in alphabetical order!\n** Alternatively, you can use a dynamic ordering note type|DynamicallyOrderedAnkiCard to re-randomize the items on every review. This is vastly better from a learning perspective, but makes your cards a lot more complicated.},{title:OregonHolocaustMemorial,created:20250623162319733,creator:soren,modified:20250623162320617,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:OrganicVsEngineeredAttraction,created:20230801231003601,creator:soren,description:I can become attracted to people either unexpectedly or on purpose.,es:personal,modified:20250204040443035,modifier:soren,tags:Idea Romance ManualForMe Public Sexuality,type:text/vnd.tiddlywiki,text:I distinguish two ways of becoming attracted to someone:\n\n* Organic attraction: While not trying to accomplish anything in particular, I end up with a crush on someone. As a DemiPerson, this doesnt happen to me quickly or easily; the usual arc is that I meet someone, spend a lot of time working or hanging out with them, maybe become personal friends with them, and then at some point find myself in a position with sufficient intimacy that I easily develop attraction|HowToBecomeAttractedToSomeone with them.\n* Engineered attraction: I become attracted to someone because Im specifically //trying// to be attracted to them, putting myself in a position that makes it vastly more likely. The usual arc is that I find someone on a dating app or in real life who seems interesting and potentially a good partner, and, despite not actually being attracted to them, ask them out as a way of putting myself in the intimate position I need to develop attraction. If Im careful about this, it can go fast -- a couple of dates can be enough to start feeling something.\n\nThere is fundamentally no difference between how the process of attraction works between the two types, but the experience is quite different since one just randomly happens and the other is deliberate. Organic attraction is easier, more motivating, and more fun, but its also much, much messier; I have my life interrupted and have to figure out whether to act on it and ask the person out, and if things dont go well theres a risk of losing an important relationship, and it tends to be harder to get distance. Also, I cant do anything to make it happen, I just have to wait for it to happen (though some instances may be DeliberateAccidents). In the past Ive often gone multiple years between organic attractions. As such, I dont expect them to be a big part of my dating life going forward, though I also dont intend to turn them down if they happen!\n\nOrganically developed ProtoAttraction is likely a good signal that I could easily develop engineered attraction if I tried.},{title:OrganizationalAnkiAdoption,created:20200729221837576,es:likely,modified:20220504200826483,modifier:soren,tags:Learning Employment Politics InterpersonalRelations Memory Public Idea,type:text/vnd.tiddlywiki,text:If you love Anki, or any similar SpacedRepetition tool, you might tell your friends about it. Then you might set your sights broader: why isnt everybody using this? It increases learning efficiency by 20 times and makes memory into a choice! Can we use it in my school or company for Enlightenment-infused awesomeness?\n\n\n!! Personal experience\n\nHeres my history on this topic: in 2011, my mother|PrivatePerson (then a professor of German at the local university) and I were introduced to Anki by a tangential reference from one of her colleagues, and we both got excited about it. We ended up leading up a number of projects from 2011-2014ish driving adoption in schools:\n\n* She made using it in all of her classes part of her students grade (in various ways, some more successful than others) and provided cards for students.\n* We worked together to get my high-school German teacher to produce vocabulary lists and do the same in all her classes. In retrospect, she loved the concept but neither spent enough time learning about the tool nor asked for help when appropriate, which doomed the project to mediocrity from the start.\n* I wrote a number of web-distributed articles for people trying to do similar things.\n* She worked to get her colleagues to use it in their own classrooms, with limited success.\n\nWith that background, I think there are a number of significant downfalls to this approach:\n\n* Using Anki is a complex soft skill -- not part of your discipline itself, but helping immensely in doing your job. Everyone ought to learn the basics of cognitive science as it relates to memory, spaced repetition, and mnemonics|MnemonicTechnique in high school or college -- it could be easily fit into a dense, fun, and extremely useful nine-week or one-semester course -- but absent that, its really hard to teach this skill properly in a class where youre trying to also teach actual topical material. If its not a class, the situation is even worse. The lack of skills makes uptake and perception of Ankis benefits less successful than it otherwise would be.\n* Because getting good and reviewing daily does require effort, some people are almost certainly more suited to Anki use than others (see SpacedRepetitionPersonality). I certainly am not arguing not having this personality is destiny, but some people just arent going to be interested. Even with the possibility of coercion as in a class, youre not going to build lasting habits and get people involved enough to keep using Anki after the class is over if you dont develop intrinsic motivation|DevelopingIntrinsicSrMotivation. Now someone might well benefit just from using Anki for the duration of a class -- so this is not to bash those projects my mother-son team did in the early teens -- but certainly much more value comes from developing a lifelong spaced-repetition habit. Anki fundamentally comes into its own only when you use it to take control of your own learning and body of knowledge throughout your lifetime. If you dont care much about those things, Anki just isnt going to be of much use to you.\n* Developing GoodSharedFlashcards is crucial, because with an initiative like this you are unlikely to convince people to get started when they have to build all their own cards -- especially since thats the hardest part of SR to learn. Looking back, I dont think I, my mother, or my high-school German teacher understood how crucial this was at the time. Now, we did have the advantage of mostly focusing on vocabulary, which suffers less from \bad\ flashcards, but not having good flashcards of other kinds likely stunted our projects. In fact, we didnt really even think about other kinds of things we could include that might make reviewing more entertaining or enlightening. On the other hand, getting the necessary learning and infrastructure in place even to deliver those cards top-down might have killed the project too.\n\n\n!! Quo vadiemus?\n\nIf the word \adoption\ makes you think organizational change management and all the concepts under that umbrella, you might notice that all of the projects Ive been involved in so far have been strongly top-down. On my next project, Im going to shoot for a bottom-up CommunityOfPractice-based approach: start by trying to reach the people who will get //excited// about Anki, and pitch it to them and give them the tools to succeed. I suspect this has more potential for success, though its certainly not a guarantee; besides that, might as well try something different!\n\nMy theory goes like this: once whatever subset of the initial excited set of people ends up loving Anki starts rhapsodizing about it like you did, then you might get others curious who could benefit but wouldnt have listened otherwise, plus youll then have a set of people distributed throughout the organization who can provide guidance to those new users, instead of just you. Whats more, even if this effect never happens even once, then you at least got the people who were most likely to benefit in the first place without having to put in any more effort than necessary.\n\nI seriously considered getting one of these going at StOlaf when I was there, but it was one of those things that never quite happened. The COP also has the advantage that even if everyone else thinks its stupid, momentum, energy, and value can still be maintained. If you try to go top-down and management doesnt like the idea or you meet with significant resistance from the next tier, the project fizzles out.\n\nAs far as the download/create debate goes, I think having a supply of GoodSharedFlashcards is essential to a practical adoption initiative no matter what approach you take to the initiative, but prodding people to create their own and learn the skills necessary to do that is important too. We want to give them fish so they get to like fish, but then teach them how to fish as well.},{title:OrganizationalPassTheBuck,created:20200226210348747,es:likely,modified:20210509010030054,tags:Psychology InterpersonalRelations Systems Public Idea,type:text/vnd.tiddlywiki,text:In dysfunctional organizations, we are often blamed for things we are not responsible for. It shouldnt be about blame anyway|BlamelessCulture because the CogIsNotTheCause, but it is.\n\nThe temptation and the usual action is to pass the blame off to someone else whose fault it actually is (supposedly, anyway), whether thats organizational or personal. We and they ought to be trying to MakeItNeverComeBack, but (as some at the book club meeting for UnicornProjectPartOne say) siloing requires us to protect our resources and not do anything beyond the bare minimum. Similarly, management wont explicitly approve anything but the bare minimum in terms of completing documentation, cleaning up, and reducing TechnicalDebt because it wont lead to obvious and measurable features. See FeaturesWhileTheWorldBurns.\n\nVery active problem at TheFederatedInsurance that was seen/developed extensively in UnicornProjectPartOne; and Im as guilty of it as anyone else.},{title:OriginalWiki,created:20201205044724416,modified:20201205044801756,tags:Information Publication Public,type:text/vnd.tiddlywiki,url:https://wiki.c2.com,text:The Wiki that started the idea of wikis, nowadays found at {{!!url}} in a read-only form. Created by MrWardCunningham in the late nineties.},{title:OriginAndDevelopmentOfQuantumTheory,author:Planck,bibliography:LifetimeReading,caption:Origin and Development of the Quantum Theory,created:20210703170128000,genre:Science,medium:book,modified:20210705214035694,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:OriginsOfTotalitarianism1951,author:Arendt,bibliography:LifetimeReading,caption:The Origins of Totalitarianism,created:20210703170128000,genre:History,medium:book,modified:20210705214035702,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1951},{title:OrphanQuestion,created:20200708000834759,es:likely,modified:20210701043254637,tags:Memory Psychology Public Idea,type:text/vnd.tiddlywiki,text:Observation from AugmentingLongTermMemory201807: Anki questions that arent mentally connected to anything else you know tend to “go stale” and be easily forgotten. You need to get them into the ConceptWeb, or at least into a strongly connected component of the concept graph.\n\nThe author suggests fighting orphans by either:\n\n* not putting them in (sometimes they werent really very important at all)\n* making sure that you never add just //one// question on a topic; at least do a couple of related ones if youre going to do any at all\n\nIts probably obvious that, as in many other places, there is an isomorphism here between the shape of the ZettelKasten and that of SR (and your mind). Although in the case of the ZK, this phenomenon is not necessarily taken to be bad, its just understood that some ideas will end up in the system without context, and if you never learn anything else relevant, fine, theyll just quietly die. With the ZK, this isnt much of a concern because it wont clutter anything up (since you wont even ever see it in most cases) and it isnt causing you ongoing effort; with Anki, when something becomes a pain to remember, it turns into at least a semi-leech and you get into a passive-aggressive fight with it. (Does that mean the lesson is this kind of tentative stuff belongs more in a ZK than in SR?)},{title:OrwellEssays,author:Orwell,bibliography:LifetimeReading,caption:Collected Essays,created:20210703170128000,genre:Misc,medium:book,modified:20210705214035710,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:osri2023.png,type:image/png,created:20230712033345971,creator:soren,modified:20230712033353340,modifier:soren,tags:Image Public,_canonical_uri:./extimage/osri2023.png},{title:OtherSignificantOthers2024,author:Rhaina Cohen,caption:The Other Significant Others: Reimagining Life with Friendship at the Center,completed:202508181200,created:20250819030101551,creator:soren,medium:book,modified:20250819030726454,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2025},{title:OtherStrangerToo,created:20231122003235375,creator:soren,description:In any competition, youre not the only one that has a complete story and life.,es:mythological,modified:20231128024221836,modifier:soren,tags:Idea InterpersonalRelations Sociology PhilosophyOfLife Psychology Public,type:text/vnd.tiddlywiki,text:In October 2023, I put in an offer on a small apartment in a housing co-op in Whittier. My realtor and I hurried to put it in because wed heard someone else had already come to see the place two or three times, and sure enough, hours after we placed our offer we heard they had placed one too. We sweetened ours a bit given that information, and then we just had to wait and see what happened.\n\nPeople often get very competitive and stressed out in these situations, and I cant claim I was different. But I had this interesting realization: people rarely seem to think about the //other// party in such competitions, because theyre invisible. But that person is in pretty much the same situation you are, and you probably dont deserve to win more than they do; youre only the main character in your own head!\n\nI “won,” but thinking about the whole process this way, I almost feel a little bad about it. Its not that I was more worthy or a better person. And its not a friendly game, its two people whose lives will be significantly different depending on whether they get into the place they want or not.\u003C\u003Cfnote \Of course, maybe the next place my competitors made an offer on turned out to be better for them -- we cant know. But Im sure they were disappointed and had to completely change their expectations.\>> Maybe the resource-allocation goals of the free market were met and I wanted the place more than them, as measured by my willingness to offer more money, but the whole process is so opaque that its just as likely that they would have been willing to pay as much as I did but guessed wrong about how much they needed to offer, or they outright couldnt afford a higher price, or they needed or wanted financing terms that were more likely to fall through -- none of which says almost anything about who “should have” been given this apartment in a world that maximized utility. In the big picture, theres only one apartment and two people wanted it, and all outcomes leave someone deeply frustrated.\n\nIm going to try to cultivate this sort of distanced empathy for strangers more often; it feels useful and meaningful.},{title:OtterCreekLiteratureIntroduction,created:20200401225641170,creator:soren,modified:20200423033426583,modifier:soren,refexplorer-starttab:Sources,tags:Class Public,type:text/vnd.tiddlywiki,text:During my fourth- and fifth-grade years at TheOtterCreekHomeschool, I read a wide array of adult literature. Every day I read maybe an hour and a half or so. Everything selected by P.|PrivatePerson, who has great taste of course! I only understood //most// of it, but it was one of the best things we did at O.C.\n\nSomewhere I have a list of all the stuff I read, which might be fun to import sometime. I think the ZettelKasten may serve as the best reading list I have ever had...},{title:OttO,created:20200428182904750,creator:soren,es:confident,modified:20240524035917081,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:Objection to the Objection, an abbreviation|OurWikiAbbreviations used to present responses to common arguments.},{title:OurNamingConventions,created:20200115225047720,creator:soren,modified:20240614034111117,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:In order to help keep track of all the entries in MosaicMuse, certain NamingConventions are observed on tiddler titles. Titles serve as IdeaApis, so they need to be clear and consistent.\n\n!!! Casing\n\nTiddlyWiki titles are case-sensitive, which can cause some irritation when you accidentally create tiddlers that differ only in case. These rules help to keep the capitalization consistent and avoid such confusion:\n\n* Titles should generally be WikiCamelCase (really, PascalCase, but everyone in the wiki world calls it CamelCase). However, a single-word concept or title should not have its capitalization mangled or gratuitous words added for the sole purpose of making it into a ~CamelCase title; it should simply be rendered as the single word.\n** It is, however, OK and encouraged to spell out a number or standard abbreviation where this enables a match with the ~CamelCase pattern, e.g., NineteenEightyFour.\n* When writing ~CamelCase titles, capitalization is normalized as if all components were normal words. Acronyms do not retain upper-casing or proprietary weirdness. So it is QwertyResidue, not *QWERTYResidue; A.S.T.|PrivatePerson, not *~TheADOSupportTeam.\n** But acronyms and proprietary weirdness not incorporated into a ~CamelCase word do retain their capitalization: BDFL, not *Bdfl; LaTeX, not *Latex.\n* Barring proprietary weirdness (e.g., xkcd), titles always begin with a capital letter.\n\n\n!!! Wording\n\n* Titles, when they are nouns, are always singular.\n** But names of organizations (e.g., TheManitouSingers) and titles of sources (e.g., ComputerStupidities) should not have their number mangled to match.\n** The last word of a phrasal title might be pluralized. This is fine as long as the title as a whole is not a plural noun. E.g., SpacedRepetitionEncouragesFloatingIdeas is fine.\n\n* `The` may not begin any title which does not refer to an organization or group of people (see //Type patterns//, below). `The` should simply be omitted in such cases; e.g., GreatGatsby, not *~TheGreatGatsby. Its often hard to remember if `The` is part of the title anyway!\n\n* Abbreviations should be avoided unless they are standard/genericized (e.g., SQL, HTML).\n\n* Numbers should be spelled out unless this looks silly, especially when theyre small (e.g., EightSeasons, not *8Seasons).\n\n* Punctuation, including apostrophes, is removed, and accented characters are turned to standard Latin letters, in titles. This avoids confusion about whether this was done, as well as possible quoting and encoding issues in filenames, URLs, etc. The correct spelling should be used within the tiddler.\n\n* If the tiddler is about the relationship between two things, or discusses two things, it should place those two things in alphabetical order within the title, absent a strong reason to do otherwise.\n\n\n!!! Type patterns\n\nTitles of certain ZettelkastenCardTypes follow specific patterns:\n\n* \u003C\u003Ctag-pill PAO>>, `^(Mr|Ms|Mx|The)A-Za-zA-Z+`: Identifies a (P)erson, (A)nimal, or (O)rganization. Mx is used for non-binary people and people of unknown gender. The is used for groups of people and organizations.\n* \u003C\u003Ctag-pill Source>>, `^A-Za-zA-Z*0-9{4,8}`: Identifies a source (an individual instance of a book, article, or other medium). Typically the page will note it as written by a //PAO//. The final number should be the publication date, if known. Nowadays I usually only enter the year; at one time I often added the month and day as well for things like blog posts, so there are still some entries of this format.\n* \u003C\u003Ctag-pill Image>>, `.*\\.(png|jpg|gif|svg)$`: Identifies an image embedded in the wiki.\n* \u003C\u003Ctag-pill Attachment>>, similarly with file extension: Identifies other file types such as PDFs.\n* \u003C\u003Ctag-pill Meta>>, `^OurA-Za-zA-Z+`: Something (like this article) that discusses the wiki rather than an idea.\n* \u003C\u003Ctag-pill Date>>, `δPersonName:Date`: This joins together a person and a days journal entry, with the values from each separated by the colon. The δ represents the D in //Date//.\n* \u003C\u003Ctag-pill Journal>>, `YYYY-MM-DD DDD`, where DDD represents the three-character day of the week. Journal tiddlers are named automatically on creation, so one usually need not concern oneself with their names.\n\n!!! Looser conventions\n\nThese arent types, but are generally conventions I try to follow.\n\n* My before a name indicates that its a work I created.},{title:OurWikiAbbreviations,created:20200529231934863,creator:soren,modified:20240524035859252,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:I use some less common or personal abbreviations in the wiki with some regularity that the reader may not be familiar with.\n\n\n; cf.\n: Latin abbreviation, “compare,” “bring together.” In this wiki, it means, “heres another related idea you might be interested in, but I dont feel like explaining its exact relationship to what Im currently talking about.”\n\n; M2\n: MosaicMuse, this site.\n\n; N.A.\n: //Note Aside//: a quick interjection that doesnt fit well into its surroundings but seems worth recording.\n\n; OA\n: Original Author/Article, the person or source under discussion in the tiddler.\n\n; ~OttO\n: Objection to the Objection|OttO, introducing a refutation of a proposed or actual counterargument to the subject of the tiddler.\n\n; q.v.\n: //quod vide//, one of the rarer Latin abbreviations used in English nowadays, but enormously useful in a linky text like this. After a link or other reference, it means “look there for details” (literally, “see that”). For instance, in WYSIWYG:\n\n> Used by WordProcessors and similar tools; q.v. for benefits and disadvantages.\n\n; RT\n: A reference to an entry in RandomThoughts, my CommonPlace book.\n\n; SR\n: SpacedRepetition.\n\n; wrt, w.r.t.\n: //With respect to// (sometimes also read //with regard to//).\n\n; ZK\n: ZettelKasten. M2 was formerly called //Sorens Zettelkasten//, and I abbreviated this simply //ZK//, so some stray references likely remain. May also refer to the system/concept in general.\n\n\nCf. PersonalAbbreviationSystem.},{title:OutCard,created:20210823155957446,creator:soren,description:An out card is a sheet of paper that serves as the physical analogue of a digital redirect.,es:confident,modified:20210825031810402,modifier:soren,tags:Information PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:The out card is a useful pattern in any PaperFilingSystem where a given item can move around freely but can only be in one place at a time. It first came to my attention as part of CompleteThoughtMapping2003, and Ive since used it in multiple contexts.\n\nThe key idea of the out card is the insertion of a surrogate sheet of paper or cardstock that describes the current physical location of the document into some other location where one might try to find that document. You might do this because the document could sensibly be put in multiple places, or because you tried to find it in the wrong place once and you want to save yourself some time if you make the same mistake again, or because you permanently moved it to a new category but arent sure youll remember to look for it there, or because its been temporarily put into a carry-along binder or desktop filing rack for easier access.\n\nI create out cards by writing `OUT CARD` in big letters at the top of a sheet of whatever kind of paper the rest of the file is made up of, then writing a reference number, file name, or other description of the location the item is to be found underneath. If the item is only being temporarily moved and its original location wont be obvious, its smart to also put a sticky note on the document itself, creating a bidirectional link|BidirectionalLinks.\n\nOut cards can be “chained” together if necessary: if you take the item out of its new place as well and put it somewhere else, leaving an out card //there// will make it possible to follow the trail all the way to the item, no matter how long (unless you mess up and create a loop or something!). Of course, if the move is permanent, the first time you discover yourself having to follow a long trail, you should go back to the first out card and update it to point to the final location.\n\nThis pattern is usable in the digital world as well, and is probably more familiar there -- the entire 300 series of HTTP status codes|https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages are forms of out cards, for instance, as are MediaWikis redirects.},{title:OutcomesOverActivities,created:20200428182350674,es:likely,modified:20210509005821052,tags:Employment ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:DevOpsInTheRealWorld argues that the “correct” DefinitionOfDone (SociologicalQuotationMarks) in a DevOps system is one which focuses on //outcomes// rather than on the completion of //activities//, or, put another way, where items are done when they are providing value to the customer.\n\n!! References\n\nActivities over outcomes:\n\n> Angela, from Initech Insurance, had bumped heads with Andre in the past. She was “process oriented,” which is to say, she didnt care about the end results so long as you let her micromanage you.\n> TheDailyWtf, \u003C\u003Crt 10792>>\n},{title:OutingMinnesota,created:20240208225618879,creator:soren,gis-lat:46.820219282460016,gis-long:-93.9483204259456,gis-zoom:9,modified:20240208225649044,modifier:soren,tags:Public Place,type:text/vnd.tiddlywiki},{title:OverEngineering,created:20200121022940806,creator:soren,es:confident,modified:20240306034424677,modifier:soren,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:“Overengineered” is a derogatory term applied to things that have been made more complicated than necessary. From an AgilePhilosophy perspective, it mostly means features (user-visible or architectural) have been implemented that nobody really needs. Or maybe you developed a beautiful, highly optimized architecture when serially processing a single text file would have produced an imperceptible degradation in performance during actual use.\n\nOverengineering is sometimes also called “gold-plating” -- providing extra value that the customer didnt ask for or really want.\u003C\u003Cfnote \Arguably, value that the customer didnt want isnt real value.\>>\n\nThe antidote to overengineering is doing exactly as much work and making the system exactly as robust as is needed to meet the current requirements or UserStory (unless perhaps you can immediately envision another use case that you //know// will be implemented shortly that requires more, and you know exactly what those requirements are right now so you can take them into account without wasting time). This may occasionally result in having to throw out some of what was previously done, but AgileHumility suggests the throwing out in that situation wastes less time than overengineering on the average; its better to JustGetStarted.},{title:OverfullFunnel,created:20200226025233829,description:Due to inefficiencies introduced by queueing, adding too much physical or mental work at once causes less work to get done.,es:confident,modified:20210623022437685,tags:Productivity Metaphor Process Public Idea,type:text/vnd.tiddlywiki,text:Ever notice that if you pour something into a funnel too quickly, it drains slower than it would if you poured slower and steadily? That pattern shows up over and over again in both the physical and mental worlds. Exactly the right amount of work, of challenge, of pace is what leads to the highest productivity.\n\nArguably this is the critical point of the LeanMethodology.},{title:OverlappingClozePattern,caption:Overlapping Cloze,created:20210310034813153,description:A long list is transformed into a series of cards where each line is tested exactly once, with each prompt consisting of the lines immediately before that line in the series.,es:confident,modified:20210522013404198,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:In the Overlapping Cloze pattern, a list is transformed into a series of cards where each line is tested exactly once. These cards are typically used for memorizing series that have a natural order and the later items will not be known before the earlier items at recall time; common examples are steps in a process and verbatim texts like lyrics or poetry.\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:OverlappingClozePattern/Advantages,created:20210313134011969,modified:20210313133850728,tags:Public Idea,type:text/vnd.tiddlywiki,text:* This is just about the only practical way to break down long texts or lists into spaced-repetition flashcards.\n* Unlike almost every other spaced-repetition pattern, this pattern is highly mechanical, so the cards can be effectively generated by software; the LPCG|https://ankiweb.net/shared/info/2084557901 Anki add-on is a popular method.},{title:OverlappingClozePattern/Cautions,created:20210313134023571,modified:20210313133902334,tags:Public Idea,type:text/vnd.tiddlywiki,text:* As noted in //Disadvantages//, for series of significant length, you absolutely must learn the material outside of your spaced-repetition tool first. If you skip this step, youll end up going around in circles learning tiny snippets and forgetting them again, without ever getting an overall picture of the entire series. (Short lists of steps should be OK if you additionally add cards that test your understanding of each step.)},{title:OverlappingClozePattern/Contributors,created:20210313134036012,modified:20210313133914772,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad. (Soren is also the author and maintainer of the LPCG add-on listed in this entry and, to his knowledge, invented this pattern and its usage in the Anki community -- though of course it is quite an obvious pattern when you start thinking about it!)},{title:OverlappingClozePattern/Disadvantages,created:20210313134018349,modified:20210313133857118,tags:Public Idea,type:text/vnd.tiddlywiki,text:* This pattern is a retention method, not a learning method. This is true of all spaced-repetition flashcards, but it is rarely so tempting to drop cards you havent fully learned into your spaced-repetition tool and start memorizing there! The text must be fully learned prior to starting reviews on cards of this pattern.\n* If aiming for recitation, this pattern tends to hover just below the level of actual fluency. A useful compromise is to add a couple of cards asking you to recite a large section of the whole text, once you have successfully learned the individual lines.\n* Its not possible to remove individual items youre struggling with and retain a complete memory of the text, since removing any single item leaves a gap in the series, and its often not obvious how to make individual items easier to remember when you struggle with them, so leeches are a much bigger problem than with most patterns.\n* Many series have similar if not identical items in different places; identifying which is which during review can be difficult and lead to false negatives (accidentally failing to produce the correct answer even when you actually know it).},{title:OverlappingClozePattern/Examples,created:20210313134005702,modified:20210313133844466,tags:Public Idea,type:text/vnd.tiddlywiki,text:Given a text like this one:\n\n>\\\\nYou can get a good deal from rehearsal\nIf it just has the proper dispersal.\n You would just be an ass\n To do it //en masse// ---\nYour remembering would turn out much worsal.\n\\\\n\nThen:\n\n\u003C\u003Cremembercz \20210310035212464\\n\t\\u003Cbr>Spaced Repetition Limerick: First Line\u003Cbr>\n\t {You can get a good deal from rehearsal}\>>\n\n\u003C\u003Cremembercz \20210310035212464\\n\t\\u003Cbr>You can get a good deal from rehearsal\u003Cbr>\n\t {If it just has the proper dispersal.}\>>\n\n\u003C\u003Cremembercz \20210310035212464\\n\t\\u003Cbr>You can get a good deal from rehearsal\u003Cbr>\n\t If it just has the proper dispersal.\u003Cbr>\n\t {You would just be an ass}\>>\n\n\u003C\u003Cremembercz \20210310035212464\\n\t \\u003Cbr>If it just has the proper dispersal.\u003Cbr>\n\t You would just be an ass\u003Cbr>\n\t {To do it //en masse//}\>>\n\t \n\u003C\u003Cremembercz \20210310035212464\\n\t \\u003Cbr> You would just be an ass\u003Cbr>\n\t To do it //en masse// ---\u003Cbr>\n\t {Your remembering would turn out much worsal.}\>>\n\t \n(This classic spaced-repetition limerick is by Ulric Neisser.)},{title:OverlappingClozePattern/Formula,created:20210313133957521,modified:20210313133836249,tags:Public Idea,type:text/vnd.tiddlywiki,text:Consists of many cards, generally one for each item in the series. On each card:\n\n* Prompt:\n** Several lines of //context// (consecutive items in the series). Two is a good baseline, but depending on how repetitive the series is and how long the items are, sometimes more may be required.\n** The card testing the very first item in the series will not have any context, so it will instead show something like \First Item of the Blah Blah Blah series\.\n* Answer:\n** The next item in the series.\n\nVariations are occasionally useful when the items are unusually easy, difficult, long, or short -- e.g., revealing two lines at a time, or testing half-lines.},{title:OverlappingClozePattern/UsageNotes,created:20210313134031095,modified:20210313133909956,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Before learning a verbatim text using this pattern, consider whether you actually want to learn it verbatim. Most people who use spaced repetition are unlikely to fall into this trap, but remember that its //much// easier and faster to learn the ideas behind a text than its exact wording. There are plenty of good reasons to learn high-quality poetry or speeches verbatim, but be sure thats actually what youre doing.\n* You may also want to consider exactly how strictly you need to follow the original. You may think its not worth failing a card if you only mixed up a connecting word like saying “that” instead of “which,” for instance.\n* Adding the line number to the prompt in addition to the context lines is useful; this way, if the text is long, youll have an overall idea of how far through you are. This isnt usually giving away extra information because if youre running through the list in order in real life, youll presumably know how far through it you are much better than you do when studying a single isolated piece of it.},{title:OverlargeDependencyWeb,created:20200329161233761,creator:soren,es:likely,modified:20211208165901507,modifier:soren,tags:Systems Code Public Idea,type:text/vnd.tiddlywiki,text:Many computer systems nowadays depend on crazy amounts of other things. For instance, a typical webapp might pull down literally hundreds of Dependencies from npm. This makes them exceedingly interconnected and thus fragile|AntiFragility.\n\nScalesSkillsAndLeakyAbstractions is a TheControlAltBackspace article which touches on this issue.},{title:OwatonnaMinnesota,created:20200121032209041,creator:soren,gis-lat:44.08579742662683,gis-long:-93.22599983665994,gis-zoom:8,modified:20240306152357883,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Town of about 25,000 people about 40 minutes southwest of Northfield and 65 minutes south of the TwinCities. I lived here for four and a half years, after graduating from college at StOlaf in NorthfieldMinnesota and before moving|ConvinceMeToStay to Minneapolis|Minneapolis, working at TheFederatedInsurance as a Systems Developer.\n\nI highly recommend most aspects of Owatonna, especially if youre looking for the small-town vibe, but maybe even if youre not entirely sure. Reasonably priced, well-designed, surprisingly walkable/bikeable,\u003C\u003Cfnote \Well, if you live in the right place. There are some good places and some terrible places. I think mid-south side is the best, which gets you near enough to both downtown and Hy-Vee/Walgreens for an easy trip. North near downtown could be OK as well, but walking to Cashwise for groceries and pharmacy is much less pleasant than walking to Hy-Vee. Theres not really a grocery store downtown.\>> great set of local businesses, amazing parks system, nice people. 40--60 minutes drive on good highway from three major population centers (Mankato, Rochester, and the TwinCities), and the same distance from some great recreational areas.\n\nThe main reasons I left were because I didnt have any ties to the place after leaving Federated and so it didnt really make sense to stay, and because I wanted to try out a more urban lifestyle for a while. It was also hard to make friends as a young, single person; most everyone was older and/or already partnered. A place like Owatonna was exactly what I needed and wanted at the time in my life that I came, and could be what I need again in the future, but it wasnt at the time I left. No shade on the town.\n\nIf youre ever driving through Owatonna on US-14 or I-35 in the morning, stop at Wagners Lunch downtown and get a breakfast sandwich. They have no right to be as good as they are for something that costs $5 and is made from frozen ingredients! (Actually, there are quite a few solid restaurants in Owatonna. I sometimes miss them even living in Minneapolis, which has a great food scene.)},{title:PabstMansion,created:20240530224454899,creator:soren,modified:20240530224455557,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PalaceTheater,created:20220909134112053,creator:soren,gis-lat:44.947151603086,gis-long:-93.09674916980757,gis-zoom:16,modified:20240109032418733,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Historic live music venue in StPaul.},{title:PaleFire1962,author:Nabokov,bibliography:LifetimeReading,caption:Pale Fire,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035724,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1962},{title:PandemicInternet,created:20200410211659329,creator:soren,es:confident,modified:20210509005608085,modifier:soren,tags:Systems Code PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:The Internets purpose has changed in some interesting ways during the pandemic. Its now just about the only way many of us have of having contact with the outside world, or at least with certain people and ideas, depending on how draconian our SocialDistancing measures are or need to be. Its the only reason commerce hasnt entirely shut down (its still shut down enough to leave the economy in tatters, of course; cf. WorkInTheTimeOfCoronavirus) and the only reason that governments have been able to implement distancing to the extent that they have (in my opinion).\n\nIts been a bit slower than usual, unsurprisingly; but surprisingly everything has largely kept up! There have been scattered outages of various services, mostly those that suddenly got way more load than they normally do (e.g., videoconferencing services like TheZoom). Cloud infrastructure has kept up fine (presumably as most network services have to scale up, at least a few systems can scale back because nobodys using them, and presumably the providers also have a good deal of cold spare capacity available for situations like this; plus theres spot pricing which will just get priced right out of the market and free up capacity). Nobody has crashed spectacularly that Im aware of.\n\nLike I said, I am thoroughly impressed that everything is still running normally. I didnt expect systemic internet failures or anything, but I thought a lot more would be tested to the limit. I will say I dont think we could have done this twenty years ago, as an industry. Maybe even ten years ago. The understanding of the AgilePhilosophy and its associated methodologies and tools has made all of these systems for more resilient, and the cloud has made them scalable. For all there is to dislike about the cloud, it definitely is proving itself as an extremely valuable tool when its purpose is understood properly (cf. AppropriateTechnology, HammerAndNail).},{title:PandemicMood,color:#6c6cff,created:20200401224058626,creator:soren,es:possible,icon:$:/core/images/list-bullet,modified:20211208165911277,modifier:soren,tags:Index PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:The 2019--2021 coronavirus pandemic is bringing out some interesting parts of human nature and society as well as places where our particular societies and organizations and individual actions dont quite make it to some particular bar. Its also, at least in me, just causing feelings and realizations that we dont normally think about to come to the forefront. And its a time for reflection since we can hardly do anything else (cf. OnTheFarSideOfSilence202004)!\n\nHere are some ideas that stand out.},{title:PandemicSurvivorshipBias,created:20200804214413443,es:confident,modified:20210715023749265,tags:PandemicMood Anecdote Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Early in the pandemic I was remarking on how COVID-19 has some really annoying properties like long incubation time before you realize you have it. Why couldnt we have gotten something more tractable, I wondered?\n\nThen I realized that, umm, if it were easier //it wouldnt have become a pandemic//.\n\nSurvivorshipBias can be remarkably hard to think about.},{title:Pandemonium,created:20200909013510206,es:mythological,modified:20210617000309499,tags:PandemicMood Definition Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons term for the nationwide (partially worldwide) events beginning in March 2020, including the pandemic, the racial unrest, and the vitriol associated with the upcoming 2020 election. Its an extremely useful one!},{title:PanoramaPoint,created:20250618153304519,creator:soren,modified:20250618153305350,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PanPsychism,created:20200407031711758,creator:soren,es:possible,modified:20210709231031321,modifier:soren,tags:Neuroscience Public Idea,type:text/vnd.tiddlywiki,text:Idea that consciousness is a fundamental property of the universe. This can take many forms. MrPhilipPullmans idea of DustAndConsciousness is one well-known to me. MrDouglasHofstadters GodelEscherBach1979 discusses the idea of a StrangeLoop. And many others have had this idea throughout history.\n\nCf. IndependentAgency and ArtificialGeneralIntelligence.},{title:PAO,caption:A Person, Animal, or Organization exhibiting agency.,color:#ff0000,created:20200115231447676,creator:soren,icon:$:/core/images/tag-button,modified:20251011161536139,modifier:soren,refexplorer-hide:true,tags:Meta Public,type:text/vnd.tiddlywiki,text:\\define invalidFilter()\ntagPAO!prefixMr!prefixMs!prefixMx!prefixThe\n\\end\n\nTiddler type, the name of which stands for “Person, Animal, or Organization.”\n\nSee $:/tzk/Tools/MissingPeople to find PAOs that have been referenced but not had a tiddler created.\n\n!! Linking\n\nIf a person, animal, or organization is referenced anywhere in the wiki, it should virtually always have its name written ~CamelCase to create a PAO tiddler. The tiddler need not contain any meaningful content; it can be blank except for the title and the PAO tag. This is a matter of searchability -- if you do this, you can quickly jump to all tiddlers that mention a person if all you remember is the persons name, and you can move between ideas that mention the person using the ReferenceExplorer.\n\nSources should be connected to their authors by linking to the author or authors PAO tiddler somewhere in the body text.\n\n\n!! Naming conventions\n\nIn addition to being tagged `PAO`, PAOs should have names which begin with `Mr`, `Ms`, `Mx`, or `The`. The first three indicate a person/animal and indicate gender (`Mx` is for non-binary people or people of unidentified gender). `The` is used for organizations. Note that the titles of tiddlers which do not represent organizations should consequently not begin with //The// to avoid confusion; see OurNamingConventions.\n\n\n!! Tags and fields\n\nPs, As and Os need not be part of ConsensusPhysicalReality. When one comes from a work of fiction, it should additionally be tagged \u003C\u003Ctag Character>> and have its `universe` field populated with an appropriate universe key (see the explanation in Source).\n\n\n!! Private person replacement\n\nWhen building a private wiki using the `tzk` build tools, the `replace_private_people()` builder may be used to replace the names of people who arent tagged \u003C\u003Ctag Public>> throughout the wiki, in order to prevent anything you say about those people from becoming searchable on the web.\n\n\n!! In this wiki\n\nCurrently, there are \u003C$count filter\tagPAO\/> PAOs:\n\n\u003Cul>\n\t\u003Cli>\u003C$count filter\tagPAOprefixMr\/> male\u003C/li>\n\t\u003Cli>\u003C$count filter\tagPAOprefixMs\/> female\u003C/li>\n\t\u003Cli>\u003C$count filter\tagPAOprefixThe\/> organizations\u003C/li>\n\t\u003Cli>\n\t\t\u003C$count filter\u003C\u003CinvalidFilter>>/> folks with an unrecognized PAO prefix:\n\t\t\u003Cul>\n\t\t\t\u003C$list filter\u003C\u003CinvalidFilter>> >\n\t\t\t\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\n\t\t\t\u003C/$list>\n\t\t\u003C/ul>\n\t\u003C/li>\n\u003C/ul>},{title:ParadiseLost,author:John Milton,caption:Paradise Lost,created:20211026032601346,creator:soren,medium:book,modified:20211026032651636,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text:English epic by MrJohnMilton. I read this in TheGreatCon.},{title:ParadoxOfDocumentation,created:20200811132250243,description:As you learn more about a technology, its documentation usually becomes more useful, not less.,es:confident,modified:20210623022531860,tags:Information Systems Writing Software Public Idea,type:text/vnd.tiddlywiki,text:Stated simply, the Paradox of Documentation says that the more you know about a tool or technology, the //more// useful the documentation becomes. This happens because the documentation is difficult to understand when you dont have any background on the tool, and it tends to focus on details that arent helpful at the beginning.\n\nOther types of documentation could be useful for new users. The quick-start guide is one such type thats frequently used, but has the limitation that it only takes you through the very basics, on the surface, and doesnt really help you get any deeper into the details of the tool (what would be required to allow you to benefit from the rest of the documentation).\n\nSomeone I once read suggested that a quick-start guide should rather teach you about the assumptions and mental models used by the creators of the tool. I cant seem to find this anymore, but it was a great idea -- misunderstandings of these assumptions are the cause of most mistakes with the tool, and understanding them will be of great help in allowing you to figure things out on your own.\n\nIterativeReading is a broader concept that applies to most any topic.\n\nMrDavidAllen says that his GettingThingsDone is highly subject to this effect and even uses the software-manual example; see \u003C\u003Crt 10587>>.\n\nDiscussed at length in ParadoxOfDocumentationCab.},{title:ParadoxOfDocumentationCab,caption:The Paradox of Documentation,created:20200811132126196,medium:article,modified:20200811132241895,tags:Sink TheControlAltBackspace Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/documentation/the-paradox-of-documentation/,text:TheControlAltBackspace post on the ParadoxOfDocumentation.\n\n{{!!url}}},{title:Parallels,created:20200521193527171,creator:soren,es:confident,modified:20211107173703715,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Mac virtualization software that lets you run Windows applications and installations (along with Linux and others) on your Mac. Proprietary software, yearly subscription.\n\nIve been subscribing since I bought a Mac so that I have a Windows installation available for the rare occasions you really need it. Its a heck of a lot more convenient than rebooting my entire Linux PC and losing access to everything on it! And its //way// easier to use than VirtualBox or the like, enough that its worth the cost.},{title:ParentalCausation,created:20210628022630416,creator:soren,es:possible,modified:20220509014334456,modifier:soren,tags:Idea InterpersonalRelations Identity Public SorenConcept,type:text/vnd.tiddlywiki,text:Much of the emotional and practical business of parenthood can be usefully explained as //transitive causation//: we feel that anything our children do is something we indirectly caused. Similarly, if we create an object or an idea, we feel responsible for anything that object or idea is involved in. This probably isnt an earth-shattering realization, but I think its useful to point it out explicitly and give it a name|IdeaApi.\n\nThe overprovision of responsibility for our children|HelicopterParent is perhaps rooted in this as well, when it occurs -- we start trying to directly act for them.\n\nPerhaps oddly, I dont think this relationship is felt in reverse at all, at least not by most Westerners. We like making our parents happy, to be sure (at least those of us who have good relationships with them!), but we dont really feel like were an extension of our parents actions; were our own thing that continues on from here. (See also NoSuchThingAsSymmetricalRelationships.)\n\nEpistemic disclaimer: I am not a parent.},{title:ParkingMinimum,created:20231018133231605,creator:soren,description:Common but enormously destructive municipal policy where new developments are required to provide free parking spaces.,es:confident,modified:20231023132742402,modifier:soren,tags:Idea Cities Public,type:text/vnd.tiddlywiki,text:Well-meaning but misguided policy where new buildings need to provide a certain amount of parking.\n\nThis seems like a good idea because nobody likes not having somewhere to park, and large new buildings can result in making existing parking in the neighborhood tighter. Unfortunately, parking in urban areas is really, really expensive (actually, parking lots are surprisingly expensive to build and maintain even when the land is cheap), so these policies can prevent new housing and businesses from being built at all.\n\nFurther, minimums tend to be set without regard for local conditions. Someone might be required to build 2 parking spots for every apartment in an area where residents have on average 0.8 cars per household, for instance. This can usually be overcome, but you have to apply for a variance and do all sorts of complicated garbage, which prevents smaller developers from ever building anything.\n\nIts worth pointing out that parking minimums do //work//, if your definition of “working” is “its always trivial to find a parking spot in the area.” But they achieve that by creating a massive oversupply of an enormously expensive resource, paid for by everyone living in the area, including people who dont own a car. Even the people who do own cars would be unlikely to willingly pay the price if it was internalized -- one researcher in this area estimated|https://www.sightline.org/2013/08/28/parking-karma/ that the costs of building and maintaining our current amount of parking, added up across a city, are as much as all other car expenses combined per household.\u003C\u003Cfnote \An average car costs an average family about $10K per year to own and maintain in America.\>> Not only do the direct costs get externalized into housing costs, taxes, and more, high parking minimums create seas of empty space dedicated to parking that make your city unwalkable -- creating demand for more cars and more wildly expensive parking!\n\nIn reality, parking minimums are also unnecessary. The market does a pretty good job here, once government-subsidized and mandated free parking goes away -- if the amount of parking in an area is low enough that people become seriously annoyed, prices go up and people start building more parking because they can charge good money for it. And while its a little more convenient to park in a world with excessive amounts of parking, Id sure as hell rather spend a couple extra minutes looking for a parking spot on occasion than pay thousands of dollars a year in increased rent and taxes and live in a city whose urban fabric is destroyed by excessive parking! (APatternLanguage1977 says no more than 9% of city area should be dedicated to parking -- plus much of it should be hidden -- and this intuitively feels about right.)\n\nA large and growing number of cities have begun unconditionally repealing all parking minimums in the late 2010s and 2020s.\n\n\n!! References\n\nApartment Blockers: Parking Rules Raise Your Rent|https://www.sightline.org/2013/08/22/apartment-blockers/:\n\n> For one-bedroom apartments with two parking places, as is required in places including Bothell and Federal Way, Washington, as much as one-third of the rent may actually pay for parking.\n\nPlus:\n\n> Parking quotas shift the cost of storing vehicles from those vehicles’ owners into the rent of non-owners. By flooding the market for parking, quotas make it impossible to recoup the full cost of parking by charging its users.... You can’t charge $250 a slot, because the neighborhood is awash in mandatory parking stalls. Fortunately for you, the same parking quotas that have flooded the parking market are starving the apartment market, making it possible to charge higher rents.\n},{title:ParkinsonsLaw,created:20200303033244730,description:Work expands to fill the time available for its completion,es:confident,modified:20210623120156543,tags:LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:Parkinsons Law states that //{{!!description}}//.\n\nSimilar formulations include things like //expenses rise to meet income//.\n\nParkinsons Law has a corollary, the StockSanfordCorollary; like that corollary, Parkinsons Law has a real grain of truth to it.},{title:ParticipateInAllTheThings,created:20200330015703351,es:confident,modified:20210611030255998,tags:Imagination Health Public Idea,type:text/vnd.tiddlywiki,text:A destructive mentality occurring in middle- to upper-class American life right now: the theory that we need to keep our kids doing something structured at every hour of the day. That then carries through into college. (At least the young people I live with seem to have escaped it once they graduate, but childhood experiences are inescapable to one extent or another. Better late than never, but better not at all|BetterLateThanNever.)\n\nBelieve it or not, some quiet time is useful now and again! Or, time when you can learn to be independent and imaginative. Not to mention the impact on the parents (e.g., J.T.|PrivatePerson) who have to cart them around and pay for everything all the time.},{title:PartneringWithAnki2021,author:,caption:Partnering with Anki,completed:,created:20210616231737929,description:For best results, you should treat Anki as a study partner rather than a magic box that helps you remember things.,medium:article,modified:20210616231734032,readstatus:read,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/memory/partnering-with-anki/,year:2021,text:Blog post in TheControlAltBackspaces series on memory that discusses how you need to take an active role in working with Anki or any other SpacedRepetition tool. Anki, as a tool, is necessary but not sufficient (see RoleOfTools). You might be able to get some results out of Anki without being active, but you probably wont enjoy it and youll be leaving a lot of gains on the table.},{title:PascalCase,created:20200516011514534,modified:20201204041547923,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Term for CamelCase with an initial upper capital.},{title:PassingDangerPhilosophy,created:20200202033045583,creator:soren,es:likely,modified:20210509010405162,modifier:soren,tags:Process Risk Driving Public Idea,type:text/vnd.tiddlywiki,text:Sometimes I intentionally pass people on two-lane highways when I dont really need to and am not particularly impatient. By certain definitions, this is a poor risk to take -- two-lane overtaking is the most dangerous maneuver in ordinary driving, and I just said I didnt really need to!\n\nBut I think its actually smart. Point is, I dont do much driving out on these roads, so I dont have a lot of practice passing. Human psychology being what it is, at some points I will \need\ to (a.k.a., end up doing it), and if I dont have any practice doing so it is far more dangerous. Finding opportunities to practice where it is clearly mostly safe and Im in a good frame of mind helps me get an idea of how to manage the maneuver, what is safe, and what isnt, so when I do end up in that spot -- probably not in the best mental state -- Im not making it up.\n\nRelated to BringThePainForward, which says that if something is risky or difficult you should consider doing it more often -- though of course this is not going to lead us to find ways to automate passing other drivers, so its not quite as effective!},{title:PathOfLeastResistance,created:20200407183548292,creator:soren,es:likely,modified:20210509004021079,modifier:soren,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Its often very effective to attempt to set things up so that, when multiple paths could be chosen, the one you want is also the easiest. If you can pull this off, its highly unlikely the difficult and worse paths will be chosen!\n\nOften seen in encouraging people to set up their work environment to avoid distraction, avoid keeping unhealthy food in the house to avoid eating it, and so on. When you do this for yourself, it is known as deflecting resistance|DeflectResistance.\n\nThe AgilePhilosophy and its methodologies such as the ScrumMethodology make rethinking and fixing things the path of least resistance. The WaterfallMethodology makes giving in to ConfirmationBias and doing what you thought of first the path of least resistance. Guess which one yields better results in most cases?\n\nThe DesignApproach suggests a similar plan: look at whats actually likely to happen, expect that people will behave in a dumb way, and see what you can do to cater to that, to make it so that somebody cannot do the wrong thing rather than make them try to do it right.\n \nCf. PrincipleOfLeastAstonishment.},{title:PatternsOfCommunication,created:20200223152834452,creator:soren,modified:20200410220112106,modifier:soren,tags:Information InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:MrClayShirky identifies three patterns of communication in AGroupIsItsOwnWorstEnemy200304:\n\n* point-to-point (e.g., phone call, letter; cf. MoreCorrespondence)\n* two-way, one-to-many outbound (e.g., newspaper, TV)\n* two-way, many-to-many (e.g., group conversation)\n\nThe third pattern has been challenging to achieve outside of face-to-face interactions before the internet (as Shirky puts it, the only good technology has been the table). So we are now (in 2003, but Id argue still in 2020) trying to figure out what leads to good results in Internet-mediated environments.},{title:PatternsOfSoftware,caption:Patterns of Software,created:20200411005236629,creator:soren,medium:book,modified:20210606232741450,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:,text:Book of essays by MrRichardGabriel about software design and industry questions. Often credited with introducing the concept of SoftwarePatterns.},{title:PavedParadise2023,author:Henry Grabar,caption:Paved Paradise: How Parking Explains the World,completed:202405301200,created:20240811144248133,creator:soren,medium:book,modified:20240811151818964,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2023,text:Book by MrHenryGrabar about parking. Reading this, I was reminded of something MrAdamMastroianni recently wrote about MrPatrickMcKenzies financial blog //Bits About Money//:\n\n> If theres a prize for blog that sounds the least interesting when described compared to how interesting it is when you actually read it, Id like to nominate this one.\n\nYes, despite the apparent dullness of parking, this is a fascinating read (at least if youre interested in urban design). I already knew some of the problems with parking in dense areas, but the detailed treatment was still worth 300 pages. It includes all sorts of interesting digressions like discussions with parking garage owners in Chicago, too.\n\nGrabar summarizes the main policy improvements experts suggest:\n\n> Abolish parking minimums and let developers build the amount of parking their clients want. Break garage rents apart from apartment rents so carless tenants dont have to subsidize their neigbors driving. Recognize that more parking means less housing, espeically affordable housing. Let different uses -- an office and an apartment building, a school and a movie theater -- share parking. Charge for the best street parking, and use parking prices and enforcement not to generate cash and cycles of punishment but to manage city streets. Invest the proceeds in the neighborhood. Let architects design environments where people can walk. Ask drivers to bear some of the externalities of automobile use. And turn some of that extra parking into something new.\n\nIts really astounding just how much of many cities land area is taken up by parking. In Manhattan, among some of the most valuable real estate in the world, the vast majority of on-street parking spaces are free (even as, as recently as the mid-1900s, it was illegal to park on the street overnight). If New York removed 25% of its on-street spaces – surely a reasonable target – it would free up land equivalent to //thirteen Central Parks//. Surely New York can do something more useful with that land?\n\nGrabar has an interesting conclusion about why parking policy is so bad: people focus on free and easy parking because its a consolation prize for people who are priced out of actually //living// in nice, walkable areas. Reforming parking would make it possible for far more people to live in the places that would be their first choice (people often claim that lack of free and easy parking scares people away, but take just one look at real estate prices: across the country, the places where it is hardest to park are also the most valuable). But to get there, you have to go through some temporary -- but probably several decades long -- pain where it becomes harder to park, yet few people have moved yet and the city is still adjusting to the new rules of space. This makes a lot of sense.},{title:PayEverything,created:20201228041549148,creator:soren,description:An imagined world in which every trivial action has a cost; some seemingly effective real-world systems like this have negative cognitive effects.,es:possible,modified:20230303175305938,modifier:soren,tags:Business PersonalMythology InternetTheory Public Idea,type:text/vnd.tiddlywiki,text:One silly imaginary world I briefly had as a child was called “PayEverything,” in which you had to exchange money to do basically anything (e.g., go through a door? 5 cents). At the time I think it was something of a cool ThoughtExperiment; maybe I rather liked exchanging money.\n\nOf course taken literally this would probably be a dystopia|DystopianVision of some kind. But the whole concept seems relevant today in many places.\n\n!! Micropayments on the web\n\nIts hard to get compensated for small units of work with the rise of the internet. Micropayments seem like a solution to many of these problems, but I think part of the reason they havent caught on is that it feels like PayEverything: every time youre prompted to pay money for something, that prompts a decision, and not only is it irritating and distracting to constantly be wondering if its worth 50 cents to view an article, then you feel like youre being nickeled and dimed all the time. That makes people feel negatively towards the scheme, and even negatively towards compensating creators for their work, even if they wouldnt have those feelings if the exchange happened in a different way (e.g., few people have a problem with paying $20 for a book, but most wouldnt enjoy being prompted to pay for 40 articles at 50 cents each, even though there is almost certainly more useful information in 40 good articles than one $20 book).\n\nThe obvious solution to the decision fatigue is to allow payments to happen in the background, but Im not sure this is a viable mechanism unless the means of determining how people are paid changes a little bit. Even Im not sure I would be comfortable with the computer automatically paying money to people as I browsed the web -- it could add up really fast if you werent paying attention! Obviously you would include limits like \dont pay more than $1 for an article,\ or \if I spent more than $5 today, prompt me,\ but any system like that will have some weak spot.\n\nThe subscription service exists today and solves those problems, but nobody seems to have found a way for a general subscription service (e.g., streaming music) to give a sufficient amount of money to the creators on the platform to support a normal standard of living for most; instead it deepens the Internets WinnerTakeAll trench. The possible exception is Substack|TheSubstack, but I am deeply skeptical that the amount of money they are giving authors to attract them to the platform is sustainable.\n\n!! Other financial decisions\n\nTransit often feels expensive, because every time you ride you tap your card and it tells you how much youre spending. Driving your own car never feels expensive, even though it is in fact far more expensive than taking transit, because you dont think about the cost at the point of use; it comes to you as unavoidable bills you cant make decisions about at other moments (gas is a partial exception, but even here, you generally go \oh, I need gas\, and the need isnt connected to a particular trip). In general, paying for anything at the point of use makes you question whether you actually want to do it. Sometimes this is good (if you had to pay every time you posted something on social media, I bet life would be better). Other times its bad. This dynamic is very important to think about when designing payment models.\n\nSee also DirectPrimaryCare: when you get your doctors visits by prescription, youre incentivized to go to the doctor whenever you have health issues, since you dont have to pay anything, and your doctor is incentivized to keep you healthy, since then you wont have to visit and she gets paid the same amount either way. The incentives are generally the opposite in a conventional system!},{title:PeanutButterJellyLogistics,created:20200515024540687,es:likely,modified:20200712225508638,tags:PandemicMood Systems Public Idea,type:text/vnd.tiddlywiki,text:As research towards a workable COVID vaccine grinds on, people are starting to talk about what to do next once we find one thats safe and effective (as it seems likely we will, sooner or later). This is actually a much, much harder problem than it looks, because we have to make one for basically //everyone in the world//, or at least everyone in parts of the world that are suffering and can afford the vaccine, which is still at least in the same order of magnitude.\n\nLets suppose that were not trying to produce an enormously complicated vaccine that has to be safe enough to inject into billions of peoples arms, kept under temperature control, completely sterile, etc. Lets just suppose that everyone in the world has to go make a peanut-butter-and-jelly sandwich -- this is still going to be enormously difficult! Some people will already have the ingredients in their house, and they can just make one, no problem. But if even 10% of people dont (and when we go worldwide, outside of cultures where this is a common food, its going to be way more), that accounts for a solid 100 million to 1 billion (order of magnitude) people having to go to the store and buy one or more ingredients. Does Wal-Mart have millions of jars of peanut butter stocked worldwide? I dont think so! Were probably going to be waiting for the peanut-butter factories to catch up for a good year.\n\nCf. Great2020ToiletPaperShortage.},{title:Penetrex,created:20200511031235154,creator:soren,es:possible,modified:20250309161236851,modifier:soren,tags:Health Drug Idea Public,type:text/vnd.tiddlywiki,text:Medicated ointment for inflammation that Ive used to help with my KeyboardingTendinosis when it gets nasty.\n\nI am not sure whether it actually does anything. It has great reviews, but almost anything can. Its composed of a cocktail of all sorts of things, some of which seem plausibly anti-inflammatory, but who really knows?},{title:PennValleyPark,created:20240811143545869,creator:soren,modified:20240811151659083,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PeopleAndTheirPhones,created:20200202003015424,es:likely,modified:20201121031634024,tags:Psychology DystopianVision InterpersonalRelations Public Idea,type:text/vnd.tiddlywiki,text:@@.right-float\nimg width500 PeopleAndTheirPhones.jpg\n@@\n\nI took this photo in StavHall one day fall semester of my senior year. It was so perfect because everyone had basically the same phone and had it sitting on the table next to them (except, of course, the one person who had gotten up to get something and taken it with them).\n\nIn case you wonder what I think about this, uh, people shouldnt all have their phones out while engaging in social interactions. If you want to look something up thats relevant to the conversation or quickly respond to a text, cool, but keep it out of sight if youre not using it...phones are to be used AsMuchAsNeededAndAsLittleAsPossible, //especially// when purposefully engaging with other people in ConsensusPhysicalReality. Keeping phones on the table at all times is not AppropriateTechnology.},{title:PeopleAndTheirPhones.jpg,type:image/jpeg,created:20200202004444986,modified:20200202004457591,tags:Image Public,_canonical_uri:./extimage/PeopleAndTheirPhones.jpg},{title:PeopleDontKnowWhatTheyWant,created:20200406030207003,creator:soren,description:People are often, if not usually, wrong about what they want; live in a way that allows you to recognize when youve been wrong.,es:confident,microlink:want,modified:20251208043628813,modifier:soren,tags:Psychology Design PhilosophyOfLife Public Idea Favorites Romance,type:text/vnd.tiddlywiki,text:People often think they know what they want, but they often, if not usually, turn out to be wrong. Never assume that someone, including yourself, will know what they want -- out of a product, a place, a person, a community, a job, an experience, or life in general -- or understand the consequences of getting it. \n\nIn a way, I think this is freeing and empowering: knowing that most people usually dont have the right answer about what they want frees you from a lot of responsibility to yourself. That said, this suggests a right and a wrong way to go about life -- if you pick the wrong way, it will be frustrating, or even catastrophic, rather than freeing.\n\nThe wrong way is to assume you know exactly what you want, go all in on that, and refuse to change your mind. This works great if you turn out to be right,\u003C\u003Cfnote \Although Tamara argues in “Flirting With the Future”, quoted in the references, that “goals achieved without flirtation are sterile.” Perhaps achieving only precisely what you set out to do, with no changes and no side quests, is inherently unsatisfying anyhow.\>> but if you usually dont know what you want, that means youll usually be wrong, and have ended up overcommitting yourself (see AgileHumility). Fortunately, various philosophies and plans such as the FlaneurMethod can leave other options open even as we pursue what we think we want, reducing the consequences of being wrong, hopefully to almost nothing|SmallBets.\n\nPut another way, we should explore the future|ExploringTheFuture, not try to make it match our vision. Go in the direction you think you want, but stay as open as possible to how you actually feel and whats actually happening around you, and dont be afraid to switch directions if another direction ends up feeling better. (See PlanningCycle.) It can also be useful to seek to //falsify// your ideas about what you want. Supposing you were wrong about what you wanted, what would be the fastest way to find that out? TryItAndSee.\n\nSome forms of modern technology expect people to know what they want in order to quickly find things. When people are wrong about what they want, it then appears that theres nothing good out there despite so many options being available that this seems impossible. For instance, GoogleMaps or Yelp makes it really easy to find a place to eat or a tourist attraction near you that matches what youre looking for, but there are probably options that youd like as much or better that wont show up in the results because you searched for something more specific than what you really would have wanted (see XyProblem). Online dating is very similar, and likely more dangerous given the long-term implications of choices made there! This may be a contributor to MaslowsHourglass, and I think it is disenchanting and sterilizing the world.\n\nYou usually should not try to change the world|DontTryToChangeTheWorld because it is difficult to do so in the first place, and people who succeed at doing so are rarely trying to.\n\n!! References\n\n\u003C$m2.x number\1\>\n\nMrNassimNicholasTaleb rants in BlackSwan:\n\n> People cant predict how long they will be happy with recently acquired objects, how long their marriages will last, how their new jobs will turn out, yet its subatomic particles that they cite as “limits of prediction.” Theyre ignoring a mammoth standing in front of them in favor of matter even a microscope would not allow them to see.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\nMrJosephCampbell, quoted in MrDerrenBrowns HappyAbsolutelyFine2016:\n\n> There is perhaps nothing worse than reaching the top of the ladder and discovering that youre on the wrong wall.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\n\nMsSaraTeasdale, “A Tale of Two Knights”:\n\n>\\\\nTwo knights rode forth at early dawn\n A-seeking maids to wed,\nSaid one, “My lady must be fair,\n With gold hair on her head.”\n\t\nThen spake the other knight-at-arms:\n “I care not for her face,\nBut she I love must be a dove\n For purity and grace.”\n\nAnd each knight blew upon his horn\n And went his separate way,\nAnd each knight found a lady-love\n Before the fall of day.\n\nBut she was brown who should have had\n The shining yellow hair---\nI ween\u003C\u003Cfnote \To be of the opinion that; think.\>> the knights forgot their words\n Or else they ceased to care.\n\nFor he who wanted purity\n Brought home a wanton wild,\nAnd when each saw the other knight\n I ween that each knight smiled.\n\\\\n\n(Food for thought: If the knights had been using Tinder, they wouldnt have found their lovers.)\n\u003C/$m2.x>\n\n\u003C$m2.x number\4\>\n\n\u003C\u003C\u003C\n\\\\nOne day shes satisfied\nAnd the next Ill find her crying,\nAnd its nothing she can explain.\n---“If She Knew What She Wants|https://www.youtube.com/watch?vmu_pNeqAQ-U”, TheBangles\n\\\\n\u003C\u003C\u003C\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\5\>\n\n\u003C\u003C\u003C\nIt is a strange spiritual impoverishment: the belief that the future needs to be bullied into compliance, forced into linearity, or, perhaps even worse, cajoled into materialising exactly what we think we want, as though what we think we want is not, nine times out of ten, the shallowest interpretation of a deeper longing we have not yet found the courage to name.\n\n---“Flirting with the Future|https://museguided.substack.com/p/flirting-with-the-future”, Museguided\n\u003C\u003C\u003C\n\n\u003C/$m2.x>},{title:PeopleDontThinkTheyCanDoThings,created:20211009031147153,creator:soren,description:Even in adverse circumstances, people //can// accomplish things, even difficult ones, and they should act accordingly.,es:likely,modified:20231016182552177,modifier:soren,tags:Politics PhilosophyOfLife Design Idea Public,type:text/vnd.tiddlywiki,text:I believe we have a society-wide epidemic of //learned incompetence// (often based on no actual evidence|ReprogrammingMyIdentity). We believe that we, our kids, our friends, disadvantaged groups around us, and our societies are not capable of very much.\n\nAnd you know what? Were right. If we believe that we cant accomplish anything, we wont. Because well never get started|JustGetStarted. As the saying goes, a journey of a thousand miles begins with a single step. Even a journey of a hundred feet begins with a single step, but you wont even do that if you think putting your feet on the floor is pointless.\n\nNow this is not to say everything we might want to do is equally easy, that solutions to problems we encounter are free of side effects|ConservationOfProblems, or even that all problems are solvable at all; many arent|ProblemsAndPredicaments. Ironically, though, we seem to have the most confidence in the solvability of some of the most difficult problems. Many people believe that ClimateChange, perhaps the most serious obvious problem|BlackElephant of our times, can be fixed sooner or later because “well figure something out” (insert vague hand-waving here) to replace fossil fuels with. Yet God forbid people deal with slightly insensitive comments without permanent emotional damage, or our children have to share a room with a sibling \nor do anything without an adult present until theyre 18 years old, or survive on a below-average income, or heck, even make a telephone call|PhoneAnxiety and talk to another real person.\n\nYou know what? Many of these things and others like them are, in the grand scheme of things, utterly trivial. Many, many more are difficult but entirely doable. Human beings did not take over this planet by being snowflakes with no agency. Most of the problems average people face have already been solved, and need only a little bit of work to adapt them to new contexts. If someone has solved it once, thats a good indication others can solve it again.\n\nTo be clear, it is possible to end up in a large enough hole, with regard to ones mental and emotional state, skills, and/or worldly resources, that trivial tasks become difficult and difficult ones impossible. And it doesnt mean that its //fair// that people have to struggle to get by, or deal with others making rude comments to them all the time. Nor does it mean that people who fail in that struggle are worthless or solely responsible for their own plight. It is both valuable and morally correct to strive to fix the design of things|DesignApproach when possible so that we can get out of some of the more frustrating and difficult problems entirely. But when that hasnt happened yet for the problem we face, we shouldnt wait for someone else to solve the problem for us. We should trust in the ability of one or (better yet) several determined people working alone to do surprisingly difficult things|SelfBelief, and we should use that trust to go take responsibility for making things better for ourselves.\n\nWould it be nice if we never had to feel offended, always had as much space to ourselves as we wanted, never had to take any risks, and were always given our fair share of everything? Actually -- //no//. That would be a terribly boring world.|NoMeaningWithoutFailure People are made to struggle and find a way through. Weve been doing it for tens of thousands of years: we look at how things are, notice that they suck, and try to make them a little better. Its what were good at and its a source of happiness and meaning.\n\nYou share a responsibility for making the world better with the external People Who Improve The World. You are not helpless. Your job is to take the situation youve inherited (or landed yourself in, for that matter), however unjust or difficult it may be, and make the best you can out of it. If you take this responsibility seriously and realize how much power you have, you may accomplish much more than you thought you could. Even if you dont, you can rest easy in your failure knowing that you really tried your best. If you do nothing, youll never know|BeBold if you could have fixed it.\n\n(//Political summary//: both the traditional conservative platform and the traditional progressive platform are wrong on this point. Conservatives err in recommending individual grit and ingenuity as a long-term, nationwide solution to systemic problems which deserve systemic fixes, while progressives err in ignoring the fact that people can in fact make good things out of bad situations in the meantime and should be encouraged to do so and considered partially responsible when theyre capable of doing something and dont. We like to argue over whether we should “blame” society/the government or the people who arent doing well, but there is no single cause or party to blame. Blame is a terrible way to solve problems.|BlamelessCulture)\n\n!! References\n\n> Only if someone makes a serious, concerted, and sustained effort at something, and still fails, have they earned the right to complain that it is too hard.\n> ---comment on the MMM|MrMoneyMustache blog|https://www.mrmoneymustache.com/2011/10/07/how-to-tell-if-youre-a-complainypants/ (counterpoint: complaining first might help you make an effort|ComplainFirst)\n},{title:PeoplePlaceMission,created:20231011033511557,creator:soren,es:mythological,modified:20231022210146387,modifier:soren,tags:Idea SorenConcept PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:A model of the world and how to live|HowToLive2021 I like to use. There are three factors that make a life or an activity good:\n\n* People: People make everything happen. Other people are the key factor in your happiness. Figure out what you like in people, who best meets what needs and wants, find people that match, and commit to them. (Of course this is an IterativeProcess.)\n* Place: Everything happens in a particular place, physical and/or virtual. Places can be objectively good or bad in various ways, and they can also be particularly good or bad for specific people trying to do specific things. Pick places that are objectively conducive to human thriving, that attract the other people you want to be with, and that fit you and your needs. Move around throughout your life and your days as needed to be in the right places, but also dont be afraid to commit to good places.\n* Mission: Youre trying to accomplish some things for some reason -- career goals, experiences, the promotion of values. People and places both suggest missions and, when carefully selected, allow for their fulfillment.\n\nAt the intersection of people, place, mission, and time (present in everything), is, of course, story, the details of what you do and what happens to you.},{title:PeoplesHistoryOfComputing,caption:A Peoples History of Computing in the United States,created:20200410164655029,creator:soren,format:ebook,medium:book,modified:20210606223217788,modifier:soren,owned:yes,rating:skimmable,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,text://{{!!caption}}// is a book by MsJoyLisiRankin about a neglected period in computing history, when time-sharing systems were introduced and made available to anyone in a particular community or even the public at large. The systems were based on BASIC and people figured out how to use them. There was talk about computing being a public utility. Then money and the PC came in, and it all evaporated.\n\nA fascinating subject, but the author was almost able to make it seem boring, to my great disappointment. The book had no thesis that I could identify other than \nobody else has talked about this, so Im going to,\ including extensive discussion of the computing gender gap and ColdWar gender roles -- something Im deeply interested in -- without any real point about how exactly this happened or what we could do about it today. It didnt really even tell a story. And I read history for what it tells me about today. This made no attempt to do that at all.\n\nThe concept of the ComputingCitizen, at least, is one that I very much appreciate and will be using myself.\n\nRead on Kindle.},{title:PerfectChristmasFestival,created:20200125225951575,creator:soren,es:mythological,modified:20211202021718702,modifier:soren,tags:SorenConcept PersonalMythology Music Idea Public Religion,type:text/vnd.tiddlywiki,text:An element of PersonalMythology that I dreamed up one year while I was sitting in the bleachers at The StOlafChristmasFestival listening to other groups between my turns to sing: if some year, some performance, every element of the Fest was flawless|Perfection from beginning to end, Jesus|MrJesusChrist himself would return to earth in SkoglundGymnatorium.\n\nOf course, this is not possible: the Fest will never be flawless. There are always improvements possible, because everyone involved is human, even if very, very good at what they do. But in some sense this is deeply believable to me, just because of what I feel being at a non-perfect Fest, and I like thinking about it.\n\n(Its interesting to try to explain what it means that I //believe// this. Obviously I do not literally believe that the eschaton is waiting on my alma mater to get good enough at music, or that there are any cosmic or theological facts or arrangements or divine agreements that mean that this is theoretically possible, if practically|TheoryAndPractice impossible since perfection is impossible. I completely made it up. But at the same time, it doesnt feel remotely silly. It feels true in the sense that the myth expresses truths about the process and the experience of doing the concert and its meaning for those singing, playing, and listening.)},{title:Perfection,created:20200323031012900,creator:soren,modified:20200411031611631,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:Perfection is a curious topic: difficult to define and something which we all can identify and understand perfectly until we try to explain it (just like MrAugustine said of the nature of time).\n\n!! On the nature of perfection\n\n* PerfectionIsSubtractive -- on how perfection, or even nearing it, never consists of adding //more//.\n* PerfectChristmasFestival -- if this were possible, what would it be like?\n* PerfectIsTheEnemyOfGood -- giving up the aim of perfection leads to better results: which seems to make the idea of perfection logically inconsistent with itself.},{title:PerfectionIsSubtractive,created:20200212135714132,creator:soren,description:Perfection is achieved when there is nothing left to take away.,es:confident,microlink:negativa,modified:20240716125907371,modifier:soren,tags:Systems Design Public Idea Index,type:text/vnd.tiddlywiki,text:A perfect|Perfection (or beautiful, or likable|LikableSoftware) system is achieved, not when youve run out of nice things to add, but when youve added exactly all of the things you cannot do without and no more -- or, AsMuchAsNeededAndAsLittleAsPossible -- or, when “theres nothing left to take away.” Occasionally this even means the system simply should not exist! In the best case, it will result in a deceptively simple|DeceptiveSimplicity system. The subtractive approach is sometimes called //via negativa//.\n\nThe smaller something is, the more attention can be given to Polishing it, the less complicated the resulting MentalModel, and the fewer opportunities for mistakes and suboptimal choices. The simpler mental model is particularly important: theres a limit to the complexity that a human mind can easily appreciate and work with, as well as a limit to the complexity that can be hidden in any system (see AbstractionsLeak), so a well-engineered item that fits neatly in ones short-term memory will inevitably be perceived as more perfect than one that doesnt, even if the actual quality is identical.\n\nSome manifestations across disciplines:\n\n* With regard to software, see AvoidScale and NoCodeAtAll.\n* With regard to life, see EfficientLife.\n* With regard to tasks, see UnneededTodo and RejectMostSuggestions.\n* With regard to indexes, they typically improve when the number of references in them (and in particular the number of references in each entry) is more limited; see CompleteTagging.\n* With regard to government, see ideas in LargeGovernmentVsVoluminousLaws.\n\nThe fact that perfection is subtractive need not be disappointing or demeaning. Subtraction is an art -- indeed, a more difficult one than addition. As MrBlaisePascal infamously put it, in translation:\n\n> I have made this letter longer than usual, because I did not have time to make it shorter.\n\nAntiFragility (an organic method of approaching though never reaching perfection) can occur by curation|AntifragilityByCuration.\n\n!! Why isnt removing things more popular?\n\nPeople seem to have a natural tendency to solve problems by adding things, rather than subtracting them; for whatever reason it is just more natural (maybe its a creative impulse?). A series of eight experiments|https://www.nature.com/articles/s41586-021-03380-y recently provided some lab evidence for this. So its useful to develop values and processes that prompt you to consider removing things.\n\nMoreover, the philosophy is often underrecognized and underrated because taking something away rarely sells well or seems profound. Even minimalism, though popular, cant do much more than sell a few books and look hip. As MrJamesClear points out:\n\n> Fasting seems foreign to many of us simply because nobody talks about it that much. The reason for this is that nobody stands to make much money by telling you to not eat their products, not take their supplements, or not buy their goods....The result is that it seems somewhat extreme or strange, even though its really not.\n> ---MrJamesClear, “The Beginners Guide to Intermittent Fasting|https://jamesclear.com/the-beginners-guide-to-intermittent-fasting” (\u003C\u003Crt 12526>>)\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\nIf you want to write something perfect, write a Haiku. Anything longer is bound to have a few passages that dont work as well as they might.\n\n---MrPhilipPullman, DaemonVoices\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\nIf you remove all the things you dont want to fill your life with, then it will fill with the good stuff. Sometimes the good stuff is just silence.\n\n---MrHenrikKarlsson, “Internet: A users manual|https://escapingflatland.substack.com/p/internet-a-user-manual”\n\n\u003C/$m2.x>},{title:PerfectIsTheEnemyOfGood,created:20200323031443465,creator:soren,es:likely,modified:20211228152746690,modifier:soren,tags:Logic Expression Public Idea,type:text/vnd.tiddlywiki,text:An attempt to achieve Perfection can easily result in a poorer-quality result. We might insist on using a WaterfallMethodology where it isnt advisable because we feel like were more in control (cf. CounterintuitiveEfficiency), or we might never release something at all (see ShippingIsAFeature). We might not even get started|JustGetStarted at all.\n\nPerfect being the enemy of good seems to suggest that the idea of perfection is in fact logically inconsistent. If aiming for the best possible result means you get a worse result, is perfection even a thing? It seems we have just disproven its existence!},{title:PerformanceQualityRelativity,created:20200330023517538,es:confident,modified:20210509011930316,tags:SorenConcept Psychology Music Public Idea,type:text/vnd.tiddlywiki,text:A strange thing I have realized over the years being a musician, particularly in TheStOlafChoir: especially in a group performance but even in a solo performance, your analysis of how good the performance was is often largely if not completely inaccurate. I believe there are several components to this bias:\n\n* You naturally judge the performance based more on how you sounded than on how the ensemble sounded. If you had a particularly crappy night, chances are the group did more average than you (due to RegressionToTheMean) -- and vice versa.\n* Your mental state can have a huge impact. Experienced performers know that if you muff your first entrance, that can follow you the rest of the night if youre not careful. If you do something like this, or youre distracted, you may be doing only slightly worse than youre capable of but //feel// like its much worse. And on the contrary, if you feel like you hit everything perfectly, chances are some things dont sound as great as you think!\n* Its just hard to accurately judge how you sound while youre performing -- both due to acoustics and due to what you have to think about. The only way to truly know is to listen to a recording.\n\nThe TwentyFourHourRule can help prevent this bias from escaping into the way you interact with audience members and other members of an ensemble.},{title:PerformanceReview,created:20200322173549866,creator:soren,es:confident,modified:20201204041547944,modifier:soren,tags:Definition Business Public Idea,type:text/vnd.tiddlywiki,text:The classic business ritual. Usually pretty useless except for the company to point at as a reason they fired you or gave you a particular salary adjustment. If a PR actually gives you information you didnt have before, your supervisor was doing a poor job of giving you feedback at the time it was actually useful|ImmediateFeedback!},{title:PerHundredFlushingToilets,created:20201209031727633,description:Data without a scale or basis of comparison should be interpreted as “per hundred flushing toilets.”,es:confident,modified:20210623022632073,tags:Math Reasoning Humor Public Idea,type:text/vnd.tiddlywiki,text:DataIsDangerous when the data doesnt provide a meaningful basis of comparison.\n\nA book on data visualization I once read, discussing the importance of including units on your graphs and charts, said that if you dont see a unit of comparison on any statistic, you should read it as “per 100 flushing toilets.” This has served me quite well -- statistics without bases of comparison usually make approximately that much sense!\n\n//Example//: I received an ad in the mail today from Liberty Mutual saying I could “save $586” on my car insurance...per hundred flushing toilets?},{title:Perl,created:20200712034514976,modified:20200712034711589,tags:ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:Popular programming language in the late nineties and early aughts, particularly for string manipulation and short scripts too complex for Bash and too simple for a lower-level language. Performance excellent.\n\nWas mostly supplanted by Python as it became popular, due to Pythons more attractive syntax and increased simplicity and straightforwardness. It still exists and is well-maintained, but will likely no longer be popular.},{title:PermanenceUnnecessary,created:20210613203926970,creator:soren,description:Its OK for things not to last forever.,es:likely,modified:20251009030106984,modifier:soren,reviewed:20230625,tags:Idea Psychology Business LifeDirection Public,type:text/vnd.tiddlywiki,text:Many people have a bias|CognitiveBias towards getting used to things and continuing them forever. This bias afflicts them both when beginning things and when ending them. There may be some element of sunk costs here, but mostly I think its just that people get used to what they presently do, or think they will in the future get used to what theyre considering doing, and then we just dont like it when things end.\n\n* When beginning things, people are unwilling to TryItAndSee because they arent sure they want to commit to doing them forever. But they dont actually have to.\n* When ending things, people think its a terrible shame that theyre not doing something anymore, because it was good while it lasted. This doesnt just happen when the thing is still good but the opportunity cost is still high, it happens even when the thing has outlived its original usefulness and no longer makes sense to do at all.\n\nIn reality, it often makes sense to do something only for a short period of time -- or a long period of time -- and then stop doing it. Life is naturally composed of these phases. (At a minimum, your life as a whole is limited to a certain period of time, and thats actually important to make it meaningful|DeathIsNecessaryForMeaning.) If youre 25 years old, there are probably things youd like to do now that you wont want to do when youre 65, and thats fine. You may have a business now that youll eventually want to close down. There is nothing wrong with endings and we should consider them expected and even positive, when we choose to end things on a positive note.\n\nA related maladaptive pattern of thought is considering things ending or passing out of someones life to represent //failures//: say, breaking up with a romantic partner, closing a business that wasnt profitable and enjoyable to run, or leaving a religious practice. But contrast finishing a four-year college degree, moving to a new city, or coming to the end of a teenage summer romance. Nobody would ask you, “Why did living in New York go wrong for you?”,\u003C\u003Cfnote \One way to put this is that moving to a new city most often happens because you wanted to live somewhere else, rather than because you //didnt// want to live in your current city (of course, the latter does happen occasionally). Nothing went wrong, its just that it was no longer the best option for you, and not because of anything that option did wrong, because of how you and the other possibilities out there changed.\>> or “Why arent you still with your high-school sweetheart?” -- because its widely understood that people often do these things for part of their lives and then move on to something else, and that doesnt mean anything was wrong with the things themselves. But the only difference between these two sets of events is peoples expectations! Treating endings as failures is a recipe for experiencing completely unnecessary pain, beating yourself up over things that werent actually mistakes, and forming inaccurate beliefs about what youre capable of and where your life might be going next.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> A standard of success for a co-operative is that it provide meaningful benefits to its members for a period of time. It would be a mistake to say a co-operative is a failure if it ceases business.\n---“The Meaning of Rochdale|https://web.archive.org/web/20120111091547/http://www.usaskstudies.coop/pdf-files/Rochdale.pdf,” \u003C\u003Crt 13242>>\n\n\u003C/$m2.x>\n\u003C$m2.x number\2\>\n\n> Even before the last day, you can look forward to finality, too. I love racing, but Im also drawn to the day when the reflexes finally start to fade, and Ill hang up the helmet. One day I will write the last line of Ruby code, too. Sell the last subscription. Write the last tweet. How merciful.\n---MrDavidHeinemeierHansson, “To Hell With Forever|https://world.hey.com/dhh/to-hell-with-forever-a7e9099d”\n\n\u003C/$m2.x>},{title:PersonalAbbreviationSystem,created:20200331235002478,creator:soren,es:confident,modified:20221222185925534,modifier:soren,tags:Information Writing PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:My personal abbreviation system consists of four systems slapped together, all mixed with unadulterated English words:\n\n* DuttonSpeedwords (or, my slightly modified brand thereof, q.v.).\n* A set of Greek letters that represent longer morphemes (for instance, a terminal sigma represents `-tion`, while a capital beta represents `-bility`). See Greekification.\n* A set of custom-made symbols called //swashes// that represent common words that dont have obvious and as-easily-written equivalents in another system (e.g., \should\).\n* A set of standard personal abbreviations, which are partially chronicled in a cardfile at CrystalApartment.\n\nHaving the PAS makes it much easier to hand-write anything and take notes, boosting speed by a solid third and making everything feel easier. Ive also been able to incorporate a handful of cool things Ive made up that you cant do in standard English, like HierarchicalAmpersands.\n\nIt is rather difficult for anyone else to read my notes, which is mostly a bonus! I dont make the system a secret -- in fact, I have a YouTube video describing it -- but you would have to intentionally learn it first if you wanted to snoop.\n\nI have a chalk-talk demoing the system on my YouTube channel:\n\n\u003Ciframe width\500\ height\300\ src\https://www.youtube.com/embed/cK0PRU0aYC0\ title\YouTube video player\ frameborder\0\ allow\accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\ allowfullscreen>\u003C/iframe>},{title:PersonalAttributesQuestionnaire,created:20240320221011586,creator:soren,es:confident,modified:20240320221554832,modifier:soren,tags:Idea PersonalityAssessment Public,type:text/vnd.tiddlywiki,text:Gender role measure similar to the BemSexRoleInventory. This measure wins an award from me for Least Informative Name.\n\nI couldnt immediately find an online questionnaire version of this when I wanted to look at it, but I found a pdf version and scored it myself:\n\n* Instrumental (Masculine): 30/40\n* Expressive (Feminine): 31/40\n* Androgyny: 21/40\n\nResults more or less identical to the other test – just about even, moderate total score, and with a very, very slight preference to the feminine.\n\nI dont understand exactly how to interpret “androgyny,” and it seems that most researchers dont either because apparently most people dont score that axis anymore.},{title:PersonalBubble,created:20200410221225363,creator:soren,es:likely,modified:20210509005427008,modifier:soren,tags:Psychology Sociology TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:Todays social media and other technological tools are able to use complex algorithms to deliver us EXACTLY THE CONTENT WE WANT. Or thats the idea anyway. This concept has been rightly criticized for limiting how much contact people have with opposing ideas, hence strengthening ConfirmationBias and (quite likely) increasing animosity and political polarization. Of course, it also decreases randomness, which we need and often even like (see SurpriseMe). I suspect it also affects who we come to know, probably reducing opportunities for CrossClassConnections.\n\nNow the idea that algorithms optimize for //our// benefit is false too: see MonetaryAlgorithmOptimization.},{title:PersonalDocumentation,created:20200323032608409,es:confident,modified:20210617000021521,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:My umbrella term for information systems written and maintained for oneself.\n\nI am trying to build a list of important people who have had such systems: NoteCollectors.},{title:PersonalElectronicNotebook1996,author:Thomas Erickson,caption:The Design and Long-Term Use of a Personal Electronic Notebook: A Reflective Analysis,completed:20221129,created:20221130000454950,creator:soren,medium:article,modified:20221130000658576,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1996,text:“{{!!caption}}” is a paper on an early personal note-taking system written in HyperCard, developed by MrThomasErickson at Apple.\n\nI have the PDF and a handful ofnotes in my RemNote KB.},{title:PersonalityAssessment,color:#6c6cff,created:20201026154430924,es:likely,icon:$:/core/images/list-bullet,modified:20210509005905624,tags:Public Psychology PersonalMythology Idea,type:text/vnd.tiddlywiki,text:List of frameworks that describe me, usually including some aspect of my results:\n\n\u003C$macrocall $namelist-links filter\allcurrentgettitletagging\/>\n\nWhile identifying your position on someone elses spectrum can be somewhat limiting (see NoLabelsPhilosophy), it can also be profoundly enlightening at times, removing you from a state of HypoCognition.\n\nIts often argued that people read too much into these analyses by picking out only the parts that describe them and ignoring the rest, making them look like they do a better job at describing people than they do. Im going to break the mold and ask, even if this is true, does it actually matter? As long as you arent using it to make national-security decisions without talking to the person or something, it can help you think about yourself, or help others think about you, even if you pick and choose from the results -- and thats, well, //the goal// of the assessment.},{title:PersonalizedViabilityOfPlatonicFriendships,created:20211107025805570,creator:soren,description:Can people capable of being attracted to each other be “just friends”? It seems to depend on the people.,es:likely,modified:20230908140829686,modifier:soren,tags:Idea Romance InterpersonalRelations Psychology Public Friendship,type:text/vnd.tiddlywiki,text:Ive concluded that there are two types of people in the world: those who think that its impossible for straight men and women to actually be “just friends|PlatonicFriendship” with each other (at least at a certain degree of closeness, e.g., often hanging out one-on-one), and those who think that people who think //that// are immature, hypersexual|FactorsInfluencingSexualAttitudes, lacking self-control, and/or stupid. Both sides seem completely unable to understand the others perspective, and I think its because people really have completely different emotional experiences in this regard. (You have to experience emotions to understand them|HaveToExperienceItToUnderstand.) Some people are sexually attracted to almost everyone they meet, immediately; others only to a smaller number of people after spending time with them; others to nobody at all; and hundreds of gradations in between. And some people can separate whatever attraction they do experience from the rest of their thoughts and actions more easily than others.\u003C\u003Cfnote \I believe theres a similar spectrum with regard to sexual misbehaviors, e.g., nonconsensual groping or infidelity. For some people, not doing these things is trivial: they have never felt the slightest inclination to. For others, it is really hard: they are constantly tempted. This doesnt of course mean its OK to give in -- but I think the world makes a great deal more sense and you can think about fixes with a clearer head once you accept this conclusion.\>>\n\nI basically fall into the latter camp myself. But since I first came to the conclusion that there is a massive experience gulf, I have tried to have some patience for people in the former. Mustering this patience when it comes to people making comments to me requires approximately all of my willpower, though; it is //really// frustrating when people refuse to respect your understanding of your relationship with another person. And continuing to insist that someone else is attracted to another person or ought to go out with them, when theyve already been told honestly this is not how it is, is a complete asshole move no matter what, not too far off from intentionally misgendering someone, and doing it to me will make me lose most of my respect for you. Only the people in relationships can define them|NobodyUnderstandsRelationships, to the degree that even they can.\n\nPeople who are personally unable to make PlatonicFriendships work should recognize that this is a reflection on them and doesnt necessarily apply to others (you are not everyone|ThingsArentGoodForEveryone), and proceed accordingly when thinking about other peoples lives. The category isnt broken because you dont experience it -- I often cant tell colors apart|ColorblindPerson, but I dont assume people who say they can are lying!\n\nI want to be careful not to characterize this inability as a //failing//, because I dont see any evidence this is a moral or personal issue -- clearly you can have a satisfying life without such friendships, because many people apparently do, and its not hurting anyone else (though it certainly seems a practical loss given that it reduces the variety available for ones friendships). I have no data or opinion on whether it might be practical to change ones attitude.\n\nI think stereotypes suggest that women are much more likely to be willing to consider men as “just friends” than vice versa (see the derogatory notion of the “friend zone”, which never seems to be used to describe mens mental models), but I have no idea if this is actually true or if it just fits well with our preconceived notions of gender roles.\n\nI did once see someone tackle this debate and conclude that a straight (or bi/pan) man and woman cant be “just friends” if theyre (1) mutually attracted to each other and (2) both single and interested in a relationship. I basically buy this conclusion, with the proviso that if they have previously dated and decided theyre not good for each other, they can also stay friends. But it also seems so specific as to be unenlightening; isnt it basically just saying that if two people have CommonKnowledge that they want to date each other, and theres no reason they cant or shouldnt do that, theyll probably do it? This seems...obvious.\n\n-----\n\nStory time: One of the things that started me on this path was a conversation I had with my late friend S.S.|PrivatePerson at an airport bar in Seoul (see, this is why it makes a good story). He wanted to convince me to get romantic with someone I had been friends with for several years; I told him I just didnt think of her that way, even though she was obviously conventionally attractive. It was obvious that I was //completely talking past him// -- this combination of ideas just didnt compute for him. Given that I deeply respected S.S.|PrivatePerson and knew he was very mature, thoughtful, and sensible, my model of “people who havent grown up and still subconsciously think girls have cooties are the ones who insist I should be trying to sleep with every woman I know” broke down and I started looking for other explanations.},{title:PersonalKnowledgeManagement,created:20200225031302653,creator:soren,es:confident,modified:20230427024016074,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:MrTiagoFortes term for capturing ideas and insights, abbreviated PKM. Related: RecordsProject, MrLionKimbro. Cf. EvergreenNotes, which are a specific type of PKM.},{title:PersonalMythology,color:#6c6cff,created:20200115033418955,creator:soren,es:confident,icon:$:/core/images/list-bullet,list:,modified:20221007182904902,modifier:soren,tags:FictionTheory Imagination SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:My term for the set of ideas and references that make up ones base understanding of the world. I often describe mine as eclectic|EclecticMind. (Everyones is to some degree, though.) The most significant components include:\n\n* Media (books, movies, songs, websites, social networks, comedy, advertisements, etc.) you spend or have spent a lot of time with.\n* Friends and their worldviews.\n* Disciplines of thought youve studied.\n* Thinking techniques you use at work and in your hobbies.\n* Places you spend time in and things that are found there.\n* Events in your childhood (especially powerful).\n* Any imagined worlds or scenarios you think about.\n* Ideas youve recorded in some physical fashion (i.e., your creative output).\n\nPersonalHumor is grounded in PersonalMythology and cannot exist without it. (Arguably you might not be a person|PersonDefined at all without a PersonalMythology, but thats another topic.)\n\nPersonalMythology serves as a tag for tiddlers expositing my own personal mythology.},{title:PersonalThinkingMode,created:20200911134441416,modified:20210616235930330,tags:Index Process Reasoning Public,type:text/vnd.tiddlywiki,text:There are many different ways of thinking. People tend to select different ways and use them preferentially, which can have interesting results both in the kinds of things different people accomplish and the ways they communicate with each other. By no means is this a continuum where some methods are “better” than others; rather, as with almost everything, there are advantages and disadvantages to each. Indeed, just being familiar with some might interfere with your abilities to think certain thoughts! (Related: LogicLock?)\n\nWhat type of people use certain tools?\n\n* ZettelkastenPersonality\n* SpacedRepetitionPersonality\n\nHow do peoples mental idiosyncracies affect their worldview?\n\n* MyUnusualMentalExperience\n* RuleSetMindset (some people are inclined to follow a set of rules)\n\nWhat kinds of cross-cutting MentalModels are needed to think about certain things and are lacking or rarely used in some people?\n\n* IndirectionMindset\n* AbstractAndConcreteThinking\n* Metacognition},{title:Persuasion1817,author:Austen,bibliography:LifetimeReading,caption:Persuasion,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035734,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1817,text:M. & P.’s favorite},{title:PeterPrinciple,created:20210623115755920,description:Every employee is promoted to his level of incompetence; thus, every role tends to be filled by an incompetent employee,es:likely,modified:20210623120734189,tags:Employment Business LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:The typical corporate promotion process is completely broken, as L.P.|PrivatePerson points out in this maxim (its also a whole book). When employees are successful, they are promoted, which often involves placing them in a whole new role which they may or may not have the talents for|SkillsKnowledgeAndTalents. If it turns out theyre a good fit for the new role, then theyll eventually get promoted again to yet another role. Whenever they reach a position theyre a bad fit for, they wont be promoted again, but unless they do //really// poorly, they probably wont be fired or demoted, so they stick in a position theyre bad at and probably dislike.\n\nSome solutions are discussed in ImprovingCorporateAdvancement.},{title:PhantomOuch,created:20200415015532964,creator:soren,es:mythological,modified:20240510060939315,modifier:soren,tags:SorenConcept Humor Psychology Public Idea,type:text/vnd.tiddlywiki,text:The phenomenon where you do something with your body accidentally and yell “ouch” expecting it to hurt, but then it actually doesnt. Can also happen when you hit an object not connected to your body in any way on something really hard.},{title:PhantomTollbooth,caption:The Phantom Tollbooth,created:20200428025011041,format:paperback,isbn:0394820371,medium:book,modified:20210607011452617,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:PhantomTollbooth,year:1961,text:Delightful childrens book by MrNortonJuster, in which the boy Milo, who is always bored, journeys to a silly place where things are unexpectedly literal and punny and eventually rescues the imprisoned princesses Rhyme and Reason.\n\nI reread it when I was 24 or so. Its held up very well!\n\nAlthough overall quite a bit more logical and realistic, it is not so dissimilar to AliceInWonderland (maybe part of why I like it...), though Juster claims he had not read Alice at the time he wrote it (blasphemy!).},{title:PhilosophyFromAnywhere,created:20201205052823710,creator:soren,description:An old piece of Wikipedia folklore states that, starting from any page, if you iteratively click on the first link on each page that is not in parentheses, italics, or infoboxes, you will eventually end up at //Philosophy//.,es:confident,modified:20211107182533283,modifier:soren,tags:Anecdote Humor Information Public Idea,type:text/vnd.tiddlywiki,text:An old piece of Wikipedia folklore states that, starting from any article, if you iteratively click on the first link in each article that is not in parentheses, italics, or an infobox, you will eventually end up at //Philosophy//.\n\nThis really does work. If youre bored sometime, try it! It doesnt work from quite every page (occasionally you get in a loop), and once in a while someone changes a few links on some important philosophy-surrounding pages that prevent the technique from working quite as consistently (until someone eventually changes them back), but in my experience it works well over 90% of the time I try it.\n\nPerhaps there is a deep causative truth here that, especially with quite general topics, no information is all that far away from any other information|WikipediaDegreesOfSeparation.},{title:PhilosophyOfLife,created:20200406022549752,creator:soren,modified:20221229225719942,modifier:soren,tags:Public Index,type:text/vnd.tiddlywiki,text:Ideas that focus on how one should live a good life.},{title:PhilosophyOfRight1820,author:Hegel,bibliography:LifetimeReading,caption:Philosophy of Right,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214035744,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1820},{title:PhilosophyRift,created:20201204040856517,creator:soren,description:A strange thing about the world that makes you realize how little you actually understand.,es:confident,modified:20250201152059153,modifier:soren,tags:PhilosophyOfLife Public SorenConcept Idea,type:text/vnd.tiddlywiki,text:Most of the time, we can go through our lives in this strange world believing that we basically understand it. But then occasionally, there are little rifts in the fabric of reality that make us stop and realize, often with some discomfort, that everything is a whole lot stranger than we think. I call these philosophy rifts, the places where the questions weve never been able to answer shine through.\n\nExamples:\n\n* Negative numbers|NegativeNumberDistress.\n* TuningDoesntWork.\n* The question, “Why are we real?|WhyWeAreReal”\n* The fact that we exist at all|AstonishingExistence.\n* QuantumMechanics.\n* The fact that people dont know what they themselves normally smell like: do you really understand yourself?\n* There is no formula for the exact perimeter of an ellipse|https://www.youtube.com/watch?v5nW3nJhBHL0.\u003C\u003Cfnote \This one brings up an interesting point: some philosophy rifts become less rifty once you think about them for a long time, they accommodate at least some explanation. In this case, if you think about it, the issue here is that you have to use an approximation for the perimeter/circumference, theres no exact value possible. But theres arguably not an exact value for the circumference of a circle, either, because the ratio is irrational; we just hide the inexactness behind a letter //π//. The only problem with ellipses is that each eccentricity of ellipse has a different effective ratio, so theres no single constant you can use, and you effectively have to calculate this constant yourself to some desired degree of precision every time you measure. So its still weird that theres no equation for the perimeter of an ellipse, but you come to see its not all that weird by comparison.\>>\n\nThe discovery of a new philosophy rift can sometimes lead one into an ImportanceTrance.},{title:PhoenixProject,caption:The Phoenix Project,created:20200203182918610,creator:soren,medium:book,modified:20210607011504791,modifier:soren,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:PhoenixProject,text:Cruddy novel introducing the ideas of DevOps. Despite being rather poorly written, it is a real page-turner and has some excellent insights for anyone whos ever worked in a software organization. I read the entire book in a day over Christmas back at SunnySide in 2018 (okay, I skimmed parts of it, because it was a library book and I couldnt take it with me when I left the next day!).\n\nWritten by MrGeneKim (sole author of the sequel UnicornProject), MrKevinBehr, and MrGeorgeSpafford.},{title:PhoneAnxiety,created:20211229025505810,creator:soren,es:likely,modified:20231022205920998,modifier:soren,tags:Idea Psychology InterpersonalRelations Design Public,type:text/vnd.tiddlywiki,text:A curious phenomenon has arisen in the past ten years or so (writing in 2021), strengthening even more recently: many people are uncomfortable about making phone calls. I started getting interested in this phenomenon when I noticed it happening to //me//; when I was younger I was confident and certainly never actively anxious about using the phone, even with people I didnt know. But in the last couple of years, that changed.\n\nIts worth noticing how odd it is to be specifically anxious about using the telephone. Ive noticed, for instance, that I might be reluctant to pick up the phone and order a pizza (and be irritated that they didnt have online ordering), but I wouldnt think twice about walking into the same restaurant and ordering a pizza at the counter. That would involve //exactly the same conversation//, under almost exactly the same circumstances, except that Id be standing in front of the person taking my order instead of talking to them on the phone. The phone removes the ability to see the other person, of course, but how much of a difference should that really make for such a simple conversation?\n\nI think one piece of the puzzle is that the phone has always been a rather awkward way of carrying out these sorts of transactions, but in the phone-centered era (probably reaching its peak in the eighties and nineties), the phone was the only commonly available way to immediately communicate with people outside ones line of sight, so we all got used to it. The phone does have several uniquely awkward aspects to it:\n\n* You decide to have a social interaction, then you dial the number...and wait in limbo, often a rather long time, giving you time to rehearse and worry about anything difficult you might have to say.\n* While youre waiting, you often dont know who is going to answer, whether theyll have their full attention available to talk, or even if anyone will pick up at all.\n* If nobody picks up, you might suddenly be asked to leave a voicemail instead, with only a few seconds of notice. Suddenly you switch synchronousness|https://controlaltbackspace.org/efficiency/why-i-hate-texting/: you were getting ready to have a back-and-forth conversation, and suddenly you have to present everything in one shot, //in real time//, with no opportunity to edit what youre saying.\n* Not to mention transfers, holds, automated menus, and other such lovely corporate inventions.\n\nBesides the apparent society-level negative correlation between per-capita phone calls and frequency of phone anxiety, I have some strong anecdotal evidence that the anxiety is partly about not being used to making phone calls: as I recently moved from OwatonnaMinnesota to Minneapolis, I had to make a lot of phone calls to deal with all of the irritating business of moving, often several per day for a couple of weeks, much more than I normally do. By the end, I found myself much less reluctant to use the phone than I had recently been, and even now that most of thats done, Ive found myself much more often, say, calling businesses in advance of going there to double-check if they have something in stock or offer a particular service. This seems like another example of ActivityPlasticity.\n\nShould we be concerned about phone anxiety? I dont think we should be sorry about the reduction in phone usage overall, because it mostly consists of replacing phone calls with tools that are really better suited for the particular type of communication taking place. But theres definitely a cost to going too far; more often than most people in 2021 acknowledge, its way faster and easier to pick up the phone and call someone (its often the best way to JustAsk), and if youre artificially reluctant to do so, your life becomes harder for no good reason. (I used to know someone who hated the phone so much that he wholly refused to make phone calls; needless to say, this policy forced him to use very inefficient or awkward workarounds on occasion.)\n\nThere seems to be a straightforward fix, though: intentionally make phone calls a little more often than you have to so you stay comfortable with doing so. Whether this is worth it is up to you.},{title:PHP,created:20200529195941515,creator:soren,es:likely,modified:20220505190046519,modifier:soren,tags:Software ProgrammingLanguage Public Idea,type:text/vnd.tiddlywiki,text:An old server-side web programming language. Much hated, but still widely used.\n\nPHP: a fractal of bad design|https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ seeks to explain why its terrible, and is a hilarious rant:\n\n> Virtually every feature in PHP is broken somehow. The language, the framework, the ecosystem, are all just bad. And I can’t even point out any single damning thing, because the damage is so systemic. Every time I try to compile a list of PHP gripes, I get stuck in this depth-first search discovering more and more appalling trivia. (Hence, fractal.)\n\nI think my favorite piece of trivia is that the constant $$\\pi$$ is a //function// that you call to retrieve the value. (Then again, in R, `return` is a function. I dont even pretend to understand how that works.)},{title:PhysicallyIntensifier,created:20200918140054493,creator:soren,es:likely,modified:20211005155311044,modifier:soren,tags:Language Public Idea,type:text/vnd.tiddlywiki,text:Interesting recent development in language near me: the word //physically// is becoming an intensifier, much like //literally// recently has.\n\nI suspect this has its roots in the increasing virtualization of everything (SoftwareIsEatingTheWorld). When you can actually touch something, it seems like an intensified version of the software-based experience thats gradually becoming the standard.\n\nExamples:\n\n\u003C\u003C\u003C\nSo you have to physically change it to get it moved.\n\n---S.W.|PrivatePerson, on forcing people to opt out of a low-priority designation\n\u003C\u003C\u003C\n\n> THIS WILL MAKE ME THROW THE PHYSICAL EREADER AGAINST THE PHYSICAL WALL and you’ll owe me a new one, so don’t do it, okay?\n> ---I.R.|PrivatePerson, Dear Yuletide Writer|https://valdyas.org/irina/fo3/thinking/dear-yuletide-writer/\n(Actually means physical, but also an intensifier.)\n\n> I dont remember whether it was for the interview, or when I physically started.\n> ---S.F.|PrivatePerson, on when he had been clean-shaven at TheFederatedInsurance\n\n(Pre-COVID, so the interview was physical too!)},{title:PickwickPapers1836,author:Dickens,bibliography:LifetimeReading,caption:Pickwick Papers,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035757,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1836},{title:PictureOfDorianGray1890,author:Wilde,bibliography:LifetimeReading,caption:The Picture of Dorian Gray,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035767,priority:2,readstatus:unread,recommended-by:GR,tags:Source Public,type:text/vnd.tiddlywiki,year:1890},{title:PilgrimsProgress1678,author:Bunyan,bibliography:LifetimeReading,caption:Pilgrim’s Progress,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035782,priority:3,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1678},{title:Pinball,created:20240228133417208,creator:soren,modified:20240228133422992,modifier:soren,tags:Idea Game Definition Public,type:text/vnd.tiddlywiki},{title:PineStreetBiscuits,created:20250623162352449,creator:soren,modified:20250623162353433,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PinkPonyCafe,created:20250627154424393,creator:soren,modified:20250627154425427,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PioneerCourthouseSquare,created:20250623162334403,creator:soren,modified:20250623162335267,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PissHereSaveTheWorld,created:20211026230310968,creator:soren,description:A category of deceptive marketing convinces people that peeing in the right place can save the planet.,es:confident,modified:20231016182114366,modifier:soren,reviewed:20231016,tags:Environmentalism Psychology Public Idea,type:text/vnd.tiddlywiki,text:Common theme in Greenwashing: marketing materials speak in glowing terms about the environmental benefits of something tiny, making it sound like an individual person can reduce their environmental impact significantly by doing something of no consequence.\n\nMy derogatory slogan “piss here, save the world” refers to the signs that were posted above waterless urinals|https://en.wikipedia.org/wiki/Urinal#Waterless_urinals when they first became common in US restrooms, which bragged about how much water they saved and tried to make it sound like you were doing your part for the environment by…using this urinal. If theres a severe water shortage or sewer capacity problem, presumably it //is// better to use a waterless urinal than to use a normal one, but its making a mountain out of a molehill. Even more importantly, if a bunch of marketers point out these tiny choices, people feel like they are doing something real and significant for the earth. And unless youre actually dedicated enough to something so pointless as to intentionally use different public restrooms than you normally would as a result of some of them having better urinals, youre really getting a feel-good message as a result of doing //nothing at all//, which cant be the right psychology to cultivate here. People have a limited pool of attention to use on environmental issues, so we should make the ones they think about count.\n\nTrying to piss in the right place to save the world is like being in massive debt and trying to save money by reusing Ziploc bags instead of selling your Ferrari. But I think piss-here-save-the-world messaging is popular precisely because climate change is a BlackElephant. It allows us to feel like we arent ignoring the problem (on either an individual or a corporate level) and thus have no need to sell the Ferrari, even when we are ignoring it in real terms.\n\n“Round up for charity” programs at stores are a similar play: they aim to make you feel bad in the checkout line if you dont give a few cents to some program that the store selected and which they get a tax break for giving your money to. If you actually want to make the world better by giving to charity (which is a great idea!), you should pick one out and write a check|https://controlaltbackspace.org/simplicity/paying-for-groceries/#would-you-like-to-round-up-for-the-pinky-swear-challenge so you can actually give a meaningful amount. Plus, then we dont have to heckle hundreds of thousands of people in the grocery line.},{title:PizzaShark,created:20230521215618707,creator:soren,gis-lat:44.96057642307954,gis-long:-93.29325386687535,gis-zoom:18,modified:20230521215658426,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Place,caption:A physical location in ConsensusPhysicalReality or in a fictional world.,color:#ff0000,created:20200121032316713,creator:soren,icon:$:/core/images/tag-button,modified:20251011161452590,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nFor places that have usable addresses or GPS coordinates, you can configure maps and directions to appear at the bottom of the tiddler via Google Maps. To do this in an empty edition of this Zettelkasten:\n\n# Set up a Maps Embed API key in Google Cloud Platform (this is rather technical, so if you dont know what an API key is, you may want to skip this feature). Set $:/config/zettelkasten/gis/GMapsApiKey to your new key.\n# (Optionally) set the `Address` index of the `PrivateMetadata` data tiddler to your home address; this will save you having to type it in every time you want directions from your home to somewhere else. Since this isnt a system tiddler, it wont be published unless you check the “publish this tiddler” option.\n# Turn on the //GIS tools// feature flag|$:/tzk/Tools/FeatureFlags.\n\nYou should now see a form on any tiddler tagged \u003C\u003Ctag Place>> where you can enter latitude and longitude and zoom level for the place. If you dont already have a favorite tool for finding latitude and longitude, in Google Maps, you can right-click on any point and select the first option to copy the coordinates to your clipboard. I usually start with a zoom level of 12 to 15 depending on the size of the place (you can see the current zoom level at the end of a Google Maps URL, followed by a //z//).\n\nAfter clicking //Add//, youll be able to see maps, directions, or raw data for the location. The data is stored in the `gis-lat`, `gis-long`, and `gis-zoom` fields; you can also add a `gis-address` field if youd like to display a street address on the //Info// tab.},{title:PlanB,created:20240402013742631,creator:soren,modified:20240402013746348,modifier:soren,tags:Idea Drug Public,type:text/vnd.tiddlywiki},{title:PlanningAlwaysGood,created:20221231020927949,creator:soren,description:Absent evidence to the contrary, assume that time spent planning will be time well spent.,es:likely,modified:20240319022513038,modifier:soren,reviewed:20240318,tags:Idea Productivity Public,type:text/vnd.tiddlywiki,text:Heuristic: any time spent planning is time well spent.\n\nIn general, people underestimate the value of sitting down to think clearly about what you need to do, what youre struggling with, and how you can most efficiently attack your problems. Good planning can save you hours of work. It also creates motivation and makes sure that you have moments where you pause and reflect on whether youre still doing the right thing (see HammeringHarder for the opposite antipattern).\n\nAn important consideration when deciding when and where to plan is that //planning what to do// and //doing things// require a significantly different mindset, so its both more efficient and more effective to do them separately. Most often, if you try to combine them, the part of you that handles planning what to do gets accidentally suppressed, and you end up HammeringHarder on a problem rather than sitting back in your chair for three minutes and calmly figuring out what to do next. It is difficult if not impossible to achieve a MindLikeWater flow of work without time set aside for planning.\n\nNow, it is possible to spend all your time “planning” and not JustGetStarted; its important to also spend time on task|WorkingSoftware. But usually you know youre not doing useful planning in this case; you are just intentionally procrastinating. As long as you are really and truly planning, and making useful progress, its rare that you will spend too much time planning something.\n\nSometimes its useful to do some //major// planning, stepping back entirely from real work and going on a retreat, leaving space for boredom (see CampingAndBoredom). This gives you a chance to see where your whole life is going, not just individual projects. My year in review practice involves this, as do my camping trips.},{title:PlanningCycle,created:20240317231115349,creator:soren,description:Plans are necessarily imperfect, but theyre still indispensable.,es:confident,modified:20240709142844390,modifier:soren,tags:Idea Process LifeDirection Public,type:text/vnd.tiddlywiki,text:Its virtually impossible to ever make a plan about what you want to do and carry it out //exactly// as planned. Even supposing you specified every detail without missing anything, something will change along the way. Maybe something proves impossible to do once you get down to it, because the model in your head didnt match reality. Or maybe you realize you didnt even want what you thought you did (see PeopleDontKnowWhatTheyWant and AgileHumility).\n\nThis said, planning is almost always worth it|PlanningAlwaysGood. The alternative to making incomplete, incorrect plans is making no plans at all, and thats even worse. Maybe you wont even know where youre headed, or maybe youll know where youre headed but have no theory about what experiment you can try next|SmallBets, so youll never get started|JustGetStarted at all. Probably the results of each step in your plan wont look quite like what you expected -- sometimes youll end up realizing you need to throw out the plan and do something entirely different -- but thats fine.\n\nIts kind of like steering a small boat. You often cant point the boat directly at where you want to go, because the wind and waves and currents are much more powerful than you. But you dont give up on steering and just hope you end up in the right spot. You take the current forces into account, pick a compromise direction thats feasible and not too far off from what you want, go that way for a little while, then reevaluate how things have changed and figure out where to go for the next stretch. See, yet again, IterativeProcess. (In reality, its even harder to make project or life decisions -- the water is much easier to read once you know what youre doing!)},{title:PlateOnTheAltKey,created:20230324185418211,creator:soren,description:Computer problems? Is there a plate on your Alt key?,es:mythological,modified:20240221003718486,modifier:soren,tags:Idea Anecdote TechBook Humor Public Frozen,type:text/vnd.tiddlywiki,text:One summer when I was in middle school I got a call from my uncle. He was having a strange problem with his computer which had started very suddenly: typing and clicking on things didnt seem to have the usual effects, and in particular double-clicking on programs in an attempt to open them just opened the Properties dialog.\n\nI thought for a moment and recalled, from some very deep corner of my mind, that pressing Alt+Enter with an item selected in Windows Explorer opens the Properties dialog. Maybe Alt-clicking on a program would have the same effect. And having the Alt key stuck down would certainly prevent letters from being typed normally.\n\nSo I asked, “Hmm...is your Alt key stuck, by chance?”\n\nThere was a brief pause, then a moment of laughter.\n\n“My plate was sitting on it,” he explained.\n\nThis has become a classic in my family; anytime the computer suddenly starts doing strange things we ask if there is a plate on the Alt key. (If there isnt one, its time to start thinking about rebooting|RebootSalvation.)},{title:PlatonicFriendship,created:20211030032723706,creator:soren,description:What does it look like to me to be “just friends” with a woman?,es:confident,modified:20230908140837650,modifier:soren,tags:InterpersonalRelations Idea Definition Public ManualForMe Friendship,type:text/vnd.tiddlywiki,text:Silly name were stuck with for relationships that include a man and a woman who are not romantically involved. (This term is undefined or poorly defined for people who arent straight, as far as I can tell.)\n\nPeople sometimes believe this category does not truly exist, and they may be right for themselves; see PersonalizedViabilityOfPlatonicFriendships. But it sure does for me.\u003C\u003Cfnote \Actually, for me, for whatever reason, most of my favorite and most intimate friendships throughout my life have been with women. So Im pretty sensitive about people saying theyre not real or claiming Im really just trying to go out with all of them.\>> Also, what if youre bi? Is it impossible to have friends? \n\nThese friendships certainly //are// distinct from those with people of genders you are inherently not attracted to in that there is an extra possibility of attraction and/or a romantic or sexual relationship lurking in the background. The exact effect this has on the relationship, however, can differ substantially from relationship to relationship and person to person, from barely making a difference to being a big deal. Certainly, the presence of some romantic and sexual possibilities in the background need not mean the category “friend” is inapplicable.\n\nWhat matters for that categorization is how you choose to think about and interact with each other. Personally, I dont really have additional boundaries around what I can and cant do with my female friends, and I like it that way; I think those artificially prevent you from having a lot of meaningful experiences. Like, obviously we cant kiss or walk down the street holding hands and gazing into each others eyes without crossing a boundary, but Im fine hugging closely or being alone with them at their house having deep conversations or getting dinner at a fancy restaurant or whatever. Is it pretty intimate? Sure, thats why we like it! Its just not romantic and doesnt mean were going to be sleeping together in the future. Someone might make assumptions about you if they see you doing it, and thats a little annoying, but you can just correct them.\n\n\n!! Categories\n\nFor me personally, there are three distinct subtypes, distinguished by attraction and romantic history:\n\n* There are some female friends Im not attracted to at all, and as far as I can tell they arent attracted to me either, and weve never talked about it. The fact that youre different genders is always going to alter the dynamic a little bit -- and thats good, it means you get to experience different flavors of friendships -- but theres never going to be any flirting (except maybe jokingly, if you understand each other well enough to be sure it wont be taken wrong!) or hurt feelings or struggles to understand each other, and you know this.\n** A notable subcategory: friends I //wish// I was attracted to because we get along really well, have a lot in common, and I think we would make a great couple, except for a complete lack of attraction.\n* There are others I //am// attracted to, to a stronger or weaker degree, and if the situation changed I would be open to redefining our relationship. Sometimes there might be some regrets that things arent different between us. But I avoid letting my attraction get in the way of a simple friendship, because I just like them as people|FriendshipDefined! These relationships can be challenging to manage depending on degree, but also kind of fun for the very same reason.\n** Ive only ever had a couple of these because Im not attracted to people easily|DemiPerson, and Ive never had to cut my losses and stop seeing someone because I couldnt handle not expressing a bunch of strong feelings, but I believe there can be times when thats necessary.\n* And there are those Ive actually dated (or one of us has brought up the possibility but weve decided not to continue). There might be some stray feelings of attraction in these,\u003C\u003Cfnote \Just because you //have// these feelings doesnt mean that you need to act on them, or – especially in this case – that you even want to. Feelings are just signals, not arbiters.\>> but the chance of something actually happening again feels practically //lower// than the ones where weve never been involved at all (presumably there was some reason it didnt work out, after all). There seem to be some people who doubt that you can be friends with someone you broke up with, but personally, these are some of my favorite relationships – the level of intimacy is usually very high, but its pleasantly lower-intensity and lower-pressure than an ongoing romantic relationship, it doesnt have to be exclusive, and you can freely talk about exactly what you do and dont want to do in the relationship.\n** Obviously these relationships can only happen if you mutually decide the romantic angle isnt working out and there are no ongoing nasty feelings. But because (probably) Im lucky, and Im a nice person who doesnt take failures like this personally, Ive had quite a few of those.\n** I also think you almost always do need some time apart to make this work. But Im usually successful at recharacterizing the relationship given a few weeks of space, even if I felt bad about the breakup.\n** If you still think thats weird or hard to accomplish: Yeah, sometimes it is. In my book though, its much harder to voluntarily agree to never see someone again who you deeply care for and get along well with, just because it turned out you werent the right romantic partners for each other. Its worth the work.\n\n\n!! Words\n\nIve often remarked that English lacks vocabulary to describe ones feelings for a close platonic friend. “Love” is wrong because of an automatic assumption that love between two people of opposite genders is romantic, but theres no alternative word that goes to the right level of depth. Of course, as with the vocabulary, so with our thinking|HypoCognition.\n\n(As a matter of fact, for guys the same thing is true for other men. We apparently cant directly say we care about anyone except our girlfriends/wives and family.)\n\n\n{{PlatonicFriendship/p||PrivateChunk}}},{title:Play,created:20251015214844389,creator:soren,modified:20251015221230551,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki},{title:PlayboyOfTheWesternWorld,created:20230405172031931,creator:soren,modified:20251011193305360,modifier:soren,tags:Idea Song Public,type:text/vnd.tiddlywiki,text:Artist: MsConnieConverse},{title:PlayfulKnowledgeManagement,created:20220504192109110,creator:soren,description:We all need more play in our lives; how can taking and maintaining notes be made a fundamentally playful endeavor?,es:likely,modified:20251015214857928,modifier:soren,tags:Idea Public PersonalDocumentation Creativity Imagination Information Learning Favorites,type:text/vnd.tiddlywiki,text:> Shun the useless adoption of the aesthetic of the useful. When something can be like work or like play, never make it work.\n> ---NotesAgainstNoteTakingSystems2022, MrSashaChapin\n\n\nThe world is being workified: things that were once play|Play are being turned into work. (This is related to the DesacralizationOfEverydayLife; on a different but also relevant note, see ShadowWork, whereby other peoples work is becoming our own.) Our childrens play is scheduled and formalized. Traditional primary and secondary-school education takes the intellectual excitement out of learning things. Everything we do is part of “building our personal brands.” Even the most intimate relationships with other people are understood as part of some journey for personal fulfillment mediated by goal-seeking – even if we dont necessarily experience them as work, the metaphors we use often explicitly treat them as work.\u003C\u003Cfnote \Im not saying all of these things should be //play// in the sense of trivial, or purposeless, nor that all parts of them are inherently playful or, especially, fun – nobody, e.g., wants to throw in the towel on their marriage because they have to spend a few hours answering some difficult questions together and that doesnt feel playful. But if theres a spectrum between work and play, were largely ignoring the play side.\>>\n\nI hate this trend, and I dont think Im alone in that. So this seems like a valid criticism of taking lots of notes, especially when the notes are an extra thing you have to do during or after reading something or having an experience that would otherwise be mostly or exclusively playful. That said, Im not sure that my own note-taking practice is actually workified. I enjoy taking notes (see also ZettelkastenPersonality), I find it a creative endeavor, and I usually take them by choice, often with no particular goal in mind except learning things Im fascinated by. But is that //work// that I enjoy, because Im good at it and feels important to me, or is it //play// that I enjoy, more like, say, playing cribbage or worldbuilding or rowing in circles around the lake|AwkwardAnnie? Honestly, Im not entirely sure, because in general, I will happily admit that I have far too little true play in my life, and in a workified world, it becomes difficult to draw the lines. (See also “The play deficit|https://aeon.co/essays/children-today-are-suffering-a-severe-deficit-of-play”, Aeon.)\n\nStepping back to the bit about turning human relationships into work for a moment: In //How to Not Die Alone//,\u003C\u003Cfnote \A beautiful split infinitive that cannot be recast without twisting the meaning. Suck it, The Economist.|https://languagelog.ldc.upenn.edu/nll/?p30043\>> MsLoganUry has us notice that the most successful dates are those that feel playful and admonishes us not to turn first dates into job interviews. This seems highly relevant: what is it about the current cultural moment thats making people feel like a work-like conversational environment has a good chance of producing a romantic connection? Maybe its just that we underappreciate the importance of environment and frame of mind across all parts of our life, as if well automatically recognize that weve found the right person when we come into contact with them.\u003C\u003Cfnote \To be clear, this occasionally really does happen, but its foolish to count on it because the vast majority of successful relationships dont work this way.\>> Heck, I cant even recognize my //keys// when Im looking right at them if they arent where I expect them to be, and I know exactly what those look like|PeopleDontKnowWhatTheyWant!\n\nSimilarly, it would seem that note-taking done with the wrong mindset in the wrong context could result in missing insights that are right there for the taking, and producing dully factual and extremely unromantic artifacts. The thinking and writing downstream of the resulting notes may be poisoned as well|InsufficientlyReflectiveWriting, turned into a stream of poorly differentiated facts, as Chapin duly notes in his article. Kristen Berman (qtd. in Urys book) calls peoples behavior during interview dates “press play mode” -- instead of connecting with the other person, you read out a standardized version of yourself. With notes, we risk entering “press record mode”, and then pressing play later when it comes time to have a conversation or write something, rather than engaging with and Grokking the material, allowing it to become fully part of our understanding of the world so that we can produce original insights based on it later.\n\n------\n\nSo how can we make knowledge management into play, rather than work or mechanical transcription, thus helping ourselves to engage with it? Gamification doesnt count, its just tacking a play aspect on top of the work one (e.g., in RemNote we have an option to show cute dog gifs when you reach your daily flashcard target). Gamification is often worthwhile -- this is not to criticize it as a concept -- but it doesnt address the root cause.\u003C\u003Cfnote \Its kind of like adding artificial flavor to your medicine to hide the fact that it tastes bad. Sometimes you have to have the components that taste bad, and so hiding it is the best you can do. But maybe you dont.\>> And, while Im not aware of any research on this, it seems plausible that, if done wrong, gamification could actually extinguish intrinsic motivation|DangersOfExtrinsicMotivation where there already was some. Might it be possible to instead make the act of note-taking itself fundamentally playful in some way? I think it is; in fact, I think I already do it to some extent. Here are a few things to keep in mind:\n\n* Knowledge management / note-taking is not, or should not be, merely about writing down the things that one reads. That will inevitably be a chore, and if thats all youre doing, especially if youre not even scrambling the context|ContextScrambling, it has fairly limited value (after all, the things are already written down in the source, and this being the Internet age, you can in the vast majority of cases make a copy of it and come back to it anytime). It should instead be a way of //thinking about// those things, e.g., by writing reflectively about them as I am doing here right now, or by creating spaced-repetition flashcards that manage your attention|SpacedRepetitionAsAttentionManagement into thinking more about the things that you find fascinating. (The apparent work-like nature of studying flashcards belies the feeling of play that arises when you are led to think about interesting reminders your past self left you and, to your delight, you remember them and find yourself making novel connections even though you havent had reason to think about those topics for quite some time. Of course, it takes some skill at writing flashcards and figuring out what to write them //for// before you can reach this stage.)\n*Making references between things -- the fundamental act of adding notes in a ZK-like notes system|NotesMustLink -- is a form of play; compare HackingPedantryAndScience, which suggests the mindset behind these things is the same and is also fundamentally playful (over there, I said the smart-ass mind behind “in the cells of the eggplant” is “full of...intellectual playfulness”). I certainly delight in finding these connections, and in producing work that shows I have found them. And “delight” is the right word, and I dont think “delight” is a word usually associated with work. To enhance this, perhaps one could make a point of trying to connect the most apparently unrelated things? Or finding related things in different fields, or different categories altogether, like quotes from fiction or Escher drawings|https://en.wikipedia.org/wiki/G%C3%B6del,_Escher,_Bach? (These can yield insights in the original subject matter due to DisciplineCrosspollination.)\n* Similarly, we should find or make up words and terms to precisely describe the things we see and learn. This is both difficult and playful (at least when done well), and its helpful for thought anyway (see NamingThings). If I havent made up a word or used an unusual one while writing a lengthy tiddler and its subordinates, its probably boring!\u003C\u003Cfnote \I made up //workify// on the spot -- though a handful of people on the web have done the same already -- and snuck //interlarded// in. Phew, I passed.\>>\n* InterestingSpacedRepetitionMaterial could be relevant here. How can we kick the things that arent interesting anymore out of our knowledge bases, or prevent them from getting added in the first place, or recast them as our interests change, so that working with the material never feels like a chore? Then we would be spending our note-taking time on things that feel fascinating all the time. (Maybe this is just another way of saying that its ideal to have an interesting job and avoid doing things you dont like doing, which seems axiomatic, if not always easy to achieve. The ability to reprioritize things as your interests change is important, too -- what feels fascinating one month can be banal or even repulsive the next -- and we have added some tools for that to RemNote.)\n* I notice that over the two years or so Ive been doing ZettelKasten, the kind of things I typically write about has changed. I started with mostly specific, technical, instrumental, and factual tiddlers (e.g., my cluster on the ScrumMethodology or HowToTakeSmartNotes); now many if not most of them are abstract, creative, speculative, and opinion-oriented (e.g., NoRulesNoFreedom, PhoneAnxiety, EfficientLife). Its telling that the majority of my Favorites also fall in the latter category. To put it another way, ZK has become for me almost a lightweight, semi-private way of blogging or journaling, rather than a collection of factual information obtained from other sources: highly eclectic|EclecticMind, about whatevers on my mind, researched to whatever degree of formality I like, and often unprovable empirically even if I firmly believe it. I like this way of taking notes -- and I still consider it more or less taking notes, because I have an idea or I read something that touches off a series of related thoughts, and then I go write that thing down -- and I think it bears more intellectual fruit than just gathering together facts, or even my thoughts on facts. Its also, to Chapins point, way more fun!\n* A playful note-taking practice shouldnt obligate you to take any particular quantity or quality of notes on a given thing; its hard for something to be playful if youre obligated to do it, or do it a certain way. This is something I could definitely stand to work on; I frequently feel like Im slacking. I think this is largely because I know how to take //no// notes (thats easy), and I know how to take //extensive// notes (Ive gotten good at that), but I havent yet figured out how to prioritize effectively when I want a level somewhere in the middle, so I end up either taking tons of notes and feeling like some of them were low-quality, unnecessary, or a bad use of my time, or taking no notes and feeling bad about myself.\u003C\u003Cfnote \I talked briefly about this with MrAndyMatuschak and he said he has this problem as well; I suspect its fairly universal.\>> This is the same reason I struggle with keeping a daily journal|WhyTheJournal at periods in my life where I do; I end up getting behind because Im not willing to give something shorter shrift than I feel like it deserves, when the obvious fact is that //not doing it at all// for days or weeks is much worse than not having written as much as I wanted about some topic.\n\nI think the points above might suggest that Chapins idea of what constitutes note-taking is different from mine, so its possible Im defending the wrong thing.\u003C\u003Cfnote \Is there a receiver-oriented version of the straw man fallacy, where you misinterpret an author as attacking you because you unfairly characterize their position? That might be whats going on here.\>> Even my RemNote notes, which are far more traditionally-notey than my Zettelkasten, are targeted at ideas that feel important and worth thinking about to me, are interlarded with my original creative and divergent thoughts on the subject matter, and use spaced repetition to make sure I keep thinking about the bits that seem important or desirable to keep thinking about|SpacedRepetitionAsThoughtManagement.\u003C\u003Cfnote \Im talking myself up here, and I dont think Im exactly lying, but I should seek to do all of these things much more than I presently do, especially adding my own thoughts into the middle of the notes. Its sometimes hard to remember to do that when youre in the middle of a long session parsing out the ideas in a book or whatever that you want to remember.\>>\n\nSupposing that all this is right, the challenge for me in the systems I develop (RemNote, SpacedRepetition systems in general, and maybe to some extent tzk?) is to figure out whether there are elements of these tools design that can be used to nudge users into these more productive patterns. Tools are not sovereign|RoleOfTools, so this is not fundamentally my problem as a tool designer, but they can still influence their users, so its worth thinking about, assuming Im correct that playful notes are desirable. It certainly seems that playful notes would drive engagement with the note-taking system, which is good from the perspective of a product manager.\n\n//Meta-commentary on the value of notes//: I was able to have some of the ideas in this tiddler at all only because of my knowledge-management systems. I would, for instance, by now have forgotten about Logan Urys ideas about dates that feel like interviews had I not taken notes on them and added them to my spaced-repetition system (in the ThreeFunctionsOfNotes framework, although it didnt talk about SR, I think this qualifies as integration). When I went to those notes, I found the bit about “press play mode” (serendipity). And I had to reference the bit about intrinsic motivation (from Drive2009). Of course, I have referenced well over a dozen related notes to support my argument, as well!\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Cremembercz \20220504210446129\\n\t\Sasha Chapin: “When something can be like work or like play, {never make it work}.”\>>\n\t\n\u003C\u003Crememberq \20220504222332659\\n\t\How are dating and thinking by means of notes similar?\\n\t\They both need to be playful for best results.\>>\n\t\n\u003C\u003Crememberq \20220504211540126\\n\t\What change have I noticed in the content I tend to add to my ZK over time (as of 2022)?\\n\t\It has become less specific/factual and more abstract/creative.\>>\n\t\n\u003C\u003Cremembercz \20220505014657685\\n\t\{Workification}: The process of turning things that are naturally {c2::play} into {c2::work}.\>>\n\t\n\u003C\u003Cremembercz \20220505015407690\\n\t\Good knowledge management for intelligent thought should be not a way of writing down the things one learns, but rather a way of {thinking more about important things}.\>>\n\t\n\u003C\u003Crememberq \20220505030036429\\n\t\With regards to how many notes I feel obligated to take on some topic, what have I said I could stand to improve?\\n\t\My ability to prioritize and effectively select the most important elements, so I can feel good about taking minimal notes rather than no notes or lots of notes.\>>\n\t\n\u003C\u003Crememberq \20220504210315182\\n\t\How can you make note-taking more playful today? (try to pick a new idea)\\n\t\E.g., reference unusual things that arent obviously related, ensure you select ideas youre highly interested in, use it to think about important topics, dont have a specific goal in mind when taking them\>>\n\n\u003C/$details>},{title:PleaseEveryone,created:20200322033552967,creator:soren,description:You can never make everyone happy no matter what you do.,es:confident,modified:20231118020237545,modifier:soren,tags:Design PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:It is thoroughly impossible to make everyone happy, ever. Pick something you think //everyone// cant help but like (e.g., ice cream, kittens, sex|Asexuality) and someone will still find a way to not like it, because there are over 7 billion people in the world.\n\nAt least two strategies are possible for choosing who to please:\n\n* The utilitarian strategy: Design to make the largest number of people happy or to produce the best product or career or greatest impact that you can.\n* The functionalist strategy: Aim to make a specific set of people very happy|AttractivenessAsymmetry or focus on a small market or corner of the world|MakeYourPartMoreBeautiful, and ignore everyone else.\n\nI find the functionalist strategy is more effective in most realms of life, since it forces you to clarify exactly what youre trying to do and what tradeoffs youre choosing to make. This is less true in situations where you must unavoidably deal with tyrannically averaged people|TyrannyOfAverages as a mass, such as politics; while politicians occasionally have success by deciding theyve already lost the support of a group of people and ignoring them, most of the time electoral success comes through watery compromises that maximize total voter support (even if that support is of the well-at-least-its-not-the-even-worse-guy variety).\n\nNote that in most real-world situations, even if you apply the functionalist strategy, youll have to apply the utilitarian strategy within it as well; unless youve managed to cut your audience down to just a handful of people, someone still wont be perfectly happy.\n\nNone of this, of course, means that some things are not better or worse than others|SomeThingsAreBetterThanOthers.\n\nCf. StackOverflowCommunityDebacles and the AnkiLessons.},{title:PLessGame,created:20200206233057487,creator:soren,es:confident,modified:20231011034307986,modifier:soren,tags:SorenConcept Game Public Idea Frozen,type:text/vnd.tiddlywiki,text:I once played a game of NetHack with the “//p//-less” conduct, which is defined as winning a game without ever pressing the P key on the keyboard (or otherwise causing the game to receive a letter P as input, like by pasting text containing a P into a terminal running the game -- nice try). It felt so much in tune with the playful side of NetHack and might be my favorite thing Ive ever done in the game (and Ive done a lot of silly things).\n\nThe idea came out of a joke MrJohnHarris used in a comment on his old blog ~GameSetWatch:\n\n> Yeah, but if youre going to drag untracked conducts into it then just about any play style can be justified. \Lets play a game without pressing the letter P!\ (DO NOT MAKE A NEW CONDUCT BASED OFF OF MY IDLE JOKE DAMMIT.)\n\nOf course, this is just about the perfect example of DontStuffBeansUpYourNose.\n\nI posted the following account of the game on the rec.games.roguelike.nethack Usenet group afterwards (that was still something people did occasionally back then...).\n\n\u003C\u003C\u003C\nP-less conduct: Once your savefile loads or character is created, you cant press the P (or p) key, nor can you paste any text containing a P into the terminal (thatd be too easy).\n\nThis looks easy enough to start out with but starts getting really complex as you start to realize how many things require pressing P:\n\n* You cant pay for something in a shop. You can either get a pet to steal the item, or you can drop gold for credit and then teleport out, jump out the door, etc.\n* You cant (P)ut on any rings, amulets, towels, or lenses. So you cant get reflection by the amulet, and theres no way at all to get free action; conflict and regeneration are possible by certain artifacts but probably not worth the effort.\n* You cant use a towel to blind yourself. You can still use a blindfold though, so thats no big deal at all except for making you wait a bit longer to use telepathy if you only find a towel.\n* You cant use anything with the inventory letter p or P. You also cant #adjust anything into or out of the slot, as that requires pressing the letter. I found a way to fix this by fiddling with the fixinv option, which Ill describe later.\n* You cant pray. This isnt nearly as hard as atheist though, as you can still sacrifice, drop things on altars, and buy protection.\n* You cant use a p in an object name. That ones just an inconvenience, as you can just leave the P out and its perfectly clear what you meant.\n* You cant make a wish for anything that contains the letter P. However, you can sometimes get around it--for instance, you can wish for 3 full healing instead of 3 potions of full healing. However, anything with a p in the proper name, like gauntlets of power, all polymorph items, and such, are off limits.\n* You cant write scrolls that contain p--the most noticeable are magic mapping and enchant weapon. Specifying the random description will let you write it anyway--but there are some random descriptions that do contain a p. Fortunately, on my winning game, both of those scrolls were writeable.\n* You cant take the p-th item out of a container. This can be circumvented by taking out the o-th (or any item before p), then taking out the now-shifted item. Sometimes fiddling with the \What do you want to take out?\ menu will work too (and doesnt take a turn).\n* Its a real pain to set options that are accessed by the letter p, but you can--select every other option on the page, then press ~ (invert all on page).\n\nIm probably forgetting something, too.\n\nHaving no way to keep track of the conduct, I simply took off my p key. I suppose you could argue for the fact that that was cheating since it stopped me from accidentally breaking conduct, but a) I dont really agree with that, and b) there was no other way to track it.\n\n----------------\n\nWarning: The following account of my adventure is extremely long. I highly encourage you to at least read the Astral Plane part if you dont want to read the whole thing--its one of the most exciting moments Ive ever had in NetHack.\n\nSo I decided to start as a dwarven valkyrie. Might as well pick an easy character, right? First attempt died to a death ray halfway down the dungeon. Next notable death was running out of full healing on the Astral Plane and having to pray (I ascended, but broke the conduct). Third, I was decapitated by a monster with Vorpal Blade 10 steps from my high altar. Fourth I died at the castle due to a brain fart where I was planning to restore HP by praying when it got low--by the time I realized I couldnt I had 10HP and was standing between two @s. After that death I took a break from p-less. When I came back I decided to switch to samurai for something different. I started that one by getting killed by an unlucky magic trap--but my next game I finally got going.\n\nMy pet had died by the time I reached Minetown, so I was unable to purchase anything from the shops. There wasnt anything terribly interesting either. The altar happened to be coaligned, but I was short on food so I didnt hang around for too long. I did, however, have the luck of finding a +3 pair of iron shoes, which lasted me until I found speed boots near the castle. Next I ran into some annoying bones where a player got killed by a mummy and left one of those annoying named mummies with 80 hitpoints and good armor. I finally managed to dispose of it with a lot of Elbereth and a couple of judicious blasts of a fire horn. The only interesting thing in the bones (besides cursed and uncursed unicorn horns, both of which came in handy) was a very corroded ninja-to named Dragonbane. I mean, if youre going to leave crappy artifacts in bones, ones that arent thoroughly corroded would be nice...\n\nHowever, the bones did give me enough junk to get my Letterbanes in place, 2 darts named LETTERBANE which filled the slots p and P for the rest of the game so nothing useful got in them. The way to do this is to drop everything in your inventory, then turn off the fixinv option, an option which nobody would normally turn off. With the option off, instead of keeping your inventory letters when you drop something, everything else is immediately shifted down to go in alphabetical order. The side effect is that things you pick up will fall into neat alphabetical order. So its then trivial to name a stack of darts, pick up stuff to letter o, pick up one dart and name it, then repeat for the capital P. This done, dont forget to switch off fixinv, then you can #adjust stuff back to normal spots and not have to worry about the p slots for the rest of the game. I headed back to Minetown with the contents of the bones to curse-test them, set up a stash, and decreased my armor class slightly.\n\nEarly Sokoban got me poison and sleep resistance, as well as a mithril-coat to replace my clunky plate mail. In the treasure zoo I made a really dumb mistake, accidentally meleeing a floating eye instead of a gas spore. Fortunately, the only things that could attack me were giant rats, and I survived. I ended up with the amulet, which was kind of pointless since I couldnt wear it. Leaving Sokoban, I avoided another trek to Minetown to curse-test everything by exploring two more rooms and finding a coaligned altar. I sacrificed for my Snickersnee, which carried me all the way through the quest. (I never did find a long sword to dip for Excalibur.)\n\nAfter level 11 I returned to Minetown, headed through to Mines End uneventfully (though I had been unable to buy a lamp, so the dark areas were kind of frustrating; fortunately I had a wand of light.) Picked up my luckstone and headed back up to Minetown. By the time I got back up I was skilled in twoweapon and expert in longsword, wielding Snickersnee and a katana. Even unenchanted the combination did a fair amount of damage. A run-in with a mumak while burdened got me a bit worried, but turned out to not be a problem at all. Before I left Minetown I used one of my scrolls of teleportation to purchase an oil lamp by dropping the gold and teleporting away. By now I had $7000, so I repeated buying everything I wanted from the shops in the dungeon, then went back and paid for a shot of protection (only got 2 points, sadface). Next I made some water, but couldnt pray to bless it. Instead I tried wielding it and reading my uncursed scrolls of remove curse while confused (using that cursed unicorn horn from bones). It unfortunately didnt work, and I forgot to take off my armor first, so I wound up with cursed cloak of MR (which was sitting randomly in a shop, a nice find) and cursed +3 iron shoes (and no holy water either).\n\nOn level 13 a throne yielded a wish, so I got a silver dragon scale mail, getting me the reflection I couldnt get from the amulet and some good armor. Unfortunately, due to my stupidity earlier I couldnt get the cloak off to wear it. I dried up nearly every fountain in the dungeon and couldnt get the stupid thing to uncurse by fountain dipping. A graveyard on level 16 had 5 wraiths and gave no corpses (boy, that was annoying). I did find a random bag of holding, though, which totally made up for getting the \wrong\ Sokoban. On level 18 I met bones with an awake barracks and a water troll, so I decided to turn back to my stash before facing it. Another throne on level 17 summoned monsters and disappeared.\n\nBack at my stash I identified a blessed scroll of remove curse, so I unstacked my water, dropped most of my inventory, and finally got myself some holy water. I blessed a couple of scrolls of identify and learned a few new identities. I next tackled the bones, which turned out to be thoroughly underwhelming (though they did have a magic lamp, which I kept for the light--the wish saved my life later on). On level 22 I found Medusa (the titan version, but he was peaceful). However, I had no way to cross the water nor a source of digging to skip it, so I headed back to my stash, where I consolidated items and grabbed a pickaxe. A few minutes later I found myself digging down through Medusa and a couple of maze levels, reaching the castle. I had 117 HP, an AC of -14, and both MR and reflection. I also had a tonal instrument. Stupidly, though, I didnt head up the stairs to smash Perseus statue...\n\nI cleared the castle easily and picked up a few wands for my trouble. The wand turned out to be 0:1. I had no way to check the stores at the moment, and I needed to get past Medusa again, so I wished for blessed greased +3 boots of levitation (since I couldnt use the ring). That turned out to be a really bad move! The stores had a couple of interesting items, most notably a pair of gauntlets of power, which I wore for the rest of the game. And, after mapping a couple of maze levels that I had skipped by digging (and killing a pair of minotaurs easily, even with unenchanted weapons), I headed up the stairs to kill Medusa.\n\nC - a pair of levitation boots.\n\n//bang head on desk//. Okay, so I lost a wish. Fortunately, it wasnt a big deal--I already had most of what I needed to ascend. That was probably my worst mistake of the game though, and it felt really dumb when I did it. I made it back to my stash without further incident, where I gathered some equipment to do the Quest. I annoyingly forgot my scroll of earth when I left, which I was planning to protect myself from the wrath of the RNG and Ashikaga Takaugi with. The quest itself was uneventful, though I fortunately found a ninja with a wand of death to help me kill the nemesis. So here I am, standing in line with meditating Ashikaga. Should be easy, right? (I include my comments on IRC.)\n\n```\nThe death ray misses Ashikaga Takauji. Ashikaga Takauji picks up a long samurai sword.\nYou kill Ashikaga Takauji! But wait...--More--\nYou kill Ashikaga Takauji!\n15:43 \u003Cscorchgeek> phew\n\nThe ninja picks up a tsurugi named The Tsurugi of Muramasa.--More--\n15:45 \u003Cscorchgeek> whoops\n```\n\nFortunately, I killed the ninja with a few zaps of a wand of lightning (my death wand had run out of charges). I switched to the Tsurugi (I think its an awesome weapon, though twoweapon may do more damage). Preparing for Gehennom was a piece of cake--all I still needed to wish for were markers. I got two of them, bringing my wand down to 1:1. By the time I headed to the Valley I had 176 HP and an AC of -27--not great, especially without free action, regeneration, or conflict at my disposal, but good enough. I bought clairvoyance from the priest (great mapping strategy, by the way), and Gehennom was thoroughly uneventful. Except...I forgot candles. Again. (Dont tell me you never did that....) So two uncontrolled level teleports later (no ring of teleport control allowed), I was remarkably close to my stash, where I made a last stop and went to get candles.\n\nAnd oops...Im invisible and have no way to get into the shop. So I had to teleport Izchak (sorry Izchak, I wouldnt have stolen from you if you let me in!) and run off with the candles. Annoyingly, I had to walk all the way from dungeon level 2 to the Wizards Tower. I killed Rodney and got into the Sanctum fine, bisected the high priest (\The razor-sharp blade cuts the high priestess of Moloch in two!\ is so satisfying...), and headed back up. On one of Rodneys reappearances I wasted 5 death charges because the darned thing just kept missing, but otherwise nothing of note happened.\n\nAt my stash I noticed it was turn 30,000 and I still had not identified a scroll of gold detection. I wished for a marker, with the idea of wishing for gold detection scrolls with my last wishing charge if I couldnt write it. But cool, I wrote it on the first try. I played the Planes like I was speedrunning for some reason (guess I was anxious or something--I had already splatted on the Planes twice trying for p-less).\n\nAnd the Astral Plane. 204 HP, and an AC of -29. What could possibly go wrong?\n\nFirst altar, Famine. I try to dodge Famine. I end up getting hit by a potion of paralysis surrounded by three priests and Famine. (Remember, I have no free action and no life saving due to the conduct.)\n\n//facepalm//\n\nAand...\You can move again.\ HP 5(204). Fortunately I had a potion of full healing, so I quaffed it and went on (after saying a prayer of thanks to Random Number God). But I was still surrounded with Famine in melee range, and the next hit took me to half my HP. I broke a wand of teleport to clear the crowd, then cured Famines stun attack and hit him with a wand of death with 77HP remaining (the Riders are rarely affected by teleport). Since I was short on full healing potions, I decided not to quaff one. First altar was chaotic. I made it back out uneventfully, and killed Famine with a wand of death again. Next altar was Pestilence (the door was already open, or I would have gone to Death). My first wand of teleportation ran out, but I made it to the second altar with 108HP remaining. That one was neutral (of course). I met a second potion of paralysis coming out, which takes me down to 77HP (the same number again, yes), which forced me to quaff my second potion of full healing, leaving me with just one more. Out I go, once again killing Pestilence.\n\nAt the door to the third courtyard came the third potion of paralysis. This one didnt really do anything, as there was nobody much around. I had to melee Death, as I didnt bring any ranged weapon. Fortunately, he went down in two hits, and my max HP only dropped to 181. Next I wasted two turns by zapping my wand of teleportation named \out\. I also teleported my high priestess by mistake, angering her (this will become very important in a minute). In front of the door to the last altar--mine--comes the fourth potion of paralysis. (What was with the paralysis gods today?)\n\n\You can move again.\ HP 55(181). Quaffed my last potion of full healing, but I was surrounded and the next round took me to 113 HP, so I broke another wand of teleportation (fortunately, not the one named \out\). I was now entirely out of teleport charges, so I used my one scroll of charging. Im now one teleport zap and five steps from immortality. I start walking in. Two steps from my altar, and my high priest (who I angered earlier) takes me down to 9 hitpoints with an open wounds spell. I have no more full healing (indeed, my only healing is a cursed potion of extra healing in my bag), and cant press p to pray. I took the next steps entirely too fast, but I started by stepping away from the priest. I probably only have one turn to do something.\n\nI have a blessed magic lamp left, so I try rubbing it. I got a puff of smoke. (This was possibly the tensest moment of my entire NetHack career...). I now have 9HP, and my own hostile high priest is standing right next to me, pinning me against a wall. So I take the chance that death will hit---priests in their own temple resist teleport.\n\n\You kill the high priestess of Amaterasu Omikami! You murderer!\\n\nI have healed 3 HP, for a total of 12. Since I murdered a coaligned priest, I lost my 6 points of protection and telepathy. Im blind because of my gods lightning, so I have 12HP and cannot even see any advancing monsters. I #rub my magic lamp again.\n\n\You smell acrid fumes. Something speaks. I am in your debt. I will grant one wish!\\n\nI wish for \3 blessed full healing\.\n\nr - 3 potions. The phial crashes on your head and breaks into shards. You hear the howling of the ~CwnAnnwn... Something seems to be holding you.\n\nI swear on IRC for a while.\n\n\It hits! It hits! It hits! Something casts a spell at you! You are hit by a shower of missiles! The missiles bounce off! It hits! It hits! It hits! Something casts a spell at you! You are hit by a shower of missiles! The missiles bounce off! You can move again.\\n\nIM STILL ALIVE! Albeit with 7 hitpoints, but I have 3 potions of full healing.\n\nYou feel completely healed. You can see again.\n\nWhat do you want to name this bag of holding? HAHAHAHAHA I BEAT YOU STU-ID RNG!!!\n\nThe voice of Amaterasu Omikami thunders: \Congratulations, mortal!\--More--\nYou ascend to the status of Demigoddess...--More--\n\nThis game was actually really fun. Trying something as silly as not pressing p may not be a massive achievement, but its certainly something different. And it was an interesting challenge to break the monotony of more normal conducts. Its not terribly difficult either, though if your RNG decides to give you five (count em, five) thrown potions of paralysis on the Astral Plane you may be in a bit more trouble. Its a miracle I survived that game.\n\nhttp://alt.org/nethack/userdata/s/scorchgeekasc/dumplog/1302468467.nh343.txt\n\u003C\u003C\u003C\n\n\nOne person congratulated me in response for “completing a game of NetHack without ever peeing.”},{title:PlotBasedDramaticIrony,created:20200125213828504,creator:soren,description:The audience of a story may know more than the characters because of expectations placed on the narrative form.,es:confident,modified:20240320214749229,modifier:soren,tags:SorenConcept FictionTheory Public Idea,type:text/vnd.tiddlywiki,universe:HaroldAndMaude1971,text:Plot-based dramatic irony is a form of dramatic irony that may occur even without the authors intending it, in which the audience knows more about how the story goes than the characters can because of expectations placed on the narrative form. Typically this takes the form of predicting how a seemingly chance-laden event will turn out far better than chance.\n\nFor instance, if were watching a James Bond movie, we know as an audience that Bond wont die, no matter how dire the situation gets. Similarly, even if we know nothing about the genre or intent of the author, if were reading the first book of a multi-part series, it is a safe bet that the protagonist will be around for some time yet.\n\nMore subtly, timing can play a role. Sometimes when a character is presented with a dilemma, we can see that one option would require much more space than the other to cover properly, and there isnt enough space left to cover one of them (or vice versa: one would bring the story to an end far too quickly). Usually this only allows us to rule out certain possibilities rather than actually know precisely whats going to happen, but it is additional information nonetheless.\u003C\u003Cfnote \See also MrZviMowshowitzs treatment of sports spoilers|https://thezvi.wordpress.com/2022/07/21/youtubetv-and-spoilers/, in which the length of a recorded game is indicated as one of the prime spoiler hazards.\>>\n\nSometimes, especially at the end of a work, one possible track just fits far better with the themes of the work (which are at that point mostly clear). For instance, in HaroldAndMaude1971, when MsMaudeChardin is taken to the hospital after overdosing, the idea that she would survive is preposterous: given her age and the prevalence of death in the story, as well as the pseudo-tragic star-crossed-lovers framework thats been developed, she will plainly die|DeathOfMaudeChardin. If she did survive, barring some additional brilliant twist, we as an audience would be complaining about how it happened!},{title:PlotHole,created:20200125230817823,es:confident,modified:20200503221511994,tags:FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Those bits of a work of fiction that just arent quite logically consistent. This transcends SuspensionOfDisbelief: once you spot a plot hole, theres no way to rationalize it even within the fictional universe.\n\nMay take the form of a completely implausible event or of something //not// happening that any sane person would do (with no explanation for the discrepancy).\n\nA related but perhaps somewhat different phenomenon is failure to coordinate the background of the world (having two consecutive days be Mondays, or having the narrator contradict herself on a brute fact a few pages apart). DreyersEnglish2019 identifies a few more of these, in a subheading \The Real Reality of Fiction\ in Chapter 7, p. 103:\n\n* characters that age at different rates\n* ContinuityErrors\n* dates that dont match the Gregorian calendar with no explanation (e.g., a day that actually falls on a Tuesday is treated as a Monday), or real-world events being referenced that didnt actually occur on the day\n* things happening in implausible amounts of time (e.g., driving from New York to San Francisco in fifteen hours)\n\nThere are also ways that fiction can assert falsities or //be// false; see FictionalFalsehoods.},{title:Pnin1957,author:Nabokov,bibliography:LifetimeReading,caption:Pnin,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035790,priority:2,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1957,text:Copy: K},{title:PoeCompleteStoriesAndPoems,author:Edgar Allan Poe,bibliography:LifetimeReading,caption:Complete Stories and Poems,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035803,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:PoetryAndTruth1833,author:Goethe,bibliography:LifetimeReading,caption:Poetry and Truth (autobiography),created:20210703170128000,genre:History,medium:book,modified:20210705214035813,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1833},{title:PointlessApprovalProcess,created:20200406025250671,creator:soren,modified:20201222202633612,modifier:soren,tags:Process Business Public Idea,type:text/vnd.tiddlywiki,text:A pointless approval process occurs in bureaucracy when someone, for one reason or another, has to sign off on a decision despite having no logical reason or even desire to control the outcome, and/or has no information that would qualify her to make the decision. Despite it being complete WorkWaste, pointless approval processes are extremely common in organizations of any size.\n\nPeople tend to be aware when pointless approval processes are taking place, but various political hurdles may make them difficult to take down even when most everyone agrees. Identifying the lack of CustomerFocus might be a valuable argument.\n\nSome possible causes:\n\n* The person in the approving position once had knowledge that would enable her to make a useful decision, but a different person now holds the position or the task has changed so this no longer applies.\n* The person wants (or once wanted) to have a say in the decision but overestimates or does not care about her ability to provide meaningful input.\n* The people submitting it for approval want to avoid responsibility for the decision due to a FearCulture, and have no other good way to remove their names from the decision.\n* Past bad experience has suggested pleb employees cant make good decisions. Usually this means you have or had incompetent employees, the cause of the bad result was misunderstood, and/or the process was broken (esp., a DesignApproach was not followed). Approvals seldom (not never, but seldom) solve process issues, and they positively dont solve bad results or incompetent employees (if you doubt the latter, recognize the incompetent employees will merely become BetterIdiots after you block their mistake with an approval).\n** Accelerate2018 makes this point with a scientific study on change approval boards, which found that they had //zero// correlation with change failure rate. They did, however, substantially slow down the delivery of value, including needed fixes, which means they actually make the organization less reliable!},{title:PointlessVideoUsage,created:20200329172434118,es:likely,modified:20210616232941667,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Some people seem to think that because they can make content on the Web into a video, they should make that content into a video. In my opinion, video should be the last resort. Video is inevitably slower than reading, you cant search it, you cant skim it (except very slowly and painfully), its harder to go back and recheck things, you cant copy and paste notes, and it uses more bandwidth. Also, people usually dont read off a script when they produce videos unless its very professional, which means they would probably do a cleaner job if they wrote it and had a chance to revise, and if the content goes out of date you have to re-record the video, so videos tend to be revised much less often than written documents.\n\n(OutSystems training videos attempt to avoid some of these last difficulties by having a text-to-speech engine read the text, which perpetrates howlers like pronouncing an //attribute// of some data with the accent on the penult, and generally makes you feel like they dont care!)\n\nThis is not to say that video is all bad; when the task is visual it can save ungodly amounts of time over trying to follow a written description. But then its not pointless, is it?\n\nEpistemic disclaimer: I am somewhat biased against certain uses of video due to what seems to be a sensitivity|FilmSensitivity to it.},{title:pola.png,type:image/png,created:20201029135407533,modified:20201029135627604,tags:Image Public,_canonical_uri:./extimage/pola.png},{title:Polish,created:20221101013158971,creator:soren,description:Polished products are created by style, attention to detail, and refusal to do anything halfway.,es:confident,microlink:polish,modified:20240611050228296,modifier:soren,tags:Idea Design Business Process Productivity Creativity Public,type:text/vnd.tiddlywiki,text:Polish is a quality of any excellent product. Its the embodied result of a process of design and construction not by laborers, who care about getting the job done and getting paid for it, but by craftspeople, who care about how well they do the job and see doing the job well as a goal in itself. (Cf. CraftsmanMindset.) It involves style, attention to detail, and an uncompromising insistence on doing exactly what is supposed to be done the best that the craftsperson can do it.\n\nYou know polish when you see it. Its when a software error actually tells you exactly what went wrong and explains in understandable terms how to fix it. Its when the copyright page and the table of contents are designed as carefully as|AttentionEspeciallyToIncidentalDetails the rest of the book. Its when your new iPhone comes in a box thats as sleek and sturdy as the phone itself. Its when you get a few extra shelf pins with your bookshelves because the builders know some are inevitably going to fall out and get lost when you move.\n\nMissing polish stands out, too: the software has tiny grammatical errors in it like “1 files copied”; the book is beautifully designed but is printed on see-through paper; the $1,000 device has a power switch made out of smelly dollar-store plastic; theres a mistake in the assembly instructions. Particularly bad rough edges can ruin your entire experience with the product, even if it otherwise works well.\n\nPolish makes people like things without realizing why, and rough edges make people dislike things without realizing why. Products with a high degree of polish are rare, but I bet you love almost every one you have. (Apple products justify their price premium to fans by being polished. Microsoft cant even give all the control panel widgets in Windows 11 the same design. Apple even optimizes //the box the computer comes in//.)\n\nPolishing is, crucially, not gold-plating, i.e., delivering more than was needed. In fact, gold-plating diminishes polish -- a polished product is exactly as complex as it needs to be to excellently serve the purpose its designed for, and no more. Polish is merely the commitment never to half-ass any part of the product. You can scope what youre creating however you like, but what you decide to put in, you commit to do right|DoItRightTheFirstTime. For example, you can decide not to include a feature in your software (yet or ever), but you cant intentionally put a buggy version in and hope the bug wont affect many people.\u003C\u003Cfnote \Again, you //can// scope it down – you could identify what situations the bug comes up in and block people from using those. Or, taking advantage of the infinite flexibility and configurability of software, you could make it experimental and let people opt in to the experimental part, explicitly telling them this isnt polished yet but youre defaulting to open|DefaultToOpen in case its helpful for now. In this way, you keep the lack of polish hidden from people who need the impression of polish, while not losing any functionality.\>> You can decide not to tell part of a story, but you cant put it in while giving it less time than it deserves. You can leave tools out of your furniture kit, but you cant include tools that are so cheap theyre infuriating to use.\n\nPolish is also not in conflict with the EightyTwentyPrinciple. By all means, you should use this principle to select the components to include in your product that are unusually important. You should //not// then apply it to each component youve committed to, resulting in doing each component “80% right”; this is the fast track to an (at best) mediocre product, because that remaining 20% represents things that are not just missing (as when you use the principle to select what components to include) but //wrong//. Do the 5 most important things 100%\u003C\u003Cfnote \More realistically, 98%. Nothing is perfect.\>> right, not the 20 most important things 80% right.\n\n----\n\nHow do you create polish?\n\nIts actually easy, as long as you care enough. In fact, chances are you already know what you need to do to add polish, you just dont feel like doing it at the moment you need to. \n\nA polished product is the result of a large number of small choices made over time. The choices are made at the time that you submit each pull request or design document or leave off working on each chapter. So if theres something trivial you can do to make your customers lives better when youre working on some part of your product, spend another ten minutes on that. Imagine a customer questioning what you chose to include and what you chose to leave out; can you defend your reasons for leaving it out, and do you think a reasonable customer would accept your reasons, or do you just sound like youre being lazy or cutting corners? And before you consider any part of your work finished, ask yourself if it represents the best work you could have done under the circumstances, and if it doesnt, figure out what you skipped and do it.\u003C\u003Cfnote \Just to be clear, again: its fine to leave things out that are logically related to the work youre doing, if they arent the most important thing to be doing right now; its not fine to lie to yourself and finish only half of what was really in scope.\>>\n\n!! References\n\n> Refuse almost everything. Do almost nothing. But the things you do, do them all the way.\n> ---MrDerekSivers, “Hell Yeah or No|https://sive.rs/hyn” (\u003C\u003Crt 12786>>)\n},{title:Politics,created:20200201134804412,creator:soren,modified:20210828141403555,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:The most delightful of human endeavors! A tag used both for the obvious nation-level processes and more local machinations involving people and power.},{title:Polyspecialization,created:20201206210248323,description:Polyspecialists know a little bit about a wide variety of things and quite a lot about several things.,es:likely,modified:20210627024711986,tags:Business Employment LifeDirection Creativity Public Idea,type:text/vnd.tiddlywiki,text:A carefully considered middle ground|ModerationAndBalance between striving to understand a little bit about all areas of knowledge (being a //generalist//) and striving to become an expert at one narrow field of study (being a //specialist//). The goal of polyspecialization is to know a little bit about a large number of things (//areas of acquaintance//) and quite a lot, but not as much as a single-area expert, about several things (//areas of expertise//). In the words of MrBruceSterling (as qtd. in MindHacker), a polyspecialists graph of knowledge is “spiky,” compared to the generalists fuzzy circle or the specialists single bar.\n\nTerm due to MindHacker, hack #13.\n\n\n!! Areas of ignorance, acquaintance, and focus\n\nWhen discussing polyspecialization, I find it useful to divide every possible field or topic into three categories:\n\n; Area of ignorance\n: \u003C\u003Cstretch AreaOfIgnorance>>\n; Area of acquaintance\n: \u003C\u003Cstretch AreaOfAcquaintance>>\n; Area of focus\n: \u003C\u003Cstretch AreaOfFocus>>\n\n\n!! Benefits of polyspecializing\n\n* You can do interesting things and become highly marketable without having to be among the worlds best at a specific thing, which is especially valuable in the increasingly WinnerTakeAll environment engendered by the Internet. Rather than having to be //outstanding// at one thing, you can merely be //good// at a combination of things that together add up to an outstanding performance in the area defined by the combination. Its quite difficult to become outstanding at something, especially since it may be unclear whether you have the talent to be outstanding at that thing until youve invested thousands of hours into it. Most people can become //good// at things theyre well-suited for with a relatively small amount of effort, and indeed most people can become good at almost anything with a sufficient amount of effort. (N.B.: just because you //can// doesnt mean its a good use of your time if youre not well-suited for that thing! See also SkillsKnowledgeAndTalents.) In addition, considering each topic in light of the EightyTwentyPrinciple, you have the time to become good at a number of things rather than just one.\n* Someone who knows about more disciplines is more likely to create new and unusual connections, especially in a world of increasingly specific and fragmented disciplines. Being an expert in one area with relatively little knowledge outside of it may lead to myopia and researching or working on relatively worthless things|WorthlessEfficiently. See DisciplineCrosspollination.\n* You are less fragile should your current area of work fall apart or begin to bore you; you are diversified|InvestmentDiversification. You are able to pivot to a more marketable or interesting combined discipline with relatively little work should you choose to do so. With several strong areas of focus, you may be able to switch to something new immediately; or with a quick professional break or some evening study and some on-the-job learning, you can raise one of your areas of acquaintance to an area of focus to create a new combination.\n* Polyspecialists tend to //look// smarter and more skilled than either generalists or specialists, even if they dont actually possess a greater degree of total knowledge, wisdom, experience, or skill. This is because its difficult for a non-expert to assess the depth of a high-percentile experts abilities, but almost anyone can easily see the difference between a vague understanding and a moderately deep one. The polyspecialist thus has a greater degree of ability assessable by the average person. This can be quite beneficial for ones career prospects (see also AppearancesOverReality).\n* If you are like me and have a naturally EclecticMind, its simply a lot more fun.\n\nFor career purposes, ideally the areas of focus form an //unusual// combination. Unusual combinations have the potential to put you in high demand (if you can find someone who wants that combination of skills, there will probably be barely anyone else who can replace you) or even allow you to invent an entirely new field of study. (One is reminded of the phrase and concept SoGoodTheyCantIgnoreYou.) Also particularly helpful are areas of focus useful in almost any job (e.g., writing/communication).\n\nPolyspecialization is probably the closest achievable thing to the “Renaissance man” ideal today. For several centuries now, there has been too much available knowledge for one person to be an expert at everything, and if one tries to generalize across //all// topics, one ends up not being particularly good at anything.\n\n!! Personal applicability\n\nI consider myself a polyspecialist. More or less every green tag in this ZettelKasten is an area of acquaintance, and undoubtedly there are others that havent been captured yet. My areas of focus include IT (of the fixing-broken-computers variety), programming, music (particularly violin and vocal performance), writing, and information management (SpacedRepetition, PersonalDocumentation, and so on). I am no MrDennisRitchie or MsAlisonKrauss or MrLeoTolstoy or MrTedNelson, but I can make valuable contributions that people appreciate in each area and have been paid|LawOfFinancialViability to do all of these things.},{title:PoopSandwich,created:20200422024426216,creator:soren,es:mythological,modified:20211027035709263,modifier:soren,tags:Humor Expression Public Idea,type:text/vnd.tiddlywiki,text:J.M.|PrivatePerson: “A hot poop sandwich is better than a cold poop sandwich, but its still a poop sandwich!”\n\nThe point being twofold:\n\n* “New and improved” is a relative term, and if its relative to a poor baseline, you still have nothing worthwhile (see BaseRateFallacy). Dont fall for the hype, be appropriate|AppropriateTechnology.\n* Many things cant really be improved. They just have intrinsic faults -- you cant make a RaceHorseOutOfAPig. Vaguely related: WorthlessEfficiently.},{title:PortageWisconsin,created:20240402013752298,creator:soren,modified:20240402013753931,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PortAngeles,created:20250626182414756,creator:soren,modified:20250626182415375,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PorterCountyMuseum,created:20240402013800713,creator:soren,modified:20240402013801630,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PortlandMaine,created:20230405170100006,creator:soren,modified:20230405170109799,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PortlandOregon,created:20250618153336902,creator:soren,modified:20250618153337902,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PortlandWomensForum,created:20250618153327869,creator:soren,modified:20250618153328570,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PortnoysComplaint1969,author:Roth,bibliography:LifetimeReading,caption:Portnoy’s Complaint,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035827,priority:1,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1969},{title:PortraitOfALady1881,author:Henry James,bibliography:LifetimeReading,caption:Portrait of a Lady,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035836,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1881},{title:PositiveAndNegativeQuestioning,created:20210119031312039,creator:soren,es:possible,modified:20250105180842251,modifier:soren,tags:Science Reasoning Public Idea,type:text/vnd.tiddlywiki,text:In Science, or inquiry in general, there are two types of questioning, questions and curiosity being the means of advancement:\n\n* Positive questioning, in which you explore the possibility of something existing that most people dont know about, understand, or believe in.\n* Negative questioning, in which you explore the possibility of something that is widely accepted being in fact not true, not existing, or being a misleading taxonomy|TaxonomySmashing (the entire premise being wrong).\n\nBoth types of questioning are essential: positive questioning is how new insights are created, and negative questioning prevents everyone from getting stuck in the same old rut believing things that might have been useful steps on the road to enlightenment but may not be strictly true anymore, or may have been missteps.\n\nI dont think this is unrecognized -- though perhaps not in these terms -- but it seems to me that in certain narrow contexts, one is overemphasized compared to the other. For instance, strict scientific materialism is a worldview in which certain types of positive questioning (those that relate in one way or another to the nature of reality, primarily) are considered exasperating or absurd, while negative questioning about almost anything is widely upheld and celebrated; in contrast, in technology, negative questioning about the value of social media or smartphones or AI is tantamount to heresy, while positive questioning about any new technology that sounds cool is the highest ideal.\n\nThere may also be a confusion between questioning and belief, and between belief and reality|BeliefAsInstrument. You dont have to believe something or think it probable to start a line of inquiry about it (and indeed you may be more blessed with insights and convincing when you find them if you start out skeptical), and you might choose to believe something|Metafaith without knowing for sure that it is true.},{title:PossibleMemoriaTalks,created:20250902161013760,creator:soren,modified:20250902164803759,modifier:soren,tags:Idea Stub Public,type:text/vnd.tiddlywiki,text:Making Med School Learning Less Awful:\n\n\u003Ca href\remnote://w/6158e7597668b80035451554/UY1ZMpo19derkCZob\>remnote\u003C/a>\n\n\n\n!! \u003C$link to\MemorySystemsNeedGenuineInterest\/>:\n\n{{MemorySystemsNeedGenuineInterest}}\n\n!! Experiences embedding flashcards in hierarchy, etc. (RemNote)\n\n* avoiding floating ideas (SpacedRepetitionEncouragesFloatingIdeas)\n* ease of creation (SpacedRepetitionPrimitive)\n\n\n!! Poetry\n\nIm the maintainer of LPCG. But actually I mostly want to hear what //other// people do here, and if they have experiences with memorizing things verbatim, because I want to understand the problem here really well and build something specifically designed around its (fairly different, I think) demands.\n\n\n!! Insights from trying to convince other people to use SR\n\n* people try to treat it as a magic box\n* ToolsForThinkingDontWow; is it really true that we cant design memory systems whose form intrinsically gives people the “wow moment”?\n* need for metacognition; without this Im not sure you can succeed, and its hard to give people this if youre trying to get them into it\n* success is very quiet (e.g., ability to quote something in conversation; sometimes I notice it’s because of a card but sometimes I’m sure I do not!)\n* consistency beats volume\n* the iterativeness of learning\n\n\n{{PossibleMemoriaTalks/p||PrivateChunk}}},{title:Postgres,created:20200529210132090,modified:20200529210149062,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular OpenSourceSoftware SQL database. See also MySql.},{title:PotentiallyDislikablePerson,created:20201204225551088,creator:soren,es:possible,modified:20240601144348634,modifier:soren,tags:SorenConcept Sociology Definition Public Idea,type:text/vnd.tiddlywiki,text:A potentially dislikable person (PDP) is someone who is sufficiently unusual or polarizing that some people will find them intolerable (and this is OK: ThingsArentGoodForEveryone). This said, those who do not find them intolerable will often really appreciate having them around, even if they dont become friends. Thus, the PDP is a destabilizing influence on social networks|SocialGraphTheory but also adds a great deal of interest to relationships and creates particularly meaningful connections.\n\nConnections with PDPs seem likely to be more productive both intellectually and practically, just like CrossClassConnections. Interacting with PDPs is also a way of getting out of ones PersonalBubble.\n\n\u003C$let pdp-filter\allcurrentbacklinkstagPAO\>\n\u003C$m2.iex filter\u003C\u003Cpdp-filter>>>\n\tExample PDPs (whose person article mentions they are a PDP):\n\n\t\u003C$macrocall $name\list-links\ filter\u003C\u003Cpdp-filter>> />\n\u003C/$m2.iex>\n},{title:PowellsCityOfBooks,created:20250623162331716,creator:soren,modified:20250623162332683,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PowerAutomate,created:20200529165412777,modified:20201222045501185,tags:Software MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:Source: PowerAutomate20200519. PowerAutomate is a component of the PowerPlatform.\n\n* Goal of PowerAutomate: How can we get more people able to automate things? Free up time for doing the things people are good at.\n** Accessible to IT/admins, experienced developers, and end users (cf. ComputingCitizen).\n*** End users are the ones who experience the pain...so get them involved in the solution (cf. BringThePainForward).\n\n* Benefits of the low-code system for developers\n** Really easy to get started -- lower barrier to entry\n** Speed\n** Debuggability -- see full execution history\n** Documentation -- easier for others to pick up\n** Deeply integrated into other Microsoft tools\n\n* What can we automate?\n** Windows apps, via UI Automation framework\n** Webapps, via Selenium\n** Win32 desktop tools, via ~WinAutomation from an acquired tool, announced today\n\n* Integrations/extensibility\n** 300 native connectors for M.|PrivatePerson and 3rd-party systems\n** Can use company/custom Azure Functions, logic apps, API Management interfaces via custom connectors\n*** Start with OpenApi, Postman, or documentation samples\n*** Set up authentication\n*** Publish for your organization or submit to marketplace for others\n\n* First-class development tool\n** Full CI/CD/testing/monitoring like elsewhere in Azure},{title:PowerAutomate20200519,at:202005192015,caption:Intelligent process automation with Power Automate,created:20200518213303837,medium:video,modified:20210522015801896,presenter:MrStephenSiciliano,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/5be05523-b467-44a3-b5cc-c8f60461bdc1,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nMicrosoft PowerPlatform contains several components (q.v.); this presentation focused on PowerAutomate.\n\nI put most of the info about the platform into the PowerAutomate tiddler itself. This presentation also looked at how its been useful in COVID19|PandemicMood response.\n\nI only saw the first half of this because I left to see the ResponsibleAiPanel20200519. So I had to jump out before seeing concepts or a demo, but this looks worth looking into! Fed may already have tools that do most of these things, though.},{title:PowerBi,created:20200529164945604,modified:20200529164959136,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons modern reporting and BusinessIntelligence tool.},{title:PowerOfKonsistency,created:20200129134811785,creator:soren,description:Seeking to do things consistently is more useful than seeking to do them extensively or well; the quantity and quality takes care of itself.,es:confident,microlink:consistent,modified:20240629032421224,modifier:soren,tags:Productivity Process Public Idea,type:text/vnd.tiddlywiki,text:MrAntonArmstrong pointed to consistency as one of the strengths and differentiators of TheStOlafChoir (invariably using an ostentatious hard choral K, thus the title). If youre 100% perfect sometimes and out of tune or out of sync sometimes, youll still sound mediocre. If youre 98% perfect all the time, you will be perceived as vastly better, even if your peak performance is technically worse.\n\nInconsistency does a poorer job at strengthening mental pathways and doesnt enable you to count on something being right. Pocket calculators and even computers are useful not just because theyre fast and easy but because they virtually always give the right answer given the right inputs.\n\n\n!! Consistency beats volume\n\nOn top of that, consistency is //also// the best path to actually achieving peak performance.\n\nWhen it comes to habits or creative output, I often say that //consistency beats volume//. This is not only because consistency is valuable, but also because consistency //creates// and //enables// volume. If you get the consistency right, the quantity and quality will usually take care of themselves (the quality is a SurfaceProblem, and the consistency is the TargetProblem).\n\nDoing something consistently creates SuccessMomentum and powerful habits. It also gradually changes your Identity into someone who succeeds at consistently doing X, and makes you believe you can not only continue being consistent but also achieve things by doing so. Once you get into the rhythm, you tend to be motivated to (a) continue consistently doing X; (b) do more focused DeliberatePractice to increase the power of your consistent work; (c) do extra work when you feel like it. When your results build up over time and dont WalkBackwards, as when writing, consistent work forms a RatchetingProcess that builds into something impressive remarkably fast.\n\nConsider also the old trick of //going// to the gym every day even if all you do is walk in the door, sign in, and walk out again: most of the time, by the time you get there, you have enough motivation to actually work out for at least a little while.\n\nIf you aim directly for volume, rather than aiming first for consistency, you tend to work in a binge-purge cycle where you try to accomplish a huge amount all at once, get sick of it, and give up for a period of time. Your identity never changes, and you never build any success momentum, so you cant take advantage of any of the force-multiplier effects described earlier. Maybe you get a little more done in the short term. Maybe you would even get more done in total if you never got better at the thing in either condition.\u003C\u003Cfnote \Consider that if you can spend eight hours on something one Saturday, thats two and a half weeks of 30 minutes a day; youll probably be less productive when you work eight hours straight, but even so, its a lot.\>> But the identity, motivation, and improvement effects are worth a huge amount. MrJamesClear points out|https://jamesclear.com/continuous-improvement that if you get 1% better at something every day, after one year youll be 37 times better.\n\nOf course, consistent work doesnt help if youre not doing something useful. Dont do worthless things consistently|WorthlessEfficiently.\n\n\n!! Examples\n\n* Ive found that focusing on typing smoothly and with few errors often leads to faster total speeds than trying to type as quickly as possible. Smoothness and few errors to stop and correct is a critical component of speed for most non-novice typists; simply hitting the keys fast is easy, but if you dont hit the right ones and dont get into a flow, you wont be typing at your theoretical fastest possible rate, and so its better to cut the rate down just a little bit but make every movement you do count in the final total.\n* Dynomight has a great piece on getting in shape as a runner|https://dynomight.net/2021/01/25/how-to-run-without-all-the-agonizing-pain/. See DynomightSchoolOfRunning. (I havent personally tried to become a runner, but I have used this method to get places when Im in a hurry, and I can say it lets me move at a very good clip with only minor discomfort.)\n\n!! References\n\n\u003C$m2.x number\1\>\n\nThats the key: consistency. People who do great things dont get a lot done every day. They get something done, rather than nothing.\n\n---Paul Graham|MrPaulGraham, “How to Do Great Work|https://paulgraham.com/greatwork.html”\n\u003C/$m2.x>},{title:PowerOfNames,created:20200410201316011,creator:soren,description:Giving a name to something is taking ownership of and understanding it, turning it into a manipulable symbol.,es:confident,modified:20210613213316391,modifier:soren,tags:Identity Reasoning Psychology Public Idea,type:text/vnd.tiddlywiki,text:Being able to name something is critical to understanding it. It also tends to be difficult, perhaps because of how tightly related it is to understanding; see NamingThings.\n\nSee for instance IdeaApis.\n\n{{PowerOfNames/p||PrivateChunk}}\n\nContrast NoLabelsPhilosophy.\n\nI wrote some public thoughts on this on TheControlAltBackspace in PowerOfNamesPost.\n\n!! References\n\n> Things you name, you own. Collected but unnamed stuff owns you.\n> ---MrDavidAllen, GettingThingsDone (\u003C\u003Crt 10596>>)\n\n\u003C\u003C\u003C\nWhen I finally got treatment, it gave me a sudden, liquid thrill to glimpse the diagnosis written on one of my medical forms: //eating disorder//. It was as if there was finally an official name for how I felt -- the sense of inadequacy and dislocation -- as if the words had constructed a tangible container around those intangible smoke signals of hurt. It made me feel consolidated.\n\n---MsLeslieJamison, “The Quickening”, TheAtlantic (\u003C\u003Crt 10668>>)\n\u003C\u003C\u003C},{title:PowerOfNamesPost,caption:The Power of Names,created:20200410201158733,creator:soren,medium:article,modified:20200909142502812,modifier:soren,tags:Sink Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/psychology/the-power-of-names/,year:2019,text:TheControlAltBackspace post on the PowerOfNames, particularly as it relates to sexuality (discussing being a DemiPerson), nature, chess, software patterns, and DomainSpecificLanguages.},{title:PowerPlatform,created:20200521135858633,es:confident,modified:20210623022819444,tags:Software MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:Microsofts LowCode development tool. Consists of:\n\n* PowerBi (we know what that is)\n* PowerApps\n* PowerAutomate\n* PowerVirtualAgents (BluePrism-like)},{title:PowerPlatform20200520,at:202005201830,caption:Accelerating enterprise app development with Power Platform,created:20200518214319313,medium:video,modified:20210522015801911,presenter:MrJamesPhillips MrCharlesLamanna MsKimManis MsJulieStrauss,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/4b904963-a22a-4046-b01b-85eb2c1f9732,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\n* Prediction: 500 million new apps will be built in the next 5 apps...more than in the last 40 years!\n** Not enough developers to accomplish this...most organizations already have a backlog.\n** This is where low-code platforms like Power Platform come in (but can be useful for pro developers too). MS is calling the others \citizen developers\ -- cf. ComputingCitizen.\n** \No cliffs development\ -- you always have the ability to get into more complex tools without starting over.\n** 97% of the Fortune 500 is now using PowerPlatform\n\nMsJulieStrauss:\n\n* Showing a finished app built for the Seattle-area hospital Swedish to cope with COVID-19\n** Not real data in the demo, of course!\n** Can use mixed reality in the phone to place a bed youre requesting so the delivery team can see where it goes\n** AzureFunctions used to gather bed capacity, exposed through an API Management Service, from where you can \export API to PowerApps\\n** Request form that can be used if theres no mobile device available. Can then be read with a Form Processing model. Email a photo of the form and it gets added to the database.\n** UI Automation to push the results into a legacy app (record usage\n\nMrCharlesLamanna:\n\n* Emergency Response Portal\n** Bot that allows people to place requests without learning the app\n** Can test the bot out in the dev tools and it will live-trace its way down the flow\n** Can access the Power Platform databases with T-SQL now\n\nMsKimManis:\n\n* Accessing this stuff with Azure Synapse/Power BI etc\n** Real-time streaming\n** AI Visuals\n** Natural Language Q&A\n** Smart Narratives (preview) -- computer explains some of the interesting things going on in the data. You can also add your own analysis and fill in dynamic fields so theyll update as the data does.\n** Can embed the dashboards in the app -- PowerBi Embedded Playground for more details},{title:PowerPoint,created:20200529211936813,modified:20200529212103271,tags:Public Software Idea,type:text/vnd.tiddlywiki,text:M.|PrivatePersons slideshow/presentation software, often used as a genericism for any kind of slide-generation system. Maybe confusingly in the future, not part of the PowerPlatform!\n\nPowerPoint, while not specifically intended for this use, is also excellent at anything that involves visually arranging elements, even if the eventual target is print or web -- cleaner and easier than a WordProcessor since it doesnt keep moving your elements around randomly as you add text to the document.},{title:PowerShell,created:20200121223425579,creator:soren,es:confident,modified:20211113172616769,modifier:soren,tags:Code Software Public Idea,type:text/vnd.tiddlywiki,text:Microsofts answer to Bash scripting on Linux (with added tools like Python, awk, etc.). I like|LikableSoftware it, for the most part. Particularly well-suited for system administration and (in my opinion) manipulating data.\n\nAll users should be taught the skills to use a simple CLI like PowerShell, in my opinion. GUIs are nice when theyre designed for the task you want, but sometimes being able to drop out to the command line and whip off a few one-liners is extraordinarily helpful. PowerShell is really not that hard.\n\nPowerShell, even more than most programming languages, except perhaps PHP, has some ridiculous design warts which I refer to as PowerShellFails.\n\nA new tool called NuShell promises to add many of the nice features of PowerShell in a cross-platform-from-the-start, open-source shell.\n\nSometimes I affectionately refer to PowerShell as “~PowerHell”, or “the powers of hell” (after a hilarious effect on my work computer where the default size of desktop icons is just barely too small to fit the full word “PowerShell” and Windows breaks after the S).},{title:PowerShellFail,color:#6c6cff,created:20200225184411999,es:confident,icon:$:/core/images/list-bullet,modified:20210512233036303,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:Collection of the results of some ridiculous design decisions in PowerShell.\n\n\u003Cul>\n\u003C$list filter\tagPowerShellFail\>\n\t\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\n\u003C/$list>\n\u003C/ul>},{title:PowerShellForGraph20200521,at:202005211200,caption:PowerShell Everywhere for Microsoft Graph,created:20200518214516683,medium:video,modified:20210522015801919,presenter:MrDeanBryen MrDarrelMiller,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/333d653f-cc69-4f46-85e6-45b47296f847,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nReal quick session regarding the new MicrosoftGraph interface from PowerShell.\n\n* One module you only have to authenticate to once (previously youd have to do it separately for each module you wanted to use...ouch!)\n* The module is auto-generated from XML descriptors of the Graph functions (in a roundabout way, by converting through OpenApi and then using some Azure tooling).\n* Interactive device login like for the Azure CLI -- gives you a browser link where you enter a code to sign in.\n** You can register a client ID for unattended use.\n** Managed Identity support is coming too.\n* Sample scripts are available in TheGitHub repo.\n\n* Future plans:\n** Standalone non-PowerShell CLI generator to go alongside PowerShell, like Azure has.\n** Desired-state configuration options based on Graph.},{title:PowerShellTestConnectionString,created:20200513142834915,es:confident,modified:20210810180859089,tags:TechBook Public Idea,type:text/vnd.tiddlywiki,text:A handy way to test a SQL Server database connection string on a Windows machine without requiring any software:\n\n```powershell\n$conn New-Object System.Data.SqlClient.SqlConnection\n$conn.ConnectionString \Your Connection String Here\\n$conn.Open()\n$conn.Close()\n```\n\nIf `$conn.Open()` completes with no errors, youre in good shape.\n\n\u003C\u003Crememberq \20200712223729782\\n\t\What PowerShell object can you use to test a database connection string?\\n\t\`System.Data.SqlClient.SqlConnection`\>>\n\t\n\u003C\u003Crememberq \20200712223750515\\n\t\When testing a connection string in PowerShell, what properties and methods must you call on the test object?\\n\t\Set the `ConnectionString` property, then call `Open()`, and lastly call `Close()` to finish up.\>>},{title:PowerVirtualAgents,created:20200529165054980,modified:20200529165219564,tags:Software MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:Something similar to TheFederatedInsurances ~BluePrism solution, a way of bridging the gap between an automation solution like PowerAutomate and legacy applications that dont have a workable API.\n\nThe general term is Robotic Process Automation.\n\n* Steps for using with PowerAutomate: Record, test, monitor.\n* Attended and unattended variants\n** Attended: kick it off within your workspace, like a macro; can be written by anyone for their own workflow.\n** Unattended: run on agents/dedicated machines; typically done by automation specialists.},{title:PPC,created:20200427030540925,creator:soren,es:personal,modified:20211229145017149,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:Notes shorthand for Parental Phone Call, the act of talking on the phone with my parents.},{title:PrayerBasedParsing,created:20200612181352524,es:confident,modified:20210625115635039,reviewed:20230909,tags:Code Humor Public Idea,type:text/vnd.tiddlywiki,text:Term of MrJeffreySnover, creator of PowerShell, of the method of passing/reading data by parsing text (for instance in the MonadManifesto2002). It is so called because you just have to hope that your assumptions dont break and the output format doesnt change; something as small as an extra space could potentially screw you up.\n\nPowerShell, of course, allows you to avoid this in many cases by working with structured data instead of pure text.},{title:PrearrangedPhrase,created:20200908155951010,description:Ambiguity in communication can be avoided by arranging a phrase to go with a particular event or emotional state ahead of time.,es:confident,modified:20210623023417355,tags:InterpersonalRelations Process Design Public Idea,type:text/vnd.tiddlywiki,text:Communication technique in which a possibly dangerous or troublesome event is given a name|PowerOfNames that can be used to deal with it in the future. Particularly useful/important when ambiguity is expected at the time of the future event.\n\nFor the most part, the phrase can be anything, though it may be useful to make it easy to disguise, or //hard// to disguise, depending on the application.\n\nExamples:\n\n* Inspiration: //Olly olly oxen free!// (or your preferred corruption), indicating|https://en.wikipedia.org/wiki/Olly_olly_oxen_free that a game involving hiding is over and those hiding have won. While it rarely happens, a wide variety of unpleasant things are possible if those hiding believe theyre being tricked into coming out, from preventing the group from going and doing something else to making everyone believe the concealed have gone missing and calling the police.\n** The phrase actually does matter: this one is good because it carries very well unamplified.\n* Safe words, for Sex Things™.\n* Letting your partner tell you they really need to veto something without causing a scene. (This comes up in MyLillianAndSylvia.)},{title:PreciousLord,caption:Precious Lord, Take My Hand,created:20200323024048104,medium:music,modified:20200811000746744,tags:Song Source Public,type:text/vnd.tiddlywiki,text:“Precious Lord, Take My Hand” -- one of the finest Christian hymns in existence, in my opinion.\n\nP.|PrivatePerson once said hereof, “The only bad thing about this song is that you dont want it to end” (\u003C\u003Crt 5500>>).},{title:PresentingProblemsWithoutAnswers,created:20210813151657944,creator:soren,description:Is it OK to complain about a problem without presenting a suggestion of how to make the situation better?,es:likely,modified:20221106222708613,modifier:soren,tags:Idea Business InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:Common peeve: complaining about a problem without presenting or having thought about any solution to that problem.\n\nIts hard to know what to think of this peeve. On the one hand, it always comes off badly to present a problem without a solution, especially when the problem is small. If I tell you your websites design sucks, say, but I dont -- or worse, cant -- point out any changes that would improve the design, or any process changes that would allow you to come up with a better design, then I am more whining than giving constructive criticism. Also, if I cant do it better myself and I dont even know how or whether someone else with the relevant expertise could do it better, can I really be so sure theres anything to improve at all?\n\nBut on the other hand, this seems like an unrealistic standard to hold people to, and it discourages people from giving feedback that youd benefit from. Complaining is the original act of politics|ComplainFirst, and doing so without doing other things is legitimate. I might not //know// why your websites design sucks if I have no background in design, but I can still know that your competitors website is easy for me to figure out, but your website makes me want to throw things every time I use it. As a website designer, hopefully you want to know thats the impression your users have, even if they cant tell you what to change! After all, youre the expert on that part. (It doesnt matter whether the website is objectively easy to use by some design standards; if people cant use it or dislike doing so, nothing else really matters. AppearancesOverReality.)\n\nI think the solution here is, do your best to present an answer when you present a problem. But if you really dont know what the answer is or how someone would go about finding it, that doesnt mean you cant present the problem; you should simply be up-front about not having a solution, suggesting that perhaps a solution would be worth exploring. And you should have low expectations for a quick fix, since you arent able to do the legwork yourself and your inability to do so suggests it may actually be much harder than you think!},{title:PricksongsAndDescants1969,author:Coover,bibliography:LifetimeReading,caption:Pricksongs & Descants,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035851,priority:,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1969},{title:Pride,created:20230824171849542,creator:soren,modified:20230824171851219,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki},{title:PrimaryPurpose,created:20240607160526693,creator:soren,description:Most tasks have both primary and secondary purposes, yet we often try to shortcut away the secondary purposes, making life worse.,es:confident,microlink:pp,modified:20240611030827882,modifier:soren,tags:Shortcuts Idea Design Psychology PhilosophyOfLife Technology Public,transcludedin:,type:text/vnd.tiddlywiki,text:Most tasks have one primary purpose, the one you were intending to achieve -- you move from one place to another, your dishes get clean, you organize an event, you publish an essay, you give the cat some food. But they also have secondary purposes and effects, often ones you didnt intend. Traveling results in seeing things you otherwise wouldnt have seen, driving creativity. Doing the dishes gives you quiet time to think or listen to a podcast. Organizing an event strengthens your relationships with the people who came and teaches you something about the reason for holding the event. Publishing an essay sharpens your thoughts about the topic. Feeding the cat helps you maintain a routine and helps you connect with the cat. And these are only some of the most obvious secondary effects; the list goes on and on, quite possibly to infinity.\u003C\u003Cfnote \Im reminded of MrPhilipPullmans alethiometer, in HisDarkMaterials. A dial with fifty or so symbols suffices to communicate any question and answer, because all of the chosen symbols are metaphorically rich and have an infinite number of meanings, some more obvious than others.\>>\n\nTechnology tends toward producing shortcuts|ShortcutApps, on optimizing for some specific thing. Frequently, this comes at the cost of eliminating the secondary purposes. For instance, getting a dishwasher saves time washing the dishes, but makes the cleaning in the kitchen end too quickly to get into an extended podcast or enter the meditative, relaxed state that can come with hand-washing dishes. Asking ChatGpt to write your essay might produce an acceptable essay almost instantly (if youre not a particularly good essayist), but youll learn almost nothing. Sometimes that cost is worth paying, other times its not; but in many cases, we dont actually know whether it is or not, because we look only at the primary purpose and dont even notice that weve lost the rest.\n\nA life thats been filled up with shortcuts is an impoverished one, because all the secondary purposes have gone missing. This is one reason modern life feels so cold and empty and aimless to many people. You achieve exactly the things you set out to do, quickly and easily, but never anything more, never anything random|DeterministicToolsRandomExperiences, delightful, unexpected. As in SubtleCrappification, it often makes sense to take one shortcut, or a few shortcuts, but if youre not extremely careful, this can quickly send you down a slippery slope to //all// shortcuts, at which point the collective effect is devastating.\n\nWhen you take too many shortcuts, your efficiency is an empty achievement. You “save time,” but you have nothing useful to put in that time, because most of the things you could do with it have also been stripped of meaning and interest. So it ultimately fills up again with things that dont improve your life -- and now you have even //more// meaningless things to do. If, instead, you do some things slower but in ways that have secondary purposes you actually want to achieve, youll often end up fitting more things you want to do into the same amount of time.\n\n\n!! No primary purpose\n\nThere are some activities which are clearly not aimless, yet have no identifiable primary purpose. These are interesting in that theyre more or less impossible to create a shortcut for. For instance, I often like to walk to a local coffee shop in the afternoon and work there for a couple of hours. Am I trying to get some caffeine, enjoy a good cup of coffee, get outside and get some exercise, hang out with other people in the middle of a day working from home, support a local business I love, or increase my productivity with a change of scene? All of the above; I ordinarily decide to go based on a subjective feeling that “Id like to go to the coffee shop,” rarely because one of these effects stands out as something I want to achieve.\n\nYou can still optimize for some of the purposes -- say, by making a cup of coffee at home and drinking it -- but at that point youre really just doing a different activity, and this tends to be pretty clear to those to whom the shortcut is suggested. (That does not, of course, mean someone wont miss the point and suggest you try.)\n\nSometimes the list of purposes is difficult to even identify. For instance, like most people, I like hanging out with my friends, but can I say why, or what Im hoping to accomplish? And even if theres an alleged purpose, it isnt really the point. Maybe I say Im going over to someones house “to watch a movie” -- but if I try to go to the grocery store and I dont end up coming home with groceries, something has gone very wrong, whereas if I go to my friends house “to watch a movie” and we dont end up watching the movie, thats totally normal! (In fact, in this case, the failure of the alleged purpose to materialize is a sign that your time together went unusually //well//; it means you probably got wound up talking about something important, or found something else new and exciting to do together.)\n\nTellingly, I think these are some of the activities that people reliably continue to enjoy and find meaningful, and will do even if there is no mathematical case for their efficiency.\n\n\n!! Other examples of shortcuts eliminating secondary purposes\n\n\u003C$m2.x number\1\>\nDriving around a city. You often get there faster, but you see much less; you turn the city into a collection of points, rather than a unified whole that you move through. Driving with GPS is even worse, because you dont even have to pay attention to the landmarks and street signs.\n\u003C/$m2.x>\n\nSee also ErosionOfTrivialSocialInteraction.},{title:PrincipleOfLeastAstonishment,created:20200316001037432,creator:soren,description:Interacting with an interface should never astonish the user.,es:confident,modified:20210623022902923,modifier:soren,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:Originally formulated as a user-interface design principle. Users are accustomed to certain things happening in UIs, through experience of one kind or another. For instance, pressing F1 usually yields a help screen, Ctrl-C is used to copy (or to cancel, at the command line), an X button on the screen closes something, turning the mouse wheel down scrolls down, deleting an item will either be reversible or prompt you for confirmation, and so on. Violating these behaviors causes //astonishment// and is to be avoided unless there is an extremely solid reason to do so.\n\nThe POLA can apply in other realms as well. For instance, I sometimes complain about astonishing traffic-control structures: the last thing I want is to realize I made a driving mistake because the system violated my expectations!\n\nThe POLA is an important component of an effective DesignApproach. Also compare PathOfLeastResistance.\n\nA fantastic example I encountered recently is this multi-select dialog in OutSystems deploy procedure, which contradicts decades of established convention in putting the //selected// items on the left and the pool of items to select from on the right:\n\nimg pola.png\n\n(Also, the two columns are not labeled to indicate which is the selected side, and you just have to guess that you click on an item to move it from one side to another; there are no arrows or other buttons.)},{title:PrinciplesForLessWrongHierarchies,created:20200423024256840,modified:20201018174621913,tags:Information Public SorenConcept Idea,type:text/vnd.tiddlywiki,text:FileSystemHierarchiesSuck. But were stuck with them. So whats next? Well, we can make them less wrong|SingingLessWrong.\n\nThese principles are formulated for filesystems, but apply somewhat to any similar multi-level organizational system.\n\n; The Single-Question Principle\n: At each level of your hierarchy, strive to make all folder names answer the same question.\n\n; The Separation Principle (//corollary to above//)\n: Whenever possible, limit each folder to containing only files or only other folders.\n\n; The Domain Principle\n: Organize files in different domains differently.\n\n; The Depth Principle\n: Prefer deep hierarchies over shallow ones. (This one is arguable. It may depend more than the rest on whether these are files or not. Its great for files.)\n},{title:PrinciplesOfEffectiveResearch2004,author:Michael Nielsen,caption:Principles of Effective Research,completed:202103191200,created:20210320013538447,medium:article,modified:20210611022706738,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://michaelnielsen.org/blog/principles-of-effective-research/,year:2004,text:Article by MrMichaelNielsen on his observations on what makes one a good researcher -- more of it bearing on personal life and general vision than on the tactics of research, and so rather generally applicable, though some of it does seem targeted at more mathy/overtly problem-based areas.\n\nAmong other notes:\n\n* Focusing only on your research is a mistake. You will be less productive if you are not happy and healthy (cf. OvertimePhilosophy).\n* Take responsibility for your life, and be proactive. This is hard -- its easier to blame others, displace by ignoring the important stuff, and blame yourself. Yet being responsible and proactive is one of the most important things you can do for yourself. While other people and external factors influence your work, the buck ultimately stops with you.\n* You need to have a vision and clarity about what you want to achieve. This is not set in stone, but its important to have it around nevertheless (see FunctionOfPlanning). Doing this well is surprisingly hard.},{title:PrinciplesOfPsychology1890,author:William James,bibliography:LifetimeReading,caption:The Principles of Psychology,created:20210703170128000,genre:Science,medium:book,modified:20210705214035860,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1890,text:Length: !},{title:PrinciplesOfSustainableSoftwareEngineering,created:20200910164058411,modified:20200910164058202,tags:Public Environmentalism Code Design Resource Idea,type:text/vnd.tiddlywiki,text:Some interesting thoughts about things we can do to combat climate change purely in software come from the //Principles of Sustainable Software Engineering//, a collaboration between MrChrisAdams and MrAsimHussain. They presented an introduction at MicrosoftBuild2020 (SustainableSoftwareEngineering20200520).\n\nMore information can be found on their website, https://principles.green. They also have a podcast,\nhttps://podcast.principles.green.\n\n!! 8 principles\n\nSome of these principles overlap, but its often useful to think about the same thing in different ways, so thats a feature, not a bug.\n\n# Carbon: Build applications that are carbon efficient.\n#* How do we accomplish the things we do as professionals in a way that emits less carbon?\n#* Make sure that we get the maximum value out of every unit of carbon were using.\n\n# Electricity: Build applications that are energy efficient.\n#* The main source of carbon in IT, so this provides a concrete, targetable resource to reduce consumption of.\n#* Electricity seems clean at point of use, but it really is not! 15-20% of carbon emissions go to generating electricity.\n\n# Carbon Intensity: Consume electricity with the lowest carbon intensity.\n#* Quantifiable: g/kWh of emissions\n#* When designing large systems, what places have a cleaner mix of electricity?\n#* Run workloads at times in line with demand when dirtier sources can be offline. This often ends up cheaper too.\n#* Often doesnt require changing code at all...sometimes just //thinking// about a problem can make a big difference!\n#* Some papers on scheduling a Kubernetes cluster to take advantage of this.\n#* https://helio.exchange allows you to sell compute power into the grid at appropriate times, like you could with a micro-generator\n\n# Embodied Carbon: Build applications that run on older hardware.\n\n# Energy Proportionality: Run servers at a high rate of utilization.\n#* 15-20% utilization is common, but troublesome. Idling uses a lot of electricity.\n#* Cloud helps to reduce required idling.\n\n# Networking: Reduce the amount of data and distance it must travel across the network.\n\n# Demand Shaping: Instead of shaping supply to meet demand, try shaping demand to match supply.\n\n# Measurement & Optimization: Focus on end-to-end optimizations that increase the overall carbon efficiency.},{title:Prioritization,created:20200423174809717,creator:soren,es:confident,modified:20211228160001094,modifier:soren,tags:Process Public Idea,type:text/vnd.tiddlywiki,text:Techniques for determining what limited resources should be allocated for, when the list of possible allocations is too long to be covered by all resources. Particularly applied to time.\n\n},{title:PriorLake,created:20230811232255778,creator:soren,gis-lat:44.713327839172834,gis-long:-93.42307152573837,gis-zoom:11,modified:20230816161435998,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Lake and adjacent exurb of the TwinCities.\n\nA Reddit comment I read once suggested that its confusing for there to be an Upper Prior Lake and a Lower Prior Lake, and they should instead be called Prior Lake and Subsequent Lake.},{title:PrivateChunk,color:#000001,created:20200509180315396,creator:soren,icon:$:/core/images/excise,modified:20240723030607886,modifier:soren,refexplorer-hide:true,tags:Meta Public,type:text/vnd.tiddlywiki,text:\\procedure .edit-button()\n\t\u003Csmall>\n\t\u003C$button\n\t\tclass\tc-btn-invisible tc-tiddlylink\\n\t\tmessage\tm-edit-tiddler\\n\t\tparam\u003C\u003C__tiddler__>> \n\t\ttooltip\Edit this private chunk.\\n\t>\n\t\t\t\u003Ci class\fa fa-pen\/>\n\t\u003C/$button>\n\t\u003C/small>\n\\end .edit-button\n\n\u003C% if allcurrentfield:titlePrivateChunk %>\n\u003C!-- not being used as a template -->\n\nTiddlers whose subject matter is sensitive or personal are typically not marked as public. However, sometimes a topic is almost entirely fit for publication, but youd like to add a little bit of private commentary to it. In this case, you can use a //private chunk//. This is a separate tiddler, generally named the same as the public tiddler followed by a `/p`, and tagged \u003C\u003Ctag PrivateChunk>> (this tiddler). To include the private chunk in the public tiddler, it is transcluded, using `PrivateChunk` (this tiddler again) as a template. Some magic hides this bit and shows the template bit when this is done.\n\nSince you wont mark the private chunk as public, when the wiki is published, the private chunks dont come along. The title must not contain any sensitive information, since the transclusion directive will still be present in the source, but this shouldnt be a concern if the naming convention above is followed.\n\nThe lock button {{$:/core/images/locked-padlock}} on the editor toolbar (or Ctrl+Shift+E) can be used to create a new private chunk from the selected text.\n\n\u003C% endif %>\n\n\u003C% if allcurrentistiddler!field:titlePrivateChunk %>\n\u003C!-- being used as a template -->\n\n\t\u003C% if allcurrent!tagPrivateChunk %>\n\t\n\t\t\u003Cspan style\color: yellow;\>Warning: This private chunk is not tagged PrivateChunk.\u003C/span>\n\t\t\u003C$fieldmangler tiddler\u003C\u003CcurrentTiddler>>>\n\t\t\u003C$button>\n\t\t \u003C$action-sendmessage $message\tm-add-tag\ $param\PrivateChunk\/>\n\t\t Add tag\n\t\t\u003C/$button>\n\t\t\u003C/$fieldmangler>\n\t\t\n\t\u003C% endif %>\n\n \u003Cdiv class\sib-private-chunk\>\u003C$link to\u003C\u003CcurrentTiddler>>>private\u003C/$link>\u003C\u003C.edit-button>>\n\t\t\u003C$transclude name\u003C\u003CcurrentTiddler>> mode\block\/>\n\t\u003C/div>\n\t\n\u003C% endif %>},{title:PrivatePerson,created:20201111010814269,modified:20201111011249956,tags:Meta Public,type:text/vnd.tiddlywiki,text:This persons real name has been excised from the public Zettelkasten and replaced with their initials in the interest of privacy. This treatment is automatically applied to people whose tiddlers in this wiki are not public, suggesting they are likely family or personal friends or otherwise related to me in a non-public way.\n\nIt may be possible to identify the people based on context, given sufficient background knowledge. The purpose of this replacement is not to provide total anonymity but to protect people from appearing in web search results where they might prefer not to be listed. I protect any information that might be unflattering or otherwise non-public in other ways.\n\nNames to initials are not a one-to-one mapping, so you cannot necessarily infer that all references to the same set of initials describe the same person. The script I use to perform this transformation simply takes the initials of the tiddler name as it stands, without trying to uniquify anything.},{title:PrivateProperty,created:20200402012704289,es:possible,modified:20240320214749230,modifier:soren,tags:InterpersonalRelations Ethics Public Idea,type:text/vnd.tiddlywiki,text:European, capitalist idea that is so normalized its hard to imagine the world without it, but apparently some societies do. Largely benefits rich people (what doesnt?), but to some extent it benefits the American individualistic experiment as well.\n\nProbably one of the many things in life where ModerationAndBalance is the real key. Anyone-can-use-anything probably just doesnt work very well in a world as complicated as ours now, but were also rather too fixated on //our// stuff.\n\nMsMaudeChardin makes a crack about this when she steals someones car in HaroldAndMaude1971.},{title:ProblemIdentificationPattern,caption:Problem Identification,created:20210308141810575,description:A snippet of explanation, text, or program code or a picture of a situation is presented, in which something is done incorrectly. The reviewer indicates what the problem is.,es:likely,modified:20210522013404207,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:\\rules except codeinline\n\\rules except codeblock\n\n{{!!description}}\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:ProblemIdentificationPattern/Advantages,created:20210313134900078,modified:20210313134738834,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Helps you recognize future instances of the mistake or error when you see it again in the future.\n* Can be trivially created after you make a mistake by copying and pasting the text or a screenshot of what you just did wrong.},{title:ProblemIdentificationPattern/Cautions,created:20210313134911248,modified:20210313134749990,tags:Public Idea,type:text/vnd.tiddlywiki,text:* When used to remember a mistake youve made in the past, dont let this pattern replace careful analysis. In many cases, you made a mistake because there was some deeper concept you didnt understand, and targeting that missing understanding will produce stronger memories and less likelihood of making the mistake again than simply being able to recognize that youve made a mistake.\n* Lots of repetition of bad examples without repetition of good examples can lead you to accidentally remember the bad examples when youre searching your head for examples. For this reason, its safer to use the pattern on chunks that are too large to memorize accidentally. And, in any event, problem identification prompts should be a limited portion of your collection.},{title:ProblemIdentificationPattern/Contributors,created:20210313134921656,modified:20210314161426990,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad.},{title:ProblemIdentificationPattern/Disadvantages,created:20210313134906272,modified:20210313134745015,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Unusually susceptible to pattern-matching; that is, you may learn that the words or phrases used in the example indicate the problem, rather than the //situation// the example stands in for indicating the problem.\n* Poorly chosen examples may mean you wont learn to recognize issues that are not quite the same but still close enough that better-formulated questions could have taught you that information.},{title:ProblemIdentificationPattern/Examples,created:20210313134854981,modified:20210313134733710,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210308142125950\\n\t\What is wrong with the following Sphinx markup?\u003Cbr>\u003Ccode>Name the file :file:`C:\\\\Users\\\\{your username}\\\\myfile.txt`\u003C/code>.\n\\n\t\Before a brace, you must use //four// backslashes to get a single output backslash (\\ is an escape character for reStructuredText, and \\\\ is an escape character for the definition of the //file// role).\>>\n\t\n\u003C\u003Crememberq \20210308142554078\\n\t\\\LaTeX: What is wrong with this index entry?\u003Cbr>\\index{``my favorite quote}\\\\n\t\\\It does not specify a sort key, so it will end up in the symbols section of the index. Instead, use:\u003Cbr>\\index{my favorite quote@``my favorite quote}\\\>>},{title:ProblemIdentificationPattern/Formula,created:20210313134849659,modified:20210313134728403,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** \What is wrong with\, or a similar phrase.\n** Any needed transitional words.\n** A statement, sentence, code snippet, picture, or similar example which commits a grammatical, logical, or functional error.\n* Answer:\n** An explanation of what the error is.\n** Optionally, if it would be helpful in understanding the mistake, a corrected version. The reviewer need not provide the corrected version as part of the answer (if you are worried you will forget how to fix the mistake, add a second card asking how to correct the mistake).},{title:ProblemIdentificationPattern/UsageNotes,created:20210313134916007,modified:20210313134754731,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Annotated pictures are particularly valuable way to use this pattern when the context is appropriate; they are faster to review and more memorable than verbal descriptions of the same situation. For tech issues, you can use a tool like ~SnagIt (Windows) or ksnip (Linux) to quickly take screenshots and highlight the relevant portions of the screen.},{title:ProblemResponsePattern,caption:Problem Response,created:20210312222029627,description:Given a description of a problem or situation, the reviewer provides a simple and commonly applicable solution.,es:likely,modified:20210522013404221,tags:SrPromptPattern Public Idea,type:text/vnd.tiddlywiki,text:Problem Response cards catalog easy solutions to common problems, so that when you encounter the problem, you will remember the solution. The “solution” may be a single piece of information that solves the problem all by itself, or it may be a description of where more information can be found (whether that information is kept in your head using additional cards, or in a reference tool).\n\n{{||$:/sib/Templates/Topical/AnkiPattern}}},{title:ProblemResponsePattern/Advantages,created:20210313005036980,modified:20210313005127185,tags:Public Idea,type:text/vnd.tiddlywiki,text:* This pattern is fantastic when you find yourself repeatedly forgetting and looking something simple up because you dont encounter the problem or do the task quite often enough to learn it.\n* These cards are easy and fun to generate: anytime you find yourself irritated that you have to look something up, you can quickly add a card containing the answer without needing to take a lot of time out to reflect on your new knowledge.},{title:ProblemResponsePattern/Cautions,created:20210313005635318,modified:20210313005515846,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Relying on memorizing an excessive number of problem/solution pairs can reduce you to an unimaginative bureaucrat with little ability to solve novel problems. Be careful not to use this pattern as a substitute for developing real expertise (i.e., the ability to determine what you should do on the fly|ExpertsDontMakePlans).},{title:ProblemResponsePattern/Contributors,created:20210313005609597,modified:20210313005453396,tags:Public Idea,type:text/vnd.tiddlywiki,text:Soren Bjornstad.},{title:ProblemResponsePattern/Disadvantages,created:20210313004805638,modified:20210313005613520,tags:Public Idea,type:text/vnd.tiddlywiki,text:* The best responses to many problems are considerably more complex than easily fits on the back of a card! You may have to get creative and find ways to split them up.\n* These cards are easily orphaned, especially given the typical method of creating them (adding a spare card or two when you think about it). If you notice youre struggling to remember one, try adding several new cards testing related conceptual knowledge.},{title:ProblemResponsePattern/Examples,created:20210313004444259,modified:20210313005322306,tags:Public Idea,type:text/vnd.tiddlywiki,text:\u003C\u003Crememberq \20210313004532165\\n\t\~LaTeX: If you get an unexpected error when using a macro inside a reference or document structure element, what should you suspect?\\n\t\That your macro is fragile, so you need to `\\protect` it.\>>\n\t\n\u003C\u003Crememberq \20210313004650415\\n\t\What should you do if you need to make a minor edit to a check you are writing (e.g., you wrote the wrong number in the date)?\\n\t\Initial next to the correction.\>>\n\t\n\u003C\u003Crememberq \20210313005426734\\n\t\Bash: You want to retrieve the value of an environment variable in a script, but you dont know what the environment variable will be called until runtime. What is the cleanest way to accomplish this?\\n\t\Build the name of the envvar in a variable `x`, then get the value with `${!x}`.\>>},{title:ProblemResponsePattern/Formula,created:20210312222221196,modified:20210313004412066,tags:Public Idea,type:text/vnd.tiddlywiki,text:* Prompt:\n** A description of a problem or situation that the reviewer may find herself in, phrased as either a statement or a question.\n* Answer:\n** The first steps that the reviewer should think of taking when she encounters that problem.},{title:ProblemResponsePattern/UsageNotes,created:20210313004827211,modified:20210313005356348,tags:Public Idea,type:text/vnd.tiddlywiki,text:* These cards can get out of date quickly as you learn new and better ways to do things. As with any spaced-repetition card, but especially with these, be on the lookout for opportunities to improve your cards as you review.},{title:ProblemsAndPredicaments,created:20200410222414834,creator:soren,es:confident,modified:20210714032944355,modifier:soren,tags:MentalModel Public Idea,type:text/vnd.tiddlywiki,text:Terminology due to MrChrisMartenson (99% sure anyway). Problems have solutions. Predicaments do not; instead the task before you is to mitigate the damage as best as possible.\n\nEconomicRealities qualify as predicaments, for instance.\n\nEven problems may not be solvable in exactly the way we often think they are; see ConservationOfProblems.},{title:ProblemsICantBelieveExist,created:20240120204209441,creator:soren,description:Its weird that the world hasnt figured these things out!,es:mythological,modified:20240221003450195,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:Ongoing list: Problems I cannot believe we have somehow not solved yet.\n\n* If I leave the dome light on in my car for even a few hours, it can completely drain the battery. Is it that much to ask that when I spend $30,000 on a car, it can turn its own light off before the battery dies?\n* Somehow, items I buy in a store often still have adhesive price tags that require excessive amounts of effort to remove after buying them.\n* There is nowhere I can go to to find a comparison of all reasonable connections from one US city to another (e.g., bus, train, plane). A few sites exist that claim to solve this problem, but all of them have one or more of these obvious problems:\n**dont cover all modes, so they, e.g., force you to decide between flying and taking a bus before you know anything about the time or cost of either;\n** dont find connections which obviously exist, e.g., claiming there is no way to get from St. Paul to Indianapolis;\n** have silly limitations (e.g., they claim to find you the cheapest price, but have no option for flexible dates or locations).\n\nCf. PetPeeve.},{title:ProblemWithVoting2018,caption:The Problem with Voting,created:20210127150720749,medium:article,modified:20240720042605620,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://nadia.xyz/voting,year:2018,text:Article by MsNadiaAsparouhova on potential alternative means of governance. Problems with voting identified in the article:\n\n* Voting isnt fully representative (some people dont vote unless its made compulsory, subject to gerrymandering, etc.)\n* Voting looks objective, but really isnt; in addition to the representativeness issues, its subject to strategy and all sorts of messy human things.\n* Voting is competitive, meaning some people inherently lose at the expense of others.\n* Voting is noisy and indistinct; you get an equal amount of say in everything, while most people would rather stay entirely out of most issues that dont affect them and then put in a lot of effort on the few that do matter.\n\nMore cooperative systems may be designed so that \the default mode is failure,\ and the timeline at which failure will occur if no solution is found is made clear, giving everyone a strong incentive to work together to find a solution. If anyone loses, everyone loses (see Bottles and Bins|https://boardgamegeek.com/boardgame/9320/bottles-and-bins).\n\nA LazyConsensus system is a powerful place to start on many projects.\n\nMy big frustration with the article is that it doesnt even begin to suggest how this could work on the scale of a government. Im not expecting an actual answer, but it oddly isnt even addressed as far as I can tell.\n\n!! Memories\n\n\u003C\u003Crememberq \20210127163054087\\n\t\Why is voting a suboptimal use of peoples time and energy?\\n\t\Voting on everything makes it difficult to focus only on the issues you care about.\>>\n\t\n\u003C\u003Crememberq \20210127163133068\\n\t\Give an example of a way in which traditional voting fails to be fully representative, as it claims to be (try to pick a new one).\\n\t\E.g., gerrymandering, disenfranchisement, changes in voter turnout, groups with certain interests being generally less interested in voting\>>\n\t\n\u003C\u003Crememberq \20210127163259591\\n\t\Cooperative decision-making processes are most effective when the lack of consensus means what outcome?\\n\t\A failure by default that is bad for everyone (e.g., expiration of important legislative provisions, government shutdown, nuclear war).\>>},{title:ProceduralProgramming,created:20200316145706878,description:Programs consist of a series of smaller routines that act and modify data in sequence.,es:confident,modified:20210312215403657,tags:ProgrammingParadigm Code Public Idea,type:text/vnd.tiddlywiki,text:ProgrammingParadigm based on executing a series of instructions in sequence (in modern systems, broken down into procedures or functions for ease of reuse and reading). Often maligned as old and boring, but is actually a fantastic paradigm for things like building software or carrying out system maintenance. It is, however, probably a poor choice for building applications, and its not a lot of fun to work with.},{title:ProcessOfYou,created:20240709030256371,creator:soren,description:You are not a monolith searching for things you want; you are a process co-evolving with them.,es:confident,modified:20250908231053903,modifier:soren,tags:Idea PhilosophyOfLife Psychology Process Essay Public Favorites,type:text/vnd.tiddlywiki,text:A constellation of ideas suggests that people dont know what they want|PeopleDontKnowWhatTheyWant; the only way to do well in the face of this fact is to try things out, remaining open to being wrong and paying attention to how you feel about them.\n\nTheres more to this phenomenon, though, than mere lack of self-knowledge. Its tempting to think you //discover// friends or romantic partners or interests or preferences or truths about your identity -- literally remove the cover from them where they sit fully formed, latent, perfect, waiting for you to find them. Like theres a field full of buried treasure chests somewhere, and you go out with your spade and do some digging, straightforward, deterministic physical labor, and each chest you find either contains something you want or it doesnt. The only problem is that you dont reliably know which chests you want the contents of.\n\nNow sure, its true that as you go along, especially if youre taking care to search for new people and interests and aspects of yourself, youll come upon some that you didnt know about before. But finding them is only part of the story. Both the act of searching and the thing you find itself also turn you into a person who wants and benefits from what you find.\u003C\u003Cfnote \Think about the last time you found a new best friend. How has that relationship changed you? I guarantee you arent the same as you were before you met!\>> Some of the things you turn out to be well-matched with at the end werent even //there// in your psyche at all, werent determined, until you made yourself match them by exploring towards them and trying them. Its more like youre in an open-world video game that generates the world just in time as you approach the edge, tweaking the next challenges based on who your character currently is. Your needs and desires and the collection of treasure chests yet to appear co-evolve.\n\nThink about yourself not as a monolith looking for a home, but as a process.\n\n------\n\nWhy is it important that youre a process, not a monolith? That your future is co-created, not discovered? I think Ive only begun to explore all of the implications, but here are three reasons.\n\nFirst, being a process means you can often be happy with only the things you already have, if you work on changing yourself to appreciate them. Ive always found this claim somewhat unsatisfying, though, or at least incomplete; it feels like something that people say to get out of trying harder to find outliers|AmazinglyAwesomeFriend. Sure, if youre stuck on a desert island with three other people, you should learn to love those people, because youre gonna be spending a lot of time with them. But I dont live on a desert island with three people, I live in a major city with three million people, plus internet access. Surely it makes sense to spend at least a //little// more time picking things that match well with who I already am before I start changing myself to match! Still, its worth remembering that you are ultimately quite flexible, should you end up constrained in a way that requires that flexibility.\n\nSecond, being a process means you can decide who you want to be and search for things that help you become that person. Those might be other people, places, missions|PeoplePlaceMission, activities, stories, philosophies, routines, or things from categories unmentioned or yet to be discovered. You will not, of course, become exactly|PlanningCycle the person you set out to become -- who you wish to be will, itself, change during this process. But youll get to steer a little bit.\n\nA couple of years ago I moved from a small town, Owatonna|OwatonnaMinnesota, to the Minneapolis–St. Paul metro|TwinCities. In Owatonna, I worked at a very straight-laced insurance company and spent all my time with people who were mostly interested in starting American suburban families and golfing and watching TV. In Minneapolis, probably most of my friends would be considered weird by that crowd, I live in a co-op, I work at a remote startup with eight full-time employees and no set work hours, I hang out at a punky coffee shop a couple times a week, and I spent a few months in a weird quasi-romantic relationship with someone 17 years older than me, just enjoying the fact that the universe had temporarily brought us together.\n\nI like myself now, but I wasnt being ungenuine in Owatonna. Being genuine isnt an immutable fact about yourself, its a property that is true or false at a specific moment, in a specific context. The reason I wanted to move was not to escape phoniness, because I was failing to express who I truly was in Owatonna, but because I knew that, in a new place, with a new attitude, I could become someone else, someone further along in the process of traveling towards the distant future I wanted. I wasnt running away from the present, I was running towards a future|ConvinceMeToStay.\n\nFinally, being a process means you are always in motion, on the road to becoming the next version of you, and the old you is slowly, inexorably expiring. Some people and activities which were exactly what you needed at one point in your life will cease to be valuable later on. Some people and activities are even //self-limiting//: the relationship changes its participant(s) in a way that causes them to no longer need or want the relationship. You might have loved a great intro textbook, or a wonderful story, or your first girlfriend, but eventually found youd learned so much from deeply engaging over months or years that there was nothing left you could learn, you were a completely different person on the relevant dimensions. Maybe the next steps in your process, leaving the relationship behind with kind words and fond memories and striking out in some newly promising direction, even suddenly became clear. Realizing something that you once thought had a long future has come to an end can be disappointing or sorrowful, but it doesnt have to be bad.\u003C\u003Cfnote \For an almost comically strong version of this, see Derek Sivers “A relationship that ended, not failed|https://sive.rs/anna”.\>>\n\nImportantly, that what you need and want changes over time doesnt mean you made a mistake initially.\u003C\u003Cfnote \Of course, making legitimate mistakes occasionally is OK!\>> People often misidentify things as mistakes because they wouldnt, in the present, make the choice that their past self made. But often one action in the past is required to set up a different action in the present. Imagine that I go to sharpen a dull knife on a whetstone: I start with a coarse stone, then once the gross imperfections are abraded away, I move to a fine one to smooth out the edge. Having finished, I conclude that I should have used //only// the fine stone, because it got the edge the sharpest. Of course, this is absurd: if Id started with the fine stone, the knife would never have gotten sharp at all! The coarse stone was necessary for the knife to become a knife that could benefit from the fine stone. Similarly, your past selves were at earlier stages in your process, and different stages of a process require different levels of grit, different philosophies, sometimes different courses of action altogether.\n\nSometimes its important that your path not separate from something. Youd probably prefer not to marry someone and then later find them no longer an important part of your life, or spend fifteen years studying to enter a complex career and then find it has become meaningless to you. In this case, if you want to stay close, its important to recognize that how you feel about that thing, and for many classes of things, the thing itself as well, is bound to change over time. Its not dead and sealed in amber, hung around your neck; its still alive and green and growing, and it needs your care. It wont look the same as it does today at the end no matter what you do, but you do have the chance to influence its process, and have it influence your process: prune it, issue little changes of direction in response to what its doing; say oh look, that branch is in exactly the right spot, not that I would ever have thought to encourage one there, lets run with that; come to know it gradually in its new state in a way that makes you love how its changed -- in short, co-evolve with it again.\n\n\n!! References\n\nThanks to Henrik Karlsson|MrHenrikKarlsson for the phrase “process of you|https://www.henrikkarlsson.xyz/p/writing-as-communion” and insights about genuineness being contextual, to Lina Praškevičiūtė for drawing my attention to the error in the metaphor of discovery, and to Akhil Puri|https://akhilpuri.substack.com for a conversation about the necessity of co-evolution for creativity that led to this tiddler.\n\nWorking notes|ProcessOfYou/backstage.\n\n\u003C$m2.x number\1\>\n\nOften, when we work towards something for a long time and achieve it, either the reality of the thing is different than what we thought — or WE are different than when we started, with different goals and interests and things we care about. When we twist ourselves into knots to stay aligned with the old goal, out of “should” or “supposed to” or “not wanting to be a quitter,” we abandon ourselves in the process.\n\n---“Is it dumb to quit something I worked so hard to get?|https://emilymcdowell.substack.com/p/is-it-dumb-to-quit-something-i-worked”, Emily ~McDowell\n\n\u003C/$m2.x>},{title:Product,color:#ff4d00,created:20200423232031736,modified:20200612204214496,tags:Meta Public,type:text/vnd.tiddlywiki},{title:ProductBacklog,created:20200516170026737,es:confident,modified:20210714032634595,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Scrum term for your projects ongoing, glorified to-do list, describing the next direction of the product in a way that responds to change|RespondingToChange. It is the only source of upcoming requirements for the product.\n\nIt may include, among other things:\n\n* details of each backlog item (often a user story) planned or suggested for the product\n* acceptance criteria (DefinitionOfDone) for that story\n* an estimate of how much effort the story will require to implement, perhaps using StoryPoints\n\nIt is prioritized by the ProductOwner based on her opinion of the value produced by each story, perhaps with reference to the effort involved as well (see ValueToEffortRatio).\n\nThe ProductOwner is “responsible for” the backlog. This does not mean she is the only person who works on it (though this may be the case depending on the team), but she ultimately is in charge.\n\nItems on the backlog may start out vague, and gradually be “refined” and made more specific, especially as they move up in the priority order. By the time the item goes onto a SprintBacklog, it should be clearly defined.\n\nMost suggestions for the backlog should be rejected|RejectMostSuggestions.\n\nSource: ScrumGuide.},{title:ProductOwner,created:20200326140802756,modified:20200516172904208,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Role in the ScrumMethodology. Responsible for “maximizing the value of the product resulting from work of the development team” (ScrumGuide). Communicates with business/customers, determines what features are needed, and keeps the ProductBacklog prioritized based on this market knowledge.\n\n//Not// responsible for determining how much work will be done in a Sprint. The development team, helped by the ScrumMaster, is solely responsible for that.\n\nContrast ScrumMaster.},{title:ProductOwnerDelegation,created:20200326141658846,es:possible,modified:20210623023437398,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Suggestion offered by AgileInTheRealWorld for situations in which the ProductOwner does not have enough time to complete her responsibilities effectively.\n\nThis needs to be done correctly. Good options include:\n\n* Developers can help write stories.\n* Testers can help define acceptance criteria.\n* Scrum Master can help groom the ProductBacklog.\n\nThis needs to be done collaboratively rather than the other people taking over the POs responsibilities, or the PO can simply become a reviewer and then there is effectively still no PO, just someone putting checkmarks next to things she doesnt understand|PointlessApprovalProcess. Ideally, collaboration is done synchronously (producing a \gym buddy approach\). },{title:ProgrammingLanguage,color:#6c6cff,created:20200323023626420,icon:$:/core/images/list-bullet,modified:20200516163345447,tags:Code Software Public Idea,type:text/vnd.tiddlywiki,text:Specification and associated software that provides a language used to write other software. Logicception!\n\nLanguages typically involve one or more ProgrammingParadigms.},{title:ProgrammingParadigm,color:#6c6cff,created:20200316145835500,creator:soren,icon:$:/core/images/list-bullet,list:ProceduralProgramming ObjectOrientedProgramming FunctionalProgramming DeclarativeProgramming,modified:20210312215353168,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:Several types of programming design paradigms are well-accepted as their own philosophies/methodologies/language features. Many languages allow you to write in one style or another or (increasingly) mix them together, but most people tend to write largely in one style or another on a given project, with some other pieces mixed in occasionally.\n\nSpecific paradigms:\n\n\u003Cdl>\n\u003C$list filter\tagProgrammingParadigm\>\n\t\u003Cdt>\u003C$link>{{!!title}}\u003C/$link>\u003C/dt>\n\t\u003Cdd>{{!!description}}\u003C/dd>\n\u003C/$list>\n\u003C/dl>},{title:ProgressiveWebApplication,created:20200529201503761,creator:soren,es:confident,modified:20211110161218690,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:A set of open standards that allow a webapp to run offline and look like a native app on a variety of platforms.\n\nWebAssembly and JavaScript both run sandboxed in a PWA running natively, just like they would directly in a browser.},{title:ProjectReunion,created:20200521141208162,creator:soren,es:confident,modified:20211107173015142,modifier:soren,tags:Software MicrosoftBuild2020 Public Idea,type:text/vnd.tiddlywiki,text:New set of Windows APIs unveiled at MicrosoftBuild2020. The idea is to allow development for both the new UWP and the old Win32 architecture at the same time by introducing a new abstraction layer. Essentially, you develop against the Project Reunion APIs (which you can include via a NuGet package), rather than either of those APIs, and then Reunion transparently calls the appropriate APIs for you. It will even provide shims so you can start using new features that dont yet exist on older operating systems without leaving users of those OSs behind. (Thats a big deal...historically Win32 APIs have had to proceed at a glacial pace because people wouldnt be able to use new APIs if they wanted to maintain backwards compatibility, which they usually did.)},{title:Prolog,created:20200322141706515,creator:soren,es:confident,modified:20211107181959759,modifier:soren,tags:Logic Software Code Public Idea,type:text/vnd.tiddlywiki,text:The logic-programming language Prolog is a general-purpose DeclarativeProgramming engine for calculating whether statements are true or not, or what values might make a statement true.\n\nArguably, its a nice try but its notion of logic is so screwy its not really true DeclarativeProgramming -- see PrologFalsifiability.},{title:PrologFalsifiability,created:20200118034608093,creator:soren,es:confident,modified:20210509011554057,modifier:soren,tags:Logic Reasoning Code Public Idea,type:text/vnd.tiddlywiki,text:A description of issues with Prologs model of logic.\n\n!! Definitions\n\nLets define some general truths about the world:\n\n```\n/* X is an animal. */\nanimal(human).\nanimal(cat).\nanimal(cow).\n\n/* tasty(X,Y): Y finds X tasty. */\ntasty(chocolate, human).\ntasty(pizza, human).\ntasty(fish, cat).\ntasty(grass, cow).\n\n/* X is poisonous to Y */\npoisonous(chocolate, cat).\n```\n\nThen we can also define rules to let the system reason beyond explicitly defined facts. `:-` is read //if//, `,` is read //and//, and `\\+` is read //not//:\n\n```\n/* Uranium is poisonous to any animal. */\npoisonous(uranium, X) :- animal(X).\n\n/* X should eat Y if its tasty,\n or if X is starving and Y is not poisonous to X */\nshould_eat(Animal, Food) :- tasty(Food, Animal).\nshould_eat(Animal, Food) :- \n starving(Animal),\n \\+poisonous(Food, Animal).\n```\n\n\n!! The beautiful theory\n\nLets ask our lovely logic engine whether our guests will like some food we offer them:\n\n```\n| ?- tasty(grass, human).\nno\n\n| ?- tasty(grass, cow).\nyes\n\n| ?- tasty(pizza, human).\nyes\n```\n\nOr, alternatively, if we dont like guessing, we can ask for ideas for that species:\n\n```\n| ?- should_eat(human, X).\nX chocolate ? ;\nX pizza ? ;\nno\n```\n\nOr if we want to know if something is safe for our starving cows, if we cant find them anything else:\n\n```\n| ?- should_eat(cow, fish).\nyes\n\n| ?- should_eat(cow, uranium).\nno\n```\n\n!! Where logic breaks down\n\nAll very nice! But hold on just one hot second!\n\n!!! Missed assertions of truths\n\n```\n| ?- should_eat(human, X). \nX chocolate ? ;\nX pizza ? ;\nno\n```\n\nSo its telling me the only things I should eat are chocolate and pizza...but I guess we didnt tell it anything else, so that makes enough sense. No big deal, its just not omniscient and cant tell us everything thats true.\n\n!!! Assertions of falsities\n\n```\ntasty(mango, human).\nno\n```\n\nOops! Now it asserted a true statement was false. So its not infallible. Unfortunately, when it carries these assertions forward into its reasoning, this can have vastly greater consequences...\n\n```\n| ?- poisonous(dog, arsenic).\nno\n\n| ?- starving(cow).\n| ?- should_eat(cow, cyanide).\nyes\n```\n\nYoull notice in the last one, Prolog didnt prove that cyanide was //not// poisonous and reason from there, as the rule would seem to read. Instead, it determined that it couldnt prove it //was// poisonous, and concluded from that that it wasnt and the cow could eat it! This is a very strange definition of //not//.\n\nSo we have to read \no\ as meaning \I dont have enough information to prove thats true\, rather than \its false\.\n\n\n!! Results\n\nPrologFalsifiability is an issue in the real world too, its just that we use common sense to identify the difference between \cant prove it\ and \its false\. Prolog cant prove a negative at all, and arguably neither can we in most cases, if it relies on observation!\n\nAnd its both easy and common to treat the absence of evidence as evidence of absence, as Prolog did with the cow and cyanide.},{title:PromptPrompt,created:20210622014426383,description:A prompt prompt is an invitation for the reader to create some type of spaced-repetition prompt herself.,es:likely,modified:20210622015154206,tags:SpacedRepetition Information Public Idea,type:text/vnd.tiddlywiki,text:A “prompt prompt” is a hypothetical MnemonicMedium feature in which the reader would be prompted to create a prompt about a topic for their SRS|SpacedRepetition, if they so desired. These could be useful in situations where the referent is sufficiently personal that the author cannot reasonably create an effective prompt, but does suspect that the referent could be usefully connected to //something// in the readers life.\n\nFor instance, a prompt prompt might suggest that the reader identify a frequently occurring or recent instance in her life in which she could use a new MentalModel, keyboard shortcut, or tool, and create one or more prompts that could help to trigger usage of that idea in the future.\n\n!! Usage\n\nI am not aware of any flashcard-adjacent systems that currently use prompt prompts. Some textbooks or similar resources have study questions that do something similar, but they usually just invite the reader to reflect on them //once//, often purely for comprehension purposes -- not to figure out what parts of the topic should be taken forward into her life later.},{title:ProofByContradiction,created:20200516174828947,creator:soren,es:confident,modified:20211107175107236,modifier:soren,reviewed:20240226,tags:Math Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Extraordinarily useful proof technique that consists of assuming a proposition is false and showing that this assumption leads unavoidably to a logical impossibility or another proposition that is already proven to be false; the only remaining possibility is then that the proposition is true.\n\nUseful in less formal contexts, too, though of course the “proof” is not deductively strong in these.},{title:ProtoAttraction,created:20200201212441333,creator:soren,description:Although I do not immediately become attracted to strangers, I often quickly recognize that I might become attracted to them later.,es:confident,modified:20250204040812580,modifier:soren,reviewed:20230801,tags:Romance SorenConcept Public Idea Sexuality,type:text/vnd.tiddlywiki,text:A general feeling many DemiPeople|DemiPerson get where you feel like someone is interesting and particularly worthy of your time, but cant tell yet whether youre actually romantically or sexually attracted to them. Or put another way, its the feeling that you //could// be attracted to this person later, if you spend more time together to give that personal connection a chance to grow. There is no excitement or anxiety and certainly no sexual impulse,\u003C\u003Cfnote \For me, in the proto-attraction stage, thinking about having sex with the person is repulsive. I find this a useful test at many stages of attraction; for me as I get closer to someone, it will often first soften into a neutral stance before eventually becoming pleasant.\>> but there is a fascination and sense of encouragement.\n\nIve experienced this with most, but not all, of the people Ive been attracted to. For me aesthetic attraction seems to be a necessary ingredient, along with talking to them a bit (maybe at least fifteen minutes one-on-one, or a much longer period with a few more people?). I like what Ive seen of their personality and think theyre pretty, and maybe think we have a little bit (or a lot) of natural chemistry, whatever exactly that means. These three things by themselves are not enough to generate //attraction//, but they might be enough to generate proto-attraction.\n\nI think for me, an in-person meeting is necessary for proto-attraction; someone I meet online or on an app could be interesting or even exciting, but cant create quite the feeling Im talking about. At least, its never happened yet. (See the //physical proximity// leg of the AttractionTriad.)\n\nNowadays if I notice proto-attraction, I try to hang out with that person more to see what happens. Its rare enough I have to jump on it -- plus, the feeling suggests I like them anyway, so its WorthwhileAnyway, whether anything romantic ever happens or not!\n\nInitially stated \u003C\u003Crt 10297>>.},{title:ProvincialLetters,author:Pascal,bibliography:LifetimeReading,caption:The Provincial Letters,created:20210703170128000,genre:Literature/Theology,medium:book,modified:20210705214035875,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:ProxyProductOwner,created:20200326141320944,modified:20200326141633077,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Suggestion offered by AgileInTheRealWorld for situations in which the ProductOwner is absent or a poor participant|ScrumProductOwnerAbsent. Often just the threat of introducing a proxy can get the PO to pay attention. If not, it can still be an effective solution. Implementation notes:\n\n* The proxy should be identified with the help of the real PO to avoid acrimony and pick an appropriate person.\n* Limits should be placed on exactly what the PPO can do and what requires the actual PO.\n\nThis solution does have its limits; the PPO may not have a complete vision of the whole product and end up misprioritizing the backlog -- they might naturally prioritize the parts they know the value of over things they have no experience with. Nevertheless, its a whole lot better than an absent PO!},{title:PseudoProfoundBullshit,created:20201027013653178,creator:soren,es:likely,modified:20220503005417786,modifier:soren,tags:Public Humor Psychology Science Idea,type:text/vnd.tiddlywiki,text:Useful concept due to the article ReceptionOfPpBullshit2015. Pseudo-profound bullshit consists of utterances that purport to be profound and are not //nonsense// (they are syntactically correct and superficially meaningful), but carry no real useful information. Further, if one does not think about them very hard, one may be tricked into believing they are not just reasonable statements but of deep significance.\n\nExamples from the article:\n\n\u003C\u003C\u003C\nHidden meaning transforms unparalleled abstract beauty.\n\u003C\u003C\u003C\n\n\u003C\u003C\u003C\nAttention and intention are the mechanics of manifestation.\n\u003C\u003C\u003C\n\n\u003C\u003C\u003C\nWe are in the midst of a self-aware blossoming of being that will align us with the nexus itself.\n\u003C\u003C\u003C\n\nSome people seem to \fall for\ pseudo-profound bullshit|Bullshit more easily (see the source at top).},{title:PsiAsFailingsOfScience,created:20200902014546457,es:possible,modified:20210623023508680,tags:Science Process Math Public Idea,type:text/vnd.tiddlywiki,text:One of the conventional and rightful criticisms of ParaPsychology runs like this: parapsychologists say they are studying \psi phenomena\, but \psi\ is really just a shorthand for \any effect we cant explain any other way.\ Nobody really has a clue what, exactly, they are studying, aside from some effect that seems to occasionally find that people can have knowledge of events outside of their direct perception or before they occur. Nobody has a supposed causal mechanism.\n\nThis ties in very neatly with the idea of pp. as a control group for scientific practice|ScientificControlGroup2014. In some way, //science// is working this way, and a //p//-value is “whatever we couldnt explain,” in any study at all (finding a significant effect is \rejecting the null hypothesis,\ which just means that it seems improbable that no effect exists based on your observations). From mounting evidence, it seems that various forms of subconscious bias on the part of the experimenter, analyst, etc., may frequently produce effects larger than the phenomenon being studied, and nobody has any real idea why.\n\nDoes psi show the existence of \psychic powers\? I have no idea. I dont even know what exactly \psychic powers\ are or would consist of, and neither, it seems, do parapsychologists, who have been investigating these effects for over a century. I am suspicious, though, that the same thing may be behind both the replication crisis and parapsychology, whether that is some incredibly complicated statistical or experimental-design failure, something about how people carry out studies and influence others that we dont understand, or something fundamental about the way the universe and consciousness operates that we dont understand. Im probably marginally more willing to consider \psychic\-seeming explanations than SA is (to me it seems more a matter of framing than anything else), but we do seem to agree that it is likely a combination of several or all of these things.\n\nCf. DeclineEffect.},{title:PsychedelicDrug,created:20210122024350762,creator:soren,es:likely,modified:20220504195606302,modifier:soren,tags:Neuroscience Drug Identity Imagination Psychology Public Idea,type:text/vnd.tiddlywiki,text:Class of drug that causes a series of mental effects surrounding the sudden ability to connect ideas that otherwise would be extremely different. This shares some elements with psychosis, but unlike psychosis people have deeply meaningful experiences as a result, and unlike most drugs (e.g., marijuana|Cannabis), people dont later see what happened to them during those experiences as “haha, I was on drugs, that was dumb.”\n\nWhile Ive heard a reasonable amount about them in the past, a lot of my current understanding comes from MrMichaelPollans excellent HowToChangeYourMind2018. An overview of the (2018-ish) scientific situation on the benefits and dangers of the drugs:\n\nIt is clear that psychedelics are extremely powerful and potentially dangerous, and that simply popping some LSD without knowing what you are doing is a great way to have a really terrible or even outright harmful experience. It is also still fairly early in the research cycle, suggesting a DeclineEffect is likely sooner or later; a particularly obvious flaw in the research as it presently stands is that it presumably covers mostly people who are inclined to seek out psychedelics, who might be better influenced by them as well. Another obvious issue is that most researchers are essentially psychedelic evangelists (it seems that one can hardly touch the things without becoming one). All this said, the numbers in many of the therapeutic studies are absurd (sometimes psychedelic therapy has been more than twice as effective as any existing therapies, and with long-lasting effects), so its hard to imagine theres not //something// here. The anecdotal accounts also speak volumes, even though it may be somewhat difficult to generalize them.\n\nAll this said, the potential benefits seem enormous, and properly used and understood as a component of a therapeutic and/or self-improvement experience that is framed correctly and takes on some mystical aspects, a ton of people could clearly benefit from them. Indeed, quite a lot of people already have, even in the modern Western context which is virtually alone among societies in not encouraging these experiences already; certain subcultures, notably SiliconValley, have never stopped using them even during their most underground period after the initial period of successful research and cultural awareness in the 50s and 60s. Im not a person drawn to drugs, in general, but even Im a bit curious now.},{title:PsychologicalSafety,caption:Psychological Safety,created:20200226205804175,creator:soren,es:confident,modified:20220309125046457,modifier:soren,tags:UnicornProject Business Ethics Systems Idea Public,type:text/vnd.tiddlywiki,text:The fourth of the FiveIdeals.\n\nOccurs when people are not afraid they will be ridiculed, blamed|BlamelessCulture, fired, or otherwise attacked when they make mistakes, try new things, or make good-faith suggestions for improvements.\n\nT.D.|PrivatePerson pointed out in the UnicornProjectPartOne book club meeting that almost every problem the project was encountering was worsened by the FearCulture (the opposite of psychological safety). When youre afraid to accidentally step outside of the bounds of the things youre \supposed to\ be doing, its hard to improve anything.\n\nM.B.|PrivatePerson suggested in UnicornProjectPartTwo that you get this kind of safety in a good marriage. Once you know the other person isnt going to walk away unless something really serious goes wrong, you feel free to bring up much more serious issues. As an Ideal, were attempting to bring the same safety into the workplace.\n\nOther domains apply similar logic when certain types of decisions are being made, especially in the public interest; for example, academic tenure and the lifetime appointments of many judges.},{title:Public,color:#000001,created:20200507032259254,icon:$:/core/images/globe,modified:20200512034215900,refexplorer-hide:true,tags:Public Meta,type:text/vnd.tiddlywiki,text:All tiddlers tagged with this tag, as well as all system tiddlers, will be included in the nightly upload to https://zettelkasten.sorenbjornstad.com.\n\nTiddlers not tagged Public may still be redlinked from elsewhere in the wiki, which may be useful for establishing connections between other ideas.},{title:Publication,caption:A metasource|Metasource consisting of an organization or location that publishes or groups together multiple Sources.,color:#ff0000,created:20200201045921067,creator:soren,icon:$:/core/images/tag-button,modified:20210825162348971,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nFor instance, magazines, newspapers, journals, book series, and websites are publications. Articles, papers, individual books, and pages on websites are Sources.\n\nPublications have no special naming conventions or fields.},{title:PublicHomepage,created:20200507143136944,creator:soren,description:Welcome to Mosaic Muse!,list:PublicHomepage/Points of Interest PublicHomepage/Organization PublicHomepage/Navigating PublicHomepage/No Warranty PublicHomepage/Copyright PublicHomepage/Contact PublicHomepage/Video Tour,modified:20251011164853180,modifier:soren,tags:Public Meta,type:text/vnd.tiddlywiki,text:\\define contactEmail()\n\u003Ca class\tc-tiddlylink-external\ href{{{ $:/config/PublicContactInfo +getindexemailaddprefixmailto: }}}>{{$:/config/PublicContactInfo##email}}\u003C/a>\n\\end\n\nYou have reached the public part of the //Mosaic Muse// (“M2”) notes system of \u003Ca class\tc-tiddlylink-external\ href{{$:/config/PublicContactInfo##homepage}}>Soren Bjornstad\u003C/a>. Welcome!\n\nI write these notes primarily to help myself think|WritingIsThinking, and to some extent youre stepping into my head by browsing around. You will find a variety of states of Polish and doneness in different sections, running the gamut from completed essays to lists of chicken-scratch bullets. Youll also find ideas Im very confident about, ones I havent evaluated much, and ones I think are probably wrong; my epistemic statuses|EpistemicStatuses on ideas will give you an idea of what youre looking at.\n\nTo learn more about why I publish my notes, why this isnt a blog, what software the site uses, and why its called //Mosaic Muse//, visit MosaicMuse.\n\nEach node in my notes is called a //tiddler// and opens in its own “card” on the screen. For instance, right now, you are reading the ~PublicHomepage tiddler.\n\nTiddlers are not intended to be read alone; you will often need to follow some internal links (the blue colored text thats not underlined and has no icon next to it) to get the necessary context to understand a tiddler. You can follow an internal link in three ways:\n\n* Hovering your mouse over a link will show a pop-up preview of the linked tiddler. Click on the background of the page when youre done with the preview.\n* Clicking a link will open it in a new card and scroll there. (Click the X button in the upper-right of a card when youre done with it.)\n* Ctrl+clicking (Cmd+clicking on a Mac) a link will open it in a new card, but without scrolling, so you can keep your focus for now and read about the other idea later.\n\n\n!! What else do I need to know?\n\n\u003C\u003Ctabs \n tabsList:\listPublicHomepage\\n\tdefault:\PublicHomepage/Points of Interest\\n buttonTemplate:\$:/tzk/Templates/Topical/PublicHomepageTab\\n>>\n},{title:PublicHomepage/Contact,created:20200917013615676,modified:20210615003637105,tags:Meta Public,type:text/vnd.tiddlywiki,text:Found an egregious error or have an interesting connection to share? Want to pick my brain for more information on something I posted here? Click the “start a conversation” link at the bottom of any tiddler, or email me directly at \u003C\u003CcontactEmail>>.\n\nI generally err on the side of caution and dont tick the “make public” box on tiddlers that might be dangerous or improprietous, but Im human and could always make a mistake, so if you think youve found something here that violates your or someone elses privacy or intellectual property rights or otherwise ought not to be public, please get in touch.\n\nIf youre interested in an idea or other tiddler thats under development or could change in the future, you can click the //subscribe// button at the bottom of the tiddler and enter your email address, and youll get an email when the tiddler changes. (Thanks to MrAndyMatuschak for this fantastic idea.) You can later manage your subscriptions at Manage Subscriptions.\n\n(//Note//: Notifications are only triggered when the tiddlers wikitext changes. Tiddlers that transclude a bunch of other tiddlers, like AnkiCardPatterns or MyUnusualMentalExperience, wont trigger a notification when the transcluded tiddlers change, only when the text within the list or the criteria for collecting tiddlers to show does. This is unfortunate, but it would be extremely difficult and slow to base the changes on the rendered HTML due to the way TiddlyWiki works.)},{title:PublicHomepage/Copyright,created:20200917013628904,modified:20210523180151545,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{CopyrightNotice}}},{title:PublicHomepage/Navigating,created:20200916233541270,modified:20201207041939169,tags:Meta Public,type:text/vnd.tiddlywiki,text:To move between related ideas:\n\n* Click on any internal link in a tiddler (the ones that are in a different color but not underlined). For instance, FunctionalProgramming is an internal link.\n** Each new tiddler will open in a separate box on the left so you can see many at once. You can see a concise list of all open tiddlers in the Open tab.\n** When youre done with a tiddler, you can close it with the X button in the upper-right. The wiki can become laggy on less-powerful computers if too many tiddlers are open, so if it feels slow, try closing anything youre done with. If you want to close everything except the current tiddler, use the bullseye icon in the upper-right of it.\n** Links displayed in italics refer to tiddlers that dont have any content, for instance, AnswerToLifeTheUniverseAndEverything. This is either because I havent written them yet or because they are not public. The Reference Explorer (see below) may still display useful information and connections even if there is no text.\n* Use the ReferenceExplorer displayed at the bottom of each tiddler. This tool, custom-built for the site, gathers together all of the relationships between different ideas, people, sources, and other objects. Poke around a bit and youll get to like it!\n** Among other types of relationships, it shows Links (all of the tiddlers referenced in the text of this one) and Backlinks (all of the other tiddlers that reference this one in return).\n* Click on a tag pill, like the \u003C\u003Ctag Meta>> tag. Tags group tiddlers that have some idea in common. Youll see a list of all the other tiddlers that have that tag.\n\nTo explore whats available, use the Explore tab in the sidebar. You have several options:\n\n* Tags: A list of all tags.\n* Recent: Things Im currently working on -- new ideas and updated old ideas.\n* All: A list of all tiddlers (maybe overwhelming, but its there).\n* Bibliographies: Bibliographies gather together all of the interesting sources about a topic that Ive read and made notes on. You might want to use this as a jumping-off point for your own research on that topic, or look in the Ideas tab of the ReferenceExplorer for each source to see what I noted from it.\n* Explorer: If youre a TiddlyWiki buff, you can find all of the system tiddlers that power this wiki in here. Youre free to cannibalize from here for your own wiki -- see the Copyright tab.\n\nTo find something in particular, try searching for keywords in the search box at the top of the sidebar. If you dont immediately find what youre looking for, try finding an idea thats similar to it and following a few links.},{title:PublicHomepage/No Warranty,created:20200917013548863,modified:20210627045355689,tags:Meta Public,type:text/vnd.tiddlywiki,text:As the OpenSourceSoftware cliché goes, there is no warranty on this wiki or the ideas therein! These are my personal notes. I write them as clearly as possible because when my writing is clear, so are my ideas|WritingIsThinking, but the primary audience is me, so you may lack necessary context|ImplicitFictionalContext. There may be errors, and opinion may be difficult to differentiate from fact. You might well find something correct and useful, but there are no guarantees.\n\nThe presence of an idea in my ZettelKasten should not, by itself, be taken to imply that I support, endorse, or agree with it in any way; this is not a blog in which I present carefully argued points. The ZK gets much more interesting when you add devils-advocate arguments and half-baked ideas that are highly speculative. I use EpistemicStatuses in the upper-right of every idea tiddler to offer some information about my present judgment on ideas, but these are a blunt tool. If the epistemic status is confident, that does mean I at one point endorsed the idea, but its always possible my opinion has changed since I last updated that tiddler.\n\nIf you look at tiddlers related to any works of fiction you dont know, beware, there will almost certainly be spoilers!\n\nI follow the same policy on gendered language in English|https://controlaltbackspace.org/disclosures/#gendered-language for singular third-person pronouns in my Zettelkasten as I do on my blog. Tiddlers may be “locally non-inclusive,” so to speak.},{title:PublicHomepage/Organization,created:20200916233604567,modified:20210703161651530,tags:Public Meta,type:text/vnd.tiddlywiki,text:If youre not sure how the wiki is organized, these meta tiddlers might help you out.\n\n* ZettelkastenCardTypes -- the sorts of things that tiddlers are created for and their roles in the system; correspond to the red tags.\n* TagColors -- speaking of red tags, the tags are pretty rainbow colors for a reason; heres why.\n* OurNamingConventions -- nitty-gritty details on the naming of tiddlers.\n* WikiCamelCase -- why I use a bunch of weird words that ~RunTogetherLikeThis.\n* OurWikiAbbreviations -- potentially unfamiliar abbreviations I use all over the place.\n* TiddlyRemember -- why there are weird questions and sentences with a green bar next to them throughout the wiki.\n* EpistemicStatuses -- offer a rough idea of whether Im pretty sure Im right or Im totally making things up.\n* MediaRatings -- offer a rough idea of how valuable a source is.},{title:PublicHomepage/Points of Interest,caption:Points of Interest,created:20201121014427708,creator:soren,modified:20240524050036205,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:Some spots you might want to start reading:\n\n* Favorites|Favorites, a set of ideas or sections that I consider particularly complete, important, insightful, and/or intriguing. You might consider them the “best of” M2.\n* Who I am and what I think|WhoIAmWhatIThink, an index of my personality and opinions.\n* Questions posed by the world that are intriguing and unanswered, or maybe unanswerable.\n* The SorenConcept tag: ideas or names for things you probably havent heard of before, because I believe I came up with the idea or crystallized it with a name|IdeaApi myself (not to say someone else cant have found it too!).\n* RecentlyRead, a list of books I have recently finished.\n* RecentIdeas, a list of ideas Ive recently written up or updated.},{title:PublicHomepage/Video Tour,caption:Video tour,created:20210415022348069,modified:20210415022825524,tags:Meta Public,type:text/vnd.tiddlywiki,text:If youre interested in learning more about the system itself, rather than the ideas in it, this 75-minute tour discusses the ideas of Zettelkasten and how Ive chosen to implement it for myself in TiddlyWiki.\n\n\u003Ciframe width\1202\ height\676\ src\https://www.youtube.com/embed/GjpjE5pMZMI\ title\YouTube video player\ frameborder\0\ allow\accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\ allowfullscreen>\u003C/iframe>\n\n(If you dont have 75 minutes, if you click through to YouTube there are timestamps in the description that will help you jump to the parts you care most about.)},{title:PullRequest,created:20200612212810602,creator:soren,es:confident,modified:20211229145438395,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:Feature of modern collaboration platforms used to both carry out an essential function of the source control system (merging branches), ensure the code is really ready to go, thus preventing mistakes through ToolAssistedDevelopment, and allow people to collaborate (see OpenSourceSoftware) and keep up to date on others work.\n\nStarted as a defining and somewhat revolutionary feature of ~GitHub, but now supported by any Git platform and some other systems as well.\n\nReally should be called a //merge request// in most cases, but in its initial incarnation at TheGitHub it was used only when you forked an existing repository and then asked the person operating the main repository to pull commits from your fork, thus a pull. Nowadays they can still be used this way, but are just as often if not more often used to merge branches in the same repository, which gets extremely confusing for new users! (Ive seen a lot of people mix up pulling and merging as a result and think `git pull` is the way to combine two branches. Even worse, this can sometimes be made to work.)},{title:PupuseriaLaPaz,created:20240402013807295,creator:soren,modified:20240402013808146,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PurcellCuttsHouse,created:20230516114945458,creator:soren,gis-lat:44.959184166512145,gis-long:-93.30069829320942,gis-zoom:16,modified:20230516115027478,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:PurpleCow,caption:Purple Cow,created:20200712145251028,creator:soren,due:202210301200,ivl:405,medium:book,modified:20210920140503106,modifier:soren,owned:no,readstatus:unread,tags:Antilibrary Source Public,type:text/vnd.tiddlywiki,text:Book by MrSethGodin},{title:PurposeOfBags,created:20211031204628125,creator:soren,description:Bags exist to turn multiple items into one and make them easier to carry; stop using them in other situations!,es:confident,modified:20240403024333982,modifier:soren,tags:Humor Design Environmentalism Public Idea,type:text/vnd.tiddlywiki,text:(Sarcasm status: facetious but describing a legitimate problem.)\n\nPeople who bag purchases at stores often seem to not understand the purpose of a bag. So lets be clear: the purpose of a bag is to reduce the number of items you have to carry, by containing many items inside a single item designed for that purpose and bearing convenient handles.\n\nIt follows that:\n\n* Bags can -- and should -- contain //more than one item//! I often watch single grocery items that arent heavy and have no conceivable need for isolation end up in one bag. I think Ive had small grocery runs at my local store where the average number of items per bag was less than two.\n* Putting a single item in a bag and giving it to me is completely useless. It does take extra time, consume extra plastic, and give me something extra I have to throw away. But people do this all the time.\u003C\u003Cfnote \To steelman this, someone might still want a bag if the item is an awkward shape and particularly hard to carry, or if he is embarrassed to be seen carrying it in the street. But these situations are the unusual case; if a customer finds himself in this situation, he can say the magic words, “Can I have a bag for this, please?”\>>\n\nA corollary is that bags are meant to make things //easier// to carry. Even if they contain more than one item, when you buy a set of items that stack easily, a bag can convert convenient stacks of items into a really awkwardly shaped, overly-packed parcel which items fall out of. But nobody ever asks if they should put it in a bag. My favorite is when I buy other containers (boxes, bags, etc.) and people try to put them in a bag.\u003C\u003Cfnote \Its a good thing I havent bought any Bags of Holding or I might be dead by now.\>>\n\nSigh.},{title:PurposeOfTimeZones,created:20241231140229842,creator:soren,description:Time zones might be annoying, but abolishing time zones would be even more annoying.,es:confident,microlink:tz,modified:20250216214127436,modifier:soren,tags:Idea WhatIf Public,type:text/vnd.tiddlywiki,text:People have been talking about eliminating Daylight Saving Time again recently, and whenever anything like this comes up, someone inevitably says, “We should just get rid of time zones!”\n\nThis is a terrible idea that doesnt even work well in theory -- but that isnt obvious because a lot of people misunderstand what time zones are for. Many people think they exist only because its more convenient to have what they call 12 oclock somewhere near solar noon, 7pm somewhere near sunset, and so forth. Its true this is convenient locally, but, counterintuitively, its also more convenient //globally//, because it makes it easy to reason about where the sun is somewhere else in the world, and thus what people will likely be doing there.\n\nSo you want to abolish time zones|https://qntm.org/abolish is the definitive read, but because thats pretty long, here are two quick stories to demonstrate the problem:\n\n(1) You have an urgent task to start, but you know youll need to check in with your coworker Mike about it soon. You work in New York, he works in Los Angeles.\n\nWith time zones: you look at the clock, see its 10:30, remember that Mike is on Pacific Time, subtract 3 hours, and surmise that Mike is probably not at work quite yet, since it is only 7:30 there -- so youll work on something else for an hour or so first.\n\nWithout time zones: you look at the clock and see that it is 15:30 UTC. Now what? What time is it for Mike? Well, its also 15:30 UTC; its 15:30 everywhere.\u003C\u003Cfnote \Military time would be the only sensible choice for timekeeping without time zones, because “a.m.” and “p.m.” become extremely confusing when 12:00 has no correspondence whatsoever with solar noon. In many places in the world, the morning would be “p.m.” hours.\>> What does that mean? Is the sun up where Mike is? No idea! Now you have to memorize or look up Mikes work hours (say, 16:30 to 01:00\u003C\u003Cfnote \Yes, parts of the world that are currently on Pacific Time would have their evening hours fall on a different date than their morning hours. See also this half-hour YouTube video|https://www.youtube.com/watch?vcpKuBlvef6A dedicated to explaining why the International Date Line looks so weird; it comes down to everyone trying to synchronize their days of the week with the parts of the world they do business with because it is a humongous bother otherwise.\>>). And you have to do that for every person you communicate with.\n\nYou might object you could simply remember that Mikes work day starts and ends about 3 hours before your own. Congratulations, youve just reinvented time zones, only more confusing.\n\n(2) You fly from the US to Japan. The pilot announces, “Welcome to Tokyo Narita, where its 22 degrees and clear with a light breeze, and the local time is...” Wait – its UTC everywhere, so your watch is still right, theres nothing to announce. But the sun rises and sets at a different time here, so that doesnt solve your problems. You can see from your window that the sun is up midway over the horizon, but is it morning or afternoon? How long do you have to sightsee until sunset? Youre used to waking up around 12:00 UTC; when will you wake up here? When you call your friend to plan dinner tomorrow, whats a reasonable time to suggest? No idea!\n\nTime zones might be annoying, but theyre annoying because coordinating people for whom the sun is in different places in the sky is annoying -- the time zones themselves are not the problem, and in fact are an extremely reasonable and usable way to handle the problem.},{title:PuttingTheElseBeforeTheIf,created:20200407015121298,creator:soren,modified:20200407015358536,modifier:soren,tags:SorenConcept Expression Public Idea,type:text/vnd.tiddlywiki,text:My PersonalHumor version of “putting the cart before the horse,” based on a humorous example of incorrect syntax that R.A.|PrivatePerson gave in class one time.},{title:Python,created:20200322130532998,creator:soren,es:confident,modified:20220505183551700,modifier:soren,tags:ProgrammingLanguage Software Code Public Idea,type:text/vnd.tiddlywiki,text:My overall favorite ProgrammingLanguage. Easy to learn (commonly recommended for beginners) and fabulously easy to read, free of unnecessary punctuation and other elements. Powerful standard library and excellent community package repository. Highly expressive (perhaps not as much as, say, Lisp, but its a lot easier to pick up). Development velocity is pretty much unparallelled in my experience. Language is inherently dynamically typed, but MyPy allows it to be StaticallyTyped when thats more appropriate (e.g., in large programs).\n\nBase ObjectOrientedProgramming paradigm, but supports many FunctionalProgramming features, does well at a ProceduralProgramming style when thats more suited to your use case, and can be hacked around decently into a DeclarativeProgramming style when needed (though not nearly as well as Lisp or even PowerShell). \n\nThe downside is a constant, frustrating sluggishness in high-performance operations. It can be an order of magnitude slower than the high-performance side of the spectrum with C or C++ or Rust|RustLanguage. Often, of course, this doesnt matter, but when it does its a big deal, and rewriting everything youve just written in a beautifully expressive language in a brute-force C style is frustrating!},{title:PythonAzureApps20200520,at:202005201930,caption:Build Python apps in Azure faster with Visual Studio Code,created:20200518214412050,medium:video,modified:20210522015801926,presenter:MrNicolasGarfinkel,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/314e756d-b145-4d84-90c1-1aea9235df72,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis presentation demoed building a serverless TheGitHub Issue visualization tool. MrNicolasGarfinkel talked at light speed through the whole thing and got done at exactly the right time to take a few questions before the end!\n\n* VisualStudioCode integration helps you avoid context switching to the Azure portal or elsewhere...stay right in the tool\n\n* AzureFunctions component\n** Free tier: 1M requests, 400,000 GB-s of resource consumption monthly\n** Call an API to download and blob-store data from TheGitHubs API, then filter/clean/shape and dump into CosmosDb.\n** Set up a Functions project locally with the Azure extension\n** Excellent Azure SDK for Python\n** Debug, test, iterate locally\n\n* Azure ML component\n** Extract key phrases from issue titles and store those in CosmosDb too, using Cognitive Services (cf. CognitiveSearch20200520)\n** AzureFunctions serves as orchestrator\n** Can browse and view see Cosmos documents directly in VSCode! Postgres and later MySql will be included too\n** Local settings can be kept out of source control and uploaded into the environment of a Function from the extension\n\n* Webapp\n** Flask, hosted on Azure App Service (Heroku-ish)\n** Look at questions about GH issues were interested in\n*** Summary statistics\n*** Common key phrases\n*** Recent issues\n** Deploy from VSCode\n** Stream and view past logs in VSCode\n\nCode and resources: https://aka.ms/build2020pyvsc},{title:QTwelveAssessment,created:20210623114230018,description:The Q^^12^^ assessment by Gallup measures how attractive a workplace is to high performers.,es:confident,modified:20210623122224567,tags:Public Employment Idea,type:text/vnd.tiddlywiki,text:Before we can talk about what the most effective managers do|FirstBreakAllTheRules1999, presumably we need a way to measure effectiveness. Gallup chooses to do this using an outcome-based|OutcomesOverActivities measure: what do the best employees think of their jobs and their work environment? They use twelve questions (well, really theyre statements that you rate) for this:\n\n# I know what is expected of me|ThreePillarsOfScrum at work.\n# I have the materials and equipment I need to do my work right.\n# At work, I have the opportunity to do what I do best every day.\n# In the last seven days, I have received recognition or praise for doing good work.\n# My supervisor, or someone at work, seems to care about me as a person.\n# There is someone at work who encourages my development.\n# At work, my opinions seem to count.\n# The mission or purpose of my company makes me feel my job is important. (Cf. CareerMission, HigherOrderContributor.)\n# My associates or fellow employees are committed to doing quality work.\n# I have a best friend at work.\n# In the last six months, someone at work has talked to me about my progress.\n# This last year, I have had opportunities at work to learn and grow.\n\nIts enlightening as an employee to consider how well your jobs have met these criteria.\n\n{{QTwelveAssessment/p||PrivateChunk}}},{title:QualitiesOfIndependentMinds,created:20210701025717630,description:Independent-mindedness is characterized by fastidiousness about truth, resistance to being told what to think, and curiosity.,es:confident,modified:20210701030829671,tags:Public Idea,type:text/vnd.tiddlywiki,text:Independent-mindedness, according to Graham, is characterized by three qualities:\n\n* Fastidiousness about truth: labeling things true or false is insufficient, you make use of the gray area in between and understand how strongly you believe things (and ideally, why).\n* Resistance to being told what to think: you dont care what other people think, and you delight in ideas that violate conventional wisdom, especially when counterintuitive and funny. I think this is the same attitude described in HackingPedantryAndScience.\n** It should be noted that conspiracy theorists are in fact highly conventional-minded. They resist the normal source of truth, but instead they give all their trust to someone who deserves it even less.\n* Curiosity: new ideas come from curiosity, and independent-minded people dont stop being curious as they grow up, unlike conventional-minded people.\n\nGraham claims that different people have these qualities in different degrees, so there is not just one type of independent-minded person, yet they “all know the secret handshake.”},{title:QuantumCountry,caption:Quantum Country,created:20200422234445907,medium:mnemonic,modified:20201216041353863,tags:Source Public,type:text/vnd.tiddlywiki,url:https://quantum.country/,text:Experiment by MrAndyMatuschak and MrMichaelNielsen in what they call the MnemonicMedium -- a system that integrates spaced repetition with articles.\n\nExplains quantum computing and a bit of mechanics to support it, with reviewing built right in. Designed as an entirely new kind of medium, as the name suggests.\n\nI would love to give this a try sometime: not my highest priority of things to learn, but it is //interesting//, and the medium idea is amazing.},{title:QuarantineRecital,created:20200410024933035,creator:soren,modified:20200509031639217,modifier:soren,tags:PandemicMood Sink Music Public,type:text/vnd.tiddlywiki,url:https://www.facebook.com/soren.bjornstad/posts/10206706622460540,text:!! Recording\n\nJoining the wide variety of musicians who have posted themselves playing something from home, I recorded this program on Easter Sunday 2020 (April 12th) and published it as \Public\ (something I rarely do) on F.|PrivatePerson. See {{!!url}}. Its also maintained in my FilesystemCabinet at `Me/Media/Videos/Misc/quarantine-recital`, as of last writing.\n\n!! Program\n\nLetters indicate whether the selection is played on (m)andolin, (v)iolin, or (r)ecorder.\n\n* m You Aint Goin Nowhere (Bob Dylan)\n* v Partita No. 1 in B Minor, Double #3 (Bach)\n* m Carolina in My Mind (James Taylor)\n* m Swing Low, Sweet Chariot\n* v Improvisation\n** Blest Be the Tie that Binds\n** How Can I Keep from Singing?\n** Simple Gifts\n** And anything else...\n* m Little Jack Frost (Kate Rusby)\n* m The Water is Wide\n* r In Thee is Gladness\n* m I See the Moon, the Moon Sees Me\n* m Beautiful Savior\n\n!! Thoughts\n\nSome stuff I looked off of when speaking before each song.\n\n* YAGN\n** Bob Dylan tune\n** Accident in 1966\n** Would be great for one of those icebreaker or road trip games. \Describe your life right now in the form of one song title.\: Its called \You Aint Goin Nowhere.\\n\n* Bach\n** Bach is good played any way in any situation. (Boomwhackers?)\n** So, of course, it fits here.\n\n* Carolina\n** I think a lot of us are missing certain places we cant be right now. (Because we aint goin nowhere...)\n** Perhaps well have to use our imagination instead.\n** Think youll know it...\n\n* Swing Low\n** My take on an old spiritual.\n\n* Improv\n** Going back to violin for a bit. Play a few hymn tunes.\n** I talked about imagination a minute ago.\n** I practice what I preach, so Im just gonna make this up on the spot.\n** Hopefully it doesnt come out boring. :0\n\n* Little Jack Frost\n** Song by a Yorkshire folk singer named Kate Rusby.\n** Im not really sure exactly how this fits into the theme, but I think it does. At least to me it feels like it does.\n\n* The Water is Wide\n** An old love song (of sorts) that seems particularly appropriate right now.\n\n* In Thee is Gladness\n** After that one we need a little cheer I think.\n** Read the text?\n\n* I See the Moon\n** Meredith Willson (best known for TMM)\n** Remember my mother singing this when I was a kid\n** A reminder were still connected.\n\n* BS\n** Like a good TheStOlafChoir alumnus, Im going to end with \Beautiful Savior\.\n** Not really a hymn of praise for me...but an assertion that things will be OK even at the worst of times.},{title:QueerModernHymns,at:202407131600,author:MsBethPatterson,blurb:,caption:Queer Modern Hymns for the Activist Heart w. Beth Patterson,conference:2024WildGooseFestivalTrip,created:20240718032512787,creator:soren,medium:conference,modified:20240723025243042,modifier:soren,rating:average,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:I stopped here because we had met Beth at the SG campsite a little while ago and she encouraged us to come, and I wanted something I could go to half of before BuildingCommunityAfterDeconstruction started at half past.\n\nIm not sure I saw either much explicit queerness or hymnody in there, but they were all thoughtful songs about love in some way or other, so maybe that counts for both? The first one was definitely activist too – a “wake up, act” kind of motivating movement song. Maybe some labor-union or communist spirit.\n\nShortly before I left, a woman came and sat at the picnic table next to me, then a friend or partner joined. I assured them I wasnt moving because of //them//, Id already been planning on going to the next event!},{title:QuestionMarkName,created:20200430134332067,creator:soren,es:confident,hideorphan:true,modified:20210917010448292,modifier:soren,tags:PowerShellFail Public Idea,type:text/vnd.tiddlywiki,text:PowerShell is not Lisp, yet for some bizarre reason variable names can contain //question marks//. Viz., from `about_Variables`:\n\n\u003C\u003C\u003C\nAlphanumeric variable names can contain these characters:\n\n* Unicode characters from these categories: Lu, Ll, Lt, Lm, Lo, or Nd.\n* Underscore (`_`) character.\n* Question mark (`?`) character.\n\u003C\u003C\u003C\n\nThe real fail comes in this common error when doing string interpolation:\n\n```powershell\nRead-Host \Would you like to continue with the $operation? (y/n)\\n```\n\nSee, even my syntax highlighter doesnt spot the problem! The question mark gets consumed by the string formatter since its a valid character in a variable name, and so unless you happen to have run `$operation? \SomeString\` as well, `$operation?` evaluates to null, which the string formatter coerces to the empty string, and what prints is:\n\n```\nWould you like to continue with the (y/n):\n```\n\nThis is really tricky to debug if you dont know about this quirk, since if you step through it in the debugger or print `$operation`, the right value comes up. The solution is to use braces, which isnt hard, its just hard to remember to do:\n\n```powershell\nRead-Host \Would you like to continue with the ${operation}? (y/n)\\n```\n\n\u003C\u003Crememberq \20200511014101353\\n\t\What character of punctuation unexpectedly requires braces when it appears after a variable name in PowerShell?\\n\t\The question mark (it is a legal component of variable names).\>>},{title:Questions,created:20201015024219210,creator:soren,es:possible,modified:20221202001821502,modifier:soren,tags:Science Futurism Public Idea,type:text/vnd.tiddlywiki,text:This is a general list of OpenQuestions that I think are important, fascinating, or just puzzle me. Some may be inherently unanswerable, at least for the time being.\n\nInspired by a number of similar lists around the web, including:\n\n* https://patrickcollison.com/questions\n* https://www.gwern.net/Questions\n* https://guzey.com/personal/research-ideas/\n\nMy list is perhaps less focused on well-known research problems, but is not unrelated.\n\n!! Mathematics/CS\n\n* Does P NP? (The vast array of NP-complete problems that are reducible to each other is also deeply mystifying to me. The fact that so many interesting problems are, in some important aspect, //the same// is bonkers. Perhaps this has some bearing on the question; this Math.SE answer|https://math.stackexchange.com/questions/3864645/soft-question-why-are-there-so-many-np-complete-problems suggests that a big part of it may be the relationship of Boolean satisfiability to a wide variety of problems.)\n* What kinds of cryptographic algorithms are currently stealthily broken, or could reasonably be in the future? It seems from the Snowden disclosures that the NSA has the ability to break some kinds of RSA, but it is unclear why. Depending on the truth, a massive amount of data we currently consider secure could actually be compromised by multiple parties. Widespread breakage, e.g., in discovering that a problem we thought was sufficiently hard isnt actually, has the potential to undermine the entire internet and large parts of the global economy, if it cant easily be fixed or replaced. //Most likely// there would be something else waiting in the wings, but this seems to me like an underappreciated BlackSwan event in the making.\n\n!! Learning, process, daily reasoning, self-improvement\n\n* How can one create and share top-quality SpacedRepetition content with others and in general make SR accessible to a large audience? SR has the theoretical potential to revolutionize learning, but the difficulty of getting started and taking responsibility for ones own learning has left it a niche topic. (Cf. GoodSharedFlashcards)\n** Similarly, is SR appropriate for everyone, or is it unreasonable to think|ThingsArentGoodForEveryone everyone would use it|SpacedRepetitionPersonality effectively?\n** Im personally working on this problem and related ones at RemNote|https://remnote.com.\n* What novel uses can spaced repetition be put to? For instance, how about keeping fiction more salient|SpacedRepetitionForFictionResearchQuestion?\n* Is there any way an average person can learn to intuitively think about BlackSwans and asymmetries, or at least effectively account for the related CognitiveBiases consistently throughout life? To me, our complete inability to think sensibly about tail events seems like it might be our most consequential handicap in reasoning, because the results can be so disproportionately disastrous.\n* Can another text-entry system improve on standard keyboards for writing and general computer use? QWERTY|QwertyKeyboard is a mediocre keyboard layout at best, but even Dvorak or some other alternate layout may not be the best way to interact with a computer; keyboards werent even designed to be an efficient way to interact with a machine, they were largely a historical accident. (QWERTY was invented before touch-typing!) Only two alternate systems are widespread, dictation and MachineStenography. The former is getting more accurate all the time, but even a 100.00% accurate system is beset with practical problems, including noise, privacy, and extremely laborious editing. The latter is silent and extremely fast and effective for text entry but highly complicated, requires months of dedicated training to reach competitive speeds, and could still be better at editing. Neither seems like a likely path forward for general use. Are there other options?\n\n!! Science\n* Why has the average weight of not just humans but also animals increased substantially over the last decades? People are heavier. Peoples dogs are heavier. People today gain more weight on the same diet than they did half a century ago. Even //lab animals// are getting fatter|https://www.livescience.com/10277-obesity-rise-animals.html, for crying out loud, and we //know// were feeding them the same amount we were before and even have them under basically the same conditions. These lab studies seem to provide nearly incontrovertible evidence it is not just social factors driving the rise in obesity, but exactly what physical factors are behind it remains a critically important mystery if we care about public health. While its not exactly an obscure topic, I still find it fairly astounding that more people arent discussing this. I also find it fairly astounding that people continue to repeat mantras like “calories in, calories out”\u003C\u003Cfnote \\\Obviously on some level its true that the number of calories you take in vs. consume affects whether you gain or lose weight. Thats just physics. It also seems an extraordinarily unhelpful way of looking at the problem, at least on a whole-society level -- it might explain the physics, but it leaves the sociology and public health untouched, and these are the levels were actually hoping for insights on -- and it ignores evidence that some strange people, when studied, appear to be capable of consuming absurd amounts of extra calories without gaining weight.\\\>> and blaming it all on “personal responsibility” when things are clearly more complicated than that. Lack of self-control does not explain most animals across the entire planet getting heavier (though it could still be //part// of it).\n** Slime Mold Time Mold has a book-length series called A Chemical Hunger|https://slimemoldtimemold.com/2021/07/07/a-chemical-hunger-part-i-mysteries/ which claims the obesity epidemic is caused solely by chemical contamination of some kind (perhaps antibiotics, PFAS, and/or lithium). Im not overly convinced by their results, and they have been oddly silent on some significant criticisms raised by others, but its fascinating and this is the kind of study we need more of right now.\n* What is behind the DeclineEffect, the fact that most results (outside of particularly hard-science areas like physics) become harder and harder to replicate over time and show smaller and smaller effect sizes? If its just that the initial strong results were bad science, do we have //any// strong results that are good science? (This is tightly related to the ReplicationCrisis and could have the same causes, but isnt exactly the same thing.)\n* How can we prevent the widespread practice of scientism before the public loses all trust in scientific institutions? Scientism|ScienceVsScientism is when propaganda or veiled interests take the form of scientific results. Scientism is not always practiced intentionally and can be hard to tell apart from science. The FallibilityOfStatistics makes the problem even worse.\n* What the heck is going on with parapsychology? People too easily dismiss it|ParaPsychology as pseudoscience because it seems implausible. But we cant just wave it away because we dont like the conclusion. The usual point of attack is that its just bad statistics combined with conclusions warped to meet an agenda|FleaCannotHearAnymore, but it would seem disingenuous, or at least not reflective of the evidence, to claim statistics in parapsychology are less rigorous than the standards in other fields of \true\ science. Sure, some studies are poor, but others|https://f1000research.com/articles/4-1188/v2 are quite good. Replication is mediocre, publication bias rears its ugly head with largely unmeasurable frequency. But //exactly the same is true elsewhere// for non-pseudosciences, and if anything we take those results too seriously. To me it seems that either parapsychology studies are finding real effects, which, although unlikely, has the potential to make us rethink a lot of what we thought we knew about physics and consciousness (which admittedly isnt that much to begin with|HardProblemOfConsciousness), or the entire process of statistics-based science as presently practiced is fundamentally broken, which has the potential to make us rethink a lot of our scientific epistemology. (See Scott Alexanders The Control Group Is Out Of Control|ScientificControlGroup2014, and PsiAsFailingsOfScience.)\n\n\n!! Society\n\n* People often laugh at how stupid criminals are. Of course, people who decide to, say, rob banks are in fact, in aggregate, not among the smartest or best-prepared people (if only because bank robbery has an awful risk-reward ratio even compared to other straightforward property crimes). But theres also a huge observation bias here -- if someone is smart at committing a crime, they wont get caught, and if theyre particularly smart, well never even know a crime was committed. This raises two questions, or really one question phrased two different ways because an answer to one would give most of the answer to the other:\n*# What percentage of our observation about stupid criminals is attributable to the actual average intelligence of all criminals, including those who are not caught or identified, and what portion of it is caused by survivorship bias?\n*# How much crime is occurring every day that nobody ever knows about?\n* How can we consistently build places that have what MrChristopherAlexander calls the QualityWithoutAName? Everyone can immediately recognize places that have it, and most of us are forced to live and work in places that dont, which has a clear negative impact on our quality of life. Does Alexanders failure to consistently create these places despite more or less spending a lifetime studying it mean were doomed to throw buildings at the wall and see which ones stick, or is there some other reason his pattern language didnt solve the problem? (PatternsOfSoftware takes up a few of these questions. See also CityIsNotATree for the systemic version and various attempts to turn space design into a reductionist endeavor.)\n** Bonus question: Why isnt anyone even //trying//? While there may be an isolated \they dont make em like that anymore\ from time to time, people rarely even seem to notice, much less demand nicer places or try to create them. Building codes are likely a piece of the puzzle, but this isnt a satisfying explanation because if thats the only reason, we should see more people standing up and challenging them.\n\n\n!! Software\n\n* Why is software persistently so bad? (Because its hard to write. But why havent we been able to come up with better ways of making it easier to develop good software?) Bonus question, why are people willing to put up with it? (EverythingsBroken, Everythings Too Complicated|https://controlaltbackspace.org/simplicity/everythings-broken-everythings-too-complicated/, and nobody cares.)\n* Why, after 50 years of word processors and document preparation systems, do the tools used by average users still produce such poor results? LaTeX or AdobeInDesign or a custom CSS layout can make something beautiful, but you have to know what youre doing. Themed Markdown, AsciiDoc, or something like that can do a good job and isnt harder to learn than a word processor if you dont know either yet, but nobody uses them. Word processors are aggravating and produce crap results, and they have barely advanced in 30 years, and everyone still uses those.\n* What, after the Unix command line, is the next frontier in expert computing tooling? The *nix command line has been, in many ways, the most effective and pervasive general-purpose tool for power users in computing for 50 years. Its hard to believe we havent come up with anything that expert technical users prefer for common tasks since the 70s. Certainly no other end-user interfaces from the time have survived. Yet, persistently, other tools are less efficient (theyre too specific, or require too much clicking, or are designed for people who use them only occasionally and dont grow sufficiently with the user). Can we do better?\n* Is it possible to make social media a consistent and obvious net positive to society, avoiding problems like PersonalBubbles, RampantNotifications, vitriol spat at people because they dont appear to have a real presence behind the computer screen, the rapid spread of misinformation, the appearance that everyone else is happier than you, \doom-scrolling,\ and so on -- or is the whole idea just broken? Do we need the friction|UsefulFriction provided by other, older (or as-yet-unseen) means of communication?},{title:QuinaultRainforest,created:20250626182658455,creator:soren,modified:20250626182659337,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:QwertyKeyboard,created:20201206181236582,creator:soren,es:confident,modified:20211107181123985,modifier:soren,tags:Definition Public Idea,type:text/vnd.tiddlywiki,text:The standard keyboard layout used across the UnitedStates, and the basis of many other Latin-alphabet-based language layouts.\n\nErgonomically pretty bad, because it wasnt designed with ergonomics or even touch-typing in mind. Even its creator, MrChristopherSholes, tried to improve the layout|SholesRevisedKeyboard once the environment changed.},{title:QwertyResidue,created:20200116025204981,creator:soren,description:QWERTY residue consists of the parts of a things final form that show traces of its mode of creation that are irrelevant to its final function.,es:confident,modified:20210623023630186,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:QWERTY residue is a phenomenon in which a things final form bears non-obvious but fully present traces of its mode of creation. These traces usually have little to no noticeable effect on the things function, but are delightful things for curious people to learn about and occasionally offer other insights.\n\nIts namesake is, of course, the QwertyKeyboard. MrChristopherSholes started with an alphabetically arranged keyboard on his typewriter (because why not, when touch-typing hadnt even been invented yet). But it kept jamming up, so he began moving keys around until hed made enough changes to make it stop jamming.\n\nThe modern QWERTY keyboard bears the residue of this process. Take a look at the home row: you can still see the sequency ADFGHJKL, with E and I immediately above and C just below in just about the right spot to take their place in the sequence. Only B has actually moved significantly. You can even spot a couple of other runs in regular patterns: MNOP, QRSTU.\n\nOther examples:\n\n* I first noticed this was a concept while tweaking the imported MaudWiki text on E.|PrivatePersons name and how it evolved from \Elbereth\.\n* When editing images, especially lossily-compressed ones, it is often possible to identify what was modified after the fact -- with the naked eye in many cases, but especially when carrying out some of your own transformations. See for example this HackerFactor blog post|https://www.hackerfactor.com/blog/index.php?/archives/322-Body-By-Victoria.html.\n* Human bones, genitals, and belly buttons end up shaped the way they are because of their growth and differentiation process.},{title:RabbitMark,created:20210516225013195,es:confident,modified:20210516224835398,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Bookmark manager written by me. Not yet public. Fast, quick, easy, portable, belongs to you.},{title:RaceHorseOutOfAPig,created:20200422024944254,creator:soren,es:mythological,modified:20220805144107727,modifier:soren,tags:Expression Public Idea,type:text/vnd.tiddlywiki,text:Aphorism: “You cant make a race horse out of a pig.” Meaning, theres only so much you can do to improve some things.\n\nIn EastOfEden, some character (cant remember who) rejoinders: “No, but you can make a very fast pig.” So perhaps things arent irredeemable after all. (But cf. PoopSandwich.)\n\nSee the relationship between talent and effort: solid practice will get you much better at anything, but you still wont beat people who have talent and practice. \n\n!! References\n\nRelated:\n\n> You can only piss with the dick youve been given.\n> ---\u003C\u003Crt 12474>>},{title:RaglanMythPattern,created:20200410213210725,creator:soren,es:likely,modified:20210515034607286,modifier:soren,tags:MentalModel FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:A 22-item pattern, which most Indo-European myths|Mythology seem to follow. Not every hero, of course, will match exactly every point, but most score highly.\n\nThe points, copied from Wikipedia for convenience:\n\n* Mother is a royal virgin\n* Father is a king\n* Father often a near relative to mother\n* Unusual conception\n* Hero reputed to be son of god\n* Attempt to kill hero as an infant, often by father or maternal grandfather\n* Hero spirited away as a child\n* Reared by foster parents in a far country\n* No details of childhood\n* Returns or goes to future kingdom\n* Is victor over king, giant, dragon or wild beast\n* Marries a princess (often daughter of predecessor)\n* Becomes king\n* For a time he reigns uneventfully\n* He prescribes laws\n* Later loses favor with gods or his subjects\n* Driven from throne and city\n* Meets with mysterious death\n* Often at the top of a hill\n* His children, if any, do not succeed him\n* His body is not buried\n* Has one or more holy sepulchers or tombs\n\nDiscussed extensively in GreekAndRomanMyth, and the basis of MyMaudiverseHeroMyth, from that class.\n\nCf. SeparationInitiationReturn. The myth pattern is an adventure|AdventureDefined, a particularly large and mythological one.},{title:RampantNotifications,created:20200411032258918,creator:soren,es:confident,modified:20210509010219069,modifier:soren,tags:SocialMedia Neuroscience Design Public Idea,type:text/vnd.tiddlywiki,text:Notifications, little beeps and bloops that interrupt you to tell you some event has happened, are terribly abused by lots of software. And, as usual, its often for the gain of the folks pushing the AddictiveDesign. Some of it is just because thats become normalized in our society, and people figure, yeah, why wouldnt I want to know up to the minute when I have a new task to do or someone wrote me an email?\n\nA gigantic obstacle to any kind of DeepWork and the erosion of our attention, now quite possibly our ScarcestResource.\n\nNotifications are part of a MicrotransactionalDystopia.\n\nThis is not to say that notifications are all bad. They have a specific purpose, which is to let you know something urgent happened or someone really needs to talk to you right now -- or when you would otherwise be checking something constantly. But they do need to be used carefully. As I wrote in HowToSlowDown2019:\n\n> We treat notifications like a trivial, basic part of the background of modern life, like turning on the tap to get some water, when they ought to be treated like government forms or morphine or chainsaws: fantastically useful in the right circumstances, but somewhere between bothersome and lethal if misused, something to be exceedingly careful with.},{title:RandomThoughts,created:20200121122937718,creator:soren,es:confident,modified:20240601202613654,modifier:soren,tags:SorenConcept RecordsProject Public Idea,type:text/vnd.tiddlywiki,text:Random Thoughts (usually abbreviated RT, especially in references) is my CommonPlace book, containing thousands of notes, quotes, and musings from over ten years, starting in October 2009 (at which time I was a freshman in high school -- so Ive been doing this my entire adult life and then some). As the header says, “if it doesnt go anywhere else, it goes in Random Thoughts.” The ZettelKasten may be beginning to challenge this supremacy, so well see...RT is still definitely the place for random quotes, but maybe wed do well to put many of the thoughts in here instead.\n\nLarge parts of RT are available on the web at https://randomthoughts.sorenbjornstad.com. It might not all make sense, but if youre having a particularly boring afternoon, you could check it out. Entries are frequently linked throughout the ZK where relevant, particularly as sources of quotations.\n\nThe macro|$:/sib/Procedures/rt `rt` should be used to refer to entries in Random Thoughts, like `\u003C\u003Crt 4810>>`. This creates a link to the appropriate anchor on the web Random Thoughts.\n\nRandomThoughts is part of the RecordsProject.},{title:RankingMethods,created:20250205172126834,creator:soren,description:What are the best processes for ranking a list of items by importance or value?,es:possible,modified:20250205173340037,modifier:soren,tags:Reasoning Public Process Idea,type:text/vnd.tiddlywiki,text:Sometimes you have a list of things and have to figure out how to pick the highest couple of them, or order them, on some dimension (highest quality, most important, most urgent, etc.). Some useful methods Ive encountered to achieve this while feeling confident about the result are here.\n\nThese are fairly labor-intensive methods, so I think its usually necessary to AvoidScale. The maximum number you can do well by yourself is probably about 15 Id say. When I do this in, say, my YearInReviewPractice, Ill just make a giant list and then go through and make a smaller list by writing down anything that feels like it could be important. This is usually small enough already even though I start with 50 items or more, and if there are still too many, its usually easy for me to see which ones seem unimportant enough to just chuck out without needing any special process.\n\n\n!! Sequential forced-choice\n\nLook at the full list. Now pick the //one// item that is most important to you. Set that one aside, then on the reduced list, repeat the process, until you have an ordered selected set of the size you want.\n\nI learned this method from the UniversalValues questionnaire I did on ClearerThinking, which I found used it to very good effect. It was possible to take account of the existence of various types of values on the list in my thinking, given that I didnt feel like I wanted to include, say, only items that elevated me over other people, while also not overemphasizing this; I still had to be able to honestly state each was most important, this wouldnt have allowed me to give only socially acceptable answers.\n\n\n!! Pairwise ranking\n\nMake your list, then go through and evaluate, ideally, every item against every other item. This doesnt always yield a consistent result, peoples preferences are not perfectly consistent! But if you do enough of them, statistical analysis methods let you decide on the best ranking. If you dont have enough time, such analysis can also decide which comparisons yield the most additional information and prioritize those. Do it until you get tired.\n\nBest done with a software tool; Ive used Prioneers|https://prioneer.io/tools/pairwise-ranking-tool in the past.\n\nThe downside is you have to do a lot of comparisons. But each comparison is usually easy (as long as youve made sure all the items on the list are the same type of thing; this method may be less robust to differences like this than sequential forced-choice).\n\nPairwise ranking can be distributed among a large group of people who each sit and express their opinions for a while, which can come in handy sometimes.},{title:RapidNormalcy,created:20200514031523014,modified:20201228130401359,tags:PandemicMood Psychology Public Idea,type:text/vnd.tiddlywiki,text:People can psychologically adjust to essentially anything. And sometimes way faster than youd think. Like ten weeks or so into the pandemic, Im practically forgetting that grocery stores normally arent out of a quarter of the things on your list, or that I normally go to church|TheOurSaviorsLutheranChurch and work in an office|TheFederatedInsurance and spend time with other people non-virtually! Nine months in, Ive basically forgotten there was any other way to live. Not that I exactly like it, but its just kind of the way my life is right now and I dont spend much time thinking about it.\n\nI imagine well get back to doing these things quickly again too, once its reasonably safe to do so. It probably wont be quite the same way. But when we do, well settle into it. And so it will be until the next time something crazy happens to disrupt it.},{title:Raptitude,author:MrDavidCain,blogroll:Blogroll,created:20250905204012106,creator:soren,modified:20250905204029180,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://www.raptitude.com/},{title:RarelyMisspellWords,created:20201202232421151,creator:soren,description:I virtually never misspell words, to the point that I almost dont understand spell-checkers.,es:likely,modified:20230513162806801,modifier:soren,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:{{!!description}} (I find them convenient when available to spot typos and rapidly correct them, but ultimately dont notice or care whether theres one active or not.) There seems to be something fundamentally different about the way I think about words than people who sometimes struggle to spell things. I certainly cant spell a word Ive never seen in print before correctly every time (because English orthography), but once Ive connected the print and the vocal form, I will never again be able to look at the word spelled incorrectly and think its right, nor struggle to find the correct spelling after a couple of tries. Okay, its probably not 100%, but Id be surprised if it werent 99.99%.\u003C\u003Cfnote \I occasionally google cases where I cant decide between two spellings; in nearly every case, I find that theyre equally acceptable, or one is slightly more American and the other slightly more British, or something of that nature. I would still be willing to bet several hundred dollars on the correctness of the spelling of any word I know if I didnt have a search engine handy.\>>\n\nThis doesnt mean I never make spelling errors, but when they do happen theyre typos, not errors of thinking, and even here its not a kind of typo I often make, or miss for any significant length of time. I recently read someone who claimed to be a “very good speller” and was still making undetected spelling errors every 2 to 3,000 words. I always spell-check my blog posts before posting them, because why not take the chance to catch your stupid mistakes, but Ive only caught an actual mistake once that I can remember in the two years Ive been publishing TheControlAltBackspace, which is about 150,000 words total as of this writing (I wrote `reversable` instead of `reversible`).\n\nThis also excludes proper names, because each person can spell those however the heck they want.\n},{title:RaspberryPi,created:20200520024216256,modified:20200520024237784,tags:Product Public Idea,type:text/vnd.tiddlywiki,text:Miniature, ridiculously cheap computer on a chip popular for controlling hobby projects.},{title:RasSyndrome,created:20200425024948849,creator:soren,es:confident,modified:20210916033017370,modifier:soren,tags:Language Humor Public Idea,type:text/vnd.tiddlywiki,text:Redundant Acronym Syndrome Syndrome, the phenomenon where an acronym is placed next to a word that starts or ends the acronym because people have ceased to identify the acronym by its constituent words. E.g., “PIN number” or “ATM machine.”},{title:RatchetingProcess,created:20200225033451976,es:confident,modified:20200302235458000,tags:Process Productivity Public Idea,type:text/vnd.tiddlywiki,text:Term and idea from MindHacker which highlights how insanely much you can get done by the simple means of the PowerOfKonsistency.\n\nFor this to work, the results need to build up over time and not WalkBackwards. For instance, cooking for yourself every night (while lovely!) is not a RatchetingProcess because the food promptly gets eaten (provided youre any good at it). If you add up how many meals youve cooked, the number might look impressive|ImpressiveSums, but ultimately you still only have a few meals in the freezer.\n\nFor example:\n\n* MrNiklasLuhmann had over 90,000 notes in his ZettelKasten when he died. But that amounted to only 6 new notes per day, eminently doable.\n* If you write 2 pages a day over your adult productive life of (lets say) 45 years, you will have written over 32,000 pages, easily enough to fill sixty full-length books. Most of its likely going to be crap per SturgeonsLaw, but even if 10% of it is solidly good, thats still six full-length books. Most people think one full-length book is intimidating!\n\nCertain ratcheting processes additionally grow faster than linearly|NonlinearRatcheting.},{title:RationalApplicationDeveloper,created:20200425165248955,creator:soren,es:confident,modified:20211107173915019,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Java IDE by TheIbm. As S.F.|PrivatePerson says, using any IBM product that has “Rational” in the name is an irrational choice. Extremely glitchy, slow, and old.},{title:React,created:20200521213634355,creator:soren,es:confident,modified:20211204154153908,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Popular web UI framework.},{title:Reading,created:20201201035634433,creator:soren,es:likely,modified:20210828141421181,modifier:soren,tags:Public Idea Definition,type:text/vnd.tiddlywiki,text:Act of looking at a page or screen and reading every word until youve seen them all. Arguably the best way of efficiently absorbing information, and almost certainly the best way to engage in serious thought besides interactive conversation (and even then conversation is not //uniformly// better, even with the kinds of smart people who write books on the topic youre trying to learn about; a balance is better).},{title:ReadingAndTripping,created:20210122025248852,es:probably wrong,modified:20210123154805155,tags:MindIntercourse Reading Metaphor Creativity Public Idea,type:text/vnd.tiddlywiki,text:Goofy idea coming out of HowToChangeYourMind2018: MrMichaelPollan briefly mentions in there that perhaps being in someone elses mind|MindIntercourse would be like tripping|PsychedelicDrug all the time, because their normal experiences would be so different from yours that it would be just like extra, vastly different connections were suddenly cropping up everywhere. (See also MyUnusualMentalExperience.)\n\nI wonder if this is an interesting way to look at why //reading// is so powerful. That sounds stupid, but then you see, e.g., MrCarlSagan wax poetic about books, and you start to wonder:\n\n> What an astonishing thing a book is. It’s a flat object made from a tree with flexible parts on which are imprinted lots of funny dark squiggles. But one glance at it and you’re inside the mind of another person, maybe somebody dead for thousands of years. Across the millennia, an author is speaking clearly and silently inside your head, directly to you. Writing is perhaps the greatest of human inventions, binding together people who never knew each other, citizens of distant epochs. Books break the shackles of time. A book is proof that humans are capable of working magic. (\u003C\u003Crt 11451>>)\n\nIm also intrigued by Pollans personal experience of how important integration is, that is, talking with someone or using some other method to reflect on what experiences you had during a drug trip shortly afterwards. Without that, he says, you just forget a lot of what happened, or it doesnt find a way into your life and your experiences of the world...which is exactly what happens if you read something fascinating, but dont write about it|WritingIsThinking, or find a way to link together your ideas|NotesMustLink (or do it in your head with e.g., SpacedRepetition). In both cases, the initial stimulus is important, but if you dont take an active role in the experience, or after the experience, it doesnt change you.\n\nProbably this is a pretty out-there idea, but then for the subject matter it seems quite appropriate that it would be one!},{title:ReadingStyle,created:20200117022211887,creator:soren,description:Listening to someone read a text gives the listener a taste of the readers mind and perspective on the text.,es:possible,modified:20210709000038135,modifier:soren,tags:MindIntercourse Reading Public Idea,type:text/vnd.tiddlywiki,text:Its been said that books allow you to get into someone elses head -- the authors -- in a way that few other things do. But heres something else: listening to someone else read a text lets you get into //their// head in a curious way. (Cf. ReadingAndTripping.)\n\nI used to just be irritated when someone read a text with significantly different inflection, emotion, etc., than I would. “Wow, theyre no good at reading this,” I would say. That changed in college when I found I didnt “like” K.B.|PrivatePersons reading, and the CognitiveDissonance became extreme, because how could I dislike the reading of a woman I liked so much?\n\nThe result was this understanding: If your realization of the text is different than someone elses, that indicates you think about the text differently. And now understanding this, I think I see a text differently every time I hear someone else read it. Not like, massively so; but enough that its valuable to hear and to listen with an open mind.\n\nEven if this //isnt// true, I certainly find it a useful coping strategy!\n\nA vaguely related idea to AcceptanceVersusBelief, particularly when the potential for empathy and new forms of understanding in contrast to ones own comfortable viewpoint is considered.},{title:RealityInaccurate,created:20200512003558557,es:unlikely,modified:20210108201820412,tags:Reasoning Psychology FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:> This was the gist of the notice. It said, “The Guide is definitive. Reality is frequently inaccurate.”\n> ---//Restaurant at the End of the Universe//\n\nOur expectations often match poorly with reality. But, as is obvious to anyone looking at this quote, and as I have said before, “reality always wins.”\n\nOr does it? You have to wonder if sometimes reality actually can be wrong. For instance, consider a mathematical object like an infinitely repeating number. ConsensusPhysicalReality cant represent that object; does that mean the mathematical object doesnt exist, or is the approximation? Or if someone builds a model of a fictional place, how does reality fit in there?\n\nSee also TruthInFiction and FictionalFalsehoods.},{title:RealProgrammingIsAnElitistMyth,caption:‘Real’ Programming Is an Elitist Myth,created:20201206205412169,medium:article,modified:20210623023649878,rating:average,readstatus:read,tags:Source Code Public,type:text/vnd.tiddlywiki,url:https://www.wired.com/story/databases-coding-real-programming-myth/,year:2020,text:TheWired article which accidentally makes some good points despite being militantly anti-elitist to the point of (I think) absurdity.\n\nDiscusses how LowCode platforms such as MicrosoftAccess or the like can be useful for less “technical” users, and we ought to consider this liberating. This part is good. It also cuts quite deep into the CodeDataEquivalence, and what we might term the “mythology of coding,” that only “real coders” can make computers do stuff (q.v. for more). Users should not be left out of half of computing by being told that telling the computer what to do, putting together solutions to meet their own needs, is something “technical” they can‘t do.\n\n(Although it’s worth noting that I regularly tell people they can do “technical” things, and //they// are always the ones who say they can‘t. They might be right, but I don‘t think I as a professional coder am the one bringing a limiting mindset here, as the article claims!)\n\nIt also points out that for many, many applications of computers, all you really need is a good database with a custom interface. That’s basically TiddlyWiki. It’s the SpreadSheet. It’s, to some extent, OutSystems. It’s even not too far off from the UnixPhilosophy, or an extension of it like DreamDir: throw together a text file containing data and some scripts to process it, and there you go.\n\n------\n\nThen there was this absurdity, and a bunch of additional inflammatory claims like it:\n\n> Go ahead and tweet “HTML is real programming,” and watch programmers show up in your mentions to go, “As if.” Except when you write a web page in HTML, you are creating a data model that will be interpreted by the browser. This is what programming is.\n\nWhile this is an element of the CodeDataEquivalence…the reason people on Twitter are mad is //a quibble over the definition of the word “programming,\// not some eternal truth about what programming is that professional programmers refuse to recognize because it makes them look bad. The reason that “real coders” (at least the ones I know) have an aversion to LowCode is not that low-code tools are bad, or that they’re going to put professional programmers out of a job (because there will always be some system designs that are too complicated for an inexperienced person to tackle, whatever the tools are), it’s that people who don‘t know anything about the tools involved think some guy in Accounting can create an Access database that scales out to 5,000 users, and then get puzzled when IT complains about having to maintain it. Or they try to make //me// use a low-code tool with a DuploInterface when I could be more productive and build better software in a “high-code” language (scare-quoted, because “code” shouldn‘t be a distinction anyway as discussed).\n\n//Parts of this tiddler are borrowed from a post I made to the TiddlyWiki forums here|https://groups.google.com/g/tiddlywiki/c/cA3x3fICfLg.//},{title:Reasoning,created:20200326002836966,creator:soren,modified:20210828141436358,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:Tag for things to do with rational thinking. Cf. Logic.},{title:RebootSalvation,created:20200224194054323,creator:soren,description:Reboot salvation occurs when a problem you have no idea how to fix is solved by rebooting the computer or other device.,es:confident,modified:20241110045409519,modifier:soren,tags:Software SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:When youre having a difficult computer problem you havent the first idea about how to begin solving, and then you restart the computer or a subsystem thereof and it effortlessly goes away, you have experienced reboot salvation. The poor mans troubleshooting method.\n\n!! References\n\n> If at first you dont succeed, reboot.\n\n---S.F.|PrivatePerson},{title:RecentChangeInSexualMorality,created:20240317231216972,creator:soren,description:Certain kinds of sex have, in my opinion, recently become //more moral// due to new technology; what else is like this?,es:likely,modified:20251009032316127,modifier:soren,tags:Idea Public Sexuality Ethics Technology,type:text/vnd.tiddlywiki,text:Despite usually finding philosophical ideas from the distant past just as compelling as modern ones, if not more so, I find it hard to take seriously any source about sexual morality that was written before the 1970s or so, when highly effective|https://controlaltbackspace.org/contraception reversible contraception became widely available.\n\nThis is because I think its not that contraception has made it possible for people to do immoral things, as is the very-socially-conservative talking point. Rather, it has actually //changed// whats moral, because you no longer (for the most part) have to worry about accidentally making babies, which was a really good reason for being a lot more careful about who you had sex with in the past.\u003C\u003Cfnote \Its true that there can still be accidents, and its good to consider this in your calculus. But theres a cost-benefit situation here. If youre going to sleep with someone regularly for a year and your odds of avoiding pregnancy are 1,000 to 1 -- and its possible to do better if you want better -- well, there are a lot of much more likely events you should be way more worried about, and the benefits here, even IMO the moral benefits, are significant. (Namely, you create a deep and meaningful connection between two people. I think thats worth quite a lot.)\>>\n\nIn this sense, contraception is, I think, a deeply undervalued social technology. When I hear people talking about //Griswold// being revisited, I have to say I have a pretty hard time believing that any American government in the foreseeable future would actually end up in a situation where they were blocking ordinary people from, say, buying condoms. Its all very well to talk about how the way weve separated sex from reproduction is damaging family values and so on, but I think we just take the fact that weve done that for granted so much nowadays that people dont quite realize what it would look like to turn the clock back. It feels like the people voting for this would change their minds pretty quickly when they suddenly experienced what the result would mean for them.\u003C\u003Cfnote \Stranger things have happened, though. As MrScottAlexander once noted, “At one point we tried a very simple best-person-picking procedure that really should have worked and ended up choosing Donald Trump as the best person.”\>> (Similarly, a very substantial number of people who are steadfastly anti-abortion promptly have an abortion when they find themselves in one of the situations that suggest one.)\n\nThere are many types of relationships that people experience as meaningful that would be impossible, or at least sufficiently unwise that they would feel different subjectively, without contraception. In this way, contraception feels like an active moral good, maybe something we are obligated to pursue the improvement of. (If I can make a suggestion to the IRB gods -- maybe a highly effective, invisible method biological men can use without relying on anyone else? Pretty please?)\n\nI cannot immediately think of any other seemingly fundamental issues which could have their morality altered in such a way, but I would be surprised if there were none.\n\nSee also notes on Contraception.},{title:RecentIdeas,created:20220909162241485,creator:soren,modified:20231023141953903,modifier:soren,tags:Tool Public,type:text/vnd.tiddlywiki,text:See 100 published Ideas most recently: \n\u003C$radio tiddler\$:/temp/RecentListSortField\ value\created\> Created\u003C/$radio> \n\u003C$radio tiddler\$:/temp/RecentListSortField\ value\modified\> Updated\u003C/$radio>\n\n\u003C$list filter\{$:/temp/RecentListSortField}!isblank\ variable_ emptyMessage\//Please select a sort field above.//\>\n\t\u003Ctable class\recent-tab\>\n\t\t\u003Ctr>\n\t\t\t\u003Cth>Created\u003C/th>\n\t\t\t\u003Cth>Idea\u003C/th>\n\t\t\t\u003Cth>Tags\u003C/th>\n\t\t\u003C/tr>\n\t\t\u003C$list filter\tagIdeatagPublic!search:title/!tagSoftware!sort{$:/temp/RecentListSortField}limit100\>\n\t\t\u003Ctr>\n\t\t\t\u003Ctd>\u003C$view format\date\ template\YYYY/0MM/0DD\ field{{$:/temp/RecentListSortField}}/>\u003C/td>\n\t\t\t\u003Ctd>\u003C$link />\u003C$list filter\{!!description}!isblank\ variable_>:\u003C/$list> {{!!description}}\u003C/td>\n\t\t\t\u003Ctd>\u003C$list filter\allcurrenttagssort\>\u003C$macrocall $name\tag-pill\ tag\u003C\u003CcurrentTiddler>>/>\u003C/$list>\u003C/td>\n\t\t\u003C/tr>\n\t\t\u003C/$list>\n\t\u003C/table>\n\u003C/$list>\n\n\u003Cstyle>\ntable.recent-tab {\n\tfont-size: small;\n}\n\u003C/style>},{title:RecentlyRead,created:20210122015959504,creator:soren,modified:20251011164919979,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:\\define read-this-year() getcompletedsplitfirst4joinmatch\u003Cnow YYYY>\n\u003C!-- TODO: change above to \u003Cnow YYYY> -- bug preventing it from working rn -->\n\n\n//August 2025: Very out of date -- planning to start tracking again though!// \n\nThis tiddler lists every book Ive read since I started tracking all my completed books in early 2021, in reverse chronological order by the date I finished them. Books often cluster together because I tend to start a bunch of books and set them aside halfway through, then get irritated by how many books Im in the middle of and finish them all at once without starting any more.\n\nUse the zoom button to expand a book in the list for a summary. While I dont necessarily add related ideas to my Zettelkasten for every book I read, or right away, you will also likely find some ideas related to many of the books below by checking the //Ideas// tab in their ReferenceExplorer.\n\nThe colored annotation in square brackets is a media rating|MediaRating; see that tiddler for the scheme.\n\nYou might also be interested in my lifetime reading list|LifetimeReading. Books from this list are indicated with `(LT)` below.\n\nSee also the Blogroll.\n\nRecorded books read: \u003C$count filter\tagSourcemediumbookregexp:readstatus(?:re)?readhascompleted!sortcompleted\/>\u003Cbr>\nRecorded books read this year: \u003C$count filter\tagSourcemediumbookregexp:readstatus(?:re)?readhascompletedfilter\u003Cread-this-year>\/>\n\n\u003Cdl>\n\u003C$list filter\tagSourcemediumbookregexp:readstatus(?:re)?readhascompleted!sortcompleted\>\n\u003Cdt>\u003C$view field\completed\ format\date\ template\DDth MMM YYYY\/>\u003C/dt>\n\u003Cdd>\u003C$macrocall $name\stretch-template\ tiddler\u003C\u003CcurrentTiddler>> smallTemplate\$:/tzk/Templates/Topical/ReadingList/SmallTemplate\ largeTemplate\$:/tzk/Templates/Topical/ReadingList/LargeTemplate\/>\u003C/dd>\n\u003C/$list>\n\u003C/dl>},{title:ReceptionOfPpBullshit2015,caption:On the reception and detection of pseudo-profound bullshit,created:20201027013450419,medium:article,modified:20201120180608703,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.sas.upenn.edu/~baron/journal/15/15923a/jdm15923a.pdf,year:2015,text:Study that defines PseudoProfoundBullshit and investigates the factors that may lead one to be more susceptible to considering such bullshit deep.\n\nQuote:\n\n> Whereas philosophers have been primarily concerned with the goals and intentions of the //bullshitter//, we are interested in the factors that predispose one to become or to resist becoming a //bullshittee//.\n\nThe various studies found that:\n\n> Those more receptive to bullshit are less reflective, lower in cognitive ability (i.e., verbal and fluid intelligence, numeracy), are more prone to ontological confusions and conspiratorial ideation, are more likely to hold religious and paranormal beliefs, and are more likely to endorse complementary and alternative medicine.\n\nThe study received a well-deserved IgNobelPrize. It gets bonus points from me for inventing the BSR (Bullshit Receptivity) Scale.},{title:RecklessOptimism,created:20200330021409205,es:confident,modified:20210509010324336,tags:Psychology Public Idea,type:text/vnd.tiddlywiki,text:Reckless optimism occurs when one does not do any kind of ContingencyPlanning and simply assumes everything will work out all right. A common source of RoguelikeRegret. \n\nReckless optimism is not to be confused with RelentlessOptimism. At first glance, they appear similar, but they have different mindsets behind them and different effects. Relentless optimism involves realism and making the best of the realistic situation that exists, striving not to get upset and continue moving forward as best one can. Reckless optimism is characterized by pushing reality “out of sight, out of mind.” It is a simpler, less mature, and much less productive type of optimism.},{title:RecommendationsVsGuidelines2018,author:Scott Alexander,caption:Recommendations vs. Guidelines,completed:20210225000000000,created:20210307163331011,medium:article,modified:20210307212701134,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://slatestarcodex.com/2018/04/12/recommendations-vs-guidelines/,year:2018,text:Article by MrScottAlexander on the benefits and rarity of StandardizedGuidelines for fields other than medicine; q.v.},{title:RecordsProject,color:#6c6cff,created:20200121122752108,creator:soren,es:confident,icon:$:/core/images/list-bullet,modified:20230427031910619,modifier:soren,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:The Records Project (often abbreviated TRP) is a general umbrella term for ChronoBook, RandomThoughts, my ZettelKasten, and occasional other musings about my life intended for my personal consumption.\n\nThe motto of TRP is //per litteras ad astra//, “through writing to the stars”, a pun on the common motto //per aspera ad astra//. I have an embosser that impresses this motto, my name, and “The Records Project” on any related paper material.\n\nOther elements of TRP are tagged with this tiddler.\n\nSee also PersonalKnowledgeManagement.},{title:RecoveringEngineer2021,author:Chuck Marohn,caption:Confessions of a Recovering Engineer: Transportation for a Strong Town,completed:202109231200,created:20210923203725008,creator:soren,medium:book,modified:20211105154153453,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2021},{title:RecursiveDejaVu,created:20201202234215422,description:When I have déjà vu, it is recursive at least half the time.,es:personal,modified:20201203003647070,tags:MyUnusualMentalExperience Public Idea,type:text/vnd.tiddlywiki,text:Something totally goofy I would never have thought of except that someone brought it up in the SSC thread: when I have déjà vu, it is recursive at least half the time. That is, not only do I feel like I have experienced this before, I feel like I have //had déjà vu in a situation like this one// before. (As MrYogiBerra would say...its déjà vu all over again.)},{title:red-square.png,type:image/png,created:20240617030225255,creator:soren,modified:20240618011422414,modifier:soren,tags:Image Public,_canonical_uri:./extimage/red-square.png},{title:RedCow,created:20230423122634081,creator:soren,gis-lat:44.95476631711799,gis-long:-93.29753085364065,gis-zoom:16,modified:20230423122657779,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ReenterByTheBackGate,created:20250610002424487,creator:soren,description:Pattern: begin unconsciously in a state of grace, lose it and become bad, eventually through effort reach the original state but consciously, more fully.,es:confident,modified:20251010030501244,modifier:soren,tags:Idea PhilosophyOfLife Psychology LifeDirection Public,type:text/vnd.tiddlywiki,text:A curious pattern often found in unexpected places relating to moral or personal growth. In the first stage, you are very high on some dimension (state of innocence/grace). Then the next stage in development plunges you back to very low on that dimension. Then, at the end of a long journey, you end up back to very high on that dimension -- but somehow in a more mature or complete way, such that your original state seems childish and empty. The path to maturity goes through darkness.\n\nPhilip Pullmans HisDarkMaterials mythology, discussed in reference two in FallOfMan, provides the name for this tiddler.\n\nSee also greenness and whiteness|https://ap.sorenbjornstad.com/#post-65.\n\nThis bears some resemblance to the separation-initiation-return|SeparationInitiationReturn myth pattern.},{title:ReFactoring,created:20200324021558734,creator:soren,es:confident,modified:20211116034631963,modifier:soren,tags:Productivity Code Public Idea,type:text/vnd.tiddlywiki,text:The process of (usually iteratively|IterativeProcess) making code better without changing its functionality. Better might mean:\n\n* easier to read\n* more maintainable\n* better documented\n* more DRY|DryPhilosophy\n* less TechnicalDebt\n\nMost peoples development processes cycle between periods of writing something that works without worrying too much about these nonfunctional requirements and periods of refactoring -- both in the short term (e.g., cleaning up before committing or pushing code) and in the long term (ProductBacklog items or in the case of a system where maintenance has been deferred for a long time even whole Sprints might be devoted to refactoring).\n\nRefactoring is usually considered apart from performance; its typically not strictly performance-neutral, but major changes are unlikely. If you happen to clean up something particularly inefficient, you might speed things up.\n\nDefinedInterfaces and UnitTesting make refactoring easier and safer; FunctionalProgramming is sometimes claimed to do so as well.\n\nJust as there is NoPrizeForDocumentation, there is unfortunately often no prize for refactoring, a major cause of mounting levels of TechnicalDebt. Refactoring is arguably //more// important than new features, because new features become more difficult to write (and urgent bugs more difficult to fix when they arise) the more refactoring is delayed -- just like ImprovementOfDailyWork is more important than doing daily work.\n\nCf. ReFuctoring.},{title:ReferenceExplorer,created:20200410133657263,creator:soren,modified:20250204200757016,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:At the bottom of every tiddler in the Zettelkasten is the Reference Explorer, which shows all links between tiddlers, separated into tabs based on the ZettelkastenCardType, and allows quickly navigating through them. Several auxiliary tabs (//Transcluded by//, //Link graph//, and //Footnotes//) are available as well.\n\nOnly the tabs that have at least one item on them for the current tiddler will be shown, and if the current tiddler has no links or relationships at all or is a system tiddler, the reference explorer will not appear.\n\nThe possible tabs are as follows:\n\n* Ideas|Idea\n* People (PAO tag)\n* Places|Place\n* Sources|Source (and Metasources|Metasource)\n* Sinks|Sink\n* Indexes|Index\n* Subtiddlers|Subtiddler -- tiddlers named for the current tiddler plus some additional characters, usually separated by `/`\n* Transcluded by -- a list of tiddlers that incorporate the current tiddler into their text\n* Link graph -- a graphical view of the outbound links from this tiddler, going several layers deep\n* Footnotes|Footnote -- display of all footnotes in the current tiddler (you can also hover over a footnote indicator to read it)\n* All -- all the types of links combined into one view\n\nIts possible to add new tabs or customize the existing ones by editing the tiddlers tagged with $:/tags/ReferenceExplorerTab.\n\nThe behavior of the explorer can be customized per-tiddler by setting the following fields:\n\n* `refexplorer-starttab` -- Instead of starting the Reference Explorer on the first tab that is shown, start it on the tab with this name (`$:/sib/refexplorer/` is prepended to this value to select a tiddler name).\n* `refexplorer-hide` -- if set to `yes`, dont show the Reference Explorer until the user clicks a button. Useful to avoid performance issues on tiddlers that have dozens, hundreds, or thousands of links or tagged tiddlers.\n\nThe Reference Explorer is homegrown for MosaicMuse. It used to use TiddlyTables, but once I settled on how it should work, I rewrote it with pure HTML tables to improve performance (they use much of the CSS from TiddlyTables, so theyre hard to tell apart!). Its system tiddlers can be found in `$:/sib/refexplorer`; you can borrow these for another wiki under the MIT license|CopyrightNotice if you so desire.\n\n\u003C$details summary\Flashcards\>\n\u003C\u003Crememberq \20210123160338153\\n\t\What variable must be set manually when trying to transclude the ReferenceExplorer within a nested tiddler (e.g., within a tab)?\\n\t\`storyTiddler`\>>\n\t\n\u003C\u003Crememberq \20210123160402884\\n\t\If the ReferenceExplorer shows the references for the wrong tiddler, what variable is most likely set incorrectly?\\n\t\`storyTiddler`\>>\n\u003C/$details>},{title:ReflexiveSystemDevelopment,created:20240317021618020,creator:soren,description:The act of creating and maintaining your own systems while also using those systems; potentially revolutionary.,es:likely,microlink:reflexive,modified:20240707133547164,modifier:soren,tags:Idea Code AgilePhilosophy Systems Public,type:text/vnd.tiddlywiki,text:Reflexive system development\u003C\u003Cfnote \//Reflexive// as in a reflexive pronoun, folding back into itself, not as in “done without thinking.”\>> occurs when someone creates a system for themselves, doing the creation in conjunction with a real context of use. If the scale makes this mode of development doable, I find its almost always the most effective way to create good systems.\n\nEffective system design requires insights drawn from serious contexts of use|https://notes.andymatuschak.org/Effective_system_design_requires_insights_drawn_from_serious_contexts_of_use (MrAndyMatuschak). Creating something that you are not using means you have no SkinInTheGame; your motivation must necessarily be secondary (e.g., making someone else happy or getting paid), rather than primary (actually creating something useful). And when you dont use the system yourself, your feedback loop is vastly longer and mediated by the imprecisions and challenges of language and social dynamics.\n\nLets use the language of software here for a moment, because I think this philosophy may be easiest to implement here, but this can apply to other kinds of systems, too! When you yourself are editing both the code and the data|CodeDataEquivalence, in an excellent LowCode environment or any environment where great attention is made to Polishing the development experience so code can be trivially changed when needed, the feedback loop drops to nearly zero. And something critical happens when the feedback loop drops below a certain time threshold, probably around thirty seconds or so. Now you no longer wistfully think “Boy, sure would be nice if this did X.” You just //open up the code and make it do X//, without even thinking twice. This is both efficient and empowering, and it changes your entire mindset: you are allowed to evolve the //system// and the //process// to match the natural changes in the problems youre facing on a day-to-day basis, along with actually doing the work. Working in such an environment instead of a more restrictive one can literally change your entire life. You get into flow|FlowState more often. You love your tools and are restored to the CraftsmanMindset that technocracy often takes away from you. You start seeing things you can improve everywhere, and your SuccessMomentum drives you to make more and more complex and transformative improvements.\n\nYou can only achieve this result if your system is small enough, so AvoidScale is a critical design principle. Its OK if your software is worse than some commercially available system: WorseIsBetter, and the synergy created by being able to make some software do exactly what you want and change it almost instantly over time to match changing requirements means that it can start out in a much worse state and still end up being much better for your needs.\n\nThis said, BespokeSoftware is a lot of work to create. For systems you rarely use, its probably not worth the additional work to make them flexible. (See also: “An engineer is someone who will spend three hours trying to figure out how to do a two-hour job in one hour.”)\n\n\n!! Tips for encouraging reflexivity\n\n* Ruthlessly eliminate TrivialInconveniences. For instance, changing your music or chord sheet is a form of development. I find if I dont always keep a pencil on the piano, I will be too lazy to stand up and get one so I can write in a change, and consequently forget new approaches Ive found, or keep making a mistake over and over again.\n* You need to grok the entire system to be able to frictionlessly edit it. If you have to sit down and spend some time learning about part of it, or refactoring part of it, to achieve this, its probably worth it even if you cant immediately see the benefit.},{title:ReFuctoring,created:20200324021613966,modified:20200324021701407,tags:Humor Code Public Idea,type:text/vnd.tiddlywiki,text:Humorous version of ReFactoring:\n\n> Refuctoring is the process of taking a well-designed piece of code and, through a series of small, reversible changes, making it completely unmaintainable by anybody except yourself.\n\nhttp://www.waterfall2006.com/gorman.html},{title:RefuteTheNegatives,created:20210608215426179,description:Instead of comparing positive and negative reviews, try arguing with the negative reviews yourself.,es:likely,modified:20210703161601090,tags:Business InternetTheory Reasoning Public Idea,type:text/vnd.tiddlywiki,text:A surprisingly useful way of using ratings and reviews found on the Internet or similar, originally formulated in the context of books|MediaRating.\n\nBasic formula: Ignore the positive reviews. Read a good sampling of negative reviews (perhaps 1--3s on a 1--5 scale). For each negative review, try to argue with the criticism. If you find that most of the criticisms sound stupid or are easily refuted, or just dont apply to you (e.g., “This book is hard to understand if youre an X” and youre not an X), you will probably enjoy the book.\n\nOne caveat: there needs to be a critical mass of reviews for this to work. If there are only two negative reviews, you cannot reasonably assume that all good criticisms will have been presented in them.\n\nI think this works because negative reviews contain much more information for the prospective book-selector than positive reviews. Positive reviews typically contain the same information you already would have had anyway: presumably if youre interested enough to be looking at the reviews page, you already have an idea of what the pros are. If the negatives had spread and you had listened seriously to them, you probably never would have made it to the evaluation stage anyway. Plus, positive reviews encourage ConfirmationBias and dont help you develop counterarguments prior to forming an opinion|OpinionsRequireCounterarguments. You do have to engage in the criticism step in order to use the negative reviews as an even-handed decision-making tool rather than a dissuader.\n\nI think many people do this instinctively to some degree when they read reviews (everyone knows the phenomenon of that guy who gives products a 1-star rating because the neighbors dog peed on the package before they got it and this is //totally// the sellers fault). But making it into a process, and recognizing the relative uselessness of positive reviews, can make it quite a bit more effective.\n\nCf. ReviewYourApp on online reviews and their uses, downfalls, and evolution.},{title:RegressionToTheMean,created:20200330024013738,creator:soren,es:confident,modified:20230424155631369,modifier:soren,tags:Psychology Math Idea Public,type:text/vnd.tiddlywiki,text:Statistical observation suggesting that in a typical, non-biased distribution, if a particularly good or particularly bad event happens, the next one will probably be more average. For instance, if you have a uniform, completely random distribution and you score 98%, theres only a 2% chance you score better than that the next time, which means youre likely going to “slide back” or regress towards the more typical side.\n\nRegression can be pretty discouraging when youre on the high side, so its valuable to keep in mind. On the other hand, its also valuable to keep in mind that youll probably be getting better if you have a really bad day. And its always important to keep in mind that effects that seem like trends might actually be nothing more than regression to the mean. This is an //extremely// common error in reasoning, and once you learn to see it you start spotting it everywhere.\n\nOf course, I say “bad” and “good” because thats the most typical application in everyday life -- but there need not be any value judgment attached to it. Sometimes numbers are just numbers, and the same principles apply because this is math. Yay for math.\n\nSee also ThisTooShallPass.},{title:RejectMostSuggestions,created:20200428193414254,creator:soren,description:Most incoming ideas and suggestions should be rejected without ceremony to prevent an accumulating backlog of mediocre ideas.,es:confident,modified:20231118001457862,modifier:soren,tags:PhilosophyOfLife Process Public Idea,type:text/vnd.tiddlywiki,text:According to SturgeonsLaw, 90% of suggestions are crap. Assuming that you prefer not to have a project or life that is full of crap (cf. EfficientLife), it naturally follows that you should reject most suggestions.\n\nYou might not have trouble rejecting suggestions you think are //bad//, at least when they dont come from people you care deeply about. But you probably do have trouble rejecting suggestions that are kind of OK. Because kind-of-OK suggestions seem like they probably have positive value, its tempting to accept them and put them on the back burner. The problem is that if you do this, youll be overwhelmed by kind-of-OK suggestions and unable to focus your attention on the actually good ones.\n\nSay yes to a few really important things (EightyTwentyPrinciple). Say no to everything else, ruthlessly, and leave it at that. This way, when you get a good suggestion, you can actually take it. (See also Hell yeah or no|https://sive.rs/hyn.)\n\nCf. UniversalSuggestionResponse for an effective diplomatic way to handle suggestions, particularly the ones you intend to reject.\n\n\n!! In specific domains\n\nDevOpsInTheRealWorld says most feature requests should be rejected. Accepting too many leads to the requests sitting on the ProductBacklog forever, and users getting false hope.},{title:RelationshipAnarchy,created:20231010023833323,creator:soren,description:Approach to relationships that avoids relying on established schemas, instead prioritizing discussing and exploring what they should include.,es:likely,microlink:ra,modified:20251213025524613,modifier:soren,tags:Idea Definition InterpersonalRelations Public,type:text/vnd.tiddlywiki,text:Somewhat vaguely defined form of NoLabelsPhilosophy which encourages creating various types of interpersonal, romantic, and sexual relationships in accordance with what one wants rather than usual social rules. Often associated with poly|Polyamory relationships, but doesnt have to be.\u003C\u003Cfnote \I think monogamous people should also talk about the rules with their partners early and often. “Monogamy” means subtly different things to different people, and you dont want to find that out after your partner thinks youve been cheating on them and you dont, or vice versa!\>>\n\nThis is, sort of, NoBinderPolice for relationships. (Except, unfortunately, there //are// relationship police, distributed throughout society. For the most part, you can tell them to go jump in a lake, but I wont deny there can be intolerance and unpleasant consequences|Castastrophe sometimes.)\n\nI think people often fail to develop their important relationships in directions which would be most fulfilling because they are either concerned about what other people will think if they are unconventional, or because they cant see the possibilities at all|SchemaBound because none of the available labels really fit well and they arent used to looking outside of them. Even if the most common labels often work for a particular person, some relationships naturally want to develop in a way that doesnt fit any box at all|Enyality, and fighting to restrict them is often unpleasant.\n\nPersonally, several of my best friends have been people I previously dated. Many of the rest have been women who everyone insisted|PersonalizedViabilityOfPlatonicFriendships I must have been interested in romantically because //surely// thats all a straight guy could be interested in? I spent six months in a casual romantic relationship with a woman|PrivatePerson 15 years older than me. Im glad that I dont normally feel like I have to follow someone elses rules, because I would end up having missed out on most of my most important relationships!\n\nAlso, keeping your options and your definitions open-ended encourages actually talking with the people youre in relationship with about what you want it to be like, which is a badly underutilized strategy for making relationships much better.\n\n\n!! Disadvantages\n\nIts often frustrating not to know exactly what to call a relationship. In particular, letting go of the apparent certainty supplied by labels is difficult for many people. The territory in between, off the map, is murky and scary. On the other hand, relationships are inherently nebulous|https://metarationality.com/nebulosity; even //on// the map there is no truth of the matter. Sometimes its more useful to admit the map is, to one degree or another, a fiction.\n\nMaking a relationship perfectly bespoke is probably not actually possible -- youll end up stealing from some other schema(s), and you wont have full control over how this happens because youll be claiming you arent (see also NoLabelsPhilosophy. Also, the existing labels have usually been honed by decades or more of societal evolution to work out well for many people;\u003C\u003Cfnote \Though itd be more accurate to say they work out well for society at large. That may or may not be whats good for you as an individual.\>> they are not random by any means. So theres a good argument for seriously considering existing labels as models, at the very least.\n\nNot borrowing an existing schema usually means you have to spend a substantial amount of time exploring what you and your partner want out of a relationship. I think the kind of people who are drawn to relationship anarchy generally dont see this as a significant negative because they tend to do this //anyway//, but it seems worth mentioning.\n\nBeing unable to effectively communicate what your relationship with someone is to others outside that relationship can be frustrating to both them and you, and sometimes make you feel deeply lonely.\n\nOverheard at a coffee shop, and about sums up my take:\n\n> I try to be a relationship anarchist, but like, labels are useful?\n\n\n!! Solutions\n\nOne way to harmonize the approaches is to explicitly pick the closest label, and then, in conversation with the other person, tweak those rules as needed for your situation. (Cf. ClearRulesVsExcessiveIndependence.) Another way, especially useful if exactly what the energy between you might become is unclear, is to lay out some of the possible labels together, then explore in between them. Eventually perhaps you will live into|RilkeLiveIntoTheAnswer one that you can adopt, while retaining the understanding that this particular relationship is of course somewhat unlike any other and may not meet all of the normal expectations on that label -- or perhaps not; theres no //need// to ever land solidly on a label unless it feels right.\n\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> //What are we?// I have no idea. //How are we?// We are so unbelievably good.\n> ---MrJesseCrossen, AnalogLove2023\n\n\u003C/$m2.x>},{title:RelationshipEscalator,created:20251010144114336,creator:soren,modified:20251010144121760,modifier:soren,tags:Idea Definition Romance Sociology Public,type:text/vnd.tiddlywiki},{title:RelationshipSuccessDivide,created:20200427014251826,creator:soren,description:People who are financially better off have more success in romantic relationships.,es:likely,modified:20220505033630173,modifier:soren,tags:Romance Sociology Public Idea,type:text/vnd.tiddlywiki,text:As in everything else in 2020s America, people who are better off have more success in their romantic relationships.\n\n(The divorce rate is actually in a sustained decline, but that masks the not-so-optimistic fact that thats because the people most likely to get divorced simply arent getting married. One of the most impressive and unpleasant statistics I have heard recently|NuclearFamilyWasAMistake202003 is that in the age range of 18-55, only 26% of Americans statistically labeled poor are married today, a shockingly low number.)\n\nWhy is this? Well, ultimately, the best explanation seems to be that staying married is //hard//, and people who are advantaged have resources they can use to deal with it and those in poverty dont:\n\n* People with money can afford to pay to deal with things that hurt their relationship (e.g., outsourcing cleaning or help with their kids). (Source: NuclearFamilyWasAMistake202003)\n* People with effective family structures have much of the same.\n* People who are worse off have more stress in general to deal with in their lives. That makes them less able to pay attention to and help their partners.\n\nAccording to a study quoted in Logan Urys //How to Not Die Alone// (with no endnote, grr), excessively low-income couples felt about as unhappy as divorced couples did in the month before they broke up.\n\nRelationship skills may be a part of this as well. Another (badly) impressive statistic from Ury: among couples who come from different religions and want to have kids together, only about half of them discuss how their kids will be brought up religiously before getting married. With that kind of blasé attitude to making sure youre long-term compatible in the first place, its not too surprising that people get an uncomfortable distance in before figuring out that they cant get along with each other. I dont have any data on this, but it doesnt seem outlandish to suppose that people with more education are more likely to figure this out (in the absence of good role models and topical education, which we could desperately use more of!). For many complex reasons, lower-income people also have much higher rates of unplanned pregnancy, which can lead to people marrying people they really arent compatible with and know they arent compatible with.},{title:RelativeAdvice,created:20220426024658814,creator:soren,description:Some kinds of advice can be exactly what one person needs and exactly wrong for another; its not obvious how to get the right advice to the right person.,es:confident,microlink:ra,modified:20250228183118719,modifier:soren,tags:Idea Romance Psychology LifeDirection Public Favorites,type:text/vnd.tiddlywiki,text:For many types of advice, the correct advice is not absolute: its relative to the current situation of the person its given to. This makes giving any advice on the topic to a general audience dangerous, because you dont know what advice needs your reader/listener/viewer will have; indeed, people often self-select into the exact opposite group they need to be in without realizing it.\n\nThis is perhaps best shown by example. I was at the bookstore with M.|PrivatePerson the other day, and there was a book on the shelf titled something to the effect of “100 Questions to Ask Before You Say Yes” (i.e., get married). She commented, “If you ask that many questions, youll never say yes!”\n\nSuppose theres a 1--10 scale from impulsive and thoughtless to cautious and overthinking. The healthiest place to be|ModerationAndBalance is probably a 5 or a 6: theres a balance to be had between being too careful and never doing anything|TryItAndSee and being too willing and unreflective. Id say M.|PrivatePerson is probably a 9. So this book is terrible advice for her -- shell improve by leaning towards the moderate part of the scale, but if she took the advice shed be going off the scale! Thus her reaction, that she couldnt possibly try to align that closely with her future husband.\n\nThe advice that M.|PrivatePerson might actually need (if she hadnt been married for thirty years) is probably something along the lines of “make sure you can productively disagree with your prospective husband and you have any total deal-breakers out of the way, and then jump in if youre feeling good about it, dont think too hard.” She would still end up thinking harder than that, but hopefully corrected a little bit towards the “go for it” side. But someone who scored a 1 might take M.|PrivatePersons advice and end up in an abusive relationship unreflectively for the next ten years. Thats the kind of person who needs the book.\n\nAs alluded to earlier, the unfortunate thing about relative advice is that the people who need a particular angle of advice are often the least likely to get it. Someone who doesnt think very hard about marriage is not likely to seek out and purchase this self-help book, nor even think they need it. Someone whos incredibly concerned to the point of not trusting themselves will easily find it, and probably buy it and read it. In cases like this, the people who dont need the advice could easily be 80% of its consumers; or to put it another way, the advice could be actively harming most of its consumers!\u003C\u003Cfnote \To be fair, a book like this could still be helpful even to the over-cautious in pointing out specific things one should check that one might not have thought of. But its general attitude is likely dangerous.\>>\n\nI think this might be one place where professional therapists are considerably better than good friends; because they see a wide variety of clients, they have much more ability to ascertain what sort of advice a particular person needs and adjust it appropriately. Most laypeople I know find some idea that works great for them and then recommend it to //everyone//, with at most a “YMMV bro” added in disclaimer.\u003C\u003Cfnote \On the other hand, people tend to be good friends with people who are disproportionately like them (not to mention that you //become// more like your friends if you spend enough time with them!), and perhaps have similar failure modes, so maybe this still leads to advice that lands well more often than youd expect.\>>\n\nSuggestion for authors: People giving general advice might do well to consider whether advice is relative in their subject matter, and if so, suggest ways the reader might be able to tell if they in fact need this advice or they should seek something else out instead.\n\nStandardizedGuidelines can be an effective way to cope with situations where advice is relative; you can ask your reader a few questions to figure out where on the scale they stand, or what their worst pathology is, and then break the article into different sections for each group or add appropriate disclaimers to each piece of advice for each group. Some self-help books take this tactic, although I have rarely seen it done particularly well.\n\nSuggestion for readers: When dealing with topics where moderation is desirable (as in the example above), when you find advice that strikes you as especially attractive, or especially unattractive, think seriously about how your own current biases and state of mind might be affecting that. In particular, if you see conflicting advice out there, you should probably give more weight to the advice that seems //less// attractive to you!\n\nIn addition, its helpful to consider who the author is. Who are they giving advice to? Or, more usefully, who do they //think// theyre giving advice to? (This can be different because they misunderstand you, because they have skewed life experience, or many other reasons.) For instance, someone who has had a long history of abusive relationships and is now giving you relationship advice may be giving advice thats useful to people in similar situations, but not to you, if you are not in such a situation.\n\nOntology of relative advice: In a technical sense, this probably isnt a real thing; theres presumably an “absolute advice” equivalent of every piece of relative advice, which suggests that you should exactly aim for the 5--6 on the scale. But such advice probably isnt effective in most circumstances. In order to get people to understand new ideas and change themselves and the way theyre acting, one usually needs to overstate things, provide Metaphors and exercises, and so on, and these almost certainly need to be tailored for the direction the receiver is coming from to be useful.\n\n!! Notes\n\nIm compiling a list of spectra which one may benefit from understanding where one lies to select the correct relative advice, in the tag RelativeAdviceSpectrum.\n\n!! References\n\n\u003C$m2.x number\1\>\n\n> “Wise men dont need advice. Fools wont take it.”\n> ---Benjamin Franklin\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\nSlateStarCodex: Should You Reverse Any Advice You Hear?|https://slatestarcodex.com/2014/03/24/should-you-reverse-any-advice-you-hear/ (You might want to reverse advice you hear because of the self-selection effect; youre more likely to encounter the opposite advice that you need, especially if you were seeking out advice on a topic.)\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\nMrDerekSivers: Singing the counter-melody|https://sive.rs/counter\n\u003C/$m2.x>},{title:RelativeAdviceSpectrum,created:20240506015410138,creator:soren,modified:20251011164747694,modifier:soren,tags:LifeDirection Psychology Reasoning Public Index,type:text/vnd.tiddlywiki,text:Axes that affect what kinds of RelativeAdvice a person needs to push them towards equilibrium|ModerationAndBalance and the correct life choices. Understanding where you lie on them seems important.\n\n\u003C\u003Cstretch-template-links\n\tfilter:\tagRelativeAdviceSpectrum\\n\tsmallTemplate:\$:/tzk/Templates/Topical/CaptionDescriptionStretch\\n\tlargeTemplate:\$:/tzk/Templates/General/IdentityTemplate\\n\tsmallMode:inline\n\tlargeMode:block\n\temptyMessage:\No spectra of relative advice in this edition.\\n>>\n},{title:RelativeClauseVerbAgreement,created:20200529224817301,example:Heres one of those grammar rules that {//infuriate//} people.,modified:20200926160404297,tags:EnglishGrammarTrick Public Idea,type:text/vnd.tiddlywiki,text:The verb in a relative clause must agree with the antecedent of the relative pronoun setting it off...not the subject of the clause being modified. This //sounds wrong// (actually, to me, both of them sound a touch weird, but thats enough to make it tough to pick the right one!).\n\n> {{!!example}}\n\nSince the antecedent of //that// is not //one// but //rules//, the above sentence is correct.\n\nThis typically comes up with “one of” or some similar phrase selecting from a larger group, as above.\n\nSource: DreyersEnglish2019 pp. 85-86.\n\n\u003C\u003Cremembercz \20200529225520554\\n\t\The verb in a relative clause agrees with the {antecedent of the clause}.\>>\n\n\u003C\u003Cremembercz \20200529225116274\\n\t\\\Insert the correct form of “infuriate”: “{{RelativeClauseVerbAgreement!!example}}”.\\\>>},{title:RelentlessOptimism,created:20200326024923817,creator:soren,es:likely,modified:20220611215229431,modifier:soren,reviewed:20231016,tags:UnicornProject Psychology PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:In UnicornProject, MsMaxineChambers is described multiple times as being “relentlessly optimistic.” In my definition, the relentlessly optimistic person recognizes what hes up against and that being optimistic may border on the absurd, but chooses to be optimistic anyway. (Cf. SubversiveBeautifulSavior.)\n\nRelentless optimism is not RecklessOptimism. In the former, you take account of the information you get, so you plan ahead in case things go terribly wrong and consider whether its time to cut your losses and give up; you just dont allow doing this to change your emotions and overall determination. In the latter, you assume that everything will always go right. You might still feel good, but unless you get particularly lucky at what youve admitted is a difficult task, your outcomes will be worse.\n\nRelentless optimism is kind of another way of saying perseverant (?), but also says a lot more and is a great deal more fun. Theres really a lot of grit involved in just deciding to maintain the attitude, not just in moving forward! It also connotes that being optimistic is serious work.\n\nRelentless optimism depends on thinking you can do things|PeopleDontThinkTheyCanDoThings.},{title:Religion,created:20200509222243266,creator:soren,modified:20210828141448403,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki},{title:RemainsOfTheDay1989,author:Ishiguro,bibliography:LifetimeReading,caption:Remains of the Day,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035885,priority:2,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1989},{title:RememberEverythingYoullEverLearn,caption:Want to Remember Everything Youll Ever Learn? Surrender to This Algorithm,created:20200326021947754,medium:article,modified:20200808144354239,tags:Source Public,type:text/vnd.tiddlywiki,text:Article about MrPiotrWozniak and the foundations of SpacedRepetition, as well as the tradeoffs involved in working on your memory to the extent required for really good retention.\n\nhttps://www.wired.com/2008/04/ff-wozniak/},{title:RemembranceOfThingsPast1927,author:Proust,bibliography:LifetimeReading,caption:Remembrance of Things Past,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035899,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1927,text:Length: !!!},{title:RemNote,created:20210117193250058,creator:soren,es:likely,modified:20240402014415996,modifier:soren,tags:Product Memory PersonalDocumentation Learning Public Software Idea,type:text/vnd.tiddlywiki,text:Product at the intersection of Anki, SpacedRepetition, and Zettelkästen|ZettelKasten. Has a sort of RoamResearch or Dynalist-like base outline model, and you can straightforwardly turn any bullet point (called a //Rem//) into a spaced-repetition flashcard. A useful way of linkifying and improving the knowledge modeling of a traditional SR-flashcards tool so that ideas are related to each other (NotesMustLink).\n\nIve worked here as a support/documentation/education manager and engineer since January 2022.\n\n!! Spaced repetition and RemNote\n\nRemNote offers SpacedRepetitionPrimitives, which are mind-expanding and enormously useful. I think their significance is largely underappreciated in the tools for thought|ToolForThought community at the moment, but suspect that in ten years, provided they dont get buried somehow, they may be seen as one of the key innovations of the early 2020s ~TfT renaissance.\n\nA concern with the RemNote format, from a SpacedRepetition perspective, is that the concept-descriptor framework and the framing of flashcards as notes can, I think, make it easier to produce imprecise cards without recognizing thats what youre doing. A certain compromise is always going to be found in using one set of notes in two ways (as notes and as flashcards), and until youre deeply familiar with both spaced repetition and the medium (and it really is a medium of its own, in my experience), youre much more likely to produce bad flashcards than bad notes, simply because everyone is familiar with what notes look like, and the interface in which you write note-cards (Rem) plainly gives you all of the notes affordances and few of the flashcards ones. This is not to say it cant be done, but again from an SR perspective this is probably its greatest weakness at the moment, and it will be an interesting design challenge to see if we can improve this.\n\nRemNote also has very limited advanced flashcards features, such as templates, ability to view statistics, and so on. However, this really isnt a big deal; as Ive repeatedly mentioned on Control-Alt-Backspace, you can get a very long way with just question-answer cards, flashcards, and default scheduling settings. Its way, way better to be good at writing cards and not know any of this stuff than to be a whiz at all the complex features of your SRS and bad -- even mediocre -- at writing cards. In some ways this could even be considered an advantage, since it reduces the general tendency to overoptimize; Ive come to wonder whether Anki should be taking steps to de-promote the scheduling settings and make them harder to find, because users have a tendency to vastly overestimate their importance and chase tiny 1% gains there, sometimes literally before they have written or reviewed a single flashcard.\n\n\n!! Other notes on RemNote\n\nPositives, negatives, and neutral facts/opinions randomly intermixed:\n\n* RemNote is still a little glitchy in places. Were working hard on this.\n* If you just want flashcards, Anki is probably a better choice, although this is beginning to change. If you want a CompleteIntegration with respect to learning things, or you find the process of adding disconnected flashcards in a little box difficult,\u003C\u003Cfnote \Actually, I never realized how unnecessarily difficult it was to add disconnected flashcards in a little box until I suddenly didnt have to do it. Its way easier to deconstruct some content into flashcards when you can see all the cards youre adding at the same time! So I guess Im saying maybe you should consider trying it anyway if youre serious about this stuff.\>> RemNote is your jam.\n* RemNote is fundamentally outline-based. This makes it somewhat hard to use for thoughtful and open-ended writing, and it might make it harder to take playful notes|PlayfulKnowledgeManagement (I havent decided whether thats true yet).\n* RemNote is rather hierarchical for my taste, one of the reasons that I dont feel its in a good place to run the software for a true Zettelkasten like this one yet. (Even without such minor gripes, I dont have any plans to replace this even as RemNote grows. Ive built this wiki from the ground up to do //exactly// what I want it to, so its hard to imagine anyone elses software is ever going to do a better job.\u003C\u003Cfnote \Thats how writing your own custom software works: its such a massive investment that its hardly ever worth it, but when it is worth it and you do a good job, its astoundingly good and you cant ever imagine any other option.\>> But RemNote could become a fantastic choice for someone else whos just getting started or isnt as committed to the project as I am.)\n\nLong before I started working at RemNote, a TheControlAltBackspace reader asked me what I thought, and I wrote up some FirstImpressionsOfRemNote.},{title:remnote-greeks.png,type:image/png,created:20241226182656068,creator:soren,modified:20241226182703874,modifier:soren,tags:Image Public,_canonical_uri:./extimage/remnote-greeks.png},{title:remnote-people-layout.png,type:image/png,created:20241226184517274,creator:soren,modified:20241226185317088,modifier:soren,tags:Image Public,_canonical_uri:./extimage/remnote-people-layout.png},{title:RemoteDevopsCulture20200520,at:202005201115,caption:Building a DevOps Culture in a Remote World,created:20200518213644470,medium:video,modified:20210522015801941,presenter:MsEmilyFreeman,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/c4f9ab59-017e-4dbd-b4df-7e8996095046,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nMsEmilyFreeman is a cloud architect at M.|PrivatePerson and the author of //~DevOps for Dummies//.\n\n* Havent we been here before, with some new development methodology or ProgrammingParadigm that will save the world?\n** List of antipatterns weve dealt with, including my favorite, \Macroservices\\n** But DevOps is different because its about team members (and not just devs).\n** Work environment can make you happy or miserable.\n** Somehow weve already been doing DevOps for ten years! Where did the time go...\n\n* When Emily asks people whats going wrong with their DevOps implementation, its almost never about the tools!\n** A tools-forward approach leads to ”automating and obfuscating”, making it look like youre doing DevOps while missing the point and getting few if any of the benefits.\n** For instance, doing ContinuousDeployment without automated tests is just a great way to end up with bad code in production.\n\n{{FreemanDevopsPrinciples}}\n\nSteps for building a better culture:\n\n* Assess\n** Survey\n** Observe peoples interpersonal communication\n** How does leadership behave?\n\n* Model\n** DevOps needs to be a collaborative effort\n** Understand that resistance comes from past experience\n*** See ManagementBlockingWithoutMalice.\n*** Emily herself was fired and became very risk-averse for a long time.\n** Offer concrete suggestions for fixing things! (See R.R.|PrivatePersons philosophy.)\n** Encourage small experiments (FlaneurMethod).\n\n* Incentivize\n** Offer intrinsic motivation rather than extrinsic\n** Make evaluations helpful and not emotionally difficult\n** TenPercentTime very helpful during pandemic...help to prevent burnout\n\nQ&A:\n\n* Opinion on DevSecOps?\n** “Were seeing a trend of people selling a product shoving some kind of word into DevOps”\n** Of course security should be involved; that should go without saying anyway.\n** If you have to put the word in to get someone to listen to you, go for it!\n\n* Is now a good time to work on DevOps transformations, with the pandemic and all?\n** If you feel like youre ready, youre late.|IfYoureReadyYoureLate\n** But its still worth treading carefully at a fragile/weird time.\n** Getting started|JustGetStarted on the first problem is not a big deal though.\n** Use data to demonstrate improvement and build momentum.\n\n* Dealing with multiple work streams\n** Each group, and their processes, will need to be slightly different -- be flexible. (Cf. ThinkLocallyActGlobally.)\n\n* How do we deal with people who arent on board with the transformation|DigitalTransformation?\n** “The curmudgeons.”\n** Probably havent touched on the ElementOfPersuasion that works for them\n** 70-80% of people on board will usually make everyone else come along, so dont work too hard on the curmudgeons unless theyre all over the place.\n\n* Most painful experience managing DevOps?\n** Not managing, but...\n** Every time she needed logs to debug a problem, had to go talk to the ops person. Would not give her access.\n** Went into a closet and “angry-wrote” her first DevOps talk.\n\n!! Resources\n\nSeveral MicrosoftLearn courses on DevOps and Azure as it relates are available.},{title:RemoteWorkVersusOutsourcing,created:20200428183509263,creator:soren,es:possible,modified:20211229033437816,modifier:soren,tags:Employment ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:DevOpsInTheRealWorld points out that while the ScrumMethodology and DevOps ideal is co-located teams, its entirely possible to manage such a team remotely. //Outsourcing//, or subcontracting, on the other hand, is a different beast entirely, one which is difficult to reconcile because the throw-it-over-the-wall|WallOfConfusion mentality is almost the point: you dont have to worry about that piece once you outsource it.\n\nThis would seem to suggest that outsourcing is appropriate only for those things identified as not important competencies in a WardleyMapping exercise or the like, and once you choose to throw them, your team should no longer be involved in them.},{title:ReplaceabilityOfHumanTeachers,created:20210627032158633,description:Many claim that personalized, electronic courses will obsolete human teachers, yet teaching is a complicated and human problem, and in my experience the medium is persistently much worse than I would expect.,es:likely,modified:20210714031044515,tags:Learning Futurism Public Idea,type:text/vnd.tiddlywiki,text:The authors of OnlyHumansNeedApply2016 are repeatedly very down on teaching, considering it extremely automatable, which I find kind of odd; I think we have completely different philosophies of learning. They seem to believe that teaching consists merely of retransmitting defined information, while I believe it is a complex people skill that also requires subject-matter expertise. (More specifically, its not just any subject-matter expertise, but a form of it which is conscious of what parts are difficult, why, and how the pieces fit together and can be scaffolded into a novices brain; most experts in fact lack most of this knowledge and struggle to obtain it despite being able to use the information perfectly.)\n\nThey claim that personalized electronic teaching tools work well, but this is not what Ive either heard or experienced. Im sure they do at least a decent job at cramming information into peoples heads, but when Ive used such tools in the past, they have invariably been extremely boring, taken relatively little account of individual preferences, been poorly written, not conveyed a love of the subject or done any DisciplineCrosspollination, and had a limited ability to adjust based on what students were interested in and already knew. (Some of these outcomes likely fall into the MetricBlackHole, making the studies look inaccurately rosy.) Sure, you can write the course to pre-test and assess how people are doing at various points, but it will always be a crude instrument until the computer is actually able to //understand// what the student is thinking, and even then a human will probably do a better job at intuitively understanding the likely sticking points for other humans. Also, in practice most of these courses that Ive seen dont do even this much well, if they do any of it at all.\n\n“Poorly written” may seem like a stupid criticism of electronic courses because “poorly written” surely cant be an inherent weakness of the medium -- but then if it //isnt// an inherent weakness of the medium, why are so few of them good after weve been doing this for decades? The 50th percentile of electronic teaching tools, in my experience, is vastly worse than the 50th percentile of human teachers, which seems to suggest that it is much harder to do it right -- especially considering how easy it is in practice to get a teaching license and how many people start teaching without being particularly passionate about it. (In other words, it doesnt seem to be just that most teachers care about their work and most electronic-course developers dont.) Maybe its just like independent study: you //can// in theory learn just as well on your own as in a class, but its much easier to do well in a class because you have someone keeping you accountable, moral support, friends to hang out with and ask questions of.\n\nI do wonder if the frustration I voiced in MnemonicMediumAsTdd about the difficulty of //running tests// on your mnemonic-medium flashcards is part of this intrinsic difficulty of the medium: when you teach in front of a class, even in a mode with as little interactivity as lecturing, you have all kinds of opportunities to consciously and subconsciously learn what works and what doesnt and adjust, both immediately and in future presentations of the material. I dont even teach that much, and I can feel this deeply. When you try to create an electronic curriculum, you barely ever get a chance to sit with any of your learners and see what works and what doesnt. Even if you try to solicit feedback from learners, learners dont know what they dont know|UnknownUnknowns, so they are usually not able to accurately identify what the problems are; two-way communication is required in order to really improve the curriculum. (I learned how helpful this was with the reviewers for GrokTiddlyWiki: the initial feedback I received was usually not that helpful, but by asking one or two rounds of follow-up questions, I was able to get some extraordinarily helpful information out of it. This level of interaction is unfortunately only practical in a few circumstances when mediated by computers.)\n\nCertainly personalized electronic teaching tools are useful as part of an overall curriculum -- on a basic level, Anki is one of them for instance -- but the idea that they will make teaching obsolete seems fantastical to me. This said, I can believe that well be able to solve enough of these problems that in-person teaching will become a tool used significantly less often, at least shrinking the market for teaching. (The timescale is much less clear.) I do worry that we might forget how to teach the topics if good completed curricula become available, KnockingOutTheLowerRungs.\n\nAnd then, to throw out a cynical option, maybe I am overly optimistic about the tradeoffs people are willing to make, much like I pointed out in AugmentationVsAutomation. Maybe we as a society dont give a darn if people no longer like learning and nobody develops the ability to think independently. In that case, maybe we really dont need teachers except for the set of people who want to fight the system|IndependentMindedness.\n\nOverall though, color me skeptical.\n\n{{ReplaceabilityOfHumanTeachers/p||PrivateChunk}}},{title:ReplacementsForExtrinsicMotivation,created:20210809161733647,description:Giving employees autonomy, mastery, and purpose is more effective at increasing performance than offering them conditional rewards.,es:likely,modified:20210809165033470,tags:Public Employment Psychology Idea,type:text/vnd.tiddlywiki,text:According to Drive2009, give your workers three things and theyll be intrinsically motivated to do good work, avoiding the DangersOfExtrinsicMotivation:\n\n# Autonomy -- responsibility for your work; the ability to choose where, when, and how you work; and time to pursue side projects and improvements|ContinuousImprovement\n# Mastery -- the ability to work on things youre good at and improve yourself; time spent in a FlowState\n# Purpose -- a subjective belief that youre doing something useful and making society better rather than worse\n\nThese are strikingly similar to MrCalNewports philosophy of work, the CraftsmanMindset and the principle of control being the primary thing to optimize for corresponding to autonomy and mastery and the CareerMission corresponding to purpose.\n\nAdding rewards which dont take the “if-then” form can be helpful as well. For instance, MrDanielPink gives the example of a company where people can award $50 cash bonuses on the fly to a coworker any time they think they did something worth recognizing (p. 163). The bonuses are meaningful, since they come from people you work with who genuinely understand you and what you did well, they dont diminish your motivation because you cant predict when you might get one, and theyre large enough that you can enjoy getting one but small enough that you wont massively change your behavior because of it (assuming youre being paid fairly in general).\n\nGetting your workplace from a traditional environment to here is probably easier said than done. That said, it does seem that most of the highly workplace environments that are written about (e.g., in HowGoogleWorks and CrazyAtWork2018) offer these things to their employees, so there is at least anecdotal evidence that its worth striving for.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Crememberq \20210809164700584\\n\t\What three attributes does //Drive// argue employees should be given to motivate them instead of “if-then” rewards?\\n\t\Autonomy, mastery, and purpose.\>>\n\t\n\u003C\u003Crememberq \20210809164730800\\n\t\You can avoid inhibiting intrinsic motivation by offering what type of reward for good work?\\n\t\One that is not conditional: its offered on the fly after the task is complete, rather than under predetermined circumstances.\>>\n\t\n\u003C\u003Crememberq \20210809164920185\\n\t\According to Daniel Pink, a feeling of //mastery// in the workplace manifests partly in what psychological state?\\n\t\Flow.\>>\n\n\u003C\u003Crememberq \20210809165003543\\n\t\What vivid example does //Drive// use to illustrate non-conditional rewards for good performance in the workplace?\\n\t\A company where employees can give their coworkers $50 bonuses for any reason at any time.\>>\n\n\u003C/$details>},{title:ReplicationCrisis,created:20200819032654975,modified:20200821023820429,tags:Science Public Idea,type:text/vnd.tiddlywiki,text:The ScientificMethod depends on the independent replication of results. A single experiment can be wrong. Even a couple experiments can be wrong. Inviting other people to try to get the same results exposes all kinds of biases, accidents, and plain bad luck for what they are, making everyone smarter. Its a critical part of the AntiFragility of science; single experiments cant form the complex system required to build antifragility.\n\nAnd a shocking number of famous results have not been replicated at all, or completely fail when subjected to the most basic tests of scientific reproducibility. Things we thought we knew for sure are suddenly in question. Especially an issue in the soft sciences, though mid-range fields like medicine struggle mightily too.\n\nA major part of the problem may be the prevalence of scientism|ScienceVsScientism and the related bureaucratization of science, creating perverse motives for researchers and increased opportunities for even accidental bias.\n\nSee also DeclineEffect.},{title:Replika,created:20210516213439169,es:possible,modified:20210616234835013,tags:Software Public Idea,type:text/vnd.tiddlywiki,url:https://replika.ai/about/story,text:Personalized AI chatbot that tries to develop a personal relationship with you (the bar may not be that high|ElizaEffect!). I feel simultaneously curious enough to try it and weirded out by the idea. See MeetTheAiTherapist on creepy-weird-modernity-and-also-curiosity.\n\nAlso the usual *.ai dangers: what are they doing with the data (they commit to not selling it, but obviously it goes into their machine-learning Hoover and they could get hacked, the government could show up and ask for it, yadda yadda yadda), and what happens if you end up building a meaningful relationship with this thing and they take it away|OperatorsPleasure suddenly?\n\n{{!!url}}\n\n//Note to self//: if I end up playing with this or a similar tool at some point, I would find it particularly interesting to investigate what //kinds of relationships// can be established with it. Most interestingly, are there types of relationships that cant / dont normally exist between people but could exist between a person and an AI? A sort of TaxonomySmashing enabled by a new medium. (Daemons would be an example of a non-standard type of relationship that requires a new medium to work.) See ReplikaRelationship.},{title:ReplyAll,created:20200411003357371,creator:soren,modified:20210314161355207,modifier:soren,tags:Publication Public InternetTheory,type:text/vnd.tiddlywiki,text:Podcast by MrPjVogt and MrAlexGoldman and sundry others at TheGimletMedia. The tagline is “a podcast about the internet,” but its really an eclectic podcast about all elements of modern life, plus a lot of other silly stuff.\n\nOut of all the podcasts I listen to, this is by far the best. Particularly notable is that it makes effective use of the radio-ish format. Many if not most podcasts basically just throw information at you, which I could accomplish by reading in 5 minutes and the only thing Im gaining from it being a podcast is that I can listen to it while Im driving or doing housework.},{title:ReprogrammingMyIdentity,created:20220617153813908,creator:soren,description:I was unable to date for many years because I had accidentally created a //non-dating identity//. How do you leave such an identity behind?,es:personal,modified:20241026233942208,modifier:soren,tags:Idea Identity Romance Essay Public Frozen Favorites,type:text/vnd.tiddlywiki,text:(//Content type: Personal reflection written in June 2022. I have lots more practical advice from the months that have come since, but Im still trying to figure out exactly what form that should take. If you, personally, happen to have found yourself in a situation similar to mine -- currently or in the past -- Id love to talk to you about it; shoot me an email|mailto:contact@sorenbjornstad.com! I wont bite.//)\n\nThroughout my teens and early-to-mid twenties, I never dated or even showed any interest in romantic relationships (to others or to myself). The main driver of this was that Im demisexual|DemiPerson and as such am lacking some of the up-front motivation provided by thoughts like “hey, it would be fun to have sex with one of those people.” I was also wrapped up in doing my own things and hanging out with my friends in high school, mostly uninvolved in social groups whose own identities involved dating, lacking many potential partners who were much like me, born as an only child|OnlyChildAttitude to parents who werent into pressuring me into dating,\u003C\u003Cfnote \Not something for which I blame them! I had enormous appreciation for it at the time, and I certainly think I could have gotten myself in a pretty bad place by forcing myself into something so complicated without understanding myself and how I fit into the process. It seems unknowable whether this was right or wrong in the grand scheme of things.\>> and generally oblivious and unreceptive to other people who might have been interested in me, eliminating most of my remaining chances to accidentally get into it. None of these are reasons one necessarily will not or cannot be interested in dating. But when something is new, difficult, and awkward, you need significant motivation to start doing it; in my case, by pure chance, all of the plausible motivators simultaneously failed me. Once I got started on this train of thought, it simply became habit, and “not interested in dating” became a silent and largely unexamined part of my identity.\n\nThis never happened //intentionally// of course, because on a life-plan level, “not interested in dating” is not and never was a true statement about me:\u003C\u003Cfnote \Well, since it would have been socially acceptable. 2-year-old me was not interested in dating.\>> Im quite interested in finding a life partner, and Ive been quite sure of that at least since I was in college, probably before.\u003C\u003Cfnote \The first discussion in the RecordsProject Im aware of begins on CB12.64, which was written on December 28, 2013, a semester into my freshman year of college.\>> But its one thing to like the outcome and another thing to like the process, and I didnt like the process. Or so I thought.\u003C\u003Cfnote \As I wrote in the same entry: “I would like to be married, but not too ready for or enthusiastic about the intermediate steps. Wouldnt mind waking up some day and finding myself about to be married.”\>> But really I think I didnt like the process not because there was actually something I disliked about the process itself but because I thought //I wasnt the kind of person who liked the process//: circular reasoning starting from a series of random events that accidentally locked a belief in place. David Cain tells this story like it is in “The person you used to be still tells you what to do|https://www.raptitude.com/2012/07/the-person-you-used-to-be-still-tells-you-what-to-do/”; his example is thinking he didnt like nightclubs and dancing because of a couple of mediocre experiences early in his life, only to discover ten years later that he actually loves them. He says:\n\n> That’s all it takes to keep something out of your life, a single instance of telling yourself, “This is not for me.”\n\nIts funny how strong a belief like this can get despite being based on virtually no actual evidence. Cains story is in some ways more remarkable than mine because it isnt difficult to make yourself stroll into a nightclub sometime and double-check whether you like it (heck, unless you have a particularly restricted social circle, at his age youll probably get invited to one out of the blue at least once every few years); but then there also doesnt seem to be a whole lot of reason to try. For me, its been perpetually obvious that trying would be really hard, because I had no idea what I was doing, but also extremely valuable -- but because it was so hard, it understandably never seemed like a workable next action to me. On the other hand, my mistake is a lot more serious!\n\n(In “On Having Enough Socks|https://www.gwern.net/Socks”, Gwern calls this mistake Underexploration: a failure to perform a simple experiment that could provide immensely valuable information. Ive termed the specific form of the mistake I made here refused exploration|Underexploration; q.v.)\n\n!! Missed opportunities\n\nI did have a few natural opportunities to change course. Between the solidification of this belief about myself in high school and now, I got to know and like three people enough to want to ask them out badly enough that I had to take it seriously.\u003C\u003Cfnote \Yep, three in nine years. When you need to get to know someone well before you get really attracted to them, and you dont have any reason during those years to be getting to know all that many new people your age in depth, its not hard to stay that low.\>> None of these incidents woke me up either: the first time I was so clueless because I had never been in this position before that I never did anything, and the second and third times I eventually got around to asking (after paralyzing amounts of anxiety) but got a no. This was all perfectly understandable, if slightly unlucky; the oddly underexplored thing in retrospect was that I never stopped to consider whether there were any lessons to be learned from any of these experiences, like whether I might be interested in trying to actively make these moments happen|HowToBecomeAttractedToSomeone rather than relying on dumb luck|DumbLuck.\n\nI also realized when I was 23 that I was demisexual|DemiPerson. This was, unsurprisingly, a cue for me to reexamine a whole lot about my life. I did vaguely consider trying “conventional” dating here, but I mostly wrote it off as something I didnt think would work|Underexploration – presumably because, again, it seemed hard and not aligned with my identity. Indeed, in my new sexuality label I had actually come up with an explanation for why it //wasnt// aligned with my identity, which felt great. And while that explanation wasnt wrong -- its part of the story for sure -- in another unfortunate coincidence it very effectively hid the deeper and more important truth from me for another four years, that I had accidentally made up a “non-dating” identity that I had no particular need to have.\u003C\u003Cfnote \Of course, theres no guarantee I would have figured any of this out earlier had I not learned about demisexuality; I had already gone many years making up unexamined and retrospectively-obvious-garbage excuses like “Im too busy to care about romantic relationships” because I couldnt think of any other explanation. But this cant have helped.\>>\n\nTo some extent I think all this is a result of the lack of education on the asexual spectrum in todays society. Plenty of people dont even know its a thing!\u003C\u003Cfnote \Or worse, they are told its a thing but refuse to //believe// that its a thing, or even accept it|AcceptanceVersusBelief.\>> If someone had told me in my teens that some people experience sexual attraction only in much more specific circumstances than the general population -- or not at all -- and that such people still have plenty of chances to find a partner if they figure out what works for them, that would have been enormously helpful. Maybe a school could even get some people in of a variety of minority identities and have them explain how they figured it out and how their choices differed from societys after that.\u003C\u003Cfnote \Would I do this in front of a room of middle-schoolers? Probably not, so maybe this is a non-starter. But some people are clearly much braver than me; somehow some people are willing to teach these imps!\>> Not recognizing that youre a little different as you try to figure out how sex and romance works means that half of the things you “figure out” are misleading or completely wrong, and then you have to painstakingly dismantle them and start over again once you do recognize it later in life. Im sure there are still some little kernels of wrongness in there to be rooted out. Maybe there always will be.\n\nThis is not to assign //blame// to society, although Indianas sex education was not exactly a paragon of virtue.\u003C\u003Cfnote \As I recall, it did manage to work in the word “condom” once or twice, but a lot more time was spent on scare tactics and inaccurate information about HIV/AIDS, and there was certainly no meaningful GSRM education. It probably mentioned that gay people existed approximately once.\>> (Not that anyone, to my knowledge, is doing much better on the ace front.) My whole experience has been a combination of personal failing\u003C\u003Cfnote \One, for sure, that could happen to any very human person in my position; Gwerns article above is in significant part about how amazingly difficult it is to avoid underexploration. But Im happy to take responsibility.\>> and accident. Neither am I actually that upset about whats happened so far. Sure, Ive lost quite a bit of time, but the last years have been largely good to me and the path forward looks perfectly fine as well.\u003C\u003Cfnote \Ive legitimately enjoyed being single the vast majority of the time. Im kind of over it now, but thats why Im trying to change it now!\>> There are even some advantages of starting late as a more mature person. I mostly just feel like Arthur in //So Long, and Thanks For All the Fish//, “as stunned as a man might be who, having believed himself to be totally blind for five years, suddenly discovers that he had merely been wearing too large a hat|TooLargeAHat.”\n\n\u003C!--\nI think its worthwhile to note that I havent been //wrong// about pretty much any specific fact along the way. I am demi, \n-->\n\n\n!! The need to reprogram your identity\n\nMaybe Im writing all of this too soon; I still havent actually been on any dates (although Im actively trying to get some now, and I just started this week). But Im writing now because Ive already had what Id characterize as a massive success reprogramming myself. Ive spent some time over the last few months analyzing exactly why Ive been unable to make any progress towards a goal that I am deeply invested in, particularly why Ive felt unable to get started with obvious next steps that Ive clearly defined. The key aspect finally came down to “these steps feel inconsistent with my identity,” an identity created as I described above.\n\nThis is fixable!\u003C\u003Cfnote \Of course, some aspects of romantic and sexual identity are not realistically changeable. I cant make myself want to have sex with attractive strangers, or even people Ive just started to get to know, and so my dating motivations and process will differ in manageable but noticeable ways from most peoples. But “I dont like dating,” itself, is, at least for most people, something that can change.\>> So that realization is cause for celebration. But intentionally changing your identity in a fundamental way is hard. Its difficult to process that its changing. It feels scary and you have to really want it. Most people rarely bother.\n\nSometimes you have the benefit of your identity changing without your explicit consent. Then all thats left for you to do is figure out how to integrate the changes. When I got into TheStOlafChoir -- which was a //big deal//, in terms of achievement, something you get to put on your musical resumé for the rest of your life even if you take 20 years off -- I remember being more thoughtful than excited. Everyone around me was more excited than I was. It took me a few days to finish processing even the provisional part of this identity and enjoy it (the real part didnt show up until the next year when I actually started singing with them). Its a good thing I didnt foresee this happening, or I might well never have auditioned; I already had a few doubts about whether that was the right choice for me as it was.\n\nBut most of the time, when you know you need big changes to your identity, you have to make them intentionally. And “not interested in dating” is surely among the thornier aspects of identity to change, because its bound up with all kinds of other things that are psychologically difficult. At least for me, once I decided that not dating was part of my identity, I got to attach all kinds of other useful things to it: no need to look for people once you have enough friends! nothing new to learn! no need to play silly games! no extra conflict! no drama! no rejection! That last one is especially bad because Id be willing to bet that most people are more afraid of rejection than death. Not that its actually more serious -- they wouldnt say that if you gave them a survey -- but I bet it changes their daily thoughts and actions more. This is a horrible evolutionary misprogramming|SurviveVsThrive in the modern environment, where rejections from strangers are of almost zero real consequence, but we cant do much about it except learn to deal with it.\n\n\n!! How to change your identity\n\n> People say theyre not doing the work because its hard. But its hard because theyre not doing the work.\n>---MrDerekSivers, HowToLive2021 (\u003C\u003Crt 11960>>)\n\nThe process, I think, is what I did largely accidentally: one step at a time, do lots of things and learn lots of things that dance around the edge of the aspect of your identity youre trying to change. Try one new thing in a way that seems as safe as possible, then back off a little bit if you need to. One method I invented\u003C\u003Cfnote \Im sure someone has come up with this idea before, but I didnt hear about it from anyone else.\>> to create this safety is to “throw the first one away|DatingMindsetTips/ThrowTheFirstOneAway”: tell yourself that its inconsequential how your first attempt actually goes, the only thing that matters is that you do it. When you get to your second try, you can start thinking about doing it well. (Of course, if your first try goes unexpectedly well, youre allowed to keep going! The point is that you dont have to worry about it.)\n\nMrBjFogg says that to get rid of a bad habit, you have to “untangle|UntanglingHabits” it, finding the easiest knot to start with, calmly working it loose, and then moving to the next one. Identity changes are similar. You might have to go //really slowly//, because some of the steps will probably feel like mountains even though theyre objectively insignificant. Remember that anything that gets you closer counts as progress and is worthy of celebration!\n\nI started by simply deciding that when I moved|ConvinceMeToStay to Minneapolis|Minneapolis, I should seriously think about trying to change this aspect of myself -- and concluding that it was fine if the whole project was a complete bust, as long as I tried it. Another important effect of moving to Minneapolis from a town of 25,000 is, of course, that it became absurd to claim there was nobody out there for me, something I had been able to use as an excuse before.\u003C\u003Cfnote \It seems likely that, on average, I will indeed be able to find better partners for me in a 3.7-million-person metro area than in Owatonna (a place where there were unusually few single women with similar interests, age, and personality to me). But thats beside the point: this was fundamentally an excuse not to get started, not a defensible argument for doing nothing.\>> I waited about a year before doing anything else, but I had at least committed to //wanting// to change my identity.\n\nThen I started reading lots of books and articles about dating, from practical advice to sociology, from conventional wisdom to heresy. Just buying the first book felt hard -- I guess it was admitting that I wanted to change -- but the fourth was no harder than buying bananas at the supermarket. Thats the good news: as you get closer and closer to the center, the outer rings start to feel completely trivial, creating a sense of accomplishment.\n\nIt was worth doing all this reading for at least three reasons. First, at my age, its nice to declaratively learn some of the things that you would have learned by osmosis from making amateur mistakes for 5--10 years, unless you want to feel like an unbelievable idiot as an adult. (But plenty of people fail to learn these lessons anyway; really, everyone should do this. The average amount of effort people put into understanding how to perform well in even the activities most important to them is astoundingly low|https://danluu.com/p95-skill/, so you can get a huge leg up by taking it even a little bit seriously!) Second, if youre like me, you have an excuse stuck in your head that you cant start dating because you dont know how. A significant part of this maladaptive excuse evaporates once you start to internalize everything youre told; of course youll still have to learn some things through the school of hard knocks, but it doesnt feel quite so overwhelming anymore. Last, reading extensively about your new identity makes everything involved in it feel progressively more //interesting//, which is critical to becoming invested in it. The “non-dating” identity, if it doesnt involve self-loathing, almost necessarily includes a claim of “I dont care”, and if you dont want to be single forever,\u003C\u003Cfnote \Not that theres anything wrong with that if thats an honest preference.\>> you need to show that one the door.\n\nI also put much of what I learned into my SpacedRepetition system. While this wasnt strictly necessary, I think it helped a ton. Thats because SRS is an attention-management system|SpacedRepetitionAsAttentionManagement; it forces you to think about your topic of choice more or less every day, and it burns whatever facts, ideas, and conclusions you like into your head so you think of them in other contexts as well. When you keep thinking about something, you start to take it more seriously and like it more. SR is here serving as thought management|SpacedRepetitionAsThoughtManagement as well as attention management. (Of course, it also doesnt hurt to learn all the good advice by heart so you think of it when you need it! But thats not the most important thing for our purposes.)\n\nWhen I reached the point where I started reading the same points in different sources over and over, I set the books aside and started analyzing what I had been doing or thinking wrong and what I needed to do instead, giving myself permission to avoid doing anything yet. Some of this was admittedly yak-shaving|YakShaving. But the most efficient thing would have been to get started right away without doing any of this identity-changing crap and do the most important parts of the reading concurrently; we all know theres only so much you can learn about romance from a book or on paper. The problem is that I would simply never have done that unless someone put a gun to my head.\n\nBesides, sometimes the side effects of yak-shaving are good. Here, Im quite sure that some of this work will be legitimately useful going forward. Even more importantly, it created confidence that I know what I want. This confidence is illusory -- I //dont// know what I want|PeopleDontKnowWhatTheyWant -- but I have to believe that I do|BeliefAsInstrument (while listening to myself and stopping periodically to reconsider whether Im wrong) in order to maintain enough motivation and momentum to get through the months and years to come.\n\n(This seems more important than literally anything else at this point. Unless I happen to get stupidly lucky, finding a life partner starting in 2022 seems likely to be the hardest thing Ive ever done, at least if I want to do a good job;\u003C\u003Cfnote \For someone like me, a bad job seems decisively worse than being single for the rest of my life, so I certainly do!\>> this has never been easy and todays environment makes it even harder. There are almost certain to be a lot of major setbacks. Looking around me there is a stunning amount of cynicism. It would be so easy to succumb, but becoming cynical means you cant evaluate your own mistakes accurately anymore, and that results in more mistakes before finding the right path, which means the whole thing becomes even //more// soul-crushing, makes you more cynical, and takes longer. Indeed, the most likely outcome of continued cynicism is likely that you either opt out of the vicious circle by giving up, or choose a marriage that turns out to be horribly wrong. RelentlessOptimism is not optional.)\n\nAs you continue dancing around the identity you want to change, slowly getting closer and closer to the center, at some point, even if the next step available feels incredibly difficult, youll start to realize that youve spent quite a lot of time on this and you would feel way too dumb if you turned back. Not only that, but all the research and thinking has changed you; even though youve still never been on a date, you feel like someone who could. Now youre ready to do the actual work -- your motivation has finally exceeded the significant obstacles, and even though the steps left ahead are still hard, maybe insanely hard and anxiety-provoking, youll actually //want// to do them.\n\nCongratulations, by force of will and carefully chosen actions, youve made yourself like something you thought you hated. That might be one of your biggest achievements ever! I know it feels like it to me.\n\n{{ReprogrammingMyIdentity/p||PrivateChunk}}},{title:ResharingCulture,created:20200531045240775,es:likely,modified:20210811184054116,tags:Design Politics Psychology Information InterpersonalRelations Public SocialMedia InternetTheory Idea,type:text/vnd.tiddlywiki,text:Many social networks encourage the re-sharing of existing content -- if not explicitly, by granting an affordance through the big “share” or “retweet” or “promote” button that you can just click as youre scrolling through new posts. This seems pretty natural -- after all, its what the internet is good at -- but actually, is it natural?\n\nOutside of social media, we generally filter interesting things through our own perspectives: we absorb the news or the anecdote or the information, and then we share it with our friends. This means ideas change organically over time, become more diverse, and fit our own circles better; it also results in ElaborativeEncoding and helps us learn and be thoughtful people with EclecticMinds. Sure, occasionally you might clip an article out of a magazine or newspaper and give it to your friend, but if you do that, you do it because you know its something that particular person will be interested in, and this isnt the normal way of interacting with information, its reserved for the rare situations when that article stands out. Further, whole thoughtful articles make a different impression when reshared than 200-character sound bites, and a lot of reshared content is the latter.\n\nThe “share” button short-circuits all of that. Instead of thinking about things, we just share them. Theres barely enough time to do otherwise! And so instead of forming our own opinions, we regurgitate others. It //has// to be having an effect on the way we think... we just dont exactly know what. Though Ill say, it certainly cant be helping the increasing shrillness of politics and our need to slow down|HowToSlowDown2019.\n\nI think this may be part of the decline of F.|PrivatePerson, too. Sometime around 2015, maybe, the balance of content on Facebook slowly shifted from mostly thoughts and pictures people shared about their life to mostly snippets people gathered from elsewhere, which are almost universally ContextFreeInformation. I dont give a rip what my high-school friend thinks about MrDonaldTrump or what someone she follows on TheTwitter thinks about the upcoming lunar eclipse...Facebook was fun when it was a glimpse into my high-school friends actual //life//.},{title:ResistanceIsNotFutile,created:20210331003809213,es:confident,modified:20210616235652179,tags:Reasoning Sociology Politics Public Idea,type:text/vnd.tiddlywiki,text:In an article in TheCurrentAffairs, 5(2), p. 67, MsLytaGold points out that there is something intrinsically contradictory about the Borg catchphrase “resistance is futile”. If resistance really were futile, surely there would be no need to say so; the only reason to claim that it is, is because it isnt, but you think you might be able to trick somebody into thinking that it is. And yet, this is not intuitively obvious, at least it was not to me.\n\nI wonder how many similar catchphrases and articles of faith are widely accepted and have this same structure.},{title:Resource,color:#ff4d00,created:20200329174514566,modified:20200508202210643,tags:Meta Public,type:text/vnd.tiddlywiki,text:An external website or tool.},{title:ResourceMooching,created:20210917204801662,creator:soren,es:confident,modified:20210917205259072,modifier:soren,tags:Idea Business Economics Systems Public,type:text/vnd.tiddlywiki,text:The fine art of using bureaucracy to hide the fact that you are not getting any real work done. Instead, you delegate your work to other people or teams -- without saying thats what youre doing to them or anyone else -- and take credit for their achievements. Typically this is accomplished by constantly calling different support staff for problems you could figure out yourself. (If youve ever worked on an internal-facing team or help line, you know who the resource moochers are...theyre the ones who call you multiple times a week with something they could learn themselves, but thats just close enough to being your job you dont feel like you can call them on it.)\n\nThe advanced version, mooching off your customers and making them believe theyre better off for it, is called ShadowWork.\n\nResource mooching is popular because it distributes the costs over many different peoples budgets and calendars, causing them to disappear and making you look great because you need so many fewer resources. Actually, of course, the overhead increases for each task, so the whole system is worse overall|BigPictureProductivity. AppearancesOverReality strike again.},{title:RespondingToChange,created:20200202025330427,creator:soren,es:likely,modified:20211107173035223,modifier:soren,tags:AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:AgilePhilosophy is fundamentally about responding to change -- both external change and internal changes required by coming to learn more about the requirements (see AgileHumility). The manifesto states that Agile values responding to change over //following a plan//. Plans arent bad, but its too easy to follow a plan instead of your own intuition.\n\nFunctionOfPlanning goes into detail on the role plans should have.\n\nThe most important factor in responding to change is making your process IncrementalAndIterative. (Other factors are included too, like being curious and looking for opportunities to change.)\n\nResponding to change is in some ways a form of EmergentStructure.},{title:ResponsibleAiPanel20200519,at:202005192030,caption:Responsible AI Panel Interview,created:20200518213346163,medium:video,modified:20210522015801949,presenter:MrEricBoyd MrRobertMauceri MsMiraLane,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/3a263e98-8016-4cf2-b89f-cb2a0ad673c9,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nCf. ResponsibleMachineLearning20200519.\n\n* MrEricBoyd: Whats happening right now?\n** A lot of new people coming on board with ML. Offering tools for understanding, protecting, and controlling models.\n*** InterpretMl (see other discussion)\n*** Fairlearn (ditto)\n*** Differential privacy tool, WhiteNoiseStatistics -- builds models using sensitive data while not compromising individuals privacy.\n** Basically admits theyre kind of making things up as they go because this is all happening very fast!\n\n\n* MrRobertMauceri: What do you do and what have you been researching?\n** ModelInterpretability.\n\n* MrEricBoyd: How does InterpretMl work with blackbox, like neural networks?\n** Tool mimics the model by running inputs/outputs to study feature influence.\n\n* MrRobertMauceri: How does WhiteNoiseStatistics work?\n** Q.v.\n\n* MsMiraLane: What do you do?\n** E&S: TheMicrosoftEthicsAndSociety group, q.v.\n\n* MrEricBoyd: Where are Azure AI tools going in this space?\n** Hardware enclaves for some types of data\n** HomomorphicEncryption\n** Governance and management tools, which sound boring but are really important if youre using it\n\n* MrRobertMauceri: Future of research in ML?\n** Rapidly expanding field\n** Security of ML machines (data poisoning to contaminate training data to mess up the model -- think about that Hitler chatbot deal)\n\n* MsMiraLane: What can organizations do now?\n** Understand stakeholders\n** Think about people who might be excluded from design process (e.g., children) -- and involve as many as possible\n** Understand your own biases and cultural biases to understand what might get caught up in the design\n** Harm modeling just like you would do with security modeling\n\n\u003C\u003Crememberq \20200529194005827\\n\t\What emerging security threat can distributed machine-learning systems suffer from?\\n\t\Data poisoning, where a model mistrains as a result of ingesting a large amount of targeted, biased data.\>>},{title:ResponsibleMachineLearning20200519,at:202005191930,caption:Responsible ML: Getting Started and Analyzing Your Models,created:20200518213225989,medium:video,modified:20210522015801956,presenter:MsSarahBird,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/de776dfc-19f0-459a-8aeb-72bab99d4b67,year:2020,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nCf. ResponsibleAiPanel20200519.\n\nHow do we understand models and their effects?\n\nLooking at an example of loan application decisions, using three tools:\n\n* Azure ML (with Python in this example)\n* Fairlearn -- Is the model fair?\n* InterpretMl -- How does it make decisions?\n\nDemo took way longer than usual to work in Jupyter...\n\n--------\n\n* What is meant by unfair?\n** See ModelFairness.\n\n* Interpretability -- why is this desirable?\n** See ModelInterpretability.\n\n* Fairness Assessment/Mitigation -- Demo\n** Fairlearn -- will be integrated into Azure ML soon\n** q.v. for functionality\n\nQ&A:\n\n* Future direction\n** Adding more ways to slice the data\n** Community-driven\n* Can the functionality work during scoring/inferencing time as well as training time?\n** Yes, can ask for an explanation of a particular decision (not sure how that would work with blackbox?)\n},{title:ReStructuredText,created:20200425164403437,creator:soren,es:confident,modified:20211229033404249,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Markup language used for Sphinx. Much more powerful than Markdown, offering lots of pre-built formatting //roles// (inline styles) and //directives// (block-level content like inclusions from other files, images, or callout boxes). Moreover, it can be readily extended with Python functions (though the documentation on how to do this leaves much to be desired).\n\nA little touchy when you get started or if youre usually not careful about your formatting, as like Python it uses significant whitespace (the scope of block-level elements like list bullets or directives is determined by indentation). This enforces a wonderfully readable markup text, which is great since it follows the MarkdownPhilosophy, but does rely on the user paying attention and keeping their source clean.\n\nSupports line-level SemanticLineFeeds, but not my proprietary tabbed form (due to significant whitespace).},{title:RetrievalContext,created:20200304015459311,es:confident,modified:20201206193026920,tags:PersonalDocumentation Public Idea,type:text/vnd.tiddlywiki,text:When storing material in personal documentation of any kind (Zettelkästen|ZettelKasten, wikis, notes, etc.), categorize (link, tag, slot into hierarchies, whatever) based on the context you will need to //retrieve// the content in, not the context youre storing it or the hierarchically-determined meaning of the content. You are not a librarian or an archivist.\n\nRelated to the notion of ContextScrambling: a new context is likely more valuable than an old one. And you are only going to find something based on the context youre looking for it in.\n \nRetrieval context is crucial in memory as well: see StorageVersusRetrievalStrength.\n\nOne consideration when creating a retrieval context is that the context should be //permanent//. Its common to store notes in a transient context, such as “notes taken on July 23rd” or “meeting with Alice.” These contexts are virtually never relevant retrieval contexts, because once a couple of weeks have passed, it would have to be a momentous day or meeting indeed for you to remember it at all without the aid of your diary. Notes kept only in these contexts are usually lost forever.},{title:Reuben,created:20231011020353151,creator:soren,es:confident,modified:20231011021303868,modifier:soren,tags:Idea Food Public,type:text/vnd.tiddlywiki,text:One of the best prepared sandwiches in existence. It is remarkable to me for having an unusually high ratio of “how good this food actually is” to “how good this food //sounds// like it would be.”\n\nCorned beef, Swiss cheese, sauerkraut, and...Thousand Island dressing!? On rye bread? Actual what? Im not even sure I like corned beef at all in any other context.\n\nIf Im not sure what to get at a deli this is always a good choice in my book, and I enjoy evaluating the differences between different folks versions. It has enough complexity that this is easy to do, and different versions can be good in different ways (unlike, say, grilled cheese, where one tends to have ones preferences and someone can only measure up to them or fail to). I think that also means its harder to be disappointed unless its truly objectively bad (e.g., the bread is burnt); theres always some way to redeem it in your head.},{title:ReviewYourApp,caption:Yes, I Do Mind Reviewing Your App,created:20200817024944157,medium:article,modified:20210728001610581,readstatus:read,tags:Information SocialMedia Systems Public Sink,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/design/review-your-app/,year:2020,text://{{!!caption}}//, a TheControlAltBackspace post on the annoyance of apps that nag you to review them. (Or other things: sellers, carpet cleaners.) Reviews and similar techniques create an AgileDeclineEffect.\n\nThe rise of frequent online reviewing may be compared to an EternalSeptember of reviews.},{title:RewildingTheSacraments,at:202407121800,author:MrAveryDavisLamb,blurb:What’s more “Earthy” than being dunked in (or sprinkled with) living or eating up the agrarian elements of wine and bread? Unfortunately, too often American Christians have lost the wild connection with the sacraments of baptism and communion. In this session, we will explore the earthy roots of these sacraments and how, in our personal lives and communities, we can use them to remember, reconnect, and rewild our relationship with sacred earth.,caption:Rewilding the Sacraments: Sacred Rituals for Connecting with Creation,conference:2024WildGooseFestivalTrip,created:20240718030239481,creator:soren,medium:conference,modified:20240723023136489,modifier:soren,rating:distinguished,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:Explanation/philosophy, example/experiential section, then discussion.\n\nWe were invited to self-baptize (or literally do whatever you wanted with the water after a blessing). I was reminded how magical water actually is! And I had this dizzying sensation with the bread and wine of like all the layers of production and history etc. that go into that, all collapsed on top of each other into this apparently simple object. Something about how silly eating is, too (C.S.|PrivatePerson and I have talked about this several times).\n\nI commented in the discussion that the sacraments have become so symbolified for me that I dont even see the physical layer anymore -- water, bread, wine -- for what it is, and this completely removes a whole powerful layer of significance. Reminded me of two prior experiences:\n\n* Some weird cry-night bit on one of my youth mission trips where we ate a single grape to symbolize something (maybe forgiveness?). The grape stood out as unusually good. Im not sure there was any particular significance to it being a grape though honestly, aside from a general connection with Communion (which Im not sure was even mentioned), so maybe this is a tangent. Or maybe it was actually done quite well and I was just a ditzy teenager and didnt understand it and so dont remember it now.\n* One AshWednesday on tour with TheStOlafChoir, S.S.|PrivatePerson arranged for a bunch of folks to do just Communion in a little side room because we wouldnt have the opportunity to go to church for a couple more weeks. The intentionality and specificity here, and the simple fact that the context was much different than usual, put the focus on everything about the Sacrament of Communion in particular, making it feel much more powerful than usual.\n\n10/10, would do again and will talk to others about.\n\n{{RewildingTheSacraments/p||PrivateChunk}}},{title:RiceLakeChainOfLakes,created:20230702204521913,creator:soren,gis-lat:45.16689702444377,gis-long:-93.08777036000257,gis-zoom:13,modified:20230702204547560,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:RiceLakeStatePark,caption:Rice Lake State Park,created:20200425034728678,foreignid:00250,gis-address:8485 Rose St, Owatonna MN, 55060,gis-lat:44.0928921820055,gis-long:-93.06391601239659,gis-zoom:13,modified:20201130025225055,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki,text:Small MinnesotaStatePark near my CrystalApartment in OwatonnaMinnesota, about fifteen minutes out of town to the east. About five miles of hiking trails next to a cute lake. While its mostly notable in being close by, its actually a quite delightful place in its own right...just maybe not so impressive juxtaposed against the rest of the Minnesota state park system!\n\nMosquitoes are usually absent next to the lake due to the wind (bring a sweater even in summer!), but can get nasty elsewhere.},{title:RiceLakeStatePark/Amenities,created:20201130024516765,hideorphan:true,modified:20201209035248990,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Office rarely open except midday on weekends. You dont need a lot here, though. :)},{title:RiceLakeStatePark/Travel,created:20201129223957750,hideorphan:true,modified:20201209035249882,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Right outside Owatonna. Can go through Owatonna and east on Rose St and itll be on your right (about a 15-minute drive from CrystalApartment).\n\nAlternatively, if coming in from the east on Hwy 14, there is a sign shortly before Owatonna; take a right at the sign and itll bring you up to Rose St.},{title:RiceLakeStatePark/Visits,created:20201130024548592,hideorphan:true,modified:20210123160539833,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:I come out here once or twice a month, so I dont try to track things.\n\nI camped in the cart-ins once, prior to my first camping trip away from home, to make sure that I had all my gear set while remaining close enough to home that I could go back if something important was missing. It was nice enough...but theres not really enough to do in the park to stay for even a weekend; I can easily hike the whole trail system on a day trip.},{title:RilkeLiveIntoTheAnswer,created:20250204035826518,creator:soren,modified:20250204051308141,modifier:soren,tags:Public,type:text/vnd.tiddlywiki,text:\u003C\u003C\u003C\nI want to beg you, as much as I can, dear sir, to be patient toward all that is unsolved in your heart and to try to love the questions themselves like locked rooms and like books that are written in a very foreign tongue. Do not now seek the answers, which cannot be given you because you would not be able to live them. And the point is, to live everything. Live the questions now. Perhaps you will then gradually, without noticing it, live along some distant day into the answer.\n\u003C\u003C\u003C\n\n---Rainer Maria Rilke|MrRainerMariaRilke, letter to Franz Xaver Kappus},{title:RimskyKorsakoffeeHouse,created:20250623162312033,creator:soren,modified:20250623162312884,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Rinata,created:20230405170407435,creator:soren,gis-lat:44.95756317114817,gis-long:-93.29509656112933,gis-zoom:17,modified:20230405170433882,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:RiseOfFullStackFreelancer201706,caption:The Rise of the Full-Stack Freelancer,created:20200425213353757,medium:article,modified:20200808144504850,tags:Source Public,type:text/vnd.tiddlywiki,url:https://fortelabs.co/blog/the-rise-of-the-full-stack-freelancer/,year:2017,text:ForteLabs post explaining the concept and benefits of FullStackFreelancing.\n\n{{!!url}}},{title:RiseUpSinging,created:20201026153016738,modified:20201026153039405,tags:Publication Public,type:text/vnd.tiddlywiki,text:Popular songbook with over 1,200 popular songs.},{title:Risk,created:20210628022724596,creator:soren,modified:20230901033246828,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki,text:How to manage the possibility of undesirable things happening, and how to think about the CostBenefitRatios and tradeoffs involved therein.},{title:RiskOfNotChanging,created:20200506160447620,creator:soren,modified:20240528200803985,modifier:soren,tags:Risk Public Idea,type:text/vnd.tiddlywiki,text:For people who really dont like change because theyre risk-averse, pointing out the danger of //not// changing may be an effective strategy (WhoMovedMyCheese p. 85). You cant not avoid risk by not changing; NotActingIsADecision.\n\n* Yeah, in some sense its risky to upgrade your software all the time...but its more risky to never upgrade it and then do it all at once in a painful project.\n* Similarly, the AgilePhilosophys way of handling software //development// (IncrementalAndIterative).\n* And my own PassingDangerPhilosophy.},{title:RoadAccessTax,created:20200911020416919,creator:soren,es:possible,modified:20221002151530375,modifier:soren,tags:Idea Public Driving Cities Politics,type:text/vnd.tiddlywiki,text:Intriguing suggestion in a StrongTowns post|https://www.strongtowns.org/journal/2011/12/14/best-of-blog-the-diverging-diamond.html?gclidEAIaIQobChMIwoyJiprw6QIV9h-tBh0iPg82EAAYASAAEgIufvD_BwE that whenever you connect some driveway to a road, you should have to pay an annual \access tax\ on your connection.\n\nHeres the purpose of the tax: adding any connection to a road creates an externality in that it makes that road less efficient (since people now sometimes have to slow down or stop as folks get on and off the road,\u003C\u003Cfnote \\\ Unless its an expressway, I suppose, but private properties are not directly connected to expressways, so this is a moot point.\\\>> and there are more opportunities for accidents). Therefore, the owner attaching the driveway should pay society, and everyone who doesnt use that driveway, to compensate them.\n\nThe access tax is proportional to the amount of slowdown the entrance can be expected to create. If youre connecting a gravel driveway for your rural house to a county road, you probably only pay a few dollars a year: theres little traffic to begin with, and if theres anyone coming at all you can simply wait in your driveway until the road is totally clear, so its unlikely youll ever inconvenience anyone at all. If youre building a Wal-Mart and you have to install a traffic light thats red 25% of the time for through traffic on a busy highway, then you might have to pay in the millions of dollars per year.\n\nObviously, the purpose of this reform would be to disincentivize the latter kind of development. Useful patterns like frontage roads rather than stroads, as well as stores where not everybody drives, would make more financial sense. Stores like this hypothetical Wal-Mart are also usually financial drains on the municipality because of weird tax incentives, so it would help make up for this as well.},{title:RoadToEmmaus,caption:The Road to Emmaus,created:20200406161447547,creator:soren,medium:story,modified:20211110160443584,modifier:soren,rating:good,tags:Source Public,type:text/vnd.tiddlywiki,text:Biblical story in Luke, one of the series after MrJesusChrist rises from the dead. Some disciples meet Jesus along the road, and being stereotypically clueless|ImplausibleCharacter dont realize its him.\n\nStayWithUs is based on this story, and I discussed both in my OleChoirSeniorDevo.\n},{title:RoamResearch,created:20240402013935841,creator:soren,modified:20240402013938595,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:RoaringTwenties,created:20200322164719868,creator:soren,es:confident,modified:20211227184818166,modifier:soren,tags:History Public Idea,type:text/vnd.tiddlywiki,text:Historical period in the 1920s characterized by RecklessOptimism and a stock-market bubble making everyone (reasonably fortunate) awash in money.},{title:RobinsonCrusoe,caption:Robinson Crusoe,created:20200401225118131,creator:soren,medium:book,modified:20210607011530494,modifier:soren,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:RobinsonCrusoe,text:Early-ish English novel by MrDanielDefoe. Archaic language. Read in fourth grade during TheOtterCreekHomeschool (I believe it was in fact the first thing I read in my wonderful OtterCreekLiteratureIntroduction, and I remember having an assignment that I had in no other book in the Introduction, that being to record weird words I didnt know and look up their definitions -- which in retrospect was probably a good idea that didnt stick).},{title:RobinsonCrusoe1719,author:Defoe,bibliography:LifetimeReading,caption:Robinson Crusoe (+),created:20210703170128000,genre:Literature,medium:book,modified:20210705214035907,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1719},{title:RogueLike,created:20200309193243325,creator:soren,es:confident,modified:20211029022313922,modifier:soren,tags:Game Public Idea,type:text/vnd.tiddlywiki,text:Genre of game involving characteristics like the following:\n\n* Single-player adventure game, often set in a dungeon\n* World has set bounds but is within them randomly generated; you never play the same game twice and replay value is very high\n* Often minimal graphics, tradition of interfaces made of character-cell terminal text; focus is on strategy of character development based on EmergentStructure in terms of what you find\n* Permadeath -- saving is strictly for postponing the continuation of the game for later. When you die, the save file is deleted and your character is gone forever. This makes roguelike strategy match life strategy to a much greater degree than most games. (Cf. If You Die in Canada, You Die in Real Life|https://xkcd.com/180/.)},{title:RoguelikeBook,caption:Roguelike,created:20200407004706266,creator:soren,format:ebook,medium:book,modified:20210606225311411,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Game Source Stub Public,type:text/vnd.tiddlywiki,text:Book by MrSebastianMarshall about what RogueLike games have to teach us about life.},{title:RoguelikeRegret,created:20200303164134330,creator:soren,description:Roguelike regret occurs after you do something you knew, on some level, perfectly well at the time that you shouldnt have done.,es:confident,modified:20240402020214915,modifier:soren,tags:Reasoning Game Psychology Public Idea SorenConcept,type:text/vnd.tiddlywiki,text:When playing RogueLikes, I find myself saying more often than I care to admit something to the effect of, “Dammit, I //knew// I shouldnt have done that, but I did it anyway.” Usually, of course, this happens after you die (unless its NetHack, where there are a wide variety of other terrible things you can fuck up permanently, because, well, its NetHack).\n\nThis feeling is roguelike regret, which is maybe a misnomer because it happens all over the place. Yet somehow (maybe especially after reading the RoguelikeBook) it feels like the purest manifestation.\n\nWe very often do things we know we shouldnt do, on the assumption that “ah, itll be OK this once,” or we just arent exerting enough mental energy to worry about it, or we even purposefully dont think about the consequences because its easier not to. Then the thing happens.\n\nExamples outside of roguelikes:\n\n* Sending nasty emails or other communications to someone.\n* Putting an item in a dumb spot where you know youll likely have trouble finding it later.\n* Sitting down and starting to browse the internet or use your phone //real quick// (to find an hour later that youre still doing it, partly owing to AddictiveDesign).\n* Engaging in unsafe sex.\n\nRoguelike regret often, but not always, involves obtaining a negative result from an asymmetric action which has a relatively small chance of turning out bad, but relative severe consequences if it occurs. People are particularly bad about evaluating these probabilities (see BlackSwan) and are thus more likely to experience regret.\n\nOpenQuestion: How does one avoid experiencing RoguelikeRegret? A DesignApproach could help, but the how of that design is not always clear.\n\n----\n\nA reader sent me an interesting theory, that in many cases it may only appear that you should have known better in hindsight, that the actual danger isnt in fact clear before the action. Im not convinced this explains as many instances of this phenomenon as they think it does -- or maybe were just different and I experience it in my original formulation much more often than they do -- but Ill allow that this probably is a more important component of the phenomenon than I considered at first.\n\nAlso, this brings up another point: how could you actually settle whether a given instance is one or the other? If you tried to, say, write down that you thought something was stupid before doing it, youd probably get HawthorneEffected and //realize// you were being stupid and not actually do the thing. I think this may suggest that the RR phenomenon occurs when you recognize on some level that something is bad about this action, but youre on autopilot and in a rush and dont stop for long enough to actually act on that sense.\n\nThere might be some System 1/System 2 dichotomy here too. I wonder if it is actually the same thing as -- or at least closely related to -- what MxGwern calls the Ur-Cognitive Bias|https://gwern.net/socks#the-ur-cognitive-bias, that is, failure to “wake up” from System 1 thinking and switch to System 2 thinking when necessary.},{title:RoleOfQuoting,created:20200716135644945,description:Use quotes sparingly, as corroboration and color, and never to replace your own argument.,es:likely,modified:20210623024029413,tags:Writing Language Learning Public Idea,type:text/vnd.tiddlywiki,text:I read someone the other day (now cannot remember who it was) who took the radical position that you shouldnt quote people. If you cant or wont explain it in your own words, you dont get to say it.\n\nNow, Im not going to go that far, because I have a file with somewhere around 10,000 quotes in it|RandomThoughts and I think its both fun and valuable to see other peoples perspectives from time to time. In fact, theres something poisonous about not quoting anyone, too: its the antithesis of IntellectualHumility. (ModerationAndBalance strikes again.) You certainly didnt make up these ideas yourself, and you shouldnt try to look like you did. Using the words of people who are smarter than you is a way to acknowledge what parts of your thought are truly your own and what parts are not.\n\nYet OA (Original Author) is onto something: theres nothing more frustrating than an author who quotes excessively and doesnt seem to have anything of her own to say (exhibiting an advanced form of InsufficientlyReflectiveWriting), or worse, includes quotes that dont even seem relevant or go unexplained. And even those who dont go nearly that far can easily undermine themselves or miss out on opportunities by overquoting or quoting in the wrong way.\n\nSo heres my philosophy: Quote people who have clever and enlightening things to say that fit in with your argument. It shouldnt //be// your argument, because then you ought to just give your argument; it should be tightly related to your argument but with a fresh perspective. In other words, dont quote people to make your argument for you.\n\nAbsolutely, positively dont quote people to define things (and certainly dont quote the dictionary, as MrMortimerAdler gripes about in \u003C\u003Crt 11269>>). Use your words. If you have to quote somebody to define a term youre using, Im going to assume you dont understand what youre talking about (cf. WritingIsThinking).\n\n\n!! In Zettelkasten\n\nThe role of quoting in a ZettelKasten should be quite limited. Though a CommonPlace book and a ZK share the goal of processing things we learn, a commonplace is quotes with a little analysis, whereas a ZK is analysis with a few quotes. One of the main benefits of the ZK is your need to understand and parse something to write about it, so you dont want to circumvent that by quoting things instead of writing about them. I do, however, like my recent habit of adding a “References” section at the bottom of a note when I encounter someone pithily describing the main idea of the tiddler or some part of it; this serves to lend credence to the tiddlers argument and suggest additional relevant metaphors that might lead to valuable links|NotesMustLink in the future, without encouraging me to skip over putting the ideas in my own words.},{title:RoleOfTools,created:20200817032521330,creator:soren,description:Tools make things possible; they do not make things happen by themselves, and working backwards from tools to goals is ineffective.,es:likely,modified:20220504200826487,modifier:soren,tags:Public Process Systems Reasoning Idea,type:text/vnd.tiddlywiki,text:Tools are often granted more importance in our thoughts and plans than they deserve. This is not to say tools are not important; sometimes it is extraordinarily difficult, or even entirely impossible, to accomplish something without a certain tool. However, in the vast majority of cases, tools are necessary but not sufficient. Or, put another way, tools make things possible; people make things happen.\n\nIndividualsAndInteractions should usually be more of a concern than processes and tools. Thats because tools are useless unless embedded into an appropriate workflow|WorkflowSupremacy. If you understand what youre trying to do and why youre trying to do it|SevenfoldWhy, you have smart people|HspWtcS who care about the outcome, and you can develop a process framework, the tools will take care of themselves. You might have to search for or even build the tools to make your goal possible. But thats the easy part. Working backwards from tools to motivation and goals is doomed to failure (see, e.g., DevelopingIntrinsicSrMotivation). Working //only// on tools (an empty observance) is also possible and is a form of magical thinking|EmptyObservanceAndMagicalThinking.\n\nOn the other hand, particularly well-designed tools can help to instill changes in individuals, interactions, processes, and thoughts, making the tools effective, producing a VirtuousCircle.\n\nCf. CodeByItselfIsWorthless.\n\nNoted in FightingInformationOverload2020.\n\nA major component of PartneringWithAnki2021.\n\n!! References\n\n> Keep in mind, though, that the tool you use will not give you stress-free productivity. That is something you create by implementing the GTD method. The structure you incorporate will be extremely important in how you express and implement the process, but it is not a substitute for it. A great hammer doesn’t make a great carpenter; but a great carpenter will always want to have a great hammer.\n> ---MrDavidAllen, GettingThingsDone},{title:RollOfThunder1976,caption:Roll of Thunder, Hear My Cry,created:20201119203246401,creator:soren,due:202303131200,format:paperback,isbn:9780142401125,isbreadstatus:unread,ivl:240,medium:book,modified:20220716195624708,modifier:soren,owned:yes,readstatus:unread,tags:Source Public,type:text/vnd.tiddlywiki,universe:RollOfThunder1976,url:,year:1976,text:Book by MsMildredTaylor.},{title:Romance,created:20221201235745272,creator:soren,modified:20251010031337629,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:Experiences and theory of romantic and sexual relationships.\n\nSee also Sexuality, Friendship, and InterpersonalRelations.\n\n!! Sociology\n\n* \u003C\u003Csummarize MaslowsHourglass>>\n* \u003C\u003Csummarize RelationshipSuccessDivide>>\n* \u003C\u003Csummarize SelfExpressiveMarriage>>\n\n\n!! People relate differently\n\n* \u003C\u003Csummarize FactorsInfluencingSexualAttitudes>>\n* \u003C\u003Csummarize PersonalizedViabilityOfPlatonicFriendships>>\n\n\n!! Dating strategy\n\n* \u003C\u003Csummarize AttractivenessAsymmetry>>\n* \u003C\u003Csummarize SpeedrunAuthentic>>\n* \u003C\u003Csummarize ThreePartPartnerSelectionCriteria>>\n* \u003C\u003Csummarize TrustAsymmetry>>\n\nLess targeted at dating but still highly relevant:\n\n* \u003C\u003Csummarize AmazinglyAwesomeFriend>> (This is also relevant to romantic partners.)\n* \u003C\u003Csummarize RelativeAdvice>>\n* \u003C\u003Csummarize PeopleDontKnowWhatTheyWant>>\n\n\n!! The asexual spectrum\n\n* \u003C\u003Csummarize Asexuality>>\n* \u003C\u003Csummarize DemiPerson>>\n* \u003C\u003Csummarize Metadesire>>\n\n\n{{Romance/p||PrivateChunk}}},{title:RomeoAndJuliet,caption:Romeo and Juliet,created:20200330024403719,medium:drama,modified:20200808144608178,tags:Source Public,type:text/vnd.tiddlywiki,text:Play by MrWilliamShakespeare, one of his most famous. Archetype of the tragic love story and shows up all over everywhere (though Shakespeare did not make up the story, he ended up popularizing it in a very good telling).},{title:Rondo,created:20240718030512301,creator:soren,modified:20240718030549022,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Neighborhood in St. Paul. Vitality destroyed by I-94, the TwinCities archetypical example of highway construction being unfair to minorities.},{title:RoomOfOnesOwn,caption:A Room of Ones Own,created:20201119203015548,format:paperback,isbn:0156787334,medium:book,modified:20201119203046752,owned:yes,readstatus:reread,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1929,text:Feminist book/extended essay by MsVirginiaWoolf. Read in TheGreatCon, but honestly remember very little about it...},{title:RosevilleCenter,created:20231014172035516,modified:20231014172146884,tags:Place Public,type:text/vnd.tiddlywiki,text:Central indoor mall area in the giant Roseville shopping complex.},{title:RoteLearningAsFoundationOfThought,created:20201120172215519,creator:soren,description:Learning facts in the internet age is still important, because one cannot reason without an adequate foundation of facts.,es:likely,modified:20221201181425572,modifier:soren,tags:Memory Learning Reasoning Creativity Information Public Idea,type:text/vnd.tiddlywiki,text:At various points throughout history, it has become fashionable to disdain learning //facts//, and instead focus on \ideas\ or \critical thinking skills\ or something to that effect. Granted, those latter things are the primary goal of a good education. But its not possible to have them without the facts.\n\nReasoning happens by putting together facts -- noticing patterns, extrapolating from the past|ContextStrength, finding FamiliarizingMetaphors. A BasicLearningFoundation of facts makes it easy to learn other facts that in turn allow the development of meaningful ideas.\n\nIdeas that are not based on true facts tend to be bogus ideas, and the thinker wont realize that they are because they dont know any facts. Even if the ideas really are good, theyre hard to support once someone who does know the facts tries to argue against your idea: youll just look like a doofus if you cant supply any factual evidence for your side. Most of the time, you end up with silly ideas that fall apart once you start looking at the facts.\n\nWe shouldnt ignore that data isnt as objective as it looks|FallibilityOfStatistics. But some more-or-less incontrovertible facts combined with some possibly-incorrect data that you can critique adds up to a whole lot more value than no facts at all -- //unless// you dont know how to interpret the facts, in which case you might be getting yourself in danger|DataIsDangerous, so media and statistical literacy is one of the most important intellectual skills nowadays (as it more or less always has been).\n\nThis tiddler discusses how trying to reason on too few facts can be a problem, but the opposite situation can also be a problem. If you dont AvoidOverreading and take in too many facts and arguments written by other people without stopping to consider them yourself, perhaps due to the predominant ResharingCulture, you may end up with InsufficientlyReflectiveWriting, or the equivalent in personal thought or speech.\n\n!! References\n\nFrom IntellectualLifeOfTheBwc:\n\n> The incorrect view being discussed holds that the content of education is problematic and socially constructed, that the learner is competent to define that content, that all subcultures are equally valuable, that academic knowledge is not superior to other kinds of knowledge. Rather than offering all classes the kind of education traditionally enjoyed by the elite, schools should value and preserve folk cultures.\n> The difficulty is that all this closely resembles the theories of Giovanni Gentile, Mussolini’s first minister of public instruction. His educational reforms of 1923 encouraged spontaneity and disdained intellectualism, emphasizing ideas and beliefs over facts, figures, names, and dates. “Teaching is formative, not informative,” proclaimed one of Gentile’s supporters. “The Italian school of today does not limit itself to the imparting of mere information and to the furnishing of cultural instruments. Its aim is to mould and fashion souls.”\n> It sounds deceptively progressive, but as Gramsci realized, it only made indoctrination easier. Without a knowledge of the past, students had no standards for judging the present. Without a fund of basic information, they could not intelligently form their own opinions or criticize what they were taught. And preserving traditional cultures meant, in effect, preserving the status quo.},{title:rs.io,created:20200811215728267,modified:20200811215815561,tags:Publication Public,type:text/vnd.tiddlywiki,url:https://rs.io/guided-tour/,text:Proprietary-weirdness name. Eclectic blog. Author appears to be named only as having an email address of `robb` at the website.\n\n{{!!url}}},{title:RSS,created:20200423032308807,creator:soren,es:confident,modified:20220106134839276,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text://Really Simple Syndication// (also the newer but tightly related standard Atom, which nobody bothers to differentiate unless theyre implementing an RSS/Atom reader), a standard for keeping track of updates to information in a centralized location.\n\nI wrote the article FollowWebsitesWithRss201902 to publicize how it helps us get out of the PersonalBubble and take control of our information intake, and thus why more people should be using it.},{title:RubyBeach,created:20250626182653088,creator:soren,modified:20250626182653889,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:RuleOfTwo,created:20200715190835161,es:likely,modified:20210509012517445,tags:Information PersonalDocumentation Systems SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:The Rule of Two is a personal theory which states that its OK to have to look in //one// or //two// places to find an item or piece of information (especially if theres some heuristic you can use to guess which is more likely to be the correct place). As soon as you get to three, it becomes extremely frustrating.\n\nThis has strong implications for systems design, especially when dealing with distributed, strung-out systems and different layers of legacy systems. The value of going from three or more to two is gigantic. The value of going from two to one, creating a CompleteIntegration, is less.\n\nSee also LawOfTheFirstBulb.},{title:RuleSetMindset,created:20200730193108300,es:likely,modified:20210617000116289,tags:Creativity Business PhilosophyOfLife Reasoning Sociology Design Public Idea,type:text/vnd.tiddlywiki,text:From a conversation with J.M.|PrivatePerson about cultural issues at TheFederatedInsurance related to people who have spent their life working on the mainframe and in an older iteration of Federated: the “mainframe mindset” involves strict process and sets of rules. If someone isnt doing something right, you just AddAnotherRule, instead of figuring out why they didnt do it right and fixing the problem. The rules are mostly buried in arcane documents, or youre just supposed to //know// them. If you screw up, well thats your fault, you didnt follow the rules!\n\nJ.M.|PrivatePerson pointed out this is a very American problem: its all about personal responsibility instead of studying the system. And its frustrating that nobody apparently considers you can have personal responsibility but still have a cruddy system badly in need of repair (see DesignApproach).\n\nInterestingly, this approach in many ways worked on the mainframe. At least better than it does in todays \distributed\ environment. J.M.|PrivatePerson and I are trying to get through to S.B.|PrivatePerson on this. If you learn the basic|BasicLearningFoundation concepts and terms of Git and completely understand them, youre pretty much golden. If you dont, all you have is a set of cargo-cult rules which will inevitably leak|AbstractionsLeak and badly fail to match up to reality (RealityInaccurate). COBOL is a pretty closed system that doesnt fail nearly so badly when cargo-cult rules are applied; but the time for that is rapidly ending in many places.},{title:RustChallenge20200520,at:202005201300,caption:The 30 Min Beginner Rust Coding Challenge,created:20200518213857223,medium:video,modified:20210522015801971,presenter:MrSamedAlHajajla MrRyanLevick,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/830f6857-c5f0-4d02-8333-b8bd632a1e35,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nThis was a demonstration of CodeSpaces and an extremely brief introduction to RustLanguage.\n\n* Competitive programming is pretty much a huge sport, in which MrSamedAlHajajla is deeply involved.\n** Pointed to https://leetcode.com\n** Can test/submit solutions on the platform\n\n* Goal of this challenge: Sum an inclusive slice of an integer array\n** I just did a Python version in 15 seconds while watching the video:\n*** `def f(arr, i, j): return sum(arri:j+1)`\n** Ya, Python is cheating. Also, this is not optimized, but Python isnt about optimization, right?\n\n* The Rust analyzer in CodeSpaces is broken. Yay bad demos!\n** Ended up literally just ignoring it, lol.\n** It appeared that they just forgot to install it `>__\u003C`\n\n* Rust is a very low-level language, but provides lots of nice high-level constructs.\n** Default immutability\n** Goofy object initializer syntax!\n** `&self` on methods, much like Python\n** Have to index using a `usize` type, not an integer\n\n* Optimization criticism from MrSamedAlHajajla: you can actually get this in O(1) time after precomputation, if you make an array of cumulative sums and subtract the bottom from the top! Would //not// have thought of that.\n\n* Safe Systems Programming at Microsoft -- planning to adopt Rust for its safety properties (this could be big for the language!).\n** Session: SafeSystemsProgrammingLanguages20200521. (I did not watch this live. It was 5:15 AM my time...Im not that dedicated to learning about ProgrammingLanguages.)\n\n},{title:RustLanguage,created:20200316145155444,creator:soren,es:confident,modified:20220201153619376,modifier:soren,tags:Software Code Idea Public,type:text/vnd.tiddlywiki,text:Modern systems programming language that achieves comparable performance to C but offers modern functionality like guarantees of no undefined behavior outside of defined “unsafe” code sections, package management, bounds checking, etc. Also a novel and intriguing system for managing memory, pointers, and concurrency in a way thats safe at compile time (a notion of “ownership” and “borrowing” references/pointers). This allows the language to be “garbage collected” in the sense that you dont have to track and free your own memory, but frees are compiled into the program so there is no unpredictable stop-the-world runtime hit.\n\nFunctionalProgramming has some of the same safety and ease-of-use goals but is generally not suitable for systems programming.\n\nIve played only very briefly with Rust and would love to spend more time with it. Almost every programmer is saying that right now!},{title:ruth-moody.png,type:image/png,created:20240531171817677,creator:soren,modified:20240531171823324,modifier:soren,tags:Image Public,_canonical_uri:./extimage/ruth-moody.png},{title:SaaS,created:20200322174055062,creator:soren,es:likely,modified:20220113214138178,modifier:soren,tags:Systems Software Public Idea,type:text/vnd.tiddlywiki,text:Software As A Service -- the new way of delivering software via the Web, where you pay a subscription fee (potentially composed of your personal data and eyeballs rather than dollars) and receive the right to log in to a system. Generally does not do a great job at user freedom or at creating ComputingCitizens, and is often AddictiveDesign made by BigTech or Medium Tech, but it sure is convenient.\n\nLets be clear: tools that you clearly pay for from your checking account|NotFromYourCheckingAccount, that offer good interoperability including APIs and exporting/importing, and that do not capture user data for corporate gain can be sensible SaaS tools. Bonus points if the code is OpenSourceSoftware and the SaaS part is merely a convenient option. This isnt overall a horrendous model, but its terribly over-applied right now.},{title:SabbaticalEndState,created:20210726021508932,description:Who would I like to be and what would I like to know once I move on to my next job?,es:personal,modified:20210726122551197,tags:2021Sabbatical Public Idea,type:text/vnd.tiddlywiki,text:Anytime I embark on a new job or adventure, I like to ask myself what Im going to learn from it. If Im not going to learn anything, it had better both be fun and pay excellently|JobDisqualifiers, and unpaid time is certainly not going to pay excellently! So learning is key here. And its often possible to miss learning opportunities if you dont reflect on what youre trying to learn from the beginning, so lets do that.\n\n!! Questions to be answered\n\nIf the sabbatical goes well -- or for that matter, if it goes poorly -- I would like to have answers to these questions. The answers to some of these will be clear, if not guaranteed to be generally applicable (“Do I like sabbaticals?”), while others will be more nebulous (“What should I do next with my life?”). But I hope to have made intellectual progress on all of them.\n\n* Do I like sabbaticals? MrStefanSagmeister would have us retire five years late and take five of these over our working lifetime. Is this a good idea? Can it work? What is it worth to me? These questions will be a lot easier to answer once Ive done one.\n* What should I do next with my life? I have some general ideas about my next full-time job, but as I do some career planning and work on a variety of projects, perhaps I will become more clear on what I should do with my life, or rather what direction I should steer from here.\n* Can I work effectively for myself? What are the challenges involved? What am I good at? What do I like and what do I dislike? I think I would like to be in business for myself at some point, but I have no real idea. While of course the only way to really know what that would be like is to try it|TryItAndSee, I think this is a low-stakes way to get a partial answer, and I get that partial answer for free as long as I look out for it.\n* How much real work can I get done in a day? I am planning to do|SabbaticalSchedule three two-hour (or 90-minute-ish plus breaks) blocks of “brain work” per day; some days maybe two if I want to go do something in the afternoon. Is the hypothesis correct that we cant get more than four to six hours of real work done per day long-term, and that this is still plenty if we use it well? If so, what does that mean for the way I work in the future? If not, why not, and how much can I in fact get done? This is a fantastic test case because there is nobody else to distract me from any of my work and I have complete control over when and how I work.\n* When I have lots of ideas, how can I record them, continue developing them, and prioritize them? I am still struggling to figure out how all of my organizational systems and informational systems fit together. This is sort of a research question, but one that wont really be its own project, more of a meta-project that gets worked on as I try to do the other projects.\n\n\n!! Where I want to be / have done\n\nIn addition to learning things, I would like to be in a slightly different place in my life when I finish.\n\n* Be ready to search for and move on to something new. I want to have my life in decent order and be emotionally ready to move. I would like to be technically and professionally ready for a job search, too; but I can start that after my first sabbatical phase is over (the one where Im not even thinking about future employment except in the most general terms).\n* Have a large number of concrete accomplishments to point to. If someone asks me what I did during my “time off,” there should be a straightforward answer that looks good to everyone. I dont think this will be too hard, as most of my projects involve me publishing a deliverable on the internet; even many of the others (e.g., reading) will result in something in my Zettelkasten! This is the cool thing about having public notes. Its almost like social media or the original “weblogs” were supposed to be, but much more suitable for thoughtful and excessively voluble people like me.\n* Have completed 70% of my original goals list|SabbaticalProjects. If I get more done, sweet, but I might end up getting pulled off in another direction, and thats fine too. But if I dont get somewhere around 70% of what I started out intending to do, I think I might be frustrated.},{title:SabbaticalUpdate,created:20210807193102883,creator:soren,modified:20230525190213427,modifier:soren,tags:2021Sabbatical Public Index,type:text/vnd.tiddlywiki,text:During my 2021Sabbatical, I published (theoretically) weekly updates detailing what I was been up to and what I was committing to do the following week. You can find them as follows:\n\n\u003C\u003Clist-links \prefixSabbaticalUpdate/\>>\n\nEach weeks update was also crossposted to the Sabbatical Updates category|https://controlaltbackspace.org/categories/sabbatical-updates/ on TheControlAltBackspace.},{title:SabbaticalUpdate/20210809,cab-slug:week-1-camping,caption:Sabbatical Update, Week 1: Camping,created:20210807144436242,modified:20210809203918716,tags:Journal Public,type:text/vnd.tiddlywiki,text:Welcome to my first sabbatical|https://controlaltbackspace.org/announcements/upcoming-sabbatical/ update post! Ill be publishing one of these every Friday or Saturday (yeah, I know my first one is on Monday) which gathers together everything Ive been working on and what I plan to work on next. Since I live alone and am working alone on most of these projects and nobody is paying me to do any of it, I need to make up some mechanism of my own for accountability. I hope publicly committing to things and explaining what Ive done can serve as that mechanism.\n\nThe source of record for my weekly updates will be my Zettelkasten|https://zettelkasten.sorenbjornstad.com. If you havent yet, check it out -- its a fun place where I take notes and share what I know with the rest of the internet. I will be cross-posting update posts on Control-Alt-Backspace every week, but you may have a better experience reading in the original format using the link provided below, especially if you want to follow some of the links (theyll open in the same browser tab instead of loading the same giant page a bunch of separate times). If you notice a bunch of ~WordsSmashedTogetherLikeThis throughout the post, thats just the way I do links in the Zettelkasten (see WikiCamelCase).\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n-----\n\nI spent this last week camping in southeastern Minnesota (at GreatRiverBluffs and BeaverCreekValley state parks) to give myself some space to decompress and switch off my old job before switching on my new job. Ive been hiking, reading, playing lots of LaBelleLucie, and thinking big thoughts.\n\n!! Published\n\nNothing around the web this week (I didnt even have internet access most of the week!).\n\nSelected new/updated/newly relevant ideas from the Zettelkasten:\n\n* Are you awake?|AreYouAwake\n* Deceptive simplicity|DeceptiveSimplicity: when something is so simple its difficult to believe, or it appears outright stupid.\n* Dont try to change the world|DontTryToChangeTheWorld, even if changing the world is your goal.\n\n\n!! Reading\n\nFinished (follow the link for my summary and thoughts):\n\n* The Diary of a Young Girl|DiaryOfAYoungGirl1947 by MsAnneFrank (lifetime reading|LifetimeReading)\n* Drive: The Surprising Truth About What Motivates Us|Drive2009 by MrDanielPink\n* It Doesnt Have to Be Crazy At Work|CrazyAtWork2018 by MrJasonFried and MrDavidHeinemeierHansson\n\nLifetime reading progress: 1/2 books for August.\n\n\n!! Tasks and projects completed\n\nNothing, since I didnt do any work this week (as planned). Actually, I created some new tasks and projects!\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* I got to the end of my list of hand-off tasks at my old job two hours before my walkout time. Its not often that you get to say “I got to the end of my to-do list.”\n* A public Zettelkasten is a way of saying, “This is what Ive learned about life so far. How about you?”\n* Spotted at an interstate rest area: a disabled-parking-only sign indicating a $200 fine for parking in the spot without a permit. Then, on the back of the sign, a sticker indicating a $1,000 fine for defacing the sign. Im not quite sure what it says about your society when the penalty for damaging the sign is five times more than the penalty for actually doing what the sign tells you not to do, but its something...maybe just that the laws are too complicated (see LargeGovernmentVsVoluminousLaws).\n* TheLinkedIn has now sent me three emails suggesting that I apply for the open position at TheFederatedInsurance that I just resigned from. Im glad they think I was a good fit, at least.\n* In Victorian Britain, eating fried mice was believed to cure bed-wetting|https://en.wikipedia.org/w/index.php?titleMouse&oldid1031105282#As_food, according to Wikipedia (cited in a source I cant easily verify). Let me know how that one turns out for you.\n\n\n!! Looking ahead\n\nNext week will be dedicated to planning and cleanup of both my digital and physical life, so I can start in on real work with a clean slate. I probably have enough cleanup to fill several weeks, but Ill get bored if I try to do more than a week, so Ill tackle the high-priority stuff this week and then mix in the rest over the following weeks.\n\nI have dozens of small items on my to-do list, but a couple of particularly important ones:\n\n* Develop a system for when I will work deeply|DeepWork and when I will check my email, the news, social media, etc., over the coming weeks, and figure out how to enforce it using technology as appropriate (e.g., Freedom|https://freedom.to/).\n* Gather together lists of all the software changes Id like to make and blog posts / other writings Id like to publish during this sabbatical into one place.\n* Clean out my closets and finish moving some books (I got new bookshelves a few weeks ago and still havent put all my books back where they belong).\n* Deep-clean my apartment.\n* Finish importing a wide variety of items from information tool to information tool (add topics to my Zettelkasten, add bookmarks to my bookmark manager, pull the handful of notes I took at my old job that werent specific to that job and deserve a permanent home into my personal systems, transcribe reminders, and on and on).},{title:SabbaticalUpdate/20210813,cab-slug:week-2-neatening-up,caption:Sabbatical Update, Week 2: Neatening Up,created:20210811033216153,modified:20210818211226627,tags:Journal Public,type:text/vnd.tiddlywiki,text:This week felt really long and was unexpectedly tiring. I think thats pretty normal after a big routine change, though -- for me it usually takes about two weeks to settle in, even with something as simple as doing the same job from the office vs. from home. Nevertheless, Im happy with my productivity and have so far been successful at planning my own work.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n!! Published\n\n* On my blog, Better Indexes Through Semantic Modeling|https://controlaltbackspace.org/notes/better-indexes-through-semantic-modeling/, a sketch of a system for producing better indexes|Indexing of large documents by creating a hypertext system that is aware of the structure of the document and the topics in it. Related discussion on the TiddlyWiki forums|https://groups.google.com/g/tiddlywiki/c/r_8JakHuHHk.\n\nSelected new/updated/newly relevant ideas from the Zettelkasten:\n\n* StackOverflowForTeams: Reflections, lessons, and resources on using this fantastic collaboration tool at TheFederatedInsurance.\n* ObservationBias: an insidious category of mistake in statistical reasoning, lots of fun to try to spot.\n* FallOfMan: a very inadequate first version of my thoughts about the story that just keeps showing up, and to me remains fascinating in every incarnation.\n\n!! Reading\n\nNo long-form reading this week to speak of! Have been focusing on working through some periodicals, blog posts, and lectures instead.\n\nLifetime reading progress: 1/2 books for August.\n\n\n!! Tasks and projects completed\n\n* I finished everything I planned last week|SabbaticalUpdate/20210809 except for cleaning out my storage locker, which I plan to do on Monday (as the week finished out, I decided I would rather get my weekly blog post ready for Monday ahead of time). As expected, Im only about halfway through the cleanup tasks in total, but the highest-priority ones are done.\n* Began converting a bunch of old paper flashcards on insurance and law I have lying around to Anki cards (after sorting out the ones theres little value in remembering now that Im no longer working for an insurance company, which was about half of them). I plan to transcribe and rewrite 20 of them every day until Im done -- estimating based on the thickness of the pack, that will likely be more than one week but less than two.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* While cleaning up, I found a special set of winter windshield wipers in my closet which I bought last year and completely forgot about, in the unopened packaging. I guess Im early for next winter|https://randomthoughts.sorenbjornstad.com/#6457! Its not a good cleaning session unless you find something you didnt know you had.\n* Havana syndrome, a real-life sci-fi spy thriller plot|https://en.wikipedia.org/wiki/Havana_syndrome, hits Vienna|https://www.nytimes.com/2021/08/08/us/politics/havana-syndrome-attacks-mystery.html and continues to be creepy and mostly inexplicable, even with several good theories about possible causes.\n* Strong candidate for best ’90s singer youve never heard of: Eva Cassidy|https://en.wikipedia.org/wiki/Eva_Cassidy. Impeccable technique, unbelievable agility, and fantastic emotional expression. She died young in 1996, but she left behind a lot of unpublished recordings which have been dug out of the archives over the years since. Mix of jazz, folk, and pop. (listen: Over the Rainbow|https://www.youtube.com/watch?v2rd8VktT8xY, The Water is Wide|https://www.youtube.com/watch?vADX8GRfRKHg, Yesterday|https://www.youtube.com/watch?vFFfuxCHBa3c, What a Wonderful World|https://www.youtube.com/watch?vpPAGH0AT-os)\n* I continue to find it remarkable how much better the very best people at anything are than those who are merely good. Like, as a vocalist Im somewhere north of 99th percentile among the general population (after taking four years of voice lessons and singing in one of the most prestigious college choirs|TheStOlafChoir in the country, this is not a high bar to meet). And yet next to someone like Cassidy I feel like a drunk karaoke patron. In many ways, theres a bigger gap between good and great than good and awful.\n\n!! Looking ahead\n\nThis weekend, out of town attending a memorial service for a friend and visiting family. While the occasion is not fun, Ill get to see and sing with a lot of people I havent seen in a long time, so Im looking forward to it.\n\nNext week:\n\n* On Monday, I have a blog post and associated screencast on my commonplacing system|SketchOnCommonplacing coming out (post will be a much improved version of that link).\n* Continuing with cleanup tasks in the background (mostly in the late afternoon, in my “non-brain work” time slot).\n* Update GrokTiddlyWiki for the prerelease of TiddlyWiki 5.2.0, which will hopefully be coming out soon, and address a variety of feedback Ive received since the last edition.\n* Due to a number of small features I am hoping to add, the GTW updates may take the whole week. If I happen to get done early, Ill either fill out with cleanup tasks or get started on developing a public starter edition of my Zettelkasten.},{title:SabbaticalUpdate/20210821,cab-slug:week-3-grok-tiddlywiki,caption:Sabbatical Update, Week 3: Grok ~TiddlyWiki Updates,created:20210818210852838,modified:20210822032146801,tags:Journal Public,type:text/vnd.tiddlywiki,text:I can hardly believe it has only been 3 weeks since I left my job at Federated Insurance|TheFederatedInsurance. These weeks have been packed full and felt very long -- which is great.\n\nIts also been extremely refreshing and a rare luxury in todays world to be able to focus on one thing at a time and have nobody else competing for my attention. Things that seem long and complicated like “publish a new version of the book” actually happen in a week of six-to-eight-hour days spent on it. 40 hours is a //long time// when you actually put in 40 hours on the project in a 40-hour week, rather than 10 hours of work, 10 hours of meetings, 10 hours of unscheduled urgent problems, and 10 hours of getting distracted or bothered by people who didnt need to bother you. The hours go way further in this work configuration.\n\nWith that in mind, lets talk about what happened!\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n!! Published\n\n* On my blog, How and Why to Create a Commonplace|https://controlaltbackspace.org/notes/how-and-why-to-create-a-commonplace/, advice on using this old note-taking practice in the digital age. Includes a screencast on the way Ive implemented commonplacing for myself|https://www.youtube.com/watch?vmkbT5UYGzPE.\n\n\n!! Reading\n\n* GettingThingsDone by MrDavidAllen – I read this once before in 2018 or so, and for a while I had a pretty solid GTD system going. Then the pandemic came and I stopped doing all of the routines. As usual, Ive also discovered a bunch of stuff I wasnt doing right or could have been doing better. So I reread the whole thing this week, and Ill be working to re-implement some parts of it over the coming weeks.\n\nLifetime reading progress: 1/2 books for August.\n\n\n!! Tasks and projects completed\n\n* I havent publicly released my changes to //Grok ~TiddlyWiki// yet, as version 5.2.0 of TiddlyWiki needs to be released before my new edition will be correct, but all the changes I planned to make this week are queued up and ready to go, and Ill release when TiddlyWiki does.\n** Changes include updating the text for the new features and fixes in 5.2.0, fixing a bunch of minor typos and formatting glitches, adding contextual help for new users throughout the interface, and creating a static version of the site for search engines and people on low-bandwidth connections hopping in for a moment.\n* Made my tomato sauce for 2021. This is a yearly ritual for me -- an all-day canning project yielding almost two gallons of top-notch tomato sauce, enough for about a months worth of quick pasta dinners. As a nice surprise, the high was only 72 degrees the day I did it -- with peak tomato season happening in August here, usually my apartment gets boiling hot in the process.\n* Captured and clarified a lot of further to-do items, beginning with the //Getting Things Done// re-implementation.\n* Participated in two community calls for TiddlyWiki:\n** A general one discussing (1) a new effort to produce a file uploader, and (2) the Open Collective|https://opencollective.com/tiddlywikidotorg/ implementation for TiddlyWiki. Open Collective is a really neat way to fund and govern OpenSourceSoftware -- check it out.\n** A more specific one in which I met with several newbies with the goal of producing some video introductions to TiddlyWiki. Id love to provide a link, but it doesnt appear that our host has gotten around to posting it yet (it was only yesterday, so this isnt surprising).\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* It is almost impossible to figure out how to recycle old electronics here. Apparently you have to do the research on where to go yourself, call ahead and tell them what youre bringing, and pay a fee. Or at least, thats the best I can figure out. They sure arent doing a good job of encouraging people to properly dispose of things given that I could just chuck them in the garbage can and nobody would notice. Because Im a good person, I may just keep that stuff for now and hope there are more options in the city after I move.\n* I couldnt find the hair ties at Target and asked the pharmacist. He said, quote, “I dont know if Target stocks those.” There turned out to be a four-foot-wide floor-to-ceiling rack of all different kinds of hair ties -- about six feet away from the pharmacy counter.\n* In 2005, a researcher found that out of 50 elementary-school teachers she spoke with at one school, not one of them could correctly explain|https://www.psychologytoday.com/us/blog/freedom-learn/201003/when-less-is-more-the-case-teaching-less-math-in-school how to find the area of a rectangle. Perhaps partly because of the mathematical incompetence of such teachers, an experiment in the 1930s found that students who didnt formally study any math at all until sixth grade performed //better// at the end of that year than those who had had K-6 math -- and the experimental group was the poorest school in the district. To be fair, its only one study and its 90 years old, but it also seems hard to screw up a study badly enough to achieve a completely spurious result of “we literally just skipped 6 years of education normally considered necessary and everyone is doing better on the test,” so somebody should probably try this one again, especially given how much more early math education weve added since the 1930s.\n\nSorry, apparently all my miscellaneous thoughts are outrages this week. Not that I was actually outraged about the hair ties, I thought it was rather funny.\n\n\n!! Looking ahead\n\nPlans for next week:\n\n* Create a public edition of my Zettelkasten. Im not expecting to have the edition published by the end of the week, but you never know. The meat of the system is already there because its a mature system I use; I just need to come up with a method for pulling out the bits that other people will want to start with and write some instructions. I will at least:\n** Fix a bunch of glitches in my personal edition.\n** Create a build process that generates the edition from my personal copy.\n** Produce documentation on the basic process of Zetteling with the edition to be incorporated into the system.\n** Compile a list of any further refactoring or interface development I need to do.\n* Continue with cleanup tasks and GTD implementation.},{title:SabbaticalUpdate/20210830,cab-slug:week-4-beginnings-of-tzk,caption:Sabbatical Update, Week 4: Beginnings of tzk,created:20210830125008111,creator:soren,modified:20210830134539264,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:A relatively quiet week. It was rainy almost the whole week, so I spent most of it inside reading and hacking on the Zettelkasten stuff.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\n* On my blog, Free Speech: A Credo|https://controlaltbackspace.org/information/free-speech-a-credo/, a brief essay I put together some weeks ago and wanted to distribute to a wider audience.\n\n\n!! Reading\n\nNothing finished this week. Working on //The Human Stain//, //The Sunflower//, and //Adventures of Ideas//. More on these later.\n\nLifetime reading progress: 1/2 books for August. I intend to finish //The Human Stain// before the end of the month, which is on this list, thus filling out spot #2.\n\n\n!! Tasks and projects completed\n\n* On my Zettelkasten edition, which Ive code-named tzk (pronounced //tuh-ZEEK//, /tə-ziːk/, initialism for “~TiddlyZettelKasten”):\n** I finished the four items (fixing glitches, creating a build process, producing documentation on Zetteling with the edition, and compiling a list of further tasks) that I planned last week.\n** I was somewhat disappointed in my progress, though -- this is proving to be a larger project than I anticipated. The to-do list is longer than when I started (though also more tractable now).\n** I spent several full days of last week rewriting the build system in Python, which was the major holdup. The system is ten times faster and significantly more flexible now, and it will be much easier for anyone who picks it up to figure out and customize, so it was definitely the right choice.\n* Almost all the way through collecting and processing all my stuff and to-do items. Even on sabbatical, I have a lot of things to do…but hopefully Ill be able to decide which ones are most important now that I can see all of them.\n* Opened my Technology Time Capsule, a sealed box where I keep representative pieces and photos of old tech and predictions for the next few years, and found some new items to add. I look at it every five years, and was supposed to do it last year but got thrown off by the pandemic.\n* Finally got the speaker system in my car fixed; its been intermittently getting in a state where it buzzes and makes awful sounds for a while.\n* Reorganized my computer files and properly filed a bunch of junk that Id been dumping in a big folder over the past year or so.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* Eight years ago today, I boxed up most of my stuff and got on a train from Chicago to St. Paul for college. A lot has happened since then! Heres me on my last day of high school:\u003Cbr>img width400 soren-2013.jpg\n* After weeks of severe drought, we got 5 inches of rain in Owatonna last week. Hoping it didnt all run off -- the report for this week isnt out yet. Meanwhile, wishing those in the path of Hurricane Ida the best. Maybe they can capture some of their extra water and send it up here.\n\n\n!! Looking ahead\n\nIm going to be gone this Labor Day weekend visiting family, so I only have four full work days this week. During those:\n\n* Get the first edition of tzk in a publishable state. (Im leaving out actually //publishing// it since that is actually pretty fiddly and I might prefer to finish that next week.) It wont be perfect, but thats OK. Ideally a few people will try it out and can point out my mistakes; this is supposed to be an early-alpha version in need of customization by individual users, not a plug-and-play tool, anyway (and it probably wont be to that stage for several years, since Im still trying to figure out how this Zettelkasten thing works best in the first place).\n* Finish writing my blog post for today -- its drafted but not formatted or finished yet.\n* Finish the “Leave Federated,” “Summer Cleaning,” and “Camping Review” projects in my to-do system -- these each only have a couple tasks left and are pulling on my attention.\n\nThis is an ambitious set of objectives for four days, so well see how it goes.},{title:SabbaticalUpdate/20210906,cab-slug:week-5-three-cleanup-projects,caption:Sabbatical Update, Week 5: Three Cleanup Projects,created:20210907013853501,creator:soren,modified:20210907021253567,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:A whirlwind week, as expected, and my work didnt go the way I expected, but it was still good! I was visiting family from Friday to Monday 9/6.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\n* On my blog, Two Takes on the Eternal September|https://controlaltbackspace.org/design/two-takes-on-the-eternal-september/, an expansion of my Zettelkasten thoughts in EternalSeptember and growing directly out of my work with StackOverflowForTeams and Internet communities recently. The Eternal September represents (for me, at least) an ongoing struggle in Internet communities and social media between making communities livable and human-scaled and opening them up to the world.\n\nZettelkasten tiddlers added for some points in GettingThingsDone.\n\n\n!! Reading\n\nExtremely busy this week and almost no time for book-length reading again. If this keeps up more than another week or two, I will be scheduling time on my calendar to make sure I get more reading done, as I have been looking forward to having more reading time than normal, not less! (Now that I dont have a clear separation between “work” and “home,” its easier for work-ish stuff to continue well into the evening as long as Im still feeling productive and enjoying it.)\n\nI will be camping for a couple of days at the beginning of next week, which will let me get caught up a bit; I still havent quite finished my second lifetime reading book for August, so Ill set my total number to 3 for September and count it as one of those (currently 0/3).\n\n\n!! Tasks and projects completed\n\n* I didnt get to work on tzk at all, which was too bad but not wholly unexpected. It will continue to be on the plan for this week.\n* I did, however, finish the “Leave Federated,” “Summer Cleaning,” and “Camping Review” projects in my to-do system as I planned, and made significant progress through several more related projects.\n** In general, I have had more cleanup and household tasks to do than I thought, but Im also enjoying them more and moving through them faster than I expected, so Im going to keep rolling through them here. Its not the most exciting thing to spend part of a sabbatical on, but the next stage of my life will be a lot more enjoyable if I have them taken care of!\n** Highlights: Found and purchased extra tableware because the pattern I have has been discontinued and I might not be able to get it later; researched home exercise routines with the hope of trying some strength training, which Ive never done before; switched my phone plan to Google Fi, which will save me at least $20/month and free me from getting annoying texts about exceeding my data allowance (even with the overage fees on my previous plan, overage was cheaper than upgrading to the next tier!); reported some bugs in various software that have been annoying me, with a high success rate already; replaced my bicycle brakes, which were down to the metal; repaired several broken items around the house.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* Atlantic article suggests|https://www.theatlantic.com/ideas/archive/2021/07/work-from-home-benefits/619597/ that bad managers are afraid of remote work because it exposes the fact that they dont do very much (in the office you can just look busy, at home you have to deliver things to look busy). The article is a bit excessively remote-positive for my taste, and obviously not everyone who doesnt want their employees to work remotely is in the same boat -- but this still seemed perceptive!\n* This is what happens when your house doesnt drive defensively|https://www.reddit.com/r/IdiotsInCars/comments/p91eb6/idiot_driver_uturns_into_my_parents_house_then/. (link title from comment, title much funnier than picture)\n\n\n!! Looking ahead\n\nThis week:\n\n* //Continued from last week//: Get the first edition of tzk in a publishable state. (Im leaving out actually //publishing// it since that is actually pretty fiddly and I might prefer to finish that next week.) It wont be perfect, but thats OK. Ideally a few people will try it out and can point out my mistakes; this is supposed to be an early-alpha version in need of customization by individual users, not a plug-and-play tool, anyway (and it probably wont be to that stage for several years, since Im still trying to figure out how this Zettelkasten thing works best in the first place).\n* Proceed down my list of household and cleanup tasks, including finishing my GTD collection process, ensuring my computer backup routine is working correctly, and adding some stuff to my Zettelkasten thats hanging out in other places where it doesnt belong.\n\nIll be camping for the first half of next week, so it will be much shorter than normal and I wont have a blog post. Ill have another update post before that.},{title:SabbaticalUpdate/20210911,cab-slug:week-6-miscellaneous-weirdness,caption:Sabbatical Update, Week 6: Miscellaneous Weirdness,created:20210911132903185,creator:soren,modified:20210912013514917,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:This week was an odd mixture of a lot of different things, and next week will likely be the same. Regardless, I am still greatly enjoying this whole sabbatical thing. I dont feel directionless or like Im wasting my time, Im learning a lot, and Im not lonely even though work has normally been a big part of my social interaction. (Maybe partly because Ive had lots of extra time to talk to people I recently havent had a chance to!) So still double thumbs-up at the six-week mark with a minimum of seven more weeks planned.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\n* On my blog, several new items in the Likable Software Catalog|https://controlaltbackspace.org/catalog/software/.\n\n\n!! Reading\n\nFinished:\n\n* The Human Stain|HumanStain2000 by Philip Roth|MrPhilipRoth (lifetime reading, started last month).\n* A Guide to the Good Life: The Ancient Art of Stoic Joy|GuideToTheGoodLife2009 by William B. Irvine|MrWilliamIrvine. (I need to reorganize my review/ideas on this one still, but I think it should be readable as is if youre curious, so I went ahead and ticked the “publish” box.)\n\nStarted several more books as well. Ill talk about those next week.\n\nLifetime reading for September: 1/3 books.\n\n\n!! Tasks and projects completed\n\n* More progress on tzk, but still not ready to publish. I dont mind that -- Ive still been doing important things I care about, just not what I originally planned on.\n* Verified my backups and finished the GTD collection process as planned. The one uncollected thing in my life still is a bunch of junk behind my file cabinet that needs to be categorized -- but its all stuff Ive decided to get rid of already, I just havent brought it anywhere (some needs to go to a thrift store, some to the hazardous waste disposal, and so on). Ill work on that bit soon.\n* Finished listening to all of Bachs cantatas, which is a big deal because there are almost 200 of them|https://en.wikipedia.org/wiki/List_of_Bach_cantatas, each 20-30 minutes long. I started this project sometime during the first work-from-home phase of the pandemic and would listen to one or two every morning. When I started working in the office again, I kind of forgot about it, so in the last few weeks I picked it up again.\n* Reorganized my computer files. Im happy to say that it wasnt much work, because the framework I set up a couple of years ago still mostly makes sense.\n* Lots of reading.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* Sentence found in a scientific paper|https://onlinelibrary.wiley.com/doi/full/10.1111/j.1365-2796.2007.01842.x on a contributing cause to the obesity epidemic: “However, the Damocles sword that hangs over our weight-expanding youth merits such endeavor.” Scientists arent always the best writers...though it gave me a laugh, so maybe thats okay.\n* Last night, my apartments smoke detector went off at 1:00am because some wood smoke had drifted in the window. This is a new type of special sealed, maintenance-free smoke alarm, which sounds like a good idea except that //you cant turn the darned thing off// when theres a tiny amount of smoke in the building that you cant immediately do anything about. (There is a “deactivate” switch, but if you press it, the detector becomes permanently inoperable.) Also, the “silence” button only works for about 10 seconds at a time. I ended up putting it on the floor in a different room with the windows closed, hoping that would prevent it from catching the smoke again. It worked until 5:00 am, when I had to do the same thing all over again.\n* Facebook has released camera glasses and reportedly plans to add facial recognition to them|https://www.buzzfeednews.com/article/katienotopoulos/facebook-is-making-camera-glasses-ha-ha-oh-no. Nothing could possibly go wrong here.\n\n\n!! Looking ahead\n\nThis coming week:\n\n* Camping Sunday through Wednesday.\n* In whatever time I have left, my priorities will be to work through my Zettelkasten and add anything I need to from my camping trip (I usually end up with a lot of new thoughts when I go camping!) as well as cleaning up/updating some stale content. For instance, I often write a blog post about something I had in here, improve my thoughts in the blog post, and never backport the improvements to the Zettelkasten or even link to the blog post. Id like to get that under control.},{title:SabbaticalUpdate/20210918,cab-slug:week-7-camping-reading-and-writing,caption:Sabbatical Update, Week 7: Camping, Reading, and Writing,created:20210918160338113,creator:soren,modified:20210922020337463,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:I wrote this on Saturday, but apparently forgot to publish it for 4 days. Whoops. Heres what I //was// saying I was up to then.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\nAround the web:\n\n* GrokTiddlyWiki version 1.1.0: The next version of TiddlyWiki, 5.2.0, is taking so much longer to release than previously anticipated that I went through my changes from Week 3|SabbaticalUpdate/20210821, extracted only the ones that didnt rely on the new version being available, and published that edition. (Thanks to Git for making this a straightforward task!)\n\nNew and newly relevant items in the Zettelkasten:\n\n* AlwaysUnderpromiseAndOverdeliver.\n* EfficientLife, my philosophy on where to spend your time and money.\n* A bunch of stuff on Stoicism, coming out of last weeks reading|GuideToTheGoodLife2009.\n* A collection of ideas on the subjective experience of being red-green colorblind|ExperienceOfColorblindness, so I dont have to try to explain it to everyone over and over.\n\n\n!! Reading\n\nFinished:\n\n* Tiny Habits|TinyHabits2020 by MrBjFogg (havent finished writing this one up yet).\n* How to Live|HowToLive2021 by MrDerekSivers.\n\nLifetime reading for September: 1/3 books.\n\n\n!! Tasks and projects completed\n\n* Camping for four days, as expected.\n* Read and wrote a lot (see the above two sections).\n* Got my car professionally detailed. After having it for about four years and been on a lot of road trips in the middle of nowhere, it had gotten pretty dirty. $150 to have the interior look like new is a pretty good deal.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* According to this article|https://www.theguardian.com/lifeandstyle/2020/jan/03/empty-promises-marie-kondo-craze-for-minimalism, the average American household has more than 300,000 items. I cant decide whether to take this figure seriously or not -- a quick Fermi estimate suggests it could be reasonable for your suburban four-person household archetype, depending on your definition of an “item”, but its still bonkers, and Id think there have to be many more households with fewer possessions than the suburban family than more. As best I can tell, this statistic appears to have made it into a large number of minimalist blogs on the strength of a “professional organizer” citing this figure in an article by the LA Times|http://articles.latimes.com/2014/mar/21/health/la-he-keeping-stuff-20140322, which sounds pretty suspicious. This might be too good to check|https://astralcodexten.substack.com/p/too-good-to-check-a-play-in-three. Estimate: Say two-thirds of the items are in storage (conservatively), so we have to account for 100,000 of them. Then say there are ten non-storage rooms that contain items (also seems on the high end). Thats 10,000 items per room, including the bathroom and the spare bedroom (which has to be empty of extra junk because we excluded storage). I could easily believe 1,000, and 5,000 wouldnt be totally absurd, but 10,000 really still feels like a stretch. But then, is one sheet of paper in a file cabinet an “item”? One paperclip? One screw holding together an electronic device? One seed in a spice jar? If you count things like these, the figure looks reasonable. With no more information on the methodology, its pretty hard to evaluate.\n* I went through an automatic car wash this week that got stuck -- after the wash was finished, the STOP light started flashing (which it never normally does) and stayed that way for about a minute. Fortunately there was nothing stopping me from driving out even though the green light never came on, although it meant my car didnt get dried off. No idea what happened to the folks behind me in line.\n* If youre interested in city/suburban design or just wish all of North America wasnt covered in enormously expensive, crumbling, ugly pavement, check out Not Just Bikes|https://www.youtube.com/channel/UC0intLFzLaudFG-xAvUEO-A on YouTube, a guy who moved to Amsterdam and is now telling everyone else what theyre doing wrong (in a friendly and entertaining way).\n\n!! Looking ahead\n\nI would like to finally get tzk published this week. This looks doable. Ill also do a screencast demonstrating how it works and write a blog post introducing it.\n\nIf I get done before the end of the week, I also want to get started on making some improvements to TiddlyRemember|https://sobjornstad.github.io/TiddlyRemember/, an add-on that syncs flashcards stored in TiddlyWiki to Anki. I have some additions that I made while working on //Grok ~TiddlyWiki// that Id like to integrate, as well as a stack of feature requests, many of which I would benefit from myself.},{title:SabbaticalUpdate/20210925,cab-slug:week-8-tzk-and-tiddlyremember,caption:Sabbatical Update, Week 8: tzk and ~TiddlyRemember,created:20210926021149999,creator:soren,modified:20240402014220288,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:This has been a whirlwind week and quite productive! I finished up with tzk for now and spent a lot of time working on TiddlyRemember, among other things.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\nAround the web:\n\n* First public version of TiddlyZettelKasten|https://sobjornstad.github.io/tzk/ (github|https://github.com/sobjornstad/tzk, CLI docs|https://tzk.readthedocs.io/en/latest/). This is a version of my own Zettelkasten that others can clone and work from.\n** I also put together a screencast|https://www.youtube.com/watch?v9X_T-DVie8o demoing the tool and showing how to get started (about 1 hour -- would love to have more focused videos / textual documentation, but this is still in such an early stage of development that doesnt seem like a good use of my time).\n** Ill be putting up a blog post with more information on Monday.\n\n\n!! Reading\n\nFinished:\n\n* Confessions of a Recovering Engineer: Transportation for a Strong Town|RecoveringEngineer2021 by Charles Marohn\n* The Sunflower: On the Possibilities and Limits of Forgiveness|Sunflower1969 by Simon Wiesenthal, et al\n\nI have not yet completed summaries for my last three books and hope to finish that this next week.\n\nLifetime reading for September: 1/3 books (hopefully more coming this week!).\n\n\n!! Tasks and projects completed\n\n* Finished and published tzk.\n* Finished catching up on my German Anki deck, somewhere between 2,000 and 3,000 overdue reviews in from the beginning of sabbatical. Moving on to my hardware and systems design deck, with another 600 or so. I said I would add at least 4,000 of these old, overdue cards back in during my sabbatical, so Im on track.\n* 24 new commits on my TiddlyRemember add-on to TiddlyWiki and Anki, including a number of bugfixes and error-handling fixes, support for encrypted wikis, support for KaTeX math expressions, support for setting initial scheduling information for cards, a warning message if users do things that might cause data loss if theyre confused, better support for braces within cloze questions, support for exporting question text from Anki to a text file (in a format in which it can be imported into a wiki), tools for customizing formatting, and maybe some other things Im not thinking of. None of it published yet, but hoping for a release of some of this next week.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* I got some new business cards printed through the Walgreens printing service, and the content isnt centered on the cards. I cant tell if their printer messed up, or if their terrible online design tool let me design my cards so that they werent centered (Im inclined to say its probably the second and the problem is partly between the keyboard and chair|https://en.wikipedia.org/wiki/User_error#Acronyms_and_other_names!). Either way, I have a bunch of off-center business cards, just enough off-center to be annoying but not enough to make it worth tossing them and getting new ones. Oh well.\n* After my first two months of sabbatical, my assessment is that its underrated and not all that hard to do. I think Ill be happy to go back to paid employment at some point, but Im not in a hurry and it hasnt stopped being fun to get up in the morning and work on whatever I feel like working on when I feel like working on it…or go do something else entirely. I was remarking that if I wanted to, I could get up tomorrow morning, decide to go to California for a week, drive to the airport, buy a ticket, and be there in the afternoon -- and there wouldnt be any negative consequences at all! Theres nobody telling me what to do, nobody depending on me to be at a certain place at a certain time, and enough money in my bank account to pull off something like that. This combination of freedoms might never happen to me again, so Im trying to appreciate it now.\n\n\n!! Looking ahead\n\nNext week, Ill be continuing to work on TiddlyRemember with the goal of getting a new version published. I am also hoping to get in one more outdoors trip before the end of the camping season, so I need to do some research and planning for that.},{title:SabbaticalUpdate/20211110,cab-slug:week-14-stuff-i-didnt-plan-on,caption:Sabbatical Update, Week 14: A Bunch of Stuff I Didnt Plan On,created:20211110132801489,creator:soren,modified:20211110144435350,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:Looks like it has been 6 weeks since I posted here! Things have not been going quite how I expected, but they should be back on track about now.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\nA number of items here in my Zettelkasten have been published or updated, but no larger items.\n\n\n!! Reading\n\nFinished:\n\n* Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets|FooledByRandomness2004 by Nassim Nicholas Taleb.\n * The Bed of Procrustes: Philosophical and Practical Aphorisms (2010)|BedOfProcrustes2010 by Nassim Nicholas Taleb. (Ive now read all of Talebs //Incerto// series.)\n * A Short History of Nearly Everything|ShortHistoryOfNearlyEverything2003 by Bill Bryson.\n * One Hundred Years of Solitude|OneHundredYearsOfSolitude1967 by Gabriel García Márquez.\n * The Sunflower: On the Possibilities and Limits of Forgiveness|Sunflower1969 Simon Wiesenthal, et al.\n\nMy lifetime reading is not going according to plan. I wont try to count where Im at, but Ive definitely gone through fewer books than I was hoping to. Two per month has turned out to be a more ambitious goal than I expected because most of the books on the list go substantially slower than my average reading speed (plus Im finding tons of other things I want to read!). I may be able to finish two this month yet. \n\n\n!! Tasks and projects completed\n\n* Helped deal with a family emergency, which started off the unplanned period of my sabbatical.\n* Went on a week-long solo road trip to the Buffalo National River|https://en.wikipedia.org/wiki/Buffalo_National_River in Arkansas. Aside from part of the park being closed because there were several suspected murderers hiding from law enforcement in it, everything went smoothly and it was a beautiful spot! I hiked about 40 miles and kayaked a bit as well (due to the drought across much of the United States this year, the river level was very low, so I made this a smaller part of my trip than I ordinarily would have). On the way back, I also got to visit a good friend from college who I hadnt seen since graduation. She is thriving; its so much fun to watch my college friends turn into real adults!\n* Had a few initial meetings on one possible job to take after my sabbatical winds up, and started thinking about other options.\n* Explored Minneapolis, found a neighborhood to move to, saw some apartments, and applied for one; I havent put down my deposit yet due to a snafu with terminating my current lease, but theres a very high chance I will do so soon. Im pleasantly surprised how affordable most of Minneapolis is currently compared to many medium to large cities in the US. (Ill still be paying twice what I was in small-town Owatonna, but I had a roaring great deal here on a smaller place than I want going forward with the rise of remote work -- it was less than 15% of my income.)\n* Played|https://tnnt.org/player/scorchgeek some NetHack; its the annual November tournament. I played an embarrassing amount in high school (amounting to months of realtime), so I am still pretty good when I find the time to play.\n* Working on gathering together my medical records, which have gotten distributed over a large number of offices owing to the many places Ive lived over the past years.\n\n!! Miscellaneous thoughts and anecdotes\n\n* In one of the sets of medical records I reviewed, describing me: “The patient is a sophomore at St. Olaf|StOlaf studying computer sinuses.”\n* From Bryson|ShortHistoryOfNearlyEverything2003: A Scottish gardener named Patrick Matthew came up with the theory of natural selection some years prior to Darwin, publishing it the same year Darwin set sail on the //Beagle//. Unfortunately, he chose to publish this insight in the appendix of a book called //Naval Timber and Arboriculture//, so nobody ever heard about it.\n* I need to relearn how to parallel park before moving to Minneapolis. In Owatonna we have so much open parking it is ridiculous, so I havent had a reason to do it since I bought my car five years ago. Our minor streets -- carrying maybe five hundred cars a day, if that -- are so wide that you can turn around by making a U-turn from one side of the street to the other.\n* A delightful analogy|https://czep.net/weblog/52cards.html explains just how many ways a 52-card deck of playing cards can be arranged (it would take dozens of orders of magnitude longer than the age of the universe to see all of them even if shuffling rapidly).\n* I discovered accidentally last week that, for the four and a half years Ive been living in my current apartment, Ive been carefully using two separate keys for two locks which are actually keyed the same. To be fair, the landlord did give me different keys and tell me they were for different locks.\n* Someone noticed|https://thezvi.wordpress.com/2021/10/28/an-unexpected-victory-container-stacking-at-the-port-of-los-angeles/ that the major port of Long Beach had been brought to a standstill by…a local zoning rule forbidding empty containers being stacked more than two high because it is ugly. (Suggestion: maybe dont live next to a port if you find shipping containers too ugly to look at?) Amazingly, after a carefully orchestrated Twitter campaign brought this absurdity to the attention of someone in government, the rule was suspended for several months -- before the day was out.\n* This happened last year, but a fortuitously placed sculpture of a whale tail|https://www.reddit.com/r/CatastrophicFailure/comments/jmdbtp/20201102_train_breaks_through_barrier_onto_statue/ prevented injuries when a rapid-transit train overran an end-of-line station in the Netherlands.\n\n!! Looking ahead\n\nI was originally planning to have the latest TiddlyRemember published several weeks ago, which obviously didnt happen. Im now trying to finish that this week, as well as putting out an introductory video showing how to use it. I also need to begin refreshing my JavaScript skills and learning the React framework, as this will be relevant for one of the jobs Im looking at.\n\nLooking even a little further ahead, aside from celebrating Thanksgiving, the week of Thanksgiving (two weeks from today for my non-US readers) I will be moving from Owatonna, Minnesota to Minneapolis, so I am unlikely to get much else done, and preparations for that will be sprinkled through the days prior as well.},{title:SabbaticalUpdate/20211208,cab-slug:week-18-moving,caption:Sabbatical Update, Week 18: Moving,created:20211208170105905,creator:soren,modified:20231022205921000,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:This was an action-packed couple of weeks mostly characterized by moving.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\nSelections from the Zettelkasten:\n\n* I35BridgeCollapse -- on what makes disasters feel like disasters.\n* PerfectChristmasFestival -- an odd bit of PersonalMythology.\n* FavoriteLyrics -- beginnings of a collection of particularly creative, evocative, or beautiful lyrics.\n\nAround the web:\n\n* A new version of TiddlyRemember with a bunch of new features, along with a Getting Started with TiddlyRemember|https://www.youtube.com/watch?vBG8kkrLzMi0 video.\n* Minor updates to GrokTiddlyWiki.\n\n\n!! Reading\n\nDue to moving, most of my books were packed up for a large portion of this period, and I was too busy to read much for the rest of it. As such, I havent finished any books, but I did make some progress through existing ones, so some will likely show up next time!\n\n\n!! Tasks and projects completed\n\n* Moved from Owatonna|OwatonnaMinnesota to Minneapolis|Minneapolis. Preparations, actually moving things, and getting everything unpacked and set up in my new apartment have consumed most of my time. Every time I move, I know its going to be lots of work, but I still forget exactly how much!\n** My new apartment is in a quirky 110-year-old building. Among other things, the floor is so uneven that my office chair rolls across the room on its own if Im not sitting in it (I got a heavy rug to add enough friction to stop it), the smoke detector was wired through the bathroom light switch using the hot wires for two different loops (I have no idea how nobody noticed this before, seeing as it was beeping every 60 seconds when the switch was off), and there are six closets, all adjacent to each other (some of the doors open into different rooms, though). I also still havent managed to back my car out of the driveway in one motion; you have to squeeze between the dumpsters and the corner of the building, then avoid dropping your wheel into a four-foot-deep windowwell cut directly out of the driveway space.\n** But Ill take a few oddities in an old building over the current drywall-and-wooden-boxes apartment model any day. Its a lot more fun this way, and by the time a building gets this old, it would have been torn down if it was no good|TimeFilter, so you know it must have some architectural merit. The apartment has also been through so many patches and remodels that nobody notices or cares if you build some extra shelves into the closet or punch a few holes in the wall, which is a big plus.\n** I upgraded from 450 square feet to 700 square feet, plus the new place is much more open and bright (last apartment had a couple of north-facing windows, new place has twice as many windows and they all face south or west), so it feels even larger proportionally. This was actually my third choice (my first and second choices got taken by someone else while I was trying to gather all the information on all my options), but Im still very happy with it.\n** Ive never before lived in a place where most of my daily errands are within easy walking distance, and its already awesome. (That was one of the main reasons I chose this area, so it doesnt come as a surprise.)\n* Visited family for Thanksgiving.\n* Continued with some job interviews and preparation tasks.\n\n\n!! Miscellaneous thoughts and anecdotes\n\n* I had to get a 20-foot 1/8-inch audio extension cable to connect my computer to my stereo system at my new apartment. There was a big HIGH SPEED logo on the packaging -- I guess youre supposed to use this cable when you want your boring talk shows to play faster.\n* I made it back to the St. Olaf Christmas Festival|StOlafChristmasFestival this year, after it was canceled last year due to COVID. Just as good as ever, and it was worth the two-hour drive home in the icy slush afterwards (normally 40 minutes).\n* The choir director at a Minneapolis church Im trying out was my cousins college advisor. The Lutheran church is a small world!\n* Comcast has repeatedly emailed, texted, and called me trying to get me to set up this “flex” thing they sent me when I signed up for their internet service. I watch all my TV and movies on a large computer monitor, so I dont have a separate TV screen and its impossible for me to set it up. Yet another reason to dislike Comcast, as if you needed any more.\n\n\n!! Looking ahead\n\nI barely know anyone in Minneapolis at the moment, so now that Im settled into my apartment, Ill be looking for new friends and communities and reconnecting with a few old ones who live here. Im also starting to think about my next opportunities for paid employment.\n\nOn the online front, Im hoping to do several more TiddlyWiki videos in the near future, as well as write a few more AnkiCardPatterns and add some general advice to that section.},{title:SabbaticalUpdate/20220117,cab-slug:week-23-final-reflections,caption:Sabbatical Update, Week 23: Final Reflections,created:20220118023159380,creator:soren,modified:20220123231203543,modifier:soren,tags:Journal Public,type:text/vnd.tiddlywiki,text:In the final weeks of my sabbatical, I settled into my new home, finished up a variety of projects, and got ready to start a new job.\n\n{{||$:/sib/Templates/Topical/SabbaticalUpdates/ReadOnZettelkasten}}\n\n\n!! Published\n\nSelections from the Zettelkasten:\n\n* NoEvidence -- be exceedingly careful about saying there is “no evidence” for something or believing those who do (h/t Scott Alexander for noticing|https://astralcodexten.substack.com/p/the-phrase-no-evidence-is-a-red-flag this massive problem with science journalism and giving it a name|IdeaApi)\n* PhoneAnxiety -- a theory of why people increasingly dislike talking on the phone\n* BeBold -- if things you do dont go wrong occasionally, you probably arent being bold enough\n* MiscellaneousLifeTips -- beginnings of a collection of lifehacks and random suggestions\n\nAround the web:\n\n* The best books of 2021|https://controlaltbackspace.org/books/best-books-of-2021/ (from my reading list, that is).\n* A video on edge-notched cards|https://www.youtube.com/watch?vv8qHPXPnQps&t420s, a 20th-century database technology.\n* PSDaylog|https://github.com/sobjornstad/PSDaylog, a combination work journal and time tracker written in PowerShell.\n* lblsolve|https://github.com/sobjornstad/lblsolve, a solver for the solitaire game LaBelleLucie.\n\nI have several more blog posts planned for the following weeks.\n\n\n!! Tasks and projects completed\n\n* Accepted a job at RemNote|https://remnote.com (on which more later) and handled all the negotiations, paperwork, preparations, etc.\n* Finally finished migrating the insurance flashcards which I started in week 2|SabbaticalUpdate/20210813 and hilariously said Id finish within a week or two. (Its not that they took more active time than I expected, its that I forgot about them halfway through.)\n* Continued to work on making my apartment more livable, buying some new appliances and furniture, hanging up pictures, and so on.\n* Caught up on a variety of correspondence.\n* Visited family for Christmas.\n* Reread all of Tiny Habits|TinyHabits2020 and actually processed it this time, making several hundred flashcards in RemNote and doing all of the exercises. I dont want to speak too soon, but I am really liking the method and hope to publish a full review at some point.\n* Published the stuff mentioned above.\n\n\n!! What all did I get done?\n\nLets talk about the sabbatical as a whole now for a bit! First of all, lets see how many of the projects I was hoping to look at|https://controlaltbackspace.org/announcements/upcoming-sabbatical/ I actually got to.\n\n> Finish developing and open-source several tools I’ve been using for myself but haven’t had the time to clean up and share, including a bookmark manager called RabbitMark, a tool for finding mnemonics for numbers using the Major System, a solitaire solver, and my mnemonic medium plugin for TiddlyWiki (which is generalizable, but currently embedded in Grok TiddlyWiki and not licensed for reuse).\n\nI published the solitaire solver and my time tracker, which I didnt mention. I didnt get to the other three, though I made some steps toward the mnemonic medium one.\n\n> Make further improvements to TiddlyRemember, my TiddlyWiki plugin for syncing with Anki.\n\nThis is a rather vague goal, but I published a major update with about a dozen new features, so Ill call this complete.\n\n> Publish a TiddlyWiki edition based on my Zettelkasten. Many people have wanted to borrow what I have as a starting point, but there’s currently no easy way for someone to take my published version and re-purpose it, especially without instructions.\n\nClearly done|https://sobjornstad.github.io/tzk/.\n\n> Finish working through (or at least a substantial part of) The Rust Programming Language and write some real code in Rust.\n\nI ended up working on learning JavaScript and React instead, since that became more immediately useful for me (being what Ill be working with at RemNote). Not completed as planned, but completed in spirit.\n\n> Work on skills in algorithms and pure math.\n\nWhile I didnt do //none// of this, I didnt do enough to say I even partially did this.\n\n> Write up and publish a large selection of Anki card patterns.\n\nI dont think I touched these at all! These dont really need uninterrupted time to work on, so Im not particularly put out by it.\n\n> Make several more TiddlyWiki videos demonstrating how we can build TW tools for particular use cases.\n\nI made several more TiddlyWiki videos, though they werent part of the planned series of demos of particular use cases. I still hope to do more of those in the future.\n\n> Reintroduce 4,000 Anki cards from college that I haven’t been reviewing.\n\nIm not sure if I did exactly 4,000 (Anki doesnt provide me with an easy way to check), but I know it was more than 3,000 (because 3,000 of them were in one deck which went from fully overdue to empty), and it was a large part of the set that I was interested in getting back into circulation immediately. Done in spirit.\n\n> Spend some time on the career planning resources from 80,000 Hours, which look fantastic.\n\nI didnt get around to this (largely because my next job found me during the sabbatical).\n\n> Read at least two books from my lifetime reading list per month (or equivalently fewer if I pick something really long from it).\n\nThese were more work than I anticipated. I did read several things from my lifetime reading list, but I averaged a little less than one per month.\n\n> Take several camping trips before the weather cools off too much. (I do this every year even when I’m not on sabbatical, but I want to make sure it still happens.)\n\nI did this.\n\n> Return to doing regular weekly posts on this blog.\n\nI did do a couple, but couldnt fairly call them “regular.”\n\nOverall, Id say I did something like 50% of what I put on my plan, which I think is a fairly respectable hit rate for an idealized list of projects. I did things that werent on the list, too.\n\nI did vastly underestimate the amount of time and effort that would be required to move and set the stage for my next few years, but Im glad I had the opportunity to do that on sabbatical -- while only time will tell for sure, I think its highly likely I made significantly better choices given more free time to research and act and mental space to reflect, which will reduce the number of big changes I have to make in the coming years.\n\nId also say I could have done a better job at maintaining a routine. It fell apart once I started doing things I hadnt initially planned on, which meant I stopped doing these posts nearly as regularly, and consequently I stopped making sure I had concrete accomplishments to point at. No worries -- its not like I horribly wasted my time or something -- but if I do a sabbatical again, Ill be sure to keep this in mind.\n\nThen again, maintaining the ability to change plans on the fly is important, too. If you have to rigidly stick to a routine every day, you might as well be employed!\n\n!! Final reflections\n\nBelieved at the beginning and confirmed over the past six months: Extended periods of time off work are underrated, at least in American culture. We focus on retirement as the time when we get to do whatever we want without worrying about being paid for it, but I think thats misguided. You might never make it there at all|CouldWakeUpTomorrowDead. Even if you do, youll probably be old enough that itll be harder to do a lot of things. And youll be missing out on the opportunity to learn new things, plan the next parts of your life, and enjoy your freedom at different stages of your development as a person. I think spreading the time off throughout your life just makes more sense. (Stefan Sagmeister has a TED talk|https://www.ted.com/talks/stefan_sagmeister_the_power_of_time_off/transcript about this which is worth watching.)\n\nNot working doesnt mean sitting around playing video games all day for months, but it doesnt mean never doing that either. A good sabbatical should include a mix of being lazy, taking care of business youve been putting off, and doing new and interesting things you cant easily do while youre working. Just like when youre working, you need to do a mix of things for the maximum amount of enjoyment, fulfillment, and health.\n\nLets talk about money, because when you tell people youre taking a sabbatical, a lot of them either worry about your financial security or are impressed, and many people dismiss the idea of sabbaticals on account of the cost. Its true that if you take time off when youre young, you cant rely on periodic investments of small amounts of money to finance the whole thing. And I spent, uh, quite a bit of money without earning any money to speak of:\n\nimg 2021-sabbatical-spending-totals.png\n\nTo be fair, somewhere around $7,000 of that was expenses associated with moving (buying out the remainder of a lease, paying deposits and fees, buying new items for my new apartment, getting equipment to move my stuff, and probably some other things I forgot). I also had to pay over $600 per month -- literally more than my rent at my old apartment -- for health insurance, which didnt help. Yay America.\n\nNevertheless, the whole thing was more expensive than I anticipated; excluding moving expenses, I had expected I would spend about $2,500--$3,000 per month including the health insurance, and it came to more like $4,000, more than I had been spending in a typical employed month. I thought I just wouldnt spend much money for a while: Id have more time to cook and do things for myself instead of paying others to do them, wouldnt have any commuting expenses, and could just put off any significant purchases. What actually happened was that, having a bunch of free time, I wanted to start new things and take the time to fix things that required buying stuff, sometimes pretty expensive stuff.\n\nI certainly //could// have done this on less money, though, even without doing something dramatic like putting my stuff in storage and moving to a cheaper country. I bought a bunch of stuff during my sabbatical because I knew I had the money. So if you are not blessed with a combination of lifestyle|EfficientLife and occupation that leaves you with enough margin to easily save $33,000 (plus a comfortable buffer), that doesnt necessarily mean you cant ever take a sabbatical, it just means you definitely need to get your finances in good order, make it a priority, and think harder about stretching the money you do save for longer.\n\nIf that still sounds totally unattainable, think about this: while being good with technology gives me significant earning power and many of my readers would not have nearly as easy a time as I did, I am also not rich by any standard definition of the term. Im still only four and a half years out of college, and my household income only barely exceeded the median in Minnesota averaged over the years prior to my sabbatical. (Of course, I can expect to do much better over my entire career than average than someone in a profession which is criminally underpaid, assuming I stay in tech and it continues to be stupidly lucrative, but I didnt borrow my sabbatical money against my future earning power.) The difference is that I started with a moderately strong income and kept my expenses unusually low. Thats the basic recipe for buying yourself freedom, whatever it looks like for you. Im not saying its easy for everyone -- it definitely isnt -- but its possible for a whole lot of people who believe it isnt. If the idea speaks to you, dont dismiss it out of hand.\n\n\n!! My next steps\n\nAs mentioned previously, Ive accepted a position as a software engineer (ish -- my role will likely be somewhat flexible, like my overall persona|Polyspecialization) at RemNote|https://remnote.com, and my first day was today. This opportunity lines up very neatly with many of the things Ive been working on, including software, spaced repetition, note-taking, and online collaboration and community.\n\nIn case anyone is wondering, I remain committed to the Anki and TiddlyWiki communities, which have some overlap with RemNote, and Ive made sure that my continued contributions to them are with the full knowledge and blessing of the company. I dont believe RemNote is a strict competitor or a superset of either tool. While its a powerful learning tool and I hope it will become more powerful and versatile, partly through my work, its also naturally complex; at least in the near future, I think there are many users who will be well served by an effective spaced repetition tool but will have little interest in combining it with notes and a knowledge base, and RemNote will consequently not be a good fit for them. As of now, there are also some types of knowledge that I find a difficult fit for RemNote, although this may change in the future. So there is still a strong place for Anki in the ecosystem as a whole. As for TiddlyWiki, I believe it remains the gold standard if you want to build or customize your own information system without writing software from scratch, which is what I attempt to teach in GrokTiddlyWiki. This Zettelkasten now does pretty much exactly what I want, and I can change it on the fly if I need something else; I have no plans to move to a different system. TiddlyWiki is also fully open-source and doesnt require any centralized infrastructure, which gives it big advantages in some use cases.\n\nThat said, for the right people and the right kinds of learning, RemNote is rapidly becoming a huge coup, and Im excited to be part of (if everything goes right) taking it from the effective-prototype stage to the prime-time stage. Even if it doesnt turn out as well as we hope, this really is a whole new type of learning tool, and giving it our best shot stands to teach the world of knowledge-management tools a great deal.\n\nObviously, with exactly one measly day of work behind me -- if you can even call your first day of a new job “work” -- I dont know exactly how working at RemNote will turn out for me. Still, for those who are skeptical about defaulting to open|DefaultToOpen, I think this is a great example of why sharing your knowledge, enthusiasm, and expertise for free is usually a good deal (see also Why The Best Companies and Developers Give Away Almost Everything They Do|https://blog.ycombinator.com/why-the-best-give-away/). I would never have found this position without becoming engaged in the Internet community of other people interested in these topics by freely sharing my ideas and attention -- nor, indeed, would I even have gotten deep enough into the specific set of interests that make me a good candidate for the job. I wouldnt likely have applied to RemNote because I had barely even used the product at the time and there wasnt anything particularly striking about the position as advertised, but I got interested when the founders saw my work online and floated the idea with me. Most important things happen by accident|AccidentsMakeTheWorldGoRound, but some accidents are more accidental than others -- or, put more seriously, you can exert plenty of influence on what kinds of accidents are likely to happen to you. Thats how I got here.},{title:sabertooth.png,type:image/png,created:20201204032326592,modified:20210306025103697,tags:Image Public,url:https://www.britannica.com/animal/saber-toothed-cat,_canonical_uri:./extimage/sabertooth.png},{title:SaintAndSinner,created:20200411010256346,creator:soren,es:likely,modified:20210626182856742,modifier:soren,tags:Identity PhilosophyOfLife Religion Public Idea,type:text/vnd.tiddlywiki,text:Phrasing of MrMartinLuther regarding each human: we are simultaneously held to be saints and sinners, capable of good and evil, irredeemable and saved. Aside from being a core tenet of my official religion, I think this philosophy has rather a lot to recommend it. We dont have to be completely wretched, but we do have to be humble. It provides ModerationAndBalance to our self-conception. It also encourages Forgiveness, which is good for us.\n\nCf. ArendtGreatLeveler.\n\n!! References\n\n> You come of the Lord Adam and the Lady Eve. And that is both honor enough to erect the head of the poorest beggar, and shame enough to bow the shoulders of the greatest emperor on earth. Be content.\n> ---Aslan, //Prince Caspian//, MrCSLewis},{title:SallyLockhart,created:20240427161933088,creator:soren,modified:20240509110245372,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki},{title:SaltAndStrawIceCream,created:20250623162328850,creator:soren,modified:20250623162329767,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SaltLakeCity,created:20230727203932194,modified:20230727203935283,tags:Place Public,type:text/vnd.tiddlywiki},{title:SanAntonio,created:20230831195357890,modified:20230831195358969,tags:Place Public,type:text/vnd.tiddlywiki},{title:SanFrancisco,created:20230202020110270,creator:soren,elsekey:San Francisco,gis-lat:37.77392372484656,gis-long:-122.41896616174246,gis-zoom:10,modified:20230416225347302,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Visited from January 19 to February 21, 2023, on a sort of workcation. See impressions|ImpressionsOfSanFrancisco.},{title:SanityCheck,created:20200406022629907,creator:soren,es:confident,modified:20210509011752476,modifier:soren,tags:MentalModel Reasoning Process Public Idea,type:text/vnd.tiddlywiki,text:As commonly defined in programming, a sanity check is a quick test designed to yield ImmediateFeedback on whether something is an an expected state (the program, and/or the programmer, is not insane). It doesnt test everything that could go wrong, but it catches some possible errors in a quick and understandable fashion. Usually you fully expect them to pass, but something very bad would happen or the remaining code would be completely borked if they werent true.\n\nSanity checks are a fantastic idea throughout life, and everyone does them constantly -- do I have my keys? did I zip up my pants? you all //did// hear that weird noise, right? Most people dont have a term for that. Its a good term.},{title:SaramagoBlindness1995,author:Saramago,bibliography:LifetimeReading,caption:Blindness,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035915,priority:1,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:1995},{title:SaramagoCave2001,author:Saramago,bibliography:LifetimeReading,caption:The Cave,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035928,priority:2,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:2001},{title:ScalesSkillsAndLeakyAbstractions,created:20200329161335688,modified:20200509031646157,tags:Sink Systems TheControlAltBackspace Public,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/simplicity/scales-skills-and-leaky-abstractions/#left-pad,text:TheControlAltBackspace article about how AbstractionsLeak and how we can handle that, particularly with regard to the OverlargeDependencyWeb of many systems today.\n\n{{!!url}}},{title:ScarceAttention,created:20210127152757619,description:In an information economy, most peoples scarcest resource is attention.,es:likely,modified:20210821224739715,tags:Productivity Psychology Public Idea,type:text/vnd.tiddlywiki,text:As an industrialized society right now, I was discussing with M.|PrivatePerson and P.|PrivatePerson recently, I think our ScarcestResource is time. But coming back to it a bit later, I think over the last twenty years or so its been shifting from time to attention. Most of us actually have quite a bit of ability to find time, in comparison. Our attention is being stolen from us and we dont even realize it. See DeepWork, AddictiveDesign, and RampantNotifications. Of course, these things are related; the lack of attention means were unable to focus it on preserving our time.\n\n!! References\n\n> Like fingers pointing to the moon, other diverse disciplines from anthropology to education, behavioral economics to family counseling, similarly suggest that the skillful management of attention is the sine qua non of the good life and the key to improving virtually every aspect of your experience.\n> ---DeepWork, MrCalNewport\n\n\u003C\u003Cclarify>>\n\n> The big secret to efficient, creative, and productive thinking and action is to put the right things in your focus at the right time.\n> ---GettingThingsDone, MrDavidAllen},{title:ScarcestResource,created:20200324022924845,creator:soren,es:confident,modified:20210826122154013,modifier:soren,tags:Systems Environmentalism Public Idea,type:text/vnd.tiddlywiki,text:Your ability to proceed is only as good as your scarcest resource. This is a specific case of WorstBottleneck: bottlenecks also often occur because of process issues rather than resource constraints.\n\nLike with a generalized bottleneck, its valuable to understand our scarcest resource. It changes on both a civilization and an individual level over time, and most of our energy should be directed at conserving the scarce resource where its not necessary so as to direct it to where its most useful, as when that resource runs out all our other efforts will be futile.\n\n\u003C\u003Cstretch ScarceAttention>>\n\nThe worst bottleneck should be made subject to strict Prioritization, and efforts made to widen the bottleneck if such is possible.},{title:ScareQuotes,created:20200201051527164,modified:20201204041548007,tags:Definition Writing Public Idea,type:text/vnd.tiddlywiki,text:The official term for quotes that dont actually quote anything but are instead used to set off text for another purpose, like indicating its sarcastic or its a phrase the author doesnt particularly like or think is fully descriptive of the situation but wants to use anyway for some reason. It has been argued the latter use is somewhat poor and dishonest, but it can be pretty useful too!},{title:ScarletLetter1850,author:Hawthorne,bibliography:LifetimeReading,caption:The Scarlet Letter (+),created:20210703170128000,genre:Literature,medium:book,modified:20210705214035936,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1850},{title:SchellingPoint,created:20240617030149337,creator:soren,description:A place or idea that is a natural meeting point in the absence of coordination.,es:confident,modified:20240624013550208,modifier:soren,tags:Idea Definition Public Psychology,type:text/vnd.tiddlywiki,text:{{!!description}}\n\n\u003C$m2.float source\red-square.png\ width\200\/>\n\nFor instance, consider a game where you and another player, without ever communicating with each other, each pick a square from the figure on the right. If you pick the same square, you win. Which square do you pick?\u003C\u003Cfnote \If you say “the entire figure,” you win a Smart-Ass Award|HackingPedantryAndScience.\>>\n\nSelecting the red square is the experimentally strongest strategy (and you probably did that). Thats not because the red square is theoretically better in any way -- since you have zero information about the other players actual strategy, every square is a Nash equilibrium. Rather, you naturally assume that you and this person youve never met are trying to cooperate. If both of you are trying to cooperate and think about it for a few moments, youll both come to the conclusion that you should pick whatever you think the other person will pick. This means you should also pick whatever you think the other person thinks //you// will pick, and so on to infinity. When you think about the implication of that recursion and the fact that you have no information whatsoever about the other person, it becomes clear that you should pick whatever option humans writ large find //most salient//. If you agree on the definition of salience, youll pick the same answer. And in many cases, there actually is a single option thats clearly most salient -- in this case the red square.\n\nA more complex and more interesting example is a classic game where you send two complete strangers to NYC on some particular day and they have to try to meet each other. They dont have any contact information -- or any information about each other at all -- except that theres another person in NYC today playing this game with them.\n\nThis game sounds impossible to win at first, but following the maximize-salience strategy actually makes it fairly tractable. The //most salient// place will have a few characteristics:\n\n* Its one of the first few places you naturally think of. (Chances are good other people will have a similar set of first places they consider.)\n* Its a place almost everyone knows about. Maybe you and the other person have knowledge of some arcane spot in New York which is a perfect meeting place -- but since you dont know who they are and whether they would, these are right out. This is sort of like how, when youre playing a trivia game and cant decide between two possible answers, it often makes sense to choose a fairly well-known one rather than an extremely obscure one; since questions are no fun if nobody can answer them, theres a limit to how obscure the answers will get.\n* Theres no other similar possible meeting place that shares many of the same characteristics. For example, the arrivals hall at JFK is convenient if the players dont live in New York, and its a natural meeting place, but ~LaGuardia would make almost as much sense, so both are poor choices. In the red-square game, we could imagine a strategy based on the position of the squares rather than the color, but here you could imagine different approaches, like “pick the top-left square because its first in reading order,” or “pick the bottom-left square because its first if you start graphing them in Quadrant I.” On the dimension of color, the only sensible choice is picking the red square, so you should assume the other player will also use this dimension.\n* Ideally, it has //many// good characteristics as a meeting place, not just a couple. This raises the likelihood both that the other player will think of it at all, and that they will select it over other candidates (if theyre following the same thought process as you, theyll see that this one is more salient).\n\nIf you both explore enough space to hit all the obvious possibilities (this actually wont be too large, because the acceptable space is only a few places), and youre following a similar strategy, chances are pretty good that you will converge on the same location.\n\nConventional wisdom says that in this particular game, you should go to Grand Central Terminal, next to the info booth in the Main Concourse with the clock on it, at noon. As before, theoretically speaking //any// point in New York would be a Nash equilibrium due to the absence of any information about the other players strategy. But Grand Central is centrally located and iconic, and the Main Concourse has a long history of being used as a meeting place. The info booth is the most salient point in the room, as well as the natural place to go in the station anytime youre unsure where to go. Noon is the most salient time; any other time you might pick seems less likely to yield convergence (in particular, I think if you pick morning, you figure the other person might pick afternoon, and vice versa, but noon is neither, and also the average of the other possibilities). Of course, youd ideally show up before noon and, if you hadnt met the other player yet, stay after noon, but noon is the center of your search.\n\nIn experiments this strategy is consistently the most common choice, which due to the structure of the game means its also the best strategy.\u003C\u003Cfnote \Im not aware of anyone whos actually sent subjects to NYC -- though it would be pretty fun -- but its easy to run as a thought experiment!\>>\n\nAs noted earlier, one reason this strategy is so great, and so often arrived at in practice, is that it //stacks// several criteria. We mentioned that the arrivals hall at JFK is convenient and a natural meeting place, but its not iconic and not unique. On the flip side, the Statue of Liberty is iconic and there are no similar places to compete with, but its quite inconvenient to get to and would be a very odd place to meet under normal circumstances.\u003C\u003Cfnote \Unless you were meeting to tour the Statue of Liberty, I suppose.\>> Neither of those options would be particularly bad strategies, but Grand Central combines the good and eliminates the bad parts of each, so its plainly //better//, and its hard to imagine choosing one of the other options once youve thought of Grand Central.\n\n{{SchellingPoint/p||PrivateChunk}}},{title:SchemaBound,created:20220214033247431,creator:soren,description:A state of mind in which a schema prevents someone from being able to think about the world in certain ways or notice certain things.,es:confident,modified:20251010022105102,modifier:soren,reviewed:20231009,tags:SorenConcept Idea Imagination Creativity Public,type:text/vnd.tiddlywiki,text:One is said to be //schema-bound// when one extrapolates ones own present experience (schema) to all of time and space, demonstrating an inability to imagine how things could be significantly different. Its often the result of trying too hard to figure out how you could get to a new state from a current state, rather than backing up and trying to imagine the new state by itself (see also ActualRequirements). Schema binding often causes you to miss things that are right in front of you|ExploringTheFuture.\n\nFor instance, Americans who live in built environments that require a car to get around often dont understand what other solutions are possible, so they conclude theres no way to convert the places they currently live. Or many people dont have an understanding that its possible to deeply love a friend they dont want to have sex with, so they dont see the opportunities they might have to develop a relationship like that when they arise.\n\nThis may apply to what one wants for oneself|PeopleDontKnowWhatTheyWant.},{title:SchemaInfection,created:20210615203142968,creator:soren,description:Becoming aware that others have certain experiences may make you more likely to have such experiences too, whether theyre good or not.,es:confident,modified:20250503160444200,modifier:soren,tags:Imagination Information Psychology Public Favorites Idea,type:text/vnd.tiddlywiki,text:A type of InformationHazard common in disciplines that are highly dependent on Imagination and subject to the PlaceboEffect, such as LucidDreaming or drug trips|PsychedelicDrug: on hearing about someone elses experience or way of interpreting it (“schema”), you will treat that as evidence that the system will behave that way for you too, and thus become more likely to have such experiences yourself (you have been “infected” by it).\n\n{{SchemaInfection/p||PrivateChunk}}\n\nThe term is typically used for schemata one would prefer //not// to adopt: for instance, that doing some particular task is really difficult, or a particular event often leads to long-term emotional problems, or an imaginary world behaves in a way you dont enjoy.\n\nThe challenge comes because some incoming schemata are beneficial: for instance, learning that many people can cure their depression by doing LSD under controlled circumstances, or that most people can easily fly in their dreams, seems like an adaptive belief|BeliefAsInstrument with little downside. But there is no obvious way you can figure which ones will be beneficial and which will be harmful prior to learning about them, at which point you will already be potentially infected!\n\nIts unclear to me to what extent one can choose to ignore a schema one learns about but dislikes, consciously deciding it doesnt apply to ones PersonalMythology. My guess is some, but not as much as you might hope. And like addictive substances or viruses, different people are almost certainly more or less susceptible to both the phenomenon as a whole and infection by specific schemata.\n\nI dont see any class of Bostroms treatment|InformationHazards2011 of information hazards that exactly covers schema infection. It seems to be a blend of several types:\n\n* Close but much too general is the //mindset hazard//: “Our basic attitude or mindset might change in undesirable ways as a consequence of exposure to information of certain kinds.”\n* Its also related to the //spoiler hazard//, where you might prefer not to know how a story or experience will turn out so as to be able to construct that experience for yourself.\n* And lastly, its a form of //idea hazard//: “A general idea, if disseminated, creates a risk, even without a data-rich detailed specification.”\n\nBizarrely, I cannot find|ThingsYouCantFindOnTheWeb //any// hits on Google that seem to refer to this usage of the term. I am certain I did not make it up, but now I am wondering if I have the phrasing slightly wrong!\n\n!! References\n\n\u003C$m2.x number\1\>\nIn EWLD, MrStephenLaBerge describes a particularly amusing example in which an urban legend that one cannot say ones own name in a dream without awakening spread to a number of people -- who then “confirmed” it by self-experiment after accepting it. ~LaBerge concluded this was absurd and there was absolutely no reason this would be the case, and when he tried it, nothing special happened. (This example suggests that at least in some circumstances there is some potential for self-control: although was he really in control, or did he just have low enough belief in the legend to begin with that it didnt infect him? Schema immunity as it were?)\n\u003C/$m2.x>\n\n\u003C$m2.x number\2\>\n\nI sometimes worry that the demi|DemiPerson community is plagued by schema infection on the topic of our ability to date. See MrZviMowshowitz, \u003C\u003Crt 12925>>:\n\n> A similar pattern on the personal level is what happens if we now more reliably learn about, understand and process information about bad things that have happened to us, difficulties and disadvantages we have, and ways in which we diverge from the normal, that isn’t going to always make us happier or better off, adjustments made in response are often harmful. One way that happens is that we calibrate our understanding of a problem based on the group that couldn’t hide the problem, and then tell the mild cases that could have muddled through that they have this terrible problem, and how bad it must be.\u003C\u003Cfnote \Obligatory note, “problem” is the wrong word to use for being demi -- “incompatibility with the prevailing social scripts” would be more accurate -- but the idea is the same.\>> It often goes poorly. The correct level of walking things off is not zero.\u003C\u003Cfnote \In this case I think we can get a win-win by connecting with the community and understanding ourselves better by self-identifying, but just refusing to accept that something wont work for us until weve tried it and seen|TryItAndSee. Start by assuming the “problem” isnt that bad for you, and only accept that it is once youve done an experiment.\>>\n\nIn other words, we see people who havent succeeded because they have it the hardest (experiencing attraction in a way least compatible with traditional dating) and conclude it wont work for us either, when the reason it isnt working is just that we havent tried hard enough|MoreDakka.\n\n\u003C/$m2.x>\n\n\u003C$m2.x number\3\>\nRokos Basilisk|https://en.wikipedia.org/wiki/Roko%27s_basilisk (content warning: learning about the basilisk may subject you to blackmailing by future beings)\n\u003C/$m2.x>},{title:School,created:20220623010144091,creator:soren,es:confident,modified:20220623010450031,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:Ideas about the institution of schools (preschool, elementary school, high school, etc).\n\nNot to be confused with Learning, on the process of assimilating information or experience, irrespective of what methods, tools, or institutions you might use to assist in this process.},{title:SchoolFlawsAsCaringLevelCollapse,created:20220623004456235,creator:soren,description:Schools and teachers must often create and enforce stupid and petty rules because they have limited ability to discipline their worst students.,es:likely,modified:20230329214735910,modifier:soren,tags:Idea Sociology School Public,type:text/vnd.tiddlywiki,text:One reason that schools tend toward|UnrealisticStrictnessOfSchool rigid, strictly enforced, and often stupid rules: realistically you have to have one set of standards that maintain order and at least appear to have societal benefits for both people who care and people who dont care at all. Furthermore, teachers, or schools as a whole, have very little power to do anything about students who dont care. In the real world|UnrealisticStrictnessOfSchool, people who dont do any work get fired, but in school you cant expel someone for not caring! Indeed, even a students parents cant really do much; the equivalent of the adult world would be completely denying your child food or transportation if they didnt do what they were supposed to, and that would obviously be child abuse.\u003C\u003Cfnote \So, is not having a sufficient social safety net //adult abuse//? Maybe UBI is an ethical obligation by that logic...I have to admit I cant even quite find the error here! Some people would probably say there isnt one.\>>\n\nTracking students can help somewhat with this, because dividing the class into multiple speeds / difficulty levels allows you to defensibly maintain multiple sets of standards. (Although someone who didnt care would be able to choose to take “honors” classes in many frameworks, this isnt a problem in practice because people who dont care almost universally self-select out of them: if you dont care, why would you purposefully subject yourself to a higher set of standards and the ridicule of a class full of people who do care?). However, in my experience, while this certainly did help keep the classes more enjoyable and smooth, because people actually did the work and were ready to participate, I cant say that I saw a big difference in the arbitrariness and stupidness of rules in my “honors” classes compared to my “normal” classes.\n\nPart of this is that tracking cant get you out of the actual school rules having to be the same across the whole school (unless you literally start a second school, which has its own problems). Everyone has to get permission from a teacher to go pee because some small set of students would regularly abuse the privilege (aka human right) of leaving the room for a couple of minutes.\n\nIm not sure there is a solution to this problem|ProblemsAndPredicaments in anything resembling the traditional school framework. It seems like a problem largely intrinsic to institutions. Fighting the impulse to AddAnotherRule can help most institutions avoid accumulations of nonsense rules aimed at the lowest common denominator, but schools have a substantially limited ability to avoid adding rules because not adding rules depends on being able to hand down common-sense decisions with serious consequences and with (nearly) absolute authority. A court can do this; an employer can do this. A school generally cannot do this, because (1) any real consequences it can impose require a great deal of bureaucracy, and (2) angry parents and government bodies will be after their heads if theyre ever unable to point to specific rules and decision processes that back up their decisions.},{title:SchoolOfHardKnocks,created:20200214141335131,creator:soren,es:confident,modified:20210509010400351,modifier:soren,tags:PhilosophyOfLife Risk Learning Public Idea,type:text/vnd.tiddlywiki,text:Many things have to be experienced to be understood|HaveToExperienceItToUnderstand. Some of these things are ultimately quite painful (but this is OK, as there is NoMeaningWithoutFailure). These lessons belong to the SchoolOfHardKnocks.\n\nOn the other hand, these are often the most valuable lessons. We consider ourselves lucky if we learn them and come out the other side in good shape, because then were stronger for it.\n\nA contemporary (2020) problem seems to be HelicopterParents, or other parents, not allowing their kids to learn from this school|ChildhoodWithoutDanger out of fear or liability concerns or just wanting their kids not to have to suffer. Some evidence suggests its producing people unfit to be proper adults. The PassingDangerPhilosophy is perhaps an adult version of this need -- though in the particular case of passing, there better not be a physical knock!},{title:SchrödingersCat,created:20200324030701417,modified:20200324030815596,tags:Physics Public Idea,type:text/vnd.tiddlywiki,text:Classic ThoughtExperiment which claims that a cat can be alive and dead at the same time (kind of; thats a popular oversimplification and so difficult to conceptualize that its always going to be hard to understand what it really means) due to quantum uncertainty.},{title:Science,created:20210516225106263,creator:soren,modified:20210828141508254,modifier:soren,tags:Public Idea,type:text/vnd.tiddlywiki},{title:ScienceVsScientism,created:20200819030337089,creator:soren,description:Scientism is a seductive, distorted mockery of science used to provide illusory legitimacy for policies and worldviews.,es:likely,modified:20251015215329304,modifier:soren,tags:Science Politics Public Favorites Idea,type:text/vnd.tiddlywiki,text:Concept due to MrNassimNicholasTaleb in SkinInTheGame2018: scientism has the trappings of science and superficially appears to be science, but fails to actually apply the ScientificMethod. Instead, its used to make something look legitimate. (Compare PseudoProfoundBullshit.)\n\nThe Meta-Rationality project defines|https://metarationality.com/nutrition scientism as “the eternalistic distortion of science into an authoritative source of meaning.”\n\nI think a shocking amount of what passes for scientific thought and scientific study in todays world is really scientism (and I think Taleb agrees with me, though maybe not always on the specifics, which from here on out are my own). The longer I think about this, the more I think most of the problems were seeing with science today may be because //its not actually science//.\n\nVery much in the spirit of Taleb, perhaps a table of my understanding is warranted:\n\n|!Science|!Scientism|\n|Intrinsically beautiful.|Impressive to the uninitiated.|\n|Basically simple.|Basically complex, fragile, and fake.|\n|Most of the physical sciences.|Large portions of the soft sciences|TheQuickFix2021, especially when funded by someone with an axe to grind.\u003C\u003Cfnote \To clarify, my claim isnt that fields like sociology or economics are useless -- the things they inquire about are fascinating and worthwhile -- just that the way they are often studied and interpreted currently is inappropriate.\>>|\n|Relies on routinely reproduceable experiments.|Relies on opaque statistical manipulations|FallibilityOfStatistics and publication bias.|\n|Tool of education and understanding.|Tool of manipulation and oppression.|\n|Usually cheap, accessible, and easy to reproduce.|Usually expensive and full of (often unnecessary) technical terms and equipment that keep people from inquiring too closely into methods.|\n|Uses the scientific method.|Uses a bureaucratic, incentive-based framework that retains enough vestiges of the true scientific method to appear scientific.|\n|Practitioners must be full of ingenuity and curiosity|HackingPedantryAndScience.|Practitioners must have a result in mind and lots of money or an important-sounding researcher on their side.|\n|Practitioners are playful|Play, lighthearted, and often pursue apparently silly or worthless lines of inquiry for no other reason than an irrational desire to know the answer.\u003C\u003Cfnote \Of course, paradoxically, this attitude often leads to more interesting results than focusing on things that seem obviously important, because it is only when you loosen up your grip on your goals that you notice the unusual, unexpected things that often drive science forward. See also ExploringTheFuture.\>>|Practitioners take themselves seriously and focus on lines of inquiry that seem likely to result in publishing a Very Important Paper.|\n|Cheerfully admits|IntellectualHumility its own shortcomings and likelihood of being superseded.|Pretends at each moment that the current findings are the last word on the subject.|\n|Interested primarily in discovering the truth, so looks forward to future research revising or contradicting it.|Insists it is always correct and to be fully trusted, so cannot publicly admit its been wrong.|\n|Invites the reader to seek their own understanding, explore contradictory perspectives, or (when practical) try the experiments themselves.\u003C\u003Cfnote \See also The Only True Wisdom Is Knowing That You Cant Draw a Bicycle|https://slimemoldtimemold.com/2022/03/23/the-only-true-wisdom-is-knowing-that-you-cant-draw-a-bicycle/: “If you dont think people will be able to replicate it at their own bench, are you sure you think youve discovered something?”\>>|Demands that the reader unquestioningly accept the result //because science//.|\n\nOf course, the line isnt always as bright as all that; phrenology may have once appeared to be science but is clearly scientism, whereas particle physics is extremely complicated and expensive but is presumably science (we can argue about whether its worth the money, but its hard to imagine anyone funding it has a political agenda or is falsifying their results with bad statistics). And a particular discipline or department or person or study does not have to be 100% one or the other (indeed, few things are ever so simple).\n\nI dont believe that most people actually doing science-y things intend to produce scientismic (?) work, but nonetheless it happens. Scientism is for the most part a systemic problem, not an individual one, caused by the interaction of funding sources, institutions, scientists, the media, and the public. Its troubling that the systems surrounding science have grown into a framework thats able to support scientism without anyone really noticing thats happened, and that many people are complicit in it, often due to their own unintentional biases and milieux. And of course, its downright dangerous that our veneration of science has reached the level where we cant tell it apart from scientism. When we uncover how fake scientism is, without having a clear mental model of scientism and the ability to separate it from science, it is natural to stop taking actual science seriously as well, and thats exactly what were seeing with climate denialism, the anti-vaccine movement, and the increasing volume of conspiracy theories in general.\n\nSomeone pointed out to me the tendency of certain scientismists to assert that science is able to explain everything, and if it cant explain something, then that thing is not worth explaining. This tendency seems like it both drives scientism (because it creates an unwarranted optimism toward scientific thinking in fields science is comparatively poor at studying) and results from the hubristic attitude of scientism. See ViciousCircle.\n\nA major contributor to scientism is the general lack of StatisticalLiteracy in todays world. The reason this contributes is that people interpret scientific results, or results that are on the border, as meaning things they do not|StudiesDontProveThings, often to make a good news story or support their own agenda. (They might do this honestly, because they dont understand what the results mean, or dishonestly, because they know those who read their spin on the results wont understand.) This essentially turns perfectly good studies into scientism.\n\n!! References\n\n> If we find something we cant understand we like to call it something you cant understand, or indeed pronounce. I mean if we just let you go around calling him a Rain God, then that suggests that you know something we dont, and Im afraid we couldnt have that. No, first we have to call it something which says its ours, not yours, then we set about finding some way of proving its not what you said it is, but something we say it is.\n> ---scientismist, //So Long, and Thanks For All the Fish// (\u003C\u003Crt 10730>>)\n\n{{ScienceVsScientism/p||PrivateChunk}}},{title:ScientificControlGroup2014,caption:The Control Group Is Out Of Control,created:20200902014549748,medium:article,modified:20210420114829993,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://slatestarcodex.com/2014/04/28/the-control-group-is-out-of-control/,year:2014,text:SlateStarCodex article considering ParaPsychology as a \control group\ for the practice of science, a fascinating idea: that is, the phenomena studied by parapsychology dont exist (at least according to Scott Alexander) and thus the fact that it continues to find strong results using the standard methods of science suggest that science is little better than \placebo scientific methods\ at finding truth.},{title:ScientificMethod,created:20200227032613678,creator:soren,es:likely,modified:20220509011742619,modifier:soren,tags:AgilePhilosophy Learning Information Public Science Idea,type:text/vnd.tiddlywiki,text:Science is an antifragile|AntiFragility, AgilePhilosophy-approved way of understanding the world based on ContinuousImprovement and iteration|IterativeProcess. Isolate and try one thing at a time, record and share and learn from the ImmediateFeedback, accept and benefit from missteps.\n\nThe scientific method is not a rigid collection of //steps//, as is often taught in schools. It is more of a philosophy. So while there is no one right process to use to “do science,” its nevertheless normally possible to look at some work and determine whether the process used consistent with this philosophy (and is thus science) or not.\n\nIts interesting to consider to what extent science is an eventually consistent|EventualConsistency process -- it shares many philosophical properties, though by the strict definition it probably fails, since there is no way to tell within the system whether it has converged and it might never happen.\n\nScientism|ScienceVsScientism is characterized by not using or intentionally abusing the scientific method, ideally in a way that still makes it look like youre using it so you dont lose credibility.},{title:ScientificPragmatismWithPsychedelics,created:20210122023525398,creator:soren,es:possible,modified:20221114213000939,modifier:soren,tags:Science Imagination Health Neuroscience Public Idea,type:text/vnd.tiddlywiki,text:The study and practice of therapy with PsychedelicDrugs might be an interesting antidote to the kind of one-sided materialistic thinking that pervades science|Science. Of course, in one sense one-sided materialistic thinking is exactly what science is and should be, so I dont want to be too hard on it; on the other hand, it seems that we might benefit from including a bit more pragmatism into even our science. By pragmatism, I mean, if it works, who cares? So theres some silly ritual|Ritual around giving people their medicine, so the PlaceboEffect is an important part of a treatment: so? Its nice to be able to explain things, but some things are just, at some level or another, inexplicable, and its a real shame to throw away interventions that work and experiences that are deeply meaningful, that have a scientifically demonstrable effect, because they seem a little woo-woo.\n\nIdea triggered by reading HowToChangeYourMind2018.},{title:ScopeCreep,created:20200428193712009,creator:soren,es:confident,modified:20211026233641544,modifier:soren,tags:Process Systems Idea Public,type:text/vnd.tiddlywiki,text:The well-known effect of extra ideas being gradually added to a project plan or a to-do list, after the scope was already agreed on.\n\nScrum Sprints are often subject to this issue, easily identifiable by the BurndownChart ticking up during the course of the sprint. To prevent this, any items that absolutely have to be added to the sprint without prior planning (pants-on-fire issues in a BugFireLane that dont fit into the unplanned work budget, for instance) need to have items //removed// from the sprint to compensate.\n\nG.Y.|PrivatePerson once called this “creep scope” in my training class at TheFederatedInsurance and didnt see the problem with it, to general hilarity. I probably will never not be able to think of it as “creep scope.”},{title:ScrumBacklogDivision,created:20200326211237196,modified:20200516173058129,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Imagine you have an organization that divides its work between teams. How should ProductBacklogs be divided up?\n\nAnswer according to AgileInTheRealWorld: one backlog per product. That might span multiple teams, but its important for people working on the same product to be able to see all the work. Coloring items on the board may be helpful in identifying which things the team should typically work on. However, there might be room for crossing normal team boundaries if one team is overwhelmed, for example.\n\nThis still raises the question of, at say TheFederatedInsurance, what the heck is a \product\ for us?\n\nCompare SprintSynchronization.},{title:ScrumBugsAndDebt,created:20200326205417602,modified:20200326205700109,tags:ScrumMethodology Code Public Idea,type:text/vnd.tiddlywiki,text:AgileInTheRealWorld devotes a section to dealing with bugs and technical debt. Many Agile/Scrum resources seem to believe that all practitioners are starting with a clean slate and no bugs or technical debt, which is pretty hilarious.\n\n* We probably need to do BugPrioritization, both to start and then as you continue along, because we dont write bug-free software.\n* We similarly need to do TechDebtBudgeting to help pay down our existing debt and improve processes continuously|ContinuousImprovement.\n* If we are regularly dealing with unscheduled interruptions for critical bugs, obviously the best way is to stop having critical bugs and improve our systems so they happen less often, but sometimes this is a fact of life (especially if our team is stuck doing general support too). In this case, a BugFireLane can help reduce the impact of these bugs on our sprint planning.},{title:ScrumGuide,caption:The Scrum Guide,created:20200326134425088,format:ebook,medium:book,modified:20210606223211562,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://scrumguides.org/scrum-guide.html,year:1995,text:Quick 20-page resource recommended by AgileInTheRealWorld. The definitive Guide (reality is frequently inaccurate|RealityInaccurate). Read by myself, later with F.I.B.C.|PrivatePerson (the 2017 version).\n\nEmbedded full text: 2020-Scrum-Guide-US.pdf.\nA previous version is at 2017-Scrum-Guide-US.pdf.},{title:ScrumMaster,created:20200326140858291,modified:20200428195310689,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Special role in the ScrumMethodology. Responsible for coordinating team members, communicating with the ProductOwner, and removing obstacles that prevent the team from getting their work done.\n\nThe Scrum master and the team are responsible for determining how much work will be taken on during a SprintPlanningMeeting, not the ProductOwner -- this not only produces better estimates of how much can actually be completed, but does a much better job making the team take responsibility for actually getting it completed. Its hard to be motivated to put in a bit of extra work or tighten up your efficiency to meet a deadline when the deadline was imposed by someone else over your objections!\n\nSee ScrumMasterPoUnification for a common pitfall.},{title:ScrumMasterPoUnification,created:20200326141047836,modified:20200326141311433,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Except in highly unusual situations where people know exactly what theyre doing (e.g., Microsoft has taken this approach), the ScrumMaster should not be the same as the ProductOwner. The collaboration and tension between the two roles is important, and being a good PO is usually a full-time job that prevents adequate attention to the SM responsibilities.\n\nIf this happens to a team, the best long-term solution is to train up a new ScrumMaster. While being a good SM is a skill, its also not that hard to learn -- //much// easier and less political than creating a new PO.\n\nRedistributing the Product Owners work (a common attempted solution) is usually a poor idea; the products vision typically suffers and becomes fragmented, and there is nobody to make effective executive decisions on priorities (the PO can act in this role but doesnt have the background necessary to do a good job).\n\nSource: AgileInTheRealWorld.},{title:ScrumMethodology,color:#6c6cff,created:20200326133456402,icon:$:/core/images/list-bullet,modified:20200516163358047,tags:Process Code Public Idea,type:text/vnd.tiddlywiki,text:Scrum is the most popular software-development methodological implementation that accords with the AgilePhilosophy. The official ScrumGuide describes it as easy to learn and hard to master.\n\nThe definition of the ScrumGuide:\n\n> Scrum (n): A framework within which people can address complex adaptive problems, while productively and creatively delivering products of the highest possible value.\n\nScrum is specifically designed to provide information on the effectiveness of your work technique so you can improve it. In other words, it is an empirical|Empiricism process. It is IncrementalAndIterative. In contrast, the WaterfallMethodology is a plan-everything-perfectly-ahead process -- maybe an intellectual or faith-based process (one where your faith is usually misplaced).\n\nScrum has three pillars|ThreePillarsOfScrum, four events|FourEventsOfScrum, and five values|FiveValuesOfScrum.\n\nScrum teams are //self-organizing// and //cross-functional//: they determine how best to approach their work themselves and have no need of skills not present on the team to complete their work.\n\nAgileInTheRealWorld identifies some common problems implementing the system in non-theoretical contexts|TheoryAndPractice and suggests workarounds.\n\nThe official ScrumGuide goes into details on the methodology.},{title:ScrumProductOwnerAbsent,created:20200326140537000,modified:20200326142114279,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:A common problem with people adopting the ScrumMethodology: the ProductOwner -- a rather important part of the process! -- is not participating.\n\nAppropriate solutions depend on exactly how this is manifesting:\n\n* PO doesnt come to meetings, is poor at communicating, or isnt interested in the process: assign a ProxyProductOwner.\n* PO is constantly falling behind and cant answer questions, doesnt complete stories, and isnt ready for meetings: apply ProductOwnerDelegation.\n* PO is the ScrumMaster and cant give adequate attention to both responsibilities: ScrumMasterPoUnification.},{title:ScrumSprintLength,created:20200428191153741,modified:20200512025037196,tags:ScrumMethodology Process Public Idea,type:text/vnd.tiddlywiki,text:How long should Sprints be? The ScrumGuide says no more than a month, but leaves it at that.\n\nOverall, it depends on the team, but in general they should usually be as short as seems reasonable. This is for a simple reason, according to DevOpsInTheRealWorld: longer sprints can easily mask inefficiencies. When you start having to deliver a product in a week, you cant afford to have an overly long manual testing phase, for instance.\n\nThe AgilePhilosophy also suggests in its principles (#3) that shorter timescales are generally preferable, though it grudgingly permits much longer timescales than Scrum does.\n\nMany teams do well starting with, say, a month, and then challenging themselves to drop down to three weeks, then two weeks or even one week.},{title:SeasonOfThaw,created:20210122012917519,creator:soren,description:Begins late February to mid-March, ends early to mid-April. The cold starts to break, the snow starts to melt, a bit of sun starts to peek through, and you realize its not going to be winter forever. People go on spring break and scramble to do winter activities they didnt get around to before all the snow melts. Usually theres at least one more big snow that everyone complains about. A season of optimism engendered by the weather.,es:likely,modified:20220308011030954,modifier:soren,tags:Nature Public Idea,type:text/vnd.tiddlywiki,text:One of the EightSeasons. {{!!description}}\n\nThis might be my favorite moment in the cycle of seasons. Fall is my favorite of the four traditional full seasons, but if we extend it to more transcendental and loosely defined seasons, thaw definitely wins.\n\n> The snow has not yet left the ground, but spring is already calling on the soul. If you have ever convalesced from a grave ilness, you know the blissful state when you swoon from vague presentiments and smile without any reason. Evidently that is the state nature is experiencing now. The ground is cold, mud mixed with snow sloshes under your feet, but everything around is so cheerful, affectionate, friendly! The air is so clear and transparent that it seems if you climbed up on a dovecot or a belfry you could see the whole universe from end to end. The sun shines brightly, and its rays, playing and smiling, bathe in the puddles along with the sparrows. The river swells and darkens; it is already awake, and will start roaring any day now. The trees are bare, but already living, breathing.\n> ---“Spring”, MrAntonChekhov (ChekhovFiftyTwoStories)\n\nAnother version of the sections of spring:\n\n> The cold goblin spring of the crocuses was past. The frail and chilly fairy spring of the daffodils was past. The springtime for mankind had arrived, and the blooms of the lilac bowers outside Redwines church hung fatly, heavy as Concord grapes.\n> ---//The Sirens of Titan//, MrKurtVonnegut, p. 223\n\n{{SeasonOfThaw/p||PrivateChunk}}},{title:SeattleWashington,created:20250627154420978,creator:soren,modified:20250627154422407,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SecondAmendment,created:20201222045619374,creator:soren,es:confident,modified:20211215044651981,modifier:soren,tags:Politics Idea Public,type:text/vnd.tiddlywiki,text:Part of the UnitedStates Bill of Rights:\n\n> A well regulated Militia, being necessary to the security of a free State, the right of the people to keep and bear Arms, shall not be infringed.\n\nProbably the most controversial, and arguably most ill-advised, component of the bill. People disagree on the particulars of most of the other amendments, but many people think the Second Amendment protects a right that in 2020 shouldnt exist at all!\n\nI lean skeptical but am overall undecided|NoOpinion on whether this should be a fundamental right. There should definitely be //some// regulation of weapons, but thats perfectly consistent with the amendment. As for whether the benefits of an armed populace are worth the downsides, I think the statistics are so muddled that its difficult to get a clear answer without diving in further than Im willing to at this point in my life (though if you listen only to one sides statistics, youll think its pretty straightforward; biased and dishonest statistics seem to be the norm on questions of GunControl). See GunsAndTotalitarianism for an interesting argument that would suggest the comparative death statistics arent the thing to worry about (but still requires statistics of a different kind to make a decision!).\n\nI will say that the Second Amendment is very //American//, and I dont think thats solely because the idea of America grew up after it was passed; in a hypothetical world in which there had never been such an amendment at all and we were today discussing whether all the rest of American culture and society was consistent with people arming themselves for their own and their countrys defense, I am pretty sure I would still have a hard time claiming it wasnt.},{title:SecondSex1949,author:Beauvoir,bibliography:LifetimeReading,caption:The Second Sex,created:20210703170128000,genre:Sociology,medium:book,modified:20210705214035944,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1949},{title:SecondShiftIntellectual,created:20200226012841386,es:confident,modified:20210623024219325,tags:SorenConcept Public Idea,type:text/vnd.tiddlywiki,text:My term for the class of people who maintain a boring job to keep themselves supported, then do all sorts of scientific or literary or other work in the evenings, keeping themselves busy and becoming some of the best-respected creators.\n\nMrNassimNicholasTaleb actually recommends this approach for many people.},{title:SecondWorldWarChurchill1953,author:Churchill,bibliography:LifetimeReading,caption:The Second World War,created:20210703170128000,genre:History,medium:book,modified:20210705214035959,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1953,text:Length: !!},{title:SecretCommonwealth2019,bibliography:,caption:The Secret Commonwealth,created:20200127021239092,creator:soren,format:hardcover,isbn:9780553510669,medium:book,modified:20220527140630916,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:2019,text:Second volume of the BookOfDust. Came out in late 2019. A wonderful examination of Imagination, Religion, rationalism, and authoritarianism and contemporary social issues.\n\nThis subtractive-perfection|PerfectionIsSubtractive one-sentence Amazon review was published just after the book:\n\n> For those of us who feel we have lost our imaginations, Lyra shows us the way to find them again.\n> ---\u003C\u003Crt 10673>>},{title:SecretHitler,created:20230908063622437,modified:20230908063625210,tags:Idea Public,type:text/vnd.tiddlywiki,text:Game},{title:SecretSauceOfZettelkasten2020,caption:Make Your Notes Work for You: the Secret Sauce of Zettelkasten,created:20201202203703306,medium:article,modified:20201202203722307,tags:Source Public,type:text/vnd.tiddlywiki,url:https://medium.com/@philhoutz/make-your-notes-work-for-you-the-secret-sauce-of-zettelkasten-cb901a3cce00,year:2020,text:Statement of how the most critical part of any ZettelKasten is links|NotesMustLink. The ZK was not working for the author MrPhilHoutz until he figured out how to add at least ThreeLinks to each note.},{title:SeekingTheSacred,at:202407122000,author:D.C.|PrivatePerson,blurb:Do you feel spiritually dead or disconnected? Do you miss things about going to church even though you might not want to go back? Do you feel disillusioned by prayer or no longer believe in it? Do you long for spiritual practice that actually feeds your soul? Do you want to reclaim a sense of the sacred in your life? You are not alone. Danae spent several years building an eclectic spiritual practice that still draws some from her Christian upbringing and melds that with observing the cycles and seasons of the earth to meet her own unique needs. She now teaches others how to find rituals and routines that resonate with them. This workshop will give you a jumping off point to start seeking the sacred in your own life.,caption:Seeking the Sacred,conference:2024WildGooseFestivalTrip,created:20240718030829963,creator:soren,medium:conference,modified:20241013025352356,modifier:soren,rating:good,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:A divergent list/discussion of all kinds of thoughts by D.C.|PrivatePerson on what is considered sacred and how you can build your own sacred things (texts, places, rituals, etc.). Without a regular religious community that has these things built-in, its easy to fall out of having //anything// sacred, and thats deeply important. See also DesacralizationOfEverydayLife.\n\u003C!--\n{{SeekingTheSacred/p2||PrivateChunk}}\n-->\n\nNone of it was about finding sacred things for a community, which I was somewhat interested in; it was all about you as an individual. But the ideas seem actually pretty generalizable, its just that theres the extra challenge of finding a way to make the group agree on what seems sacred. (I think maybe you have to have some shared experiences first to come to the same conclusions, or to have material to build on?)\n\nWill try to catch Danaes session on building community in general|BuildingCommunityAfterDeconstruction tomorrow, as it would maybe be more relevant to my original purpose -- but this, like the person ahead of me talking to Danae, who had tried to go to a Reiki session and came here instead by mistake -- was actually more of what I needed than my intention, very nourishing and enjoyable.\n\n{{SeekingTheSacred/p||PrivateChunk}}\n\nOne of Danaes sacred texts is //All I Really Need to Know I Learned in Kindergarten//, and she read a passage and it is amazing -- and smart and true. I ordered a copy.\n\nDanae discussed how her divorce was a sacred experience for her. She of course had a pretty amiable one -- after around fifteen years, she concluded her husband was a wonderful person but not compatible with her -- but also she seems unusually capable of finding the holiness intrinsic in everything even when other factors would overwhelm most of us. Thats amazing and seems like a skill worth cultivating; I cant imagine this //wouldnt// lead to a more meaningful and joyful life. (I note that I even claimed in FriendsIWant that I aim to “help other people learn, reflect, think, find and stay in wildly generative relationships, and enjoy beautiful, meaning-filled lives,” which sounds remarkably similar?)\n\nMaybe she and J.M.|PrivatePerson, with his DivorceRecommended, should talk! That “divorce as personal growth” idea coming from more than one person I know, though, suggests maybe this is actually much more common than I realize. Or at least among thoughtful people, which hopefully I personally am. And if so, this would be a useful update to the method of estimating the likelihood of a marriage “working out.” Obviously you mostly prefer that it stays together, but a marriage that breaks up in a way that satisfies both parties, while it certainly creates some extra difficulty and is presumably better avoided, is considerably more OK than the ending that most people usually envision, and if you say have a 50% chance of achieving that, the overall expected utility of some marriage would be substantially higher. I cant say I have ever thought of defining marriage success in any way other than whether it ends, but it now seems extremely obvious that one should (cf. PermanenceUnnecessary). Theres an enormous difference between having some mostly good years together and eventually deciding you have to split up and parting on good terms and remaining friends, vs., say, being stuck in an abusive relationship for ten years and then ending up in family court arguing about something stupid every year for another ten years.\n\nWe talked as a group about some sacred practices we personally did. One woman said she and a couple close friends had an occasional brunch where they asked people hard and probing questions about their lives that they think could lead to self-improvement and better self-understanding. And that they had to work up to it and its really, really, hard, but worthwhile. This one will at least go in my back pocket for things to do with some friends -- the right friends -- sometime, like the soup-and-therapy thing. I said GovernorDodgeStatePark was a sacred place for me. It isnt even remotely a stretch. (See SacredPlaces.)},{title:SelectiveApplication,created:20200322023900941,creator:soren,modified:20201203005240222,modifier:soren,tags:Productivity Public NeedsAttention Idea,type:text/vnd.tiddlywiki,text:A lovely CognitiveBias in which we apply a concept only when its convenient to us, then ignore it in all other cases.\n\n\nTODO: Connect this to a fantastic SSC article on selective application of demands for rigor: https://slatestarcodex.com/2014/08/14/beware-isolated-demands-for-rigor/},{title:SelfBelief,created:20200428183255713,creator:soren,description:Most people believe they can do somewhat less than they actually can.,es:likely,modified:20231016182301331,modifier:soren,tags:Psychology PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Most people think they can do somewhat less than they can. Willingness to explore usually leads to not only personal improvement but also discovering that you were already capable of quite a bit more than you thought.\n\nImagining yourself having met your goal|GoalImagination may be helpful along with this, although it can be harmful too if it turns into an escapist substitute for actual achievement.\n\nThis is not to say that “anything you can believe you can do,” or similar New-Agey crap. The word //somewhat// does a lot of work here! The idea is intended to encourage you to push yourself beyond what you know you can already do, a little bit beyond your comfort zone, yet still in an area you are sufficiently familiar enough for the stretch to be reasonable. The problem to be overcome with this idea is that what seems “reasonable” to you may in fact be quite a bit less than whats possible.\n\nBe aware that this is RelativeAdvice: if this idea sounds completely obvious and not challenging at all to you, you may in fact need to recalibrate in the direction of thinking you can do //less// than you currently do. This is uncommon in a society that currently largely believes people cannot do things|PeopleDontThinkTheyCanDoThings, but uncommon doesnt mean absent.\n\nCf. Metafaith and CountOnYourPartnerForOne.},{title:SelfExpressiveMarriage,created:20200402013511769,creator:soren,description:The societal attitude that marriage is primarily about adults personal choices, not about procreation or social ties.,es:confident,modified:20251020220709237,modifier:soren,tags:InterpersonalRelations Romance Sociology Public Idea,type:text/vnd.tiddlywiki,text:Nice sociological term for the predominant view of marriage in the “developed”|SociologicalQuotationMarks world nowadays. Marriage is about adults making personal choices. Its not primarily about raising a family (as it was in the middle of the 20th century) or about stability and social ties (as it was for much of human history).\n\nGood sides and bad sides. If I ever get married, I do hope its self-expressive in the sense that it represents my personal choices, but it also feels like maybe something is missing. Or were leaving useful components on the table.\n\nOne huge problem with the self-expressive model is that it emphasizes the aspects of marriage that are all about //you//, and not about the other person. Maybe thats an unfair characterization...but if it is, then why do we see people taking it as unseriously as they do? When you critically listen to the traditional marriage vows, thats some pretty serious shit compared to the ease with which many people abandon their spouses. To be clear, I dont think divorce should be forbidden, and there are situations where its pretty obviously the best option (e.g., abuse, or early mutual recognition that the marriage was a mistake), but I do think a lot of people could work on redefining their criteria for “this marriage didnt work out.” And maybe we would do well to have other options|HypotheticalCommitmentTypes for people who arent ready to make that commitment, because its not for everyone. Maybe the standard commitment is also subtly wrong; see AsLongAsLoveShallLast.\n\nMay worsen the RelationshipSuccessDivide.\n\nSource: NuclearFamilyWasAMistake202003.\n\n(Epistemic disclaimer: I have never been married or seriously considered it on an immediate level.)},{title:SelfPerpetuatingEnergy,created:20200811220717584,creator:soren,es:likely,modified:20220117193234819,modifier:soren,tags:Process Psychology Public Idea,type:text/vnd.tiddlywiki,text:A curious fact about most peoples (certainly my) subjective energy levels: if you do nothing at all for, say, a whole weekend, youll tend to feel worn out and not relaxed at all. Relaxation doesnt consist in doing nothing, it consists in doing something different. If you keep doing things that require energy, but varying them enough to prevent getting bored or stuck in a rut, youll paradoxically have more energy at the end of the weekend.\n\nNote though that this is a different axis than social interaction. If youre an introvert|IntroversionAxis, you will pretty much never be able to perpetuate your energy at a party, and vice versa reading in a locked room as an extrovert.\n\nAdditionally, some things require more focused effort than others (e.g., reading great books|MediaRating or doing DeepWork). You have to balance things that require focused effort with things that require work but not so much focused effort; if you try to do all focused-effort things, youll still burn out.\n\nCf. ActivityPlasticity.\n\n!! References\n\n> Real relaxation doesnt come from doing nothing at all; it comes from doing something different.\n> ---Dazne},{title:SemanticLineFeeds,created:20200425170300512,description:In markup languages, line breaks can be used as a form of punctuation that lays bare the sentence structure -- but only while writing.,es:confident,modified:20210623024328421,tags:Information Typography Public Idea,type:text/vnd.tiddlywiki,text:Technique for writing WYSIWYM source in which each sentence is presented on a new physical line after a carriage-return character, and sentences longer than a line are broken in logical places (typically after commas or other punctuation, or before relative clauses or conjunctions). Enabled by WYSIWYM because most markup languages do not care about whitespace or line breaks except in specific places (like leaving a full blank line to start a new paragraph), handling the spacing themselves.\n\nI often use a tab-based variant where additionally a level of indentation is added after the first line of every sentence and when a list is introduced. This makes it even easier to see, but is incompatible with certain markup languages like ReStructuredText.\n\nI find SLFs make it not only easier to edit the text, but easier to write: when you can see the logical structure of your sentences reflected in their physical positioning, it is easier to think about your argument and the way you are presenting it. Of course, you need to see how it appears to your readers too, eventually; but thats what document previews are for.\n\nSee the spec|https://sembr.org/ and an article|https://sembr.org/ by MrBrandonRhodes about why you should do this in Sphinx.},{title:SenchaTeaBar,created:20230612035735827,creator:soren,gis-lat:44.95540256828132,gis-long:-93.29664365145979,gis-zoom:17,modified:20230612135046610,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SenseAndSensibility1811,author:Austen,bibliography:LifetimeReading,caption:Sense & Sensibility,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035968,priority:2,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1811},{title:SentimentalEducation1869,author:Flaubert,bibliography:LifetimeReading,caption:A Sentimental Education,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035976,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1869},{title:SeparationAsIndividualFall,created:20201018023820622,description:Gaining the ability to separate from ones daemon is to Fall again, individually.,es:possible,modified:20210611041151594,tags:Religion Reading Identity Public Idea,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,text:I am starting to see an interesting fractal-pattern in the process of humans and Daemons gaining the ability to separate, in that it seems to be a kind of individually experienced FallOfMan.\n\nWe know that in the HDM universe, the original Fall led to at least two things, the forms of Adam and Eves daemons becoming fixed and the entrance of Dust|DustAndConsciousness into the world (according to the Church, the physical manifestation of sin; according to the protagonist heretics, the power of free will and the source of meaning in life).\n\nThe Fall occurs because of what at least at the time appeared to be an evil act, turning from God, yet it results in consequences that make us human, to our current definitions of human. We are newly free as a result.\n\nSeparation, in comparison:\n\n* Is brought about by a bad act (literally turning ones back on ones daemon).\n* Brings about guilt from which some people never recover, and introduces trouble into relationships.\n* Makes ones daemon into a \free spirit,\ so to speak, with the ability to do things that are not given to people naturally...\n* ...including giving you the freedom to screw up your relationship and separate from your daemon. There seems to commonly be some PTSD, or change in the bond between you with the possibility of greater separation. We dont know exactly what changes.\n* Is done and valued by the wise and the epistemological explorers (we might call them).\n* Is taboo to those who are not in the know, sort of like those people have liased with the devil.\n\nOne cannot help but wonder, if this theory has any truth to it, how this might relate to the experiments at Bolvangar, which were supposed to free people from Dust, at least in the PR messages of the OblationBoard. Maybe points along a continuum: severing people from their daemons entirely results in their death (look Ma, no Dust!) or complete lack of will and submissiveness to superior power (the pre-Fall condition), while testing the limits through ones own force of will takes you in the other direction, through another form of development? The causes dont quite seem to match the continuum that the effects do, though, so maybe the resemblance is a coincidence or theres a confounding variable here.},{title:SeparationInitiationReturn,created:20200226002108479,creator:soren,es:confident,modified:20220106134809802,modifier:soren,tags:MentalModel FictionTheory Public Idea,type:text/vnd.tiddlywiki,text:Mythological framework proposed by MrJosephCampbell explaining myths as having three phases:\n\n* Separation -- a “call to adventure” occurs and the protagonist is removed from her normal context.\n* Initiation -- she leaves her normal life and enters a “dream landscape”, where the normal rules dont apply and she must survive a series of trials of some kind.\n* Return -- the adventurer returns with some kind of lessons or objects (the “boon”) to share with the normal context of humanity.\n\nCf. the other well-known framework, the RaglanMythPattern.\n\n(This tiddler is puzzlingly compiled mostly from MyNonsenseMythAndDreams, because it summarizes these bits plenty well for this level of detail and I was already reading it!)},{title:SeparationOfPresentationAndContent,created:20200426155954152,es:confident,modified:20200426163234140,tags:Information Software Public Idea,type:text/vnd.tiddlywiki,text:Feature of effective DocumentPreparationSystems in which styling (e.g., font, color, spacing) is defined in a stylesheet or set of macros, then the document is marked up to describe which style or macro to use for given text, rather than what format the text should use. This has several benefits:\n\n* The text is easier to read and free of distractions (in a markup-based language).\n* The system follows the DryPhilosophy. If you later realize you want to change the format of some kind of text (say, all definitions of words should now be in italics rather than in bold), you can easily go back and change them. When the formatting is inline, this becomes a difficult and soul-crushing task in large documents: even if you have formatting search-and-replace, you cant easily distinguish this use of bold from any other usage of bold, so you have to go through and check every one manually to see if it needs to be altered.\n* It is much easier to convert the text into another format or have multiple output formats, because its possible to parse the text to determine what //role// each piece of text has, rather than just how it happens to to be rendered in one particular format.\n* Its just more WYSIWYM to do it this way. The goal of WYSIWYM is to provide abstraction of the content from the display, and this is exactly what you are doing here.},{title:Serpentine,caption:Serpentine,created:20201018023827174,creator:soren,format:hardcover,isbn:9780593377680,medium:book,modified:20230709214858242,modifier:soren,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,url:,year:2020,text:Companion book to HisDarkMaterials/BookOfDust, written by MrPhilipPullman many years before 2020 as part of a charity auction and then published as part of the general lets-trickle-out-a-few-short-stories-to-keep-fans-occupied practice hes been carrying on since the early 2000s while not writing //The Book of Dust//.\n\nThe story is probably only about 4,000 words, but is padded out to book length by being printed in 13-point font with obnoxiously large leading (19-point, I believe, with some squinting and my typographical ruler), then paired with gorgeous linoprints by MrTomDuxbury, one every spread (and some that go across both pages but only half the vertical space, which is not something you see often and works great). Its rare to have the treat of that many illustrations beyond the reading difficulty of a picture-book; my impression of the story is unusually vivid. This isnt as interesting a supplemental, space-filling conceit as the ephemera-dump in LyrasOxford or the board game (!) in OnceUponATimeInTheNorth, but was certainly successful. The book also is a different physical style than the other two, booo (still nice enough, but not as nice).\n\nPrefigures (postfigures, in reader-accessible ConsensusPhysicalReality time!) MsLyraSilvertongue and Pantalaimons disconnect and falling-out in SecretCommonwealth2019. The rationality-imagination dichotomy doesnt appear, but the seed of discord is planted in the form of Lyra learning from the Trollesund consul that some witches -- and others -- are at odds with their daemons, perhaps because theyve never recovered from the emotional disaster of abandoning their daemons. She is also upset that Pan has never spoken about what he and Kirjava did while they were apart in AmberSpyglass, even though, as Pan later angrily points out, she has been quietly seething and never asked. In this book, they reconcile and fall asleep happily on the back of a tractor returning to the far-north archaelogical dig Lyra has implausibly tagged along on to get here.\n\nThis further discussion of daemon-separation led me to the theory of SeparationAsIndividualFall.\n\nThe possibility of discovering messages from Dust “by mental power alone,” rather than with the alethiometer, is also mooted, though this was I believe at least strongly implied in TAS already (its possible Im experiencing memory revision, though, or at least seeing a reading in it that I couldnt have made without reading TSC, seeing as I havent reread TAS since then). And Lyra thinks its absurd, Pan is the only one serious about it.\n},{title:ServiceNow,created:20201222045342345,modified:20201222045304293,tags:Software Public Idea,type:text/vnd.tiddlywiki},{title:SevenfoldWhy,created:20200330022652342,creator:soren,es:likely,modified:20240305184513534,modifier:soren,tags:PhilosophyOfLife MentalModel Public Idea,type:text/vnd.tiddlywiki,text:Sometimes you might realize you dont know exactly why you want to do something. Or you think you want to do X, but X seems difficult or objectionable, and you want to examine your motivation for X and see whether there are other ways you could achieve what you want. The Sevenfold Why is a powerful way of doing this.\n\nThe procedure is very simple: ask, “Why do I want X?” This yields reason Y. Then you ask “Why do I want Y?” And you repeat this seven times or until you reach a reason that is a good in itself, in your opinion (e.g., a pursuit attached to a PersonalMotto; sometimes called a terminal value|https://crucialconsiderations.org/ethics/means-and-ends/) or it seems absurd to ask the question again. Then you can proceed back up the chain to inspect your path of motivation and whether each jump makes sense. At each point, also consider alternative ways to retain the reasons below you – maybe your initial desire is a comparatively poor way to achieve your goals!\n\nWhen stopping, be careful that your terminal value is actually a terminal value for you. Its easy to automatically accept societys values as your own terminal values because they are so baked into our culture. Of course, things become societal values because they are, generally, good, but most people will have at least a few personal values that dont match their societys (almost nobody is perfectly average|TyrannyOfAverages). Examples of things that many people consider terminal values but you may not include owning a home (common in the US), having children, or living a long life (especially as considered in contrast to a well-lived one, for some definition of well-lived). Some people may consider these the end of the line, others may be able to continue, and still others may think they are outright negatives.\n\nSome people say you should repeat the question //five// times to use this method, but seven is a nicer number, so I say seven. The number is rhetorical anyway; if you get to five or seven but you still havent found a terminal value, you should keep going, and if you get to three and you reach something that obviously is one, you should stop.\n\nSee also SevenSevens for seven-based mental tricks, and CoinFlipClarity for a not-entirely-dissimilar idea.\n\n\n!! References\n\nGartner suggests this approach for identifying the root causes of software process problems as a form of ContinuousImprovement. See also TargetProblem.},{title:SevenSevens,created:20200328014610720,creator:soren,es:confident,modified:20210916145740541,modifier:soren,tags:PhilosophyOfLife MentalModel Public Idea,type:text/vnd.tiddlywiki,text:When you find yourself overreacting to something, a good test of its importance is by asking the seven questions in this MentalModel:\n\n* Will it matter in 7 seconds?\n* Will it matter in 7 minutes?\n* Will it matter in 7 hours?\n* Will it matter in 7 days?\n* Will it matter in 7 weeks?\n* Will it matter in 7 months?\n* Will it matter in 7 years?\n\nIn reality, most things never even pass the 7-hour mark. On the other hand, the few things which make it to 7 years are the ones you should take an outsize amount of interest in (see EightyTwentyPrinciple).\n\nOn time-limiting perspectives, see also BathroomRule and TwentyFourHourRule.\n\nSee also SevenfoldWhy for identifying //why// things are important (and sometimes realizing whether they are important as well).\n\nA Reddit comment on this principle once noted that you can extend it to 7 centuries, and that even if you do your plastic bags unfortunately still matter!},{title:Sexuality,created:20230909001025711,creator:soren,modified:20231203231959655,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:Cf. Romance.},{title:ShadowWork,created:20201202211534678,creator:soren,es:confident,modified:20230307030654264,modifier:soren,tags:Idea Sociology Business Definition Public,type:text/vnd.tiddlywiki,text:Term from the book //Shadow Work//: the phenomenon of companies foisting work that would once have been theirs, and often rightfully should be, on their customers, subtly crappifying|SubtleCrappification their experience.\u003C\u003Cfnote \Not to be confused with some king of Jungian therapy, which is most of the hits on Google if you try to look this term up!\>>\n\nA few examples:\n\n* Self-checkout lines\n* Self-service gasoline\n* Online travel booking sites like Expedia (compared to travel agencies)\n* Tax software\n* Online banking\n* Robo-advisors, index funds, and other such modern financial management tools\n* Troubleshooting checklists and self-service tech portals\n\nOnce you recognize the phenomenon and start looking for it, shadow work is everywhere and growing. Terms like \self-service\ and \convenient access\ usually signify that shadow work is being proposed.\n\nDoing shadow work sometimes actually is more convenient, because you dont have to wait, or schedule an appointment, or make annoying phone calls|PhoneAnxiety, or pay extra money, or what have you. The author of the book is careful to point out that there are cases where the devolution of responsibility to customers can make sense. This said, in many cases turning everything into shadow work is terribly inefficient, frustrating, and results in worse outcomes (because how can all customers be skilled travel bookers, grocery-store checkers, financial managers, etc., all at once?). He even proposes that this could be a primary reason why everyone always seems to be so busy in the modern world, despite the massive gains in productivity weve made: every person is responsible for all these minor tasks that used to be done by others.\n\nBad use of shadow work is ResourceMooching off of customers rather than internal clients. It hides the cost from the budget by spreading it onto tens or thousands or millions of individual peoples plates, disguising the fact that the world is worse off as a result. (See LocalOptimization.)},{title:ShamrocksIrishNook,created:20240211231624901,creator:soren,gis-lat:44.92713931825698,gis-long:-93.1278387887897,gis-zoom:16,modified:20240211231646485,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ShapeFear,created:20201202015756126,description:I occasionally become afraid of shapes for no apparent reason.,es:personal,modified:20210611033746778,tags:Psychology PersonalMythology Public MyUnusualMentalExperience Idea,type:text/vnd.tiddlywiki,text:Throughout my life, about once every year or two Ive had an odd experience following this schema, which I call //Shape Fear//:\n\nI am in dim light, by myself, often feeling slightly on edge for one reason or another. On looking at some ordinary object, such as a doorknob or cup, the shape of the object will “remind” me of something that frightens me. I specifically feel that it is the shape of the object that elicits this comparison, not any other properties like color or location or function. The object still looks entirely normal, its normal shape has just taken on this additional meaning.\n\nAs far as I can tell, the antecedent object does not actually exist, or at least I have never identified one; it is rather like déjà vu|RecursiveDejaVu in this respect. The shaped object will generally continue to produce this response as long as I stay near it (though I wont, because it scares me!), but if I spend a few minutes away from the object, or go to sleep, there will be nothing unusual afterwards.},{title:SharedConsciousnessFictionBibliography,bibliography:SharedConsciousness,created:20221003165122706,creator:soren,modified:20240604175250223,modifier:soren,tags:Bibliography Public,type:text/vnd.tiddlywiki,text:\\define biblioFilter(sortSnippet)\n\tcontains:bibliography{!!bibliography}$sortSnippet$ -\u003CcurrentTiddler> -\u003CcurrentTiddler>getdraft.of\n\\end\n\n\\define theStuff(readStatus)\n\u003Cul>\n\u003C$list filter\u003C\u003CbiblioFilter \$readStatus$sorttitlesortcaption\>> >\n\t\u003Cli>\n\t\t\u003C$set nameitemTitle filter{{!!caption}} value{{!!caption}} emptyValue{{!!title}}>\n\t\t\t\u003C$link to{{!!title}}>\u003C$text text\u003C\u003CitemTitle>>/>\u003C/$link>, {{!!author}}\n\t\t\u003C/$set>\n\t\t\u003C$list filter\\u003CcurrentTiddler>getmedium\ variable_>\n\t\t\t({{!!medium}}\u003C$list filter\\u003CcurrentTiddler>getyear\ variable\year\>, \u003C\u003Cyear>>\u003C/$list>)\n\t\t\u003C/$list>\n\t\t\u003C$list filter\\u003CcurrentTiddler>hasurl\ variable_>\u003Ca class\tc-tiddlylink-external\ href{{!!url}}>full text\u003C/a>\u003C/$list>\n\t\t\u003C$list filter\{!!telepathy-description}\>\n\t\t\u003Cul>\u003Cli>\u003C\u003CcurrentTiddler>>\u003C/li>\u003C/ul>\n\t\t\u003C/$list>\n\t\u003C/li>\n\u003C/$list>\n\u003C/ul>\n\\end\n\nAs an outcropping of TelepathyFascination, Im trying to gather together fiction that discusses related topics. If you have suggestions for works that arent listed here, please hit the “start a conversation” button, or follow the Reference to my microblog post #10 and leave a comment.\n\n!! Recommended and unread\n\n\u003C\u003CtheStuff \regexp:readStatusunread|partial\>>\n\n-- The Chrysalids (1955), John Wyndham, https://read.readwise.io/feed/unseen/read/01hzerstk2c8634zhkg2w78qma\n\n\n!! Read\n\n\u003C!-- using !unread to cover series with no read field, maybe rethink -->\n\n\u003C\u003CtheStuff \!readStatusunread!readStatuspartial\>>\n\n\n!! Requests\n\n> Im fascinated by fiction about or involving telepathy or sharing of consciousness between characters, especially when used creatively or to enjoy/strengthen a relationship with someone. Looking for leads on more stories fitting this description!\n> ---\u003C\u003Cap 10>>},{title:SharePoint,created:20200529220509322,creator:soren,es:likely,modified:20220505185703310,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:One of those fluid, wonky enterprise tools that strives to be a CompleteIntegration and can do anything, poorly. Its not even clear what, exactly, SharePoint is supposed to be. Its a place you can store documents, but so is a file system. Its a place you can put links and WYSIWYG-formatted wiki texts, but so is a real wiki, or a Word document. Its a way to manage and filter lists, but so is a SpreadSheet. It also looks easy to use but is really hard to use well and is full of hidden gotchas. Creating even the simplest automation workflows (a selling point) requires an expert to write them, and (I am not kidding) developing the changes in a Visual Studio instance //running on the SharePoint server via RDP//.\n\nI do like that the lists can be accessed pretty easily through an API. Thats nifty.\n\n-----\n\nChoice quotes on SharePoint:\n\n> The answer to whether you //can// do something in SharePoint is always yes. The answer to whether you //should// do something in SharePoint is always no.\n> ---me, \u003C\u003Crt 9719>>\n\n\u003C\u003Cclarify>>\n\n> You know youre becoming a corporate sell-out when you start to think SharePoint is the best solution.\n> ---me, \u003C\u003Crt 11047>>\n\n\u003C\u003Cclarify>>\n\n> SharePoint will not cause joy!\n> ---UnicornProject discussion group, \u003C\u003Crt 11011>>\n\n\u003C\u003Cclarify>>\n\n> OneNote is the biggest piece of crap since SharePoint.\n> ---J.P.|PrivatePerson, \u003C\u003Crt 9152>>\n\n\u003C\u003Cclarify>>},{title:ShawarmaPalace,created:20240530224437841,creator:soren,modified:20240530224438709,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:ShawPygmalion,author:Shaw,bibliography:LifetimeReading,caption:Pygmalion,created:20210703170128000,genre:Literature,medium:book,modified:20210705214035991,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:ShepherdsDell,created:20250618153315903,creator:soren,modified:20250618153319748,modifier:soren,tags:Public Place,type:text/vnd.tiddlywiki},{title:ShippingContainer,created:20200226024436941,es:possible,modified:20210509012536952,tags:Process Public Idea,type:text/vnd.tiddlywiki,text:The idea that changed the world of commerce.\n\nNominally less efficient than manual packing: you can fit less in the ship because you cant use the nooks and crannies, parts of containers are left unused, boxes have to get back to the ships after you deliver in them.\n\nIt wasnt just the idea but also the way of integrating the idea into the workflow that made the container finally succeed, because WorkflowSupremacy dictates that the box itself didnt help. Even beautifully simple ideas only work in the right context (the principle of ContextScrambling).\n\nSource: HowToTakeSmartNotes.},{title:ShippingIsAFeature,created:20200323031655066,creator:soren,es:confident,modified:20211228153209965,modifier:soren,tags:Process Design Public Idea,type:text/vnd.tiddlywiki,text:As MrJoelSpolsky says (\u003C\u003Crt 6591>>): “Shipping is a feature. A really important feature. Your product must have it.”\n\nIf you dont have WorkingSoftware thats in the hands of users (CodeByItselfIsWorthless), everything else was for nothing and nobody will use your product, irrespective of its other merits. “Software,” as in my interpretation of Agile|AgilePhilosophy, is to be considered metaphorically.\n\nFailing to add the feature of shipping is a common result of forgetting that PerfectIsTheEnemyOfGood.\n\nAll else being equal, you should ship a mediocre product sooner rather than an excellent product later, because your products value (not to mention its profit-generation ability and its potential to produce useful experimental data|IterativeProcess) is zero until it gets used for something. Even if its pretty bad, you still come out ahead from a utilitarian perspective by shipping early; see also BeBold.},{title:SholesRevisedKeyboard,created:20201206181214117,creator:soren,es:confident,modified:20211107181002523,modifier:soren,tags:Design Public Idea,type:text/vnd.tiddlywiki,text:MrChristopherSholes created a much less well-known keyboard layout after the QwertyKeyboard, which runs roughly like this:\n\n```\n X P M C H R T N S D G K\n J B W F L A E I O U Y\n Q V . , ! ? - ; _\n```\n\nWhile this is certainly not an ideal layout (how the heck did W and J get in the home row?), it does go to show that Sholes at least attempted to improve things.\n\nIt took me over 15 minutes to find this diagram or even mention of this layout! Source is http://dvorak.mwbrooks.com/dissent.html, which cites MrRandyCassinghams //The Dvorak Keyboard// as its own source.},{title:ShortcutApps,created:20240602134356981,creator:soren,es:likely,modified:20240927200045010,modifier:soren,tags:Idea Technology Shortcuts Public,type:text/vnd.tiddlywiki,text:Most commercial app development is either trying to take shortcuts (often ones which ultimately make life worse: more frantic, less deliberate and attentive, less dignified) or fix artificial problems created by other shortcuts.\n\nTo see this, lets look at my phones home screen; these are the apps I had on the front two pages, not in folders, with system items like the App Store removed, when I started thinking about this.\u003C\u003Cfnote \I also removed Safari, since its really a platform for other experiences that could fall into any category.\>>\n\n* Calendar: Real. People have been keeping calendars for centuries, solves fundamental problem of memory. (You could go deeper and say its a symptom of society that our schedules can be complicated enough that we can forget engagements, but this doesnt seem terribly helpful to me.)\n* Camera/Photos: Real. Changes the way we relate to the world, for sure. You could argue its a shortcut for using a camera, but Im not sure how different the experience really is, and having it on your phone allows taking pictures you never would have otherwise because you dont carry a camera everywhere.\n* Phone, Google Voice|GoogleVoice: Real. I shouldnt need two, but otherwise, I think the phone actually improves human thriving and isnt a shortcut for anything. I guess in some way it is a shortcut for meeting in person, and it probably does encourage people to be physically co-located somewhat less often (an artificial problem?), but most conversations the phone allows just wouldnt have happened otherwise, and it opens up connections with people you could never have gotten to know otherwise.\n* Spotify: Real. Recorded music is genuinely new and wonderful; it doesnt replace live music, but adds to it. \n* YNAB: Real. It helps you use your money more thoughtfully, and it takes a lot of time and self-understanding to master. The app doesnt try to pretend just using the app will change anything; it makes clear that youre using the app to effect a change in the way you think about money. (We could argue YNAB is solving an artificial problem created by Capitalism, which is probably a shortcut for something, but that might be going too deep!)\n\n* Grab: Shortcut for getting taxis and food, without even having to step outside your door.\n* Hinge: Shortcut for finding friends and relationships rather than integrating into community.\n* Google Maps|GoogleMaps: Shortcut for finding routes and destinations rather than understanding the place youre in and asking other people for their advice.\n* WhatsApp, GroupMe, FB Messenger, Messages: All four of these apps have exactly the same purpose (send texts to other people), yet I have to have all of them; artificial problem. The existence of even one of these is a shortcut that helps us avoid having to talk to one another directly or plan ahead, I think largely to our detriment.\n\n* Anki, RemNote: Mixed. You can seek to use them as a shortcut for genuine understanding, and many people do, but you can use them in real ways, too.\n* Weather: Mixed. Primarily solves artificial problem that we no longer spend enough time outside to be able to tell what the weather will be like in the next few hours. Does add some new ability to predict (badly) in advance distances which we couldnt before.\n\n* Pass: Solves artificial problem of having so many shortcut apps you cant remember how to log in to them. (This seems like the epitome of an artificial problem!)\n* Authy: Solves artificial problem of people hacking each others accounts for shortcut apps.\n* Sunsama: Solves artificial problem of work being so complicated, confusing, and demotivating that you have to follow elaborate planning and management rituals to do it effectively and avoid it creeping into the rest of your life.\n* Timeshifter: Solves artificial problem of jet lag created by long-distance flights (a shortcut technology|PlanelySlower if Ive ever seen one).\n* Health, Fitness, Arboleaf: Primarily solves artificial problem of technology making us cease naturally getting any exercise.\n\nI notice that YNAB seems different. Further reflection in WhyIsYnabNoShortcut.\n\n(//Extracted from frozen reflection LongcutsInBangkok.//)},{title:Shortcuts,created:20240528031701989,creator:soren,modified:20240629034353264,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki,text:* Analysis of some shortcuts I often take that I do not like, and how I might be able to design them out of my life: ShortcutsIDislike\n* MrHenrikKarlssons article on longcuts, which kicked off my investigation: OnShortcutsAndLongcuts2024\n** My immediate response: LongcutsInBangkok\n* Shortcuts and the train: PlanelySlower\n* Shortcuts can lead to failing unnecessarily: DynomightSchoolOfRunning.\n* Shortcuts are often taken even when they have such minimal benefit they cannot possibly be worth it (e.g., people often try to go as fast as possible on I-35W through Minneapolis; if you manage to average 70mph rather than 60mph from the 94 onramp to 46th St, vastly increasing your chance of an accident and the amount of effort you have to put into driving, you save all of 26 seconds).},{title:ShortHistoryOfNearlyEverything2003,author:Bill Bryson,caption:A Short History of Nearly Everything,completed:20211021,created:20211104234515274,creator:soren,medium:book,modified:20220609021956713,modifier:soren,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2003,text:Introduction to cosmology, geology and other Earth sciences, and life and evolution|Evolution by B.B.|PrivatePerson. It seems to have aged pretty well; reading this in 2021, there are places where you can tell from the recency of mentioned discoveries that the state of the art has moved on, and there were one or two places where I specifically recognized new understandings that Ive heard of recently, but the fundamentals still seem sound.\n\nAs always with Bryson, full of completely useless but fascinating and hilarious facts, anecdotes, and colorful characters, and great fun to read. You get not only the current consensus but also a play-by-play account of how it emerged and who was involved. I think this was my favorite digression (p. 244):\n\n> Perhaps uniquely among human beings, the younger J.B.S. Haldane found World War I “a very enjoyable experience” and freely admitted that he “enjoyed the opportunity of killing people.”\n\n\nI read the 450-some pages on vacation in Arkansas. },{title:ShutUpAndPlay,created:20201228040157719,creator:soren,description:Excessive scaffolding around works of art or ideas is often more frustrating than helpful: let them speak for themselves.,es:confident,modified:20241201043946889,modifier:soren,tags:Music PhilosophyOfLife Public Favorites Idea,type:text/vnd.tiddlywiki,text:My high-school orchestra director T.K.|PrivatePerson was a dispositionally impatient person, but not necessarily in a bad way. Several times, he told us that when someone takes more than a minute or so to introduce a piece, he always thinks, “Shut up and play!” Of course, I now think the same all the time.\n\nIntroductions are great, they really are. You can get more out of the piece when youre given background or told how to think about it. Stage chatter is part of what makes live music fun. But at the end of the day, the audience came to listen to music, not to listen to you blabber on about music. The introduction cant become the performance, and music can usually speak pretty well for itself, if its good music. Early and often, you should just shut up and let it do that.\n\nExcessive up-front information can also damage other peoples ability to interpret what they are hearing, or shift their focus away so that they fail to notice things that dont match whatever the introducer pointed out. (See also HoldYourPositionBack.)\n\nPart of a general constellation of ideas suggesting that overbuilt structure is harmful:\n\n; HspWtcS\n: {{HspWtcS!!description}}\n; JustGetStarted\n: {{JustGetStarted!!description}}\n; WorkingSoftware\n: {{WorkingSoftware!!description}}\n\n!! References\n\n> The way to tell a story is to say what happened, and then shut up.\n> ---MrPhilipPullman, “Childrens Literature Without Borders”, DaemonVoices (\u003C\u003Crt 10200>>)},{title:siderea,created:20210516225045927,modified:20210516224856388,tags:PAO Public,type:text/vnd.tiddlywiki},{title:SignalToNoiseRatio,created:20200331234609196,creator:soren,es:confident,modified:20220817191114993,modifier:soren,tags:Information Metaphor Public Idea,type:text/vnd.tiddlywiki,text:In the world of digital information, a measure of how much useful information (signal) there is to be found in a given resource. For instance, a Clickbait website would have an extremely low signal-to-noise ratio.\n\nThe precise value will vary based on what youre looking for and who you are. A ZettelKasten, as explained in ZettelkastenProcess, is designed to create a high signal-to-noise ratio for the user in particular (but can fail at that if the user is not reasonably careful about what enters the system).},{title:SignalVersusNoise,created:20200407013533780,creator:soren,modified:20200509032432678,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog of TheBasecamp. Very worth following.\n\nName was more appropriate when the company was still called 37Signals, but its nevertheless a good name even now, given its content!},{title:SilentSpring1962,author:Carson,bibliography:LifetimeReading,caption:Silent Spring,created:20210703170128000,genre:Science,medium:book,modified:20210705214035999,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1962},{title:SiliconValley,created:20200910124820146,modified:20200910124827911,tags:Place Public,type:text/vnd.tiddlywiki,text:Place and metonym for Americas tech industry. },{title:Silmarillion1977,author:J.R.R. Tolkien,caption:The Silmarillion,created:20201119201516338,creator:soren,due:202207261200,format:hardcover,isbn:9780618135042,ivl:10,medium:book,modified:20220716195613127,modifier:soren,owned:yes,readstatus:partial,tags:Source Public,type:text/vnd.tiddlywiki,universe:LordOfTheRings,url:,year:1977,text:Cycle of tales by MrJrrTolkien, edited by MrChristopherTolkien. Actually more foundational than the much-more-famous LordOfTheRings and Hobbit, and I think its a bit odd its treated as a weird little thing for Tolkien fans who have run out of other things to read. If nothing else, the whole universe makes a lot more sense after reading it!\n\nOr maybe Im just a sucker for myth|Mythology. Who knows.},{title:SimpleNote,created:20200121021057941,creator:soren,modified:20250610010617738,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Simplenote is a...simple...tool for storing notes on the computer. Prior to beginning to use RemNote for scratch notes like this, I used it for keeping little blobs of content that didnt fit anywhere else.\n\nNo functionality for organization other than tags and search, so not particularly suitable for EvergreenNotes; but does plenty well when all you want to do is store a bit of information to reference later. Its simplicity is dogmatic and quite beautiful: you cant even store images in it! Has Mac, Linux, and iPhone apps. I only stopped using it because I didnt want to have too many tools lying around to decide between; it was still working great.\n\nSimplenote has been honored|https://controlaltbackspace.org/catalog/software/#simplenote in the TheControlAltBackspace Catalog of LikableSoftware.},{title:SimpleThingsDoneWell,created:20231127023911393,creator:soren,description:Simple things are rarely done well and are often underappreciated when they are, but are among the best things in life.,es:likely,modified:20231127211146755,modifier:soren,tags:Idea PhilosophyOfLife Psychology Systems Public,type:text/vnd.tiddlywiki,text:Things which are simple are often extremely difficult to do well (they might hide unexpected complexity, or their failings might be made more obvious by their simplicity; see NowhereToHideTheMistakes). Perhaps because of this, they also tend to be among the most satisfying when executed well. Yet simple things done well usually go unappreciated because they are simple.\n\nFor instance, rice and beans, done well, is absolutely delicious. Or a really good conversation with a friend is better than almost anything else you could do with them.\n\n\n!! References\n\nPossibly my favorite Hinge prompt is “My simple pleasures.” People (at least my kind of people) tend to go overboard and fill out all the available prompt space with all sorts of interesting things, and what someone considers important seems to tell a great deal about them in this undercurrent kind of way where you cant explain exactly what it tells you, but really feel like you know them and are either interested or uninterested by it (which is, after all, exactly what the prompts are supposed to accomplish).},{title:Simpsons,caption:The Simpsons,created:20200422235614275,medium:TV,modified:20200808144623848,tags:Source Public,type:text/vnd.tiddlywiki,text:American TV show.},{title:SingingLessonDuringThePandemic,created:20200529231435418,modified:20200529231549802,tags:Humor Music PandemicMood Public Idea,type:text/vnd.tiddlywiki,url:https://www.youtube.com/watch?vGUxgRGgtz0I&featureyoutu.be,text:An absurd YouTube video by MrAntonArmstrong and MrTesfaWondemagegnehu in which Tesfa sings horrifically off-key (I dont even know how he does it) and AA struggles to say anything remotely nice.\n\n\u003Ciframe width\1159\ height\652\ src\https://www.youtube.com/embed/GUxgRGgtz0I\ frameborder\0\ allow\accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\ allowfullscreen>\u003C/iframe>\n\nPublicizes the theory of DegreesOfUgliness.},{title:SingingLessWrong,created:20200321221925039,creator:soren,description:When doing something right seems like a tall order, strive to at least do it less wrong.,es:confident,modified:20230407031148555,modifier:soren,reviewed:20230406,tags:Music PhilosophyOfLife Public Favorites Idea,type:text/vnd.tiddlywiki,text:When I was just getting to know K.B.|PrivatePerson, we ended up walking back after the StOlafChristmasFestival one night to our dorms, together, just the two of us|UnityWalking. I started talking about the voice lessons I had begun to take and how much I was enjoying them, and specifically how I was “learning to sing right.”\n\nThat wasnt quite right though, I thought, and I changed it to “learning to sing less wrong,” to mutual appreciation that Id noticed something important.\n\nWe never really manage to figure out how to do something as complicated as singing “right,” even when there is a single clearly “right” way to do it. We might hope, as very human beings on this earth, to avoid some of the things that are pretty plainly wrong, and to DoTheNextRightThing in improving our actions.\n\nRelated to PerfectionIsSubtractive: remove all the wrong things and youre left with something minimal and beautiful.\n\nCf. the rationalist site LessWrong.\n\n!! References\n\nThe Mutt email client calls itself “the mail client that sucks less.” Ive discussed this as an element of LikableSoftware.\n\n\u003C\u003C\u003C\nLaTeX is the best tool for fine control over layouts. This is less because of its own intrinsic quality and more because everything else is far, far worse.\n\n---https://www.hillelwayne.com/post/cheatsheets/, \u003C\u003Crt 11348>>\n\u003C\u003C\u003C\n\n\u003C\u003C\u003C\nThe least wrong thing we can say about God is that God is love.\n\n---monk at St. Johns, \u003C\u003Crt 3439>>\n\u003C\u003C\u003C},{title:Singularity,created:20200322161328741,creator:soren,es:confident,modified:20211228160401544,modifier:soren,tags:Futurism Code Definition Public Idea,type:text/vnd.tiddlywiki,text:Hypothetical situation which would arise when a sufficiently powerful ArtificialGeneralIntelligence system gained the ability to improve itself. In theory, this would result in exponential growth of this systems intelligence.\n\nOpinions differ vastly on whether this would be beneficial or an existential threat to humanity.},{title:Sink,caption:The opposite of a Source: where ideas leave the system in the form of things I create.,color:#ff0000,created:20200226131429312,creator:soren,icon:$:/core/images/tag-button,modified:20210825162301331,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\nSinks are very much like sources in most regards. They use the same naming conventions and fields as Sources, to the extent that this makes sense.},{title:SirensOfTitan1959,author:Kurt Vonnegut,caption:The Sirens of Titan,completed:20220209,created:20220308130058022,creator:soren,medium:book,modified:20230425140523190,modifier:soren,rating:great,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1959,text:Novel by MrKurtVonnegut, more or less attempting to explain the meaning of life, and, remarkably, more or less succeeding as well (in my view).\n\nExtensive notes and flashcards in RemNote: Im starting to experiment with SpacedRepetitionForFiction here.\n\nAn old-money rich man named Winston Niles Rumfoord brings about most of the change in the book, stumbling into a chrono-synclastic infundibulum while exploring in his spaceship, which causes him to take on a spiral shape through space-time and be in many places at the same time, learning the future. He uses this knowledge (or does he act on it through no choice of his own?) to build a giant army on Mars to invade Earth, but its so poorly trained and led that everyone except a tiny handful of people is killed when they try to land, hundreds of thousands of them. He then starts a new religion, the Church of God the Utterly Indifferent, before an explosion near the Sun causes his spiral to be thrown out into the void, where nobody will ever see him again.\n\nRumfoord uses his wife Beatrice and a depraved, greedy, new-money guy named Malachi Constant, among others, to carry out this plot. They and the entire course of human history also serve to provide a tiny piece of metal as a replacement part to the spaceship of an alien from Trafalmadore (in the SMC), who is journeying across the universe carrying an important message; the message turns out to be nothing more or less than “Greetings.”\n\nAgainst this wild backdrop, some people seem to manage to have good lives and find meaning in them, and others more or less do not. The reader is left to piece together which, in his opinion, are which; which is the point -- according to the book, everyone gets to (or has to?) find the meaning of life within themselves.\n\nThere are a lot of Douglas Adams echoes in this book (or rather, there are a lot of //Sirens of Titan// echoes in Douglas Adams, if we consider the chronology). Similar sense of humor; its just that Vonnegut usually has a point and Adams is more or less NonsenseLiterature.\n\n!! Prospective themes\n\n(1) You are involved in something much bigger than you which is quite possibly totally pointless (in your view), and you might not have very much control over it. But it is entirely your choice whether this is the only meaning you choose to make out of it.\n\nThis is a genuinely new and brilliant truth to me. And in the sense of MrMichaelPollans “Hallmark card insights” (see section in ToolsForThinkingDontWow) – it seems vapid when you put it like that, but having read the book it feels deeply important and meaningful.\n\n(2) There isnt much intrinsic essential difference between people and sufficiently complex machines...but we end up creating a difference when we identify someone or something as one or the other. Salo becomes un-machine by deciding to open his message against orders; Rumfoord becomes un-human by treating himself as a cog in the plans of the universe.\n\nUndoubtedly both end up carrying out actions with the same degree of free will (whatever that is). But Salo picks himself (itself? themself?) up and keeps moving with his mission and doesnt seem despairing in the end. Rumfoord tries unconvincingly to claim that hell be all right, that its all just the universes plan, when his spiral gets moved, but really I think hes in despair and, despite carrying out what he sees as his role, he doesnt see any meaning in it (I mean, he founds a religion based on the idea that God is utterly indifferent – but one could choose to see that itself as meaningful, and I dont think Rumfoord does).\n\n(3) Dont get infundibulated. You dont want that knowledge. Earth knows this is scary from the beginning, but it becomes clear that this isnt just fear of the unknown by the end; we see what happens to Rumfoord.\n\n(4) I cant be sure whether Vonnegut intended the Church of God the Utterly Indifferent to be positive, negative, or neutral. (Vonnegut was an atheist, but a generally pro-religion one and an occasional Unitarian attendee.) And I guess Im not sure what I think of it either. I dont think its exactly a parody, but neither does it seem to be a vision of a utopian future; and while it isnt a religion I would want to adhere to and it seems to have some serious negative impacts, there is something undeniably attractive and useful about it as well.},{title:SiversSrProgramming201301,caption:Memorizing a programming language using spaced repetition software,created:20200708012725592,modified:20200808145253218,tags:Source Public,type:text/vnd.tiddlywiki,url:https://sivers.org/srs,year:2013,text:Tips on the art of using Anki specifically for learning (and retaining!) a ProgrammingLanguage. More focused than many of the other great SpacedRepetition writeups I have in the ZK, but no worse for it (as long as youre interested in learning a programming language). Does a great job of listing specific types of cards you can make, which is something that would be a good thing to gather together -- see AnkiCardPatterns.\n\n{{!!url}}},{title:SkepticismAndAnimalFaith1923,author:Santayana,bibliography:LifetimeReading,caption:Skepticism and Animal Faith,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214036007,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1923},{title:SketchOnCommonplacing,created:20210325020045817,creator:soren,modified:20250307041237483,modifier:soren,tags:PersonalDocumentation Information RecordsProject TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:Published: https://controlaltbackspace.org/commonplace/\n\n!! Advice on Commonplacing in the Modern Era\n\nLoose tips for creating a CommonPlace in the manner of my RandomThoughts (maybe OrganizingYourMindBook or TheControlAltBackspace later?).\n\n!! What?\n\nKeep a running ledger in which you paste, type, or otherwise insert small snippets of text, authored by you or by other people, which seem interesting, potentially useful, or just worth hanging onto. These may be quotes, anecdotes, ideas, links, lists, or almost anything else. There are no rules about what you insert or how often you do it.\n\nCommonplacing, as I practice it, is the anti-notes system: there is (almost) no system, no order, and little reflection, but it works anyway.\n\n!! Why?\n\nIn short: commonplacing, especially done with the aid of a computer, requires practically no effort but noticeably improves both your internal and external memory and is very enjoyable. Its a particularly great way to get started with personal record-keeping if you have little experience or youve always failed to keep diaries or reference materials.\n\nA commonplace book never walks backwards|WalkBackwards, and because there are no rules on what you include and when you do it, you wont feel bad about not keeping up. The only thing to regret is not getting started sooner (but BetterLateThanNever).\n\nYou can start a commonplace by opening your favorite text editor or word processor, writing the word //Commonplace// at the top, and saving the file. There. Youve started. 30 seconds flat.\n\nOne year of regularly using a commonplace and youll be happy with what youve gathered. Three years and youll find your memory improving. Ten years and youll wonder how you ever got on without one. A year sounds like a lot of effort, but unlike most personal improvement tips, its not something you have to be careful to do every day: you just have to //have// the document and remember to use it occasionally when you want to save something.\n\n\n!! How?\n\nThe details of the system really dont matter a whole lot. However, there are several attributes it should have.\n\n* One attribute is indispensable: it must be absolutely dead-easy to add anything that seems like it might be interesting later. If its difficult, youll skip out on recording things. If you have ideas that seem really important or demand further development or relating to other ideas, you can shift them into another system like a ZettelKasten later. My median time to record an entry is about 10 seconds.\n* One attribute is extremely helpful: it should be easy and fast to do a FullTextSearch. Full-text search is unusually helpful for commonplaces compared to other notes systems because they are based on quotations, and quotations are quite easy to find by searching for a couple of salient words. If you decide to work in a system without full-text search, youll have to maintain your own indexes to have any hope of finding things, which is a lot of extra trouble. I have over 11,000 entries in my commonplace with barely any indexing, and almost never have difficulty finding things.\n* One attribute is quite convenient: it should be possible to copy and paste substantial portions of what you read into your commonplace. No doubt copying it in by hand helps your memory, but youll record more and keep better sources if its almost instantaneous to enter items, and I think this makes up for it.\n\nIf you want to use paper, 3x5 cards are particularly attractive, though as noted above, you cannot do without some kind of indexing|Indexing system in addition.\n\nI use a plain-text file with some custom text editor macros (for instance, pressing `--` inserts a new auto-numbered entry). But I didnt start with that; start with whatever tools you already have and know how to use, and if you reach a point where they are inadequate, start building more scaffolding on top.\n\nHave the tools visible all the time. If its virtual, keep the program or file open on your desktop; if its physical, keep it in sight or in your pocket. At the beginning, this will help you remember it exists and you should use it, and later on, it will make your whole life less annoying.\n\n\n!! Content\n\n* You can put anything you like in your commonplace, and with good search, the system becomes more useful the more you add. Here are some ideas:\n** Quotes you gather from your reading, people you live with, or strangers on the street: the beautiful, the thought-provoking, the absurd, the sad, the useful, the interesting turns of phrase, the inexplicable.\n** Stories and anecdotes -- things that happened to you, your friends, your grandparents, people on the Internet.\n** Ideas you had in the shower and dont know what to do with yet.\n** Summaries of interesting ideas you read about.\n** Links to websites to check out, confirmation numbers, lists of things to buy -- if you have better places to put these, by all means do, but if you dont, in your commonplace is a world better than nowhere! I am a pretty well-organized person, and I still frequently find myself with information that doesnt fit into any of my normal systems and I dont know what to do with; being able to paste it into my commonplace and be virtually assured Ill look for it there if I cant find it later is very helpful.\n** Lists of things you observe (for instance, I have one of my pet peeves, and another of things that are inherently funny).\n\n\n!! Metadata\n\n* Include sources -- when you can, paste in a URL, or a title and page number. Theres nothing more annoying than wanting to quote something you wrote down in your writing 10 years later and not knowing how to attribute it. If you got it off the internet though, you can also probably just google a few words in a row to find the original source, if you forgot.\n** I write sources at the end of a line, or at the very start of a new line, followed by `--` -- this way, it is easy to search for a particular source using just a standard full-text search where the query begins with `--`.\n\n* It is extremely useful to be able to link entries together, and to refer to entries from other notes you take. To support these use cases, I highly recommend sequentially numbering every entry you make (e.g., #8250): this yields short numbers (you probably wont hit 100,000 in your lifetime) that are easy to automatically generate. I didnt do this for my first 4 years or so, and I wound up having to go through and manually number all of my entries, which as you can imagine wasnt fun. Dont be me.\n\n* Connect items to each other -- if you find yourself thinking of a previous entry in your commonplace, go find it and mention its number in your new entry. Ideally, insert a backlink|BidirectionalLinks from the previous entry to the new entry as well. Similarly, if you mention a commonplace entry in some of your other notes, or in the margins of a book, or vice versa, record the connection between those ideas. This begins to get you some of the benefits of NotesMustLink, without requiring a great deal of effort invested in structure.\n\n* Consider marking items youre willing to share -- I use a `#` at the beginning of numbers of private entries, and a `@` for public entries. If you end up gathering thousands of entries, you might like to share some of them with others, but youll probably have some personal ones as well. If you mark them, youll be able to filter out the personal ones. I start every entry as private, and then whenever I think about it, search up to the last one that I marked as public and mark the rest of them down to the end of the file.\n\n* Use hashtags -- if you notice yourself writing a bunch of entries of the same type or on the same topic, consider adding a `#hashtag` for that topic with the source of each entry. This makes it easy to hop through all the items on that topic. I list out all my hashtags at the top of the file too, so I can remember which Ive used.\n\n\n!! What to do with the commonplace?\n\n* Read through your commonplace periodically. Its a great thing to do when youre bored or procrastinating. This serves several purposes:\n** Its highly entertaining.\n** It keeps your mind eclectic|EclecticMind.\n** It refreshes general memory traces related to all the items, so that you will be more likely to get an inkling of \hey, there was something in my commonplace about that\ when you encounter related ideas in the near future.\n** It refreshes your passive memory of //wording// of specific items. Compared to other ideas, a commonplace relies quite heavily on quotations, which often have very distinct ways of saying things. If you can remember even just a couple of distinct words from an item, chances are you can find it in seconds with Control-F, even in tens of thousands of entries. Even if you dont feel like you can haul out those words, if you give it a shot, youll often do much better than chance.\n** You might notice ideas that youd forgotten related to things youre working on. These could get you unstuck or offer inspiration or avenues for exploration.\n** Regularly reading your commonplace will enable you to think of interesting quotes and expressions when theyre relevant in everyday life. Even if you cant remember them verbatim, finding them will be trivial.\n\n* If youre catching up with a friend, use your commonplace to review interesting things youve read or thought about recently.\n\n* If you can vaguely remember something you read or thought about, try a quick search in your commonplace. This is particularly handy if you have some words rolling around in your head and cant remember where they came from. (Google works great until the words came from your life instead of a webpage.)\n\n\n!! Miscellaneous\n\n* If your commonplace is in a format thats not always with you, have another good way of \catching\ quotes and ideas youd like to get into your commonplace that is. I use a miniature pocket notebook; other people use a voice recorder, a phone app, or email notes to themselves. (I also email things to myself when Im at work.) Find a system thats easy and works for you. Unlike with other things you might use a \catch\ system for, it really doesnt matter much if you dont transfer the items into your commonplace for a week or even a month, so dont worry too much about your process as long as you have a way to avoid completely losing the notes (e.g., crumpled napkins stuck in your coat pocket are probably no good)\n\n* The commonplace centers the quote, or the anecdote, but if it doesnt speak for itself, add a few words of your own thoughts to help get yourself back in the same frame of mind later. Thats, in some significant way, what the commonplace is trying to do: create a series of tiny vignettes that help you remember what it was like to read or hear something, or have an experience, and transplant those experiences into new contexts.\n\n* Entries dont need to be set in stone. I like to record when Im updating things by writing //Update:// or the like in the entry, but adding more thoughts over the years usually makes entries even more valuable.\n\n\n!! Examples\n\nCheck out mine, called RandomThoughts, at https://randomthoughts.sorenbjornstad.com.},{title:SkillLeapfrogging,created:20250813232554948,creator:soren,es:likely,modified:20250813235125965,modifier:soren,tags:Idea Psychology Learning Public,type:text/vnd.tiddlywiki,text:Part of a deep pattern that explains many things about human behavior: People who are naturally or initially worse at something often end up reaching higher skill levels on average than people who started out better (i.e., leapfrogging them).\n\n* People who can tell that they are not particularly good at the thing and have sufficient motivation and agency to improve themselves go work on it, and consequently get much better (especially if the thing has relatively easy gains available, which is often the case|https://danluu.com/p95-skill/). Sometimes the act of trying to improve your skills also makes you really interested in it, and then you have additional motivation to keep working on it.\n* In contrast, people who are already OK at the thing are much less likely to notice they should work on it, or to have motivation to work on it, so they may never get any better.\n\n\n!! Examples\n\n* In the NoRehearsalFallacy, you skip working on music that you think is easy, instead focusing almost exclusively on the hard parts, with the result that you end up playing the hard music better than the easy music.\n* I know several mildly autistic people who have much better social skills than an average neurotypical person, despite their intrinsic disadvantages: the perceived need to catch up results in a lot of careful work.\n* (sort of, less pure) Non-native speakers of a language, or people who once struggled with a subject, are often the best at teaching it or understanding its internal structure.\n\n\n!! Related\n\nThis is a skills version of the extremely general region beta paradox|https://en.wikipedia.org/wiki/Region-beta_paradox, in which states that are, on the surface, further away are easier to reach than states that are closer. (For example, transportation often works this way: if you always walk to anything thats less than half a mile away, and drive to anything thats further, youll likely reach destinations that are 0.6 miles away faster than those that are 0.4 miles away.)\n\nAlso see the mediocrity trap|https://www.experimental-history.com/p/so-you-wanna-de-bog-yourself#:~:textAbout%20half%20of,achieve%20escape%20velocity. of jobs or romantic relationships: if your job or relationship is barely acceptable, theres a good chance youll keep going for quite a long time before you yank yourself out of it, likely due to some sudden unusually bad event. If its horrible, youll probably do so much faster.\n\n(TODO: Add stub nodes for these external links)},{title:SkillsKnowledgeAndTalents,created:20210623114845494,description:Skills, knowledge, and talents are distinct, and confusing them can result in wasting time trying to learn something unlearnable.,es:likely,modified:20210627030815554,tags:Employment Identity Learning Public Idea,type:text/vnd.tiddlywiki,text:A framework proposed in FirstBreakAllTheRules1999 that states personal attributes that predict work performance can be divided into three categories: skills, knowledge, and talents.\n\nSkills are capabilities that can be transferred from one person to another. For instance, doing arithmetic, using a computer program, and driving a car are skills. Skills are learned through a relatively reductive theory followed by lots of practice.\n\nKnowledge is the set of things you are aware of, including facts and experientially derived patterns. Its the basis of future pattern-matching and consequently wisdom. It can be learned, either by studying it from books or courses or through on-the-ground experience.\n\nTalents are broad recurring patterns of behavior; people are for the most part intrinsically better or worse at them (at least after they reach adulthood). For instance, enjoying being precise, or cheerfully thinking about hard problems for hours on end, are talents. People can learn to compensate for lack of talent in various ways, reaching an adequate level of competence for some purposes, but they cannot generally become talented at things they are not already good at, and trying to do so is a waste of time. Ways of compensating include getting just good enough|AreaOfAcquaintance that you pass the first curve of the DunningKrugerEffect, are not a complete disaster, and at least know what youre bad at; finding a partner whos good at that thing and can take it on for you; or finding a creative DesignApproach solution to DeflectResistance in that area (the book gives the example of a guy who had a ridiculous ego and was completely insufferable in the office but was also a brilliant salesperson, so the manager had a special entrance cut into his office so he wouldnt have to hang out with any other employees).\n\nThe book argues that skills, knowledge, and talents are often confused, so that managers and others try to teach talents and (to a lesser extent) refuse to teach skills and knowledge. This approach is silly and counterproductive; people are who they are and fundamentally dont change their most basic qualities. If someones talents are a poor fit for the role, the correct fix is to help them find another role they can excel in -- even if that means firing them|QuitWhatYouSuckAt -- not to try to squash them into developing talents they dont have.\n\nThis confusion is particularly unfortunate because talents are by far the best predictor of success in a role, and the WorstBottleneck to improvement. Anyone can learn skills and knowledge given enough time. Someone with a set of talents that doesnt match those that allow excelling in a given role will never be an excellent performer in that role, no matter what.\n\nReferring to the StrengthsFinder assessment also published by Gallup, most people do not know their talents, perhaps because its hard to identify them unless you both end up in a position where you can best use them and reflect on what is going right (see HaveToExperienceItToUnderstand). Management tends to focus on pathology: what parts of my employees arent good enough or could be improved? As a result, employees dont realize what they are in fact good at and what they should do more of.},{title:SkinInTheGame2018,caption:Skin in the Game: Hidden Asymmetries in Daily Life,created:20200819030403422,format:ebook,medium:book,modified:20210606225354788,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2018,text:Part of MrNassimNicholasTalebs //Incerto// series, after AntiFragile2012.},{title:Skype,created:20210917204753077,creator:soren,modified:20210917204755533,modifier:soren,tags:Software Public,type:text/vnd.tiddlywiki},{title:Slack,created:20240220025703982,creator:soren,description:Key to a good life: enough slack in every resource to avoid binding constraints on behavior.,es:confident,modified:20250311180950173,modifier:soren,tags:Idea Definition Systems Public,type:text/vnd.tiddlywiki,text:Slack, as concisely defined by Zvi Mowshowitz|MrZviMowshowitz, is the absence of binding constraints on behavior. That is, when youre not at risk of being forced by lack of a resource to do something you dont want to do, or to pass on something you do want to do, you have slack.\n\nConsider money. If you have no slack, because youre always spending all of your money before you earn more, youll be constantly having to do weird and stressful maneuvers to have the money to pay your bills when they come due, and sometimes you might be unable to pay for something you badly need at all. Recently I heard a friend|PrivatePerson got stranded downtown and had to walk a few miles home at 2 AM in midwinter because she was out so late the buses had stopped running and she couldnt afford the Uber surge pricing. It would be one thing if it had been principle and she didnt //want// to spend that much (see OkAsAnOption), but she literally didnt have the money and //couldnt//. Thats a terrible feeling! Whats more, without slack its difficult to get ahead, because all of your money is going immediately to staying afloat, and youre unable to make decisions that will save you money in the long run but cost more up-front.\n\nIn contrast, once you have slack (even, say, $500 in savings can be life-changing), your day-to-day decisions are no longer about whether there are enough zeroes in your checking account, but whether some use of your money aligns with your priorities, which is a much less challenging or threatening question (sometimes it can even be fun). I was talking to my parents the other night and complaining about having to find $1,200 to pay for new blinds at my apartment, figuring I would take the money from my security deposit from my old apartment when it comes back, or maybe I could get a six-months-at-0% financing offer. But because I have plenty of slack in my finances, this is in some sense an academic discussion for me. If I wanted to, I could just go down to the store and charge the $1,200 right now.\u003C\u003Cfnote \This is not a pure function of how much money I make; according to Bankrates 2024 survey|https://www.bankrate.com/banking/savings/emergency-savings-report/#pay-for-sudden, 30% of people who make $100,000 or more per year still wouldnt be able to do that! Although I do note that I might try to select the “reduce my spending on other things” option and avoid using my savings at all, so its possible the survey language is hiding the fact that the most financially comfortable people dont have to touch their savings for an unexpected $1,000 expense at all because they already have that much slack in their monthly income! Certainly, for me, “paying from savings” is happening on paper; I take $1,000 from a “savings” category in my budget and put it wherever its needed, and then put money I earn back into the “savings” category on my next couple paychecks (likely some of that money goes there instead of some discretionary category I might otherwise have spent it in). With a relatively small emergency expense like $1,000, theres a good chance most or all the money is back in the “savings” category by the time that $1,000 is actually paid out on the next months credit card bill, so that in some sense I didnt actually use my emergency savings.\>> The problem Im solving is not “I dont have the money in my bank account” but “the money in my bank account is already earmarked for other things, and I need to find $1,200 somewhere where spending it wont disrupt my other goals.”\n\nThats still important work, because while slack is critical to living a good life, maintaining it requires constant vigilance! It is easily gobbled up|SlackGobbling if not fiercely defended, and then you no longer have slack. Typically, you must create artificial boundaries to maintain slack -- for instance, you might say youre only going to work 8 hours per day and then youre done so that when you need four hours of overtime|OvertimePhilosophy you have the energy, or youre always going to have 5 days of PTO available so that when a family emergency comes up you can go first and ask questions later, or you always keep three ready meals in the freezer so that when your life gets crazy and you dont have time to make dinner, you can still eat well. Youll probably still find yourself hitting zero frequently, but now zero is not actual zero, but an ArtificialZero; should you encounter extraordinary circumstances, youll still have space to recover before reaching actual zero.\n\nYour time is another great example. You need to have some unscheduled time so that, when an opportunity arises to try something new or meet someone, you can jump on it. If you are so “efficient” that you have every hour scheduled|BusyIsBad, youll end up missing out on opportunities and failing to complete tasks when they end up taking longer than you expected. This is not efficiency, its bondage.\n\nMowshowitz does a great job enumerating many benefits of slack (see reference below), but I think the most important category we havent touched on yet is his claim that in order to be consistently morally upright, you need slack. When you have no slack, you end up getting pulled into things. Suppose youre already sick of your terrible job and your boss demands you do something illegal. If you need your paycheck on Friday to put food on the table for your family, youll probably feel like you have to do it. Whereas if you have three months of income sitting in your bank account to cover for you, you can just say no, or even quit on the spot if youre fed up enough. If you get fired for refusing but you have slack, youll be fine. In fact, you might feel great; the job was terrible anyway and you were probably already thinking about moving on, and now its done for you and you get a few weeks off to find something better, all while knowing you planned ahead and stood up for yourself.\u003C\u003Cfnote \The only thing better than having a job you love is having a job you love and knowing you can quit anytime if you want.\>>\n\n(The meaning of the phrase “fuck-you money” seems to have shifted since it was introduced. I quite liked the original meaning, which was exactly this: not necessarily enough money to be filthy rich or do whatever you like, but at least enough to say “fuck you” to someone whos manipulating you without worrying about yourself. Handily, thats not really all that much money; most people can save up enough over a couple years if they put their mind to it.)\n\n\n!! References\n\nSlack|https://thezvi.wordpress.com/2017/09/30/slack/ (Dont Worry About the Vase, MrZviMowshowitz)},{title:SlackGobbling,created:20240220032216995,creator:soren,description:Without constant care, slack in all resources tends towards zero because we save trouble by being less efficient when things feel looser.,es:likely,modified:20240220154910939,modifier:soren,tags:Idea Psychology Systems Economics Public,type:text/vnd.tiddlywiki,text:Across many different domains, given some amount of a particular resource, people tend to consume almost all of the resource available, eliminating Slack. In most cases, this occurs because we have a wide variety of options, where some are more difficult and more efficient, and others are easy and inefficient. Given sufficient amounts of a resource, choosing the easy way often makes a lot of sense! Unfortunately, in some cases this means one can end up running faster and faster only to stay in the same place unless great care is taken.\n\n\n!! Examples\n\n* ParkinsonsLaw: {{ParkinsonsLaw!!description}}, because when we have more time, we complete tasks with a greater degree of Polish, start doing tasks we would have skipped with minimal harm before, and work less intensely because we know we can waste some time and still succeed.\n* SuitcaseParadox: No matter what size suitcase you decide to take with you when you travel, you tend to fill it to the top, because when space feels more abundant, you pack less carefully and throw in more items that are moderately convenient but unnecessary.\n* BrokeMillionaireEffect: Whether someone has lots of money saved or lives paycheck to paycheck has only a modest correlation with their income, because we have an almost unlimited number of opportunities to spend more money for small amounts of additional utility, or simply watch our money less carefully. The people who break the paycheck-to-paycheck cycle and become financially comfortable are thus not the ones who make a lot of money, but those who pay attention to spending whatever amount of money they have efficiently|EfficientLife. (Of course, higher income makes this easier! But more money is just a tool|RoleOfTools, it does absolutely nothing to bring about the outcome. Sufficient money makes financial stability possible; attention paid to efficiency makes it happen.)\u003C\u003Cfnote \Related: A single variable|https://www.mrmoneymustache.com/2012/01/13/the-shockingly-simple-math-behind-early-retirement/ controls how soon you can reach complete financial independence, your savings rate. It doesnt matter if you make $10,000 a year or $1,000,000 -- if you save 50% of your income (for example) into index funds with typical performance, it will take you 16 years of saving to be able to draw that income for the rest of your life with an extremely high likelihood it will never run out. This works because as you increase your savings rate, youre also living on less, so youll need less of the money youve put aside per year in the following years.\>>\n* MarchettisConstant: Typical commutes have been unchanged throughout history at around 30 minutes one-way, because were happy spending about that long on traveling. If we can get places faster, we use the slack to live in a place we like more thats further away from work, or to get a better job that would have been too far to travel to before, rather than to save time. (With the rise of remote work, hour-long commutes that you make only on two or three days a week are feeling like sensible choices. Wouldnt you know it, that still averages to about 30 minutes a day.)\n* MooresLaw: Except in isolated applications, software is no faster than it was in the 1970s, despite average computers having ~10 million times as much raw processing power (a mind-boggling increase\u003C\u003Cfnote \And one which, Ill note, came even as computers shrank from the size of a closet to the size of your pocket.\>>). In fact, by some measures like keyboard-to-screen latency|https://danluu.com/input-lag/, computers are actually //slower// now. Weve used all the performance speedup on (a) being lazier (aka “more efficient”) programmers, and (b) doing things that we couldnt do before at all because they were computationally infeasible.\n\n* JevonsParadox: In general, when a new technology causes a process to become more efficient (say, everyone changes their lighting from incandescent to LED lightbulbs), some of the efficiency gain is consumed by InducedDemand. This can take the form of less efficient use (people are less careful about turning out the lights now that it costs little to leave them on) or of new applications (its now practical to make your living room as bright as the outdoors|https://www.benkuhn.net/lux/). For transformative technologies, this effect can be amplified by general economic growth created by the technology, occasionally to the point that consumption ends up rising //above// its original level!\n\n\n!! Working in reverse\n\nAlthough slack gobbling often has bad results, it can be used to ones advantage by intentionally restricting the resource, forcing creativity that improves efficiency (a form of GenerativeRestriction). Recall the StockSanfordCorollary to ParkinsonsLaw: “{{StockSanfordCorollary!!description}}.” Challenge yourself to do what you can with smaller and smaller amounts of a resource it would be convenient to conserve -- you may find you can do just as well or even better while using less of it!\n\nFor instance, with regard to the income effect, you can have money you want to save taken out of your paycheck and sent to a savings or investment account before it even hits your checking account. While you theoretically could just go move the money back, you probably wont, because that takes a little bit of work, and youll spend all the time it takes to complete the task feeling bad that youre working against your long-term goals! Instead, youll see just the amount of money that you were willing to spend in your bank account, and youll find a way to avoid hitting zero before your next paycheck. That is, youve created an ArtificialZero, where you actually have lots of slack below zero which you can deploy in extraordinary circumstances, but in ordinary ones you keep strictly to your chosen zero.\n\nYou can similarly use the SuitcaseParadox to your advantage by intentionally pushing yourself to pack in smaller and smaller suitcases. Eventually youll still be filling up your suitcase, but it will be a twenty-liter day pack instead of a big hard-sided case on wheels, and youll still have everything you need|TravelingLightAsSpiritualDiscipline.},{title:Slapstick1976,author:Kurt Vonnegut,bibliography:SharedConsciousness,caption:Slapstick, or Lonesome No More!,completed:202209241200,created:20221003165840610,creator:soren,medium:book,modified:20221114031247786,modifier:soren,rating:good,readstatus:read,tags:Source Public,telepathy-description:Wilbur and Eliza are fraternal twins who are mentally disabled when apart, but explosive geniuses when they are close enough to share their minds.,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1976,text:Novel by MrKurtVonnegut, read with the book group.\n\nI would characterize this as a satire on the American individualist project. Wilbur, the narrator, and his fraternal-twin sister Eliza are intellectually disabled alone, but explosive geniuses when together; they can combine their minds using some kind of proximity-based telepathy|TelepathyFascination, which allows them to specialize. Most importantly, Eliza cannot read at all, but comes up with brilliant ideas, so Wilbur is responsible for reading to her. They have a lot of time to read and think because their parents shut them up in a distant mansion with some servants and visit only on their birthday. They make everyone happy by pretending to be permanent mental three-year-olds, but actually they spend all their time wandering through the secret passages of the mansion, reading all the books in the library by candlelight in secret places, teaching themselves the languages along the way.\u003C\u003Cfnote \Gotta say, if as a child I could have transported myself into a prelapsarian (in every sense, including its disadvantages) utopia that worked any way I could imagine, I think this would have been BASICALLY IT. Really control your entire life with just a little bit of pretending, check. Partner in crime youre super close to, check. Secret world, check. Lots of self-paced learning and thinking, check. Heck, I might still agree to try this out if given the opportunity. Itd be a fun diversion for a while anyway.\>>\n\nThey eventually find out that their parents are distraught at their being stupid, and proceed to reveal that they actually arent. This does //not// go well; while quite intelligent in some ways, they obviously have no social skills at this point and have no way of figuring out what will happen. What happens is that they get tested apart, found to indeed be stupid, and then separated for most of the rest of their lives. (They once reunite and write a book on childrearing in five days with no prior work or research, but also essentially go insane and imprison a number of people, refusing to let them go to the restroom and feeding them only peanut-butter-and-jelly sandwiches, so they decide they had best stay physically away from each other in the future.)\n\nLater, Wilbur becomes the President of the United States, and resurrects a paper he finds that he and Eliza wrote way back when in which they proposed a way to eliminate loneliness from the country by giving everyone a new, artificial family, with a randomly generated name and number that defines your relations. When this is implemented, some people hate it at first, but Wilbur later sees it actually working, visiting a sort of democratic family meeting in Indianapolis. He also meets with Eliza, who is dead by this point, using a machine that allows people to talk to the dead, and she urges him to kill himself so he can come help her solve the social problems in heaven.\n\nThis has been one of my favorites so far. It was quite concise, highly entertaining, and full of hilariously wacky ideas that nevertheless you cant help but think have something to them.},{title:Slashdot,created:20201205233157291,modified:20201205233323901,tags:Publication Public,type:text/vnd.tiddlywiki,text:Old-guard cross between a blog, a forum, and a news aggregator for tech news (its supposedly an aggregator, but the extensive comments section on each article is at least as much of the draw and often turns it into an opinionfest).\n\nEvidently, the name, like xkcds, was intentionally chosen to be difficult to pronounce, especially when reading the entire web address to someone not familiar with URLs, which was common at the time Slashdot came about: “http colon slash slash slash dot dot org.”},{title:SlateStarCodex,created:20200824120127893,modified:20200824120203219,tags:Publication Public,type:text/vnd.tiddlywiki,text:Rationalist blog committed to polite and meaningful discourse and full of often-rarely-short-of-ingenious ideas.},{title:SlaughterhouseFive,author:Kurt Vonnegut,caption:Slaughterhouse-Five,completed:20220716,created:20220716195807701,creator:soren,medium:book,modified:20221114030452292,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:MrKurtVonnegut,url:,year:1968,text:Classic MrKurtVonnegut novel about WorldWarTwo and the fire-bombing of Dresden. Just after re-reading anyway, I think I like it more than //Catch-22// (which I found on point but dreadfully boring -- but maybe I was just a dumb high-schooler and should try it again) and //All Quiet on the Western Front// (which is very good, but a different kind of book, to the point that maybe its unfair to compare them|FavoritesCompareIncomparables; its a similar kind of anti-war message, but its an actual war story in a way that //Slaughterhouse-Five// is so good it doesnt need to be, if that makes sense).\n\nI had read this in high school (2011 maybe?) but didnt remember very much about it when I reread it for the Vonnegut reading group in 2022.\u003C\u003Cfnote \I remembered almost all of the books single not-particularly-salacious sex scene, though, including several sentences word for word, plus the dirty limerick at the beginning. Theres a reason people recommend using sexual imagery in MnemonicTechniques!\>> I was struck by how little of the book actually discusses the attack on Dresden, despite that people always say that this is what its about. And, well, thematically it //is// about that, of course, but maybe thats part of why the book is such a masterpiece; it doesnt talk much about the subject matter directly. At least half of it is about Billys post-war life and his time on Tralfamadore and the surrounding events, and the part thats about the war is at least three-quarters about Billy getting captured as a POW and gradually making his way to Dresden. The actual fire-bombing is a couple of pages and consists mostly of them huddling in a basement and hearing that everything is being reduced to ash. Rather than a book about the bombing itself, its more a book about the fact that people bombed Dresden and what that means about the world.\n\nThe non-linearity is key of course, and its done incredibly well in my opinion. Much of the time when you get a non-linear narrative thats chopped into pieces this small, its intended to confuse or slightly disorient the reader -- not necessarily enough that they cant figure it out or get frustrated, but enough that thats part of the impression you get from reading. In //Slaughterhouse-Five//, there are extremely good signposts and the themes dovetail so well that the cuts feel inevitable and not even slightly disorienting; plus all of the pieces somehow add up to a linear narrative even though its only the Dresden storyline that actually moves linearly forward in time (maybe this is what unifies it).\n\nI had forgotten that the catchphrase “So it goes” is not purely a Stoic-style admonition to realize that what happened cant be changed. It is that, of course, but its closely tied up with the notion of time being an illusion, something which like the Stoic ideal can be legitimately comforting to some people and laughably absurd to others. I think Im somewhere in the middle -- I take it seriously, but its also not fully satisfying, and I also dont think I can be sufficiently confident about the actual nature of time to be sure this is even an accurate explanation at all (even though I wrote a section of a paper in my \Space and Time\ class arguing for exactly this position -- sometimes such classes and such writings teach you primarily what you dont know!).\n\nIts been interesting to see Vonnegut leading up to this book in his other books; it has been obvious, sometimes painfully so, that hes had his experiences in Dresden in the back of his mind, maybe even at the front of his mind, as hes been writing all his other books, but hasnt quite been able to process it all enough yet to treat it properly. //Slaughterhouse-Five// has even more cross-references to Vonneguts other books than the average, and you can see pre-echoes of the themes here in the others.\n\nI will definitely reread this again at some point. It should be part of everyones understanding of war and humanity.\u003C\u003Cfnote \Well, unless this plane crashes before I get back to the US or something. The universe doesnt owe me time to reread Kurt Vonnegut.|UniverseDoesntOweUsAnything So it goes.\>>},{title:SmallBets,created:20200712215346854,es:confident,modified:20210509003808392,tags:PhilosophyOfLife LifeDirection Creativity Public Idea,type:text/vnd.tiddlywiki,text:An exceedingly valuable technique across many areas of life and beyond: dont go for big bangs or bet everything on one event. Instead, try a lot of things out, and see how they go. Small bets on things that can occasionally pay off big yet have little downside (asymmetric payoffs) are particularly valuable; if you can place enough of these and are patient enough, youre likely to win big eventually (this is discussed at length in BlackSwan).\n\nIf you dont get self-evidently lucky in the amount of time you spend and you have to expand on one or two of your small bets, at least you have gathered a great deal of additional information to help you decide what will succeed. See MrRichardGabriel in WorseIsBetter: why bet everything all at once when you can start small, get feedback, and build something better from the start?\n\nIdeas that incorporate this technique, among others: AgilePhilosophy, AgileHumility, AntiFragility, TenPercentTime, FlaneurMethod, IterativeProcess, CareerMission, DefaultToOpen.},{title:SmartNotes10Principles20200204,bibliography:Zettelkasten,caption:How To Take Smart Notes: 10 Principles to Revolutionize Your Note-Taking and Writing,created:20200225030757254,description:A summary and extension of //How to Take Smart Notes//. Focuses on the idea that WritingIsThinking and you should mix up your ideas.,medium:article,modified:20200808145300767,tags:Source Public,type:text/vnd.tiddlywiki,url:https://fortelabs.co/blog/how-to-take-smart-notes/,year:2020,text:Blog post by MrTiagoForte of ForteLabs introducing HowToTakeSmartNotes, q.v.\n\nFocuses on the critical idea that WritingIsThinking and all of its consequences. Everything needs to get into a mixed-up personal system which is ratcheted|RatchetingProcess, whence it eventually can effortlessly become publications of whatever kind (\publication\ could be a formal article, or just something you share with someone else, according to the author).},{title:SmellingTheCheese,created:20200506183830974,modified:20200521203150593,tags:Business AgilePhilosophy Public Idea,type:text/vnd.tiddlywiki,text:> Smell the cheese periodically so you can tell when it is getting old.\n--- WhoMovedMyCheese\n\nIts important to monitor changes as they occur so that you can move at the right time. When you wait until the last moment to change, you dont get to do it on your own terms, its usually harder to accomplish, and you may have missed out on a lot of gains earlier (p. 90, and others). Still, its always BetterLateThanNever.\n\nSee also RespondingToChange and IfYoureReadyYoureLate.},{title:SocialDistancing,created:20200402015352219,modified:20200910024728412,tags:PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:One of the defining features of a pandemic: people have to try to stay away from each other in one way or another. During the 2020 coronavirus pandemic this is being enforced by the government in most places: public institutions are closed and you can be fined or arrested for staying open, gatherings are limited to a few people at once, and people are supposed to stay at least a few feet away from each other at all times when they have to be in public (cf. xkcd on the 6-foot zone|https://xkcd.com/2286/).\n\nRegardless, people get at least a little bit scared of each other. Not as in theyre worried the person will lash out at them, and because its mutual and dangerous its not unfriendly like it is if someone shies away from you when you have a cold. But because physical distance is so tightly related to social cues in many ways, the effect is the same.\n\nEarly on, people stopped saying hi to me on the street or even responding to me when I did, which I found disconcerting. That seems to have reversed now, with people being maybe a bit more friendly than they otherwise would -- probably because otherwise were all sitting at home and seeing a fraction of the people we normally would, and were happy for whoever we do see.\n\nAt least some agency tried to change the term to “physical distancing” midway through this round after asserting that we dont want people to get //socially// distant, we just want them to stay away from each other, but that was after it got burnt into the lexicon. Plus, it just doesnt have the same ring to it!\n\nOne way of dealing with that is by using other UniverseConnectionMethods. Of course, the Internet|PandemicInternet is a godsend as well in 2020. Thats something nobody has ever had during a pandemic before. PandemicLoneliness is a thing, though maybe not as bad as I expected.},{title:SocialMedia,created:20230307024933732,creator:soren,modified:20230307024935410,modifier:soren,tags:Index Public,type:text/vnd.tiddlywiki},{title:SocialMediaImportanceDelusion,created:20200410141805043,creator:soren,es:likely,modified:20210511010920781,modifier:soren,tags:InterpersonalRelations Psychology SocialMedia Public Idea,type:text/vnd.tiddlywiki,text:MrCalNewport identified in DeepWork (p. 207) that most people think people will miss them if they leave SocialMedia. However, this is almost certainly a crock, and heres the reason: social media is mostly about validation (cf. SocialMediaIsAntisocial). Validation is great, but what happens on social media is that the platform makes it really easy to give and receive large amounts of even unwarranted validation, so people end up engaging in, as he puts it, a mentality of “Ill like your post and you like mine.”\n\nThen theres the fact that people usually follow hundreds or thousands of other users, making each connection potentially useful or interesting but exceedingly disposable.\n\nIn consequence, your disappearance from any one persons feed is likely to go entirely unnoticed, unless youre one of their closest friends (and even then, it might take them a long time to notice unless they try to message you directly!).},{title:SocialMediaIsAntisocial,created:20200410141410783,creator:soren,es:likely,modified:20210606164323127,modifier:soren,tags:Software InterpersonalRelations Psychology SocialMedia Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:I read recently an argument (I believe this was in DeepWork) that //social media is making us antisocial//. Obviously, that sounds pretty dumb at first blush, but its actually extremely accurate:\n\n* The existence of SocialMedia can make us feel like were getting just enough social interaction to allow us to ignore that we really arent experiencing the real connections. (This works in much the same way that DataIsDangerous: it can make us think were in a different situation than we really are.)\n* Social media is largely about validation and a little bit about sharing information, and relatively rarely about actual connection. Cf. SocialMediaImportanceDelusion.\n* It actively encourages shallow interactions, because thats pretty much what the platform supports. See HammerAndNail.\n* Many parts of social media are more about propagating others thoughts (ResharingCulture), rather than sharing our own thoughts and creating genuine relationships with people that way.\n\n!! References\n\nOn the just-enough-social-interaction aspect of social media and pornography:\n\n> The internet has made it so easy to gratify basic social and sexual needs that theres far less incentive to go out into the meatworld and chase those things. This isnt to say that the internet can give you more satisfaction than sex or relationships, because it doesnt...but it can supply you with just enough satisfaction to placate those imperatives...I think its healthy to ask yourself: If I didnt have any of this, would I be going out more? Would I be having sex more? For a lot of people my age, I think the answer is probably yes.\n> ---“Why Are Young People Having So Little Sex?|https://www.theatlantic.com/magazine/archive/2018/12/the-sex-recession/573949/”, TheAtlantic (\u003C\u003Crt 10224>>)\n\n(Cf. MicrotransactionalDystopia.)},{title:SocietyCafe,created:20250626183028785,creator:soren,modified:20250626183029735,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SociologicalQuotationMarks,created:20200201051131680,creator:soren,es:confident,modified:20230413143557346,modifier:soren,reviewed:20230413,tags:Writing Politics SorenConcept Public Sociology Idea,type:text/vnd.tiddlywiki,text:Sociological quotation marks are ScareQuotes that surround terms which are likely subject to cultural or personal biases of one kind or another. For instance, “developed world,” “American social context,” or “normal.”},{title:Software,color:#ff4d00,created:20200312153017920,modified:20201205232556897,tags:Meta Public,type:text/vnd.tiddlywiki,text:Identifies pieces of software or software from a users perspective. //Not// about developing software; see Code.},{title:SoftwareAnalysis,created:20200322023702679,creator:soren,es:confident,modified:20211206161104024,modifier:soren,tags:Definition Code Public Idea,type:text/vnd.tiddlywiki,text:Part of the SoftwareDevelopmentLifeCycle, the process of identifying what the ActualRequirements for a system are, whether they are feasible, and (to some extent) how one would go about implementing them (this may be more of a design question in some cases).\n\nMay plausibly involve more emotion|EmotionalAnalysis than other parts of the SDLC.},{title:SoftwareDevelopmentLifeCycle,created:20200411031800711,creator:soren,modified:20200812140710499,modifier:soren,tags:Process Software MentalModel Public Idea,type:text/vnd.tiddlywiki,text:The development of software involves several disciplines, which together are often referred to as the SDLC:\n\n* Analysis|SoftwareAnalysis (deciding what it should do)\n* Design (determining how best to approach the problem and organize the work)\n* Development (actually writing the code)\n* Testing|SoftwareTest (making sure the new code does what you want it to -- spoiler alert, it usually doesnt)\n* Release and operations/maintenance/support\n\nIntrospection and ContinuousImprovement should be a part of it as well, and for good results on most projects, the process should be IncrementalAndIterative so that these are not sequential phases but interacting ones that are repeated and run out of order as necessary.},{title:SoftwareEfficiencyMonitor,created:20210417124208924,creator:soren,es:possible,modified:20220505183536571,modifier:soren,tags:MyGreatIdea Design Software Learning Public Idea,type:text/vnd.tiddlywiki,text:WatchingExpertsUseSoftware is a surprisingly effective way to learn new tips and thought processes for using software. But it requires, well, having an expert and watching them for a long time, and YouTube videos arent as helpful as they could be because youd probably be interested in watching an expert do more or less //the exact set of tasks you normally do//; because there are so many things you can do with software, its fairly unlikely you can find one that matches that closely with what you want to do. Is there a way we could target some of these benefits more carefully? (The problem here is a form of BloomsTwoSigmaProblem: how can the obvious benefits of having someone give you tailored lessons be extended?)\n\nOne way to accomplish this targeting would be to watch what actions people take in the software when they use it themselves and try to identify tips based on that. For instance, if you notice that someone is repeatedly pressing the up-arrow key in a terminal, you can teach|RootsOfTheCommandLine them about reverse-i-search, or if theyre picking up the mouse and moving over to the “new tab” button in the browser, you can teach them about the Ctrl+T shortcut.\n\nThe downside of this mechanism would be that it seems implausible it could understand complex, multi-step tasks the user was doing often, much less offer a prefabricated talk-through about why you would do the task that way. And some of the benefit of watching experts on these kind of complicated tasks is that you learn theyre even possible. The Efficiency Monitor is only able to teach you how to do things you already know how to do a little bit better.\n\nDespite its comparatively limited utility, an Efficiency Monitor might have a good CostBenefitRatio if constructed properly.\n\nOne potentially fruitful place to experiment with this idea would be common command-line tools, because you wouldnt have to instrument anything, you could just write a script that analyzes your Bash history.},{title:SoftwareIsEatingTheWorld,created:20201015021600996,creator:soren,es:confident,modified:20230307024910011,modifier:soren,tags:Software Systems Public Idea,type:text/vnd.tiddlywiki,text:MrMarcAndreessen said in 2011 that “software is eating the world.” That is, things that were never amenable to being controlled or assisted by software are gradually becoming software-defined. The rise of the smartphone is a prime example of this: watches, metronomes, alarm clocks, timers, cookbooks, notepads, and the like are now software-defined inside this little glowing box. Not to mention your social life|PeopleAndTheirPhones.\n\nThe software-defined approach certainly offers a lot of power, but its worth reflecting on what were giving up. The software version is rarely quite as good as the physical version|SubtleCrappification; for instance, an app-based timer is harder to use than a kitchen timer when you have dirty hands and are already reading a recipe on your phone, and may have fewer options as well (e.g., for running multiple timers at once). Certain aspects of good design are unavailable; software-defined versions of things are usually LessExpressiveThanASandwich, for instance. Interacting with real, physical objects is usually more rewarding and less likely to give you RSI|KeyboardingTendinosis.\n\nSoftware can also be used as an assistant to actual physical objects, for example in the IoT by embedding sensors in them that link up to telemetry websites.},{title:SoftwarePattern,created:20200712171747902,es:likely,modified:20200712172411878,tags:Code Software Design Public Idea,type:text/vnd.tiddlywiki,text:A software pattern is a general, reusable idea about how to accomplish some particular task or architecture in software code. For example, the widely understood Factory Pattern (in many forms, depending on language) provides a way to create new objects without having to know the details of what kind of object should be created. Patterns are a way of bringing your understanding of a program up to a higher level|Chunking. (Related: PowerOfNames.)\n\nPatterns, especially those widely named and recognized by developers, are often associated with ObjectOrientedProgramming, but the idea of a pattern is of course not exclusive to OOP.\n\nThe concept likely originated in MrRichardGabriels PatternsOfSoftware. The GangOfFour book catalogued many OOP patterns and introduced the concept to a mass audience.},{title:SoftwareProliferationLimitsExpertise,created:20210417124008454,description:Because the average person must use such a large number of software packages, she is doomed to permanent incompetence in most of them.,es:likely,modified:20210617001407641,tags:Software Design Systems Learning Public Idea,type:text/vnd.tiddlywiki,text:Software sucks|WhySoftwareSucks and is broken|EverythingsBroken. We are incompetent with it. Why is that? (Cf. Questions.)\n\nObviously, in nearly all cases, the software itself is bad. But theres a contributing factor that makes things even more frustrating: because SoftwareIsEatingTheWorld and few understand the value of avoiding scale|AvoidScale in software, we have //so much software// and such complicated software to learn that we never get good at any of it. If we had time to learn the intricacies of most of our software, we could work around the problems much more readily than we actually can. Expertise is missing.\n\nI recently explained the typical approach to software today to someone thus: Ive been playing the violin for about 14 years. Last year I decided to branch out to mandolin -- after finally getting //really pretty good// at the violin. (Im no professional, but I can make a wide variety of music sound good enough that people will enjoy coming to hear me, which is what Im after.) If musical instruments were software in 2021, I would have instead spent those 14 years learning violin, guitar, piano, trumpet, drum kit, cello, didgeridoo, theremin, clarinet, pipe organ, banjo, tuba, ... And I would mix them up so I probably wouldnt play the same instrument twice in two weeks. And so even if I practiced daily, I would still be terrible at all of them, and it would be infuriating.\n\nOne of the huge advantages of the UnixPhilosophy is that, because complex tools consist mostly in a constellation|ConstellationsOfInstances of simple tools, we have the opportunity to reuse our simple tools over and over again, so we can actually learn them well. Further, it becomes reasonable to substantially increase the power and complexity of some of those simple tools, because we know we will be able to reuse them so much -- for instance, it makes sense to learn a text editor where you have to type :wq to quit|Vim because any time you spend learning the tool will be paid back many times over.\n\nSimilarly, tools such as TiddlyWiki and the SpreadSheet may be less powerful than a purpose-designed tool, and maybe a little slower to use by some metrics, but nevertheless they often work better because their user gains the ability to become an expert in that tool and customize it to account for its weaknesses. Maybe theyre making everything look like a nail|HammerAndNail, but at least theyre not trying to use a chainsaw without learning how it works.},{title:SoftwareTest,created:20200812135723761,modified:20200812140501550,tags:Code Process Public Idea,type:text/vnd.tiddlywiki,text:Tool/process for determining whether software does what it is designed to do, in many ways (features, lack of bugs, performance, security, etc.). Often the most time-consuming and frustrating part of the SoftwareDevelopmentLifeCycle. A common cause of OpsDev pain when one group of people develops code and another tests it and there is poor communication between them.\n\nMuch of testing can be automated to reduce the amount of time spent re-testing things over and over again; this also enables changes to be released more frequently|IncrementalAndIterative with no reduction in quality, as without automated testing one must manually re-run all tests to guarantee everything still works, which takes forever. However, determining WhichTestsToAutomate is important -- automating everything can be just as bad as automating nothing, as youll just end up spending all your time fixing automated tests.},{title:SoGoodTheyCantIgnoreYou,caption:So Good They Cant Ignore You: Why Skills Trump Passion in the Quest for Work You Love,created:20200712040227662,format:ebook,medium:book,modified:20210809161401721,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,year:2012,text:Book by MrCalNewport about finding a good job and career in the modern world. Starts by explaining why the “follow your passion” mindset is toxic despite being widely accepted (not only is it risky, it doesnt even work), then proceeds to explain a better method, which is based on (go figure) becoming so good at what you do that employers/clients cant ignore you.\n\nHeres the basic structure of the argument with its most important ideas:\n\n* CraftsmanMindset -- a sense of control and being good at your work is much more important to your subjective satisfaction than what, exactly, youre doing.\n* CareerCapital -- over the years, make yourself so good at something you cant be ignored, which gives you something to bargain with for that sense of control.\n* TwoControlTraps -- you can get sidetracked either by trying to pursue control too soon, or by not trying soon and confidently enough.\n* LawOfFinancialViability -- to determine which trap youre falling into (or if youre in the sweet spot), consider whether someone is willing to pay you to do something given your requests for control.\n* LawOfRemarkability -- projects that will get you noticed and give you control need to be not just valuable but remarkable.\n* CareerMission -- besides the CraftsmanMindset, a mission is the most important element for a good career; but instead of declaring your mission up front, once you are on a solid pathway, go exploring for meaningful missions that align with the skills and capital you already have.\n\nAn extremely divisive book when you read the reviews; Im inclined to say whether you agree with everything in it or not, its an important read if youre trying to plan a career. I will also say that most of the negative reviews Ive read appeared to have missed the point of the book, although perhaps that was my own ex post facto mixing of what the book said into my own worldview and not a point the book actually clearly made.\n\nThe StrengthsFinder may be a useful tool when adopting this mindset.},{title:SohoCafe,created:20230427035426803,creator:soren,modified:20230427035427593,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SolarFlare,created:20200403025946523,creator:soren,modified:20200403030326613,modifier:soren,tags:Risk Public Idea,type:text/vnd.tiddlywiki,text:Astronomical event in which energy is expelled from the sun. Produces auroras and other cool effects, but when large enough has the potential to fry electrical equipment. A general hazard for satellites and spacecraft, and also a potential SystemicDisaster for those of us living our everyday lives on Earth. It just hasnt happened yet (well, it //has// happened and been recorded, its just that at the time electrical equipment was not widespread enough for it to be a disaster).\n\nIn the early naughts, NASA did a study and found that the chance of a solar flare causing $2 trillion in damage in the next few years was over 10%. Just like the coronavirus pandemic|PandemicMood, all the experts are warning about it and people brush it off as unlikely (without looking at the stats). A serious solar flare could be as bad as or worse than than the coronavirus, and were going to experience some RoguelikeRegret sooner or later if we dont do some basic work on it.},{title:SolitaireAsLife,created:20220816021624701,creator:soren,description:Solitaire games are enjoyable partly because they imitate the challenging parameters of life while remaining games.,es:mythological,modified:20230405130837049,modifier:soren,reviewed:20250208,tags:Metaphor PhilosophyOfLife Idea Public,type:text/vnd.tiddlywiki,text:I enjoy playing various forms of solitaire (e.g., LaBelleLucie). To people who dont play, these games seem boring: wait, youre playing a game with yourself? Just moving cards around?\n\nI think solitaire imitates the rules of life in a way somewhat unusual among games, much like RogueLikes (see RoguelikeBook). In most solitaire games, its possible, even common, to do everything right and still lose|DatingMindsetTips/DoEverythingRightAndLose. Its also possible to do most things wrong and still win. In this way, solitaire is not fair. But on the margin, most of the time, the primary determiner of how well you do is still you|PeopleDontThinkTheyCanDoThings. In this way, its real and motivating. And it wouldnt be either if you could always win; then there would be no reason to play, just as life is meaningless if you cant fail|NoMeaningWithoutFailure.\n\nThere are breakthrough moments, when youve been staring at the cards for several minutes trying to figure out what to do, and you suddenly see it: the entire tableau clears as if by magic. Luck gave you the opportunity, but it didnt carry you anywhere. And the most satisfying games are invariably the ones where it seemed certain you would lose, but the cards came through anyway. Its these moments that let us celebrate being human.\n\nPlaying solitaire is setting your pattern-matching skills against the world. Sometimes the world wins. But not always. Were still here, after all.|AstonishingExistence},{title:Solo2024,author:Peter McGraw,caption:Solo: Building a Remarkable Life of Your Own,completed:2025-10-24,created:20251024174821447,creator:soren,medium:book,modified:20251024174846480,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2024},{title:SomeThingsAreBetterThanOthers,created:20200410145436946,creator:soren,es:likely,modified:20211027034437350,modifier:soren,tags:SorenConcept Ethics Public Idea,type:text/vnd.tiddlywiki,text:Me, \u003C\u003Crt 9888>>:\n\n> It should be uncontroversial that some things are better than others, and yet it kind of is.\n\nI suspect that because weve made so much good progress in throwing out garbage beliefs of the form “X is better than Y” like racist or sexist views, weve started generalizing the rule to places it doesnt belong at all. Some ideas are bad. Some art is bad. Some of my ZettelKasten tiddlers are bad. In fact, //most// things are bad (see SturgeonsLaw). This is OK.\n\nOf course, the definition of quality is problematic from a philosophical standpoint (see ZenAndTheArtOfMotorcycleMaintenance). Nevertheless, most of us KnowItWhenWeSeeIt.\n\nIt is just as important to reverently discard bad ideas and bad work as to elevate and praise good work. Indeed, it may be more important; if the bad work is removed, the good work will remain alone even if it isnt praised, while if the bad work stays, the good work will be drowned out even if it //is// praised. Perfection is subtractive|PerfectionIsSubtractive, and so is the canon. Through the philosophy of SmallBets and done tactfully when applied to other peoples work, the process need not be painful. (Cf. AntifragilityByCuration.)},{title:Song,color:#6c6cff,created:20200329174438917,icon:$:/core/images/list-bullet,modified:20200516163410500,tags:Meta Public,type:text/vnd.tiddlywiki},{title:SonsAndLovers1913,author:Lawrence,bibliography:LifetimeReading,caption:Sons and Lovers,created:20210703170128000,genre:Literature,medium:book,modified:20210705214036020,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1913},{title:soren-2013.jpg,type:image/jpeg,created:20210830130352307,creator:soren,modified:20210901204804243,modifier:soren,tags:Image Public,_canonical_uri:./extimage/soren-2013.jpg},{title:soren-and-annie-outing.jpg,type:image/jpeg,created:20221002225654018,creator:soren,modified:20221003034258543,modifier:soren,tags:Image Public,_canonical_uri:./extimage/soren-and-annie-outing.jpg},{title:soren-hair.jpg,type:image/jpeg,created:20201018035742777,modified:20201018035736556,tags:Image Public,_canonical_uri:./extimage/soren-hair.jpg},{title:soren-whiteboard-palette.png,type:image/png,created:20210917030951163,creator:soren,modified:20210921002840393,modifier:soren,tags:Public,_canonical_uri:./extimage/soren-whiteboard-palette.png},{title:soren.jpg,type:image/jpeg,created:20220220234901369,creator:soren,modified:20220221010216302,modifier:soren,tags:Image Public,_canonical_uri:./extimage/soren.jpg},{title:SorenConcept,color:#6c6cff,created:20200115230934416,creator:soren,icon:$:/core/images/list-bullet,modified:20201222053703122,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:A tag that identifies concepts or terms Ive made up, or appropriated from someone and renamed and are not generally known. See also MyGreatIdea.},{title:SorenSourceInfo,created:20210920171015078,creator:soren,modified:20210920171032337,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:A list of all sources may be found in the SourceList. A list of books only may be found in the BookList, and a bibliography of recent books read may be found in RecentlyRead. Books that are on my lifetime reading list can be found in LifetimeReading.},{title:SoritesParadox,created:20250309061332461,creator:soren,description:Dividing a continuous scale or one with a large number of gradations into categories is inherently ill-defined.,es:possible,modified:20250318214748076,modifier:soren,tags:Idea Ontology Identity Public Definition,type:text/vnd.tiddlywiki,text:Problem of definition created by having discrete categories that model a continuous, or very finely gradated, world: there must be some threshold between the categories, but no matter where you put it, crossing the threshold seems to be a distinction without a difference.\n\nSuppose you have a heap of sand. If you remove one grain of sand from a heap of sand, surely it is still a heap: it would defy common sense for something to be a heap with $$ n $$ grains of sand, but suddenly cease to be a heap with $$ n - 1 $$ -- for that to make sense youd have to pick a threshold like, 1,000,000 grains of sand is a heap, but 999,999 grains of sand isnt, and that seems indefensibly arbitrary. But if so, what happens if you just keep removing grains of sand? Then it must be possible to end up with a single grain of sand without ever transitioning from heap to not-heap, and surely a single grain of sand cant be a heap. Similarly, if you start with one grain and build it up, when does it become a heap?\n\nMaybe there is some state at which you have “sort of a heap”? But this just pushes the paradox to the transitions between not-heap and sort-of-heap, and sort-of-heap and heap.\n\nMaybe heapness is continuous and measured as, say, a percentage, and if something is more than, say, 80% heap-ish, then its a heap? But you seemingly still have to have some threshold for deeming something a “heap” in everyday parlance, or else claim that the word “heap” by itself is meaningless, which it doesnt seem to be, so youve just pushed the problem off to there.\n\nMaybe “heapness” is socially constructed and heapness is just determined by agreement? This seems comparatively satisfying. But I think individual people have the problem too -- if I personally sit and watch one grain being taken away from a heap at a time and try to raise my hand when it stops being a heap, I am not comparing anyone elses definition of what a heap is, yet I still feel like my concept of a heap would be meaningful even if I never got any other input -- indeed, if Im shown a bunch of piles of sand in isolation, I can trivially classify them into “heap” or “not heap” (or perhaps “sort of heap”). Its only if they get put in order with only one grain of separation that it becomes impossible to distinguish.\n\nMaybe theres just no such thing as a definition of a heap? This seems unsatisfying, though; we certainly seem to be able to talk meaningfully about them.\n\n\n!! References\n\nMy freshman year of college, I got a 375 out of 400 in one class; I needed a //376// to get an A in the course.\u003C\u003Cfnote \Amusingly, I ended my college career in the opposite state: if I had gotten a lower grade in any class on my transcript, by any amount, even a third of a letter grade in a quarter-credit class, I would have missed the //summa cum laude// cutoff of 3.9000, but I made it.\>> It is always tempting in cases like this to just nudge the person over the edge; but then havent you just created a new edge at 374 out of 400?\n\nLegal age limits often feel similarly weird. E.g., in some jurisdictions if youre 17 years, 364 days, and 23 hours old and sleep with an 18-year-old, thats statutory rape, but if you wait 1 hour, its totally kosher. Obviously that 1 hour allowed your brain to develop enough that you can now meaningfully consent!\n\nSpeed limits are similar -- in practice you wont get ticketed for going some small amount over the speed limit unless youre also doing something else stupid or dangerous and the speed limit provides a good excuse to stop you, so really when it says SPEED LIMIT 65 the effective speed limit is probably somewhere around 70. But in the mind of the highway patrol, theres still an arbitrary cutoff where if you go 1 mile per hour over it, theyll give you a ticket, which you have to admit seems a little silly. This one seems less bad than the previous two, though, because it still leaves significantly more room for human discretion.\n},{title:SoundAndTheFury1929,author:Faulkner,bibliography:LifetimeReading,caption:The Sound and the Fury,created:20210703170128000,genre:Literature,medium:book,modified:20210705214036028,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1929},{title:Source,caption:A single source of ideas, such as a blog post, book, or musical work. Sources may be part of Publications or Classes.,color:#ff0000,created:20200115231452835,creator:soren,icon:$:/core/images/tag-button,modified:20251011161637368,modifier:soren,refexplorer-hide:true,tags:Meta Public,type:text/vnd.tiddlywiki,text:{{!!caption}}\n\n{{SorenSourceInfo}}\n\n\n!! Naming\n\nThe names of source tiddlers consist of a short CamelCase slug -- possibly the mangled|OurNamingConventions title, or a description of it if the title is long -- plus, if available, the publication year. The actual title of the source goes in the `caption` field.\n\n\n!! Fields\n\nAs sources often need to be reformatted, displayed in tables, searched in complex ways, and so on, they should have a significant amount of metadata attached in fields.\n\n; bibliography\n: A list of bibliographies|Bibliography to include this source in.\n; caption\n: The full title and subtitle of the source, as it is known outside the wiki.\n; description\n: A one- or two-sentence explanation of what the source is. Optional, but highly recommended if the source is included in any bibliographies using the `bibliography` field.\n; medium\n: Description of what kind of source this is -- `article`, `book`, `website`, `film`, etc. Use the RelationshipValueTool|$:/tzk/Tools/RelationshipValueTool for a full, up-to-date list.\n; rating\n: An appropriate MediaRating. Optional, but highly recommended if youve finished reading/consuming the source.\n; url\n: If the source is available online and not behind a paywall, a URL leading to the source. Otherwise, dont bother -- anyone who doesnt have a copy will have to do their own research anyway.\n; universe\n: If the source is fiction, an arbitrary //universe key// which is placed on all sources and ideas taking place in the same fictional world. If youre not sure what to use as a universe key, you can just use the title of the source; but if multiple sources share the same universe (say, books in a series) youll want to use the same key for all of them.\n; year\n: If the source is not published on an ongoing basis (e.g., a website), the year of its publication. Updated editions should use the new copyright date if updated by the author, but not if the edition is merely a re-release by the publisher without substantive changes, or the addition of commentary or introductions.\n\n!!! Only used for books\n\n; format\n: `paperback`, `hardcover`, or `ebook`. Only relevant if //owned//.\n; isbn\n: The ISBN of the edition at issue, without dashes. (This can be scanned in with my barcode reader if a barcode is available.)\n; owned\n: `yes` or `no`\n; readstatus\n: `read` (fully read), `partial` (partly read), `unread` (never read), or `reread` (have read fully, but would be interested in reading again).},{title:SourceControl,created:20200322164039598,creator:soren,es:confident,modified:20200322164433016,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Development tool which maintains versions of software and a history of what was changed in each of them. The most critical part of an AlmModel.\n\nNowadays Git is the premier source-control system. Im sure it will be eclipsed someday by something new and cool, but for now I love Git, and I love that for once virtually everyone uses the best software available for the job.},{text:\u003C\u003Ctable \SourceList\>>,type:text/vnd.tiddlywiki,title:SourceList,tags:Meta Public,modifier:soren,modified:20210307130200584,creator:soren,created:20200322024716895,tbl-style-table:width:100%;,tbl-style-container:,tbl-style-colgroup:\u003Ccol>\n\u003Ccol style\width: 9em\>\n\u003Ccol>\n\u003Ccol>\n\u003Ccol>,tbl-sort-type:nsort,tbl-sort-negate:false,tbl-sort-by:medium,tbl-show-pagination:auto,tbl-show-mode:true,tbl-show-header:true,tbl-show-footer:false,tbl-show-edit:true,tbl-show-colgroup:true,tbl-show-caption:true,tbl-page-marker:,tbl-mode:normal,tbl-limit:9999999,tbl-filter:tagSource,tbl-expand:,tbl-columns:tbl-expand title medium caption year tags,tbl-class:tbl-style-tight,tbl-checkbox-value-unselected:,tbl-checkbox-value-selected:,tbl-checkbox-tip:,tbl-checkbox-tag:,tbl-checkbox-field:,tbl-checkbox-actions-unselected:,tbl-checkbox-actions-selected:,tbl-caption:Zettelkasten Sources,tbl-button-tip:,tbl-button-icon:{{$:/core/images/menu-button}},tbl-button-actions:,tbl-anything:,tbl-add-records:},{title:SoWhat,created:20210427004931992,creator:soren,es:likely,modified:20240126032121967,modifier:soren,tags:Idea FictionTheory Imagination Reasoning Religion Public,type:text/vnd.tiddlywiki,text:Most pieces of published writing aim to convey some kind of message, which can be called the //so what// of the piece. This message may not be explicitly stated, particularly in fiction, but it remains nonetheless.\n\nThis seems to go over peoples heads surprisingly often, especially in the form of taking stories too literally. Its almost like they dont understand|https://xkcd.com/2623/ what the purpose of a story is. (To be fair, this is probably a non-obvious thing to think about; to be less charitable, its such a large part of our world that not understanding it seems absurd.)\n\nFor instance, a surprising number of negative book reviews of fiction focus on specific details of the story. Sure, the plot matters; the story will probably suck if the plot is bad, for instance. But how often is a story actually told with the primary purpose of communicating a series of events? Instead, it might be intended:\n\n* To teach something about a skill or topic, or life in general.\n* To entertain.\n* To add someone to an in-group that treats the story as shared history.\n* ...and so on. (Further purposes are left as an exercise for the reader.)\n\nTo me, it should follow that the story should be judged primarily on its ability to produce these effects, rather than on its details. (Ill make an exception if the details are implausible|PlotHole.)\n\nSimilarly, whether an translation or an adaptation of a story is successful depends on whether its so-what has been adequately captured|MediumAdaptation, not on whether the details were brought across exactly.\n\nAnother example of missing the point is the Skeptics Annotated Bible|http://skepticsannotatedbible.com/index.htm, which is an impressive project that has always seemed to me to be solving a problem that doesnt exist. The goal is to prove that the Bible cannot be literally true if read as a single historical work. Some people do believe that, but will such people ever read or get anything out of this resource? They are going to follow the great book|FollowTheGreatBook regardless of what someone else says about it; the Bible is inerrant and this annotated thing is a piece of garbage put together by atheists to mislead them. Meanwhile, people more in the middle -- who might actually be convinced to become atheists by logical arguments (although apologetics might also be missing the point|InPraiseOfTheGods2020) -- will look at it and think its stupid because they have a more nuanced interpretation of the Bible, one that focuses on the so-what rather than the literal events, and whether it (say) contradicts itself in places, or involves cultural references that are out of place after two thousand or more years, is irrelevant.\u003C\u003Cfnote \\\Not to belabor the point, but surely the folks who put together the canon understood the Bible this way: how else could you defend including, say, four different accounts of Jesus life that tell the story different ways? That may have been sixteen hundred years ago, but people werent that stupid! Indeed, that was before the modern understanding of history; stories were //always// a bit more hearsay-based and metaphorical back then.\\\>>\n\nCf. TargetProblem: stories serve to create an understanding without directly touching it.\n},{title:SpaceAndTime,created:20200323115424441,modified:20210307153745525,tags:Class Public,type:text/vnd.tiddlywiki,text:StOlaf Interim class on the philosophy of space and time -- what the heck are these things anyway? That sounds like an easy or dull question, or one answered by physics, but the moment you start looking into them (as MrAugustine says) you realize you know nothing at all about it.\n\nA couple great questions to start with if youre in doubt:\n\n* At what rate is time moving?\n* What time is it for God right now?\n* Does time pass over a period when literally nothing has happened in the entire universe?\n* Can space be infinitely divided? If not, whats the smallest unit, and why?\n\n(Plus, of course, everything related to relativity.)\n\nTook this my senior year.\n\nAlso, some relevant software humor:\n\nimg width200 time-has-stopped.png},{title:SpacedRepetition,created:20200314212355703,creator:soren,es:confident,modified:20220524005548077,modifier:soren,tags:Memory Public Idea,type:text/vnd.tiddlywiki,text:Principle of memory that finds that spreading out reviews over a period of time results in better memory than bunching them together.\n\nIn particular, counterintuitively, reviewing something more often can not just be less efficient in total but actually //decrease// the memorys staying power! (This is an expanded form of CounterintuitiveEfficiency.)\n\nThe lovely SpacedRepetitionLimerick puts this in a more mnemonic form, should you need it.\n\nSpaced repetition systems (SRS), such as Anki or RemNote or SuperMemo, are usually considered ways of cramming information into your head, or “memorizing” things, or perhaps “learning” things if you take a somewhat broader view. However, they serve several other roles as well, ones which are quite a bit more subtle and likely dont become clear until youve used them for a while and been able to grok|Grokking them:\n\n* \u003C\u003Cstretch SpacedRepetitionAsAttentionManagement>>\n* \u003C\u003Cstretch SpacedRepetitionAsScaffolding>>\n* \u003C\u003Cstretch SpacedRepetitionAsThoughtManagement>>},{title:SpacedRepetitionAsAttentionManagement,created:20210108200430229,creator:soren,description:Spaced repetition tools serve as attention managers, bringing things to your attention periodically in the hopes they may be useful then.,es:likely,modified:20220524005449261,modifier:soren,tags:Memory Creativity Learning Productivity Public Idea,type:text/vnd.tiddlywiki,text:SpacedRepetition is self-evidently a memory|Memory tool. But more than that, it is a tool for attention management. Like the GettingThingsDone method, it allows you to offload something that would otherwise consume your attention (trying to remember a piece of information, or bring an idea to mind again at a moment when it might have more creative potential|AccidentsMakeTheWorldGoRound or openings for DisciplineCrosspollination).\n\nThis is exciting, because the scarcest resource in modern life|ScarcestResource is usually attention. (It also potentially expands the range of interesting things spacing could be used for beyond facts and connections, as MrAndyMatuschak has pointed out several times in his work.) Anything that makes it easier to keep things at the front of your mind when its helpful, and let them fall out when its not, is a sorting tool that enhances our ability to focus, much like email or social-media filters.},{title:SpacedRepetitionAsThoughtManagement,created:20220524005552984,creator:soren,description:Spaced repetition can be used to reconfigure your thoughts and habits by controlling whats at the front of your mind.,es:confident,modified:20220524013130801,modifier:soren,reviewed:20230616,tags:Idea SpacedRepetition Creativity Public,type:text/vnd.tiddlywiki,text:Perhaps the most profound role SpacedRepetition systems can serve in is //thought management//. That is, they can reconfigure your brain, your habits, and your entire life and self by changing what you think about on a regular basis.\n\nThe things you think about on a daily basis largely come from one of three sources:\n\n# Things you see or encounter around you in your life.\n# Things others tell you in conversation, or things you read.\n# Things you remember, that are brought to mind by (1) and (2).\n\nSpaced-repetition tools are able to keep things at FrontOfMind, thus increasing the chance that (3) occurs, and giving you the chance to connect those things with (1) and (2). Heres why this is important: a key reason that people fail to make desired changes to their identity or adopt beneficial ideas, is that they take in all the information at a time where theyre excited about it, but then before they manage to implement more than a small portion of what theyve learned, they stop thinking about most of it. Most big changes worth making have to be made over an extended period of time, because theyre too big to tackle all at once, so the only way to succeed is to find some way to //continue thinking about it// constantly over that period of time.\n\nOne way is to get excited enough that you keep slowly reading more and more material. Another is to join a class or get a coach that keeps you engaged with the material over a fixed time frame. Individual spaced-repetition study has the benefit that theres no commitment required and you can use any timeframe you want, yet you still are made to continue thinking about the ideas continuously.\u003C\u003Cfnote \Of course, this kind of commitment often helps create success! This isnt meant to put down commitment or deadlines at all. But there are many things that are too small to be worth this level of commitment, or things that people arent comfortable committing to at the time they start, so an effective alternative is extremely powerful.\>>\n\nThe effect of drawing things to FrontOfMind can fade over time because you get to know the information so well that you dont have to review the ideas all that often.\u003C\u003Cfnote \It would be interesting to experiment with low-friction ways to adjust the frequency or use non-exponential scheduling past a certain time period for ideas. These could become even more interesting in combination with tools that can see what else youre working on and thinking about and bring related materials up for review sooner.\>>\nHopefully, by this time youve made many of the changes and gained momentum, or the ideas have rubbed off on you! But if not, all is still not lost; youll still be reminded periodically of the ideas, and if one strikes you as presently important, you can launch another initiative at that time. Because you havent forgotten what you learned before (SR doesnt WalkBackwards), the next phase will get to build on it and thus be easier and more effective.},{title:SpacedRepetitionEncouragesFloatingIdeas,created:20200422234333444,es:possible,modified:20210701043246219,tags:Information Memory Public Idea,type:text/vnd.tiddlywiki,text:SpacedRepetition is extraordinarily valuable, but as traditionally practiced with flashcards, it encourages disconnected information and thus limits the value of that information (see StorageVersusRetrievalStrength for the problem). SuperMemos SR principle number one may be \Do not learn without understanding,\ but conceptual flashcards can easily become seriously disjointed. There is a very real tendency to hammer those facts into your head|HammeringHarder instead of doing the work necessary to ensure they connect and that your conceptual lattice doesnt fall apart after extended repetition only through disjointed flashcards.\n\nTo be clear, it is totally possible to use spaced repetition in a way that doesnt involve floating ideas; I often do it myself. It just requires careful thought to make sure everything is connected to something else. But the default condition is floating ideas; the tools are designed in a way that encourages it.\n\nA large portion of the various rules on precise cards, identifying gaps in understanding, etc., that I espouse on TheControlAltBackspace are attempts to address this problem. TiddlyRemember (or, more generally, a MnemonicMedium) has some benefits here in that it can provide a linear|LinearVsTiddly narrative to aid in initial uptake, and in some cases provide a quite exact link back to the source if one loses track of the context -- but for that to be useful, one must //know// one has lost track of the context, which in practice is usually not at all obvious. In the end, the questions still have to be written carefully.\n\nA new generation of systems like RemNote aim at addressing this issue by automatically adding additional context to your cards, providing links back to the source, and in general adding more notes to merge some of the best components of both sides of the AnkiZettelkastenIsomorphism. I love this idea; that said, I am somewhat suspicious of these tools because I dont think they can eliminate the necessity of thinking carefully about what paths in your mind each flashcard is actually trying to light up. If you dont do that, youre likely to end up with floating ideas //on the cards// -- and just as noted with TiddlyRemember above, even if you have the technical ability to easily trace the cards back to your notes, youre not going to do that on an average review day because you may not even realize that the ideas are floating.\n\nCf. OrphanQuestion.},{title:SpacedRepetitionForEfficientLearning200903,bibliography:Anki,caption:Spaced Repetition for Efficient Learning,created:20200707233346750,description:Gwern analysis of spaced repetition and Anki. Impressive literature review and a few thoughts on uses and philosophy.,medium:article,modified:20200811215840903,tags:Public Source,type:text/vnd.tiddlywiki,url:https://www.gwern.net/Spaced-repetition,year:2019,text:Gwern analysis of spaced repetition and Anki. Impressive literature review and a few thoughts on uses and philosophy.},{title:SpacedRepetitionForFiction,created:20210622013336700,es:possible,modified:20210622015535794,tags:Reading Index Public,type:text/vnd.tiddlywiki,text:Central tiddler for all things related to my SpacedRepetitionForFictionResearchQuestion, viz., how can SpacedRepetition (and, by extension, any note-taking and memory strategies) be applied to improve our relationship with fiction and literature?\n\n!! Questions\n\n* SpacedRepetitionForFictionResearchQuestion (possibly NeedsExcision)\n\n!! Possible uses\n\n* UsesForFictionSpacedRepetition},{title:SpacedRepetitionForFictionResearchQuestion,created:20210617015111515,description:How can spaced repetition be applied to //fiction// reading?,es:likely,modified:20210719235540012,tags:Reading Public MyGreatIdea Idea,type:text/vnd.tiddlywiki,text:Research question: {{!!description}}\n\n!! Proposal\n\nEverything I have seen about SpacedRepetition techniques discusses non-fiction. To some extent this makes sense. The application is obvious, and non-fiction is what you pull most of your declarative memories out of. Even I havent thought of applying it to fiction except very occasionally (one time when I was visiting M.|PrivatePerson, we were going to do a card-generation experiment together consisting of creating cards for the plot of some novel, but we got sidetracked playing with other spaced-repetition stuff and never did it).\n\nThis said, there would seem to be a lot of value in remembering fiction, too! I cant count how many times Ive read a book, really liked it and found it meaningful, and then 4 years later barely been able to say for sure that I read it. On some level, the main thing we hope to take from fiction is something we might call a “general impression,” which seems poorly suited to spaced repetition -- but what is such an impression actually made of? I submit its the combination of the plot, the themes and emotions you felt while reading, and perhaps the writing style itself. Much of this can be Ankified, giving us the opportunity to revisit some of those experiences during daily review.\n\nOn a different note, what about tricky texts where there are 472 characters with foreign names that have 8 forms each, or lots of background information? Say, the Bible\u003C\u003Cfnote \\\\nFor more than the simple reason of trying not to offend anyone, its worth considering this example for a moment. I dont here mean to make a judgment on whether the Bible is “fiction” in the sense of “made up” or “inaccurate” (which I actually think is a false dichotomy). Rather, the process of reading it, at least for me, often shares more with “fiction” than “nonfiction.” For instance, only small portions of the Bible can be effectively read like “nonfiction” in the sense that the words transparently describe facts that are directly applicable to your life if you remember them; much more requires interpretation, etc. For the faithful, the Bible (like many similar books in other traditions) is effectively in a different category than either fiction or nonfiction, that which Adler and van Doren|HowToReadABook1972 call “canonical literature”, and presumably deserves a separate reading, note-taking, and spaced-repetition practice altogether; but again, I think many of the same problems that apply to fiction but not nonfiction could also be brought to bear on canonical literature.\n\\\>>, ancient epics, the Silmarillion|Silmarillion1977, many of the great Russian novels. I could imagine that the experience of reading a text like this for the first time could be vastly improved by interleaving historical context, comprehension checks, and review prompts with the content (MnemonicMedium style) to reduce the number of glossary flips or skimmings-over of important details that you cant understand.\n\nLastly, I suspect for the really great texts, we would be able to get more out of re-reading them if we remembered more of the details for the next time. At least for largely recreational readers, we usually cant afford to finish the book and immediately flip back to the front page and start over, which is what would be needed to really catch many of the most interesting connections. If we could remember at least the outline for the couple of years during which we wouldnt consider revisiting the book, coming back would be more fruitful.\n\n\n!! Literature review\n\nThe literature is, as best I can make out, literally nonexistent, using the queries `\spaced repetition\ fiction` or `\mnemonic medium\ fiction`. Almost every hit is on the word “non-fiction” (or the word “fiction” isnt in the snippet). The few hits that actually discuss fiction are not relevant. Presumably 2021 search engines are good enough that if there were hits on actual “fiction,” they would come first, so it seems that somehow nobody of any importance has written about this on the internet?\n\nIt seems absurd that I could be first to this straightforwardly obvious idea, but I sure cant find anything.\n\n\n!! Next actions\n\n* On upcoming reads of texts that would benefit, try creating a bunch of cards and figure out what kinds of prompts are beneficial. Hopefully, this will lead to a method of decomposition.\n* Figure out how to have this interfere as little as possible with the reading process. Ideally, one could do it after finishing the book -- although this can be risky because one is often sorely tempted to put it back on the shelf without finishing the job.\n\n\n!! Related work\n\nI think there is a whole realm of hypertextual fiction yet to be explored. This wouldnt have to include making the story nonlinear or any of that kind of weird experimental stuff. But we could imagine a way to import a text into a ZettelKasten or the like, pull different peoples sets of annotations and compare them, connect ideas to other parts of your notes, have mnemonic medium prompts embedded, include an Amazon X-Ray type of thing where you could see information on characters and jump back and forth between scenes, and so on.\n\nThis could all be done with existing texts, and that would be easier than writing a new work of fiction good enough to make this worthwhile! But it could get very tricky because of copyright. (I would love to try some of this with Tolkien for instance -- it checks almost all the boxes -- but the estate would probably sue the pants off of me if I so much as talked about it.) For a solid experiment, one would need to select a public domain book, originally written in English so it wouldnt need a good modern translation, that would benefit strongly from this treatment. I cannot think of one off the top of my head that Im excited about, but I might come across one.\n\nSimilarly, on a personal level we can stand to develop better strategies for FictionNoteKeeping. This might be an area that actually has some literature behind it, which might suggest interesting directions to take the spaced-repetition part. I played with a few techniques here myself in high school (making indexes of interesting themes, for instance), but havent touched them since.},{title:SpacedRepetitionFromTheGroundUp2019,caption:Spaced Repetition from the Ground Up,created:20200908172522809,medium:article,modified:20200908172622398,tags:Public Sink,type:text/vnd.tiddlywiki,url:https://controlaltbackspace.org/memory/spaced-repetition-from-the-ground-up/,year:2019,text:TheControlAltBackspace post describing how one might go about building a spaced-repetition system (spoiler: it turns out to actually be Ankis basic algorithm).},{title:SpacedRepetitionInterchangeFormat,created:20200423022848574,modified:20200423023124377,tags:SorenConcept Memory Software MyGreatIdea Public Idea,type:text/vnd.tiddlywiki,text:The SpacedRepetition software world needs a standard interchange format that preserves scheduling to at least some degree! Im actually surprised that nobody has done that yet.\n\nObviously different systems schedule different ways, but they could choose how to map the standard data onto their own systems. Basic notions of current interval and ease should be mappable onto just about any scheduling system -- with some loss of information, sure, but anything is better than the current wild-west approach where you have to do a point-to-point translation from each app you might want to interchange with, or go to plain CSV and lose all scheduling information!\n\nProbably an XML substrate would be the best bet (maybe JSON?).},{title:SpacedRepetitionLimerick,created:20200314212543312,creator:soren,description:Not using SpacedRepetition is ridiculous, in multiple senses of the word.,es:mythological,modified:20220524010555535,modifier:soren,tags:Poetry Memory TheControlAltBackspace Public Idea,type:text/vnd.tiddlywiki,text:>\\\\nYou can get a good deal from rehearsal\nIf it just has the proper dispersal.\n You would just be an ass\n To do it //en masse// ---\nYour remembering would turn out much worsal.\n\\\\n> ---MrUlricNeisser\n\n\nReferenced in the Spaced Repetition|https://controlaltbackspace.org/memory/spaced-repetition/ article on TheControlAltBackspace.},{title:SpacedRepetitionPersonality,created:20200729220857882,es:possible,modified:20210617161656425,tags:Memory Learning Public Psychology Idea,type:text/vnd.tiddlywiki,text:Certain people seem to be more disposed to using SpacedRepetition.\n\nOne unsurprising bias is that smart people are more likely to use it. This could be argued as both cause and effect, though I suspect in most cases its much more cause than effect. The more intelligent you are, the more likely you are to want to learn more, and the more likely you are to search out tools to help yourself do that. But also, of course, knowing more, especially knowing more targeted items that are useful to you as obtained through the use of SR, cant help but increase your crystallized intelligence. (I dont imagine that using Anki would have a significant impact on fluid intelligence, since hardly anything does and theres no real reason to think flashcards would anyway.)\n\nProviso: While I dont think this effect is entirely illusory, it likely does appear stronger than it truly is because people who are highly intelligent are also more likely to be writing about their use of spaced repetition on the internet than the general population, given that they use spaced repetition -- and the adoption of SR is small enough that apart from our own friends that we introduced to it or who introduced us to it, most SR users dont know any other practitioners offline.\n\nOther possible common traits:\n\n* Data-driven\n* Optimizer\n* Likes learning and information\n* Does/needs to do a lot of learning, especially when it needs to be done quickly and preserved over periods of nonuse\n* Adapts readily to (and enjoys) new practices -- Anki is quite different from traditional learning methods\n* Good at analytically and intentionally breaking down ideas into their component parts (a necessary skill for creating good cards -- a programmer/technical skill, too)\n\nOpenQuestion: To what extent can SR be adapted for people who //dont// have these traits naturally disposing them to use it, should they be interested in the end result of better memory? This may depend partly on the practicality of GoodSharedFlashcards. Systems like Duolingo that incorporate spaced repetition but dont request much Metacognition or selective effort on the part of the user seem more adaptable (but also less powerful).\n\nCf. OrganizationalAnkiAdoption, ZettelkastenPersonality.},{title:SpacedRepetitionPrimitive,created:20220121172642069,creator:soren,description:Spaced repetition becomes vastly more useful and fluid when flashcards integrate fluidly into other material.,es:confident,modified:20220201000809353,modifier:soren,tags:Idea SpacedRepetition Design Memory Software Public,type:text/vnd.tiddlywiki,text:The really game-changing thing that RemNote does is turn spaced repetition into a first-class citizen of the note-taking tool. In other words, it makes spaced repetition a primitive of the tool. Indicating that you want to remember something is //almost effortless//; flashcards are just another kind of bullet in your outline and they magically show up in your queue when needed. Anki or similar tools are already a huge step up from normal free recall in making memory a choice|MakesMemoryAChoice, but choosing to add something is still a very deliberate choice that requires a substantial amount of friction.\n\nTiddlyRemember adds a spaced-repetition primitive too, but it isnt as effective since the grain of the primitive is different than its surroundings. That is, TiddlyWiki (at least the way I use it) mostly maintains prose, and you have to drop your prompts outside the flow of your paragraph (unless youre using an inline cloze, which is a little fussy to create). That isnt TRs fault IMO -- though maybe Im being overly generous because I wrote it. Rather, its because outlines are more neatly suited to this than prose; a quick note that isnt a flashcard naturally quite closely resembles one that is.\n\nIt would be interesting to add flashcard primitives to, say, Slack or StackOverflow or Gmail. Imagine the power of, e.g., being able to email a group of people something you want them to learn and include flashcards with it that they could automatically import, or having new team members automatically get a bucket of context and flashcards containing the answers to the most important recurring questions!\n\nDevils advocate: will we end up wasting time trying to remember useless things because theres no UsefulFriction? I dont think so because most people seem to agree that the bottleneck in spaced repetition study is generally adding cards, not reviewing them, so theres presumably still room for adding some somewhat lower-value cards -- but only time will tell. RemNote, as it currently is, sometimes does encourage me to create lower-quality cards, which could increase the chance of remembering //effectively// useless things, if not useless things on the surface, but this may be more a function of my familiarity with it and its knowledge model than its intrinsic badness at this. (RemNote -- like all SR tools -- could still work on nudging users to create better prompts.)\n\n\n!! Related\n\nThis reminds me of the dreams in the steno community of having an operating system that treats a steno machine as a first-class citizen, rather than something you have to hackishly add an extra layer over that then emulates a keyboard.\n\nThe MnemonicMedium is an example of the same phenomenon. When you hand out flashcards with a book, most people never use them and those who do use them have a disconnected experience. When you make the flashcards //part// of the book as people read, something entirely different and far more useful happens.},{title:SpaceShuttlePlanning,created:20200309133253369,creator:soren,es:confident,modified:20210523175720533,modifier:soren,tags:Process Software Public Idea,type:text/vnd.tiddlywiki,text:TheyWriteTheRightStuff has some fantastic insights about reducing error rates in any kind of software, but it also harps on this point which just isnt applicable: “The product is only as good as the plan for the product.”\n\nThe space shuttle is a classic WaterfallMethodology project -- and thats because here, it //works//. But thats because theyre designing the embedded software for an extraordinarily complicated piece of machinery where the specs cant just change. The system is planned out years in advance and they can know exactly what the software needs to do. Thats the real key to their stunning record -- their problem is well-defined and changes only very slowly. The classic case for hierarchies and process over networks|HierarchiesVersusNetworks and one where the former is more efficient and effective.\n\nThe article calls people out for “launching into big projects without planning what the software must do in blueprint-like detail”: but in what world does a typical business -- //can// a typical business -- know its ActualRequirements exactly before the development process begins? It sure aint the one I live in. Heck, even if they did know their requirements exactly before the development process began, the requirements would be different by the time any project of significant size finished.\n\nIf you truly can manage blueprint-like detail and no changes to the specs, by all means take the space-shuttle approach: your software likely will be better for it. But for most software, that strikes me as a pretty darn hubristic approach. AgileHumility will be a far better plan in the typical cases.},{title:SpaceTrilogy,author:Lewis,bibliography:LifetimeReading,caption:Space Trilogy,created:20210703170128000,genre:Literature,medium:book,modified:20210705214036035,priority:3,readstatus:unread,recommended-by:MP,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:SpeakMemory1966,author:Nabokov,bibliography:LifetimeReading,caption:Speak, Memory,created:20210703170128000,genre:History,medium:book,modified:20210705214036049,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1966},{title:SpeakMemory2016,author:Casey Newton,caption:Speak, Memory,completed:20210517000000000,created:20210516212225355,medium:article,modified:20210516213242383,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://www.theverge.com/a/luka-artificial-intelligence-memorial-roman-mazurenko-bot,year:2016,text:Story of a somewhat eccentric woman, MsEugeniaKuyda, who created a chatbot of her friend MrRomanMazurenko who passed away suddenly. By which I mean that she fed in all the conversations and data she could get from her and built a model on that, so it sounded surprisingly like him.\n\nIm not exactly creeped out by the idea, so much as overwhelmed by all the very serious ethical questions it brings up. Mazurenko, from what you read in the article about him, very obviously would have loved this experiment, so thats fine, but what about other people? What //should// happen with your digital record after you die? Actually, weve had this problem with non-digital stuff for many years, but it feels much more personal when it gets fed into something thats speaking for you. (Fun fact: Vergil wanted the //Aeneid// burned because he didnt have a chance to perfect it before he died. His friends, thankfully for us, refused.) And theres no way to control how data like this gets used. Like, someone could probably create a decent chatbot of me just based on all the writing Ive published on the web (that would presumably be massive copyright infringement, but still possible).\n\nThen, what about the people who interact with it? I can imagine some people enjoying and even being helped in grieving by it. Others could find it really messed them up. See the Mothers experiments in KlaraAndTheSun2021, which I mysteriously finished reading just a couple of days before encountering this! Im told there are several //Black Mirror// episodes that look at similar things as well.\n\nThe technology continued developing into Replika.\n\n(I had to do some googling to find the date of publication of this article, because bizarrely its not anywhere on the page or in the URL!)},{title:SpeedrunAuthentic,created:20230216040528484,description:To quickly understand if a person is worth a serious relationship with, dive into areas of conversation that are revealing and neither of you have ever explored.,es:possible,modified:20230218055343838,tags:Idea InterpersonalRelations Romance Public,type:text/vnd.tiddlywiki,text:From MrHenrikKarlssons Looking for Alice|https://escapingflatland.substack.com/p/looking-for-alice, speedrunning authentic is an approach to dating where you aim to FailFast if the person isnt compatible with you deep down, rather than skating on the surface for a while. The goal is to quickly filter out people who wouldnt be any good, while getting people who would be //really// interested in you interested quickly. This way, you free up more time to look for outliers|https://www.benkuhn.net/outliers/.\n\nThis isnt about dealbreakers you can consider declaratively -- not that thats a bad idea either. Rather, its about your way of relating to the world and the parts of your personality that can make you supremely comfortable with another person when youre in sync. So you might try to display the most unattractive things about yourself, or your most controversial opinions, or the most unusual yet formative experiences youve had. Anything that shows clearly who you (and your partner) really are, and what type of other person would be interested in a relationship with that person.\n\nThere is a specific way to do this, according to Karlsson, by creating an “unstable realm of conversation.” Either ask a question or start a topic of conversation yourself for which the other person likely has fascinating and unique experiences, but has likely never thought about the question before. Dont ask for their favorite travel experience, say, because theyve probably had a chance to figure out what they want to present to the world in this area; while these stories arent valueless, they dont create the kind of authenticity were looking for. Ask about their favorite conversation with a stranger that made them look at the world a different way, or what about them would most surprise you, or an interaction they had with a squirrel (this last item is discussed in detail in the article and seems especially excellent). And then dive in even closer by asking questions in response that are even more specific.\n\nI think the key here is that youre asking extremely open-ended questions that show who someone is by holding up a mirror at a funny angle. Its difficult to present a façade because you have no chance to prepare, yet it also feels less vulnerable because youre not talking about yourself directly.\n\nI havent seriously tried this yet, so I should report back when I do! But intuitively it seems like an excellent idea.\n\nCf. AmazinglyAwesomeFriend, SmallBets.},{title:SpencerLaJoyeConcert,at:202407130110,author:MxSpencerLaJoye,blurb:,caption:Spencer ~LaJoye,conference:2024WildGooseFestivalTrip,created:20240718041840760,creator:soren,medium:conference,modified:20240723025213066,modifier:soren,rating:distinguished,tags:Source Public,type:text/vnd.tiddlywiki,year:2024,text:Concert with MxSpencerLaJoye. They were lovely! Theyre not entirely my style, but their voice is really impressive (poppy style with intentional breaks, belting, etc.). They did PlowsharePrayer at the end to a standing ovation.\n\nA bunch of new songs from the //Shadow Puppets// album. (I listened to the whole thing several times on the plane home; some really great stuff there.)\n\nMost intriguing moment: they said they think of loneliness as a sort of God figure -- because theyre definitionally always there for you when nobody else is. The song “The Art of Feeling Lonely” from that album is about this.},{title:Sphinx,created:20200425163808108,creator:soren,es:confident,modified:20220106135127433,modifier:soren,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Python documentation system (both written in Python and primarily designed for use with Python, though it works great for other languages and non-code uses as well). I use it extensively at TheFederatedInsurance, and have documented projects like my esc calculator|https://esc-calc.readthedocs.io/ with it.\n\nUses the markup language ReStructuredText.},{title:SpinozaEthics1677,author:Spinoza,bibliography:LifetimeReading,caption:Ethics,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214036056,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1677},{title:SpiritOfLaws1748,author:Montesquieu,bibliography:LifetimeReading,caption:The Spirit of Laws,created:20210703170128000,genre:Politics,medium:book,modified:20210705214036070,priority:3,readstatus:unread,recommended-by:SIB,tags:Source Public,type:text/vnd.tiddlywiki,year:1748},{title:Spokane,created:20250617163904857,creator:soren,modified:20250617163917788,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:Spotify,created:20240602154621356,creator:soren,modified:20240602154624082,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:SpreadSheet,created:20200402010658176,modified:20200402010918641,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Application and paradigm in computing consisting of a big table (or, in modern spreadsheets, multiple tables bound together into one file) with rows and columns, along with a formula language that allows some cells to be defined by transformations performed on other cells. \n\nThis is, by and large, a crappy, inefficient, difficult-to-maintain model for anything past pretty simple calculations, but it democratized computing in many ways by allowing any reasonably motivated person (or ComputingCitizen) to implement custom logic. Theres a reason it was the first killer app in personal computing.\n\nCompare TiddlyWiki, which brings the same kind of attitude to databases/wikis/notes.},{title:Sprint,created:20200428194855748,creator:soren,es:confident,modified:20211113172611389,modifier:soren,tags:ScrumMethodology Process Public Idea,type:text/vnd.tiddlywiki,text:ScrumMethodology term for a planned period of effort; used throughout AgilePhilosophy and DevOps areas, whether or not the official Scrum process is being followed. Also frequently called an //iteration//.\n\nAt the start of the sprint, you decide what youre going to do at a SprintPlanningMeeting, then you do it, and at the end you review what you accomplished at a SprintReview and a SprintRetrospective. Ideally, you finish exactly what you planned and nothing else, avoiding ScopeCreep; this is of course impossible in the real world, but good management and provisions for unplanned work outside the system, e.g., BugFireLane and OnCallEngineer, can get it moderately close.\n\nSprints are of fixed length, but one chosen by the team, and the chosen length can change over time. See ScrumSprintLength for considerations.\n\nAccording to the ScrumGuide, in extreme circumstances, sprints can be canceled if the SprintGoal no longer makes sense, but this rarely happens in practice.\n\nSprints are designed to relatively painlessly make work IncrementalAndIterative.},{title:SprintBacklog,created:20200516171443364,modified:20200516172812317,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:A small and highly refined subset of the items on the ProductBacklog; the list of things that will be done during an individual Sprint, chosen to contribute to the SprintGoal.\n\nThe items on the sprint backlog should have more detail than those on a product backlog. Specifically, any ambiguities, issues, or status updates should be straightforward enough to be resolved in the DailyScrum.\n\nUnlike the ProductBacklog, the sprint backlog is the property of the development team. Nobody else may alter it. This is a natural consequence of the need to avoid ScopeCreep and the fact that the development team is solely responsible for committing to how much work they can complete in a sprint.\n\n\u003C\u003Crememberq \20200516172744597\\n\t\What is the major process difference between a ProductBacklog and a SprintBacklog?\\n\t\The product backlog belongs to the ProductOwner; the sprint backlog belongs to the development team.\>>},{title:SprintGoal,created:20200516172210158,modified:20200516172242310,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:An overarching plan for a Sprint that serves to unify the team around a common purpose and ensure the sprint is not a collection of disjointed tasks.},{title:SprintPlanningMeeting,created:20200509180524820,creator:soren,es:confident,modified:20220201153922462,modifier:soren,tags:ScrumMethodology MeetingTheory Process Public Idea,type:text/vnd.tiddlywiki,text:One of the FourEventsOfScrum. At the beginning of every Sprint, all team members gather to identify what work they should take on for the following sprint and how they will complete it (e.g., overarching design and architecture, division of work between team members). The ProductOwner and the ScrumMaster also participate. The planning meeting should determine almost all of the work done during a sprint; ScopeCreep after the start of the sprint is to be avoided. The development team is solely responsible for deciding how much work will be taken on.\n\nIn addition, a goal for the sprint|SprintGoal is identified, which describes the overall purpose of all the ProductBacklog items when put together, or a coherent function under development. This helps to make sure the team is all working together towards a common objective rather than working on separate and seemingly unconnected tasks.\n\nThis event is expected to require somewhere on the order of two hours per week in the sprint.\n\nSource: ScrumGuide},{title:SprintRetrospective,created:20200516172254502,modified:20200516172601897,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Meeting after a SprintReview to effect ContinuousImprovement, per the Third Pillar|ThreePillarsOfScrum of Adaptation (inspection, is, of course, also required). It is attended by the ScrumMaster and the team, and consists of identifying the things that went well and poorly in the previous sprint (people, processes, and tools) and what improvements could be implemented in the next sprint.\n\nSource: ScrumGuide},{title:SprintReview,created:20200512023534137,creator:soren,es:confident,modified:20211107173203247,modifier:soren,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:One of the FourEventsOfScrum, focusing on reviewing what was completed in the previous sprint and adjusting the ProductBacklog to prepare for the following SprintPlanningMeeting (e.g., to return items that were not completed during the sprint, add items that nobody recognized were needed until now, remove items that are no longer necessary, or add items to respond to outside forces or market changes that have taken place during the sprint).\n\nBeyond the ProductOwner, other stakeholders may attend this meeting, and a demo of the product produced is helpful.\n\nSource: ScrumGuide},{title:SprintSynchronization,created:20200326210647844,es:possible,modified:20210812170514218,tags:ScrumMethodology Public Idea,type:text/vnd.tiddlywiki,text:Once an organization has multiple teams, the question appears: how should they organize their Sprints?\n\nThe best option is usually to perfectly synchronize them: every teams sprints start and end at the same time. A second-best option, if e.g., a support team needs a faster cadence, is to //nest// them by making the longer sprint a perfect multiple of the shorter sprint (e.g., 2-week and 4-week sprints). This way, at least there are boundaries where everyone is paused at once and can coordinate.\n\nSprints staggered in another manner suck: the product is never in a fully releaseable state without special intervention, sharing team members becomes difficult because they cant ever negotiate their capacity at once, and its hard to keep track of what other teams are doing.\n\nSynchronized sprints solve these problems, but do introduce some others, particularly what if some people belong to multiple teams and need to attend multiple planning meetings?\n\n* First, reduce the number of people who have to do that!\n* The meetings can be staggered a little bit (e.g., one in the morning, one in the afternoon, and one on the morning of the next day). This has the disadvantage of creating some \dead space\ in the sprint, but otherwise works OK.\n* All teams can hold their planning meeting in the same room at the same time, allowing shared resources to bounce back and forth if needed. This doesnt work at all if ScrumMasters are shared between teams, though.\n\nIt is unclear to me to what extent organizations like TheFederatedInsurance, where we dont have a unified \product\ to release, should follow this plan.\n\nSee also ScrumBacklogDivision and ScrumSprintLength.\n\nSource: AgileInTheRealWorld.},{title:SscOriginOfConsciousness2020,caption:Book Review: Origin Of Consciousness In The Breakdown Of The Bicameral Mind,created:20200827020511922,medium:article,modified:20210623024721007,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:https://slatestarcodex.com/2020/06/01/book-review-origin-of-consciousness-in-the-breakdown-of-the-bicameral-mind/,year:2020,text:> Julian Jaynes’ //The Origin Of Consciousness In The Breakdown Of The Bicameral Mind// is a brilliant book, with only two minor flaws. First, that it purports to explain the origin of consciousness. And second, that it posits a breakdown of the bicameral mind.\n\nSlateStarCodex take on Jaynes1971. Argues that, while the theory of being spoken to by gods is brilliant, it should be labeled a description of the //theory of mind// of Bronze Age civilizations, not of the origin of consciousness. Also that the bicameral thing is probably bunk, but this surprisingly has rather little to do with the thesis.},{title:StackOverflow,created:20200221163634582,es:confident,modified:20210810182917572,tags:Code Software Public Idea,type:text/vnd.tiddlywiki,text:Question-and-answer tool originally designed for programming questions and now spreading to other disciplines as well.\n\nIts difficult to underestimate how much SO has changed the experience of programming since 2008. It has made search engine results for error messages, problems, and design questions more often than not point to a SO question or three with a precise answer to the question. Troubleshooting prior to that was a maze of twisty forums, mailing list archives, and ~JoeBobs blog posts that might or might not have anything useful to say or even have an answer.\n\nWorks extraordinarily well because of its open structure. Much like Wikipedia, it allows anyone to show up and ask questions or answers, which can then be changed, accepted, answered, rejected, commented on, etc., by more established users, resulting in iterative improvement. A system of reputation also encourages users to participate, but like Wikipedia I suspect most of the true reward is just in helping people and improving the worlds stores of information. (Reputation is, after all, FakeInternetPoints, although some enlightened employers might consider it a useful surrogate measure for expertise on certain technologies.) Cf. Drive2009.\n\nIn 2019, the StackOverflowCommunityDebacles shook the site. The companys relationship with the community remains on shaky ground as of mid-2021, but it looks like they may manage to right things yet.\n\n{{StackOverflow/p||PrivateChunk}}},{title:StackOverflowCommunityDebacles,created:20200218151357444,creator:soren,es:likely,modified:20210711155108957,modifier:soren,tags:InterpersonalRelations TheControlAltBackspace Politics Public InternetTheory Idea,type:text/vnd.tiddlywiki,text:In late 2019 and early 2020, StackOverflow came under new management and, in the name of being more “welcoming|UnwelcomeOnStackOverflow,” promptly began wrecking the community.\n\nI wrote about these debacles and the associated problems of defining a CoreGroup and understanding that GroupIdentityIsFoundedOnExclusion, while still being kind to new users, on Control-Alt-Backspace here: https://controlaltbackspace.org/design/welcome-and-inclusion/. Heres the relevant excerpt describing the history and the problems:\n\n\u003C\u003C\u003C\nInstead, StackOverflow management has gone off in another direction entirely. They started by updating the Creative Commons license used for contributions, including retroactively relicensing all existing content users had contributed – an act which is, as far as anyone who has looked closely at the license is concerned, flat-out illegal – and nobody at SO has commented on why they think it is acceptable. This raised the ire of quite a few users. Next the official code of conduct was updated as part of the “welcoming” initiative. The primary source of contention here was a new requirement to use all users’ chosen pronouns. There does not seem to be any evidence that this was actually a problem before, and the wording of the new code left much to be desired, leading to a discussion, during which a well-respected moderator who voiced concerns about this aspect of the code but did not in any way violate the code – which, by the way, was not yet even in effect – was summarily dismissed for unspecified “code of conduct violations.” Further, SO management publicized a one-sided, inaccurate version of this story using the moderator’s real name, which eventually resulted in said moderator suing them for slander and settling for unspecified terms under a gag order. Meanwhile, management showed a shocking lack of respect or concern for the remainder of the community, which was trying to understand exactly what was happening, and the community managers employed by SO were also let go. A couple of nominally positive things have happened in the last two weeks, but many of the moderators and most experienced users of the platform have resigned and left for good in the meantime – a loss which many say has already become apparent in decreased question and answer quality. As of now, it still looks like far too little, too late.\n\nThe lack of attention to the community’s opinions and needs is especially astounding when you consider that it’s the only reason SO has a business at all. All value on the platform comes from users of the platform; StackOverflow the company does not create any content. And people who show up and ask questions are important, sure, but nobody would keep coming if it weren’t for those experienced users volunteering their time day after day to answer questions with nothing in return except fake internet points|FakeInternetPoints (i.e., “reputation”). Sure, a few less experienced people might contribute occasionally as they walk by the site or a question and happen to have something to add – I do this myself – but without that experienced group which was showing all the concerns, the site is highly liable to fall apart. Nobody comes to a question-and-answer site that only occasionally has answers!\n\u003C\u003C\u003C\n\nSO needs to work on learning the OnlineCommunityLessons.\n\nShould SO be making protesting trivial|MakeProtestingTrivial when pushing changes? Or is the community pushing back too hard for that to work?},{title:StackOverflowForTeams,created:20210810182708787,es:confident,modified:20210811183425334,tags:Software Index Idea Information Public,type:text/vnd.tiddlywiki,text:Version of StackOverflow that you can buy and use at your company or other team (or use it free up to 50 people).\n\nI served as the main community coordinator and general platform advocate for SO for Teams at TheFederatedInsurance and came to love it in many ways. I hope that some day I get the chance to manage another one of these -- it was lots of fun and extremely helpful for the organization, and taught me quite a bit about online communities as well.\n\n\nMaintaining a healthy community:\n\n* StackOverflowMaintenance -- tasks that should be carried out regularly to keep the knowledge base in good shape.\n* StackOverflowTagCleanup -- in particular, tags need to be neatened up from time to time, especially in the early stages of a community (after that, people tend to get better at using tags and the mess doesnt build up as quickly).\n* UnwelcomeOnStackOverflow -- some people struggle to adapt to using Stack because they feel unwelcome, even in a well-managed community; how can we fix this? (An open question.)\n* WikipediaPhilosophy: SO bears some similarities to wikis, and the central philosophy of those in large part applies to Stack too.\n* OnlineCommunityLessons: To understand StackOverflow, you should seek to understand online communities in general.\n\nTags, the central organizational principle of Stack:\n\n* StackOverflowTagExplanation -- what do I think tags are for?\n* StackOverflowTagBurninationCriteria -- on public StackOverflow, how do they decide whether a given tag is helpful or not?\n* StackOverflowTagCleanup (see previous section)\n\nThe system SO for Teams is embedded in:\n\n* Teams is part of an overall system of GoodDocumentation and good communication.\n* KnowledgeReuse is the goal SOFT lives to serve.\n\nMeetings and resources:\n\n* StackOverflowThreeWays -- webinar about the benefits of SO for Teams\n* StackOverflowCustomerMeeting -- I met with the CEO of Stack briefly when we were working together.\n* StackOverflowCommunityDebacles -- SO seriously messed some things up on the public side in 2019, and its good to know about this history when you work with SO, even on the private side.},{title:StackOverflowMaintenance,created:20200728154849597,creator:soren,es:likely,modified:20210810184711425,modifier:soren,tags:Idea Public,type:text/vnd.tiddlywiki,text:List of tasks that should be done regularly when using StackOverflowForTeams.\n\n!! Cleanup tasks\n\n* Tags -- merging, deleting useless, tweaking (StackOverflowTagCleanup)\n* Questions without accepted answers\n* Questions/answers that are out of date or need revision (this would best be pushed down to team areas)\n* Users who no longer work at the company (even with SCIM, they dont seem to be removed automatically)\n\n!! General discussion\n\n* Whats going well in your area? What isnt?\n* Any new features},{title:StackOverflowTagBurninationCriteria,created:20200819161256217,creator:soren,es:possible,modified:20211122174313120,modifier:soren,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:StackOverflow suggests a number of properties that a tag should have to be kept (not burninated):\n\n* Does it describe the contents of the questions to which it is applied?\n* Is the concept on-topic for the site?\n* Does the tag add meaningful information to the post?\n* Does it mean the same thing in all common contexts?\n\nhttps://meta.stackoverflow.com/questions/324070/what-is-the-process-for-tag-removal-burnination},{title:StackOverflowTagCleanup,created:20200820154718046,creator:soren,es:likely,modified:20210811181743234,modifier:soren,tags:Idea Process Public,type:text/vnd.tiddlywiki,text:When using StackOverflowForTeams, an organization of any significant size should hold periodic Tag Cleanup Meetings, probably every 6--12 months. The purpose of this is to ensure that tags are being used properly|StackOverflowTagExplanation, and to delete, rename, add synonyms, and merge tags as appropriate.\n\nWhen the tag list starts clean, people do a better job of tagging things, which creates a VirtuousCircle. When the tag list starts dirty, all sorts of things get tagged wrong, and then the right people dont see the questions and you cant find things later. Call it the BrokenWindowsTheory of tagging.\n\n\n!! Outline of a meeting\n\n* Invite moderators from all areas to this meeting, and anyone who can come is most welcome.\n* Meeting length: 2 hours for the first one, 1 hour afterwards.\n* In preparation, everyone fills out a spreadsheet.\n** You can do this during the meeting if you want, and thats a good idea the first time. After that, the meeting will be shorter and more productive if people fill it out ahead of time.\n** Spreadsheet has tag-name and frequency columns imported from the tags list in the admin panel.\n** People can look up tags on `https://stackoverflow.com/c/{yourorg}/tags` to see what questions they have; it would be really awesome to have links to them in the sheet.\n** Should respond in a third column in one of the following ways:\n*** Keep\n*** Delete\n*** Merge with //other tag//\n*** Discuss (have a point to raise)\n*** No opinion (leave blank)\n** Leader of the meeting then creates a table with everyones responses. At the meeting, this table is displayed on-screen. 90% of tags will have an obvious consensus, and those that dont can be discussed.\n** After the meeting, the leader can make the changes agreed upon.\n* At the meeting, one should also take general questions about our implementation of SO and think about ways it could be improved|ContinuousImprovement, much in the manner of a SprintRetrospective. Our StackOverflow instance is a product|CompanyIsAProduct.},{title:StackOverflowThreeWays,created:20200320182113357,creator:soren,modified:20210810182348006,modifier:soren,rating:skimmable,readstatus:read,tags:Source Information Business Public,type:text/vnd.tiddlywiki,text:Webinar by StackOverflow, “3 Ways to Improve Collaboration and Productivity.” All roads, of course, lead to purchasing StackOverflow for Teams, but that doesnt mean theyre not good ideas!\n\nMy takeaways:\n\n* Identifying ThreeGoals at the beginning of the day seems like even more of a great idea than it already does. Im going to work to keep doing it.\n* SO for Teams actually is great...for more reasons than we always think about.\n* Its always important to think about why youre doing things.\n\n!! The Problem\n!!! Interruptions\n\n* Average number of times a person checks their smartphone a day: 47\n** 18-24-year-olds: 86! (Thats an exclamation, not a factorial. Its still a lot.)\n* IM platforms and emails at work can cause the same issues.\n* A single ping during focused work (e.g., development) can cause 23 minutes of lost work!\n* Lost productivity can then cause further stress.\n\n!!! Tooling \n\n* New tools are helpful for remote work and have significant benefits\n* 2017--2019: market for collaboration tools like TheSlack and TheZoom went from $3.3B to $6.2B!\n* However, also create more sources of pings.\n* Some interruptions are useful|RampantNotifications -- can help you put aside things and allow “incubation” time. And of course sometimes theyre important. But most are negative.\n\n\n!! Possible improvements\n\n!!! Personal ideas\n\n* Do-not-disturb hours\n** Block out times when pings do not happen, to whatever extent possible.\n** You can thus guarantee you get at least some uninterrupted work time.\n** Ideally the entire team agrees on times|ConversationalOfficeHours (see for instance TheBasecamp in CrazyAtWork2018).\n* Must-dos\n** Pick one or two things|Prioritization in a day that are highest priority|MostImportantThing.\n** Give you an excuse for not responding.\n* End goal\n** How are your actions affecting the business or team goals?\n** Helps decide whether things are worth doing at all|WorthlessEfficiently, and if so how important they are.\n\n!!! Project-management/collaboration ideas\n\n* Supposedly, according to some PM organization, 57% of project failures are due to bad communication.\n** Good communication increases involvement and improves peoples feelings that theyre doing meaningful work, aside from just fixing issues.\n** Make sure everyone is clear on roles, responsibilities, and mission. Strategic initiatives, etc.\n** Make sure everyone has buy-in and psychological safety, produced through culture and the ability to find exactly the right amount of information.\n},{title:StandardizedGuidelines,created:20210307211901110,creator:soren,description:Guidelines are algorithms for producing a recommendation, to be used when there is no recommendation that is best in all circumstances and its not obvious which circumstances one is in.,es:likely,modified:20221129225731134,modifier:soren,tags:Health Reasoning Process Public Idea,type:text/vnd.tiddlywiki,text:MrScottAlexander, in RecommendationsVsGuidelines2018, defines guidelines as “algorithms that eventually result in a recommendation.” That is, instead of just providing a recommendation (“Try X!”), guidelines gather some basic information about the situation, then suggest trying a particular recommendation from a set of recommendations. If that recommendation doesnt work, then maybe there are some more questions, and then you get a new recommendation. Eventually, you likely end up with a good solution.\n\nThis is common in medicine (rather, its common in //practice//; the process of generating recommendations by scientific study doesnt seem to take much account of this, partly because that complicates the study process, but this often ends up discarding possible candidates that are useful for a small subset of people because nobody thinks to try it on just that subset; see TyrannyOfAverages). But it seems uncommon elsewhere. \n\nPerhaps thats because guidelines are really hard to make. You have to be an expert in the field, and youll probably disagree with others, and youll feel terribly wrong when the guidelines dont work for someone -- whereas if you just throw out a single-point recommendation and it doesnt work, you can just shrug and say, “didnt work for you!” (Your advisee was not a true Scotsman|https://en.wikipedia.org/wiki/No_true_Scotsman.)\n\nThe article seems to present a natural challenge|Challenges: if something youre an expert in doesnt have guidelines, what can you create? (Ideally, ones which are important, neglected, and tractable|ImportantNeglectedTractable, and you have the expertise in.)\n\n* The first thing that comes to mind, interestingly, is LucidDreaming techniques; but I would be ridiculous to claim myself as an expert, especially when it comes to producing things that work for multiple people, which is a good part of the point, so no dice on that one.\n* There could definitely be some place in TiddlyWiki -- what features to use for given effects, for example?\n* Anki patterns|AnkiCardPatterns, etc.? This seems extremely complicated, too complicated for guidelines, but maybe there would be a way to distill them down. If so it would be amazing. The difference between \too complicated\ and \guidelines\ might just be persistence and feedback.\n* Personal record-keeping and organization.\n\nOpenQuestion: To what extent do guidelines conflict with personal preferences?\n\nSeveral commenters on SAs article pointed out that the need for guidelines is related to our not having a particularly effective solution (see MoreSolutionsFewerAnswers: having more solutions means the problem is less solvable and less well understood). That doesnt mean theyre bad, though, because more things are like this than not; see ThereIsNoObviousAnswer.\n\nSee also ThingsArentGoodForEveryone.\n\n\u003C$details summary\Flashcards\>\n\n\u003C\u003Cremembercz \20210307213511652\\n\t\As defined by Scott Alexander, //guidelines// are {algorithms} that eventually result in a {recommendation}.\>>\n\t\n\u003C\u003Crememberq \20210307213600537\\n\t\Guidelines on solving a problem are needed when what is true about our knowledge of that field?\\n\t\It is sufficiently limited that there is no single clear effective solution.\>>\n\t\n\u003C/$details>},{title:StandupDumbbell,created:20200428190326175,modified:20200518035604081,tags:Humor MeetingTheory Public Idea,type:text/vnd.tiddlywiki,text:A great suggestion for really keeping your DailyScrums short (because the standing-up part didnt keep them short enough) from DevOpsInTheRealWorld: make your team pass around a heavy dumbbell to indicate whos talking. Nobody will want to hold onto it any longer than necessary!\n\nAlong with that, you dont //have// to speak at a stand-up (and take the dumbbell) unless you actually have something meaningful to report to the group.},{title:StartAConversation,created:20210608021858440,modified:20210613212808184,tags:Meta Public,type:text/vnd.tiddlywiki,text:Think I made a mistake, have a relevant source or other insight to share, or just want to talk about this idea? Send me a message using the form below. Youll receive a copy of your original message by email.\n\n\u003C$set nametargetTiddler value{{{ {$:/temp/ConversationCollector}gettarget }}}>\n\n\u003Ctable class\ta-feedback\>\n\t\u003Ctr>\n\t\t\u003Cth>Tiddler\u003C/th>\n\t\t\u003Ctd>{{{ {$:/temp/ConversationCollector}gettarget }}}\u003Cbr>//\u003C$text text{{{ {$:/temp/FeedbackCollector}gettargetgetquestion }}}/>//\u003C/td>\n\t\t\u003Ctd>You are starting a conversation about this tiddler.\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Email\u003C/th>\n\t\t\u003Ctd>\u003C$edit-text taginput tiddler{{$:/temp/ConversationCollector}} field\email\/>\u003C/td>\n\t\t\u003Ctd>Ill write back to you at this address.\u003C/td>\n\t\u003C/tr>\n\t\u003Ctr>\n\t\t\u003Cth>Message\u003C/th>\n\t\t\u003Ctd>\u003C$edit-text tagtextarea tiddler{{$:/temp/ConversationCollector}} field\comment\/>\u003C/td>\n\t\t\u003Ctd>What do you want to say?\u003C/td>\n\t\u003C/tr>\n\u003C/table>\n\n\u003C$list filter\{$:/temp/ConversationCollector}getemail!isblank\ emptyMessage\//Please enter an email address. //\>\n\u003C$list filter\{$:/temp/ConversationCollector}getcomment!isblank\ emptyMessage\//Please enter a message.//\>\n\u003C$wikify namedebuginfo output\text\ text\u003C\u003CgetWikifyTarget>>>\n\t\u003C$button>\n\t\t\u003C$action-sendfeedback\n\t\t\ttiddler\u003C\u003CtargetTiddler>>\n\t\t\temail{{{ {$:/temp/ConversationCollector}getemail }}}\n\t\t\tcomment{{{ {$:/temp/ConversationCollector}getcomment }}}\n\t\t\tdebuginfo\u003C\u003Cdebuginfo>> />\n\t\t\u003C$action-setfield $tiddler\$:/config/sobjornstad/UserEmail\ $value{{{ {$:/temp/ConversationCollector}getemail }}}/>\n\t\t\u003C$action-sendmessage $message\tm-close-tiddler\ $param\StartAConversation\/>\n\t\t\u003C$action-deletetiddler $tiddler{{$:/temp/ConversationCollector}}/>\n\t\t\u003C$action-deletetiddler $tiddler\$:/temp/ConversationCollector\/>\n\t\tSend\n\t\u003C/$button>\n\u003C/$wikify>\n\u003C/$list>\n\u003C/$list>\n\n\u003C/$set>\n\n\u003Cstyle>\n\ttable.ta-feedback tr td > textarea, table.ta-feedback tr td > input {\n\t\twidth: 100%;\n\t}\n\t\n\ttable.ta-feedback th, table.ta-feedback tr {\n\t\ttext-align: left;\n\t\tvertical-align: top;\n\t}\n\t\n\ttable.ta-feedback tr td:nth-child(3) {\n\t\twidth: 30%;\n\t}\n\t\n\ttable.ta-feedback tr th {\n\t\twidth: 130px;\n\t}\n\t\n\ttable.ta-feedback {\n\t\twidth: 100%;\n\t}\n\u003C/style>},{title:StarTrek,created:20200322162127646,creator:soren,modified:20200509032437382,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,text:20th-century “futuristic” space-adventure series. Often associated with GeekCulture, although more by people outside it than inside it!},{title:StartUpProblem,created:20221129213626348,creator:soren,description:How can we bootstrap systems the value of which doesnt become apparent until you use them for a long time?,es:likely,modified:20221201050751495,modifier:soren,tags:Idea PersonalDocumentation Systems Design Public,type:text/vnd.tiddlywiki,text:Many notes systems and other tools for thought suffer from a ViciousCircle: Until you have a significant number of notes -- maybe as much as a years worth -- the value of the system doesnt become apparent. But without any apparent value, few people are going to spend a year assiduously placing notes in the system.\n\nThe author of PersonalElectronicNotebook1996 notices this problem and gives it the term in the title. His solution (done accidentally) was to find a //different// purpose for the system where the value was immediately apparent (in his case a work diary and task management system). Using the system this way contributed to the required accumulation of notes, even if these notes werent done ideally for the main purpose. Eventually, the system became self-evidently useful for its original purpose.\u003C\u003Cfnote \This isnt unlike literally starting an internal combustion engine; you find an activity that acts like a starter motor, spinning the engine around for a bit until it accumulates enough momentum to kick on and start running by itself.\>>\n\nI notice that the same thing happened to me with, for example, the RecordsProject. I would never have envisioned all the uses Ive found for my journals or RandomThoughts. My Zettelkasten started as a way to take notes on what I read; now I take reading notes in RemNote instead because the software is more effective for that, and over here I think in topical bits and mini-essays and send them to others to back up my points -- things I didnt even realize I needed or wanted before. AccidentsMakeTheWorldGoRound, as we say.\n\nMrNassimNicholasTaleb makes fun of this kind of purpose-switching in a business context in AntiFragile2012, but while noting that its how most successful companies end up working:\n\n> Now, worse: Nokia, who used to be the top mobile phone maker, began as a paper mill (at some stage they were into rubber shoes).\n\nSee also ToolsForThinkingDontWow.\n\n---\n\n{{StartUpProblem/p||PrivateChunk}}},{title:StarvationCreekFalls,created:20250618153310019,creator:soren,modified:20250618153310703,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:StarWars,created:20200321223725157,creator:soren,modified:20200509032441849,modifier:soren,tags:Publication Public,type:text/vnd.tiddlywiki,text:Series of space-adventure films. The first ones were classics; the rest have gone downhill into HollywoodFranchiseExploitation and are somewhere along the spectrum of forgettable to horrendous.},{title:StateAndRevolution1917,author:Lenin,bibliography:LifetimeReading,caption:The State and Revolution,created:20210703170128000,genre:Politics,medium:book,modified:20210705214036078,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1917},{title:StaticallyTyped,created:20200127021922677,creator:soren,es:likely,modified:20220601221033251,modifier:soren,tags:Code Public Idea,type:text/vnd.tiddlywiki,text:A tool of ToolAssistedDevelopment that forces the types of your variables to be provably correct, to one degree or another, before compiling successfully. Some static-typing systems are horrendous and annoying, providing only a marginal degree of actual type safety while preventing you from doing things that make perfect sense (e.g., C or Java), while others (e.g., TypeScript, Pythons MyPy checker, Haskell) bother you more but are sufficiently powerful that by the time you manage to get your code to compile, it usually works. Its surprising how many bugs are either attributable to or manifest in type errors of one kind or another.\n\nAnother interesting piece is that errors caught by a good type-checker tend to be easier to debug than errors you catch at runtime or in testing. The error identifies exactly where the type mismatch is, which usually leads you right to either the source of the bug or a realization of what you did wrong. Runtime errors often occur some ways off from the actual error in reasoning, so they take longer to trace back to the source.},{title:StaticSiteGenerator,created:20200425163028489,es:confident,modified:20210509011657144,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Means for creating websites in which a WYSIWYM markup language and configuration files are processed to generate an HTML website which is then uploaded to any web server and does not require any additional work on the part of the server aside from sending the pages to users (any dynamic content like search boxes, etc., is implemented client-side using JavaScript).\n\nOnce upon a time, virtually all websites operated this way, albeit with the content usually hand-written in HTML. As websites got more complicated, we moved to dynamic platforms like WordPress to manage it. Those are more complicated than many websites need and require a ton of server configuration, so we moved back the other way but with additional tooling so we dont have to write raw HTML to produce content (which was the benefit of WordPress).\n\nThe best-known generator is Jekyll, but there are many others. Sphinx also operates this way, though it is specifically targeted at documentation rather than blogs or general website usage.},{title:StatisticalMurder,created:20200423174122745,es:likely,modified:20210320032423056,tags:Risk Reasoning Public Idea,type:text/vnd.tiddlywiki,text:Provocative term for what happens when you focus attention on fixing a minor problem (in public health or environmental advocacy, for instance) while ignoring a much larger problem with a higher ValueToEffortRatio. The actors may not have directly murdered anyone, but they have caused people to die by their chosen resource allocation, due to the OpportunityCost of working on the minor problem.\n\nAirport security after 9/11 has often been described as statistical murder: in discouraging people from flying, more people drive, and since driving is more than a hundred times as dangerous as flying on a commercial airline, more people die.\n\nA number of public-health decisions during the COVID-19 pandemic|PandemicMood have been statistical murder, among them:\n\n* The suspension of the ~AstraZeneca vaccine over blood clots which likely didnt have anything at all to do with the vaccine, and had hurt a tiny fraction of the people who stand to die from not getting a vaccine.\n* The claim and decision that challenge trials were unethical|CovidChallengeTrials -- actually, //not// doing challenge trials was unethical.\n* The USs refusal to get on board with First Doses First.},{title:StCroixStateForest,caption:St. Croix State Forest,created:20201130025358895,foreignid:,gis-lat:46.049381006286666,gis-long:-92.41880229332722,gis-zoom:12,modified:20201130030828435,phone:,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki,text://Not to be confused with StCroixStatePark.//\n\nState forest with a small campground. Useful if you want to go to StCroixStatePark at the last minute and the in-park campground is booked solid. There will be fewer people, but the campground is not necessarily quiet; someone was running an obnoxious generator just about constantly and people were making quite a bit of noise last time I was there. More or less par for the course on a summer weekend, but one might think it would be better and it is not.},{title:StCroixStateForest/Amenities,created:20201130025818100,modified:20201130030016664,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Hand pump on a high-quality aquifer; usually fills the staging box with only 2 pumps. Two pit toilets. A lake, which you could jump in to clean yourself off if youre adventurous enough (some people have said theyve found leeches in it before). Put-your-cash-in-an-envelope registration and payment.\n\nAmazingly, there is solidly good cell reception, at least on Verizon (I believe I even had 4G, but there was usable data at any rate). I suspect the DNR may have installed a repeater.},{title:StCroixStateForest/Campsites,created:20201130025717985,modified:20201130025741707,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Favorites:\n\n* 2 -- drive-in with a very nice design, tolerable but not great privacy\n* 17 and 18 -- walk-ins in the back corner\n\nIn any case, you have to check if someone is at the site before you can reserve, so no harm in looking around.},{title:StCroixStateForest/Travel,created:20201130025531941,modified:20201130025640508,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Right down the road from StCroixStatePark. Drive as if going to Duluth (up I-35), then turn off at Hinckley (you cannot miss it) and east on 48 to the park, and then the forest (Alma Razor Road, shortly before the Wisconsin border).\n\nThe campground is well inside, about a 15-minute drive on the forest roads, but well marked.},{title:StCroixStateForest/Visits,created:20201130030648997,modified:20201130030724693,tags:Subplace Public Idea,type:text/vnd.tiddlywiki,text:Once in 2020 during a weekend visit to StCroixStatePark.},{title:StCroixStatePark,caption:St. Croix State Park,created:20201222210308948,foreignid:00253,gis-address:30065 St. Croix Park Road, Hinckley, MN 55037,gis-lat:45.9458339691326,gis-long:-92.60681569935775,gis-zoom:10,modified:20210807151734026,phone:(320) 280-7880,tags:Place MinnesotaStatePark Public,type:text/vnd.tiddlywiki},{title:Steam,created:20200712225555693,modified:20200712225638996,tags:Software Product Public Idea,type:text/vnd.tiddlywiki,text:Centralized, streaming-ish place to buy video games. Now that you dont buy them on CDs anymore (hah, remember those disc things?), everyone has pretty much consolidated on one distributor, much like TheAmazon has for physical goods.},{title:SteeleCounty,created:20201117232550018,modified:20201117232530004,tags:Place Public,type:text/vnd.tiddlywiki,text:County of OwatonnaMinnesota.},{title:StenoBoard,created:20200426163249056,creator:soren,es:confident,modified:20220601214251888,modifier:soren,tags:Product Public Idea,type:text/vnd.tiddlywiki,text:A 3D-printed|ThreeDPrinting MachineStenography keyboard that was the first purpose-built hardware for stenography outside of the establishment, the fancy expensive stuff. It suffers from terrible action, which isnt a surprise with the limitations of printing the device, but its still a big problem. My wrists and arms can start to hurt after just 15 minutes using it sometimes (see, e.g., 2020-04-25 Sat). Basically, the keys are actually pretty hard to press down, but they barely travel at all, and you have to push them all the way in to make it trigger; the result is that you have to slam them into the base and really //push// to ensure that all of your keys get counted as part of the stroke, which puts an enormous amount of pressure on your muscles for something that should be a very light touch.\n\nStill, it was a great idea, and for people whose hands and arms are less subject to RSI, maybe it would be a good device. I never noticed a whole lot of people complaining. But I do think it was objectively problematic.},{title:Steppenwolf1927,author:Hesse,bibliography:LifetimeReading,caption:Steppenwolf,created:20210703170128000,genre:Literature,medium:book,modified:20210705214036086,priority:3,readstatus:unread,recommended-by:Telegraph,tags:Source Public,type:text/vnd.tiddlywiki,year:1927},{title:StevensonWashington,created:20250621165002850,creator:soren,modified:20250621165004436,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:StLouis,created:20240402014029145,creator:soren,modified:20240402014030660,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:StockSanfordCorollary,created:20200303031113865,description:If you only have a minute, it only takes a minute to do,es:confident,modified:20210623025039794,tags:Psychology Productivity LawOfCynicism Public Idea,type:text/vnd.tiddlywiki,text:The Stock-Sanford Corollary to ParkinsonsLaw states that //{{!!description}}//.\n\nWhile this is obviously a tongue-in-cheek LawOfCynicism, its also remarkably true. Deadlines can do a great job at clarifying things and making them get done, especially when a lot of people who can otherwise get stuck in pointless discussions are involved.\n\nTheBasecamp, at least for a while, ran a four-day, eight-hour week during the summer, and found that their productivity did not decrease at all.\n\n!! References\n\n> To achieve great things, two things are needed: a plan|FunctionOfPlanning, and not enough time.\n> ---MrLeonardBernstein (\u003C\u003Crt 5258>>)},{title:StoicFork,created:20200809014033839,creator:soren,description:One should focus on the things which are under ones control and leave aside the rest.,es:likely,modified:20210916182130380,modifier:soren,tags:Definition PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Ancient principle of Stoicism that if something is not under your control, there is no sense in worrying or complaining about it; as often said it is “nothing to you.”\n\nSlightly counterintuitive, but also startlingly rational. One might even say it is CommonSense, but as we know there is NoSuchThingAsCommonSense. Its better to redirect your attention to what you actually //can// do something about...or just give it up entirely if there is in fact nothing at all you can do.\n\nThe traditional fork holds that things are either under your control or not under your control. In GuideToTheGoodLife2009, MrWilliamIrvine suggests extending this into a three-pointed fork, covering things which are completely under your control (e.g., your attitude), things which are //partially// under your control (e.g., whether you win a tennis match), and things which are not under your control at all (e.g., whether the sun rises tomorrow). I find this an unnecessary complication because I dont naturally have any difficulty decomposing things which are partially under my control into the components which I have control over and the components which I dont, but some people might find this a useful model.\n\nThe past is never under your control, so it isnt worth worrying about. You might use it as part of a historical education in yourself, to make better decisions in the future, but aside from that you should let it go.\n\nFailure to observe the fork combined with a belligerent nature may contribute to the adoption of HanlonsTanto. As MrDerrenBrown says in HappyAbsolutelyFine2016, it often leads to actively making things worse rather than better (pp. 167--9).\n\nCf. UniverseDoesntOweUsAnything.\n\n!! References\n\n> For us, there is only the trying. The rest is not our business.\n> ---T.S. Eliot, “East Coker”, //Four Quartets//},{title:Stoicism,created:20210916144458018,creator:soren,es:likely,modified:20211030025254554,modifier:soren,tags:Idea PhilosophyOfLife Psychology Public,type:text/vnd.tiddlywiki,text:Ancient philosophy beginning with the Greeks and reaching its most practical form among a number of Romans, including Seneca the Younger|MrSeneca, Epictetus|MrEpictetus, and emperor Marcus Aurelius|MrMarcusAurelius. After Aurelius, for whatever reason the philosophy more or less disappeared from public practice (some have speculated that Christianity took its place, even though the overlap between a religion and a philosophy of life is only slight|CoherentPhilosophyOfLife in most cases, and thats certainly the case with these two).\n\nMost people in 2021 have only a received cultural impression of Stoicism, which, if its the same cultural impression most people get, is almost completely wrong. The goals|GoalsOfStoicism of the philosophy as properly understood are to experience more joy and less negative emotion (//tranquility//) and to be socially involved and make the world a better place (//virtue//). Many people believe it is about suppressing all emotions, living an ascetic and pessimistic lifestyle, and withdrawing from attempts to change the world because they lead to personal distress, which could hardly be further from the truth. However, it is easy enough to see how the techniques and advice involved in the Stoic tradition, read with anything less than the utmost degree of care and not tried in real life, could lead one to that conclusion; this is a constant risk of reading two-thousand-year-old texts with no living teachers or cultural context.\u003C\u003Cfnote \\\Im so lenient on misinterpreters here partly because I went so far as to read some of the original Stoics myself some years ago, if briefly (as part of TheGreatCon), and still came out with an only half-accurate impression.\\\>>\n\nI would summarize the strategy of Stoicism as a kind of mind trick: while still being allowed to enjoy nice things and have ambitious goals, one cultivates ones ability to not only survive but even be happy with losing it all and failing completely. This can, of course, be a fine line to tread, but theres a lot of wisdom in attempting it. In some meaningful sense, the Stoic gets to have it both ways: her happiness doesnt depend on external things or outcomes, but she doesnt have to give them up entirely to achieve that.\n\n\n!! Key techniques\n\n* Use NegativeVisualization.\n* Pay attention to the StoicFork.\n* Understand the world as largely fatalistic: you cant change the past, and you have only limited, local influence on the future. (This idea integrates tightly with the StoicFork: most of the world is out of your control, so you should consider it only as needed to learn from it and make your choices about the small part of it you can control.)\n* Engage in VoluntaryDiscomfort from time to time.\n* Regularly reflect on recent events and how well you are following your philosophy of life|CoherentPhilosophyOfLife, using this as the driver of ContinuousImprovement in your practices.\n\n\n!! Lessons and specific advice\n\nThese lessons, in their present form, are drawn largely from MrWilliamIrvines interpretation of Stoicism|GuideToTheGoodLife2009, which isnt definitive but probably is useful.\n\n; When other people are annoying\n: Youre probably annoying, too. Reflect on your own shortcomings and the fact that other people cant help but act as they do (fatalism towards other people?). SIB: I also like to look for the MostRespectfulInterpretation, or even the most absurdly respectful interpretation.\n\n; When youre insulted\n: Try to defuse with humor, especially self-deprecatory humor, or if thats hard to pull off in the situation, dont say anything at all. People who insult you arent making you feel bad; you make yourself feel bad with your response. If the insult is true, then youre getting information and shouldnt be upset; if it isnt, then the insulter is simply misinformed or possibly malicious. There are cases where you may need to react (if you are in a position of authority over the other person and shouldnt be being insulted, for instance), but the reaction should then be an attempt to correct the other person, not an angry reaction.\n\n; In response to loss\n: Grieve briefly -- this is natural and unavoidable when the loss is serious -- but then brush it off to the best of your ability; it wont help you in the long term. Prepare yourself for loss through NegativeVisualization; react to loss by showing gratitude for your time with the thing or person you did have and recognizing how much worse off you would have been without having them in the first place. Realize that someone who has died wouldnt want you to sit around grieving (if they would, then they werent worth having as a friend in the first place!). Try not to become affected by others grief (though its great to express sympathy); allowing yourself to be affected is a form of making everyone worse off|MakeEveryoneWorseOff.\n\n; When youre angry\n: Try to avoid anger in the first place. Avoid being overly sensitive by practicing discomfort. Dont apply HanlonsTanto to people; assume charitably (see also MostRespectfulInterpretation). When you are affected, realize that things which anger you now will seem utterly insignificant soon (see SevenSevens). Act physically as if you arent angry, unless youre in front of someone else and think //acting// angry will be beneficial for some reason (even then, dont let yourself be taken over).\n\n; On fame\n: Dont seek it, whether globally or locally. Fame (or, more precisely, worrying about others opinion of you) requires you to curry other peoples favor and stay there, which encourages you to compromise your values and sacrifice your freedom. (Most people likely have values that you, as a Stoic, wont agree with, so getting approval will most likely require at least pretending to agree with their values.) It also produces more opportunities for being snubbed and becoming angry or insulted. If you happen to gain others approval simply by being virtuous, thats fine, just dont let yourself start valuing it in a way that compromises your philosophy.\n\n; On luxury\n: Dont live luxuriously; going beyond a basic, comfortable existence is unlikely to make you any happier. Similarly, dont strive for wealth; aim to acquire the minimal level you need. If you end up with more by pursuing virtue|GoalsOfStoicism, thats fine, but always recognize you could lose it, and for that reason avoid becoming accustomed to luxury. (Perfection is subtractive|PerfectionIsSubtractive.)\n\n; If banished\n: Whether your banishment is in the ancient political fashion, a semi-voluntary move, being sent to a health facility, or whatever, remember that your happiness depends mostly on you, not where you are or what you have. Learn about and enjoy your new place.\n\n; At all times\n: Start practicing a CoherentPhilosophyOfLife as young as you can; its the best preparation for growing old and eventually dying without feeling youve wasted your life. Enjoy your life -- and all your experiences -- with the recognition that you will die someday and should enjoy it while you have it|CouldWakeUpTomorrowDead.\n\n; On talking about Stoicism\n: People who dont have an examined, CoherentPhilosophyOfLife tend to react negatively to people who do, perhaps because they feel their values are being attacked. Its often better to keep yours to yourself.\n\n\n!! References\n\n> Stoicism is the attempt by man to get even with probability.\n> ---FooledByRandomness2004, MrNassimNicholasTaleb, p. 248},{title:StoicismAndGender,created:20231018114650140,creator:soren,description:Men seem to be more drawn to Stoicism than women; why?,es:unlikely,modified:20231023132705803,modifier:soren,tags:Idea Psychology Sociology PhilosophyOfLife Public,type:text/vnd.tiddlywiki,text:I noticed that all the avowed Stoics|Stoicism I know are men. Not to say that women always hate it or something, but everyone I can think of who Ive seen write about it or personally know and says they love it is a man. That seems fairly odd!\n\nIt is well-known that women are more subject to negativity bias (the canonical explanation is that its evolutionarily safer for ones offspring for the men to take as much of the risk as possible), so I wonder if that could be part of it. If youre further along that bias path, perhaps it simply isnt attractive, or is harder to understand or take seriously.\n\nMaybe there //is// something masculine about it, also? Emphases on control and virtue and all that. (And more of that in the fake popular version, which influences whether people ever take it seriously.)},{title:StoicismAndMe,created:20210916143746277,creator:soren,es:personal,modified:20210916180532318,modifier:soren,tags:Idea Identity PhilosophyOfLife PersonalMythology Public,type:text/vnd.tiddlywiki,text:I am, I think, a natural fit for Stoicism. Without any intention of forming a philosophy of life|CoherentPhilosophyOfLife, I have long believed and acted on a number of its core principles:\n\n* I often rationalize what I choose to worry about using the principles of the StoicFork, sometimes to the point of confusing others, and this has always felt thoroughly natural to me, never something Ive intentionally worked on. I was relieved, for instance, when I got COVID-19|CovidJournal, because suddenly my pandemic health wasnt under my control anymore and I didnt have to make difficult decisions about avoiding it on terrible-quality information all the time: all that was left was to rest for a couple of weeks and let the disease take its course. There was a small chance I might need to be hospitalized or even die, so I made sure everything was in order just in case, passed off the information to someone I trusted, and then that was settled too. Everyone insisted I must be afraid, but I was legitimately at my lowest anxiety level in months.\n* I rarely regret or dwell on past events|WouldntGoBack; they happened and I even learned something from them. Now for the future.\n* I virtually never get angry at people|MyPlacidity and have remarked on this for years. I dont know why this is. (I am more critical and snarky than I need to or would like to be, but this is quite different from actual anger -- it isnt primarily an emotional reaction.)\n* I tend, in general, to live a simple lifestyle in most peoples view; see EfficientLife. Ive never enjoyed buying things for the sake of doing it, and many of the expensive things I buy are things that I legitimately reflect on enjoying every time I use them. Im not anywhere near sage level here, to be sure -- I still spend $40,000 a year and do plenty of unnecessary social signaling -- but its already in my sights at any rate.\n\nI think pursuing NegativeVisualization and VoluntaryDiscomfort could be highly valuable additions to this existing philosophy, and being more deliberate about the rest of the philosophy wouldnt hurt either.},{title:StOlaf,created:20200122030851754,gis-lat:44.46307138558644,gis-long:-93.18772666212321,gis-zoom:14.5,modified:20201204225258857,tags:Place Public,type:text/vnd.tiddlywiki,text:Beautiful little college in NorthfieldMinnesota, a sleepy, intellectual little town between the TwinCities and OwatonnaMinnesota, and my alma mater.},{title:StOlafBackdropEssay,created:20200125232036730,es:confident,modified:20210728003906897,tags:Essay Imagination Public Idea,type:text/vnd.tiddlywiki,text://This is the introduction of a piece Im writing about TheStOlafChoir. I dont know if Im ever going to finish that piece, and this part turned out quite nicely, so I figure I might as well put it up here.//\n\n------\n\nIN ORDER TO TALK PROPERLY about the St. Olaf Choir,\n we first need to talk about St. Olaf|StOlaf.\n\nMost places in the world are boring:\n office blocks,\n strip malls,\n city streets,\n farm fields,\n the insides of cars,\n your average living room.\nThey’re a simple backdrop for the things in them\n and the events that happen there.\nSome places in the world are actively unpleasant:\n landfills,\n dirty highway rest areas,\n haunted houses,\n outer space.\nAnd some places in the world are special.\nUnlike boring places,\n which are distinguished by their generally unremarkable and unobjectionable nature,\n and unpleasant ones,\n which are inhospitable, smelly, cold, and seemingly designed (or found)\n without the least regard for human utility or enjoyment,\n special places can be remarkable and wonderful in an infinite number of ways,\n many of which can be difficult to describe.\nWe might call them beautiful, well-maintained, evocative, livable --\n but many of their qualities don’t have good words.\nThese special places shape our thinking and the things that happen in them\n in subtle but powerful ways,\n and they’re the places we want to live and work and visit\n for some reason other than their contents.\n\nThe campus of St. Olaf College is one of these special places.\nIt is a confluence of a number of the qualities listed above\n and quite a few others.\nIt is undeniably beautiful,\n and there is something slightly primal and magical about its physical location.\nIt sprawls on top of a hill 150 feet above the town.\nThe hill is named Manitou Heights,\n for the spirits the previous indigenous population believed lived in the area,\n and it still feels to some extent or another like holy ground.\nThe sunsets are remarkable every single day:\n I don’t know exactly what it is about the geography,\n but I’ve always felt they add the last touch to the place,\n and I still miss them.\nThe livable portion of campus is surrounded on three sides\n by a buffer of woods and prairie\n about as large as the campus itself,\n which both sets the place apart\n and means you can go walk in the woods\n about five minutes from your home at any hour of the day or night.\n\nThe built environment has what the architect Christopher Alexander|MrChristopherAlexander\n calls the quality without a name|QualityWithoutAName.\nSome of the buildings are nicer than others,\n but none of them are ugly or unlivable\n (okay, there might be //one// exception).\nMany of them are impressive works of architecture,\n and nearly all are faced with the same Minnesota limestone\n that looks strong enough to stand up to an F5 tornado\n but wears as gracefully as leather\n and imparts a strong unity to structures built over the course of a century.\nStrange little shortcuts you learn about over the years\n and then feel smug about using abound.\nThe top floors of most of the dorms have exposed rafters,\n and the district steam heat makes friendly clanking noises in the winter.\nThe entrance to the maintenance tunnels at one dorm\n is through a grate under the pool table.\nThere are little flights of stairs everywhere,\n behind doors that don’t look like they belong there,\n in little alcoves,\n outside nestled into the sides of hills and attached to buildings;\n in one place where two buildings connect by a passage,\n you go three steps down from the first floor\n and end up on the //second// floor of another building.\nThere’s a greenhouse on the roof of one building.\nThe library is a maze full of mysterious locked doors,\n sixty-year-old restrooms,\n dusty typewriters and cabinets of microfilm,\n basement rooms nobody ever uses,\n a floor three-and-a-half that’s only accessible from one staircase,\n an office that’s behind a grating that makes it look like a cage,\n emergency-exit doors with broken alarms that you can take shortcuts through\n if you know what you’re doing,\n and crank-open windows that once faced outside\n and three renovations later now look onto atriums and classrooms,\n so you can shout out your window at someone in another part of the building.\nThe paths in the center of campus are a haphazard spiderweb of odd routes\n made variously of concrete, gravel, paving stones, and trodden-down grass,\n and none of them go exactly where you want them to\n but all are just close enough to not make you resentful,\n and you get the strange feeling you couldn’t have done a better job anyway.\nIn short, everything is a bit messy,\n but it’s messy in a human way,\n messy by design,\n messy in a way that inspires you and makes you feel comfortable,\n never in an awkward or frustrating way.\nLike a good book or a path in the woods,\n it surprises and delights even several years after you arrive,\n long after you thought you’d seen everything there was to see.\nThere might even be a couple places you’re sure you’ve stumbled across once\n but can never quite seem to find again,\n just stubborn enough to make you wonder if you actually dreamed it.\nPerfectly cleanly designed buildings are sterile and unnatural\n and don’t change to meet people’s constantly changing needs;\n St. Olaf never ceases to feel organic and responsive.\n\nThe campus is complete;\n about the only everyday thing you can’t do there is get your hair cut.\nI sometimes stayed on the Hill for weeks at a time and hardly even noticed.\n\nAnd then there are the people.\nSt. Olaf has a strange, rebellious, and daring culture of trust and community;\n I’ve never been anywhere else quite like it.\nNot holding a door for someone would be bizarre.\nWhen several students at the other college in town were killed in a car accident,\n we went across town and bought and delivered flowers to every student.\nI have never felt remotely unsafe or uncomfortable anywhere on campus,\n even when walking alone in the woods in the dark at midnight.\nAnd not only can you leave valuables lying around\n and expect them to be there when you come back,\n everyone does.\nThe area outside the cafeteria presents dozens of racks\n filled with bags and coats and other personal goods.\nBrand-new backpacks and ~MacBooks -- sometimes without passwords --\n are left on tables at the library for hours at a time.\nThe mailboxes don’t have locks.\nWhen I arrived in 2013, the dorms were even left open except at night\n (they gave in on that one partway through my study\n and now keep the outer doors locked 24/7,\n but any student can still scan their ID\n and walk into any dorm without any sort of permission\n for most of the day).\nI once overheard some people in the cafeteria\n discussing how they should indicate they were coming back\n for their partially eaten meals\n when they all had to duck out for a couple of minutes,\n and they concluded they could leave their wallets with their trays!\n\nOf course the world isn’t quite that neat and perfect;\n people having a bad day are rude once in a while,\n and I once had my winter coat stolen,\n a rather brazen act during a Minnesota winter.\nBut even then, the obvious answer was,\n that sucks,\n life isn’t fair,\n and now I’m going to buy a new coat and move on with my life|AddAnotherRule\n (and still leave it lying around outside the cafeteria without worry).\nThe correct response to someone occasionally breaching\n this kind of community trust is to ignore it:\n we couldn’t and weren’t going to let a couple idiots stealing coats\n ruin our community.\n\nSt. Olaf, while best-known in the upper Midwest,\n is full of smart people from all over the country and the world.\nThe college chapel, which holds about 750 people,\n bears flags held perpendicular to the walls from mounting brackets on both sides,\n one for each nationality represented in the student body,\n and they almost don’t all fit in the building nowadays.\nA greater percentage of St. Olaf undergraduate students study abroad\n than at any other college in the country.\nAnd most students have a strong commitment to the liberal-arts philosophy.\nAll this means strange and unrelated ideas are colliding everywhere you go.\nEven a casual visitor will overhear some strange things\n if they start paying attention to conversations.\nTo my memory, I have never stopped by the college\n and not caught something intriguing or funny\n to add to my collection of quotes.\nWhen I was a student,\n I pretty much never stopped noticing\n connections between different classes I was taking\n and other things that were happening on campus.\nMaybe that’s more a reflection on my eclectic and curious mind\n than anything else,\n but the place definitely intensified it.\n\nAnd of course, as on most college campuses,\n students are a charming if dangerous combination of\n clueless, confident, idealistic, and adventurous.\n\nThis is the backdrop for the St. Olaf Choir.},{title:StOlafChristmasFestival,created:20200125225237538,creator:soren,es:personal,modified:20230912032824778,modifier:soren,tags:PersonalMythology Music Religion Idea Public,type:text/vnd.tiddlywiki,text:The Christmas concert of StOlaf College. Usually called “Christmas Fest” or just \Fest\ by those in the know. I abbreviate it “FF”, a DuttonSpeedwords-based abbreviation standing for the delightful phrase “Fetl Fet” (literally “the thing specially associated with celebration” -- namely Christmas -- plus “celebration” itself).\n\nBut its not just a Christmas concert. Aside from being a prophet or a singer in TheStOlafChoir, I believe the St. Olaf Christmas Festival is the easiest way I know to come into contact with God, or whatever forces of unity and divinity you prefer. Surpassing beauty, energy, and a massive amount of care and practice from hundreds of people go into the performance. Hundreds of people make pilgrimages (and they describe them as such) from all over the Midwest and even further afield every year to see it.\n\nFest is nice on a recording, and I inherited N.H.|PrivatePerson collection of them and now have almost an entire CD rack of them, but it doesnt give the same experience, its just beautiful music (and maybe a few memories, if you have them to retrieve). As I once said, “The difference between Christmas Festival live and Christmas Festival recorded is like the difference between looking at a picture of a beautiful woman and marrying her and making love to her.” (\u003C\u003Crt 5859>>)\n\nI have a mythological theory about the PerfectChristmasFestival. The Fest as a whole is a deeply held part of my PersonalMythology. I also have a much more pointless, tongue-in-cheek WaspConspiracy theory.},{title:Stonehenge,created:20250621164626115,creator:soren,modified:20250621164626982,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:StopFoxtrotsNow,bibliography:Git,caption:Protect our Git Repos, Stop Foxtrots Now!,created:20200908192125730,description:Coins the term //foxtrot merge// (a merge where the order of parents is inverted) and explains why its bad and how you can prevent it.,medium:article,modified:20200908192248614,tags:Source Public,type:text/vnd.tiddlywiki,url:https://blog.developer.atlassian.com/stop-foxtrots-now,year:2016,text:{{!!description}}},{title:StorageVersusRetrievalStrength,created:20200304022337167,creator:soren,es:possible,modified:20210509005345496,modifier:soren,tags:Information Memory Public Idea,type:text/vnd.tiddlywiki,text:If the process of SpacedRepetition has a flaw, it is that SpacedRepetitionEncouragesFloatingIdeas.\n\nMost learning methods focus on storage strength, e.g., by rote repetition, by spacing repetitions more effectively, by using MnemonicTechniques, etc. These are valuable for very small things or things which are ultimately stuck with little context but are still worth memorizing (e.g., items of vocabulary, phone numbers), but less valuable with concepts.\n\nMost learning methods focus too little -- or not at all -- on retrieval strength, that is, whether the information will be accessible in a relevant context (see RetrievalContext and NotesMustLink for this issue in externalized media). When something is effectively embedded in a strong lattice of retrieval context, it becomes way more difficult to forget, //and// it is much more useful. Even a memory with fantastic storage strength is effectively totally useless if it can never be recalled in a relevant context -- you are merely doing something WorthlessEfficiently.\n\nHowToTakeSmartNotes (esp. around page 102) sets the ZettelKasten as the savior for creating high retrieval strength. Its probably a little silly (OK, a lot silly) to claim it solves every problem, but it has a point, too.\n\nI havent identified any clear non-externalized ways to work on retrieval strength, though intentional ElaborativeEncoding in one form or another may be the key. Many of the techniques for creating good SR flashcards aim to place the cards in an appropriate retrieval context, but these techniques are still an extremely inexact science.},{title:StoriesOfYourLifeAndOthers,author:Ted Chiang,caption:Stories of Your Life and Others,completed:202207161200,created:20220716195426327,creator:soren,medium:book,modified:20221109174957363,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:StoriesOfYourLifeAndOthers,url:,year:2002,text:Book of short stories by MrTedChiang. I read these on the flight to Turkey for the RemNote offsite this summer; they made great travel reading. Every one of them was great; the prose is not exactly brilliant, but solidly excellent, several cuts above the sci-fi we love to hate, and the base ideas are fascinating and often like nothing Ive seen before.\n\n; Tower of Babylon\n: People build an enormous tower with the goal of reaching the heavens, but unlike in the Biblical version, they make it up to the “firmament”, where the sky is as solid as rock. (By this point, many people live on the tower, and people live there who have never been on the surface of the earth. They farm on the tower and everything.) After a great deal of engineering and digging, they break through and create a massive deluge, which they were worried about; one of the diggers gets trapped and nearly drowns...and he surfaces in the ocean on the surface of the earth. The sky has some goofy geometry that somehow wraps around.\n\n; Understand\n: A man is given some drugs to restore his intellectual ability after an accident, and becomes insanely smart. The government does some further experiments with him and he becomes superhumanly smart. But it turns out that a second person also had the same thing happen, and they have such different values that only one of them can survive. The other person kills the narrator by making him think some kind of self-referential or resonant thought that causes him to self-destruct; a thought that he built up by suggestion long before they even met each other and then triggers by saying the word “understand”.\n\n; Division by Zero\n: Mathematics turns out to be inconsistent (a scary suggestion that was mentioned in something else I recently read, perhaps in WhenEinsteinWalkedWithGodel). The narrator (a high-flying mathematician) has her marriage break up, among other things, as a result of the total nihilism this brings on her. Im not even a mathematician, and I got chills thinking about how disruptive this would be!\n\n; Story of Your Life\n: The title story – really novella length – later adapted into Arrival2016. The narrator is a linguist who makes contact with some aliens who come to Earth. The aliens have a curious language in which the written and spoken forms have no resemblance at all and work completely differently. The written language is also written in a way that makes it obvious the aliens minds work totally differently: an entire idea is written in a single character, and without any kind of stroke order involved, so that one clearly has to understand the entire idea and essentially be able to visualize the entire character before beginning to write it the way they do, in a quick swoop or two. Similarly, the aliens find alternative ways of expressing math and physics more useful than humans normally do; they find certain types of calculus fundamental and dont understand algebra, for example. And perhaps most perplexing of all, they dont want to know anything from Earth, they are only interested in letting Earth find out about them. Eventually the Earthlings figure out that the aliens dont experience time as directional, and perhaps dont even experience space in the same way -- they know exactly what will happen for all time at all times, which explains their language, their math, and their not needing to ask about anything on Earth.\n: Through her extensive work with all this, the narrator gains the ability to essentially see some of the future herself, which leads her to be able to write the Story of her daughters Life right before she is conceived. The philosophically fascinating part is that she knows her daughter is going to die in her early twenties in a mountain-climbing accident, but happily goes through with it anyway. Part of this is that she also sees a lot of joy and worthwhile moments in her daughters life, which should not be spoiled by the end. Another part is arguably that she may not have a choice; its hard to know what to think about free will in such a situation! One way to look at it is maybe that she does have a choice, but...knows what choice shes going to make?\n\n; Seventy-Two Letters\n: In two threads: (1) all kinds of useful magically animated creations can be produced by coming up with a name (in a sort of Kabbalistic fashion) that describes what that thing is and should do. (2) Reproduction is accomplished, as according to an ancient view, by the next generation existing fully formed in the reproductive cells of each generation. However, in this story, this layering isnt infinitely recursive; humans were created with a finite number of layers, and at the time of the story many bloodlines are reaching the end and thus becoming a last, permanently infertile, generation!\n: These two threads come together when a scientific project is established to create such a Name for humans, which will then be applied to allow humans to artificially animate their children and continue to reproduce.\n\n; The Evolution of Human Science\n: //Metahumans// have been created, engineered beings who are more intelligent than humans. Human science has become a derivative field that seeks to explain the science done by metahumans to actual humans.\n\n; Hell Is the Absence of God\n: A thoroughly odd story of a world in which regular angelic visitations create all manner of injuries and hardships, but also heal people and make believers for life. Some people thus end up seeking out these visitations if they are unsatisfied with their life, in need of a cure, etc. Chiang writes in the story notes that he wanted to write something like Job, but one without the seemingly unsatisfying ending in which Jobs fortunes are restored; accordingly, the main character ends up going to Hell even though he, in some sense, did everything “right” according to the established mythology, and the problems he sought help with were also not his fault. Along the way, there are also extended meditations on the experience of why bad things happen to good people, and the great variety of sometimes confusing ways in which people deal with having had these experiences.\n\n; Liking What You See: A Documentary\n: I didnt read this one when I read the rest of the collection because I had already read it online a few months before when someone linked it to me as part of some discussion. But it involves a treatment called //calliagnosia// which hides the attractiveness of people so that you wont treat them differently as a result. As would be expected, this creates a variety of both positive and negative emotional and societal effects, and the narrator has a relationship that probably didnt get back together because of her boyfriends calliagnosia.},{title:StoryPoint,created:20200509180800473,es:confident,modified:20210623025116739,tags:ScrumMethodology Math Public Idea,type:text/vnd.tiddlywiki,text:Scrum concept designed to make estimates of user stories|UserStory easier. Rather than attempting to estimate the actual time it will take you in hours, you place a number on it which has no meaning except relative to other stories on the ProductBacklog. The insight is that this is generally easier to do than guessing the number of hours.\n\nIf you do want to know hours, you can track hours (or just make an assumption of what total amount of time was spent tackling backlog items over a Sprint) and then look back at your history to see roughly what number of hours a story point maps to on average. You can also simply measure your velocity in story points to know how much you can sensibly schedule in a sprint (this is generally easier and just as useful).\n\nOften combined with the use of a Fibonacci scale to make even the points easier to assign. The insight here is that your estimating precision worsens as the task gets larger. So when the task is very small, you can pretty accurately tell the difference between a 1, 2, or 3, but choosing between an 8 and a 9 is pure guesswork. Thus, you choose from 1, 2, 3, 5, 8, 13, 21, etc. Teams are usually able to agree on this level of estimate.\n\nMany people treat expansion beyond an 8, 13, or 21 (depending on personal/team preference) as a trigger for initiating StorySlicing.},{title:StorySlicing,created:20200326142656344,es:likely,modified:20200827154231370,tags:AgilePhilosophy ScrumMethodology Productivity Public Idea,type:text/vnd.tiddlywiki,text:Story slicing is a ScrumMethodology technique for trimming features as a deadline approaches, or simply for enabling more effective Prioritization in any circumstance (helpful when a story requires an excessive number of StoryPoints).\n\nThe insight of story slicing is that larger user stories|UserStory are often composed of smaller components, and one of those components might hold a disproportionate amount of value compared to its effort. The rest of the story might, essentially, be YakShaving. Thus, splitting up the story can allow you to bring the highest-priority parts of features forward and deliver more value in a given release. You might even realize parts of the features werent needed after all|UnneededTodo!\n\nIn addition, if youre having to cut features to make a deadline, having more stories gives your ScrumStakeholders a much larger number of options, thus is more likely to make them content cutting features.\n\nSlicing stories seems related to avoiding scale|AvoidScale: large stories become difficult to understand and work with and hide complexities.\n\nSource: AgileInTheRealWorld.},{title:StPaul,created:20200321223541627,creator:soren,gis-lat:44.95352986325976,gis-long:-93.09072784811116,gis-zoom:11,modified:20240109032418727,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Eastern side of the TwinCities.},{title:StrangeCareerOfJimCrow1955,author:Woodward,bibliography:LifetimeReading,caption:The Strange Career of Jim Crow,created:20210703170128000,genre:History,medium:book,modified:20210705214036101,priority:3,readstatus:unread,recommended-by:ML,tags:Source Public,type:text/vnd.tiddlywiki,year:1955},{title:StrangeLoop,created:20200407032746589,creator:soren,es:possible,modified:20210709231031338,modifier:soren,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Central theme of GodelEscherBach1979, a strange loop involves a system in which, as you appear to be proceeding one direction in a hierarchy, you somehow end up back where you started, much like in an Escher print. The sentence “This sentence is false” is a simple linguistic example.\n\nMrDouglasHofstadter sees the strange loop as the beginning of consciousness|HardProblemOfConsciousness.},{title:Stranger1942,author:Camus,bibliography:LifetimeReading,caption:The Stranger,created:20210703170128000,genre:Literature,medium:book,modified:20210705214036109,priority:3,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1942},{title:StrategicStrength,caption:Strategic,created:20201026180955201,creator:soren,description:The Strategic theme enables you to sort through the clutter and find the best route.,es:likely,modified:20250324183508234,modifier:soren,tags:Process Business Risk Psychology Public Idea,type:text/vnd.tiddlywiki,text:Item identified on the StrengthsFinderReport:\n\n{{!!caption}} -- \{{!!description}}\\n\n* I was thoroughly skeptical of this one at first, but I think their description is just bad, because it focuses on business decisions and long-term planning, which dont match well with my other strength areas. Also, WTF is with the description starting with \The Strategic theme\, unlike any of the others?\u003C\u003Cfnote \Spotting this feels very Strategic...\>>\n* Im definitely good at quickly finding the signal and feeling my way through a heap of information or application options, as well as at probing hypotheticals. Still probably the weakest fit, but I wouldnt call it wrong either, and after all it is the last one on the list.\n* \u003Cdiv>This bit on the \Strengths Insights Guide\ is accurate and helps contextualize, too:\n\u003Cblockquote>Instinctively, you may see solutions before other people know there is a problem. You might start formulating answers before your teammates, coworkers, or classmates understand the question.\u003C/blockquote>\n\n This is frankly very annoying; it makes it hard to relate to and work with other people. I really do wish I found it easier to slow down sometimes.\n\u003C/div>\n\n!! Suggested action items\n\n* \You are a self-reliant person who needs time alone to think and work\: Im managing OK as things stand, but I still think I would benefit from carving out more uninterrupted time at the office.\n* Dont raise problems without solutions|PresentingProblemsWithoutAnswers to avoid people thinking youre just shooting down their ideas.\n* Be careful about jumping to conclusions|JumpToConclusions, or even just appearing to.\n* Participate in projects at early stages to help prevent tunnel vision (intellection|IntellectionStrength also suggests participating in planning).\n* Invest in ContingencyPlanning in detail, being ideally suited to perform it.},{title:StreisandEffect,created:20210611012923506,description:Suppressing information in a manner visible to the public may backfire by causing people to seek it out when they otherwise would have ignored it.,es:confident,modified:20210611023049261,tags:InternetTheory Psychology Public Idea,type:text/vnd.tiddlywiki,text:In the Internet age, actively attempting to suppress something often backfires, causing more publicity. A manifestation of InformationWantsToBeFree, to whatever extent it does, and one reason that attempting to prevent InformationHazards requires very nuanced techniques.\n\nSeems to occur when:\n\n* The affected information is not particularly valuable or interesting in itself but has a certain private/forbidden factor.\n* The information is easily distributed and many copies exist, or it cannot be quickly removed.\n* The fact that the information is being suppressed is stated publicly or can be easily leaked, so that people know they should go look at it.\n\nNamed after an early-aughts incident, one of the first to noticeably exhibit the effect, in which Barbra Streisand tried to prevent some aerial images of some kind of private mansion from being distributed. Who cares about pictures of Barbra Streisands mansion? Except everyone, when she is desperately trying to stop you from looking at them!},{title:StrengthsFinder,caption:StrengthsFinder,created:20201026153109407,format:hardcover,medium:book,modified:20230912032832311,owned:yes,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:2007,text:This is a combination book and statistics-based assessment of your strengths (logically enough). Also presented under the moniker “~CliftonStrengths.” I did this with T.A.L.T.|PrivatePerson in Oct/Nov 2020. \n\n{{StrengthsFinder/p||PrivateChunk}}\n\nSpecifically, I did \Edition 2.0\, which comes with a revised inventory based on learning from hundreds of thousands of responses. My results and details of the structure of the inventory itself: StrengthsFinderReport. The team then also did a FederatedStrengthsFinderWorkshop.\n\nBasic import of the framework/typology: people spend a lot of time classifying whats //wrong// with people and what needs improvement, and barely any time determining whats //right// with people -- and this is a shame, because figuring out what youre best at means you can do more of those things. Its pretty silly to spend your time doing more of the things youre worst at! Put another way, you could spend all your energy trying to reach a mediocre level at everything, or you could focus 90% of that energy becoming really, really good at a few things, and the remaining 10% being sure youre not so bad at the rest that it sinks your projects (or finding other people who can fill in the weaknesses). This strongly parallels some of the ideas I identified strongly with in SoGoodTheyCantIgnoreYou, and it feels like an extremely RoguelikeBook idea as well: are you using your skill points wisely?\n\nThis approach, taken directly, might fail in the case of a ScarcestResource being the limiter; but nevertheless it is valuable to be aware that there may be other options than HammeringHarder on the scarcest resource (e.g., paying an expert or finding a partner to handle your lack of it).\n\nNot to be confused with playing to a number of different, related strengths (e.g., FullStackFreelancing, polyspecializing|Polyspecialization, or following an EightyTwentyPrinciple to avoid attaching all effort to a single area); there is no contradiction here, provided you dont make one of the focuses something you suck at. See also QuitWhatYouSuckAt.\n\nStrengths are not equal in population frequency; see StrengthsFinderFrequency.\n},{title:StrengthsFinderFrequency,created:20201110194303389,es:possible,modified:20210714021638082,tags:Public Math Sociology Idea,type:text/vnd.tiddlywiki,text:Data comes from the rather sketchy-looking, poorly formatted, and no-sources-provided http://www.strengthsmining.com/gallup-strengthsfinder/, so take with an appropriate grain of salt. Identified strengths from my own StrengthsFinderReport are in bold.\n\n|!Strength|!n|!Relative Freq|\n|Self-Assurance|59,254|3.76%|\n|Significance|87,738|5.56%|\n|Command|99,048|6.28%|\n|Focus|121,719|7.72%|\n|Discipline|123,422|7.82%|\n|Analytical|130,361|8.26%|\n|Maximizer|136,349|8.64%|\n|Activator|137,553|8.72%|\n|Arranger|143,209|9.08%|\n|Context|150,230|9.52%|\n|Connectedness|164,624|10.44%|\n|Intellection|165,086|10.47%|\n|Ideation|172,867|10.96%|\n|Deliberative|180,209|11.42%|\n|Individualization|194,443|12.33%|\n|Consistency|210,950|13.37%|\n|Competition|216,667|13.74%|\n|Woo|225,372|14.29%|\n|Futuristic|237,398|15.05%|\n|Communication|238,038|15.09%|\n|Belief|240,170|15.22%|\n|Developer|284,078|18.01%|\n|Includer|293,696|18.62%|\n|Harmony|300,556|19.05%|\n|Positivity|302,825|19.20%|\n|Strategic|318,143|20.17%|\n|Empathy|325,374|20.63%|\n|Input|325,523|20.64%|\n|Learner|357,602|22.67%|\n|Relator|362,135|22.96%|\n|Restorative|367,178|23.28%|\n|Responsibility|384,251|24.36%|\n|Adaptability|390,179|24.73%|\n|Achiever|441,143|27.97%|\n|Total|1,577,478|100.00%|\n\n\n!! Data cleanup in vim\n\nFrom a tab-separated two-column layout as obtained from the blog, where ^ is a literal escape:\n\n```\n:%g/normal I|^A|^\n:\u003C,>!awk -F | { x$3; gsub(\,\,\\,x); x x*100/1577478; y sprintf(\\\%.2f\\%\\%\, x); print $1 \|\ $2 \|\ $3 \|\ y \|\ }\n```},{title:StrengthsFinderReport,created:20201026155232035,creator:soren,es:likely,list:IntellectionStrength InputStrength ContextStrength IdeationStrength StrategicStrength,modified:20250324183529863,modifier:soren,tags:PersonalityAssessment Public Idea,type:text/vnd.tiddlywiki,text:The report associated with StrengthsFinder identifies your five \strongest\ areas from a set of 34, based on a series of a hundred-some IpsativeAssessments.\n\n!! Composition\n\nThe primary part of the assessment is the Signature Theme Report, giving you five themes and then having you look them up in the book and learn about them.\n\nThe report also comes with a separate section called the Strengths Insight Guide (whoever titled these sections was //not// someone with an appropriate Strength), which purports to personalize the types even more by giving different wording that cross-cuts into your other areas. I was not impressed, particularly in the way it assigned unbelievable importance to single questions (you get 5-20 seconds to put yourself on a scale for each one, and its sometimes a rough choice between the two ends of the ipsative).\n\nSome parts were actually quite good; Ive incorporated some of those bits into the outline. A large fraction of the rest talked about my self-reported-in-a-single-question good vocabulary (I am not exaggerating, I counted and the analysis of my \input\ strength literally said this 8 times in different ways). I also appreciated this bit from \input\:\n\n> This authoritarian stance puts people on notice that you are clever. At this point, individuals confidence levels begin to drop. Your ease with language and artful tactics signal that you are in charge.\n\nDescribing me as “authoritarian” is so funny to me that I wrote “lol wut?” next to it in my copy. Though Ill admit I could //come off as// authoritarian under the wrong circumstances if someone didnt know me.\n\n!! Strength analysis\n\nMy results and thoughts as follows when I took the assessment 2020-10-26. This includes snippets from both the canned descriptions (in the book) and the personalized ones (see \Strengths Insight Guide\ section below).\n\n\u003Col>\n\u003C$list filter\enlist{!!list}\>\n \u003Cli>\u003C$link to{{!!title}}>{{!!caption}}\u003C/$link>: “{{!!description}}”\u003C/li>\n\u003C/$list>\n\u003C/ol>\n\n!! Literature\n\nEmbedded full text:\n\n* Signature Theme Report|strengths-signature-theme.pdf\n* Strengths Insight Guide|strengths-insight-guide.pdf},{title:StretchText,created:20210123161125891,es:confident,modified:20210516224426033,tags:Information Definition Public Idea,type:text/vnd.tiddlywiki,text:A form of hypertext|Hypertext in which you can “zoom in” on linked ideas by expanding them in-place, seeing a greater or lesser level of detail within the ostensible framework of a single linear narrative. I find this an extremely useful complement to opening separate pages or tiddlers in certain cases, particularly when it comes to lists: you essentially have an expandable outline that can still read in prose at any expansion level, and you dont have to keep jumping between sections.\n\nThe term is due to MrTedNelson. It is often written in CamelCase even outside of wikis, though Nelson himself has also written “stretchtext”.\n\n!! In ~TiddlyWiki\n\nI have a simple implementation of stretchtext in TiddlyWiki that I sometimes use in this ZettelKasten, which can be found in $:/plugins/sobjornstad/TiddlyStretch. Its just a couple of (relatively complex) macros. Each “expando” transcludes one tiddler in one of two forms, “small” or “large” (or “contracted” or “expanded”). In contracted mode, one field is shown in inline mode (by default `description`), and in expanded mode, another field is shown in block mode (by default `text`). Alternatively, you can use `expandoTemplate` to specify small and large //templates// rather than single fields; in this case, the specified tiddler is transcluded through either the small or large template. In either case, a small toolbar is shown next to the section to indicate that its expandable or contractable and allow quickly exploding (opening the tiddler) or editing the portion. In expanded mode, a blockquote-like bar appears down the left side to indicate the scope of the expanded portion.\n\nYou can trivially create multi-level stretchtext by putting more expandos inside the tiddlers that are transcluded from the first level.\n\nSome good examples of use in this wiki include the RecentlyRead list and MyUnusualMentalExperience.},{title:StrongerRelationshipWithoutNeed,created:20250502122914563,creator:soren,description:The most likely relationships to succeed are those that youve allowed yourself to let go of needing.,es:likely,modified:20250610005546027,modifier:soren,tags:Idea InterpersonalRelations Psychology Public,type:text/vnd.tiddlywiki,text:A strange pattern: when you feel like you really need a relationship (of any kind) to work out, and constantly try your hardest to keep it together, it usually becomes both less enjoyable and useful and //more// likely to fall apart. If you love having the relationship, but would be fine if it ended, you get more out of it and things tend to move much more smoothly.\n\nWhy is this? Some possibilities (not mutually exclusive):\n\n* You become conflict-averse.\n* You become fearful of //any// kind of change, which prevents the relationship from adapting.\n* Corollary of the above: you become convinced you know what you want the relationship should look like, and then when it looks slightly different, you cant be satisfied with it (see ExploringTheFuture).\n* You start interpreting things that are actually meaningless or even positive as danger signs, and thus become stressed and enter anxiety/conflict mode unnecessarily.\n* If the other person doesnt feel the same way, you cede all of the power and directional control to the other person (the person who needs a relationship least has the most control over it).\n\nI do think that an important proviso is that, for this to really hold true, you need to be in deep enough that you had to fight to get yourself to a point of accepting the potential ending. If youve only just met someone and you would be fine if your relationship ended, thats because you just dont really //care//; from this vantage point, committing enough that you would start to be hurt by an ending will improve the relationship. But then if you keep going far enough along the psychological journey that you care deeply, but are also healthy enough you could let it go again, thats where you find the greatest freedom and easy relating. This is re-entering the Garden from the back gate|ReenterByTheBackGate.\n\n\n!! References\n\nSeveral conversations with C.S.|PrivatePerson.},{title:StrongTowns,created:20200122030954676,modified:20200509032511223,tags:Publication Public,type:text/vnd.tiddlywiki,text:Blog and association promoting livable, walkable, human-scaled cities and good urban design. I follow it in my RSS feeds regularly; they have some great stuff. A common-sense DesignApproach in my opinion, but as the saying goes theres NoSuchThingAsCommonSense; it bucks the ConventionalWisdom in America, which seems to be that we can build things whereever we damn want and drive between them, and there are totally no downsides to that at all and the only important thing is maintaining that way of life.\n\nhttps://strongtowns.org},{title:StructuralTiddler,created:20200908220208124,es:confident,modified:20210617000827257,tags:Information Writing Public Idea,type:text/vnd.tiddlywiki,text:Structural tiddlers are those that link ideas together or index ideas on a particular topic. They help to turn things from clusters of loosely connected notes into larger ones, and to impose orders that focus on specific topics and produce specific conclusions on a mass of disconnected notes, applying a limited linear structure|LinearVsTiddly .\n\nIn TiddlyWiki, a structural tiddler can take several forms:\n\n* Tags are, essentially, structural tiddlers.\n* It can manually list out relevant ideas, like many \u003C\u003Ctag Index>>es do; WhoIAmWhatIThink (or, rather, each of its tabs) is a particularly good example.\n* It can be composed of one or more dynamic lists.\n* It can be composed of StretchText (backed either by explicit calls to relevant tiddlers or by a dynamic list), like MyUnusualMentalExperience.\n* It could be a WritingWorkbench, a tool developed within the wiki that would help to gather together the tiddlers that are going to be used for producing a work of linear writing. (This is a hypothetical tool at the time of this writing.)\n\nI have borrowed the term //structural// from this article|https://leananki.com/zettelkasten-method-smart-notes/.},{title:StructureAnxiety,created:20221129221553219,creator:soren,description:When a new user of a system is worried about not organizing things the right way, theyre experiencing //structure anxiety//.,es:likely,modified:20221201182141910,modifier:soren,tags:Idea PersonalDocumentation Information Systems SorenConcept Public,type:text/vnd.tiddlywiki,text:Structure anxiety occurs when, in the course of getting used to a new knowledge management system, people struggle to get started or even give up on the system entirely because theyre not sure where they should put information or how to organize it. Usually they are worried that theyll do it wrong and consequently never learn whether the system works for them, or theyll have to do a bunch of work to reorganize it.\n\nThis can happen whether the system effectively permits gradually increasing and altering structure or not -- i.e., LazyStructuring. The users perception of whether this is possible or easy is the important thing (see AppearancesOverReality).\n\nUsers who are less technical and less familiar with information systems are more likely to suffer structure anxiety, because they are less used to iteratively developing|IterativeProcess systems. People who do this frequently become confident in their ability to adapt as necessary, as well as learning to automatically recognize and avoid using systems that limit their ability to iterate.\n\n{{StructureAnxiety/p||PrivateChunk}}},{title:StructureOfScientificRevolutions1962,author:Kuhn,bibliography:LifetimeReading,caption:The Structure of Scientific Revolutions,created:20210703170128000,genre:Philosophy/Science,medium:book,modified:20210705214036122,priority:1,readstatus:unread,recommended-by:TBBOAT,tags:Source Public,type:text/vnd.tiddlywiki,year:1962},{title:Stub,color:#fff12e,created:20200116024803799,creator:soren,icon:$:/core/images/new-here-button,modified:20200530141202429,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:Stub tiddlers, like in Wikipedia or similar, are those that have been created with a few momentary thoughts, or even just a title, but need more expansion to be useful.\n\nThings dont have to be tagged with \u003C\u003Ctag Stub>> just because theyre short. We dont want to go OverEngineering things, because many tiddlers may be dead-ends. If they arent dead-ends, then well end up seeing them again and can improve on them if appropriate. Things should be tagged Stub if we believe the material is inadequate for even the present moment and the only limitation to expanding it is time.},{title:StudiesDontProveThings,created:20200529123634782,description:Scientific studies do not prove things, they only suggest that things are more or less likely.,es:confident,modified:20210809164144919,tags:Public Reasoning Language Science Favorites Idea,type:text/vnd.tiddlywiki,text:PetPeeve: someone says that a scientific study “proves” something. (I picked this one up, in these terms, from my college psychology professor M.O.|PrivatePerson.)\n\nThis isnt how science works, and it fails to ascribe even a slight amount of IntellectualHumility to the responsible scientists. It is, in fact, a symptom of scientism|ScienceVsScientism.\n\nIn fact, any given study is highly, //highly// unlikely to be the last word on a given subject (unless perhaps that subject was not very worth studying!). And chances are quite good that it is, in fact, completely wrong, or missing some important design components. Even if the study was done correctly, the conclusions could be wrong (see the parable of the flea that cannot hear anymore|FleaCannotHearAnymore).\n\nWhat do you say? The study //suggests// something. It //found// something. If you feel particularly confident, maybe it //shows// something, but even thats getting a bit ballsy. //Shows// might be more appropriate when used of a set of studies.\n\nProof, at any rate, is something else altogether.},{title:StudiesInPessimism,author:Schopenhauer,bibliography:LifetimeReading,caption:Studies in Pessimism,created:20210703170128000,genre:Philosophy,medium:book,modified:20210705214036131,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:StudyOfHistory1961,author:Toynbee,bibliography:LifetimeReading,caption:A Study of History,created:20210703170128000,genre:History,medium:book,modified:20210705214036144,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:1961,text:Length: !!!},{title:StupidFilter,created:20241113221900552,creator:soren,es:confident,modified:20241113222256058,modifier:soren,tags:Idea Definition Public,type:text/vnd.tiddlywiki,text:A stupid filter, in a search for outliers|https://www.benkuhn.net/outliers/, is a filter that does little or nothing to eliminate bad options, while also eliminating options that could have been outliers.\n\nFor instance, consider rejecting a potential partner because theyre 58\ and you were hoping for someone 59\ or taller. Even assuming you would actually even notice this preference in real life (SoritesParadox!), presumably you would give up one inch of height in order to get almost any other meaningful preference. But theres probably no correlation between height and most of those other preferences, so youre throwing out people who would be great in the service of a preference you barely care about.},{title:SturgeonsLaw,created:20200225034206319,creator:soren,description:90% of everything is crap.,es:confident,modified:20231118000826000,modifier:soren,tags:LawOfCynicism Expression Public Idea,type:text/vnd.tiddlywiki,text:Aphorism which states “90% of everything is crap.” Originally formulated as a weapon against people who said that much of sci-fi was crap (well, //everything// is crap, take that!), but applicable to almost anything. A form of EightyTwentyPrinciple.\n\nIn reality, 90% of everything is crap, 9% of everything is mediocre, and maybe 1% of everything is actually //good//. See also MediaRating.\n\nIn my opinion, there might be something to the observation that so much of sci-fi is crap, though -- its just not that theres more of it created. See CrapTolerance.\n\n!! References\n\n> I write one page of masterpiece to ninety-one pages of shit. I try to put the shit in the wastebasket.\n> ---MrErnestHemingway, \u003C\u003Crt 5452>>\n},{title:SubgroupInteractionPattern,created:20200519151400446,creator:soren,es:confident,modified:20211206161917367,modifier:soren,tags:PandemicMood InterpersonalRelations MeetingTheory Public Idea,type:text/vnd.tiddlywiki,text:As PatternsOfCommunication explains, online communication technologies have perfected communication in two patterns:\n\n* broadcast (one-to-many)\n* interpersonal conversation (one-to-one)\n\nTechnologies that work at least decently well for many-to-many communication are available, too. This is a tougher nut to crack, but were making progress, at least in localized aspects of the problem.\n\nHowever, there is a remaining pattern that doesnt fit into any of these categories and that seems to me to be entirely neglected: the subgroup interaction pattern (this is a terrible name -- if you can think of a better one, please). This is a many-to-many pattern, but where the overall //many// is split into small groups that change dynamically. Think about what happens at a party or conference or networking event: it breaks up naturally into small groups of people having different conversations, and you move among them so you can talk to particular people or when people in a different group are talking about something youre interested in.\n\nObviously, this isnt popular online because its tricky to even think about what kinds of technology and design might be needed to pull it off. The more dynamic, the harder it is; conference //sessions// can go OK online, but the mingling part hasnt been settled even halfway satisfactorily. Group video or voice chat with more than four or five people is still terrible, even when youre all trying to have the same conversation. Group text chat splits into \channels,\ which is a bit closer, but if you try to participate in more than two or three channels at a time or even just watch whats going on in them, your attention rides off into the sunset before you even get started. Yet if you focus on a single channel, youll never know whether theres something else you might want to be participating instead (you hear keywords or see people moving around in the background in person that let you know if you should be moving), plus conversations move more slowly over text so it can get boring to be doing only one at a time (see Why I Hate Texting|https://controlaltbackspace.org/efficiency/why-i-hate-texting/).\n\nAny means to enable natural interpersonal communication remotely -- a critical concern during the pandemic|PandemicMood -- is incomplete if it doesnt at least attempt to solve this problem.\n\n-----\n\nAirmeet|https://www.airmeet.com appears to be the first software that actually attempts to crack this problem, and is obviously a pandemic child; as of Jan 2021 it is still clearly in active, scrambling development but in a good-enough-to-be-very-competitive prototype. I havent actually attended an event that uses it, but from reviewing their literature, in addition to an ordinary Zoom-ish experience, it offers a pass-the-mic function while someones speaking, a \backstage\ area where the speakers can gather, converse, and test audio without being connected to the audience, and a \social lounge\ area where people can get randomly assigned to tables and even move between them. Its not clear how well you can see whats going on at other tables, but obviously this is a massive step forward compared to anything else (as discussed above).\n\nM.|PrivatePerson is going to be using it for some kind of OutSchool event, so well see what she thinks.},{title:SubliminalFear,created:20200506160843319,modified:20200506161138155,tags:Psychology PhilosophyOfLife Public Idea,type:text/vnd.tiddlywiki,text:Often we are afraid of things without realizing that we are.\n\n* In WhoMovedMyCheese (pp. 80-81), it is argued that most people are afraid of change, but most people claim they are not.\n* Similarly, TheOrderOfTheGoodDeath claims that those who think they are not afraid of death|FearOfDeath are really just compensating for being afraid. I dont feel like Im afraid of death, and I could totally believe this.},{title:Subtiddler,created:20210920160651222,creator:soren,modified:20251011193053187,modifier:soren,tags:Meta Public,type:text/vnd.tiddlywiki,text:A subtiddler is a tiddler which is tightly coupled to another, larger tiddler. Its not an idea of its own, its a part of some larger idea which benefits from being compartmentalized.\n\nSubtiddlers are identified by containing one or more slashes `/` in their names. The main tiddler or //supertiddler//s title comes prior to the slash, then the subtiddlers name. There can be multiple levels of hierarchy if needed, but this is generally rare.\n\nSubtiddlers of the current tiddler appear on a Subtiddlers tab|$:/tzk/refexplorer/Subtiddlers of the ReferenceExplorer.},{title:SubtleCrappification,created:20230307023319632,creator:soren,description:Our experience of the world is becoming subtly crappier as alternatives that do //most// of the work, but cheaper and easier, rise in popularity.,es:likely,modified:20240602163658150,modifier:soren,tags:Idea Sociology TheControlAltBackspace Public Shortcuts,type:text/vnd.tiddlywiki,text:The world is being subtly crappified by technology: large swaths of our everyday experience are getting very slightly worse, in a way that is rarely noticeable in isolation, but frustrating in aggregate.\n\nThe driving force here is that new technology often makes it possible to do 90% of the job at 10% of the cost and effort|EightyTwentyPrinciple. Getting the last 10% of the job done with the new technology, rather than the old way, proves impossible and/or unprofitable -- but unless you really need the last 10%, the new way always seems like a rational tradeoff, even for skeptics.\n\nThe problem is, because SoftwareIsEatingTheWorld, this has started happening to almost everything. Taken together, our everyday experience is getting steadily worse in many ways. While almost everything is still at an acceptable level of quality, outstanding levels of quality and Polish are becoming noticeably rare. And I think working with beautiful, polished, highly functional tools and processes that are very well-tuned to our use is important to our mental health; our ability to create and improve such tools is what led our species to be successful in the first place!\n\nExamples:\n\n* Cheap products made overseas at the lowest possible price: you save a bunch of money, and they work almost as well.\n* Researching purchases on the Internet: you save significant money and time over going to a store in person and consulting an expert, and usually get almost as good a result.\n* Software-defined tools that were previously hardware (e.g., timers, alarm clocks, tuners, flashlights, cameras, touch keyboards, volume controls, ebooks|WhyEbooksSuck): they still perform the essential functions and dont require a separate purchase or device, and are only a little less powerful and convenient to use.\n* Computers today have noticeably higher latency|https://danluu.com/keyboard-latency/ for tasks like displaying a letter on screen after typing it than, say, the Apple II, despite computers being orders of magnitude faster; we now put a bunch of layers of software-defined behavior in the middle because this makes things more flexible and cheaper, and the latency is still tolerable.\n\nThere are also cases in which the crappier way is actually not doing anywhere close to 90% of the work, but looks like it is|AppearancesOverReality; a good example is keeping up with your friends on SocialMedia rather than talking to or writing to them. This generally doesnt build relationships and create happiness, but it still looks like youre talking to your friends, so you can go for years without realizing that youre wasting your time and feeling lonely all the time. (N.B.: Im not entirely against social media. This kind of interaction does have a place in some peoples lives. Its treating it as a replacement for other interactions -- which is easy to do accidentally -- thats the problem.)\n\nA particular pattern is the replacement of elements that previously involved human interaction with automated systems; see ErosionOfTrivialSocialInteraction and PhoneAnxiety for more on the issues involved here.\n\nSometimes solutions which seem like they logically //should// be better are actually subtly crappier: see FriendsVsTripAdvisor.\n\nRelated: ShadowWork, in which consumers take over work that used to be done by other people for very small benefits.},{title:SubtleKnife,author:Philip Pullman,caption:The Subtle Knife,created:20200127020214879,creator:soren,format:paperback,isbn:9780375823466,medium:book,modified:20221020220309764,modifier:soren,owned:yes,rating:distinguished,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:HisDarkMaterials,year:1997,text:Second book of HisDarkMaterials. Preceded by GoldenCompass and followed by AmberSpyglass.\n\nSome people whine about MrWillParry “subordinating” MsLyraSilvertongue and ruining the strong-female-lead aspect of the series up to this point, but Ive never felt it problematic...their paths just lie together for some time.},{title:SubversiveBeautifulSavior,created:20200326025334653,es:personal,modified:20210509010345522,tags:SorenConcept PhilosophyOfLife Music Religion Public Idea,type:text/vnd.tiddlywiki,text:At the end of my third StOlafChristmasFestival, a time always quite emotional for me and for most of TheStOlafChoir, I realized that this piece|https://www.jwpepper.com/Beautiful-Savior/45997.item, the way we sing it|https://www.youtube.com/watch?vUYrfcNG2vsM, is //subversive//. The Savior often doesnt seem very beautiful! But we are bringing our conviction that, maybe, things aren’t in the grand scheme of things quite so bad as they seem right now. That there are more important things than this moment, and that, as if to prove it, we can make even this moment beautiful.\n\nEspecially noticeable when the choir sings it at times of deep sadness: for instance, all the ChoirsOfStOlaf often gather under the memorial windchimes when something bad happens to the campus or somebody associated with it, in prayer. And certainly everyone in TheStOlafChoir or the StOlafChristmasFestival at the time of their parting from that institution. Its a piece of grief. And yet, as above.\n\nCf. RelentlessOptimism.\n\nI presented this idea of what the song means to me during my QuarantineRecital before singing Beautiful Savior.},{title:SuccessMomentum,created:20240606140906707,creator:soren,description:Successes almost automatically create more successes by increasing your motivation.,es:confident,modified:20240606141800940,modifier:soren,tags:Idea Psychology Design Process Public,type:text/vnd.tiddlywiki,text:Success momentum, as defined by MrBjFogg, is the observation that succeeding at something builds motivation (primarily by reducing demotivators like fear of failure), thus making further successes more likely. The //magnitude// of the successes matters much less here than the //number// of them, so doing something tiny consistently|PowerOfKonsistency is the best way to get started.},{title:SuitcaseParadox,created:20240215171825683,creator:soren,description:Whatever size suitcase you decide to take on a trip, it tends to end up full.,es:confident,modified:20240306200803853,modifier:soren,tags:Psychology Idea SorenConcept Travel Public,type:text/vnd.tiddlywiki,text:The suitcase paradox is the observation that, no matter how large a suitcase you have, you tend to fill it up almost to the top – and also have more or less everything you need.\n\nIts closely related to ParkinsonsLaw and the JevonsParadox; all are part of the same general pattern of SlackGobbling, where people optimize for some level of output performance, and dont much care how they get there. When reaching that level of performance is hard, they try hard to be efficient; when its not, they dont, because why waste time and energy being super-efficient when theres so much Slack? As a result, slack automatically disappears unless special effort is taken to maintain it -- usually by imposing an artificial limitation (e.g., working only 40 hours per week, deciding your proposal wont exceed 2 pages, refusing to check a bag)\n\nIn the case of the suitcase paradox, a key insight is that a lot of items that would be “kinda nice to have” are extremely space-inefficient. Many other items can be packed carefully (using very little space), or lazily (using lots of space). Just tossing in a couple of large nice-to-have items, bringing ten days of clothes instead of five days of clothes and some laundry detergent, putting your heaviest clothes in your suitcase and your lightest ones on your body instead of vice versa, and just tossing those clothes in or loosely folding them rather than carefully rolling them and stuffing your shoes or using bundles and compression straps, can take you from needing a small duffle bag to needing a full-sized 50lb roller. Most people can easily squish down if required, since those changes make almost no difference to your trip, but when you have a large suitcase open in front of you begging to be filled, its almost impossible to resist the temptation.\n\nThe convenient thing for travelers is that it works in reverse: if you start requiring yourself to pack into smaller suitcases|TravelingLightAsSpiritualDiscipline, as long as you do it gradually and intelligently, youll automatically reach a point where you carry way less stuff without apparently giving up anything! This is a generative restriction|GenerativeRestriction.},{title:SummaTheologica,author:Aquinas,bibliography:LifetimeReading,caption:Summa Theologica,created:20210703170128000,genre:Religion/Philosophy,medium:book,modified:20210705214036152,priority:3,readstatus:unread,recommended-by:HTRAB,tags:Source Public,type:text/vnd.tiddlywiki,year:},{title:Sunflower1969,author:Simon Wiesenthal, et al.,caption:The Sunflower: On the Possibilities and Limits of Forgiveness,completed:20211013,created:20211104225554976,creator:soren,medium:book,modified:20211104233211009,modifier:soren,rating:good,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1969,text:Classic Holocaust book by MrSimonWiesenthal in two parts: a story by the author and a collection of responses by others. The reader is invited to ponder an amazing story and an associated ethical and religious problem of almost infinite depth.\n\nI came into possession of the book from the personal effects of my late friend S.S.|PrivatePerson and read it in his honor; its exactly the kind of discussion Seb loved.\n\n\n!! Story\n\nWhen Wiesenthal was being held in a Nazi labor camp, he was one day brought to work at the grounds of a hospital (actually his high school at which he was persecuted by anti-Semites during his time there, turned into a makeshift hospital), and someone dragged him off to talk to a Nazi soldier who was dying. The soldier told Wiesenthal his life story and begged his forgiveness|Forgiveness for wartime atrocities (in the incident in which he participated and tells Wiesenthal about, they packed a bunch of Jews in a building, put gasoline and explosives in through the windows, lit it on fire, and machine-gunned people as they jumped and tried to escape).\n\nWiesenthal listened (with difficulty), but when asked to offer his forgiveness, he sat silently for a moment, then turned around and walked out. But he was bothered by the situation and unsure of his response, and as early as that evening he started talking to others about it.\n\nAfter the war, he went to visit the soldiers mother in Stuttgart; he knew the address because the soldier sent him a small collection of personal effects before he died. The house was bombed out, but she was still living in the basement. Once he arrived, he realized he couldnt possibly share anything about her son, so he let her keep her memories of her son as a “good boy” -- perhaps the real act of compassion.\n\n\n!! Responses\n\nIn the second part, a large number of religious leaders, intellectuals, Holocaust survivors, and others explain their interpretations and (if they dare; many dont) what they think they would have done. (In the second edition, which I read, there are fifty-three total.) Of course it is in the nature of this exercise that there is no single correct answer; responses accordingly range from “forgiveness would have been morally wrong” to “you could have done better,” and many grades in between and to the side.\n\nA few general observations, some of which the respondents mention:\n\n* Christians|Christianity tend to say forgiveness was the correct response (though many point out actually doing so in the moment would be beyond most people). Jews|Judaism tend to say forgiveness was unwarranted, impossible, or wrong for various reasons. This has proven true across the original respondents as well as most people and classes who read it later.\n* Its not obvious what forgiveness would have meant, or even if Wiesenthal could have offered anything that meaningfully constituted forgiveness. One person arguably cannot forgive the murder of someone else; forgiveness as generally understood requires the person who was wronged to participate, and by definition they cannot participate in this case (in Jewish tradition, murder is for exactly this reason traditionally considered an unforgivable sin). Nor, on a broader and more symbolic level, can one Jew forgive on behalf of the whole Jewish people. Indeed, the fact that the Nazi soldier attempted to ask Wiesenthals forgiveness on behalf of his people seems almost farcical, and definitely betrays a remaining perception of Jews as a statistic in the way of national success.\n* Most people seem to agree, as do I, that Wiesenthal was correct (and courageous, not that he had as much agency in the situation as most people would) to sit and listen and //be human// towards the Nazi. I believe that no matter what crime someone has committed, theyre still human, and they still deserve some measure of respect for that simple fact.\n* Similarly, most people seem to agree that the mother had suffered enough and that Wiesenthal did right in not telling her what happened. This is the most powerful example I know of lying by omission being highly ethical, or even somewhat bad //not// to commit.\n\n\n!! What do I think?\n\nOne can hardly set aside a book like this without making up ones own mind, even if its complicated or imperfect, or one would surely be missing the point.\n\nFirst of all, let me emphasize that Wiesenthal already did more than any human could be expected to do. No matter what the perfectly “correct” response would have been, he acted excellently and has no need to feel ashamed.\n\nThen: I agree with the “Jewish” side of the debate that it is impossible for the prisoner in this scenario to offer true human-scale forgiveness, much less reconciliation|ForgivenessVsReconciliation, to the Nazi -- because one simply cannot forgive someone for wrongs theyve done to other people, under sensible definitions of forgiveness. But I think there remains an opportunity to testify to Gods forgiveness of the Nazi rather than just walking out, and if I were in this situation and had infinite courage and spirit, I would try to do that.\n\nWiesenthal was likely not in that space because (according to what I read in this book) Judaism doesnt have the same understanding of evil, Gods love|LentmasfestForgivenessDebacle, and forgiveness as Christianity, nor does it have the same tradition of evangelism. Which I guess leaves me in the somewhat awkward position -- as someone who thinks moral relativism is ridiculous in the abstract -- of saying I think he acted correctly as he did even though I would wish to do something different.},{title:SunkCost,created:20200325233102655,creator:soren,es:confident,modified:20211107175322170,modifier:soren,tags:Reasoning Economics Public Idea,type:text/vnd.tiddlywiki,text:Economic term for a CognitiveBias in which we make decisions based purely on previous decisions that we now cannot change. One popular experiment asked people to consider having purchased a movie ticket for $20 and now not wanting to go. Most people end up saying theyll go, even though they know they wont enjoy the movie more than having the time for something else now. An equivalent formulation in terms of effects says that you havent yet bought a ticket, and as you are considering whether to go to the theater, you realize that you have lost a twenty-dollar bill. The effect is the same, but now of course everyone says they wont go because having lost twenty dollars has no relationship to the decision.\n\nSometimes its tricky to determine whether something is truly a sunk-cost fallacy. For instance, heres one that came up at TheFederatedInsurance a while ago: we had previously purchased support for a product for some amount of money, and were now purchasing additional licenses with the choice to include support. We werent sure if we wanted support, but if we didnt include support now, wed effectively lose the ability to get support on the previous licenses. Thus, we probably wanted to buy the support now. This //isnt// a fallacy, because the decision not to purchase support now causes us to actively lose benefits that would otherwise be ongoing. In a true fallacy, the benefits would stop in either case.\n\nCf. OpportunityCost.},{title:Sunsama,created:20240602154630251,creator:soren,modified:20240602154632827,modifier:soren,tags:Idea Software Public,type:text/vnd.tiddlywiki},{title:SunsetBoulevard,created:20240402014140536,creator:soren,modified:20240402014150126,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki,text:Famous location in LosAngeles.},{title:SuperMemo,created:20200326001026845,modified:20200715020019411,tags:Software Memory Public Idea,type:text/vnd.tiddlywiki,text:Computer application similar to Anki for implementing SpacedRepetition. Poor design|Design though; I counted over 100 items accessible through the right-click menu in one place during the short period I tried it out to see what the fuss was about! The attitude among those who have tried it and given up is neatly summarized in this contribution to the ~SuperMemo wiki:\n\n> The past two weeks of trying to use your software have been severely, deeply, gut-wrenchingly frustrating to me. I have never been so let down by a piece of software in my entire life. To say I am dissatisfied would be amongst the greatest understatements of all time. (RT 11223)\n\n\nThe brainchild of MrPiotrWozniak.},{title:SupernaturalSmellVillain,created:20200811214313341,es:possible,modified:20210515032542997,tags:FictionTheory Metaphor Public Idea,type:text/vnd.tiddlywiki,text:Villains often seem to have a supernatural sense of smell. For instance, in the MatildaMovie, MsTrunchbull is seen searching for MsMatildaWormwood and MsHoney and sniffing mightily.\n\nIm not sure what this is about. Is the greater primacy of the sense of smell somehow associated with self-interest or rottenness?},{title:SurelyYoureJoking1985,author:Richard P. Feynman,caption:Surely Youre Joking, Mr. Feynman!,completed:20221129,created:20221201200433871,creator:soren,medium:book,modified:20221201202836110,modifier:soren,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,url:,year:1985,text:Silly memoirs of physicist MrRichardFeynman.\n\nThis book doesnt have much to say about physics, and is, as one of my coworkers said, not actionable at all (which I guess was what he was expecting when he read it some years ago). But it goes very fast and is quite entertaining.\n\nFrom the impression I get from this book, Feynman was the kind of person I would be if I was (a) much smarter and (b) much more audacious.\u003C\u003Cfnote \Oh, and (c) much more allosexual, but I digress.\>> I very much admire his irreverent and mischievous spirit. Although he is also a lot more “pointy” than I am; aside from his occasional experiments with drawing, he seems to have been very focused on science and never did much else.},{title:SurfaceProblem,created:20200702220303226,creator:soren,es:likely,modified:20240510040329279,modifier:soren,tags:Design Creativity Psychology LifeDirection Public Idea,type:text/vnd.tiddlywiki,text:A lot of failures to address problems are, I propose, the result of not looking at the problem the right way, or more specifically, trying too hard to solve one problem when solving a related problem would be easier and just as efficacious. A little bit of terminology:\n\n; Surface problem\n: An easily spotted and identified issue one wants to solve.\n; Target problem|TargetProblem\n: A problem which is more addressable than the surface problem, a solution to which will also resolve or improve the surface problem.\n\nOwing to our scientific culture, its very easy to fall into the trap of assuming that the surface problem, once identified, is what we should go after. Because people are people, we often have to come at the problem from the side if we want results, and its very much worth thinking about what angles we should take, trying them, and rinsing and repeating if they dont work. We should not just try bashing away at the surface problem long after its become clear that its immovable. And in more than a few cases, trying to fix the surface problem without due consideration can actually make things //worse//, because this stuff can be counterintuitive|CounterintuitiveCorrelation.\n\n(Epistemic status of examples: possible to unlikely! Theyre just examples and Ive only spent a few minutes on these.)\n\n* Voice\n** Surface problem: Im singing a quiet phrase beginning with a loud jerk, likely because of some or all of: my vocal cords are tensed up, my windpipe is closed off by my soft palate, my airflow is closed off and starts suddenly.\n** Target problem: I am not breathing in the vowel.\n\n* Diet\n** Surface problem: Im overweight because Im consuming more calories than Im expending (or, the wrong balance of nutrients, or whatever explanation is in vogue).\n** Target problem: My relationship with food is wrong and unhealthy.\n\n* Politics\n** Surface problem: Americans are allowed to purchase guns with very little oversight even when they are not equipped to own and use them responsibly.\n** Target problem: Americans treat owning a gun as a fundamental right rather than as a privilege.\n\n* Mental health\n** Surface problem: My serotonin levels are wrong, so I feel depressed all the time.\n** Target problem: My life is unsatisfying and lacking in social interaction and meaningful activities. (N.B. This is //a// target problem, not //the// target problem. There are many reasons for depression, and this one will not help all sufferers by any means!)\n\n* Personal finance\n** Surface problem: Although I make plenty of money, I cant keep my finances under control and am still living paycheck to paycheck.\n** Target problem: What I spend money on is disconnected from what actually makes me happy and improves my life|EfficientLife.\n\n* Motivation and goal-seeking\n** Surface problem: I cant keep doing something over a long period of time, so I need to just keep doing it.\n** Target problem: I dont have sufficient external and internal reasons to be motivated to succeed.\n\nCf. SevenfoldWhy. Source: \u003C\u003Crt 8962>>.},{title:SurpriseMe,created:20200324025607553,creator:soren,es:possible,modified:20201207031219758,modifier:soren,tags:PhilosophyOfLife Expression Public Idea,type:text/vnd.tiddlywiki,text:Common expression and sentiment. I see several distinct types of wanting to be surprised:\n\n* Dont want to deal with knowing whats coming (see FaceUpOrDown).\n* Dont think you can do a good job at choosing (see also CoinFlipClarity).\n* Dont even know how you would begin to choose.\n* Just want a little bit of serendipity and enjoy the feeling of finding something you werent expecting.\n\nPeople definitely do need randomness for any number of reasons. MrNassimNicholasTaleb discusses how the modern world has robbed us of many opportunities for randomness by making so many aspects of our lives comfortable and predictable -- which has its benefits, but can also put us out of our natural element (see BeneficialDiscomfort).\n\nThere are some things we plainly dont want to be surprised about, however, and some we may not be sure about. Cf. DeterministicToolsRandomExperiences.\n\n{{SurpriseMe/p||PrivateChunk}}},{title:SurviveVsThrive,created:20241021123837369,creator:soren,description:Maximizing survival sabotages our ability to thrive; how can we best balance scarcity and abundance, safety and full living?,es:likely,modified:20251010030659303,modifier:soren,tags:Idea PhilosophyOfLife Reasoning RelativeAdviceSpectrum Risk Public,type:text/vnd.tiddlywiki,text:There is often a conflict between two goals or mindsets: survive and thrive. At first, that these are in conflict might seem surprising -- after all, it is necessary to survive in order to thrive. But oftentimes an action that would most support thriving somewhat reduces ones ability to survive, and vice versa. For instance, taking a long-distance recreational road trip is fairly dangerous as far as everyday modern life goes; it reduces your chance of surviving. But if you like traveling, it probably helps you thrive.\n\nA surprising number of conflicts and questions can be explained in terms of this dichotomy. For example, the debacle surrounding whether C.S.|PrivatePerson and I could be friends while both attending our church was a survive-thrive conflict: church leadership was extremely concerned with both themselves and C.S.|PrivatePerson surviving (not experiencing some kind of catastrophe), while we were concerned with continuing a friendship that was important to us. MrScottAlexander suggests|https://slatestarcodex.com/2013/03/04/a-thrivesurvive-theory-of-the-political-spectrum/ that the right-left political spectrum is largely a set of values arranged on a survive-thrive spectrum. A retiree deciding how many shares of stock to sell to fund their lifestyle this year is balancing the risk of running out of money before they die against having more freedom now.\u003C\u003Cfnote \In keeping with my claims in the rest of this tiddler, most people underspend|https://www.diewithzerobook.com/welcome. Of course you dont want to die with literal $0 in the bank, since youre unlikely to time that perfectly, but many people end up with more than they started with after a 30-year retirement, and no clear plans about what they want done with it after they die!\>>\n\nOne can fairly accurately identify surviving with a scarcity mindset and thriving with an AbundanceMindset. The former involves defending what youve already got as hard as possible, while the latter involves letting go of the need for certainty, trusting that youll be able to get what you need when you need it, and valuing the opportunities this will undoubtedly bring over the additional comfort/certainty you could get with a scarcity mindset.\n\nScarcity mindsets are not intrinsically bad -- they are adaptive in contexts where not surviving is both likely and disastrous. The challenge is instead to fluidly switch between scarcity and abundance mindsets as appropriate to the situation, which is hard! But most people routinely overweight survival. This is likely both because thriving weighs less into natural selection than surviving, and because, in most contexts, there is far less danger both //of// not surviving and //in// not surviving than there used to be (that is, failure is both less likely and more often recoverable), and weve never gotten around to updating our thinking. \n\nFor instance, a lot of people are afraid of social rejection by strangers. They might live in a city with three million other people they could meet, and have a one in ten thousand chance of even ever seeing the first person again, and still they treat it like it would be a disaster. But the survive mindset here is not at all conducive to actually finding the people you connect best with|AmazinglyAwesomeFriend! Dare to thrive instead.\n\nAnother way to put it is, thriving almost always involves accepting some risk of not surviving.\u003C\u003Cfnote \\u003Cp>Note that this relationship is asymmetric. Putting a sufficiently heavy focus on thriving involves taking a small risk of not surviving. But putting a sufficiently heavy focus on surviving involves a //certainty// of passing up opportunities to thrive, by categorically excluding some risks that are necessary for good outcomes.\u003C/p>\u003Cp>This relationship occurs because thriving requires surviving, so a 100% focus on thriving still involves considering the chances of surviving. But surviving does not require thriving, so a 100% focus on surviving will summarily exclude all opportunities to thrive if that maximizes its chances. (Presumably the only reason evolution has not eliminated thriving entirely is that thriving improves ones reproductive success if it doesnt prevent surviving.) This is surely a cause of bureaucratic psychosis|BureaucraticPsychosis, such as that involved in the church-leadership example above.\u003C/p>\>> If those risks are sufficiently small, we should take them, because not just the best-case scenario but also the average scenario will be far better with an abundance mindset.\u003C\u003Cfnote \An additional complication is that being narrowly focused on surviving now can actually reduce your long-term odds of surviving by preventing thriving. For instance, someone might avoid conflict with their partner out of fear of upsetting them and causing a breakup, but actually frequent conflict is positively correlated with relationship success -- bringing problems out in the open early allows everything to be kept in balance with the relationship thriving. If it stops thriving, it probably wont survive.\>> \n\nSometimes people think about the value of their life, health, relationship, etc., as effectively infinity. But those things are going to come to an end sometime no matter what, so they necessarily\u003C\u003Cfnote \For the contrarians: I suppose that if you assume that the total value of being alive for an arbitrarily small amount of time is infinite, you could soundly claim the total value of your whole life was infinite as well. But this would require being alive for a period of time too small to perceive to have infinite value. That means living for this period would be more valuable than //anything// of finite value, which leads to absurd conclusions. For example, if you could pay money (a measure of finite value) to live longer, it would be rational to spend all of your money beyond bare survival needs on increasing your lifespan by an amount that you cant perceive. So I think its impossible to defend this position.\>> have finite value.\u003C\u003Cfnote \A useful thought experiment if you are tempted to say any life event (or absence thereof) can have infinite value: how much money would you accept to have some BAD THINGs happen to you? For purposes of the thought experiment, ignore any moral issues caused by your involvement (this isnt the trolley problem; the point is to estimate how unpleasant you think the things would be, not think about whether this is a sacred value|TabooTradeoff and therefore morally impermissible to trade money for about). BAD THINGs might include, for example, getting mugged, having your average lifespan silently decreased by a year, having a 1% chance of dying instantly and painlessly, being sexually assaulted, etc. If you set the morals aside, you can almost certainly find //some// amount of money you would be willing to take, even if it is very, very high: ergo, the value of avoiding it is not infinite. E.g., watching a good friend die young would be awful, but if I got $5 billion in exchange, I could spend the rest of my life giving that money to causes they cared about and saving thousands of other lives (by a very conservative estimate). Surely that would be worth it! In reality, the amount would be much less; if you think of an amount youd take, you should then try to push it down to find around where youd consider it an even trade. (Again, none of this bears on the question of whether I would //choose// that if given the choice. For what its worth, I dont think I could push the button if presented with it, even if convinced of its moral rightness by some line of reasoning, and Im also not sure Id want to live in a society that thought doing so was OK.)\>> If you treat them as having such high value that you arent willing to take the risk of them ending a bit sooner, you might find yourself at the end realizing that you never got around to thriving at all -- enjoying your life, helping others, creating something wonderful, deepening that relationship. What a waste.\n\nIn fact, I dont think surviving should be a terminal value|SevenfoldWhy at all. Id like to continue surviving insofar as I can thrive for longer by doing so. But thats the only benefit in surviving: more opportunity to thrive. (In the extreme case, if by surviving all I achieve is spending more time brain-dead hooked up to a life-support machine, or being in extreme pain unable to do anything at all, I value surviving at zero. I wouldnt trade any amount of thriving for more time groggy and in pain in the ICU at the end of my life.) So when considering how much you should activate your survive mindset, ask, how would surviving here help me thrive? If the answer is “not much”, do your best to ditch those concerns.\n\n(Disclaimer: relative advice|RelativeAdvice. Some people are short on survival drive and should take fewer extreme risks.)\n\n!! References\n\nTriple Tragedy and Thankful Theory|https://www.astralcodexten.com/p/triple-tragedy-and-thankful-theory: an odd AstralCodexTen guest post that got me thinking about this.\n\n{{SurviveVsThrive/p||PrivateChunk}}},{title:SuspensionOfDisbelief,created:20200323023940668,es:confident,modified:20201204041548090,tags:Imagination FictionTheory Definition Public Idea,type:text/vnd.tiddlywiki,text:Process by which audience members become immersed in a fictional world. Relatively easy to fall into for even remotely imaginative people, but if the story is bad and unbelievable, the lack of suspension can spoil everything.\n\nIts often said that fiction has to be believable while real life doesnt...while its easy to get an audience to accept fantastical elements, if it doesnt accord with their understanding and experience of life on a deep level, it will be unconvincing. (Cf. FictionalFalsehoods.)},{title:SustainableDataCenters20200520,at:202005201530,caption:Environmentally Sustainable Data Centers,created:20200518214117316,medium:video,modified:20210522015801986,presenter:MrBrianJanous,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/fe07763b-e6d0-495a-a05c-8f52b84946e0,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\n* Brian is on the team responsible for data center planning (90% of MSs energy consumption now).\n* Key activities:\n** Access to resources\n** Cost of resources\n** Sustainability of growth (energy, water, waste, deforestation/ecosystem)\n\n* Goal: Data centers have a “net positive impact” on the planet\n** 2030: Net negative carbon impact with respect to:\n*** 100% renewable energy\n*** Datacenter embodied carbon\n*** Manufacturing of servers\n** 2050: Pay back entire carbon debt from the founding of MS\n\n* How do they define/obtain “renewable energy”?\n** Contract with companies building systems, claim energy produced via credits\n** Not buying credits from existing projects -- that doesnt help anyone!\n** Prefer the credit approach compared to coming off the grid entirely because:\n*** Network effects available, e.g., can balance consumption based on area energy usage.\n*** As a developer on this cloud, youd have less impact by reducing your apps energy consumption.\n\n* See DataCenterSustainability for more thoughts on the above two points.\n\n* Can customers see the carbon cost of MS services?\n** Yes, theres a Carbon Cloud Calculator available.\n** How does moving from an on-prem system to the cloud help?\n** Expanding to look at the full supply chain, currently just energy consumption\n\nSee also SustainableSoftwareEngineering20200520 for sustainability stuff on the individual level.},{title:SustainableSoftwareEngineering20200520,at:202005201415,caption:The 8 Principles of Sustainable Software Engineering,created:20200518213959438,medium:video,modified:20210522015801999,presenter:MrChrisAdams MrAsimHussain,tags:MicrosoftBuild2020 Source Public,type:text/vnd.tiddlywiki,url:https://mybuild.microsoft.com/sessions/5269e099-511b-4a23-8cb0-9923db7659b4,text:{{||$:/sib/Templates/Topical/Build2020SessionDetails}}\n\nA large part of the talk was about the PrinciplesOfSustainableSoftwareEngineering, q.v. The SustainableWebManifesto was also brought up.\n\n* Books:\n** Tim Frick - DesigningForSustainability\n** something by the founder of Whole Grain Digital\n* Faster, more accessible websites are usually greener -- use by older devices, reduced energy (esp with respect to networking). Win-win situation!\n* Systems are available that can analyze the carbon footprint of a website -- Green Web Foundation|https://www.thegreenwebfoundation.org/green-web-feed/\n** All I see here is a thing that says “congratulations, your website is hosted green!” if the hosting provider has made some kind of environmental commitment. Greenwashing at its finest. Maybe Im missing something, because the presenters seemed way too informed on sustainability issues to push something like this.\n\nSimilar talk: SustainableDataCenters20200520, for detail on what M.|PrivatePerson is doing on the data center level.},{title:SustainableWebManifesto,caption:The Sustainable Web Manifesto,created:20200706221726206,medium:website,modified:20200808145443651,tags:Source Environmentalism Code Design Public,type:text/vnd.tiddlywiki,url:https://www.sustainablewebmanifesto.com/,text:* If the internet were a country, it would be the sixth-largest polluter!\n* Values: Clean -- Efficient -- Open -- Honest -- Regenerative -- Resilient\n** Seems like good values, but extremely short on content. Has like a one-sentence description of each and leaves it at that.\n** Also, what in the world do openness and honesty have to do with sustainable design? Theyre good things, but a manifesto shouldnt target things unrelated to its //name//.\n* Related: OpenSourceSoftware, RampantNotifications, AntiFragility, AddictiveDesign.\n\n{{!!url}}},{title:SwanAndBowerEmporium,created:20240227032254137,creator:soren,gis-lat:44.50673580437108,gis-long:-92.90555856531866,gis-zoom:19,modified:20240227032313475,modifier:soren,tags:Place Public,type:text/vnd.tiddlywiki},{title:SwarmingMethodology,created:20200403030335230,creator:soren,modified:20200403030457983,modifier:soren,tags:AgilePhilosophy Process Public Idea,type:text/vnd.tiddlywiki,text:LeanMethodology tool in which, when a problem is discovered, the entire team or a large number of people immediately stop work and switch to solving the problem. Not only does this rapidly bring expertise to the point where its most effective at that moment and address the problem, it serves to spread knowledge about problems and solutions across the body of people working on it.},{title:SwearingFlags,created:20221002134117796,creator:soren,description:I often appreciate that people can freely say offensive things, even if I disagree with them.,es:confident,modified:20221217153253641,modifier:soren,tags:Idea Politics Public,type:text/vnd.tiddlywiki,text:I have to admit to kind of enjoying these flags when I pass by them:\n\nimg width300 fuck-biden.png\n\nTheyre not exactly a shining example of intelligent political discourse, and I certainly dont agree with the message. But I am happy to live in a place where you can put a FUCK BIDEN AND FUCK YOU sign in your front yard and both the government and other people -- even ardent Biden supporters -- will be pretty much fine with it. Its easy to take that for granted|FreeSpeech; its actually pretty cool, and a lot more unusual than it should be.\n\nAt least in some people who put these up, I think theres a certain playful spirit that I appreciate, too. Of course, you cant tell from seeing the flag; presumably plenty of people who display them just hate anyone who isnt conservative with an irrational passion.},{title:Sweden,created:20240402014109310,creator:soren,modified:20240402014116862,modifier:soren,tags:Public Place,type:text/vnd.tiddlywiki},{title:SylvieAndBruno,author:Lewis Carroll,caption:Sylvie and Bruno,completed:202211161200,created:20200226003327080,creator:soren,due:202110241200,ivl:60,medium:book,modified:20221117135042165,modifier:soren,owned:no,rating:average,readstatus:read,tags:Source Public,type:text/vnd.tiddlywiki,universe:SylvieAndBruno,year:1889},{title:SymbolicRepresentationOfTheThing,created:20210307151752993,creator:soren,description:Capitalism often optimizes for peoples interpretation of the symbols provided by a good or service rather than the actual value of that good or service.,es:likely,modified:20211216032458052,modifier:soren,tags:PhilosophyOfLife Reasoning Code Public Business Idea,type:text/vnd.tiddlywiki,text:When trying to sell something or convince someone to use something, appearances matter more than reality|AppearancesOverReality. What is optimized for is often the symbolic representation of the thing being sold, rather than the thing itself.\n\nIn ThingAndSymbolicRepresentation2015, MrZviMowshowitz discusses an experience he had working with a medical startup called ~MetaMed that tried to provide personalized health advice and research on unusual, treatment-resistant health problems. And essentially, people thought it stank because their reports werent formatted nicely enough -- that is, because ~MetaMed had provided the thing (the information the customer was buying) without a good symbolic representation of the thing (pretty reports that look like they knew what they were talking about).\n\nThings are very similar in software: its well-known that if you provide a perfect UI mockup, people will think the software is done, while if you just spent 5 years on a ground-breaking backend that will revolutionalize the field, but the interface is still a little rough around the edges and needs a couple of weeks of cleanup, people will think youre a terrible programmer because you spent 5 years on it and your interface is still bad. It seems to take actually being a programmer to learn to see through that top layer of indirection|IndirectionMindset.\n\nAnd the same problem applies to both: what people want forces a redirection of resources from the part that actually matters (the data in the reports) to the part that makes people happy (the formatting). In the extreme capitalism-motivated case, you can sell something to someone that is completely devoid of actual useful content, and theyll be happy. (Well, maybe theyll be peeved eventually, but thats after theyve given you all their money. See IICS.)\n\nAnd yet again, this doesnt have to be bad if its done right; from the article|ThingAndSymbolicRepresentation2015:\n\n> This last week, my wife and I went on vacation to a place that charges quite a bit of money for things that I see no value in, but which she enjoys greatly, and I believe that what she enjoys is that it symbolically says “Vacation” to her. I see the actual thing, and so I do not get it. That is fine. I am not the target|ThingsArentGoodForEveryone (a powerful mantra!). Sometimes, what one needs are not expensive wines but expensive wine bottles. Other times one wants the wisdom, or lack of wisdom, to know the difference.\n\nSometimes actually understanding whats going on isnt what you want. You might feel smug about it, but it might not make you happy (although cf. TypesOfHappiness). The meta-wisdom above the last sentence in Zvis paragraph is understanding when you need to be able to see through and when you dont. Certainly, if youre buying health reports or software, one would hope you would be able to see through -- youre spending a lot of money on something with an objective outcome! When the outcome is subjective (vacation), then who cares? Just let yourself believe|BeliefAsInstrument.\n\n\n!! References\n\n> The job the staff are doing is not necessarily what the customer pays for. The customer pays, as he sees it, for good service; the employee is paid, as he sees it, for the boulot – meaning, as a rule, an imitation of good service. The result is that, though hotels are miracles of punctuality, they are worse than the worst private houses in the things that matter.\n> ---qtd. in https://astralcodexten.substack.com/p/your-book-review-down-and-out-in},{title:Synapse25Review,created:20240420172640864,creator:soren,es:confident,modified:20240629015103681,modifier:soren,tags:Idea Travel Public,type:text/vnd.tiddlywiki,text:(Review posted on TheTomBihns website. See also MagicBackpack.)\n\nI work 100% remote at irregular hours and have a bit of a nomadic spirit, so I frequently decamp to random places to work (whether thats the coffee shop down the street or a beach in rural Vermont). While I do travel quite a bit, often on pretty short notice, I also own a home and spend about 10 months out of the year there. So I wanted a bag that was small enough to carry around town every day, but large enough to use for any (lightly packed) trip, without having to repack everything all the time. While nothing is perfect, I think its fair to say the Synapse 25 has delivered beyond my wildest expectations. Sometimes when I get bored, I go read other reviews raving about this bag!\n\nFirst of all, its insane that a 25L bag can fit this much stuff without feeling overstuffed or making it hard to find things. With a bit of practice and a willingness to do laundry a couple times, I can pack for a 3-week trip in this bag – and it still fits under my seat on a train or plane in a pinch. Im pretty sure TB has figured out how to make a Bag of Holding and just isnt telling us.\n\nI also love that the dividers between pockets are flexible; if you want to fill the main pocket really full and keep the outer pockets pretty empty, or vice versa, it just works. And lets not forget that I frequently go places with the pockets unzipped by mistake, yet not a single thing has ever fallen out of the bag that I can remember, even from the pockets with vertical zippers! Once I got it all the way from my hotel to the overhead bin of an airplane before I noticed (it was an early morning, OK?). Everything was still there.\n\nThe capacity of the front pockets means I can easily keep almost the same loadout when Im traveling and when Im just wandering around town – all the stuff thats the same fits in the front and bottom pockets. When I need to go somewhere, I just add clothes, documents, and extra toiletries in the main pocket. Because most everything is already there, after I decide what I need to bring, I can be packed in 15 minutes.\n\nThe center water bottle pocket is genius. I never used to carry a water bottle because it would constantly fall out of the side pocket or tweak my shoulders because one side of the bag was 1kg heavier, but its sure nice to have one with you. Why does nobody else make bags with a pocket like this?\n\nIve only had the bag for a few months so far, but its already traveled thousands of miles and been used almost every day, and it looks as good as new. I havent found anything that seems flimsy or likely to get damaged, and from my experience with similar bags I expect it to last for several decades.\n\nPeople often complain about TB bags looking dull. I dont think the Synapse 25 is exactly stylish, but I dont find it ugly either. I have the red, and I keep a few colorful pins on the front to make it a little less bland.\n\nComfort is...fine? Its not a standout in either direction. I pay attention to my pack weight and Ive never wanted to carry more than 10kg or so, so if youre in decent shape the design has to be pretty bad for it to get uncomfortable. I do use the hip straps when I have it fully loaded up for travel, then pop them off again when Im moving around town, and its fine in both modes.\n\nOther full-harness bags Ive owned have also had this problem, so dont take it as something uniquely bad about the Synapse, but I should nevertheless note – I have a tall, thin upper body (6 feet with only average-length legs, 150 pounds), and when I have the hip straps on and loosen the shoulder straps so the bag sits low enough to shift most of the weight to my hips, the sternum strap in its very lowermost position rests on my clavicle. When the bag jerks around as I move, it sometimes even puts pressure on my throat! The adjustment loop ought to be an inch or two longer so the strap can slide far enough down to be comfortable.\n\nA couple minor gripes:\n\n(1) The weight of the full front pockets, combined with the flexibility of the back wall, means the bag has an obnoxious tendency to faceplant when you set it down. I usually have to hold it up or lay it totally flat on the floor to get things out of the front pockets, like its a baby that hasnt learned to stand yet. There used to be a relatively light internal frame panel that is supposed to improve matters, but TB doesnt make it anymore! I might end up seeing if I can find one on eBay for an exorbitant price, not sure.\n\n(2) The fabric in the water bottle pocket isnt very water-resistant. If you accidentally dont screw the cap on all the way, or you fill up with cold water on a hot day, moisture can leak out into the main pocket. Its never been enough to damage anything, but my laptop sleeve has gotten wet on two occasions, which is a bit worrisome, and anyhow, opening your bag to find damp socks after a long day of travel is no fun.\n\n(3) Speaking of the laptop sleeve, I cant decide what I think about the Cache. I do like that it exactly fits my laptop and keeps it from sliding around, and its nice to theoretically have the option of removing it if Im not carrying a laptop. But I rarely want to bring a full backpack somewhere if I dont also want my laptop, so it does seem like it might be easier to just have the pocket integrated. I have occasionally managed to run my bag through a security checkpoint with the sleeve slid out, as they claim you can do, but my experience has been that even if the staff let me leave it that way, they usually ask questions about it, which I find more annoying than just taking it out and putting it in a bin. On one memorable occasion a lady at LAX yelled at me for not putting the sleeve in a separate bin and YANKED on it, only then realizing it was attached to the bag. Fortunately TB stuff holds up to abuse!\n\nThat said, having also used bags with integrated pockets, I dont find that having the Cache vs. having an integrated laptop pocket ultimately makes much of a difference in either direction. If youre hesitant to buy this bag solely because it doesnt have the pocket integrated, I wouldnt worry about it.},{title:SystemicDisaster,created:20200403024650798,creator:soren,modified:20200403025754428,modifier:soren,tags:PandemicMood Public Idea,type:text/vnd.tiddlywiki,text:Most disasters are at least moderately localized. A tornado hits a town. There are wildfires in one state. One country has an outbreak of measles. These emergencies suck if you happen to be on the ground, but our society is built to handle them: everyone who isnt having an emergency sends resources to the place in trouble, with the understanding theyll get the same treatment if they ever need it, and with the SwarmingMethodology recovery is possible. The whole system is thus reasonably resilient.\n\nSome disasters are systemic, and this makes them exceedingly dangerous on an entirely different level, as well as much more likely to lead to societal collapse or serious economic consequences. Systemic disasters affect everyone at once geographically and socially, which means that few to no resources are available to swarm the problem; everyone is forced to fend for themselves. The most common examples are pandemics, nuclear or other gigantic wars, and SolarFlares (the latter has never happened in an age where it would be disastrous, but sooner or later it likely will!). Technical disasters like Y2K could also fall into this category, but have similarly never happened.},{title:TableOfContents,created:20210516225218547,es:likely,modified:20210516225124211,tags:Information Public Idea,type:text/vnd.tiddlywiki,text:Classic tool producing a hierarchical view of all the contents of a document. Highly effective for highly structured things that dont change often; not always practical for things that stray far from these parameters.\n\nCompare Indexing, FullTextSearch, and ConceptWeb.},{title:TabooTradeoff,created:20231019014359976,creator:soren,es:likely,modified:20231214213207533,modifier:soren,tags:Idea Sociology Reasoning Public,type:text/vnd.tiddlywiki,text:Concept of MrPhilipTetlock useful to understanding moral outrage in some kinds of debates, especially ones where the popular majority may appear totally irrational. \n\n* Some values are sacred values, where compromising them seems morally wrong -- e.g., maintaining freedom of religion, saving lives.\n* Other values are secular values, where theyre nice to have but meeting them has no particular moral importance -- e.g., getting more work done, saving money, earning kudos.\n\nA taboo tradeoff is when someone suggests trading a sacred value against a secular value. For instance, if you suggest that there is a maximum price you should be willing to pay to save someones life, people will often react very negatively, even if the alternative is absurd (e.g., paying 50 billion dollars to give a 90-year-old cancer treatment).},{title:Tabularium,created:20210812021838118,es:confident,modified:20210812021917276,tags:Software Public Idea,type:text/vnd.tiddlywiki,text:Indexing software written by me.\n\n~GitHub: https://github.com/sobjornstad/tabularium},{title:TagColors,created:20200512005105464,modified:20201223005837632,tags:Meta Public,type:text/vnd.tiddlywiki,text:Tags are colored to indicate their role in organizing the wiki, one of the following:\n\n* \u003C\u003Ccolorsplotch #A3BE8C>> General topics or areas of knowledge.\n* \u003C\u003Ccolorsplotch #FF0000>> Types|ZettelkastenCardType.\n* \u003C\u003Ccolorsplotch #ff4d00>> Pseudo-types -- things that are not ZettelkastenCardTypes because they dont have any impact on how the wiki software should treat them, but nevertheless plainly categorize the kind of thing the tiddler is. This is