Update for new classification.

This commit is contained in:
Condorra 2023-12-27 11:56:35 +11:00
parent 0c280711e8
commit cf7e589bc4
5 changed files with 36 additions and 115 deletions

View File

@ -6,42 +6,6 @@ core written in Rust rather than in any form of softcode. Only user data forms p
Even the map is programmed in a normal text editor, and can be
tested locally before being deployed to the game.
# Age verification file
The Blastmud game is for adults only (18 years of age or older). In order to make a complete game, three
components are required:
* This game server codebase - which is publicly available and shareable under a permissive (3-clause BSD-style license). It isn't playable as a game by itself.
* A client. Openly available software such as telnet, tintin++, or mudlet can be used as this component.
* A closed-source age verification file, to be placed as `age-verification.yml` alongside the `gameserver.conf` file. This file is copyrighted with all rights reserved (except for the use by the person it is intended for to run the game) and cannot legally be given to anyone else. The initial author of Blastmud intends to provide an `age-verification.yml` file to anyone I am satisfied is not a minor.
## Why does a Free/Open Source project deliberately include a requirement for a non-Open Source file?
In the jurisdiction where the initial author is based, it is illegal to distribute unclassified or R18+ classified games (defined as playable software / data / some combination of it) to people under 18. Restricting access to all components of the game would be an impediment for easy collaboration on the game.
So a decision was made to only distribute a non-playable Free / Open Source component without restrictions (and to ensure this non-playable component doesn't, by itself, meet the definition of either a computer game or a submittable publication).
## I obtained an `age-verification.yml` from the initial author - can I share it / publish it?
No, this file is licensed solely to you and it is a breach of copyright law to publish it without consent from the initial author. A takedown request for the material might be sent, the shared `age-verification.yml` might be revoked in future versions of the server codebase, and you could even be sued for copyright infringement.
Depending on your jurisdiction, publishing a complete game (including `age-verification.yml`) to people who are under 18 could also be a crime.
If you attempt to use the official Blastmud GitHub project (or any other resources) to share `age-verification.yml` (e.g. through issues or pull requests), the material will be deleted and you will be blocked from further interaction with the project (unless we are satisfied it was accidental).
You are allowed to put it on a computer system / server where it is only accessible to a limited number of people known to you, as long as you have verified all those people are 18 or over, and know not to further distribute the file.
## Can I change / remove the code so it doesn't need `age-verification.yml`?
The license for Blastmud allows you to change the code and redistribute your changes. If you are forking Blastmud to create your own game engine, you could change
the age verification keypair or entirely remove the code. You may not call such a modified game Blastmud. Please be aware that if
you modify the code to create a complete computer game, in some jurisdictions you might have to get your fork classified, and might
have legal obligations not to distribute it to anyone under a certain age.
Regarding the use of official Blastmud resources such as our GitHub project and game server instance: to ensure minors are protected, you must not post versions of Blastmud that disable the checking of `age-verification.yml` (or post any other complete unclassified game or game that is unsuitable for minors of any age), nor post patches, pull requests, or instructions for doing the same. You may be blocked from further interaction with the project if you do this (unless we are satisfied it was accidental).
Please note the game displays an "R18+" symbol from the Classifications (Publications, Films and Computer Games) (Markings and Consumer Advice) Determination 2014, which is a symbol that can only legally be displayed if your game has that classification. If you fork the code and distribute a modified version, you will be required to change the name, but if you change the name, you will need to get your fork formally classified (for example, by submitting it to the Google Play store and obtaining a classification via the Ratings Tool).
# Architecture
Blastmud consists of the following main components:
@ -52,7 +16,7 @@ Blastmud consists of the following main components:
# Status
Blastmud is not yet playable, it is under development.
Blastmud is under active development, but is currently playable.
# Schema management
We only keep the latest version in version control, and use migra (pip3 install migra) to identify changes between

View File

@ -1,41 +0,0 @@
use crate::DResult;
use base64::{self, Engine};
use ring::signature;
use serde::Deserialize;
use std::error::Error;
pub(crate) use std::fs;
#[derive(Deserialize)]
struct AV {
copyright: String,
serial: u64,
cn: String,
assertion: String,
sig: String,
}
static KEY_BYTES: [u8; 65] = [
0x04, 0x4f, 0xa0, 0x8b, 0x32, 0xa7, 0x7f, 0xc1, 0x0a, 0xfc, 0x51, 0x95, 0x93, 0x57, 0x05, 0xb3,
0x0f, 0xad, 0x16, 0x05, 0x3c, 0x7c, 0xfc, 0x02, 0xd2, 0x7a, 0x63, 0xff, 0xd3, 0x09, 0xaa, 0x5b,
0x78, 0xfe, 0xa8, 0xc2, 0xc3, 0x02, 0xc2, 0xe6, 0xaf, 0x81, 0xc7, 0xa3, 0x03, 0xfa, 0x4d, 0xf1,
0xf9, 0xfc, 0x0a, 0x36, 0xef, 0x6b, 0x1e, 0x9d, 0xce, 0x6e, 0x60, 0xc6, 0xa8, 0xb3, 0x02, 0x35,
0x7e,
];
pub fn check() -> DResult<()> {
let av: AV = serde_yaml::from_str(&fs::read_to_string("age-verification.yml")?)
.map_err(|error| Box::new(error) as Box<dyn Error + Send + Sync>)?;
if av.copyright != "This file is protected by copyright and may not be used or reproduced except as authorised by the copyright holder. All rights reserved." ||
av.assertion != "age>=18" {
Err(Box::<dyn Error + Send + Sync>::from("Invalid age-verification.yml"))?;
}
let sign_text = format!("cn={};{};serial={}", av.cn, av.assertion, av.serial);
let key: signature::UnparsedPublicKey<&[u8]> =
signature::UnparsedPublicKey::new(&signature::ECDSA_P256_SHA256_ASN1, &KEY_BYTES);
key.verify(
&sign_text.as_bytes(),
&base64::engine::general_purpose::STANDARD_NO_PAD.decode(av.sig)?,
)
.map_err(|_| Box::<dyn Error + Send + Sync>::from("Invalid age-verification.yml signature"))
}

View File

@ -1,6 +1,6 @@
#![cfg_attr(test, allow(unused))]
use db::DBPool;
use log::{error, info, LevelFilter};
use log::{info, LevelFilter};
use serde::Deserialize;
use simple_logger::SimpleLogger;
use std::error::Error;
@ -10,7 +10,6 @@ use tokio::signal::unix::{signal, SignalKind};
#[cfg(feature = "yamldump")]
use static_content::dumper::dump_static_content;
mod av;
mod db;
mod language;
mod listener;
@ -43,11 +42,6 @@ async fn main() -> DResult<()> {
.init()
.unwrap();
av::check().or_else(|e| -> Result<(), Box<dyn Error + Send + Sync>> {
error!("Couldn't verify age-verification.yml - this is not a complete game. Check README.md: {}", e);
Err(e)
})?;
#[cfg(feature = "yamldump")]
dump_static_content()?;

View File

@ -8,31 +8,31 @@ use std::default::Default;
// ANSI art version of the symbol we are legally required to display per:
// https://www.legislation.gov.au/Details/F2017C00102
// https://dom111.github.io/image-to-ansi/ can help convert it.
const AUS_RATING_SYMBOL: &'static str = "\x1b[48;5;234m \x1b[38;5;252;48;5;235m▄\x1b[38;5;255;48;5;242m▄\x1b[38;5;15;48;5;250m▄\x1b[38;5;15;48;5;254m▄\x1b[38;5;15;48;5;255m▄▄▄\x1b[38;5;15;48;5;254m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\x1b[38;5;15;48;5;255m▄\x1b[38;5;255;48;5;254m▄\x1b[38;5;15;48;5;250m▄\x1b[38;5;15;48;5;242m▄\x1b[38;5;249;48;5;236m▄\x1b[38;5;237;48;5;234m▄\x1b[38;5;233;48;5;234m▄\x1b[38;5;235;48;5;234m▄\x1b[m
\x1b[38;5;242;48;5;235m\x1b[38;5;255;48;5;251m\x1b[38;5;254;48;5;15m\x1b[38;5;240;48;5;254m\x1b[38;5;233;48;5;245m\x1b[38;5;233;48;5;239m\x1b[38;5;234;48;5;238m\x1b[38;5;234;48;5;239m\x1b[38;5;233;48;5;238m\x1b[38;5;234;48;5;237m\x1b[38;5;234;48;5;238m\x1b[38;5;234;48;5;237m\x1b[38;5;233;48;5;240m\x1b[38;5;232;48;5;8m\x1b[38;5;239;48;5;255m\x1b[38;5;188;48;5;15m\x1b[38;5;15;48;5;250m\x1b[38;5;8;48;5;234m\x1b[38;5;232;48;5;234m\x1b[m
\x1b[38;5;254;48;5;250m\x1b[48;5;15m \x1b[38;5;239;48;5;246m\x1b[38;5;233;48;5;233m\x1b[38;5;236;48;5;233m\x1b[38;5;236;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;240;48;5;8m\x1b[38;5;15;48;5;15m\x1b[38;5;254;48;5;251m\x1b[38;5;235;48;5;233m\x1b[m
\x1b[38;5;254;48;5;254m\x1b[38;5;15;48;5;15m\x1b[38;5;238;48;5;238m\x1b[38;5;235;48;5;234m\x1b[38;5;232;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;233m\x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[38;5;235;48;5;233m\x1b[38;5;236;48;5;233m\x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;238m\x1b[38;5;15;48;5;15m\x1b[38;5;254;48;5;254m\x1b[48;5;235m \x1b[m
\x1b[38;5;254;48;5;254m\x1b[48;5;15m \x1b[38;5;238;48;5;236m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;235m\x1b[48;5;235m \x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;233;48;5;232m\x1b[38;5;239;48;5;238m\x1b[38;5;255;48;5;15m\x1b[38;5;254;48;5;255m\x1b[38;5;235;48;5;234m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;236;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;234m\x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;233m\x1b[38;5;232;48;5;236m\x1b[38;5;235;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;234m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;233m\x1b[38;5;236;48;5;232m\x1b[38;5;247;48;5;238m\x1b[38;5;254;48;5;245m\x1b[38;5;251;48;5;239m\x1b[38;5;237;48;5;232m\x1b[38;5;232;48;5;235m\x1b[38;5;235;48;5;232m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;232m\x1b[38;5;234;48;5;235m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;252;48;5;235m\x1b[38;5;247;48;5;7m\x1b[38;5;232;48;5;145m\x1b[38;5;235;48;5;234m\x1b[38;5;0;48;5;247m\x1b[38;5;248;48;5;254m\x1b[38;5;254;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;232;48;5;235m\x1b[38;5;237;48;5;233m\x1b[38;5;233;48;5;235m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;234;48;5;233m\x1b[38;5;251;48;5;236m\x1b[38;5;247;48;5;7m\x1b[38;5;0;48;5;145m\x1b[38;5;0;48;5;234m\x1b[38;5;235;48;5;232m\x1b[38;5;232;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;0m\x1b[38;5;0;48;5;145m\x1b[38;5;248;48;5;254m\x1b[38;5;254;48;5;236m\x1b[38;5;236;48;5;233m\x1b[38;5;232;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;235m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;238;48;5;238m\x1b[38;5;232;48;5;234m\x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[38;5;233;48;5;235m\x1b[38;5;236;48;5;233m\x1b[38;5;251;48;5;235m\x1b[38;5;248;48;5;251m\x1b[38;5;233;48;5;247m\x1b[38;5;247;48;5;59m\x1b[38;5;15;48;5;242m\x1b[38;5;255;48;5;8m\x1b[38;5;15;48;5;243m\x1b[38;5;15;48;5;242m\x1b[38;5;254;48;5;237m\x1b[38;5;247;48;5;233m\x1b[48;5;232m \x1b[38;5;233;48;5;248m\x1b[38;5;248;48;5;254m\x1b[38;5;7;48;5;237m\x1b[38;5;237;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;233m\x1b[38;5;233;48;5;236m\x1b[38;5;237;48;5;233m\x1b[38;5;8;48;5;233m\x1b[38;5;236;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;241;48;5;233m\x1b[38;5;245;48;5;233m\x1b[38;5;8;48;5;233m\x1b[38;5;234;48;5;236m\x1b[38;5;234;48;5;233m\x1b[38;5;236;48;5;234m\x1b[38;5;234;48;5;236m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[38;5;238;48;5;236m\x1b[38;5;15;48;5;15m\x1b[38;5;253;48;5;255m\x1b[38;5;234;48;5;235m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;236;48;5;238m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;234m\x1b[38;5;232;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;7;48;5;234m\x1b[38;5;249;48;5;7m\x1b[38;5;233;48;5;248m\x1b[38;5;236;48;5;233m\x1b[38;5;232;48;5;0m\x1b[38;5;250;48;5;252m\x1b[48;5;15m \x1b[38;5;145;48;5;255m\x1b[38;5;234;48;5;188m\x1b[38;5;235;48;5;251m\x1b[38;5;236;48;5;255m\x1b[38;5;251;48;5;15m\x1b[38;5;15;48;5;15m\x1b[38;5;250;48;5;243m\x1b[38;5;234;48;5;0m\x1b[38;5;232;48;5;234m\x1b[38;5;233;48;5;249m\x1b[38;5;145;48;5;253m\x1b[38;5;252;48;5;237m\x1b[38;5;235;48;5;233m\x1b[38;5;236;48;5;233m\x1b[38;5;233;48;5;234m\x1b[38;5;102;48;5;238m\x1b[38;5;246;48;5;255m\x1b[38;5;254;48;5;255m\x1b[38;5;235;48;5;237m\x1b[38;5;251;48;5;239m\x1b[38;5;246;48;5;188m\x1b[38;5;0;48;5;247m\x1b[38;5;235;48;5;252m\x1b[38;5;254;48;5;250m\x1b[38;5;240;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;233;48;5;236m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;232m\x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;237;48;5;238m\x1b[48;5;15m \x1b[38;5;255;48;5;254m\x1b[38;5;234;48;5;235m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;239;48;5;239m\x1b[38;5;0;48;5;234m\x1b[38;5;238;48;5;232m\x1b[38;5;249;48;5;236m\x1b[38;5;248;48;5;251m\x1b[38;5;232;48;5;248m\x1b[38;5;232;48;5;235m\x1b[38;5;235;48;5;232m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;232m\x1b[38;5;7;48;5;249m\x1b[38;5;15;48;5;15m\x1b[38;5;253;48;5;246m\x1b[38;5;238;48;5;0m\x1b[38;5;237;48;5;234m\x1b[38;5;102;48;5;0m\x1b[38;5;254;48;5;145m\x1b[48;5;15m \x1b[38;5;248;48;5;252m\x1b[38;5;233;48;5;232m\x1b[38;5;234;48;5;236m\x1b[38;5;236;48;5;0m\x1b[38;5;233;48;5;233m\x1b[38;5;233;48;5;248m\x1b[38;5;247;48;5;253m\x1b[38;5;252;48;5;237m\x1b[38;5;235;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;238;48;5;237m\x1b[38;5;255;48;5;188m\x1b[38;5;236;48;5;235m\x1b[38;5;238;48;5;249m\x1b[38;5;254;48;5;247m\x1b[38;5;250;48;5;0m\x1b[38;5;253;48;5;237m\x1b[38;5;248;48;5;254m\x1b[38;5;234;48;5;239m\x1b[38;5;232;48;5;234m\x1b[38;5;232;48;5;233m\x1b[38;5;102;48;5;239m\x1b[38;5;247;48;5;59m\x1b[38;5;234;48;5;233m\x1b[38;5;233;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;238;48;5;237m\x1b[48;5;15m \x1b[38;5;254;48;5;255m\x1b[38;5;235;48;5;234m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;239;48;5;236m\x1b[38;5;233;48;5;232m\x1b[38;5;235;48;5;102m\x1b[38;5;251;48;5;15m\x1b[38;5;247;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;232;48;5;233m\x1b[38;5;249;48;5;7m\x1b[38;5;15;48;5;255m\x1b[38;5;15;48;5;15m\x1b[38;5;253;48;5;15m\x1b[48;5;15m \x1b[38;5;15;48;5;15m\x1b[38;5;254;48;5;15m\x1b[38;5;237;48;5;252m\x1b[38;5;234;48;5;237m\x1b[38;5;235;48;5;233m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;234m\x1b[38;5;232;48;5;234m\x1b[38;5;247;48;5;232m\x1b[38;5;188;48;5;254m\x1b[38;5;235;48;5;252m\x1b[38;5;234;48;5;0m\x1b[38;5;237;48;5;237m\x1b[38;5;252;48;5;255m\x1b[38;5;238;48;5;233m\x1b[38;5;252;48;5;243m\x1b[38;5;240;48;5;188m\x1b[38;5;232;48;5;8m\x1b[38;5;233;48;5;145m\x1b[38;5;252;48;5;145m\x1b[38;5;243;48;5;235m\x1b[38;5;239;48;5;239m\x1b[38;5;248;48;5;246m\x1b[38;5;252;48;5;249m\x1b[38;5;252;48;5;254m\x1b[38;5;145;48;5;243m\x1b[38;5;8;48;5;240m\x1b[38;5;0;48;5;234m\x1b[38;5;237;48;5;239m\x1b[48;5;15m \x1b[38;5;253;48;5;253m\x1b[38;5;235;48;5;235m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;239;48;5;237m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;251m\x1b[38;5;252;48;5;248m\x1b[38;5;249;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;233m\x1b[38;5;249;48;5;249m\x1b[38;5;255;48;5;15m\x1b[38;5;145;48;5;250m\x1b[38;5;232;48;5;0m\x1b[38;5;235;48;5;247m\x1b[38;5;255;48;5;15m\x1b[38;5;15;48;5;255m\x1b[38;5;251;48;5;240m\x1b[38;5;235;48;5;232m\x1b[38;5;234;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;0;48;5;234m\x1b[38;5;248;48;5;232m\x1b[38;5;252;48;5;248m\x1b[38;5;237;48;5;254m\x1b[38;5;233;48;5;236m\x1b[38;5;234;48;5;233m\x1b[38;5;238;48;5;238m\x1b[38;5;253;48;5;254m\x1b[38;5;238;48;5;236m\x1b[38;5;242;48;5;251m\x1b[38;5;253;48;5;243m\x1b[38;5;145;48;5;0m\x1b[38;5;249;48;5;233m\x1b[38;5;251;48;5;188m\x1b[38;5;237;48;5;242m\x1b[38;5;232;48;5;233m\x1b[38;5;235;48;5;232m\x1b[38;5;239;48;5;102m\x1b[38;5;242;48;5;248m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;233m\x1b[38;5;233;48;5;233m\x1b[38;5;238;48;5;238m\x1b[48;5;15m \x1b[38;5;254;48;5;253m\x1b[38;5;235;48;5;235m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;238;48;5;237m\x1b[38;5;233;48;5;235m\x1b[38;5;236;48;5;233m\x1b[38;5;233;48;5;236m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;232m\x1b[38;5;235;48;5;188m\x1b[38;5;252;48;5;248m\x1b[38;5;249;48;5;233m\x1b[38;5;0;48;5;232m\x1b[38;5;7;48;5;251m\x1b[38;5;15;48;5;255m\x1b[38;5;249;48;5;250m\x1b[38;5;233;48;5;232m\x1b[38;5;234;48;5;233m\x1b[38;5;236;48;5;246m\x1b[38;5;255;48;5;15m\x1b[38;5;254;48;5;239m\x1b[38;5;234;48;5;232m\x1b[38;5;246;48;5;233m\x1b[38;5;254;48;5;247m\x1b[38;5;236;48;5;254m\x1b[38;5;232;48;5;237m\x1b[38;5;235;48;5;232m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;242m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;232;48;5;240m\x1b[38;5;233;48;5;246m\x1b[38;5;234;48;5;243m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;236m\x1b[38;5;233;48;5;236m\x1b[38;5;235;48;5;234m\x1b[48;5;235m \x1b[38;5;233;48;5;233m\x1b[38;5;238;48;5;237m\x1b[38;5;15;48;5;15m\x1b[38;5;255;48;5;255m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;238;48;5;237m\x1b[38;5;232;48;5;234m\x1b[38;5;236;48;5;235m\x1b[38;5;235;48;5;233m\x1b[38;5;235;48;5;235m\x1b[38;5;232;48;5;236m\x1b[38;5;235;48;5;233m\x1b[38;5;232;48;5;235m\x1b[38;5;234;48;5;251m\x1b[38;5;188;48;5;248m\x1b[38;5;247;48;5;242m\x1b[38;5;235;48;5;245m\x1b[38;5;233;48;5;243m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;0;48;5;243m\x1b[38;5;233;48;5;247m\x1b[48;5;246m \x1b[38;5;252;48;5;7m\x1b[38;5;237;48;5;253m\x1b[38;5;233;48;5;236m\x1b[38;5;234;48;5;232m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;236m\x1b[38;5;235;48;5;233m\x1b[38;5;233;48;5;234m\x1b[38;5;234;48;5;236m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;239;48;5;239m\x1b[38;5;15;48;5;255m\x1b[48;5;255m \x1b[38;5;235;48;5;234m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[38;5;238;48;5;238m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;237;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;252m\x1b[38;5;251;48;5;246m\x1b[38;5;145;48;5;235m\x1b[38;5;234;48;5;232m\x1b[38;5;233;48;5;234m\x1b[38;5;233;48;5;235m\x1b[38;5;247;48;5;234m\x1b[38;5;254;48;5;246m\x1b[38;5;237;48;5;252m\x1b[38;5;232;48;5;238m\x1b[38;5;233;48;5;232m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;236m\x1b[38;5;234;48;5;232m\x1b[38;5;233;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;234;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;236m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;236m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;233m\x1b[38;5;238;48;5;238m\x1b[38;5;15;48;5;15m\x1b[38;5;254;48;5;254m\x1b[38;5;234;48;5;235m\x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;235m\x1b[38;5;237;48;5;7m\x1b[38;5;248;48;5;145m\x1b[38;5;254;48;5;233m\x1b[38;5;251;48;5;248m\x1b[38;5;237;48;5;253m\x1b[38;5;233;48;5;238m\x1b[38;5;234;48;5;0m\x1b[38;5;236;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;235m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;234;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;232m\x1b[38;5;232;48;5;238m\x1b[38;5;233;48;5;247m\x1b[38;5;233;48;5;238m\x1b[38;5;235;48;5;232m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;233m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[48;5;234m \x1b[38;5;235;48;5;234m\x1b[38;5;233;48;5;236m\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;233m\x1b[38;5;234;48;5;235m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[48;5;254m \x1b[48;5;15m \x1b[48;5;238m \x1b[48;5;233m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[48;5;235m \x1b[48;5;234m \x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;236m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[48;5;238m \x1b[48;5;15m \x1b[48;5;254m \x1b[48;5;235m \x1b[m
\x1b[38;5;253;48;5;255m\x1b[38;5;15;48;5;15m\x1b[38;5;240;48;5;237m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;236m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;232m\x1b[38;5;239;48;5;238m\x1b[38;5;255;48;5;15m\x1b[38;5;255;48;5;255m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;242;48;5;145m\x1b[48;5;15m \x1b[38;5;255;48;5;245m\x1b[38;5;239;48;5;0m\x1b[38;5;234;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;232;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;232;48;5;236m\x1b[38;5;233;48;5;234m\x1b[38;5;239;48;5;233m\x1b[38;5;254;48;5;102m\x1b[38;5;15;48;5;15m\x1b[38;5;8;48;5;253m\x1b[38;5;0;48;5;233m\x1b[m
\x1b[38;5;233;48;5;236m\x1b[38;5;237;48;5;249m\x1b[38;5;249;48;5;15m\x1b[38;5;15;48;5;253m\x1b[38;5;15;48;5;102m\x1b[38;5;15;48;5;238m\x1b[38;5;15;48;5;239m\x1b[38;5;15;48;5;238m\x1b[38;5;15;48;5;59m\x1b[38;5;15;48;5;8m\x1b[38;5;15;48;5;254m\x1b[38;5;248;48;5;15m\x1b[38;5;238;48;5;145m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;234m\x1b[m
\x1b[49;38;5;233m\x1b[49;38;5;235m\x1b[49;38;5;242m\x1b[49;38;5;249m\x1b[49;38;5;254m\x1b[49;38;5;255m\x1b[49;38;5;253m\x1b[49;38;5;255m\x1b[49;38;5;254m\x1b[49;38;5;255m\x1b[49;38;5;254m\x1b[49;38;5;7m\x1b[49;38;5;243m\x1b[49;38;5;235m\x1b[49;38;5;233m\x1b[49;38;5;234m\x1b[49;38;5;233m\x1b[m";
const AUS_RATING_SYMBOL: &'static str = "\x1b[38;5;235;48;5;234m▄\x1b[38;5;234;48;5;234m▄\x1b[38;5;235;48;5;235m▄\x1b[38;5;235;48;5;234m▄\x1b[38;5;234;48;5;234m▄▄▄\x1b[38;5;234;48;5;235m▄▄\x1b[38;5;234;48;5;234m▄\x1b[38;5;234;48;5;235m▄\x1b[38;5;234;48;5;234m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\x1b[38;5;234;48;5;235m▄\x1b[38;5;234;48;5;234m▄▄\x1b[38;5;234;48;5;235m▄\x1b[38;5;234;48;5;234m▄▄\x1b[38;5;235;48;5;234m▄\x1b[38;5;234;48;5;234m▄\x1b[38;5;234;48;5;235m▄\x1b[38;5;234;48;5;234m▄\x1b[38;5;235;48;5;235m▄\x1b[m
\x1b[38;5;233;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;236;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;233m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;236;48;5;233m\x1b[38;5;145;48;5;236m\x1b[38;5;230;48;5;245m\x1b[38;5;187;48;5;250m\x1b[38;5;186;48;5;188m\x1b[38;5;186;48;5;253m\x1b[38;5;186;48;5;254m\x1b[38;5;186;48;5;253m\x1b[38;5;187;48;5;251m\x1b[38;5;230;48;5;247m\x1b[38;5;188;48;5;239m\x1b[38;5;240;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;235;48;5;233m\x1b[38;5;250;48;5;245m\x1b[38;5;187;48;5;230m\x1b[38;5;185;48;5;143m\x1b[38;5;220;48;5;185m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;221m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;184m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;221m\x1b[38;5;11;48;5;185m\x1b[38;5;184;48;5;143m\x1b[38;5;185;48;5;229m\x1b[38;5;224;48;5;252m\x1b[38;5;240;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;234m\x1b[m
\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;254;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;221;48;5;185m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;185;48;5;179m\x1b[38;5;255;48;5;230m\x1b[38;5;243;48;5;243m\x1b[38;5;233;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[m
\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;254m\x1b[38;5;186;48;5;186m\x1b[38;5;184;48;5;185m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;243;48;5;243m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;11;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;184;48;5;11m\x1b[38;5;184;48;5;220m\x1b[38;5;184;48;5;11m\x1b[38;5;178;48;5;11m\x1b[38;5;184;48;5;11m\x1b[38;5;184;48;5;220m\x1b[38;5;184;48;5;11m\x1b[38;5;185;48;5;11m\x1b[38;5;184;48;5;227m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;184;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;3;48;5;58m\x1b[38;5;142;48;5;58m\x1b[38;5;185;48;5;94m\x1b[38;5;184;48;5;58m\x1b[38;5;184;48;5;3m\x1b[38;5;184;48;5;94m\x1b[38;5;185;48;5;58m\x1b[38;5;184;48;5;58m\x1b[38;5;184;48;5;94m\x1b[38;5;184;48;5;58m\x1b[38;5;184;48;5;94m\x1b[38;5;185;48;5;94m\x1b[38;5;184;48;5;94m\x1b[38;5;184;48;5;58m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[48;5;230m \x1b[48;5;242m \x1b[48;5;233m \x1b[48;5;234m \x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;221;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;227;48;5;227m\x1b[38;5;94;48;5;58m\x1b[38;5;178;48;5;142m\x1b[38;5;227;48;5;220m\x1b[38;5;178;48;5;11m\x1b[38;5;100;48;5;11m\x1b[38;5;3;48;5;11m\x1b[38;5;3;48;5;227m\x1b[38;5;3;48;5;221m\x1b[38;5;3;48;5;11m\x1b[38;5;142;48;5;11m\x1b[38;5;185;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;11m\x1b[38;5;142;48;5;11m\x1b[38;5;3;48;5;11m\x1b[38;5;3;48;5;227m\x1b[38;5;142;48;5;227m\x1b[38;5;184;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;220m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;178m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[48;5;230m \x1b[48;5;242m \x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;227m\x1b[38;5;94;48;5;58m\x1b[38;5;142;48;5;142m\x1b[38;5;227;48;5;227m\x1b[38;5;142;48;5;142m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;237;48;5;233m\x1b[38;5;58;48;5;233m\x1b[38;5;58;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;233;48;5;58m\x1b[38;5;236;48;5;143m\x1b[38;5;185;48;5;11m\x1b[38;5;58;48;5;184m\x1b[38;5;234;48;5;58m\x1b[38;5;233;48;5;236m\x1b[38;5;236;48;5;234m\x1b[38;5;58;48;5;233m\x1b[38;5;237;48;5;233m\x1b[38;5;234;48;5;236m\x1b[38;5;234;48;5;58m\x1b[38;5;58;48;5;184m\x1b[38;5;185;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;184;48;5;184m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[48;5;11m \x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[48;5;230m \x1b[48;5;242m \x1b[48;5;233m \x1b[48;5;234m \x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;220m\x1b[48;5;11m \x1b[38;5;227;48;5;227m\x1b[48;5;3m \x1b[38;5;142;48;5;142m\x1b[38;5;11;48;5;227m\x1b[38;5;142;48;5;142m\x1b[38;5;235;48;5;235m\x1b[38;5;233;48;5;233m\x1b[38;5;142;48;5;101m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;184m\x1b[38;5;143;48;5;58m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;3;48;5;142m\x1b[38;5;100;48;5;143m\x1b[38;5;234;48;5;234m\x1b[38;5;137;48;5;58m\x1b[38;5;227;48;5;185m\x1b[38;5;11;48;5;191m\x1b[38;5;11;48;5;185m\x1b[38;5;184;48;5;58m\x1b[38;5;58;48;5;234m\x1b[38;5;58;48;5;235m\x1b[38;5;136;48;5;143m\x1b[38;5;11;48;5;11m\x1b[38;5;184;48;5;184m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;227m\x1b[38;5;94;48;5;3m\x1b[38;5;142;48;5;142m\x1b[38;5;11;48;5;227m\x1b[38;5;142;48;5;142m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;59;48;5;136m\x1b[38;5;137;48;5;227m\x1b[38;5;137;48;5;11m\x1b[38;5;3;48;5;227m\x1b[38;5;237;48;5;143m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;0m\x1b[38;5;143;48;5;136m\x1b[38;5;3;48;5;101m\x1b[38;5;234;48;5;232m\x1b[38;5;235;48;5;233m\x1b[38;5;142;48;5;143m\x1b[38;5;11;48;5;220m\x1b[38;5;184;48;5;11m\x1b[38;5;100;48;5;11m\x1b[38;5;3;48;5;227m\x1b[38;5;101;48;5;221m\x1b[38;5;100;48;5;228m\x1b[38;5;142;48;5;227m\x1b[38;5;11;48;5;11m\x1b[38;5;184;48;5;184m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[48;5;11m \x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[48;5;233m \x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;221m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;227m\x1b[48;5;94m \x1b[38;5;143;48;5;142m\x1b[38;5;191;48;5;227m\x1b[38;5;143;48;5;142m\x1b[38;5;236;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;58;48;5;233m\x1b[38;5;142;48;5;235m\x1b[38;5;11;48;5;3m\x1b[38;5;11;48;5;185m\x1b[38;5;3;48;5;64m\x1b[38;5;233;48;5;233m\x1b[38;5;235;48;5;235m\x1b[38;5;142;48;5;142m\x1b[38;5;11;48;5;11m\x1b[38;5;143;48;5;100m\x1b[38;5;58;48;5;234m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;58;48;5;3m\x1b[38;5;11;48;5;11m\x1b[38;5;184;48;5;184m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[48;5;233m \x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[48;5;235m \x1b[48;5;253m \x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;3;48;5;3m\x1b[38;5;142;48;5;142m\x1b[38;5;11;48;5;227m\x1b[38;5;142;48;5;142m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;233m\x1b[38;5;137;48;5;100m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;184m\x1b[38;5;11;48;5;221m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;136;48;5;100m\x1b[38;5;234;48;5;234m\x1b[38;5;233;48;5;234m\x1b[38;5;3;48;5;142m\x1b[38;5;227;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;227m\x1b[38;5;142;48;5;221m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;233m\x1b[38;5;3;48;5;94m\x1b[38;5;11;48;5;220m\x1b[38;5;184;48;5;220m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[48;5;235m \x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;3;48;5;3m\x1b[38;5;142;48;5;142m\x1b[38;5;11;48;5;11m\x1b[38;5;142;48;5;142m\x1b[38;5;235;48;5;234m\x1b[38;5;233;48;5;232m\x1b[38;5;137;48;5;137m\x1b[38;5;227;48;5;227m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;185m\x1b[38;5;100;48;5;235m\x1b[38;5;236;48;5;233m\x1b[38;5;233;48;5;235m\x1b[38;5;234;48;5;100m\x1b[38;5;235;48;5;143m\x1b[38;5;233;48;5;106m\x1b[38;5;234;48;5;236m\x1b[38;5;235;48;5;234m\x1b[38;5;3;48;5;237m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;184;48;5;184m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[48;5;185m \x1b[38;5;230;48;5;230m\x1b[48;5;242m \x1b[48;5;233m \x1b[48;5;234m \x1b[38;5;235;48;5;235m\x1b[m
\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[48;5;253m \x1b[38;5;186;48;5;186m\x1b[38;5;221;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;221;48;5;227m\x1b[38;5;3;48;5;94m\x1b[38;5;185;48;5;142m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;142m\x1b[38;5;178;48;5;58m\x1b[38;5;185;48;5;236m\x1b[38;5;221;48;5;142m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;142m\x1b[38;5;185;48;5;58m\x1b[38;5;179;48;5;236m\x1b[38;5;179;48;5;235m\x1b[38;5;185;48;5;236m\x1b[38;5;184;48;5;58m\x1b[38;5;227;48;5;100m\x1b[38;5;11;48;5;185m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;221;48;5;185m\x1b[38;5;58;48;5;58m\x1b[38;5;184;48;5;184m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[48;5;233m \x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[m
\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;234m\x1b[48;5;235m \x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;184;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;221m\x1b[38;5;58;48;5;58m\x1b[38;5;3;48;5;142m\x1b[38;5;100;48;5;227m\x1b[38;5;100;48;5;11m\x1b[38;5;136;48;5;11m\x1b[38;5;136;48;5;220m\x1b[38;5;100;48;5;11m\x1b[38;5;136;48;5;11m\x1b[38;5;100;48;5;11m\x1b[38;5;100;48;5;227m\x1b[38;5;100;48;5;11m\x1b[38;5;136;48;5;11m\x1b[38;5;100;48;5;11m\x1b[38;5;100;48;5;185m\x1b[38;5;58;48;5;58m\x1b[38;5;178;48;5;178m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;179;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[48;5;235m \x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;184;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;142m\x1b[38;5;11;48;5;100m\x1b[38;5;11;48;5;136m\x1b[38;5;11;48;5;100m\x1b[38;5;227;48;5;100m\x1b[38;5;11;48;5;100m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[48;5;230m \x1b[38;5;242;48;5;242m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[48;5;234m \x1b[m
\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;253;48;5;253m\x1b[38;5;186;48;5;186m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;220;48;5;11m\x1b[38;5;11;48;5;11m\x1b[48;5;11m \x1b[38;5;11;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;230;48;5;230m\x1b[38;5;242;48;5;242m\x1b[38;5;234;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;254;48;5;254m\x1b[38;5;186;48;5;186m\x1b[38;5;221;48;5;185m\x1b[38;5;11;48;5;11m\x1b[38;5;11;48;5;220m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;179;48;5;185m\x1b[38;5;255;48;5;229m\x1b[38;5;242;48;5;243m\x1b[38;5;233;48;5;234m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;247;48;5;252m\x1b[38;5;230;48;5;187m\x1b[38;5;143;48;5;185m\x1b[38;5;185;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;11;48;5;11m\x1b[38;5;227;48;5;11m\x1b[38;5;185;48;5;11m\x1b[38;5;185;48;5;185m\x1b[38;5;186;48;5;143m\x1b[38;5;252;48;5;230m\x1b[38;5;237;48;5;241m\x1b[38;5;234;48;5;233m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;239m\x1b[38;5;59;48;5;188m\x1b[38;5;251;48;5;229m\x1b[38;5;254;48;5;185m\x1b[38;5;230;48;5;179m\x1b[38;5;224;48;5;185m\x1b[38;5;230;48;5;185m\x1b[38;5;255;48;5;185m\x1b[38;5;230;48;5;185m\x1b[38;5;229;48;5;185m\x1b[38;5;255;48;5;179m\x1b[38;5;230;48;5;143m\x1b[38;5;252;48;5;186m\x1b[38;5;8;48;5;230m\x1b[38;5;235;48;5;8m\x1b[38;5;233;48;5;233m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;240m\x1b[38;5;234;48;5;243m\x1b[38;5;234;48;5;242m\x1b[38;5;233;48;5;242m\x1b[38;5;234;48;5;242m\x1b[38;5;234;48;5;241m\x1b[38;5;234;48;5;242m\x1b[38;5;233;48;5;241m\x1b[38;5;234;48;5;237m\x1b[38;5;235;48;5;233m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[m
\x1b[38;5;235;48;5;235m\x1b[38;5;235;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;234;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;233m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;235m\x1b[38;5;234;48;5;234m\x1b[38;5;235;48;5;234m\x1b[38;5;235;48;5;235m\x1b[m
";
pub async fn handle(session: &ListenerSession, source: String, pool: &DBPool) -> DResult<()> {
pool.start_session(
@ -45,8 +45,8 @@ pub async fn handle(session: &ListenerSession, source: String, pool: &DBPool) ->
.await?;
pool.queue_for_session(&session, Some(&(ansi!("\
Welcome to <red>BlastMud<reset> - a text-based post-apocalyptic \
game <bold>restricted to adults (18+)<reset>\r\n").to_owned() + AUS_RATING_SYMBOL + ansi!("\r\n\
Restricted to 18 and over. High impact violence. Online interactivity.\r\n\
game\r\n").to_owned() + AUS_RATING_SYMBOL + ansi!("\r\n\
Parental guidance recommended. Violence. Online interactivity.\r\n\
\r\n\
Some commands to get you started:\r\n\
\t<bold>register <lt>username> <lt>password> <lt>email><reset> to register as a new user.\r\n\

View File

@ -8,8 +8,8 @@ use chrono::Utc;
pub struct Verb;
static REQUIRED_AGREEMENTS: [&str;4] = [
"I acknowledge that BlastMud is for adults only, and certify that I am over 18 years of age \
(or any higher relevant age of majority in my country) and want to view this content.",
"I acknowledge that I am over 12 years of age, and that if I am under 16 years of age, I have permission \
from a parent or legal guardian to play the game.",
"THIS GAME IS PROVIDED BY THE CREATORS, STAFF, VOLUNTEERS 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 CREATORS, STAFF, VOLUNTEERS OR \
@ -25,7 +25,11 @@ static REQUIRED_AGREEMENTS: [&str;4] = [
is personally identifying information, or is objectionable or abhorrent (including, without \
limitation, any content related to sexual violence, real or fictional children under 18, bestiality, \
the promotion or glorification of proscribed drug use, or fetishes that involve degrading or \
inflicting pain on someone for the enjoyment of others). I agree to defend, indemnify, and hold \
inflicting pain on someone for the enjoyment of others), or which promotes terrorism. \
I acknowledge that the game and services provided in connection with it are open to players under \
18 years of age, and agree that I will not send any sexual or age-restricted content to any player \
I have not verified is over 18, nor attempt to groom any such player for sexual activity at a later time. \
I agree to defend, indemnify, and hold \
harmless the creators, staff, volunteers and contributors in any matter relating to content sent \
(or re-sent) by me, in any matter arising from the game sending content to me, and in any matter \
consequential to sharing my password, using an insecure password, or otherwise allowing or taking \