Main branch¶
+-
+
Feature: Add support for saving
dequewithmaxlento Attributes (before +maxlenwas ignored).
+
From 39c310dee7a9250fb7da980c5fb89bd073b834ce Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action Feature: Add support for saving Feb 26, 2023Table of Contents
+
Changelog¶
+Main branch¶
+
+
+deque with maxlen to Attributes (before
+maxlen was ignored).Evennia 1.2.1¶
aliases = ['ls', 'l']¶aliases = ['l', 'ls']¶
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
aliases = ['remit', 'pemit']¶aliases = ['pemit', 'remit']¶
search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
aliases = ['batchcommand', 'batchcmd']¶aliases = ['batchcmd', 'batchcommand']¶
search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
aliases = ['@update', '@type', '@typeclasses', '@swap', '@parent']¶aliases = ['@parent', '@type', '@update', '@swap', '@typeclasses']¶
search_index_entry = {'aliases': '@update @type @typeclasses @swap @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update type typeclasses swap parent', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶search_index_entry = {'aliases': '@parent @type @update @swap @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass parent type update swap typeclasses', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
aliases = ['@exam', '@ex']¶aliases = ['@ex', '@exam']¶
search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}¶search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}¶
aliases = ['@search', '@locate']¶aliases = ['@locate', '@search']¶
search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶
aliases = ['@chan', '@channels']¶aliases = ['@channels', '@chan']¶
search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
aliases = ['@chan', '@channels']¶aliases = ['@channels', '@chan']¶
search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
aliases = ['ls', 'l']¶aliases = ['l', 'ls']¶
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
aliases = ['inv', 'i']¶aliases = ['i', 'inv']¶
search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
aliases = ["'", '"']¶aliases = ['"', "'"]¶
search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
aliases = ['groups', 'hierarchy']¶aliases = ['hierarchy', 'groups']¶
search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
aliases = ['@task', '@delays']¶aliases = ['@delays', '@task']¶
search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶
Test the batch processor.
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpk0rxqjoy/6c5e9193bba1cb7af19d8a2c9f1d13fa54f3e977/evennia/contrib/tutorials/red_button/red_button.py'>¶
aliases = ['con', 'co', 'conn']¶aliases = ['co', 'con', 'conn']¶
search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
aliases = ['cr', 'cre']¶aliases = ['cre', 'cr']¶
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
aliases = ['con', 'co', 'conn']¶aliases = ['co', 'con', 'conn']¶
search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
aliases = ['cr', 'cre']¶aliases = ['cre', 'cr']¶
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶
aliases = ['@callbacks', '@calls', '@callback']¶aliases = ['@calls', '@callback', '@callbacks']¶
search_index_entry = {'aliases': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶search_index_entry = {'aliases': '@calls @callback @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callback callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
aliases = ['aliaschan', 'chanalias']¶aliases = ['chanalias', 'aliaschan']¶
search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
aliases = ['delchanalias', 'delaliaschan']¶aliases = ['delaliaschan', 'delchanalias']¶
search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
aliases = ['abort', 'quit', 'q', 'chicken out']¶aliases = ['chicken out', 'q', 'quit', 'abort']¶
search_index_entry = {'aliases': 'abort quit q chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' abort quit q chicken out', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶search_index_entry = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
aliases = ['ls', 'l']¶aliases = ['l', 'ls']¶
search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
aliases = ['shout', ';', 'whisper']¶aliases = ['shout', 'whisper', ';']¶
search_index_entry = {'aliases': 'shout ; whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' shout ; whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
aliases = ['examine', 'e', 'ex', 'unfocus']¶aliases = ['ex', 'unfocus', 'e', 'examine']¶
search_index_entry = {'aliases': 'examine e ex unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine e ex unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶search_index_entry = {'aliases': 'ex unfocus e examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex unfocus e examine', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
aliases = ['give', 'inventory', 'inv', 'i']¶aliases = ['give', 'inventory', 'i', 'inv']¶
search_index_entry = {'aliases': 'give inventory inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inventory inv i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶search_index_entry = {'aliases': 'give inventory i inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inventory i inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
aliases = ['@dig', '@open']¶aliases = ['@open', '@dig']¶
search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶search_index_entry = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶
aliases = ['deal', 'offers']¶aliases = ['offers', 'deal']¶
search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
aliases = ['inv', 'i']¶aliases = ['i', 'inv']¶
search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
aliases = ['ls', 'l']¶aliases = ['l', 'ls']¶
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
aliases = ["'", '"']¶aliases = ['"', "'"]¶
search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
aliases = ['forget', 'recognize']¶aliases = ['recognize', 'forget']¶
search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
aliases = ['inv', 'i']¶aliases = ['i', 'inv']¶
search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶
aliases = ['unwear', 'unwield']¶aliases = ['unwield', 'unwear']¶
search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
aliases = ['press button', 'press', 'push']¶
search_index_entry = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button press push', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['smash lid', 'break lid', 'smash']¶
search_index_entry = {'aliases': 'smash lid break lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid break lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}¶
aliases = ['press button', 'press', 'push']¶
search_index_entry = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button press push', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['examine', 'ex', 'listen', 'l', 'get', 'feel']¶
search_index_entry = {'aliases': 'examine ex listen l get feel', 'category': 'general', 'key': 'look', 'no_prefix': ' examine ex listen l get feel', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
aliases = ['shiftroot', 'push', 'pull', 'move']¶aliases = ['move', 'shiftroot', 'pull', 'push']¶
search_index_entry = {'aliases': 'shiftroot push pull move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot push pull move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶search_index_entry = {'aliases': 'move shiftroot pull push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' move shiftroot pull push', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
aliases = ['defend', 'chop', 'hit', 'thrust', 'pierce', 'bash', 'stab', 'slash', 'fight', 'parry', 'kill']¶aliases = ['fight', 'kill', 'slash', 'pierce', 'thrust', 'parry', 'chop', 'stab', 'bash', 'hit', 'defend']¶
search_index_entry = {'aliases': 'defend chop hit thrust pierce bash stab slash fight parry kill', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' defend chop hit thrust pierce bash stab slash fight parry kill', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶search_index_entry = {'aliases': 'fight kill slash pierce thrust parry chop stab bash hit defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight kill slash pierce thrust parry chop stab bash hit defend', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
aliases = ['ls', 'l']¶aliases = ['l', 'ls']¶
search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
aliases = ['feel', 'feel around', 'fiddle', 'l', 'search']¶aliases = ['search', 'l', 'feel', 'fiddle', 'feel around']¶
search_index_entry = {'aliases': 'feel feel around fiddle l search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel feel around fiddle l search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶search_index_entry = {'aliases': 'search l feel fiddle feel around', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' search l feel fiddle feel around', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
directory = '/tmp/tmpgx000bvf/8dd1a82413fc725d02b3d488cdc1086550a94f2b/evennia'¶directory = '/tmp/tmpk0rxqjoy/6c5e9193bba1cb7af19d8a2c9f1d13fa54f3e977/evennia'¶
directory = '/tmp/tmpgx000bvf/8dd1a82413fc725d02b3d488cdc1086550a94f2b/evennia/game_template'¶directory = '/tmp/tmpk0rxqjoy/6c5e9193bba1cb7af19d8a2c9f1d13fa54f3e977/evennia/game_template'¶
aliases = [':j', ':A', ':y', ':x', ':::', ':r', ':s', ':uu', ':u', ':S', ':fd', ':', ':wq', ':>', '::', ':q', ':UU', ':dw', ':i', ':I', ':echo', ':q!', ':!', ':h', ':p', ':<', ':w', ':=', ':f', ':DD', ':fi', ':dd']¶aliases = [':DD', ':dd', ':x', ':p', ':wq', ':u', ':w', ':', ':echo', ':j', ':UU', ':I', ':fi', ':q', ':=', ':A', ':<', ':f', ':!', ':dw', ':r', ':h', ':fd', ':s', ':>', ':q!', ':::', ':y', ':i', ':S', '::', ':uu']¶
search_index_entry = {'aliases': ':j :A :y :x ::: :r :s :uu :u :S :fd : :wq :> :: :q :UU :dw :i :I :echo :q! :! :h :p :< :w := :f :DD :fi :dd', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :j :A :y :x ::: :r :s :uu :u :S :fd : :wq :> :: :q :UU :dw :i :I :echo :q! :! :h :p :< :w := :f :DD :fi :dd', 'tags': '', 'text': '\n Commands for the editor\n '}¶search_index_entry = {'aliases': ':DD :dd :x :p :wq :u :w : :echo :j :UU :I :fi :q := :A :< :f :! :dw :r :h :fd :s :> :q! ::: :y :i :S :: :uu', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :DD :dd :x :p :wq :u :w : :echo :j :UU :I :fi :q := :A :< :f :! :dw :r :h :fd :s :> :q! ::: :y :i :S :: :uu', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['yes', 'no', 'a', 'abort', 'n', '__nomatch_command', 'y']¶
search_index_entry = {'aliases': 'yes no a abort n __nomatch_command y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' yes no a abort n __nomatch_command y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
aliases = ['abort', 'quit', 'top', 'p', 'next', 't', 'a', 'q', 'n', 'previous', 'e', 'end']¶aliases = ['end', 'quit', 'a', 'q', 'abort', 'n', 'p', 't', 'next', 'top', 'previous', 'e']¶
search_index_entry = {'aliases': 'abort quit top p next t a q n previous e end', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort quit top p next t a q n previous e end', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶search_index_entry = {'aliases': 'end quit a q abort n p t next top previous e', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' end quit a q abort n p t next top previous e', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
e4Sz zpXjg;Kc2yq0Bz!Os9$?9C9tMI8>r|hP0_#Z+CEIPtI~`;P#dUTB%_@VwhpR){o|iq z0$9m+bQCHaAT%__dHp?Y5B7-yn50w?AY~v5nPk{d{+lD2P+wZ#ixqGBLHQ!hHh*+h z$GgNjE$Nu93Qvd#%nKGt49xqOe@|$PFOqDN@X!z$4DE}?W-s{KZujtjt>}<;N4vS< z0T*vvB7k{>HhUhM1SPQb9>$4E(3)z`9Ct@PRF#KjtoDl0lIF?YCl5h+=o|cF2gS>Q zw2&8RMd-AOrUoV({R_2}tq&OA%73sk$3Wuc!@Q;m3}GQ@F%RfpY%Xvef-`yIP_&cu zRK&zZ$N)atI757J2o}=;7$iUA|1`q*%r|THf32Upy8Yobp`(^cdH#CrV!VqvL7a8A z!e5&3o1zIj-XO+ba1T{aovGRlK~Lpy4nC)A`anlFk8H>~+QdCT*8%Klf`1Nd^h+K7 zI9=h*E>BlwF*5#qfU*kYX>$4LO~O8=>j;bZDQvyMi;uJi$>%Es2Iy1VG{C)G+5tfy z^yYl3?)So19Q&F{@iFdfwGFRBwqPC|Tilrx9-`jjH&|K6w%V@jRn~N`4DiehetM=Z zB=}maKrFuG%k1p4Yk7%$uz&Yp@cyv?egn|F7BWjDY)lKr4cB|Q)dG!miRjtM&bSZQ z9?)VrOC%qP^$w4}gSm+3#~M1}$D&&ziZ-gZ+&uy76x1C$ed<0-^fuWS#@OKf3DTuo z*v4$T@LnP+j!wQy^i1G62IiUcp0mW(xOp>A#00e1>4`=aN4U~I?SG2Z7xvodAuXK& zj~hWoNrQrTtN;C1`q_;)NNF|<6Vf(J<;5L8M42RMeh!taz z5n`6g=ZZ_;w9;Ao{a;5{2 0lTVL4w`ybEmnO7EbrN8!aiq<3-8k46`_`tU{LC@-nC?@ zNZIIk=lK`z4$U68&lb(?u6-25{61d0R2+?5SIiM($lp0^XNw)ov1!*QHv|`L*3D$s zy({i_&D+S+LDUvc?x1Z!Tt-^g`D0x#7E1@?4fjH;hHT^U9e?whExzo%9Wlzm 7?CeaOIZfW>briEf(B?hn?G@8GY>T|3%>nnhz3{Y?IxM{hZb zS>dC3?IP-rNMshAa+i4{1IJb?QZ5@ANg^Y2#$D!(3>#c78yCSLqr!%-Gsgss0JW(! zmDcie0>#3SbAQmv_<}*x_TM1~c_3`cz_jViY0$2kV!LpJ1&55?4Re?`Cf(!s9?i@V z;S@_W*l^(l--m}RX77JvF~LKIIawlFKFasZpOrc+e^@FLJnNWG82!HaYgVo6^lv-T z6y&guREH8v&HP*`J4DHL@mawBNGg{&RC%^e!Oy))zJD}La~4dV0aGJ8J^u{RHPPG1 zkDfABRd=RC@AE`lK|k$(&!KofuvtQJ6}=xf&7%0jOx?0c?H>EB_%(;h>!#jq*@6{q zc?j67kaw+Dr0L)|o9(5OS>hF`z&josTS6I}UHj(2)dy2%NTHI@b{Q7HIye>aOd9fB zmk;RzNq=ExO5T(1U;p@Ln^2zwd=lyNuYdf1bHtGUWam%V-Z8Du3q;UD^e5gx;+d9@ z*RW0f;p6RGG26o)3|fIS-?Nx4W(J}^ac5?QQe3r&kC`|(^S-!mvSuH5wj~yn_2ZJF ze!#^VaSpO%q34SO>#F4YO!WglBrMjBIN^br=6{TA5dUc<-;1J2BEw+fERrbmb%XB6 z&( CB^l4=#TEFptt|$;GV#nl7;i^5SCRW;{YZna=Xg z6n{4XjemZaQ(d@qxS+}@!)JQK?^%^E>vg-N@(iCT55H$p-g;4TChb*x<@Ze5Ka=}K zv<6)IZ!Rro*d(;*iOBf>1YO?~W*{QH9TbA8-I58Abxq>P7N2|{a$d_w!VWHz?y=5O zxKx6h+fN6VX={WmY^Moxr8DV7y3QCy%YQB3Ipbx#7d%@G<{ORMqcGb@+!_h70?qeu znLUGf4z)U> j21KH&jzVE_Zpo;JMr%y%x`n-~VhBMfskbzVH| z`QiA52RSCLOX0S}00*YZ?4kKS>C%OJ7Z>M8Iypx_B`cG;`<9j;qvaQ(;Pq@;$@()D zi^beae8bQ5^0NYTPz$xXKgcm(8h;$4U$t5KnJp5#ZO+ePm8E(nrhp6lWnFIRWLZJ_)Du{i&jf%(Lu!P|nXtV-H~ z*2`+XIH-5>=2`M|Mr_0-uH#L v1ZS`OE=W%Ich=Ur`VaWsu)j?cF=i!o9zev+p&@kh`3IZ;hLO;nn^3233YetTm zKo%8->GP9JA4neA;?12rb1i51(qN_~4Oe95oG-bfW12Iqrp}pMQKBPtlI~hKACaP0 zSErl$iKNeuXl0qdoW5jS1AkSZASBtf37q7>SJJyWfnW&+OL(x^Q%6qTuq~$P4_AT~ zP7Wg{pE*G@c82X8bDuZDJQY)Jc4*n2ZbWv&vl`ZhY5b}Qo5+`7qm%;9V&h;4#)eol zbgSC3E2{0TJ6u!kGOTF8yLz^}q{hg2809@#5!ViE=}n&BIik#;2!E3*q+*Sa-(O!a z?mlXs2pxN^OeRCZgC%DeY@XE6P3&%YNn0ZFW~NKcWG{D}Cu$r_CN)-@MWSYATCmzS zgmy%8&V-E78naw;m)^wdOwqwt2Gp7`%g&80S~j+8=A%@#$-6bCXwGB9!W^lCjaZlz z7KVV(oJn2g*mAYcb$_!=#yIHy!c7pN0Tp mcc@CZg{|D=BVjRXY7N$`+qWbjOLpDdm}W{{NEWJ zaiaH;lx01OX#-EROoZat@UP&;jyBC4&4*OHKC@`#dK&p_?uZl>d(shJ@oS+YYYC3> z7mk>f_AT>Cm=Clq;6wk;9r3!^WDB<;oa2Q3{qFmjqrhIOlkX;>*$eho GM{J?M8|o>(cz?jF>9lM9?sSkRN6>N+f7WQ> z_?tQVgDPMtNjT3OU$OGU6Pz?n-7H*>&6HxXi)Sr!ojtN`%Z$RU@d-XGZ y%$jW)W#&9NzWf9YUYS=9z8*N= zHoz(qZhtYcm+vMe;z$ziR8Ktv>)^(#5pZWZ%{ulXJzUT&Dw=jh2P@(8 `-D!OpM29~DM)nifS4XKV4 9chvhC&Md~1d@&x;_4B8xmX$p5Q(BY$b$>Q%qqbno!xi~ 8eyxeko-DCL&~fxXq!*6)gv3a9hg_f7zOdl1xcQBB1{5d*!Xdt zM1Q~s3*GPI&J=Ak6TaHp4&T?EC2E}OexGJ#ksW?O-yE$m3x6&6exGoc*`p)ww=Nwa z$ )9*5ya=>(R3wiQAAjLCXQaRlp0J-~rsIm$fM~fvMNh}JV|WM7 zl5yGisf4_vRU*o^e)u_G<~vi2XBn?sB6sL0-J~#{gMkVDJ>khjawr^K2012XA08 z;hrSI14?6j9OaMC^5DbNA-E332H@~~wQ!&MX2Sp%43B0TI7WDAu`wvzL%-uc=6}>T zrFnbs9L}XRClIS{&s(i%MHo!1qC)BTTGo|3BGtsfVNl8^BtETh6TIqDDZ zK@)r!ng&Q%fbZvsHonX*T<16%WQwVQWSMHSt8mG+EYqXJ%Src1c;Ycr`Fdx-$)}$z zcB0a&GOH?av_7N}^CEErgH gG2P(*}NPq#5wrgU?%3(?m@lUnSIrJ~Lj~T2! zkSyvor%?4Z_*3{wuG!ZN%HNYtf^SK)CEbn&1K0UuqH?7Jve)n*kJb-Y!VjJ2h-Lq5 z&fIYl$l~7e4BAez{1B+Gf*oqcAx!5w7uLr+LT5iY+0+YYZ(=#Cb79H+mVY`X;5bW+ zsx@sRb|u)F60fNJ|HQrRlH4|uHu`_Bf*TWY!ah5cEPFij4*zK7mTc>+WNXyz@oq#% zbg-*X)f} V4pyq)#myVw z^Y9Dv{7~A3dEaE>>@}9`Stl>*`hq>?cnlSMcfMT8JMIoWq7z|v=+VgH?RMYbp7RHm z!a$R_2TevL^uQgeCnU3H%QL)fZCMLmK!~!1XP}A)v0VBiTz?y=#YbEtH$q)R^kaV{ zQEbc*Vch2-oIYfKN79 7m}9O12( %M2!}|*FY$1R z2leKYYB?VBZnMJlf$o6`{k?dI#YjC| #NgP&q{s%l3r^_wyW1Xo}jkp4go-Dn*QwQnCHl-0^+y}u& zkzDjXNP8D{%D OD5KRr;!Ws zAs##7wsb}h*BJJnxFR4U2mD9mb~Rk9yV}0n3C|h&_xNDRX4?__<|NKnz%fdwbJnFl zhyN&^h}|{tWT6A=eA_0p7k}SI6xaDSOeik?K8z@e*Z66jL4gU=3ARXmA`J%o!7@bp zhw#CFZ$Fea`2B}WPJ!U2wg)Ef%-$|#8#m-lq#icpO(TnA&wofy!v??yxy>x-h7+m> zPIC)#=G*75V4b_Vl>=sdAJ}brR9z@a0dio7lJg3d&Z~<$;0QgQoE*K~B^Rz*{BI>r z3%`%L!^nA@>aV(IY5x+h McN@^8Bp(P4NFZ~>Qp z{k$F?_&Kn{sT3>O)XBMBEskA=?$wU5Qk=h>b330-O??O^8D=2`6K|ACAKI=?-oata z(5?HPt0eE>a)?(L?&lwWeot^zOF=`Y)^;e4(;G8PY!SdqPImc$w@LFx?gR+tWCXc{ zi&4Ip4|#P74^4dD|8n^wsnidG^HL9gX?B-2O=wZ1yQ0A>uGle^vvzU|!~x2)a>N^k z2_ZW0s{{oT5KM%i+HV1Zi4r9EvJvMR;>05_v|WLhsj&$1R-{*b3U3MNDSmpJy5t<{ zM&RPyfV>a*_|)C;-}i7d`mWoEv6C>yHgE& _f30|Fl+O9r` zb53yQJj6tVByFFnE`JR7#SeKgh=^VJgGeGo{LHt!_9*Kktaj(&Q8(p;k~O2e?w>+5 z#Tt6T+o;!Phf{k;tQM!7EHJTkM8zJ(dmPS0Q~inmi7z?9B5y*#RS`U(u! 04{HQ6g{lghm69^LXFrKkk($jnnw zZbh{ x1^Sr{Y)I{1Uay1#fTo?{PjA^!-pFTFa{ya88i>^l_5Y)pVd zi1f#COqXWr6lqEJi8C)yM%|9t-&ne0ISjKSPvXGW>Xp1|v%mLr1$SG26xtuo=_ Mk2u_gR4nFig@jeV zycA$Uq9ugz?bq*N(NSmda*e|R#tzVaX`m?7@>JjNdD3#$_QgF*XbV&`?<;+M4~004 ztnCk{iofad&0oM*fTbgUG}zGe@B72^e}|`ud>X>A#tWqLGVP BIyb)c)(~|Gf2 _7{+RVmx?Zd?Jw z3mZK$LBxzGud1Yfny9CKO1*nc-M00;<)wGgnIovk^iTXW_*Wb&4EZR{A7IC$f|esL zq0C62ykP*f&{#;d3=$#a=Z}YCu%<2e$74y}+Hmk>jsCfRCx2g`w3EzT@0=1;s|;n& z5YJKTATDsvDpbh3qAJ=ux3y7M7msNJ2ys;_7Z(tOfQ(2H5Lckx7Zh1Cc(E 4 z-37Du0?JaS-V`MOq+fvmiL+?;-j;Ibk*iVdA!|YE8_g kPW3e%rqdK}-Uf|c7 ~|TfgK0aZr3&ARuq`9)1N0tA}Jx)U+mL71r+fyF+0*L$wuS` zrnw8bMsTYJxz%eP6*UV=WLDxpF*eAzY?q(P&V8PLv7MI#=)FoxWKv(I$LwB9#W#<< zZTY5YYU3=mRaWl9W! _Bg39BUV~WscPVx41Th8_p z{nayn;)VpAL*C>itG0QA^Jn {HCN^Hctb*;0VNQk;!E%Ox1AyDL>|M>6Lf{N=8)C$o~s@ff&7&EAU zs^z9V4~O9`V@F=q+YT%@TGVu2_kTKU+~FfSzLclLjd%ZhzXL3c)qduElKz*&So_pk z4< w29-f^dgoxHh>qd-!VW5!FAZCO46aw`Y4)}1CJQ|4+4D2%9%3!ns zWYl3<_0D_x4T+Tn?~OcctKQ*}1Cvc|1fB( q^?~P(=B2s04b?q}G z$9ds_b7;Y7eTE<@Oa~GOB*e{$yn=OhgGp@WP?A=kFdZ9m@tfT2Az$ura%PJCz{sogy(I5cpJfHr2akr zNFcSP*p~BPpe!cvHhBdb{VWF&yO}t^ <(- &HH38Fg=4EGSVgY~x(-~lK|bbMI2lO%6>vPK #U)m=~p^x*PPZ3N6b6piB~4E(M&b0PKDJhJw{iH z!+rMJ)!9arp{@dqRKtKt96U0}dZf0M77cP0?v zvnB*R@ADQfO7Rid6{06oSK`d)Ko&Fg@5O_JKfwH;+HV #36chOr*?7Z& zd%vN~$;Ip~gN3{-l#vw%w~-GCiAwPCg6%`RQ&yg~p~X|zys8uR_srmHF?9-Ygth7E z`~2vtKMdlc9)YueA^102Ui_OJI1F!HnS*Zv(OVg~cQ`*Dt^GO=86#5Puz>pgJwBrn zll|gIGD`bG{7W^;OE*u150Q0d%x`-F@;&^-g)I8yn2*V10+7d3&CN%$asW rE!EFRP~P7MR{>%tp~M9E`s1-;1rKCiY~9AN3DCB61CvHo z-TA8gIf1GAEBQ0QpML9bVV~##3I5Q;!9&xEHU<8{e7t~B5qr-XSb)*BzU=7*`|L>$ z>X92+PB*E4Vgtv(9^nVCtWN$YjP2TiF6#a(pb`>D@N?@ALxE8k@jMlW4uq1kBfVGW zsIWe238whz@qF*m!YPfl19MG98H!ka o9|-)p7b_gj>Ix<4o*GCs6Gt{?ISYv&8SH*E>b zRJK2$t<~0{Cwa3!VWZ;rP R$JwzbMrYdgllO-t9l=>MeJ z<^6>&?Hz$2SEs|R?Hm_B6Fc68NF1UDStb)nY}FokT0h0iaE77w&09MsCMNr`z9n~< z%tWSt5I^AWFdDF?eHn`h!aMjG#-ZN|J!ESH4+DzYJw22c5}%`drq 5*D*F1`cbY^0fMB9riZ%%fv{P6Si;jUJ0H52Il9@iUg z^Dc*p*+p*9pfv}i6buM~6wCwP1v%5 ayf5+C9UYtE0%9p{{U0TfwXQvP{&| z8M$AoEl2I-a;%HG Vop+>qm!`KF;rdZi~ik zMw@&t>pdL0C$H6U`8hLhf{;_o@aTCWp3$iEGk@Lb=s0`TN5=s3YM4H}gvY$GuARy1 zU{&%ggPB3zlBl-z1H8&SpLwObKNY@tMH4*_-Yb=!{3_BDnVw*}pYWz+c?FY0a-JwW zf^&omcmlIZ>WQC*@+xm0(=9uHGX8#4n}UV2u>!r7apBU5o o{QzE( %rA0C=Ik2|nZO>L5EcVfVv`AzMGgR*n zGDU%iBh36OS4_kRnBmlMjv{Z1jX1>`?_%iJJz1h=(;08#6cZdECJz4wG4s+UD;~tL z>+;Po5P)R^A9;3bP^c2XUnvRES%vcVZ$f0glY`*RaG)JtxNbl8ndpEKZ#WR|hyGzO zOO6MFT6w#a-T-tVekJ&SD~u3fe*%rr2*|P}fkX(GCE-#(cF3Dg%fd8AyXYS!@=+K+ zwE&nmCt!vYi?_I(ivL{1)s5V*FXpWln2g1@=HEm*{~hN9u6cECC=De)M(jz$>pk0S zO5)0(jVposu)xEG;dbJ_5s6592sWgKhWbtn)778w7Nvd@58N<+w5Vh|aesuXkN^3P z{|o8={Kx;m?D#{!vkOIne9#srK%}-cZ|IzMyEN?|t? *aKXJ*oIJ<>B{~B z)Jbr?<}V-LwIt){P$71sI4c1U5hIR93Zqkqy)DxbkU2qrQLJRQ+}^e}aWbfWhec3- zWVgI!a8xMvBe+Ap`xZ )NSFNce?`uCG! z+N}Lnd)gNX7lnRI2AfL9;ut_+uB#2`VC#xMvm00UjUS4==ylQKZctTsl@E{Xmesov zmFGrf_5HPf<-9ttEag8eHyNA6CTI9{>eT#S=QZC<6%UgWFRF7(xYh1l{gr&nf1Ydx zx7qK{a)a`@YihU&MGV1+%f>>;xUohd`W{k~4?Go4BI0e4$1aE|j-vTKT?CdRoajs( zL6-HthEL--2uny>5Jz-D2EMxRH_D7|JGK$uof;f}c;nqg>xNQ0$*K1D;&&o{PmIf9 zogc=-M8+3vCMsSsp6VP5vTBcSw!}6IG#JQZS58`VXzk`pY#c!YW$3f-!~9W) 70_3zwRm} zqcg dJRd#(Rw7oFT6f?UZwf*xQvy=&=}?XGj=@EsB}%eJ#8YtvLp4k+7F6t{ERKl z9RZ?2;O8(rPmTqi5*YJZ_NpJ`9~66dKl+QbzU| odaSPhiC$daE?o;QCkx%_`Hv6Di`Llgaw{DAUg7r#zNB^6F4t9Hfy)Tn;K zmTloeT((WOf8*`-I`Vy3U<_UVI!g-u1==Q>u2`3$bd%Spo8+`t44HkCYQt@^8QRr& zR*Us^O@hNdSaj{1OdrdWP1&x-BVl%b+Etq_C;G3>()V=$(qQ_JSonJj&C#Wt5JN+N zW^FhVI6ru$&WjZ)tTPGi(ez3`k=xaA9Z8$|u7A}J?ju;72L+FobRH4zqvQl6(tY#T zvEd-jk8duo(pMkeTH<3CmN&SoG<>ljE#YZ?Q{%2M_dqlxtpRaxFyahdSRMg?@r*`l zSXID35e<&_T4wrvw9H7uvILl4lurYxVb2|o;KE)Q>z2`*q4gB8qYnpq$rK_@JcwTm zp65r}9E6jo1Mgx;gK}pZBDRxdqm%~rSaKUtJS|X5-jIr8I+j5D7-{N1!AS0CxwG5y zWYwl~yu?Mpgfm&}3D0Px#G*`pEUydSO*4{M*@>mTHNKlavhpZTb@hEzOroO7gcP~b z%UCxXHN}iWQ?MN@%z}QP-EphwImD|3A0+Alg@+t&$<^F#1dkbn96id_+;0#M)t*{H zq{rx)s3$>GoZ|`v8pALWP?(M`IL)hb4_$o+4+9-ybUf#znQ!BP8{y=CK9D`{VDL`Y zskNQ{;O1k6`cWn%eL{i>B!2K*9_H xgE9dDD)=ZYBz0OGj!k{f_$R(- z(;cs}Y O?+I;CUjS>*TH;7{i(qZ?n4Wa^pS^i= qP*iJ>NzJV4NDW0m?K?8%5K~f#|bD^FLu)Bsw1FGHD zil>Qu-~TxvhyjmM?mA-k(4XKH?CgLU4bh<@MoCIs8 E81s^e34HysSq3{2(T$=}Hb{H+1@h1&>&srW!w>0q2}Ry&ULdXabip94a@ z+Z7vFHmlwQe<^XO{4A6Dx5!Xn>Uk?b2glT(@q6B@@JhOW+42@h<9L&GnXBP%4WzD1 zyHg_d3jRM);d0ipvwa~|aO3fFSeH|=5;x4fE?|qnR Z{(RH*vD-*N7}1u3 zb~}?rHCyr2dgOtdiU&zsIHSDOPC9T?6oY!$MZc}P{=h!5NI#6D8%hopVz-|s_h_fx*y!^t-1N=Lc1|5YE8thbBL=`=Vm* zTDlkW*VDbI%i6Sx*^g*Af-ojx!O$z35IWY%VF5h?<|@(DuaQ>IQ@xY~QupI&qussk z?-NYAeZqeYoZo)DaF;YL;4fob$c#NLS4Fe&`K=7j^z>5XGic4_Kmtyj=!j@}$#H^8 zMNiIug`t%MF7GV^A1^Q6Wq=F#%K#TLV^7OKGd*Y8Zg8fjmjRzaYu*JCaN A0Ic1xF6!tJNPX;?J>65qOY0wKXGVjCEUJR*c zc{%F36|Lac>X0DA%P|vDyS+pL+&3Z6_**?cu5YtvuvSk#BGN)pXc|1t*=IW;2Ze zHTA;6*4+0`mw$Qp{5^=i{w^7bLZO* 6P(BcbHR1Toc(Hl zs~a@TS5hwdAmq3=$uA(6eDM(l H!39FS$C}II3<+W61yfan z7Pygsn`?h+TD6t;L965N>YZjYh%yyZ9n1!w04bM zCvo`~d_-cP*3!;A*6W5CZf;;zJ&f0XwHpFDsv+DS3E(t_^OzIbOr9qst2kKOzjkeq z*{LoL`S!1C>oy!&%r!M?VTGGQ#3wGgP)s2DP=8d B5Bd*QS-{!Mm#5>gZn_jN44XGf=0dVjf(eO#Ou*~L z?6~4|Pkg*@3UdS9VrZl%jgpPE@^P%uk$$kpMcbZO+Oe|YJ&UUDFT2AFJli90*4L-j zb}*NRU?}!mkk67UR7igM`9q=<;O0=JFzk =GLR&9_YZlqs_ zR6N#3q$VOYQyj5zk-j?Sn>&_&erW2)CqqG=3-w*kzK@05uRtI{0Xx3vd%{g`uqPQ$ z+HCOj|Jk;7w{<(nE4)VzHZJ2~oqd9bllXntbw}BbB{cM`+ kr zX0CdN7k9#8^0Ci8DoqzobmngAqu6nEsJF%L2^Ztu-|>$}AT=Ax1y8|$R*^`-CB=XJ z@#o7cH?86Brp>7lM@iJ1PdIQ9o6AJV;gTp2OL{SL)85Qp&9mSQi5Qo=Vs;OUhpr7n z&DMy^7$LIwJaaQrjcuL_H*H%6G0}8W&{eH;iA6X3(C&+9%c!iIh6irju AMvSweAhfoPW}4|KCv7xF@?88l}adQ_CCIqU;ysNQ(rGgS?HU< z`>2Y1FY9%t61zR{IsXplq85U+1>ztTPQo?v;&3MbS)F?%o#LPOJQ1~FQOUzvxPz1N z7qd%U*$P8zR5U%9wT`)ZcPW_u8>xEv@s;~qFVp9rd6{5Dn|_&p?sDH3NjGCu4Kcl! z{e}%|x?+dhR$HoVqwWu~+o3 8*X&t}jZ*lkn8J_S#O)rv5=ZpDnx| zA^o&3sz+;?!_;|+`{{?bKm8}RVEal1PD8uAd}jck7C|@*=@A>peeH!;Lpi@!0}(3L zBEDOwgt+{kbu?0cy29(a`sY9XyGy>upZ{tx!8xj9spJt_ShR+!f@If=!hKXHTd9+} zpm_EI7Iv~LM$QyXUUtfc;L4bb1 gJq_izrc%WTC< z dZ*++y z2R0Va{GR3JK7!RyuXG{)^_bWdc;$|5ZqjZ>SNy&ZOS^~ZNt-# @PLE+0C%UTL ze}zA3cC9ymwh(Q5u4^H4;0d`_gkorD5HUsT*szBEb}FEb56t IeOo$Ea${M`giO zSvB=(!S9-yR|~AYtLx4(PGvVeRlXYkHkp16-^<2RK?tE){eT}0k!FXU+`WZsO;6$? zS>CcBR2rIbH;{G**M&@kT@#q-<|jAF_Qw^7Z_{Cawpr1`&H*Dg-uA~H;GQN-ax>eq zV_83GNZ2eqT27Vn@biMbMgff+wk`(&H&?j)K<*O_%hi$MkM#qz?SI8hOHO;!ql~vh zQKnk9K*W@B7|!6WEI8kZHRA9mEC`cmZyDS`dpxkJ3t}1p4}&JXia1^h%ikn>H5IRi zRlnPR0qx=-hlp9k>q5a(mFGYlhe~8V5ndoM2sT_ixlJLG-5swP_fbWL1b7KTeY+OA zCR`|yLXy3kH(t11?9w8|PS``v|A&V-g%ukI4Bp#a?2@;A*X~!I3U`&fdv*2Z^6H=e z_@9?1jz1Kg=X1d&%-@P1-d d^-xBwoF;5YnNQ>eQ4+|Ya+w$Smmc2_&*S;aeOTz+1CU<3Mf!YHxk)C%;DUHy7 zDF`mfW1COn(}2zPhQSBQ->xw6v4Y_lbmH6cQF~6MSXa9f90&z$y<>PKZPNuB+qP}n zwmGqFYj$i;Y&)6Qww;M>+d6sP@0@?<@9uqd-__lB)vBu1t3cn)=$nOwhxS{ugC^5L z{qhG5n}s6C4Q?XsT}wwo}DE*%~R09|j^?MVOJBu4&Y!lnO-R$VOO;g40dYpbn=R zRGVUo%z?a1bNXzp182e;cUbFX1_5$HH+qp#|8AV(ZO}culqI@vFsgd2x9O^WdWZ?R zZzWYIJh*9ZO2{HF6HeO)I@@6~GGmpUw_&;#eFU&h^+LPYVrochv)7-RfG>=Hi9Ijl z=iLfI3yR-aFu@O%-Pyk1OAUg8?-&?4J)Td=VPn#5ftilQv_|OH;n=_qPJjmp+&4N8 z?G273j*O5RXlug?#e@kpma%*Tj*g==1qV15BwQX>$BsH9U!5Ln>Fi^Up4=%GCVS<} zYi*U|zTFrbj(uaaW#56s%_}k4n6D>HTJGuun5&P8vrI@NSed8J!Mj*DL2$O*2b0|3=6W3~M(Zct=#$*$Fr6|KW!mFN1>2x)!}VRd^tHQ*w5 zB5GvF1s0skNuJ?|_MCrirhJ~< 96huIoS1cjE56_-)by-D z@H1}|Fub^QE{aSvjoH~d6o4K_e3CKr E_FMH>lOQzZ2dMjo5B-@-2O=fb z#n;Pi25=~6^--_FevE{2;^{Ekf(*#^t2kNX0N82o!Mgg0kmYz^j8_y={PB+d=}=qb z!&U3pQHbL{2G2dp`*G#a$<`l7M`#Jc)a9HpS;G`Q$wZH0mUMq)?tJLNbE)RA>(UU3 z4VO-=a7B7+&`sMa0^a$vSlD?bRwZX43RcEkl@H-hF|6;~CQhK{^Nv^xAGr3$(yG?j z6eag~S?86GExVC>>?F>nO6ijnTf>4Z&5G_6z5>NdCyk3Rda6McTyRO@Mbs&pwejs5 z{2)Lx0$2XHEmGW;+*DxC$9+!!BI%46v&moE7|qE<1peR}1x({|RQS=FRzJwPBkteT zo=I1Aq4{ZCmT}WKfXqu$2iueluF2i5&QI4jFfDQXdS*W+-rfj6QrHacEKp;zdv-TK zl;vi|Jn)r&w-H=5`OTF=7rvgiWPnCPxKh<*{7!Q*OoZ`R2Xg?emQt&;KW{8XCsUX& zt6k?g6&U6r00^h&C6kjUs0l^_@YIUJgis)^6jmjx2AtyBDG!&Wvm+zX)6cPW9$a3E zRe5n1#&Fa>Q;H$NHt)Kv)&8sRTQp6FS#~heG+yh!F2ZbRNYT73Q>0Jc6qDC)Ck3ok z-_itLI{i(3%rs@=Tzc>Rt_EblK?tJnvBnlQFzt*A0t6II8%Qr3HNO#Wxn4meJ#q)q z$oanK6$*`7o^}NaPlfjj-zLDXS5nObG;s(iJEo&=tW9X~^{pN NarcxzCm5WJ{6Pam+IYY0nL|##U`u|Be z<6BWK7EDce?Doz12 6;q2}KL4&jaa8U-VGrxg{$v06?(caz5?Gf?heqg@{sWeb@SqG^2WQ zkDh_%X?2#eN0ai7IfycbTn%{q4MG#4^g4e^@VgLu3$qWmMv1?V9~rW94$lWBv(t!} zVGiil93~~YXmGDo!<9#9T>3**T`-)*3RkI-Im_}3@|$|Rj-$-7d9|Xnbqw{qd;dh7 z0>JW<*z_EKR6_X0@onCItp=I7MP$#brB8@rk}EEvmOAD9G0uS=?zwYbIZa!8)>v;{ zsRLVNq(?>7An{wFPUpkKef2I``yDBbPph&ht$7#gh1Z;Go2?|cu)LO!CBa0_yoJ0_ zNzKwxV2WYuC!#`-Id^>_B|L*C9^{262Y_n(LJfp0*c*a~^`j{qU3-uMCLGrGN2~Jf zw^lh|gB$696do3<5;_HwhMUeKvegZ-)_@X#>|31;Q%K2D{lmZ=X^`RK-;*flvj3?r zy%1PhT&WR=W8&|DsiBU>%bL@@J;Ot0!o;l1g5Sl&+4y&8I%3{=r+RE!>KO8c7!Y<; zr6FPCav<_=e14HlyYVdU-{a`e-=$fUY}SMjSvU<~m9d5ZnSrW{@l}IZ9jC1(H!35V z{1nCT(m(e7a#+T+IAknhADLI$`Sxrl5?-`8OnwEH(9!=e7Sgr 6JkHc#TgNdnU36&6@loeA^Inh$t{CrwSbPGB;fYETiTAnbq! zytG${vhZAf#B{k>CgcLV^;5=9r1@Q Nl>#>Tk&$D%BDiSLIYHKltidLl3-5I}#(GSq+!kOC6zjegTG zBMjdwnk=KWP{Q?}dlxc9qhLnuj>(p7B98Y|c;^AX8{C=PW=);DUDi2jf6X4gziS`! z#2+k9M2AcS=iy{h6j{8QtL9eR@*9*qAg6wnBS*%bLQwu1+jx@CuVZ@I{2|AV|2~=m z!jigerT_yDrUUjT<8?M~IR?15w^+Ji1%RC3-O+5vdAPM7&|QtIl}1cjtzWj-Z=SUW z!kUhp2hHa$i%cE~P_*B$rs~CA2bp!8gU|(QnO8|}sOjQuut)PbZ{k=a3n0{bTL*hL zbK4H3Y3+;Si%mhW0q0gvjtpRl;Qp~ y%vECV zXc`uk*Ct197t_0rAAp9=?@M$EOE8KQZ4Ra|So>J@AuM`AzTt3h??Q<=9=~5g>(yTx zHJ@(k+TEBojpZZC%hDL?Q(Ca0;12c&%@;VunC%=phLE|8M-(8G9Pp!hr1($XQk`4l z9?Xpnub=XMRBt Eov J&& zj@*pykHV82ibfFuGB^Oji ;H zj6>*gDvbC)lfoK5DZtk)Vq;3#rIZjRL{tF{QF+2MTn?& Xs}SNV*DObBv2k|Bh5F2faTe9>D^YpR_seyMQxw zPP3gr9&^_XGf{;cI>~`s-!qcPLNA@%wStM8D%0&1)LMf#mrt~}aUV>TE-+WE#IgaP z!QIISrEJ+VqNM(w1eQkUUp#6(dLIaMjlO~i(fHSFyyybM{ndtl>+@2m5{8p8^1@SX zSo???RS}tL=VK5?)<%nJrK-{mz>jqss@P$vT$B=5hYq{J{)#sH_l-U1^uiij-SVP^ z2S+W2ff->oCbZL8x4Lx&qhW7yuUr8LJ1kI(+?AdY-mEM8SkQx=;y3%qLT;;^sJ4M8 z5a*@a4psn@_O7u~5I4&>(y+{tUa)|Z(7CAWjINm~_SVXgF2>4v&|Scf8t2$-n)Ov3 zp21E?OWD`rrduAhE3AXyAKAl+f=Cr{iCUD4jsxWefvre${Htjjl>Ngz-slA&OX@j6 zWp<^XsK^{>k)~}`xMD6CY~mXjiJqR9zddr{0h`4mA^qxmIG8_%w-(#9773?9TwEI} z!pL}5Mz2|#DYGq6>#7u^V&Z@;M8S d$aRDz-SAPH1np z;)FL*$DMLUK$qA6s$IlXj1UDJo~J)OQlUMdNI^lA3whriHw?MN6yWMb??*L0c}RVo z3u2glEbi{$Ef@a&G7JHjS*!)T%6zy_s)^jO993FB(Q>^*87!F1L4^+lLJhuj?@?MC zIGiI)FNOqR4oLhNsR-`p)_^(;<@Q{t8@W1PUzhJPlO0v43tXK+!sr0(Q` (#j2i?6oIe;ZG4e)zuZ8 #I|B =cE^xC_%56iAourPd8(E|Bp%7x-%X>0xHKgZnFTIWKq#Q#c7TD7EejXe0L00 RN;Qp`zxVOGlX*_>sst_}?$#_80R8P1q8Jui2a%w5* zdXg8Q(85##fogY^`-FjrFs%voZy~GaUW?Cu&a8ZheTB;l-!6}vcpF)&vLF{gnKsf| zD+gg~=;&z2VDOw~GMD@Rc0})dr*#-obETM^F}!s!3lCJ-jW*BgnHY>QKD+vf+H(^9 zte(T(5+M{|p7vxqeFkm(aEQJBU>IX>cgCM@`73tjJfiRl1|nD$?cW#QPYEouQT4Ev zj*Mfi1P2%!b0M1jO>CN8WWr4v?4*0d2Y>H6k}zXoAD-Z+=1pl4n%tj2Qw$f2Cel_d z Yg kkX_La7%kU{Q*vfMC6YnD{wK#9P0+M4sm3Qha)H)$k+w;K zp4)cn0$~yZg09!P2b=NaA*7&?9Wyag-qF`qvB2e1cCxFDl$gd;r3v1q2j?1fCi9Z+ z>BtG7d4v+s`}d)6`k#MY@#`3it13Sijkl7YQ4~!@C=koxe+CIoa8-o%X=3>^+_Wuh zVN}#+Nt^!#mCMbMR5+M59>8tM&oNq#9PiSo`safI{5b9Qq6mFoY5Ob2uKh(*;SBO9 zbuscsn#!i##RrzkWcmE2$6xmxKXRget9a)_WWXXC)JZQw zQIM%emzKg;2DnW^UqQr~k?Y!4R$2o=Hr0bp;9H27?OBL2&{S&rQ9=Aj=UT(FCjZC& zAU2HMe+ZMzKF{mbDDftPbx?sieca{*QCh56MNNeEm%Vrme;phv!49yT#vuEucK~>- zjL%xkSPx8eP(sn?=WeQ-3=r+&ZseT}aW QuYPmnokuyFNAkzpU`9%}xT%3^ z2(V>fERm!s>0*EJ6}X~OM&NaXT?Q}VV*hmaYlwUQUJ>Nfu=-_>)YEE@DRS5Uk*#;Z zI=0Rw2+FT}9J8I|=5gG)yOu9Tr3sKpnl>dahO(EH@*WRbrS_g<>JX Ia;-oq*bGX+E$TCrGO7F|=%_>;5m;(^!@ep3R zw+@`ElgW3V2jU8-M5x>pQDu*b$RKZ|#7}xRizm; BYWxpk3s7IDzqO!`C2cEpC zAwL=$Q-oF=$FO1~59P#f^`@WRW7ZW|cXZOZtccXdmXZ#(ti@q@!>^-B{;L^~3-Ckx zhPW|`d)?Kl$IVu7ykrK3E(eHFRNPLMhZt1oZPQHx{h2Yk?q_?* pj7G>ne=NC+%X%9NQ?tB~_^WzpU-epljLFZ%1+9$KgVDe}?ycLMp_*`BpG zDBS!~iv3`-u=zydZt @(usosrIi8JJEC1T0NkIe-i?|T|Y`` z%X<}wCCW-1SyyUFRm^sJPBv hSO+W+j3{Jc~cur&E?-^;7e&tX5wKR5vW1& @iBYC$u< #AB;!$`=fdfpfpZJKO{tiiG0Jn+y z8cFUAW<``Y9od5&!sItcx?~+W7d7PD*QnvUmX@?nb<~&&liMkgqBRI}1 nx2&6an`Ho_e}?T9Wu; O!S74`w5SiFqR+PGfrm)T z3bCl3 _dFGyO2Hc51loP+EqiH +rfGv!VhfQ=l<6KrcB*c2XAs_^#Ze?W3vpI|4!vZ={{v1s^P*|*qI>A0M6C0 zvqXO$hWn)D+DKARq-Q2Nh7>K4iAaJXP2B*akC+Hp2K5m+`t{P`vWir7|DvNdwhO&h zFw>Mtohz#He(}<{DB1cBJNJ0bqAI4y-M;QwMmoT-Zp-a3@wG`8t)_n8Zpw@+CjDE4 zF7ng=3{WNNUFX}huQmHF0>1PK(LVS*s(ugIapXd?g5OR$_jnE3OiKH2US^o+iV7_V zX~-TR)Rsk)!1Yq^K$AZA`gT7*x{_YZDtg|AnY$dYO7IILRIp*H{PIk6PDN4A5%qHu z>q_JseVmS|J<1XlHr)Kqmz(6dn$bfBxC{9^^sX1 99Zi;Oy<7*(FyFaQ-mko%>O^PW;4dnP60IhF8to|)zqy7g}e z^MAMVOP7ts{pfIVR_5xI9h!YwB@D^@s8WL>5Idcgf0#!{B|JIZjgR(TwW)0#uU|i3 zKMLtUpTl1cqc@%4jM+w|7E;yb)zkK@CRD*%>yWt&Sw!Fm35|((E))tFDZq4?+XC1n zPyIp@Ac!||jvl1wNS%vDQdgw0GPMQ>=jBmc;6;QkQ^_WWSV$zjg+5b-vE-_DXZ9C} z1tGxE*r9;Mxk&<|M-vEU1IVfK`Ukzg=!)nTzwdjt{?KnF!NtNu&q$X`O({_m3`fRy zEw_UPFfZuk9XGRhGUO6N7DI16@d5s!Ul%n^Y)-_LzhqmNUCTF9`40H791y^FS&)8D zjp~YmaMhAyz#Eyf&y323Qt~tcbu7~=fU&YH=K(Ef7%BXh?jBv{E%4`iBQ3|wR81Uz z!ud^}M4e|AK5v*Z7&CbD^@YA(JT HSc?>dH1nWYT7*da-o*cHJyED{BSgml6 zqTX*z89$@plg#?XeJe$~4IQawQ7?AxeUqkJMSkYghfi8c(-=emsGk(*bLf0V5<5EA zQtDEWDGr%_hTj%Lekt?a0&1 mE(|@A( zuZ@&iy;Q)_Vn+_GejML3271MHO`zCV=y%NQ<%?ixXcMhuLD;80;Hxg2%&DFuJm2By zA6&_Fq+snC+Vk286tP2e4W@M3Th0R}^@F}du;0 xofSsAV0kq@GT5n32Jj93r5xWGd5)N5r=3? z=JP4<24mY7kFu8xfcfCHYnhuQFqVJnFok16LxB0t_)(qL$MDeVl0Y1R?18mw{1Y0V zhZ}RaDVPFVk5zIWM3=wMQ5C7BFSXo&O#*L9>gMK@ox&M1-2Br8p6OQz2&$c6xC~q6 zB!gFVg#I&uC+osh5Us})vCfj!oh<(nv6=rnc{+^u0KrW&0QVHd#13#zs(a6kuK#;9 zcCfpAN*OO!j2c7cpFUnv@G{zc%L{LU 16kQ^7QXnj=>=Y!kUq+pYj8cx)-aKwf4_Au3sF9`WM|YvD$B_w8sMjnMa(>p zg&LK?)|lu6I6&Oh3PLh|PBo@WLFS$(m3@Dcm#f-QJo>Dk^~ !sI4XeRnR8ySHW`z$ZGA&o9{vTMyZ~U)P*DL&m@Mc zQs-ISXa3torzcCW|C z?%cr4c;VhLO$t)^%p&&oN5gch-ZI6djA;)7;9uNrn%}-G^6DKP++Z6zY}^cz2PriI z^hpBbn?;g2gFZr6#y2uF@+hJ+Rs9IDxL&$hz9vLVmPdkB?j_s&Ukt~0ztvqf&KY`_ zrB^11gC3d?KKR%riE-yj9$@(=5V*5A+W#3bF7)jfv3|4KA0M(vrd%V*)upmDaCHx$ zR}6lPct|XxewE4l+5dNNit$~iD@XPd2yS?F%o0E|5$0@{bV8@z7j$( }*qL z> 5 wgdGpj!Zm^keHw9LG=B{(egcSe`6*_g$2n7A*-n> zw38f=y|``}=wR9JEn>%W)Nk8Hl0^Xxv6aEBlRpcbWIj~(bPw2V2+0??`I?Gpm9H{O zKtDz!r#h!-haI&bwq8apHK|`Za5wx?*#G7Zl;C-qs>V+nc=|KHL8Be4=!AVLNIGru zW?Q$CQ^8+JdahEAm#C*go@In_r6{I MGaV9DD z1eX(R7R%&KalDIQ%eBD9;*#X81VQ~%TGEa-U`}VhqhlKI-am$wa@!E=R?5Rp)FUF4 zqJw=PCINUe_SZwm=L}uHJvrDeh#y6$A&g;^qf9fwK2wqaT;uxdrLYAwv3~Q0!~o5> ziPlS7f-Ou0`bCVAPG#28B?8Q6&;mkRK+Xr`Q@2y-SaKzhh*#NFq7Sn|PIS*>B~14= zmTEikB;O~ME6!KUi7Frt$*6*zCqzEO$7;9!^hS#mS~!29eOF|Q7}Tj6=5vF0s+5vD z%v0aN^MH492TZqkJTkMG{8(%9W9|Qp9sbYQXeMuh ~V<(ETMuQ9U~AFYUX!YXD~qS3Ne;( z@}uwZr4!Q>AmDL;F{z8~zvm+8iZGIguL*)7@3JaVTZ9%Y_q!TnKwQ<>C2Q0fNkEiM zGnNV*_IQTwN-{N|R=cUGzr|5zBp6K_#`uU`?hKjS==LLy9d53e*j2-_ONascHm6T4 zC1gi=C*59*T8o3v-kqQ4I|yP*Gjb!)sf$|1v^xv|;3=<8>g+d1ls9*I!iR{Bqf2R7 zq|;$ZmB4M^10Pj_ldwN%(+jc@JMDDuW^@ew3xh`u8$WwAKFiA2MHm~AVI?0MRV5e` zeSM`KM@0xUd**~!p9BxV-7OiOC9J?oq!|g;%K#cxg>0b?P9$9HKk$R<;xoOGyKQ1( z!;=9>fDuo#Ar_#g7l2>i+Q?~VFl92Fy+zLwPLwmDF2r(%^)gp@wUOWb^&G85b ?#~Y8=y2JTajt-qcebi~Gh~K>fM}C;yY+ zb60YOPOO^i$Jpo{wm-*f{n8b9i;ATmw15XFtSHUOu~WT6UB0FBaZiZ&u$yawxQs1S zYVZ7iL9`Sl0T5!(PjK!vu_471KHm^nx?H5=28CoK#y+Gqoo;aaOS53BO7t;Vsi10C zz$Xpi(atr;d9!!&0H^N(q+XF5HPvoBd*=hB;TTr ${q|y1I&%F zh1J-Go@KH{u{&=#J5Wmm#9Z@tkz`_{R2=1#m>bD6kIX8kkGas0Pykcr)k??Jahhr@ zIMIFO%nV8*cd7Ks^K4CMUj+~)A~FUMKL*0Z3mY2LRGp+HSAA?Uk>T?XY*>dXp`Tvt zRE~vbJ6_8sIwC*iC$Wfoh+sX9@3;NiC;x+jZKR? 4_I$7OccrAPtkJsACN0#`ka_ZfM)Fv{p=D7yE;?VFGp*0}~q=+cOK! zR=TlkAZ}6$A`&aX f$&^Z<12&QI;TS=yw{)otC$YMF zCP6tTBSd&xuY=a8?eGnT@ge8LqiUqDo1w )pN`;Exu^~QyGH@SElo!fk1#u924bL8d>OxWGUf+(KL|fBt zm9Wp2N}3Jt=3?bWq$ptZT4+u9i(flQPkg!nW%`D1a{2z`BgdQ}$%gtj{{VB5(uB3# z;zkHJo6C1gJy9NtyT~9KnZf13A}j-$FniPXa_fc1(k5*fHGoY>RumOKX^CdB#^|EN zjC|d-5v7{Cb^I@dL<7N{#?)fCT<4H6Mds>Z&G8^Kd7s>-9>kIIuhj)|Gontu!K9d7 z2bEY$!2%ZZJyoG6%X~gjBB<$+7u ~ioRy$*IpMcdGs&q_A=qcd$|20G{qQ^J(*f>mxNU}xs4}IS03K&crRZFytSS#r} z;@a5@qhLZui?&$at2!u*oe@!O)6%D62U_|PSJ{C@NOpDQnWV5bGI|OJ_9u-8uKskD z%o0I8HLSkdv{*Hm11cxH@5gZHoPdxWlgT9l`+cTKEXtRUP4jPc=j?wMs2DuBbqJ zSG+`|AunrnDa^B^>Y0SgrIhw%1cD>GXndMbN3Gwtdt@bX+qU~P1E49CfV0BMN7Mte z$gSD|maC@Ar%g8CcW89}TISwvSz>r#S=Wno 5F= z^w(FVf+FU-U}+G^Is3R*QM2!ZDe`LK#8U!*=uZQfk%b3VQVY$LX=YLd@aoz2`f}F% zQ^=QmKbE416J;dKaP);w|IfS?{j?%8hK}LzbUMWW4sckKBiqsFVmkX7T=@N>Nu!0! zhAv{(0GK^B^q-*-Z@A`GIzX=2fpgKlW2kA^v_Ae4v&b7mJ%gSx!9O~q5ij)SzX1Z% zT2t7oBJ2>c#hddYi|v66|7&rJQ2i1?S|c*n+xktCf+)X;2PEHXL3@Ae2w^flh=GL9 zmS$V`I#{MYCAETrr#I-pe1Gp0W;r~HQ-tiubUFE;?V;il?*zEc#?_JI)q?ZkF4FqV zwPicr@8o+aHw#ux-cfCOpJbB_@aHy^fN7YW;)B_1Ew7AxwuowP_oDjB;nYzSGQS&c zoh*_nVXf?KQkX`kW965fJn9~4tuq@5wR6n3I)~0-u#V1T*l9?9^=#c^Gckt#nST^t z_2H#@)cO1~!ojU{Zx~2Egvy=ObxQbDXY7q3A}n~6^#p+xplMNV3#%g? zZS0{z3W8WHC**z%&UsnnX03N4xkKS9MYlQBN?nsUf2DS3MV8 ?_Z z^$)91y3Ue8U@r1k$P4--24<%X6z;yxzwFqYJ=R2ajP!)yWnFWH&VQq=1?;6J5sND$ zj^iVLe6+kMEF)rM+;zq_08g99*vz$|g^+LsC%6K*(%7Pgc!fCRW(b)KGufmTCS^bh zS4OOQqZc(s{xXVV7f)H;JQ9- Huih;dn6AnkzSJn}3#8snXW zHETWV*JX~H6`^8`cMxEJhL!kiIR>q9$@KF5UE}g62Lg~{azc3Vps+_8?866Q})e z{_l4bq@jKQDw2Qn{;O2XNFgs?906_mx&S#wT#*tVK_QjKtEg-gm{hw6@DEWUJq(l> zhac913yCGtLh8@_di?_@(~w|#Dl9P@4z7nI*#*fkz0G<-jc ;~+u#AsZ%+DK_@lrY$9vP3 Q~ybpA@SN28FVuqM&}XGrjmAz(nm z%5>!cKZ8rCHZ@pU{8Wf!RES8Zb7DtAdn7sEv#{cY`>@l5qs{qUWOZo+lfvbxyh%#M z4I>!wX=(q>1yY&n-J<^VbpBhQ{?7u-{#zht(`S`yW~ZPMkvPjG+=`oGEC8=5hk)D} zs%Hb<`H+1SmE@#`5`tI}4Ai Yqhx~Q;2k| zA4kvFP-qbw3+ZNc+?S6k;56M6Bq-0xlyHUK>duGe3Py=htS(d86FHFG{0LzMs5=mp z^L6`fr1vBrfjXE #JkUcB#mTb{*j zqF%8u*l>C3=xME>et4~#>AF$kCe0EPJ-L)luhHDB%aWnJ#G1w(HW0g>CiOi25dTcG z3n!iK$nQ?Y#XHOpaxh`&ImCsxva9tEpWCIVlTxtge?%0CsD|ku{^2k1o=I5rqfF6T zEwux#*d@MQJlLNiS*P ZGBx2 b=2m~s#C@jkuIEN_Auml7%d$DqL$y)tBn?*!*b?AV|YhDl9qf|Qm1 z-_6)!idkt5TpSo?cDKh$m*oj$-L7O-oaV#(Fsi#IV-}LQxwzw}#v`&og!sRRxyAJG zPfu8=RmnZQn&IC0ZuVBgb$S7y2M^gXJ)@SaiLGI`8wv~!iXqSfWR8J5Tqai~7gQiT zdr5eA^v5P_cd{fN5ciEG^dB+F!}bjRnvn}9T*658g5rm>gZ-tz`Qaw_Rtk-`p4F(R z{xgQ5@z2{PP{xxqwSNi918>|C&>p0Ihy6@1z7zigels+|OOyzehY0{V7le`iN1i|s zuPyiGWA#?r8(&zHq?qJjgfiOcZaA2*w{lBb-94^imBjv0Vcz7~#G92BBGOUDS6^-N z*&NZiB-LBWEn_sR8UIVMDpNKA0<*uy$ZLdex-fdqNv^KnTtkP!0@4OU5*#jJ45Qr# z{QBu@bHA9v(pg>BT?g>vtnqUcvC}q}fkmnA4A%Rd5SO*a(Lj=qfM)PG@N?p-GB&UB zLAWl@j&@uyO(&;CBGEY-)|}f{bsD%Mm`o`gEo)|k 94pT=&{lUz_ z=w1ORaPHR`Z}F~71B?}ahPg9M4TryFAUn}+R6 m XoIK%(aJhb_g+qG&7~;nMC0llC*GhlX=UB|ru90Shd#UJERWG2El+8~7^O z6fC87VcV$Z=F9A@K< R5rGm;6I~rw7(nPmleT{1~8e$s?T}Egi!V|l#9ZGJ57%Z z<7BE)$E28Lsvj}FFE{N7OxE$xViQ(XYW!c|*hY?}26bU_?L~^DpU9lb=7kU$KIoSE z--AW~u-lkxlEWoHGZ@%u>Evd_{B_2f$iO3z{n<13gXhrLl4NkMlgQ~WSaPp*?>K&s z05HkO^nDUky_fWf8dijMGaV>2tZXbJ_X&;>v+PqG0|Tz6eaHFV0r?0bq;r2eod~$B z64~2$Qf@LPI(6}snQEECOh9nQ)7V=$Guz+Rtr#VAH;6N&aD&(qh_U=izRUxTeE4A! zgn7bMI50ci<2}sEGrP%sF6(|RY?`QQ0v^k)L0N^$6ZZZFi@tak3X%|@d?33SU-+2N zddr*$X1GZ)w>(Zy25$X~>r6vvALPp9$(pNq&4O_cyOMHTN}F2F *{6 z; Zx8Day41H|w0 zb;(l8*Z<2)OC`wwV`0QJu-t&9im648Hj05J=Abf%h5bL)r6L~0#1j%!Et4_t*N+PN zYtC!-wYVMd3Ak@F3n8K+)3DqHFt*UZ*i%bVM